ng-wsl-library 0.22.0 → 0.23.0

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.
@@ -194,6 +194,10 @@ export class WslDatetimePickerComponent {
194
194
  if (!containerElement || !calendarElement)
195
195
  return;
196
196
  const containerRect = containerElement.getBoundingClientRect();
197
+ const positioningContainer = containerElement.querySelector('.datetime-picker-container');
198
+ const positioningRect = positioningContainer
199
+ ? positioningContainer.getBoundingClientRect()
200
+ : containerRect;
197
201
  const calendarIconElement = containerElement.querySelector('.calendar-icon');
198
202
  const iconRect = calendarIconElement?.getBoundingClientRect() || containerRect;
199
203
  const viewportWidth = window.innerWidth;
@@ -204,7 +208,7 @@ export class WslDatetimePickerComponent {
204
208
  : calendarElement.offsetWidth || 350;
205
209
  const calendarHeight = calendarElement.offsetHeight || 400;
206
210
  if (isMobile) {
207
- this.applyMobilePositioning(calendarElement, iconRect, viewportWidth, calendarWidth);
211
+ this.applyMobilePositioning(calendarElement, iconRect, positioningRect, viewportWidth, calendarWidth);
208
212
  const verticalClass = this.getVerticalPositionClass(containerRect, viewportHeight, calendarHeight);
209
213
  this.calendarPositionClass = verticalClass;
210
214
  }
@@ -218,20 +222,28 @@ export class WslDatetimePickerComponent {
218
222
  this.cdr.markForCheck();
219
223
  }, 0);
220
224
  }
221
- applyMobilePositioning(element, iconRect, viewportWidth, calendarWidth) {
225
+ applyMobilePositioning(element, iconRect, containerRect, viewportWidth, calendarWidth) {
222
226
  const padding = 16;
223
227
  const wouldOverflowRight = iconRect.right + calendarWidth + padding > viewportWidth;
224
228
  const wouldOverflowLeft = iconRect.left - calendarWidth - padding < 0;
229
+ const minCalendarWidth = 280;
230
+ element.style.position = 'absolute';
231
+ element.style.transform = '';
225
232
  if (wouldOverflowRight && wouldOverflowLeft) {
226
- element.style.left = `${(viewportWidth - calendarWidth) / 2}px`;
233
+ const centeredLeft = (viewportWidth - calendarWidth) / 2;
234
+ const parentRelativeLeft = centeredLeft - containerRect.left;
235
+ const minRelativeLeft = 16 - containerRect.left;
236
+ element.style.left = `${Math.max(minRelativeLeft, parentRelativeLeft)}px`;
227
237
  element.style.right = 'auto';
228
238
  }
229
239
  else if (wouldOverflowRight) {
240
+ const rightOffset = containerRect.right - (viewportWidth - padding);
230
241
  element.style.left = 'unset';
231
- element.style.right = '0';
242
+ element.style.right = `${Math.max(0, rightOffset)}px`;
232
243
  }
233
244
  else if (wouldOverflowLeft) {
234
- element.style.left = '0';
245
+ const parentRelativeLeft = 16 - containerRect.left;
246
+ element.style.left = `${parentRelativeLeft}px`;
235
247
  element.style.right = 'unset';
236
248
  }
237
249
  else {
@@ -239,13 +251,13 @@ export class WslDatetimePickerComponent {
239
251
  element.style.right = '0';
240
252
  }
241
253
  element.style.maxWidth = `${calendarWidth}px`;
242
- element.style.transform = 'translateY(-10px)';
243
254
  }
244
255
  clearInlineStyles(element) {
245
256
  element.style.left = '';
246
257
  element.style.right = '';
247
258
  element.style.maxWidth = '';
248
259
  element.style.transform = '';
260
+ element.style.position = '';
249
261
  }
250
262
  updateCalendarTransforms(isShow) {
251
263
  const containerElement = this.elRef.nativeElement;
@@ -890,4 +902,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
890
902
  type: HostListener,
891
903
  args: ['window:scroll', ['$event']]
892
904
  }] } });
