tango-app-ui-analyse-report 3.3.1-alpha.13 → 3.3.1-alpha.15
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.
|
@@ -22,7 +22,7 @@ export class UserReportComponent {
|
|
|
22
22
|
customName = '';
|
|
23
23
|
standardData = [{ name: 'Template A', value: 'A' }, { name: 'Template B', value: 'B' }, { name: 'Template C', value: 'C' }, { name: 'Template D', value: 'D' }];
|
|
24
24
|
costomButtons = ['Metrics', 'Comparision', 'Time Filter'];
|
|
25
|
-
metricsData = [
|
|
25
|
+
metricsData = [];
|
|
26
26
|
comparisionData = ['WTD', 'MTD', 'None'];
|
|
27
27
|
filterData = ['hour', 'day'];
|
|
28
28
|
infraTable = [];
|
|
@@ -38,6 +38,7 @@ export class UserReportComponent {
|
|
|
38
38
|
dynamicData = {};
|
|
39
39
|
displayedColumns = [];
|
|
40
40
|
pageSize = [10, 20, 30];
|
|
41
|
+
clientData = [];
|
|
41
42
|
destroy$ = new Subject();
|
|
42
43
|
constructor(modalservice, gs, service, toast) {
|
|
43
44
|
this.modalservice = modalservice;
|
|
@@ -49,10 +50,12 @@ export class UserReportComponent {
|
|
|
49
50
|
this.destroy$.next(true);
|
|
50
51
|
this.destroy$.complete();
|
|
51
52
|
}
|
|
53
|
+
headerData;
|
|
52
54
|
ngOnInit() {
|
|
53
55
|
this.selectedData = this.standardData[0];
|
|
54
56
|
this.gs.dataRangeValue.pipe(takeUntil(this.destroy$), debounceTime(300)).subscribe((data) => {
|
|
55
57
|
if (data !== null) {
|
|
58
|
+
this.headerData = data;
|
|
56
59
|
if (data?.client === '430') {
|
|
57
60
|
const isTemplateEExists = this.standardData.some((item) => item.value === 'E');
|
|
58
61
|
if (!isTemplateEExists) {
|
|
@@ -78,9 +81,36 @@ export class UserReportComponent {
|
|
|
78
81
|
else {
|
|
79
82
|
this.customCreate();
|
|
80
83
|
}
|
|
84
|
+
setTimeout(() => {
|
|
85
|
+
const clientData = JSON.parse(localStorage.getItem("client-details") || "{}");
|
|
86
|
+
this.clientData = clientData;
|
|
87
|
+
const limit = clientData?.bouncedLimit?.value ?? clientData?.bouncedLimitValue ?? '';
|
|
88
|
+
const conv = clientData?.conversion?.value ?? clientData?.conversionValue ?? '';
|
|
89
|
+
if (this.headerData.client === '452') {
|
|
90
|
+
this.metricsData = [{ name: `Less than ${limit} mins`, checked: false, value: "Bounced Count" }, { name: `${limit} - ${conv} mins`, checked: false, value: 'Missed Opportunity Count' }, { name: `More than ${limit} mins`, checked: false, value: 'Engagers Count' }, { name: `More than ${conv} mins Rate`, checked: false, value: 'Conversion Rate' }, { name: 'Age', checked: false, value: 'age' }, { name: 'Gender', checked: false, value: 'gender' }, { name: 'NOB', checked: false, value: 'nob' }, { name: 'Avg Infra Downtime (mins)', checked: false, value: 'Avg Infra Downtime (mins)' }];
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.metricsData = [{ name: 'Potential Buyers', checked: false, value: 'Potential Buyers' }, { name: 'Bounced Footfall', checked: false, value: "Bounced Count" }, { name: 'Missed Opportunity', checked: false, value: 'Missed Opportunity Count' }, { name: 'Engagers Count', checked: false, value: 'Engagers Count' }, { name: 'Conversion', checked: false, value: 'Conversion Rate' }, { name: 'Age', checked: false, value: 'age' }, { name: 'Gender', checked: false, value: 'gender' }, { name: 'NOB', checked: false, value: 'nob' }, { name: 'Avg Infra Downtime (mins)', checked: false, value: 'Avg Infra Downtime (mins)' }];
|
|
94
|
+
}
|
|
95
|
+
}, 100);
|
|
81
96
|
}
|
|
82
97
|
});
|
|
83
98
|
}
|
|
99
|
+
getDisplayName(column, row) {
|
|
100
|
+
const client = this.headerData?.client;
|
|
101
|
+
const limit = this.clientData?.bouncedLimit?.value ?? this.clientData?.bouncedLimitValue ?? '';
|
|
102
|
+
const conv = this.clientData?.conversion?.value ?? this.clientData?.conversionValue ?? '';
|
|
103
|
+
if (client === '452') {
|
|
104
|
+
const customLabels = {
|
|
105
|
+
'Bounced Count': `Less than ${limit} mins`,
|
|
106
|
+
'Engagers Count': `More than ${limit} mins`,
|
|
107
|
+
'Conversion Rate': `More than ${conv} mins Rate`,
|
|
108
|
+
'Missed Opportunity Count': `${limit} - ${conv} mins`,
|
|
109
|
+
};
|
|
110
|
+
return customLabels[column] ?? column;
|
|
111
|
+
}
|
|
112
|
+
return column;
|
|
113
|
+
}
|
|
84
114
|
getTemplates() {
|
|
85
115
|
this.infraTable = [];
|
|
86
116
|
this.loading = true;
|
|
@@ -90,7 +120,12 @@ export class UserReportComponent {
|
|
|
90
120
|
this.totalCount = res.data.totalCount;
|
|
91
121
|
this.pageSize = this.totalCount < 10 ? [this.totalCount] : [10, 20, 30];
|
|
92
122
|
this.dynamicData.limit = this.totalCount < 10 ? this.totalCount : this.dynamicData.limit;
|
|
93
|
-
this.
|
|
123
|
+
if (this.headerData.client === '452') {
|
|
124
|
+
this.displayedColumns = Object.keys(this.infraTable[0]).filter(col => col !== 'Potential Buyers');
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
this.displayedColumns = Object.keys(this.infraTable[0]);
|
|
128
|
+
}
|
|
94
129
|
this.loading = false;
|
|
95
130
|
this.noData = false;
|
|
96
131
|
}
|
|
@@ -176,7 +211,12 @@ export class UserReportComponent {
|
|
|
176
211
|
this.totalCount = res.data.totalCount;
|
|
177
212
|
this.pageSize = this.totalCount < 10 ? [this.totalCount] : [10, 20, 30];
|
|
178
213
|
this.dynamicData.limit = this.totalCount < 10 ? this.totalCount : this.dynamicData.limit;
|
|
179
|
-
this.
|
|
214
|
+
if (this.headerData.client === '452') {
|
|
215
|
+
this.displayedColumns = Object.keys(this.infraTable[0]).filter(col => col !== 'Potential Buyers');
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
this.displayedColumns = Object.keys(this.infraTable[0]);
|
|
219
|
+
}
|
|
180
220
|
this.loading = false;
|
|
181
221
|
this.noData = false;
|
|
182
222
|
}
|
|
@@ -315,13 +355,13 @@ export class UserReportComponent {
|
|
|
315
355
|
this.dynamicData.search = '';
|
|
316
356
|
}
|
|
317
357
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserReportComponent, deps: [{ token: i1.NgbModal }, { token: i2.GlobalStateService }, { token: i3.AnalysereportService }, { token: i4.ToastService }], target: i0.ɵɵFactoryTarget.Component });
|
|
318
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: UserReportComponent, selector: "lib-user-report", viewQueries: [{ propertyName: "confirmationModal", first: true, predicate: ["confirmationModal"], descendants: true }], ngImport: i0, template: "<div class=\"row mb-5\">\r\n <div [ngClass]=\"showsidenav ? 'col-sm-3':'d-none'\">\r\n <div class=\"card position-relative h-100\">\r\n <div class=\"card-body p-0 overflow-auto\">\r\n <div ngbAccordion [closeOthers]=\"true\">\r\n <!-- Standard Template Start -->\r\n\r\n <div ngbAccordionItem [collapsed]=\"openAccordian\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton (click)=\"reset()\">\r\n <div class=\"d-grid\">Standard Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"pt-0 border-0\">\r\n <ng-template class=\"d-flex flex-column justify-content-between\">\r\n <div class=\"card-body h-auto p-0\">\r\n <div class=\"card-label\">\r\n Please select a report to preview \r\n </div>\r\n <div *ngFor=\"let data of standardData\" class=\"mt-5 cursor-pointer\">\r\n <div (click)=\"selectRadio(data)\" class=\"d-flex align-items-center\">\r\n <input [checked]=\"selectedData.name === data.name\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Standard Template End -->\r\n <!-- Custom Template Start -->\r\n <!-- *ngIf=\"!openCustom\" -->\r\n <div ngbAccordionItem [collapsed]=\"!openCustom\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading pt-0\" ngbAccordionButton (click)=\"resetValues()\">\r\n <div class=\"d-grid\">Custom Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"card-body h-100px p-0\">\r\n <div class=\"card-label\">\r\n Please select your data points to add into the reports\r\n </div>\r\n <div class=\"btnheader w-100 p-2 mt-5\">\r\n <span class=\"cursor-pointer px-2\" (click)=\"customOption(button)\" [ngClass]=\"this.custombtn === button ? 'btn ':''\" *ngFor=\"let button of costomButtons\">{{button}}</span>\r\n </div>\r\n <div [ngClass]=\"!infraTable.length ? 'h-100 overflow-auto' : ''\">\r\n <div *ngIf=\"custombtn === 'Metrics'\">\r\n <div *ngFor=\"let data of metricsData\" class=\"mt-5\">\r\n <div>\r\n <input type=\"checkbox\" class=\"mt-2 cursor-pointer\" [(ngModel)]=\"data.checked\">\r\n <span class=\"ms-5 standard fs-4\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Comparision'\">\r\n <div *ngFor=\"let data of comparisionData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getComparision(data)\">\r\n <input [checked]=\"comparisionFilter === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Time Filter'\">\r\n <div *ngFor=\"let data of filterData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getFilter(data)\">\r\n <input [checked]=\"filterDataList === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data === 'hour' ? 'By Hour' : 'By Date'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div *ngIf=\"openCustom\" class=\"d-flex w-100\" [ngClass]=\"!loading ? 'mt-5':''\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3 mb-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\"\r\n (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\"\r\n class=\"btn btn-default btn-primary w-50 ms-3 mb-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"dynamicData.limit = 10;customCreate()\"\r\n class=\"btn btn-default btn-primary w-50 ms-3 mb-3\">View</button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <!-- Custom Template End -->\r\n \r\n </div>\r\n\r\n \r\n </div>\r\n <!-- <div class=\"card-footer border-0 mt-5\"> -->\r\n <!-- <button *ngIf=\"!openAccordian\" (click)=\"createCustom()\" class=\"btn btn-primary w-100\">\r\n Create Custom Template\r\n </button> -->\r\n <!-- <div *ngIf=\"openCustom\" class=\"d-flex w-100 mt-5\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\" (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\" class=\"btn btn-default btn-primary w-50 ms-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"customCreate()\" class=\"btn btn-default btn-primary w-50 ms-3\">View</button>\r\n </div> -->\r\n <!-- </div> -->\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27259 12.6363L4.63623 8.99989L8.27259 5.36353M13.3635 12.6363L9.72714 8.99989L13.3635 5.36353\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-sm-9':'col-sm-12'\">\r\n <div class=\"card position-relative min-h-sm-300px min-h-md-400px min-h-xl-550px min-h-lg-500px max-h-auto\">\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title\">\r\n <span class=\"card-label\">{{selectedData?.name || 'Custom Template'}}</span>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control ps-14 me-2\" (change)=\"searchData()\" [(ngModel)]=\"this.dynamicData.search\" placeholder=\"Search\"\r\n autocomplete=\"off\"/>\r\n </div> \r\n <button class=\"btn btn-default btn-outline me-3\" (click)=\"ExportasXlsx()\" [disabled]=\"!infraTable.length\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> <span class=\"ms-3\">Export</span></button>\r\n <!-- <button class=\"btn btn-default btn-outline\" (click)=\"shareData()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10164_5579)\"><path d=\"M18.3332 1.66675L9.1665 10.8334M18.3332 1.66675L12.4998 18.3334L9.1665 10.8334M18.3332 1.66675L1.6665 7.50008L9.1665 10.8334\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g><defs><clipPath id=\"clip0_10164_5579\"><rect width=\"20\" height=\"20\" fill=\"white\"/></clipPath></defs></svg><span *ngIf=\"!showsidenav\" class=\"ms-3\">Share</span>\r\n </button> -->\r\n </div>\r\n </div>\r\n <div class=\"card-body\"> \r\n <ng-container *ngIf=\"loading\">\r\n <div class=\"row loader card d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"row\" *ngIf=\"!loading && noData\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-body my-8 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Report Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\" *ngIf=\"!loading && !noData && infraTable.length\">\r\n <table class=\"table bottom-border text-nowrap w-100\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of displayedColumns;let i=index\">\r\n <div class=\"cursor-pointer\" (click)=\"sortData(column)\">\r\n <span>{{column}}</span>\r\n <span *ngIf=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase()&& this.dynamicData.sortBy !== 1 || this.dynamicData.sort.toLowerCase() !== column.toLowerCase()\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n [attr.stroke]=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase() ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase() && this.dynamicData.sortBy !== -1\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n [attr.stroke]=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase() ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of infraTable; let i = index\">\r\n <td *ngFor=\"let key of displayedColumns\">\r\n <span>\r\n {{ key === 'date' ? (data[key] | date: 'dd MMM, YYYY') : (\r\n key.includes('Avg time to Interact') && data[key] === '-1'\r\n ? '0' : (data[key] !== '' && data[key] !== null && data[key] !== undefined\r\n ? data[key] : '--'))\r\n }}\r\n </span>\r\n \r\n </td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n \r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <lib-pagination [itemsPerPage]=\"dynamicData.limit\"\r\n [currentPage]=\"(dynamicData.offset + 1)\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"pageSize\" [pageSize]=\"dynamicData.limit\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\" *ngIf=\"!loading && !noData && infraTable.length\"></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmationModal let-modal>\r\n <div class=\"card border-0\">\r\n <div class=\"card-body\">\r\n <img src=\"./assets/tango/Images/custompopup-icon.png\">\r\n <div class=\" mt-5\">\r\n <span class=\"header fw-bold\">Custom Template Name</span>\r\n <div class=\"mt-3 sub-header fw-semibold\">Are you sure you want to delete the user globally?</div>\r\n </div>\r\n <div class=\"mt-10\">\r\n <label class=\"sub-header\" style=\"color: #344054; font-weight: 400;\" for=\"custom-name\">Template Name</label>\r\n <input type=\"text\" [(ngModel)]=\"customName\" class=\"form-control mt-2\" id=\"custom-Name\">\r\n </div>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <button type=\"button\" class=\"btn btn-default btn-outline w-50 me-2\" (click)=\"modal.dismiss()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary w-50 ms-2\" [disabled]=\"customName === ''\" (click)=\"modal.close()\">Apply</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>", styles: [".backButtonright{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;right:-10px;z-index:5}.backButtonleft{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-10px;z-index:5}.dynamicClass1{display:none}.card-label{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.standard{color:var(--Gray-700, #344054);font-size:16px;font-weight:500;line-height:24px}.radio{width:16px!important;height:16px!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.img-src{width:25%!important}.btnheader{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--Gray-50, #F9FAFB)}.btnheader .btn{background:#fff!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:-3px 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}tbody tr{vertical-align:middle;height:70px!important}.header{color:var(--Gray-900, #101828)!important;font-size:18px!important;line-height:28px!important}.sub-header{color:var(--Gray-500, #667085)!important;font-size:14px!important;line-height:20px}.hidden{visibility:hidden}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: i6.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: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i1.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i1.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i1.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i1.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i1.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "pipe", type: i5.DatePipe, name: "date" }] });
|
|
358
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: UserReportComponent, selector: "lib-user-report", viewQueries: [{ propertyName: "confirmationModal", first: true, predicate: ["confirmationModal"], descendants: true }], ngImport: i0, template: "<div class=\"row mb-5\">\r\n <div [ngClass]=\"showsidenav ? 'col-sm-3':'d-none'\">\r\n <div class=\"card position-relative h-100\">\r\n <div class=\"card-body p-0 overflow-auto\">\r\n <div ngbAccordion [closeOthers]=\"true\">\r\n <!-- Standard Template Start -->\r\n\r\n <div ngbAccordionItem [collapsed]=\"openAccordian\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton (click)=\"reset()\">\r\n <div class=\"d-grid\">Standard Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"pt-0 border-0\">\r\n <ng-template class=\"d-flex flex-column justify-content-between\">\r\n <div class=\"card-body h-auto p-0\">\r\n <div class=\"card-label\">\r\n Please select a report to preview \r\n </div>\r\n <div *ngFor=\"let data of standardData\" class=\"mt-5 cursor-pointer\">\r\n <div (click)=\"selectRadio(data)\" class=\"d-flex align-items-center\">\r\n <input [checked]=\"selectedData.name === data.name\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Standard Template End -->\r\n <!-- Custom Template Start -->\r\n <!-- *ngIf=\"!openCustom\" -->\r\n <div ngbAccordionItem [collapsed]=\"!openCustom\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading pt-0\" ngbAccordionButton (click)=\"resetValues()\">\r\n <div class=\"d-grid\">Custom Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"card-body h-100px p-0\">\r\n <div class=\"card-label\">\r\n Please select your data points to add into the reports\r\n </div>\r\n <div class=\"btnheader w-100 p-2 mt-5\">\r\n <span class=\"cursor-pointer px-2\" (click)=\"customOption(button)\" [ngClass]=\"this.custombtn === button ? 'btn ':''\" *ngFor=\"let button of costomButtons\">{{button}}</span>\r\n </div>\r\n <div [ngStyle]=\"{ 'height': infraTable.length ? 'auto' : '100%' }\" class=\"overflow-auto\">\r\n <div *ngIf=\"custombtn === 'Metrics'\">\r\n <div *ngFor=\"let data of metricsData\" class=\"mt-5\">\r\n <div>\r\n <input type=\"checkbox\" class=\"mt-2 cursor-pointer\" [(ngModel)]=\"data.checked\">\r\n <span class=\"ms-5 standard fs-4\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Comparision'\">\r\n <div *ngFor=\"let data of comparisionData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getComparision(data)\">\r\n <input [checked]=\"comparisionFilter === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Time Filter'\">\r\n <div *ngFor=\"let data of filterData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getFilter(data)\">\r\n <input [checked]=\"filterDataList === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data === 'hour' ? 'By Hour' : 'By Date'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div *ngIf=\"openCustom\" class=\"d-flex w-100\" [ngClass]=\"!loading ? 'mt-5':''\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3 mb-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\"\r\n (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\"\r\n class=\"btn btn-default btn-primary w-50 ms-3 mb-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"dynamicData.limit = 10;customCreate()\"\r\n class=\"btn btn-default btn-primary w-50 ms-3 mb-3\">View</button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <!-- Custom Template End -->\r\n \r\n </div>\r\n\r\n \r\n </div>\r\n <!-- <div class=\"card-footer border-0 mt-5\"> -->\r\n <!-- <button *ngIf=\"!openAccordian\" (click)=\"createCustom()\" class=\"btn btn-primary w-100\">\r\n Create Custom Template\r\n </button> -->\r\n <!-- <div *ngIf=\"openCustom\" class=\"d-flex w-100 mt-5\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\" (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\" class=\"btn btn-default btn-primary w-50 ms-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"customCreate()\" class=\"btn btn-default btn-primary w-50 ms-3\">View</button>\r\n </div> -->\r\n <!-- </div> -->\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27259 12.6363L4.63623 8.99989L8.27259 5.36353M13.3635 12.6363L9.72714 8.99989L13.3635 5.36353\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-sm-9':'col-sm-12'\">\r\n <div class=\"card position-relative min-h-sm-300px min-h-md-400px min-h-xl-550px min-h-lg-500px max-h-auto\">\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title\">\r\n <span class=\"card-label\">{{selectedData?.name || 'Custom Template'}}</span>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control ps-14 me-2\" (change)=\"searchData()\" [(ngModel)]=\"this.dynamicData.search\" placeholder=\"Search\"\r\n autocomplete=\"off\"/>\r\n </div> \r\n <button class=\"btn btn-default btn-outline me-3\" (click)=\"ExportasXlsx()\" [disabled]=\"!infraTable.length\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> <span class=\"ms-3\">Export</span></button>\r\n <!-- <button class=\"btn btn-default btn-outline\" (click)=\"shareData()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10164_5579)\"><path d=\"M18.3332 1.66675L9.1665 10.8334M18.3332 1.66675L12.4998 18.3334L9.1665 10.8334M18.3332 1.66675L1.6665 7.50008L9.1665 10.8334\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g><defs><clipPath id=\"clip0_10164_5579\"><rect width=\"20\" height=\"20\" fill=\"white\"/></clipPath></defs></svg><span *ngIf=\"!showsidenav\" class=\"ms-3\">Share</span>\r\n </button> -->\r\n </div>\r\n </div>\r\n <div class=\"card-body\"> \r\n <ng-container *ngIf=\"loading\">\r\n <div class=\"row loader card d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"row\" *ngIf=\"!loading && noData\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-body my-8 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Report Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\" *ngIf=\"!loading && !noData && infraTable.length\">\r\n <table class=\"table bottom-border text-nowrap w-100\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of displayedColumns;let i=index\">\r\n <div class=\"cursor-pointer\" (click)=\"sortData(column)\">\r\n <span>{{ getDisplayName(column, infraTable[0]) }}</span>\r\n <span *ngIf=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase()&& this.dynamicData.sortBy !== 1 || this.dynamicData.sort.toLowerCase() !== column.toLowerCase()\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n [attr.stroke]=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase() ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase() && this.dynamicData.sortBy !== -1\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n [attr.stroke]=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase() ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of infraTable; let i = index\">\r\n <td *ngFor=\"let key of displayedColumns\">\r\n <span>\r\n {{ key === 'date' ? (data[key] | date: 'dd MMM, YYYY') : (\r\n key.includes('Avg time to Interact') && data[key] === '-1'\r\n ? '0' : (data[key] !== '' && data[key] !== null && data[key] !== undefined\r\n ? data[key] : '--'))\r\n }}\r\n </span>\r\n \r\n </td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n \r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <lib-pagination [itemsPerPage]=\"dynamicData.limit\"\r\n [currentPage]=\"(dynamicData.offset + 1)\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"pageSize\" [pageSize]=\"dynamicData.limit\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\" *ngIf=\"!loading && !noData && infraTable.length\"></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmationModal let-modal>\r\n <div class=\"card border-0\">\r\n <div class=\"card-body\">\r\n <img src=\"./assets/tango/Images/custompopup-icon.png\">\r\n <div class=\" mt-5\">\r\n <span class=\"header fw-bold\">Custom Template Name</span>\r\n <div class=\"mt-3 sub-header fw-semibold\">Are you sure you want to delete the user globally?</div>\r\n </div>\r\n <div class=\"mt-10\">\r\n <label class=\"sub-header\" style=\"color: #344054; font-weight: 400;\" for=\"custom-name\">Template Name</label>\r\n <input type=\"text\" [(ngModel)]=\"customName\" class=\"form-control mt-2\" id=\"custom-Name\">\r\n </div>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <button type=\"button\" class=\"btn btn-default btn-outline w-50 me-2\" (click)=\"modal.dismiss()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary w-50 ms-2\" [disabled]=\"customName === ''\" (click)=\"modal.close()\">Apply</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>", styles: [".backButtonright{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;right:-10px;z-index:5}.backButtonleft{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-10px;z-index:5}.dynamicClass1{display:none}.card-label{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.standard{color:var(--Gray-700, #344054);font-size:16px;font-weight:500;line-height:24px}.radio{width:16px!important;height:16px!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.img-src{width:25%!important}.btnheader{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--Gray-50, #F9FAFB)}.btnheader .btn{background:#fff!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:-3px 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}tbody tr{vertical-align:middle;height:70px!important}.header{color:var(--Gray-900, #101828)!important;font-size:18px!important;line-height:28px!important}.sub-header{color:var(--Gray-500, #667085)!important;font-size:14px!important;line-height:20px}.hidden{visibility:hidden}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: i6.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: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i1.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i1.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i1.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i1.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i1.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "pipe", type: i5.DatePipe, name: "date" }] });
|
|
319
359
|
}
|
|
320
360
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserReportComponent, decorators: [{
|
|
321
361
|
type: Component,
|
|
322
|
-
args: [{ selector: 'lib-user-report', template: "<div class=\"row mb-5\">\r\n <div [ngClass]=\"showsidenav ? 'col-sm-3':'d-none'\">\r\n <div class=\"card position-relative h-100\">\r\n <div class=\"card-body p-0 overflow-auto\">\r\n <div ngbAccordion [closeOthers]=\"true\">\r\n <!-- Standard Template Start -->\r\n\r\n <div ngbAccordionItem [collapsed]=\"openAccordian\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton (click)=\"reset()\">\r\n <div class=\"d-grid\">Standard Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"pt-0 border-0\">\r\n <ng-template class=\"d-flex flex-column justify-content-between\">\r\n <div class=\"card-body h-auto p-0\">\r\n <div class=\"card-label\">\r\n Please select a report to preview \r\n </div>\r\n <div *ngFor=\"let data of standardData\" class=\"mt-5 cursor-pointer\">\r\n <div (click)=\"selectRadio(data)\" class=\"d-flex align-items-center\">\r\n <input [checked]=\"selectedData.name === data.name\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Standard Template End -->\r\n <!-- Custom Template Start -->\r\n <!-- *ngIf=\"!openCustom\" -->\r\n <div ngbAccordionItem [collapsed]=\"!openCustom\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading pt-0\" ngbAccordionButton (click)=\"resetValues()\">\r\n <div class=\"d-grid\">Custom Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"card-body h-100px p-0\">\r\n <div class=\"card-label\">\r\n Please select your data points to add into the reports\r\n </div>\r\n <div class=\"btnheader w-100 p-2 mt-5\">\r\n <span class=\"cursor-pointer px-2\" (click)=\"customOption(button)\" [ngClass]=\"this.custombtn === button ? 'btn ':''\" *ngFor=\"let button of costomButtons\">{{button}}</span>\r\n </div>\r\n <div [ngClass]=\"!infraTable.length ? 'h-100 overflow-auto' : ''\">\r\n <div *ngIf=\"custombtn === 'Metrics'\">\r\n <div *ngFor=\"let data of metricsData\" class=\"mt-5\">\r\n <div>\r\n <input type=\"checkbox\" class=\"mt-2 cursor-pointer\" [(ngModel)]=\"data.checked\">\r\n <span class=\"ms-5 standard fs-4\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Comparision'\">\r\n <div *ngFor=\"let data of comparisionData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getComparision(data)\">\r\n <input [checked]=\"comparisionFilter === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Time Filter'\">\r\n <div *ngFor=\"let data of filterData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getFilter(data)\">\r\n <input [checked]=\"filterDataList === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data === 'hour' ? 'By Hour' : 'By Date'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div *ngIf=\"openCustom\" class=\"d-flex w-100\" [ngClass]=\"!loading ? 'mt-5':''\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3 mb-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\"\r\n (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\"\r\n class=\"btn btn-default btn-primary w-50 ms-3 mb-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"dynamicData.limit = 10;customCreate()\"\r\n class=\"btn btn-default btn-primary w-50 ms-3 mb-3\">View</button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <!-- Custom Template End -->\r\n \r\n </div>\r\n\r\n \r\n </div>\r\n <!-- <div class=\"card-footer border-0 mt-5\"> -->\r\n <!-- <button *ngIf=\"!openAccordian\" (click)=\"createCustom()\" class=\"btn btn-primary w-100\">\r\n Create Custom Template\r\n </button> -->\r\n <!-- <div *ngIf=\"openCustom\" class=\"d-flex w-100 mt-5\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\" (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\" class=\"btn btn-default btn-primary w-50 ms-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"customCreate()\" class=\"btn btn-default btn-primary w-50 ms-3\">View</button>\r\n </div> -->\r\n <!-- </div> -->\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27259 12.6363L4.63623 8.99989L8.27259 5.36353M13.3635 12.6363L9.72714 8.99989L13.3635 5.36353\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-sm-9':'col-sm-12'\">\r\n <div class=\"card position-relative min-h-sm-300px min-h-md-400px min-h-xl-550px min-h-lg-500px max-h-auto\">\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title\">\r\n <span class=\"card-label\">{{selectedData?.name || 'Custom Template'}}</span>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control ps-14 me-2\" (change)=\"searchData()\" [(ngModel)]=\"this.dynamicData.search\" placeholder=\"Search\"\r\n autocomplete=\"off\"/>\r\n </div> \r\n <button class=\"btn btn-default btn-outline me-3\" (click)=\"ExportasXlsx()\" [disabled]=\"!infraTable.length\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> <span class=\"ms-3\">Export</span></button>\r\n <!-- <button class=\"btn btn-default btn-outline\" (click)=\"shareData()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10164_5579)\"><path d=\"M18.3332 1.66675L9.1665 10.8334M18.3332 1.66675L12.4998 18.3334L9.1665 10.8334M18.3332 1.66675L1.6665 7.50008L9.1665 10.8334\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g><defs><clipPath id=\"clip0_10164_5579\"><rect width=\"20\" height=\"20\" fill=\"white\"/></clipPath></defs></svg><span *ngIf=\"!showsidenav\" class=\"ms-3\">Share</span>\r\n </button> -->\r\n </div>\r\n </div>\r\n <div class=\"card-body\"> \r\n <ng-container *ngIf=\"loading\">\r\n <div class=\"row loader card d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"row\" *ngIf=\"!loading && noData\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-body my-8 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Report Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\" *ngIf=\"!loading && !noData && infraTable.length\">\r\n <table class=\"table bottom-border text-nowrap w-100\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of displayedColumns;let i=index\">\r\n <div class=\"cursor-pointer\" (click)=\"sortData(column)\">\r\n <span>{{column}}</span>\r\n <span *ngIf=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase()&& this.dynamicData.sortBy !== 1 || this.dynamicData.sort.toLowerCase() !== column.toLowerCase()\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n [attr.stroke]=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase() ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase() && this.dynamicData.sortBy !== -1\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n [attr.stroke]=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase() ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of infraTable; let i = index\">\r\n <td *ngFor=\"let key of displayedColumns\">\r\n <span>\r\n {{ key === 'date' ? (data[key] | date: 'dd MMM, YYYY') : (\r\n key.includes('Avg time to Interact') && data[key] === '-1'\r\n ? '0' : (data[key] !== '' && data[key] !== null && data[key] !== undefined\r\n ? data[key] : '--'))\r\n }}\r\n </span>\r\n \r\n </td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n \r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <lib-pagination [itemsPerPage]=\"dynamicData.limit\"\r\n [currentPage]=\"(dynamicData.offset + 1)\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"pageSize\" [pageSize]=\"dynamicData.limit\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\" *ngIf=\"!loading && !noData && infraTable.length\"></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmationModal let-modal>\r\n <div class=\"card border-0\">\r\n <div class=\"card-body\">\r\n <img src=\"./assets/tango/Images/custompopup-icon.png\">\r\n <div class=\" mt-5\">\r\n <span class=\"header fw-bold\">Custom Template Name</span>\r\n <div class=\"mt-3 sub-header fw-semibold\">Are you sure you want to delete the user globally?</div>\r\n </div>\r\n <div class=\"mt-10\">\r\n <label class=\"sub-header\" style=\"color: #344054; font-weight: 400;\" for=\"custom-name\">Template Name</label>\r\n <input type=\"text\" [(ngModel)]=\"customName\" class=\"form-control mt-2\" id=\"custom-Name\">\r\n </div>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <button type=\"button\" class=\"btn btn-default btn-outline w-50 me-2\" (click)=\"modal.dismiss()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary w-50 ms-2\" [disabled]=\"customName === ''\" (click)=\"modal.close()\">Apply</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>", styles: [".backButtonright{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;right:-10px;z-index:5}.backButtonleft{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-10px;z-index:5}.dynamicClass1{display:none}.card-label{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.standard{color:var(--Gray-700, #344054);font-size:16px;font-weight:500;line-height:24px}.radio{width:16px!important;height:16px!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.img-src{width:25%!important}.btnheader{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--Gray-50, #F9FAFB)}.btnheader .btn{background:#fff!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:-3px 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}tbody tr{vertical-align:middle;height:70px!important}.header{color:var(--Gray-900, #101828)!important;font-size:18px!important;line-height:28px!important}.sub-header{color:var(--Gray-500, #667085)!important;font-size:14px!important;line-height:20px}.hidden{visibility:hidden}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}\n"] }]
|
|
362
|
+
args: [{ selector: 'lib-user-report', template: "<div class=\"row mb-5\">\r\n <div [ngClass]=\"showsidenav ? 'col-sm-3':'d-none'\">\r\n <div class=\"card position-relative h-100\">\r\n <div class=\"card-body p-0 overflow-auto\">\r\n <div ngbAccordion [closeOthers]=\"true\">\r\n <!-- Standard Template Start -->\r\n\r\n <div ngbAccordionItem [collapsed]=\"openAccordian\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton (click)=\"reset()\">\r\n <div class=\"d-grid\">Standard Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"pt-0 border-0\">\r\n <ng-template class=\"d-flex flex-column justify-content-between\">\r\n <div class=\"card-body h-auto p-0\">\r\n <div class=\"card-label\">\r\n Please select a report to preview \r\n </div>\r\n <div *ngFor=\"let data of standardData\" class=\"mt-5 cursor-pointer\">\r\n <div (click)=\"selectRadio(data)\" class=\"d-flex align-items-center\">\r\n <input [checked]=\"selectedData.name === data.name\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Standard Template End -->\r\n <!-- Custom Template Start -->\r\n <!-- *ngIf=\"!openCustom\" -->\r\n <div ngbAccordionItem [collapsed]=\"!openCustom\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading pt-0\" ngbAccordionButton (click)=\"resetValues()\">\r\n <div class=\"d-grid\">Custom Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"card-body h-100px p-0\">\r\n <div class=\"card-label\">\r\n Please select your data points to add into the reports\r\n </div>\r\n <div class=\"btnheader w-100 p-2 mt-5\">\r\n <span class=\"cursor-pointer px-2\" (click)=\"customOption(button)\" [ngClass]=\"this.custombtn === button ? 'btn ':''\" *ngFor=\"let button of costomButtons\">{{button}}</span>\r\n </div>\r\n <div [ngStyle]=\"{ 'height': infraTable.length ? 'auto' : '100%' }\" class=\"overflow-auto\">\r\n <div *ngIf=\"custombtn === 'Metrics'\">\r\n <div *ngFor=\"let data of metricsData\" class=\"mt-5\">\r\n <div>\r\n <input type=\"checkbox\" class=\"mt-2 cursor-pointer\" [(ngModel)]=\"data.checked\">\r\n <span class=\"ms-5 standard fs-4\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Comparision'\">\r\n <div *ngFor=\"let data of comparisionData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getComparision(data)\">\r\n <input [checked]=\"comparisionFilter === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Time Filter'\">\r\n <div *ngFor=\"let data of filterData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getFilter(data)\">\r\n <input [checked]=\"filterDataList === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data === 'hour' ? 'By Hour' : 'By Date'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div *ngIf=\"openCustom\" class=\"d-flex w-100\" [ngClass]=\"!loading ? 'mt-5':''\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3 mb-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\"\r\n (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\"\r\n class=\"btn btn-default btn-primary w-50 ms-3 mb-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"dynamicData.limit = 10;customCreate()\"\r\n class=\"btn btn-default btn-primary w-50 ms-3 mb-3\">View</button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <!-- Custom Template End -->\r\n \r\n </div>\r\n\r\n \r\n </div>\r\n <!-- <div class=\"card-footer border-0 mt-5\"> -->\r\n <!-- <button *ngIf=\"!openAccordian\" (click)=\"createCustom()\" class=\"btn btn-primary w-100\">\r\n Create Custom Template\r\n </button> -->\r\n <!-- <div *ngIf=\"openCustom\" class=\"d-flex w-100 mt-5\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\" (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\" class=\"btn btn-default btn-primary w-50 ms-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"customCreate()\" class=\"btn btn-default btn-primary w-50 ms-3\">View</button>\r\n </div> -->\r\n <!-- </div> -->\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27259 12.6363L4.63623 8.99989L8.27259 5.36353M13.3635 12.6363L9.72714 8.99989L13.3635 5.36353\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-sm-9':'col-sm-12'\">\r\n <div class=\"card position-relative min-h-sm-300px min-h-md-400px min-h-xl-550px min-h-lg-500px max-h-auto\">\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title\">\r\n <span class=\"card-label\">{{selectedData?.name || 'Custom Template'}}</span>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control ps-14 me-2\" (change)=\"searchData()\" [(ngModel)]=\"this.dynamicData.search\" placeholder=\"Search\"\r\n autocomplete=\"off\"/>\r\n </div> \r\n <button class=\"btn btn-default btn-outline me-3\" (click)=\"ExportasXlsx()\" [disabled]=\"!infraTable.length\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> <span class=\"ms-3\">Export</span></button>\r\n <!-- <button class=\"btn btn-default btn-outline\" (click)=\"shareData()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10164_5579)\"><path d=\"M18.3332 1.66675L9.1665 10.8334M18.3332 1.66675L12.4998 18.3334L9.1665 10.8334M18.3332 1.66675L1.6665 7.50008L9.1665 10.8334\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g><defs><clipPath id=\"clip0_10164_5579\"><rect width=\"20\" height=\"20\" fill=\"white\"/></clipPath></defs></svg><span *ngIf=\"!showsidenav\" class=\"ms-3\">Share</span>\r\n </button> -->\r\n </div>\r\n </div>\r\n <div class=\"card-body\"> \r\n <ng-container *ngIf=\"loading\">\r\n <div class=\"row loader card d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"row\" *ngIf=\"!loading && noData\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-body my-8 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Report Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\" *ngIf=\"!loading && !noData && infraTable.length\">\r\n <table class=\"table bottom-border text-nowrap w-100\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of displayedColumns;let i=index\">\r\n <div class=\"cursor-pointer\" (click)=\"sortData(column)\">\r\n <span>{{ getDisplayName(column, infraTable[0]) }}</span>\r\n <span *ngIf=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase()&& this.dynamicData.sortBy !== 1 || this.dynamicData.sort.toLowerCase() !== column.toLowerCase()\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n [attr.stroke]=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase() ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase() && this.dynamicData.sortBy !== -1\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n [attr.stroke]=\"this.dynamicData.sort.toLowerCase() === column.toLowerCase() ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of infraTable; let i = index\">\r\n <td *ngFor=\"let key of displayedColumns\">\r\n <span>\r\n {{ key === 'date' ? (data[key] | date: 'dd MMM, YYYY') : (\r\n key.includes('Avg time to Interact') && data[key] === '-1'\r\n ? '0' : (data[key] !== '' && data[key] !== null && data[key] !== undefined\r\n ? data[key] : '--'))\r\n }}\r\n </span>\r\n \r\n </td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n \r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <lib-pagination [itemsPerPage]=\"dynamicData.limit\"\r\n [currentPage]=\"(dynamicData.offset + 1)\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"pageSize\" [pageSize]=\"dynamicData.limit\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\" *ngIf=\"!loading && !noData && infraTable.length\"></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmationModal let-modal>\r\n <div class=\"card border-0\">\r\n <div class=\"card-body\">\r\n <img src=\"./assets/tango/Images/custompopup-icon.png\">\r\n <div class=\" mt-5\">\r\n <span class=\"header fw-bold\">Custom Template Name</span>\r\n <div class=\"mt-3 sub-header fw-semibold\">Are you sure you want to delete the user globally?</div>\r\n </div>\r\n <div class=\"mt-10\">\r\n <label class=\"sub-header\" style=\"color: #344054; font-weight: 400;\" for=\"custom-name\">Template Name</label>\r\n <input type=\"text\" [(ngModel)]=\"customName\" class=\"form-control mt-2\" id=\"custom-Name\">\r\n </div>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <button type=\"button\" class=\"btn btn-default btn-outline w-50 me-2\" (click)=\"modal.dismiss()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary w-50 ms-2\" [disabled]=\"customName === ''\" (click)=\"modal.close()\">Apply</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>", styles: [".backButtonright{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;right:-10px;z-index:5}.backButtonleft{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-10px;z-index:5}.dynamicClass1{display:none}.card-label{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.standard{color:var(--Gray-700, #344054);font-size:16px;font-weight:500;line-height:24px}.radio{width:16px!important;height:16px!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.img-src{width:25%!important}.btnheader{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--Gray-50, #F9FAFB)}.btnheader .btn{background:#fff!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:-3px 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}tbody tr{vertical-align:middle;height:70px!important}.header{color:var(--Gray-900, #101828)!important;font-size:18px!important;line-height:28px!important}.sub-header{color:var(--Gray-500, #667085)!important;font-size:14px!important;line-height:20px}.hidden{visibility:hidden}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}\n"] }]
|
|
323
363
|
}], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.GlobalStateService }, { type: i3.AnalysereportService }, { type: i4.ToastService }], propDecorators: { confirmationModal: [{
|
|
324
364
|
type: ViewChild,
|
|
325
365
|
args: ['confirmationModal']
|
|
326
366
|
}] } });
|
|
327
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS1yZXBvcnQvc3JjL2xpYi9jb21wb25lbnRzL3VzZXItcmVwb3J0L3VzZXItcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtcmVwb3J0L3NyYy9saWIvY29tcG9uZW50cy91c2VyLXJlcG9ydC91c2VyLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFrQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHckUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQVN4RCxNQUFNLE9BQU8sbUJBQW1CO0lBNkJWO0lBQThCO0lBQThCO0lBQXFDO0lBM0JyRixpQkFBaUIsQ0FBTTtJQUN2RCxRQUFRLENBQTBCO0lBQ2xDLE9BQU8sR0FBVyxJQUFJLENBQUM7SUFDdkIsTUFBTSxHQUFXLEtBQUssQ0FBQztJQUN2QixXQUFXLEdBQVcsSUFBSSxDQUFDO0lBQzNCLFVBQVUsR0FBVyxLQUFLLENBQUM7SUFDM0IsYUFBYSxHQUFXLEtBQUssQ0FBQztJQUM5QixVQUFVLEdBQU0sRUFBRSxDQUFDO0lBQ25CLFlBQVksR0FBTyxDQUFDLEVBQUMsSUFBSSxFQUFDLFlBQVksRUFBQyxLQUFLLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxJQUFJLEVBQUMsWUFBWSxFQUFDLEtBQUssRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLElBQUksRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsSUFBSSxFQUFDLFlBQVksRUFBQyxLQUFLLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQTtJQUM1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a0JBNlBnQjs7NEZEalBILG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7NEtBTUssaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCxPbkRlc3Ryb3ksT25Jbml0LFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWwsTmdiTW9kYWxNb2R1bGUsTmdiTW9kYWxSZWYgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEFuYWx5c2VyZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hbmFseXNlcmVwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXVzZXItcmVwb3J0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1yZXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi91c2VyLXJlcG9ydC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJSZXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsT25EZXN0cm95IHtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29uZmlybWF0aW9uTW9kYWwnKSBjb25maXJtYXRpb25Nb2RhbDogYW55O1xyXG4gIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZiB8IHVuZGVmaW5lZDtcclxuICBsb2FkaW5nOmJvb2xlYW4gPSB0cnVlO1xyXG4gIG5vRGF0YTpib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd3NpZGVuYXY6Ym9vbGVhbiA9IHRydWU7XHJcbiAgb3BlbkN1c3RvbTpib29sZWFuID0gZmFsc2U7XHJcbiAgb3BlbkFjY29yZGlhbjpib29sZWFuID0gZmFsc2U7XHJcbiAgY3VzdG9tTmFtZTphbnkgPScnO1xyXG4gIHN0YW5kYXJkRGF0YTphbnkgPSBbe25hbWU6J1RlbXBsYXRlIEEnLHZhbHVlOidBJ30se25hbWU6J1RlbXBsYXRlIEInLHZhbHVlOidCJ30se25hbWU6J1RlbXBsYXRlIEMnLHZhbHVlOidDJ30se25hbWU6J1RlbXBsYXRlIEQnLHZhbHVlOidEJ31dXHJcbiAgY29zdG9tQnV0dG9uczphbnkgPSBbJ01ldHJpY3MnLCdDb21wYXJpc2lvbicsJ1RpbWUgRmlsdGVyJ11cclxuICBtZXRyaWNzRGF0YTphbnkgPSBbe25hbWU6J1BvdGVudGlhbCBCdXllcnMnLGNoZWNrZWQ6ZmFsc2UsdmFsdWU6J1BvdGVudGlhbCBCdXllcnMnfSx7bmFtZTonQm91bmNlZCBGb290ZmFsbCcsY2hlY2tlZDpmYWxzZSx2YWx1ZTpcIkJvdW5jZWQgQ291bnRcIn0se25hbWU6J01pc3NlZCBPcHBvcnR1bml0eScsY2hlY2tlZDpmYWxzZSx2YWx1ZTonTWlzc2VkIE9wcG9ydHVuaXR5IENvdW50J30se25hbWU6J0VuZ2FnZXJzIENvdW50JyxjaGVja2VkOmZhbHNlLHZhbHVlOidFbmdhZ2VycyBDb3VudCd9LHtuYW1lOidDb252ZXJzaW9uJyxjaGVja2VkOmZhbHNlLHZhbHVlOidDb252ZXJzaW9uIFJhdGUnfSx7bmFtZTonQWdlJyxjaGVja2VkOmZhbHNlLHZhbHVlOidhZ2UnfSx7bmFtZTonR2VuZGVyJyxjaGVja2VkOmZhbHNlLHZhbHVlOidnZW5kZXInfSx7bmFtZTonTk9CJyxjaGVja2VkOmZhbHNlLHZhbHVlOidub2InfSx7bmFtZTonQXZnIEluZnJhIERvd250aW1lIChtaW5zKScsY2hlY2tlZDpmYWxzZSx2YWx1ZTonQXZnIEluZnJhIERvd250aW1lIChtaW5zKSd9XVxyXG4gIGNvbXBhcmlzaW9uRGF0YTphbnkgPSBbJ1dURCcsJ01URCcsJ05vbmUnXVxyXG4gIGZpbHRlckRhdGE6YW55ID0gWydob3VyJywnZGF5J11cclxuICBpbmZyYVRhYmxlOmFueSA9IFtdXHJcbiAgc2VsZWN0ZWREYXRhOiBhbnk7XHJcbiAgY3VzdG9tYnRuOiBhbnkgPSAnTWV0cmljcyc7XHJcbiAgbWV0cmljc0FycmF5OiBhbnlbXSA9IFtdO1xyXG4gIGNvbXBhcmlzaW9uRmlsdGVyOiBzdHJpbmcgPSAnV1REJztcclxuICBmaWx0ZXJEYXRhTGlzdDogc3RyaW5nID0gJ2hvdXInO1xyXG4gIC8vIHNvcnRCeTphbnkgPSAnJztcclxuICAvLyBzb3J0Q29sdW1OYW1lOmFueSA9ICcnO1xyXG4gIHRvdGFsQ291bnQ6YW55O1xyXG4gIC8vIHNlYXJjaFZhbHVlOiBhbnkgPSAnJztcclxuICBkeW5hbWljRGF0YTphbnkgPSB7fTtcclxuICBkaXNwbGF5ZWRDb2x1bW5zOmFueSA9IFtdO1xyXG4gIHBhZ2VTaXplOmFueT1bMTAsMjAsMzBdXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbHNlcnZpY2U6TmdiTW9kYWwscHJpdmF0ZSBnczpHbG9iYWxTdGF0ZVNlcnZpY2UscHJpdmF0ZSBzZXJ2aWNlOkFuYWx5c2VyZXBvcnRTZXJ2aWNlLHByaXZhdGUgdG9hc3Q6VG9hc3RTZXJ2aWNlKXtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSB0aGlzLnN0YW5kYXJkRGF0YVswXTtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCksZGVib3VuY2VUaW1lKDMwMCkpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChkYXRhICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGRhdGE/LmNsaWVudCA9PT0gJzQzMCcpIHtcclxuICAgICAgICAgIGNvbnN0IGlzVGVtcGxhdGVFRXhpc3RzID0gdGhpcy5zdGFuZGFyZERhdGEuc29tZSgoaXRlbTphbnkpID0+IGl0ZW0udmFsdWUgPT09ICdFJyk7XHJcbiAgICAgICAgICBpZiAoIWlzVGVtcGxhdGVFRXhpc3RzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhbmRhcmREYXRhLnB1c2goeyBuYW1lOiAnVGVtcGxhdGUgRScsIHZhbHVlOiAnRScgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZHluYW1pY0RhdGEgPSB7XHJcbiAgICAgICAgICBjbGllbnRJZDogZGF0YS5jbGllbnQsXHJcbiAgICAgICAgICBzdG9yZUlkOiBkYXRhLnN0b3Jlcy5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5jaGVja2VkKS5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5zdG9yZUlkKSxcclxuICAgICAgICAgIGZyb21EYXRlOiBkYXRhLmRhdGUuc3RhcnREYXRlLFxyXG4gICAgICAgICAgdG9EYXRlOiBkYXRhLmRhdGUuZW5kRGF0ZSxcclxuICAgICAgICAgIGxpbWl0OiAxMCxcclxuICAgICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICAgIHRlbXBsYXRlVHlwZTogdGhpcy5zZWxlY3RlZERhdGEudmFsdWUsXHJcbiAgICAgICAgICBleHBvcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgc2VhcmNoOiAnJyxcclxuICAgICAgICAgIHNvcnQ6ICcnLFxyXG4gICAgICAgICAgc29ydEJ5OiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKCF0aGlzLm9wZW5DdXN0b20pIHtcclxuICAgICAgICAgIHRoaXMuZ2V0VGVtcGxhdGVzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY3VzdG9tQ3JlYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0VGVtcGxhdGVzKCkge1xyXG4gICAgdGhpcy5pbmZyYVRhYmxlID0gW107XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXJ2aWNlLnJlcG9ydExpc3QodGhpcy5keW5hbWljRGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYocmVzICYmIHJlcy5kYXRhLnRlbXBsYXRlRGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbmZyYVRhYmxlID0gcmVzLmRhdGE/LnRlbXBsYXRlRGF0YTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXMuZGF0YS50b3RhbENvdW50O1xyXG4gICAgICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnRvdGFsQ291bnQgPCAxMCA/IFt0aGlzLnRvdGFsQ291bnRdIDogWzEwLDIwLDMwXTtcclxuICAgICAgICB0aGlzLmR5bmFtaWNEYXRhLmxpbWl0ID0gdGhpcy50b3RhbENvdW50IDwgMTAgPyB0aGlzLnRvdGFsQ291bnQgOiB0aGlzLmR5bmFtaWNEYXRhLmxpbWl0O1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKHRoaXMuaW5mcmFUYWJsZVswXSk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0sKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzaWRlbmF2KCl7XHJcbiAgICB0aGlzLnNob3dzaWRlbmF2ID0gIXRoaXMuc2hvd3NpZGVuYXY7XHJcbiAgfVxyXG4gIHNlbGVjdFJhZGlvKGRhdGE6YW55KXtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEub2Zmc2V0ID0gMDsgXHJcbiAgICB0aGlzLmluZnJhVGFibGUgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gZGF0YTtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEubGltaXQgPSAxMDtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEudGVtcGxhdGVUeXBlID0gZGF0YS52YWx1ZTtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEuc2VhcmNoID0gJyc7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLnNvcnQgPSAnJztcclxuICAgIHRoaXMuZHluYW1pY0RhdGEuc29ydEJ5PScnO1xyXG4gICAgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcclxuICB9XHJcbiAgY3JlYXRlQ3VzdG9tKCl7XHJcbiAgICB0aGlzLmN1c3RvbU5hbWUgPSAnJztcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbHNlcnZpY2Uub3Blbih0aGlzLmNvbmZpcm1hdGlvbk1vZGFsLCB7IGNlbnRlcmVkOiB0cnVlIH0pO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4geyBcclxuICAgICAgdGhpcy5vcGVuQWNjb3JkaWFuID0gIXRoaXMub3BlbkFjY29yZGlhbjtcclxuICAgICAgdGhpcy5vcGVuQ3VzdG9tID0gIXRoaXMub3BlbkN1c3RvbTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBjdXN0b21PcHRpb24oZGF0YTphbnkpe1xyXG4gICAgdGhpcy5jdXN0b21idG4gPSBkYXRhO1xyXG4gIH1cclxuICBtb3ZldG9OZXh0KCl7XHJcbiAgICBpZih0aGlzLmN1c3RvbWJ0biA9PT0gJ01ldHJpY3MnKXtcclxuICAgICAgdGhpcy5jdXN0b21idG4gPSAnQ29tcGFyaXNpb24nXHJcbiAgICB9ZWxzZSBpZih0aGlzLmN1c3RvbWJ0biA9PT0gJ0NvbXBhcmlzaW9uJyl7XHJcbiAgICAgIHRoaXMuY3VzdG9tYnRuID0gJ1RpbWUgRmlsdGVyJ1xyXG4gICAgfVxyXG4gIH1cclxuICBtb3ZldG9CYWNrKCl7XHJcbiAgICBpZih0aGlzLmN1c3RvbWJ0biA9PT0gJ0NvbXBhcmlzaW9uJyl7XHJcbiAgICAgIHRoaXMuY3VzdG9tYnRuID0gJ01ldHJpY3MnXHJcbiAgICB9ZWxzZSBpZih0aGlzLmN1c3RvbWJ0biA9PT0gJ1RpbWUgRmlsdGVyJyl7XHJcbiAgICAgIHRoaXMuY3VzdG9tYnRuID0gJ0NvbXBhcmlzaW9uJ1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRDb21wYXJpc2lvbihkYXRhOmFueSl7XHJcbiAgICB0aGlzLmNvbXBhcmlzaW9uRmlsdGVyID0gZGF0YTtcclxuICB9XHJcbiAgZ2V0RmlsdGVyKGRhdGE6YW55KXtcclxuICAgIHRoaXMuZmlsdGVyRGF0YUxpc3QgPSBkYXRhO1xyXG4gIH1cclxuICBjdXN0b21DcmVhdGUoKXtcclxuICAgIHRoaXMuaW5mcmFUYWJsZSA9IFtdO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0ge307XHJcbiAgICBsZXQgc2VsZWN0RmllbGQgPSAgdGhpcy5tZXRyaWNzRGF0YS5maWx0ZXIoKGl0ZW06YW55KSA9PiBpdGVtLmNoZWNrZWQpLm1hcCgoaXRlbTphbnkpID0+IGl0ZW0udmFsdWUpO1xyXG4gICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgIGNsaWVudElkOnRoaXMuZHluYW1pY0RhdGEuY2xpZW50SWQsXHJcbiAgICAgIHN0b3JlSWQ6IHRoaXMuZHluYW1pY0RhdGEuc3RvcmVJZCxcclxuICAgICAgZnJvbURhdGU6IHRoaXMuZHluYW1pY0RhdGEuZnJvbURhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5keW5hbWljRGF0YS50b0RhdGUsXHJcbiAgICAgIGxpbWl0OiB0aGlzLmR5bmFtaWNEYXRhLmxpbWl0LFxyXG4gICAgICBvZmZzZXQ6IHRoaXMuZHluYW1pY0RhdGEub2Zmc2V0LFxyXG4gICAgICBleHBvcnQ6ZmFsc2UsICAgIFxyXG4gICAgICBjb21wYXJpc29uRmlsdGVyOiB0aGlzLmNvbXBhcmlzaW9uRmlsdGVyICE9ICdOb25lJyA/IHRoaXMuY29tcGFyaXNpb25GaWx0ZXIgOiAnJyxcclxuICAgICAgdGltZUZpbHRlcjogdGhpcy5maWx0ZXJEYXRhTGlzdCwgXHJcbiAgICAgIHNlbGV0ZWRGaWVsZHM6c2VsZWN0RmllbGQsXHJcbiAgICAgIHNlYXJjaDp0aGlzLmR5bmFtaWNEYXRhLnNlYXJjaCxcclxuICAgICAgc29ydDp0aGlzLmR5bmFtaWNEYXRhLnNvcnQsXHJcbiAgICAgIHNvcnRCeTp0aGlzLmR5bmFtaWNEYXRhLnNvcnRCeVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXJ2aWNlLmN1c3RvbVRlbXBsYXRlKGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYocmVzICYmIHJlcy5kYXRhPy5jdXN0b21UZW1wbGF0ZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmluZnJhVGFibGUgPSByZXMuZGF0YS5jdXN0b21UZW1wbGF0ZTtcclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcy5kYXRhLnRvdGFsQ291bnQ7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy50b3RhbENvdW50IDwgMTAgPyBbdGhpcy50b3RhbENvdW50XSA6IFsxMCwyMCwzMF07XHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNEYXRhLmxpbWl0ID0gdGhpcy50b3RhbENvdW50IDwgMTAgPyB0aGlzLnRvdGFsQ291bnQgOiB0aGlzLmR5bmFtaWNEYXRhLmxpbWl0O1xyXG4gICAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gT2JqZWN0LmtleXModGhpcy5pbmZyYVRhYmxlWzBdKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc29ydERhdGEodmFsdWU6YW55KXtcclxuICAgIGlmKHRoaXMuZHluYW1pY0RhdGEuc29ydC50b0xvd2VyQ2FzZSgpID09IHZhbHVlLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgdGhpcy5keW5hbWljRGF0YS5zb3J0QnkgKj0gLTE7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5keW5hbWljRGF0YS5zb3J0QnkgPSAxO1xyXG4gICAgfVxyXG4gICAgaWYodmFsdWUgPT0gJ0Zvb3RGYWxsIENvdW50JyAmJiB0aGlzLm9wZW5DdXN0b20pIHtcclxuICAgICAgdmFsdWUgPSAnRm9vdGZhbGwgQ291bnQnXHJcbiAgICB9XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLnNvcnQgPSB2YWx1ZTtcclxuICAgIGlmKHRoaXMub3BlbkN1c3RvbSkge1xyXG4gICAgICB0aGlzLmN1c3RvbUNyZWF0ZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0VGVtcGxhdGVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogYW55KSB7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLm9mZnNldCA9IHBhZ2VPZmZzZXQgLSAxO1xyXG4gICAgaWYodGhpcy5vcGVuQ3VzdG9tKSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tQ3JlYXRlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IGFueSkge1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5saW1pdCA9IHBhcnNlSW50KHBhZ2VTaXplKTtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEub2Zmc2V0ID0gMDtcclxuICAgIGlmKHRoaXMub3BlbkN1c3RvbSkge1xyXG4gICAgICB0aGlzLmN1c3RvbUNyZWF0ZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0VGVtcGxhdGVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlYXJjaERhdGEoKXtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEub2Zmc2V0ID0gMDtcclxuICAgIGlmKHRoaXMub3BlbkN1c3RvbSkge1xyXG4gICAgICB0aGlzLmN1c3RvbUNyZWF0ZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0VGVtcGxhdGVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEV4cG9ydGFzWGxzeCgpe1xyXG4gICAgaWYodGhpcy5vcGVuQ3VzdG9tKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0Q3VzdG9tVGVtcGxhdGUoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmV4cG9ydFRlbXBsYXRlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBleHBvcnRUZW1wbGF0ZXMoKSB7XHJcbiAgICBpZih0aGlzLmR5bmFtaWNEYXRhLmxpbWl0ID4gMjUwMDApe1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1RoZSBleHBvcnQgbGltaXQgY2Fubm90IGV4Y2VlZCAyNSwwMDAuJylcclxuICAgIH0gZWxzZXtcclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBjbGllbnRJZDp0aGlzLmR5bmFtaWNEYXRhLmNsaWVudElkLFxyXG4gICAgICBzdG9yZUlkOiB0aGlzLmR5bmFtaWNEYXRhLnN0b3JlSWQsXHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmR5bmFtaWNEYXRhLmZyb21EYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuZHluYW1pY0RhdGEudG9EYXRlLFxyXG4gICAgICBsaW1pdDogdGhpcy5keW5hbWljRGF0YS5saW1pdCxcclxuICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICB0ZW1wbGF0ZVR5cGU6IHRoaXMuc2VsZWN0ZWREYXRhLnZhbHVlLFxyXG4gICAgICBleHBvcnQ6dHJ1ZSxcclxuICAgICAgc2VhcmNoOnRoaXMuZHluYW1pY0RhdGEuc2VhcmNoLFxyXG4gICAgICBzb3J0OnRoaXMuZHluYW1pY0RhdGEuc29ydCxcclxuICAgICAgc29ydEJ5OnRoaXMuZHluYW1pY0RhdGEuc29ydEJ5XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlcnZpY2UuZG93bmxvYWRSZXBvcnRMaXN0KGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmKHJlcyApIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcyx0aGlzLnNlbGVjdGVkRGF0YS5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfSwoZXJyb3I6YW55KSA9PiB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnU29tZXRoaW5nIHdlbnQgd3JvbmcnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICB9XHJcbiAgZXhwb3J0Q3VzdG9tVGVtcGxhdGUoKSB7XHJcbiAgICBpZih0aGlzLmR5bmFtaWNEYXRhLmxpbWl0ID4gMjUwMDApe1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1RoZSBleHBvcnQgbGltaXQgY2Fubm90IGV4Y2VlZCAyNSwwMDAuJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICBsZXQgc2VsZWN0RmllbGQgPSAgdGhpcy5tZXRyaWNzRGF0YS5maWx0ZXIoKGl0ZW06YW55KSA9PiBpdGVtLmNoZWNrZWQpLm1hcCgoaXRlbTphbnkpID0+IGl0ZW0udmFsdWUpO1xyXG4gICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgIGNsaWVudElkOnRoaXMuZHluYW1pY0RhdGEuY2xpZW50SWQsXHJcbiAgICAgIHN0b3JlSWQ6IHRoaXMuZHluYW1pY0RhdGEuc3RvcmVJZCxcclxuICAgICAgZnJvbURhdGU6IHRoaXMuZHluYW1pY0RhdGEuZnJvbURhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5keW5hbWljRGF0YS50b0RhdGUsXHJcbiAgICAgIGxpbWl0OiB0aGlzLmR5bmFtaWNEYXRhLmxpbWl0LFxyXG4gICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgIGV4cG9ydDp0cnVlLCAgICBcclxuICAgICAgY29tcGFyaXNvbkZpbHRlcjogdGhpcy5jb21wYXJpc2lvbkZpbHRlciAhPSAnTm9uZScgPyB0aGlzLmNvbXBhcmlzaW9uRmlsdGVyIDogJycsXHJcbiAgICAgIHRpbWVGaWx0ZXI6IHRoaXMuZmlsdGVyRGF0YUxpc3QsIFxyXG4gICAgICBzZWxldGVkRmllbGRzOnNlbGVjdEZpZWxkLFxyXG4gICAgICBzZWFyY2g6dGhpcy5keW5hbWljRGF0YS5zZWFyY2gsXHJcbiAgICAgIHNvcnQ6dGhpcy5keW5hbWljRGF0YS5zb3J0LFxyXG4gICAgICBzb3J0Qnk6dGhpcy5keW5hbWljRGF0YS5zb3J0QnlcclxuICAgIH1cclxuICAgIHRoaXMuc2VydmljZS5kb3dubG9hZEN1c3RvbVJlcG9ydExpc3QoZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYocmVzICkge1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLCdjdXN0b21UZW1wbGF0ZScpO1xyXG4gICAgICB9XHJcbiAgICB9LChlcnJvcjphbnkpID0+IHtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdTb21ldGhpbmcgd2VudCB3cm9uZycpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIH1cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMub3BlbkN1c3RvbSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jdXN0b21idG4gPSAnTWV0cmljcyc7XHJcbiAgICB0aGlzLm1ldHJpY3NEYXRhLmZvckVhY2goKGl0ZW06YW55KSA9PiBpdGVtLmNoZWNrZWQgPSBmYWxzZSk7XHJcbiAgICB0aGlzLmNvbXBhcmlzaW9uRmlsdGVyID0gICdXVEQnO1xyXG4gICAgdGhpcy5maWx0ZXJEYXRhTGlzdCA9ICdob3VyJztcclxuICB9XHJcbiAgcmVzZXRWYWx1ZXMoKSB7XHJcbiAgICB0aGlzLm9wZW5DdXN0b20gPSAhdGhpcy5vcGVuQ3VzdG9tO1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5vZmZzZXQ9MDtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEuc29ydCA9ICcnO1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5zb3J0QnkgPSAnJztcclxuICAgIHRoaXMuZHluYW1pY0RhdGEuc2VhcmNoID0gJyc7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyb3cgbWItNVwiPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwic2hvd3NpZGVuYXYgPyAnY29sLXNtLTMnOidkLW5vbmUnXCI+XHJcbiAgICAgPGRpdiBjbGFzcz1cImNhcmQgcG9zaXRpb24tcmVsYXRpdmUgaC0xMDBcIj5cclxuICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTAgb3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbiBbY2xvc2VPdGhlcnNdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBTdGFuZGFyZCBUZW1wbGF0ZSBTdGFydCAgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25JdGVtIFtjb2xsYXBzZWRdPVwib3BlbkFjY29yZGlhblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbiAoY2xpY2spPVwicmVzZXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZ3JpZFwiPlN0YW5kYXJkIFRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHkgY2xhc3M9XCJwdC0wIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGgtYXV0byBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYSByZXBvcnQgdG8gcHJldmlldyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRhdGEgb2Ygc3RhbmRhcmREYXRhXCIgY2xhc3M9XCJtdC01IGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic2VsZWN0UmFkaW8oZGF0YSlcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NoZWNrZWRdPVwic2VsZWN0ZWREYXRhLm5hbWUgPT09IGRhdGEubmFtZVwiIHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwicmFkaW9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgc3RhbmRhcmRcIj57e2RhdGEubmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFN0YW5kYXJkIFRlbXBsYXRlIEVuZCAgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEN1c3RvbSBUZW1wbGF0ZSBTdGFydCAgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tICpuZ0lmPVwiIW9wZW5DdXN0b21cIiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgIG5nYkFjY29yZGlvbkl0ZW0gW2NvbGxhcHNlZF09XCIhb3BlbkN1c3RvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZyBwdC0wXCIgbmdiQWNjb3JkaW9uQnV0dG9uIChjbGljayk9XCJyZXNldFZhbHVlcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ncmlkXCI+Q3VzdG9tIFRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBoLTEwMHB4IHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCB5b3VyIGRhdGEgcG9pbnRzIHRvIGFkZCBpbnRvIHRoZSByZXBvcnRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuaGVhZGVyIHctMTAwIHAtMiBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcHgtMlwiIChjbGljayk9XCJjdXN0b21PcHRpb24oYnV0dG9uKVwiIFtuZ0NsYXNzXT1cInRoaXMuY3VzdG9tYnRuID09PSBidXR0b24gPyAnYnRuICc6JydcIiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGNvc3RvbUJ1dHRvbnNcIj57e2J1dHRvbn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCIhaW5mcmFUYWJsZS5sZW5ndGggPyAnaC0xMDAgb3ZlcmZsb3ctYXV0bycgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImN1c3RvbWJ0biA9PT0gJ01ldHJpY3MnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBtZXRyaWNzRGF0YVwiIGNsYXNzPVwibXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwibXQtMiBjdXJzb3ItcG9pbnRlclwiIFsobmdNb2RlbCldPVwiZGF0YS5jaGVja2VkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgc3RhbmRhcmQgZnMtNFwiPnt7ZGF0YS5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VzdG9tYnRuID09PSAnQ29tcGFyaXNpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBjb21wYXJpc2lvbkRhdGFcIiBjbGFzcz1cIm10LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAoY2xpY2spPVwiZ2V0Q29tcGFyaXNpb24oZGF0YSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbY2hlY2tlZF09XCJjb21wYXJpc2lvbkZpbHRlciA9PT0gZGF0YVwiIHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwicmFkaW9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtNSBzdGFuZGFyZCBmcy00XCI+e3tkYXRhfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VzdG9tYnRuID09PSAnVGltZSBGaWx0ZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBmaWx0ZXJEYXRhXCIgY2xhc3M9XCJtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgKGNsaWNrKT1cImdldEZpbHRlcihkYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjaGVja2VkXT1cImZpbHRlckRhdGFMaXN0ID09PSBkYXRhXCIgdHlwZT1cInJhZGlvXCIgY2xhc3M9XCJyYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy01IHN0YW5kYXJkIGZzLTRcIj57e2RhdGEgPT09ICdob3VyJyA/ICdCeSBIb3VyJyA6ICdCeSBEYXRlJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3BlbkN1c3RvbVwiIGNsYXNzPVwiZC1mbGV4IHctMTAwXCIgW25nQ2xhc3NdPVwiIWxvYWRpbmcgPyAnbXQtNSc6JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW91dGxpbmUgdy01MCBtZS0zIG1iLTNcIiBbbmdDbGFzc109XCJjdXN0b21idG4gPT09ICdNZXRyaWNzJyA/ICdoaWRkZW4nIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZldG9CYWNrKClcIj5CYWNrPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY3VzdG9tYnRuICE9PSAnVGltZSBGaWx0ZXInXCIgKGNsaWNrKT1cIm1vdmV0b05leHQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXByaW1hcnkgdy01MCBtcy0zIG1iLTNcIj5OZXh0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY3VzdG9tYnRuID09PSAnVGltZSBGaWx0ZXInXCIgKGNsaWNrKT1cImR5bmFtaWNEYXRhLmxpbWl0ID0gMTA7Y3VzdG9tQ3JlYXRlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1wcmltYXJ5IHctNTAgbXMtMyBtYi0zXCI+VmlldzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBDdXN0b20gVGVtcGxhdGUgRW5kICAtLT5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICBcclxuICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wIG10LTVcIj4gLS0+XHJcbiAgICAgICAgICAgICA8IS0tIDxidXR0b24gKm5nSWY9XCIhb3BlbkFjY29yZGlhblwiIChjbGljayk9XCJjcmVhdGVDdXN0b20oKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgQ3JlYXRlIEN1c3RvbSBUZW1wbGF0ZVxyXG4gICAgICAgICAgICAgPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwib3BlbkN1c3RvbVwiIGNsYXNzPVwiZC1mbGV4IHctMTAwIG10LTVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW91dGxpbmUgdy01MCBtZS0zXCIgW25nQ2xhc3NdPVwiY3VzdG9tYnRuID09PSAnTWV0cmljcycgPyAnaGlkZGVuJyA6ICcnXCIgKGNsaWNrKT1cIm1vdmV0b0JhY2soKVwiPkJhY2s8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjdXN0b21idG4gIT09ICdUaW1lIEZpbHRlcidcIiAoY2xpY2spPVwibW92ZXRvTmV4dCgpXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXByaW1hcnkgdy01MCBtcy0zXCI+TmV4dDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImN1c3RvbWJ0biA9PT0gJ1RpbWUgRmlsdGVyJ1wiIChjbGljayk9XCJjdXN0b21DcmVhdGUoKVwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1wcmltYXJ5IHctNTAgbXMtM1wiPlZpZXc8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICA8IS0tIDwvZGl2PiAtLT5cclxuICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dzaWRlbmF2XCIgKGNsaWNrKT1cInNpZGVuYXYoKVwiIGNsYXNzPVwiYmFja0J1dHRvbnJpZ2h0IHRleHQtY2VudGVyIHB0LTEgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMjcyNTkgMTIuNjM2M0w0LjYzNjIzIDguOTk5ODlMOC4yNzI1OSA1LjM2MzUzTTEzLjM2MzUgMTIuNjM2M0w5LjcyNzE0IDguOTk5ODlMMTMuMzYzNSA1LjM2MzUzXCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJzaG93c2lkZW5hdiA/ICdjb2wtc20tOSc6J2NvbC1zbS0xMidcIj5cclxuICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBwb3NpdGlvbi1yZWxhdGl2ZSAgbWluLWgtc20tMzAwcHggbWluLWgtbWQtNDAwcHggIG1pbi1oLXhsLTU1MHB4IG1pbi1oLWxnLTUwMHB4IG1heC1oLWF1dG9cIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dzaWRlbmF2XCIgKGNsaWNrKT1cInNpZGVuYXYoKVwiIGNsYXNzPVwiYmFja0J1dHRvbmxlZnQgdGV4dC1jZW50ZXIgcHQtMSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS43MjcxNCAxMi42MzY1TDEzLjM2MzUgOS4wMDAxM0w5LjcyNzE0IDUuMzYzNzdNNC42MzYyMyAxMi42MzY1TDguMjcyNTkgOS4wMDAxM0w0LjYzNjIzIDUuMzYzNzdcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS40NTQ1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWxcIj57e3NlbGVjdGVkRGF0YT8ubmFtZSB8fCAnQ3VzdG9tIFRlbXBsYXRlJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgb3BhY2l0eT1cIjAuNVwiIHg9XCIxNy4wMzY1XCIgeT1cIjE1LjEyMjNcIiB3aWR0aD1cIjguMTU1NDZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjJcIiByeD1cIjFcIiB0cmFuc2Zvcm09XCJyb3RhdGUoNDUgMTcuMDM2NSAxNS4xMjIzKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IG1lLTJcIiAoY2hhbmdlKT1cInNlYXJjaERhdGEoKVwiIFsobmdNb2RlbCldPVwidGhpcy5keW5hbWljRGF0YS5zZWFyY2hcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW91dGxpbmUgbWUtM1wiIChjbGljayk9XCJFeHBvcnRhc1hsc3goKVwiIFtkaXNhYmxlZF09XCIhaW5mcmFUYWJsZS5sZW5ndGhcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgIDwvc3ZnPiA8c3BhbiAgY2xhc3M9XCJtcy0zXCI+RXhwb3J0PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cInNoYXJlRGF0YSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzEwMTY0XzU1NzkpXCI+PHBhdGggZD1cIk0xOC4zMzMyIDEuNjY2NzVMOS4xNjY1IDEwLjgzMzRNMTguMzMzMiAxLjY2Njc1TDEyLjQ5OTggMTguMzMzNEw5LjE2NjUgMTAuODMzNE0xOC4zMzMyIDEuNjY2NzVMMS42NjY1IDcuNTAwMDhMOS4xNjY1IDEwLjgzMzRcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICA8L2c+PGRlZnM+PGNsaXBQYXRoIGlkPVwiY2xpcDBfMTAxNjRfNTU3OVwiPjxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz48c3BhbiAqbmdJZj1cIiFzaG93c2lkZW5hdlwiIGNsYXNzPVwibXMtM1wiPlNoYXJlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPiBcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGNhcmQgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiIWxvYWRpbmcgJiYgbm9EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBteS04IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyY1wiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YTEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFtYWludGV4dCBtdC0zXCI+Tm8gZGF0YSBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhc3VidGV4dFwiPlRoZXJlIGlzIG5vIHJlc3VsdCBmb3IgUmVwb3J0IEFuYWx5c2lzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCIgKm5nSWY9XCIhbG9hZGluZyAmJiAhbm9EYXRhICYmICBpbmZyYVRhYmxlLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYm90dG9tLWJvcmRlciB0ZXh0LW5vd3JhcCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZGlzcGxheWVkQ29sdW1ucztsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YShjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7Y29sdW1ufX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGhpcy5keW5hbWljRGF0YS5zb3J0LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi50b0xvd2VyQ2FzZSgpJiYgdGhpcy5keW5hbWljRGF0YS5zb3J0QnkgIT09IDEgfHwgdGhpcy5keW5hbWljRGF0YS5zb3J0LnRvTG93ZXJDYXNlKCkgIT09IGNvbHVtbi50b0xvd2VyQ2FzZSgpXCIgY2xhc3M9XCJtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMTYgMS4zMzMzN1YxMC42NjY3TTYuMDAwMTYgMTAuNjY2N0wxMC42NjY4IDYuMDAwMDRNNi4wMDAxNiAxMC42NjY3TDEuMzMzNSA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInRoaXMuZHluYW1pY0RhdGEuc29ydC50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4udG9Mb3dlckNhc2UoKSA/ICcjMDBBM0ZGJyA6JyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRoaXMuZHluYW1pY0RhdGEuc29ydC50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4udG9Mb3dlckNhc2UoKSAmJiB0aGlzLmR5bmFtaWNEYXRhLnNvcnRCeSAhPT0gLTFcIiBjbGFzcz1cIm1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxMC42NjY3TDYuMDAwMTYgMS4zMzMzN002LjAwMDE2IDEuMzMzMzdMMS4zMzM1IDYuMDAwMDRNNi4wMDAxNiAxLjMzMzM3TDEwLjY2NjggNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJ0aGlzLmR5bmFtaWNEYXRhLnNvcnQudG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLnRvTG93ZXJDYXNlKCkgPyAnIzAwQTNGRicgOicjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZGF0YSBvZiBpbmZyYVRhYmxlOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGtleSBvZiBkaXNwbGF5ZWRDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGtleSA9PT0gJ2RhdGUnID8gKGRhdGFba2V5XSB8IGRhdGU6ICdkZCBNTU0sIFlZWVknKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkuaW5jbHVkZXMoJ0F2ZyB0aW1lIHRvIEludGVyYWN0JykgJiYgZGF0YVtrZXldID09PSAnLTEnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcwJyA6IChkYXRhW2tleV0gIT09ICcnICYmIGRhdGFba2V5XSAhPT0gbnVsbCAmJiBkYXRhW2tleV0gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZGF0YVtrZXldIDogJy0tJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICA8bGliLXBhZ2luYXRpb24gW2l0ZW1zUGVyUGFnZV09XCJkeW5hbWljRGF0YS5saW1pdFwiXHJcbiAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCIoZHluYW1pY0RhdGEub2Zmc2V0ICsgMSlcIiBbdG90YWxJdGVtc109XCJ0b3RhbENvdW50XCJcclxuICAgICAgICAgICAgW3BhZ2luYXRpb25TaXplc109XCJwYWdlU2l6ZVwiIFtwYWdlU2l6ZV09XCJkeW5hbWljRGF0YS5saW1pdFwiXHJcbiAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiICpuZ0lmPVwiIWxvYWRpbmcgJiYgIW5vRGF0YSAmJiBpbmZyYVRhYmxlLmxlbmd0aFwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb25maXJtYXRpb25Nb2RhbCBsZXQtbW9kYWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCBib3JkZXItMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgIDxpbWcgc3JjPVwiLi9hc3NldHMvdGFuZ28vSW1hZ2VzL2N1c3RvbXBvcHVwLWljb24ucG5nXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiIG10LTVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlciBmdy1ib2xkXCI+Q3VzdG9tIFRlbXBsYXRlIE5hbWU8L3NwYW4+XHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBzdWItaGVhZGVyIGZ3LXNlbWlib2xkXCI+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgdXNlciBnbG9iYWxseT88L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTEwXCI+XHJcbiAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN1Yi1oZWFkZXJcIiBzdHlsZT1cImNvbG9yOiAjMzQ0MDU0OyBmb250LXdlaWdodDogNDAwO1wiIGZvcj1cImN1c3RvbS1uYW1lXCI+VGVtcGxhdGUgTmFtZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiY3VzdG9tTmFtZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIG10LTJcIiBpZD1cImN1c3RvbS1OYW1lXCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMTBcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW91dGxpbmUgdy01MCBtZS0yXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTUwIG1zLTJcIiBbZGlzYWJsZWRdPVwiY3VzdG9tTmFtZSA9PT0gJydcIiAoY2xpY2spPVwibW9kYWwuY2xvc2UoKVwiPkFwcGx5PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+Il19
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS1yZXBvcnQvc3JjL2xpYi9jb21wb25lbnRzL3VzZXItcmVwb3J0L3VzZXItcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtcmVwb3J0L3NyYy9saWIvY29tcG9uZW50cy91c2VyLXJlcG9ydC91c2VyLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFrQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHckUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQVN4RCxNQUFNLE9BQU8sbUJBQW1CO0lBOEJWO0lBQThCO0lBQThCO0lBQXFDO0lBNUJyRixpQkFBaUIsQ0FBTTtJQUN2RCxRQUFRLENBQTBCO0lBQ2xDLE9BQU8sR0FBVyxJQUFJLENBQUM7SUFDdkIsTUFBTSxHQUFXLEtBQUssQ0FBQztJQUN2QixXQUFXLEdBQVcsSUFBSSxDQUFDO0lBQzNCLFVBQVUsR0FBVyxLQUFLLENBQUM7SUFDM0IsYUFBYSxHQUFXLEtBQUssQ0FBQztJQUM5QixVQUFVLEdBQU0sRUFBRSxDQUFDO0lBQ25CLFlBQVksR0FBTyxDQUFDLEVBQUMsSUFBSSxFQUFDLFlBQVksRUFBQyxLQUFLLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxJQUFJLEVBQUMsWUFBWSxFQUFDLEtBQUssRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLElBQUksRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsSUFBSSxFQUFDLFlBQVksRUFBQyxLQUFLLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQTtJQUM1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QUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxpQkFBaUIsR0FBSSxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7SUFDL0IsQ0FBQztJQUNELFdBQVc7UUFFVCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDL0IsQ0FBQzt3R0FyV1UsbUJBQW1COzRGQUFuQixtQkFBbUIsK0tDWmhDLDBya0JBNlBnQjs7NEZEalBILG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7NEtBTUssaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCxPbkRlc3Ryb3ksT25Jbml0LFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWwsTmdiTW9kYWxNb2R1bGUsTmdiTW9kYWxSZWYgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEFuYWx5c2VyZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hbmFseXNlcmVwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXVzZXItcmVwb3J0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1yZXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi91c2VyLXJlcG9ydC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJSZXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsT25EZXN0cm95IHtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29uZmlybWF0aW9uTW9kYWwnKSBjb25maXJtYXRpb25Nb2RhbDogYW55O1xyXG4gIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZiB8IHVuZGVmaW5lZDtcclxuICBsb2FkaW5nOmJvb2xlYW4gPSB0cnVlO1xyXG4gIG5vRGF0YTpib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd3NpZGVuYXY6Ym9vbGVhbiA9IHRydWU7XHJcbiAgb3BlbkN1c3RvbTpib29sZWFuID0gZmFsc2U7XHJcbiAgb3BlbkFjY29yZGlhbjpib29sZWFuID0gZmFsc2U7XHJcbiAgY3VzdG9tTmFtZTphbnkgPScnO1xyXG4gIHN0YW5kYXJkRGF0YTphbnkgPSBbe25hbWU6J1RlbXBsYXRlIEEnLHZhbHVlOidBJ30se25hbWU6J1RlbXBsYXRlIEInLHZhbHVlOidCJ30se25hbWU6J1RlbXBsYXRlIEMnLHZhbHVlOidDJ30se25hbWU6J1RlbXBsYXRlIEQnLHZhbHVlOidEJ31dXHJcbiAgY29zdG9tQnV0dG9uczphbnkgPSBbJ01ldHJpY3MnLCdDb21wYXJpc2lvbicsJ1RpbWUgRmlsdGVyJ11cclxuICBtZXRyaWNzRGF0YTphbnkgPSBbXVxyXG4gIGNvbXBhcmlzaW9uRGF0YTphbnkgPSBbJ1dURCcsJ01URCcsJ05vbmUnXVxyXG4gIGZpbHRlckRhdGE6YW55ID0gWydob3VyJywnZGF5J11cclxuICBpbmZyYVRhYmxlOmFueSA9IFtdXHJcbiAgc2VsZWN0ZWREYXRhOiBhbnk7XHJcbiAgY3VzdG9tYnRuOiBhbnkgPSAnTWV0cmljcyc7XHJcbiAgbWV0cmljc0FycmF5OiBhbnlbXSA9IFtdO1xyXG4gIGNvbXBhcmlzaW9uRmlsdGVyOiBzdHJpbmcgPSAnV1REJztcclxuICBmaWx0ZXJEYXRhTGlzdDogc3RyaW5nID0gJ2hvdXInO1xyXG4gIC8vIHNvcnRCeTphbnkgPSAnJztcclxuICAvLyBzb3J0Q29sdW1OYW1lOmFueSA9ICcnO1xyXG4gIHRvdGFsQ291bnQ6YW55O1xyXG4gIC8vIHNlYXJjaFZhbHVlOiBhbnkgPSAnJztcclxuICBkeW5hbWljRGF0YTphbnkgPSB7fTtcclxuICBkaXNwbGF5ZWRDb2x1bW5zOmFueSA9IFtdO1xyXG4gIHBhZ2VTaXplOmFueT1bMTAsMjAsMzBdO1xyXG4gIGNsaWVudERhdGE6YW55ID1bXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsc2VydmljZTpOZ2JNb2RhbCxwcml2YXRlIGdzOkdsb2JhbFN0YXRlU2VydmljZSxwcml2YXRlIHNlcnZpY2U6QW5hbHlzZXJlcG9ydFNlcnZpY2UscHJpdmF0ZSB0b2FzdDpUb2FzdFNlcnZpY2Upe1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuICBoZWFkZXJEYXRhOmFueTtcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gdGhpcy5zdGFuZGFyZERhdGFbMF07XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxkZWJvdW5jZVRpbWUoMzAwKSkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGEgIT09IG51bGwpIHtcclxuICAgICAgICB0aGlzLmhlYWRlckRhdGEgPSBkYXRhO1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQgPT09ICc0MzAnKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1RlbXBsYXRlRUV4aXN0cyA9IHRoaXMuc3RhbmRhcmREYXRhLnNvbWUoKGl0ZW06YW55KSA9PiBpdGVtLnZhbHVlID09PSAnRScpO1xyXG4gICAgICAgICAgaWYgKCFpc1RlbXBsYXRlRUV4aXN0cykge1xyXG4gICAgICAgICAgICB0aGlzLnN0YW5kYXJkRGF0YS5wdXNoKHsgbmFtZTogJ1RlbXBsYXRlIEUnLCB2YWx1ZTogJ0UnIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmR5bmFtaWNEYXRhID0ge1xyXG4gICAgICAgICAgY2xpZW50SWQ6IGRhdGEuY2xpZW50LFxyXG4gICAgICAgICAgc3RvcmVJZDogZGF0YS5zdG9yZXMuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0uY2hlY2tlZCkubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uc3RvcmVJZCksXHJcbiAgICAgICAgICBmcm9tRGF0ZTogZGF0YS5kYXRlLnN0YXJ0RGF0ZSxcclxuICAgICAgICAgIHRvRGF0ZTogZGF0YS5kYXRlLmVuZERhdGUsXHJcbiAgICAgICAgICBsaW1pdDogMTAsXHJcbiAgICAgICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgICAgICB0ZW1wbGF0ZVR5cGU6IHRoaXMuc2VsZWN0ZWREYXRhLnZhbHVlLFxyXG4gICAgICAgICAgZXhwb3J0OiBmYWxzZSxcclxuICAgICAgICAgIHNlYXJjaDogJycsXHJcbiAgICAgICAgICBzb3J0OiAnJyxcclxuICAgICAgICAgIHNvcnRCeTogJydcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghdGhpcy5vcGVuQ3VzdG9tKSB7XHJcbiAgICAgICAgICB0aGlzLmdldFRlbXBsYXRlcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbUNyZWF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgIFxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNsaWVudERhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjbGllbnQtZGV0YWlsc1wiKSB8fCBcInt9XCIpO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnREYXRhID0gY2xpZW50RGF0YTtcclxuICAgICAgICBcclxuICAgICAgICAgIGNvbnN0IGxpbWl0ID0gY2xpZW50RGF0YT8uYm91bmNlZExpbWl0Py52YWx1ZSA/PyBjbGllbnREYXRhPy5ib3VuY2VkTGltaXRWYWx1ZSA/PyAnJztcclxuICAgICAgICAgIGNvbnN0IGNvbnYgPSBjbGllbnREYXRhPy5jb252ZXJzaW9uPy52YWx1ZSA/PyBjbGllbnREYXRhPy5jb252ZXJzaW9uVmFsdWUgPz8gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICBpZiAodGhpcy5oZWFkZXJEYXRhLmNsaWVudCA9PT0gJzQ1MicpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubWV0cmljc0RhdGE9W3tuYW1lOmBMZXNzIHRoYW4gJHtsaW1pdH0gbWluc2AsY2hlY2tlZDpmYWxzZSx2YWx1ZTpcIkJvdW5jZWQgQ291bnRcIn0se25hbWU6YCR7bGltaXR9IC0gJHtjb252fSBtaW5zYCxjaGVja2VkOmZhbHNlLHZhbHVlOidNaXNzZWQgT3Bwb3J0dW5pdHkgQ291bnQnfSx7bmFtZTpgTW9yZSB0aGFuICR7bGltaXR9IG1pbnNgLGNoZWNrZWQ6ZmFsc2UsdmFsdWU6J0VuZ2FnZXJzIENvdW50J30se25hbWU6YE1vcmUgdGhhbiAke2NvbnZ9IG1pbnMgUmF0ZWAsY2hlY2tlZDpmYWxzZSx2YWx1ZTonQ29udmVyc2lvbiBSYXRlJ30se25hbWU6J0FnZScsY2hlY2tlZDpmYWxzZSx2YWx1ZTonYWdlJ30se25hbWU6J0dlbmRlcicsY2hlY2tlZDpmYWxzZSx2YWx1ZTonZ2VuZGVyJ30se25hbWU6J05PQicsY2hlY2tlZDpmYWxzZSx2YWx1ZTonbm9iJ30se25hbWU6J0F2ZyBJbmZyYSBEb3dudGltZSAobWlucyknLGNoZWNrZWQ6ZmFsc2UsdmFsdWU6J0F2ZyBJbmZyYSBEb3dudGltZSAobWlucyknfV1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1ldHJpY3NEYXRhPVt7bmFtZTonUG90ZW50aWFsIEJ1eWVycycsY2hlY2tlZDpmYWxzZSx2YWx1ZTonUG90ZW50aWFsIEJ1eWVycyd9LHtuYW1lOidCb3VuY2VkIEZvb3RmYWxsJyxjaGVja2VkOmZhbHNlLHZhbHVlOlwiQm91bmNlZCBDb3VudFwifSx7bmFtZTonTWlzc2VkIE9wcG9ydHVuaXR5JyxjaGVja2VkOmZhbHNlLHZhbHVlOidNaXNzZWQgT3Bwb3J0dW5pdHkgQ291bnQnfSx7bmFtZTonRW5nYWdlcnMgQ291bnQnLGNoZWNrZWQ6ZmFsc2UsdmFsdWU6J0VuZ2FnZXJzIENvdW50J30se25hbWU6J0NvbnZlcnNpb24nLGNoZWNrZWQ6ZmFsc2UsdmFsdWU6J0NvbnZlcnNpb24gUmF0ZSd9LHtuYW1lOidBZ2UnLGNoZWNrZWQ6ZmFsc2UsdmFsdWU6J2FnZSd9LHtuYW1lOidHZW5kZXInLGNoZWNrZWQ6ZmFsc2UsdmFsdWU6J2dlbmRlcid9LHtuYW1lOidOT0InLGNoZWNrZWQ6ZmFsc2UsdmFsdWU6J25vYid9LHtuYW1lOidBdmcgSW5mcmEgRG93bnRpbWUgKG1pbnMpJyxjaGVja2VkOmZhbHNlLHZhbHVlOidBdmcgSW5mcmEgRG93bnRpbWUgKG1pbnMpJ31dXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgXHJcbiAgICAgIFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gICAgZ2V0RGlzcGxheU5hbWUoY29sdW1uOiBhbnksIHJvdzogYW55KTogYW55IHtcclxuICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5oZWFkZXJEYXRhPy5jbGllbnQ7XHJcbiAgICAgIGNvbnN0IGxpbWl0ID0gdGhpcy5jbGllbnREYXRhPy5ib3VuY2VkTGltaXQ/LnZhbHVlID8/IHRoaXMuY2xpZW50RGF0YT8uYm91bmNlZExpbWl0VmFsdWUgPz8gJyc7XHJcbiAgICAgIGNvbnN0IGNvbnYgPSB0aGlzLmNsaWVudERhdGE/LmNvbnZlcnNpb24/LnZhbHVlID8/IHRoaXMuY2xpZW50RGF0YT8uY29udmVyc2lvblZhbHVlID8/ICcnO1xyXG4gICAgICBpZiAoY2xpZW50ID09PSAnNDUyJykge1xyXG4gICAgICAgIGNvbnN0IGN1c3RvbUxhYmVsczphbnkgPSB7XHJcbiAgICAgICAgICAnQm91bmNlZCBDb3VudCc6IGBMZXNzIHRoYW4gJHtsaW1pdH0gbWluc2AsXHJcbiAgICAgICAgICAnRW5nYWdlcnMgQ291bnQnOiBgTW9yZSB0aGFuICR7bGltaXR9IG1pbnNgLFxyXG4gICAgICAgICAgJ0NvbnZlcnNpb24gUmF0ZSc6IGBNb3JlIHRoYW4gJHtjb252fSBtaW5zIFJhdGVgLFxyXG4gICAgICAgICAgJ01pc3NlZCBPcHBvcnR1bml0eSBDb3VudCc6IGAke2xpbWl0fSAtICR7Y29udn0gbWluc2AsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGN1c3RvbUxhYmVsc1tjb2x1bW5dID8/IGNvbHVtbjtcclxuICAgICAgfVxyXG4gICAgXHJcbiAgICAgIHJldHVybiBjb2x1bW47IFxyXG4gICAgfVxyXG4gICAgXHJcbiAgZ2V0VGVtcGxhdGVzKCkge1xyXG4gICAgdGhpcy5pbmZyYVRhYmxlID0gW107XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXJ2aWNlLnJlcG9ydExpc3QodGhpcy5keW5hbWljRGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYocmVzICYmIHJlcy5kYXRhLnRlbXBsYXRlRGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbmZyYVRhYmxlID0gcmVzLmRhdGE/LnRlbXBsYXRlRGF0YTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXMuZGF0YS50b3RhbENvdW50O1xyXG4gICAgICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnRvdGFsQ291bnQgPCAxMCA/IFt0aGlzLnRvdGFsQ291bnRdIDogWzEwLDIwLDMwXTtcclxuICAgICAgICB0aGlzLmR5bmFtaWNEYXRhLmxpbWl0ID0gdGhpcy50b3RhbENvdW50IDwgMTAgPyB0aGlzLnRvdGFsQ291bnQgOiB0aGlzLmR5bmFtaWNEYXRhLmxpbWl0O1xyXG4gICAgICAgIGlmKHRoaXMuaGVhZGVyRGF0YS5jbGllbnQgPT09JzQ1Micpe1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKHRoaXMuaW5mcmFUYWJsZVswXSkuZmlsdGVyKFxyXG4gICAgICAgICAgY29sID0+IGNvbCAhPT0gJ1BvdGVudGlhbCBCdXllcnMnXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBPYmplY3Qua2V5cyh0aGlzLmluZnJhVGFibGVbMF0pO1xyXG4gICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0sKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzaWRlbmF2KCl7XHJcbiAgICB0aGlzLnNob3dzaWRlbmF2ID0gIXRoaXMuc2hvd3NpZGVuYXY7XHJcbiAgfVxyXG4gIHNlbGVjdFJhZGlvKGRhdGE6YW55KXtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEub2Zmc2V0ID0gMDsgXHJcbiAgICB0aGlzLmluZnJhVGFibGUgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gZGF0YTtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEubGltaXQgPSAxMDtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEudGVtcGxhdGVUeXBlID0gZGF0YS52YWx1ZTtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEuc2VhcmNoID0gJyc7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLnNvcnQgPSAnJztcclxuICAgIHRoaXMuZHluYW1pY0RhdGEuc29ydEJ5PScnO1xyXG4gICAgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcclxuICB9XHJcbiAgY3JlYXRlQ3VzdG9tKCl7XHJcbiAgICB0aGlzLmN1c3RvbU5hbWUgPSAnJztcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbHNlcnZpY2Uub3Blbih0aGlzLmNvbmZpcm1hdGlvbk1vZGFsLCB7IGNlbnRlcmVkOiB0cnVlIH0pO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4geyBcclxuICAgICAgdGhpcy5vcGVuQWNjb3JkaWFuID0gIXRoaXMub3BlbkFjY29yZGlhbjtcclxuICAgICAgdGhpcy5vcGVuQ3VzdG9tID0gIXRoaXMub3BlbkN1c3RvbTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBjdXN0b21PcHRpb24oZGF0YTphbnkpe1xyXG4gICAgdGhpcy5jdXN0b21idG4gPSBkYXRhO1xyXG4gIH1cclxuICBtb3ZldG9OZXh0KCl7XHJcbiAgICBpZih0aGlzLmN1c3RvbWJ0biA9PT0gJ01ldHJpY3MnKXtcclxuICAgICAgdGhpcy5jdXN0b21idG4gPSAnQ29tcGFyaXNpb24nXHJcbiAgICB9ZWxzZSBpZih0aGlzLmN1c3RvbWJ0biA9PT0gJ0NvbXBhcmlzaW9uJyl7XHJcbiAgICAgIHRoaXMuY3VzdG9tYnRuID0gJ1RpbWUgRmlsdGVyJ1xyXG4gICAgfVxyXG4gIH1cclxuICBtb3ZldG9CYWNrKCl7XHJcbiAgICBpZih0aGlzLmN1c3RvbWJ0biA9PT0gJ0NvbXBhcmlzaW9uJyl7XHJcbiAgICAgIHRoaXMuY3VzdG9tYnRuID0gJ01ldHJpY3MnXHJcbiAgICB9ZWxzZSBpZih0aGlzLmN1c3RvbWJ0biA9PT0gJ1RpbWUgRmlsdGVyJyl7XHJcbiAgICAgIHRoaXMuY3VzdG9tYnRuID0gJ0NvbXBhcmlzaW9uJ1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRDb21wYXJpc2lvbihkYXRhOmFueSl7XHJcbiAgICB0aGlzLmNvbXBhcmlzaW9uRmlsdGVyID0gZGF0YTtcclxuICB9XHJcbiAgZ2V0RmlsdGVyKGRhdGE6YW55KXtcclxuICAgIHRoaXMuZmlsdGVyRGF0YUxpc3QgPSBkYXRhO1xyXG4gIH1cclxuICBjdXN0b21DcmVhdGUoKXtcclxuICAgIHRoaXMuaW5mcmFUYWJsZSA9IFtdO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0ge307XHJcblxyXG4gICAgbGV0IHNlbGVjdEZpZWxkID0gIHRoaXMubWV0cmljc0RhdGEuZmlsdGVyKChpdGVtOmFueSkgPT4gaXRlbS5jaGVja2VkKS5tYXAoKGl0ZW06YW55KSA9PiBpdGVtLnZhbHVlKTtcclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBjbGllbnRJZDp0aGlzLmR5bmFtaWNEYXRhLmNsaWVudElkLFxyXG4gICAgICBzdG9yZUlkOiB0aGlzLmR5bmFtaWNEYXRhLnN0b3JlSWQsXHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmR5bmFtaWNEYXRhLmZyb21EYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuZHluYW1pY0RhdGEudG9EYXRlLFxyXG4gICAgICBsaW1pdDogdGhpcy5keW5hbWljRGF0YS5saW1pdCxcclxuICAgICAgb2Zmc2V0OiB0aGlzLmR5bmFtaWNEYXRhLm9mZnNldCxcclxuICAgICAgZXhwb3J0OmZhbHNlLCAgICBcclxuICAgICAgY29tcGFyaXNvbkZpbHRlcjogdGhpcy5jb21wYXJpc2lvbkZpbHRlciAhPSAnTm9uZScgPyB0aGlzLmNvbXBhcmlzaW9uRmlsdGVyIDogJycsXHJcbiAgICAgIHRpbWVGaWx0ZXI6IHRoaXMuZmlsdGVyRGF0YUxpc3QsIFxyXG4gICAgICBzZWxldGVkRmllbGRzOnNlbGVjdEZpZWxkLFxyXG4gICAgICBzZWFyY2g6dGhpcy5keW5hbWljRGF0YS5zZWFyY2gsXHJcbiAgICAgIHNvcnQ6dGhpcy5keW5hbWljRGF0YS5zb3J0LFxyXG4gICAgICBzb3J0Qnk6dGhpcy5keW5hbWljRGF0YS5zb3J0QnlcclxuICAgIH1cclxuICAgIHRoaXMuc2VydmljZS5jdXN0b21UZW1wbGF0ZShkYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmKHJlcyAmJiByZXMuZGF0YT8uY3VzdG9tVGVtcGxhdGU/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5pbmZyYVRhYmxlID0gcmVzLmRhdGEuY3VzdG9tVGVtcGxhdGU7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXMuZGF0YS50b3RhbENvdW50O1xyXG4gICAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMudG90YWxDb3VudCA8IDEwID8gW3RoaXMudG90YWxDb3VudF0gOiBbMTAsMjAsMzBdO1xyXG4gICAgICAgICAgdGhpcy5keW5hbWljRGF0YS5saW1pdCA9IHRoaXMudG90YWxDb3VudCA8IDEwID8gdGhpcy50b3RhbENvdW50IDogdGhpcy5keW5hbWljRGF0YS5saW1pdDtcclxuICAgICAgICAgIGlmKHRoaXMuaGVhZGVyRGF0YS5jbGllbnQgPT09JzQ1Micpe1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBPYmplY3Qua2V5cyh0aGlzLmluZnJhVGFibGVbMF0pLmZpbHRlcihcclxuICAgICAgICAgICAgICBjb2wgPT4gY29sICE9PSAnUG90ZW50aWFsIEJ1eWVycydcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKHRoaXMuaW5mcmFUYWJsZVswXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCgpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNvcnREYXRhKHZhbHVlOmFueSl7XHJcbiAgICBpZih0aGlzLmR5bmFtaWNEYXRhLnNvcnQudG9Mb3dlckNhc2UoKSA9PSB2YWx1ZS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgIHRoaXMuZHluYW1pY0RhdGEuc29ydEJ5ICo9IC0xO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZHluYW1pY0RhdGEuc29ydEJ5ID0gMTtcclxuICAgIH1cclxuICAgIGlmKHZhbHVlID09ICdGb290RmFsbCBDb3VudCcgJiYgdGhpcy5vcGVuQ3VzdG9tKSB7XHJcbiAgICAgIHZhbHVlID0gJ0Zvb3RmYWxsIENvdW50J1xyXG4gICAgfVxyXG4gICAgdGhpcy5keW5hbWljRGF0YS5zb3J0ID0gdmFsdWU7XHJcbiAgICBpZih0aGlzLm9wZW5DdXN0b20pIHtcclxuICAgICAgdGhpcy5jdXN0b21DcmVhdGUoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFRlbXBsYXRlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25QYWdlQ2hhbmdlKHBhZ2VPZmZzZXQ6IGFueSkge1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5vZmZzZXQgPSBwYWdlT2Zmc2V0IC0gMTtcclxuICAgIGlmKHRoaXMub3BlbkN1c3RvbSkge1xyXG4gICAgICB0aGlzLmN1c3RvbUNyZWF0ZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0VGVtcGxhdGVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBhbnkpIHtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEubGltaXQgPSBwYXJzZUludChwYWdlU2l6ZSk7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLm9mZnNldCA9IDA7XHJcbiAgICBpZih0aGlzLm9wZW5DdXN0b20pIHtcclxuICAgICAgdGhpcy5jdXN0b21DcmVhdGUoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFRlbXBsYXRlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZWFyY2hEYXRhKCl7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLm9mZnNldCA9IDA7XHJcbiAgICBpZih0aGlzLm9wZW5DdXN0b20pIHtcclxuICAgICAgdGhpcy5jdXN0b21DcmVhdGUoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFRlbXBsYXRlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBFeHBvcnRhc1hsc3goKXtcclxuICAgIGlmKHRoaXMub3BlbkN1c3RvbSkge1xyXG4gICAgICB0aGlzLmV4cG9ydEN1c3RvbVRlbXBsYXRlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5leHBvcnRUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgZXhwb3J0VGVtcGxhdGVzKCkge1xyXG4gICAgaWYodGhpcy5keW5hbWljRGF0YS5saW1pdCA+IDI1MDAwKXtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdUaGUgZXhwb3J0IGxpbWl0IGNhbm5vdCBleGNlZWQgMjUsMDAwLicpXHJcbiAgICB9IGVsc2V7XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgY2xpZW50SWQ6dGhpcy5keW5hbWljRGF0YS5jbGllbnRJZCxcclxuICAgICAgc3RvcmVJZDogdGhpcy5keW5hbWljRGF0YS5zdG9yZUlkLFxyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5keW5hbWljRGF0YS5mcm9tRGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmR5bmFtaWNEYXRhLnRvRGF0ZSxcclxuICAgICAgbGltaXQ6IHRoaXMuZHluYW1pY0RhdGEubGltaXQsXHJcbiAgICAgIG9mZnNldDogMCxcclxuICAgICAgdGVtcGxhdGVUeXBlOiB0aGlzLnNlbGVjdGVkRGF0YS52YWx1ZSxcclxuICAgICAgZXhwb3J0OnRydWUsXHJcbiAgICAgIHNlYXJjaDp0aGlzLmR5bmFtaWNEYXRhLnNlYXJjaCxcclxuICAgICAgc29ydDp0aGlzLmR5bmFtaWNEYXRhLnNvcnQsXHJcbiAgICAgIHNvcnRCeTp0aGlzLmR5bmFtaWNEYXRhLnNvcnRCeVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXJ2aWNlLmRvd25sb2FkUmVwb3J0TGlzdChkYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZihyZXMgKSB7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsdGhpcy5zZWxlY3RlZERhdGEubmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH0sKGVycm9yOmFueSkgPT4ge1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgfVxyXG4gIGV4cG9ydEN1c3RvbVRlbXBsYXRlKCkge1xyXG4gICAgaWYodGhpcy5keW5hbWljRGF0YS5saW1pdCA+IDI1MDAwKXtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdUaGUgZXhwb3J0IGxpbWl0IGNhbm5vdCBleGNlZWQgMjUsMDAwLicpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgbGV0IHNlbGVjdEZpZWxkID0gIHRoaXMubWV0cmljc0RhdGEuZmlsdGVyKChpdGVtOmFueSkgPT4gaXRlbS5jaGVja2VkKS5tYXAoKGl0ZW06YW55KSA9PiBpdGVtLnZhbHVlKTtcclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBjbGllbnRJZDp0aGlzLmR5bmFtaWNEYXRhLmNsaWVudElkLFxyXG4gICAgICBzdG9yZUlkOiB0aGlzLmR5bmFtaWNEYXRhLnN0b3JlSWQsXHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmR5bmFtaWNEYXRhLmZyb21EYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuZHluYW1pY0RhdGEudG9EYXRlLFxyXG4gICAgICBsaW1pdDogdGhpcy5keW5hbWljRGF0YS5saW1pdCxcclxuICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICBleHBvcnQ6dHJ1ZSwgICAgXHJcbiAgICAgIGNvbXBhcmlzb25GaWx0ZXI6IHRoaXMuY29tcGFyaXNpb25GaWx0ZXIgIT0gJ05vbmUnID8gdGhpcy5jb21wYXJpc2lvbkZpbHRlciA6ICcnLFxyXG4gICAgICB0aW1lRmlsdGVyOiB0aGlzLmZpbHRlckRhdGFMaXN0LCBcclxuICAgICAgc2VsZXRlZEZpZWxkczpzZWxlY3RGaWVsZCxcclxuICAgICAgc2VhcmNoOnRoaXMuZHluYW1pY0RhdGEuc2VhcmNoLFxyXG4gICAgICBzb3J0OnRoaXMuZHluYW1pY0RhdGEuc29ydCxcclxuICAgICAgc29ydEJ5OnRoaXMuZHluYW1pY0RhdGEuc29ydEJ5XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlcnZpY2UuZG93bmxvYWRDdXN0b21SZXBvcnRMaXN0KGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmKHJlcyApIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywnY3VzdG9tVGVtcGxhdGUnKTtcclxuICAgICAgfVxyXG4gICAgfSwoZXJyb3I6YW55KSA9PiB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnU29tZXRoaW5nIHdlbnQgd3JvbmcnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICB9XHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLm9wZW5DdXN0b20gPSBmYWxzZTtcclxuICAgIHRoaXMuY3VzdG9tYnRuID0gJ01ldHJpY3MnO1xyXG4gICAgdGhpcy5tZXRyaWNzRGF0YS5mb3JFYWNoKChpdGVtOmFueSkgPT4gaXRlbS5jaGVja2VkID0gZmFsc2UpO1xyXG4gICAgdGhpcy5jb21wYXJpc2lvbkZpbHRlciA9ICAnV1REJztcclxuICAgIHRoaXMuZmlsdGVyRGF0YUxpc3QgPSAnaG91cic7XHJcbiAgfVxyXG4gIHJlc2V0VmFsdWVzKCkge1xyXG4gICAgXHJcbiAgICB0aGlzLm9wZW5DdXN0b20gPSAhdGhpcy5vcGVuQ3VzdG9tO1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5vZmZzZXQ9MDtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEuc29ydCA9ICcnO1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5zb3J0QnkgPSAnJztcclxuICAgIHRoaXMuZHluYW1pY0RhdGEuc2VhcmNoID0gJyc7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyb3cgbWItNVwiPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwic2hvd3NpZGVuYXYgPyAnY29sLXNtLTMnOidkLW5vbmUnXCI+XHJcbiAgICAgPGRpdiBjbGFzcz1cImNhcmQgcG9zaXRpb24tcmVsYXRpdmUgaC0xMDBcIj5cclxuICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTAgb3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbiBbY2xvc2VPdGhlcnNdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBTdGFuZGFyZCBUZW1wbGF0ZSBTdGFydCAgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25JdGVtIFtjb2xsYXBzZWRdPVwib3BlbkFjY29yZGlhblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbiAoY2xpY2spPVwicmVzZXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZ3JpZFwiPlN0YW5kYXJkIFRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHkgY2xhc3M9XCJwdC0wIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGgtYXV0byBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYSByZXBvcnQgdG8gcHJldmlldyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRhdGEgb2Ygc3RhbmRhcmREYXRhXCIgY2xhc3M9XCJtdC01IGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic2VsZWN0UmFkaW8oZGF0YSlcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NoZWNrZWRdPVwic2VsZWN0ZWREYXRhLm5hbWUgPT09IGRhdGEubmFtZVwiIHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwicmFkaW9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgc3RhbmRhcmRcIj57e2RhdGEubmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFN0YW5kYXJkIFRlbXBsYXRlIEVuZCAgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEN1c3RvbSBUZW1wbGF0ZSBTdGFydCAgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tICpuZ0lmPVwiIW9wZW5DdXN0b21cIiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgIG5nYkFjY29yZGlvbkl0ZW0gW2NvbGxhcHNlZF09XCIhb3BlbkN1c3RvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZyBwdC0wXCIgbmdiQWNjb3JkaW9uQnV0dG9uIChjbGljayk9XCJyZXNldFZhbHVlcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ncmlkXCI+Q3VzdG9tIFRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBoLTEwMHB4IHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCB5b3VyIGRhdGEgcG9pbnRzIHRvIGFkZCBpbnRvIHRoZSByZXBvcnRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuaGVhZGVyIHctMTAwIHAtMiBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcHgtMlwiIChjbGljayk9XCJjdXN0b21PcHRpb24oYnV0dG9uKVwiIFtuZ0NsYXNzXT1cInRoaXMuY3VzdG9tYnRuID09PSBidXR0b24gPyAnYnRuICc6JydcIiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGNvc3RvbUJ1dHRvbnNcIj57e2J1dHRvbn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7ICdoZWlnaHQnOiBpbmZyYVRhYmxlLmxlbmd0aCA/ICdhdXRvJyA6ICcxMDAlJyB9XCIgY2xhc3M9XCJvdmVyZmxvdy1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VzdG9tYnRuID09PSAnTWV0cmljcydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIG1ldHJpY3NEYXRhXCIgY2xhc3M9XCJtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJtdC0yIGN1cnNvci1wb2ludGVyXCIgWyhuZ01vZGVsKV09XCJkYXRhLmNoZWNrZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtNSBzdGFuZGFyZCBmcy00XCI+e3tkYXRhLm5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXN0b21idG4gPT09ICdDb21wYXJpc2lvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIGNvbXBhcmlzaW9uRGF0YVwiIGNsYXNzPVwibXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIChjbGljayk9XCJnZXRDb21wYXJpc2lvbihkYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjaGVja2VkXT1cImNvbXBhcmlzaW9uRmlsdGVyID09PSBkYXRhXCIgdHlwZT1cInJhZGlvXCIgY2xhc3M9XCJyYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy01IHN0YW5kYXJkIGZzLTRcIj57e2RhdGF9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXN0b21idG4gPT09ICdUaW1lIEZpbHRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpbHRlckRhdGFcIiBjbGFzcz1cIm10LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAoY2xpY2spPVwiZ2V0RmlsdGVyKGRhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NoZWNrZWRdPVwiZmlsdGVyRGF0YUxpc3QgPT09IGRhdGFcIiB0eXBlPVwicmFkaW9cIiBjbGFzcz1cInJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgc3RhbmRhcmQgZnMtNFwiPnt7ZGF0YSA9PT0gJ2hvdXInID8gJ0J5IEhvdXInIDogJ0J5IERhdGUnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcGVuQ3VzdG9tXCIgY2xhc3M9XCJkLWZsZXggdy0xMDBcIiBbbmdDbGFzc109XCIhbG9hZGluZyA/ICdtdC01JzonJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tb3V0bGluZSB3LTUwIG1lLTMgbWItM1wiIFtuZ0NsYXNzXT1cImN1c3RvbWJ0biA9PT0gJ01ldHJpY3MnID8gJ2hpZGRlbicgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmV0b0JhY2soKVwiPkJhY2s8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjdXN0b21idG4gIT09ICdUaW1lIEZpbHRlcidcIiAoY2xpY2spPVwibW92ZXRvTmV4dCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tcHJpbWFyeSB3LTUwIG1zLTMgbWItM1wiPk5leHQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjdXN0b21idG4gPT09ICdUaW1lIEZpbHRlcidcIiAoY2xpY2spPVwiZHluYW1pY0RhdGEubGltaXQgPSAxMDtjdXN0b21DcmVhdGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXByaW1hcnkgdy01MCBtcy0zIG1iLTNcIj5WaWV3PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEN1c3RvbSBUZW1wbGF0ZSBFbmQgIC0tPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgIFxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTAgbXQtNVwiPiAtLT5cclxuICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cIiFvcGVuQWNjb3JkaWFuXCIgKGNsaWNrKT1cImNyZWF0ZUN1c3RvbSgpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICBDcmVhdGUgQ3VzdG9tIFRlbXBsYXRlXHJcbiAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJvcGVuQ3VzdG9tXCIgY2xhc3M9XCJkLWZsZXggdy0xMDAgbXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tb3V0bGluZSB3LTUwIG1lLTNcIiBbbmdDbGFzc109XCJjdXN0b21idG4gPT09ICdNZXRyaWNzJyA/ICdoaWRkZW4nIDogJydcIiAoY2xpY2spPVwibW92ZXRvQmFjaygpXCI+QmFjazwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImN1c3RvbWJ0biAhPT0gJ1RpbWUgRmlsdGVyJ1wiIChjbGljayk9XCJtb3ZldG9OZXh0KClcIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tcHJpbWFyeSB3LTUwIG1zLTNcIj5OZXh0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY3VzdG9tYnRuID09PSAnVGltZSBGaWx0ZXInXCIgKGNsaWNrKT1cImN1c3RvbUNyZWF0ZSgpXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXByaW1hcnkgdy01MCBtcy0zXCI+VmlldzwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd3NpZGVuYXZcIiAoY2xpY2spPVwic2lkZW5hdigpXCIgY2xhc3M9XCJiYWNrQnV0dG9ucmlnaHQgdGV4dC1jZW50ZXIgcHQtMSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4yNzI1OSAxMi42MzYzTDQuNjM2MjMgOC45OTk4OUw4LjI3MjU5IDUuMzYzNTNNMTMuMzYzNSAxMi42MzYzTDkuNzI3MTQgOC45OTk4OUwxMy4zNjM1IDUuMzYzNTNcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS40NTQ1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInNob3dzaWRlbmF2ID8gJ2NvbC1zbS05JzonY29sLXNtLTEyJ1wiPlxyXG4gICAgIDxkaXYgY2xhc3M9XCJjYXJkIHBvc2l0aW9uLXJlbGF0aXZlICBtaW4taC1zbS0zMDBweCBtaW4taC1tZC00MDBweCAgbWluLWgteGwtNTUwcHggbWluLWgtbGctNTAwcHggbWF4LWgtYXV0b1wiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd3NpZGVuYXZcIiAoY2xpY2spPVwic2lkZW5hdigpXCIgY2xhc3M9XCJiYWNrQnV0dG9ubGVmdCB0ZXh0LWNlbnRlciBwdC0xIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk05LjcyNzE0IDEyLjYzNjVMMTMuMzYzNSA5LjAwMDEzTDkuNzI3MTQgNS4zNjM3N000LjYzNjIzIDEyLjYzNjVMOC4yNzI1OSA5LjAwMDEzTDQuNjM2MjMgNS4zNjM3N1wiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1sYWJlbFwiPnt7c2VsZWN0ZWREYXRhPy5uYW1lIHx8ICdDdXN0b20gVGVtcGxhdGUnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHMtMTQgbWUtMlwiIChjaGFuZ2UpPVwic2VhcmNoRGF0YSgpXCIgWyhuZ01vZGVsKV09XCJ0aGlzLmR5bmFtaWNEYXRhLnNlYXJjaFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IFxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tb3V0bGluZSBtZS0zXCIgKGNsaWNrKT1cIkV4cG9ydGFzWGxzeCgpXCIgW2Rpc2FibGVkXT1cIiFpbmZyYVRhYmxlLmxlbmd0aFwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgPC9zdmc+IDxzcGFuICBjbGFzcz1cIm1zLTNcIj5FeHBvcnQ8L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW91dGxpbmVcIiAoY2xpY2spPVwic2hhcmVEYXRhKClcIj5cclxuICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTAxNjRfNTU3OSlcIj48cGF0aCBkPVwiTTE4LjMzMzIgMS42NjY3NUw5LjE2NjUgMTAuODMzNE0xOC4zMzMyIDEuNjY2NzVMMTIuNDk5OCAxOC4zMzM0TDkuMTY2NSAxMC44MzM0TTE4LjMzMzIgMS42NjY3NUwxLjY2NjUgNy41MDAwOEw5LjE2NjUgMTAuODMzNFwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9XCJjbGlwMF8xMDE2NF81NTc5XCI+PHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPjxzcGFuICpuZ0lmPVwiIXNob3dzaWRlbmF2XCIgY2xhc3M9XCJtcy0zXCI+U2hhcmU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+IFxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgY2FyZCAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCIhbG9hZGluZyAmJiBub0RhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IG15LTggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YW1haW50ZXh0IG10LTNcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFzdWJ0ZXh0XCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciBSZXBvcnQgQW5hbHlzaXM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIiAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGEgJiYgIGluZnJhVGFibGUubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBkaXNwbGF5ZWRDb2x1bW5zO2xldCBpPWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZ2V0RGlzcGxheU5hbWUoY29sdW1uLCBpbmZyYVRhYmxlWzBdKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0aGlzLmR5bmFtaWNEYXRhLnNvcnQudG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLnRvTG93ZXJDYXNlKCkmJiB0aGlzLmR5bmFtaWNEYXRhLnNvcnRCeSAhPT0gMSB8fCB0aGlzLmR5bmFtaWNEYXRhLnNvcnQudG9Mb3dlckNhc2UoKSAhPT0gY29sdW1uLnRvTG93ZXJDYXNlKClcIiBjbGFzcz1cIm1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxLjMzMzM3VjEwLjY2NjdNNi4wMDAxNiAxMC42NjY3TDEwLjY2NjggNi4wMDAwNE02LjAwMDE2IDEwLjY2NjdMMS4zMzM1IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidGhpcy5keW5hbWljRGF0YS5zb3J0LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi50b0xvd2VyQ2FzZSgpID8gJyMwMEEzRkYnIDonIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGhpcy5keW5hbWljRGF0YS5zb3J0LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi50b0xvd2VyQ2FzZSgpICYmIHRoaXMuZHluYW1pY0RhdGEuc29ydEJ5ICE9PSAtMVwiIGNsYXNzPVwibXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInRoaXMuZHluYW1pY0RhdGEuc29ydC50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4udG9Mb3dlckNhc2UoKSA/ICcjMDBBM0ZGJyA6JyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBkYXRhIG9mIGluZnJhVGFibGU7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQga2V5IG9mIGRpc3BsYXllZENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sga2V5ID09PSAnZGF0ZScgPyAoZGF0YVtrZXldIHwgZGF0ZTogJ2RkIE1NTSwgWVlZWScpIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5pbmNsdWRlcygnQXZnIHRpbWUgdG8gSW50ZXJhY3QnKSAmJiBkYXRhW2tleV0gPT09ICctMSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzAnIDogKGRhdGFba2V5XSAhPT0gJycgJiYgZGF0YVtrZXldICE9PSBudWxsICYmIGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkYXRhW2tleV0gOiAnLS0nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBbaXRlbXNQZXJQYWdlXT1cImR5bmFtaWNEYXRhLmxpbWl0XCJcclxuICAgICAgICAgICAgW2N1cnJlbnRQYWdlXT1cIihkeW5hbWljRGF0YS5vZmZzZXQgKyAxKVwiIFt0b3RhbEl0ZW1zXT1cInRvdGFsQ291bnRcIlxyXG4gICAgICAgICAgICBbcGFnaW5hdGlvblNpemVzXT1cInBhZ2VTaXplXCIgW3BhZ2VTaXplXT1cImR5bmFtaWNEYXRhLmxpbWl0XCJcclxuICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCIgKm5nSWY9XCIhbG9hZGluZyAmJiAhbm9EYXRhICYmIGluZnJhVGFibGUubGVuZ3RoXCI+PC9saWItcGFnaW5hdGlvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbmZpcm1hdGlvbk1vZGFsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlci0wXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgPGltZyBzcmM9XCIuL2Fzc2V0cy90YW5nby9JbWFnZXMvY3VzdG9tcG9wdXAtaWNvbi5wbmdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCIgbXQtNVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGVyIGZ3LWJvbGRcIj5DdXN0b20gVGVtcGxhdGUgTmFtZTwvc3Bhbj5cclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIHN1Yi1oZWFkZXIgZnctc2VtaWJvbGRcIj5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSB1c2VyIGdsb2JhbGx5PzwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMTBcIj5cclxuICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3ViLWhlYWRlclwiIHN0eWxlPVwiY29sb3I6ICMzNDQwNTQ7IGZvbnQtd2VpZ2h0OiA0MDA7XCIgZm9yPVwiY3VzdG9tLW5hbWVcIj5UZW1wbGF0ZSBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjdXN0b21OYW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbXQtMlwiIGlkPVwiY3VzdG9tLU5hbWVcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC0xMFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tb3V0bGluZSB3LTUwIG1lLTJcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctNTAgbXMtMlwiIFtkaXNhYmxlZF09XCJjdXN0b21OYW1lID09PSAnJ1wiIChjbGljayk9XCJtb2RhbC5jbG9zZSgpXCI+QXBwbHk8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT4iXX0=
|