ca-components 1.0.93 → 1.0.95

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/assets/scss/ca-global.scss +3 -1
  2. package/esm2022/lib/components/ca-input/base-classes/ca-input-base-helpres.mjs +1 -1
  3. package/esm2022/lib/components/ca-input/components/ca-input-commands/ca-input-commands.component.mjs +3 -3
  4. package/esm2022/lib/components/ca-input/config/ca-input.config.mjs +1 -1
  5. package/esm2022/lib/components/ca-input/directives/command-visible.directive.mjs +77 -0
  6. package/esm2022/lib/components/ca-input/directives/min-max-value.directive.mjs +1 -1
  7. package/esm2022/lib/components/ca-input/directives/restrict-input.directive.mjs +19 -22
  8. package/esm2022/lib/components/ca-input/input-test/input-test.component.mjs +94 -49
  9. package/esm2022/lib/components/ca-input/mixins/input-command.mixin.mjs +130 -0
  10. package/esm2022/lib/components/ca-input/mixins/input-helper.mixin.mjs +49 -0
  11. package/esm2022/lib/components/ca-input/mixins/restriction-pipe.mixin.mjs +36 -0
  12. package/esm2022/lib/components/ca-input/pipes/input-pattern.pipe.mjs +2 -4
  13. package/esm2022/lib/components/ca-input-datetime-picker/ca-input-datetime-picker.component.mjs +34 -20
  14. package/esm2022/lib/components/ca-input-dropdown/ca-input-dropdown.component.mjs +6 -6
  15. package/esm2022/lib/components/ca-map/ca-map.component.mjs +7 -7
  16. package/esm2022/lib/components/ca-map-dropdown/ca-map-dropdown.component.mjs +24 -24
  17. package/esm2022/lib/components/ca-map-dropdown/enums/index.mjs +2 -0
  18. package/esm2022/lib/components/ca-map-dropdown/enums/map-dropdown-string.enum.mjs +18 -0
  19. package/esm2022/lib/components/ca-map-dropdown/utils/svg-routes/index.mjs +2 -0
  20. package/esm2022/lib/components/ca-modal-button/ca-modal-button.component.mjs +6 -6
  21. package/esm2022/lib/models/mixin.model.mjs +2 -0
  22. package/fesm2022/ca-components.mjs +1029 -680
  23. package/fesm2022/ca-components.mjs.map +1 -1
  24. package/lib/components/ca-input/config/ca-input.config.d.ts +3 -0
  25. package/lib/components/ca-input/directives/command-visible.directive.d.ts +20 -0
  26. package/lib/components/ca-input/directives/restrict-input.directive.d.ts +14 -2
  27. package/lib/components/ca-input/input-test/input-test.component.d.ts +69 -14
  28. package/lib/components/ca-input/mixins/input-command.mixin.d.ts +24 -0
  29. package/lib/components/ca-input/mixins/input-helper.mixin.d.ts +34 -0
  30. package/lib/components/ca-input/mixins/restriction-pipe.mixin.d.ts +12 -0
  31. package/lib/components/ca-input-datetime-picker/ca-input-datetime-picker.component.d.ts +1 -1
  32. package/lib/components/ca-map-dropdown/ca-map-dropdown.component.d.ts +10 -9
  33. package/lib/components/ca-map-dropdown/enums/index.d.ts +1 -0
  34. package/lib/components/ca-map-dropdown/enums/map-dropdown-string.enum.d.ts +15 -0
  35. package/lib/components/ca-map-dropdown/utils/svg-routes/index.d.ts +1 -0
  36. package/lib/models/mixin.model.d.ts +1 -0
  37. package/package.json +1 -1
  38. package/src/assets/ca-components/svg/input/ic_fuel_card.svg +3 -0
  39. package/src/assets/ca-components/svg/input/ic_input_reset.svg +4 -0
@@ -88,7 +88,8 @@ export class CaInputDatetimePickerComponent {
88
88
  }, 90);
89
89
  }