893
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3NsLWRhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy13c2wtbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvd3NsLWRhdGV0aW1lLXBpY2tlci93c2wtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXdzbC1saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy93c2wtZGF0ZXRpbWUtcGlja2VyL3dzbC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QixPQUFPLEVBQ0wsYUFBYSxHQUlkLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFFWixLQUFLLEVBSUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSXBFLE9BQU8sRUFBRSxjQUFjLEVBQTJCLE1BQU0sdUJBQXVCLENBQUM7QUFDaEYsT0FBTyxFQUNMLFVBQVUsRUFDVixrQkFBa0IsR0FDbkIsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7O0FBK0JuRCxNQUFNLE9BQU8sMEJBQTBCO0lBbUdyQyxZQUNVLEdBQWEsRUFDYixhQUErQixFQUMvQixHQUFzQixFQUN0QixLQUFpQjtRQUhqQixRQUFHLEdBQUgsR0FBRyxDQUFVO1FBQ2Isa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFVBQUss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QU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFLRixZQUFZO3NCQURmLEtBQUs7Z0JBc0JJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQXNCSCxjQUFjO3NCQURqQixLQUFLO2dCQVlGLE9BQU87c0JBRFYsS0FBSztnQkF5Q04sZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW1CMUMsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFRekMsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vb3AgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERhdGVUaW1lTW9kZWwsXG4gIFdzbERhdGVTdHJ1Y3QsXG4gIFdzbERhdGVUaW1lU3RydWN0LFxuICBXc2xUaW1lU3RydWN0LFxufSBmcm9tICcuLi8uLi9tb2RlbHMvd3NsLWRhdGUtdGltZS5tb2RlbCc7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIE5nQ29udHJvbCxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXREYXRlRm9ybWF0Q29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3dzbC1kYXRlLWZvcm1hdHMnO1xuaW1wb3J0IHsgRGF0ZUZvcm1hdENvbmZpZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGF0ZS1mb3JtYXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFdzbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWcvd3NsLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudERhdGUsIGdldEN1cnJlbnREYXRlVGltZU1vZGVsIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGF0ZS10aW1lJztcbmltcG9ydCB7XG4gIFRJTUVfU1RFUFMsXG4gIElOUFVUX0RBVEVfRk9STUFUUyxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RhdGV0aW1lLXBpY2tlci5jb25zdGFudHMnO1xuXG4vLyBXU0wgaW50ZXJmYWNlcyBmb3IgY29tcG9uZW50LXNwZWNpZmljIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIFdzbERhdGVwaWNrZXJOYXZpZ2F0ZUV2ZW50IHtcbiAgY3VycmVudDogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXIgfTtcbiAgbmV4dDogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXIgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckRheSB7XG4gIGRheTogbnVtYmVyO1xuICBtb250aDogbnVtYmVyO1xuICB5ZWFyOiBudW1iZXI7XG4gIG90aGVyTW9udGg6IGJvb2xlYW47XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgdG9kYXk6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dzbC1kYXRldGltZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vd3NsLWRhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dzbC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gV3NsRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgV3NsRGF0ZXRpbWVQaWNrZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlc1xue1xuICBASW5wdXQoKSBkYXRlU3RyaW5nITogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2lucHV0RGF0ZXRpbWVGb3JtYXQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgaW5wdXREYXRldGltZUZvcm1hdCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRoaXMuX2lucHV0RGF0ZXRpbWVGb3JtYXQgPT09IHZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5faW5wdXREYXRldGltZUZvcm1hdCA9IHZhbHVlO1xuICAgIHRoaXMuc2NoZWR1bGVVcGRhdGUoKTtcbiAgfVxuXG4gIGdldCBpbnB1dERhdGV0aW1lRm9ybWF0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0RGF0ZXRpbWVGb3JtYXQ7XG4gIH1cblxuICBASW5wdXQoKSBob3Vyc1N0ZXA6IG51bWJlciA9IFRJTUVfU1RFUFMuSE9VUlM7XG4gIEBJbnB1dCgpIG1pbnV0ZXNTdGVwOiBudW1iZXIgPSBUSU1FX1NURVBTLk1JTlVURVM7XG4gIEBJbnB1dCgpIHNlY29uZHNTdGVwOiBudW1iZXIgPSBUSU1FX1NURVBTLlNFQ09ORFM7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1heERhdGU6IFdzbERhdGVTdHJ1Y3Q7XG4gIEBJbnB1dCgpIG1pbkRhdGU6IFdzbERhdGVTdHJ1Y3Q7XG4gIEBJbnB1dCgpIGRpc2FibGVDYWxlbmRhciA9IGZhbHNlO1xuICBASW5wdXQoKSBjYWxlbmRhclBvc2l0aW9uOiAnc3RhdGljJyB8ICdkeW5hbWljJyA9ICdkeW5hbWljJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2FsbG93ZWREYXRlcyE6IFdzbERhdGVTdHJ1Y3RbXTtcblxuICBASW5wdXQoKVxuICBzZXQgYWxsb3dlZERhdGVzKHZhbHVlOiBXc2xEYXRlU3RydWN0W10pIHtcbiAgICB0aGlzLl9hbGxvd2VkRGF0ZXMgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5faXNJbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGFsbG93ZWREYXRlcygpOiBXc2xEYXRlU3RydWN0W10ge1xuICAgIHJldHVybiB0aGlzLl9hbGxvd2VkRGF0ZXM7XG4gIH1cblxuICBpbnRlcm5hbEZvcm1hdDogc3RyaW5nID0gSU5QVVRfREFURV9GT1JNQVRTLkRBVEVfT05MWTtcbiAgcHJpdmF0ZSBfc3RhbmRhcmRGb3JtYXQ6IHN0cmluZyA9IElOUFVUX0RBVEVfRk9STUFUUy5FVV9EQVRFX0RBU0g7XG5cbiAgX3BsYWNlaG9sZGVyID0gJyc7XG4gIHN0YXJ0RGF0ZTogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXIgfSA9IHsgeWVhcjogMCwgbW9udGg6IDAgfTtcbiAgc2hvd1RpbWVQaWNrZXJUb2dnbGUgPSBmYWxzZTtcbiAgZGF0ZXRpbWU6IERhdGVUaW1lTW9kZWwgPSBuZXcgRGF0ZVRpbWVNb2RlbCgpO1xuICBuZ0NvbnRyb2w6IE5nQ29udHJvbCB8IG51bGwgPSBudWxsO1xuICBkYXRlQ29uZmlnITogRGF0ZUZvcm1hdENvbmZpZztcblxuICBAT3V0cHV0KCkgbW9udGhDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBjYWxlbmRhclN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgb25DaGFuZ2U6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIGxhbmd1YWdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgc2hvd1RpbWVDb250cm9scyA9IGZhbHNlO1xuICBwcml2YXRlIF9zZWNvbmRzID0gZmFsc2U7XG4gIHByaXZhdGUgX3VwZGF0ZVBlbmRpbmcgPSBmYWxzZTtcblxuICBzaG93Q2FsZW5kYXIgPSBmYWxzZTtcbiAgY3VycmVudFllYXI6IG51bWJlcjtcbiAgY3VycmVudE1vbnRoOiBudW1iZXI7XG4gIGNhbGVuZGFyRGF5czogQ2FsZW5kYXJEYXlbXSA9IFtdO1xuICB3ZWVrZGF5TGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNhbGVuZGFyUG9zaXRpb25DbGFzcyA9ICcnO1xuXG4gIG1vbnRoczogc3RyaW5nW10gPSBbXTtcbiAgeWVhcnM6IG51bWJlcltdID0gW107XG4gIGRlZmF1bHRZZWFyUmFuZ2UgPSB7IHN0YXJ0OiAyMDAwLCBlbmQ6IDIwNTAgfTtcblxuICBASW5wdXQoKVxuICBzZXQgc3RhbmRhcmRGb3JtYXQodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLl9zdGFuZGFyZEZvcm1hdCA9PT0gdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLl9zdGFuZGFyZEZvcm1hdCA9IHZhbHVlO1xuICAgIHRoaXMuc2NoZWR1bGVVcGRhdGUoKTtcbiAgfVxuXG4gIGdldCBzdGFuZGFyZEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGFuZGFyZEZvcm1hdDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBzZWNvbmRzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX3NlY29uZHMgPT09IHZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5fc2Vjb25kcyA9IHZhbHVlO1xuICAgIHRoaXMuc2NoZWR1bGVVcGRhdGUoKTtcbiAgfVxuXG4gIGdldCBzZWNvbmRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWNvbmRzO1xuICB9XG5cbiAgaXNEYXRlT25seSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IFdzbENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgY29uc3QgY3VycmVudERhdGUgPSBnZXRDdXJyZW50RGF0ZSgpO1xuICAgIHRoaXMuY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyO1xuICAgIHRoaXMuY3VycmVudE1vbnRoID0gY3VycmVudERhdGUubW9udGg7XG5cbiAgICB0aGlzLmRhdGVDb25maWcgPSBnZXREYXRlRm9ybWF0Q29uZmlnKCdlbicpO1xuXG4gICAgdGhpcy5sYW5ndWFnZVN1YnNjcmlwdGlvbiA9IHRoaXMuY29uZmlnU2VydmljZVxuICAgICAgLndhdGNoTGFuZ3VhZ2UoKVxuICAgICAgLnN1YnNjcmliZSgobGFuZ3VhZ2UpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmRhdGVDb25maWcgPSBnZXREYXRlRm9ybWF0Q29uZmlnKGxhbmd1YWdlIHx8ICdlbicpO1xuICAgICAgICAgIHRoaXMudXBkYXRlV2Vla2RheUxhYmVscygpO1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLmRhdGVDb25maWcgPSBnZXREYXRlRm9ybWF0Q29uZmlnKCdlbicpO1xuICAgICAgICAgIHRoaXMudXBkYXRlV2Vla2RheUxhYmVscygpO1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaG93Q2FsZW5kYXIpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGNhbGVuZGFyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jYWxlbmRhci1wb3BvdmVyJyk7XG4gICAgICBjb25zdCBidXR0b25FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNhbGVuZGFyLWljb24nKTtcblxuICAgICAgaWYgKFxuICAgICAgICBjYWxlbmRhckVsZW1lbnQgJiZcbiAgICAgICAgYnV0dG9uRWxlbWVudCAmJlxuICAgICAgICAhY2FsZW5kYXJFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkgJiZcbiAgICAgICAgIWJ1dHRvbkVsZW1lbnQuY29udGFpbnModGFyZ2V0KVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBvbldpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaG93Q2FsZW5kYXIgJiYgdGhpcy5jYWxlbmRhclBvc2l0aW9uID09PSAnZHluYW1pYycpIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlRHluYW1pY1Bvc2l0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFsnJGV2ZW50J10pXG4gIG9uV2luZG93U2Nyb2xsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNob3dDYWxlbmRhciAmJiB0aGlzLmNhbGVuZGFyUG9zaXRpb24gPT09ICdkeW5hbWljJykge1xuICAgICAgdGhpcy5jYWxjdWxhdGVEeW5hbWljUG9zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5qLmdldChOZ0NvbnRyb2wpO1xuICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUxhbmd1YWdlQ29uZmlndXJhdGlvbigpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZU1vbnRoc0FuZFllYXJzKCk7XG4gICAgdGhpcy51cGRhdGVXZWVrZGF5TGFiZWxzKCk7XG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMYW5ndWFnZUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRMYW5ndWFnZSA9IHRoaXMuY29uZmlnU2VydmljZS5sYW5ndWFnZTtcbiAgICAgIHRoaXMuZGF0ZUNvbmZpZyA9IGdldERhdGVGb3JtYXRDb25maWcoY3VycmVudExhbmd1YWdlIHx8ICdlbicpO1xuICAgICAgdGhpcy51cGRhdGVDb25maWd1cmF0aW9uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZGF0ZUNvbmZpZyA9IGdldERhdGVGb3JtYXRDb25maWcoJ2VuJyk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZ3VyYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ21pbkRhdGUnXSB8fCBjaGFuZ2VzWydtYXhEYXRlJ10pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZU1vbnRoc0FuZFllYXJzKCk7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snYWxsb3dlZERhdGVzJ10pIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxhbmd1YWdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmxhbmd1YWdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQ2FsZW5kYXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLmRpc2FibGVDYWxlbmRhcikge1xuICAgICAgdGhpcy5zaG93Q2FsZW5kYXIgPSAhdGhpcy5zaG93Q2FsZW5kYXI7XG4gICAgICBpZiAodGhpcy5zaG93Q2FsZW5kYXIpIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGVuZGFyUG9zaXRpb24gPT09ICdkeW5hbWljJykge1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlRHluYW1pY1Bvc2l0aW9uKCk7XG4gICAgICAgICAgLy8gVXBkYXRlIHRyYW5zZm9ybXMgZm9yIHNob3cgc3RhdGVcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlQ2FsZW5kYXJUcmFuc2Zvcm1zKHRydWUpLCAxMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jYWxlbmRhclBvc2l0aW9uQ2xhc3MgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbGVuZGFyU3RhdGVDaGFuZ2UuZW1pdCh0aGlzLnNob3dDYWxlbmRhcik7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gZmFsc2U7XG4gICAgdGhpcy5zaG93VGltZVBpY2tlclRvZ2dsZSA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNhbGVuZGFyU3RhdGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZUR5bmFtaWNQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBjYWxlbmRhckVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLmNhbGVuZGFyLXBvcG92ZXInXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICBpZiAoIWNvbnRhaW5lckVsZW1lbnQgfHwgIWNhbGVuZGFyRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNhbGVuZGFySWNvbkVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcuY2FsZW5kYXItaWNvbidcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBpY29uUmVjdCA9XG4gICAgICAgIGNhbGVuZGFySWNvbkVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHx8IGNvbnRhaW5lclJlY3Q7XG4gICAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgIGNvbnN0IGlzTW9iaWxlID0gdmlld3BvcnRXaWR0aCA8PSA1NzY7XG5cbiAgICAgIGNvbnN0IGNhbGVuZGFyV2lkdGggPSBpc01vYmlsZVxuICAgICAgICA/IE1hdGgubWluKGNhbGVuZGFyRWxlbWVudC5vZmZzZXRXaWR0aCB8fCAzNTAsIHZpZXdwb3J0V2lkdGggLSAzMilcbiAgICAgICAgOiBjYWxlbmRhckVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMzUwO1xuICAgICAgY29uc3QgY2FsZW5kYXJIZWlnaHQgPSBjYWxlbmRhckVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDQwMDtcblxuICAgICAgaWYgKGlzTW9iaWxlKSB7XG4gICAgICAgIHRoaXMuYXBwbHlNb2JpbGVQb3NpdGlvbmluZyhcbiAgICAgICAgICBjYWxlbmRhckVsZW1lbnQsXG4gICAgICAgICAgaWNvblJlY3QsXG4gICAgICAgICAgdmlld3BvcnRXaWR0aCxcbiAgICAgICAgICBjYWxlbmRhcldpZHRoXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsQ2xhc3MgPSB0aGlzLmdldFZlcnRpY2FsUG9zaXRpb25DbGFzcyhcbiAgICAgICAgICBjb250YWluZXJSZWN0LFxuICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0LFxuICAgICAgICAgIGNhbGVuZGFySGVpZ2h0XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJQb3NpdGlvbkNsYXNzID0gdmVydGljYWxDbGFzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xlYXJJbmxpbmVTdHlsZXMoY2FsZW5kYXJFbGVtZW50KTtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbENsYXNzID0gdGhpcy5nZXRIb3Jpem9udGFsUG9zaXRpb25DbGFzcyhcbiAgICAgICAgICBjb250YWluZXJSZWN0LFxuICAgICAgICAgIHZpZXdwb3J0V2lkdGgsXG4gICAgICAgICAgY2FsZW5kYXJXaWR0aCxcbiAgICAgICAgICBpc01vYmlsZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbENsYXNzID0gdGhpcy5nZXRWZXJ0aWNhbFBvc2l0aW9uQ2xhc3MoXG4gICAgICAgICAgY29udGFpbmVyUmVjdCxcbiAgICAgICAgICB2aWV3cG9ydEhlaWdodCxcbiAgICAgICAgICBjYWxlbmRhckhlaWdodFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNhbGVuZGFyUG9zaXRpb25DbGFzcyA9XG4gICAgICAgICAgYCR7aG9yaXpvbnRhbENsYXNzfSAke3ZlcnRpY2FsQ2xhc3N9YC50cmltKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlNb2JpbGVQb3NpdGlvbmluZyhcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICBpY29uUmVjdDogRE9NUmVjdCxcbiAgICB2aWV3cG9ydFdpZHRoOiBudW1iZXIsXG4gICAgY2FsZW5kYXJXaWR0aDogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHBhZGRpbmcgPSAxNjtcbiAgICBjb25zdCB3b3VsZE92ZXJmbG93UmlnaHQgPVxuICAgICAgaWNvblJlY3QucmlnaHQgKyBjYWxlbmRhcldpZHRoICsgcGFkZGluZyA+IHZpZXdwb3J0V2lkdGg7XG4gICAgY29uc3Qgd291bGRPdmVyZmxvd0xlZnQgPSBpY29uUmVjdC5sZWZ0IC0gY2FsZW5kYXJXaWR0aCAtIHBhZGRpbmcgPCAwO1xuXG4gICAgaWYgKHdvdWxkT3ZlcmZsb3dSaWdodCAmJiB3b3VsZE92ZXJmbG93TGVmdCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7KHZpZXdwb3J0V2lkdGggLSBjYWxlbmRhcldpZHRoKSAvIDJ9cHhgO1xuICAgICAgZWxlbWVudC5zdHlsZS5yaWdodCA9ICdhdXRvJztcbiAgICB9IGVsc2UgaWYgKHdvdWxkT3ZlcmZsb3dSaWdodCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gJ3Vuc2V0JztcbiAgICAgIGVsZW1lbnQuc3R5bGUucmlnaHQgPSAnMCc7XG4gICAgfSBlbHNlIGlmICh3b3VsZE92ZXJmbG93TGVmdCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gJzAnO1xuICAgICAgZWxlbWVudC5zdHlsZS5yaWdodCA9ICd1bnNldCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9ICd1bnNldCc7XG4gICAgICBlbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzAnO1xuICAgIH1cblxuICAgIGVsZW1lbnQuc3R5bGUubWF4V2lkdGggPSBgJHtjYWxlbmRhcldpZHRofXB4YDtcbiAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVZKC0xMHB4KSc7XG4gIH1cblxuICBwcml2YXRlIGNsZWFySW5saW5lU3R5bGVzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gJyc7XG4gICAgZWxlbWVudC5zdHlsZS5yaWdodCA9ICcnO1xuICAgIGVsZW1lbnQuc3R5bGUubWF4V2lkdGggPSAnJztcbiAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDYWxlbmRhclRyYW5zZm9ybXMoaXNTaG93OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lckVsZW1lbnQpIHJldHVybjtcblxuICAgIGNvbnN0IGNhbGVuZGFyRWxlbWVudCA9IGNvbnRhaW5lckVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcuY2FsZW5kYXItcG9wb3ZlcidcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICghY2FsZW5kYXJFbGVtZW50KSByZXR1cm47XG5cbiAgICBjb25zdCBpc01vYmlsZSA9IHdpbmRvdy5pbm5lcldpZHRoIDw9IDU3NjtcbiAgICBjb25zdCBpc1RvcFBvc2l0aW9uID0gdGhpcy5jYWxlbmRhclBvc2l0aW9uQ2xhc3MuaW5jbHVkZXMoXG4gICAgICAnY2FsZW5kYXItcG9zaXRpb24tdG9wJ1xuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBpc01vYmlsZSAmJlxuICAgICAgdGhpcy5jYWxlbmRhclBvc2l0aW9uQ2xhc3MuaW5jbHVkZXMoJ2NhbGVuZGFyLW1vYmlsZS1jZW50ZXInKVxuICAgICkge1xuICAgICAgLy8gRHluYW1pYyBtb2JpbGUgY2VudGVyaW5nIHdpdGggcHJvcGVyIHRyYW5zZm9ybXNcbiAgICAgIGlmIChpc1Nob3cpIHtcbiAgICAgICAgY2FsZW5kYXJFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGlzVG9wUG9zaXRpb25cbiAgICAgICAgICA/ICd0cmFuc2xhdGVZKDApJ1xuICAgICAgICAgIDogJ3RyYW5zbGF0ZVkoMCknO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsZW5kYXJFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGlzVG9wUG9zaXRpb25cbiAgICAgICAgICA/ICd0cmFuc2xhdGVZKDEwcHgpJ1xuICAgICAgICAgIDogJ3RyYW5zbGF0ZVkoLTEwcHgpJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEhvcml6b250YWxQb3NpdGlvbkNsYXNzKFxuICAgIGNvbnRhaW5lclJlY3Q6IERPTVJlY3QsXG4gICAgdmlld3BvcnRXaWR0aDogbnVtYmVyLFxuICAgIGNhbGVuZGFyV2lkdGg6IG51bWJlcixcbiAgICBpc01vYmlsZTogYm9vbGVhblxuICApOiBzdHJpbmcge1xuICAgIGlmIChpc01vYmlsZSkge1xuICAgICAgY29uc3QgbW9iaWxlUGFkZGluZyA9IDE2O1xuXG4gICAgICAvLyBDaGVjayBpZiBjYWxlbmRhciB3b3VsZCBvdmVyZmxvdyB3aGVuIGdyb3dpbmcgcmlnaHQgZnJvbSBpY29uIChkZWZhdWx0KVxuICAgICAgY29uc3Qgd291bGRPdmVyZmxvd1JpZ2h0ID1cbiAgICAgICAgY29udGFpbmVyUmVjdC5yaWdodCArIGNhbGVuZGFyV2lkdGggKyBtb2JpbGVQYWRkaW5nID4gdmlld3BvcnRXaWR0aDtcblxuICAgICAgLy8gQ2hlY2sgaWYgY2FsZW5kYXIgd291bGQgb3ZlcmZsb3cgd2hlbiBncm93aW5nIGxlZnQgZnJvbSBsZWZ0IGVkZ2VcbiAgICAgIGNvbnN0IHdvdWxkT3ZlcmZsb3dMZWZ0ID1cbiAgICAgICAgY29udGFpbmVyUmVjdC5sZWZ0IC0gY2FsZW5kYXJXaWR0aCAtIG1vYmlsZVBhZGRpbmcgPCAwO1xuXG4gICAgICBpZiAod291bGRPdmVyZmxvd1JpZ2h0ICYmIHdvdWxkT3ZlcmZsb3dMZWZ0KSB7XG4gICAgICAgIC8vIE5vIHNwYWNlIG9uIGVpdGhlciBzaWRlIC0gY2VudGVyIGl0XG4gICAgICAgIHJldHVybiAnY2FsZW5kYXItbW9iaWxlLWNlbnRlcic7XG4gICAgICB9XG5cbiAgICAgIGlmICghd291bGRPdmVyZmxvd1JpZ2h0KSB7XG4gICAgICAgIC8vIEZpdHMgZ3Jvd2luZyByaWdodCBmcm9tIGljb24gLSBidXQgc3RpbGwgdXNlIHJpZ2h0IGFsaWdubWVudCB0byBlbnN1cmUgcGFkZGluZ1xuICAgICAgICByZXR1cm4gJ2NhbGVuZGFyLWFsaWduLXJpZ2h0JztcbiAgICAgIH1cblxuICAgICAgLy8gV291bGQgb3ZlcmZsb3cgcmlnaHQgYnV0IGZpdHMgb24gbGVmdCAtIGFsaWduIHRvIGxlZnQgZWRnZVxuICAgICAgcmV0dXJuICdjYWxlbmRhci1hbGlnbi1sZWZ0JztcbiAgICB9XG5cbiAgICAvLyBEZXNrdG9wIGxvZ2ljXG4gICAgY29uc3Qgd291bGRPdmVyZmxvd1JpZ2h0ID1cbiAgICAgIGNvbnRhaW5lclJlY3QucmlnaHQgKyBjYWxlbmRhcldpZHRoID4gdmlld3BvcnRXaWR0aDtcblxuICAgIGlmICghd291bGRPdmVyZmxvd1JpZ2h0KSB7XG4gICAgICByZXR1cm4gJyc7IC8vIERlZmF1bHQgcG9zaXRpb25pbmcgKGdyb3dzIHJpZ2h0IGZyb20gaWNvbilcbiAgICB9XG5cbiAgICBjb25zdCBzcGFjZUxlZnQgPSBjb250YWluZXJSZWN0LmxlZnQ7XG4gICAgaWYgKHNwYWNlTGVmdCA+PSBjYWxlbmRhcldpZHRoKSB7XG4gICAgICByZXR1cm4gJ2NhbGVuZGFyLWFsaWduLWxlZnQnOyAvLyBHcm93IHJpZ2h0IGZyb20gbGVmdCBlZGdlXG4gICAgfVxuXG4gICAgcmV0dXJuICcnOyAvLyBVc2UgZGVmYXVsdCBhcyBmYWxsYmFja1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWZXJ0aWNhbFBvc2l0aW9uQ2xhc3MoXG4gICAgY29udGFpbmVyUmVjdDogRE9NUmVjdCxcbiAgICB2aWV3cG9ydEhlaWdodDogbnVtYmVyLFxuICAgIGNhbGVuZGFySGVpZ2h0OiBudW1iZXJcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBzcGFjZUJlbG93ID0gdmlld3BvcnRIZWlnaHQgLSBjb250YWluZXJSZWN0LmJvdHRvbTtcbiAgICBjb25zdCBzcGFjZUFib3ZlID0gY29udGFpbmVyUmVjdC50b3A7XG5cbiAgICBpZiAoc3BhY2VCZWxvdyA+PSBjYWxlbmRhckhlaWdodCkgcmV0dXJuICdjYWxlbmRhci1wb3NpdGlvbi1ib3R0b20nO1xuICAgIGlmIChzcGFjZUFib3ZlID49IGNhbGVuZGFySGVpZ2h0KSByZXR1cm4gJ2NhbGVuZGFyLXBvc2l0aW9uLXRvcCc7XG4gICAgcmV0dXJuIHNwYWNlQmVsb3cgPj0gc3BhY2VBYm92ZVxuICAgICAgPyAnY2FsZW5kYXItcG9zaXRpb24tYm90dG9tJ1xuICAgICAgOiAnY2FsZW5kYXItcG9zaXRpb24tdG9wJztcbiAgfVxuXG4gIG5hdmlnYXRlTW9udGgoZGlyZWN0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRNb250aCArPSBkaXJlY3Rpb247XG4gICAgaWYgKHRoaXMuY3VycmVudE1vbnRoID4gMTIpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gMTtcbiAgICAgIHRoaXMuY3VycmVudFllYXIrKztcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudE1vbnRoIDwgMSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSAxMjtcbiAgICAgIHRoaXMuY3VycmVudFllYXItLTtcbiAgICB9XG5cbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICB0aGlzLm1vbnRoQ2hhbmdlZC5lbWl0KHRoaXMuY3VycmVudE1vbnRoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNlbGVjdERhdGUoZGF5OiBDYWxlbmRhckRheSk6IHZvaWQge1xuICAgIGlmIChkYXkuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHNlbGVjdGVkRGF0ZTogV3NsRGF0ZVN0cnVjdCA9IHtcbiAgICAgIHllYXI6IGRheS55ZWFyLFxuICAgICAgbW9udGg6IGRheS5tb250aCxcbiAgICAgIGRheTogZGF5LmRheSxcbiAgICB9O1xuXG4gICAgdGhpcy5vbkRhdGVDaGFuZ2Uoc2VsZWN0ZWREYXRlKTtcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdlbmVyYXRlQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRZZWFyLCB0aGlzLmN1cnJlbnRNb250aCAtIDEsIDEpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKGZpcnN0RGF5KTtcbiAgICBjb25zdCB3ZWVrU3RhcnQgPSAodGhpcy5kYXRlQ29uZmlnPy53ZWVrU3RhcnQgPz8gMSkgJSA3O1xuICAgIGNvbnN0IGRheU9mV2VlayA9IChmaXJzdERheS5nZXREYXkoKSArIDcgLSB3ZWVrU3RhcnQpICUgNztcbiAgICBzdGFydERhdGUuc2V0RGF0ZShzdGFydERhdGUuZ2V0RGF0ZSgpIC0gZGF5T2ZXZWVrKTtcblxuICAgIHRoaXMuY2FsZW5kYXJEYXlzID0gW107XG4gICAgY29uc3QgdG9kYXlEYXRlID0gZ2V0Q3VycmVudERhdGUoKTtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKHRvZGF5RGF0ZS55ZWFyLCB0b2RheURhdGUubW9udGggLSAxLCB0b2RheURhdGUuZGF5KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDI7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZShzdGFydERhdGUpO1xuICAgICAgY3VycmVudERhdGUuc2V0RGF0ZShzdGFydERhdGUuZ2V0RGF0ZSgpICsgaSk7XG5cbiAgICAgIGNvbnN0IGRheVN0cnVjdDogV3NsRGF0ZVN0cnVjdCA9IHtcbiAgICAgICAgeWVhcjogY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgbW9udGg6IGN1cnJlbnREYXRlLmdldE1vbnRoKCkgKyAxLFxuICAgICAgICBkYXk6IGN1cnJlbnREYXRlLmdldERhdGUoKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNhbGVuZGFyRGF5OiBDYWxlbmRhckRheSA9IHtcbiAgICAgICAgZGF5OiBjdXJyZW50RGF0ZS5nZXREYXRlKCksXG4gICAgICAgIG1vbnRoOiBjdXJyZW50RGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgeWVhcjogY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgb3RoZXJNb250aDogY3VycmVudERhdGUuZ2V0TW9udGgoKSArIDEgIT09IHRoaXMuY3VycmVudE1vbnRoLFxuICAgICAgICBzZWxlY3RlZDogdGhpcy5pc0RhdGVTZWxlY3RlZChkYXlTdHJ1Y3QpLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5pc0RhdGVEaXNhYmxlZChkYXlTdHJ1Y3QpLFxuICAgICAgICB0b2RheTogdGhpcy5pc1NhbWVEYXRlKGN1cnJlbnREYXRlLCB0b2RheSksXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNhbGVuZGFyRGF5cy5wdXNoKGNhbGVuZGFyRGF5KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzRGF0ZVNlbGVjdGVkKGRhdGU6IFdzbERhdGVTdHJ1Y3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoXG4gICAgICB0aGlzLmRhdGV0aW1lICYmXG4gICAgICB0aGlzLmRhdGV0aW1lLnllYXIgPT09IGRhdGUueWVhciAmJlxuICAgICAgdGhpcy5kYXRldGltZS5tb250aCA9PT0gZGF0ZS5tb250aCAmJlxuICAgICAgdGhpcy5kYXRldGltZS5kYXkgPT09IGRhdGUuZGF5XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEYXRlRGlzYWJsZWQoZGF0ZTogV3NsRGF0ZVN0cnVjdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGRhdGUueWVhciwgZGF0ZS5tb250aCAtIDEsIGRhdGUuZGF5KTtcbiAgICBjb25zdCB0b2RheURhdGUgPSBnZXRDdXJyZW50RGF0ZSgpO1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUodG9kYXlEYXRlLnllYXIsIHRvZGF5RGF0ZS5tb250aCAtIDEsIHRvZGF5RGF0ZS5kYXkpO1xuICAgIHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXG4gICAgaWYgKHRoaXMubWF4RGF0ZSkge1xuICAgICAgY29uc3QgbWF4RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICB0aGlzLm1heERhdGUueWVhcixcbiAgICAgICAgdGhpcy5tYXhEYXRlLm1vbnRoIC0gMSxcbiAgICAgICAgdGhpcy5tYXhEYXRlLmRheVxuICAgICAgKTtcbiAgICAgIGlmIChzZWxlY3RlZERhdGUgPiBtYXhEYXRlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcbiAgICAgIGNvbnN0IG1pbkRhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgdGhpcy5taW5EYXRlLnllYXIsXG4gICAgICAgIHRoaXMubWluRGF0ZS5tb250aCAtIDEsXG4gICAgICAgIHRoaXMubWluRGF0ZS5kYXlcbiAgICAgICk7XG4gICAgICBpZiAoc2VsZWN0ZWREYXRlIDwgbWluRGF0ZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmFsbG93ZWREYXRlcyAmJlxuICAgICAgdGhpcy5hbGxvd2VkRGF0ZXMubGVuZ3RoID09PSAxICYmXG4gICAgICB0aGlzLmFsbG93ZWREYXRlc1swXS5kYXkgPT09IC0xXG4gICAgKSB7XG4gICAgICByZXR1cm4gc2VsZWN0ZWREYXRlID4gdG9kYXk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFsbG93ZWREYXRlcyB8fCB0aGlzLmFsbG93ZWREYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzQWxsb3dlZCA9IHRoaXMuYWxsb3dlZERhdGVzLmZpbmQoXG4gICAgICAoZGF5QWxsb3dlZCkgPT5cbiAgICAgICAgZGF5QWxsb3dlZC55ZWFyID09PSBkYXRlLnllYXIgJiZcbiAgICAgICAgZGF5QWxsb3dlZC5tb250aCA9PT0gZGF0ZS5tb250aCAmJlxuICAgICAgICBkYXlBbGxvd2VkLmRheSA9PT0gZGF0ZS5kYXlcbiAgICApO1xuXG4gICAgcmV0dXJuICFpc0FsbG93ZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzU2FtZURhdGUoZGF0ZTE6IERhdGUsIGRhdGUyOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGRhdGUxLmdldEZ1bGxZZWFyKCkgPT09IGRhdGUyLmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgIGRhdGUxLmdldE1vbnRoKCkgPT09IGRhdGUyLmdldE1vbnRoKCkgJiZcbiAgICAgIGRhdGUxLmdldERhdGUoKSA9PT0gZGF0ZTIuZ2V0RGF0ZSgpXG4gICAgKTtcbiAgfVxuXG4gIGdldE1vbnRoTmFtZShtb250aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBtb250aEluZGV4ID0gbW9udGggLSAxO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmRhdGVDb25maWc/Lm1vbnRoTmFtZXM/Llttb250aEluZGV4XSB8fFxuICAgICAgZ2V0RGF0ZUZvcm1hdENvbmZpZygnZW4nKS5tb250aE5hbWVzW21vbnRoSW5kZXhdXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlV2Vla2RheUxhYmVscygpOiB2b2lkIHtcbiAgICB0aGlzLndlZWtkYXlMYWJlbHMgPVxuICAgICAgdGhpcy5kYXRlQ29uZmlnPy53ZWVrZGF5TGFiZWxzIHx8IGdldERhdGVGb3JtYXRDb25maWcoJ2VuJykud2Vla2RheUxhYmVscztcbiAgfVxuXG4gIGFkanVzdFRpbWUoZmllbGQ6ICdob3VycycgfCAnbWludXRlcycgfCAnc2Vjb25kcycsIHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmRhdGV0aW1lW2ZpZWxkXSB8fCAwO1xuICAgIGxldCBuZXdWYWx1ZTogbnVtYmVyO1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICBuZXdWYWx1ZSA9IGN1cnJlbnRWYWx1ZSArIHN0ZXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0ZXBTaXplID0gTWF0aC5hYnMoc3RlcCk7XG4gICAgICBuZXdWYWx1ZSA9IGN1cnJlbnRWYWx1ZSAtIHN0ZXBTaXplO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICAgIGNhc2UgJ2hvdXJzJzpcbiAgICAgICAgaWYgKG5ld1ZhbHVlIDwgMCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gMjQgKyAobmV3VmFsdWUgJSAyNCk7XG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPiAyMykge1xuICAgICAgICAgIG5ld1ZhbHVlID0gbmV3VmFsdWUgJSAyNDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgIGlmIChuZXdWYWx1ZSA8IDApIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IDYwICsgKG5ld1ZhbHVlICUgNjApO1xuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlID4gNTkpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IG5ld1ZhbHVlICUgNjA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRldGltZVtmaWVsZF0gPSBuZXdWYWx1ZTtcbiAgICB0aGlzLnNldERhdGVTdHJpbmdNb2RlbCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25UaW1lRmllbGRDaGFuZ2UoXG4gICAgZmllbGQ6ICdob3VycycgfCAnbWludXRlcycgfCAnc2Vjb25kcycsXG4gICAgZXZlbnQ6IEV2ZW50XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgbGV0IHZhbHVlID0gcGFyc2VJbnQoaW5wdXQudmFsdWUsIDEwKTtcblxuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gMDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMDtcbiAgICAgICAgaWYgKHZhbHVlID4gMjMpIHZhbHVlID0gMjM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWludXRlcyc6XG4gICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAwO1xuICAgICAgICBpZiAodmFsdWUgPiA1OSkgdmFsdWUgPSA1OTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaW5wdXQudmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG5cbiAgICB0aGlzLmRhdGV0aW1lW2ZpZWxkXSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0RGF0ZVN0cmluZ01vZGVsKCk7XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlVXBkYXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNJbml0aWFsaXplZCB8fCB0aGlzLl91cGRhdGVQZW5kaW5nKSByZXR1cm47XG5cbiAgICB0aGlzLl91cGRhdGVQZW5kaW5nID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3VwZGF0ZVBlbmRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlndXJhdGlvbigpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZGV0ZWN0VGltZUNvbXBvbmVudHMoKTtcbiAgICB0aGlzLnNldFN0YW5kYXJkRm9ybWF0KCk7XG4gICAgdGhpcy5zZXRQbGFjZWhvbGRlcigpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RUaW1lQ29tcG9uZW50cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dERhdGV0aW1lRm9ybWF0KSB7XG4gICAgICBjb25zdCBoYXNUaW1lRm9ybWF0ID0gdGhpcy5oYXNUaW1lSW5Gb3JtYXQodGhpcy5pbnB1dERhdGV0aW1lRm9ybWF0KTtcblxuICAgICAgaWYgKCFoYXNUaW1lRm9ybWF0KSB7XG4gICAgICAgIHRoaXMuc2hvd1RpbWVDb250cm9scyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZWNvbmRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNEYXRlT25seSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zaG93VGltZUNvbnRyb2xzID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNEYXRlT25seSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc2Vjb25kcyA9IHRoaXMuaW5wdXREYXRldGltZUZvcm1hdC5pbmNsdWRlcygnOnNzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd1RpbWVDb250cm9scyA9IHRoaXMuX3NlY29uZHM7XG4gICAgICB0aGlzLmlzRGF0ZU9ubHkgPSAhdGhpcy5fc2Vjb25kcztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhc1RpbWVJbkZvcm1hdChmb3JtYXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBmb3JtYXQuaW5jbHVkZXMoJ0hIOicpIHx8XG4gICAgICBmb3JtYXQuaW5jbHVkZXMoJ2hoOicpIHx8XG4gICAgICBmb3JtYXQuaW5jbHVkZXMoJzptbScpIHx8XG4gICAgICBmb3JtYXQuaW5jbHVkZXMoJzpzcycpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3RhbmRhcmRGb3JtYXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbnRlcm5hbEZvcm1hdCA9XG4gICAgICB0aGlzLmlucHV0RGF0ZXRpbWVGb3JtYXQgfHwgSU5QVVRfREFURV9GT1JNQVRTLkRBVEVfT05MWTtcbiAgICB0aGlzLl9zdGFuZGFyZEZvcm1hdCA9IHRoaXMuaW50ZXJuYWxGb3JtYXQ7XG5cbiAgICBpZiAodGhpcy5zaG93VGltZUNvbnRyb2xzICYmICF0aGlzLmhhc1RpbWVJbkZvcm1hdCh0aGlzLl9zdGFuZGFyZEZvcm1hdCkpIHtcbiAgICAgIHRoaXMuX3N0YW5kYXJkRm9ybWF0ICs9IHRoaXMuX3NlY29uZHMgPyAnIEhIOm1tOnNzJyA6ICcgSEg6bW0nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGxhY2Vob2xkZXIgJiYgdGhpcy5wbGFjZWhvbGRlciAhPT0gJycpIHtcbiAgICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlci50b0xvd2VyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wbGFjZWhvbGRlciA9XG4gICAgICAgIHRoaXMuZGF0ZUNvbmZpZz8ucGxhY2Vob2xkZXI/LnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgSU5QVVRfREFURV9GT1JNQVRTLkRBVEVfT05MWS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dUaW1lQ29udHJvbHMpIHtcbiAgICAgIGlmICh0aGlzLl9wbGFjZWhvbGRlcj8uaW5jbHVkZXMoJ2hoOm1tJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wbGFjZWhvbGRlciArPSB0aGlzLl9zZWNvbmRzID8gJyBoaDptbTpzcycgOiAnIGhoOm1tJztcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKG5ld01vZGVsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAobmV3TW9kZWwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZE1vZGVsID0gRGF0ZVRpbWVNb2RlbC5mcm9tTG9jYWxTdHJpbmcobmV3TW9kZWwsIGZhbHNlKTtcblxuICAgICAgaWYgKHBhcnNlZE1vZGVsICYmIHR5cGVvZiBwYXJzZWRNb2RlbC55ZWFyID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLmRhdGV0aW1lID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB0aGlzLmRhdGV0aW1lIHx8IG5ldyBEYXRlVGltZU1vZGVsKCksXG4gICAgICAgICAgcGFyc2VkTW9kZWxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kYXRlU3RyaW5nID0gbmV3TW9kZWw7XG4gICAgICAgIHRoaXMuc2V0RGF0ZVN0cmluZ01vZGVsKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0ZXRpbWUgPSBuZXcgRGF0ZVRpbWVNb2RlbCgpO1xuICAgICAgdGhpcy5kYXRlU3RyaW5nID0gJyc7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZShldmVudDogV3NsRGF0ZXBpY2tlck5hdmlnYXRlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQ/LmN1cnJlbnQgJiYgZXZlbnQ/LmN1cnJlbnQubW9udGggIT09IGV2ZW50Py5uZXh0Lm1vbnRoKSB7XG4gICAgICB0aGlzLm1vbnRoQ2hhbmdlZC5lbWl0KGV2ZW50Py5uZXh0Lm1vbnRoKTtcbiAgICB9XG4gIH1cblxuICBpc0Rpc2FibGVkKFxuICAgIGRhdGVzOiBXc2xEYXRlU3RydWN0W11cbiAgKTogKFxuICAgIGRhdGU6IFdzbERhdGVTdHJ1Y3QsXG4gICAgY3VycmVudD86IHsgeWVhcjogbnVtYmVyOyBtb250aDogbnVtYmVyIH1cbiAgKSA9PiBib29sZWFuIHtcbiAgICByZXR1cm4gKHBpY2tlckRhdGU6IFdzbERhdGVTdHJ1Y3QpID0+IHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsQWxsb3dlZERhdGVzID0gdGhpcy5hbGxvd2VkRGF0ZXM7XG4gICAgICB0aGlzLmFsbG93ZWREYXRlcyA9IGRhdGVzO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5pc0RhdGVEaXNhYmxlZChwaWNrZXJEYXRlKTtcbiAgICAgIHRoaXMuYWxsb3dlZERhdGVzID0gb3JpZ2luYWxBbGxvd2VkRGF0ZXM7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgdG9nZ2xlRGF0ZVRpbWVTdGF0ZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNWYWxpZERhdGUoKSkge1xuICAgICAgdGhpcy5zaG93VGltZVBpY2tlclRvZ2dsZSA9ICF0aGlzLnNob3dUaW1lUGlja2VyVG9nZ2xlO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWxpbWl0ZXIoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5kYXRlQ29uZmlnPy5mb3JtYXQpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5kYXRlQ29uZmlnLmZvcm1hdC5tYXRjaCgvW15hLXpBLVowLTldLyk7XG4gICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMF0pIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoWzBdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kYXRlQ29uZmlnPy5kYXRlU2VwYXJhdG9yIHx8ICctJztcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VEYXRlKHZhbHVlOiBzdHJpbmcpOiBXc2xEYXRlU3RydWN0IHwgbnVsbCB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsaW1pdGVyID0gdGhpcy5nZXREZWxpbWl0ZXIoKTtcbiAgICBjb25zdCBkYXRlID0gdmFsdWUuc3BsaXQoZGVsaW1pdGVyKTtcblxuICAgIGlmIChkYXRlLmxlbmd0aCA8IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5kYXRlQ29uZmlnPy5kYXlGaXJzdCkge1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChkYXRlWzBdLCAxMCk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQoZGF0ZVsxXSwgMTApO1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQoZGF0ZVsyXSwgMTApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpc05hTihkYXkpIHx8XG4gICAgICAgICAgaXNOYU4obW9udGgpIHx8XG4gICAgICAgICAgaXNOYU4oeWVhcikgfHxcbiAgICAgICAgICBkYXkgPCAxIHx8XG4gICAgICAgICAgZGF5ID4gMzEgfHxcbiAgICAgICAgICBtb250aCA8IDEgfHxcbiAgICAgICAgICBtb250aCA+IDEyXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgZGF5LCBtb250aCwgeWVhciB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9ybWF0OiBJTlBVVF9EQVRFX0ZPUk1BVFMuREFURV9PTkxZICh5eXl5LU1NLWRkKVxuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQoZGF0ZVswXSwgMTApO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KGRhdGVbMV0sIDEwKTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQoZGF0ZVsyXSwgMTApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpc05hTihkYXkpIHx8XG4gICAgICAgICAgaXNOYU4obW9udGgpIHx8XG4gICAgICAgICAgaXNOYU4oeWVhcikgfHxcbiAgICAgICAgICBkYXkgPCAxIHx8XG4gICAgICAgICAgZGF5ID4gMzEgfHxcbiAgICAgICAgICBtb250aCA8IDEgfHxcbiAgICAgICAgICBtb250aCA+IDEyXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgeWVhciwgbW9udGgsIGRheSB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdERhdGUoZGF0ZTogV3NsRGF0ZVRpbWVTdHJ1Y3QgfCBudWxsKTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdGUpIHJldHVybiAnJztcblxuICAgIGNvbnN0IGRheUZvcm1hdHRlZCA9IGRhdGUuZGF5IDwgMTAgPyAnMCcgKyBkYXRlLmRheSA6IGRhdGUuZGF5LnRvU3RyaW5nKCk7XG4gICAgY29uc3QgbW9udGhGb3JtYXR0ZWQgPVxuICAgICAgZGF0ZS5tb250aCA8IDEwID8gJzAnICsgZGF0ZS5tb250aCA6IGRhdGUubW9udGgudG9TdHJpbmcoKTtcbiAgICBjb25zdCB5ZWFyRm9ybWF0dGVkID0gZGF0ZS55ZWFyLnRvU3RyaW5nKCk7XG5cbiAgICBjb25zdCBob3VyRm9ybWF0dGVkID1cbiAgICAgIGRhdGUuaG91cnMgIT0gbnVsbFxuICAgICAgICA/IGRhdGUuaG91cnMgPCAxMFxuICAgICAgICAgID8gJzAnICsgZGF0ZS5ob3Vyc1xuICAgICAgICAgIDogZGF0ZS5ob3Vycy50b1N0cmluZygpXG4gICAgICAgIDogJzAwJztcbiAgICBjb25zdCBtaW51dGVGb3JtYXR0ZWQgPVxuICAgICAgZGF0ZS5taW51dGVzICE9IG51bGxcbiAgICAgICAgPyBkYXRlLm1pbnV0ZXMgPCAxMFxuICAgICAgICAgID8gJzAnICsgZGF0ZS5taW51dGVzXG4gICAgICAgICAgOiBkYXRlLm1pbnV0ZXMudG9TdHJpbmcoKVxuICAgICAgICA6ICcwMCc7XG4gICAgY29uc3Qgc2Vjb25kRm9ybWF0dGVkID1cbiAgICAgIGRhdGUuc2Vjb25kcyAhPSBudWxsXG4gICAgICAgID8gZGF0ZS5zZWNvbmRzIDwgMTBcbiAgICAgICAgICA/ICcwJyArIGRhdGUuc2Vjb25kc1xuICAgICAgICAgIDogZGF0ZS5zZWNvbmRzLnRvU3RyaW5nKClcbiAgICAgICAgOiAnMDAnO1xuXG4gICAgY29uc3QgZm9ybWF0ID0gdGhpcy5pbnB1dERhdGV0aW1lRm9ybWF0O1xuXG4gICAgY29uc3QgdG9rZW5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgeXl5eTogeWVhckZvcm1hdHRlZCxcbiAgICAgIE1NOiBtb250aEZvcm1hdHRlZCxcbiAgICAgIGRkOiBkYXlGb3JtYXR0ZWQsXG4gICAgICBISDogaG91ckZvcm1hdHRlZCxcbiAgICAgIG1tOiBtaW51dGVGb3JtYXR0ZWQsXG4gICAgICBzczogc2Vjb25kRm9ybWF0dGVkLFxuICAgIH07XG5cbiAgICBpZiAoZm9ybWF0KSB7XG4gICAgICBjb25zdCBzb3J0ZWRUb2tlbnMgPSBPYmplY3Qua2V5cyh0b2tlbnMpLnNvcnQoXG4gICAgICAgIChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoXG4gICAgICApO1xuXG4gICAgICBsZXQgcmVzdWx0ID0gZm9ybWF0O1xuICAgICAgZm9yIChjb25zdCB0IG9mIHNvcnRlZFRva2Vucykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShuZXcgUmVnRXhwKHQsICdnJyksIHRva2Vuc1t0XSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgbGV0IGZvcm1hdHRlZERhdGUgPSBgJHt5ZWFyRm9ybWF0dGVkfS0ke21vbnRoRm9ybWF0dGVkfS0ke2RheUZvcm1hdHRlZH1gO1xuICAgIGlmIChkYXRlLmhvdXJzICE9IG51bGwpIHtcbiAgICAgIGZvcm1hdHRlZERhdGUgKz0gYCAke2hvdXJGb3JtYXR0ZWR9OiR7bWludXRlRm9ybWF0dGVkfWA7XG4gICAgfVxuICAgIGlmIChkYXRlLnNlY29uZHMgIT0gbnVsbCkge1xuICAgICAgZm9ybWF0dGVkRGF0ZSArPSBgOiR7c2Vjb25kRm9ybWF0dGVkfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlZERhdGU7XG4gIH1cblxuICBvbklucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgIGlmICh2YWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgICB0aGlzLmRhdGV0aW1lID0gbmV3IERhdGVUaW1lTW9kZWwoKTtcbiAgICAgIHRoaXMuZGF0ZVN0cmluZyA9ICcnO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmRhdGVTdHJpbmcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZERhdGUgPSB0aGlzLnBhcnNlRGF0ZSh2YWx1ZSk7XG4gICAgaWYgKHBhcnNlZERhdGUpIHtcbiAgICAgIHRoaXMuZGF0ZXRpbWUgPSBuZXcgRGF0ZVRpbWVNb2RlbCh7XG4gICAgICAgIHllYXI6IHBhcnNlZERhdGUueWVhcixcbiAgICAgICAgbW9udGg6IHBhcnNlZERhdGUubW9udGgsXG4gICAgICAgIGRheTogcGFyc2VkRGF0ZS5kYXksXG4gICAgICAgIGhvdXJzOiB0aGlzLmRhdGV0aW1lPy5ob3VycyB8fCAwLFxuICAgICAgICBtaW51dGVzOiB0aGlzLmRhdGV0aW1lPy5taW51dGVzIHx8IDAsXG4gICAgICAgIHNlY29uZHM6IHRoaXMuZGF0ZXRpbWU/LnNlY29uZHMgfHwgMCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZXREYXRlU3RyaW5nTW9kZWwoKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGR0ID0gRGF0ZVRpbWVNb2RlbC5mcm9tTG9jYWxTdHJpbmcodmFsdWUpO1xuICAgIGlmIChkdCAmJiBkdC55ZWFyKSB7XG4gICAgICB0aGlzLmRhdGV0aW1lID0gZHQ7XG4gICAgICB0aGlzLnNldERhdGVTdHJpbmdNb2RlbCgpO1xuICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG9uRGF0ZUNoYW5nZShldmVudDogc3RyaW5nIHwgV3NsRGF0ZVN0cnVjdCk6IHZvaWQge1xuICAgIGxldCBkYXRlOiBEYXRlVGltZU1vZGVsO1xuXG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZVRpbWVNb2RlbCh0aGlzLnBhcnNlRGF0ZShldmVudCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlID0gbmV3IERhdGVUaW1lTW9kZWwoZXZlbnQpO1xuICAgIH1cblxuICAgIGlmICghZGF0ZSB8fCAhZGF0ZS55ZWFyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRhdGV0aW1lKSB7XG4gICAgICB0aGlzLmRhdGV0aW1lID0gZGF0ZTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGV0aW1lLnllYXIgPSBkYXRlLnllYXI7XG4gICAgdGhpcy5kYXRldGltZS5tb250aCA9IGRhdGUubW9udGg7XG4gICAgdGhpcy5kYXRldGltZS5kYXkgPSBkYXRlLmRheTtcblxuICAgIHRoaXMuY3VycmVudFllYXIgPSBkYXRlLnllYXI7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBkYXRlLm1vbnRoO1xuXG4gICAgdGhpcy5zdGFydERhdGUgPSB7XG4gICAgICB5ZWFyOiBkYXRlLnllYXIsXG4gICAgICBtb250aDogZGF0ZS5tb250aCxcbiAgICB9O1xuXG4gICAgdGhpcy5zZXREYXRlU3RyaW5nTW9kZWwoKTtcbiAgfVxuXG4gIHNldERhdGVTdHJpbmdNb2RlbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRldGltZSAmJiB0eXBlb2YgdGhpcy5kYXRldGltZS55ZWFyID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5kYXRlU3RyaW5nID0gdGhpcy5kYXRldGltZS50b1N0cmluZygpO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmRhdGVTdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGVTdHJpbmcgPSAnJztcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5kYXRlU3RyaW5nKTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldERpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRhdGV0aW1lICYmIHRoaXMuZGF0ZXRpbWUueWVhcikge1xuICAgICAgY29uc3QgZGF0ZVN0cnVjdDogV3NsRGF0ZVRpbWVTdHJ1Y3QgPSB7XG4gICAgICAgIHllYXI6IHRoaXMuZGF0ZXRpbWUueWVhcixcbiAgICAgICAgbW9udGg6IHRoaXMuZGF0ZXRpbWUubW9udGgsXG4gICAgICAgIGRheTogdGhpcy5kYXRldGltZS5kYXksXG4gICAgICAgIGhvdXJzOiB0aGlzLmRhdGV0aW1lLmhvdXJzLFxuICAgICAgICBtaW51dGVzOiB0aGlzLmRhdGV0aW1lLm1pbnV0ZXMsXG4gICAgICAgIHNlY29uZHM6IHRoaXMuZGF0ZXRpbWUuc2Vjb25kcyxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGUoZGF0ZVN0cnVjdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaW5wdXRCbHVyKCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBnZXRFZmZlY3RpdmVGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBsZXQgZm9ybWF0ID0gdGhpcy5pbnB1dERhdGV0aW1lRm9ybWF0IHx8IElOUFVUX0RBVEVfRk9STUFUUy5EQVRFX09OTFk7XG5cbiAgICBpZiAodGhpcy5zaG93VGltZUNvbnRyb2xzICYmICF0aGlzLmhhc1RpbWVJbkZvcm1hdChmb3JtYXQpKSB7XG4gICAgICBmb3JtYXQgKz0gdGhpcy5fc2Vjb25kcyA/ICcgSEg6bW06c3MnIDogJyBISDptbSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuXG4gIG9uVGltZUNoYW5nZShldmVudDogV3NsVGltZVN0cnVjdCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG5cbiAgICB0aGlzLmRhdGV0aW1lID0gbmV3IERhdGVUaW1lTW9kZWwoe1xuICAgICAgLi4udGhpcy5kYXRldGltZSxcbiAgICAgIGhvdXJzOiBldmVudC5ob3VycyxcbiAgICAgIG1pbnV0ZXM6IGV2ZW50Lm1pbnV0ZXMsXG4gICAgICBzZWNvbmRzOiBldmVudC5zZWNvbmRzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZXREYXRlU3RyaW5nTW9kZWwoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGhhc1ZhbGlkRGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoXG4gICAgICB0aGlzLmRhdGV0aW1lICYmXG4gICAgICB0eXBlb2YgdGhpcy5kYXRldGltZS55ZWFyID09PSAnbnVtYmVyJyAmJlxuICAgICAgdHlwZW9mIHRoaXMuZGF0ZXRpbWUubW9udGggPT09ICdudW1iZXInICYmXG4gICAgICB0eXBlb2YgdGhpcy5kYXRldGltZS5kYXkgPT09ICdudW1iZXInXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZU1vbnRoc0FuZFllYXJzKCk6IHZvaWQge1xuICAgIHRoaXMubW9udGhzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIGkpID0+XG4gICAgICB0aGlzLmdldE1vbnRoTmFtZShpICsgMSlcbiAgICApO1xuICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMubWluRGF0ZT8ueWVhciB8fCBjdXJyZW50WWVhciAtIDUwO1xuICAgIGNvbnN0IGVuZFllYXIgPSB0aGlzLm1heERhdGU/LnllYXIgfHwgY3VycmVudFllYXIgKyA1MDtcblxuICAgIHRoaXMueWVhcnMgPSBBcnJheS5mcm9tKFxuICAgICAgeyBsZW5ndGg6IGVuZFllYXIgLSBzdGFydFllYXIgKyAxIH0sXG4gICAgICAoXywgaSkgPT4gZW5kWWVhciAtIGlcbiAgICApLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcbiAgfVxuXG4gIG9uTW9udGhTZWxlY3QoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xuICAgIGNvbnN0IG5ld01vbnRoID0gcGFyc2VJbnQoc2VsZWN0LnZhbHVlLCAxMCk7XG4gICAgaWYgKG5ld01vbnRoICE9PSB0aGlzLmN1cnJlbnRNb250aCkge1xuICAgICAgY29uc3Qgb2xkTW9udGggPSB0aGlzLmN1cnJlbnRNb250aDtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gbmV3TW9udGg7XG4gICAgICB0aGlzLm1vbnRoQ2hhbmdlZC5lbWl0KG5ld01vbnRoKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpO1xuICAgICAgdGhpcy5uYXZpZ2F0ZSh7XG4gICAgICAgIGN1cnJlbnQ6IHsgeWVhcjogdGhpcy5jdXJyZW50WWVhciwgbW9udGg6IG9sZE1vbnRoIH0sXG4gICAgICAgIG5leHQ6IHsgeWVhcjogdGhpcy5jdXJyZW50WWVhciwgbW9udGg6IG5ld01vbnRoIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblllYXJTZWxlY3QoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xuICAgIGNvbnN0IG5ld1llYXIgPSBwYXJzZUludChzZWxlY3QudmFsdWUsIDEwKTtcbiAgICBpZiAobmV3WWVhciAhPT0gdGhpcy5jdXJyZW50WWVhcikge1xuICAgICAgY29uc3Qgb2xkWWVhciA9IHRoaXMuY3VycmVudFllYXI7XG4gICAgICB0aGlzLmN1cnJlbnRZZWFyID0gbmV3WWVhcjtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpO1xuICAgICAgdGhpcy5uYXZpZ2F0ZSh7XG4gICAgICAgIGN1cnJlbnQ6IHsgeWVhcjogb2xkWWVhciwgbW9udGg6IHRoaXMuY3VycmVudE1vbnRoIH0sXG4gICAgICAgIG5leHQ6IHsgeWVhcjogbmV3WWVhciwgbW9udGg6IHRoaXMuY3VycmVudE1vbnRoIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRldGltZS1waWNrZXItY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIj5cbiAgICA8aW5wdXQgI2RhdGVJbnB1dCBbbmdDbGFzc109XCJ7XG4gICAgICAgICduZy12YWxpZCc6IG5nQ29udHJvbD8udmFsaWQgPT09IHRydWUsXG4gICAgICAgICduZy1pbnZhbGlkJzogbmdDb250cm9sPy5pbnZhbGlkID09PSB0cnVlLFxuICAgICAgICAnbmctZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgfVwiIGNsYXNzPVwiZGF0ZXRpbWUtaW5wdXRcIiAoYmx1cik9XCJpbnB1dEJsdXIoKVwiIFtwbGFjZWhvbGRlcl09XCJfcGxhY2Vob2xkZXJcIiBbbmdNb2RlbF09XCJnZXREaXNwbGF5VmFsdWUoKVwiXG4gICAgICAoY2hhbmdlKT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIHdzbFRvb2x0aXAgW3Rvb2x0aXBJY29uT3ZlcmxhcF09XCIxMlwiXG4gICAgICB0b29sdGlwUGxhY2VtZW50PVwidG9wXCIgLz5cbiAgPC9kaXY+XG5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjYWxlbmRhci1pY29uXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IGRpc2FibGVDYWxlbmRhclwiXG4gICAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZWQtYnRuJzogZGlzYWJsZWQgfHwgZGlzYWJsZUNhbGVuZGFyIH1cIiAoY2xpY2spPVwidG9nZ2xlQ2FsZW5kYXIoJGV2ZW50KVwiPlxuICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXIgZmEtbGdcIj48L2k+XG4gIDwvYnV0dG9uPlxuXG4gIDwhLS0gQ3VzdG9tIENhbGVuZGFyIFBvcG92ZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1wb3BvdmVyXCIgW2NsYXNzLnNob3ddPVwic2hvd0NhbGVuZGFyXCIgW2NsYXNzLmhpZGRlbl09XCIhc2hvd0NhbGVuZGFyXCJcbiAgICBbbmdDbGFzc109XCJjYWxlbmRhclBvc2l0aW9uQ2xhc3NcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgPGRpdiBjbGFzcz1cInBvcG92ZXItY29udGVudFwiPlxuICAgICAgPGRpdiAqbmdJZj1cIiFzaG93VGltZVBpY2tlclRvZ2dsZVwiPlxuICAgICAgICA8IS0tIEN1c3RvbSBEYXRlIFBpY2tlciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1kYXRlcGlja2VyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItaGVhZGVyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm5hdi1idG5cIiAoY2xpY2spPVwibmF2aWdhdGVNb250aCgtMSlcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnRcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC15ZWFyLXNlbGVjdHNcIj5cbiAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cIm1vbnRoLXNlbGVjdFwiIFsobmdNb2RlbCldPVwiY3VycmVudE1vbnRoXCIgKGNoYW5nZSk9XCJvbk1vbnRoU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG1vbnRoIG9mIG1vbnRoczsgbGV0IGkgPSBpbmRleFwiIFt2YWx1ZV09XCJpICsgMVwiPlxuICAgICAgICAgICAgICAgICAge3sgbW9udGggfX1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJ5ZWFyLXNlbGVjdFwiIFsobmdNb2RlbCldPVwiY3VycmVudFllYXJcIiAoY2hhbmdlKT1cIm9uWWVhclNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB5ZWFyIG9mIHllYXJzXCIgW3ZhbHVlXT1cInllYXJcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHllYXIgfX1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibmF2LWJ0blwiIChjbGljayk9XCJuYXZpZ2F0ZU1vbnRoKDEpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodFwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY2FsZW5kYXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWVrZGF5c1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2Vla2RheVwiICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla2RheUxhYmVsc1wiPlxuICAgICAgICAgICAgICAgIHt7IGRheSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5c1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5LWNlbGxcIiAqbmdGb3I9XCJsZXQgZGF5IG9mIGNhbGVuZGFyRGF5c1wiIFtjbGFzcy5vdGhlci1tb250aF09XCJkYXkub3RoZXJNb250aFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImRheS5zZWxlY3RlZFwiIFtjbGFzcy5kaXNhYmxlZF09XCJkYXkuZGlzYWJsZWRcIiBbY2xhc3MudG9kYXldPVwiZGF5LnRvZGF5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF0ZShkYXkpXCI+XG4gICAgICAgICAgICAgICAge3sgZGF5LmRheSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd1RpbWVDb250cm9scyAmJiAhaXNEYXRlT25seVwiIGNsYXNzPVwidG9nZ2xlLXRpbWUtYnRuXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNWYWxpZERhdGUoKSB8fCBkaXNhYmxlZFwiIChjbGljayk9XCJ0b2dnbGVEYXRlVGltZVN0YXRlKCRldmVudClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNsb2NrIGZhLWNsb2NrLW8gZmEtbGdcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93VGltZVBpY2tlclRvZ2dsZVwiPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd1RpbWVDb250cm9scyAmJiAhaXNEYXRlT25seVwiIGNsYXNzPVwidG9nZ2xlLWNhbGVuZGFyLWJ0blwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVEYXRlVGltZVN0YXRlKCRldmVudClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIGZhLWxnXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItY29udGFpbmVyXCIgKm5nSWY9XCJzaG93VGltZUNvbnRyb2xzICYmICFpc0RhdGVPbmx5XCI+XG4gICAgICAgICAgPCEtLSBDdXN0b20gVGltZSBQaWNrZXIgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS10aW1lcGlja2VyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1jb250cm9sc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyBkYXRlQ29uZmlnPy50b2tlbnM/LmhvdXJzIHx8IFwiSEhcIiB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidGltZS1idG5cIiAoY2xpY2spPVwiYWRqdXN0VGltZSgnaG91cnMnLCBob3Vyc1N0ZXAgfHwgMSlcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWhhc1ZhbGlkRGF0ZSgpIHx8IGRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi11cFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cInRpbWUtaW5wdXRcIiBbdmFsdWVdPVwiZGF0ZXRpbWU/LmhvdXJzIHx8IDBcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uVGltZUZpZWxkQ2hhbmdlKCdob3VycycsICRldmVudClcIiBbZGlzYWJsZWRdPVwiIWhhc1ZhbGlkRGF0ZSgpIHx8IGRpc2FibGVkXCIgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIG1heD1cIjIzXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidGltZS1idG5cIiAoY2xpY2spPVwiYWRqdXN0VGltZSgnaG91cnMnLCAtKGhvdXJzU3RlcCB8fCAxKSlcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWhhc1ZhbGlkRGF0ZSgpIHx8IGRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1kb3duXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXNlcGFyYXRvclwiPjo8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyBkYXRlQ29uZmlnPy50b2tlbnM/Lm1pbnV0ZXMgfHwgXCJtbVwiIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ0aW1lLWJ0blwiIChjbGljayk9XCJhZGp1c3RUaW1lKCdtaW51dGVzJywgbWludXRlc1N0ZXAgfHwgMSlcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWhhc1ZhbGlkRGF0ZSgpIHx8IGRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi11cFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cInRpbWUtaW5wdXRcIiBbdmFsdWVdPVwiZGF0ZXRpbWU/Lm1pbnV0ZXMgfHwgMFwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25UaW1lRmllbGRDaGFuZ2UoJ21pbnV0ZXMnLCAkZXZlbnQpXCIgW2Rpc2FibGVkXT1cIiFoYXNWYWxpZERhdGUoKSB8fCBkaXNhYmxlZFwiIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBtYXg9XCI1OVwiIC8+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInRpbWUtYnRuXCIgKGNsaWNrKT1cImFkanVzdFRpbWUoJ21pbnV0ZXMnLCAtKG1pbnV0ZXNTdGVwIHx8IDEpKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaGFzVmFsaWREYXRlKCkgfHwgZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWRvd25cIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtc2VwYXJhdG9yXCIgKm5nSWY9XCJzZWNvbmRzXCI+OjwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWZpZWxkXCIgKm5nSWY9XCJzZWNvbmRzXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsPnt7IGRhdGVDb25maWc/LnRva2Vucz8uc2Vjb25kcyB8fCBcInNzXCIgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInRpbWUtYnRuXCIgKGNsaWNrKT1cImFkanVzdFRpbWUoJ3NlY29uZHMnLCBzZWNvbmRzU3RlcCB8fCAxKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaGFzVmFsaWREYXRlKCkgfHwgZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXVwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwidGltZS1pbnB1dFwiIFt2YWx1ZV09XCJkYXRldGltZT8uc2Vjb25kcyB8fCAwXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRpbWVGaWVsZENoYW5nZSgnc2Vjb25kcycsICRldmVudClcIiBbZGlzYWJsZWRdPVwiIWhhc1ZhbGlkRGF0ZSgpIHx8IGRpc2FibGVkXCIgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIG1heD1cIjU5XCIgLz5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidGltZS1idG5cIiAoY2xpY2spPVwiYWRqdXN0VGltZSgnc2Vjb25kcycsIC0oc2Vjb25kc1N0ZXAgfHwgMSkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNWYWxpZERhdGUoKSB8fCBkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tZG93blwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIEJhY2tkcm9wIGZvciBjbG9zaW5nIHBvcG92ZXIgLS0+XG48ZGl2IGNsYXNzPVwiY2FsZW5kYXItYmFja2Ryb3BcIiBbY2xhc3Muc2hvd109XCJzaG93Q2FsZW5kYXJcIiAoY2xpY2spPVwiY2xvc2VDYWxlbmRhcigpXCI+PC9kaXY+Il19
905
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3NsLWRhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy13c2wtbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvd3NsLWRhdGV0aW1lLXBpY2tlci93c2wtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXdzbC1saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy93c2wtZGF0ZXRpbWUtcGlja2VyL3dzbC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QixPQUFPLEVBQ0wsYUFBYSxHQUlkLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFFWixLQUFLLEVBSUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSXBFLE9BQU8sRUFBRSxjQUFjLEVBQTJCLE1BQU0sdUJBQXVCLENBQUM7QUFDaEYsT0FBTyxFQUNMLFVBQVUsRUFDVixrQkFBa0IsR0FDbkIsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7O0FBK0JuRCxNQUFNLE9BQU8sMEJBQTBCO0lBbUdyQyxZQUNVLEdBQWEsRUFDYixhQUErQixFQUMvQixHQUFzQixFQUN0QixLQUFpQjtRQUhqQixRQUFHLEdBQUgsR0FBRyxDQUFVO1FBQ2Isa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFVBQUss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QUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW1CMUMsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFRekMsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vb3AgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERhdGVUaW1lTW9kZWwsXG4gIFdzbERhdGVTdHJ1Y3QsXG4gIFdzbERhdGVUaW1lU3RydWN0LFxuICBXc2xUaW1lU3RydWN0LFxufSBmcm9tICcuLi8uLi9tb2RlbHMvd3NsLWRhdGUtdGltZS5tb2RlbCc7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIE5nQ29udHJvbCxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXREYXRlRm9ybWF0Q29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3dzbC1kYXRlLWZvcm1hdHMnO1xuaW1wb3J0IHsgRGF0ZUZvcm1hdENvbmZpZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGF0ZS1mb3JtYXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFdzbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWcvd3NsLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudERhdGUsIGdldEN1cnJlbnREYXRlVGltZU1vZGVsIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGF0ZS10aW1lJztcbmltcG9ydCB7XG4gIFRJTUVfU1RFUFMsXG4gIElOUFVUX0RBVEVfRk9STUFUUyxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RhdGV0aW1lLXBpY2tlci5jb25zdGFudHMnO1xuXG4vLyBXU0wgaW50ZXJmYWNlcyBmb3IgY29tcG9uZW50LXNwZWNpZmljIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIFdzbERhdGVwaWNrZXJOYXZpZ2F0ZUV2ZW50IHtcbiAgY3VycmVudDogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXIgfTtcbiAgbmV4dDogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXIgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckRheSB7XG4gIGRheTogbnVtYmVyO1xuICBtb250aDogbnVtYmVyO1xuICB5ZWFyOiBudW1iZXI7XG4gIG90aGVyTW9udGg6IGJvb2xlYW47XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgdG9kYXk6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dzbC1kYXRldGltZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vd3NsLWRhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dzbC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gV3NsRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgV3NsRGF0ZXRpbWVQaWNrZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlc1xue1xuICBASW5wdXQoKSBkYXRlU3RyaW5nITogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2lucHV0RGF0ZXRpbWVGb3JtYXQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgaW5wdXREYXRldGltZUZvcm1hdCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRoaXMuX2lucHV0RGF0ZXRpbWVGb3JtYXQgPT09IHZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5faW5wdXREYXRldGltZUZvcm1hdCA9IHZhbHVlO1xuICAgIHRoaXMuc2NoZWR1bGVVcGRhdGUoKTtcbiAgfVxuXG4gIGdldCBpbnB1dERhdGV0aW1lRm9ybWF0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0RGF0ZXRpbWVGb3JtYXQ7XG4gIH1cblxuICBASW5wdXQoKSBob3Vyc1N0ZXA6IG51bWJlciA9IFRJTUVfU1RFUFMuSE9VUlM7XG4gIEBJbnB1dCgpIG1pbnV0ZXNTdGVwOiBudW1iZXIgPSBUSU1FX1NURVBTLk1JTlVURVM7XG4gIEBJbnB1dCgpIHNlY29uZHNTdGVwOiBudW1iZXIgPSBUSU1FX1NURVBTLlNFQ09ORFM7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1heERhdGU6IFdzbERhdGVTdHJ1Y3Q7XG4gIEBJbnB1dCgpIG1pbkRhdGU6IFdzbERhdGVTdHJ1Y3Q7XG4gIEBJbnB1dCgpIGRpc2FibGVDYWxlbmRhciA9IGZhbHNlO1xuICBASW5wdXQoKSBjYWxlbmRhclBvc2l0aW9uOiAnc3RhdGljJyB8ICdkeW5hbWljJyA9ICdkeW5hbWljJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2FsbG93ZWREYXRlcyE6IFdzbERhdGVTdHJ1Y3RbXTtcblxuICBASW5wdXQoKVxuICBzZXQgYWxsb3dlZERhdGVzKHZhbHVlOiBXc2xEYXRlU3RydWN0W10pIHtcbiAgICB0aGlzLl9hbGxvd2VkRGF0ZXMgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5faXNJbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGFsbG93ZWREYXRlcygpOiBXc2xEYXRlU3RydWN0W10ge1xuICAgIHJldHVybiB0aGlzLl9hbGxvd2VkRGF0ZXM7XG4gIH1cblxuICBpbnRlcm5hbEZvcm1hdDogc3RyaW5nID0gSU5QVVRfREFURV9GT1JNQVRTLkRBVEVfT05MWTtcbiAgcHJpdmF0ZSBfc3RhbmRhcmRGb3JtYXQ6IHN0cmluZyA9IElOUFVUX0RBVEVfRk9STUFUUy5FVV9EQVRFX0RBU0g7XG5cbiAgX3BsYWNlaG9sZGVyID0gJyc7XG4gIHN0YXJ0RGF0ZTogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXIgfSA9IHsgeWVhcjogMCwgbW9udGg6IDAgfTtcbiAgc2hvd1RpbWVQaWNrZXJUb2dnbGUgPSBmYWxzZTtcbiAgZGF0ZXRpbWU6IERhdGVUaW1lTW9kZWwgPSBuZXcgRGF0ZVRpbWVNb2RlbCgpO1xuICBuZ0NvbnRyb2w6IE5nQ29udHJvbCB8IG51bGwgPSBudWxsO1xuICBkYXRlQ29uZmlnITogRGF0ZUZvcm1hdENvbmZpZztcblxuICBAT3V0cHV0KCkgbW9udGhDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBjYWxlbmRhclN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgb25DaGFuZ2U6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIGxhbmd1YWdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgc2hvd1RpbWVDb250cm9scyA9IGZhbHNlO1xuICBwcml2YXRlIF9zZWNvbmRzID0gZmFsc2U7XG4gIHByaXZhdGUgX3VwZGF0ZVBlbmRpbmcgPSBmYWxzZTtcblxuICBzaG93Q2FsZW5kYXIgPSBmYWxzZTtcbiAgY3VycmVudFllYXI6IG51bWJlcjtcbiAgY3VycmVudE1vbnRoOiBudW1iZXI7XG4gIGNhbGVuZGFyRGF5czogQ2FsZW5kYXJEYXlbXSA9IFtdO1xuICB3ZWVrZGF5TGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNhbGVuZGFyUG9zaXRpb25DbGFzcyA9ICcnO1xuXG4gIG1vbnRoczogc3RyaW5nW10gPSBbXTtcbiAgeWVhcnM6IG51bWJlcltdID0gW107XG4gIGRlZmF1bHRZZWFyUmFuZ2UgPSB7IHN0YXJ0OiAyMDAwLCBlbmQ6IDIwNTAgfTtcblxuICBASW5wdXQoKVxuICBzZXQgc3RhbmRhcmRGb3JtYXQodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLl9zdGFuZGFyZEZvcm1hdCA9PT0gdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLl9zdGFuZGFyZEZvcm1hdCA9IHZhbHVlO1xuICAgIHRoaXMuc2NoZWR1bGVVcGRhdGUoKTtcbiAgfVxuXG4gIGdldCBzdGFuZGFyZEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGFuZGFyZEZvcm1hdDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBzZWNvbmRzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX3NlY29uZHMgPT09IHZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5fc2Vjb25kcyA9IHZhbHVlO1xuICAgIHRoaXMuc2NoZWR1bGVVcGRhdGUoKTtcbiAgfVxuXG4gIGdldCBzZWNvbmRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWNvbmRzO1xuICB9XG5cbiAgaXNEYXRlT25seSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IFdzbENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgY29uc3QgY3VycmVudERhdGUgPSBnZXRDdXJyZW50RGF0ZSgpO1xuICAgIHRoaXMuY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyO1xuICAgIHRoaXMuY3VycmVudE1vbnRoID0gY3VycmVudERhdGUubW9udGg7XG5cbiAgICB0aGlzLmRhdGVDb25maWcgPSBnZXREYXRlRm9ybWF0Q29uZmlnKCdlbicpO1xuXG4gICAgdGhpcy5sYW5ndWFnZVN1YnNjcmlwdGlvbiA9IHRoaXMuY29uZmlnU2VydmljZVxuICAgICAgLndhdGNoTGFuZ3VhZ2UoKVxuICAgICAgLnN1YnNjcmliZSgobGFuZ3VhZ2UpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmRhdGVDb25maWcgPSBnZXREYXRlRm9ybWF0Q29uZmlnKGxhbmd1YWdlIHx8ICdlbicpO1xuICAgICAgICAgIHRoaXMudXBkYXRlV2Vla2RheUxhYmVscygpO1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLmRhdGVDb25maWcgPSBnZXREYXRlRm9ybWF0Q29uZmlnKCdlbicpO1xuICAgICAgICAgIHRoaXMudXBkYXRlV2Vla2RheUxhYmVscygpO1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaG93Q2FsZW5kYXIpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGNhbGVuZGFyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jYWxlbmRhci1wb3BvdmVyJyk7XG4gICAgICBjb25zdCBidXR0b25FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNhbGVuZGFyLWljb24nKTtcblxuICAgICAgaWYgKFxuICAgICAgICBjYWxlbmRhckVsZW1lbnQgJiZcbiAgICAgICAgYnV0dG9uRWxlbWVudCAmJlxuICAgICAgICAhY2FsZW5kYXJFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkgJiZcbiAgICAgICAgIWJ1dHRvbkVsZW1lbnQuY29udGFpbnModGFyZ2V0KVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBvbldpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaG93Q2FsZW5kYXIgJiYgdGhpcy5jYWxlbmRhclBvc2l0aW9uID09PSAnZHluYW1pYycpIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlRHluYW1pY1Bvc2l0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFsnJGV2ZW50J10pXG4gIG9uV2luZG93U2Nyb2xsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNob3dDYWxlbmRhciAmJiB0aGlzLmNhbGVuZGFyUG9zaXRpb24gPT09ICdkeW5hbWljJykge1xuICAgICAgdGhpcy5jYWxjdWxhdGVEeW5hbWljUG9zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5qLmdldChOZ0NvbnRyb2wpO1xuICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUxhbmd1YWdlQ29uZmlndXJhdGlvbigpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZU1vbnRoc0FuZFllYXJzKCk7XG4gICAgdGhpcy51cGRhdGVXZWVrZGF5TGFiZWxzKCk7XG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMYW5ndWFnZUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRMYW5ndWFnZSA9IHRoaXMuY29uZmlnU2VydmljZS5sYW5ndWFnZTtcbiAgICAgIHRoaXMuZGF0ZUNvbmZpZyA9IGdldERhdGVGb3JtYXRDb25maWcoY3VycmVudExhbmd1YWdlIHx8ICdlbicpO1xuICAgICAgdGhpcy51cGRhdGVDb25maWd1cmF0aW9uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZGF0ZUNvbmZpZyA9IGdldERhdGVGb3JtYXRDb25maWcoJ2VuJyk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZ3VyYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ21pbkRhdGUnXSB8fCBjaGFuZ2VzWydtYXhEYXRlJ10pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZU1vbnRoc0FuZFllYXJzKCk7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snYWxsb3dlZERhdGVzJ10pIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxhbmd1YWdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmxhbmd1YWdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQ2FsZW5kYXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLmRpc2FibGVDYWxlbmRhcikge1xuICAgICAgdGhpcy5zaG93Q2FsZW5kYXIgPSAhdGhpcy5zaG93Q2FsZW5kYXI7XG4gICAgICBpZiAodGhpcy5zaG93Q2FsZW5kYXIpIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGVuZGFyUG9zaXRpb24gPT09ICdkeW5hbWljJykge1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlRHluYW1pY1Bvc2l0aW9uKCk7XG4gICAgICAgICAgLy8gVXBkYXRlIHRyYW5zZm9ybXMgZm9yIHNob3cgc3RhdGVcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlQ2FsZW5kYXJUcmFuc2Zvcm1zKHRydWUpLCAxMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jYWxlbmRhclBvc2l0aW9uQ2xhc3MgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbGVuZGFyU3RhdGVDaGFuZ2UuZW1pdCh0aGlzLnNob3dDYWxlbmRhcik7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gZmFsc2U7XG4gICAgdGhpcy5zaG93VGltZVBpY2tlclRvZ2dsZSA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNhbGVuZGFyU3RhdGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZUR5bmFtaWNQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBjYWxlbmRhckVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLmNhbGVuZGFyLXBvcG92ZXInXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICBpZiAoIWNvbnRhaW5lckVsZW1lbnQgfHwgIWNhbGVuZGFyRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHBvc2l0aW9uaW5nQ29udGFpbmVyID0gY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLmRhdGV0aW1lLXBpY2tlci1jb250YWluZXInXG4gICAgICApO1xuICAgICAgY29uc3QgcG9zaXRpb25pbmdSZWN0ID0gcG9zaXRpb25pbmdDb250YWluZXJcbiAgICAgICAgPyBwb3NpdGlvbmluZ0NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICA6IGNvbnRhaW5lclJlY3Q7XG5cbiAgICAgIGNvbnN0IGNhbGVuZGFySWNvbkVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcuY2FsZW5kYXItaWNvbidcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBpY29uUmVjdCA9XG4gICAgICAgIGNhbGVuZGFySWNvbkVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHx8IGNvbnRhaW5lclJlY3Q7XG4gICAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgIGNvbnN0IGlzTW9iaWxlID0gdmlld3BvcnRXaWR0aCA8PSA1NzY7XG5cbiAgICAgIGNvbnN0IGNhbGVuZGFyV2lkdGggPSBpc01vYmlsZVxuICAgICAgICA/IE1hdGgubWluKGNhbGVuZGFyRWxlbWVudC5vZmZzZXRXaWR0aCB8fCAzNTAsIHZpZXdwb3J0V2lkdGggLSAzMilcbiAgICAgICAgOiBjYWxlbmRhckVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMzUwO1xuICAgICAgY29uc3QgY2FsZW5kYXJIZWlnaHQgPSBjYWxlbmRhckVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDQwMDtcblxuICAgICAgaWYgKGlzTW9iaWxlKSB7XG4gICAgICAgIHRoaXMuYXBwbHlNb2JpbGVQb3NpdGlvbmluZyhcbiAgICAgICAgICBjYWxlbmRhckVsZW1lbnQsXG4gICAgICAgICAgaWNvblJlY3QsXG4gICAgICAgICAgcG9zaXRpb25pbmdSZWN0LFxuICAgICAgICAgIHZpZXdwb3J0V2lkdGgsXG4gICAgICAgICAgY2FsZW5kYXJXaWR0aFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbENsYXNzID0gdGhpcy5nZXRWZXJ0aWNhbFBvc2l0aW9uQ2xhc3MoXG4gICAgICAgICAgY29udGFpbmVyUmVjdCxcbiAgICAgICAgICB2aWV3cG9ydEhlaWdodCxcbiAgICAgICAgICBjYWxlbmRhckhlaWdodFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNhbGVuZGFyUG9zaXRpb25DbGFzcyA9IHZlcnRpY2FsQ2xhc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNsZWFySW5saW5lU3R5bGVzKGNhbGVuZGFyRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWxDbGFzcyA9IHRoaXMuZ2V0SG9yaXpvbnRhbFBvc2l0aW9uQ2xhc3MoXG4gICAgICAgICAgY29udGFpbmVyUmVjdCxcbiAgICAgICAgICB2aWV3cG9ydFdpZHRoLFxuICAgICAgICAgIGNhbGVuZGFyV2lkdGgsXG4gICAgICAgICAgaXNNb2JpbGVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdmVydGljYWxDbGFzcyA9IHRoaXMuZ2V0VmVydGljYWxQb3NpdGlvbkNsYXNzKFxuICAgICAgICAgIGNvbnRhaW5lclJlY3QsXG4gICAgICAgICAgdmlld3BvcnRIZWlnaHQsXG4gICAgICAgICAgY2FsZW5kYXJIZWlnaHRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jYWxlbmRhclBvc2l0aW9uQ2xhc3MgPVxuICAgICAgICAgIGAke2hvcml6b250YWxDbGFzc30gJHt2ZXJ0aWNhbENsYXNzfWAudHJpbSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5TW9iaWxlUG9zaXRpb25pbmcoXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgaWNvblJlY3Q6IERPTVJlY3QsXG4gICAgY29udGFpbmVyUmVjdDogRE9NUmVjdCxcbiAgICB2aWV3cG9ydFdpZHRoOiBudW1iZXIsXG4gICAgY2FsZW5kYXJXaWR0aDogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHBhZGRpbmcgPSAxNjtcbiAgICBjb25zdCB3b3VsZE92ZXJmbG93UmlnaHQgPVxuICAgICAgaWNvblJlY3QucmlnaHQgKyBjYWxlbmRhcldpZHRoICsgcGFkZGluZyA+IHZpZXdwb3J0V2lkdGg7XG4gICAgY29uc3Qgd291bGRPdmVyZmxvd0xlZnQgPSBpY29uUmVjdC5sZWZ0IC0gY2FsZW5kYXJXaWR0aCAtIHBhZGRpbmcgPCAwO1xuICAgIGNvbnN0IG1pbkNhbGVuZGFyV2lkdGggPSAyODA7XG5cbiAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuXG4gICAgaWYgKHdvdWxkT3ZlcmZsb3dSaWdodCAmJiB3b3VsZE92ZXJmbG93TGVmdCkge1xuICAgICAgY29uc3QgY2VudGVyZWRMZWZ0ID0gKHZpZXdwb3J0V2lkdGggLSBjYWxlbmRhcldpZHRoKSAvIDI7XG4gICAgICBjb25zdCBwYXJlbnRSZWxhdGl2ZUxlZnQgPSBjZW50ZXJlZExlZnQgLSBjb250YWluZXJSZWN0LmxlZnQ7XG4gICAgICBjb25zdCBtaW5SZWxhdGl2ZUxlZnQgPSAxNiAtIGNvbnRhaW5lclJlY3QubGVmdDtcblxuICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7TWF0aC5tYXgobWluUmVsYXRpdmVMZWZ0LCBwYXJlbnRSZWxhdGl2ZUxlZnQpfXB4YDtcbiAgICAgIGVsZW1lbnQuc3R5bGUucmlnaHQgPSAnYXV0byc7XG4gICAgfSBlbHNlIGlmICh3b3VsZE92ZXJmbG93UmlnaHQpIHtcbiAgICAgIGNvbnN0IHJpZ2h0T2Zmc2V0ID0gY29udGFpbmVyUmVjdC5yaWdodCAtICh2aWV3cG9ydFdpZHRoIC0gcGFkZGluZyk7XG4gICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSAndW5zZXQnO1xuICAgICAgZWxlbWVudC5zdHlsZS5yaWdodCA9IGAke01hdGgubWF4KDAsIHJpZ2h0T2Zmc2V0KX1weGA7XG4gICAgfSBlbHNlIGlmICh3b3VsZE92ZXJmbG93TGVmdCkge1xuICAgICAgY29uc3QgcGFyZW50UmVsYXRpdmVMZWZ0ID0gMTYgLSBjb250YWluZXJSZWN0LmxlZnQ7XG4gICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtwYXJlbnRSZWxhdGl2ZUxlZnR9cHhgO1xuICAgICAgZWxlbWVudC5zdHlsZS5yaWdodCA9ICd1bnNldCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9ICd1bnNldCc7XG4gICAgICBlbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzAnO1xuICAgIH1cblxuICAgIGVsZW1lbnQuc3R5bGUubWF4V2lkdGggPSBgJHtjYWxlbmRhcldpZHRofXB4YDtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJJbmxpbmVTdHlsZXMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSAnJztcbiAgICBlbGVtZW50LnN0eWxlLnJpZ2h0ID0gJyc7XG4gICAgZWxlbWVudC5zdHlsZS5tYXhXaWR0aCA9ICcnO1xuICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDYWxlbmRhclRyYW5zZm9ybXMoaXNTaG93OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lckVsZW1lbnQpIHJldHVybjtcblxuICAgIGNvbnN0IGNhbGVuZGFyRWxlbWVudCA9IGNvbnRhaW5lckVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcuY2FsZW5kYXItcG9wb3ZlcidcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICghY2FsZW5kYXJFbGVtZW50KSByZXR1cm47XG5cbiAgICBjb25zdCBpc01vYmlsZSA9IHdpbmRvdy5pbm5lcldpZHRoIDw9IDU3NjtcbiAgICBjb25zdCBpc1RvcFBvc2l0aW9uID0gdGhpcy5jYWxlbmRhclBvc2l0aW9uQ2xhc3MuaW5jbHVkZXMoXG4gICAgICAnY2FsZW5kYXItcG9zaXRpb24tdG9wJ1xuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBpc01vYmlsZSAmJlxuICAgICAgdGhpcy5jYWxlbmRhclBvc2l0aW9uQ2xhc3MuaW5jbHVkZXMoJ2NhbGVuZGFyLW1vYmlsZS1jZW50ZXInKVxuICAgICkge1xuICAgICAgLy8gRHluYW1pYyBtb2JpbGUgY2VudGVyaW5nIHdpdGggcHJvcGVyIHRyYW5zZm9ybXNcbiAgICAgIGlmIChpc1Nob3cpIHtcbiAgICAgICAgY2FsZW5kYXJFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGlzVG9wUG9zaXRpb25cbiAgICAgICAgICA/ICd0cmFuc2xhdGVZKDApJ1xuICAgICAgICAgIDogJ3RyYW5zbGF0ZVkoMCknO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsZW5kYXJFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGlzVG9wUG9zaXRpb25cbiAgICAgICAgICA/ICd0cmFuc2xhdGVZKDEwcHgpJ1xuICAgICAgICAgIDogJ3RyYW5zbGF0ZVkoLTEwcHgpJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEhvcml6b250YWxQb3NpdGlvbkNsYXNzKFxuICAgIGNvbnRhaW5lclJlY3Q6IERPTVJlY3QsXG4gICAgdmlld3BvcnRXaWR0aDogbnVtYmVyLFxuICAgIGNhbGVuZGFyV2lkdGg6IG51bWJlcixcbiAgICBpc01vYmlsZTogYm9vbGVhblxuICApOiBzdHJpbmcge1xuICAgIGlmIChpc01vYmlsZSkge1xuICAgICAgY29uc3QgbW9iaWxlUGFkZGluZyA9IDE2O1xuXG4gICAgICAvLyBDaGVjayBpZiBjYWxlbmRhciB3b3VsZCBvdmVyZmxvdyB3aGVuIGdyb3dpbmcgcmlnaHQgZnJvbSBpY29uIChkZWZhdWx0KVxuICAgICAgY29uc3Qgd291bGRPdmVyZmxvd1JpZ2h0ID1cbiAgICAgICAgY29udGFpbmVyUmVjdC5yaWdodCArIGNhbGVuZGFyV2lkdGggKyBtb2JpbGVQYWRkaW5nID4gdmlld3BvcnRXaWR0aDtcblxuICAgICAgLy8gQ2hlY2sgaWYgY2FsZW5kYXIgd291bGQgb3ZlcmZsb3cgd2hlbiBncm93aW5nIGxlZnQgZnJvbSBsZWZ0IGVkZ2VcbiAgICAgIGNvbnN0IHdvdWxkT3ZlcmZsb3dMZWZ0ID1cbiAgICAgICAgY29udGFpbmVyUmVjdC5sZWZ0IC0gY2FsZW5kYXJXaWR0aCAtIG1vYmlsZVBhZGRpbmcgPCAwO1xuXG4gICAgICBpZiAod291bGRPdmVyZmxvd1JpZ2h0ICYmIHdvdWxkT3ZlcmZsb3dMZWZ0KSB7XG4gICAgICAgIC8vIE5vIHNwYWNlIG9uIGVpdGhlciBzaWRlIC0gY2VudGVyIGl0XG4gICAgICAgIHJldHVybiAnY2FsZW5kYXItbW9iaWxlLWNlbnRlcic7XG4gICAgICB9XG5cbiAgICAgIGlmICghd291bGRPdmVyZmxvd1JpZ2h0KSB7XG4gICAgICAgIC8vIEZpdHMgZ3Jvd2luZyByaWdodCBmcm9tIGljb24gLSBidXQgc3RpbGwgdXNlIHJpZ2h0IGFsaWdubWVudCB0byBlbnN1cmUgcGFkZGluZ1xuICAgICAgICByZXR1cm4gJ2NhbGVuZGFyLWFsaWduLXJpZ2h0JztcbiAgICAgIH1cblxuICAgICAgLy8gV291bGQgb3ZlcmZsb3cgcmlnaHQgYnV0IGZpdHMgb24gbGVmdCAtIGFsaWduIHRvIGxlZnQgZWRnZVxuICAgICAgcmV0dXJuICdjYWxlbmRhci1hbGlnbi1sZWZ0JztcbiAgICB9XG5cbiAgICAvLyBEZXNrdG9wIGxvZ2ljXG4gICAgY29uc3Qgd291bGRPdmVyZmxvd1JpZ2h0ID1cbiAgICAgIGNvbnRhaW5lclJlY3QucmlnaHQgKyBjYWxlbmRhcldpZHRoID4gdmlld3BvcnRXaWR0aDtcblxuICAgIGlmICghd291bGRPdmVyZmxvd1JpZ2h0KSB7XG4gICAgICByZXR1cm4gJyc7IC8vIERlZmF1bHQgcG9zaXRpb25pbmcgKGdyb3dzIHJpZ2h0IGZyb20gaWNvbilcbiAgICB9XG5cbiAgICBjb25zdCBzcGFjZUxlZnQgPSBjb250YWluZXJSZWN0LmxlZnQ7XG4gICAgaWYgKHNwYWNlTGVmdCA+PSBjYWxlbmRhcldpZHRoKSB7XG4gICAgICByZXR1cm4gJ2NhbGVuZGFyLWFsaWduLWxlZnQnOyAvLyBHcm93IHJpZ2h0IGZyb20gbGVmdCBlZGdlXG4gICAgfVxuXG4gICAgcmV0dXJuICcnOyAvLyBVc2UgZGVmYXVsdCBhcyBmYWxsYmFja1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWZXJ0aWNhbFBvc2l0aW9uQ2xhc3MoXG4gICAgY29udGFpbmVyUmVjdDogRE9NUmVjdCxcbiAgICB2aWV3cG9ydEhlaWdodDogbnVtYmVyLFxuICAgIGNhbGVuZGFySGVpZ2h0OiBudW1iZXJcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBzcGFjZUJlbG93ID0gdmlld3BvcnRIZWlnaHQgLSBjb250YWluZXJSZWN0LmJvdHRvbTtcbiAgICBjb25zdCBzcGFjZUFib3ZlID0gY29udGFpbmVyUmVjdC50b3A7XG5cbiAgICBpZiAoc3BhY2VCZWxvdyA+PSBjYWxlbmRhckhlaWdodCkgcmV0dXJuICdjYWxlbmRhci1wb3NpdGlvbi1ib3R0b20nO1xuICAgIGlmIChzcGFjZUFib3ZlID49IGNhbGVuZGFySGVpZ2h0KSByZXR1cm4gJ2NhbGVuZGFyLXBvc2l0aW9uLXRvcCc7XG4gICAgcmV0dXJuIHNwYWNlQmVsb3cgPj0gc3BhY2VBYm92ZVxuICAgICAgPyAnY2FsZW5kYXItcG9zaXRpb24tYm90dG9tJ1xuICAgICAgOiAnY2FsZW5kYXItcG9zaXRpb24tdG9wJztcbiAgfVxuXG4gIG5hdmlnYXRlTW9udGgoZGlyZWN0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRNb250aCArPSBkaXJlY3Rpb247XG4gICAgaWYgKHRoaXMuY3VycmVudE1vbnRoID4gMTIpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gMTtcbiAgICAgIHRoaXMuY3VycmVudFllYXIrKztcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudE1vbnRoIDwgMSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSAxMjtcbiAgICAgIHRoaXMuY3VycmVudFllYXItLTtcbiAgICB9XG5cbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICB0aGlzLm1vbnRoQ2hhbmdlZC5lbWl0KHRoaXMuY3VycmVudE1vbnRoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNlbGVjdERhdGUoZGF5OiBDYWxlbmRhckRheSk6IHZvaWQge1xuICAgIGlmIChkYXkuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHNlbGVjdGVkRGF0ZTogV3NsRGF0ZVN0cnVjdCA9IHtcbiAgICAgIHllYXI6IGRheS55ZWFyLFxuICAgICAgbW9udGg6IGRheS5tb250aCxcbiAgICAgIGRheTogZGF5LmRheSxcbiAgICB9O1xuXG4gICAgdGhpcy5vbkRhdGVDaGFuZ2Uoc2VsZWN0ZWREYXRlKTtcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdlbmVyYXRlQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRZZWFyLCB0aGlzLmN1cnJlbnRNb250aCAtIDEsIDEpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKGZpcnN0RGF5KTtcbiAgICBjb25zdCB3ZWVrU3RhcnQgPSAodGhpcy5kYXRlQ29uZmlnPy53ZWVrU3RhcnQgPz8gMSkgJSA3O1xuICAgIGNvbnN0IGRheU9mV2VlayA9IChmaXJzdERheS5nZXREYXkoKSArIDcgLSB3ZWVrU3RhcnQpICUgNztcbiAgICBzdGFydERhdGUuc2V0RGF0ZShzdGFydERhdGUuZ2V0RGF0ZSgpIC0gZGF5T2ZXZWVrKTtcblxuICAgIHRoaXMuY2FsZW5kYXJEYXlzID0gW107XG4gICAgY29uc3QgdG9kYXlEYXRlID0gZ2V0Q3VycmVudERhdGUoKTtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKHRvZGF5RGF0ZS55ZWFyLCB0b2RheURhdGUubW9udGggLSAxLCB0b2RheURhdGUuZGF5KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDI7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZShzdGFydERhdGUpO1xuICAgICAgY3VycmVudERhdGUuc2V0RGF0ZShzdGFydERhdGUuZ2V0RGF0ZSgpICsgaSk7XG5cbiAgICAgIGNvbnN0IGRheVN0cnVjdDogV3NsRGF0ZVN0cnVjdCA9IHtcbiAgICAgICAgeWVhcjogY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgbW9udGg6IGN1cnJlbnREYXRlLmdldE1vbnRoKCkgKyAxLFxuICAgICAgICBkYXk6IGN1cnJlbnREYXRlLmdldERhdGUoKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNhbGVuZGFyRGF5OiBDYWxlbmRhckRheSA9IHtcbiAgICAgICAgZGF5OiBjdXJyZW50RGF0ZS5nZXREYXRlKCksXG4gICAgICAgIG1vbnRoOiBjdXJyZW50RGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgeWVhcjogY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgb3RoZXJNb250aDogY3VycmVudERhdGUuZ2V0TW9udGgoKSArIDEgIT09IHRoaXMuY3VycmVudE1vbnRoLFxuICAgICAgICBzZWxlY3RlZDogdGhpcy5pc0RhdGVTZWxlY3RlZChkYXlTdHJ1Y3QpLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5pc0RhdGVEaXNhYmxlZChkYXlTdHJ1Y3QpLFxuICAgICAgICB0b2RheTogdGhpcy5pc1NhbWVEYXRlKGN1cnJlbnREYXRlLCB0b2RheSksXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNhbGVuZGFyRGF5cy5wdXNoKGNhbGVuZGFyRGF5KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzRGF0ZVNlbGVjdGVkKGRhdGU6IFdzbERhdGVTdHJ1Y3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoXG4gICAgICB0aGlzLmRhdGV0aW1lICYmXG4gICAgICB0aGlzLmRhdGV0aW1lLnllYXIgPT09IGRhdGUueWVhciAmJlxuICAgICAgdGhpcy5kYXRldGltZS5tb250aCA9PT0gZGF0ZS5tb250aCAmJlxuICAgICAgdGhpcy5kYXRldGltZS5kYXkgPT09IGRhdGUuZGF5XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEYXRlRGlzYWJsZWQoZGF0ZTogV3NsRGF0ZVN0cnVjdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGRhdGUueWVhciwgZGF0ZS5tb250aCAtIDEsIGRhdGUuZGF5KTtcbiAgICBjb25zdCB0b2RheURhdGUgPSBnZXRDdXJyZW50RGF0ZSgpO1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUodG9kYXlEYXRlLnllYXIsIHRvZGF5RGF0ZS5tb250aCAtIDEsIHRvZGF5RGF0ZS5kYXkpO1xuICAgIHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXG4gICAgaWYgKHRoaXMubWF4RGF0ZSkge1xuICAgICAgY29uc3QgbWF4RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICB0aGlzLm1heERhdGUueWVhcixcbiAgICAgICAgdGhpcy5tYXhEYXRlLm1vbnRoIC0gMSxcbiAgICAgICAgdGhpcy5tYXhEYXRlLmRheVxuICAgICAgKTtcbiAgICAgIGlmIChzZWxlY3RlZERhdGUgPiBtYXhEYXRlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcbiAgICAgIGNvbnN0IG1pbkRhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgdGhpcy5taW5EYXRlLnllYXIsXG4gICAgICAgIHRoaXMubWluRGF0ZS5tb250aCAtIDEsXG4gICAgICAgIHRoaXMubWluRGF0ZS5kYXlcbiAgICAgICk7XG4gICAgICBpZiAoc2VsZWN0ZWREYXRlIDwgbWluRGF0ZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmFsbG93ZWREYXRlcyAmJlxuICAgICAgdGhpcy5hbGxvd2VkRGF0ZXMubGVuZ3RoID09PSAxICYmXG4gICAgICB0aGlzLmFsbG93ZWREYXRlc1swXS5kYXkgPT09IC0xXG4gICAgKSB7XG4gICAgICByZXR1cm4gc2VsZWN0ZWREYXRlID4gdG9kYXk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFsbG93ZWREYXRlcyB8fCB0aGlzLmFsbG93ZWREYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzQWxsb3dlZCA9IHRoaXMuYWxsb3dlZERhdGVzLmZpbmQoXG4gICAgICAoZGF5QWxsb3dlZCkgPT5cbiAgICAgICAgZGF5QWxsb3dlZC55ZWFyID09PSBkYXRlLnllYXIgJiZcbiAgICAgICAgZGF5QWxsb3dlZC5tb250aCA9PT0gZGF0ZS5tb250aCAmJlxuICAgICAgICBkYXlBbGxvd2VkLmRheSA9PT0gZGF0ZS5kYXlcbiAgICApO1xuXG4gICAgcmV0dXJuICFpc0FsbG93ZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzU2FtZURhdGUoZGF0ZTE6IERhdGUsIGRhdGUyOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGRhdGUxLmdldEZ1bGxZZWFyKCkgPT09IGRhdGUyLmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgIGRhdGUxLmdldE1vbnRoKCkgPT09IGRhdGUyLmdldE1vbnRoKCkgJiZcbiAgICAgIGRhdGUxLmdldERhdGUoKSA9PT0gZGF0ZTIuZ2V0RGF0ZSgpXG4gICAgKTtcbiAgfVxuXG4gIGdldE1vbnRoTmFtZShtb250aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBtb250aEluZGV4ID0gbW9udGggLSAxO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmRhdGVDb25maWc/Lm1vbnRoTmFtZXM/Llttb250aEluZGV4XSB8fFxuICAgICAgZ2V0RGF0ZUZvcm1hdENvbmZpZygnZW4nKS5tb250aE5hbWVzW21vbnRoSW5kZXhdXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlV2Vla2RheUxhYmVscygpOiB2b2lkIHtcbiAgICB0aGlzLndlZWtkYXlMYWJlbHMgPVxuICAgICAgdGhpcy5kYXRlQ29uZmlnPy53ZWVrZGF5TGFiZWxzIHx8IGdldERhdGVGb3JtYXRDb25maWcoJ2VuJykud2Vla2RheUxhYmVscztcbiAgfVxuXG4gIGFkanVzdFRpbWUoZmllbGQ6ICdob3VycycgfCAnbWludXRlcycgfCAnc2Vjb25kcycsIHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmRhdGV0aW1lW2ZpZWxkXSB8fCAwO1xuICAgIGxldCBuZXdWYWx1ZTogbnVtYmVyO1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICBuZXdWYWx1ZSA9IGN1cnJlbnRWYWx1ZSArIHN0ZXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0ZXBTaXplID0gTWF0aC5hYnMoc3RlcCk7XG4gICAgICBuZXdWYWx1ZSA9IGN1cnJlbnRWYWx1ZSAtIHN0ZXBTaXplO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICAgIGNhc2UgJ2hvdXJzJzpcbiAgICAgICAgaWYgKG5ld1ZhbHVlIDwgMCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gMjQgKyAobmV3VmFsdWUgJSAyNCk7XG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPiAyMykge1xuICAgICAgICAgIG5ld1ZhbHVlID0gbmV3VmFsdWUgJSAyNDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgIGlmIChuZXdWYWx1ZSA8IDApIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IDYwICsgKG5ld1ZhbHVlICUgNjApO1xuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlID4gNTkpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IG5ld1ZhbHVlICUgNjA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRldGltZVtmaWVsZF0gPSBuZXdWYWx1ZTtcbiAgICB0aGlzLnNldERhdGVTdHJpbmdNb2RlbCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25UaW1lRmllbGRDaGFuZ2UoXG4gICAgZmllbGQ6ICdob3VycycgfCAnbWludXRlcycgfCAnc2Vjb25kcycsXG4gICAgZXZlbnQ6IEV2ZW50XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgbGV0IHZhbHVlID0gcGFyc2VJbnQoaW5wdXQudmFsdWUsIDEwKTtcblxuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gMDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMDtcbiAgICAgICAgaWYgKHZhbHVlID4gMjMpIHZhbHVlID0gMjM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWludXRlcyc6XG4gICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAwO1xuICAgICAgICBpZiAodmFsdWUgPiA1OSkgdmFsdWUgPSA1OTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaW5wdXQudmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG5cbiAgICB0aGlzLmRhdGV0aW1lW2ZpZWxkXSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0RGF0ZVN0cmluZ01vZGVsKCk7XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlVXBkYXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNJbml0aWFsaXplZCB8fCB0aGlzLl91cGRhdGVQZW5kaW5nKSByZXR1cm47XG5cbiAgICB0aGlzLl91cGRhdGVQZW5kaW5nID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3VwZGF0ZVBlbmRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlndXJhdGlvbigpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZGV0ZWN0VGltZUNvbXBvbmVudHMoKTtcbiAgICB0aGlzLnNldFN0YW5kYXJkRm9ybWF0KCk7XG4gICAgdGhpcy5zZXRQbGFjZWhvbGRlcigpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RUaW1lQ29tcG9uZW50cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dERhdGV0aW1lRm9ybWF0KSB7XG4gICAgICBjb25zdCBoYXNUaW1lRm9ybWF0ID0gdGhpcy5oYXNUaW1lSW5Gb3JtYXQodGhpcy5pbnB1dERhdGV0aW1lRm9ybWF0KTtcblxuICAgICAgaWYgKCFoYXNUaW1lRm9ybWF0KSB7XG4gICAgICAgIHRoaXMuc2hvd1RpbWVDb250cm9scyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZWNvbmRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNEYXRlT25seSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zaG93VGltZUNvbnRyb2xzID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNEYXRlT25seSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc2Vjb25kcyA9IHRoaXMuaW5wdXREYXRldGltZUZvcm1hdC5pbmNsdWRlcygnOnNzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd1RpbWVDb250cm9scyA9IHRoaXMuX3NlY29uZHM7XG4gICAgICB0aGlzLmlzRGF0ZU9ubHkgPSAhdGhpcy5fc2Vjb25kcztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhc1RpbWVJbkZvcm1hdChmb3JtYXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBmb3JtYXQuaW5jbHVkZXMoJ0hIOicpIHx8XG4gICAgICBmb3JtYXQuaW5jbHVkZXMoJ2hoOicpIHx8XG4gICAgICBmb3JtYXQuaW5jbHVkZXMoJzptbScpIHx8XG4gICAgICBmb3JtYXQuaW5jbHVkZXMoJzpzcycpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3RhbmRhcmRGb3JtYXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbnRlcm5hbEZvcm1hdCA9XG4gICAgICB0aGlzLmlucHV0RGF0ZXRpbWVGb3JtYXQgfHwgSU5QVVRfREFURV9GT1JNQVRTLkRBVEVfT05MWTtcbiAgICB0aGlzLl9zdGFuZGFyZEZvcm1hdCA9IHRoaXMuaW50ZXJuYWxGb3JtYXQ7XG5cbiAgICBpZiAodGhpcy5zaG93VGltZUNvbnRyb2xzICYmICF0aGlzLmhhc1RpbWVJbkZvcm1hdCh0aGlzLl9zdGFuZGFyZEZvcm1hdCkpIHtcbiAgICAgIHRoaXMuX3N0YW5kYXJkRm9ybWF0ICs9IHRoaXMuX3NlY29uZHMgPyAnIEhIOm1tOnNzJyA6ICcgSEg6bW0nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGxhY2Vob2xkZXIgJiYgdGhpcy5wbGFjZWhvbGRlciAhPT0gJycpIHtcbiAgICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlci50b0xvd2VyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wbGFjZWhvbGRlciA9XG4gICAgICAgIHRoaXMuZGF0ZUNvbmZpZz8ucGxhY2Vob2xkZXI/LnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgSU5QVVRfREFURV9GT1JNQVRTLkRBVEVfT05MWS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dUaW1lQ29udHJvbHMpIHtcbiAgICAgIGlmICh0aGlzLl9wbGFjZWhvbGRlcj8uaW5jbHVkZXMoJ2hoOm1tJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wbGFjZWhvbGRlciArPSB0aGlzLl9zZWNvbmRzID8gJyBoaDptbTpzcycgOiAnIGhoOm1tJztcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKG5ld01vZGVsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAobmV3TW9kZWwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZE1vZGVsID0gRGF0ZVRpbWVNb2RlbC5mcm9tTG9jYWxTdHJpbmcobmV3TW9kZWwsIGZhbHNlKTtcblxuICAgICAgaWYgKHBhcnNlZE1vZGVsICYmIHR5cGVvZiBwYXJzZWRNb2RlbC55ZWFyID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLmRhdGV0aW1lID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB0aGlzLmRhdGV0aW1lIHx8IG5ldyBEYXRlVGltZU1vZGVsKCksXG4gICAgICAgICAgcGFyc2VkTW9kZWxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kYXRlU3RyaW5nID0gbmV3TW9kZWw7XG4gICAgICAgIHRoaXMuc2V0RGF0ZVN0cmluZ01vZGVsKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0ZXRpbWUgPSBuZXcgRGF0ZVRpbWVNb2RlbCgpO1xuICAgICAgdGhpcy5kYXRlU3RyaW5nID0gJyc7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZShldmVudDogV3NsRGF0ZXBpY2tlck5hdmlnYXRlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQ/LmN1cnJlbnQgJiYgZXZlbnQ/LmN1cnJlbnQubW9udGggIT09IGV2ZW50Py5uZXh0Lm1vbnRoKSB7XG4gICAgICB0aGlzLm1vbnRoQ2hhbmdlZC5lbWl0KGV2ZW50Py5uZXh0Lm1vbnRoKTtcbiAgICB9XG4gIH1cblxuICBpc0Rpc2FibGVkKFxuICAgIGRhdGVzOiBXc2xEYXRlU3RydWN0W11cbiAgKTogKFxuICAgIGRhdGU6IFdzbERhdGVTdHJ1Y3QsXG4gICAgY3VycmVudD86IHsgeWVhcjogbnVtYmVyOyBtb250aDogbnVtYmVyIH1cbiAgKSA9PiBib29sZWFuIHtcbiAgICByZXR1cm4gKHBpY2tlckRhdGU6IFdzbERhdGVTdHJ1Y3QpID0+IHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsQWxsb3dlZERhdGVzID0gdGhpcy5hbGxvd2VkRGF0ZXM7XG4gICAgICB0aGlzLmFsbG93ZWREYXRlcyA9IGRhdGVzO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5pc0RhdGVEaXNhYmxlZChwaWNrZXJEYXRlKTtcbiAgICAgIHRoaXMuYWxsb3dlZERhdGVzID0gb3JpZ2luYWxBbGxvd2VkRGF0ZXM7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgdG9nZ2xlRGF0ZVRpbWVTdGF0ZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNWYWxpZERhdGUoKSkge1xuICAgICAgdGhpcy5zaG93VGltZVBpY2tlclRvZ2dsZSA9ICF0aGlzLnNob3dUaW1lUGlja2VyVG9nZ2xlO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWxpbWl0ZXIoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5kYXRlQ29uZmlnPy5mb3JtYXQpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5kYXRlQ29uZmlnLmZvcm1hdC5tYXRjaCgvW15hLXpBLVowLTldLyk7XG4gICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMF0pIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoWzBdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kYXRlQ29uZmlnPy5kYXRlU2VwYXJhdG9yIHx8ICctJztcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VEYXRlKHZhbHVlOiBzdHJpbmcpOiBXc2xEYXRlU3RydWN0IHwgbnVsbCB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsaW1pdGVyID0gdGhpcy5nZXREZWxpbWl0ZXIoKTtcbiAgICBjb25zdCBkYXRlID0gdmFsdWUuc3BsaXQoZGVsaW1pdGVyKTtcblxuICAgIGlmIChkYXRlLmxlbmd0aCA8IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5kYXRlQ29uZmlnPy5kYXlGaXJzdCkge1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChkYXRlWzBdLCAxMCk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQoZGF0ZVsxXSwgMTApO1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQoZGF0ZVsyXSwgMTApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpc05hTihkYXkpIHx8XG4gICAgICAgICAgaXNOYU4obW9udGgpIHx8XG4gICAgICAgICAgaXNOYU4oeWVhcikgfHxcbiAgICAgICAgICBkYXkgPCAxIHx8XG4gICAgICAgICAgZGF5ID4gMzEgfHxcbiAgICAgICAgICBtb250aCA8IDEgfHxcbiAgICAgICAgICBtb250aCA+IDEyXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgZGF5LCBtb250aCwgeWVhciB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9ybWF0OiBJTlBVVF9EQVRFX0ZPUk1BVFMuREFURV9PTkxZICh5eXl5LU1NLWRkKVxuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQoZGF0ZVswXSwgMTApO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KGRhdGVbMV0sIDEwKTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQoZGF0ZVsyXSwgMTApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpc05hTihkYXkpIHx8XG4gICAgICAgICAgaXNOYU4obW9udGgpIHx8XG4gICAgICAgICAgaXNOYU4oeWVhcikgfHxcbiAgICAgICAgICBkYXkgPCAxIHx8XG4gICAgICAgICAgZGF5ID4gMzEgfHxcbiAgICAgICAgICBtb250aCA8IDEgfHxcbiAgICAgICAgICBtb250aCA+IDEyXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgeWVhciwgbW9udGgsIGRheSB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdERhdGUoZGF0ZTogV3NsRGF0ZVRpbWVTdHJ1Y3QgfCBudWxsKTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdGUpIHJldHVybiAnJztcblxuICAgIGNvbnN0IGRheUZvcm1hdHRlZCA9IGRhdGUuZGF5IDwgMTAgPyAnMCcgKyBkYXRlLmRheSA6IGRhdGUuZGF5LnRvU3RyaW5nKCk7XG4gICAgY29uc3QgbW9udGhGb3JtYXR0ZWQgPVxuICAgICAgZGF0ZS5tb250aCA8IDEwID8gJzAnICsgZGF0ZS5tb250aCA6IGRhdGUubW9udGgudG9TdHJpbmcoKTtcbiAgICBjb25zdCB5ZWFyRm9ybWF0dGVkID0gZGF0ZS55ZWFyLnRvU3RyaW5nKCk7XG5cbiAgICBjb25zdCBob3VyRm9ybWF0dGVkID1cbiAgICAgIGRhdGUuaG91cnMgIT0gbnVsbFxuICAgICAgICA/IGRhdGUuaG91cnMgPCAxMFxuICAgICAgICAgID8gJzAnICsgZGF0ZS5ob3Vyc1xuICAgICAgICAgIDogZGF0ZS5ob3Vycy50b1N0cmluZygpXG4gICAgICAgIDogJzAwJztcbiAgICBjb25zdCBtaW51dGVGb3JtYXR0ZWQgPVxuICAgICAgZGF0ZS5taW51dGVzICE9IG51bGxcbiAgICAgICAgPyBkYXRlLm1pbnV0ZXMgPCAxMFxuICAgICAgICAgID8gJzAnICsgZGF0ZS5taW51dGVzXG4gICAgICAgICAgOiBkYXRlLm1pbnV0ZXMudG9TdHJpbmcoKVxuICAgICAgICA6ICcwMCc7XG4gICAgY29uc3Qgc2Vjb25kRm9ybWF0dGVkID1cbiAgICAgIGRhdGUuc2Vjb25kcyAhPSBudWxsXG4gICAgICAgID8gZGF0ZS5zZWNvbmRzIDwgMTBcbiAgICAgICAgICA/ICcwJyArIGRhdGUuc2Vjb25kc1xuICAgICAgICAgIDogZGF0ZS5zZWNvbmRzLnRvU3RyaW5nKClcbiAgICAgICAgOiAnMDAnO1xuXG4gICAgY29uc3QgZm9ybWF0ID0gdGhpcy5pbnB1dERhdGV0aW1lRm9ybWF0O1xuXG4gICAgY29uc3QgdG9rZW5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgeXl5eTogeWVhckZvcm1hdHRlZCxcbiAgICAgIE1NOiBtb250aEZvcm1hdHRlZCxcbiAgICAgIGRkOiBkYXlGb3JtYXR0ZWQsXG4gICAgICBISDogaG91ckZvcm1hdHRlZCxcbiAgICAgIG1tOiBtaW51dGVGb3JtYXR0ZWQsXG4gICAgICBzczogc2Vjb25kRm9ybWF0dGVkLFxuICAgIH07XG5cbiAgICBpZiAoZm9ybWF0KSB7XG4gICAgICBjb25zdCBzb3J0ZWRUb2tlbnMgPSBPYmplY3Qua2V5cyh0b2tlbnMpLnNvcnQoXG4gICAgICAgIChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoXG4gICAgICApO1xuXG4gICAgICBsZXQgcmVzdWx0ID0gZm9ybWF0O1xuICAgICAgZm9yIChjb25zdCB0IG9mIHNvcnRlZFRva2Vucykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShuZXcgUmVnRXhwKHQsICdnJyksIHRva2Vuc1t0XSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgbGV0IGZvcm1hdHRlZERhdGUgPSBgJHt5ZWFyRm9ybWF0dGVkfS0ke21vbnRoRm9ybWF0dGVkfS0ke2RheUZvcm1hdHRlZH1gO1xuICAgIGlmIChkYXRlLmhvdXJzICE9IG51bGwpIHtcbiAgICAgIGZvcm1hdHRlZERhdGUgKz0gYCAke2hvdXJGb3JtYXR0ZWR9OiR7bWludXRlRm9ybWF0dGVkfWA7XG4gICAgfVxuICAgIGlmIChkYXRlLnNlY29uZHMgIT0gbnVsbCkge1xuICAgICAgZm9ybWF0dGVkRGF0ZSArPSBgOiR7c2Vjb25kRm9ybWF0dGVkfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlZERhdGU7XG4gIH1cblxuICBvbklucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgIGlmICh2YWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgICB0aGlzLmRhdGV0aW1lID0gbmV3IERhdGVUaW1lTW9kZWwoKTtcbiAgICAgIHRoaXMuZGF0ZVN0cmluZyA9ICcnO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmRhdGVTdHJpbmcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZERhdGUgPSB0aGlzLnBhcnNlRGF0ZSh2YWx1ZSk7XG4gICAgaWYgKHBhcnNlZERhdGUpIHtcbiAgICAgIHRoaXMuZGF0ZXRpbWUgPSBuZXcgRGF0ZVRpbWVNb2RlbCh7XG4gICAgICAgIHllYXI6IHBhcnNlZERhdGUueWVhcixcbiAgICAgICAgbW9udGg6IHBhcnNlZERhdGUubW9udGgsXG4gICAgICAgIGRheTogcGFyc2VkRGF0ZS5kYXksXG4gICAgICAgIGhvdXJzOiB0aGlzLmRhdGV0aW1lPy5ob3VycyB8fCAwLFxuICAgICAgICBtaW51dGVzOiB0aGlzLmRhdGV0aW1lPy5taW51dGVzIHx8IDAsXG4gICAgICAgIHNlY29uZHM6IHRoaXMuZGF0ZXRpbWU/LnNlY29uZHMgfHwgMCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZXREYXRlU3RyaW5nTW9kZWwoKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGR0ID0gRGF0ZVRpbWVNb2RlbC5mcm9tTG9jYWxTdHJpbmcodmFsdWUpO1xuICAgIGlmIChkdCAmJiBkdC55ZWFyKSB7XG4gICAgICB0aGlzLmRhdGV0aW1lID0gZHQ7XG4gICAgICB0aGlzLnNldERhdGVTdHJpbmdNb2RlbCgpO1xuICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG9uRGF0ZUNoYW5nZShldmVudDogc3RyaW5nIHwgV3NsRGF0ZVN0cnVjdCk6IHZvaWQge1xuICAgIGxldCBkYXRlOiBEYXRlVGltZU1vZGVsO1xuXG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZVRpbWVNb2RlbCh0aGlzLnBhcnNlRGF0ZShldmVudCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlID0gbmV3IERhdGVUaW1lTW9kZWwoZXZlbnQpO1xuICAgIH1cblxuICAgIGlmICghZGF0ZSB8fCAhZGF0ZS55ZWFyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRhdGV0aW1lKSB7XG4gICAgICB0aGlzLmRhdGV0aW1lID0gZGF0ZTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGV0aW1lLnllYXIgPSBkYXRlLnllYXI7XG4gICAgdGhpcy5kYXRldGltZS5tb250aCA9IGRhdGUubW9udGg7XG4gICAgdGhpcy5kYXRldGltZS5kYXkgPSBkYXRlLmRheTtcblxuICAgIHRoaXMuY3VycmVudFllYXIgPSBkYXRlLnllYXI7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBkYXRlLm1vbnRoO1xuXG4gICAgdGhpcy5zdGFydERhdGUgPSB7XG4gICAgICB5ZWFyOiBkYXRlLnllYXIsXG4gICAgICBtb250aDogZGF0ZS5tb250aCxcbiAgICB9O1xuXG4gICAgdGhpcy5zZXREYXRlU3RyaW5nTW9kZWwoKTtcbiAgfVxuXG4gIHNldERhdGVTdHJpbmdNb2RlbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRldGltZSAmJiB0eXBlb2YgdGhpcy5kYXRldGltZS55ZWFyID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5kYXRlU3RyaW5nID0gdGhpcy5kYXRldGltZS50b1N0cmluZygpO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmRhdGVTdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGVTdHJpbmcgPSAnJztcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5kYXRlU3RyaW5nKTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldERpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRhdGV0aW1lICYmIHRoaXMuZGF0ZXRpbWUueWVhcikge1xuICAgICAgY29uc3QgZGF0ZVN0cnVjdDogV3NsRGF0ZVRpbWVTdHJ1Y3QgPSB7XG4gICAgICAgIHllYXI6IHRoaXMuZGF0ZXRpbWUueWVhcixcbiAgICAgICAgbW9udGg6IHRoaXMuZGF0ZXRpbWUubW9udGgsXG4gICAgICAgIGRheTogdGhpcy5kYXRldGltZS5kYXksXG4gICAgICAgIGhvdXJzOiB0aGlzLmRhdGV0aW1lLmhvdXJzLFxuICAgICAgICBtaW51dGVzOiB0aGlzLmRhdGV0aW1lLm1pbnV0ZXMsXG4gICAgICAgIHNlY29uZHM6IHRoaXMuZGF0ZXRpbWUuc2Vjb25kcyxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGUoZGF0ZVN0cnVjdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaW5wdXRCbHVyKCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBnZXRFZmZlY3RpdmVGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBsZXQgZm9ybWF0ID0gdGhpcy5pbnB1dERhdGV0aW1lRm9ybWF0IHx8IElOUFVUX0RBVEVfRk9STUFUUy5EQVRFX09OTFk7XG5cbiAgICBpZiAodGhpcy5zaG93VGltZUNvbnRyb2xzICYmICF0aGlzLmhhc1RpbWVJbkZvcm1hdChmb3JtYXQpKSB7XG4gICAgICBmb3JtYXQgKz0gdGhpcy5fc2Vjb25kcyA/ICcgSEg6bW06c3MnIDogJyBISDptbSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuXG4gIG9uVGltZUNoYW5nZShldmVudDogV3NsVGltZVN0cnVjdCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG5cbiAgICB0aGlzLmRhdGV0aW1lID0gbmV3IERhdGVUaW1lTW9kZWwoe1xuICAgICAgLi4udGhpcy5kYXRldGltZSxcbiAgICAgIGhvdXJzOiBldmVudC5ob3VycyxcbiAgICAgIG1pbnV0ZXM6IGV2ZW50Lm1pbnV0ZXMsXG4gICAgICBzZWNvbmRzOiBldmVudC5zZWNvbmRzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZXREYXRlU3RyaW5nTW9kZWwoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGhhc1ZhbGlkRGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoXG4gICAgICB0aGlzLmRhdGV0aW1lICYmXG4gICAgICB0eXBlb2YgdGhpcy5kYXRldGltZS55ZWFyID09PSAnbnVtYmVyJyAmJlxuICAgICAgdHlwZW9mIHRoaXMuZGF0ZXRpbWUubW9udGggPT09ICdudW1iZXInICYmXG4gICAgICB0eXBlb2YgdGhpcy5kYXRldGltZS5kYXkgPT09ICdudW1iZXInXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZU1vbnRoc0FuZFllYXJzKCk6IHZvaWQge1xuICAgIHRoaXMubW9udGhzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIGkpID0+XG4gICAgICB0aGlzLmdldE1vbnRoTmFtZShpICsgMSlcbiAgICApO1xuICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMubWluRGF0ZT8ueWVhciB8fCBjdXJyZW50WWVhciAtIDUwO1xuICAgIGNvbnN0IGVuZFllYXIgPSB0aGlzLm1heERhdGU/LnllYXIgfHwgY3VycmVudFllYXIgKyA1MDtcblxuICAgIHRoaXMueWVhcnMgPSBBcnJheS5mcm9tKFxuICAgICAgeyBsZW5ndGg6IGVuZFllYXIgLSBzdGFydFllYXIgKyAxIH0sXG4gICAgICAoXywgaSkgPT4gZW5kWWVhciAtIGlcbiAgICApLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcbiAgfVxuXG4gIG9uTW9udGhTZWxlY3QoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xuICAgIGNvbnN0IG5ld01vbnRoID0gcGFyc2VJbnQoc2VsZWN0LnZhbHVlLCAxMCk7XG4gICAgaWYgKG5ld01vbnRoICE9PSB0aGlzLmN1cnJlbnRNb250aCkge1xuICAgICAgY29uc3Qgb2xkTW9udGggPSB0aGlzLmN1cnJlbnRNb250aDtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gbmV3TW9udGg7XG4gICAgICB0aGlzLm1vbnRoQ2hhbmdlZC5lbWl0KG5ld01vbnRoKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpO1xuICAgICAgdGhpcy5uYXZpZ2F0ZSh7XG4gICAgICAgIGN1cnJlbnQ6IHsgeWVhcjogdGhpcy5jdXJyZW50WWVhciwgbW9udGg6IG9sZE1vbnRoIH0sXG4gICAgICAgIG5leHQ6IHsgeWVhcjogdGhpcy5jdXJyZW50WWVhciwgbW9udGg6IG5ld01vbnRoIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblllYXJTZWxlY3QoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xuICAgIGNvbnN0IG5ld1llYXIgPSBwYXJzZUludChzZWxlY3QudmFsdWUsIDEwKTtcbiAgICBpZiAobmV3WWVhciAhPT0gdGhpcy5jdXJyZW50WWVhcikge1xuICAgICAgY29uc3Qgb2xkWWVhciA9IHRoaXMuY3VycmVudFllYXI7XG4gICAgICB0aGlzLmN1cnJlbnRZZWFyID0gbmV3WWVhcjtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpO1xuICAgICAgdGhpcy5uYXZpZ2F0ZSh7XG4gICAgICAgIGN1cnJlbnQ6IHsgeWVhcjogb2xkWWVhciwgbW9udGg6IHRoaXMuY3VycmVudE1vbnRoIH0sXG4gICAgICAgIG5leHQ6IHsgeWVhcjogbmV3WWVhciwgbW9udGg6IHRoaXMuY3VycmVudE1vbnRoIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRldGltZS1waWNrZXItY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIj5cbiAgICA8aW5wdXQgI2RhdGVJbnB1dCBbbmdDbGFzc109XCJ7XG4gICAgICAgICduZy12YWxpZCc6IG5nQ29udHJvbD8udmFsaWQgPT09IHRydWUsXG4gICAgICAgICduZy1pbnZhbGlkJzogbmdDb250cm9sPy5pbnZhbGlkID09PSB0cnVlLFxuICAgICAgICAnbmctZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgfVwiIGNsYXNzPVwiZGF0ZXRpbWUtaW5wdXRcIiAoYmx1cik9XCJpbnB1dEJsdXIoKVwiIFtwbGFjZWhvbGRlcl09XCJfcGxhY2Vob2xkZXJcIiBbbmdNb2RlbF09XCJnZXREaXNwbGF5VmFsdWUoKVwiXG4gICAgICAoY2hhbmdlKT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIHdzbFRvb2x0aXAgW3Rvb2x0aXBJY29uT3ZlcmxhcF09XCIxMlwiXG4gICAgICB0b29sdGlwUGxhY2VtZW50PVwidG9wXCIgLz5cbiAgPC9kaXY+XG5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjYWxlbmRhci1pY29uXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IGRpc2FibGVDYWxlbmRhclwiXG4gICAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZWQtYnRuJzogZGlzYWJsZWQgfHwgZGlzYWJsZUNhbGVuZGFyIH1cIiAoY2xpY2spPVwidG9nZ2xlQ2FsZW5kYXIoJGV2ZW50KVwiPlxuICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXIgZmEtbGdcIj48L2k+XG4gIDwvYnV0dG9uPlxuXG4gIDwhLS0gQ3VzdG9tIENhbGVuZGFyIFBvcG92ZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1wb3BvdmVyXCIgW2NsYXNzLnNob3ddPVwic2hvd0NhbGVuZGFyXCIgW2NsYXNzLmhpZGRlbl09XCIhc2hvd0NhbGVuZGFyXCJcbiAgICBbbmdDbGFzc109XCJjYWxlbmRhclBvc2l0aW9uQ2xhc3NcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgPGRpdiBjbGFzcz1cInBvcG92ZXItY29udGVudFwiPlxuICAgICAgPGRpdiAqbmdJZj1cIiFzaG93VGltZVBpY2tlclRvZ2dsZVwiPlxuICAgICAgICA8IS0tIEN1c3RvbSBEYXRlIFBpY2tlciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1kYXRlcGlja2VyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItaGVhZGVyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm5hdi1idG5cIiAoY2xpY2spPVwibmF2aWdhdGVNb250aCgtMSlcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnRcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC15ZWFyLXNlbGVjdHNcIj5cbiAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cIm1vbnRoLXNlbGVjdFwiIFsobmdNb2RlbCldPVwiY3VycmVudE1vbnRoXCIgKGNoYW5nZSk9XCJvbk1vbnRoU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG1vbnRoIG9mIG1vbnRoczsgbGV0IGkgPSBpbmRleFwiIFt2YWx1ZV09XCJpICsgMVwiPlxuICAgICAgICAgICAgICAgICAge3sgbW9udGggfX1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJ5ZWFyLXNlbGVjdFwiIFsobmdNb2RlbCldPVwiY3VycmVudFllYXJcIiAoY2hhbmdlKT1cIm9uWWVhclNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB5ZWFyIG9mIHllYXJzXCIgW3ZhbHVlXT1cInllYXJcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHllYXIgfX1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibmF2LWJ0blwiIChjbGljayk9XCJuYXZpZ2F0ZU1vbnRoKDEpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodFwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY2FsZW5kYXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWVrZGF5c1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2Vla2RheVwiICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla2RheUxhYmVsc1wiPlxuICAgICAgICAgICAgICAgIHt7IGRheSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5c1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5LWNlbGxcIiAqbmdGb3I9XCJsZXQgZGF5IG9mIGNhbGVuZGFyRGF5c1wiIFtjbGFzcy5vdGhlci1tb250aF09XCJkYXkub3RoZXJNb250aFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImRheS5zZWxlY3RlZFwiIFtjbGFzcy5kaXNhYmxlZF09XCJkYXkuZGlzYWJsZWRcIiBbY2xhc3MudG9kYXldPVwiZGF5LnRvZGF5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF0ZShkYXkpXCI+XG4gICAgICAgICAgICAgICAge3sgZGF5LmRheSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd1RpbWVDb250cm9scyAmJiAhaXNEYXRlT25seVwiIGNsYXNzPVwidG9nZ2xlLXRpbWUtYnRuXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNWYWxpZERhdGUoKSB8fCBkaXNhYmxlZFwiIChjbGljayk9XCJ0b2dnbGVEYXRlVGltZVN0YXRlKCRldmVudClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNsb2NrIGZhLWNsb2NrLW8gZmEtbGdcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93VGltZVBpY2tlclRvZ2dsZVwiPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd1RpbWVDb250cm9scyAmJiAhaXNEYXRlT25seVwiIGNsYXNzPVwidG9nZ2xlLWNhbGVuZGFyLWJ0blwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVEYXRlVGltZVN0YXRlKCRldmVudClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIGZhLWxnXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItY29udGFpbmVyXCIgKm5nSWY9XCJzaG93VGltZUNvbnRyb2xzICYmICFpc0RhdGVPbmx5XCI+XG4gICAgICAgICAgPCEtLSBDdXN0b20gVGltZSBQaWNrZXIgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS10aW1lcGlja2VyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1jb250cm9sc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyBkYXRlQ29uZmlnPy50b2tlbnM/LmhvdXJzIHx8IFwiSEhcIiB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidGltZS1idG5cIiAoY2xpY2spPVwiYWRqdXN0VGltZSgnaG91cnMnLCBob3Vyc1N0ZXAgfHwgMSlcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWhhc1ZhbGlkRGF0ZSgpIHx8IGRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi11cFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cInRpbWUtaW5wdXRcIiBbdmFsdWVdPVwiZGF0ZXRpbWU/LmhvdXJzIHx8IDBcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uVGltZUZpZWxkQ2hhbmdlKCdob3VycycsICRldmVudClcIiBbZGlzYWJsZWRdPVwiIWhhc1ZhbGlkRGF0ZSgpIHx8IGRpc2FibGVkXCIgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIG1heD1cIjIzXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidGltZS1idG5cIiAoY2xpY2spPVwiYWRqdXN0VGltZSgnaG91cnMnLCAtKGhvdXJzU3RlcCB8fCAxKSlcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWhhc1ZhbGlkRGF0ZSgpIHx8IGRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1kb3duXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXNlcGFyYXRvclwiPjo8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyBkYXRlQ29uZmlnPy50b2tlbnM/Lm1pbnV0ZXMgfHwgXCJtbVwiIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ0aW1lLWJ0blwiIChjbGljayk9XCJhZGp1c3RUaW1lKCdtaW51dGVzJywgbWludXRlc1N0ZXAgfHwgMSlcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWhhc1ZhbGlkRGF0ZSgpIHx8IGRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi11cFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cInRpbWUtaW5wdXRcIiBbdmFsdWVdPVwiZGF0ZXRpbWU/Lm1pbnV0ZXMgfHwgMFwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25UaW1lRmllbGRDaGFuZ2UoJ21pbnV0ZXMnLCAkZXZlbnQpXCIgW2Rpc2FibGVkXT1cIiFoYXNWYWxpZERhdGUoKSB8fCBkaXNhYmxlZFwiIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBtYXg9XCI1OVwiIC8+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInRpbWUtYnRuXCIgKGNsaWNrKT1cImFkanVzdFRpbWUoJ21pbnV0ZXMnLCAtKG1pbnV0ZXNTdGVwIHx8IDEpKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaGFzVmFsaWREYXRlKCkgfHwgZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWRvd25cIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtc2VwYXJhdG9yXCIgKm5nSWY9XCJzZWNvbmRzXCI+OjwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWZpZWxkXCIgKm5nSWY9XCJzZWNvbmRzXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsPnt7IGRhdGVDb25maWc/LnRva2Vucz8uc2Vjb25kcyB8fCBcInNzXCIgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInRpbWUtYnRuXCIgKGNsaWNrKT1cImFkanVzdFRpbWUoJ3NlY29uZHMnLCBzZWNvbmRzU3RlcCB8fCAxKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaGFzVmFsaWREYXRlKCkgfHwgZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXVwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwidGltZS1pbnB1dFwiIFt2YWx1ZV09XCJkYXRldGltZT8uc2Vjb25kcyB8fCAwXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRpbWVGaWVsZENoYW5nZSgnc2Vjb25kcycsICRldmVudClcIiBbZGlzYWJsZWRdPVwiIWhhc1ZhbGlkRGF0ZSgpIHx8IGRpc2FibGVkXCIgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIG1heD1cIjU5XCIgLz5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidGltZS1idG5cIiAoY2xpY2spPVwiYWRqdXN0VGltZSgnc2Vjb25kcycsIC0oc2Vjb25kc1N0ZXAgfHwgMSkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNWYWxpZERhdGUoKSB8fCBkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tZG93blwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIEJhY2tkcm9wIGZvciBjbG9zaW5nIHBvcG92ZXIgLS0+XG48ZGl2IGNsYXNzPVwiY2FsZW5kYXItYmFja2Ryb3BcIiBbY2xhc3Muc2hvd109XCJzaG93Q2FsZW5kYXJcIiAoY2xpY2spPVwiY2xvc2VDYWxlbmRhcigpXCI+PC9kaXY+Il19
@@ -3836,6 +3836,10 @@ class WslDatetimePickerComponent {
3836
3836
  if (!containerElement || !calendarElement)
3837
3837
  return;
3838
3838
  const containerRect = containerElement.getBoundingClientRect();
3839
+ const positioningContainer = containerElement.querySelector('.datetime-picker-container');
3840
+ const positioningRect = positioningContainer
3841
+ ? positioningContainer.getBoundingClientRect()
3842
+ : containerRect;
3839
3843
  const calendarIconElement = containerElement.querySelector('.calendar-icon');
3840
3844
  const iconRect = (calendarIconElement === null || calendarIconElement === void 0 ? void 0 : calendarIconElement.getBoundingClientRect()) || containerRect;
3841
3845
  const viewportWidth = window.innerWidth;
@@ -3846,7 +3850,7 @@ class WslDatetimePickerComponent {
3846
3850
  : calendarElement.offsetWidth || 350;
3847
3851
  const calendarHeight = calendarElement.offsetHeight || 400;
3848
3852
  if (isMobile) {
3849
- this.applyMobilePositioning(calendarElement, iconRect, viewportWidth, calendarWidth);
3853
+ this.applyMobilePositioning(calendarElement, iconRect, positioningRect, viewportWidth, calendarWidth);
3850
3854
  const verticalClass = this.getVerticalPositionClass(containerRect, viewportHeight, calendarHeight);
3851
3855
  this.calendarPositionClass = verticalClass;
3852
3856
  }
@@ -3860,20 +3864,28 @@ class WslDatetimePickerComponent {
3860
3864
  this.cdr.markForCheck();
3861
3865
  }, 0);
3862
3866
  }
