@wizishop/angular-components 14.4.22 → 14.4.23

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.
@@ -620,6 +620,135 @@ wac-block {
620
620
  margin-right: 0;
621
621
  }
622
622
  }
623
+ .wac-breadcrumbs {
624
+ width: 100%;
625
+ display: flex;
626
+ align-items: center;
627
+ padding: 0;
628
+ margin: 0 0 10px;
629
+ border-radius: 3px;
630
+
631
+ @include media('<tablet') {
632
+ &:not(.no-responsive) {
633
+ max-width: 100%;
634
+ overflow: hidden;
635
+ .wac-breadcrumbs {
636
+ &__wrapper {
637
+ @include media('<tablet') {
638
+ width: auto;
639
+ overflow-x: scroll;
640
+ }
641
+ }
642
+ &__item {
643
+ @include media('<tablet') {
644
+ width: auto;
645
+ min-width: unset;
646
+ max-width: unset;
647
+ .name {
648
+ white-space: nowrap;
649
+ }
650
+ }
651
+ }
652
+ }
653
+ }
654
+ }
655
+
656
+ &__wrapper {
657
+ width: 100%;
658
+ display: flex;
659
+ align-items: center;
660
+ }
661
+
662
+ &__item {
663
+ width: 100%;
664
+ max-width: 50%;
665
+ display: flex;
666
+ align-items: center;
667
+ justify-content: center;
668
+ position: relative;
669
+ padding: 10px;
670
+ cursor: pointer;
671
+ &:before {
672
+ content: '';
673
+ display: block;
674
+ position: absolute;
675
+ bottom: -5px;
676
+ left: 50%;
677
+ transform: translateX(-50%);
678
+ width: calc(100% - 5px);
679
+ height: 3px;
680
+ background-color: $wac-round-breadcrumbs;
681
+ }
682
+ &.current, &.valid {
683
+ &:before {
684
+ background-color: $wac-wizishop-blue;
685
+ }
686
+ &:hover, &:focus {
687
+ .round {
688
+ background-color: $wac-wizishop-blue;
689
+ border-color: $wac-wizishop-blue;
690
+ > span, > i {
691
+ color: $wac-white;
692
+ }
693
+ }
694
+ .name {
695
+ color: $wac-wizishop-blue;
696
+ }
697
+ }
698
+ }
699
+
700
+
701
+ &.current {
702
+ &:before {
703
+ height: 5px;
704
+ }
705
+ }
706
+ .round {
707
+ min-width: 30px;
708
+ height: 30px;
709
+ border-radius: 30px;
710
+ display: flex;
711
+ justify-content: center;
712
+ align-items: center;
713
+ border: 2px solid $wac-round-breadcrumbs;
714
+ background-color: $wac-round-breadcrumbs;
715
+ transition: .3s ease;
716
+ margin: 0 15px 0 0;
717
+ > span {
718
+ font-size: rem(12);
719
+ font-weight: 500;
720
+ color: $wac-second-color;
721
+ line-height: 1;
722
+ }
723
+ > i {
724
+ font-size: rem(14);
725
+ color: $wac-wizishop-blue;
726
+ }
727
+ &.valid {
728
+ background-color: transparent;
729
+ border-color: $wac-wizishop-blue;
730
+ color: $wac-wizishop-blue;
731
+ }
732
+ &.current:not(.valid) {
733
+ background-color: $wac-wizishop-blue;
734
+ border-color: $wac-wizishop-blue;
735
+ > span, > i {
736
+ color: $wac-white;
737
+ }
738
+ }
739
+ }
740
+ .name {
741
+ font-size: rem(14);
742
+ font-weight: 500;
743
+ color: $wac-second-color;
744
+ line-height: 1;
745
+ transition: .3s ease;
746
+ &.valid, &.current {
747
+ color: $wac-wizishop-blue;
748
+ }
749
+ }
750
+ }
751
+ }
623
752
  .wac-button {
624
753
  @include flexbox();
625
754
  @include justify-content(center);
@@ -2465,135 +2594,6 @@ wac-calendar {
2465
2594
  .datetimepicker .datetimepicker-footer {
2466
2595
  display: none;
2467
2596
  }
2468
- .wac-breadcrumbs {
2469
- width: 100%;
2470
- display: flex;
2471
- align-items: center;
2472
- padding: 0;
2473
- margin: 0 0 10px;
2474
- border-radius: 3px;
2475
-
2476
- @include media('<tablet') {
2477
- &:not(.no-responsive) {
2478
- max-width: 100%;
2479
- overflow: hidden;
2480
- .wac-breadcrumbs {
2481
- &__wrapper {
2482
- @include media('<tablet') {
2483
- width: auto;
2484
- overflow-x: scroll;
2485
- }
2486
- }
2487
- &__item {
2488
- @include media('<tablet') {
2489
- width: auto;
2490
- min-width: unset;
2491
- max-width: unset;
2492
- .name {
2493
- white-space: nowrap;
2494
- }
2495
- }
2496
- }
2497
- }
2498
- }
2499
- }
2500
-
2501
- &__wrapper {
2502
- width: 100%;
2503
- display: flex;
2504
- align-items: center;
2505
- }
2506
-
2507
- &__item {
2508
- width: 100%;
2509
- max-width: 50%;
2510
- display: flex;
2511
- align-items: center;
2512
- justify-content: center;
2513
- position: relative;
2514
- padding: 10px;
2515
- cursor: pointer;
2516
- &:before {
2517
- content: '';
2518
- display: block;
2519
- position: absolute;
2520
- bottom: -5px;
2521
- left: 50%;
2522
- transform: translateX(-50%);
2523
- width: calc(100% - 5px);
2524
- height: 3px;
2525
- background-color: $wac-round-breadcrumbs;
2526
- }
2527
- &.current, &.valid {
2528
- &:before {
2529
- background-color: $wac-wizishop-blue;
2530
- }
2531
- &:hover, &:focus {
2532
- .round {
2533
- background-color: $wac-wizishop-blue;
2534
- border-color: $wac-wizishop-blue;
2535
- > span, > i {
2536
- color: $wac-white;
2537
- }
2538
- }
2539
- .name {
2540
- color: $wac-wizishop-blue;
2541
- }
2542
- }
2543
- }
2544
-
2545
-
2546
- &.current {
2547
- &:before {
2548
- height: 5px;
2549
- }
2550
- }
2551
- .round {
2552
- min-width: 30px;
2553
- height: 30px;
2554
- border-radius: 30px;
2555
- display: flex;
2556
- justify-content: center;
2557
- align-items: center;
2558
- border: 2px solid $wac-round-breadcrumbs;
2559
- background-color: $wac-round-breadcrumbs;
2560
- transition: .3s ease;
2561
- margin: 0 15px 0 0;
2562
- > span {
2563
- font-size: rem(12);
2564
- font-weight: 500;
2565
- color: $wac-second-color;
2566
- line-height: 1;
2567
- }
2568
- > i {
2569
- font-size: rem(14);
2570
- color: $wac-wizishop-blue;
2571
- }
2572
- &.valid {
2573
- background-color: transparent;
2574
- border-color: $wac-wizishop-blue;
2575
- color: $wac-wizishop-blue;
2576
- }
2577
- &.current:not(.valid) {
2578
- background-color: $wac-wizishop-blue;
2579
- border-color: $wac-wizishop-blue;
2580
- > span, > i {
2581
- color: $wac-white;
2582
- }
2583
- }
2584
- }
2585
- .name {
2586
- font-size: rem(14);
2587
- font-weight: 500;
2588
- color: $wac-second-color;
2589
- line-height: 1;
2590
- transition: .3s ease;
2591
- &.valid, &.current {
2592
- color: $wac-wizishop-blue;
2593
- }
2594
- }
2595
- }
2596
- }
2597
2597
  .wac-card-price {
2598
2598
  width: 100%;
2599
2599
  padding: 30px;
@@ -1 +1 @@
1
- {"wac.datatable.noresult":"There are no results for this search","wac.input.progressbar.information.good":"Very good","wac.input.progressbar.information.too.long":"Too long","wac.input.progressbar.information.too.short":"Too short","wac.MosaicComponent.import":"Import","wac.PaginationComponent.on":"{{low}}-{{high}} of {{total}}","wac.PaginationComponent.page":"Go to page","wac.simpleSearchComponent.error":"The search field is compulsory"}
1
+ {"wac.datatable.noresult":"There are no results for this search","wac.Date.PlaceHolder.dd/mm/yyyy":"DD/MM/YYYY","wac.Date.PlaceHolder.dd/MM/yyyy_HH:mm":"DD/MM/YYYY HH:MM","wac.Date.PlaceHolder.HH:mm":"HH:MM","wac.input.progressbar.information.good":"Very good","wac.input.progressbar.information.too.long":"Too long","wac.input.progressbar.information.too.short":"Too short","wac.MosaicComponent.import":"Import","wac.PaginationComponent.on":"{{low}}-{{high}} of {{total}}","wac.PaginationComponent.page":"Go to page","wac.simpleSearchComponent.error":"The search field is compulsory"}
@@ -1 +1 @@
1
- {"wac.datatable.noresult":"Il n'y a aucun résultat pour cette recherche","wac.input.progressbar.information.good":"Très bien","wac.input.progressbar.information.too.long":"Trop long","wac.input.progressbar.information.too.short":"Trop court","wac.MosaicComponent.import":"Importer","wac.PaginationComponent.on":"{{low}}-{{high}} sur {{total}}","wac.PaginationComponent.page":"Aller à la page","wac.simpleSearchComponent.error":"Le champ de recherche est obligatoire"}
1
+ {"wac.datatable.noresult":"Il n'y a aucun résultat pour cette recherche","wac.Date.PlaceHolder.dd/mm/yyyy":"JJ/MM/YYYY","wac.Date.PlaceHolder.dd/MM/yyyy_HH:mm":"JJ/MM/YYYY HH:MM","wac.Date.PlaceHolder.HH:mm":"HH:MM","wac.input.progressbar.information.good":"Très bien","wac.input.progressbar.information.too.long":"Trop long","wac.input.progressbar.information.too.short":"Trop court","wac.MosaicComponent.import":"Importer","wac.PaginationComponent.on":"{{low}}-{{high}} sur {{total}}","wac.PaginationComponent.page":"Aller à la page","wac.simpleSearchComponent.error":"Le champ de recherche est obligatoire"}
@@ -0,0 +1,5 @@
1
+ import { animate, style, transition, trigger } from '@angular/animations';
2
+ export const opacityAnimation = trigger('opacityAnimation', [
3
+ transition(':enter', [style({ opacity: 0 }), animate('0.4s ease-in-out', style({ opacity: 1 }))])
4
+ ]);
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BhY2l0eS5hbmltYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9hbmltYXRpb25zL3Nob3cvb3BhY2l0eS5hbmltYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtJQUMxRCxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5leHBvcnQgY29uc3Qgb3BhY2l0eUFuaW1hdGlvbiA9IHRyaWdnZXIoJ29wYWNpdHlBbmltYXRpb24nLCBbXG4gIHRyYW5zaXRpb24oJzplbnRlcicsIFtzdHlsZSh7IG9wYWNpdHk6IDAgfSksIGFuaW1hdGUoJzAuNHMgZWFzZS1pbi1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDEgfSkpXSlcbl0pO1xuIl19
@@ -1,6 +1,7 @@
1
1
  import { DatePipe } from '@angular/common';
2
2
  import { Component, Input, EventEmitter, Output, ChangeDetectionStrategy, ViewChild, ViewEncapsulation } from '@angular/core';
3
3
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { opacityAnimation } from '../../animations/show/opacity.animation';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@angular/common";
6
7
  import * as i2 from "@angular/forms";
@@ -9,6 +10,7 @@ import * as i4 from "../../directives/auto-hide/auto-hide.directive";
9
10
  import * as i5 from "../../directives/zindex-toggle/zindex-toggle.directive";
10
11
  import * as i6 from "../../directives/keyboard-events/only-numbers.directive";
11
12
  import * as i7 from "../optional-disable-container/optional-disable-container.component";
13
+ import * as i8 from "@ngx-translate/core";
12
14
  export class CalendarComponent {
13
15
  constructor(datePipe) {
14
16
  this.datePipe = datePipe;
@@ -20,7 +22,6 @@ export class CalendarComponent {
20
22
  showFooter: true,
21
23
  };
22
24
  this.position = 'bottom';
23
- this._dateSelected = new Date();
24
25
  this.dateSelectedChange = new EventEmitter();
25
26
  this.typeDate = 'datetime-local';
26
27
  this.noMargin = false;
@@ -52,6 +53,9 @@ export class CalendarComponent {
52
53
  return this._dateSelected;
53
54
  }
54
55
  set calendarMinutes(calendarMinutes) {
56
+ if (!this.dateSelected) {
57
+ this.dateSelected = new Date();
58
+ }
55
59
  const minutes = this.formatTime(calendarMinutes, 0, 59);
56
60
  this.dateSelected.setMinutes(minutes);
57
61
  this.dateSelected = this.dateSelected; // trigger change detection
@@ -59,9 +63,12 @@ export class CalendarComponent {
59
63
  this.triggerDateSelectedChange();
60
64
  }
61
65
  get calendarMinutes() {
62
- return this.datePipe.transform(this.dateSelected, 'mm');
66
+ return this.datePipe.transform(this.dateSelected ?? new Date(), 'mm');
63
67
  }
64
68
  set calendarHours(calendarHours) {
69
+ if (!this.dateSelected) {
70
+ this.dateSelected = new Date();
71
+ }
65
72
  const hours = this.formatTime(calendarHours, 0, 23);
66
73
  this.dateSelected.setHours(hours);
67
74
  this.dateSelected = this.dateSelected; // trigger change detection
@@ -69,7 +76,7 @@ export class CalendarComponent {
69
76
  this.triggerDateSelectedChange();
70
77
  }
71
78
  get calendarHours() {
72
- return this.datePipe.transform(this.dateSelected, 'HH');
79
+ return this.datePipe.transform(this.dateSelected ?? new Date(), 'HH');
73
80
  }
74
81
  ngOnChanges(changes) {
75
82
  if (changes.label || changes.type) {
@@ -80,6 +87,9 @@ export class CalendarComponent {
80
87
  if (this.disabled) {
81
88
  return;
82
89
  }
90
+ if (!this.dateSelected) {
91
+ this.dateSelected = new Date();
92
+ }
83
93
  selectedDates.startDate.setHours(this.dateSelected.getHours());
84
94
  selectedDates.startDate.setMinutes(this.dateSelected.getMinutes());
85
95
  this.dateSelected = selectedDates.startDate;
@@ -181,7 +191,7 @@ CalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
181
191
  multi: true
182
192
  },
183
193
  DatePipe
184
- ], viewQueries: [{ propertyName: "minutes", first: true, predicate: ["minutes"], descendants: true }, { propertyName: "hours", first: true, predicate: ["hours"], descendants: true }, { propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"wac-calendar\"\n [ngClass]=\"{\n 'wac-calendar--input': type === 'input',\n 'wac-calendar--onlyDate': typeDate === 'date',\n 'wac-calendar--edit': type === 'edit',\n 'wac-calendar--select': type === 'select',\n 'wac-calendar--no-margin': noMargin,\n 'wac-calendar--open': open\n }\"\n [zIndexToggle]=\"open\"\n>\n <p [class]=\"'wac-calendar__label' + (boldLabel ? ' bold' : '')\" *ngIf=\"label && (type === 'input' || type === 'select')\" (click)=\"openCalendar()\">{{ label }}</p>\n <p class=\"wac-calendar__startLabel\" *ngIf=\"type === 'edit'\">{{ startLabel }}</p>\n <wac-optional-disable-container [disabled]=\"disabled\">\n <div class=\"wac-calendar__autoHide\" wzAutoHide (clickOutside)=\"openCalendar('close')\">\n <div class=\"wac-calendar__wrapper\">\n <div class=\"wac-calendar__wrapper__input\" *ngIf=\"type === 'input'\" (click)=\"openCalendar()\">\n <div class=\"wac-calendar__wrapper__input__icon\">\n <i class=\"far fa-calendar-alt\"></i>\n </div>\n <div class=\"wac-calendar__wrapper__input__date\">\n {{ dateSelected | date: 'dd/MM/yyyy' }}\n </div>\n <div class=\"wac-calendar__wrapper__input__time\">\n {{ dateSelected | date: 'HH:mm' }}\n </div>\n </div>\n <div class=\"wac-calendar__wrapper__editInPlace\" *ngIf=\"type === 'edit'\" (click)=\"openCalendar()\">\n <div class=\"wac-calendar__wrapper__editInPlace__icon\">\n <i class=\"fal fa-calendar-alt\"></i>\n </div>\n <div class=\"wac-calendar__wrapper__editInPlace__date\">\n {{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}\n </div>\n </div>\n <div class=\"wac-calendar__wrapper__select\" *ngIf=\"type === 'select'\" (click)=\"openCalendar()\">\n <div class=\"wac-calendar__wrapper__select__icon\">\n <i class=\"fal fa-calendar-alt\"></i>\n </div>\n <div class=\"wac-calendar__wrapper__select__date\">\n {{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}\n </div>\n </div>\n </div>\n <div\n class=\"wac-calendar__absolute\"\n [ngClass]=\"{\n top: position === 'top',\n bottom: position === 'bottom',\n left: position === 'left',\n right: position === 'right',\n 'right-top': position === 'right-top',\n 'right-bottom': position === 'right-bottom',\n 'left-top': position === 'left-top',\n 'left-bottom': position === 'left-bottom',\n 'with-time': typeDate === 'datetime-local' || typeDate === 'datetime'\n }\"\n >\n <nwb-date-picker #datePicker (change)=\"onChangeDate($event)\" [options]=\"options\">\n <input [nwbDatepickerStart]=\"datePicker\" type=\"text\" [nwbDateType]=\"'date'\" [value]=\"dateSelected.toISOString()\" />\n </nwb-date-picker>\n <div class=\"wac-calendar__absolute__time\" *ngIf=\"typeDate === 'datetime-local' || typeDate === 'datetime'\">\n <div class=\"wac-calendar__absolute__time__wrapper\">\n <div class=\"wac-calendar__absolute__time__wrapper__hours\">\n <div class=\"wac-calendar__absolute__time__wrapper__hours__left\">\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"incrementHours($event)\">\n <i class=\"fas fa-plus\"></i>\n </button>\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"decrementHours($event)\">\n <i class=\"fas fa-minus\"></i>\n </button>\n </div>\n <div class=\"wac-calendar__absolute__time__wrapper__hours__right\">\n <input #hours type=\"text\" [(ngModel)]=\"calendarHours\" [wacOnlyNumber]=\"true\"/>\n </div>\n </div>\n <div class=\"wac-calendar__absolute__time__wrapper__minutes\">\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__left\">\n <input #minutes type=\"text\" [(ngModel)]=\"calendarMinutes\" [wacOnlyNumber]=\"true\"/>\n </div>\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__right\">\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"incrementMinutes($event)\">\n <i class=\"fas fa-plus\"></i>\n </button>\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"decrementsMinutes($event)\">\n <i class=\"fas fa-minus\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </wac-optional-disable-container>\n <p class=\"wac-calendar__endLabel\" *ngIf=\"type === 'edit'\">{{ endLabel }}</p>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.NwbDatePickerComponent, selector: "nwb-date-picker", inputs: ["options"], outputs: ["change", "clear"] }, { kind: "directive", type: i3.NwbDatePickerInputStartDirective, selector: "input[nwbDatepickerStart]", inputs: ["nwbDatepickerStart"] }, { kind: "directive", type: i3.NwbDatePickerInputDateTypeDirective, selector: "input[nwbDateType]", inputs: ["nwbDateType"] }, { kind: "directive", type: i4.AutoHideDirective, selector: "[wzAutoHide]", inputs: ["triggerElement", "forceOn"], outputs: ["clickOutside"] }, { kind: "directive", type: i5.ZindexToggleDirective, selector: "[zIndexToggle]", inputs: ["zIndexToggle"], outputs: ["onEventChange"] }, { kind: "directive", type: i6.OnlyNumberDirective, selector: "[wacOnlyNumber]", inputs: ["wacOnlyNumber"] }, { kind: "component", type: i7.OptionalDisableContainerComponent, selector: "wac-optional-disable-container", inputs: ["disabled"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
194
+ ], viewQueries: [{ propertyName: "minutes", first: true, predicate: ["minutes"], descendants: true }, { propertyName: "hours", first: true, predicate: ["hours"], descendants: true }, { propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"wac-calendar\"\n [ngClass]=\"{\n 'wac-calendar--input': type === 'input',\n 'wac-calendar--onlyDate': typeDate === 'date',\n 'wac-calendar--edit': type === 'edit',\n 'wac-calendar--select': type === 'select',\n 'wac-calendar--no-margin': noMargin,\n 'wac-calendar--open': open\n }\"\n [zIndexToggle]=\"open\"\n>\n <p [class]=\"'wac-calendar__label' + (boldLabel ? ' bold' : '')\" *ngIf=\"label && (type === 'input' || type === 'select')\" (click)=\"openCalendar()\">{{ label }}</p>\n <p class=\"wac-calendar__startLabel\" *ngIf=\"type === 'edit'\">{{ startLabel }}</p>\n <wac-optional-disable-container [disabled]=\"disabled\">\n <div class=\"wac-calendar__autoHide\" wzAutoHide (clickOutside)=\"openCalendar('close')\">\n <div class=\"wac-calendar__wrapper\">\n <div class=\"wac-calendar__wrapper__input\" *ngIf=\"type === 'input'\" (click)=\"openCalendar()\">\n <div class=\"wac-calendar__wrapper__input__icon\">\n <i class=\"far fa-calendar-alt\"></i>\n </div>\n <div class=\"wac-calendar__wrapper__input__date\">\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy'}}</span>\n <span *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/mm/yyyy' | translate }}</span>\n </div>\n <div class=\"wac-calendar__wrapper__input__time\">\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'HH:mm' }}</span>\n <span *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.HH:mm' | translate }}</span>\n </div>\n </div>\n <div class=\"wac-calendar__wrapper__editInPlace\" *ngIf=\"type === 'edit'\" (click)=\"openCalendar()\">\n <div class=\"wac-calendar__wrapper__editInPlace__icon\">\n <i class=\"fal fa-calendar-alt\"></i>\n </div>\n <div class=\"wac-calendar__wrapper__editInPlace__date\">\n <div class=\"wac-calendar__wrapper__input__time\">\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}</span>\n <span *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/MM/yyyy_HH:mm' | translate }}</span>\n </div>\n </div>\n </div>\n <div class=\"wac-calendar__wrapper__select\" *ngIf=\"type === 'select'\" (click)=\"openCalendar()\">\n <div class=\"wac-calendar__wrapper__select__icon\">\n <i class=\"fal fa-calendar-alt\"></i>\n </div>\n <div class=\"wac-calendar__wrapper__select__date\">\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}</span>\n <span *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/MM/yyyy_HH:mm' | translate }}</span>\n </div>\n </div>\n </div>\n <div\n class=\"wac-calendar__absolute\"\n [ngClass]=\"{\n top: position === 'top',\n bottom: position === 'bottom',\n left: position === 'left',\n right: position === 'right',\n 'right-top': position === 'right-top',\n 'right-bottom': position === 'right-bottom',\n 'left-top': position === 'left-top',\n 'left-bottom': position === 'left-bottom',\n 'with-time': typeDate === 'datetime-local' || typeDate === 'datetime'\n }\"\n >\n <nwb-date-picker #datePicker (change)=\"onChangeDate($event)\" [options]=\"options\">\n <input [nwbDatepickerStart]=\"datePicker\" type=\"text\" [nwbDateType]=\"'date'\" [value]=\"dateSelected?.toISOString()\" />\n </nwb-date-picker>\n <div class=\"wac-calendar__absolute__time\" *ngIf=\"typeDate === 'datetime-local' || typeDate === 'datetime'\">\n <div class=\"wac-calendar__absolute__time__wrapper\">\n <div class=\"wac-calendar__absolute__time__wrapper__hours\">\n <div class=\"wac-calendar__absolute__time__wrapper__hours__left\">\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"incrementHours($event)\">\n <i class=\"fas fa-plus\"></i>\n </button>\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"decrementHours($event)\">\n <i class=\"fas fa-minus\"></i>\n </button>\n </div>\n <div class=\"wac-calendar__absolute__time__wrapper__hours__right\">\n <input #hours type=\"text\" [(ngModel)]=\"calendarHours\" [wacOnlyNumber]=\"true\"/>\n </div>\n </div>\n <div class=\"wac-calendar__absolute__time__wrapper__minutes\">\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__left\">\n <input #minutes type=\"text\" [(ngModel)]=\"calendarMinutes\" [wacOnlyNumber]=\"true\"/>\n </div>\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__right\">\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"incrementMinutes($event)\">\n <i class=\"fas fa-plus\"></i>\n </button>\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"decrementsMinutes($event)\">\n <i class=\"fas fa-minus\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </wac-optional-disable-container>\n <p class=\"wac-calendar__endLabel\" *ngIf=\"type === 'edit'\">{{ endLabel }}</p>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.NwbDatePickerComponent, selector: "nwb-date-picker", inputs: ["options"], outputs: ["change", "clear"] }, { kind: "directive", type: i3.NwbDatePickerInputStartDirective, selector: "input[nwbDatepickerStart]", inputs: ["nwbDatepickerStart"] }, { kind: "directive", type: i3.NwbDatePickerInputDateTypeDirective, selector: "input[nwbDateType]", inputs: ["nwbDateType"] }, { kind: "directive", type: i4.AutoHideDirective, selector: "[wzAutoHide]", inputs: ["triggerElement", "forceOn"], outputs: ["clickOutside"] }, { kind: "directive", type: i5.ZindexToggleDirective, selector: "[zIndexToggle]", inputs: ["zIndexToggle"], outputs: ["onEventChange"] }, { kind: "directive", type: i6.OnlyNumberDirective, selector: "[wacOnlyNumber]", inputs: ["wacOnlyNumber"] }, { kind: "component", type: i7.OptionalDisableContainerComponent, selector: "wac-optional-disable-container", inputs: ["disabled"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], animations: [opacityAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
185
195
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CalendarComponent, decorators: [{
186
196
  type: Component,
187
197
  args: [{ selector: 'wac-calendar', providers: [
@@ -191,7 +201,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImpor
191
201
  multi: true
192
202
  },
193
203
  DatePipe
194
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n class=\"wac-calendar\"\n [ngClass]=\"{\n 'wac-calendar--input': type === 'input',\n 'wac-calendar--onlyDate': typeDate === 'date',\n 'wac-calendar--edit': type === 'edit',\n 'wac-calendar--select': type === 'select',\n 'wac-calendar--no-margin': noMargin,\n 'wac-calendar--open': open\n }\"\n [zIndexToggle]=\"open\"\n>\n <p [class]=\"'wac-calendar__label' + (boldLabel ? ' bold' : '')\" *ngIf=\"label && (type === 'input' || type === 'select')\" (click)=\"openCalendar()\">{{ label }}</p>\n <p class=\"wac-calendar__startLabel\" *ngIf=\"type === 'edit'\">{{ startLabel }}</p>\n <wac-optional-disable-container [disabled]=\"disabled\">\n <div class=\"wac-calendar__autoHide\" wzAutoHide (clickOutside)=\"openCalendar('close')\">\n <div class=\"wac-calendar__wrapper\">\n <div class=\"wac-calendar__wrapper__input\" *ngIf=\"type === 'input'\" (click)=\"openCalendar()\">\n <div class=\"wac-calendar__wrapper__input__icon\">\n <i class=\"far fa-calendar-alt\"></i>\n </div>\n <div class=\"wac-calendar__wrapper__input__date\">\n {{ dateSelected | date: 'dd/MM/yyyy' }}\n </div>\n <div class=\"wac-calendar__wrapper__input__time\">\n {{ dateSelected | date: 'HH:mm' }}\n </div>\n </div>\n <div class=\"wac-calendar__wrapper__editInPlace\" *ngIf=\"type === 'edit'\" (click)=\"openCalendar()\">\n <div class=\"wac-calendar__wrapper__editInPlace__icon\">\n <i class=\"fal fa-calendar-alt\"></i>\n </div>\n <div class=\"wac-calendar__wrapper__editInPlace__date\">\n {{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}\n </div>\n </div>\n <div class=\"wac-calendar__wrapper__select\" *ngIf=\"type === 'select'\" (click)=\"openCalendar()\">\n <div class=\"wac-calendar__wrapper__select__icon\">\n <i class=\"fal fa-calendar-alt\"></i>\n </div>\n <div class=\"wac-calendar__wrapper__select__date\">\n {{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}\n </div>\n </div>\n </div>\n <div\n class=\"wac-calendar__absolute\"\n [ngClass]=\"{\n top: position === 'top',\n bottom: position === 'bottom',\n left: position === 'left',\n right: position === 'right',\n 'right-top': position === 'right-top',\n 'right-bottom': position === 'right-bottom',\n 'left-top': position === 'left-top',\n 'left-bottom': position === 'left-bottom',\n 'with-time': typeDate === 'datetime-local' || typeDate === 'datetime'\n }\"\n >\n <nwb-date-picker #datePicker (change)=\"onChangeDate($event)\" [options]=\"options\">\n <input [nwbDatepickerStart]=\"datePicker\" type=\"text\" [nwbDateType]=\"'date'\" [value]=\"dateSelected.toISOString()\" />\n </nwb-date-picker>\n <div class=\"wac-calendar__absolute__time\" *ngIf=\"typeDate === 'datetime-local' || typeDate === 'datetime'\">\n <div class=\"wac-calendar__absolute__time__wrapper\">\n <div class=\"wac-calendar__absolute__time__wrapper__hours\">\n <div class=\"wac-calendar__absolute__time__wrapper__hours__left\">\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"incrementHours($event)\">\n <i class=\"fas fa-plus\"></i>\n </button>\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"decrementHours($event)\">\n <i class=\"fas fa-minus\"></i>\n </button>\n </div>\n <div class=\"wac-calendar__absolute__time__wrapper__hours__right\">\n <input #hours type=\"text\" [(ngModel)]=\"calendarHours\" [wacOnlyNumber]=\"true\"/>\n </div>\n </div>\n <div class=\"wac-calendar__absolute__time__wrapper__minutes\">\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__left\">\n <input #minutes type=\"text\" [(ngModel)]=\"calendarMinutes\" [wacOnlyNumber]=\"true\"/>\n </div>\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__right\">\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"incrementMinutes($event)\">\n <i class=\"fas fa-plus\"></i>\n </button>\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"decrementsMinutes($event)\">\n <i class=\"fas fa-minus\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </wac-optional-disable-container>\n <p class=\"wac-calendar__endLabel\" *ngIf=\"type === 'edit'\">{{ endLabel }}</p>\n</div>\n" }]
204
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, animations: [opacityAnimation], template: "<div\n class=\"wac-calendar\"\n [ngClass]=\"{\n 'wac-calendar--input': type === 'input',\n 'wac-calendar--onlyDate': typeDate === 'date',\n 'wac-calendar--edit': type === 'edit',\n 'wac-calendar--select': type === 'select',\n 'wac-calendar--no-margin': noMargin,\n 'wac-calendar--open': open\n }\"\n [zIndexToggle]=\"open\"\n>\n <p [class]=\"'wac-calendar__label' + (boldLabel ? ' bold' : '')\" *ngIf=\"label && (type === 'input' || type === 'select')\" (click)=\"openCalendar()\">{{ label }}</p>\n <p class=\"wac-calendar__startLabel\" *ngIf=\"type === 'edit'\">{{ startLabel }}</p>\n <wac-optional-disable-container [disabled]=\"disabled\">\n <div class=\"wac-calendar__autoHide\" wzAutoHide (clickOutside)=\"openCalendar('close')\">\n <div class=\"wac-calendar__wrapper\">\n <div class=\"wac-calendar__wrapper__input\" *ngIf=\"type === 'input'\" (click)=\"openCalendar()\">\n <div class=\"wac-calendar__wrapper__input__icon\">\n <i class=\"far fa-calendar-alt\"></i>\n </div>\n <div class=\"wac-calendar__wrapper__input__date\">\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy'}}</span>\n <span *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/mm/yyyy' | translate }}</span>\n </div>\n <div class=\"wac-calendar__wrapper__input__time\">\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'HH:mm' }}</span>\n <span *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.HH:mm' | translate }}</span>\n </div>\n </div>\n <div class=\"wac-calendar__wrapper__editInPlace\" *ngIf=\"type === 'edit'\" (click)=\"openCalendar()\">\n <div class=\"wac-calendar__wrapper__editInPlace__icon\">\n <i class=\"fal fa-calendar-alt\"></i>\n </div>\n <div class=\"wac-calendar__wrapper__editInPlace__date\">\n <div class=\"wac-calendar__wrapper__input__time\">\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}</span>\n <span *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/MM/yyyy_HH:mm' | translate }}</span>\n </div>\n </div>\n </div>\n <div class=\"wac-calendar__wrapper__select\" *ngIf=\"type === 'select'\" (click)=\"openCalendar()\">\n <div class=\"wac-calendar__wrapper__select__icon\">\n <i class=\"fal fa-calendar-alt\"></i>\n </div>\n <div class=\"wac-calendar__wrapper__select__date\">\n <span *ngIf=\"dateSelected\" @opacityAnimation>{{ dateSelected | date: 'dd/MM/yyyy HH:mm' }}</span>\n <span *ngIf=\"!dateSelected\" @opacityAnimation>{{ 'wac.Date.PlaceHolder.dd/MM/yyyy_HH:mm' | translate }}</span>\n </div>\n </div>\n </div>\n <div\n class=\"wac-calendar__absolute\"\n [ngClass]=\"{\n top: position === 'top',\n bottom: position === 'bottom',\n left: position === 'left',\n right: position === 'right',\n 'right-top': position === 'right-top',\n 'right-bottom': position === 'right-bottom',\n 'left-top': position === 'left-top',\n 'left-bottom': position === 'left-bottom',\n 'with-time': typeDate === 'datetime-local' || typeDate === 'datetime'\n }\"\n >\n <nwb-date-picker #datePicker (change)=\"onChangeDate($event)\" [options]=\"options\">\n <input [nwbDatepickerStart]=\"datePicker\" type=\"text\" [nwbDateType]=\"'date'\" [value]=\"dateSelected?.toISOString()\" />\n </nwb-date-picker>\n <div class=\"wac-calendar__absolute__time\" *ngIf=\"typeDate === 'datetime-local' || typeDate === 'datetime'\">\n <div class=\"wac-calendar__absolute__time__wrapper\">\n <div class=\"wac-calendar__absolute__time__wrapper__hours\">\n <div class=\"wac-calendar__absolute__time__wrapper__hours__left\">\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"incrementHours($event)\">\n <i class=\"fas fa-plus\"></i>\n </button>\n <button class=\"wac-calendar__absolute__time__wrapper__hours__btn\" (click)=\"decrementHours($event)\">\n <i class=\"fas fa-minus\"></i>\n </button>\n </div>\n <div class=\"wac-calendar__absolute__time__wrapper__hours__right\">\n <input #hours type=\"text\" [(ngModel)]=\"calendarHours\" [wacOnlyNumber]=\"true\"/>\n </div>\n </div>\n <div class=\"wac-calendar__absolute__time__wrapper__minutes\">\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__left\">\n <input #minutes type=\"text\" [(ngModel)]=\"calendarMinutes\" [wacOnlyNumber]=\"true\"/>\n </div>\n <div class=\"wac-calendar__absolute__time__wrapper__minutes__right\">\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"incrementMinutes($event)\">\n <i class=\"fas fa-plus\"></i>\n </button>\n <button class=\"wac-calendar__absolute__time__wrapper__minutes__btn\" (click)=\"decrementsMinutes($event)\">\n <i class=\"fas fa-minus\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </wac-optional-disable-container>\n <p class=\"wac-calendar__endLabel\" *ngIf=\"type === 'edit'\">{{ endLabel }}</p>\n</div>\n" }]
195
205
  }], ctorParameters: function () { return [{ type: i1.DatePipe }]; }, propDecorators: { minutes: [{
196
206
  type: ViewChild,
197
207
  args: ['minutes']
@@ -224,4 +234,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImpor
224
234
  }], changeData: [{
225
235
  type: Output
226
236
  }] } });
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE0Qix1QkFBdUIsRUFBRSxTQUFTLEVBQWMsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEssT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFpQnpFLE1BQU0sT0FBTyxpQkFBaUI7SUFzRjVCLFlBQW9CLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUE1RXRDLGNBQVMsR0FBWSxLQUFLLENBQUMsQ0FBQyw4Q0FBOEM7UUFHMUUsU0FBSSxHQUFnQyxPQUFPLENBQUM7UUFjNUMsYUFBUSxHQUFvQztZQUMxQyxXQUFXLEVBQUUsUUFBUTtZQUNyQixVQUFVLEVBQUUsS0FBSztZQUNqQixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDO1FBR0YsYUFBUSxHQUFHLFFBQVEsQ0FBQztRQVlwQixrQkFBYSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFFdkIsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUdsRCxhQUFRLEdBQTJDLGdCQUFnQixDQUFDO1FBRXBFLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFUixhQUFRLEdBQUcsS0FB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c0JBRFAsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTndiRGF0ZVBpY2tlckNvbXBvbmVudCwgTndiRGF0ZVBpY2tlckV2ZW50LCBOd2JEYXRlUGlja2VyT3B0aW9ucyB9IGZyb20gJ0B3aXppc2hvcC9uZy13aXppLWJ1bG1hJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2FjLWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAgRGF0ZVBpcGVcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgLy8hIEF0IHRoZSBtb21lbnQsIHRoZSBjb21wb25lbnQgaGFuZGxlIG9ubHkgb25lIGRhdGUgKG5vdCBhIHJhbmdlKVxuICBAVmlld0NoaWxkKCdtaW51dGVzJykgbWludXRlczogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnaG91cnMnKSBob3VyczogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZGF0ZVBpY2tlcicpIGRhdGVQaWNrZXI6IE53YkRhdGVQaWNrZXJDb21wb25lbnQ7XG5cbiAgQElucHV0KClcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7IC8vIHRvZG8gdXNlIG5nLWNvbnRlbnQgaW5zdGVhZFxuXG4gIEBJbnB1dCgpXG4gIGJvbGRMYWJlbDogYm9vbGVhbiA9IGZhbHNlOyAvLyB0b2RvIHJlbW92ZSB3aGVuIGxhYmVsIHdpbGwgYmUgYSBuZy1jb250ZW50XG5cbiAgQElucHV0KClcbiAgdHlwZTogJ2lucHV0JyB8ICdlZGl0JyB8ICdzZWxlY3QnID0gJ2lucHV0JztcblxuICBASW5wdXQoKVxuICBzZXQgb3B0aW9ucyhvcHRpb25zOiBSZWFkb25seTxOd2JEYXRlUGlja2VyT3B0aW9ucz4pIHtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAodGhpcy5pc0J1bG1hRGF0ZVBpY2tlckV4aXN0cygpKSB7XG4gICAgICB0aGlzLnVwZGF0ZUJ1bG1hRGF0ZVBpY2tlck9wdGlvbnMob3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSA6IFJlYWRvbmx5PE53YkRhdGVQaWNrZXJPcHRpb25zPiB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICBfb3B0aW9uczogUmVhZG9ubHk8TndiRGF0ZVBpY2tlck9wdGlvbnM+ICA9IHtcbiAgICBkaXNwbGF5TW9kZTogJ2lubGluZScsXG4gICAgc2hvd0hlYWRlcjogZmFsc2UsXG4gICAgc2hvd0Zvb3RlcjogdHJ1ZSxcbiAgfTtcblxuICBASW5wdXQoKVxuICBwb3NpdGlvbiA9ICdib3R0b20nO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRlU2VsZWN0ZWQoZGF0ZVNlbGVjdGVkOiBEYXRlKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGF0ZVNlbGVjdGVkID0gbmV3IERhdGUoZGF0ZVNlbGVjdGVkKTsgLy8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGZvciBwdXJlIHBpcGVcbiAgfVxuICBnZXQgZGF0ZVNlbGVjdGVkKCkgOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZVNlbGVjdGVkO1xuICB9XG4gIF9kYXRlU2VsZWN0ZWQ6IERhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gIEBPdXRwdXQoKSBkYXRlU2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KClcbiAgdHlwZURhdGU6ICdkYXRldGltZScgfCAnZGF0ZXRpbWUtbG9jYWwnIHwgJ2RhdGUnID0gJ2RhdGV0aW1lLWxvY2FsJztcbiAgQElucHV0KClcbiAgbm9NYXJnaW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBjaGFuZ2VEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0YXJ0RGF0ZTogRGF0ZTsgZW5kRGF0ZTogRGF0ZTsgfT4oKTtcbiAgb3BlbiA9IGZhbHNlO1xuICBzdGFydExhYmVsID0gJyc7XG4gIGVuZExhYmVsID0gJyc7XG5cbiAgc2V0IGNhbGVuZGFyTWludXRlcyhjYWxlbmRhck1pbnV0ZXM6IHN0cmluZykge1xuICAgIGNvbnN0IG1pbnV0ZXMgPSB0aGlzLmZvcm1hdFRpbWUoY2FsZW5kYXJNaW51dGVzLCAwLCA1OSk7XG4gICAgdGhpcy5kYXRlU2VsZWN0ZWQuc2V0TWludXRlcyhtaW51dGVzKTtcbiAgICB0aGlzLmRhdGVTZWxlY3RlZCA9IHRoaXMuZGF0ZVNlbGVjdGVkOyAvLyB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cbiAgICB0aGlzLm1pbnV0ZXMubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGF0ZVNlbGVjdGVkLCAnbW0nKTsgLy8gZm9yY2UgdG8gdXBkYXRlIHRoZSBpbnB1dCB2YWx1ZVxuICAgIHRoaXMudHJpZ2dlckRhdGVTZWxlY3RlZENoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGNhbGVuZGFyTWludXRlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmRhdGVTZWxlY3RlZCwgJ21tJyk7XG4gIH1cblxuICBzZXQgY2FsZW5kYXJIb3VycyhjYWxlbmRhckhvdXJzOiBzdHJpbmcpIHtcbiAgICBjb25zdCBob3VycyA9IHRoaXMuZm9ybWF0VGltZShjYWxlbmRhckhvdXJzLCAwLCAyMyk7XG4gICAgdGhpcy5kYXRlU2VsZWN0ZWQuc2V0SG91cnMoaG91cnMpO1xuICAgIHRoaXMuZGF0ZVNlbGVjdGVkID0gdGhpcy5kYXRlU2VsZWN0ZWQ7IC8vIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgIHRoaXMuaG91cnMubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGF0ZVNlbGVjdGVkLCAnSEgnKTsgLy8gZm9yY2UgdG8gdXBkYXRlIHRoZSBpbnB1dCB2YWx1ZVxuICAgIHRoaXMudHJpZ2dlckRhdGVTZWxlY3RlZENoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGNhbGVuZGFySG91cnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VsZWN0ZWQsICdISCcpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUpIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmxhYmVsIHx8IGNoYW5nZXMudHlwZSkge1xuICAgICAgdGhpcy5zZXRDYWxlbmRhckxhYmVsKCk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VEYXRlKHNlbGVjdGVkRGF0ZXM6IE53YkRhdGVQaWNrZXJFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZWN0ZWREYXRlcy5zdGFydERhdGUuc2V0SG91cnModGhpcy5kYXRlU2VsZWN0ZWQuZ2V0SG91cnMoKSk7XG4gICAgc2VsZWN0ZWREYXRlcy5zdGFydERhdGUuc2V0TWludXRlcyh0aGlzLmRhdGVTZWxlY3RlZC5nZXRNaW51dGVzKCkpO1xuXG4gICAgdGhpcy5kYXRlU2VsZWN0ZWQgPSBzZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZTtcbiAgICB0aGlzLnRyaWdnZXJEYXRlU2VsZWN0ZWRDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJpZ2dlckRhdGVTZWxlY3RlZENoYW5nZSgpIHtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZGF0ZVNlbGVjdGVkKTtcbiAgICB0aGlzLmRhdGVTZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuZGF0ZVNlbGVjdGVkKTtcbiAgICB0aGlzLnRyaWdnZXJDaGFuZ2Uoe1xuICAgICAgc3RhcnREYXRlOiB0aGlzLmRhdGVTZWxlY3RlZCxcbiAgICAgIGVuZERhdGU6IHRoaXMuZGF0ZVNlbGVjdGVkXG4gICAgfSk7XG4gIH1cblxuICB0cmlnZ2VyQ2hhbmdlKGV2ZW50OiB7IHN0YXJ0RGF0ZTogRGF0ZTsgZW5kRGF0ZTogRGF0ZTsgfSkge1xuICAgIHRoaXMuY2hhbmdlRGF0YS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9wZW5DYWxlbmRhcih2YWx1ZSA9IG51bGwpIHtcblxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnY2xvc2UnKSB7XG4gICAgICBpZiAodGhpcy5vcGVuKSB7XG4gICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldENhbGVuZGFyTGFiZWwoKSB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2VkaXQnICYmIHRoaXMubGFiZWwpIHtcbiAgICAgIGNvbnN0IHNwbGl0TGFiZWwgPSB0aGlzLmxhYmVsLnNwbGl0KCd7eH0nKTtcbiAgICAgIGlmIChzcGxpdExhYmVsLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhpcy5zdGFydExhYmVsID0gc3BsaXRMYWJlbFswXTtcbiAgICAgICAgdGhpcy5lbmRMYWJlbCA9IHNwbGl0TGFiZWxbMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXJ0TGFiZWwgPSB0aGlzLmxhYmVsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGluY3JlbWVudE1pbnV0ZXMoJGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMuY2FsZW5kYXJNaW51dGVzID0gcGFyc2VJbnQodGhpcy5jYWxlbmRhck1pbnV0ZXMsIDEwKSArIDEgKyAnJztcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIGRlY3JlbWVudHNNaW51dGVzKCRldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLmNhbGVuZGFyTWludXRlcyA9IHBhcnNlSW50KHRoaXMuY2FsZW5kYXJNaW51dGVzLCAxMCkgLSAxICsgJyc7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBpbmNyZW1lbnRIb3VycygkZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5jYWxlbmRhckhvdXJzID0gcGFyc2VJbnQodGhpcy5jYWxlbmRhckhvdXJzLCAxMCkgKyAxICsgJyc7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBkZWNyZW1lbnRIb3VycygkZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5jYWxlbmRhckhvdXJzID0gcGFyc2VJbnQodGhpcy5jYWxlbmRhckhvdXJzLCAxMCkgLSAxICsgJyc7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvKlxuICAgIEVuc3VyZSB0aGF0IHRoZSBpbnB1dCB2YWx1ZSBpcyBhIG51bWJlciBhbmQgdGhhdCBpdCBpcyBiZXR3ZWVuIG1pbiBhbmQgbWF4XG4gICovXG4gIHByaXZhdGUgZm9ybWF0VGltZSh0aW1lOiBzdHJpbmcgfCBudW1iZXIsIG1pbiA9IDAsIG1heCA9IDU5KSB7XG4gICAgbGV0IHRpbWVOdW1iZXIgPSB0eXBlb2YgdGltZSA9PT0gJ3N0cmluZycgPyBwYXJzZUludCh0aW1lLCAxMCkgOiB0aW1lO1xuICAgIHRpbWVOdW1iZXIgPSB0aW1lTnVtYmVyID4gbWF4ID8gbWluIDogdGltZU51bWJlcjtcbiAgICB0aW1lTnVtYmVyID0gdGltZU51bWJlciA8IG1pbiA/IG1heCA6IHRpbWVOdW1iZXI7XG4gICAgdGltZU51bWJlciA9IHBhcnNlSW50KCgnJyArIHRpbWVOdW1iZXIpLnNsaWNlKC0yKSk7IC8vIGtlZXBzIG9ubHkgdGhlIGxhc3QgMiBkaWdpdHNcbiAgICByZXR1cm4gdGltZU51bWJlcjtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQnVsbWFEYXRlUGlja2VyT3B0aW9ucyhvcHRpb25zOiBSZWFkb25seTxOd2JEYXRlUGlja2VyT3B0aW9ucz4pIHtcbiAgICBjb25zdCBidWxtYUNhbGVuZGFyRGF0ZVBpY2tlciA9IHRoaXMuZGF0ZVBpY2tlclsnYnVsbWFDYWxlbmRhciddLmRhdGVQaWNrZXI7XG4gICAgYnVsbWFDYWxlbmRhckRhdGVQaWNrZXIubWluID0gb3B0aW9ucy5taW5EYXRlO1xuICAgIGJ1bG1hQ2FsZW5kYXJEYXRlUGlja2VyLm1heCA9IG9wdGlvbnMubWF4RGF0ZTtcbiAgICBidWxtYUNhbGVuZGFyRGF0ZVBpY2tlci5yZWZyZXNoKCk7XG4gIH1cblxuICBwcml2YXRlIGlzQnVsbWFEYXRlUGlja2VyRXhpc3RzKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGVQaWNrZXIgJiYgdGhpcy5kYXRlUGlja2VyWydidWxtYUNhbGVuZGFyJ10gJiYgdGhpcy5kYXRlUGlja2VyWydidWxtYUNhbGVuZGFyJ10uZGF0ZVBpY2tlcjtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIG1ldGhvZHNcblxuICBvbkNoYW5nZTogKHZhbHVlOiBEYXRlKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgb25Ub3VjaDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIHdyaXRlVmFsdWUoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGVTZWxlY3RlZCA9IGRhdGU7XG4gIH1cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KXtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSl7XG4gICAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgfVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cIndhYy1jYWxlbmRhclwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnd2FjLWNhbGVuZGFyLS1pbnB1dCc6IHR5cGUgPT09ICdpbnB1dCcsXG4gICAgJ3dhYy1jYWxlbmRhci0tb25seURhdGUnOiB0eXBlRGF0ZSA9PT0gJ2RhdGUnLFxuICAgICd3YWMtY2FsZW5kYXItLWVkaXQnOiB0eXBlID09PSAnZWRpdCcsXG4gICAgJ3dhYy1jYWxlbmRhci0tc2VsZWN0JzogdHlwZSA9PT0gJ3NlbGVjdCcsXG4gICAgJ3dhYy1jYWxlbmRhci0tbm8tbWFyZ2luJzogbm9NYXJnaW4sXG4gICAgJ3dhYy1jYWxlbmRhci0tb3Blbic6IG9wZW5cbiAgfVwiXG4gIFt6SW5kZXhUb2dnbGVdPVwib3BlblwiXG4+XG4gIDxwIFtjbGFzc109XCInd2FjLWNhbGVuZGFyX19sYWJlbCcgKyAoYm9sZExhYmVsID8gJyBib2xkJyA6ICcnKVwiICpuZ0lmPVwibGFiZWwgJiYgKHR5cGUgPT09ICdpbnB1dCcgfHwgdHlwZSA9PT0gJ3NlbGVjdCcpXCIgKGNsaWNrKT1cIm9wZW5DYWxlbmRhcigpXCI+e3sgbGFiZWwgfX08L3A+XG4gIDxwIGNsYXNzPVwid2FjLWNhbGVuZGFyX19zdGFydExhYmVsXCIgKm5nSWY9XCJ0eXBlID09PSAnZWRpdCdcIj57eyBzdGFydExhYmVsIH19PC9wPlxuICA8d2FjLW9wdGlvbmFsLWRpc2FibGUtY29udGFpbmVyIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2F1dG9IaWRlXCIgd3pBdXRvSGlkZSAoY2xpY2tPdXRzaWRlKT1cIm9wZW5DYWxlbmRhcignY2xvc2UnKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19pbnB1dFwiICpuZ0lmPVwidHlwZSA9PT0gJ2lucHV0J1wiIChjbGljayk9XCJvcGVuQ2FsZW5kYXIoKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX2lucHV0X19pY29uXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhciBmYS1jYWxlbmRhci1hbHRcIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlcl9faW5wdXRfX2RhdGVcIj5cbiAgICAgICAgICAgIHt7IGRhdGVTZWxlY3RlZCB8IGRhdGU6ICdkZC9NTS95eXl5JyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX2lucHV0X190aW1lXCI+XG4gICAgICAgICAgICB7eyBkYXRlU2VsZWN0ZWQgfCBkYXRlOiAnSEg6bW0nIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19lZGl0SW5QbGFjZVwiICpuZ0lmPVwidHlwZSA9PT0gJ2VkaXQnXCIgKGNsaWNrKT1cIm9wZW5DYWxlbmRhcigpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlcl9fZWRpdEluUGxhY2VfX2ljb25cIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFsIGZhLWNhbGVuZGFyLWFsdFwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19lZGl0SW5QbGFjZV9fZGF0ZVwiPlxuICAgICAgICAgICAge3sgZGF0ZVNlbGVjdGVkIHwgZGF0ZTogJ2RkL01NL3l5eXkgSEg6bW0nIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19zZWxlY3RcIiAqbmdJZj1cInR5cGUgPT09ICdzZWxlY3QnXCIgKGNsaWNrKT1cIm9wZW5DYWxlbmRhcigpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlcl9fc2VsZWN0X19pY29uXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS1jYWxlbmRhci1hbHRcIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlcl9fc2VsZWN0X19kYXRlXCI+XG4gICAgICAgICAgICB7eyBkYXRlU2VsZWN0ZWQgfCBkYXRlOiAnZGQvTU0veXl5eSBISDptbScgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgIHRvcDogcG9zaXRpb24gPT09ICd0b3AnLFxuICAgICAgICAgIGJvdHRvbTogcG9zaXRpb24gPT09ICdib3R0b20nLFxuICAgICAgICAgIGxlZnQ6IHBvc2l0aW9uID09PSAnbGVmdCcsXG4gICAgICAgICAgcmlnaHQ6IHBvc2l0aW9uID09PSAncmlnaHQnLFxuICAgICAgICAgICdyaWdodC10b3AnOiBwb3NpdGlvbiA9PT0gJ3JpZ2h0LXRvcCcsXG4gICAgICAgICAgJ3JpZ2h0LWJvdHRvbSc6IHBvc2l0aW9uID09PSAncmlnaHQtYm90dG9tJyxcbiAgICAgICAgICAnbGVmdC10b3AnOiBwb3NpdGlvbiA9PT0gJ2xlZnQtdG9wJyxcbiAgICAgICAgICAnbGVmdC1ib3R0b20nOiBwb3NpdGlvbiA9PT0gJ2xlZnQtYm90dG9tJyxcbiAgICAgICAgICAnd2l0aC10aW1lJzogdHlwZURhdGUgPT09ICdkYXRldGltZS1sb2NhbCcgfHwgdHlwZURhdGUgPT09ICdkYXRldGltZSdcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxud2ItZGF0ZS1waWNrZXIgI2RhdGVQaWNrZXIgKGNoYW5nZSk9XCJvbkNoYW5nZURhdGUoJGV2ZW50KVwiIFtvcHRpb25zXT1cIm9wdGlvbnNcIj5cbiAgICAgICAgICA8aW5wdXQgW253YkRhdGVwaWNrZXJTdGFydF09XCJkYXRlUGlja2VyXCIgdHlwZT1cInRleHRcIiBbbndiRGF0ZVR5cGVdPVwiJ2RhdGUnXCIgW3ZhbHVlXT1cImRhdGVTZWxlY3RlZC50b0lTT1N0cmluZygpXCIgLz5cbiAgICAgICAgPC9ud2ItZGF0ZS1waWNrZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lXCIgKm5nSWY9XCJ0eXBlRGF0ZSA9PT0gJ2RhdGV0aW1lLWxvY2FsJyB8fCB0eXBlRGF0ZSA9PT0gJ2RhdGV0aW1lJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX19hYnNvbHV0ZV9fdGltZV9fd3JhcHBlcl9faG91cnNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX2hvdXJzX19sZWZ0XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX2hvdXJzX19idG5cIiAoY2xpY2spPVwiaW5jcmVtZW50SG91cnMoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1c1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwid2FjLWNhbGVuZGFyX19hYnNvbHV0ZV9fdGltZV9fd3JhcHBlcl9faG91cnNfX2J0blwiIChjbGljayk9XCJkZWNyZW1lbnRIb3VycygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1taW51c1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyX19ob3Vyc19fcmlnaHRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgI2hvdXJzIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjYWxlbmRhckhvdXJzXCIgW3dhY09ubHlOdW1iZXJdPVwidHJ1ZVwiLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyX19taW51dGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyX19taW51dGVzX19sZWZ0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0ICNtaW51dGVzIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjYWxlbmRhck1pbnV0ZXNcIiBbd2FjT25seU51bWJlcl09XCJ0cnVlXCIvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX21pbnV0ZXNfX3JpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX21pbnV0ZXNfX2J0blwiIChjbGljayk9XCJpbmNyZW1lbnRNaW51dGVzKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX21pbnV0ZXNfX2J0blwiIChjbGljayk9XCJkZWNyZW1lbnRzTWludXRlcygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1taW51c1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC93YWMtb3B0aW9uYWwtZGlzYWJsZS1jb250YWluZXI+XG4gIDxwIGNsYXNzPVwid2FjLWNhbGVuZGFyX19lbmRMYWJlbFwiICpuZ0lmPVwidHlwZSA9PT0gJ2VkaXQnXCI+e3sgZW5kTGFiZWwgfX08L3A+XG48L2Rpdj5cbiJdfQ==
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE0Qix1QkFBdUIsRUFBRSxTQUFTLEVBQWMsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEssT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7O0FBaUIzRSxNQUFNLE9BQU8saUJBQWlCO0lBK0Y1QixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBckZ0QyxjQUFTLEdBQVksS0FBSyxDQUFDLENBQUMsOENBQThDO1FBRzFFLFNBQUksR0FBZ0MsT0FBTyxDQUFDO1FBYzVDLGFBQVEsR0FBb0M7WUFDMUMsV0FBVyxFQUFFLFFBQVE7WUFDckIsVUFBVSxFQUFFLEtBQUs7WUFDakIsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQztRQUdGLGFBQVEsR0FBRyxRQUFRLENBQUM7UUFjVix1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBR2xELGFBQVEsR0FBMkMsZ0JBQWdCLENBQUM7UUFFcEUsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVSLGFBQVEs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dUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxjQUN6QixDQUFDLGdCQUFnQixDQUFDOytGQUlSLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDQSxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBQ08sVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUd2QixLQUFLO3NCQURKLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJRixPQUFPO3NCQURWLEtBQUs7Z0JBbUJOLFFBQVE7c0JBRFAsS0FBSztnQkFJRixZQUFZO3NCQURmLEtBQUs7Z0JBWUksa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdQLFFBQVE7c0JBRFAsS0FBSztnQkFHTixRQUFRO3NCQURQLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE53YkRhdGVQaWNrZXJDb21wb25lbnQsIE53YkRhdGVQaWNrZXJFdmVudCwgTndiRGF0ZVBpY2tlck9wdGlvbnMgfSBmcm9tICdAd2l6aXNob3Avbmctd2l6aS1idWxtYSc7XG5pbXBvcnQgeyBvcGFjaXR5QW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9ucy9zaG93L29wYWNpdHkuYW5pbWF0aW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2FjLWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAgRGF0ZVBpcGVcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGFuaW1hdGlvbnM6IFtvcGFjaXR5QW5pbWF0aW9uXVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAvLyEgQXQgdGhlIG1vbWVudCwgdGhlIGNvbXBvbmVudCBoYW5kbGUgb25seSBvbmUgZGF0ZSAobm90IGEgcmFuZ2UpXG4gIEBWaWV3Q2hpbGQoJ21pbnV0ZXMnKSBtaW51dGVzOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdob3VycycpIGhvdXJzOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyJykgZGF0ZVBpY2tlcjogTndiRGF0ZVBpY2tlckNvbXBvbmVudDtcblxuICBASW5wdXQoKVxuICBsYWJlbDogc3RyaW5nIHwgbnVsbDsgLy8gdG9kbyB1c2UgbmctY29udGVudCBpbnN0ZWFkXG5cbiAgQElucHV0KClcbiAgYm9sZExhYmVsOiBib29sZWFuID0gZmFsc2U7IC8vIHRvZG8gcmVtb3ZlIHdoZW4gbGFiZWwgd2lsbCBiZSBhIG5nLWNvbnRlbnRcblxuICBASW5wdXQoKVxuICB0eXBlOiAnaW5wdXQnIHwgJ2VkaXQnIHwgJ3NlbGVjdCcgPSAnaW5wdXQnO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBvcHRpb25zKG9wdGlvbnM6IFJlYWRvbmx5PE53YkRhdGVQaWNrZXJPcHRpb25zPikge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmICh0aGlzLmlzQnVsbWFEYXRlUGlja2VyRXhpc3RzKCkpIHtcbiAgICAgIHRoaXMudXBkYXRlQnVsbWFEYXRlUGlja2VyT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIDogUmVhZG9ubHk8TndiRGF0ZVBpY2tlck9wdGlvbnM+IHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIF9vcHRpb25zOiBSZWFkb25seTxOd2JEYXRlUGlja2VyT3B0aW9ucz4gID0ge1xuICAgIGRpc3BsYXlNb2RlOiAnaW5saW5lJyxcbiAgICBzaG93SGVhZGVyOiBmYWxzZSxcbiAgICBzaG93Rm9vdGVyOiB0cnVlLFxuICB9O1xuXG4gIEBJbnB1dCgpXG4gIHBvc2l0aW9uID0gJ2JvdHRvbSc7XG5cbiAgQElucHV0KClcbiAgc2V0IGRhdGVTZWxlY3RlZChkYXRlU2VsZWN0ZWQ6IERhdGUpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kYXRlU2VsZWN0ZWQgPSBuZXcgRGF0ZShkYXRlU2VsZWN0ZWQpOyAvLyB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gZm9yIHB1cmUgcGlwZVxuICB9XG4gIGdldCBkYXRlU2VsZWN0ZWQoKSA6IERhdGUge1xuICAgIHJldHVybiB0aGlzLl9kYXRlU2VsZWN0ZWQ7XG4gIH1cbiAgX2RhdGVTZWxlY3RlZDogRGF0ZTtcblxuICBAT3V0cHV0KCkgZGF0ZVNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBJbnB1dCgpXG4gIHR5cGVEYXRlOiAnZGF0ZXRpbWUnIHwgJ2RhdGV0aW1lLWxvY2FsJyB8ICdkYXRlJyA9ICdkYXRldGltZS1sb2NhbCc7XG4gIEBJbnB1dCgpXG4gIG5vTWFyZ2luID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgY2hhbmdlRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBzdGFydERhdGU6IERhdGU7IGVuZERhdGU6IERhdGU7IH0+KCk7XG4gIG9wZW4gPSBmYWxzZTtcbiAgc3RhcnRMYWJlbCA9ICcnO1xuICBlbmRMYWJlbCA9ICcnO1xuXG4gIHNldCBjYWxlbmRhck1pbnV0ZXMoY2FsZW5kYXJNaW51dGVzOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuZGF0ZVNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmRhdGVTZWxlY3RlZCA9IG5ldyBEYXRlKCk7XG4gICAgfVxuICAgIGNvbnN0IG1pbnV0ZXMgPSB0aGlzLmZvcm1hdFRpbWUoY2FsZW5kYXJNaW51dGVzLCAwLCA1OSk7XG4gICAgdGhpcy5kYXRlU2VsZWN0ZWQuc2V0TWludXRlcyhtaW51dGVzKTtcblxuICAgIHRoaXMuZGF0ZVNlbGVjdGVkID0gdGhpcy5kYXRlU2VsZWN0ZWQ7IC8vIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgIHRoaXMubWludXRlcy5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VsZWN0ZWQsICdtbScpOyAvLyBmb3JjZSB0byB1cGRhdGUgdGhlIGlucHV0IHZhbHVlXG4gICAgdGhpcy50cmlnZ2VyRGF0ZVNlbGVjdGVkQ2hhbmdlKCk7XG4gIH1cblxuICBnZXQgY2FsZW5kYXJNaW51dGVzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGF0ZVNlbGVjdGVkID8/IG5ldyBEYXRlKCksICdtbScpO1xuICB9XG5cbiAgc2V0IGNhbGVuZGFySG91cnMoY2FsZW5kYXJIb3Vyczogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmRhdGVTZWxlY3RlZCkge1xuICAgICAgdGhpcy5kYXRlU2VsZWN0ZWQgPSBuZXcgRGF0ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGhvdXJzID0gdGhpcy5mb3JtYXRUaW1lKGNhbGVuZGFySG91cnMsIDAsIDIzKTtcblxuICAgIHRoaXMuZGF0ZVNlbGVjdGVkLnNldEhvdXJzKGhvdXJzKTtcbiAgICB0aGlzLmRhdGVTZWxlY3RlZCA9IHRoaXMuZGF0ZVNlbGVjdGVkOyAvLyB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cbiAgICB0aGlzLmhvdXJzLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmRhdGVTZWxlY3RlZCwgJ0hIJyk7IC8vIGZvcmNlIHRvIHVwZGF0ZSB0aGUgaW5wdXQgdmFsdWVcbiAgICB0aGlzLnRyaWdnZXJEYXRlU2VsZWN0ZWRDaGFuZ2UoKTtcbiAgfVxuXG4gIGdldCBjYWxlbmRhckhvdXJzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGF0ZVNlbGVjdGVkID8/IG5ldyBEYXRlKCksICdISCcpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUpIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmxhYmVsIHx8IGNoYW5nZXMudHlwZSkge1xuICAgICAgdGhpcy5zZXRDYWxlbmRhckxhYmVsKCk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VEYXRlKHNlbGVjdGVkRGF0ZXM6IE53YkRhdGVQaWNrZXJFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRhdGVTZWxlY3RlZCkge1xuICAgICAgdGhpcy5kYXRlU2VsZWN0ZWQgPSBuZXcgRGF0ZSgpO1xuICAgIH1cblxuICAgIHNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlLnNldEhvdXJzKHRoaXMuZGF0ZVNlbGVjdGVkLmdldEhvdXJzKCkpO1xuICAgIHNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlU2VsZWN0ZWQuZ2V0TWludXRlcygpKTtcblxuICAgIHRoaXMuZGF0ZVNlbGVjdGVkID0gc2VsZWN0ZWREYXRlcy5zdGFydERhdGU7XG4gICAgdGhpcy50cmlnZ2VyRGF0ZVNlbGVjdGVkQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIHRyaWdnZXJEYXRlU2VsZWN0ZWRDaGFuZ2UoKSB7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLmRhdGVTZWxlY3RlZCk7XG4gICAgdGhpcy5kYXRlU2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLmRhdGVTZWxlY3RlZCk7XG4gICAgdGhpcy50cmlnZ2VyQ2hhbmdlKHtcbiAgICAgIHN0YXJ0RGF0ZTogdGhpcy5kYXRlU2VsZWN0ZWQsXG4gICAgICBlbmREYXRlOiB0aGlzLmRhdGVTZWxlY3RlZFxuICAgIH0pO1xuICB9XG5cbiAgdHJpZ2dlckNoYW5nZShldmVudDogeyBzdGFydERhdGU6IERhdGU7IGVuZERhdGU6IERhdGU7IH0pIHtcbiAgICB0aGlzLmNoYW5nZURhdGEuZW1pdChldmVudCk7XG4gIH1cblxuICBvcGVuQ2FsZW5kYXIodmFsdWUgPSBudWxsKSB7XG5cbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gJ2Nsb3NlJykge1xuICAgICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vblRvdWNoKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYWxlbmRhckxhYmVsKCkge1xuICAgIGlmICh0aGlzLnR5cGUgPT09ICdlZGl0JyAmJiB0aGlzLmxhYmVsKSB7XG4gICAgICBjb25zdCBzcGxpdExhYmVsID0gdGhpcy5sYWJlbC5zcGxpdCgne3h9Jyk7XG4gICAgICBpZiAoc3BsaXRMYWJlbC5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMuc3RhcnRMYWJlbCA9IHNwbGl0TGFiZWxbMF07XG4gICAgICAgIHRoaXMuZW5kTGFiZWwgPSBzcGxpdExhYmVsWzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGFydExhYmVsID0gdGhpcy5sYWJlbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpbmNyZW1lbnRNaW51dGVzKCRldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLmNhbGVuZGFyTWludXRlcyA9IHBhcnNlSW50KHRoaXMuY2FsZW5kYXJNaW51dGVzLCAxMCkgKyAxICsgJyc7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBkZWNyZW1lbnRzTWludXRlcygkZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5jYWxlbmRhck1pbnV0ZXMgPSBwYXJzZUludCh0aGlzLmNhbGVuZGFyTWludXRlcywgMTApIC0gMSArICcnO1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgaW5jcmVtZW50SG91cnMoJGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMuY2FsZW5kYXJIb3VycyA9IHBhcnNlSW50KHRoaXMuY2FsZW5kYXJIb3VycywgMTApICsgMSArICcnO1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgZGVjcmVtZW50SG91cnMoJGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMuY2FsZW5kYXJIb3VycyA9IHBhcnNlSW50KHRoaXMuY2FsZW5kYXJIb3VycywgMTApIC0gMSArICcnO1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgLypcbiAgICBFbnN1cmUgdGhhdCB0aGUgaW5wdXQgdmFsdWUgaXMgYSBudW1iZXIgYW5kIHRoYXQgaXQgaXMgYmV0d2VlbiBtaW4gYW5kIG1heFxuICAqL1xuICBwcml2YXRlIGZvcm1hdFRpbWUodGltZTogc3RyaW5nIHwgbnVtYmVyLCBtaW4gPSAwLCBtYXggPSA1OSkge1xuICAgIGxldCB0aW1lTnVtYmVyID0gdHlwZW9mIHRpbWUgPT09ICdzdHJpbmcnID8gcGFyc2VJbnQodGltZSwgMTApIDogdGltZTtcbiAgICB0aW1lTnVtYmVyID0gdGltZU51bWJlciA+IG1heCA/IG1pbiA6IHRpbWVOdW1iZXI7XG4gICAgdGltZU51bWJlciA9IHRpbWVOdW1iZXIgPCBtaW4gPyBtYXggOiB0aW1lTnVtYmVyO1xuICAgIHRpbWVOdW1iZXIgPSBwYXJzZUludCgoJycgKyB0aW1lTnVtYmVyKS5zbGljZSgtMikpOyAvLyBrZWVwcyBvbmx5IHRoZSBsYXN0IDIgZGlnaXRzXG4gICAgcmV0dXJuIHRpbWVOdW1iZXI7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUJ1bG1hRGF0ZVBpY2tlck9wdGlvbnMob3B0aW9uczogUmVhZG9ubHk8TndiRGF0ZVBpY2tlck9wdGlvbnM+KSB7XG4gICAgY29uc3QgYnVsbWFDYWxlbmRhckRhdGVQaWNrZXIgPSB0aGlzLmRhdGVQaWNrZXJbJ2J1bG1hQ2FsZW5kYXInXS5kYXRlUGlja2VyO1xuICAgIGJ1bG1hQ2FsZW5kYXJEYXRlUGlja2VyLm1pbiA9IG9wdGlvbnMubWluRGF0ZTtcbiAgICBidWxtYUNhbGVuZGFyRGF0ZVBpY2tlci5tYXggPSBvcHRpb25zLm1heERhdGU7XG4gICAgYnVsbWFDYWxlbmRhckRhdGVQaWNrZXIucmVmcmVzaCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0J1bG1hRGF0ZVBpY2tlckV4aXN0cygpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlUGlja2VyICYmIHRoaXMuZGF0ZVBpY2tlclsnYnVsbWFDYWxlbmRhciddICYmIHRoaXMuZGF0ZVBpY2tlclsnYnVsbWFDYWxlbmRhciddLmRhdGVQaWNrZXI7XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBtZXRob2RzXG5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogRGF0ZSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIG9uVG91Y2g6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICB3cml0ZVZhbHVlKGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kYXRlU2VsZWN0ZWQgPSBkYXRlO1xuICB9XG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSl7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpe1xuICAgICAgdGhpcy5vblRvdWNoID0gZm47XG4gIH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJ3YWMtY2FsZW5kYXJcIlxuICBbbmdDbGFzc109XCJ7XG4gICAgJ3dhYy1jYWxlbmRhci0taW5wdXQnOiB0eXBlID09PSAnaW5wdXQnLFxuICAgICd3YWMtY2FsZW5kYXItLW9ubHlEYXRlJzogdHlwZURhdGUgPT09ICdkYXRlJyxcbiAgICAnd2FjLWNhbGVuZGFyLS1lZGl0JzogdHlwZSA9PT0gJ2VkaXQnLFxuICAgICd3YWMtY2FsZW5kYXItLXNlbGVjdCc6IHR5cGUgPT09ICdzZWxlY3QnLFxuICAgICd3YWMtY2FsZW5kYXItLW5vLW1hcmdpbic6IG5vTWFyZ2luLFxuICAgICd3YWMtY2FsZW5kYXItLW9wZW4nOiBvcGVuXG4gIH1cIlxuICBbekluZGV4VG9nZ2xlXT1cIm9wZW5cIlxuPlxuICA8cCBbY2xhc3NdPVwiJ3dhYy1jYWxlbmRhcl9fbGFiZWwnICsgKGJvbGRMYWJlbCA/ICcgYm9sZCcgOiAnJylcIiAqbmdJZj1cImxhYmVsICYmICh0eXBlID09PSAnaW5wdXQnIHx8IHR5cGUgPT09ICdzZWxlY3QnKVwiIChjbGljayk9XCJvcGVuQ2FsZW5kYXIoKVwiPnt7IGxhYmVsIH19PC9wPlxuICA8cCBjbGFzcz1cIndhYy1jYWxlbmRhcl9fc3RhcnRMYWJlbFwiICpuZ0lmPVwidHlwZSA9PT0gJ2VkaXQnXCI+e3sgc3RhcnRMYWJlbCB9fTwvcD5cbiAgPHdhYy1vcHRpb25hbC1kaXNhYmxlLWNvbnRhaW5lciBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX19hdXRvSGlkZVwiIHd6QXV0b0hpZGUgKGNsaWNrT3V0c2lkZSk9XCJvcGVuQ2FsZW5kYXIoJ2Nsb3NlJylcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlcl9faW5wdXRcIiAqbmdJZj1cInR5cGUgPT09ICdpbnB1dCdcIiAoY2xpY2spPVwib3BlbkNhbGVuZGFyKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19pbnB1dF9faWNvblwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtY2FsZW5kYXItYWx0XCI+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX2lucHV0X19kYXRlXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGVTZWxlY3RlZFwiIEBvcGFjaXR5QW5pbWF0aW9uPnt7IGRhdGVTZWxlY3RlZCB8IGRhdGU6ICdkZC9NTS95eXl5J319PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZGF0ZVNlbGVjdGVkXCIgQG9wYWNpdHlBbmltYXRpb24+e3sgJ3dhYy5EYXRlLlBsYWNlSG9sZGVyLmRkL21tL3l5eXknIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX2lucHV0X190aW1lXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGVTZWxlY3RlZFwiIEBvcGFjaXR5QW5pbWF0aW9uPnt7IGRhdGVTZWxlY3RlZCB8IGRhdGU6ICdISDptbScgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFkYXRlU2VsZWN0ZWRcIiBAb3BhY2l0eUFuaW1hdGlvbj57eyAnd2FjLkRhdGUuUGxhY2VIb2xkZXIuSEg6bW0nIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlcl9fZWRpdEluUGxhY2VcIiAqbmdJZj1cInR5cGUgPT09ICdlZGl0J1wiIChjbGljayk9XCJvcGVuQ2FsZW5kYXIoKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX2VkaXRJblBsYWNlX19pY29uXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS1jYWxlbmRhci1hbHRcIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fd3JhcHBlcl9fZWRpdEluUGxhY2VfX2RhdGVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX2lucHV0X190aW1lXCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0ZVNlbGVjdGVkXCIgQG9wYWNpdHlBbmltYXRpb24+e3sgZGF0ZVNlbGVjdGVkIHwgZGF0ZTogJ2RkL01NL3l5eXkgSEg6bW0nIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFkYXRlU2VsZWN0ZWRcIiBAb3BhY2l0eUFuaW1hdGlvbj57eyAnd2FjLkRhdGUuUGxhY2VIb2xkZXIuZGQvTU0veXl5eV9ISDptbScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX3dyYXBwZXJfX3NlbGVjdFwiICpuZ0lmPVwidHlwZSA9PT0gJ3NlbGVjdCdcIiAoY2xpY2spPVwib3BlbkNhbGVuZGFyKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19zZWxlY3RfX2ljb25cIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFsIGZhLWNhbGVuZGFyLWFsdFwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX193cmFwcGVyX19zZWxlY3RfX2RhdGVcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0ZVNlbGVjdGVkXCIgQG9wYWNpdHlBbmltYXRpb24+e3sgZGF0ZVNlbGVjdGVkIHwgZGF0ZTogJ2RkL01NL3l5eXkgSEg6bW0nIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZGF0ZVNlbGVjdGVkXCIgQG9wYWNpdHlBbmltYXRpb24+e3sgJ3dhYy5EYXRlLlBsYWNlSG9sZGVyLmRkL01NL3l5eXlfSEg6bW0nIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgdG9wOiBwb3NpdGlvbiA9PT0gJ3RvcCcsXG4gICAgICAgICAgYm90dG9tOiBwb3NpdGlvbiA9PT0gJ2JvdHRvbScsXG4gICAgICAgICAgbGVmdDogcG9zaXRpb24gPT09ICdsZWZ0JyxcbiAgICAgICAgICByaWdodDogcG9zaXRpb24gPT09ICdyaWdodCcsXG4gICAgICAgICAgJ3JpZ2h0LXRvcCc6IHBvc2l0aW9uID09PSAncmlnaHQtdG9wJyxcbiAgICAgICAgICAncmlnaHQtYm90dG9tJzogcG9zaXRpb24gPT09ICdyaWdodC1ib3R0b20nLFxuICAgICAgICAgICdsZWZ0LXRvcCc6IHBvc2l0aW9uID09PSAnbGVmdC10b3AnLFxuICAgICAgICAgICdsZWZ0LWJvdHRvbSc6IHBvc2l0aW9uID09PSAnbGVmdC1ib3R0b20nLFxuICAgICAgICAgICd3aXRoLXRpbWUnOiB0eXBlRGF0ZSA9PT0gJ2RhdGV0aW1lLWxvY2FsJyB8fCB0eXBlRGF0ZSA9PT0gJ2RhdGV0aW1lJ1xuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPG53Yi1kYXRlLXBpY2tlciAjZGF0ZVBpY2tlciAoY2hhbmdlKT1cIm9uQ2hhbmdlRGF0ZSgkZXZlbnQpXCIgW29wdGlvbnNdPVwib3B0aW9uc1wiPlxuICAgICAgICAgIDxpbnB1dCBbbndiRGF0ZXBpY2tlclN0YXJ0XT1cImRhdGVQaWNrZXJcIiB0eXBlPVwidGV4dFwiIFtud2JEYXRlVHlwZV09XCInZGF0ZSdcIiBbdmFsdWVdPVwiZGF0ZVNlbGVjdGVkPy50b0lTT1N0cmluZygpXCIgLz5cbiAgICAgICAgPC9ud2ItZGF0ZS1waWNrZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lXCIgKm5nSWY9XCJ0eXBlRGF0ZSA9PT0gJ2RhdGV0aW1lLWxvY2FsJyB8fCB0eXBlRGF0ZSA9PT0gJ2RhdGV0aW1lJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FjLWNhbGVuZGFyX19hYnNvbHV0ZV9fdGltZV9fd3JhcHBlcl9faG91cnNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX2hvdXJzX19sZWZ0XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX2hvdXJzX19idG5cIiAoY2xpY2spPVwiaW5jcmVtZW50SG91cnMoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1c1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwid2FjLWNhbGVuZGFyX19hYnNvbHV0ZV9fdGltZV9fd3JhcHBlcl9faG91cnNfX2J0blwiIChjbGljayk9XCJkZWNyZW1lbnRIb3VycygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1taW51c1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyX19ob3Vyc19fcmlnaHRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgI2hvdXJzIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjYWxlbmRhckhvdXJzXCIgW3dhY09ubHlOdW1iZXJdPVwidHJ1ZVwiLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyX19taW51dGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWMtY2FsZW5kYXJfX2Fic29sdXRlX190aW1lX193cmFwcGVyX19taW51dGVzX19sZWZ0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0ICNtaW51dGVzIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjYWxlbmRhck1pbnV0ZXNcIiBbd2FjT25seU51bWJlcl09XCJ0cnVlXCIvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX21pbnV0ZXNfX3JpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX21pbnV0ZXNfX2J0blwiIChjbGljayk9XCJpbmNyZW1lbnRNaW51dGVzKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIndhYy1jYWxlbmRhcl9fYWJzb2x1dGVfX3RpbWVfX3dyYXBwZXJfX21pbnV0ZXNfX2J0blwiIChjbGljayk9XCJkZWNyZW1lbnRzTWludXRlcygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1taW51c1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC93YWMtb3B0aW9uYWwtZGlzYWJsZS1jb250YWluZXI+XG4gIDxwIGNsYXNzPVwid2FjLWNhbGVuZGFyX19lbmRMYWJlbFwiICpuZ0lmPVwidHlwZSA9PT0gJ2VkaXQnXCI+e3sgZW5kTGFiZWwgfX08L3A+XG48L2Rpdj5cbiJdfQ==