90
90
  selectLastOneAfterMouseUp() {
91
- if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
91
+ if (this.inputConfig.name ===
92
+ InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
92
93
  this.selectionInput = 1;
93
94
  this.span2.nativeElement.focus();
94
95
  this.setSpanSelection(this.span2.nativeElement);
@@ -140,7 +141,8 @@ export class CaInputDatetimePickerComponent {
140
141
  isNumber(evt) {
141
142
  evt = evt ? evt : window.event;
142
143
  let charCode = evt.which ? evt.which : evt.keyCode;
143
- return ((charCode >= 48 && charCode <= 57) || (charCode >= 96 && charCode <= 105));
144
+ return ((charCode >= 48 && charCode <= 57) ||
145
+ (charCode >= 96 && charCode <= 105));
144
146
  }
145
147
  isNavigationKey(e) {
146
148
  const navigationKeys = [37, 38, 39, 40, 8, 9, 46]; // Arrow keys, Backspace, Tab, Delete
@@ -257,7 +259,9 @@ export class CaInputDatetimePickerComponent {
257
259
  else {
258
260
  if (this.inputConfig.expiredDateInvalid &&
259
261
  moment(this.dateTimeInputDate).isBefore(moment())) {
260
- this.superControl.control?.setErrors({ invalid: true }); // don't accept expired dates
262
+ this.superControl.control?.setErrors({
263
+ invalid: true,
264
+ }); // don't accept expired dates
261
265
  }
262
266
  else {
263
267
  this.calendarService.dateChanged.next(this.dateTimeInputDate);
@@ -321,7 +325,8 @@ export class CaInputDatetimePickerComponent {
321
325
  text = moment(new Date(date)).format('MM/DD/YY');
322
326
  dateFormat = text.split('/');
323
327
  }
324
- else if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
328
+ else if (this.inputConfig.name ===
329
+ InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
325
330
  text = moment(new Date(date)).format('MM/DD/YY');
326
331
  dateFormat = text.split('/');
327
332
  }
@@ -360,9 +365,11 @@ export class CaInputDatetimePickerComponent {
360
365
  ? undefined
361
366
  : parseInt(this.span2.nativeElement.innerHTML);
362
367
  let span3Value;
363
- if (this.inputConfig.name !== InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
368
+ if (this.inputConfig.name !==
369
+ InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
364
370
  span3Value =
365
- isNaN(this.span3.nativeElement.innerHTML) || this.newInputChanged
371
+ isNaN(this.span3.nativeElement.innerHTML) ||
372
+ this.newInputChanged
366
373
  ? ''
367
374
  : parseInt(this.span3.nativeElement.innerHTML);
368
375
  }
@@ -382,12 +389,13 @@ export class CaInputDatetimePickerComponent {
382
389
  this.selectSpanByTabIndex(1, true);
383
390
  }
384
391
  else {
385
- this.dateTimeInputDate = new Date(this.dateTimeInputDate.setMonth(parseInt(this.span1.nativeElement.innerHTML + parseInt(e.key)) -
386
- 1));
392
+ this.dateTimeInputDate = new Date(this.dateTimeInputDate.setMonth(parseInt(this.span1.nativeElement.innerHTML +
393
+ parseInt(e.key)) - 1));
387
394
  if (!final_value)
388
395
  this.span1.nativeElement.innerHTML = 'mm';
389
396
  else
390
- this.span1.nativeElement.innerHTML = (this.span1.nativeElement.innerHTML + parseInt(e.key)).slice(-2);
397
+ this.span1.nativeElement.innerHTML = (this.span1.nativeElement.innerHTML +
398
+ parseInt(e.key)).slice(-2);
391
399
  this.selectionInput = 1;
392
400
  this.selectSpanByTabIndex(1, true);
393
401
  }
@@ -419,12 +427,14 @@ export class CaInputDatetimePickerComponent {
419
427
  this.selectSpanByTabIndex(2, true);
420
428
  }
421
429
  else {
422
- this.dateTimeInputDate = new Date(this.dateTimeInputDate.setDate(parseInt(this.span2.nativeElement.innerHTML + parseInt(e.key))));
430
+ this.dateTimeInputDate = new Date(this.dateTimeInputDate.setDate(parseInt(this.span2.nativeElement.innerHTML +
431
+ parseInt(e.key))));
423
432
  if (!final_value) {
424
433
  this.span2.nativeElement.innerHTML = 'dd';
425
434
  }
426
435
  else {
427
- this.span2.nativeElement.innerHTML = (this.span2.nativeElement.innerHTML + parseInt(e.key)).slice(-2);
436
+ this.span2.nativeElement.innerHTML = (this.span2.nativeElement.innerHTML +
437
+ parseInt(e.key)).slice(-2);
428
438
  }
429
439
  this.selectionInput = 2;
430
440
  this.selectSpanByTabIndex(2, true);
@@ -465,7 +475,8 @@ export class CaInputDatetimePickerComponent {
465
475
  }
466
476
  }
467
477
  }
468
- else if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
478
+ else if (this.inputConfig.name ===
479
+ InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
469
480
  if (!this.selectionInput) {
470
481
  if (isRestart) {
471
482
  this.span1.nativeElement.innerHTML = 'mm';
@@ -480,13 +491,14 @@ export class CaInputDatetimePickerComponent {
480
491
  this.selectSpanByTabIndex(1, true);
481
492
  }
482
493
  else {
483
- this.dateTimeInputDate = new Date(this.dateTimeInputDate.setMonth(parseInt(this.span1.nativeElement.innerHTML + parseInt(e.key)) -
484
- 1));
494
+ this.dateTimeInputDate = new Date(this.dateTimeInputDate.setMonth(parseInt(this.span1.nativeElement.innerHTML +
495
+ parseInt(e.key)) - 1));
485
496
  if (!final_value) {
486
497
  this.span1.nativeElement.innerHTML = 'mm';
487
498
  }
488
499
  else {
489
- this.span1.nativeElement.innerHTML = (this.span1.nativeElement.innerHTML + parseInt(e.key)).slice(-2);
500
+ this.span1.nativeElement.innerHTML = (this.span1.nativeElement.innerHTML +
501
+ parseInt(e.key)).slice(-2);
490
502
  }
491
503
  this.selectionInput = 1;
492
504
  this.selectSpanByTabIndex(1, true);
@@ -579,14 +591,16 @@ export class CaInputDatetimePickerComponent {
579
591
  this.selectionInput = 0;
580
592
  const isUp = direction === 'up';
581
593
  const isDatePicker = this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER;
582
- const isBankCardPicker = this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD;
594
+ const isBankCardPicker = this.inputConfig.name ===
595
+ InputConfigNameStringEnum.DATE_PICKER_BANK_CARD;
583
596
  if (isDatePicker || isBankCardPicker)
584
597
  this.handleDatePickerInput(isUp, isDatePicker);
585
598
  else
586
599
  this.handleTimePickerInput(isUp);
587
600
  }
588
601
  moveSelectionRightOrTab(e) {
589
- const isDatepickerBankCard = this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD;
602
+ const isDatepickerBankCard = this.inputConfig.name ===
603
+ InputConfigNameStringEnum.DATE_PICKER_BANK_CARD;
590
604
  const maxIndex = isDatepickerBankCard ? 1 : 2;
591
605
  if (this.selectionInput < maxIndex && !e.shiftKey) {
592
606
  this.selectionInput += 1;
@@ -738,7 +752,7 @@ export class CaInputDatetimePickerComponent {
738
752
  this.destroy$.complete();
739
753
  }
740
754
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaInputDatetimePickerComponent, deps: [{ token: i1.NgControl, self: true }, { token: i2.CalendarDateTimePickerService }], target: i0.ɵɵFactoryTarget.Component }); }
741
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CaInputDatetimePickerComponent, isStandalone: true, selector: "app-ca-input-datetime-picker", inputs: { inputConfig: "inputConfig" }, outputs: { clearInputEvent: "clear", blurInputEvent: "blurInput", selectLastOneForSelectionEmitter: "selectLastOneForSelectionEmitter", selectLastOneAfterMouseUpEmitter: "selectLastOneAfterMouseUpEmitter", onDatePasteEmitter: "onDatePasteEmitter", onFocusEmitter: "onFocusEmitter", changeSelectionEmmiter: "changeSelectionEmmiter", setSelectionEmmiter: "setSelectionEmmiter" }, providers: [CalendarDateTimePickerService], viewQueries: [{ propertyName: "caInputPlaceholderIconComponent", first: true, predicate: CaInputPlaceholderIconComponent, descendants: true }, { propertyName: "dateTimePopover", first: true, predicate: ["dateTimePopover"], descendants: true }, { propertyName: "caInputComponent", first: true, predicate: CaInputComponent, descendants: true, static: true }, { propertyName: "span1", first: true, predicate: ["span1"], descendants: true }, { propertyName: "span2", first: true, predicate: ["span2"], descendants: true }, { propertyName: "span3", first: true, predicate: ["span3"], descendants: true }, { propertyName: "holder1", first: true, predicate: ["holder1"], descendants: true }], ngImport: i0, template: "<div\n class=\"datetime-picker-main-holder input-custom-group datetimeclass\"\n [ngClass]=\"\n getSuperControl\n | inputContainerClass\n : caInputComponent.isFocusInput\n : caInputComponent.isTouchedInput\n : inputConfig\n : getSuperControl?.value\n \"\n>\n <div\n #holder1\n class=\"date_time_holder input-control\"\n [class.active]=\"showDateInput\"\n tabindex=\"-1\"\n (mousedown)=\"selectLastOneForSelection()\"\n (mouseup)=\"selectLastOneAfterMouseUp()\"\n (paste)=\"onDatePaste($event)\"\n (keydown)=\"changeSelection($event, true)\"\n (click)=\"toggleDropdownOptions()\"\n [ngStyle]=\"{\n 'padding-left': inputConfig.isIconHidden ? '2px' : '27px'\n }\"\n [ngClass]=\"\n caInputComponent.isFocusInput\n | inputDatetimePickerClass\n : false\n : getSuperControl\n : inputConfig\n : caInputComponent.isTouchedInput\n : getSuperControl?.value\n \"\n >\n <span\n #span1\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !caInputComponent.isFocusInput\n }\"\n tabindex=\"0\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'mm' : 'HH'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ':'\"\n ></div>\n </span>\n <span\n #span2\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !caInputComponent.isFocusInput\n }\"\n tabindex=\"1\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'dd' : 'MM'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ' '\"\n ></div>\n </span>\n <span\n #span3\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !caInputComponent.isFocusInput\n }\"\n tabindex=\"2\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'yy' : 'AM'\"\n ></span>\n </div>\n <app-ca-input\n [inputConfig]=\"inputConfig\"\n [dateTimePopover]=\"dateTimePopover\"\n (focusInputEvent)=\"handleFocusInput($event)\"\n (handleToggleDropdownOptions)=\"toggleDropdownOptions()\"\n (closePopover)=\"blurOnDateTime()\"\n (blurInput)=\"onBlurInput($event)\"\n (clear)=\"clearInput($event)\"\n [formControl]=\"getSuperControl! | formControl\"\n ></app-ca-input>\n</div>\n\n<!-- Popover for DateTime Pickers -->\n<ng-template #dateTimePopover let-data=\"data\">\n <div class=\"datetime-dropdown-holder\">\n <app-ca-custom-datetime-pickers\n [calendarType]=\"\n inputConfig.name === 'datepicker' ||\n inputConfig.name === 'datepickerBankCard'\n ? 'date'\n : 'time'\n \"\n [inputConfig]=\"inputConfig\"\n [placeholder]=\"'MM/DD/YY'\"\n [dateTime]=\"dateTimeInputDate\"\n (closePopover)=\"closePopover()\"\n ></app-ca-custom-datetime-pickers>\n </div>\n</ng-template>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap\";@import\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css\";.ca-font-thin{font-weight:100!important}.ca-font-extra-light{font-weight:200!important}.ca-font-light{font-weight:300!important}.ca-font-regular{font-weight:400!important}.ca-font-medium{font-weight:500!important}.ca-font-semi-bold{font-weight:600!important}.ca-font-bold{font-weight:700!important}.ca-font-extra-bold{font-weight:800!important}.ca-font-black{font-weight:900!important}.pickup-delivery-popover{top:-38px!important;max-width:340px!important}.pickup-delivery-popover.bs-popover-top{top:auto!important;bottom:-38px!important}.pickup-delivery-popover.bs-popover-top .load-component .assigned-load-holder{order:3;margin-top:4px;margin-bottom:0!important}.pickup-delivery-popover.bs-popover-top .load-component .statusBar{order:2;margin-top:4px}.pickup-delivery-popover.bs-popover-top .load-component .animation-three-tabs{order:1}.gps_dropdown_popover{top:-38px;max-width:494px}.gps_dropdown_popover .popover-body{padding:0}.table-progress-popover{background-color:unset!important;margin-left:-10px}.table-progress-popover .progress-dropdown{margin-top:-6px;width:260px;height:200px;background:#2f2f2f;border-radius:3px;padding:8px;box-shadow:0 0 4px #00000026;overflow:hidden;-webkit-animation:progressAnimation .25s ease-in-out;animation:progressAnimation .25s ease-in-out}.table-progress-popover .progress-dropdown .progress-header .progress-title{font-size:18px;font-weight:600;color:#dadada}.table-progress-popover .progress-dropdown .progress-header .progress-title span{font-weight:400}.table-progress-popover .progress-dropdown .progress-header .progress-total{font-size:14px;line-height:17px;color:#dadada}.table-progress-popover .progress-dropdown .table-progress-bar-container{width:100%;height:8px;margin-top:6px;border-radius:2px;overflow:hidden}.table-progress-popover .progress-dropdown .table-progress-bar-container .table-progress-bar{height:100%}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-dual-info-container .progress-info-container{width:50%}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-info-container{margin-top:10px}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-info-container .progress-info-title{margin-bottom:2px;font-size:11px;font-weight:700;line-height:14px;color:#ffffffb2}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-info-container .progress-info-text{font-size:14px;line-height:18px;color:#dadada}.table-progress-popover .progress-dropdown.credit-dropdown{height:100px}@-webkit-keyframes progressAnimation{0%{height:0px}to{height:220px}}@keyframes progressAnimation{0%{height:0px}to{height:220px}}ngb-popover-window{padding:unset!important;border:unset!important}ngb-popover-window .popover-arrow{display:none!important}ngb-popover-window .popover-body{padding:unset!important}.dispatch-note .popover-body{position:relative;top:-4px;left:-4px}.tooltip{font-size:12px;position:relative}.tooltip.show{opacity:.83}.tooltip.fade:after,.tooltip.fade:before{transform:translateY(-10px);transition:all .15s ease-in-out}.tooltip.fade:hover:after,.tooltip.fade:hover:before{opacity:1;transform:translate(0)}.tooltip-inner{padding:4px 10px;white-space:nowrap;max-width:none;border-radius:3px}.tooltip-inner:empty{padding:0}.placeholder-delete .tooltip-inner{background-color:#f66}.placeholder-delete .arrow:before{border-top-color:#f66}.custom-popup-owners-for-flag .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(126%) translate(-50%)!important;width:130px;border-radius:3px;box-shadow:0 0 3px #0003}.custom-popup-owners-for-flag .arrow{bottom:-18%;transform:rotate(180deg);left:calc(50% + 2.7rem)}.custom-popup-owners-for-flag .tooltip{opacity:.93!important;width:0}.custom-popup-owners{z-index:999}.custom-popup-owners .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(132%);z-index:999;box-shadow:0 0 3px #0003}.custom-popup-owners .arrow{bottom:-20%;transform:rotate(180deg)}.custom-popup-owners .tooltip{transform:translateY(-61px)!important}.custom-popup-owners-year{z-index:999}.custom-popup-owners-year .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(132%);z-index:999;box-shadow:0 0 3px #0003}.custom-popup-owners-year .arrow{bottom:-20%;transform:rotate(180deg)}.custom-popup-owners-year .tooltip{transform:translate(70px,-61px)!important}.custom-popup-owners-info .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(-100%) translate(-10%);width:200px;height:36px;display:flex;justify-content:center;align-items:center;border-radius:3px;margin-top:3px;box-shadow:0 0 3px #0003}.custom-popup-owners-info .tooltip{opacity:.93;width:0}.custom-popup-owners-info .arrow{display:none}.custom-popup-owners-info #phone-inside{position:relative;right:26px;bottom:0}.custom-popup-owners-info-at .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(-108%) translate(-7%);width:270px;height:36px;display:flex;justify-content:center;align-items:center;border-radius:3px;box-shadow:0 0 3px #0003}.custom-popup-owners-info-at .tooltip{opacity:1;width:0}.custom-popup-owners-info-at .arrow{display:none}.custom-popup-owners-for-tag .tooltip-inner{color:#3b3b3b;background-color:#fff;width:100px;border-radius:3px;box-shadow:0 0 3px #0003!important}.custom-popup-owners-for-tag .tooltip{top:5px!important}.custom-popup-owners-for-tag .arrow{bottom:-24%}.align-items-flex-start{justify-content:center;align-items:center}.align-items-flex-end{display:flex;justify-content:center;flex-direction:column;align-self:flex-end;align-items:flex-start}.label-add{align-self:flex-start}.fadeInLoad{animation:fadeInLoad .25s}@keyframes fadeInLoad{0%{opacity:0}to{opacity:1}}.fadeIn{opacity:1;-webkit-transition:.25s;-moz-transition:.25s;-o-transition:.25s;transition:.25s}.thisText:hover .fadeIn{opacity:0}.fadeInLoad{animation-name:example;animation-duration:.25s}@keyframes example{0%{transform:scale(.5)}to{transform:scale(1)}}.tooltip.tooltip-table-icons{left:12px!important;opacity:1}.tooltip.tooltip-table-icons .arrow{display:none!important}.tooltip.tooltip-table-icons .tooltip-inner{border-radius:0 50px 50px;background:#28529f}.tooltip.show{opacity:1;animation:fadeIn ease .5s!important;-webkit-animation:fadeIn ease .5s!important;-moz-animation:fadeIn ease .5s!important;-o-animation:fadeIn ease .5s!important;-ms-animation:fadeIn ease .5s!important}.ta-tooltip{position:absolute;font-size:12px;text-align:center;color:#fff;line-height:22px;z-index:999999!important;opacity:0;white-space:nowrap;transform:scale(.7)}.ta-tooltip.ta-tooltip-show{opacity:.85;transform:scale(1);padding:0 12px}.ta-tooltip.ta-tooltip-bottom-right,.ta-tooltip.ta-tooltip-bottom-right-corner{transform-origin:top left;border-radius:0 15px 15px}.ta-tooltip.ta-tooltip-bottom-left{transform-origin:top right;border-radius:15px 0 15px 15px}@keyframes scaleItem{0%{transform:scale(.4)}to{transform:scale(1)}}.app-ca-main-tooltip{pointer-events:none}.app-ca-main-tooltip .tooltip-inner{padding:0;background-color:transparent;pointer-events:none}.app-ca-main-tooltip .tooltip-inner .tooltip-holder{display:flex;font-size:11px;font-weight:700;border-radius:2px;padding:2px 8px;animation:scaleItem .3s;white-space:normal}.app-ca-main-tooltip .tooltip-inner .tooltip-holder:empty{padding:0}.tooltip-arrow{display:none!important}.trucks.semitruck svg path,.trucks.semisleeper svg path,.trucks.flatbed svg path,.trucks.stepdeck svg path,.trucks.lowboyrgn svg path,.trucks.chassis svg path,.trucks.conestoga svg path,.trucks.sidekit svg path,.trucks.container svg path,.trailers.semitruck svg path,.trailers.semisleeper svg path,.trailers.flatbed svg path,.trailers.stepdeck svg path,.trailers.lowboyrgn svg path,.trailers.chassis svg path,.trailers.conestoga svg path,.trailers.sidekit svg path,.trailers.container svg path{fill:#92b1f5}.trucks.boxtruck svg path,.trucks.reefertruck svg path,.trucks.cargovan svg path,.trucks.dryvan svg path,.trucks.reefer svg path,.trailers.boxtruck svg path,.trailers.reefertruck svg path,.trailers.cargovan svg path,.trailers.dryvan svg path,.trailers.reefer svg path{fill:#fbc88b}.trucks.dumptruck svg path,.trucks.cementtruck svg path,.trucks.garbagetruck svg path,.trucks.enddump svg path,.trucks.bottomdump svg path,.trucks.hopper svg path,.trucks.tanker svg path,.trucks.pneumatictanker svg path,.trailers.dumptruck svg path,.trailers.cementtruck svg path,.trailers.garbagetruck svg path,.trailers.enddump svg path,.trailers.bottomdump svg path,.trailers.hopper svg path,.trailers.tanker svg path,.trailers.pneumatictanker svg path{fill:#ed9292}.trucks.towtruck svg path,.trucks.carhauler svg path,.trucks.spotter svg path,.trucks.carhaulerstigner svg path,.trailers.towtruck svg path,.trailers.carhauler svg path,.trailers.spotter svg path,.trailers.carhaulerstigner svg path{fill:#86c9c3}.trucks .svgtext-template-text,.trailers .svgtext-template-text{color:#fff;transition:color .3s ease-in-out}.colors .black svg #droplet{fill:#6c6c6c}.colors .brown svg #droplet{fill:#a1887f}.colors .darkgreen svg #droplet{fill:#4db6a2}.colors .lightgreen svg #droplet{fill:#81c784}.colors .darkblue svg #droplet{fill:#546fd2}.colors .lightblue svg #droplet{fill:#64b5f6}.colors .gray svg #droplet{fill:#aaa}.colors .purple svg #droplet{fill:#ba68c8}.colors .gold svg #droplet{fill:#bcad79}.colors .silver svg #droplet{fill:#dadada}.colors .red svg #droplet{fill:#f96b69}.colors .pink svg #droplet{fill:#f26ec2}.colors .white svg #droplet{fill:#f1f1f1}.colors .orange svg #droplet{fill:#ff8a65}.colors .yellow svg #droplet{fill:#ffd54f}.colors:hover{transition:all .3s ease-in-out}.colors:hover .black svg #droplet{fill:#3c3c3c}.colors:hover .brown svg #droplet{fill:#8d6e63}.colors:hover .darkgreen svg #droplet{fill:#26a690}.colors:hover .lightgreen svg #droplet{fill:#66bb6a}.colors:hover .darkblue svg #droplet{fill:#304fc1}.colors:hover .lightblue svg #droplet{fill:#42a5f5}.colors:hover .gray svg #droplet{fill:#919191}.colors:hover .purple svg #droplet{fill:#ab47bc}.colors:hover .gold svg #droplet{fill:#aa9c6e}.colors:hover .silver svg #droplet{fill:#b7b7b7}.colors:hover .red svg #droplet{fill:#ef5350}.colors:hover .pink svg #droplet{fill:#fa4daa}.colors:hover .white svg #droplet{fill:#fff}.colors:hover .orange svg #droplet{fill:#ff7043}.colors:hover .yellow svg #droplet{fill:#ffca28}.text-color-black{color:#424242!important}.text-color-black::-moz-selection{background:#42424233!important;color:#424242!important}.text-color-black::selection{background:#42424233!important;color:#424242!important}.text-color-black-2{color:#2f2f2f!important}.text-color-black-2::-moz-selection{background:#2f2f2f33!important;color:#2f2f2f!important}.text-color-black-2::selection{background:#2f2f2f33!important;color:#2f2f2f!important}.text-color-muted{color:#919191!important}.text-color-muted::-moz-selection{background:#91919133!important;color:#919191!important}.text-color-muted::selection{background:#91919133!important;color:#919191!important}.text-color-green{color:#56b4ac!important}.text-color-green::-moz-selection{background:#56b4ac33!important;color:#56b4ac!important}.text-color-green::selection{background:#56b4ac33!important;color:#56b4ac!important}.text-color-blue-13{color:#6692f1!important}.text-color-blue-13::-moz-selection{background:#66921833!important;color:#6692f1!important}.text-color-blue-13::selection{background:#66921833!important;color:#6692f1!important}.text-color-blue-18{color:#3b73ed!important}.text-color-blue-18::-moz-selection{background:#3b73ed33!important;color:#3b73ed!important}.text-color-blue-18::selection{background:#3b73ed33!important;color:#3b73ed!important}.text-color-red-10{color:#e66767!important}.text-color-red-10::-moz-selection{background:#e6676733!important;color:#e66767!important}.text-color-red-10::selection{background:#e6676733!important;color:#e66767!important}.text-color-light-grey{color:#e5e5e5!important}.text-color-light-grey::-moz-selection{background:#e5e5e533!important;color:#e5e5e5!important}.text-color-light-grey::selection{background:#e5e5e533!important;color:#e5e5e5!important}.text-color-light-grey-2{color:#aaa!important}.text-color-light-grey-2::-moz-selection{background:#aaa3!important;color:#aaa!important}.text-color-light-grey-2::selection{background:#aaa3!important;color:#aaa!important}.text-color-light-grey-6{color:#ccc!important}.text-color-light-grey-6::-moz-selection{color:#ccc!important;background:#aaa3!important}.text-color-light-grey-6::selection{color:#ccc!important;background:#aaa3!important}.text-color-white{color:#dadada!important}.text-color-white::-moz-selection{color:#dadada!important;background:#fff3!important}.text-color-white::selection{color:#dadada!important;background:#fff3!important}.text-color-white-4{color:#ffffffb2!important}.text-color-white-4::-moz-selection{color:#ffffffb2!important;background:#fff3!important}.text-color-white-4::selection{color:#ffffffb2!important;background:#fff3!important}.text-color-dark-grey{color:#6c6c6c!important}.text-color-dark-grey::-moz-selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-dark-grey::selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw6-2{color:#6c6c6c!important}.text-color-bw6-2::-moz-selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw6-2::selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw-9{color:#dadada!important}.text-color-bw-9::-moz-selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw-9::selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-grey{color:#919191!important}.text-color-grey::-moz-selection{color:#919191!important;background:#91919133!important}.text-color-grey::selection{color:#919191!important;background:#91919133!important}.text-color-grey .address-text::-moz-selection,.text-color-grey .marker-bold-text::-moz-selection{color:#919191!important;background:#91919133!important}.text-color-grey .address-text::selection,.text-color-grey .marker-bold-text::selection{color:#919191!important;background:#91919133!important}.text-size-11{font-size:11px!important;line-height:14px!important}.text-size-14{font-size:14px!important;line-height:18px!important}.text-size-16{font-size:16px!important;line-height:19px!important}.text-size-18{font-size:18px!important;line-height:22px!important}.text-size-26{font-size:26px!important;line-height:32px!important}.text-size-28{font-size:28px!important;line-height:34px!important}@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.svg-fill-black svg path{fill:#424242!important}.svg-fill-muted svg path{fill:#919191!important}.svg-fill-bw-9 svg path{fill:#dadada!important}.svg-fill-light-grey-2 svg path{fill:#aaa!important}.svg-fill-light-grey-6 svg path{fill:#ccc!important}.svg-fill-blue-13 svg path{fill:#6692f1!important}.svg-fill-blue-19 svg path{fill:#92b1f5!important}.svg-fill-blue-26 svg path{fill:#4dc5eb!important}.svg-hover-muted svg path{transition:all .3s ease-in-out}.svg-hover-muted:hover svg path{fill:#919191!important}.svg-hover-black svg path{transition:all .3s ease-in-out}.svg-hover-black:hover svg path{fill:#424242!important}.svg-hover-blue-15 svg path{transition:all .3s ease-in-out}.svg-hover-blue-15:hover svg path{fill:#0b49d1!important}.svg-hover-bw6-2 svg path{transition:all .3s ease-in-out}.svg-hover-bw6-2:hover svg path{fill:#6c6c6c!important}.svg-hover-trash-red svg path{transition:all .3s ease-in-out}.svg-hover-trash-red:hover svg path{fill:#ff5050!important}.svg-hover-red-14 svg path{transition:all .3s ease-in-out}.svg-hover-red-14:hover svg path{fill:#c20c0c!important}.svg-size-12 svg{width:12px;height:12px}.svg-size-14 svg{width:14px;height:14px}.svg-size-16 svg{width:16px;height:16px}.svg-size-18 svg{width:18px;height:18px}.svg-size-44-16 svg{width:44px;height:16px}*{margin:0;font-family:Montserrat,sans-serif}html{scroll-behavior:auto!important}.gm-style-iw-chr,.gm-style-iw-tc{display:none}.gm-style .gm-style-iw-c{border-radius:0}.gm-style-iw{overflow-y:auto!important;overflow-x:hidden!important}.gm-style-iw>div{overflow:visible!important}.infoWindow{overflow:hidden!important}.gm-style-iw-d,.gm-style-iw.gm-style-iw-c{max-height:350px!important}::ng-deep .popover{--bs-popover-border-width: 0;--bs-popover-body-padding-y: 0;--bs-popover-body-padding-x: 0}::ng-deep .popover .popover-arrow{display:none}.datetime-picker-main-holder{position:relative}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover{transition:.3s ease-in-out}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear{display:inline-block}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-dropdown-arrow:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-icon:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover app-ca-input-placeholder-icon:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear:hover~.input-control{background-color:#dadada}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-dropdown-arrow:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-dropdown-arrow:after:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-icon:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-icon:after:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover app-ca-input-placeholder-icon:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover app-ca-input-placeholder-icon:after:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear:after:hover~.input-control{background-color:#dadada}.datetime-picker-main-holder.input-custom-group.datetimeclass{border-radius:2px!important}.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-empty){background-color:#eee}.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-empty):hover{background-color:#dadada}.datetime-picker-main-holder.input-custom-group.datetimeclass.invalid-empty-focus-out{background-color:#fae3e3}.datetime-picker-main-holder.input-custom-group.datetimeclass.invalid-empty-focus-out:hover{background-color:#f5c7c7}.datetime-picker-main-holder.input-custom-group.datetimeclass.valid-focus-out{background-color:#e2ecf9}.datetime-picker-main-holder.input-custom-group.datetimeclass.valid-focus-out:hover{background-color:#c5d8f3}.datetime-picker-main-holder.input-custom-group.datetimeclass.inactive-empty,.datetime-picker-main-holder.input-custom-group.datetimeclass.inactive-filled{background-color:#f7f7f7}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-empty){background-color:#424242}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-empty):hover{background-color:#6c6c6c}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.valid-focus-out-filled{background-color:red}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.valid-focus-out-filled:hover{background-color:#c5d8f3}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.inactive-empty,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.inactive-filled{background-color:#f7f7f7}\n", "@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.date_time_holder{display:flex;align-items:center;position:absolute;top:0;width:100%;height:100%;padding:0 6px;opacity:0;z-index:20;cursor:text}.date_time_holder span{position:relative;line-height:14px;display:flex;height:100%;align-items:center;z-index:10}.date_time_holder span .border-picker{position:absolute;top:0;left:50%;transform:translate(-50%);height:100%;display:flex;align-items:center;justify-content:center;width:0px}.date_time_holder span::selection{background-color:#fff3;color:#fff}.date_time_holder span div::selection{background-color:#fff3;color:#fff}.date_time_holder::selection{background-color:transparent!important;color:#fff}.date_time_holder span.main{padding:0 2px;outline:none;font-size:14px;z-index:11}.date_time_holder span.main::selection{z-index:10}.date_time_holder span.main:first-child{padding-left:4px}.date_time_holder span.reset-selection-color::selection{background-color:transparent!important;color:#2f2f2f!important}.date_time_holder.focus{opacity:1;padding-left:35px}.date_time_holder.focus span:nth-child(2){z-index:12;pointer-events:none}.date_time_holder.focus span:nth-child(3){z-index:13}.date_time_holder.focus span:nth-child(4){z-index:14;pointer-events:none}.date_time_holder.focus span:nth-child(5){z-index:15}.date_time_holder.valid-focus-out-filled{opacity:1}.date_time_holder.valid-focus-out-filled span,.date_time_holder.valid-focus-out-filled span .border-picker{color:#2f2f2f!important;-webkit-user-select:none;user-select:none}.date_time_holder.dark.valid-focus-out-filled{background:#3b73ed33!important}.date_time_holder.dark.valid-focus-out-filled span,.date_time_holder.dark.valid-focus-out-filled span .border-picker{color:#fff!important}.date_time_holder.dark.valid-focus-out-filled:hover{background:#3b73ed66!important}.date_time_holder.dark.valid-focus-in{background:#0b49d1!important}.date_time_holder.dark.valid-focus-in span,.date_time_holder.dark.valid-focus-in span .border-picker{color:#fff!important}.date_time_holder.focus{background-color:#1d1d1d;color:#fff;transition:.2s ease-in-out}.date_time_holder.valid-focus-in{opacity:1}.date_time_holder.valid-focus-in::selection,.date_time_holder.valid-focus-in div::selection{background-color:#fff3;color:#fff}.date_time_holder.invalid-focus-out-filled{opacity:1}.date_time_holder.date_time_holder_bank_card span.main{padding:0 3px}\n"], dependencies: [{ kind: "ngmodule", type:
755
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CaInputDatetimePickerComponent, isStandalone: true, selector: "ca-input-datetime-picker", inputs: { inputConfig: "inputConfig" }, outputs: { clearInputEvent: "clear", blurInputEvent: "blurInput", selectLastOneForSelectionEmitter: "selectLastOneForSelectionEmitter", selectLastOneAfterMouseUpEmitter: "selectLastOneAfterMouseUpEmitter", onDatePasteEmitter: "onDatePasteEmitter", onFocusEmitter: "onFocusEmitter", changeSelectionEmmiter: "changeSelectionEmmiter", setSelectionEmmiter: "setSelectionEmmiter" }, providers: [CalendarDateTimePickerService], viewQueries: [{ propertyName: "caInputPlaceholderIconComponent", first: true, predicate: CaInputPlaceholderIconComponent, descendants: true }, { propertyName: "dateTimePopover", first: true, predicate: ["dateTimePopover"], descendants: true }, { propertyName: "caInputComponent", first: true, predicate: CaInputComponent, descendants: true, static: true }, { propertyName: "span1", first: true, predicate: ["span1"], descendants: true }, { propertyName: "span2", first: true, predicate: ["span2"], descendants: true }, { propertyName: "span3", first: true, predicate: ["span3"], descendants: true }, { propertyName: "holder1", first: true, predicate: ["holder1"], descendants: true }], ngImport: i0, template: "<div\n class=\"datetime-picker-main-holder input-custom-group datetimeclass\"\n [ngClass]=\"\n getSuperControl\n | inputContainerClass\n : caInputComponent.isFocusInput\n : caInputComponent.isTouchedInput\n : inputConfig\n : getSuperControl?.value\n \"\n>\n <div\n #holder1\n class=\"date_time_holder input-control\"\n [class.active]=\"showDateInput\"\n tabindex=\"-1\"\n (mousedown)=\"selectLastOneForSelection()\"\n (mouseup)=\"selectLastOneAfterMouseUp()\"\n (paste)=\"onDatePaste($event)\"\n (keydown)=\"changeSelection($event, true)\"\n (click)=\"toggleDropdownOptions()\"\n [ngStyle]=\"{\n 'padding-left': inputConfig.isIconHidden ? '2px' : '27px'\n }\"\n [ngClass]=\"\n caInputComponent.isFocusInput\n | inputDatetimePickerClass\n : false\n : getSuperControl\n : inputConfig\n : caInputComponent.isTouchedInput\n : getSuperControl?.value\n \"\n >\n <span\n #span1\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !caInputComponent.isFocusInput\n }\"\n tabindex=\"0\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'mm' : 'HH'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ':'\"\n ></div>\n </span>\n <span\n #span2\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !caInputComponent.isFocusInput\n }\"\n tabindex=\"1\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'dd' : 'MM'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ' '\"\n ></div>\n </span>\n <span\n #span3\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !caInputComponent.isFocusInput\n }\"\n tabindex=\"2\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'yy' : 'AM'\"\n ></span>\n </div>\n <app-ca-input\n [inputConfig]=\"inputConfig\"\n [dateTimePopover]=\"dateTimePopover\"\n (focusInputEvent)=\"handleFocusInput($event)\"\n (handleToggleDropdownOptions)=\"toggleDropdownOptions()\"\n (closePopover)=\"blurOnDateTime()\"\n (blurInput)=\"onBlurInput($event)\"\n (clear)=\"clearInput($event)\"\n [formControl]=\"getSuperControl! | formControl\"\n ></app-ca-input>\n</div>\n\n<!-- Popover for DateTime Pickers -->\n<ng-template #dateTimePopover let-data=\"data\">\n <div class=\"datetime-dropdown-holder\">\n <app-ca-custom-datetime-pickers\n [calendarType]=\"\n inputConfig.name === 'datepicker' ||\n inputConfig.name === 'datepickerBankCard'\n ? 'date'\n : 'time'\n \"\n [inputConfig]=\"inputConfig\"\n [placeholder]=\"'MM/DD/YY'\"\n [dateTime]=\"dateTimeInputDate\"\n (closePopover)=\"closePopover()\"\n ></app-ca-custom-datetime-pickers>\n </div>\n</ng-template>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap\";@import\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css\";.ca-font-thin{font-weight:100!important}.ca-font-extra-light{font-weight:200!important}.ca-font-light{font-weight:300!important}.ca-font-regular{font-weight:400!important}.ca-font-medium{font-weight:500!important}.ca-font-semi-bold{font-weight:600!important}.ca-font-bold{font-weight:700!important}.ca-font-extra-bold{font-weight:800!important}.ca-font-black{font-weight:900!important}.pickup-delivery-popover{top:-38px!important;max-width:340px!important}.pickup-delivery-popover.bs-popover-top{top:auto!important;bottom:-38px!important}.pickup-delivery-popover.bs-popover-top .load-component .assigned-load-holder{order:3;margin-top:4px;margin-bottom:0!important}.pickup-delivery-popover.bs-popover-top .load-component .statusBar{order:2;margin-top:4px}.pickup-delivery-popover.bs-popover-top .load-component .animation-three-tabs{order:1}.gps_dropdown_popover{top:-38px;max-width:494px}.gps_dropdown_popover .popover-body{padding:0}.table-progress-popover{background-color:unset!important;margin-left:-10px}.table-progress-popover .progress-dropdown{margin-top:-6px;width:260px;height:200px;background:#2f2f2f;border-radius:3px;padding:8px;box-shadow:0 0 4px #00000026;overflow:hidden;-webkit-animation:progressAnimation .25s ease-in-out;animation:progressAnimation .25s ease-in-out}.table-progress-popover .progress-dropdown .progress-header .progress-title{font-size:18px;font-weight:600;color:#dadada}.table-progress-popover .progress-dropdown .progress-header .progress-title span{font-weight:400}.table-progress-popover .progress-dropdown .progress-header .progress-total{font-size:14px;line-height:17px;color:#dadada}.table-progress-popover .progress-dropdown .table-progress-bar-container{width:100%;height:8px;margin-top:6px;border-radius:2px;overflow:hidden}.table-progress-popover .progress-dropdown .table-progress-bar-container .table-progress-bar{height:100%}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-dual-info-container .progress-info-container{width:50%}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-info-container{margin-top:10px}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-info-container .progress-info-title{margin-bottom:2px;font-size:11px;font-weight:700;line-height:14px;color:#ffffffb2}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-info-container .progress-info-text{font-size:14px;line-height:18px;color:#dadada}.table-progress-popover .progress-dropdown.credit-dropdown{height:100px}@-webkit-keyframes progressAnimation{0%{height:0px}to{height:220px}}@keyframes progressAnimation{0%{height:0px}to{height:220px}}ngb-popover-window{padding:unset!important;border:unset!important}ngb-popover-window .popover-arrow{display:none!important}ngb-popover-window .popover-body{padding:unset!important}.dispatch-note .popover-body{position:relative;top:-4px;left:-4px}.tooltip{font-size:12px;position:relative}.tooltip.show{opacity:.83}.tooltip.fade:after,.tooltip.fade:before{transform:translateY(-10px);transition:all .15s ease-in-out}.tooltip.fade:hover:after,.tooltip.fade:hover:before{opacity:1;transform:translate(0)}.tooltip-inner{padding:4px 10px;white-space:nowrap;max-width:none;border-radius:3px}.tooltip-inner:empty{padding:0}.placeholder-delete .tooltip-inner{background-color:#f66}.placeholder-delete .arrow:before{border-top-color:#f66}.custom-popup-owners-for-flag .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(126%) translate(-50%)!important;width:130px;border-radius:3px;box-shadow:0 0 3px #0003}.custom-popup-owners-for-flag .arrow{bottom:-18%;transform:rotate(180deg);left:calc(50% + 2.7rem)}.custom-popup-owners-for-flag .tooltip{opacity:.93!important;width:0}.custom-popup-owners{z-index:999}.custom-popup-owners .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(132%);z-index:999;box-shadow:0 0 3px #0003}.custom-popup-owners .arrow{bottom:-20%;transform:rotate(180deg)}.custom-popup-owners .tooltip{transform:translateY(-61px)!important}.custom-popup-owners-year{z-index:999}.custom-popup-owners-year .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(132%);z-index:999;box-shadow:0 0 3px #0003}.custom-popup-owners-year .arrow{bottom:-20%;transform:rotate(180deg)}.custom-popup-owners-year .tooltip{transform:translate(70px,-61px)!important}.custom-popup-owners-info .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(-100%) translate(-10%);width:200px;height:36px;display:flex;justify-content:center;align-items:center;border-radius:3px;margin-top:3px;box-shadow:0 0 3px #0003}.custom-popup-owners-info .tooltip{opacity:.93;width:0}.custom-popup-owners-info .arrow{display:none}.custom-popup-owners-info #phone-inside{position:relative;right:26px;bottom:0}.custom-popup-owners-info-at .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(-108%) translate(-7%);width:270px;height:36px;display:flex;justify-content:center;align-items:center;border-radius:3px;box-shadow:0 0 3px #0003}.custom-popup-owners-info-at .tooltip{opacity:1;width:0}.custom-popup-owners-info-at .arrow{display:none}.custom-popup-owners-for-tag .tooltip-inner{color:#3b3b3b;background-color:#fff;width:100px;border-radius:3px;box-shadow:0 0 3px #0003!important}.custom-popup-owners-for-tag .tooltip{top:5px!important}.custom-popup-owners-for-tag .arrow{bottom:-24%}.align-items-flex-start{justify-content:center;align-items:center}.align-items-flex-end{display:flex;justify-content:center;flex-direction:column;align-self:flex-end;align-items:flex-start}.label-add{align-self:flex-start}.fadeInLoad{animation:fadeInLoad .25s}@keyframes fadeInLoad{0%{opacity:0}to{opacity:1}}.fadeIn{opacity:1;-webkit-transition:.25s;-moz-transition:.25s;-o-transition:.25s;transition:.25s}.thisText:hover .fadeIn{opacity:0}.fadeInLoad{animation-name:example;animation-duration:.25s}@keyframes example{0%{transform:scale(.5)}to{transform:scale(1)}}.tooltip.tooltip-table-icons{left:12px!important;opacity:1}.tooltip.tooltip-table-icons .arrow{display:none!important}.tooltip.tooltip-table-icons .tooltip-inner{border-radius:0 50px 50px;background:#28529f}.tooltip.show{opacity:1;animation:fadeIn ease .5s!important;-webkit-animation:fadeIn ease .5s!important;-moz-animation:fadeIn ease .5s!important;-o-animation:fadeIn ease .5s!important;-ms-animation:fadeIn ease .5s!important}.ta-tooltip{position:absolute;font-size:12px;text-align:center;color:#fff;line-height:22px;z-index:999999!important;opacity:0;white-space:nowrap;transform:scale(.7)}.ta-tooltip.ta-tooltip-show{opacity:.85;transform:scale(1);padding:0 12px}.ta-tooltip.ta-tooltip-bottom-right,.ta-tooltip.ta-tooltip-bottom-right-corner{transform-origin:top left;border-radius:0 15px 15px}.ta-tooltip.ta-tooltip-bottom-left{transform-origin:top right;border-radius:15px 0 15px 15px}@keyframes scaleItem{0%{transform:scale(.4)}to{transform:scale(1)}}.app-ca-main-tooltip{pointer-events:none}.app-ca-main-tooltip .tooltip-inner{padding:0;background-color:transparent;pointer-events:none}.app-ca-main-tooltip .tooltip-inner .tooltip-holder{display:flex;font-size:11px;font-weight:700;border-radius:2px;padding:2px 8px;animation:scaleItem .3s;white-space:normal}.app-ca-main-tooltip .tooltip-inner .tooltip-holder:empty{padding:0}.tooltip-arrow{display:none!important}.trucks.semitruck svg path,.trucks.semisleeper svg path,.trucks.flatbed svg path,.trucks.stepdeck svg path,.trucks.lowboyrgn svg path,.trucks.chassis svg path,.trucks.conestoga svg path,.trucks.sidekit svg path,.trucks.container svg path,.trailers.semitruck svg path,.trailers.semisleeper svg path,.trailers.flatbed svg path,.trailers.stepdeck svg path,.trailers.lowboyrgn svg path,.trailers.chassis svg path,.trailers.conestoga svg path,.trailers.sidekit svg path,.trailers.container svg path{fill:#92b1f5}.trucks.boxtruck svg path,.trucks.reefertruck svg path,.trucks.cargovan svg path,.trucks.dryvan svg path,.trucks.reefer svg path,.trailers.boxtruck svg path,.trailers.reefertruck svg path,.trailers.cargovan svg path,.trailers.dryvan svg path,.trailers.reefer svg path{fill:#fbc88b}.trucks.dumptruck svg path,.trucks.cementtruck svg path,.trucks.garbagetruck svg path,.trucks.enddump svg path,.trucks.bottomdump svg path,.trucks.hopper svg path,.trucks.tanker svg path,.trucks.pneumatictanker svg path,.trailers.dumptruck svg path,.trailers.cementtruck svg path,.trailers.garbagetruck svg path,.trailers.enddump svg path,.trailers.bottomdump svg path,.trailers.hopper svg path,.trailers.tanker svg path,.trailers.pneumatictanker svg path{fill:#ed9292}.trucks.towtruck svg path,.trucks.carhauler svg path,.trucks.spotter svg path,.trucks.carhaulerstigner svg path,.trailers.towtruck svg path,.trailers.carhauler svg path,.trailers.spotter svg path,.trailers.carhaulerstigner svg path{fill:#86c9c3}.trucks .svgtext-template-text,.trailers .svgtext-template-text{color:#fff;transition:color .3s ease-in-out}.colors .black svg #droplet{fill:#6c6c6c}.colors .brown svg #droplet{fill:#a1887f}.colors .darkgreen svg #droplet{fill:#4db6a2}.colors .lightgreen svg #droplet{fill:#81c784}.colors .darkblue svg #droplet{fill:#546fd2}.colors .lightblue svg #droplet{fill:#64b5f6}.colors .gray svg #droplet{fill:#aaa}.colors .purple svg #droplet{fill:#ba68c8}.colors .gold svg #droplet{fill:#bcad79}.colors .silver svg #droplet{fill:#dadada}.colors .red svg #droplet{fill:#f96b69}.colors .pink svg #droplet{fill:#f26ec2}.colors .white svg #droplet{fill:#f1f1f1}.colors .orange svg #droplet{fill:#ff8a65}.colors .yellow svg #droplet{fill:#ffd54f}.colors:hover{transition:all .3s ease-in-out}.colors:hover .black svg #droplet{fill:#3c3c3c}.colors:hover .brown svg #droplet{fill:#8d6e63}.colors:hover .darkgreen svg #droplet{fill:#26a690}.colors:hover .lightgreen svg #droplet{fill:#66bb6a}.colors:hover .darkblue svg #droplet{fill:#304fc1}.colors:hover .lightblue svg #droplet{fill:#42a5f5}.colors:hover .gray svg #droplet{fill:#919191}.colors:hover .purple svg #droplet{fill:#ab47bc}.colors:hover .gold svg #droplet{fill:#aa9c6e}.colors:hover .silver svg #droplet{fill:#b7b7b7}.colors:hover .red svg #droplet{fill:#ef5350}.colors:hover .pink svg #droplet{fill:#fa4daa}.colors:hover .white svg #droplet{fill:#fff}.colors:hover .orange svg #droplet{fill:#ff7043}.colors:hover .yellow svg #droplet{fill:#ffca28}.text-color-black{color:#424242!important}.text-color-black::-moz-selection{background:#42424233!important;color:#424242!important}.text-color-black::selection{background:#42424233!important;color:#424242!important}.text-color-black-2{color:#2f2f2f!important}.text-color-black-2::-moz-selection{background:#2f2f2f33!important;color:#2f2f2f!important}.text-color-black-2::selection{background:#2f2f2f33!important;color:#2f2f2f!important}.text-color-muted{color:#919191!important}.text-color-muted::-moz-selection{background:#91919133!important;color:#919191!important}.text-color-muted::selection{background:#91919133!important;color:#919191!important}.text-color-green{color:#56b4ac!important}.text-color-green::-moz-selection{background:#56b4ac33!important;color:#56b4ac!important}.text-color-green::selection{background:#56b4ac33!important;color:#56b4ac!important}.text-color-blue-13{color:#6692f1!important}.text-color-blue-13::-moz-selection{background:#66921833!important;color:#6692f1!important}.text-color-blue-13::selection{background:#66921833!important;color:#6692f1!important}.text-color-blue-18{color:#3b73ed!important}.text-color-blue-18::-moz-selection{background:#3b73ed33!important;color:#3b73ed!important}.text-color-blue-18::selection{background:#3b73ed33!important;color:#3b73ed!important}.text-color-red-10{color:#e66767!important}.text-color-red-10::-moz-selection{background:#e6676733!important;color:#e66767!important}.text-color-red-10::selection{background:#e6676733!important;color:#e66767!important}.text-color-light-grey{color:#e5e5e5!important}.text-color-light-grey::-moz-selection{background:#e5e5e533!important;color:#e5e5e5!important}.text-color-light-grey::selection{background:#e5e5e533!important;color:#e5e5e5!important}.text-color-light-grey-2{color:#aaa!important}.text-color-light-grey-2::-moz-selection{background:#aaa3!important;color:#aaa!important}.text-color-light-grey-2::selection{background:#aaa3!important;color:#aaa!important}.text-color-light-grey-6{color:#ccc!important}.text-color-light-grey-6::-moz-selection{color:#ccc!important;background:#aaa3!important}.text-color-light-grey-6::selection{color:#ccc!important;background:#aaa3!important}.text-color-white{color:#dadada!important}.text-color-white::-moz-selection{color:#dadada!important;background:#fff3!important}.text-color-white::selection{color:#dadada!important;background:#fff3!important}.text-color-white-4{color:#ffffffb2!important}.text-color-white-4::-moz-selection{color:#ffffffb2!important;background:#fff3!important}.text-color-white-4::selection{color:#ffffffb2!important;background:#fff3!important}.text-color-dark-grey{color:#6c6c6c!important}.text-color-dark-grey::-moz-selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-dark-grey::selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw6-2{color:#6c6c6c!important}.text-color-bw6-2::-moz-selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw6-2::selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw-9{color:#dadada!important}.text-color-bw-9::-moz-selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw-9::selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-grey{color:#919191!important}.text-color-grey::-moz-selection{color:#919191!important;background:#91919133!important}.text-color-grey::selection{color:#919191!important;background:#91919133!important}.text-color-grey .address-text::-moz-selection,.text-color-grey .marker-bold-text::-moz-selection{color:#919191!important;background:#91919133!important}.text-color-grey .address-text::selection,.text-color-grey .marker-bold-text::selection{color:#919191!important;background:#91919133!important}.text-size-11{font-size:11px!important;line-height:14px!important}.text-size-14{font-size:14px!important;line-height:18px!important}.text-size-16{font-size:16px!important;line-height:19px!important}.text-size-18{font-size:18px!important;line-height:22px!important}.text-size-26{font-size:26px!important;line-height:32px!important}.text-size-28{font-size:28px!important;line-height:34px!important}@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.svg-fill-black svg path{fill:#424242!important}.svg-fill-muted svg path{fill:#919191!important}.svg-fill-bw-9 svg path{fill:#dadada!important}.svg-fill-light-grey-2 svg path{fill:#aaa!important}.svg-fill-light-grey-6 svg path{fill:#ccc!important}.svg-fill-blue-13 svg path{fill:#6692f1!important}.svg-fill-blue-19 svg path{fill:#92b1f5!important}.svg-fill-blue-26 svg path{fill:#4dc5eb!important}.svg-hover-muted svg path{transition:all .3s ease-in-out}.svg-hover-muted:hover svg path{fill:#919191!important}.svg-hover-black svg path{transition:all .3s ease-in-out}.svg-hover-black:hover svg path{fill:#424242!important}.svg-hover-blue-15 svg path{transition:all .3s ease-in-out}.svg-hover-blue-15:hover svg path{fill:#0b49d1!important}.svg-hover-bw6-2 svg path{transition:all .3s ease-in-out}.svg-hover-bw6-2:hover svg path{fill:#6c6c6c!important}.svg-hover-trash-red svg path{transition:all .3s ease-in-out}.svg-hover-trash-red:hover svg path{fill:#ff5050!important}.svg-hover-red-14 svg path{transition:all .3s ease-in-out}.svg-hover-red-14:hover svg path{fill:#c20c0c!important}.svg-size-12 svg{width:12px;height:12px}.svg-size-14 svg{width:14px;height:14px}.svg-size-16 svg{width:16px;height:16px}.svg-size-18 svg{width:18px;height:18px}.svg-size-44-16 svg{width:44px;height:16px}*{margin:0;font-family:Montserrat,sans-serif}html{scroll-behavior:auto!important}.gm-style-iw-chr,.gm-style-iw-tc{display:none}.gm-style .gm-style-iw-c{border-radius:0}.gm-style-iw{overflow-y:auto!important;overflow-x:hidden!important}.gm-style-iw>div{overflow:visible!important}.infoWindow{overflow:hidden!important}.gm-style-iw-d,.gm-style-iw.gm-style-iw-c{max-height:350px!important}::ng-deep .popover{--bs-popover-border-width: 0;--bs-popover-body-padding-y: 0;--bs-popover-body-padding-x: 0}::ng-deep .popover .popover-arrow{display:none}.datetime-picker-main-holder{position:relative}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover{transition:.3s ease-in-out}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear{display:inline-block}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-dropdown-arrow:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-icon:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover app-ca-input-placeholder-icon:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear:hover~.input-control{background-color:#dadada}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-dropdown-arrow:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-dropdown-arrow:after:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-icon:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-icon:after:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover app-ca-input-placeholder-icon:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover app-ca-input-placeholder-icon:after:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear:after:hover~.input-control{background-color:#dadada}.datetime-picker-main-holder.input-custom-group.datetimeclass{border-radius:2px!important}.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-empty){background-color:#eee}.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-empty):hover{background-color:#dadada}.datetime-picker-main-holder.input-custom-group.datetimeclass.invalid-empty-focus-out{background-color:#fae3e3}.datetime-picker-main-holder.input-custom-group.datetimeclass.invalid-empty-focus-out:hover{background-color:#f5c7c7}.datetime-picker-main-holder.input-custom-group.datetimeclass.valid-focus-out{background-color:#e2ecf9}.datetime-picker-main-holder.input-custom-group.datetimeclass.valid-focus-out:hover{background-color:#c5d8f3}.datetime-picker-main-holder.input-custom-group.datetimeclass.inactive-empty,.datetime-picker-main-holder.input-custom-group.datetimeclass.inactive-filled{background-color:#f7f7f7}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-empty){background-color:#424242}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-empty):hover{background-color:#6c6c6c}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.valid-focus-out-filled{background-color:red}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.valid-focus-out-filled:hover{background-color:#c5d8f3}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.inactive-empty,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.inactive-filled{background-color:#f7f7f7}\n", "@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.date_time_holder{display:flex;align-items:center;position:absolute;top:0;width:100%;height:100%;padding:0 6px;opacity:0;z-index:20;cursor:text}.date_time_holder span{position:relative;line-height:14px;display:flex;height:100%;align-items:center;z-index:10}.date_time_holder span .border-picker{position:absolute;top:0;left:50%;transform:translate(-50%);height:100%;display:flex;align-items:center;justify-content:center;width:0px}.date_time_holder span::selection{background-color:#fff3;color:#fff}.date_time_holder span div::selection{background-color:#fff3;color:#fff}.date_time_holder::selection{background-color:transparent!important;color:#fff}.date_time_holder span.main{padding:0 2px;outline:none;font-size:14px;z-index:11}.date_time_holder span.main::selection{z-index:10}.date_time_holder span.main:first-child{padding-left:4px}.date_time_holder span.reset-selection-color::selection{background-color:transparent!important;color:#2f2f2f!important}.date_time_holder.focus{opacity:1;padding-left:35px}.date_time_holder.focus span:nth-child(2){z-index:12;pointer-events:none}.date_time_holder.focus span:nth-child(3){z-index:13}.date_time_holder.focus span:nth-child(4){z-index:14;pointer-events:none}.date_time_holder.focus span:nth-child(5){z-index:15}.date_time_holder.valid-focus-out-filled{opacity:1}.date_time_holder.valid-focus-out-filled span,.date_time_holder.valid-focus-out-filled span .border-picker{color:#2f2f2f!important;-webkit-user-select:none;user-select:none}.date_time_holder.dark.valid-focus-out-filled{background:#3b73ed33!important}.date_time_holder.dark.valid-focus-out-filled span,.date_time_holder.dark.valid-focus-out-filled span .border-picker{color:#fff!important}.date_time_holder.dark.valid-focus-out-filled:hover{background:#3b73ed66!important}.date_time_holder.dark.valid-focus-in{background:#0b49d1!important}.date_time_holder.dark.valid-focus-in span,.date_time_holder.dark.valid-focus-in span .border-picker{color:#fff!important}.date_time_holder.focus{background-color:#1d1d1d;color:#fff;transition:.2s ease-in-out}.date_time_holder.valid-focus-in{opacity:1}.date_time_holder.valid-focus-in::selection,.date_time_holder.valid-focus-in div::selection{background-color:#fff3;color:#fff}.date_time_holder.invalid-focus-out-filled{opacity:1}.date_time_holder.date_time_holder_bank_card span.main{padding:0 3px}\n"], dependencies: [{ kind: "ngmodule", type:
742
756
  // modules
743
757
  CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: AngularSvgIconModule }, { kind: "component", type:
744
758
  // components
@@ -748,7 +762,7 @@ export class CaInputDatetimePickerComponent {
748
762
  }
749
763
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaInputDatetimePickerComponent, decorators: [{
750
764
  type: Component,
751
- args: [{ selector: 'app-ca-input-datetime-picker', standalone: true, imports: [
765
+ args: [{ selector: 'ca-input-datetime-picker', standalone: true, imports: [
752
766
  // modules
753
767
  CommonModule,
754
768
  FormsModule,
@@ -806,4 +820,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
806
820
  type: ViewChild,
807
821
  args: ['holder1', { static: false }]
808
822
  }] } });
809
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLFdBQVcsRUFFWCxtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsVUFBVTtBQUNWLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkxQyxPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJFLE9BQU87QUFDUCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDRCQUE0QixHQUM3QixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLGFBQWE7QUFDYixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN0SCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxzRkFBc0YsQ0FB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ZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2VsZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3Jtc01vZHVsZSxcbiAgTmdDb250cm9sLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBOZ2JQb3BvdmVyIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbi8vIE1vZGVsc1xuaW1wb3J0IHsgSUNhSW5wdXQgfSBmcm9tICcuLi9jYS1pbnB1dC9jb25maWcnO1xuaW1wb3J0IHsgSW5wdXRDaGFuZ2VWYWx1ZSwgSW5wdXRTdmdSb3V0ZXMgfSBmcm9tICcuLi9jYS1pbnB1dC91dGlscyc7XG5cbi8vIFBpcGVcbmltcG9ydCB7XG4gIElucHV0Q29udGFpbmVyQ2xhc3NQaXBlLFxuICBJbnB1dERhdGV0aW1lUGlja2VyQ2xhc3NQaXBlLFxufSBmcm9tICcuLi9jYS1pbnB1dC9waXBlcyc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCB7IENhSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9jYS1pbnB1dC9jYS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FDdXN0b21EYXRldGltZVBpY2tlcnNDb21wb25lbnQgfSBmcm9tICcuLi9jYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vycy9jYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vycy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NhLWlucHV0L2NvbXBvbmVudHMvY2EtaW5wdXQtcGxhY2Vob2xkZXItaWNvbi9jYS1pbnB1dC1wbGFjZWhvbGRlci1pY29uLmNvbXBvbmVudCc7XG5cbi8vIEVudW1zXG5pbXBvcnQgeyBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtIH0gZnJvbSAnLi4vY2EtaW5wdXQvZW51bXMnO1xuXG4vLyBTZXJ2aWNlc1xuaW1wb3J0IHsgQ2FsZW5kYXJEYXRlVGltZVBpY2tlclNlcnZpY2UgfSBmcm9tICcuLi9jYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vycy9zZXJ2aWNlcy9jYWxlbmRhci1kYXRldGltZS1waWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBbmd1bGFyU3ZnSWNvbk1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xQaXBlIH0gZnJvbSAnLi4vY2EtaW5wdXQvcGlwZXMvZm9ybS1jb250cm9sLnBpcGUnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNhLWlucHV0LWRhdGV0aW1lLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnLFxuICAgICcuLi9jYS1pbnB1dC9zY3NzLy9jYS1pbnB1dC5kYXRlcGlja2VyLnNjc3MnLFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgLy8gbW9kdWxlc1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEFuZ3VsYXJTdmdJY29uTW9kdWxlLFxuICAgIC8vIGNvbXBvbmVudHNcbiAgICBDYUlucHV0Q29tcG9uZW50LFxuICAgIENhQ3VzdG9tRGF0ZXRpbWVQaWNrZXJzQ29tcG9uZW50LFxuICAgIC8vIHBpcGVzXG4gICAgSW5wdXREYXRldGltZVBpY2tlckNsYXNzUGlwZSxcbiAgICBJbnB1dENvbnRhaW5lckNsYXNzUGlwZSxcbiAgICBGb3JtQ29udHJvbFBpcGUsXG4gIF0sXG4gIHByb3ZpZGVyczogW0NhbGVuZGFyRGF0ZVRpbWVQaWNrZXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FJbnB1dERhdGV0aW1lUGlja2VyQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKSBpbnB1dENvbmZpZyE6IElDYUlucHV0O1xuXG4gIEBPdXRwdXQoJ2NsZWFyJykgY2xlYXJJbnB1dEV2ZW50OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgnYmx1cklucHV0JykgYmx1cklucHV0RXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBWaWV3Q2hpbGQoQ2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudClcbiAgY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudCE6IENhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnZGF0ZVRpbWVQb3BvdmVyJykgZGF0ZVRpbWVQb3BvdmVyITogTmdiUG9wb3ZlcjtcbiAgQFZpZXdDaGlsZChDYUlucHV0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBjYUlucHV0Q29tcG9uZW50ITogQ2FJbnB1dENvbXBvbmVudDtcblxuICBwdWJsaWMgc2hvd0RhdGVJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZGF0ZVRpbWVJbnB1dERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwdWJsaWMgc2VsZWN0aW9uSW5wdXQ6IG51bWJlciA9IC0xO1xuXG4gIHByaXZhdGUgZGF0ZVRpbWVNYWluVGltZXIhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcbiAgcHJpdmF0ZSBmb2N1c0JsdXIhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcbiAgcHJpdmF0ZSB0aW1lb3V0Q2xlYW5lciE6IE5vZGVKUy5UaW1lb3V0IHwgbnVtYmVyO1xuXG4gIHB1YmxpYyBpbnB1dFN2Z1JvdXRlcyA9IElucHV0U3ZnUm91dGVzO1xuXG4gIHB1YmxpYyBpc1RvdWNoZWRJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgcHJldmVudEJsdXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gRGF0ZVxuICBwdWJsaWMgbmV3SW5wdXRDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHNlbGVjdExhc3RPbmVGb3JTZWxlY3Rpb25FbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvbkRhdGVQYXN0ZUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPENsaXBib2FyZEV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25Gb2N1c0VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjaGFuZ2VTZWxlY3Rpb25FbW1pdGVyID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgZTogS2V5Ym9hcmRFdmVudDtcbiAgICBub1ByZXZlbnREZWZhdWx0OiBib29sZWFuO1xuICB9PigpO1xuICBAT3V0cHV0KCkgc2V0U2VsZWN0aW9uRW1taXRlciA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkO1xuICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcbiAgICB0YXJnZXQ6IGFueTtcbiAgfT4oKTtcblxuICBAVmlld0NoaWxkKCdzcGFuMScsIHsgc3RhdGljOiBmYWxzZSB9KSBzcGFuMSE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NwYW4yJywgeyBzdGF0aWM6IGZhbHNlIH0pIHNwYW4yITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3BhbjMnLCB7IHN0YXRpYzogZmFsc2UgfSkgc3BhbjMhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdob2xkZXIxJywgeyBzdGF0aWM6IGZhbHNlIH0pIGhvbGRlcjEhOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBTZWxmKCkgcHVibGljIHN1cGVyQ29udHJvbDogTmdDb250cm9sLFxuICAgIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlOiBDYWxlbmRhckRhdGVUaW1lUGlja2VyU2VydmljZVxuICApIHtcbiAgICB0aGlzLnN1cGVyQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSlcbiAgICAgICAgdGhpcy5zZXRUaW1lRGF0ZUlucHV0KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLCB0cnVlKTtcbiAgICB9LCAzMDApO1xuXG4gICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuZGF0ZUNoYW5nZWRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGUpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLnNldFRpbWVEYXRlSW5wdXQoZGF0ZSk7XG4gICAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDI/LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0IGdldFN1cGVyQ29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbDtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RMYXN0T25lRm9yU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGxldCByYW5nZSwgc2VsZWN0aW9uO1xuXG4gICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dCA9IHRydWU7XG5cbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudC5jcmVhdGVSYW5nZSkge1xuICAgICAgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT1cbiAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICkge1xuICAgICAgICByYW5nZS5zZXRTdGFydCh0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICByYW5nZS5zZXRFbmQodGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICAgIHJhbmdlLnNldEVuZCh0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgfVxuXG4gICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuXG4gICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICB9LCA5MCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcCgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSB0cnVlO1xuXG4gICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICB9LCA5MCk7XG4gIH1cblxuICBwdWJsaWMgb25EYXRlUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IHBhc3RlVGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcGFzdGVkRGF0ZSA9IG5ldyBEYXRlKHBhc3RlVGV4dCk7XG4gICAgaWYgKCFpc05hTihwYXN0ZWREYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChwYXN0ZWREYXRlKTtcbiAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNoYW5nZVNlbGVjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCwgbm9QcmV2ZW50RGVmYXVsdCA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOYXZpZ2F0aW9uS2V5ID0gdGhpcy5pc05hdmlnYXRpb25LZXkoZXZlbnQpO1xuICAgIGNvbnN0IGlzU3BlY2lhbFRpbWVQaWNrZXJLZXkgPVxuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMyAmJlxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSO1xuXG4gICAgaWYgKGlzTmF2aWdhdGlvbktleSB8fCBpc1NwZWNpYWxUaW1lUGlja2VyS2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5oYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTnVtYmVyKGV2ZW50KSkge1xuICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICB0aGlzLmhhbmRsZUtleWJvYXJkSW5wdXRzKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTnVtYmVyKGV2dDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGV2dCA9IGV2dCA/IGV2dCA6ICh3aW5kb3cuZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCk7XG4gICAgbGV0IGNoYXJDb2RlID0gZXZ0LndoaWNoID8gZXZ0LndoaWNoIDogZXZ0LmtleUNvZGU7XG4gICAgcmV0dXJuIChcbiAgICAgIChjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1NykgfHwgKGNoYXJDb2RlID49IDk2ICYmIGNoYXJDb2RlIDw9IDEwNSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc05hdmlnYXRpb25LZXkoZTogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5hdmlnYXRpb25LZXlzID0gWzM3LCAzOCwgMzksIDQwLCA4LCA5LCA0Nl07IC8vIEFycm93IGtleXMsIEJhY2tzcGFjZSwgVGFiLCBEZWxldGVcbiAgICByZXR1cm4gbmF2aWdhdGlvbktleXMuaW5jbHVkZXMoZS5rZXlDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZvY3VzKGV2ZW50PzogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIHRoaXMub25Gb2N1c0VtaXR0ZXIuZW1pdChldmVudCk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50MilcbiAgICAgIHRoaXMuY2FJbnB1dENvbXBvbmVudC5jYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50LnQyLmNsb3NlKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRHJvcGRvd25PcHRpb25zKCkge1xuICAgIGlmICh0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50Mikge1xuICAgICAgaWYgKCF0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50Mi5pc09wZW4oKSkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDIub3BlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICAvLyB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICAgIGxldCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhbmRsZUZvY3VzSW5wdXQoZTogRXZlbnQpIHtcbiAgICBjb25zdCBldmVudCA9IGUgYXMgRm9jdXNFdmVudDtcblxuICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xICYmXG4gICAgICAgICAgKGV2ZW50Py50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5ub2RlTmFtZSA9PT0gJ0lOUFVUJykgfHxcbiAgICAgICAgKGV2ZW50Py5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8ubm9kZU5hbWUgPT09ICdJTlBVVCcgfHxcbiAgICAgICAgZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgPT09IG51bGxcbiAgICAgICkge1xuICAgICAgICB0aGlzLnByZXZlbnRCbHVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50Mi50b2dnbGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0U3BhblNlbGVjdGlvbihlbGVtZW50OiBOb2RlKTogdm9pZCB7XG4gICAgbGV0IHJhbmdlOiBSYW5nZTtcbiAgICBsZXQgc2VsZWN0aW9uOiBTZWxlY3Rpb24gfCBudWxsO1xuXG4gICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHtcbiAgICAgIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTtcbiAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0aW9uKGV2ZW50OiB7XG4gICAgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQ7XG4gICAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB2b2lkO1xuICAgIHRhcmdldDogYW55O1xuICB9KTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcblxuICAgIGNvbnN0IHNlbGVjdGlvbklucHV0ID0gcGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykpO1xuXG4gICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmIChjdXJyZW50U2VsZWN0aW9uICYmIGN1cnJlbnRTZWxlY3Rpb24udG9TdHJpbmcoKS5sZW5ndGggPiAxMCkge1xuICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbWFpbicpKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gc2VsZWN0aW9uSW5wdXQ7XG4gICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24oZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAtMSkge1xuICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlKF86IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRWYWx1ZShfKTtcbiAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7IC8vIE1hcmsgdGhlIGNvbnRyb2wgYXMgdG91Y2hlZFxuICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHt9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKCk6IHZvaWQge31cblxuICAvLyBCTFVSIE9OIElOUFVUXG4gIHB1YmxpYyBibHVyT25EYXRlVGltZSgpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgdGhpcy5kYXRlVGltZU1haW5UaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjE/Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW4yPy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgJiZcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuMz8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuaXNGdXR1cmVEYXRlRGlzYWJsZWQgJiZcbiAgICAgICAgICAgIG1vbWVudCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlKS5pc0FmdGVyKG1vbWVudCgpKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7XG4gICAgICAgICAgICAgIGludmFsaWQ6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBkb24ndCBhY2NlcHQgZnV0dXJlIGRhdGVzXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuZXhwaXJlZERhdGVJbnZhbGlkICYmXG4gICAgICAgICAgICAgIG1vbWVudCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlKS5pc0JlZm9yZShtb21lbnQoKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pOyAvLyBkb24ndCBhY2NlcHQgZXhwaXJlZCBkYXRlc1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuZGF0ZUNoYW5nZWQubmV4dCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdkZCc7XG4gICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuZXhwaXJlZERhdGVJbnZhbGlkICYmXG4gICAgICAgICAgICBtb21lbnQodGhpcy5kYXRlVGltZUlucHV0RGF0ZSkuaXNCZWZvcmUobW9tZW50KCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pOyAvLyBkb24ndCBhY2NlcHQgZXhwaXJlZCBkYXRlc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnTU0nO1xuICAgICAgICAgIHRoaXMuc2V0VGltZVBpY2tlclRpbWUoKTtcbiAgICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IHRydWU7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHB1YmxpYyBvblBvcG92ZXJTaG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSB0cnVlO1xuICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgb25Qb3BvdmVySGlkZGVuKCk6IHZvaWQge1xuICAgIHRoaXMuYmx1ck9uRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUaW1lRGF0ZUlucHV0KGRhdGU6IElucHV0Q2hhbmdlVmFsdWUsIGhhc1ZhbHVlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGxldCB0ZXh0LCBkYXRlRm9ybWF0LCB0aW1lRm9ybWF0O1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIpIHtcbiAgICAgIHRleHQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnTU0vREQvWVknKTtcbiAgICAgIGRhdGVGb3JtYXQgPSB0ZXh0LnNwbGl0KCcvJyk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApIHtcbiAgICAgIHRleHQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnTU0vREQvWVknKTtcbiAgICAgIGRhdGVGb3JtYXQgPSB0ZXh0LnNwbGl0KCcvJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGUgPVxuICAgICAgICBkYXRlIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgID8gZGF0ZVxuICAgICAgICAgIDogbmV3IERhdGUobW9tZW50KCkuZm9ybWF0KCdNTS9ERC9ZWVlZJykgKyAnICcgKyBkYXRlKTtcbiAgICAgIHRleHQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnSEg6bW0nKTtcblxuICAgICAgdGltZUZvcm1hdCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdoaC9tbS9BJyk7XG4gICAgICBkYXRlRm9ybWF0ID0gdGltZUZvcm1hdC5zcGxpdCgnLycpO1xuICAgIH1cblxuICAgIGlmICghaGFzVmFsdWUpIHRoaXMub25DaGFuZ2UodGV4dCk7XG4gICAgLy8gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGV4dDtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5zcGFuMSkgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMF07XG5cbiAgICBpZiAodGhpcy5zcGFuMilcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzFdO1xuICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFsyXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzJdO1xuICAgICAgfVxuXG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZTogS2V5Ym9hcmRFdmVudCwgaXNSZXN0YXJ0PzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHNwYW5PbmVWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID1cbiAgICAgIGlzTmFOKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogcGFyc2VJbnQodGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG4gICAgY29uc3Qgc3BhbjJWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID1cbiAgICAgIGlzTmFOKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogcGFyc2VJbnQodGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG5cbiAgICBsZXQgc3BhbjNWYWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICkge1xuICAgICAgc3BhbjNWYWx1ZSA9XG4gICAgICAgIGlzTmFOKHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgICAgPyAnJ1xuICAgICAgICAgIDogcGFyc2VJbnQodGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG4gICAgfVxuXG4gICAgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMCkge1xuICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcGFuT25lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBmaW5hbF92YWx1ZSA9IHBhcnNlSW50KGAke3NwYW5PbmVWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoXG4gICAgICAgICAgICAgIC0yXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgoXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQodGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KSkgLVxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIWZpbmFsX3ZhbHVlKSB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgocGFyc2VJbnQoZS5rZXkpIC0gMSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKC0yKTtcblxuICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBmaW5hbF92YWx1ZTtcblxuICAgICAgICAgIGlmIChwYXJzZUludChgMSR7ZS5rZXl9YCkgPiAxMikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3BhbjJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGV0IGZpbmFsX3ZhbHVlID0gcGFyc2VJbnQoYCR7c3BhbjJWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDMxKSB7XG4gICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoXG4gICAgICAgICAgICAgIC0yXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RGF0ZShcbiAgICAgICAgICAgICAgICBwYXJzZUludCh0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIWZpbmFsX3ZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RGF0ZShwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKFxuICAgICAgICAgICAgLTJcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHBhcnNlSW50KGAxJHtlLmtleX1gKSA+IDMxKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICghc3BhbjNWYWx1ZSB8fCBzcGFuM1ZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKFxuICAgICAgICAgICAgLTJcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RnVsbFllYXIoXG4gICAgICAgICAgICAgIHBhcnNlSW50KGAyMDAke3BhcnNlSW50KGUua2V5KX1gKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpbmFsWWVhciA9IHBhcnNlSW50KFxuICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmaW5hbFNob3dZZWFyID1cbiAgICAgICAgICAgIGZpbmFsWWVhciA+IDMxXG4gICAgICAgICAgICAgID8gcGFyc2VJbnQoYDE5JHtmaW5hbFllYXJ9YClcbiAgICAgICAgICAgICAgOiBwYXJzZUludChgMjAke2ZpbmFsWWVhcn1gKTtcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKGZpbmFsU2hvd1llYXIpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uSW5wdXQpIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3Bhbk9uZVZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuT25lVmFsdWV9JHtlLmtleX1gKTtcbiAgICAgICAgICBpZiAoZmluYWxfdmFsdWUgPiAxMikge1xuICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKFxuICAgICAgICAgICAgICAtMlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSkpIC1cbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCFmaW5hbF92YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldE1vbnRoKHBhcnNlSW50KGUua2V5KSAtIDEpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZmluYWxfdmFsdWUgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZSgtMik7XG5cbiAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZmluYWxfdmFsdWU7XG5cbiAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXNwYW4yVmFsdWUgfHwgc3BhbjJWYWx1ZS50b1N0cmluZygpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZShcbiAgICAgICAgICAgIC0yXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKFxuICAgICAgICAgICAgICBwYXJzZUludChgMjAwJHtwYXJzZUludChlLmtleSl9YClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaW5hbFllYXIgPSBwYXJzZUludChcbiAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZmluYWxTaG93WWVhciA9XG4gICAgICAgICAgICBmaW5hbFllYXIgPiAzMVxuICAgICAgICAgICAgICA/IHBhcnNlSW50KGAxOSR7ZmluYWxZZWFyfWApXG4gICAgICAgICAgICAgIDogcGFyc2VJbnQoYDIwJHtmaW5hbFllYXJ9YCk7XG4gICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRGdWxsWWVhcihmaW5hbFNob3dZZWFyKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3RTcGFuQnlUYWJJbmRleChpbmR4OiBudW1iZXIsIGNoYW5nZVRhYj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGluZHgpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZVRhYikgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIDM3OiAvLyBMZWZ0IGFycm93XG4gICAgICAgIHRoaXMubW92ZVNlbGVjdGlvbkxlZnQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM5OiAvLyBSaWdodCBhcnJvd1xuICAgICAgY2FzZSA5OiAvLyBUYWJcbiAgICAgICAgdGhpcy5tb3ZlU2VsZWN0aW9uUmlnaHRPclRhYihldmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzODogLy8gVXAgYXJyb3dcbiAgICAgICAgdGhpcy5zZXREYXRlVGltZU1vZGVsKCd1cCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDA6IC8vIERvd24gYXJyb3dcbiAgICAgICAgdGhpcy5zZXREYXRlVGltZU1vZGVsKCdkb3duJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OiAvLyBCYWNrc3BhY2VcbiAgICAgIGNhc2UgNDY6IC8vIERlbGV0ZVxuICAgICAgICB0aGlzLmhhbmRsZUtleWJvYXJkSW5wdXRzKGV2ZW50LCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEYXRlUGlja2VySW5wdXQoaXNVcDogYm9vbGVhbiwgaXNEYXRlUGlja2VyOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHRoaXMudXBkYXRlTW9udGgoaXNVcCk7XG4gICAgZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMSkgdGhpcy51cGRhdGVEYXRlKGlzVXAsIGlzRGF0ZVBpY2tlcik7XG4gICAgZWxzZSB0aGlzLnVwZGF0ZVllYXIoaXNVcCwgaXNEYXRlUGlja2VyKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGF0ZVRpbWVNb2RlbChkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAtMSkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG5cbiAgICBjb25zdCBpc1VwID0gZGlyZWN0aW9uID09PSAndXAnO1xuICAgIGNvbnN0IGlzRGF0ZVBpY2tlciA9XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVI7XG4gICAgY29uc3QgaXNCYW5rQ2FyZFBpY2tlciA9XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEO1xuXG4gICAgaWYgKGlzRGF0ZVBpY2tlciB8fCBpc0JhbmtDYXJkUGlja2VyKVxuICAgICAgdGhpcy5oYW5kbGVEYXRlUGlja2VySW5wdXQoaXNVcCwgaXNEYXRlUGlja2VyKTtcbiAgICBlbHNlIHRoaXMuaGFuZGxlVGltZVBpY2tlcklucHV0KGlzVXApO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlU2VsZWN0aW9uUmlnaHRPclRhYihlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNEYXRlcGlja2VyQmFua0NhcmQgPVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRDtcbiAgICBjb25zdCBtYXhJbmRleCA9IGlzRGF0ZXBpY2tlckJhbmtDYXJkID8gMSA6IDI7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA8IG1heEluZGV4ICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ICs9IDE7XG4gICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSA5ICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dElucHV0KCk7XG4gICAgfSBlbHNlIGlmIChlLnNoaWZ0S2V5ICYmIGUua2V5Q29kZSA9PT0gOSkge1xuICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzSW5wdXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzUHJldmlvdXNJbnB1dCgpOiB2b2lkIHtcbiAgICBjb25zdCBhbGxJbnB1dHMgPSBBcnJheS5mcm9tKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQuaW5wdXQtY29udHJvbCcpXG4gICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50W107XG5cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBhbGxJbnB1dHMuZmluZEluZGV4KFxuICAgICAgKGlucHV0KSA9PiBpbnB1dCA9PT0gdGhpcy5jYUlucHV0Q29tcG9uZW50LmlucHV0Lm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAzO1xuICAgIGVsc2UgaWYgKGN1cnJlbnRJbmRleCA9PT0gMCkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0IC09IDE7XG4gICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQpO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50SW5kZXggPiAwKSBhbGxJbnB1dHNbY3VycmVudEluZGV4IC0gMV0uZm9jdXMoKTtcblxuICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNOZXh0SW5wdXQoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsSW5wdXRzID0gQXJyYXkuZnJvbShcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LmlucHV0LWNvbnRyb2wnKVxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudFtdO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGFsbElucHV0cy5maW5kSW5kZXgoXG4gICAgICAoaW5wdXQpID0+IGlucHV0ID09PSB0aGlzLmNhSW5wdXRDb21wb25lbnQuaW5wdXQubmF0aXZlRWxlbWVudFxuICAgICk7XG5cbiAgICBpZiAoYWxsSW5wdXRzW2N1cnJlbnRJbmRleCArIDFdKSBhbGxJbnB1dHNbY3VycmVudEluZGV4ICsgMV0uZm9jdXMoKTtcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgIHRoaXMuYmx1ck9uRGF0ZVRpbWUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gIH1cblxuICBwdWJsaWMgc2V0SXNGb2N1c0lucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dCA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlU2VsZWN0aW9uTGVmdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgLT0gMTtcbiAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb250aChpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgbW9udGhEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRNb250aChcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRNb250aCgpICsgbW9udGhEZWx0YVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wYWRWYWx1ZShcbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuZ2V0TW9udGgoKSArIDFcbiAgICApO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlKGlzVXA6IGJvb2xlYW4sIGlzRGF0ZVBpY2tlcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGRhdGVEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXREYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldERhdGUoKSArIGRhdGVEZWx0YVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBzcGFuRWxlbWVudCA9IGlzRGF0ZVBpY2tlclxuICAgICAgPyB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnRcbiAgICAgIDogdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50O1xuICAgIHNwYW5FbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUodGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXREYXRlKCkpO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihzcGFuRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVllYXIoaXNVcDogYm9vbGVhbiwgaXNEYXRlUGlja2VyOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgeWVhckRlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldEZ1bGxZZWFyKCkgKyB5ZWFyRGVsdGFcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3Qgc3BhbkVsZW1lbnQgPSBpc0RhdGVQaWNrZXJcbiAgICAgID8gdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50XG4gICAgICA6IHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudDtcbiAgICBzcGFuRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmRhdGVUaW1lSW5wdXREYXRlXG4gICAgICAuZ2V0RnVsbFllYXIoKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC5zbGljZSgtMik7XG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHNwYW5FbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFkVmFsdWUodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVUaW1lUGlja2VySW5wdXQoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAwKSB0aGlzLnVwZGF0ZUhvdXJzKGlzVXApO1xuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHRoaXMudXBkYXRlTWludXRlcyhpc1VwKTtcbiAgICBlbHNlIHRoaXMudG9nZ2xlQU1QTSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVIb3Vycyhpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgaG91cnNEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgbGV0IHNlbGVjdGVkSG91cnMgPSB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldEhvdXJzKCkgKyBob3Vyc0RlbHRhO1xuXG4gICAgaWYgKHNlbGVjdGVkSG91cnMgPT09IDApIHNlbGVjdGVkSG91cnMgPSAyNDtcbiAgICBpZiAoc2VsZWN0ZWRIb3VycyA9PT0gLTEpIHNlbGVjdGVkSG91cnMgPSAyMztcblxuICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0SG91cnMoc2VsZWN0ZWRIb3VycylcbiAgICApO1xuXG4gICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICBzZWxlY3RlZEhvdXJzID4gMTIgPyBzZWxlY3RlZEhvdXJzIC0gMTIgOiBzZWxlY3RlZEhvdXJzXG4gICAgKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50KTtcblxuICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPVxuICAgICAgc2VsZWN0ZWRIb3VycyA+IDExICYmIHNlbGVjdGVkSG91cnMgPCAyNCA/ICdQTScgOiAnQU0nO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNaW51dGVzKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBtaW51dGVzRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TWludXRlcyhcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRNaW51dGVzKCkgKyBtaW51dGVzRGVsdGFcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldE1pbnV0ZXMoKVxuICAgICk7XG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUFNUE0oKTogdm9pZCB7XG4gICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9XG4gICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09PSAnQU0nID8gJ1BNJyA6ICdBTSc7XG5cbiAgICBjb25zdCBob3Vyc1RvQWRkID0gdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9PT0gJ0FNJyA/IC0xMiA6IDEyO1xuICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0SG91cnMoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuZ2V0SG91cnMoKSArIGhvdXJzVG9BZGRcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJJbnB1dChldmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50LmVtaXQoZXZlbnQpO1xuXG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgIHRoaXMucmVzZXREYXRlVGltZUlucHV0cygpO1xuICB9XG5cbiAgcHVibGljIG9uQmx1cklucHV0KGV2ZW50OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5ibHVySW5wdXRFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldERhdGVUaW1lSW5wdXRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNwYW4xKVxuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdkZCc7XG4gICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUlxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ01NJztcbiAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdBTSc7XG4gICAgICB9XG5cbiAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG4gICAgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUaW1lUGlja2VyVGltZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSKVxuICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICBtb21lbnQoKS5mb3JtYXQoJ01NL0REL1lZWVknKSArXG4gICAgICAgICAgKHRoaXMuaW5wdXRDb25maWc/LmlzRnJvbURhdGUgPyAnIDEyOjE1JyA6ICcgMTI6MDAnKVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJkYXRldGltZS1waWNrZXItbWFpbi1ob2xkZXIgaW5wdXQtY3VzdG9tLWdyb3VwIGRhdGV0aW1lY2xhc3NcIlxuICBbbmdDbGFzc109XCJcbiAgICBnZXRTdXBlckNvbnRyb2xcbiAgICAgIHwgaW5wdXRDb250YWluZXJDbGFzc1xuICAgICAgICA6IGNhSW5wdXRDb21wb25lbnQuaXNGb2N1c0lucHV0XG4gICAgICAgIDogY2FJbnB1dENvbXBvbmVudC5pc1RvdWNoZWRJbnB1dFxuICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgIDogZ2V0U3VwZXJDb250cm9sPy52YWx1ZVxuICBcIlxuPlxuICA8ZGl2XG4gICAgI2hvbGRlcjFcbiAgICBjbGFzcz1cImRhdGVfdGltZV9ob2xkZXIgaW5wdXQtY29udHJvbFwiXG4gICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93RGF0ZUlucHV0XCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAobW91c2Vkb3duKT1cInNlbGVjdExhc3RPbmVGb3JTZWxlY3Rpb24oKVwiXG4gICAgKG1vdXNldXApPVwic2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcCgpXCJcbiAgICAocGFzdGUpPVwib25EYXRlUGFzdGUoJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwiY2hhbmdlU2VsZWN0aW9uKCRldmVudCwgdHJ1ZSlcIlxuICAgIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bk9wdGlvbnMoKVwiXG4gICAgW25nU3R5bGVdPVwie1xuICAgICAgJ3BhZGRpbmctbGVmdCc6IGlucHV0Q29uZmlnLmlzSWNvbkhpZGRlbiA/ICcycHgnIDogJzI3cHgnXG4gICAgfVwiXG4gICAgW25nQ2xhc3NdPVwiXG4gICAgICBjYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dFxuICAgICAgICB8IGlucHV0RGF0ZXRpbWVQaWNrZXJDbGFzc1xuICAgICAgICAgIDogZmFsc2VcbiAgICAgICAgICA6IGdldFN1cGVyQ29udHJvbFxuICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICA6IGNhSW5wdXRDb21wb25lbnQuaXNUb3VjaGVkSW5wdXRcbiAgICAgICAgICA6IGdldFN1cGVyQ29udHJvbD8udmFsdWVcbiAgICBcIlxuICA+XG4gICAgPHNwYW5cbiAgICAgICNzcGFuMVxuICAgICAgY2xhc3M9XCJtYWluXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3Jlc2V0LXNlbGVjdGlvbi1jb2xvcic6ICFjYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dFxuICAgICAgfVwiXG4gICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgKG1vdXNldXApPVwic2V0U2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgKGtleWRvd24pPVwiY2hhbmdlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgW2lubmVySFRNTF09XCJpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgPyAnbW0nIDogJ0hIJ1wiXG4gICAgPjwvc3Bhbj5cbiAgICA8c3Bhbj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJib3JkZXItcGlja2VyXCJcbiAgICAgICAgW2lubmVySFRNTF09XCJpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgPyAnLycgOiAnOidcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgI3NwYW4yXG4gICAgICBjbGFzcz1cIm1haW5cIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAncmVzZXQtc2VsZWN0aW9uLWNvbG9yJzogIWNhSW5wdXRDb21wb25lbnQuaXNGb2N1c0lucHV0XG4gICAgICB9XCJcbiAgICAgIHRhYmluZGV4PVwiMVwiXG4gICAgICAobW91c2V1cCk9XCJzZXRTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAoa2V5ZG93bik9XCJjaGFuZ2VTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICBbaW5uZXJIVE1MXT1cImlucHV0Q29uZmlnLm5hbWUgPT09ICdkYXRlcGlja2VyJyA/ICdkZCcgOiAnTU0nXCJcbiAgICA+PC9zcGFuPlxuICAgIDxzcGFuPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImJvcmRlci1waWNrZXJcIlxuICAgICAgICBbaW5uZXJIVE1MXT1cImlucHV0Q29uZmlnLm5hbWUgPT09ICdkYXRlcGlja2VyJyA/ICcvJyA6ICcgJ1wiXG4gICAgICA+PC9kaXY+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuXG4gICAgICAjc3BhbjNcbiAgICAgIGNsYXNzPVwibWFpblwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdyZXNldC1zZWxlY3Rpb24tY29sb3InOiAhY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXRcbiAgICAgIH1cIlxuICAgICAgdGFiaW5kZXg9XCIyXCJcbiAgICAgIChtb3VzZXVwKT1cInNldFNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgIChrZXlkb3duKT1cImNoYW5nZVNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgIFtpbm5lckhUTUxdPVwiaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInID8gJ3l5JyA6ICdBTSdcIlxuICAgID48L3NwYW4+XG4gIDwvZGl2PlxuICA8YXBwLWNhLWlucHV0XG4gICAgW2lucHV0Q29uZmlnXT1cImlucHV0Q29uZmlnXCJcbiAgICBbZGF0ZVRpbWVQb3BvdmVyXT1cImRhdGVUaW1lUG9wb3ZlclwiXG4gICAgKGZvY3VzSW5wdXRFdmVudCk9XCJoYW5kbGVGb2N1c0lucHV0KCRldmVudClcIlxuICAgIChoYW5kbGVUb2dnbGVEcm9wZG93bk9wdGlvbnMpPVwidG9nZ2xlRHJvcGRvd25PcHRpb25zKClcIlxuICAgIChjbG9zZVBvcG92ZXIpPVwiYmx1ck9uRGF0ZVRpbWUoKVwiXG4gICAgKGJsdXJJbnB1dCk9XCJvbkJsdXJJbnB1dCgkZXZlbnQpXCJcbiAgICAoY2xlYXIpPVwiY2xlYXJJbnB1dCgkZXZlbnQpXCJcbiAgICBbZm9ybUNvbnRyb2xdPVwiZ2V0U3VwZXJDb250cm9sISB8IGZvcm1Db250cm9sXCJcbiAgICA+PC9hcHAtY2EtaW5wdXQ+XG48L2Rpdj5cblxuPCEtLSBQb3BvdmVyIGZvciBEYXRlVGltZSBQaWNrZXJzIC0tPlxuPG5nLXRlbXBsYXRlICNkYXRlVGltZVBvcG92ZXIgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxkaXYgY2xhc3M9XCJkYXRldGltZS1kcm9wZG93bi1ob2xkZXJcIj5cbiAgICA8YXBwLWNhLWN1c3RvbS1kYXRldGltZS1waWNrZXJzXG4gICAgICBbY2FsZW5kYXJUeXBlXT1cIlxuICAgICAgICBpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgfHxcbiAgICAgICAgaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXJCYW5rQ2FyZCdcbiAgICAgICAgICA/ICdkYXRlJ1xuICAgICAgICAgIDogJ3RpbWUnXG4gICAgICBcIlxuICAgICAgW2lucHV0Q29uZmlnXT1cImlucHV0Q29uZmlnXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInTU0vREQvWVknXCJcbiAgICAgIFtkYXRlVGltZV09XCJkYXRlVGltZUlucHV0RGF0ZVwiXG4gICAgICAoY2xvc2VQb3BvdmVyKT1cImNsb3NlUG9wb3ZlcigpXCJcbiAgICA+PC9hcHAtY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnM+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
823
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILFdBQVcsRUFFWCxtQkFBbUIsR0FDdEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsVUFBVTtBQUNWLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkxQyxPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJFLE9BQU87QUFDUCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLDRCQUE0QixHQUMvQixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLGFBQWE7QUFDYixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN0SCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxzRkFBc0YsQ0FBQztBQUV2SSxRQUFRO0FBQ1IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFOUQsV0FBVztBQUNYLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUF5QnRFLE1BQU0sT0FBTyw4QkFBOEI7SUFxRHZDLFlBQ21CLFlBQXVCLEVBQzlCLGVBQThDO1FBRHZDLGlCQUFZLEdBQVosWUFBWSxDQUFXO1FBQzlCLG9CQUFlLEdBQWYsZUFBZSxDQUErQjtRQWxEekMsb0JBQWUsR0FDNUIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUNYLG1CQUFjLEdBQy9CLElBQUksWUFBWSxFQUFXLENBQUM7UUFTekIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Isc0JBQWlCLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxtQkFBYyxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBTTVCLG1CQUFjLEdBQUcsY0FBYyxDQUFDO1FBRWhDLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQ3BDLE9BQU87UUFDQSxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUU5QixxQ0FBZ0MsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQy9ELHFDQUFnQyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDL0QsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDeEQsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBQ2hELDJCQUFzQixHQUFHLElBQUksWUFBWSxFQUcvQyxDQUFDO1FBQ0ssd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBSTVDLENBQUM7UUFPRyxhQUFRLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFNbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSztnQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFUixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVc7YUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLCtCQUErQixDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN0RSxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztJQUNyQyxDQUFDO0lBRU0seUJBQXlCO1FBQzVCLElBQUksS0FBSyxFQUFFLFNBQVMsQ0FBQztRQUVyQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRTFDLElBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDOUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRS9CLElBQ0ksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUNyQix5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDakQsQ0FBQztnQkFDQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFFRCxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDN0IsU0FBUyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2xDLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNyQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSx5QkFBeUI7UUFDNUIsSUFDSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7WUFDckIseUJBQXlCLENBQUMscUJBQXFCLEVBQ2pELENBQUM7WUFDQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUUxQixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUFxQjtRQUNwQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFXLENBQUM7UUFDakUsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDTCxDQUFDO0lBRU0sZUFBZSxDQUNsQixLQUFvQixFQUNwQixnQkFBZ0IsR0FBRyxLQUFLO1FBRXhCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUVELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsTUFBTSxzQkFBc0IsR0FDeEIsSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVcsQ0FBQztRQUVwRSxJQUFJLGVBQWUsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQzVDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQjtnQkFBRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQ3pDLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGdCQUFnQjtvQkFBRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBRTlDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUM7b0JBQUUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFTyxRQUFRLENBQUMsR0FBa0I7UUFDL0IsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRSxNQUFNLENBQUMsS0FBdUIsQ0FBQztRQUNsRCxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ25ELE9BQU8sQ0FDSCxDQUFDLFFBQVEsSUFBSSxFQUFFLElBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNsQyxDQUFDLFFBQVEsSUFBSSxFQUFFLElBQUksUUFBUSxJQUFJLEdBQUcsQ0FBQyxDQUN0QyxDQUFDO0lBQ04sQ0FBQztJQUVPLGVBQWUsQ0FBQyxDQUFnQjtRQUNwQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMscUNBQXFDO1FBQ3hGLE9BQU8sY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFrQjtRQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sWUFBWTtRQUNmLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLCtCQUErQixDQUFDLEVBQUU7WUFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLCtCQUErQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6RSxDQUFDO0lBRU0scUJBQXFCO1FBQ3hCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLCtCQUErQixDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzNELElBQ0ksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsK0JBQStCLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUNwRSxDQUFDO2dCQUNDLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDckMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsK0JBQStCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BFLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbEMsK0JBQStCO2dCQUMvQixJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RDLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsT0FBTztRQUNYLENBQUM7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsQ0FBUTtRQUM1QixNQUFNLEtBQUssR0FBRyxDQUFlLENBQUM7UUFFOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDL0IsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsSUFDSSxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQyxDQUFDO2dCQUN0QixLQUFLLEVBQUUsTUFBc0IsRUFBRSxRQUFRLEtBQUssT0FBTyxDQUFDO2dCQUN4RCxLQUFLLEVBQUUsYUFBNkIsRUFBRSxRQUFRLEtBQUssT0FBTztnQkFDM0QsS0FBSyxFQUFFLGFBQWEsS0FBSyxJQUFJLEVBQy9CLENBQUM7Z0JBQ0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLCtCQUErQixDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN0RSxDQUFDO0lBQ0wsQ0FBQztJQUVNLGdCQUFnQixDQUFDLE9BQWE7UUFDakMsSUFBSSxLQUFZLENBQUM7UUFDakIsSUFBSSxTQUEyQixDQUFDO1FBRWhDLElBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDOUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9CLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQyxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDN0IsU0FBUyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQztJQUVNLFlBQVksQ0FBQyxLQUluQjtRQUNHLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFN0IsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUVsRSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUUvQyxJQUFJLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNsRCxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDckMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QixPQUFPO1FBQ1gsQ0FBQztRQUVELFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7WUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDcEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFPO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxRQUFRLENBQUMsQ0FBbUI7UUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsOEJBQThCO1FBQzFFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFTSxVQUFVLENBQUMsR0FBcUIsSUFBUyxDQUFDO0lBRTFDLGlCQUFpQixLQUFVLENBQUM7SUFFbkMsZ0JBQWdCO0lBQ1QsY0FBYztRQUNqQixZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDckMsSUFDSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXLEVBQ2pFLENBQUM7Z0JBQ0MsSUFDSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUM7b0JBQzNDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQztvQkFDM0MsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQzdDLENBQUM7b0JBQ0MsSUFDSSxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQjt3QkFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFFaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDOzRCQUNqQyxPQUFPLEVBQUUsSUFBSTt5QkFDaEIsQ0FBQyxDQUFDO29CQUNQLDRCQUE0Qjt5QkFDdkIsQ0FBQzt3QkFDRixJQUNJLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCOzRCQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQ25ELENBQUM7NEJBQ0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDO2dDQUNqQyxPQUFPLEVBQUUsSUFBSTs2QkFDaEIsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO3dCQUNyQyxDQUFDOzZCQUFNLENBQUM7NEJBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUM7d0JBQ04sQ0FBQztvQkFDTCxDQUFDO2dCQUNMLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUMxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQy9CLENBQUM7WUFDTCxDQUFDO2lCQUFNLElBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUNyQix5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDakQsQ0FBQztnQkFDQyxJQUNJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztvQkFDMUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQzVDLENBQUM7b0JBQ0MsSUFDSSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQjt3QkFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUNuRCxDQUFDO3dCQUNDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO29CQUMxRixDQUFDO3lCQUFNLENBQUM7d0JBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUM7b0JBQ04sQ0FBQztnQkFDTCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDMUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMvQixDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQ0ksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO29CQUMxQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFDNUMsQ0FBQztvQkFDQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FDekIsQ0FBQztnQkFDTixDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDMUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMvQixDQUFDO1lBQ0wsQ0FBQztZQUVELFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFTSxjQUFjO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxlQUFlO1FBQ2xCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsSUFBc0IsRUFBRSxRQUFrQjtRQUM5RCxJQUFJLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRCxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxDQUFDO2FBQU0sSUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7WUFDckIseUJBQXlCLENBQUMscUJBQXFCLEVBQ2pELENBQUM7WUFDQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSTtnQkFDQSxJQUFJLFlBQVksSUFBSTtvQkFDaEIsQ0FBQyxDQUFDLElBQUk7b0JBQ04sQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDL0QsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU5QyxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RELFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUIsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkUsSUFBSSxJQUFJLENBQUMsS0FBSztZQUNWLElBQ0ksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUNyQix5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDakQsQ0FBQztnQkFDQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7UUFFTCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVNLG9CQUFvQixDQUFDLENBQWdCLEVBQUUsU0FBbUI7UUFDN0QsTUFBTSxZQUFZLEdBQ2QsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlO1lBQzdELENBQUMsQ0FBQyxTQUFTO1lBQ1gsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RCxNQUFNLFVBQVUsR0FDWixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWU7WUFDN0QsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXZELElBQUksVUFBdUMsQ0FBQztRQUU1QyxJQUNJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtZQUNyQix5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDakQsQ0FBQztZQUNDLFVBQVU7Z0JBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztvQkFDekMsSUFBSSxDQUFDLGVBQWU7b0JBQ2hCLENBQUMsQ0FBQyxFQUFFO29CQUNKLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEUsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM1QixJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7cUJBQU0sSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ3BDLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxXQUFXLEdBQUcsRUFBRSxFQUFFLENBQUM7d0JBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUNqQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDeEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDWixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdkMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLElBQUksQ0FDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FDM0IsUUFBUSxDQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVM7NEJBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3RCLEdBQUcsQ0FBQyxDQUNSLENBQ0osQ0FBQzt3QkFFRixJQUFJLENBQUMsV0FBVzs0QkFDWixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDOzs0QkFFMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVM7Z0NBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ2xCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBRWhCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN2QyxDQUFDO2dCQUNMLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO3dCQUNmLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLElBQUksQ0FDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN2RCxDQUFDO29CQUVOLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFdEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztvQkFFakQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3ZDLENBQUM7O3dCQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO3FCQUFNLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNsQyxJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ3BELElBQUksV0FBVyxHQUFHLEVBQUUsRUFBRSxDQUFDO3dCQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FDakMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3hCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ1osSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3ZDLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQzFCLFFBQVEsQ0FDSixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTOzRCQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN0QixDQUNKLENBQ0osQ0FBQzt3QkFFRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7NEJBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzt3QkFDOUMsQ0FBQzs2QkFBTSxDQUFDOzRCQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTO2dDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUNsQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNoQixDQUFDO3dCQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN2QyxDQUFDO2dCQUNMLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO3dCQUNmLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLElBQUksQ0FDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ2xELENBQUM7b0JBRU4sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ2pDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN4QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUVaLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7d0JBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN2QyxDQUFDO3lCQUFNLENBQUM7d0JBQ0osSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqQyxDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDWixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUMxQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztxQkFBTSxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUNqQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDeEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDWixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQzlCLFFBQVEsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUNwQyxDQUNKLENBQUM7b0JBRUYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO3FCQUFNLENBQUM7b0JBQ0osTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdkQsQ0FBQztvQkFFRixNQUFNLGFBQWEsR0FDZixTQUFTLEdBQUcsRUFBRTt3QkFDVixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQzVCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQyxDQUFDO29CQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQ3BELENBQUM7b0JBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN2RCxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNaLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakMsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO2FBQU0sSUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7WUFDckIseUJBQXlCLENBQUMscUJBQXFCLEVBQ2pELENBQUM7WUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7cUJBQU0sSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDdEIsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLFdBQVcsR0FBRyxFQUFFLEVBQUUsQ0FBQzt3QkFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ2pDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN4QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNaLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN2QyxDQUFDO3lCQUFNLENBQUM7d0JBQ0osSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUMzQixRQUFRLENBQ0osSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUzs0QkFDOUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdEIsR0FBRyxDQUFDLENBQ1IsQ0FDSixDQUFDO3dCQUVGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs0QkFDZixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO3dCQUM5QyxDQUFDOzZCQUFNLENBQUM7NEJBQ0osSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVM7Z0NBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ2xCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2hCLENBQUM7d0JBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3ZDLENBQUM7Z0JBQ0wsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7d0JBQ2YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3ZELENBQUM7b0JBRU4sTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUV0RCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO29CQUVqRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO3dCQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdkMsQ0FBQzs7d0JBQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7cUJBQU0sSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMzRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FDakMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3hCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ1osSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUM5QixRQUFRLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FDcEMsQ0FDSixDQUFDO29CQUVGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakMsQ0FBQztxQkFBTSxDQUFDO29CQUNKLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3ZELENBQUM7b0JBRUYsTUFBTSxhQUFhLEdBQ2YsU0FBUyxHQUFHLEVBQUU7d0JBQ1YsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUM1QixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQztvQkFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUNwRCxDQUFDO29CQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdkQsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDWixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFZLEVBQUUsU0FBbUI7UUFDbEQsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNYLEtBQUssQ0FBQztnQkFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDaEQsTUFBTTtZQUNWLEtBQUssQ0FBQztnQkFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDaEQsTUFBTTtZQUNWLEtBQUssQ0FBQztnQkFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDaEQsTUFBTTtZQUNWO2dCQUNJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCxJQUFJLFNBQVM7WUFBRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBb0I7UUFDNUMsUUFBUSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsS0FBSyxFQUFFLEVBQUUsYUFBYTtnQkFDbEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLE1BQU07WUFDVixLQUFLLEVBQUUsQ0FBQyxDQUFDLGNBQWM7WUFDdkIsS0FBSyxDQUFDLEVBQUUsTUFBTTtnQkFDVixJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLE1BQU07WUFDVixLQUFLLEVBQUUsRUFBRSxXQUFXO2dCQUNoQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVCLE1BQU07WUFDVixLQUFLLEVBQUUsRUFBRSxhQUFhO2dCQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlCLE1BQU07WUFDVixLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVk7WUFDcEIsS0FBSyxFQUFFLEVBQUUsU0FBUztnQkFDZCxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxNQUFNO1FBQ2QsQ0FBQztJQUNMLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxJQUFhLEVBQUUsWUFBcUI7UUFDOUQsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pELElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDO1lBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7O1lBQ25FLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxTQUFpQjtRQUN0QyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQyxDQUFDO1lBQUUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFFeEQsTUFBTSxJQUFJLEdBQUcsU0FBUyxLQUFLLElBQUksQ0FBQztRQUNoQyxNQUFNLFlBQVksR0FDZCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXLENBQUM7UUFDcEUsTUFBTSxnQkFBZ0IsR0FDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO1lBQ3JCLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDO1FBRXBELElBQUksWUFBWSxJQUFJLGdCQUFnQjtZQUNoQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDOztZQUM5QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVPLHVCQUF1QixDQUFDLENBQWdCO1FBQzVDLE1BQU0sb0JBQW9CLEdBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtZQUNyQix5QkFBeUIsQ0FBQyxxQkFBcUIsQ0FBQztRQUNwRCxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUMsSUFBSSxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxDQUFDO2FBQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUIsQ0FBQzthQUFNLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzlCLENBQUM7SUFDTCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQ3hCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUM3QixDQUFDO1FBRXhCLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQ3BDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQ2pFLENBQUM7UUFFRixJQUFJLFlBQVksS0FBSyxDQUFDLENBQUM7WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQzthQUM1QyxJQUFJLFlBQVksS0FBSyxDQUFDO1lBQUUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7YUFDaEQsQ0FBQztZQUNGLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLENBQUM7WUFBRSxTQUFTLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTFELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVPLGNBQWM7UUFDbEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDeEIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQzdCLENBQUM7UUFDeEIsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FDcEMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FDakUsQ0FBQztRQUVGLElBQUksU0FBUyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7WUFBRSxTQUFTLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2hFLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sZUFBZSxDQUFDLEtBQWM7UUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDL0MsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXLENBQUMsSUFBYTtRQUM3QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUNqRCxDQUNKLENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDOUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FDeEMsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxVQUFVLENBQUMsSUFBYSxFQUFFLFlBQXFCO1FBQ25ELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQy9DLENBQ0osQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLFlBQVk7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYTtZQUMxQixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDL0IsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQWEsRUFBRSxZQUFxQjtRQUNuRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLEdBQUcsU0FBUyxDQUNuRCxDQUNKLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxZQUFZO1lBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7WUFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQy9CLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQjthQUN6QyxXQUFXLEVBQUU7YUFDYixRQUFRLEVBQUU7YUFDVixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sUUFBUSxDQUFDLEtBQWE7UUFDMUIsT0FBTyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8scUJBQXFCLENBQUMsSUFBYTtRQUN2QyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQztZQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakQsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDOztZQUN4RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLFdBQVcsQ0FBQyxJQUFhO1FBQzdCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO1FBRW5FLElBQUksYUFBYSxLQUFLLENBQUM7WUFBRSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQzVDLElBQUksYUFBYSxLQUFLLENBQUMsQ0FBQztZQUFFLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFFN0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUNqRCxDQUFDO1FBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQzlDLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FDMUQsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVM7WUFDOUIsYUFBYSxHQUFHLEVBQUUsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMvRCxDQUFDO0lBRU8sYUFBYSxDQUFDLElBQWE7UUFDL0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLElBQUksQ0FDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxHQUFHLFlBQVksQ0FDckQsQ0FDSixDQUFDO1FBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQzlDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FDdEMsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxVQUFVO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUztZQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUU5RCxNQUFNLFVBQVUsR0FDWixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLElBQUksQ0FDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FDakQsQ0FDSixDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFjO1FBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUFjO1FBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxtQkFBbUI7UUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSztZQUNWLElBQ0ksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVyxFQUNqRSxDQUFDO2dCQUNDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDOUMsQ0FBQztpQkFBTSxJQUNILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtnQkFDckIseUJBQXlCLENBQUMscUJBQXFCLEVBQ2pELENBQUM7Z0JBQ0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUM5QyxDQUFDO2lCQUFNLElBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVyxFQUNqRSxDQUFDO2dCQUNDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDOUMsQ0FBQztRQUVMLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVNLGlCQUFpQjtRQUNwQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVc7WUFDL0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUM3QixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO2dCQUN6QixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUMzRCxDQUFDO0lBQ1YsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQzsrR0FuOUJRLDhCQUE4QjttR0FBOUIsOEJBQThCLHllQUY1QixDQUFDLDZCQUE2QixDQUFDLDJGQVkvQiwrQkFBK0Isd0xBSS9CLGdCQUFnQixzWUNwRi9CLCt1R0E2R0E7Z0JEdERRLFVBQVU7Z0JBQ1YsWUFBWSxpTkFDWixXQUFXLHNJQUNYLG1CQUFtQixpTkFDbkIsb0JBQW9CO2dCQUNwQixhQUFhO2dCQUNiLGdCQUFnQix3VUFDaEIsZ0NBQWdDO2dCQUNoQyxRQUFRO2dCQUNSLDRCQUE0Qiw0REFDNUIsdUJBQXVCLHVEQUN2QixlQUFlOzs0RkFJViw4QkFBOEI7a0JBeEIxQyxTQUFTOytCQUNJLDBCQUEwQixjQU14QixJQUFJLFdBQ1A7d0JBQ0wsVUFBVTt3QkFDVixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixnQ0FBZ0M7d0JBQ2hDLFFBQVE7d0JBQ1IsNEJBQTRCO3dCQUM1Qix1QkFBdUI7d0JBQ3ZCLGVBQWU7cUJBQ2xCLGFBQ1UsQ0FBQyw2QkFBNkIsQ0FBQzs7MEJBd0RyQyxJQUFJO3FGQW5EQSxXQUFXO3NCQUFuQixLQUFLO2dCQUVXLGVBQWU7c0JBQS9CLE1BQU07dUJBQUMsT0FBTztnQkFFTSxjQUFjO3NCQUFsQyxNQUFNO3VCQUFDLFdBQVc7Z0JBSW5CLCtCQUErQjtzQkFEOUIsU0FBUzt1QkFBQywrQkFBK0I7Z0JBR1osZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBRTVCLGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFrQm5DLGdDQUFnQztzQkFBekMsTUFBTTtnQkFDRyxnQ0FBZ0M7c0JBQXpDLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUlHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFNZ0MsS0FBSztzQkFBM0MsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNFLEtBQUs7c0JBQTNDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDRSxLQUFLO3NCQUEzQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0ksT0FBTztzQkFBL0MsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFNlbGYsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTmdDb250cm9sLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8vIEltcG9ydHNcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE5nYlBvcG92ZXIgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuLy8gTW9kZWxzXG5pbXBvcnQgeyBJQ2FJbnB1dCB9IGZyb20gJy4uL2NhLWlucHV0L2NvbmZpZyc7XG5pbXBvcnQgeyBJbnB1dENoYW5nZVZhbHVlLCBJbnB1dFN2Z1JvdXRlcyB9IGZyb20gJy4uL2NhLWlucHV0L3V0aWxzJztcblxuLy8gUGlwZVxuaW1wb3J0IHtcbiAgICBJbnB1dENvbnRhaW5lckNsYXNzUGlwZSxcbiAgICBJbnB1dERhdGV0aW1lUGlja2VyQ2xhc3NQaXBlLFxufSBmcm9tICcuLi9jYS1pbnB1dC9waXBlcyc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCB7IENhSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9jYS1pbnB1dC9jYS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FDdXN0b21EYXRldGltZVBpY2tlcnNDb21wb25lbnQgfSBmcm9tICcuLi9jYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vycy9jYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vycy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NhLWlucHV0L2NvbXBvbmVudHMvY2EtaW5wdXQtcGxhY2Vob2xkZXItaWNvbi9jYS1pbnB1dC1wbGFjZWhvbGRlci1pY29uLmNvbXBvbmVudCc7XG5cbi8vIEVudW1zXG5pbXBvcnQgeyBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtIH0gZnJvbSAnLi4vY2EtaW5wdXQvZW51bXMnO1xuXG4vLyBTZXJ2aWNlc1xuaW1wb3J0IHsgQ2FsZW5kYXJEYXRlVGltZVBpY2tlclNlcnZpY2UgfSBmcm9tICcuLi9jYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vycy9zZXJ2aWNlcy9jYWxlbmRhci1kYXRldGltZS1waWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBbmd1bGFyU3ZnSWNvbk1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xQaXBlIH0gZnJvbSAnLi4vY2EtaW5wdXQvcGlwZXMvZm9ybS1jb250cm9sLnBpcGUnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjYS1pbnB1dC1kYXRldGltZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogW1xuICAgICAgICAnLi9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnLFxuICAgICAgICAnLi4vY2EtaW5wdXQvc2Nzcy8vY2EtaW5wdXQuZGF0ZXBpY2tlci5zY3NzJyxcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICAvLyBtb2R1bGVzXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIEFuZ3VsYXJTdmdJY29uTW9kdWxlLFxuICAgICAgICAvLyBjb21wb25lbnRzXG4gICAgICAgIENhSW5wdXRDb21wb25lbnQsXG4gICAgICAgIENhQ3VzdG9tRGF0ZXRpbWVQaWNrZXJzQ29tcG9uZW50LFxuICAgICAgICAvLyBwaXBlc1xuICAgICAgICBJbnB1dERhdGV0aW1lUGlja2VyQ2xhc3NQaXBlLFxuICAgICAgICBJbnB1dENvbnRhaW5lckNsYXNzUGlwZSxcbiAgICAgICAgRm9ybUNvbnRyb2xQaXBlLFxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbQ2FsZW5kYXJEYXRlVGltZVBpY2tlclNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBDYUlucHV0RGF0ZXRpbWVQaWNrZXJDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3lcbntcbiAgICBASW5wdXQoKSBpbnB1dENvbmZpZyE6IElDYUlucHV0O1xuXG4gICAgQE91dHB1dCgnY2xlYXInKSBjbGVhcklucHV0RXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCdibHVySW5wdXQnKSBibHVySW5wdXRFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQFZpZXdDaGlsZChDYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50KVxuICAgIGNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQhOiBDYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZCgnZGF0ZVRpbWVQb3BvdmVyJykgZGF0ZVRpbWVQb3BvdmVyITogTmdiUG9wb3ZlcjtcbiAgICBAVmlld0NoaWxkKENhSW5wdXRDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgY2FJbnB1dENvbXBvbmVudCE6IENhSW5wdXRDb21wb25lbnQ7XG5cbiAgICBwdWJsaWMgc2hvd0RhdGVJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBkYXRlVGltZUlucHV0RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgcHVibGljIHNlbGVjdGlvbklucHV0OiBudW1iZXIgPSAtMTtcblxuICAgIHByaXZhdGUgZGF0ZVRpbWVNYWluVGltZXIhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcbiAgICBwcml2YXRlIGZvY3VzQmx1ciE6IE5vZGVKUy5UaW1lb3V0IHwgbnVtYmVyO1xuICAgIHByaXZhdGUgdGltZW91dENsZWFuZXIhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcblxuICAgIHB1YmxpYyBpbnB1dFN2Z1JvdXRlcyA9IElucHV0U3ZnUm91dGVzO1xuXG4gICAgcHVibGljIGlzVG91Y2hlZElucHV0OiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHByZXZlbnRCbHVyOiBib29sZWFuID0gZmFsc2U7XG4gICAgLy8gRGF0ZVxuICAgIHB1YmxpYyBuZXdJbnB1dENoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBzZWxlY3RMYXN0T25lRm9yU2VsZWN0aW9uRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgc2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgpIG9uRGF0ZVBhc3RlRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Q2xpcGJvYXJkRXZlbnQ+KCk7XG4gICAgQE91dHB1dCgpIG9uRm9jdXNFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBjaGFuZ2VTZWxlY3Rpb25FbW1pdGVyID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgICAgIGU6IEtleWJvYXJkRXZlbnQ7XG4gICAgICAgIG5vUHJldmVudERlZmF1bHQ6IGJvb2xlYW47XG4gICAgfT4oKTtcbiAgICBAT3V0cHV0KCkgc2V0U2VsZWN0aW9uRW1taXRlciA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgICAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB2b2lkO1xuICAgICAgICB0YXJnZXQ6IGFueTtcbiAgICB9PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnc3BhbjEnLCB7IHN0YXRpYzogZmFsc2UgfSkgc3BhbjEhOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3NwYW4yJywgeyBzdGF0aWM6IGZhbHNlIH0pIHNwYW4yITogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdzcGFuMycsIHsgc3RhdGljOiBmYWxzZSB9KSBzcGFuMyE6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnaG9sZGVyMScsIHsgc3RhdGljOiBmYWxzZSB9KSBob2xkZXIxITogRWxlbWVudFJlZjtcblxuICAgIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBTZWxmKCkgcHVibGljIHN1cGVyQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBwcml2YXRlIGNhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJEYXRlVGltZVBpY2tlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUaW1lRGF0ZUlucHV0KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLCB0cnVlKTtcbiAgICAgICAgfSwgMzAwKTtcblxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChkYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDI/LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGdldFN1cGVyQ29udHJvbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdExhc3RPbmVGb3JTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIGxldCByYW5nZSwgc2VsZWN0aW9uO1xuXG4gICAgICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT1cbiAgICAgICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LCAxKTtcbiAgICAgICAgICAgICAgICByYW5nZS5zZXRFbmQodGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LCAxKTtcbiAgICAgICAgICAgICAgICByYW5nZS5zZXRFbmQodGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgICAgfSwgOTApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3RMYXN0T25lQWZ0ZXJNb3VzZVVwKCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgICAgfSwgOTApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRhdGVQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCBwYXN0ZVRleHQgPSBldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBwYXN0ZWREYXRlID0gbmV3IERhdGUocGFzdGVUZXh0KTtcbiAgICAgICAgaWYgKCFpc05hTihwYXN0ZWREYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChwYXN0ZWREYXRlKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlU2VsZWN0aW9uKFxuICAgICAgICBldmVudDogS2V5Ym9hcmRFdmVudCxcbiAgICAgICAgbm9QcmV2ZW50RGVmYXVsdCA9IGZhbHNlXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOYXZpZ2F0aW9uS2V5ID0gdGhpcy5pc05hdmlnYXRpb25LZXkoZXZlbnQpO1xuICAgICAgICBjb25zdCBpc1NwZWNpYWxUaW1lUGlja2VyS2V5ID1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDMgJiZcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUjtcblxuICAgICAgICBpZiAoaXNOYXZpZ2F0aW9uS2V5IHx8IGlzU3BlY2lhbFRpbWVQaWNrZXJLZXkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU5hdmlnYXRpb25LZXkoZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTnVtYmVyKGV2ZW50KSkge1xuICAgICAgICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xKSB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUtleWJvYXJkSW5wdXRzKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNOdW1iZXIoZXZ0OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGV2dCA9IGV2dCA/IGV2dCA6ICh3aW5kb3cuZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCk7XG4gICAgICAgIGxldCBjaGFyQ29kZSA9IGV2dC53aGljaCA/IGV2dC53aGljaCA6IGV2dC5rZXlDb2RlO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KSB8fFxuICAgICAgICAgICAgKGNoYXJDb2RlID49IDk2ICYmIGNoYXJDb2RlIDw9IDEwNSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTmF2aWdhdGlvbktleShlOiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25LZXlzID0gWzM3LCAzOCwgMzksIDQwLCA4LCA5LCA0Nl07IC8vIEFycm93IGtleXMsIEJhY2tzcGFjZSwgVGFiLCBEZWxldGVcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRpb25LZXlzLmluY2x1ZGVzKGUua2V5Q29kZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRm9jdXMoZXZlbnQ/OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Gb2N1c0VtaXR0ZXIuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlUG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2FJbnB1dENvbXBvbmVudC5jYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50LnQyKVxuICAgICAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDIuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlRHJvcGRvd25PcHRpb25zKCkge1xuICAgICAgICBpZiAodGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDIpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDIuaXNPcGVuKClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDIub3BlbigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVGb2N1c0lucHV0KGU6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gZSBhcyBGb2N1c0V2ZW50O1xuXG4gICAgICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKGV2ZW50Py50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5ub2RlTmFtZSA9PT0gJ0lOUFVUJykgfHxcbiAgICAgICAgICAgICAgICAoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5ub2RlTmFtZSA9PT0gJ0lOUFVUJyB8fFxuICAgICAgICAgICAgICAgIGV2ZW50Py5yZWxhdGVkVGFyZ2V0ID09PSBudWxsXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZlbnRCbHVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50Mi50b2dnbGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTcGFuU2VsZWN0aW9uKGVsZW1lbnQ6IE5vZGUpOiB2b2lkIHtcbiAgICAgICAgbGV0IHJhbmdlOiBSYW5nZTtcbiAgICAgICAgbGV0IHNlbGVjdGlvbjogU2VsZWN0aW9uIHwgbnVsbDtcblxuICAgICAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudC5jcmVhdGVSYW5nZSkge1xuICAgICAgICAgICAgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuICAgICAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldFNlbGVjdGlvbihldmVudDoge1xuICAgICAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB2b2lkO1xuICAgICAgICB0YXJnZXQ6IGFueTtcbiAgICB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uSW5wdXQgPSBwYXJzZUludChlbGVtZW50LmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSk7XG5cbiAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblxuICAgICAgICBpZiAoY3VycmVudFNlbGVjdGlvbiAmJiBjdXJyZW50U2VsZWN0aW9uLnRvU3RyaW5nKCkubGVuZ3RoID4gMTApIHtcbiAgICAgICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ21haW4nKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IHNlbGVjdGlvbklucHV0O1xuICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNoYW5nZShfOiBJbnB1dENoYW5nZVZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldFZhbHVlKF8pO1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7IC8vIE1hcmsgdGhlIGNvbnRyb2wgYXMgdG91Y2hlZFxuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5tYXJrQXNEaXJ0eSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKG9iajogSW5wdXRDaGFuZ2VWYWx1ZSk6IHZvaWQge31cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZCgpOiB2b2lkIHt9XG5cbiAgICAvLyBCTFVSIE9OIElOUFVUXG4gICAgcHVibGljIGJsdXJPbkRhdGVUaW1lKCk6IHZvaWQge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVNYWluVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjE/Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuMj8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4zPy5uYXRpdmVFbGVtZW50LmlubmVySFRNTClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5pc0Z1dHVyZURhdGVEaXNhYmxlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpLmlzQWZ0ZXIobW9tZW50KCkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBhY2NlcHQgZnV0dXJlIGRhdGVzXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuZXhwaXJlZERhdGVJbnZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpLmlzQmVmb3JlKG1vbWVudCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsgLy8gZG9uJ3QgYWNjZXB0IGV4cGlyZWQgZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuZGF0ZUNoYW5nZWQubmV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdkZCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmV4cGlyZWREYXRlSW52YWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpLmlzQmVmb3JlKG1vbWVudCgpKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7IC8vIGRvbid0IGFjY2VwdCBleHBpcmVkIGRhdGVzXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgICAgICAgICAgICFpc05hTih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ01NJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUaW1lUGlja2VyVGltZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Qb3BvdmVyU2hvd24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IHRydWU7XG4gICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUG9wb3ZlckhpZGRlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ibHVyT25EYXRlVGltZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUaW1lRGF0ZUlucHV0KGRhdGU6IElucHV0Q2hhbmdlVmFsdWUsIGhhc1ZhbHVlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBsZXQgdGV4dCwgZGF0ZUZvcm1hdCwgdGltZUZvcm1hdDtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgICAgICAgdGV4dCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdNTS9ERC9ZWScpO1xuICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IHRleHQuc3BsaXQoJy8nKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGV4dCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdNTS9ERC9ZWScpO1xuICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IHRleHQuc3BsaXQoJy8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPVxuICAgICAgICAgICAgICAgIGRhdGUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICAgICAgICAgID8gZGF0ZVxuICAgICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKG1vbWVudCgpLmZvcm1hdCgnTU0vREQvWVlZWScpICsgJyAnICsgZGF0ZSk7XG4gICAgICAgICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ0hIOm1tJyk7XG5cbiAgICAgICAgICAgIHRpbWVGb3JtYXQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnaGgvbW0vQScpO1xuICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IHRpbWVGb3JtYXQuc3BsaXQoJy8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaGFzVmFsdWUpIHRoaXMub25DaGFuZ2UodGV4dCk7XG4gICAgICAgIC8vIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRleHQ7XG4gICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcblxuICAgICAgICBpZiAodGhpcy5zcGFuMSkgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMF07XG5cbiAgICAgICAgaWYgKHRoaXMuc3BhbjIpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFsxXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFsyXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMl07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVLZXlib2FyZElucHV0cyhlOiBLZXlib2FyZEV2ZW50LCBpc1Jlc3RhcnQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNwYW5PbmVWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID1cbiAgICAgICAgICAgIGlzTmFOKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA6IHBhcnNlSW50KHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xuICAgICAgICBjb25zdCBzcGFuMlZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgPVxuICAgICAgICAgICAgaXNOYU4odGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgfHwgdGhpcy5uZXdJbnB1dENoYW5nZWRcbiAgICAgICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIDogcGFyc2VJbnQodGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG5cbiAgICAgICAgbGV0IHNwYW4zVmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgIT09XG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHNwYW4zVmFsdWUgPVxuICAgICAgICAgICAgICAgIGlzTmFOKHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5uZXdJbnB1dENoYW5nZWRcbiAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICA6IHBhcnNlSW50KHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwYW5PbmVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaW5hbF92YWx1ZSA9IHBhcnNlSW50KGAke3NwYW5PbmVWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluYWxfdmFsdWUgPiAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaW5hbF92YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRNb250aChwYXJzZUludChlLmtleSkgLSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKC0yKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZmluYWxfdmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KGAxJHtlLmtleX1gKSA+IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdkZCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDAsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BhbjJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaW5hbF92YWx1ZSA9IHBhcnNlSW50KGAke3NwYW4yVmFsdWV9JHtlLmtleX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmFsX3ZhbHVlID4gMzEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbmFsX3ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdkZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldERhdGUocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChgMSR7ZS5rZXl9YCkgPiAzMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3BhbjNWYWx1ZSB8fCBzcGFuM1ZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RnVsbFllYXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoYDIwMCR7cGFyc2VJbnQoZS5rZXkpfWApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFllYXIgPSBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFNob3dZZWFyID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsWWVhciA+IDMxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwYXJzZUludChgMTkke2ZpbmFsWWVhcn1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcGFyc2VJbnQoYDIwJHtmaW5hbFllYXJ9YCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RnVsbFllYXIoZmluYWxTaG93WWVhcilcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb25JbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3Bhbk9uZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsX3ZhbHVlID0gcGFyc2VJbnQoYCR7c3Bhbk9uZVZhbHVlfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRNb250aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbmFsX3ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldE1vbnRoKHBhcnNlSW50KGUua2V5KSAtIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsX3ZhbHVlID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBmaW5hbF92YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzcGFuMlZhbHVlIHx8IHNwYW4yVmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRGdWxsWWVhcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChgMjAwJHtwYXJzZUludChlLmtleSl9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsWWVhciA9IHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsU2hvd1llYXIgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxZZWFyID4gMzFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHBhcnNlSW50KGAxOSR7ZmluYWxZZWFyfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwYXJzZUludChgMjAke2ZpbmFsWWVhcn1gKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRGdWxsWWVhcihmaW5hbFNob3dZZWFyKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdFNwYW5CeVRhYkluZGV4KGluZHg6IG51bWJlciwgY2hhbmdlVGFiPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGluZHgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VUYWIpIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU5hdmlnYXRpb25LZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgICAgICBjYXNlIDM3OiAvLyBMZWZ0IGFycm93XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlU2VsZWN0aW9uTGVmdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOTogLy8gUmlnaHQgYXJyb3dcbiAgICAgICAgICAgIGNhc2UgOTogLy8gVGFiXG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlU2VsZWN0aW9uUmlnaHRPclRhYihldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM4OiAvLyBVcCBhcnJvd1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVNb2RlbCgndXAnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDA6IC8vIERvd24gYXJyb3dcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lTW9kZWwoJ2Rvd24nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgODogLy8gQmFja3NwYWNlXG4gICAgICAgICAgICBjYXNlIDQ2OiAvLyBEZWxldGVcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUtleWJvYXJkSW5wdXRzKGV2ZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRGF0ZVBpY2tlcklucHV0KGlzVXA6IGJvb2xlYW4sIGlzRGF0ZVBpY2tlcjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMCkgdGhpcy51cGRhdGVNb250aChpc1VwKTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMSkgdGhpcy51cGRhdGVEYXRlKGlzVXAsIGlzRGF0ZVBpY2tlcik7XG4gICAgICAgIGVsc2UgdGhpcy51cGRhdGVZZWFyKGlzVXAsIGlzRGF0ZVBpY2tlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREYXRlVGltZU1vZGVsKGRpcmVjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAtMSkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG5cbiAgICAgICAgY29uc3QgaXNVcCA9IGRpcmVjdGlvbiA9PT0gJ3VwJztcbiAgICAgICAgY29uc3QgaXNEYXRlUGlja2VyID1cbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUjtcbiAgICAgICAgY29uc3QgaXNCYW5rQ2FyZFBpY2tlciA9XG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRDtcblxuICAgICAgICBpZiAoaXNEYXRlUGlja2VyIHx8IGlzQmFua0NhcmRQaWNrZXIpXG4gICAgICAgICAgICB0aGlzLmhhbmRsZURhdGVQaWNrZXJJbnB1dChpc1VwLCBpc0RhdGVQaWNrZXIpO1xuICAgICAgICBlbHNlIHRoaXMuaGFuZGxlVGltZVBpY2tlcklucHV0KGlzVXApO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW92ZVNlbGVjdGlvblJpZ2h0T3JUYWIoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpc0RhdGVwaWNrZXJCYW5rQ2FyZCA9XG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRDtcbiAgICAgICAgY29uc3QgbWF4SW5kZXggPSBpc0RhdGVwaWNrZXJCYW5rQ2FyZCA/IDEgOiAyO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0IDwgbWF4SW5kZXggJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgKz0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSA5ICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzTmV4dElucHV0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5zaGlmdEtleSAmJiBlLmtleUNvZGUgPT09IDkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNQcmV2aW91c0lucHV0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGZvY3VzUHJldmlvdXNJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWxsSW5wdXRzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LmlucHV0LWNvbnRyb2wnKVxuICAgICAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnRbXTtcblxuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBhbGxJbnB1dHMuZmluZEluZGV4KFxuICAgICAgICAgICAgKGlucHV0KSA9PiBpbnB1dCA9PT0gdGhpcy5jYUlucHV0Q29tcG9uZW50LmlucHV0Lm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDM7XG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnRJbmRleCA9PT0gMCkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCAtPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPiAwKSBhbGxJbnB1dHNbY3VycmVudEluZGV4IC0gMV0uZm9jdXMoKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c05leHRJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWxsSW5wdXRzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LmlucHV0LWNvbnRyb2wnKVxuICAgICAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnRbXTtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gYWxsSW5wdXRzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChpbnB1dCkgPT4gaW5wdXQgPT09IHRoaXMuY2FJbnB1dENvbXBvbmVudC5pbnB1dC5uYXRpdmVFbGVtZW50XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGFsbElucHV0c1tjdXJyZW50SW5kZXggKyAxXSkgYWxsSW5wdXRzW2N1cnJlbnRJbmRleCArIDFdLmZvY3VzKCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5ibHVyT25EYXRlVGltZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRJc0ZvY3VzSW5wdXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW92ZVNlbGVjdGlvbkxlZnQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCAtPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0LCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTW9udGgoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBtb250aERlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRNb250aChcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldE1vbnRoKCkgKyBtb250aERlbHRhXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldE1vbnRoKCkgKyAxXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRGF0ZShpc1VwOiBib29sZWFuLCBpc0RhdGVQaWNrZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0ZURlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXREYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuZ2V0RGF0ZSgpICsgZGF0ZURlbHRhXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgc3BhbkVsZW1lbnQgPSBpc0RhdGVQaWNrZXJcbiAgICAgICAgICAgID8gdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICA6IHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudDtcbiAgICAgICAgc3BhbkVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wYWRWYWx1ZSh0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihzcGFuRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVZZWFyKGlzVXA6IGJvb2xlYW4sIGlzRGF0ZVBpY2tlcjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCB5ZWFyRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuZ2V0RnVsbFllYXIoKSArIHllYXJEZWx0YVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gaXNEYXRlUGlja2VyXG4gICAgICAgICAgICA/IHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgOiB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHNwYW5FbGVtZW50LmlubmVySFRNTCA9IHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVcbiAgICAgICAgICAgIC5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnNsaWNlKC0yKTtcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHNwYW5FbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhZFZhbHVlKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVUaW1lUGlja2VySW5wdXQoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMCkgdGhpcy51cGRhdGVIb3Vycyhpc1VwKTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMSkgdGhpcy51cGRhdGVNaW51dGVzKGlzVXApO1xuICAgICAgICBlbHNlIHRoaXMudG9nZ2xlQU1QTSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSG91cnMoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBob3Vyc0RlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICAgICAgbGV0IHNlbGVjdGVkSG91cnMgPSB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldEhvdXJzKCkgKyBob3Vyc0RlbHRhO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEhvdXJzID09PSAwKSBzZWxlY3RlZEhvdXJzID0gMjQ7XG4gICAgICAgIGlmIChzZWxlY3RlZEhvdXJzID09PSAtMSkgc2VsZWN0ZWRIb3VycyA9IDIzO1xuXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0SG91cnMoc2VsZWN0ZWRIb3VycylcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wYWRWYWx1ZShcbiAgICAgICAgICAgIHNlbGVjdGVkSG91cnMgPiAxMiA/IHNlbGVjdGVkSG91cnMgLSAxMiA6IHNlbGVjdGVkSG91cnNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9XG4gICAgICAgICAgICBzZWxlY3RlZEhvdXJzID4gMTEgJiYgc2VsZWN0ZWRIb3VycyA8IDI0ID8gJ1BNJyA6ICdBTSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVNaW51dGVzKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWludXRlc0RlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRNaW51dGVzKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuZ2V0TWludXRlcygpICsgbWludXRlc0RlbHRhXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldE1pbnV0ZXMoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZUFNUE0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPVxuICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9PT0gJ0FNJyA/ICdQTScgOiAnQU0nO1xuXG4gICAgICAgIGNvbnN0IGhvdXJzVG9BZGQgPVxuICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9PT0gJ0FNJyA/IC0xMiA6IDEyO1xuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEhvdXJzKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuZ2V0SG91cnMoKSArIGhvdXJzVG9BZGRcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJJbnB1dChldmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudC5lbWl0KGV2ZW50KTtcblxuICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICAgIHRoaXMucmVzZXREYXRlVGltZUlucHV0cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkJsdXJJbnB1dChldmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmJsdXJJbnB1dEV2ZW50LmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldERhdGVUaW1lSW5wdXRzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zcGFuMSlcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnTU0nO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnQU0nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VGltZVBpY2tlclRpbWUoKTtcbiAgICAgICAgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUaW1lUGlja2VyVGltZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUilcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICBtb21lbnQoKS5mb3JtYXQoJ01NL0REL1lZWVknKSArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmlucHV0Q29uZmlnPy5pc0Zyb21EYXRlID8gJyAxMjoxNScgOiAnIDEyOjAwJylcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn0iLCI8ZGl2XG4gIGNsYXNzPVwiZGF0ZXRpbWUtcGlja2VyLW1haW4taG9sZGVyIGlucHV0LWN1c3RvbS1ncm91cCBkYXRldGltZWNsYXNzXCJcbiAgW25nQ2xhc3NdPVwiXG4gICAgZ2V0U3VwZXJDb250cm9sXG4gICAgICB8IGlucHV0Q29udGFpbmVyQ2xhc3NcbiAgICAgICAgOiBjYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dFxuICAgICAgICA6IGNhSW5wdXRDb21wb25lbnQuaXNUb3VjaGVkSW5wdXRcbiAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICA6IGdldFN1cGVyQ29udHJvbD8udmFsdWVcbiAgXCJcbj5cbiAgPGRpdlxuICAgICNob2xkZXIxXG4gICAgY2xhc3M9XCJkYXRlX3RpbWVfaG9sZGVyIGlucHV0LWNvbnRyb2xcIlxuICAgIFtjbGFzcy5hY3RpdmVdPVwic2hvd0RhdGVJbnB1dFwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgKG1vdXNlZG93bik9XCJzZWxlY3RMYXN0T25lRm9yU2VsZWN0aW9uKClcIlxuICAgIChtb3VzZXVwKT1cInNlbGVjdExhc3RPbmVBZnRlck1vdXNlVXAoKVwiXG4gICAgKHBhc3RlKT1cIm9uRGF0ZVBhc3RlKCRldmVudClcIlxuICAgIChrZXlkb3duKT1cImNoYW5nZVNlbGVjdGlvbigkZXZlbnQsIHRydWUpXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd25PcHRpb25zKClcIlxuICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICdwYWRkaW5nLWxlZnQnOiBpbnB1dENvbmZpZy5pc0ljb25IaWRkZW4gPyAnMnB4JyA6ICcyN3B4J1xuICAgIH1cIlxuICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXRcbiAgICAgICAgfCBpbnB1dERhdGV0aW1lUGlja2VyQ2xhc3NcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICAgICAgOiBnZXRTdXBlckNvbnRyb2xcbiAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgOiBjYUlucHV0Q29tcG9uZW50LmlzVG91Y2hlZElucHV0XG4gICAgICAgICAgOiBnZXRTdXBlckNvbnRyb2w/LnZhbHVlXG4gICAgXCJcbiAgPlxuICAgIDxzcGFuXG4gICAgICAjc3BhbjFcbiAgICAgIGNsYXNzPVwibWFpblwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdyZXNldC1zZWxlY3Rpb24tY29sb3InOiAhY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXRcbiAgICAgIH1cIlxuICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgIChtb3VzZXVwKT1cInNldFNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgIChrZXlkb3duKT1cImNoYW5nZVNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgIFtpbm5lckhUTUxdPVwiaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInID8gJ21tJyA6ICdISCdcIlxuICAgID48L3NwYW4+XG4gICAgPHNwYW4+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYm9yZGVyLXBpY2tlclwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwiaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInID8gJy8nIDogJzonXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW5cbiAgICAgICNzcGFuMlxuICAgICAgY2xhc3M9XCJtYWluXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3Jlc2V0LXNlbGVjdGlvbi1jb2xvcic6ICFjYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dFxuICAgICAgfVwiXG4gICAgICB0YWJpbmRleD1cIjFcIlxuICAgICAgKG1vdXNldXApPVwic2V0U2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgKGtleWRvd24pPVwiY2hhbmdlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgW2lubmVySFRNTF09XCJpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgPyAnZGQnIDogJ01NJ1wiXG4gICAgPjwvc3Bhbj5cbiAgICA8c3Bhbj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJib3JkZXItcGlja2VyXCJcbiAgICAgICAgW2lubmVySFRNTF09XCJpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgPyAnLycgOiAnICdcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgI3NwYW4zXG4gICAgICBjbGFzcz1cIm1haW5cIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAncmVzZXQtc2VsZWN0aW9uLWNvbG9yJzogIWNhSW5wdXRDb21wb25lbnQuaXNGb2N1c0lucHV0XG4gICAgICB9XCJcbiAgICAgIHRhYmluZGV4PVwiMlwiXG4gICAgICAobW91c2V1cCk9XCJzZXRTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAoa2V5ZG93bik9XCJjaGFuZ2VTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICBbaW5uZXJIVE1MXT1cImlucHV0Q29uZmlnLm5hbWUgPT09ICdkYXRlcGlja2VyJyA/ICd5eScgOiAnQU0nXCJcbiAgICA+PC9zcGFuPlxuICA8L2Rpdj5cbiAgPGFwcC1jYS1pbnB1dFxuICAgIFtpbnB1dENvbmZpZ109XCJpbnB1dENvbmZpZ1wiXG4gICAgW2RhdGVUaW1lUG9wb3Zlcl09XCJkYXRlVGltZVBvcG92ZXJcIlxuICAgIChmb2N1c0lucHV0RXZlbnQpPVwiaGFuZGxlRm9jdXNJbnB1dCgkZXZlbnQpXCJcbiAgICAoaGFuZGxlVG9nZ2xlRHJvcGRvd25PcHRpb25zKT1cInRvZ2dsZURyb3Bkb3duT3B0aW9ucygpXCJcbiAgICAoY2xvc2VQb3BvdmVyKT1cImJsdXJPbkRhdGVUaW1lKClcIlxuICAgIChibHVySW5wdXQpPVwib25CbHVySW5wdXQoJGV2ZW50KVwiXG4gICAgKGNsZWFyKT1cImNsZWFySW5wdXQoJGV2ZW50KVwiXG4gICAgW2Zvcm1Db250cm9sXT1cImdldFN1cGVyQ29udHJvbCEgfCBmb3JtQ29udHJvbFwiXG4gICAgPjwvYXBwLWNhLWlucHV0PlxuPC9kaXY+XG5cbjwhLS0gUG9wb3ZlciBmb3IgRGF0ZVRpbWUgUGlja2VycyAtLT5cbjxuZy10ZW1wbGF0ZSAjZGF0ZVRpbWVQb3BvdmVyIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXRpbWUtZHJvcGRvd24taG9sZGVyXCI+XG4gICAgPGFwcC1jYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vyc1xuICAgICAgW2NhbGVuZGFyVHlwZV09XCJcbiAgICAgICAgaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInIHx8XG4gICAgICAgIGlucHV0Q29uZmlnLm5hbWUgPT09ICdkYXRlcGlja2VyQmFua0NhcmQnXG4gICAgICAgICAgPyAnZGF0ZSdcbiAgICAgICAgICA6ICd0aW1lJ1xuICAgICAgXCJcbiAgICAgIFtpbnB1dENvbmZpZ109XCJpbnB1dENvbmZpZ1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ01NL0REL1lZJ1wiXG4gICAgICBbZGF0ZVRpbWVdPVwiZGF0ZVRpbWVJbnB1dERhdGVcIlxuICAgICAgKGNsb3NlUG9wb3Zlcik9XCJjbG9zZVBvcG92ZXIoKVwiXG4gICAgPjwvYXBwLWNhLWN1c3RvbS1kYXRldGltZS1waWNrZXJzPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=