ng-zenduit 1.0.21 → 1.0.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.
- package/esm2020/lib/datepicker/zendu-datepicker.component.mjs +34 -4
- package/esm2020/lib/filter/zendu-filter.component.mjs +1 -1
- package/esm2020/lib/select/zendu-select.component.mjs +4 -4
- package/fesm2015/ng-zenduit.mjs +37 -6
- package/fesm2015/ng-zenduit.mjs.map +1 -1
- package/fesm2020/ng-zenduit.mjs +36 -6
- package/fesm2020/ng-zenduit.mjs.map +1 -1
- package/lib/datepicker/zendu-datepicker.component.d.ts +5 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
|
|
2
2
|
import moment from 'moment/moment';
|
|
3
3
|
import { DATEPICKER_POSITION } from './datepicker';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
@@ -17,6 +17,7 @@ export class ZenduDatepickerComponent {
|
|
|
17
17
|
this.dateChange = new EventEmitter();
|
|
18
18
|
this.showTime = false;
|
|
19
19
|
this.showDate = true;
|
|
20
|
+
this.parentContainer = null;
|
|
20
21
|
this.boxDesign = false;
|
|
21
22
|
this.highlightDays = [];
|
|
22
23
|
this.autoConfirm = false;
|
|
@@ -133,6 +134,30 @@ export class ZenduDatepickerComponent {
|
|
|
133
134
|
}
|
|
134
135
|
}
|
|
135
136
|
this.updatePlacement();
|
|
137
|
+
this.syncMenuPositionWithDelay();
|
|
138
|
+
}
|
|
139
|
+
syncMenuPositionWithDelay() {
|
|
140
|
+
if (!this.parentContainer) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
setTimeout(() => {
|
|
144
|
+
const elementRect = this._element.nativeElement.getBoundingClientRect();
|
|
145
|
+
const parentRect = this.parentContainer.getBoundingClientRect();
|
|
146
|
+
// Calculate the top difference between element and parent (if available)
|
|
147
|
+
const top = this.calculateTopPosition(elementRect, parentRect);
|
|
148
|
+
const dateMenuRect = this.dateMenu?.nativeElement?.getBoundingClientRect();
|
|
149
|
+
this.bottom = dateMenuRect?.height < top;
|
|
150
|
+
}, 150);
|
|
151
|
+
}
|
|
152
|
+
calculateTopPosition(elementRect, parentRect) {
|
|
153
|
+
let top;
|
|
154
|
+
if (elementRect.top < parentRect.top) {
|
|
155
|
+
top = parentRect.top - elementRect.top; // Reverse order if condition is met
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
top = elementRect.top - parentRect.top; // Normal calculation
|
|
159
|
+
}
|
|
160
|
+
return top;
|
|
136
161
|
}
|
|
137
162
|
updateDays() {
|
|
138
163
|
if (!this.currentSlot) {
|
|
@@ -399,10 +424,10 @@ export class ZenduDatepickerComponent {
|
|
|
399
424
|
}
|
|
400
425
|
}
|
|
401
426
|
ZenduDatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduDatepickerComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
402
|
-
ZenduDatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduDatepickerComponent, selector: "zen-datepicker", inputs: { date: "date", showTime: "showTime", showDate: "showDate", containerClass: "containerClass", minDate: "minDate", maxDate: "maxDate", boxDesign: "boxDesign", highlightDays: "highlightDays", autoConfirm: "autoConfirm", hint: "hint", highlightError: "highlightError", disabled: "disabled", readonly: "readonly", xPosition: "xPosition", yPosition: "yPosition" }, outputs: { dateChange: "dateChange" }, host: { listeners: { "window:mousedown": "outsideHandling($event)", "window:scroll": "scroll()" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"date-component\">\n <!-- Material design datepicker toggle -->\n <ng-container *ngIf=\"!boxDesign\">\n <button class=\"date-toggle\"\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n <div class=\"date-content\">\n <!-- date placeholder -->\n <div class=\"date-placeholder\"\n *ngIf=\"!date\">\n Select Date\n </div>\n\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\"> {{formattedTime()}}</span>\n </div>\n </div>\n\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n </button>\n </ng-container>\n\n <!-- Box design datepicker toggle -->\n <ng-container *ngIf=\"boxDesign\">\n <button class=\"date-toggle new-box-design\"\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n\n <div class=\"date-content new-box-design\">\n <!-- date placeholder -->\n <div class=\"date-placeholder\"\n *ngIf=\"!date\">\n Select Date\n </div>\n\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\"> {{formattedTime()}}</span>\n </div>\n </div>\n </button>\n </ng-container>\n\n <!-- Datepicker popup -->\n <div *ngIf=\"isPickerVisible\"\n class=\"date-menu\"\n [ngClass]=\"{ 'right': right, 'bottom': bottom }\">\n <div class=\"date-modal\">\n <ng-container *ngIf=\"showDate\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevMonth()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showMonthPicker()\">{{daysTitle}}</span>\n <i (click)=\"nextMonth()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"days-container\">\n <div class=\"week-days\">\n <div *ngFor=\"let weekDay of weekDays\"\n class=\"week-day\">\n {{weekDay}}\n </div>\n </div>\n <div *ngFor=\"let row of dayRows\"\n class=\"day-row\">\n <div *ngFor=\"let day of row.days\"\n (click)=\"selectDay(day)\"\n class=\"day-item\"\n [class.ousideRange]=\"day.isOutside\"\n [class.selected]=\"day.selected\"\n [class.disabledDay]=\"day.isDisabled\">\n {{day.lbl}}\n <zen-icon *ngIf=\"day.isHighlighted\"\n class=\"highlight-icon\"\n src=\"assets/ng-zenduit/icons/play.svg\"></zen-icon>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"showTime\"\n class=\"time-container\">\n\n <div class=\"time-lbl\">\n Select Time:\n </div>\n\n <div class=\"time-picker\">\n <div class=\"input-wrapper\">\n <zen-icon (click)=\"hourUp()\"\n src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n <input [(ngModel)]=\"hour\"\n (ngModelChange)=\"timeChanged()\" />\n <zen-icon (click)=\"hourDown()\"\n src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n <label>:</label>\n <div class=\"input-wrapper\">\n <zen-icon (click)=\"minUp()\"\n src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n <input [(ngModel)]=\"min\"\n (ngModelChange)=\"timeChanged()\" />\n <zen-icon (click)=\"minDown()\"\n src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n <div class=\"am-pm-picker\">\n <div class=\"main\"\n (click)=\"toggleTime()\">\n {{isPM ? 'PM' : 'AM'}}\n </div>\n <div class=\"sub\"\n (click)=\"toggleTime()\">\n {{isPM ? 'AM' : 'PM'}}\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"hint\"\n *ngIf=\"hint\">\n <div class=\"hint-description\">\n {{hint.description}}\n </div>\n <div class=\"hint-date\"\n (click)=\"selectHintDate(hint.date)\">\n {{hint.maskText}}\n </div>\n </div>\n\n <div class=\"footer\"\n *ngIf=\"!autoConfirm || showTime\">\n <button *ngIf=\"date\"\n (click)=\"clear()\"\n class=\"button-stroked\">\n Clear\n </button>\n <button *ngIf=\"!date\"\n (click)=\"cancel()\"\n class=\"button-stroked\">\n Cancel\n </button>\n <button [disabled]=\"!_dateToSet\"\n (click)=\"apply()\"\n class=\"button-flat\">\n Apply\n </button>\n </div>\n\n <ng-container *ngIf=\"monthPickerVisible\">\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYear()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYear()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n <div class=\"month-item\"\n *ngFor=\"let month of months; index as index\"\n (click)=\"selectMonth(index)\">\n {{ month }}\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"yearPickerVisible\">\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYearGroup()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYearGroup()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n <div class=\"month-item\"\n *ngFor=\"let year of years\"\n (click)=\"selectYear(year)\">\n {{ year }}\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"date-modal-extra-space\"></div>\n </div>\n</div>", styles: [".date-component{width:100%;position:relative}.date-component .date-toggle{display:flex;align-items:center;justify-content:space-between;position:relative;gap:9px;transition:.3s;width:100%;background:var(--color-white-primary, #ffffff);-webkit-appearance:none;appearance:none;outline:none;cursor:pointer;border:none;border-radius:0;border-bottom:1px solid var(--color-white-tint-4, #d6d6d8);padding:0 0 8px;font-size:14px;font-style:normal;font-weight:400;line-height:130%;color:var(--color-grey-primary, #4f4f4f)}.date-component .date-toggle.new-box-design{border:1px solid var(--color-white-tint-1, #f2f2f2);border-radius:2px;padding:6px 12px;gap:4px!important}.date-component .date-toggle:hover .date-placeholder{color:var(--color-grey-shade-2, #828282)}.date-component .date-toggle:hover .date-icon{background-color:var(--color-grey-shade-2, #828282)}.date-component .date-toggle:focus,.date-component .date-toggle.active{border-color:var(--color-blue-primary, #2188d9)}.date-component .date-toggle:focus .date-icon,.date-component .date-toggle.active .date-icon{background-color:var(--color-blue-primary, #2188d9)!important}.date-component .date-toggle[disabled]{cursor:not-allowed;border-color:var(--color-white-tint-3, #e0e0e0)}.date-component .date-toggle[disabled] .date-content{color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle[disabled] .date-icon{background-color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle.readonly{cursor:default;border-color:var(--color-white-tint-3, #e0e0e0)}.date-component .date-toggle.readonly .date-content{color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle.readonly .date-icon{background-color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle.error{border-color:var(--color-error-primary, #dc3e33)}.date-component .date-toggle.error .date-icon{background-color:var(--color-error-primary, #dc3e33)!important}.date-component .date-toggle.error .date-content.new-box-design{color:var(--color-error-primary, #dc3e33)!important}.date-component .date-content{flex:1;font-size:16px;text-align:left;height:18px;min-width:30px;color:var(--color-grey-primary, #4f4f4f);white-space:nowrap;transition:.3s}.date-component .date-content .date-placeholder{transition:.3s;color:var(--color-white-tint-6, #bebebe)}.date-component .date-content.new-box-design{color:var(--color-grey-shade-2, #828282)}.date-component .date-icon{width:24px;height:24px;background-color:var(--color-white-tint-6, #bebebe);transition:.3s}.date-component .date-icon.filled{background-color:var(--color-grey-shade-2, #828282)}.date-component .date-menu{width:320px;background:transparent;position:absolute;z-index:10}.date-component .date-menu .date-modal{border-radius:8px;width:320px;overflow-y:auto;white-space:initial;background:#ffffff;box-shadow:0 2px 4px -1px #00000008,0 4px 5px #0000003d,0 1px 10px #0000001a}.date-component .date-menu .date-modal-extra-space{height:10px;margin:0 0 -10px;background:transparent}.date-component .date-menu .days-toolbar{display:flex;align-items:center;justify-content:space-between;padding:16px 34px}.date-component .date-menu .days-toolbar .material-icons{color:#333;font-size:20px;cursor:pointer;-webkit-user-select:none;user-select:none}.date-component .date-menu .days-toolbar .title{font-size:14px;font-weight:500;color:var(--color-grey-primary, #4f4f4f);cursor:pointer}.date-component .date-menu .days-container{border-bottom:1px solid #f2f2f2;padding:0 24px}.date-component .date-menu .days-container .week-days{display:flex;align-items:center;justify-content:space-between;font-size:14px;color:var(--color-grey-primary, #4f4f4f);font-weight:500;margin-bottom:8px;cursor:default}.date-component .date-menu .days-container .week-days .week-day{width:39px;text-align:center}.date-component .date-menu .days-container .day-row{display:flex;align-items:center;justify-content:space-between;font-size:14px;font-weight:400;color:var(--color-grey-primary, #4f4f4f)}.date-component .date-menu .days-container .day-row .day-item{position:relative;width:39px;height:39px;display:flex;justify-content:center;align-items:center;cursor:pointer;border-radius:4px}.date-component .date-menu .days-container .day-row .day-item .highlight-icon{position:absolute;right:0;height:14px;width:14px;background-color:#5cbb3a}.date-component .date-menu .days-container .day-row .day-item:hover{background:var(--color-blue-tint-1, #f4f9fd);color:var(--color-blue-primary, #2188d9)}.date-component .date-menu .days-container .day-row .day-item.selected{background:var(--color-primary, #2188d9);color:#fff}.date-component .date-menu .days-container .day-row .day-item.selected .highlight-icon{background-color:#fff}.date-component .date-menu .days-container .day-row .day-item.ousideRange{color:#b8b9bc}.date-component .date-menu .days-container .day-row .day-item.disabledDay{color:#b8b9bc;cursor:not-allowed!important}.date-component .time-container{display:flex;padding:16px 24px;justify-content:space-between;border-bottom:1px solid #f2f2f2;align-items:center}.date-component .time-container .time-lbl{font-weight:500;font-size:14px;color:var(--color-grey-primary, #4f4f4f);white-space:nowrap}.date-component .time-container .time-picker{display:flex;align-items:center;gap:7px}.date-component .time-container .time-picker .input-wrapper{display:flex;flex-direction:column;align-items:center}.date-component .time-container .time-picker .input-wrapper zen-icon{background-color:var(--color-white-tint-4, #d6d6d8);width:16px;height:16px;cursor:pointer}.date-component .time-container .time-picker .input-wrapper input{width:30px;height:25px;text-align:center;border:1px solid var(--color-white-tint-1, #f2f2f2);font-weight:400;font-size:14px;color:var(--color-grey-primary, #4f4f4f);border-radius:2px}.date-component .time-container .time-picker .input-wrapper input:focus{outline:none;border-color:var(--color-blue-primary, #2188d9)}.date-component .time-container .time-picker .am-pm-picker{font-weight:400;font-size:14px;padding-top:18px;cursor:pointer}.date-component .time-container .time-picker .am-pm-picker .main{color:var(--color-grey-primary, #4f4f4f)}.date-component .time-container .time-picker .am-pm-picker .sub{color:var(--color-white-tint-4, #d6d6d8)}.date-component .hint{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:16px 24px;border-bottom:1px solid #ECECED;font-style:normal;font-weight:400;font-size:14px;line-height:130%;color:#4f4f4f}.date-component .hint .hint-date{cursor:pointer;text-decoration-line:underline}.date-component .footer{display:flex;justify-content:end;gap:16px;padding:16px 24px}.date-component .month-picker{position:absolute;inset:0;background:white}.date-component .month-picker .months-container{display:flex;flex-wrap:wrap;justify-content:space-between;padding:10px 20px}.date-component .month-picker .months-container .month-item{display:inline-flex;align-items:center;justify-content:center;height:50px;width:30%;cursor:pointer;color:var(--color-grey-shade-2, #828282);border-radius:4px}.date-component .month-picker .months-container .month-item:hover{color:#fff;background-color:var(--color-blue-primary, #2188d9)}.date-component .right{right:0}.date-component .bottom{bottom:42px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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.ZenduIconComponent, selector: "zen-icon", inputs: ["src"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
|
|
427
|
+
ZenduDatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduDatepickerComponent, selector: "zen-datepicker", inputs: { date: "date", showTime: "showTime", showDate: "showDate", parentContainer: "parentContainer", containerClass: "containerClass", minDate: "minDate", maxDate: "maxDate", boxDesign: "boxDesign", highlightDays: "highlightDays", autoConfirm: "autoConfirm", hint: "hint", highlightError: "highlightError", disabled: "disabled", readonly: "readonly", xPosition: "xPosition", yPosition: "yPosition" }, outputs: { dateChange: "dateChange" }, host: { listeners: { "window:mousedown": "outsideHandling($event)", "window:scroll": "scroll()" } }, viewQueries: [{ propertyName: "dateMenu", first: true, predicate: ["dateMenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"date-component\">\n <!-- Material design datepicker toggle -->\n <ng-container *ngIf=\"!boxDesign\">\n <button class=\"date-toggle\"\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n <div class=\"date-content\">\n <!-- date placeholder -->\n <div class=\"date-placeholder\"\n *ngIf=\"!date\">\n Select Date\n </div>\n\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\"> {{formattedTime()}}</span>\n </div>\n </div>\n\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n </button>\n </ng-container>\n\n <!-- Box design datepicker toggle -->\n <ng-container *ngIf=\"boxDesign\">\n <button class=\"date-toggle new-box-design\"\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n\n <div class=\"date-content new-box-design\">\n <!-- date placeholder -->\n <div class=\"date-placeholder\"\n *ngIf=\"!date\">\n Select Date\n </div>\n\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\"> {{formattedTime()}}</span>\n </div>\n </div>\n </button>\n </ng-container>\n\n <!-- Datepicker popup -->\n <div #dateMenu *ngIf=\"isPickerVisible\"\n class=\"date-menu\"\n [ngClass]=\"{ 'right': right, 'bottom': bottom }\">\n <div class=\"date-modal\">\n <ng-container *ngIf=\"showDate\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevMonth()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showMonthPicker()\">{{daysTitle}}</span>\n <i (click)=\"nextMonth()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"days-container\">\n <div class=\"week-days\">\n <div *ngFor=\"let weekDay of weekDays\"\n class=\"week-day\">\n {{weekDay}}\n </div>\n </div>\n <div *ngFor=\"let row of dayRows\"\n class=\"day-row\">\n <div *ngFor=\"let day of row.days\"\n (click)=\"selectDay(day)\"\n class=\"day-item\"\n [class.ousideRange]=\"day.isOutside\"\n [class.selected]=\"day.selected\"\n [class.disabledDay]=\"day.isDisabled\">\n {{day.lbl}}\n <zen-icon *ngIf=\"day.isHighlighted\"\n class=\"highlight-icon\"\n src=\"assets/ng-zenduit/icons/play.svg\"></zen-icon>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"showTime\"\n class=\"time-container\">\n\n <div class=\"time-lbl\">\n Select Time:\n </div>\n\n <div class=\"time-picker\">\n <div class=\"input-wrapper\">\n <zen-icon (click)=\"hourUp()\"\n src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n <input [(ngModel)]=\"hour\"\n (ngModelChange)=\"timeChanged()\" />\n <zen-icon (click)=\"hourDown()\"\n src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n <label>:</label>\n <div class=\"input-wrapper\">\n <zen-icon (click)=\"minUp()\"\n src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n <input [(ngModel)]=\"min\"\n (ngModelChange)=\"timeChanged()\" />\n <zen-icon (click)=\"minDown()\"\n src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n <div class=\"am-pm-picker\">\n <div class=\"main\"\n (click)=\"toggleTime()\">\n {{isPM ? 'PM' : 'AM'}}\n </div>\n <div class=\"sub\"\n (click)=\"toggleTime()\">\n {{isPM ? 'AM' : 'PM'}}\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"hint\"\n *ngIf=\"hint\">\n <div class=\"hint-description\">\n {{hint.description}}\n </div>\n <div class=\"hint-date\"\n (click)=\"selectHintDate(hint.date)\">\n {{hint.maskText}}\n </div>\n </div>\n\n <div class=\"footer\"\n *ngIf=\"!autoConfirm || showTime\">\n <button *ngIf=\"date\"\n (click)=\"clear()\"\n class=\"button-stroked\">\n Clear\n </button>\n <button *ngIf=\"!date\"\n (click)=\"cancel()\"\n class=\"button-stroked\">\n Cancel\n </button>\n <button [disabled]=\"!_dateToSet\"\n (click)=\"apply()\"\n class=\"button-flat\">\n Apply\n </button>\n </div>\n\n <ng-container *ngIf=\"monthPickerVisible\">\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYear()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYear()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n <div class=\"month-item\"\n *ngFor=\"let month of months; index as index\"\n (click)=\"selectMonth(index)\">\n {{ month }}\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"yearPickerVisible\">\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYearGroup()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYearGroup()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n <div class=\"month-item\"\n *ngFor=\"let year of years\"\n (click)=\"selectYear(year)\">\n {{ year }}\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"date-modal-extra-space\"></div>\n </div>\n</div>", styles: [".date-component{width:100%;position:relative}.date-component .date-toggle{display:flex;align-items:center;justify-content:space-between;position:relative;gap:9px;transition:.3s;width:100%;background:var(--color-white-primary, #ffffff);-webkit-appearance:none;appearance:none;outline:none;cursor:pointer;border:none;border-radius:0;border-bottom:1px solid var(--color-white-tint-4, #d6d6d8);padding:0 0 8px;font-size:14px;font-style:normal;font-weight:400;line-height:130%;color:var(--color-grey-primary, #4f4f4f)}.date-component .date-toggle.new-box-design{border:1px solid var(--color-white-tint-1, #f2f2f2);border-radius:2px;padding:6px 12px;gap:4px!important}.date-component .date-toggle:hover .date-placeholder{color:var(--color-grey-shade-2, #828282)}.date-component .date-toggle:hover .date-icon{background-color:var(--color-grey-shade-2, #828282)}.date-component .date-toggle:focus,.date-component .date-toggle.active{border-color:var(--color-blue-primary, #2188d9)}.date-component .date-toggle:focus .date-icon,.date-component .date-toggle.active .date-icon{background-color:var(--color-blue-primary, #2188d9)!important}.date-component .date-toggle[disabled]{cursor:not-allowed;border-color:var(--color-white-tint-3, #e0e0e0)}.date-component .date-toggle[disabled] .date-content{color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle[disabled] .date-icon{background-color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle.readonly{cursor:default;border-color:var(--color-white-tint-3, #e0e0e0)}.date-component .date-toggle.readonly .date-content{color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle.readonly .date-icon{background-color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle.error{border-color:var(--color-error-primary, #dc3e33)}.date-component .date-toggle.error .date-icon{background-color:var(--color-error-primary, #dc3e33)!important}.date-component .date-toggle.error .date-content.new-box-design{color:var(--color-error-primary, #dc3e33)!important}.date-component .date-content{flex:1;font-size:16px;text-align:left;height:18px;min-width:30px;color:var(--color-grey-primary, #4f4f4f);white-space:nowrap;transition:.3s}.date-component .date-content .date-placeholder{transition:.3s;color:var(--color-white-tint-6, #bebebe)}.date-component .date-content.new-box-design{color:var(--color-grey-shade-2, #828282)}.date-component .date-icon{width:24px;height:24px;background-color:var(--color-white-tint-6, #bebebe);transition:.3s}.date-component .date-icon.filled{background-color:var(--color-grey-shade-2, #828282)}.date-component .date-menu{width:320px;background:transparent;position:absolute;z-index:10}.date-component .date-menu .date-modal{border-radius:8px;width:320px;overflow-y:auto;white-space:initial;background:#ffffff;box-shadow:0 2px 4px -1px #00000008,0 4px 5px #0000003d,0 1px 10px #0000001a}.date-component .date-menu .date-modal-extra-space{height:10px;margin:0 0 -10px;background:transparent}.date-component .date-menu .days-toolbar{display:flex;align-items:center;justify-content:space-between;padding:16px 34px}.date-component .date-menu .days-toolbar .material-icons{color:#333;font-size:20px;cursor:pointer;-webkit-user-select:none;user-select:none}.date-component .date-menu .days-toolbar .title{font-size:14px;font-weight:500;color:var(--color-grey-primary, #4f4f4f);cursor:pointer}.date-component .date-menu .days-container{border-bottom:1px solid #f2f2f2;padding:0 24px}.date-component .date-menu .days-container .week-days{display:flex;align-items:center;justify-content:space-between;font-size:14px;color:var(--color-grey-primary, #4f4f4f);font-weight:500;margin-bottom:8px;cursor:default}.date-component .date-menu .days-container .week-days .week-day{width:39px;text-align:center}.date-component .date-menu .days-container .day-row{display:flex;align-items:center;justify-content:space-between;font-size:14px;font-weight:400;color:var(--color-grey-primary, #4f4f4f)}.date-component .date-menu .days-container .day-row .day-item{position:relative;width:39px;height:39px;display:flex;justify-content:center;align-items:center;cursor:pointer;border-radius:4px}.date-component .date-menu .days-container .day-row .day-item .highlight-icon{position:absolute;right:0;height:14px;width:14px;background-color:#5cbb3a}.date-component .date-menu .days-container .day-row .day-item:hover{background:var(--color-blue-tint-1, #f4f9fd);color:var(--color-blue-primary, #2188d9)}.date-component .date-menu .days-container .day-row .day-item.selected{background:var(--color-primary, #2188d9);color:#fff}.date-component .date-menu .days-container .day-row .day-item.selected .highlight-icon{background-color:#fff}.date-component .date-menu .days-container .day-row .day-item.ousideRange{color:#b8b9bc}.date-component .date-menu .days-container .day-row .day-item.disabledDay{color:#b8b9bc;cursor:not-allowed!important}.date-component .time-container{display:flex;padding:16px 24px;justify-content:space-between;border-bottom:1px solid #f2f2f2;align-items:center}.date-component .time-container .time-lbl{font-weight:500;font-size:14px;color:var(--color-grey-primary, #4f4f4f);white-space:nowrap}.date-component .time-container .time-picker{display:flex;align-items:center;gap:7px}.date-component .time-container .time-picker .input-wrapper{display:flex;flex-direction:column;align-items:center}.date-component .time-container .time-picker .input-wrapper zen-icon{background-color:var(--color-white-tint-4, #d6d6d8);width:16px;height:16px;cursor:pointer}.date-component .time-container .time-picker .input-wrapper input{width:30px;height:25px;text-align:center;border:1px solid var(--color-white-tint-1, #f2f2f2);font-weight:400;font-size:14px;color:var(--color-grey-primary, #4f4f4f);border-radius:2px}.date-component .time-container .time-picker .input-wrapper input:focus{outline:none;border-color:var(--color-blue-primary, #2188d9)}.date-component .time-container .time-picker .am-pm-picker{font-weight:400;font-size:14px;padding-top:18px;cursor:pointer}.date-component .time-container .time-picker .am-pm-picker .main{color:var(--color-grey-primary, #4f4f4f)}.date-component .time-container .time-picker .am-pm-picker .sub{color:var(--color-white-tint-4, #d6d6d8)}.date-component .hint{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:16px 24px;border-bottom:1px solid #ECECED;font-style:normal;font-weight:400;font-size:14px;line-height:130%;color:#4f4f4f}.date-component .hint .hint-date{cursor:pointer;text-decoration-line:underline}.date-component .footer{display:flex;justify-content:end;gap:16px;padding:16px 24px}.date-component .month-picker{position:absolute;inset:0;background:white}.date-component .month-picker .months-container{display:flex;flex-wrap:wrap;justify-content:space-between;padding:10px 20px}.date-component .month-picker .months-container .month-item{display:inline-flex;align-items:center;justify-content:center;height:50px;width:30%;cursor:pointer;color:var(--color-grey-shade-2, #828282);border-radius:4px}.date-component .month-picker .months-container .month-item:hover{color:#fff;background-color:var(--color-blue-primary, #2188d9)}.date-component .right{right:0}.date-component .bottom{bottom:42px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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.ZenduIconComponent, selector: "zen-icon", inputs: ["src"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
|
|
403
428
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduDatepickerComponent, decorators: [{
|
|
404
429
|
type: Component,
|
|
405
|
-
args: [{ selector: 'zen-datepicker', template: "<div class=\"date-component\">\n <!-- Material design datepicker toggle -->\n <ng-container *ngIf=\"!boxDesign\">\n <button class=\"date-toggle\"\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n <div class=\"date-content\">\n <!-- date placeholder -->\n <div class=\"date-placeholder\"\n *ngIf=\"!date\">\n Select Date\n </div>\n\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\"> {{formattedTime()}}</span>\n </div>\n </div>\n\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n </button>\n </ng-container>\n\n <!-- Box design datepicker toggle -->\n <ng-container *ngIf=\"boxDesign\">\n <button class=\"date-toggle new-box-design\"\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n\n <div class=\"date-content new-box-design\">\n <!-- date placeholder -->\n <div class=\"date-placeholder\"\n *ngIf=\"!date\">\n Select Date\n </div>\n\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\"> {{formattedTime()}}</span>\n </div>\n </div>\n </button>\n </ng-container>\n\n <!-- Datepicker popup -->\n <div *ngIf=\"isPickerVisible\"\n class=\"date-menu\"\n [ngClass]=\"{ 'right': right, 'bottom': bottom }\">\n <div class=\"date-modal\">\n <ng-container *ngIf=\"showDate\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevMonth()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showMonthPicker()\">{{daysTitle}}</span>\n <i (click)=\"nextMonth()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"days-container\">\n <div class=\"week-days\">\n <div *ngFor=\"let weekDay of weekDays\"\n class=\"week-day\">\n {{weekDay}}\n </div>\n </div>\n <div *ngFor=\"let row of dayRows\"\n class=\"day-row\">\n <div *ngFor=\"let day of row.days\"\n (click)=\"selectDay(day)\"\n class=\"day-item\"\n [class.ousideRange]=\"day.isOutside\"\n [class.selected]=\"day.selected\"\n [class.disabledDay]=\"day.isDisabled\">\n {{day.lbl}}\n <zen-icon *ngIf=\"day.isHighlighted\"\n class=\"highlight-icon\"\n src=\"assets/ng-zenduit/icons/play.svg\"></zen-icon>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"showTime\"\n class=\"time-container\">\n\n <div class=\"time-lbl\">\n Select Time:\n </div>\n\n <div class=\"time-picker\">\n <div class=\"input-wrapper\">\n <zen-icon (click)=\"hourUp()\"\n src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n <input [(ngModel)]=\"hour\"\n (ngModelChange)=\"timeChanged()\" />\n <zen-icon (click)=\"hourDown()\"\n src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n <label>:</label>\n <div class=\"input-wrapper\">\n <zen-icon (click)=\"minUp()\"\n src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n <input [(ngModel)]=\"min\"\n (ngModelChange)=\"timeChanged()\" />\n <zen-icon (click)=\"minDown()\"\n src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n <div class=\"am-pm-picker\">\n <div class=\"main\"\n (click)=\"toggleTime()\">\n {{isPM ? 'PM' : 'AM'}}\n </div>\n <div class=\"sub\"\n (click)=\"toggleTime()\">\n {{isPM ? 'AM' : 'PM'}}\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"hint\"\n *ngIf=\"hint\">\n <div class=\"hint-description\">\n {{hint.description}}\n </div>\n <div class=\"hint-date\"\n (click)=\"selectHintDate(hint.date)\">\n {{hint.maskText}}\n </div>\n </div>\n\n <div class=\"footer\"\n *ngIf=\"!autoConfirm || showTime\">\n <button *ngIf=\"date\"\n (click)=\"clear()\"\n class=\"button-stroked\">\n Clear\n </button>\n <button *ngIf=\"!date\"\n (click)=\"cancel()\"\n class=\"button-stroked\">\n Cancel\n </button>\n <button [disabled]=\"!_dateToSet\"\n (click)=\"apply()\"\n class=\"button-flat\">\n Apply\n </button>\n </div>\n\n <ng-container *ngIf=\"monthPickerVisible\">\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYear()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYear()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n <div class=\"month-item\"\n *ngFor=\"let month of months; index as index\"\n (click)=\"selectMonth(index)\">\n {{ month }}\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"yearPickerVisible\">\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYearGroup()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYearGroup()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n <div class=\"month-item\"\n *ngFor=\"let year of years\"\n (click)=\"selectYear(year)\">\n {{ year }}\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"date-modal-extra-space\"></div>\n </div>\n</div>", styles: [".date-component{width:100%;position:relative}.date-component .date-toggle{display:flex;align-items:center;justify-content:space-between;position:relative;gap:9px;transition:.3s;width:100%;background:var(--color-white-primary, #ffffff);-webkit-appearance:none;appearance:none;outline:none;cursor:pointer;border:none;border-radius:0;border-bottom:1px solid var(--color-white-tint-4, #d6d6d8);padding:0 0 8px;font-size:14px;font-style:normal;font-weight:400;line-height:130%;color:var(--color-grey-primary, #4f4f4f)}.date-component .date-toggle.new-box-design{border:1px solid var(--color-white-tint-1, #f2f2f2);border-radius:2px;padding:6px 12px;gap:4px!important}.date-component .date-toggle:hover .date-placeholder{color:var(--color-grey-shade-2, #828282)}.date-component .date-toggle:hover .date-icon{background-color:var(--color-grey-shade-2, #828282)}.date-component .date-toggle:focus,.date-component .date-toggle.active{border-color:var(--color-blue-primary, #2188d9)}.date-component .date-toggle:focus .date-icon,.date-component .date-toggle.active .date-icon{background-color:var(--color-blue-primary, #2188d9)!important}.date-component .date-toggle[disabled]{cursor:not-allowed;border-color:var(--color-white-tint-3, #e0e0e0)}.date-component .date-toggle[disabled] .date-content{color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle[disabled] .date-icon{background-color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle.readonly{cursor:default;border-color:var(--color-white-tint-3, #e0e0e0)}.date-component .date-toggle.readonly .date-content{color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle.readonly .date-icon{background-color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle.error{border-color:var(--color-error-primary, #dc3e33)}.date-component .date-toggle.error .date-icon{background-color:var(--color-error-primary, #dc3e33)!important}.date-component .date-toggle.error .date-content.new-box-design{color:var(--color-error-primary, #dc3e33)!important}.date-component .date-content{flex:1;font-size:16px;text-align:left;height:18px;min-width:30px;color:var(--color-grey-primary, #4f4f4f);white-space:nowrap;transition:.3s}.date-component .date-content .date-placeholder{transition:.3s;color:var(--color-white-tint-6, #bebebe)}.date-component .date-content.new-box-design{color:var(--color-grey-shade-2, #828282)}.date-component .date-icon{width:24px;height:24px;background-color:var(--color-white-tint-6, #bebebe);transition:.3s}.date-component .date-icon.filled{background-color:var(--color-grey-shade-2, #828282)}.date-component .date-menu{width:320px;background:transparent;position:absolute;z-index:10}.date-component .date-menu .date-modal{border-radius:8px;width:320px;overflow-y:auto;white-space:initial;background:#ffffff;box-shadow:0 2px 4px -1px #00000008,0 4px 5px #0000003d,0 1px 10px #0000001a}.date-component .date-menu .date-modal-extra-space{height:10px;margin:0 0 -10px;background:transparent}.date-component .date-menu .days-toolbar{display:flex;align-items:center;justify-content:space-between;padding:16px 34px}.date-component .date-menu .days-toolbar .material-icons{color:#333;font-size:20px;cursor:pointer;-webkit-user-select:none;user-select:none}.date-component .date-menu .days-toolbar .title{font-size:14px;font-weight:500;color:var(--color-grey-primary, #4f4f4f);cursor:pointer}.date-component .date-menu .days-container{border-bottom:1px solid #f2f2f2;padding:0 24px}.date-component .date-menu .days-container .week-days{display:flex;align-items:center;justify-content:space-between;font-size:14px;color:var(--color-grey-primary, #4f4f4f);font-weight:500;margin-bottom:8px;cursor:default}.date-component .date-menu .days-container .week-days .week-day{width:39px;text-align:center}.date-component .date-menu .days-container .day-row{display:flex;align-items:center;justify-content:space-between;font-size:14px;font-weight:400;color:var(--color-grey-primary, #4f4f4f)}.date-component .date-menu .days-container .day-row .day-item{position:relative;width:39px;height:39px;display:flex;justify-content:center;align-items:center;cursor:pointer;border-radius:4px}.date-component .date-menu .days-container .day-row .day-item .highlight-icon{position:absolute;right:0;height:14px;width:14px;background-color:#5cbb3a}.date-component .date-menu .days-container .day-row .day-item:hover{background:var(--color-blue-tint-1, #f4f9fd);color:var(--color-blue-primary, #2188d9)}.date-component .date-menu .days-container .day-row .day-item.selected{background:var(--color-primary, #2188d9);color:#fff}.date-component .date-menu .days-container .day-row .day-item.selected .highlight-icon{background-color:#fff}.date-component .date-menu .days-container .day-row .day-item.ousideRange{color:#b8b9bc}.date-component .date-menu .days-container .day-row .day-item.disabledDay{color:#b8b9bc;cursor:not-allowed!important}.date-component .time-container{display:flex;padding:16px 24px;justify-content:space-between;border-bottom:1px solid #f2f2f2;align-items:center}.date-component .time-container .time-lbl{font-weight:500;font-size:14px;color:var(--color-grey-primary, #4f4f4f);white-space:nowrap}.date-component .time-container .time-picker{display:flex;align-items:center;gap:7px}.date-component .time-container .time-picker .input-wrapper{display:flex;flex-direction:column;align-items:center}.date-component .time-container .time-picker .input-wrapper zen-icon{background-color:var(--color-white-tint-4, #d6d6d8);width:16px;height:16px;cursor:pointer}.date-component .time-container .time-picker .input-wrapper input{width:30px;height:25px;text-align:center;border:1px solid var(--color-white-tint-1, #f2f2f2);font-weight:400;font-size:14px;color:var(--color-grey-primary, #4f4f4f);border-radius:2px}.date-component .time-container .time-picker .input-wrapper input:focus{outline:none;border-color:var(--color-blue-primary, #2188d9)}.date-component .time-container .time-picker .am-pm-picker{font-weight:400;font-size:14px;padding-top:18px;cursor:pointer}.date-component .time-container .time-picker .am-pm-picker .main{color:var(--color-grey-primary, #4f4f4f)}.date-component .time-container .time-picker .am-pm-picker .sub{color:var(--color-white-tint-4, #d6d6d8)}.date-component .hint{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:16px 24px;border-bottom:1px solid #ECECED;font-style:normal;font-weight:400;font-size:14px;line-height:130%;color:#4f4f4f}.date-component .hint .hint-date{cursor:pointer;text-decoration-line:underline}.date-component .footer{display:flex;justify-content:end;gap:16px;padding:16px 24px}.date-component .month-picker{position:absolute;inset:0;background:white}.date-component .month-picker .months-container{display:flex;flex-wrap:wrap;justify-content:space-between;padding:10px 20px}.date-component .month-picker .months-container .month-item{display:inline-flex;align-items:center;justify-content:center;height:50px;width:30%;cursor:pointer;color:var(--color-grey-shade-2, #828282);border-radius:4px}.date-component .month-picker .months-container .month-item:hover{color:#fff;background-color:var(--color-blue-primary, #2188d9)}.date-component .right{right:0}.date-component .bottom{bottom:42px}\n"] }]
|
|
430
|
+
args: [{ selector: 'zen-datepicker', template: "<div class=\"date-component\">\n <!-- Material design datepicker toggle -->\n <ng-container *ngIf=\"!boxDesign\">\n <button class=\"date-toggle\"\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n <div class=\"date-content\">\n <!-- date placeholder -->\n <div class=\"date-placeholder\"\n *ngIf=\"!date\">\n Select Date\n </div>\n\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\"> {{formattedTime()}}</span>\n </div>\n </div>\n\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n </button>\n </ng-container>\n\n <!-- Box design datepicker toggle -->\n <ng-container *ngIf=\"boxDesign\">\n <button class=\"date-toggle new-box-design\"\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n\n <div class=\"date-content new-box-design\">\n <!-- date placeholder -->\n <div class=\"date-placeholder\"\n *ngIf=\"!date\">\n Select Date\n </div>\n\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\"> {{formattedTime()}}</span>\n </div>\n </div>\n </button>\n </ng-container>\n\n <!-- Datepicker popup -->\n <div #dateMenu *ngIf=\"isPickerVisible\"\n class=\"date-menu\"\n [ngClass]=\"{ 'right': right, 'bottom': bottom }\">\n <div class=\"date-modal\">\n <ng-container *ngIf=\"showDate\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevMonth()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showMonthPicker()\">{{daysTitle}}</span>\n <i (click)=\"nextMonth()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"days-container\">\n <div class=\"week-days\">\n <div *ngFor=\"let weekDay of weekDays\"\n class=\"week-day\">\n {{weekDay}}\n </div>\n </div>\n <div *ngFor=\"let row of dayRows\"\n class=\"day-row\">\n <div *ngFor=\"let day of row.days\"\n (click)=\"selectDay(day)\"\n class=\"day-item\"\n [class.ousideRange]=\"day.isOutside\"\n [class.selected]=\"day.selected\"\n [class.disabledDay]=\"day.isDisabled\">\n {{day.lbl}}\n <zen-icon *ngIf=\"day.isHighlighted\"\n class=\"highlight-icon\"\n src=\"assets/ng-zenduit/icons/play.svg\"></zen-icon>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"showTime\"\n class=\"time-container\">\n\n <div class=\"time-lbl\">\n Select Time:\n </div>\n\n <div class=\"time-picker\">\n <div class=\"input-wrapper\">\n <zen-icon (click)=\"hourUp()\"\n src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n <input [(ngModel)]=\"hour\"\n (ngModelChange)=\"timeChanged()\" />\n <zen-icon (click)=\"hourDown()\"\n src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n <label>:</label>\n <div class=\"input-wrapper\">\n <zen-icon (click)=\"minUp()\"\n src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n <input [(ngModel)]=\"min\"\n (ngModelChange)=\"timeChanged()\" />\n <zen-icon (click)=\"minDown()\"\n src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n <div class=\"am-pm-picker\">\n <div class=\"main\"\n (click)=\"toggleTime()\">\n {{isPM ? 'PM' : 'AM'}}\n </div>\n <div class=\"sub\"\n (click)=\"toggleTime()\">\n {{isPM ? 'AM' : 'PM'}}\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"hint\"\n *ngIf=\"hint\">\n <div class=\"hint-description\">\n {{hint.description}}\n </div>\n <div class=\"hint-date\"\n (click)=\"selectHintDate(hint.date)\">\n {{hint.maskText}}\n </div>\n </div>\n\n <div class=\"footer\"\n *ngIf=\"!autoConfirm || showTime\">\n <button *ngIf=\"date\"\n (click)=\"clear()\"\n class=\"button-stroked\">\n Clear\n </button>\n <button *ngIf=\"!date\"\n (click)=\"cancel()\"\n class=\"button-stroked\">\n Cancel\n </button>\n <button [disabled]=\"!_dateToSet\"\n (click)=\"apply()\"\n class=\"button-flat\">\n Apply\n </button>\n </div>\n\n <ng-container *ngIf=\"monthPickerVisible\">\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYear()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYear()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n <div class=\"month-item\"\n *ngFor=\"let month of months; index as index\"\n (click)=\"selectMonth(index)\">\n {{ month }}\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"yearPickerVisible\">\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYearGroup()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYearGroup()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n <div class=\"month-item\"\n *ngFor=\"let year of years\"\n (click)=\"selectYear(year)\">\n {{ year }}\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"date-modal-extra-space\"></div>\n </div>\n</div>", styles: [".date-component{width:100%;position:relative}.date-component .date-toggle{display:flex;align-items:center;justify-content:space-between;position:relative;gap:9px;transition:.3s;width:100%;background:var(--color-white-primary, #ffffff);-webkit-appearance:none;appearance:none;outline:none;cursor:pointer;border:none;border-radius:0;border-bottom:1px solid var(--color-white-tint-4, #d6d6d8);padding:0 0 8px;font-size:14px;font-style:normal;font-weight:400;line-height:130%;color:var(--color-grey-primary, #4f4f4f)}.date-component .date-toggle.new-box-design{border:1px solid var(--color-white-tint-1, #f2f2f2);border-radius:2px;padding:6px 12px;gap:4px!important}.date-component .date-toggle:hover .date-placeholder{color:var(--color-grey-shade-2, #828282)}.date-component .date-toggle:hover .date-icon{background-color:var(--color-grey-shade-2, #828282)}.date-component .date-toggle:focus,.date-component .date-toggle.active{border-color:var(--color-blue-primary, #2188d9)}.date-component .date-toggle:focus .date-icon,.date-component .date-toggle.active .date-icon{background-color:var(--color-blue-primary, #2188d9)!important}.date-component .date-toggle[disabled]{cursor:not-allowed;border-color:var(--color-white-tint-3, #e0e0e0)}.date-component .date-toggle[disabled] .date-content{color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle[disabled] .date-icon{background-color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle.readonly{cursor:default;border-color:var(--color-white-tint-3, #e0e0e0)}.date-component .date-toggle.readonly .date-content{color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle.readonly .date-icon{background-color:var(--color-white-tint-3, #e0e0e0)!important}.date-component .date-toggle.error{border-color:var(--color-error-primary, #dc3e33)}.date-component .date-toggle.error .date-icon{background-color:var(--color-error-primary, #dc3e33)!important}.date-component .date-toggle.error .date-content.new-box-design{color:var(--color-error-primary, #dc3e33)!important}.date-component .date-content{flex:1;font-size:16px;text-align:left;height:18px;min-width:30px;color:var(--color-grey-primary, #4f4f4f);white-space:nowrap;transition:.3s}.date-component .date-content .date-placeholder{transition:.3s;color:var(--color-white-tint-6, #bebebe)}.date-component .date-content.new-box-design{color:var(--color-grey-shade-2, #828282)}.date-component .date-icon{width:24px;height:24px;background-color:var(--color-white-tint-6, #bebebe);transition:.3s}.date-component .date-icon.filled{background-color:var(--color-grey-shade-2, #828282)}.date-component .date-menu{width:320px;background:transparent;position:absolute;z-index:10}.date-component .date-menu .date-modal{border-radius:8px;width:320px;overflow-y:auto;white-space:initial;background:#ffffff;box-shadow:0 2px 4px -1px #00000008,0 4px 5px #0000003d,0 1px 10px #0000001a}.date-component .date-menu .date-modal-extra-space{height:10px;margin:0 0 -10px;background:transparent}.date-component .date-menu .days-toolbar{display:flex;align-items:center;justify-content:space-between;padding:16px 34px}.date-component .date-menu .days-toolbar .material-icons{color:#333;font-size:20px;cursor:pointer;-webkit-user-select:none;user-select:none}.date-component .date-menu .days-toolbar .title{font-size:14px;font-weight:500;color:var(--color-grey-primary, #4f4f4f);cursor:pointer}.date-component .date-menu .days-container{border-bottom:1px solid #f2f2f2;padding:0 24px}.date-component .date-menu .days-container .week-days{display:flex;align-items:center;justify-content:space-between;font-size:14px;color:var(--color-grey-primary, #4f4f4f);font-weight:500;margin-bottom:8px;cursor:default}.date-component .date-menu .days-container .week-days .week-day{width:39px;text-align:center}.date-component .date-menu .days-container .day-row{display:flex;align-items:center;justify-content:space-between;font-size:14px;font-weight:400;color:var(--color-grey-primary, #4f4f4f)}.date-component .date-menu .days-container .day-row .day-item{position:relative;width:39px;height:39px;display:flex;justify-content:center;align-items:center;cursor:pointer;border-radius:4px}.date-component .date-menu .days-container .day-row .day-item .highlight-icon{position:absolute;right:0;height:14px;width:14px;background-color:#5cbb3a}.date-component .date-menu .days-container .day-row .day-item:hover{background:var(--color-blue-tint-1, #f4f9fd);color:var(--color-blue-primary, #2188d9)}.date-component .date-menu .days-container .day-row .day-item.selected{background:var(--color-primary, #2188d9);color:#fff}.date-component .date-menu .days-container .day-row .day-item.selected .highlight-icon{background-color:#fff}.date-component .date-menu .days-container .day-row .day-item.ousideRange{color:#b8b9bc}.date-component .date-menu .days-container .day-row .day-item.disabledDay{color:#b8b9bc;cursor:not-allowed!important}.date-component .time-container{display:flex;padding:16px 24px;justify-content:space-between;border-bottom:1px solid #f2f2f2;align-items:center}.date-component .time-container .time-lbl{font-weight:500;font-size:14px;color:var(--color-grey-primary, #4f4f4f);white-space:nowrap}.date-component .time-container .time-picker{display:flex;align-items:center;gap:7px}.date-component .time-container .time-picker .input-wrapper{display:flex;flex-direction:column;align-items:center}.date-component .time-container .time-picker .input-wrapper zen-icon{background-color:var(--color-white-tint-4, #d6d6d8);width:16px;height:16px;cursor:pointer}.date-component .time-container .time-picker .input-wrapper input{width:30px;height:25px;text-align:center;border:1px solid var(--color-white-tint-1, #f2f2f2);font-weight:400;font-size:14px;color:var(--color-grey-primary, #4f4f4f);border-radius:2px}.date-component .time-container .time-picker .input-wrapper input:focus{outline:none;border-color:var(--color-blue-primary, #2188d9)}.date-component .time-container .time-picker .am-pm-picker{font-weight:400;font-size:14px;padding-top:18px;cursor:pointer}.date-component .time-container .time-picker .am-pm-picker .main{color:var(--color-grey-primary, #4f4f4f)}.date-component .time-container .time-picker .am-pm-picker .sub{color:var(--color-white-tint-4, #d6d6d8)}.date-component .hint{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:16px 24px;border-bottom:1px solid #ECECED;font-style:normal;font-weight:400;font-size:14px;line-height:130%;color:#4f4f4f}.date-component .hint .hint-date{cursor:pointer;text-decoration-line:underline}.date-component .footer{display:flex;justify-content:end;gap:16px;padding:16px 24px}.date-component .month-picker{position:absolute;inset:0;background:white}.date-component .month-picker .months-container{display:flex;flex-wrap:wrap;justify-content:space-between;padding:10px 20px}.date-component .month-picker .months-container .month-item{display:inline-flex;align-items:center;justify-content:center;height:50px;width:30%;cursor:pointer;color:var(--color-grey-shade-2, #828282);border-radius:4px}.date-component .month-picker .months-container .month-item:hover{color:#fff;background-color:var(--color-blue-primary, #2188d9)}.date-component .right{right:0}.date-component .bottom{bottom:42px}\n"] }]
|
|
406
431
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { date: [{
|
|
407
432
|
type: Input
|
|
408
433
|
}], dateChange: [{
|
|
@@ -411,6 +436,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
411
436
|
type: Input
|
|
412
437
|
}], showDate: [{
|
|
413
438
|
type: Input
|
|
439
|
+
}], parentContainer: [{
|
|
440
|
+
type: Input
|
|
414
441
|
}], containerClass: [{
|
|
415
442
|
type: Input
|
|
416
443
|
}], minDate: [{
|
|
@@ -435,6 +462,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
435
462
|
type: Input
|
|
436
463
|
}], yPosition: [{
|
|
437
464
|
type: Input
|
|
465
|
+
}], dateMenu: [{
|
|
466
|
+
type: ViewChild,
|
|
467
|
+
args: ['dateMenu']
|
|
438
468
|
}], outsideHandling: [{
|
|
439
469
|
type: HostListener,
|
|
440
470
|
args: ['window:mousedown', ['$event']]
|
|
@@ -442,4 +472,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
442
472
|
type: HostListener,
|
|
443
473
|
args: ['window:scroll', []]
|
|
444
474
|
}] } });
|
|
445
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvZGF0ZXBpY2tlci96ZW5kdS1kYXRlcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9kYXRlcGlja2VyL3plbmR1LWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUduQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7O0FBRW5ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQztBQUMxQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDM0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBTzVCLE1BQU0sT0FBTyx3QkFBd0I7SUE0RW5DLFlBQ1UsUUFBb0I7UUFBcEIsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQXRFOUI7O1dBRUc7UUFDTyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV2QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFRaEIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUUzQixrQkFBYSxHQUFhLEVBQUUsQ0FBQztRQUU3QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUl0Qzs7V0FFRztRQUNNLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBRWhDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQixjQUFTLEdBQXdCLG1CQUFtQixDQUFDLElBQUks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OUIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZixPQUFPO1NBQ1I7UUFDRCxJQUFJLEVBQUUsQ0FBQztRQUNQLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZixPQUFPO1NBQ1I7UUFDRCxJQUFJLEVBQUUsQ0FBQztRQUNQLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZCxPQUFPO1NBQ1I7UUFDRCxHQUFHLEVBQUUsQ0FBQztRQUNOLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxX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QixNQUFNO2dCQUVFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUtHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkF5Q04sZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWE1QyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50L21vbWVudCc7XG5pbXBvcnQgeyBEYXRlUGlja2VyRGF5IH0gZnJvbSAnLi9kYXRlLXBpY2tlci1kYXknO1xuaW1wb3J0IHsgRGF0ZVBpY2tlckhpbnQgfSBmcm9tIFwiLi9kYXRlLXBpY2tlci1oaW50XCI7XG5pbXBvcnQgeyBEQVRFUElDS0VSX1BPU0lUSU9OIH0gZnJvbSAnLi9kYXRlcGlja2VyJztcblxuY29uc3QgZGVmYXVsdEhvdXJzID0gJzEyJztcbmNvbnN0IGRlZmF1bHRNaW51dHMgPSAnMDAnO1xuY29uc3QgZGVmYXVsdFNlY29uZHMgPSAnMDAnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd6ZW4tZGF0ZXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi96ZW5kdS1kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vemVuZHUtZGF0ZXBpY2tlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFplbmR1RGF0ZXBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudCBwcm9wZXJ0eVxuICAgKi9cbiAgQElucHV0KCkgZGF0ZTogRGF0ZTtcblxuICAvKipcbiAgICogY2FsbGJhY2sgdG8gZW1pdCBjaGFuZ2VzIGZvciBwYXJlbnQgY29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KCkgZGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICBASW5wdXQoKSBzaG93VGltZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dEYXRlID0gdHJ1ZTtcblxuICBASW5wdXQoKSBjb250YWluZXJDbGFzczogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIG1pbkRhdGU6IERhdGU7XG5cbiAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZTtcblxuICBASW5wdXQoKSBib3hEZXNpZ246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBoaWdobGlnaHREYXlzOiBudW1iZXJbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIGF1dG9Db25maXJtOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaGludDogRGF0ZVBpY2tlckhpbnQ7XG5cbiAgLyoqXG4gICAqIGRhdGVwaWNrZXIgc3RhdGVzXG4gICAqL1xuICBASW5wdXQoKSBoaWdobGlnaHRFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSB4UG9zaXRpb246IERBVEVQSUNLRVJfUE9TSVRJT04gPSBEQVRFUElDS0VSX1BPU0lUSU9OLkFVVE87XG5cbiAgQElucHV0KCkgeVBvc2l0aW9uOiBEQVRFUElDS0VSX1BPU0lUSU9OID0gREFURVBJQ0tFUl9QT1NJVElPTi5BVVRPO1xuXG4gIHB1YmxpYyBzZWxlY3RlZFRpbWU6IHsgSHI6IG51bWJlciwgTWluOiBudW1iZXIsIFNlYzogbnVtYmVyIH0gPSB7IEhyOiAxLCBNaW46IDAsIFNlYzogMCB9O1xuXG4gIHB1YmxpYyBpc1BpY2tlclZpc2libGUgPSBmYWxzZTtcblxuICBwdWJsaWMgZGF5Um93czogQXJyYXk8eyBkYXlzOiBEYXRlUGlja2VyRGF5W10gfT4gPSBbXTtcblxuICBwdWJsaWMgZGF5c1RpdGxlID0gXCJcIjtcblxuICBwdWJsaWMgd2Vla0RheXMgPSBbXCJNb1wiLCBcIlR1XCIsIFwiV2VcIiwgXCJUaFwiLCBcIkZyaVwiLCBcIlNhXCIsIFwiU3VcIl07XG5cbiAgcHVibGljIGN1cnJlbnRTbG90ID0gbmV3IERhdGUoKTtcblxuICBwdWJsaWMgaG91ciA9IGRlZmF1bHRIb3VycztcblxuICBwdWJsaWMgbWluID0gZGVmYXVsdE1pbnV0cztcblxuICBwdWJsaWMgc2VjID0gZGVmYXVsdFNlY29uZHM7XG5cbiAgcHVibGljIGlzUE0gPSBmYWxzZTtcblxuICBwdWJsaWMgX2RhdGVUb1NldDogRGF0ZTtcblxuICBwdWJsaWMgbW9udGhzID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4gIHB1YmxpYyB5ZWFycyA9IFtdO1xuXG4gIHB1YmxpYyBtb250aFBpY2tlclZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgeWVhclBpY2tlclZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICByaWdodDogYm9vbGVhbiA9IGZhbHNlO1xuICBib3R0b206IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmXG4gICkgeyB9XG5cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgb3V0c2lkZUhhbmRsaW5nKGV2ZW50KSB7XG4gICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIC8vIGVsZW1lbnQgbm90IGluIHRoZSBET01cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGlkZVRpbWVQaWNrZXIoKVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFtdKVxuICBzY3JvbGwoKSB7XG4gICAgdGhpcy51cGRhdGVQbGFjZW1lbnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0ZSkge1xuICAgICAgdGhpcy5fZGF0ZVRvU2V0ID0gbmV3IERhdGUodGhpcy5kYXRlKTtcblxuICAgICAgdGhpcy5zZWxlY3RlZFRpbWUgPSB7XG4gICAgICAgIEhyOiBtb21lbnQodGhpcy5kYXRlKS5ob3VycygpLFxuICAgICAgICBNaW46IG1vbWVudCh0aGlzLmRhdGUpLm1pbnV0ZXMoKSxcbiAgICAgICAgU2VjOiBtb21lbnQodGhpcy5kYXRlKS5zZWNvbmRzKClcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZVBsYWNlbWVudCgpIHtcbiAgICB0aGlzLnJpZ2h0ID0gZmFsc2U7XG4gICAgdGhpcy5ib3R0b20gPSBmYWxzZTtcbiAgICBpZiAodGhpcy54UG9zaXRpb24gPT09IERBVEVQSUNLRVJfUE9TSVRJT04uQVVUTyAmJiB0aGlzLmdldEhvcml6b250YWxNZW51RGlyZWN0aW9uKCkgPT09IERBVEVQSUNLRVJfUE9TSVRJT04uTEVGVCkge1xuICAgICAgdGhpcy5yaWdodCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnlQb3NpdGlvbiA9PT0gREFURVBJQ0tFUl9QT1NJVElPTi5BVVRPICYmIHRoaXMuZ2V0VmVydGljYWxNZW51RGlyZWN0aW9uKCkgPT09IERBVEVQSUNLRVJfUE9TSVRJT04uVE9QKSB7XG4gICAgICB0aGlzLmJvdHRvbSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnhQb3NpdGlvbiA9PT0gREFURVBJQ0tFUl9QT1NJVElPTi5SSUdIVCkge1xuICAgICAgdGhpcy5yaWdodCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnlQb3NpdGlvbiA9PT0gREFURVBJQ0tFUl9QT1NJVElPTi5UT1ApIHtcbiAgICAgIHRoaXMuYm90dG9tID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFZlcnRpY2FsTWVudURpcmVjdGlvbigpOiBEQVRFUElDS0VSX1BPU0lUSU9OIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHRvcCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgIGNvbnN0IGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICBpZiAodG9wID4gKGhlaWdodCAvIDIpKSB7XG4gICAgICByZXR1cm4gREFURVBJQ0tFUl9QT1NJVElPTi5UT1BcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gREFURVBJQ0tFUl9QT1NJVElPTi5CT1RUT007XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZ2V0IGRhdGVwaWNrZXIgcG9zaXRpb25cbiAgICogQHJldHVybnMgZWl0aGVyIFwibGVmdFwiIG9yIFwicmlnaHRcIlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRIb3Jpem9udGFsTWVudURpcmVjdGlvbigpOiBEQVRFUElDS0VSX1BPU0lUSU9OIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGxlZnQgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgY29uc3Qgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBpZiAobGVmdCA+ICh3aWR0aCAvIDIpKSB7XG4gICAgICByZXR1cm4gREFURVBJQ0tFUl9QT1NJVElPTi5MRUZUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBEQVRFUElDS0VSX1BPU0lUSU9OLlJJR0hUO1xuICAgIH1cbiAgfVxuXG5cbiAgcHVibGljIHRvZ2dsZVBpY2tlcigpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5fZGF0ZVRvU2V0ID0gdGhpcy5kYXRlID8gbmV3IERhdGUodGhpcy5kYXRlKSA6IG51bGw7XG5cbiAgICB0aGlzLmlzUGlja2VyVmlzaWJsZSA9ICF0aGlzLmlzUGlja2VyVmlzaWJsZTtcbiAgICBpZiAodGhpcy5zaG93RGF0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50U2xvdCA9IHRoaXMuX2RhdGVUb1NldCB8fCBuZXcgRGF0ZSgpO1xuICAgICAgdGhpcy51cGRhdGVEYXlzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGltZSA9IHtcbiAgICAgICAgSHI6IG1vbWVudCh0aGlzLmRhdGUpLmhvdXJzKCksXG4gICAgICAgIE1pbjogbW9tZW50KHRoaXMuZGF0ZSkubWludXRlcygpLFxuICAgICAgICBTZWM6IG1vbWVudCh0aGlzLmRhdGUpLnNlY29uZHMoKVxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuZGF0ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBtb21lbnQodGhpcy5kYXRlKS5mb3JtYXQoJ2hoOm1tIEEnKTtcblxuICAgICAgICB0aGlzLmlzUE0gPSBmb3JtYXR0ZWQuaW5jbHVkZXMoJ1BNJyk7XG4gICAgICAgIHRoaXMuaG91ciA9IGZvcm1hdHRlZC5zbGljZSgwLCAyKTtcbiAgICAgICAgdGhpcy5taW4gPSBmb3JtYXR0ZWQuc2xpY2UoMywgNSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVQbGFjZW1lbnQoKTtcblxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXlzKCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50U2xvdCkge1xuICAgICAgdGhpcy5jdXJyZW50U2xvdCA9IG5ldyBEYXRlKCk7XG4gICAgfVxuICAgIHRoaXMuZGF5c1RpdGxlID0gbW9tZW50KHRoaXMuY3VycmVudFNsb3QpLmZvcm1hdChcIk1NTSB5eXl5XCIpO1xuICAgIHRoaXMuZGF5Um93cyA9IFtdO1xuICAgIGxldCBjdXJyZW50ID0gbW9tZW50KHRoaXMuY3VycmVudFNsb3QpLnN0YXJ0T2YoXCJtb250aFwiKS5zdGFydE9mKFwid2Vla1wiKS5hZGQoMSwgXCJkYXlcIik7XG4gICAgbGV0IGVuZCA9IG1vbWVudCh0aGlzLmN1cnJlbnRTbG90KS5lbmRPZihcIm1vbnRoXCIpLmVuZE9mKFwid2Vla1wiKS5hZGQoMSwgXCJkYXlcIik7XG5cbiAgICBjb25zdCBjdXJyZW50TW9udGggPSBtb21lbnQodGhpcy5jdXJyZW50U2xvdCkubW9udGgoKTtcblxuICAgIGNvbnN0IGRhdGUgPSBtb21lbnQodGhpcy5fZGF0ZVRvU2V0KTtcblxuICAgIHdoaWxlIChjdXJyZW50IDw9IGVuZCkge1xuICAgICAgY29uc3Qgcm93ID0geyBkYXlzOiBbXSBhcyBEYXRlUGlja2VyRGF5W10gfTtcbiAgICAgIHRoaXMuZGF5Um93cy5wdXNoKHJvdyk7XG4gICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCA3OyBpZHgrKykge1xuXG4gICAgICAgIGxldCBpc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgaXNTZWxlY3RlZCA9IGN1cnJlbnQuZGF0ZSgpID09IGRhdGUuZGF0ZSgpICYmXG4gICAgICAgICAgICBkYXRlLm1vbnRoKCkgPT0gY3VycmVudC5tb250aCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGlzT3V0c2lkZSA9IGN1cnJlbnRNb250aCAhPSBjdXJyZW50Lm1vbnRoKCk7XG5cbiAgICAgICAgbGV0IGlzRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5taW5EYXRlICYmIGN1cnJlbnQudG9EYXRlKCkgPCB0aGlzLm1pbkRhdGUpIHtcbiAgICAgICAgICBpc0Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1heERhdGUgJiYgY3VycmVudC50b0RhdGUoKSA+IHRoaXMubWF4RGF0ZSkge1xuICAgICAgICAgIGlzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGlzSGlnaGxpZ2h0ZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5oaWdobGlnaHREYXlzICYmIHRoaXMuaGlnaGxpZ2h0RGF5cy5sZW5ndGgpIHtcbiAgICAgICAgICBpc0hpZ2hsaWdodGVkID0gdGhpcy5oaWdobGlnaHREYXlzLmluZGV4T2YoY3VycmVudC52YWx1ZU9mKCkpID49IDA7XG4gICAgICAgIH1cblxuICAgICAgICByb3cuZGF5cy5wdXNoKHtcbiAgICAgICAgICBkYXRlOiBjdXJyZW50LnRvRGF0ZSgpLFxuICAgICAgICAgIGxibDogbW9tZW50KGN1cnJlbnQpLmRhdGUoKS50b1N0cmluZygpLFxuICAgICAgICAgIGlzT3V0c2lkZTogaXNPdXRzaWRlLFxuICAgICAgICAgIHNlbGVjdGVkOiBpc1NlbGVjdGVkLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNIaWdobGlnaHRlZDogaXNIaWdobGlnaHRlZFxuICAgICAgICB9KTtcblxuICAgICAgICBjdXJyZW50ID0gbW9tZW50KGN1cnJlbnQpLmFkZCgxLCBcImRheVwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmV4dE1vbnRoKCkge1xuICAgIHRoaXMuY3VycmVudFNsb3QgPSBtb21lbnQodGhpcy5jdXJyZW50U2xvdCkuYWRkKDEsIFwibW9udGhcIikudG9EYXRlKCk7XG4gICAgdGhpcy51cGRhdGVEYXlzKCk7XG4gIH1cblxuICBwdWJsaWMgcHJldk1vbnRoKCkge1xuICAgIHRoaXMuY3VycmVudFNsb3QgPSBtb21lbnQodGhpcy5jdXJyZW50U2xvdCkuc3VidHJhY3QoMSwgXCJtb250aFwiKS50b0RhdGUoKTtcbiAgICB0aGlzLnVwZGF0ZURheXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZXh0WWVhcigpIHtcbiAgICB0aGlzLmN1cnJlbnRTbG90ID0gbW9tZW50KHRoaXMuY3VycmVudFNsb3QpLmFkZCgxLCBcInllYXJcIikudG9EYXRlKCk7XG4gICAgdGhpcy51cGRhdGVEYXlzKCk7XG4gIH1cblxuICBwdWJsaWMgcHJldlllYXIoKSB7XG4gICAgdGhpcy5jdXJyZW50U2xvdCA9IG1vbWVudCh0aGlzLmN1cnJlbnRTbG90KS5zdWJ0cmFjdCgxLCBcInllYXJcIikudG9EYXRlKCk7XG4gICAgdGhpcy51cGRhdGVEYXlzKCk7XG4gIH1cblxuICBwdWJsaWMgbmV4dFllYXJHcm91cCgpIHtcbiAgICB0aGlzLnllYXJzID0gdGhpcy55ZWFycy5tYXAoeWVhciA9PiB5ZWFyICsgMTUpO1xuICB9XG5cbiAgcHVibGljIHByZXZZZWFyR3JvdXAoKSB7XG4gICAgdGhpcy55ZWFycyA9IHRoaXMueWVhcnMubWFwKHllYXIgPT4geWVhciAtIDE1KTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3REYXkoZGF5OiBEYXRlUGlja2VyRGF5KSB7XG4gICAgaWYgKGRheS5pc0Rpc2FibGVkKSB7XG4gICAgICAvLyBkYXkgaXMgZGlzYWJsZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG93VGltZSkge1xuICAgICAgdGhpcy5fZGF0ZVRvU2V0ID0gbW9tZW50KGRheS5kYXRlKS5ob3VyKHRoaXMuc2VsZWN0ZWRUaW1lLkhyKS5taW51dGUodGhpcy5zZWxlY3RlZFRpbWUuTWluKS5zZWNvbmQodGhpcy5zZWxlY3RlZFRpbWUuU2VjKS50b0RhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGF0ZVRvU2V0ID0gbmV3IERhdGUoZGF5LmRhdGUpO1xuXG4gICAgICBpZiAodGhpcy5hdXRvQ29uZmlybSkge1xuICAgICAgICB0aGlzLmFwcGx5KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVEYXlzKCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0TW9udGgobW9udGg6IG51bWJlcikge1xuICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRTbG90KTtcbiAgICBuZXdEYXRlLnNldE1vbnRoKG1vbnRoKTtcbiAgICB0aGlzLmN1cnJlbnRTbG90ID0gbmV3RGF0ZTtcbiAgICB0aGlzLnVwZGF0ZURheXMoKTtcbiAgICB0aGlzLm1vbnRoUGlja2VyVmlzaWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdFllYXIoeWVhcjogbnVtYmVyKSB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuY3VycmVudFNsb3QpO1xuICAgIG5ld0RhdGUuc2V0RnVsbFllYXIoeWVhcik7XG4gICAgdGhpcy5jdXJyZW50U2xvdCA9IG5ld0RhdGU7XG4gICAgdGhpcy51cGRhdGVEYXlzKCk7XG4gICAgdGhpcy55ZWFyUGlja2VyVmlzaWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGhpZGVUaW1lUGlja2VyKCkge1xuICAgIHRoaXMuaXNQaWNrZXJWaXNpYmxlID0gZmFsc2U7XG4gIH1cblxuXG4gIHB1YmxpYyB0aW1lQ2hhbmdlZCgpIHtcbiAgICBsZXQgbWluID0gcGFyc2VJbnQodGhpcy5taW4pO1xuICAgIGxldCBob3VyID0gcGFyc2VJbnQodGhpcy5ob3VyKTtcbiAgICAvLyBSZXBsYWNlICcwJyB3aXRoIGB0aGlzLnNlY2AuXG4gICAgLy8gQXMgb2Ygbm93IHdlIGRvIG5vdCBoYXZlIGFwcGxpY2F0aW9uIG9mIG1ha2luZyB0aGUgdXNlciBzZWxlY3Qgc2Vjb25kcyBzbyB3ZSBzZXQgaXQgdG8gMC5cbiAgICBsZXQgc2VjID0gcGFyc2VJbnQoJzAnKTtcbiAgICBpZiAoaXNOYU4oaG91cikgfHwgaXNOYU4obWluKSB8fCBpc05hTihzZWMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaG91ciA9IE1hdGgubWluKGhvdXIsIDEyKTtcbiAgICBob3VyID0gTWF0aC5tYXgoaG91ciwgMSk7XG5cbiAgICBtaW4gPSBNYXRoLm1pbihtaW4sIDU5KTtcbiAgICBtaW4gPSBNYXRoLm1heChtaW4sIDApO1xuXG4gICAgc2VjID0gTWF0aC5taW4oc2VjLCA1OSk7XG4gICAgc2VjID0gTWF0aC5tYXgoc2VjLCAwKTtcblxuICAgIGNvbnN0IHRpbWUgPSBtb21lbnQoYCR7aG91cn0gJHttaW59ICR7dGhpcy5pc1BNID8gXCJwbVwiIDogXCJhbVwifWAsIFwiaDptIGFcIik7XG5cbiAgICB0aGlzLnNlbGVjdGVkVGltZSA9IHtcbiAgICAgIEhyOiB0aW1lLmhvdXJzKCksXG4gICAgICBNaW46IHRpbWUubWludXRlcygpLFxuICAgICAgU2VjOiB0aW1lLnNlY29uZHMoKVxuICAgIH07XG5cbiAgICAvLyBhZGRlZCBiZWxvdyBjb25kaXRpb24gYmVjYXVzZSB3ZSBjYW4gc2VsZWN0IHRoZSB0aW1lIHdpdGhvdXQgZGF0ZSwgYW5kIGl0IHdhcyBzaG93aW5nIGludmFsaWQgZGF0ZSBpbiB0aGUgaW5wdXQgYm94XG4gICAgLy8gc2Vjb25kIGNvbmRpdGlvbiBpcyByZXF1aXJlZCB0byBkaXNhYmxlIGFwcGx5IGJ1dHRvbiB3aGVuIGRhdGUgaXMgbm90IHNlbGVjdGVkXG4gICAgaWYgKHRoaXMuX2RhdGVUb1NldCkge1xuICAgICAgdGhpcy5fZGF0ZVRvU2V0ID0gbW9tZW50KHRoaXMuX2RhdGVUb1NldCkuaG91cih0aGlzLnNlbGVjdGVkVGltZS5IcikubWludXRlKHRoaXMuc2VsZWN0ZWRUaW1lLk1pbikuc2Vjb25kKHRoaXMuc2VsZWN0ZWRUaW1lLlNlYykudG9EYXRlKCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5zaG93RGF0ZSkge1xuICAgICAgdGhpcy5fZGF0ZVRvU2V0ID0gbW9tZW50KCkuaG91cih0aGlzLnNlbGVjdGVkVGltZS5IcikubWludXRlKHRoaXMuc2VsZWN0ZWRUaW1lLk1pbikuc2Vjb25kKHRoaXMuc2VsZWN0ZWRUaW1lLlNlYykudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0XG4gICAgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgdGhpcy5ob3VyID0gYDAke2hvdXJ9YDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmhvdXIgPSBgJHtob3VyfWA7XG4gICAgfVxuXG4gICAgaWYgKG1pbiA8IDEwKSB7XG4gICAgICB0aGlzLm1pbiA9IGAwJHttaW59YDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLm1pbiA9IGAke21pbn1gO1xuICAgIH1cblxuICB9XG5cbiAgcHVibGljIGZvcm1hdHRlZERhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmRhdGUpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJveERlc2lnbiAmJiBtb21lbnQodGhpcy5kYXRlKS5pc1NhbWUobW9tZW50KCksIFwiZGF5XCIpKSB7XG4gICAgICByZXR1cm4gJ1RvZGF5JztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG93RGF0ZSAmJiAhdGhpcy5zaG93VGltZSAmJiAhdGhpcy5ib3hEZXNpZ24pIHtcbiAgICAgIC8vIEV4cGFuZGVkIGZvcm1hdHRpbmcgZm9yIGRhdGUgb25seSBwaWNrZXJcbiAgICAgIHJldHVybiBtb21lbnQodGhpcy5kYXRlKS5mb3JtYXQoXCJkZGQsIEREIE1NTSBZWVlZXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBtb21lbnQodGhpcy5kYXRlKS5mb3JtYXQoXCJNTU0gREQsIFlZXCIpO1xuICB9XG5cbiAgcHVibGljIGZvcm1hdHRlZFRpbWUoKSB7XG4gICAgaWYgKCF0aGlzLmRhdGUpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gbW9tZW50KHRoaXMuZGF0ZSkuZm9ybWF0KFwiaDptbSBBXCIpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVRpbWUoKSB7XG4gICAgdGhpcy5pc1BNID0gIXRoaXMuaXNQTTtcbiAgICB0aGlzLnRpbWVDaGFuZ2VkKCk7XG4gIH1cblxuICBwdWJsaWMgc2hvd01vbnRoUGlja2VyKCkge1xuICAgIHRoaXMubW9udGhQaWNrZXJWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93WWVhclBpY2tlcigpIHtcbiAgICB0aGlzLnllYXJQaWNrZXJWaXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnllYXJzID0gW107XG4gICAgZm9yIChsZXQgaSA9IHRoaXMuY3VycmVudFNsb3QuZ2V0RnVsbFllYXIoKSAtIDc7IGkgPCB0aGlzLmN1cnJlbnRTbG90LmdldEZ1bGxZZWFyKCkgKyA4OyBpKyspIHtcbiAgICAgIHRoaXMueWVhcnMucHVzaChpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaG91clVwKCkge1xuICAgIGxldCBob3VyID0gcGFyc2VJbnQodGhpcy5ob3VyKTtcbiAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaG91cisrO1xuICAgIHRoaXMuaG91ciA9IGhvdXIudG9TdHJpbmcoKTtcbiAgICB0aGlzLnRpbWVDaGFuZ2VkKCk7XG4gIH1cblxuICBwdWJsaWMgaG91ckRvd24oKSB7XG4gICAgbGV0IGhvdXIgPSBwYXJzZUludCh0aGlzLmhvdXIpO1xuICAgIGlmIChpc05hTihob3VyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBob3VyLS07XG4gICAgdGhpcy5ob3VyID0gaG91ci50b1N0cmluZygpO1xuICAgIHRoaXMudGltZUNoYW5nZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBtaW5VcCgpIHtcbiAgICBsZXQgbWluID0gcGFyc2VJbnQodGhpcy5taW4pO1xuICAgIGlmIChpc05hTihtaW4pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG1pbisrO1xuICAgIHRoaXMubWluID0gbWluLnRvU3RyaW5nKCk7XG4gICAgdGhpcy50aW1lQ2hhbmdlZCgpO1xuICB9XG5cbiAgcHVibGljIG1pbkRvd24oKSB7XG4gICAgbGV0IG1pbiA9IHBhcnNlSW50KHRoaXMubWluKTtcbiAgICBpZiAoaXNOYU4obWluKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBtaW4tLTtcbiAgICB0aGlzLm1pbiA9IG1pbi50b1N0cmluZygpO1xuICAgIHRoaXMudGltZUNoYW5nZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseSgpIHtcbiAgICBpZiAodGhpcy5fZGF0ZVRvU2V0KSB7XG4gICAgICAvLyBJZiB0aW1lIHNlbGVjdGlvbiBoYXMgZW5hYmxlZCBhbmQgdXNlciBrZWVwcyBkZWZhdWx0IHRpbWUgdGhlbiB0cmlnZ2VyaW5nIHRoZSB0aW1lQ2hhbmdlZCBmdW5jdGlvblxuICAgICAgaWYgKHRoaXMuc2hvd1RpbWUgJiYgdGhpcy5ob3VyID09PSBkZWZhdWx0SG91cnMgJiYgdGhpcy5taW4gPT09IGRlZmF1bHRNaW51dHMgJiYgdGhpcy5zZWMgPT09IGRlZmF1bHRTZWNvbmRzKSB7XG4gICAgICAgIHRoaXMudGltZUNoYW5nZWQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kYXRlID0gbmV3IERhdGUodGhpcy5fZGF0ZVRvU2V0KTtcbiAgICB9XG4gICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQodGhpcy5kYXRlKTtcbiAgICB0aGlzLmhpZGVUaW1lUGlja2VyKCk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCkge1xuICAgIHRoaXMuaGlkZVRpbWVQaWNrZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLl9kYXRlVG9TZXQgPSBudWxsO1xuICAgIHRoaXMuaG91ciA9IGRlZmF1bHRIb3VycztcbiAgICB0aGlzLm1pbiA9IGRlZmF1bHRNaW51dHM7XG4gICAgdGhpcy5kYXRlID0gbnVsbDtcbiAgICB0aGlzLmFwcGx5KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SWNvbigpIHtcbiAgICAvLyBDaGFuZ2UgcGlja2VyIGljb24gYmFzZWQgb24gbW9kZVxuICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgY2FzZSB0aGlzLnNob3dEYXRlICYmIHRoaXMuc2hvd1RpbWU6XG4gICAgICAgIC8vIERhdGUgKyBUaW1lXG4gICAgICAgIHJldHVybiAnYXNzZXRzL25nLXplbmR1aXQvaWNvbnMvZGF0ZS5zdmcnO1xuICAgICAgY2FzZSB0aGlzLnNob3dEYXRlICYmICF0aGlzLnNob3dUaW1lOlxuICAgICAgICAvLyBEYXRlIG9ubHlcbiAgICAgICAgcmV0dXJuICdhc3NldHMvbmctemVuZHVpdC9pY29ucy9jYWxlbmRhci5zdmcnO1xuICAgICAgY2FzZSAhdGhpcy5zaG93RGF0ZSAmJiB0aGlzLnNob3dUaW1lOlxuICAgICAgICAvLyBUaW1lIG9ubHlcbiAgICAgICAgcmV0dXJuICdhc3NldHMvbmctemVuZHVpdC9pY29ucy90aW1lLnN2Zyc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2Fzc2V0cy9uZy16ZW5kdWl0L2ljb25zL2RhdGUuc3ZnJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0SGludERhdGUoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBoaW50Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0ZVRvU2V0ID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgdGhpcy5zZWxlY3RlZFRpbWUgPSB7XG4gICAgICBIcjogbW9tZW50KGRhdGUpLmhvdXJzKCksXG4gICAgICBNaW46IG1vbWVudChkYXRlKS5taW51dGVzKCksXG4gICAgICBTZWM6IG1vbWVudChkYXRlKS5zZWNvbmRzKClcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuYXV0b0NvbmZpcm0pIHtcbiAgICAgIHRoaXMuYXBwbHkoKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZURheXMoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRhdGUtY29tcG9uZW50XCI+XG4gICAgPCEtLSBNYXRlcmlhbCBkZXNpZ24gZGF0ZXBpY2tlciB0b2dnbGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFib3hEZXNpZ25cIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRhdGUtdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVQaWNrZXIoKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc1BpY2tlclZpc2libGUsJ2Vycm9yJzogaGlnaGxpZ2h0RXJyb3IsJ3JlYWRvbmx5JzogcmVhZG9ubHl9XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPCEtLSBkYXRlIHBsYWNlaG9sZGVyIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgU2VsZWN0IERhdGVcbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU2VsZWN0ZWQgZGF0ZXRpbWUgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93RGF0ZVwiPnt7Zm9ybWF0dGVkRGF0ZSgpfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd1RpbWVcIj4mbmJzcDt7e2Zvcm1hdHRlZFRpbWUoKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gRGF0ZXBpY2tlciBpY29uLCBkZXBlbmRzIG9uIHBpY2tlciB0eXBlIC0tPlxuICAgICAgICAgICAgPHplbi1pY29uIGNsYXNzPVwiZGF0ZS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImdldEljb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydmaWxsZWQnOiBkYXRlfVwiPlxuICAgICAgICAgICAgPC96ZW4taWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEJveCBkZXNpZ24gZGF0ZXBpY2tlciB0b2dnbGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJveERlc2lnblwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZGF0ZS10b2dnbGUgbmV3LWJveC1kZXNpZ25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBpY2tlcigpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzUGlja2VyVmlzaWJsZSwnZXJyb3InOiBoaWdobGlnaHRFcnJvciwncmVhZG9ubHknOiByZWFkb25seX1cIj5cblxuICAgICAgICAgICAgPCEtLSBEYXRlcGlja2VyIGljb24sIGRlcGVuZHMgb24gcGlja2VyIHR5cGUgLS0+XG4gICAgICAgICAgICA8emVuLWljb24gY2xhc3M9XCJkYXRlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0SWNvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ZpbGxlZCc6IGRhdGV9XCI+XG4gICAgICAgICAgICA8L3plbi1pY29uPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1jb250ZW50IG5ldy1ib3gtZGVzaWduXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBkYXRlIHBsYWNlaG9sZGVyIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgU2VsZWN0IERhdGVcbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU2VsZWN0ZWQgZGF0ZXRpbWUgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93RGF0ZVwiPnt7Zm9ybWF0dGVkRGF0ZSgpfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd1RpbWVcIj4mbmJzcDt7e2Zvcm1hdHRlZFRpbWUoKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBEYXRlcGlja2VyIHBvcHVwIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpc1BpY2tlclZpc2libGVcIlxuICAgICAgICAgY2xhc3M9XCJkYXRlLW1lbnVcIlxuICAgICAgICAgW25nQ2xhc3NdPVwieyAncmlnaHQnOiByaWdodCwgJ2JvdHRvbSc6IGJvdHRvbSB9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLW1vZGFsXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0RhdGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5cy10b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIChjbGljayk9XCJwcmV2TW9udGgoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5uYXZpZ2F0ZV9iZWZvcmU8L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd01vbnRoUGlja2VyKClcIj57e2RheXNUaXRsZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwibmV4dE1vbnRoKClcIlxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+bmF2aWdhdGVfbmV4dDwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5cy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndlZWstZGF5c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgd2Vla0RheSBvZiB3ZWVrRGF5c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid2Vlay1kYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3dlZWtEYXl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2YgZGF5Um93c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXktcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXkgb2Ygcm93LmRheXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF5KGRheSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRheS1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm91c2lkZVJhbmdlXT1cImRheS5pc091dHNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiZGF5LnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkRGF5XT1cImRheS5pc0Rpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXkubGJsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWljb24gKm5nSWY9XCJkYXkuaXNIaWdobGlnaHRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlnaGxpZ2h0LWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvbmctemVuZHVpdC9pY29ucy9wbGF5LnN2Z1wiPjwvemVuLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUaW1lXCJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0aW1lLWNvbnRhaW5lclwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtbGJsXCI+XG4gICAgICAgICAgICAgICAgICAgIFNlbGVjdCBUaW1lOlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtcGlja2VyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8emVuLWljb24gKGNsaWNrKT1cImhvdXJVcCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvbmctemVuZHVpdC9pY29ucy9hcnJvdy11cC1zbWFsbC5zdmdcIj48L3plbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiaG91clwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGltZUNoYW5nZWQoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8emVuLWljb24gKGNsaWNrKT1cImhvdXJEb3duKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9uZy16ZW5kdWl0L2ljb25zL2Fycm93LWRvd24tc21hbGwuc3ZnXCI+PC96ZW4taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD46PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4taWNvbiAoY2xpY2spPVwibWluVXAoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL25nLXplbmR1aXQvaWNvbnMvYXJyb3ctdXAtc21hbGwuc3ZnXCI+PC96ZW4taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cIm1pblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGltZUNoYW5nZWQoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8emVuLWljb24gKGNsaWNrKT1cIm1pbkRvd24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL25nLXplbmR1aXQvaWNvbnMvYXJyb3ctZG93bi1zbWFsbC5zdmdcIj48L3plbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFtLXBtLXBpY2tlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlVGltZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpc1BNID8gJ1BNJyA6ICdBTSd9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVRpbWUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXNQTSA/ICdBTScgOiAnUE0nfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGludFwiXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwiaGludFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoaW50LWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7aGludC5kZXNjcmlwdGlvbn19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhpbnQtZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SGludERhdGUoaGludC5kYXRlKVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2hpbnQubWFza1RleHR9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIlxuICAgICAgICAgICAgICAgICAqbmdJZj1cIiFhdXRvQ29uZmlybSB8fCBzaG93VGltZVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXN0cm9rZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgQ2xlYXJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXN0cm9rZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIV9kYXRlVG9TZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tZmxhdFwiPlxuICAgICAgICAgICAgICAgICAgICBBcHBseVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb250aFBpY2tlclZpc2libGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGgtcGlja2VyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXlzLXRvb2xiYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIChjbGljayk9XCJwcmV2WWVhcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5uYXZpZ2F0ZV9iZWZvcmU8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93WWVhclBpY2tlcigpXCI+e3sgY3VycmVudFNsb3QgfCBkYXRlOiAneXl5eScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwibmV4dFllYXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+bmF2aWdhdGVfbmV4dDwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb250aHMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGgtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtb250aCBvZiBtb250aHM7IGluZGV4IGFzIGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE1vbnRoKGluZGV4KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1vbnRoIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInllYXJQaWNrZXJWaXNpYmxlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vbnRoLXBpY2tlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5cy10b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwicHJldlllYXJHcm91cCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5uYXZpZ2F0ZV9iZWZvcmU8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93WWVhclBpY2tlcigpXCI+e3sgY3VycmVudFNsb3QgfCBkYXRlOiAneXl5eScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwibmV4dFllYXJHcm91cCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5uYXZpZ2F0ZV9uZXh0PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vbnRocy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHllYXIgb2YgeWVhcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0WWVhcih5ZWFyKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHllYXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtbW9kYWwtZXh0cmEtc3BhY2VcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
475
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvZGF0ZXBpY2tlci96ZW5kdS1kYXRlcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9kYXRlcGlja2VyL3plbmR1LWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SSxPQUFPLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFHbkMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7OztBQUVuRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzNCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQztBQU81QixNQUFNLE9BQU8sd0JBQXdCO0lBZ0ZuQyxZQUNVLFFBQW9CO1FBQXBCLGFBQVEsR0FBUixRQUFRLENBQVk7UUExRTlCOztXQUVHO1FBQ08sZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdkMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBRWhCLG9CQUFlLEdBQXVCLElBQUksQ0FBQztRQVEzQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBRTNCLGtCQUFhLEdBQWEsRUFBRSxDQUFDO1FBRTdCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBSXRDOztXQUVHO1FBQ00sbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFFaEMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQixhQUFRLEdBQVksS0FBSyxD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QVcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZixPQUFPO1NBQ1I7UUFDRCxJQUFJLEVBQUUsQ0FBQztRQUNQLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZixPQUFPO1NBQ1I7UUFDRCxJQUFJLEVBQUUsQ0FBQztRQUNQLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZCxPQUFPO1NBQ1I7UUFDRCxHQUFHLEVBQUUsQ0FBQztRQUNOLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZCxPQUFPO1NBQ1I7UUFDRCxHQUFHLEVBQUUsQ0FBQztRQUNOLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixxR0FBcUc7WUFDckcsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssYUFBYSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssY0FBYyxFQUFFO2dCQUM1RyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDcEI7WUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN2QztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRU0sT0FBTztRQUNaLG1DQUFtQztRQUNuQyxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUTtnQkFDakMsY0FBYztnQkFDZCxPQUFPLGtDQUFrQyxDQUFDO1lBQzVDLEtBQUssSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO2dCQUNsQyxZQUFZO2dCQUNaLE9BQU8sc0NBQXNDLENBQUM7WUFDaEQsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVE7Z0JBQ2xDLFlBQVk7Z0JBQ1osT0FBTyxrQ0FBa0MsQ0FBQztZQUM1QztnQkFDRSxPQUFPLGtDQUFrQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVNLGNBQWMsQ0FBQyxJQUFVO1FBQzlCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNsQixFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUN4QixHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUMzQixHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtTQUM1QixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNkO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7O3NIQXBoQlUsd0JBQXdCOzBHQUF4Qix3QkFBd0IsaXRCQ2ZyQyw2eFJBOE1NOzRGRC9MTyx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0UsZ0JBQWdCO2lHQVNqQixJQUFJO3NCQUFaLEtBQUs7Z0JBS0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFFRSxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUtHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFaUIsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVO2dCQXlDckIsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWE1QyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQvbW9tZW50JztcbmltcG9ydCB7IERhdGVQaWNrZXJEYXkgfSBmcm9tICcuL2RhdGUtcGlja2VyLWRheSc7XG5pbXBvcnQgeyBEYXRlUGlja2VySGludCB9IGZyb20gXCIuL2RhdGUtcGlja2VyLWhpbnRcIjtcbmltcG9ydCB7IERBVEVQSUNLRVJfUE9TSVRJT04gfSBmcm9tICcuL2RhdGVwaWNrZXInO1xuXG5jb25zdCBkZWZhdWx0SG91cnMgPSAnMTInO1xuY29uc3QgZGVmYXVsdE1pbnV0cyA9ICcwMCc7XG5jb25zdCBkZWZhdWx0U2Vjb25kcyA9ICcwMCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3plbi1kYXRlcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3plbmR1LWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi96ZW5kdS1kYXRlcGlja2VyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgWmVuZHVEYXRlcGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcblxuICAvKipcbiAgICogQ29tcG9uZW50IHByb3BlcnR5XG4gICAqL1xuICBASW5wdXQoKSBkYXRlOiBEYXRlO1xuXG4gIC8qKlxuICAgKiBjYWxsYmFjayB0byBlbWl0IGNoYW5nZXMgZm9yIHBhcmVudCBjb21wb25lbnRcbiAgICovXG4gIEBPdXRwdXQoKSBkYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gIEBJbnB1dCgpIHNob3dUaW1lID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2hvd0RhdGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHBhcmVudENvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKSBjb250YWluZXJDbGFzczogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIG1pbkRhdGU6IERhdGU7XG5cbiAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZTtcblxuICBASW5wdXQoKSBib3hEZXNpZ246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBoaWdobGlnaHREYXlzOiBudW1iZXJbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIGF1dG9Db25maXJtOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaGludDogRGF0ZVBpY2tlckhpbnQ7XG5cbiAgLyoqXG4gICAqIGRhdGVwaWNrZXIgc3RhdGVzXG4gICAqL1xuICBASW5wdXQoKSBoaWdobGlnaHRFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSB4UG9zaXRpb246IERBVEVQSUNLRVJfUE9TSVRJT04gPSBEQVRFUElDS0VSX1BPU0lUSU9OLkFVVE87XG5cbiAgQElucHV0KCkgeVBvc2l0aW9uOiBEQVRFUElDS0VSX1BPU0lUSU9OID0gREFURVBJQ0tFUl9QT1NJVElPTi5BVVRPO1xuXG4gIEBWaWV3Q2hpbGQoJ2RhdGVNZW51JykgZGF0ZU1lbnUhOiBFbGVtZW50UmVmO1xuXG4gIHB1YmxpYyBzZWxlY3RlZFRpbWU6IHsgSHI6IG51bWJlciwgTWluOiBudW1iZXIsIFNlYzogbnVtYmVyIH0gPSB7IEhyOiAxLCBNaW46IDAsIFNlYzogMCB9O1xuXG4gIHB1YmxpYyBpc1BpY2tlclZpc2libGUgPSBmYWxzZTtcblxuICBwdWJsaWMgZGF5Um93czogQXJyYXk8eyBkYXlzOiBEYXRlUGlja2VyRGF5W10gfT4gPSBbXTtcblxuICBwdWJsaWMgZGF5c1RpdGxlID0gXCJcIjtcblxuICBwdWJsaWMgd2Vla0RheXMgPSBbXCJNb1wiLCBcIlR1XCIsIFwiV2VcIiwgXCJUaFwiLCBcIkZyaVwiLCBcIlNhXCIsIFwiU3VcIl07XG5cbiAgcHVibGljIGN1cnJlbnRTbG90ID0gbmV3IERhdGUoKTtcblxuICBwdWJsaWMgaG91ciA9IGRlZmF1bHRIb3VycztcblxuICBwdWJsaWMgbWluID0gZGVmYXVsdE1pbnV0cztcblxuICBwdWJsaWMgc2VjID0gZGVmYXVsdFNlY29uZHM7XG5cbiAgcHVibGljIGlzUE0gPSBmYWxzZTtcblxuICBwdWJsaWMgX2RhdGVUb1NldDogRGF0ZTtcblxuICBwdWJsaWMgbW9udGhzID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4gIHB1YmxpYyB5ZWFycyA9IFtdO1xuXG4gIHB1YmxpYyBtb250aFBpY2tlclZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgeWVhclBpY2tlclZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICByaWdodDogYm9vbGVhbiA9IGZhbHNlO1xuICBib3R0b206IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmXG4gICkgeyB9XG5cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgb3V0c2lkZUhhbmRsaW5nKGV2ZW50KSB7XG4gICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIC8vIGVsZW1lbnQgbm90IGluIHRoZSBET01cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGlkZVRpbWVQaWNrZXIoKVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFtdKVxuICBzY3JvbGwoKSB7XG4gICAgdGhpcy51cGRhdGVQbGFjZW1lbnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0ZSkge1xuICAgICAgdGhpcy5fZGF0ZVRvU2V0ID0gbmV3IERhdGUodGhpcy5kYXRlKTtcblxuICAgICAgdGhpcy5zZWxlY3RlZFRpbWUgPSB7XG4gICAgICAgIEhyOiBtb21lbnQodGhpcy5kYXRlKS5ob3VycygpLFxuICAgICAgICBNaW46IG1vbWVudCh0aGlzLmRhdGUpLm1pbnV0ZXMoKSxcbiAgICAgICAgU2VjOiBtb21lbnQodGhpcy5kYXRlKS5zZWNvbmRzKClcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZVBsYWNlbWVudCgpIHtcbiAgICB0aGlzLnJpZ2h0ID0gZmFsc2U7XG4gICAgdGhpcy5ib3R0b20gPSBmYWxzZTtcbiAgICBpZiAodGhpcy54UG9zaXRpb24gPT09IERBVEVQSUNLRVJfUE9TSVRJT04uQVVUTyAmJiB0aGlzLmdldEhvcml6b250YWxNZW51RGlyZWN0aW9uKCkgPT09IERBVEVQSUNLRVJfUE9TSVRJT04uTEVGVCkge1xuICAgICAgdGhpcy5yaWdodCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnlQb3NpdGlvbiA9PT0gREFURVBJQ0tFUl9QT1NJVElPTi5BVVRPICYmIHRoaXMuZ2V0VmVydGljYWxNZW51RGlyZWN0aW9uKCkgPT09IERBVEVQSUNLRVJfUE9TSVRJT04uVE9QKSB7XG4gICAgICB0aGlzLmJvdHRvbSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnhQb3NpdGlvbiA9PT0gREFURVBJQ0tFUl9QT1NJVElPTi5SSUdIVCkge1xuICAgICAgdGhpcy5yaWdodCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnlQb3NpdGlvbiA9PT0gREFURVBJQ0tFUl9QT1NJVElPTi5UT1ApIHtcbiAgICAgIHRoaXMuYm90dG9tID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFZlcnRpY2FsTWVudURpcmVjdGlvbigpOiBEQVRFUElDS0VSX1BPU0lUSU9OIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHRvcCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgIGNvbnN0IGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICBpZiAodG9wID4gKGhlaWdodCAvIDIpKSB7XG4gICAgICByZXR1cm4gREFURVBJQ0tFUl9QT1NJVElPTi5UT1BcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gREFURVBJQ0tFUl9QT1NJVElPTi5CT1RUT007XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZ2V0IGRhdGVwaWNrZXIgcG9zaXRpb25cbiAgICogQHJldHVybnMgZWl0aGVyIFwibGVmdFwiIG9yIFwicmlnaHRcIlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRIb3Jpem9udGFsTWVudURpcmVjdGlvbigpOiBEQVRFUElDS0VSX1BPU0lUSU9OIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGxlZnQgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgY29uc3Qgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBpZiAobGVmdCA+ICh3aWR0aCAvIDIpKSB7XG4gICAgICByZXR1cm4gREFURVBJQ0tFUl9QT1NJVElPTi5MRUZUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBEQVRFUElDS0VSX1BPU0lUSU9OLlJJR0hUO1xuICAgIH1cbiAgfVxuXG5cbiAgcHVibGljIHRvZ2dsZVBpY2tlcigpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5fZGF0ZVRvU2V0ID0gdGhpcy5kYXRlID8gbmV3IERhdGUodGhpcy5kYXRlKSA6IG51bGw7XG5cbiAgICB0aGlzLmlzUGlja2VyVmlzaWJsZSA9ICF0aGlzLmlzUGlja2VyVmlzaWJsZTtcbiAgICBpZiAodGhpcy5zaG93RGF0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50U2xvdCA9IHRoaXMuX2RhdGVUb1NldCB8fCBuZXcgRGF0ZSgpO1xuICAgICAgdGhpcy51cGRhdGVEYXlzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGltZSA9IHtcbiAgICAgICAgSHI6IG1vbWVudCh0aGlzLmRhdGUpLmhvdXJzKCksXG4gICAgICAgIE1pbjogbW9tZW50KHRoaXMuZGF0ZSkubWludXRlcygpLFxuICAgICAgICBTZWM6IG1vbWVudCh0aGlzLmRhdGUpLnNlY29uZHMoKVxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuZGF0ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBtb21lbnQodGhpcy5kYXRlKS5mb3JtYXQoJ2hoOm1tIEEnKTtcblxuICAgICAgICB0aGlzLmlzUE0gPSBmb3JtYXR0ZWQuaW5jbHVkZXMoJ1BNJyk7XG4gICAgICAgIHRoaXMuaG91ciA9IGZvcm1hdHRlZC5zbGljZSgwLCAyKTtcbiAgICAgICAgdGhpcy5taW4gPSBmb3JtYXR0ZWQuc2xpY2UoMywgNSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVQbGFjZW1lbnQoKTtcbiAgICB0aGlzLnN5bmNNZW51UG9zaXRpb25XaXRoRGVsYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY01lbnVQb3NpdGlvbldpdGhEZWxheSgpIHtcbiAgICBpZiAoIXRoaXMucGFyZW50Q29udGFpbmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50UmVjdCA9IHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHBhcmVudFJlY3QgPSB0aGlzLnBhcmVudENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0b3AgZGlmZmVyZW5jZSBiZXR3ZWVuIGVsZW1lbnQgYW5kIHBhcmVudCAoaWYgYXZhaWxhYmxlKVxuICAgICAgY29uc3QgdG9wID0gdGhpcy5jYWxjdWxhdGVUb3BQb3NpdGlvbihlbGVtZW50UmVjdCwgcGFyZW50UmVjdCk7XG5cbiAgICAgIGNvbnN0IGRhdGVNZW51UmVjdCA9IHRoaXMuZGF0ZU1lbnU/Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5ib3R0b20gPSBkYXRlTWVudVJlY3Q/LmhlaWdodCA8IHRvcDtcbiAgICB9LCAxNTApO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb3BQb3NpdGlvbihlbGVtZW50UmVjdDogRE9NUmVjdCwgcGFyZW50UmVjdDogRE9NUmVjdCk6IG51bWJlciB7XG4gICAgbGV0IHRvcDogbnVtYmVyO1xuICAgIGlmIChlbGVtZW50UmVjdC50b3AgPCBwYXJlbnRSZWN0LnRvcCkge1xuICAgICAgdG9wID0gcGFyZW50UmVjdC50b3AgLSBlbGVtZW50UmVjdC50b3A7IC8vIFJldmVyc2Ugb3JkZXIgaWYgY29uZGl0aW9uIGlzIG1ldFxuICAgIH0gZWxzZSB7XG4gICAgICB0b3AgPSBlbGVtZW50UmVjdC50b3AgLSBwYXJlbnRSZWN0LnRvcDsgLy8gTm9ybWFsIGNhbGN1bGF0aW9uXG4gICAgfVxuICAgIHJldHVybiB0b3A7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURheXMoKSB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTbG90KSB7XG4gICAgICB0aGlzLmN1cnJlbnRTbG90ID0gbmV3IERhdGUoKTtcbiAgICB9XG4gICAgdGhpcy5kYXlzVGl0bGUgPSBtb21lbnQodGhpcy5jdXJyZW50U2xvdCkuZm9ybWF0KFwiTU1NIHl5eXlcIik7XG4gICAgdGhpcy5kYXlSb3dzID0gW107XG4gICAgbGV0IGN1cnJlbnQgPSBtb21lbnQodGhpcy5jdXJyZW50U2xvdCkuc3RhcnRPZihcIm1vbnRoXCIpLnN0YXJ0T2YoXCJ3ZWVrXCIpLmFkZCgxLCBcImRheVwiKTtcbiAgICBsZXQgZW5kID0gbW9tZW50KHRoaXMuY3VycmVudFNsb3QpLmVuZE9mKFwibW9udGhcIikuZW5kT2YoXCJ3ZWVrXCIpLmFkZCgxLCBcImRheVwiKTtcblxuICAgIGNvbnN0IGN1cnJlbnRNb250aCA9IG1vbWVudCh0aGlzLmN1cnJlbnRTbG90KS5tb250aCgpO1xuXG4gICAgY29uc3QgZGF0ZSA9IG1vbWVudCh0aGlzLl9kYXRlVG9TZXQpO1xuXG4gICAgd2hpbGUgKGN1cnJlbnQgPD0gZW5kKSB7XG4gICAgICBjb25zdCByb3cgPSB7IGRheXM6IFtdIGFzIERhdGVQaWNrZXJEYXlbXSB9O1xuICAgICAgdGhpcy5kYXlSb3dzLnB1c2gocm93KTtcbiAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IDc7IGlkeCsrKSB7XG5cbiAgICAgICAgbGV0IGlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICBpc1NlbGVjdGVkID0gY3VycmVudC5kYXRlKCkgPT0gZGF0ZS5kYXRlKCkgJiZcbiAgICAgICAgICAgIGRhdGUubW9udGgoKSA9PSBjdXJyZW50Lm1vbnRoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaXNPdXRzaWRlID0gY3VycmVudE1vbnRoICE9IGN1cnJlbnQubW9udGgoKTtcblxuICAgICAgICBsZXQgaXNEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLm1pbkRhdGUgJiYgY3VycmVudC50b0RhdGUoKSA8IHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgIGlzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWF4RGF0ZSAmJiBjdXJyZW50LnRvRGF0ZSgpID4gdGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaXNIaWdobGlnaHRlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodERheXMgJiYgdGhpcy5oaWdobGlnaHREYXlzLmxlbmd0aCkge1xuICAgICAgICAgIGlzSGlnaGxpZ2h0ZWQgPSB0aGlzLmhpZ2hsaWdodERheXMuaW5kZXhPZihjdXJyZW50LnZhbHVlT2YoKSkgPj0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvdy5kYXlzLnB1c2goe1xuICAgICAgICAgIGRhdGU6IGN1cnJlbnQudG9EYXRlKCksXG4gICAgICAgICAgbGJsOiBtb21lbnQoY3VycmVudCkuZGF0ZSgpLnRvU3RyaW5nKCksXG4gICAgICAgICAgaXNPdXRzaWRlOiBpc091dHNpZGUsXG4gICAgICAgICAgc2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc0hpZ2hsaWdodGVkOiBpc0hpZ2hsaWdodGVkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnJlbnQgPSBtb21lbnQoY3VycmVudCkuYWRkKDEsIFwiZGF5XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZXh0TW9udGgoKSB7XG4gICAgdGhpcy5jdXJyZW50U2xvdCA9IG1vbWVudCh0aGlzLmN1cnJlbnRTbG90KS5hZGQoMSwgXCJtb250aFwiKS50b0RhdGUoKTtcbiAgICB0aGlzLnVwZGF0ZURheXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmV2TW9udGgoKSB7XG4gICAgdGhpcy5jdXJyZW50U2xvdCA9IG1vbWVudCh0aGlzLmN1cnJlbnRTbG90KS5zdWJ0cmFjdCgxLCBcIm1vbnRoXCIpLnRvRGF0ZSgpO1xuICAgIHRoaXMudXBkYXRlRGF5cygpO1xuICB9XG5cbiAgcHVibGljIG5leHRZZWFyKCkge1xuICAgIHRoaXMuY3VycmVudFNsb3QgPSBtb21lbnQodGhpcy5jdXJyZW50U2xvdCkuYWRkKDEsIFwieWVhclwiKS50b0RhdGUoKTtcbiAgICB0aGlzLnVwZGF0ZURheXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmV2WWVhcigpIHtcbiAgICB0aGlzLmN1cnJlbnRTbG90ID0gbW9tZW50KHRoaXMuY3VycmVudFNsb3QpLnN1YnRyYWN0KDEsIFwieWVhclwiKS50b0RhdGUoKTtcbiAgICB0aGlzLnVwZGF0ZURheXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZXh0WWVhckdyb3VwKCkge1xuICAgIHRoaXMueWVhcnMgPSB0aGlzLnllYXJzLm1hcCh5ZWFyID0+IHllYXIgKyAxNSk7XG4gIH1cblxuICBwdWJsaWMgcHJldlllYXJHcm91cCgpIHtcbiAgICB0aGlzLnllYXJzID0gdGhpcy55ZWFycy5tYXAoeWVhciA9PiB5ZWFyIC0gMTUpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdERheShkYXk6IERhdGVQaWNrZXJEYXkpIHtcbiAgICBpZiAoZGF5LmlzRGlzYWJsZWQpIHtcbiAgICAgIC8vIGRheSBpcyBkaXNhYmxlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICB0aGlzLl9kYXRlVG9TZXQgPSBtb21lbnQoZGF5LmRhdGUpLmhvdXIodGhpcy5zZWxlY3RlZFRpbWUuSHIpLm1pbnV0ZSh0aGlzLnNlbGVjdGVkVGltZS5NaW4pLnNlY29uZCh0aGlzLnNlbGVjdGVkVGltZS5TZWMpLnRvRGF0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kYXRlVG9TZXQgPSBuZXcgRGF0ZShkYXkuZGF0ZSk7XG5cbiAgICAgIGlmICh0aGlzLmF1dG9Db25maXJtKSB7XG4gICAgICAgIHRoaXMuYXBwbHkoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZURheXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RNb250aChtb250aDogbnVtYmVyKSB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuY3VycmVudFNsb3QpO1xuICAgIG5ld0RhdGUuc2V0TW9udGgobW9udGgpO1xuICAgIHRoaXMuY3VycmVudFNsb3QgPSBuZXdEYXRlO1xuICAgIHRoaXMudXBkYXRlRGF5cygpO1xuICAgIHRoaXMubW9udGhQaWNrZXJWaXNpYmxlID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0WWVhcih5ZWFyOiBudW1iZXIpIHtcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5jdXJyZW50U2xvdCk7XG4gICAgbmV3RGF0ZS5zZXRGdWxsWWVhcih5ZWFyKTtcbiAgICB0aGlzLmN1cnJlbnRTbG90ID0gbmV3RGF0ZTtcbiAgICB0aGlzLnVwZGF0ZURheXMoKTtcbiAgICB0aGlzLnllYXJQaWNrZXJWaXNpYmxlID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgaGlkZVRpbWVQaWNrZXIoKSB7XG4gICAgdGhpcy5pc1BpY2tlclZpc2libGUgPSBmYWxzZTtcbiAgfVxuXG5cbiAgcHVibGljIHRpbWVDaGFuZ2VkKCkge1xuICAgIGxldCBtaW4gPSBwYXJzZUludCh0aGlzLm1pbik7XG4gICAgbGV0IGhvdXIgPSBwYXJzZUludCh0aGlzLmhvdXIpO1xuICAgIC8vIFJlcGxhY2UgJzAnIHdpdGggYHRoaXMuc2VjYC5cbiAgICAvLyBBcyBvZiBub3cgd2UgZG8gbm90IGhhdmUgYXBwbGljYXRpb24gb2YgbWFraW5nIHRoZSB1c2VyIHNlbGVjdCBzZWNvbmRzIHNvIHdlIHNldCBpdCB0byAwLlxuICAgIGxldCBzZWMgPSBwYXJzZUludCgnMCcpO1xuICAgIGlmIChpc05hTihob3VyKSB8fCBpc05hTihtaW4pIHx8IGlzTmFOKHNlYykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBob3VyID0gTWF0aC5taW4oaG91ciwgMTIpO1xuICAgIGhvdXIgPSBNYXRoLm1heChob3VyLCAxKTtcblxuICAgIG1pbiA9IE1hdGgubWluKG1pbiwgNTkpO1xuICAgIG1pbiA9IE1hdGgubWF4KG1pbiwgMCk7XG5cbiAgICBzZWMgPSBNYXRoLm1pbihzZWMsIDU5KTtcbiAgICBzZWMgPSBNYXRoLm1heChzZWMsIDApO1xuXG4gICAgY29uc3QgdGltZSA9IG1vbWVudChgJHtob3VyfSAke21pbn0gJHt0aGlzLmlzUE0gPyBcInBtXCIgOiBcImFtXCJ9YCwgXCJoOm0gYVwiKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRUaW1lID0ge1xuICAgICAgSHI6IHRpbWUuaG91cnMoKSxcbiAgICAgIE1pbjogdGltZS5taW51dGVzKCksXG4gICAgICBTZWM6IHRpbWUuc2Vjb25kcygpXG4gICAgfTtcblxuICAgIC8vIGFkZGVkIGJlbG93IGNvbmRpdGlvbiBiZWNhdXNlIHdlIGNhbiBzZWxlY3QgdGhlIHRpbWUgd2l0aG91dCBkYXRlLCBhbmQgaXQgd2FzIHNob3dpbmcgaW52YWxpZCBkYXRlIGluIHRoZSBpbnB1dCBib3hcbiAgICAvLyBzZWNvbmQgY29uZGl0aW9uIGlzIHJlcXVpcmVkIHRvIGRpc2FibGUgYXBwbHkgYnV0dG9uIHdoZW4gZGF0ZSBpcyBub3Qgc2VsZWN0ZWRcbiAgICBpZiAodGhpcy5fZGF0ZVRvU2V0KSB7XG4gICAgICB0aGlzLl9kYXRlVG9TZXQgPSBtb21lbnQodGhpcy5fZGF0ZVRvU2V0KS5ob3VyKHRoaXMuc2VsZWN0ZWRUaW1lLkhyKS5taW51dGUodGhpcy5zZWxlY3RlZFRpbWUuTWluKS5zZWNvbmQodGhpcy5zZWxlY3RlZFRpbWUuU2VjKS50b0RhdGUoKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNob3dEYXRlKSB7XG4gICAgICB0aGlzLl9kYXRlVG9TZXQgPSBtb21lbnQoKS5ob3VyKHRoaXMuc2VsZWN0ZWRUaW1lLkhyKS5taW51dGUodGhpcy5zZWxlY3RlZFRpbWUuTWluKS5zZWNvbmQodGhpcy5zZWxlY3RlZFRpbWUuU2VjKS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBmb3JtYXRcbiAgICBpZiAoaG91ciA8IDEwKSB7XG4gICAgICB0aGlzLmhvdXIgPSBgMCR7aG91cn1gO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaG91ciA9IGAke2hvdXJ9YDtcbiAgICB9XG5cbiAgICBpZiAobWluIDwgMTApIHtcbiAgICAgIHRoaXMubWluID0gYDAke21pbn1gO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubWluID0gYCR7bWlufWA7XG4gICAgfVxuXG4gIH1cblxuICBwdWJsaWMgZm9ybWF0dGVkRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuZGF0ZSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYm94RGVzaWduICYmIG1vbWVudCh0aGlzLmRhdGUpLmlzU2FtZShtb21lbnQoKSwgXCJkYXlcIikpIHtcbiAgICAgIHJldHVybiAnVG9kYXknO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dEYXRlICYmICF0aGlzLnNob3dUaW1lICYmICF0aGlzLmJveERlc2lnbikge1xuICAgICAgLy8gRXhwYW5kZWQgZm9ybWF0dGluZyBmb3IgZGF0ZSBvbmx5IHBpY2tlclxuICAgICAgcmV0dXJuIG1vbWVudCh0aGlzLmRhdGUpLmZvcm1hdChcImRkZCwgREQgTU1NIFlZWVlcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vbWVudCh0aGlzLmRhdGUpLmZvcm1hdChcIk1NTSBERCwgWVlcIik7XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0dGVkVGltZSgpIHtcbiAgICBpZiAoIXRoaXMuZGF0ZSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBtb21lbnQodGhpcy5kYXRlKS5mb3JtYXQoXCJoOm1tIEFcIik7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlVGltZSgpIHtcbiAgICB0aGlzLmlzUE0gPSAhdGhpcy5pc1BNO1xuICAgIHRoaXMudGltZUNoYW5nZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93TW9udGhQaWNrZXIoKSB7XG4gICAgdGhpcy5tb250aFBpY2tlclZpc2libGUgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIHNob3dZZWFyUGlja2VyKCkge1xuICAgIHRoaXMueWVhclBpY2tlclZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMueWVhcnMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gdGhpcy5jdXJyZW50U2xvdC5nZXRGdWxsWWVhcigpIC0gNzsgaSA8IHRoaXMuY3VycmVudFNsb3QuZ2V0RnVsbFllYXIoKSArIDg7IGkrKykge1xuICAgICAgdGhpcy55ZWFycy5wdXNoKGkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBob3VyVXAoKSB7XG4gICAgbGV0IGhvdXIgPSBwYXJzZUludCh0aGlzLmhvdXIpO1xuICAgIGlmIChpc05hTihob3VyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBob3VyKys7XG4gICAgdGhpcy5ob3VyID0gaG91ci50b1N0cmluZygpO1xuICAgIHRoaXMudGltZUNoYW5nZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBob3VyRG93bigpIHtcbiAgICBsZXQgaG91ciA9IHBhcnNlSW50KHRoaXMuaG91cik7XG4gICAgaWYgKGlzTmFOKGhvdXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGhvdXItLTtcbiAgICB0aGlzLmhvdXIgPSBob3VyLnRvU3RyaW5nKCk7XG4gICAgdGhpcy50aW1lQ2hhbmdlZCgpO1xuICB9XG5cbiAgcHVibGljIG1pblVwKCkge1xuICAgIGxldCBtaW4gPSBwYXJzZUludCh0aGlzLm1pbik7XG4gICAgaWYgKGlzTmFOKG1pbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbWluKys7XG4gICAgdGhpcy5taW4gPSBtaW4udG9TdHJpbmcoKTtcbiAgICB0aGlzLnRpbWVDaGFuZ2VkKCk7XG4gIH1cblxuICBwdWJsaWMgbWluRG93bigpIHtcbiAgICBsZXQgbWluID0gcGFyc2VJbnQodGhpcy5taW4pO1xuICAgIGlmIChpc05hTihtaW4pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG1pbi0tO1xuICAgIHRoaXMubWluID0gbWluLnRvU3RyaW5nKCk7XG4gICAgdGhpcy50aW1lQ2hhbmdlZCgpO1xuICB9XG5cbiAgcHVibGljIGFwcGx5KCkge1xuICAgIGlmICh0aGlzLl9kYXRlVG9TZXQpIHtcbiAgICAgIC8vIElmIHRpbWUgc2VsZWN0aW9uIGhhcyBlbmFibGVkIGFuZCB1c2VyIGtlZXBzIGRlZmF1bHQgdGltZSB0aGVuIHRyaWdnZXJpbmcgdGhlIHRpbWVDaGFuZ2VkIGZ1bmN0aW9uXG4gICAgICBpZiAodGhpcy5zaG93VGltZSAmJiB0aGlzLmhvdXIgPT09IGRlZmF1bHRIb3VycyAmJiB0aGlzLm1pbiA9PT0gZGVmYXVsdE1pbnV0cyAmJiB0aGlzLnNlYyA9PT0gZGVmYXVsdFNlY29uZHMpIHtcbiAgICAgICAgdGhpcy50aW1lQ2hhbmdlZCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZSh0aGlzLl9kYXRlVG9TZXQpO1xuICAgIH1cbiAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdCh0aGlzLmRhdGUpO1xuICAgIHRoaXMuaGlkZVRpbWVQaWNrZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWwoKSB7XG4gICAgdGhpcy5oaWRlVGltZVBpY2tlcigpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIHRoaXMuX2RhdGVUb1NldCA9IG51bGw7XG4gICAgdGhpcy5ob3VyID0gZGVmYXVsdEhvdXJzO1xuICAgIHRoaXMubWluID0gZGVmYXVsdE1pbnV0cztcbiAgICB0aGlzLmRhdGUgPSBudWxsO1xuICAgIHRoaXMuYXBwbHkoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJY29uKCkge1xuICAgIC8vIENoYW5nZSBwaWNrZXIgaWNvbiBiYXNlZCBvbiBtb2RlXG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIHRoaXMuc2hvd0RhdGUgJiYgdGhpcy5zaG93VGltZTpcbiAgICAgICAgLy8gRGF0ZSArIFRpbWVcbiAgICAgICAgcmV0dXJuICdhc3NldHMvbmctemVuZHVpdC9pY29ucy9kYXRlLnN2Zyc7XG4gICAgICBjYXNlIHRoaXMuc2hvd0RhdGUgJiYgIXRoaXMuc2hvd1RpbWU6XG4gICAgICAgIC8vIERhdGUgb25seVxuICAgICAgICByZXR1cm4gJ2Fzc2V0cy9uZy16ZW5kdWl0L2ljb25zL2NhbGVuZGFyLnN2Zyc7XG4gICAgICBjYXNlICF0aGlzLnNob3dEYXRlICYmIHRoaXMuc2hvd1RpbWU6XG4gICAgICAgIC8vIFRpbWUgb25seVxuICAgICAgICByZXR1cm4gJ2Fzc2V0cy9uZy16ZW5kdWl0L2ljb25zL3RpbWUuc3ZnJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnYXNzZXRzL25nLXplbmR1aXQvaWNvbnMvZGF0ZS5zdmcnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RIaW50RGF0ZShkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGhpbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRlVG9TZXQgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICB0aGlzLnNlbGVjdGVkVGltZSA9IHtcbiAgICAgIEhyOiBtb21lbnQoZGF0ZSkuaG91cnMoKSxcbiAgICAgIE1pbjogbW9tZW50KGRhdGUpLm1pbnV0ZXMoKSxcbiAgICAgIFNlYzogbW9tZW50KGRhdGUpLnNlY29uZHMoKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5hdXRvQ29uZmlybSkge1xuICAgICAgdGhpcy5hcHBseSgpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlRGF5cygpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGF0ZS1jb21wb25lbnRcIj5cbiAgICA8IS0tIE1hdGVyaWFsIGRlc2lnbiBkYXRlcGlja2VyIHRvZ2dsZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWJveERlc2lnblwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZGF0ZS10b2dnbGVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBpY2tlcigpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzUGlja2VyVmlzaWJsZSwnZXJyb3InOiBoaWdobGlnaHRFcnJvciwncmVhZG9ubHknOiByZWFkb25seX1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8IS0tIGRhdGUgcGxhY2Vob2xkZXIgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICBTZWxlY3QgRGF0ZVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBTZWxlY3RlZCBkYXRldGltZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNob3dEYXRlXCI+e3tmb3JtYXR0ZWREYXRlKCl9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93VGltZVwiPiZuYnNwO3t7Zm9ybWF0dGVkVGltZSgpfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBEYXRlcGlja2VyIGljb24sIGRlcGVuZHMgb24gcGlja2VyIHR5cGUgLS0+XG4gICAgICAgICAgICA8emVuLWljb24gY2xhc3M9XCJkYXRlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0SWNvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ZpbGxlZCc6IGRhdGV9XCI+XG4gICAgICAgICAgICA8L3plbi1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gQm94IGRlc2lnbiBkYXRlcGlja2VyIHRvZ2dsZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYm94RGVzaWduXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJkYXRlLXRvZ2dsZSBuZXctYm94LWRlc2lnblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGlja2VyKClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNQaWNrZXJWaXNpYmxlLCdlcnJvcic6IGhpZ2hsaWdodEVycm9yLCdyZWFkb25seSc6IHJlYWRvbmx5fVwiPlxuXG4gICAgICAgICAgICA8IS0tIERhdGVwaWNrZXIgaWNvbiwgZGVwZW5kcyBvbiBwaWNrZXIgdHlwZSAtLT5cbiAgICAgICAgICAgIDx6ZW4taWNvbiBjbGFzcz1cImRhdGUtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJnZXRJY29uKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZmlsbGVkJzogZGF0ZX1cIj5cbiAgICAgICAgICAgIDwvemVuLWljb24+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLWNvbnRlbnQgbmV3LWJveC1kZXNpZ25cIj5cbiAgICAgICAgICAgICAgICA8IS0tIGRhdGUgcGxhY2Vob2xkZXIgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICBTZWxlY3QgRGF0ZVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBTZWxlY3RlZCBkYXRldGltZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNob3dEYXRlXCI+e3tmb3JtYXR0ZWREYXRlKCl9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93VGltZVwiPiZuYnNwO3t7Zm9ybWF0dGVkVGltZSgpfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERhdGVwaWNrZXIgcG9wdXAgLS0+XG4gICAgPGRpdiAjZGF0ZU1lbnUgKm5nSWY9XCJpc1BpY2tlclZpc2libGVcIlxuICAgICAgICAgY2xhc3M9XCJkYXRlLW1lbnVcIlxuICAgICAgICAgW25nQ2xhc3NdPVwieyAncmlnaHQnOiByaWdodCwgJ2JvdHRvbSc6IGJvdHRvbSB9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLW1vZGFsXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0RhdGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5cy10b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIChjbGljayk9XCJwcmV2TW9udGgoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5uYXZpZ2F0ZV9iZWZvcmU8L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd01vbnRoUGlja2VyKClcIj57e2RheXNUaXRsZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwibmV4dE1vbnRoKClcIlxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+bmF2aWdhdGVfbmV4dDwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5cy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndlZWstZGF5c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgd2Vla0RheSBvZiB3ZWVrRGF5c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid2Vlay1kYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3dlZWtEYXl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2YgZGF5Um93c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXktcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXkgb2Ygcm93LmRheXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF5KGRheSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRheS1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm91c2lkZVJhbmdlXT1cImRheS5pc091dHNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiZGF5LnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkRGF5XT1cImRheS5pc0Rpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXkubGJsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWljb24gKm5nSWY9XCJkYXkuaXNIaWdobGlnaHRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlnaGxpZ2h0LWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvbmctemVuZHVpdC9pY29ucy9wbGF5LnN2Z1wiPjwvemVuLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUaW1lXCJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0aW1lLWNvbnRhaW5lclwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtbGJsXCI+XG4gICAgICAgICAgICAgICAgICAgIFNlbGVjdCBUaW1lOlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtcGlja2VyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8emVuLWljb24gKGNsaWNrKT1cImhvdXJVcCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvbmctemVuZHVpdC9pY29ucy9hcnJvdy11cC1zbWFsbC5zdmdcIj48L3plbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiaG91clwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGltZUNoYW5nZWQoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8emVuLWljb24gKGNsaWNrKT1cImhvdXJEb3duKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9uZy16ZW5kdWl0L2ljb25zL2Fycm93LWRvd24tc21hbGwuc3ZnXCI+PC96ZW4taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD46PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4taWNvbiAoY2xpY2spPVwibWluVXAoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL25nLXplbmR1aXQvaWNvbnMvYXJyb3ctdXAtc21hbGwuc3ZnXCI+PC96ZW4taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cIm1pblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGltZUNoYW5nZWQoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8emVuLWljb24gKGNsaWNrKT1cIm1pbkRvd24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL25nLXplbmR1aXQvaWNvbnMvYXJyb3ctZG93bi1zbWFsbC5zdmdcIj48L3plbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFtLXBtLXBpY2tlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlVGltZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpc1BNID8gJ1BNJyA6ICdBTSd9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVRpbWUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXNQTSA/ICdBTScgOiAnUE0nfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGludFwiXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwiaGludFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoaW50LWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7aGludC5kZXNjcmlwdGlvbn19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhpbnQtZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SGludERhdGUoaGludC5kYXRlKVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2hpbnQubWFza1RleHR9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIlxuICAgICAgICAgICAgICAgICAqbmdJZj1cIiFhdXRvQ29uZmlybSB8fCBzaG93VGltZVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXN0cm9rZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgQ2xlYXJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXN0cm9rZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIV9kYXRlVG9TZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tZmxhdFwiPlxuICAgICAgICAgICAgICAgICAgICBBcHBseVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb250aFBpY2tlclZpc2libGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGgtcGlja2VyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXlzLXRvb2xiYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIChjbGljayk9XCJwcmV2WWVhcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5uYXZpZ2F0ZV9iZWZvcmU8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93WWVhclBpY2tlcigpXCI+e3sgY3VycmVudFNsb3QgfCBkYXRlOiAneXl5eScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwibmV4dFllYXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+bmF2aWdhdGVfbmV4dDwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb250aHMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGgtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtb250aCBvZiBtb250aHM7IGluZGV4IGFzIGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE1vbnRoKGluZGV4KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1vbnRoIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInllYXJQaWNrZXJWaXNpYmxlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vbnRoLXBpY2tlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5cy10b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwicHJldlllYXJHcm91cCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5uYXZpZ2F0ZV9iZWZvcmU8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93WWVhclBpY2tlcigpXCI+e3sgY3VycmVudFNsb3QgfCBkYXRlOiAneXl5eScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwibmV4dFllYXJHcm91cCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5uYXZpZ2F0ZV9uZXh0PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vbnRocy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHllYXIgb2YgeWVhcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0WWVhcih5ZWFyKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHllYXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtbW9kYWwtZXh0cmEtc3BhY2VcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|