3863
- applyMobilePositioning(element, iconRect, viewportWidth, calendarWidth) {
3867
+ applyMobilePositioning(element, iconRect, containerRect, viewportWidth, calendarWidth) {
3864
3868
  const padding = 16;
3865
3869
  const wouldOverflowRight = iconRect.right + calendarWidth + padding > viewportWidth;
3866
3870
  const wouldOverflowLeft = iconRect.left - calendarWidth - padding < 0;
3871
+ const minCalendarWidth = 280;
3872
+ element.style.position = 'absolute';
3873
+ element.style.transform = '';
3867
3874
  if (wouldOverflowRight && wouldOverflowLeft) {
3868
- element.style.left = `${(viewportWidth - calendarWidth) / 2}px`;
3875
+ const centeredLeft = (viewportWidth - calendarWidth) / 2;
3876
+ const parentRelativeLeft = centeredLeft - containerRect.left;
3877
+ const minRelativeLeft = 16 - containerRect.left;
3878
+ element.style.left = `${Math.max(minRelativeLeft, parentRelativeLeft)}px`;
3869
3879
  element.style.right = 'auto';
3870
3880
  }
3871
3881
  else if (wouldOverflowRight) {
3882
+ const rightOffset = containerRect.right - (viewportWidth - padding);
3872
3883
  element.style.left = 'unset';
3873
- element.style.right = '0';
3884
+ element.style.right = `${Math.max(0, rightOffset)}px`;
3874
3885
  }
3875
3886
  else if (wouldOverflowLeft) {
3876
- element.style.left = '0';
3887
+ const parentRelativeLeft = 16 - containerRect.left;
3888
+ element.style.left = `${parentRelativeLeft}px`;
3877
3889
  element.style.right = 'unset';
3878
3890
  }
3879
3891
  else {
@@ -3881,13 +3893,13 @@ class WslDatetimePickerComponent {
3881
3893
  element.style.right = '0';
3882
3894
  }
3883
3895
  element.style.maxWidth = `${calendarWidth}px`;
3884
- element.style.transform = 'translateY(-10px)';
3885
3896
  }
3886
3897
  clearInlineStyles(element) {
3887
3898
  element.style.left = '';
3888
3899
  element.style.right = '';
3889
3900
  element.style.maxWidth = '';
3890
3901
  element.style.transform = '';
3902
+ element.style.position = '';
3891
3903
  }
3892
3904
  updateCalendarTransforms(isShow) {
3893
3905
  const containerElement = this.elRef.nativeElement;