@sunbird-cb/cbp-ai 0.1.121 → 0.1.123
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/delete-role-mapping-popup/delete-role-mapping-popup.component.mjs +3 -3
- package/esm2022/lib/components/role-mapping-generation/role-mapping-generation.component.mjs +121 -67
- package/esm2022/lib/components/role-mapping-list/role-mapping-list.component.mjs +3 -3
- package/esm2022/lib/components/view-final-cbp-plan/view-final-cbp-plan.component.mjs +35 -17
- package/esm2022/lib/modules/shared/services/shared.service.mjs +9 -7
- package/fesm2022/sunbird-cb-cbp-ai.mjs +164 -90
- package/fesm2022/sunbird-cb-cbp-ai.mjs.map +1 -1
- package/lib/components/role-mapping-generation/role-mapping-generation.component.d.ts +5 -0
- package/lib/components/role-mapping-generation/role-mapping-generation.component.d.ts.map +1 -1
- package/lib/components/view-final-cbp-plan/view-final-cbp-plan.component.d.ts +1 -0
- package/lib/components/view-final-cbp-plan/view-final-cbp-plan.component.d.ts.map +1 -1
- package/lib/modules/shared/services/shared.service.d.ts +2 -2
- package/lib/modules/shared/services/shared.service.d.ts.map +1 -1
- package/package.json +1 -1
- package/sunbird-cb-cbp-ai-0.1.121.tgz +0 -0
|
@@ -38,6 +38,7 @@ export class ViewFinalCbpPlanComponent {
|
|
|
38
38
|
{ "code": "bn", label: "Bengali" },];
|
|
39
39
|
this.filteredLanguages = [...this.languages];
|
|
40
40
|
this.loading = false;
|
|
41
|
+
this.downloadInProgress = false;
|
|
41
42
|
this.designationData = [];
|
|
42
43
|
this.totalCompetencieObj = { total: 0, behavioral: 0, functional: 0, domain: 0 };
|
|
43
44
|
this.pdfTrigger = false;
|
|
@@ -832,7 +833,6 @@ export class ViewFinalCbpPlanComponent {
|
|
|
832
833
|
}, 2000);
|
|
833
834
|
}
|
|
834
835
|
generateExcel(jsonArray, filename = "final.xlsx") {
|
|
835
|
-
this.loading = true;
|
|
836
836
|
if (!jsonArray || jsonArray.length === 0)
|
|
837
837
|
return;
|
|
838
838
|
const excelCellTextLimit = 32000;
|
|
@@ -969,9 +969,6 @@ export class ViewFinalCbpPlanComponent {
|
|
|
969
969
|
XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
|
|
970
970
|
// Export Excel
|
|
971
971
|
XLSX.writeFile(wb, filename);
|
|
972
|
-
setTimeout(() => {
|
|
973
|
-
this.loading = false;
|
|
974
|
-
}, 5000);
|
|
975
972
|
}
|
|
976
973
|
downloadCSV() {
|
|
977
974
|
let fileName = '';
|
|
@@ -981,21 +978,42 @@ export class ViewFinalCbpPlanComponent {
|
|
|
981
978
|
else {
|
|
982
979
|
fileName = `CBP_Report_${this.sharedService?.cbpPlanFinalObj.ministry.identifier}.xlsx`;
|
|
983
980
|
}
|
|
984
|
-
this.
|
|
981
|
+
this.loading = true;
|
|
982
|
+
this.downloadInProgress = true;
|
|
983
|
+
// Let the loader render before the synchronous Excel generation blocks the UI thread
|
|
984
|
+
setTimeout(() => {
|
|
985
|
+
try {
|
|
986
|
+
this.generateExcel(this.jsonData, fileName);
|
|
987
|
+
}
|
|
988
|
+
finally {
|
|
989
|
+
this.loading = false;
|
|
990
|
+
this.downloadInProgress = false;
|
|
991
|
+
}
|
|
992
|
+
});
|
|
985
993
|
}
|
|
986
994
|
downloadPdfFromBE(context) {
|
|
987
995
|
let selectedLanguage = this.filterForm.get('language')?.value || 'en';
|
|
988
996
|
this.loading = true;
|
|
997
|
+
this.downloadInProgress = true;
|
|
989
998
|
// this.sharedService.downloadPdf(this.sharedService?.cbpPlanFinalObj.ministry.identifier)
|
|
990
|
-
|
|
991
|
-
this.sharedService.downloadPdf(this.sharedService?.cbpPlanFinalObj.ministry.identifier, context, selectedLanguage)
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
+
const download$ = !this.sharedService?.cbpPlanFinalObj.departments
|
|
1000
|
+
? this.sharedService.downloadPdf(this.sharedService?.cbpPlanFinalObj.ministry.identifier, context, selectedLanguage)
|
|
1001
|
+
: this.sharedService.downloadPdfForDepartment(this.sharedService?.cbpPlanFinalObj.ministry.identifier, this.sharedService?.cbpPlanFinalObj.departments, context, selectedLanguage);
|
|
1002
|
+
// Keep the loader until the file has actually been received and saved
|
|
1003
|
+
download$.subscribe({
|
|
1004
|
+
next: () => {
|
|
1005
|
+
this.loading = false;
|
|
1006
|
+
this.downloadInProgress = false;
|
|
1007
|
+
},
|
|
1008
|
+
error: () => {
|
|
1009
|
+
this.loading = false;
|
|
1010
|
+
this.downloadInProgress = false;
|
|
1011
|
+
this.snackBar.open('Unable to download PDF', 'X', {
|
|
1012
|
+
duration: 3000,
|
|
1013
|
+
panelClass: ['snackbar-error']
|
|
1014
|
+
});
|
|
1015
|
+
}
|
|
1016
|
+
});
|
|
999
1017
|
}
|
|
1000
1018
|
getSelectedCourses(department) {
|
|
1001
1019
|
if (!department?.cbp_plans?.length) {
|
|
@@ -1016,11 +1034,11 @@ export class ViewFinalCbpPlanComponent {
|
|
|
1016
1034
|
}
|
|
1017
1035
|
}
|
|
1018
1036
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ViewFinalCbpPlanComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i1.MatDialog }, { token: i0.ChangeDetectorRef }, { token: i2.SharedService }, { token: i3.MatSnackBar }, { token: i4.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1019
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ViewFinalCbpPlanComponent, selector: "app-view-final-cbp-plan", viewQueries: [{ propertyName: "pdfContent", first: true, predicate: ["pdfContent"], descendants: true }, { propertyName: "dialogContent", first: true, predicate: ["dialogContent"], descendants: true }], ngImport: i0, template: "<div class=\"view-cbp-plan\" #dialogContent style=\"max-height: 80vh; overflow: auto;\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div class=\"header-container\">\n <div>\n <div class=\"heading\">View Final <span *ngIf=\"openedFrom === 'cbp'\">CBP</span><span\n *ngIf=\"openedFrom === 'acbp'\">ACBP</span></div>\n </div>\n <div class=\"right-side-container\">\n <div class=\"search-and-buttons-container\">\n <form [formGroup]=\"filterForm\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\" style=\" height: 34px;\">\n <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('language')?.value ? '' : 'Select Language' }}\n </mat-label>\n\n <mat-select formControlName=\"language\" panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\"\n matInput placeholder=\"Search Languages\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'language')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredLanguages\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </form>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n\n\n\n </div>\n <div class=\"section-container\" #pdfContent>\n <header class=\"bg-white header-border\">\n <div class=\"header-flex justify-between\" style=\"width:100%\">\n <div class=\"flex items-center space-x-4\" style=\"width:50%\">\n <div class=\"image-container\">\n <div>\n <img src=\"assets/icons/dopt-logo.png\" alt=\"Department of Personnel & Training\"\n class=\"h-15\" />\n </div>\n <div>\n <img src=\"assets/icons/CBC_logo.svg\" alt=\"Capacity Building Commission Logo\"\n class=\"h-10\" />\n </div>\n <div>\n <img src=\"assets/icons/karmayogiLogo-min.png\" alt=\"Karmayogi Bharat Logo\"\n class=\"h-10\" />\n </div>\n </div>\n </div>\n <div class=\"text-right\" style=\"width:50%\">\n <h1 class=\"text-2xl font-bold text-gray-900\">\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.ministry?.sbOrgType === 'state'\">{{sharedService?.cbpPlanFinalObj?.ministry?.orgName}}</span>\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.ministry?.sbOrgType === 'ministry'\">{{sharedService?.cbpPlanFinalObj?.ministry?.orgName}}</span>\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.department_name\">/{{sharedService?.cbpPlanFinalObj?.department_name}}</span>\n - Capacity Building Plan\n </h1>\n <p class=\"text-gray-600\">Comprehensive Role-Based Competency Analysis</p>\n </div>\n </div>\n </header>\n <div class=\"min-h-screen bg-gradient-to-br from-slate-50 via-blue-50 to-indigo-100\">\n <!-- Header -->\n\n\n <div class=\"max-w-7xl mx-auto px-6 py-8 mt-4\">\n <!-- KPI Dashboard -->\n <div class=\"competency-container mt-2\">\n <div class=\"outside-layer-total\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <path d=\"M14 2v6h6\" />\n <path d=\"M16 13H8\" />\n <path d=\"M16 17H8\" />\n <path d=\"M10 9H8\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.total}}</div>\n </div>\n </div>\n\n <div class=\"mt-4\">\n <div class=\"sub-heading\">\n <p>Total Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Total Competencies: {{totalCompetencieObj?.total}}</div>\n </div>\n <div class=\"count\">\n <!-- {{competenciesCount?.total}} -->\n </div>\n </div>\n <div class=\"outside-layer-behavioral\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M15.5 17a4 4 0 0 1-5 0\" />\n <path d=\"M13 14h.01\" />\n <path d=\"M11 11h.01\" />\n <path d=\"M17 14h.01\" />\n <path d=\"M13 10h.01\" />\n <path d=\"M13 18h.01\" />\n <path d=\"M13 6h.01\" />\n <path d=\"M17 18h.01\" />\n <path d=\"M17 6h.01\" />\n <path d=\"M21 12a9 9 0 0 1-9 9a9 9 0 0 1-9-9a9 9 0 0 1 9-9a9 9 0 0 1 9 9z\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.behavioral}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Behavioral Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-behavioural\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Behavioral Competencies: {{totalCompetencieObj?.behavioral}}\n </div>\n </div>\n\n </div>\n <div class=\"outside-layer-functional\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\" />\n <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.functional}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Functional Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-functional\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Functional Competencies: {{totalCompetencieObj?.functional}}</div>\n </div>\n\n\n </div>\n <div class=\"outside-layer-domain\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <circle cx=\"12\" cy=\"12\" r=\"6\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.domain}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Domain Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-domain\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Domain Competencies: {{totalCompetencieObj?.domain}}</div>\n </div>\n\n </div>\n </div>\n <!-- <div class=\"mb-8\">\n <h2 class=\"text-2xl font-bold text-gray-900 mb-6nheading\">Competency Overview</h2>\n <div class=\"competency-grid\">\n <ng-container *ngFor=\"let kpi of overallKPIs;\">\n <div class=\"bg-white rounded-xl outside-layer-total p-6 border-l-4 hover:shadow-xl transition-shadow\" [style.border-left-color]=\"kpi.color\">\n <div class=\"flex items-center justify-between mb-4 inside-layer\">\n <div [class]=\"'p-3 rounded-lg ' + kpi.bgColor\">\n <ng-container [ngSwitch]=\"kpi.name\">\n <svg *ngSwitchCase=\"'Behavioral Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M15.5 17a4 4 0 0 1-5 0\"/>\n <path d=\"M13 14h.01\"/><path d=\"M11 11h.01\"/><path d=\"M17 14h.01\"/><path d=\"M13 10h.01\"/>\n <path d=\"M13 18h.01\"/><path d=\"M13 6h.01\"/><path d=\"M17 18h.01\"/><path d=\"M17 6h.01\"/>\n <path d=\"M21 12a9 9 0 0 1-9 9a9 9 0 0 1-9-9a9 9 0 0 1 9-9a9 9 0 0 1 9 9z\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Functional Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"/><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Domain Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/><circle cx=\"12\" cy=\"12\" r=\"6\"/><circle cx=\"12\" cy=\"12\" r=\"2\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Total Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/>\n <path d=\"M14 2v6h6\"/><path d=\"M16 13H8\"/><path d=\"M16 17H8\"/><path d=\"M10 9H8\"/>\n </svg>\n \n </ng-container>\n </div>\n <div class=\"text-right\">\n <div class=\"text-2xl font-bold text-gray-900\">{{kpi.total}}</div>\n </div>\n </div>\n <h3 class=\"text-gray-900 font-semibold mb-2 heading\">{{kpi.name}}</h3>\n <div class=\"w-full bg-gray-200 rounded-full h-3\">\n <div class=\"h-3 rounded-full transition-all duration-500\"\n [style.width.%]=\"kpi.avgCompletion\"\n [style.background-color]=\"kpi.color\">\n </div>\n </div>\n <p class=\"text-sm text-gray-500 mt-2\">Total Competencies: {{kpi.total}}</p>\n </div>\n </ng-container>\n </div>\n </div> -->\n\n <!-- Designation Reports -->\n <div class=\"space-y-8 mt-4\">\n <h2 class=\"text-2xl font-bold text-gray-900 mb-6 heading\">Detailed Competency Framework by\n Designation</h2>\n\n <ng-container *ngFor=\"let designation of designationData;\">\n <div class=\"bg-white rounded-xl overflow-hidden section-shadow\">\n <!-- Header -->\n <div\n class=\"bg-gradient-to-r from-indigo-600 to-blue-600 text-white p-6 heading-with-bg\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h3 class=\"text-2xl font-bold mb-2 heading-bg\">{{designation.designation}}\n </h3>\n <p class=\"text-indigo-100 mb-1\">Wing/Division: {{designation.wing}}</p>\n </div>\n <div class=\"flex items-center space-x-4 competency-count-by-designation\">\n <span class=\"font-semibold text-sm\">Behavioral:\n {{designation.behavioralCompetencies.length}} total</span>\n <span class=\"font-semibold text-sm\">Functional:\n {{designation.functionalCompetencies.length}} total</span>\n <span class=\"font-semibold text-sm\">Domain:\n {{designation.domainCompetencies.length}} total</span>\n </div>\n </div>\n </div>\n\n <!-- Body -->\n <div class=\"p-4 section-shadow\">\n <!-- Roles -->\n <div class=\"mb-6\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Roles & Responsibilities\n </h4>\n <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2\">\n <div *ngFor=\"let role of designation.rolesResponsibilities; let i = index\"\n class=\"bg-gray-50 p-2 rounded border-l-3 border-indigo-500\">\n <p class=\"text-sm text-gray-700 leading-relaxed\">{{role}}</p>\n </div>\n </div>\n </div>\n <!-- Activities -->\n <div class=\"mb-6 mt-4\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Activities\n </h4>\n <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2\">\n <div *ngFor=\"let role of designation.activities; let i = index\"\n class=\"bg-gray-50 p-2 rounded border-l-3 border-indigo-500\">\n <p class=\"text-sm text-gray-700 leading-relaxed\">{{role}}</p>\n </div>\n </div>\n </div>\n <div class=\"page-break\"></div>\n <!-- Competencies -->\n <div class=\"competencis-grid mt-4\">\n <!-- Behavioral -->\n <div class=\"bg-blue-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-blue-800 text-base mb-2\">Behavioral</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-behavioral\">\n <div *ngFor=\"let comp of designation.behavioralCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-blue-400\">\n {{comp}}\n <div class=\"flex-col-theme\">\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.behavioralSetForProficiencyLevel[i]\"\n class=\"proficiency-tag\"\n [ngClass]=\"designation.behavioralSetForProficiencyLevel[i]?.toLowerCase()\"\n [matTooltip]=\"designation.behavioralSetForProficiencyLevelRationale[i]\"\n >\n {{ designation.behavioralSetForProficiencyLevel[i] }}\n </span>\n\n \n </span>\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.behavioralSetForDeliveryMode[i]\"\n class=\"delivery-mode-tag\"\n [ngClass]=\"designation.behavioralSetForDeliveryMode[i]?.toLowerCase()\"\n [matTooltip]=\"designation.behavioralSetForDeliveryModeRationale[i]\"\n >\n {{ designation.behavioralSetForDeliveryMode[i] }}\n </span>\n\n \n </span>\n </div>\n </div>\n \n </div>\n \n <div class=\"mt-2 text-sm text-blue-600 font-medium\">\n {{designation.behavioralCompetencies.length}} total\n </div>\n </div>\n\n <!-- Functional -->\n <div class=\"bg-green-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-green-800 text-base mb-2\">Functional</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-functional\">\n <div *ngFor=\"let comp of designation.functionalCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-green-400\">\n {{comp}}\n <div class=\"flex-col-theme\">\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.functionalSetForProficiencyLevel[i]\"\n class=\"proficiency-tag\"\n [ngClass]=\"designation.functionalSetForProficiencyLevel[i]?.toLowerCase()\"\n [matTooltip]=\"designation.functionalSetForProficiencyLevelRationale[i]\"\n >\n {{ designation.functionalSetForProficiencyLevel[i] }}\n </span>\n\n \n </span>\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.functionalSetForDeliveryMode[i]\"\n class=\"delivery-mode-tag\"\n [ngClass]=\"designation.functionalSetForDeliveryMode[i]?.toLowerCase()\"\n [matTooltip]=\"designation.functionalSetForDeliveryModeRationale[i]\"\n >\n {{ designation.functionalSetForDeliveryMode[i] }}\n </span>\n\n \n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-2 text-sm text-green-600 font-medium\">\n {{designation.functionalCompetencies.length}} total\n </div>\n </div>\n\n <!-- Domain -->\n <div class=\"bg-purple-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-purple-800 text-base mb-2\">Domain</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-domain\">\n <div *ngFor=\"let comp of designation.domainCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-purple-400\">\n {{comp}}\n <div class=\"flex-col-theme\">\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.domainSetForProficiencyLevel[i]\"\n class=\"proficiency-tag\"\n [ngClass]=\"designation.domainSetForProficiencyLevel[i]?.toLowerCase()\"\n [matTooltip]=\"designation.domainSetForProficiencyLevelRationale[i]\"\n >\n {{ designation.domainSetForProficiencyLevel[i] }}\n </span>\n\n \n </span>\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.domainSetForDeliveryMode[i]\"\n class=\"delivery-mode-tag\"\n [ngClass]=\"designation.domainSetForDeliveryMode[i]?.toLowerCase()\"\n [matTooltip]=\"designation.domainSetForDeliveryModeRationale[i]\"\n >\n {{ designation.domainSetForDeliveryMode[i] }}\n </span>\n\n \n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-2 text-sm text-purple-600 font-medium\">\n {{designation.domainCompetencies.length}} total\n </div>\n </div>\n </div>\n <!-- Adding courses -->\n <div class=\"cbp mt-4\"\n *ngIf=\"designation.selectedCourses?.length && openedFrom === 'acbp'\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Courses\n </h4>\n <div class=\"course-list-container\">\n <div class=\"course-list-item\"\n *ngFor=\"let item of designation.selectedCourses; let i = index\">\n <div class=\"course-header\">\n <div class=\"checked-course-container\">\n\n <div>\n <div class=\"course-pill\">\n <div class=\"course-pill-text\">\n <span><img\n src=\"assets/icons/course.svg\"></span> <span>Course</span>\n </div>\n </div>\n </div>\n\n </div>\n <div *ngIf=\"item?.rationale && !item?.is_public\">\n <div class=\"ai-recommened-pill-green\">\n <div class=\"ai-recommened-pill-green-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>AI Recommended - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"item?.rationale && item?.is_public\">\n <div class=\"ai-recommened-pill-public\">\n <div class=\"ai-recommened-pill-public-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>AI Recommended - Public </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item?.rationale\">\n <div class=\"ai-recommened-pill-gray\">\n <div class=\"ai-recommened-pill-gray-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>Manually Suggested - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"course-title mt-4\">\n <div>\n <div *ngIf=\"item?.course\">{{item?.course}}</div>\n <div *ngIf=\"item?.name\">{{item?.name}}</div>\n </div>\n </div>\n <div class=\"course-desc mt-2\">\n <div *ngIf=\"isPDFDownload\">\n <div>{{item?.rationale}}</div>\n </div>\n </div>\n <div class=\"mt-3\"\n *ngIf=\"getCompetenciesByType('Behavioural',item)?.length\">\n <div class=\"competency-sub-heading\">Behavioral Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"behavioural-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Behavioural',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Behavioural',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Behavioural',item)\">\n {{ isExpanded('Behavioural',item) ? 'Show Less' : '+' +\n getRemainingCount('Behavioural',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\"\n *ngIf=\"getCompetenciesByType('Functional',item)?.length\">\n <div class=\"competency-sub-heading\">Functional Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"functional-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Functional',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Functional',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Functional',item)\">\n {{ isExpanded('Functional',item) ? 'Show Less' : '+' +\n getRemainingCount('Functional',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\" *ngIf=\"getCompetenciesByType('Domain',item)?.length\">\n <div class=\"competency-sub-heading\">Domain Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"domain-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Domain',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Domain',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Domain',item)\">\n {{ isExpanded('Domain',item) ? 'Show Less' : '+' +\n getRemainingCount('Domain',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2 d-flex justify-content-between item\">\n <div class=\"relevancy-container\">\n <div class=\"relevancy\">Relevancy</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\" *ngIf=\"item?.relevancy\">\n {{item?.relevancy}}%</div>\n <div class=\"percentage\" *ngIf=\"!item?.relevancy\">N/A</div>\n </div>\n\n </div>\n\n </div>\n\n </div>\n </div>\n\n <!-- adding courses -->\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Footer -->\n\n </div>\n <footer class=\"org-footer\">\n <div class=\"max-w-7xl mx-auto px-6 flex flex-col md:flex-row items-center justify-between\">\n <div class=\"flex items-center space-x-4 mb-4 mt-4 md:mb-0 footer-container\">\n <div class=\"footer-logo-container\">\n <img src=\"assets/icons/karmayogiLogo-min.png\" alt=\"Karmayogi Bharat Logo\" class=\"h-10\"\n style=\"margin-left:20px\" />\n </div>\n <div style=\"margin-left: 100px;\">\n <a href=\"https://karmayogibharat.gov.in\" target=\"_blank\" rel=\"noopener noreferrer\"\n class=\"text-sm font-semibold transition-colors\">\n karmayogibharat.gov.in\n </a>\n </div>\n\n\n </div>\n <div class=\"text-sm text-center md:text-right mb-4\" style=\"margin-left: 100px;\">\n <p>© 2025 All Rights Reserved.</p>\n </div>\n </div>\n </footer>\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Download as Excel\" (click)=\"downloadCSV()\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Download as PDF\"\n (click)=\"downloadPdfFromBE(openedFrom)\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n </div>\n </div>\n <div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </div>", styles: ["@charset \"UTF-8\";.container{margin:10px auto}.sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:150%}::ng-deep mat-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}::ng-deep .mat-select-panel{background-color:#fff!important}::ng-deep .mat-select-panel .mat-option{border-radius:0!important}::ng-deep mat-form-field .mat-form-field-underline{display:none!important}::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.btn-group{display:flex;flex-direction:row;justify-content:space-between}.pl-2{padding-left:5px}.search-filter-section{display:flex;flex-direction:row;justify-content:space-between}.search .rsearch{position:relative}.search .search-icon{position:absolute;top:15px;font-size:20px;left:10px}.search .sinput{border-radius:32px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato;width:800px}.select-map-route-container{display:flex;flex-direction:row}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.search-container{display:flex;flex-direction:row}.course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.ai-recommened-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #1B4CA1;background:#1b4ca129}.igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:30px}.course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.relevancy,.competencies-matched{color:var(--accessbility-shades-with-opacity-kb-greys-black-60, rgba(0, 0, 0, .6));font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;align-items:center}.percentage{color:#1d8923;font-family:Lato;font-size:14px;font-style:normal;font-weight:800;line-height:normal}.relevancy-container,.competencies-matched-container{display:flex;flex-direction:row;align-items:center}.dash{padding:0 5px}::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.course-list-container{display:flex;flex-wrap:wrap;gap:16px}.course-list-item{flex:0 0 48%;box-sizing:border-box;border:1px solid #ccc;padding:16px;background-color:#fff;border-radius:8px}.checked-course-container{display:flex}.ml-2{margin-left:8px}::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.ai-recommened-pill-text,.igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.ai-loader-icon img,.igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.competency-container{display:flex;justify-content:normal;flex-direction:row;gap:16px}.outside-layer-total{display:flex;padding:4px 20px;justify-content:left;align-items:left;gap:6px;border-radius:12px;border-left:2px solid #1B4CA1;border-right:2px solid #1B4CA1;background:#edf1f8;flex-direction:column;width:25%}.outside-layer-functional{display:flex;padding:4px 12px;justify-content:left;align-items:left;gap:16px;border-radius:12px;border-left:2px solid #E24577;border-right:2px solid #E24577;background:#f8d2de;flex-direction:column;width:25%}.outside-layer-domain{display:flex;padding:4px 12px;justify-content:left;align-items:left;gap:16px;border-radius:12px;border-left:2px solid #7B47A4;border-right:2px solid #7B47A4;background:#dfd3e9;flex-direction:column;width:25%}.outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:left;align-items:left;gap:16px;border-radius:12px;border-left:2px solid #F8B861;border-right:2px solid #F8B861;background:#fde8cc;flex-direction:column;width:25%}.inside-layer{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.suggest-course-control{display:flex;flex-direction:row}.course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.heading{color:#000;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.heading-bg{color:#fff;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.behavioural-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:99px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:5px 0}.functional-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:99px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:5px 0}.domain-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:99px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:5px 0}.popup-header{display:flex;flex-direction:row;justify-content:space-between}.popup-footer{display:flex;flex-direction:row;justify-content:center}.view-cbp-plan{margin:10px;padding:10px}.view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.section{border-radius:8px;background:#1b4ca114;padding:16px}.popup-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;font-weight:700;flex-shrink:0}.popup-footer{display:flex;justify-content:center;gap:16px;padding:16px 24px;background-color:#fff;flex-shrink:0;position:sticky;bottom:-15px}.section-container{overflow-y:auto;flex:1 1 auto;display:flex;flex-direction:column;justify-content:center;align-items:center}.competency-list{display:flex;flex-direction:row;gap:16px}.competency-text{color:#000;font-family:Lato;font-size:10px;font-style:normal;font-weight:700;line-height:normal}.competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:12px;font-style:normal;font-weight:600;line-height:normal}.cursor-pointer{cursor:pointer}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center}.grid{display:grid;gap:1.5rem}.grid-cols-1{grid-template-columns:repeat(1,1fr)}@media (min-width: 768px){.md\\:grid-cols-2{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.lg\\:grid-cols-4{grid-template-columns:repeat(4,1fr)}}.kpi-card{background:#fff;border-radius:12px;padding:1.5rem;box-shadow:0 4px 14px #0000000d;border-left:4px solid transparent;transition:box-shadow .3s ease}.kpi-card:hover{box-shadow:0 8px 24px #0000001a}.kpi-icon{padding:.75rem;border-radius:.5rem;display:flex;align-items:center;justify-content:center}.kpi-text{font-size:1.25rem;font-weight:700}.progress-container{background:#e5e7eb;height:.75rem;border-radius:9999px;margin-top:.5rem}.progress-bar{height:100%;border-radius:9999px;transition:width .4s ease}.competency-block{background-color:#fff;border-radius:12px;box-shadow:0 2px 10px #0000000f;overflow:hidden}.competency-header{padding:1.5rem;background:linear-gradient(to right,#4f46e5,#3b82f6);color:#fff}.competency-header h3{font-size:1.25rem;font-weight:600}.competency-body{padding:1rem}.role-card{background-color:#f9fafb;padding:.5rem;border-left:4px solid #6366f1;border-radius:6px}.role-title{font-size:1rem;font-weight:600;margin-bottom:.75rem;display:flex;align-items:center;color:#1e40af}.comp-section{border-radius:.5rem;padding:.75rem;background-color:#f0f9ff;margin-bottom:1rem}.comp-section h4{font-weight:600;margin-bottom:.5rem}.comp-item{background-color:#fff;border-left:3px solid #3b82f6;padding:.5rem;border-radius:4px;margin-bottom:.25rem;font-size:.875rem}.bg-blue-50{background-color:#fde8cc;border-radius:4px}.bg-green-50{background-color:#f8d2de;border-radius:4px}.bg-purple-50{background-color:#dfd3e9;border-radius:4px}.text-blue-800{color:#1e3a8a}.text-green-800{color:#ff1493}.text-purple-800{color:#6b21a8}.border-blue-400{border-color:#60a5fa}.border-green-400{border-color:#34d399}.border-purple-400{border-color:#c084fc}.text-sm{font-size:.875rem}.text-gray-700{color:#374151}.icon-sm{width:24px;height:24px}.heading-with-bg{background:#4f46e5;padding:24px;border-radius:8px 8px 0 0}.competencis-grid{display:flex;flex-direction:row;justify-content:space-between;gap:16px}.section-shadow{padding:16px;border-radius:4px;background:#fff;box-shadow:0 2px 4px #0000001a,0 1px 10px #0000000f}.count{color:#1b4ca1;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.competency-grid{display:flex;flex-direction:row;gap:16px;justify-content:space-between}.text-blue-600{color:#1b4ca1;font-weight:600}.text-green-600{color:#ff1493;font-weight:600}.text-purple-600{color:#6b21a8;font-weight:600}.horizontal-flex{display:flex;align-items:center;justify-content:space-between;width:100%}.progress-bar{width:100%;height:10px;background-color:#e0e0e0;border-radius:10px;overflow:hidden;box-shadow:inset 0 1px 3px #0003}.progress-bar-fill{height:100%;background-color:#1b4ca1;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.progress-bar-fill-behavioural{height:100%;background-color:#f8b861;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.progress-bar-fill-functional{height:100%;background-color:#e24577;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.progress-bar-fill-domain{height:100%;background-color:#7b47a4;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.sub-text{font-size:12px;font-weight:600;font-family:Lato}.competency-count-by-designation{display:flex;gap:10px;flex-direction:row}.competencies-grid-3{width:33%}.grid-list-item div{padding:5px 10px;margin:10px 0}.grid-list-item-behavioral div{border-left:2px solid darkorange}.grid-list-item-functional div{border-left:2px solid #ff1493}.grid-list-item-domain div{border-left:2px solid #6b21a8}.header-flex{display:flex;flex-direction:row;width:100%;justify-content:space-between;gap:30px}.header-border{border-bottom:1px solid #ccc;margin:10px;padding:10px}.text-gray-600{font-family:Lato;font-size:14px;font-weight:600}.image-container .h-10,.image-container .h-15{height:50px}.image-container{display:flex;gap:10px;flex-direction:row}.org-footer{display:flex;flex-direction:row;background:#fff;gap:16px;color:#000;width:100%;justify-content:center;align-items:center;border-top:1px solid #ccc;border-bottom:1px solid #ccc}.dialog-scrollable-content{max-height:70vh;overflow-y:auto}.org-footer a{color:#000!important}h1{font-size:1.75rem!important}@media print{.org-footer,.header-border{page-break-inside:avoid}}.header-border{padding-top:10px;padding-bottom:10px;background-color:#fff}.footer-container{display:flex;justify-content:center;align-items:center;flex-direction:column}.footer-logo-container{display:flex;justify-content:center;align-items:center;flex-direction:row;width:30%}.avoid-page-break{page-break-inside:avoid;break-inside:avoid}.pdf-clean *{box-shadow:none!important;filter:none!important;transform:none!important}.view-cbp-plan.pdf-clean{overflow:visible!important;max-height:none!important}.section-container,.popup-container,.outside-layer-total,.outside-layer-behavioral,.outside-layer-functional,.outside-layer-domain,.section-shadow{page-break-inside:avoid!important;break-inside:avoid!important}.bg-gradient-to-br{background:none!important}.section-container,.outside-layer-total,.outside-layer-behavioral,.outside-layer-functional,.outside-layer-domain,.competencis-grid{page-break-inside:avoid}.page-break{page-break-before:always}.cbp .container{margin:10px auto}.cbp .sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.cbp .ministry-heading{color:#1b4ca1;font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal}.cbp .radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.cbp .radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.cbp .label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:16px;font-style:normal;font-weight:700;line-height:150%}.cbp ::ng-deep mat-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}.cbp ::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}.cbp ::ng-deep .mat-select-panel{background-color:#fff!important}.cbp ::ng-deep .mat-select-panel .mat-option{border-radius:0!important}.cbp ::ng-deep mat-form-field .mat-form-field-underline{display:none!important}.cbp ::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.cbp ::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}.cbp ::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.cbp .additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.cbp .section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.cbp .btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.cbp .btn-group{display:flex;flex-direction:row;justify-content:space-between}.cbp .pl-2{padding-left:5px}.cbp .search-filter-section{display:flex;flex-direction:row;justify-content:space-between}.cbp .search .rsearch{position:relative}.cbp .search .search-icon{position:absolute;top:15px;font-size:20px;left:10px}.cbp .search .sinput{border-radius:32px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato;width:800px}.cbp .select-map-route-container{display:flex;flex-direction:row}.cbp .selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.cbp .edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.cbp .search-container{display:flex;flex-direction:row}.cbp .course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.cbp .course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.cbp .course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.cbp .ai-recommened-pill-green{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#0080001c}.cbp .ai-recommened-pill-green-text{color:#006400;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-public{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#1b4ca129}.cbp .ai-recommened-pill-public-text{color:#1b4ca1;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-gray{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#d3d3d3}.cbp .ai-recommened-pill-gray-text{color:#000;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-orange{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#ffa50052}.cbp .ai-recommened-pill-orange-text{color:#5a3f0d;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-orange-text a{color:#5a3f0d!important;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.cbp .course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:22px}.cbp .course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:1.4;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.cbp .relevancy,.cbp .competencies-matched{color:#6c757d;font-family:Lato;font-size:12px;font-style:normal;font-weight:500;line-height:normal;align-items:center}.cbp .percentage{color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:600;line-height:normal}.cbp .delete-button input{background-color:#b60a0a;border-radius:10px}.cbp .relevancy-container,.cbp .competencies-matched-container{display:flex;flex-direction:row;align-items:center}.cbp .dash{padding:0 5px}.cbp ::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.cbp .course-list-container{display:flex;flex-wrap:wrap;gap:16px;width:100%;padding:1rem}.cbp .course-list-item{flex:1 1 calc(50% - 10px);min-width:350px;max-width:500px;box-sizing:border-box;border:1px solid #e0e0e0;padding:16px;background-color:#fff;border-radius:12px;min-height:auto;box-shadow:0 2px 4px #0000001a;transition:box-shadow .2s ease;display:flex;flex-direction:column}.cbp .course-list-item:hover{box-shadow:0 4px 8px #00000026}.cbp .course-list-item:only-child{flex:1 1 auto;max-width:800px}.cbp .checked-course-container{display:flex;width:60%}.cbp .ml-2{margin-left:8px}.cbp ::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.cbp .igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.cbp .course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.cbp .ai-loader-icon img,.cbp .igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.cbp .competency-container{display:flex;justify-content:normal;gap:16px;flex-direction:row}.cbp .outside-layer-total{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #1B4CA1;background:#edf1f8;width:132px}.cbp .outside-layer-functional{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #E24577;background:#f8d2de;width:132px}.cbp .outside-layer-domain{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #7B47A4;background:#dfd3e9;width:132px}.cbp .outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #F8B861;background:#fde8cc;width:132px}.cbp .inside-layer{color:#1b4ca1;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.cbp .count{color:#1b4ca1;font-family:Montserrat;font-size:18px;font-style:normal;font-weight:600;line-height:normal}.cbp .suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.cbp .suggest-course-control{display:flex;flex-direction:row}.cbp .course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.cbp .highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.cbp .ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.cbp .heading{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.cbp .pdf-heading{color:#000;font-family:Montserrat;font-size:18px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0;text-align:center}.cbp .popup-header{display:flex;justify-content:space-between;align-items:center;padding:16px;border-bottom:1px solid #e0e0e0}.cbp .header-left{flex:1}.cbp .header-actions{display:flex;align-items:center;gap:12px}.cbp .regenerate-btn{display:flex;align-items:center;gap:8px;padding:8px 16px;border-radius:6px;font-size:14px;font-weight:500;min-width:auto}.cbp .regenerate-btn .mat-icon{margin:0;font-size:18px;width:18px;height:18px}.cbp .regenerate-btn .mat-spinner{margin:0}.cbp .regenerate-btn:disabled{opacity:.7;cursor:not-allowed}.cbp .close-btn{padding:8px;border-radius:4px;transition:background-color .2s ease}.cbp .close-btn:hover{background-color:#f5f5f5}.cbp .close-btn .mat-icon{font-size:20px;width:20px;height:20px}.cbp .progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.cbp .progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.cbp .behavioural-pill{display:flex;padding:2px 6px;justify-content:center;align-items:center;gap:4px;border-radius:16px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:2px 4px 2px 0;font-size:12px}.cbp .functional-pill{display:flex;padding:2px 6px;justify-content:center;align-items:center;gap:4px;border-radius:16px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:2px 4px 2px 0;font-size:12px}.cbp .domain-pill{display:flex;padding:2px 6px;justify-content:center;align-items:center;gap:4px;border-radius:16px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:2px 4px 2px 0;font-size:12px}.cbp .popup-header{display:flex;flex-direction:row;justify-content:space-between}.cbp .popup-footer{display:flex;flex-direction:row;justify-content:end}.cbp .view-cbp-plan{margin:10px;padding:10px}.cbp .view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.cbp .section{border-radius:8px;background:#1b4ca114;padding:16px}.cbp .popup-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;font-weight:700;flex-shrink:0}.cbp .popup-footer{display:flex;justify-content:flex-end;gap:16px;padding:16px 24px;border-top:1px solid #ddd;background-color:#fff;flex-shrink:0;position:sticky;bottom:0}.cbp .section-container{overflow-y:auto;flex:1 1 auto}.cbp .competency-list{display:flex;flex-direction:row;gap:0px;flex-wrap:wrap;margin:0;padding:0;list-style:none}.cbp .competency-text{color:#000;font-family:Lato;font-size:12px;font-style:normal;font-weight:400;line-height:normal;padding:3px 6px}.cbp .competency-text-behavioral{color:#654321;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.cbp .competency-text-functional{color:#b01669;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.cbp .competency-text-domain{color:#301934;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.cbp .competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:14px;font-style:normal;font-weight:600;line-height:normal}.cbp .cursor-pointer{cursor:pointer}.cbp .btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.cbp .custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.cbp .overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center}.cbp .competencis-grid{display:flex;flex-direction:row;justify-content:space-between;gap:16px}.cbp .grid-list-item-behavioral div{border-left:2px solid darkorange}.cbp .grid-list-item-functional div{border-left:2px solid #ff1493}.cbp .grid-list-item-domain div{border-left:2px solid #6b21a8}.cbp .competencies-grid-3{width:33%}.cbp .bg-blue-50{background-color:#fde8cc;border-radius:4px}.cbp .bg-green-50{background-color:#f8d2de;border-radius:4px}.cbp .bg-purple-50{background-color:#dfd3e9;border-radius:4px}.cbp .grid-list-item div{padding:5px 10px;margin:10px 0}.cbp .course-pill-container{display:flex;gap:8px}.cbp .relevancy-pill-green{display:flex;padding:4px 8px;align-items:center;gap:4px;border-radius:16px;border:1px solid #e0e0e0;background:#f8f9fa}.cbp .mt-1{margin-top:.25rem}.cbp .mt-2{margin-top:.5rem}.cbp .mt-3{margin-top:.75rem}.cbp .show-more-competency{display:inline-flex;align-items:center}.cbp .show-more-link{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:500;line-height:normal;margin:2px 4px 2px 0;text-decoration:none}.cbp .show-more-link:hover{text-decoration:underline}.cbp .course-content{flex:1;display:flex;flex-direction:column}.cbp .course-footer{margin-top:auto;padding-top:12px;display:flex;justify-content:space-between}.cbp ::ng-deep .mdc-tab__text-label{font-weight:700;font-family:Montserrat!important;font-size:16px;color:#000!important;text-transform:capitalize}.cbp .competency-tag{display:inline-block;padding:.25rem .75rem;border-radius:9999px;font-size:.75rem;font-weight:500;margin-right:.5rem;margin-bottom:.5rem}.cbp .menu-list-item.active{background-color:#1b4ca1;color:#fff}.cbp .menu-list-item:hover{background-color:#1b4ca1;color:#fff;border-color:#1b4ca1}.cbp .gray-bg{background-color:rgb(248,250,252,var(--tw-bg-opacity, 1));border-radius:8px;border:1px solid #ccc}.cbp .div-count{font-family:Lato;font-size:20px;font-weight:700}.cbp .green-bg{background-color:#0080001c;border:1px solid #006400;border-radius:8px}.cbp .div-green-count{font-family:Lato;font-size:20px;font-weight:700;color:#006400}.cbp .div-green-label{color:#006400;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.cbp .gray-bg-item{background-color:rgb(248,250,252,var(--tw-bg-opacity, 1));border-radius:8px;border:1px solid #ccc;padding:4px 8px;margin:10px}.cbp .add-btn{color:#1b4ca1;font-size:14px;font-family:Lato}.cbp .list-flex{display:flex;flex-direction:row;justify-content:space-between}.cbp .all-category-list .mat-icon{vertical-align:middle}.cbp .course-list-container-flex{display:flex;align-items:flex-start;gap:2rem}.cbp .left-panel{flex:0 0 250px;font-weight:700;text-align:left}.cbp .right-panel{flex:1;display:flex;flex-direction:row;flex-wrap:wrap;gap:20px;align-content:flex-start;justify-content:flex-start}.cbp .category-list-item{font-weight:400;font-size:16px;font-family:Lato;padding:5px}.cbp .right-panel-flex{display:flex;flex:0 0 100%;width:100%;flex-direction:row;flex-wrap:wrap;gap:20px;justify-content:flex-start}.cbp .course-list-container-right-flex{display:flex}.cbp .no-gaps-message{display:flex;flex-direction:column;align-items:center;padding:24px;background:linear-gradient(135deg,#4caf501a,#81c7841a);border:2px solid #4CAF50;border-radius:16px;margin:16px 0}.cbp .no-gaps-message .success-icon{font-size:25px;color:#4caf50;margin-bottom:16px}.cbp .no-gaps-message h4{color:#2e7d32;font-family:Montserrat;font-size:20px;font-weight:600;margin:0 0 8px;text-align:center}.cbp .no-gaps-message p{color:#388e3c;font-family:Lato;font-size:14px;font-weight:400;margin:0;text-align:center;line-height:1.5}.cbp .section-header-improved{display:flex;flex-direction:column;gap:16px}.cbp .search-and-buttons-container{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.cbp .search-container-compact{flex:0 0 auto;min-width:280px}.cbp .search-container-compact .rsearch{position:relative;display:flex;align-items:center}.cbp .search-container-compact .search-icon{position:absolute;left:12px;color:#666;font-size:20px;z-index:1}.cbp .search-container-compact .sinput-compact{border-radius:25px;border:1px solid #d5d0d0;padding:8px 12px 8px 40px;height:32px;width:100%;font:400 14px Lato;box-sizing:border-box;transition:border-color .3s ease}.cbp .search-container-compact .sinput-compact:focus{outline:none;border-color:#1b4ca1;box-shadow:0 0 0 2px #1b4ca11a}.cbp .search-container-compact .sinput-compact::placeholder{color:#999}.cbp .btn-group-compact{display:flex;gap:8px;flex:0 0 auto}.cbp .category-list-item{padding:8px 12px!important;border-radius:6px;border:1px solid transparent;transition:all .3s ease;background:#f8f9fa;color:#333;font-family:Lato;font-size:14px!important;font-weight:400!important}.cbp .category-list-item:hover{background:#1b4ca10d;border-color:#1b4ca133}.cbp .category-list-item.selected-theme{background:#1b4ca11a;border-color:#1b4ca1;color:#1b4ca1;font-weight:600!important}.cbp .category-list-item.selected-theme:before{content:\"\\2713 \";color:#1b4ca1;font-weight:700}.cbp .theme-filter-controls{margin-bottom:8px}.cbp .clear-filter-btn{background:#f8f9fa;border:1px solid #ddd;border-radius:20px;padding:4px 12px;font-size:12px;color:#666;cursor:pointer;transition:all .3s ease;display:flex;align-items:center;gap:4px}.cbp .clear-filter-btn:hover{background:#e9ecef;border-color:#adb5bd}.cbp .clear-filter-btn mat-icon{font-size:16px;width:16px;height:16px}.cbp .no-course-found-container{display:flex;justify-content:center;align-items:center;min-height:300px;padding:20px}.cbp .no-course-card{background:linear-gradient(135deg,#f8f9fa,#e9ecef);border:2px dashed #ced4da;border-radius:16px;padding:40px;text-align:center;max-width:500px;box-shadow:0 4px 12px #0000000d}.cbp .no-course-card .no-course-icon{margin-bottom:20px}.cbp .no-course-card .no-course-icon mat-icon{font-size:48px;width:48px;height:48px;color:#6c757d}.cbp .no-course-card .no-course-content h4{color:#495057;font-family:Montserrat;font-size:24px;font-weight:600;margin-bottom:12px}.cbp .no-course-card .no-course-content p{color:#6c757d;font-family:Lato;font-size:16px;line-height:1.5;margin-bottom:12px}.cbp .no-course-card .no-course-content p strong{color:#1b4ca1;font-weight:600}.cbp .no-course-card .suggest-course-btn{background:linear-gradient(135deg,#1b4ca1,#164080);color:#fff;border:none;border-radius:25px;padding:12px 24px;font-family:Lato;font-size:14px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:8px;margin:20px auto 0;transition:all .3s ease;box-shadow:0 4px 12px #1b4ca14d}.cbp .no-course-card .suggest-course-btn:hover{background:linear-gradient(135deg,#164080,#0f2f5f);transform:translateY(-2px);box-shadow:0 6px 16px #1b4ca166}.cbp .no-course-card .suggest-course-btn:active{transform:translateY(0)}.cbp .no-course-card .suggest-course-btn mat-icon{font-size:18px;width:18px;height:18px}.cbp .left-panel{flex:0 0 280px!important;background:#f8f9fa;border-radius:12px;padding:16px;border:1px solid #e9ecef;max-height:600px;overflow-y:auto;font-weight:400!important}@media (max-width: 1200px){.cbp .search-and-buttons-container{flex-direction:column;align-items:stretch}.cbp .search-container-compact{min-width:auto;width:100%}.cbp .btn-group-compact{justify-content:center;flex-wrap:wrap}}@media (max-width: 1200px) and (min-width: 769px){.cbp .course-list-item{flex:1 1 calc(50% - 10px);min-width:300px;max-width:none}}@media (max-width: 768px){.cbp .course-list-container-flex{flex-direction:column}.cbp .left-panel{flex:none!important;max-height:300px}.cbp .course-list-item{flex:0 0 100%;max-width:100%}.cbp .no-course-card{padding:20px}.cbp .no-course-card .no-course-content h4{font-size:20px}.cbp .no-course-card .no-course-content p{font-size:14px}}.cbp ::ng-deep .error-snackbar{background-color:#f44336!important;color:#fff!important;font-weight:500}.cbp ::ng-deep .error-snackbar .mat-simple-snackbar-action{color:#fff!important}.cbp ::ng-deep .session-expired-snackbar{background-color:#ff9800!important;color:#fff!important;font-weight:600}.cbp ::ng-deep .session-expired-snackbar .mat-simple-snackbar-action{color:#fff!important;font-weight:700}.cbp .download-pdf{justify-content:end;display:flex;flex-direction:row}.section-header-improved,.section-header-improved-sec-2{display:flex;flex-direction:row;gap:0px;width:100%}.search-and-buttons-container{display:flex;justify-content:space-between;gap:4px;flex-direction:column;flex-wrap:wrap;width:37%;margin:0 5px}::ng-deep .select-search-panel{border:1px solid #ccc!important;border-radius:12px!important;box-shadow:0 8px 20px #0000001f}:host ::ng-deep .mat-select-arrow-wrapper{margin-top:5px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:#ccc}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#1b4ca1;border-color:#1b4ca1!important}::ng-deep .select-search-panel .mat-option.mat-selected:not(.mat-option-disabled){background-color:#1b4ca1!important;color:#fff!important}:host ::ng-deep .mat-form-field-appearance-outline{border-radius:25px;border:1px solid #ccc}:host ::ng-deep .mat-form-field-focused .mat-form-field-appearance-outline{border-color:#1b4ca1!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start{border-radius:25px 0 0 25px;border:none!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-right:none!important;border:none!important;border-radius:0 25px 25px 0}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-gap{border:none!important;border-radius:25px}:host::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix{background-color:transparent!important}:host ::ng-deep .search-and-buttons-container .mat-option-text{color:#fff!important}.header-container{display:flex;flex-direction:row;justify-content:space-between;width:100%;margin:10px 0}.right-side-container{display:flex;justify-content:space-between;gap:64px}::ng-deep .language-select .mat-select-trigger{font-weight:400!important}::ng-deep .language-select .mat-select-value{color:#fff!important}:host ::ng-deep .select-search-panel .mat-option-text{color:#fff!important}.competency-tags{display:flex;gap:6px;margin-top:6px;flex-wrap:wrap}.proficiency-tag,.delivery-mode-tag{display:inline-flex;align-items:center;justify-content:center;padding:2px 8px;border-radius:16px;font-size:11px;line-height:16px;font-weight:500;white-space:nowrap}.delivery-mode-tag.online{background:#e6f4ea;color:#1a7f45;border:1px solid #9BD3B0}.delivery-mode-tag.offline{background:#fdf0e3;color:#a2590a;border:1px solid #F0C48A}.delivery-mode-tag.blended{background:#efe9fb;color:#5b21b6;border:1px solid #C9B6F0}.proficiency-tag.strategic{background:#1b4ca1;color:#fff;border:none}.proficiency-tag.tactical{background:#5b8def;color:#fff;border:none}.proficiency-tag.operational{background:#dbe6f7;color:#1b4ca1;border:none}.flex-col-theme{display:flex;flex-direction:row;gap:6px}\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: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i6.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] }); }
|
|
1037
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ViewFinalCbpPlanComponent, selector: "app-view-final-cbp-plan", viewQueries: [{ propertyName: "pdfContent", first: true, predicate: ["pdfContent"], descendants: true }, { propertyName: "dialogContent", first: true, predicate: ["dialogContent"], descendants: true }], ngImport: i0, template: "<div class=\"view-cbp-plan\" #dialogContent style=\"max-height: 80vh; overflow: auto;\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div class=\"header-container\">\n <div>\n <div class=\"heading\">View Final <span *ngIf=\"openedFrom === 'cbp'\">CBP</span><span\n *ngIf=\"openedFrom === 'acbp'\">ACBP</span></div>\n </div>\n <div class=\"right-side-container\">\n <div class=\"search-and-buttons-container\">\n <form [formGroup]=\"filterForm\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\" style=\" height: 34px;\">\n <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('language')?.value ? '' : 'Select Language' }}\n </mat-label>\n\n <mat-select formControlName=\"language\" panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\"\n matInput placeholder=\"Search Languages\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'language')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredLanguages\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </form>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n\n\n\n </div>\n <div class=\"section-container\" #pdfContent>\n <header class=\"bg-white header-border\">\n <div class=\"header-flex justify-between\" style=\"width:100%\">\n <div class=\"flex items-center space-x-4\" style=\"width:50%\">\n <div class=\"image-container\">\n <div>\n <img src=\"assets/icons/dopt-logo.png\" alt=\"Department of Personnel & Training\"\n class=\"h-15\" />\n </div>\n <div>\n <img src=\"assets/icons/CBC_logo.svg\" alt=\"Capacity Building Commission Logo\"\n class=\"h-10\" />\n </div>\n <div>\n <img src=\"assets/icons/karmayogiLogo-min.png\" alt=\"Karmayogi Bharat Logo\"\n class=\"h-10\" />\n </div>\n </div>\n </div>\n <div class=\"text-right\" style=\"width:50%\">\n <h1 class=\"text-2xl font-bold text-gray-900\">\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.ministry?.sbOrgType === 'state'\">{{sharedService?.cbpPlanFinalObj?.ministry?.orgName}}</span>\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.ministry?.sbOrgType === 'ministry'\">{{sharedService?.cbpPlanFinalObj?.ministry?.orgName}}</span>\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.department_name\">/{{sharedService?.cbpPlanFinalObj?.department_name}}</span>\n - Capacity Building Plan\n </h1>\n <p class=\"text-gray-600\">Comprehensive Role-Based Competency Analysis</p>\n </div>\n </div>\n </header>\n <div class=\"min-h-screen bg-gradient-to-br from-slate-50 via-blue-50 to-indigo-100\">\n <!-- Header -->\n\n\n <div class=\"max-w-7xl mx-auto px-6 py-8 mt-4\">\n <!-- KPI Dashboard -->\n <div class=\"competency-container mt-2\">\n <div class=\"outside-layer-total\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <path d=\"M14 2v6h6\" />\n <path d=\"M16 13H8\" />\n <path d=\"M16 17H8\" />\n <path d=\"M10 9H8\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.total}}</div>\n </div>\n </div>\n\n <div class=\"mt-4\">\n <div class=\"sub-heading\">\n <p>Total Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Total Competencies: {{totalCompetencieObj?.total}}</div>\n </div>\n <div class=\"count\">\n <!-- {{competenciesCount?.total}} -->\n </div>\n </div>\n <div class=\"outside-layer-behavioral\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M15.5 17a4 4 0 0 1-5 0\" />\n <path d=\"M13 14h.01\" />\n <path d=\"M11 11h.01\" />\n <path d=\"M17 14h.01\" />\n <path d=\"M13 10h.01\" />\n <path d=\"M13 18h.01\" />\n <path d=\"M13 6h.01\" />\n <path d=\"M17 18h.01\" />\n <path d=\"M17 6h.01\" />\n <path d=\"M21 12a9 9 0 0 1-9 9a9 9 0 0 1-9-9a9 9 0 0 1 9-9a9 9 0 0 1 9 9z\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.behavioral}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Behavioral Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-behavioural\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Behavioral Competencies: {{totalCompetencieObj?.behavioral}}\n </div>\n </div>\n\n </div>\n <div class=\"outside-layer-functional\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\" />\n <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.functional}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Functional Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-functional\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Functional Competencies: {{totalCompetencieObj?.functional}}</div>\n </div>\n\n\n </div>\n <div class=\"outside-layer-domain\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <circle cx=\"12\" cy=\"12\" r=\"6\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.domain}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Domain Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-domain\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Domain Competencies: {{totalCompetencieObj?.domain}}</div>\n </div>\n\n </div>\n </div>\n <!-- <div class=\"mb-8\">\n <h2 class=\"text-2xl font-bold text-gray-900 mb-6nheading\">Competency Overview</h2>\n <div class=\"competency-grid\">\n <ng-container *ngFor=\"let kpi of overallKPIs;\">\n <div class=\"bg-white rounded-xl outside-layer-total p-6 border-l-4 hover:shadow-xl transition-shadow\" [style.border-left-color]=\"kpi.color\">\n <div class=\"flex items-center justify-between mb-4 inside-layer\">\n <div [class]=\"'p-3 rounded-lg ' + kpi.bgColor\">\n <ng-container [ngSwitch]=\"kpi.name\">\n <svg *ngSwitchCase=\"'Behavioral Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M15.5 17a4 4 0 0 1-5 0\"/>\n <path d=\"M13 14h.01\"/><path d=\"M11 11h.01\"/><path d=\"M17 14h.01\"/><path d=\"M13 10h.01\"/>\n <path d=\"M13 18h.01\"/><path d=\"M13 6h.01\"/><path d=\"M17 18h.01\"/><path d=\"M17 6h.01\"/>\n <path d=\"M21 12a9 9 0 0 1-9 9a9 9 0 0 1-9-9a9 9 0 0 1 9-9a9 9 0 0 1 9 9z\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Functional Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"/><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Domain Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/><circle cx=\"12\" cy=\"12\" r=\"6\"/><circle cx=\"12\" cy=\"12\" r=\"2\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Total Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/>\n <path d=\"M14 2v6h6\"/><path d=\"M16 13H8\"/><path d=\"M16 17H8\"/><path d=\"M10 9H8\"/>\n </svg>\n \n </ng-container>\n </div>\n <div class=\"text-right\">\n <div class=\"text-2xl font-bold text-gray-900\">{{kpi.total}}</div>\n </div>\n </div>\n <h3 class=\"text-gray-900 font-semibold mb-2 heading\">{{kpi.name}}</h3>\n <div class=\"w-full bg-gray-200 rounded-full h-3\">\n <div class=\"h-3 rounded-full transition-all duration-500\"\n [style.width.%]=\"kpi.avgCompletion\"\n [style.background-color]=\"kpi.color\">\n </div>\n </div>\n <p class=\"text-sm text-gray-500 mt-2\">Total Competencies: {{kpi.total}}</p>\n </div>\n </ng-container>\n </div>\n </div> -->\n\n <!-- Designation Reports -->\n <div class=\"space-y-8 mt-4\">\n <h2 class=\"text-2xl font-bold text-gray-900 mb-6 heading\">Detailed Competency Framework by\n Designation</h2>\n\n <ng-container *ngFor=\"let designation of designationData;\">\n <div class=\"bg-white rounded-xl overflow-hidden section-shadow\">\n <!-- Header -->\n <div\n class=\"bg-gradient-to-r from-indigo-600 to-blue-600 text-white p-6 heading-with-bg\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h3 class=\"text-2xl font-bold mb-2 heading-bg\">{{designation.designation}}\n </h3>\n <p class=\"text-indigo-100 mb-1\">Wing/Division: {{designation.wing}}</p>\n </div>\n <div class=\"flex items-center space-x-4 competency-count-by-designation\">\n <span class=\"font-semibold text-sm\">Behavioral:\n {{designation.behavioralCompetencies.length}} total</span>\n <span class=\"font-semibold text-sm\">Functional:\n {{designation.functionalCompetencies.length}} total</span>\n <span class=\"font-semibold text-sm\">Domain:\n {{designation.domainCompetencies.length}} total</span>\n </div>\n </div>\n </div>\n\n <!-- Body -->\n <div class=\"p-4 section-shadow\">\n <!-- Roles -->\n <div class=\"mb-6\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Roles & Responsibilities\n </h4>\n <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2\">\n <div *ngFor=\"let role of designation.rolesResponsibilities; let i = index\"\n class=\"bg-gray-50 p-2 rounded border-l-3 border-indigo-500\">\n <p class=\"text-sm text-gray-700 leading-relaxed\">{{role}}</p>\n </div>\n </div>\n </div>\n <!-- Activities -->\n <div class=\"mb-6 mt-4\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Activities\n </h4>\n <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2\">\n <div *ngFor=\"let role of designation.activities; let i = index\"\n class=\"bg-gray-50 p-2 rounded border-l-3 border-indigo-500\">\n <p class=\"text-sm text-gray-700 leading-relaxed\">{{role}}</p>\n </div>\n </div>\n </div>\n <div class=\"page-break\"></div>\n <!-- Competencies -->\n <div class=\"competencis-grid mt-4\">\n <!-- Behavioral -->\n <div class=\"bg-blue-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-blue-800 text-base mb-2\">Behavioral</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-behavioral\">\n <div *ngFor=\"let comp of designation.behavioralCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-blue-400\">\n {{comp}}\n <div class=\"flex-col-theme\">\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.behavioralSetForProficiencyLevel[i]\"\n class=\"proficiency-tag\"\n [ngClass]=\"designation.behavioralSetForProficiencyLevel[i]?.toLowerCase()\"\n [matTooltip]=\"designation.behavioralSetForProficiencyLevelRationale[i]\"\n >\n {{ designation.behavioralSetForProficiencyLevel[i] }}\n </span>\n\n \n </span>\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.behavioralSetForDeliveryMode[i]\"\n class=\"delivery-mode-tag\"\n [ngClass]=\"designation.behavioralSetForDeliveryMode[i]?.toLowerCase()\"\n [matTooltip]=\"designation.behavioralSetForDeliveryModeRationale[i]\"\n >\n {{ designation.behavioralSetForDeliveryMode[i] }}\n </span>\n\n \n </span>\n </div>\n </div>\n \n </div>\n \n <div class=\"mt-2 text-sm text-blue-600 font-medium\">\n {{designation.behavioralCompetencies.length}} total\n </div>\n </div>\n\n <!-- Functional -->\n <div class=\"bg-green-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-green-800 text-base mb-2\">Functional</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-functional\">\n <div *ngFor=\"let comp of designation.functionalCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-green-400\">\n {{comp}}\n <div class=\"flex-col-theme\">\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.functionalSetForProficiencyLevel[i]\"\n class=\"proficiency-tag\"\n [ngClass]=\"designation.functionalSetForProficiencyLevel[i]?.toLowerCase()\"\n [matTooltip]=\"designation.functionalSetForProficiencyLevelRationale[i]\"\n >\n {{ designation.functionalSetForProficiencyLevel[i] }}\n </span>\n\n \n </span>\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.functionalSetForDeliveryMode[i]\"\n class=\"delivery-mode-tag\"\n [ngClass]=\"designation.functionalSetForDeliveryMode[i]?.toLowerCase()\"\n [matTooltip]=\"designation.functionalSetForDeliveryModeRationale[i]\"\n >\n {{ designation.functionalSetForDeliveryMode[i] }}\n </span>\n\n \n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-2 text-sm text-green-600 font-medium\">\n {{designation.functionalCompetencies.length}} total\n </div>\n </div>\n\n <!-- Domain -->\n <div class=\"bg-purple-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-purple-800 text-base mb-2\">Domain</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-domain\">\n <div *ngFor=\"let comp of designation.domainCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-purple-400\">\n {{comp}}\n <div class=\"flex-col-theme\">\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.domainSetForProficiencyLevel[i]\"\n class=\"proficiency-tag\"\n [ngClass]=\"designation.domainSetForProficiencyLevel[i]?.toLowerCase()\"\n [matTooltip]=\"designation.domainSetForProficiencyLevelRationale[i]\"\n >\n {{ designation.domainSetForProficiencyLevel[i] }}\n </span>\n\n \n </span>\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.domainSetForDeliveryMode[i]\"\n class=\"delivery-mode-tag\"\n [ngClass]=\"designation.domainSetForDeliveryMode[i]?.toLowerCase()\"\n [matTooltip]=\"designation.domainSetForDeliveryModeRationale[i]\"\n >\n {{ designation.domainSetForDeliveryMode[i] }}\n </span>\n\n \n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-2 text-sm text-purple-600 font-medium\">\n {{designation.domainCompetencies.length}} total\n </div>\n </div>\n </div>\n <!-- Adding courses -->\n <div class=\"cbp mt-4\"\n *ngIf=\"designation.selectedCourses?.length && openedFrom === 'acbp'\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Courses\n </h4>\n <div class=\"course-list-container\">\n <div class=\"course-list-item\"\n *ngFor=\"let item of designation.selectedCourses; let i = index\">\n <div class=\"course-header\">\n <div class=\"checked-course-container\">\n\n <div>\n <div class=\"course-pill\">\n <div class=\"course-pill-text\">\n <span><img\n src=\"assets/icons/course.svg\"></span> <span>Course</span>\n </div>\n </div>\n </div>\n\n </div>\n <div *ngIf=\"item?.rationale && !item?.is_public\">\n <div class=\"ai-recommened-pill-green\">\n <div class=\"ai-recommened-pill-green-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>AI Recommended - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"item?.rationale && item?.is_public\">\n <div class=\"ai-recommened-pill-public\">\n <div class=\"ai-recommened-pill-public-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>AI Recommended - Public </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item?.rationale\">\n <div class=\"ai-recommened-pill-gray\">\n <div class=\"ai-recommened-pill-gray-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>Manually Suggested - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"course-title mt-4\">\n <div>\n <div *ngIf=\"item?.course\">{{item?.course}}</div>\n <div *ngIf=\"item?.name\">{{item?.name}}</div>\n </div>\n </div>\n <div class=\"course-desc mt-2\">\n <div *ngIf=\"isPDFDownload\">\n <div>{{item?.rationale}}</div>\n </div>\n </div>\n <div class=\"mt-3\"\n *ngIf=\"getCompetenciesByType('Behavioural',item)?.length\">\n <div class=\"competency-sub-heading\">Behavioral Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"behavioural-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Behavioural',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Behavioural',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Behavioural',item)\">\n {{ isExpanded('Behavioural',item) ? 'Show Less' : '+' +\n getRemainingCount('Behavioural',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\"\n *ngIf=\"getCompetenciesByType('Functional',item)?.length\">\n <div class=\"competency-sub-heading\">Functional Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"functional-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Functional',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Functional',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Functional',item)\">\n {{ isExpanded('Functional',item) ? 'Show Less' : '+' +\n getRemainingCount('Functional',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\" *ngIf=\"getCompetenciesByType('Domain',item)?.length\">\n <div class=\"competency-sub-heading\">Domain Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"domain-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Domain',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Domain',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Domain',item)\">\n {{ isExpanded('Domain',item) ? 'Show Less' : '+' +\n getRemainingCount('Domain',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2 d-flex justify-content-between item\">\n <div class=\"relevancy-container\">\n <div class=\"relevancy\">Relevancy</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\" *ngIf=\"item?.relevancy\">\n {{item?.relevancy}}%</div>\n <div class=\"percentage\" *ngIf=\"!item?.relevancy\">N/A</div>\n </div>\n\n </div>\n\n </div>\n\n </div>\n </div>\n\n <!-- adding courses -->\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Footer -->\n\n </div>\n <footer class=\"org-footer\">\n <div class=\"max-w-7xl mx-auto px-6 flex flex-col md:flex-row items-center justify-between\">\n <div class=\"flex items-center space-x-4 mb-4 mt-4 md:mb-0 footer-container\">\n <div class=\"footer-logo-container\">\n <img src=\"assets/icons/karmayogiLogo-min.png\" alt=\"Karmayogi Bharat Logo\" class=\"h-10\"\n style=\"margin-left:20px\" />\n </div>\n <div style=\"margin-left: 100px;\">\n <a href=\"https://karmayogibharat.gov.in\" target=\"_blank\" rel=\"noopener noreferrer\"\n class=\"text-sm font-semibold transition-colors\">\n karmayogibharat.gov.in\n </a>\n </div>\n\n\n </div>\n <div class=\"text-sm text-center md:text-right mb-4\" style=\"margin-left: 100px;\">\n <p>© 2025 All Rights Reserved.</p>\n </div>\n </div>\n </footer>\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Download as Excel\" (click)=\"downloadCSV()\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Download as PDF\"\n (click)=\"downloadPdfFromBE(openedFrom)\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n </div>\n </div>\n <div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n <div class=\"loader-message\" *ngIf=\"downloadInProgress\">\n Download is in progress. Please wait, this may take a while for large files...\n </div>\n </div>", styles: ["@charset \"UTF-8\";.container{margin:10px auto}.sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:150%}::ng-deep mat-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}::ng-deep .mat-select-panel{background-color:#fff!important}::ng-deep .mat-select-panel .mat-option{border-radius:0!important}::ng-deep mat-form-field .mat-form-field-underline{display:none!important}::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.btn-group{display:flex;flex-direction:row;justify-content:space-between}.pl-2{padding-left:5px}.search-filter-section{display:flex;flex-direction:row;justify-content:space-between}.search .rsearch{position:relative}.search .search-icon{position:absolute;top:15px;font-size:20px;left:10px}.search .sinput{border-radius:32px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato;width:800px}.select-map-route-container{display:flex;flex-direction:row}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.search-container{display:flex;flex-direction:row}.course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.ai-recommened-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #1B4CA1;background:#1b4ca129}.igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:30px}.course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.relevancy,.competencies-matched{color:var(--accessbility-shades-with-opacity-kb-greys-black-60, rgba(0, 0, 0, .6));font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;align-items:center}.percentage{color:#1d8923;font-family:Lato;font-size:14px;font-style:normal;font-weight:800;line-height:normal}.relevancy-container,.competencies-matched-container{display:flex;flex-direction:row;align-items:center}.dash{padding:0 5px}::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.course-list-container{display:flex;flex-wrap:wrap;gap:16px}.course-list-item{flex:0 0 48%;box-sizing:border-box;border:1px solid #ccc;padding:16px;background-color:#fff;border-radius:8px}.checked-course-container{display:flex}.ml-2{margin-left:8px}::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.ai-recommened-pill-text,.igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.ai-loader-icon img,.igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.competency-container{display:flex;justify-content:normal;flex-direction:row;gap:16px}.outside-layer-total{display:flex;padding:4px 20px;justify-content:left;align-items:left;gap:6px;border-radius:12px;border-left:2px solid #1B4CA1;border-right:2px solid #1B4CA1;background:#edf1f8;flex-direction:column;width:25%}.outside-layer-functional{display:flex;padding:4px 12px;justify-content:left;align-items:left;gap:16px;border-radius:12px;border-left:2px solid #E24577;border-right:2px solid #E24577;background:#f8d2de;flex-direction:column;width:25%}.outside-layer-domain{display:flex;padding:4px 12px;justify-content:left;align-items:left;gap:16px;border-radius:12px;border-left:2px solid #7B47A4;border-right:2px solid #7B47A4;background:#dfd3e9;flex-direction:column;width:25%}.outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:left;align-items:left;gap:16px;border-radius:12px;border-left:2px solid #F8B861;border-right:2px solid #F8B861;background:#fde8cc;flex-direction:column;width:25%}.inside-layer{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.suggest-course-control{display:flex;flex-direction:row}.course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.heading{color:#000;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.heading-bg{color:#fff;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.behavioural-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:99px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:5px 0}.functional-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:99px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:5px 0}.domain-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:99px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:5px 0}.popup-header{display:flex;flex-direction:row;justify-content:space-between}.popup-footer{display:flex;flex-direction:row;justify-content:center}.view-cbp-plan{margin:10px;padding:10px}.view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.section{border-radius:8px;background:#1b4ca114;padding:16px}.popup-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;font-weight:700;flex-shrink:0}.popup-footer{display:flex;justify-content:center;gap:16px;padding:16px 24px;background-color:#fff;flex-shrink:0;position:sticky;bottom:-15px}.section-container{overflow-y:auto;flex:1 1 auto;display:flex;flex-direction:column;justify-content:center;align-items:center}.competency-list{display:flex;flex-direction:row;gap:16px}.competency-text{color:#000;font-family:Lato;font-size:10px;font-style:normal;font-weight:700;line-height:normal}.competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:12px;font-style:normal;font-weight:600;line-height:normal}.cursor-pointer{cursor:pointer}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center}.grid{display:grid;gap:1.5rem}.grid-cols-1{grid-template-columns:repeat(1,1fr)}@media (min-width: 768px){.md\\:grid-cols-2{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.lg\\:grid-cols-4{grid-template-columns:repeat(4,1fr)}}.kpi-card{background:#fff;border-radius:12px;padding:1.5rem;box-shadow:0 4px 14px #0000000d;border-left:4px solid transparent;transition:box-shadow .3s ease}.kpi-card:hover{box-shadow:0 8px 24px #0000001a}.kpi-icon{padding:.75rem;border-radius:.5rem;display:flex;align-items:center;justify-content:center}.kpi-text{font-size:1.25rem;font-weight:700}.progress-container{background:#e5e7eb;height:.75rem;border-radius:9999px;margin-top:.5rem}.progress-bar{height:100%;border-radius:9999px;transition:width .4s ease}.competency-block{background-color:#fff;border-radius:12px;box-shadow:0 2px 10px #0000000f;overflow:hidden}.competency-header{padding:1.5rem;background:linear-gradient(to right,#4f46e5,#3b82f6);color:#fff}.competency-header h3{font-size:1.25rem;font-weight:600}.competency-body{padding:1rem}.role-card{background-color:#f9fafb;padding:.5rem;border-left:4px solid #6366f1;border-radius:6px}.role-title{font-size:1rem;font-weight:600;margin-bottom:.75rem;display:flex;align-items:center;color:#1e40af}.comp-section{border-radius:.5rem;padding:.75rem;background-color:#f0f9ff;margin-bottom:1rem}.comp-section h4{font-weight:600;margin-bottom:.5rem}.comp-item{background-color:#fff;border-left:3px solid #3b82f6;padding:.5rem;border-radius:4px;margin-bottom:.25rem;font-size:.875rem}.bg-blue-50{background-color:#fde8cc;border-radius:4px}.bg-green-50{background-color:#f8d2de;border-radius:4px}.bg-purple-50{background-color:#dfd3e9;border-radius:4px}.text-blue-800{color:#1e3a8a}.text-green-800{color:#ff1493}.text-purple-800{color:#6b21a8}.border-blue-400{border-color:#60a5fa}.border-green-400{border-color:#34d399}.border-purple-400{border-color:#c084fc}.text-sm{font-size:.875rem}.text-gray-700{color:#374151}.icon-sm{width:24px;height:24px}.heading-with-bg{background:#4f46e5;padding:24px;border-radius:8px 8px 0 0}.competencis-grid{display:flex;flex-direction:row;justify-content:space-between;gap:16px}.section-shadow{padding:16px;border-radius:4px;background:#fff;box-shadow:0 2px 4px #0000001a,0 1px 10px #0000000f}.count{color:#1b4ca1;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.competency-grid{display:flex;flex-direction:row;gap:16px;justify-content:space-between}.text-blue-600{color:#1b4ca1;font-weight:600}.text-green-600{color:#ff1493;font-weight:600}.text-purple-600{color:#6b21a8;font-weight:600}.horizontal-flex{display:flex;align-items:center;justify-content:space-between;width:100%}.progress-bar{width:100%;height:10px;background-color:#e0e0e0;border-radius:10px;overflow:hidden;box-shadow:inset 0 1px 3px #0003}.progress-bar-fill{height:100%;background-color:#1b4ca1;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.progress-bar-fill-behavioural{height:100%;background-color:#f8b861;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.progress-bar-fill-functional{height:100%;background-color:#e24577;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.progress-bar-fill-domain{height:100%;background-color:#7b47a4;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.sub-text{font-size:12px;font-weight:600;font-family:Lato}.competency-count-by-designation{display:flex;gap:10px;flex-direction:row}.competencies-grid-3{width:33%}.grid-list-item div{padding:5px 10px;margin:10px 0}.grid-list-item-behavioral div{border-left:2px solid darkorange}.grid-list-item-functional div{border-left:2px solid #ff1493}.grid-list-item-domain div{border-left:2px solid #6b21a8}.header-flex{display:flex;flex-direction:row;width:100%;justify-content:space-between;gap:30px}.header-border{border-bottom:1px solid #ccc;margin:10px;padding:10px}.text-gray-600{font-family:Lato;font-size:14px;font-weight:600}.image-container .h-10,.image-container .h-15{height:50px}.image-container{display:flex;gap:10px;flex-direction:row}.org-footer{display:flex;flex-direction:row;background:#fff;gap:16px;color:#000;width:100%;justify-content:center;align-items:center;border-top:1px solid #ccc;border-bottom:1px solid #ccc}.dialog-scrollable-content{max-height:70vh;overflow-y:auto}.org-footer a{color:#000!important}h1{font-size:1.75rem!important}@media print{.org-footer,.header-border{page-break-inside:avoid}}.header-border{padding-top:10px;padding-bottom:10px;background-color:#fff}.footer-container{display:flex;justify-content:center;align-items:center;flex-direction:column}.footer-logo-container{display:flex;justify-content:center;align-items:center;flex-direction:row;width:30%}.avoid-page-break{page-break-inside:avoid;break-inside:avoid}.pdf-clean *{box-shadow:none!important;filter:none!important;transform:none!important}.view-cbp-plan.pdf-clean{overflow:visible!important;max-height:none!important}.section-container,.popup-container,.outside-layer-total,.outside-layer-behavioral,.outside-layer-functional,.outside-layer-domain,.section-shadow{page-break-inside:avoid!important;break-inside:avoid!important}.bg-gradient-to-br{background:none!important}.section-container,.outside-layer-total,.outside-layer-behavioral,.outside-layer-functional,.outside-layer-domain,.competencis-grid{page-break-inside:avoid}.page-break{page-break-before:always}.cbp .container{margin:10px auto}.cbp .sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.cbp .ministry-heading{color:#1b4ca1;font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal}.cbp .radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.cbp .radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.cbp .label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:16px;font-style:normal;font-weight:700;line-height:150%}.cbp ::ng-deep mat-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}.cbp ::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}.cbp ::ng-deep .mat-select-panel{background-color:#fff!important}.cbp ::ng-deep .mat-select-panel .mat-option{border-radius:0!important}.cbp ::ng-deep mat-form-field .mat-form-field-underline{display:none!important}.cbp ::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.cbp ::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}.cbp ::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.cbp .additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.cbp .section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.cbp .btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.cbp .btn-group{display:flex;flex-direction:row;justify-content:space-between}.cbp .pl-2{padding-left:5px}.cbp .search-filter-section{display:flex;flex-direction:row;justify-content:space-between}.cbp .search .rsearch{position:relative}.cbp .search .search-icon{position:absolute;top:15px;font-size:20px;left:10px}.cbp .search .sinput{border-radius:32px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato;width:800px}.cbp .select-map-route-container{display:flex;flex-direction:row}.cbp .selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.cbp .edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.cbp .search-container{display:flex;flex-direction:row}.cbp .course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.cbp .course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.cbp .course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.cbp .ai-recommened-pill-green{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#0080001c}.cbp .ai-recommened-pill-green-text{color:#006400;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-public{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#1b4ca129}.cbp .ai-recommened-pill-public-text{color:#1b4ca1;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-gray{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#d3d3d3}.cbp .ai-recommened-pill-gray-text{color:#000;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-orange{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#ffa50052}.cbp .ai-recommened-pill-orange-text{color:#5a3f0d;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-orange-text a{color:#5a3f0d!important;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.cbp .course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:22px}.cbp .course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:1.4;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.cbp .relevancy,.cbp .competencies-matched{color:#6c757d;font-family:Lato;font-size:12px;font-style:normal;font-weight:500;line-height:normal;align-items:center}.cbp .percentage{color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:600;line-height:normal}.cbp .delete-button input{background-color:#b60a0a;border-radius:10px}.cbp .relevancy-container,.cbp .competencies-matched-container{display:flex;flex-direction:row;align-items:center}.cbp .dash{padding:0 5px}.cbp ::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.cbp .course-list-container{display:flex;flex-wrap:wrap;gap:16px;width:100%;padding:1rem}.cbp .course-list-item{flex:1 1 calc(50% - 10px);min-width:350px;max-width:500px;box-sizing:border-box;border:1px solid #e0e0e0;padding:16px;background-color:#fff;border-radius:12px;min-height:auto;box-shadow:0 2px 4px #0000001a;transition:box-shadow .2s ease;display:flex;flex-direction:column}.cbp .course-list-item:hover{box-shadow:0 4px 8px #00000026}.cbp .course-list-item:only-child{flex:1 1 auto;max-width:800px}.cbp .checked-course-container{display:flex;width:60%}.cbp .ml-2{margin-left:8px}.cbp ::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.cbp .igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.cbp .course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.cbp .ai-loader-icon img,.cbp .igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.cbp .competency-container{display:flex;justify-content:normal;gap:16px;flex-direction:row}.cbp .outside-layer-total{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #1B4CA1;background:#edf1f8;width:132px}.cbp .outside-layer-functional{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #E24577;background:#f8d2de;width:132px}.cbp .outside-layer-domain{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #7B47A4;background:#dfd3e9;width:132px}.cbp .outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #F8B861;background:#fde8cc;width:132px}.cbp .inside-layer{color:#1b4ca1;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.cbp .count{color:#1b4ca1;font-family:Montserrat;font-size:18px;font-style:normal;font-weight:600;line-height:normal}.cbp .suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.cbp .suggest-course-control{display:flex;flex-direction:row}.cbp .course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.cbp .highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.cbp .ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.cbp .heading{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.cbp .pdf-heading{color:#000;font-family:Montserrat;font-size:18px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0;text-align:center}.cbp .popup-header{display:flex;justify-content:space-between;align-items:center;padding:16px;border-bottom:1px solid #e0e0e0}.cbp .header-left{flex:1}.cbp .header-actions{display:flex;align-items:center;gap:12px}.cbp .regenerate-btn{display:flex;align-items:center;gap:8px;padding:8px 16px;border-radius:6px;font-size:14px;font-weight:500;min-width:auto}.cbp .regenerate-btn .mat-icon{margin:0;font-size:18px;width:18px;height:18px}.cbp .regenerate-btn .mat-spinner{margin:0}.cbp .regenerate-btn:disabled{opacity:.7;cursor:not-allowed}.cbp .close-btn{padding:8px;border-radius:4px;transition:background-color .2s ease}.cbp .close-btn:hover{background-color:#f5f5f5}.cbp .close-btn .mat-icon{font-size:20px;width:20px;height:20px}.cbp .progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.cbp .progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.cbp .behavioural-pill{display:flex;padding:2px 6px;justify-content:center;align-items:center;gap:4px;border-radius:16px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:2px 4px 2px 0;font-size:12px}.cbp .functional-pill{display:flex;padding:2px 6px;justify-content:center;align-items:center;gap:4px;border-radius:16px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:2px 4px 2px 0;font-size:12px}.cbp .domain-pill{display:flex;padding:2px 6px;justify-content:center;align-items:center;gap:4px;border-radius:16px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:2px 4px 2px 0;font-size:12px}.cbp .popup-header{display:flex;flex-direction:row;justify-content:space-between}.cbp .popup-footer{display:flex;flex-direction:row;justify-content:end}.cbp .view-cbp-plan{margin:10px;padding:10px}.cbp .view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.cbp .section{border-radius:8px;background:#1b4ca114;padding:16px}.cbp .popup-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;font-weight:700;flex-shrink:0}.cbp .popup-footer{display:flex;justify-content:flex-end;gap:16px;padding:16px 24px;border-top:1px solid #ddd;background-color:#fff;flex-shrink:0;position:sticky;bottom:0}.cbp .section-container{overflow-y:auto;flex:1 1 auto}.cbp .competency-list{display:flex;flex-direction:row;gap:0px;flex-wrap:wrap;margin:0;padding:0;list-style:none}.cbp .competency-text{color:#000;font-family:Lato;font-size:12px;font-style:normal;font-weight:400;line-height:normal;padding:3px 6px}.cbp .competency-text-behavioral{color:#654321;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.cbp .competency-text-functional{color:#b01669;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.cbp .competency-text-domain{color:#301934;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.cbp .competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:14px;font-style:normal;font-weight:600;line-height:normal}.cbp .cursor-pointer{cursor:pointer}.cbp .btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.cbp .custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.cbp .overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center;gap:16px}.cbp .loader-message{color:#1b4ca1;font-family:Lato;font-size:16px;font-weight:600;text-align:center;padding:0 16px}.cbp .competencis-grid{display:flex;flex-direction:row;justify-content:space-between;gap:16px}.cbp .grid-list-item-behavioral div{border-left:2px solid darkorange}.cbp .grid-list-item-functional div{border-left:2px solid #ff1493}.cbp .grid-list-item-domain div{border-left:2px solid #6b21a8}.cbp .competencies-grid-3{width:33%}.cbp .bg-blue-50{background-color:#fde8cc;border-radius:4px}.cbp .bg-green-50{background-color:#f8d2de;border-radius:4px}.cbp .bg-purple-50{background-color:#dfd3e9;border-radius:4px}.cbp .grid-list-item div{padding:5px 10px;margin:10px 0}.cbp .course-pill-container{display:flex;gap:8px}.cbp .relevancy-pill-green{display:flex;padding:4px 8px;align-items:center;gap:4px;border-radius:16px;border:1px solid #e0e0e0;background:#f8f9fa}.cbp .mt-1{margin-top:.25rem}.cbp .mt-2{margin-top:.5rem}.cbp .mt-3{margin-top:.75rem}.cbp .show-more-competency{display:inline-flex;align-items:center}.cbp .show-more-link{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:500;line-height:normal;margin:2px 4px 2px 0;text-decoration:none}.cbp .show-more-link:hover{text-decoration:underline}.cbp .course-content{flex:1;display:flex;flex-direction:column}.cbp .course-footer{margin-top:auto;padding-top:12px;display:flex;justify-content:space-between}.cbp ::ng-deep .mdc-tab__text-label{font-weight:700;font-family:Montserrat!important;font-size:16px;color:#000!important;text-transform:capitalize}.cbp .competency-tag{display:inline-block;padding:.25rem .75rem;border-radius:9999px;font-size:.75rem;font-weight:500;margin-right:.5rem;margin-bottom:.5rem}.cbp .menu-list-item.active{background-color:#1b4ca1;color:#fff}.cbp .menu-list-item:hover{background-color:#1b4ca1;color:#fff;border-color:#1b4ca1}.cbp .gray-bg{background-color:rgb(248,250,252,var(--tw-bg-opacity, 1));border-radius:8px;border:1px solid #ccc}.cbp .div-count{font-family:Lato;font-size:20px;font-weight:700}.cbp .green-bg{background-color:#0080001c;border:1px solid #006400;border-radius:8px}.cbp .div-green-count{font-family:Lato;font-size:20px;font-weight:700;color:#006400}.cbp .div-green-label{color:#006400;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.cbp .gray-bg-item{background-color:rgb(248,250,252,var(--tw-bg-opacity, 1));border-radius:8px;border:1px solid #ccc;padding:4px 8px;margin:10px}.cbp .add-btn{color:#1b4ca1;font-size:14px;font-family:Lato}.cbp .list-flex{display:flex;flex-direction:row;justify-content:space-between}.cbp .all-category-list .mat-icon{vertical-align:middle}.cbp .course-list-container-flex{display:flex;align-items:flex-start;gap:2rem}.cbp .left-panel{flex:0 0 250px;font-weight:700;text-align:left}.cbp .right-panel{flex:1;display:flex;flex-direction:row;flex-wrap:wrap;gap:20px;align-content:flex-start;justify-content:flex-start}.cbp .category-list-item{font-weight:400;font-size:16px;font-family:Lato;padding:5px}.cbp .right-panel-flex{display:flex;flex:0 0 100%;width:100%;flex-direction:row;flex-wrap:wrap;gap:20px;justify-content:flex-start}.cbp .course-list-container-right-flex{display:flex}.cbp .no-gaps-message{display:flex;flex-direction:column;align-items:center;padding:24px;background:linear-gradient(135deg,#4caf501a,#81c7841a);border:2px solid #4CAF50;border-radius:16px;margin:16px 0}.cbp .no-gaps-message .success-icon{font-size:25px;color:#4caf50;margin-bottom:16px}.cbp .no-gaps-message h4{color:#2e7d32;font-family:Montserrat;font-size:20px;font-weight:600;margin:0 0 8px;text-align:center}.cbp .no-gaps-message p{color:#388e3c;font-family:Lato;font-size:14px;font-weight:400;margin:0;text-align:center;line-height:1.5}.cbp .section-header-improved{display:flex;flex-direction:column;gap:16px}.cbp .search-and-buttons-container{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.cbp .search-container-compact{flex:0 0 auto;min-width:280px}.cbp .search-container-compact .rsearch{position:relative;display:flex;align-items:center}.cbp .search-container-compact .search-icon{position:absolute;left:12px;color:#666;font-size:20px;z-index:1}.cbp .search-container-compact .sinput-compact{border-radius:25px;border:1px solid #d5d0d0;padding:8px 12px 8px 40px;height:32px;width:100%;font:400 14px Lato;box-sizing:border-box;transition:border-color .3s ease}.cbp .search-container-compact .sinput-compact:focus{outline:none;border-color:#1b4ca1;box-shadow:0 0 0 2px #1b4ca11a}.cbp .search-container-compact .sinput-compact::placeholder{color:#999}.cbp .btn-group-compact{display:flex;gap:8px;flex:0 0 auto}.cbp .category-list-item{padding:8px 12px!important;border-radius:6px;border:1px solid transparent;transition:all .3s ease;background:#f8f9fa;color:#333;font-family:Lato;font-size:14px!important;font-weight:400!important}.cbp .category-list-item:hover{background:#1b4ca10d;border-color:#1b4ca133}.cbp .category-list-item.selected-theme{background:#1b4ca11a;border-color:#1b4ca1;color:#1b4ca1;font-weight:600!important}.cbp .category-list-item.selected-theme:before{content:\"\\2713 \";color:#1b4ca1;font-weight:700}.cbp .theme-filter-controls{margin-bottom:8px}.cbp .clear-filter-btn{background:#f8f9fa;border:1px solid #ddd;border-radius:20px;padding:4px 12px;font-size:12px;color:#666;cursor:pointer;transition:all .3s ease;display:flex;align-items:center;gap:4px}.cbp .clear-filter-btn:hover{background:#e9ecef;border-color:#adb5bd}.cbp .clear-filter-btn mat-icon{font-size:16px;width:16px;height:16px}.cbp .no-course-found-container{display:flex;justify-content:center;align-items:center;min-height:300px;padding:20px}.cbp .no-course-card{background:linear-gradient(135deg,#f8f9fa,#e9ecef);border:2px dashed #ced4da;border-radius:16px;padding:40px;text-align:center;max-width:500px;box-shadow:0 4px 12px #0000000d}.cbp .no-course-card .no-course-icon{margin-bottom:20px}.cbp .no-course-card .no-course-icon mat-icon{font-size:48px;width:48px;height:48px;color:#6c757d}.cbp .no-course-card .no-course-content h4{color:#495057;font-family:Montserrat;font-size:24px;font-weight:600;margin-bottom:12px}.cbp .no-course-card .no-course-content p{color:#6c757d;font-family:Lato;font-size:16px;line-height:1.5;margin-bottom:12px}.cbp .no-course-card .no-course-content p strong{color:#1b4ca1;font-weight:600}.cbp .no-course-card .suggest-course-btn{background:linear-gradient(135deg,#1b4ca1,#164080);color:#fff;border:none;border-radius:25px;padding:12px 24px;font-family:Lato;font-size:14px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:8px;margin:20px auto 0;transition:all .3s ease;box-shadow:0 4px 12px #1b4ca14d}.cbp .no-course-card .suggest-course-btn:hover{background:linear-gradient(135deg,#164080,#0f2f5f);transform:translateY(-2px);box-shadow:0 6px 16px #1b4ca166}.cbp .no-course-card .suggest-course-btn:active{transform:translateY(0)}.cbp .no-course-card .suggest-course-btn mat-icon{font-size:18px;width:18px;height:18px}.cbp .left-panel{flex:0 0 280px!important;background:#f8f9fa;border-radius:12px;padding:16px;border:1px solid #e9ecef;max-height:600px;overflow-y:auto;font-weight:400!important}@media (max-width: 1200px){.cbp .search-and-buttons-container{flex-direction:column;align-items:stretch}.cbp .search-container-compact{min-width:auto;width:100%}.cbp .btn-group-compact{justify-content:center;flex-wrap:wrap}}@media (max-width: 1200px) and (min-width: 769px){.cbp .course-list-item{flex:1 1 calc(50% - 10px);min-width:300px;max-width:none}}@media (max-width: 768px){.cbp .course-list-container-flex{flex-direction:column}.cbp .left-panel{flex:none!important;max-height:300px}.cbp .course-list-item{flex:0 0 100%;max-width:100%}.cbp .no-course-card{padding:20px}.cbp .no-course-card .no-course-content h4{font-size:20px}.cbp .no-course-card .no-course-content p{font-size:14px}}.cbp ::ng-deep .error-snackbar{background-color:#f44336!important;color:#fff!important;font-weight:500}.cbp ::ng-deep .error-snackbar .mat-simple-snackbar-action{color:#fff!important}.cbp ::ng-deep .session-expired-snackbar{background-color:#ff9800!important;color:#fff!important;font-weight:600}.cbp ::ng-deep .session-expired-snackbar .mat-simple-snackbar-action{color:#fff!important;font-weight:700}.cbp .download-pdf{justify-content:end;display:flex;flex-direction:row}.section-header-improved,.section-header-improved-sec-2{display:flex;flex-direction:row;gap:0px;width:100%}.search-and-buttons-container{display:flex;justify-content:space-between;gap:4px;flex-direction:column;flex-wrap:wrap;width:37%;margin:0 5px}::ng-deep .select-search-panel{border:1px solid #ccc!important;border-radius:12px!important;box-shadow:0 8px 20px #0000001f}:host ::ng-deep .mat-select-arrow-wrapper{margin-top:5px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:#ccc}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#1b4ca1;border-color:#1b4ca1!important}::ng-deep .select-search-panel .mat-option.mat-selected:not(.mat-option-disabled){background-color:#1b4ca1!important;color:#fff!important}:host ::ng-deep .mat-form-field-appearance-outline{border-radius:25px;border:1px solid #ccc}:host ::ng-deep .mat-form-field-focused .mat-form-field-appearance-outline{border-color:#1b4ca1!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start{border-radius:25px 0 0 25px;border:none!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-right:none!important;border:none!important;border-radius:0 25px 25px 0}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-gap{border:none!important;border-radius:25px}:host::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix{background-color:transparent!important}:host ::ng-deep .search-and-buttons-container .mat-option-text{color:#fff!important}.header-container{display:flex;flex-direction:row;justify-content:space-between;width:100%;margin:10px 0}.right-side-container{display:flex;justify-content:space-between;gap:64px}::ng-deep .language-select .mat-select-trigger{font-weight:400!important}::ng-deep .language-select .mat-select-value{color:#fff!important}:host ::ng-deep .select-search-panel .mat-option-text{color:#fff!important}.competency-tags{display:flex;gap:6px;margin-top:6px;flex-wrap:wrap}.proficiency-tag,.delivery-mode-tag{display:inline-flex;align-items:center;justify-content:center;padding:2px 8px;border-radius:16px;font-size:11px;line-height:16px;font-weight:500;white-space:nowrap}.delivery-mode-tag.online{background:#e6f4ea;color:#1a7f45;border:1px solid #9BD3B0}.delivery-mode-tag.offline{background:#fdf0e3;color:#a2590a;border:1px solid #F0C48A}.delivery-mode-tag.blended{background:#efe9fb;color:#5b21b6;border:1px solid #C9B6F0}.proficiency-tag.strategic{background:#1b4ca1;color:#fff;border:none}.proficiency-tag.tactical{background:#5b8def;color:#fff;border:none}.proficiency-tag.operational{background:#dbe6f7;color:#1b4ca1;border:none}.flex-col-theme{display:flex;flex-direction:row;gap:6px}\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: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i6.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] }); }
|
|
1020
1038
|
}
|
|
1021
1039
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ViewFinalCbpPlanComponent, decorators: [{
|
|
1022
1040
|
type: Component,
|
|
1023
|
-
args: [{ selector: 'app-view-final-cbp-plan', template: "<div class=\"view-cbp-plan\" #dialogContent style=\"max-height: 80vh; overflow: auto;\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div class=\"header-container\">\n <div>\n <div class=\"heading\">View Final <span *ngIf=\"openedFrom === 'cbp'\">CBP</span><span\n *ngIf=\"openedFrom === 'acbp'\">ACBP</span></div>\n </div>\n <div class=\"right-side-container\">\n <div class=\"search-and-buttons-container\">\n <form [formGroup]=\"filterForm\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\" style=\" height: 34px;\">\n <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('language')?.value ? '' : 'Select Language' }}\n </mat-label>\n\n <mat-select formControlName=\"language\" panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\"\n matInput placeholder=\"Search Languages\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'language')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredLanguages\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </form>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n\n\n\n </div>\n <div class=\"section-container\" #pdfContent>\n <header class=\"bg-white header-border\">\n <div class=\"header-flex justify-between\" style=\"width:100%\">\n <div class=\"flex items-center space-x-4\" style=\"width:50%\">\n <div class=\"image-container\">\n <div>\n <img src=\"assets/icons/dopt-logo.png\" alt=\"Department of Personnel & Training\"\n class=\"h-15\" />\n </div>\n <div>\n <img src=\"assets/icons/CBC_logo.svg\" alt=\"Capacity Building Commission Logo\"\n class=\"h-10\" />\n </div>\n <div>\n <img src=\"assets/icons/karmayogiLogo-min.png\" alt=\"Karmayogi Bharat Logo\"\n class=\"h-10\" />\n </div>\n </div>\n </div>\n <div class=\"text-right\" style=\"width:50%\">\n <h1 class=\"text-2xl font-bold text-gray-900\">\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.ministry?.sbOrgType === 'state'\">{{sharedService?.cbpPlanFinalObj?.ministry?.orgName}}</span>\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.ministry?.sbOrgType === 'ministry'\">{{sharedService?.cbpPlanFinalObj?.ministry?.orgName}}</span>\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.department_name\">/{{sharedService?.cbpPlanFinalObj?.department_name}}</span>\n - Capacity Building Plan\n </h1>\n <p class=\"text-gray-600\">Comprehensive Role-Based Competency Analysis</p>\n </div>\n </div>\n </header>\n <div class=\"min-h-screen bg-gradient-to-br from-slate-50 via-blue-50 to-indigo-100\">\n <!-- Header -->\n\n\n <div class=\"max-w-7xl mx-auto px-6 py-8 mt-4\">\n <!-- KPI Dashboard -->\n <div class=\"competency-container mt-2\">\n <div class=\"outside-layer-total\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <path d=\"M14 2v6h6\" />\n <path d=\"M16 13H8\" />\n <path d=\"M16 17H8\" />\n <path d=\"M10 9H8\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.total}}</div>\n </div>\n </div>\n\n <div class=\"mt-4\">\n <div class=\"sub-heading\">\n <p>Total Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Total Competencies: {{totalCompetencieObj?.total}}</div>\n </div>\n <div class=\"count\">\n <!-- {{competenciesCount?.total}} -->\n </div>\n </div>\n <div class=\"outside-layer-behavioral\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M15.5 17a4 4 0 0 1-5 0\" />\n <path d=\"M13 14h.01\" />\n <path d=\"M11 11h.01\" />\n <path d=\"M17 14h.01\" />\n <path d=\"M13 10h.01\" />\n <path d=\"M13 18h.01\" />\n <path d=\"M13 6h.01\" />\n <path d=\"M17 18h.01\" />\n <path d=\"M17 6h.01\" />\n <path d=\"M21 12a9 9 0 0 1-9 9a9 9 0 0 1-9-9a9 9 0 0 1 9-9a9 9 0 0 1 9 9z\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.behavioral}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Behavioral Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-behavioural\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Behavioral Competencies: {{totalCompetencieObj?.behavioral}}\n </div>\n </div>\n\n </div>\n <div class=\"outside-layer-functional\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\" />\n <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.functional}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Functional Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-functional\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Functional Competencies: {{totalCompetencieObj?.functional}}</div>\n </div>\n\n\n </div>\n <div class=\"outside-layer-domain\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <circle cx=\"12\" cy=\"12\" r=\"6\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.domain}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Domain Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-domain\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Domain Competencies: {{totalCompetencieObj?.domain}}</div>\n </div>\n\n </div>\n </div>\n <!-- <div class=\"mb-8\">\n <h2 class=\"text-2xl font-bold text-gray-900 mb-6nheading\">Competency Overview</h2>\n <div class=\"competency-grid\">\n <ng-container *ngFor=\"let kpi of overallKPIs;\">\n <div class=\"bg-white rounded-xl outside-layer-total p-6 border-l-4 hover:shadow-xl transition-shadow\" [style.border-left-color]=\"kpi.color\">\n <div class=\"flex items-center justify-between mb-4 inside-layer\">\n <div [class]=\"'p-3 rounded-lg ' + kpi.bgColor\">\n <ng-container [ngSwitch]=\"kpi.name\">\n <svg *ngSwitchCase=\"'Behavioral Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M15.5 17a4 4 0 0 1-5 0\"/>\n <path d=\"M13 14h.01\"/><path d=\"M11 11h.01\"/><path d=\"M17 14h.01\"/><path d=\"M13 10h.01\"/>\n <path d=\"M13 18h.01\"/><path d=\"M13 6h.01\"/><path d=\"M17 18h.01\"/><path d=\"M17 6h.01\"/>\n <path d=\"M21 12a9 9 0 0 1-9 9a9 9 0 0 1-9-9a9 9 0 0 1 9-9a9 9 0 0 1 9 9z\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Functional Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"/><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Domain Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/><circle cx=\"12\" cy=\"12\" r=\"6\"/><circle cx=\"12\" cy=\"12\" r=\"2\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Total Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/>\n <path d=\"M14 2v6h6\"/><path d=\"M16 13H8\"/><path d=\"M16 17H8\"/><path d=\"M10 9H8\"/>\n </svg>\n \n </ng-container>\n </div>\n <div class=\"text-right\">\n <div class=\"text-2xl font-bold text-gray-900\">{{kpi.total}}</div>\n </div>\n </div>\n <h3 class=\"text-gray-900 font-semibold mb-2 heading\">{{kpi.name}}</h3>\n <div class=\"w-full bg-gray-200 rounded-full h-3\">\n <div class=\"h-3 rounded-full transition-all duration-500\"\n [style.width.%]=\"kpi.avgCompletion\"\n [style.background-color]=\"kpi.color\">\n </div>\n </div>\n <p class=\"text-sm text-gray-500 mt-2\">Total Competencies: {{kpi.total}}</p>\n </div>\n </ng-container>\n </div>\n </div> -->\n\n <!-- Designation Reports -->\n <div class=\"space-y-8 mt-4\">\n <h2 class=\"text-2xl font-bold text-gray-900 mb-6 heading\">Detailed Competency Framework by\n Designation</h2>\n\n <ng-container *ngFor=\"let designation of designationData;\">\n <div class=\"bg-white rounded-xl overflow-hidden section-shadow\">\n <!-- Header -->\n <div\n class=\"bg-gradient-to-r from-indigo-600 to-blue-600 text-white p-6 heading-with-bg\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h3 class=\"text-2xl font-bold mb-2 heading-bg\">{{designation.designation}}\n </h3>\n <p class=\"text-indigo-100 mb-1\">Wing/Division: {{designation.wing}}</p>\n </div>\n <div class=\"flex items-center space-x-4 competency-count-by-designation\">\n <span class=\"font-semibold text-sm\">Behavioral:\n {{designation.behavioralCompetencies.length}} total</span>\n <span class=\"font-semibold text-sm\">Functional:\n {{designation.functionalCompetencies.length}} total</span>\n <span class=\"font-semibold text-sm\">Domain:\n {{designation.domainCompetencies.length}} total</span>\n </div>\n </div>\n </div>\n\n <!-- Body -->\n <div class=\"p-4 section-shadow\">\n <!-- Roles -->\n <div class=\"mb-6\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Roles & Responsibilities\n </h4>\n <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2\">\n <div *ngFor=\"let role of designation.rolesResponsibilities; let i = index\"\n class=\"bg-gray-50 p-2 rounded border-l-3 border-indigo-500\">\n <p class=\"text-sm text-gray-700 leading-relaxed\">{{role}}</p>\n </div>\n </div>\n </div>\n <!-- Activities -->\n <div class=\"mb-6 mt-4\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Activities\n </h4>\n <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2\">\n <div *ngFor=\"let role of designation.activities; let i = index\"\n class=\"bg-gray-50 p-2 rounded border-l-3 border-indigo-500\">\n <p class=\"text-sm text-gray-700 leading-relaxed\">{{role}}</p>\n </div>\n </div>\n </div>\n <div class=\"page-break\"></div>\n <!-- Competencies -->\n <div class=\"competencis-grid mt-4\">\n <!-- Behavioral -->\n <div class=\"bg-blue-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-blue-800 text-base mb-2\">Behavioral</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-behavioral\">\n <div *ngFor=\"let comp of designation.behavioralCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-blue-400\">\n {{comp}}\n <div class=\"flex-col-theme\">\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.behavioralSetForProficiencyLevel[i]\"\n class=\"proficiency-tag\"\n [ngClass]=\"designation.behavioralSetForProficiencyLevel[i]?.toLowerCase()\"\n [matTooltip]=\"designation.behavioralSetForProficiencyLevelRationale[i]\"\n >\n {{ designation.behavioralSetForProficiencyLevel[i] }}\n </span>\n\n \n </span>\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.behavioralSetForDeliveryMode[i]\"\n class=\"delivery-mode-tag\"\n [ngClass]=\"designation.behavioralSetForDeliveryMode[i]?.toLowerCase()\"\n [matTooltip]=\"designation.behavioralSetForDeliveryModeRationale[i]\"\n >\n {{ designation.behavioralSetForDeliveryMode[i] }}\n </span>\n\n \n </span>\n </div>\n </div>\n \n </div>\n \n <div class=\"mt-2 text-sm text-blue-600 font-medium\">\n {{designation.behavioralCompetencies.length}} total\n </div>\n </div>\n\n <!-- Functional -->\n <div class=\"bg-green-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-green-800 text-base mb-2\">Functional</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-functional\">\n <div *ngFor=\"let comp of designation.functionalCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-green-400\">\n {{comp}}\n <div class=\"flex-col-theme\">\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.functionalSetForProficiencyLevel[i]\"\n class=\"proficiency-tag\"\n [ngClass]=\"designation.functionalSetForProficiencyLevel[i]?.toLowerCase()\"\n [matTooltip]=\"designation.functionalSetForProficiencyLevelRationale[i]\"\n >\n {{ designation.functionalSetForProficiencyLevel[i] }}\n </span>\n\n \n </span>\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.functionalSetForDeliveryMode[i]\"\n class=\"delivery-mode-tag\"\n [ngClass]=\"designation.functionalSetForDeliveryMode[i]?.toLowerCase()\"\n [matTooltip]=\"designation.functionalSetForDeliveryModeRationale[i]\"\n >\n {{ designation.functionalSetForDeliveryMode[i] }}\n </span>\n\n \n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-2 text-sm text-green-600 font-medium\">\n {{designation.functionalCompetencies.length}} total\n </div>\n </div>\n\n <!-- Domain -->\n <div class=\"bg-purple-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-purple-800 text-base mb-2\">Domain</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-domain\">\n <div *ngFor=\"let comp of designation.domainCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-purple-400\">\n {{comp}}\n <div class=\"flex-col-theme\">\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.domainSetForProficiencyLevel[i]\"\n class=\"proficiency-tag\"\n [ngClass]=\"designation.domainSetForProficiencyLevel[i]?.toLowerCase()\"\n [matTooltip]=\"designation.domainSetForProficiencyLevelRationale[i]\"\n >\n {{ designation.domainSetForProficiencyLevel[i] }}\n </span>\n\n \n </span>\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.domainSetForDeliveryMode[i]\"\n class=\"delivery-mode-tag\"\n [ngClass]=\"designation.domainSetForDeliveryMode[i]?.toLowerCase()\"\n [matTooltip]=\"designation.domainSetForDeliveryModeRationale[i]\"\n >\n {{ designation.domainSetForDeliveryMode[i] }}\n </span>\n\n \n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-2 text-sm text-purple-600 font-medium\">\n {{designation.domainCompetencies.length}} total\n </div>\n </div>\n </div>\n <!-- Adding courses -->\n <div class=\"cbp mt-4\"\n *ngIf=\"designation.selectedCourses?.length && openedFrom === 'acbp'\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Courses\n </h4>\n <div class=\"course-list-container\">\n <div class=\"course-list-item\"\n *ngFor=\"let item of designation.selectedCourses; let i = index\">\n <div class=\"course-header\">\n <div class=\"checked-course-container\">\n\n <div>\n <div class=\"course-pill\">\n <div class=\"course-pill-text\">\n <span><img\n src=\"assets/icons/course.svg\"></span> <span>Course</span>\n </div>\n </div>\n </div>\n\n </div>\n <div *ngIf=\"item?.rationale && !item?.is_public\">\n <div class=\"ai-recommened-pill-green\">\n <div class=\"ai-recommened-pill-green-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>AI Recommended - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"item?.rationale && item?.is_public\">\n <div class=\"ai-recommened-pill-public\">\n <div class=\"ai-recommened-pill-public-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>AI Recommended - Public </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item?.rationale\">\n <div class=\"ai-recommened-pill-gray\">\n <div class=\"ai-recommened-pill-gray-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>Manually Suggested - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"course-title mt-4\">\n <div>\n <div *ngIf=\"item?.course\">{{item?.course}}</div>\n <div *ngIf=\"item?.name\">{{item?.name}}</div>\n </div>\n </div>\n <div class=\"course-desc mt-2\">\n <div *ngIf=\"isPDFDownload\">\n <div>{{item?.rationale}}</div>\n </div>\n </div>\n <div class=\"mt-3\"\n *ngIf=\"getCompetenciesByType('Behavioural',item)?.length\">\n <div class=\"competency-sub-heading\">Behavioral Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"behavioural-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Behavioural',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Behavioural',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Behavioural',item)\">\n {{ isExpanded('Behavioural',item) ? 'Show Less' : '+' +\n getRemainingCount('Behavioural',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\"\n *ngIf=\"getCompetenciesByType('Functional',item)?.length\">\n <div class=\"competency-sub-heading\">Functional Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"functional-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Functional',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Functional',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Functional',item)\">\n {{ isExpanded('Functional',item) ? 'Show Less' : '+' +\n getRemainingCount('Functional',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\" *ngIf=\"getCompetenciesByType('Domain',item)?.length\">\n <div class=\"competency-sub-heading\">Domain Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"domain-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Domain',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Domain',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Domain',item)\">\n {{ isExpanded('Domain',item) ? 'Show Less' : '+' +\n getRemainingCount('Domain',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2 d-flex justify-content-between item\">\n <div class=\"relevancy-container\">\n <div class=\"relevancy\">Relevancy</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\" *ngIf=\"item?.relevancy\">\n {{item?.relevancy}}%</div>\n <div class=\"percentage\" *ngIf=\"!item?.relevancy\">N/A</div>\n </div>\n\n </div>\n\n </div>\n\n </div>\n </div>\n\n <!-- adding courses -->\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Footer -->\n\n </div>\n <footer class=\"org-footer\">\n <div class=\"max-w-7xl mx-auto px-6 flex flex-col md:flex-row items-center justify-between\">\n <div class=\"flex items-center space-x-4 mb-4 mt-4 md:mb-0 footer-container\">\n <div class=\"footer-logo-container\">\n <img src=\"assets/icons/karmayogiLogo-min.png\" alt=\"Karmayogi Bharat Logo\" class=\"h-10\"\n style=\"margin-left:20px\" />\n </div>\n <div style=\"margin-left: 100px;\">\n <a href=\"https://karmayogibharat.gov.in\" target=\"_blank\" rel=\"noopener noreferrer\"\n class=\"text-sm font-semibold transition-colors\">\n karmayogibharat.gov.in\n </a>\n </div>\n\n\n </div>\n <div class=\"text-sm text-center md:text-right mb-4\" style=\"margin-left: 100px;\">\n <p>© 2025 All Rights Reserved.</p>\n </div>\n </div>\n </footer>\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Download as Excel\" (click)=\"downloadCSV()\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Download as PDF\"\n (click)=\"downloadPdfFromBE(openedFrom)\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n </div>\n </div>\n <div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </div>", styles: ["@charset \"UTF-8\";.container{margin:10px auto}.sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:150%}::ng-deep mat-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}::ng-deep .mat-select-panel{background-color:#fff!important}::ng-deep .mat-select-panel .mat-option{border-radius:0!important}::ng-deep mat-form-field .mat-form-field-underline{display:none!important}::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.btn-group{display:flex;flex-direction:row;justify-content:space-between}.pl-2{padding-left:5px}.search-filter-section{display:flex;flex-direction:row;justify-content:space-between}.search .rsearch{position:relative}.search .search-icon{position:absolute;top:15px;font-size:20px;left:10px}.search .sinput{border-radius:32px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato;width:800px}.select-map-route-container{display:flex;flex-direction:row}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.search-container{display:flex;flex-direction:row}.course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.ai-recommened-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #1B4CA1;background:#1b4ca129}.igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:30px}.course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.relevancy,.competencies-matched{color:var(--accessbility-shades-with-opacity-kb-greys-black-60, rgba(0, 0, 0, .6));font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;align-items:center}.percentage{color:#1d8923;font-family:Lato;font-size:14px;font-style:normal;font-weight:800;line-height:normal}.relevancy-container,.competencies-matched-container{display:flex;flex-direction:row;align-items:center}.dash{padding:0 5px}::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.course-list-container{display:flex;flex-wrap:wrap;gap:16px}.course-list-item{flex:0 0 48%;box-sizing:border-box;border:1px solid #ccc;padding:16px;background-color:#fff;border-radius:8px}.checked-course-container{display:flex}.ml-2{margin-left:8px}::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.ai-recommened-pill-text,.igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.ai-loader-icon img,.igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.competency-container{display:flex;justify-content:normal;flex-direction:row;gap:16px}.outside-layer-total{display:flex;padding:4px 20px;justify-content:left;align-items:left;gap:6px;border-radius:12px;border-left:2px solid #1B4CA1;border-right:2px solid #1B4CA1;background:#edf1f8;flex-direction:column;width:25%}.outside-layer-functional{display:flex;padding:4px 12px;justify-content:left;align-items:left;gap:16px;border-radius:12px;border-left:2px solid #E24577;border-right:2px solid #E24577;background:#f8d2de;flex-direction:column;width:25%}.outside-layer-domain{display:flex;padding:4px 12px;justify-content:left;align-items:left;gap:16px;border-radius:12px;border-left:2px solid #7B47A4;border-right:2px solid #7B47A4;background:#dfd3e9;flex-direction:column;width:25%}.outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:left;align-items:left;gap:16px;border-radius:12px;border-left:2px solid #F8B861;border-right:2px solid #F8B861;background:#fde8cc;flex-direction:column;width:25%}.inside-layer{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.suggest-course-control{display:flex;flex-direction:row}.course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.heading{color:#000;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.heading-bg{color:#fff;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.behavioural-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:99px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:5px 0}.functional-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:99px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:5px 0}.domain-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:99px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:5px 0}.popup-header{display:flex;flex-direction:row;justify-content:space-between}.popup-footer{display:flex;flex-direction:row;justify-content:center}.view-cbp-plan{margin:10px;padding:10px}.view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.section{border-radius:8px;background:#1b4ca114;padding:16px}.popup-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;font-weight:700;flex-shrink:0}.popup-footer{display:flex;justify-content:center;gap:16px;padding:16px 24px;background-color:#fff;flex-shrink:0;position:sticky;bottom:-15px}.section-container{overflow-y:auto;flex:1 1 auto;display:flex;flex-direction:column;justify-content:center;align-items:center}.competency-list{display:flex;flex-direction:row;gap:16px}.competency-text{color:#000;font-family:Lato;font-size:10px;font-style:normal;font-weight:700;line-height:normal}.competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:12px;font-style:normal;font-weight:600;line-height:normal}.cursor-pointer{cursor:pointer}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center}.grid{display:grid;gap:1.5rem}.grid-cols-1{grid-template-columns:repeat(1,1fr)}@media (min-width: 768px){.md\\:grid-cols-2{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.lg\\:grid-cols-4{grid-template-columns:repeat(4,1fr)}}.kpi-card{background:#fff;border-radius:12px;padding:1.5rem;box-shadow:0 4px 14px #0000000d;border-left:4px solid transparent;transition:box-shadow .3s ease}.kpi-card:hover{box-shadow:0 8px 24px #0000001a}.kpi-icon{padding:.75rem;border-radius:.5rem;display:flex;align-items:center;justify-content:center}.kpi-text{font-size:1.25rem;font-weight:700}.progress-container{background:#e5e7eb;height:.75rem;border-radius:9999px;margin-top:.5rem}.progress-bar{height:100%;border-radius:9999px;transition:width .4s ease}.competency-block{background-color:#fff;border-radius:12px;box-shadow:0 2px 10px #0000000f;overflow:hidden}.competency-header{padding:1.5rem;background:linear-gradient(to right,#4f46e5,#3b82f6);color:#fff}.competency-header h3{font-size:1.25rem;font-weight:600}.competency-body{padding:1rem}.role-card{background-color:#f9fafb;padding:.5rem;border-left:4px solid #6366f1;border-radius:6px}.role-title{font-size:1rem;font-weight:600;margin-bottom:.75rem;display:flex;align-items:center;color:#1e40af}.comp-section{border-radius:.5rem;padding:.75rem;background-color:#f0f9ff;margin-bottom:1rem}.comp-section h4{font-weight:600;margin-bottom:.5rem}.comp-item{background-color:#fff;border-left:3px solid #3b82f6;padding:.5rem;border-radius:4px;margin-bottom:.25rem;font-size:.875rem}.bg-blue-50{background-color:#fde8cc;border-radius:4px}.bg-green-50{background-color:#f8d2de;border-radius:4px}.bg-purple-50{background-color:#dfd3e9;border-radius:4px}.text-blue-800{color:#1e3a8a}.text-green-800{color:#ff1493}.text-purple-800{color:#6b21a8}.border-blue-400{border-color:#60a5fa}.border-green-400{border-color:#34d399}.border-purple-400{border-color:#c084fc}.text-sm{font-size:.875rem}.text-gray-700{color:#374151}.icon-sm{width:24px;height:24px}.heading-with-bg{background:#4f46e5;padding:24px;border-radius:8px 8px 0 0}.competencis-grid{display:flex;flex-direction:row;justify-content:space-between;gap:16px}.section-shadow{padding:16px;border-radius:4px;background:#fff;box-shadow:0 2px 4px #0000001a,0 1px 10px #0000000f}.count{color:#1b4ca1;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.competency-grid{display:flex;flex-direction:row;gap:16px;justify-content:space-between}.text-blue-600{color:#1b4ca1;font-weight:600}.text-green-600{color:#ff1493;font-weight:600}.text-purple-600{color:#6b21a8;font-weight:600}.horizontal-flex{display:flex;align-items:center;justify-content:space-between;width:100%}.progress-bar{width:100%;height:10px;background-color:#e0e0e0;border-radius:10px;overflow:hidden;box-shadow:inset 0 1px 3px #0003}.progress-bar-fill{height:100%;background-color:#1b4ca1;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.progress-bar-fill-behavioural{height:100%;background-color:#f8b861;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.progress-bar-fill-functional{height:100%;background-color:#e24577;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.progress-bar-fill-domain{height:100%;background-color:#7b47a4;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.sub-text{font-size:12px;font-weight:600;font-family:Lato}.competency-count-by-designation{display:flex;gap:10px;flex-direction:row}.competencies-grid-3{width:33%}.grid-list-item div{padding:5px 10px;margin:10px 0}.grid-list-item-behavioral div{border-left:2px solid darkorange}.grid-list-item-functional div{border-left:2px solid #ff1493}.grid-list-item-domain div{border-left:2px solid #6b21a8}.header-flex{display:flex;flex-direction:row;width:100%;justify-content:space-between;gap:30px}.header-border{border-bottom:1px solid #ccc;margin:10px;padding:10px}.text-gray-600{font-family:Lato;font-size:14px;font-weight:600}.image-container .h-10,.image-container .h-15{height:50px}.image-container{display:flex;gap:10px;flex-direction:row}.org-footer{display:flex;flex-direction:row;background:#fff;gap:16px;color:#000;width:100%;justify-content:center;align-items:center;border-top:1px solid #ccc;border-bottom:1px solid #ccc}.dialog-scrollable-content{max-height:70vh;overflow-y:auto}.org-footer a{color:#000!important}h1{font-size:1.75rem!important}@media print{.org-footer,.header-border{page-break-inside:avoid}}.header-border{padding-top:10px;padding-bottom:10px;background-color:#fff}.footer-container{display:flex;justify-content:center;align-items:center;flex-direction:column}.footer-logo-container{display:flex;justify-content:center;align-items:center;flex-direction:row;width:30%}.avoid-page-break{page-break-inside:avoid;break-inside:avoid}.pdf-clean *{box-shadow:none!important;filter:none!important;transform:none!important}.view-cbp-plan.pdf-clean{overflow:visible!important;max-height:none!important}.section-container,.popup-container,.outside-layer-total,.outside-layer-behavioral,.outside-layer-functional,.outside-layer-domain,.section-shadow{page-break-inside:avoid!important;break-inside:avoid!important}.bg-gradient-to-br{background:none!important}.section-container,.outside-layer-total,.outside-layer-behavioral,.outside-layer-functional,.outside-layer-domain,.competencis-grid{page-break-inside:avoid}.page-break{page-break-before:always}.cbp .container{margin:10px auto}.cbp .sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.cbp .ministry-heading{color:#1b4ca1;font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal}.cbp .radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.cbp .radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.cbp .label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:16px;font-style:normal;font-weight:700;line-height:150%}.cbp ::ng-deep mat-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}.cbp ::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}.cbp ::ng-deep .mat-select-panel{background-color:#fff!important}.cbp ::ng-deep .mat-select-panel .mat-option{border-radius:0!important}.cbp ::ng-deep mat-form-field .mat-form-field-underline{display:none!important}.cbp ::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.cbp ::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}.cbp ::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.cbp .additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.cbp .section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.cbp .btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.cbp .btn-group{display:flex;flex-direction:row;justify-content:space-between}.cbp .pl-2{padding-left:5px}.cbp .search-filter-section{display:flex;flex-direction:row;justify-content:space-between}.cbp .search .rsearch{position:relative}.cbp .search .search-icon{position:absolute;top:15px;font-size:20px;left:10px}.cbp .search .sinput{border-radius:32px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato;width:800px}.cbp .select-map-route-container{display:flex;flex-direction:row}.cbp .selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.cbp .edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.cbp .search-container{display:flex;flex-direction:row}.cbp .course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.cbp .course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.cbp .course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.cbp .ai-recommened-pill-green{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#0080001c}.cbp .ai-recommened-pill-green-text{color:#006400;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-public{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#1b4ca129}.cbp .ai-recommened-pill-public-text{color:#1b4ca1;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-gray{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#d3d3d3}.cbp .ai-recommened-pill-gray-text{color:#000;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-orange{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#ffa50052}.cbp .ai-recommened-pill-orange-text{color:#5a3f0d;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-orange-text a{color:#5a3f0d!important;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.cbp .course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:22px}.cbp .course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:1.4;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.cbp .relevancy,.cbp .competencies-matched{color:#6c757d;font-family:Lato;font-size:12px;font-style:normal;font-weight:500;line-height:normal;align-items:center}.cbp .percentage{color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:600;line-height:normal}.cbp .delete-button input{background-color:#b60a0a;border-radius:10px}.cbp .relevancy-container,.cbp .competencies-matched-container{display:flex;flex-direction:row;align-items:center}.cbp .dash{padding:0 5px}.cbp ::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.cbp .course-list-container{display:flex;flex-wrap:wrap;gap:16px;width:100%;padding:1rem}.cbp .course-list-item{flex:1 1 calc(50% - 10px);min-width:350px;max-width:500px;box-sizing:border-box;border:1px solid #e0e0e0;padding:16px;background-color:#fff;border-radius:12px;min-height:auto;box-shadow:0 2px 4px #0000001a;transition:box-shadow .2s ease;display:flex;flex-direction:column}.cbp .course-list-item:hover{box-shadow:0 4px 8px #00000026}.cbp .course-list-item:only-child{flex:1 1 auto;max-width:800px}.cbp .checked-course-container{display:flex;width:60%}.cbp .ml-2{margin-left:8px}.cbp ::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.cbp .igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.cbp .course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.cbp .ai-loader-icon img,.cbp .igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.cbp .competency-container{display:flex;justify-content:normal;gap:16px;flex-direction:row}.cbp .outside-layer-total{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #1B4CA1;background:#edf1f8;width:132px}.cbp .outside-layer-functional{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #E24577;background:#f8d2de;width:132px}.cbp .outside-layer-domain{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #7B47A4;background:#dfd3e9;width:132px}.cbp .outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #F8B861;background:#fde8cc;width:132px}.cbp .inside-layer{color:#1b4ca1;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.cbp .count{color:#1b4ca1;font-family:Montserrat;font-size:18px;font-style:normal;font-weight:600;line-height:normal}.cbp .suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.cbp .suggest-course-control{display:flex;flex-direction:row}.cbp .course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.cbp .highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.cbp .ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.cbp .heading{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.cbp .pdf-heading{color:#000;font-family:Montserrat;font-size:18px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0;text-align:center}.cbp .popup-header{display:flex;justify-content:space-between;align-items:center;padding:16px;border-bottom:1px solid #e0e0e0}.cbp .header-left{flex:1}.cbp .header-actions{display:flex;align-items:center;gap:12px}.cbp .regenerate-btn{display:flex;align-items:center;gap:8px;padding:8px 16px;border-radius:6px;font-size:14px;font-weight:500;min-width:auto}.cbp .regenerate-btn .mat-icon{margin:0;font-size:18px;width:18px;height:18px}.cbp .regenerate-btn .mat-spinner{margin:0}.cbp .regenerate-btn:disabled{opacity:.7;cursor:not-allowed}.cbp .close-btn{padding:8px;border-radius:4px;transition:background-color .2s ease}.cbp .close-btn:hover{background-color:#f5f5f5}.cbp .close-btn .mat-icon{font-size:20px;width:20px;height:20px}.cbp .progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.cbp .progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.cbp .behavioural-pill{display:flex;padding:2px 6px;justify-content:center;align-items:center;gap:4px;border-radius:16px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:2px 4px 2px 0;font-size:12px}.cbp .functional-pill{display:flex;padding:2px 6px;justify-content:center;align-items:center;gap:4px;border-radius:16px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:2px 4px 2px 0;font-size:12px}.cbp .domain-pill{display:flex;padding:2px 6px;justify-content:center;align-items:center;gap:4px;border-radius:16px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:2px 4px 2px 0;font-size:12px}.cbp .popup-header{display:flex;flex-direction:row;justify-content:space-between}.cbp .popup-footer{display:flex;flex-direction:row;justify-content:end}.cbp .view-cbp-plan{margin:10px;padding:10px}.cbp .view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.cbp .section{border-radius:8px;background:#1b4ca114;padding:16px}.cbp .popup-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;font-weight:700;flex-shrink:0}.cbp .popup-footer{display:flex;justify-content:flex-end;gap:16px;padding:16px 24px;border-top:1px solid #ddd;background-color:#fff;flex-shrink:0;position:sticky;bottom:0}.cbp .section-container{overflow-y:auto;flex:1 1 auto}.cbp .competency-list{display:flex;flex-direction:row;gap:0px;flex-wrap:wrap;margin:0;padding:0;list-style:none}.cbp .competency-text{color:#000;font-family:Lato;font-size:12px;font-style:normal;font-weight:400;line-height:normal;padding:3px 6px}.cbp .competency-text-behavioral{color:#654321;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.cbp .competency-text-functional{color:#b01669;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.cbp .competency-text-domain{color:#301934;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.cbp .competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:14px;font-style:normal;font-weight:600;line-height:normal}.cbp .cursor-pointer{cursor:pointer}.cbp .btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.cbp .custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.cbp .overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center}.cbp .competencis-grid{display:flex;flex-direction:row;justify-content:space-between;gap:16px}.cbp .grid-list-item-behavioral div{border-left:2px solid darkorange}.cbp .grid-list-item-functional div{border-left:2px solid #ff1493}.cbp .grid-list-item-domain div{border-left:2px solid #6b21a8}.cbp .competencies-grid-3{width:33%}.cbp .bg-blue-50{background-color:#fde8cc;border-radius:4px}.cbp .bg-green-50{background-color:#f8d2de;border-radius:4px}.cbp .bg-purple-50{background-color:#dfd3e9;border-radius:4px}.cbp .grid-list-item div{padding:5px 10px;margin:10px 0}.cbp .course-pill-container{display:flex;gap:8px}.cbp .relevancy-pill-green{display:flex;padding:4px 8px;align-items:center;gap:4px;border-radius:16px;border:1px solid #e0e0e0;background:#f8f9fa}.cbp .mt-1{margin-top:.25rem}.cbp .mt-2{margin-top:.5rem}.cbp .mt-3{margin-top:.75rem}.cbp .show-more-competency{display:inline-flex;align-items:center}.cbp .show-more-link{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:500;line-height:normal;margin:2px 4px 2px 0;text-decoration:none}.cbp .show-more-link:hover{text-decoration:underline}.cbp .course-content{flex:1;display:flex;flex-direction:column}.cbp .course-footer{margin-top:auto;padding-top:12px;display:flex;justify-content:space-between}.cbp ::ng-deep .mdc-tab__text-label{font-weight:700;font-family:Montserrat!important;font-size:16px;color:#000!important;text-transform:capitalize}.cbp .competency-tag{display:inline-block;padding:.25rem .75rem;border-radius:9999px;font-size:.75rem;font-weight:500;margin-right:.5rem;margin-bottom:.5rem}.cbp .menu-list-item.active{background-color:#1b4ca1;color:#fff}.cbp .menu-list-item:hover{background-color:#1b4ca1;color:#fff;border-color:#1b4ca1}.cbp .gray-bg{background-color:rgb(248,250,252,var(--tw-bg-opacity, 1));border-radius:8px;border:1px solid #ccc}.cbp .div-count{font-family:Lato;font-size:20px;font-weight:700}.cbp .green-bg{background-color:#0080001c;border:1px solid #006400;border-radius:8px}.cbp .div-green-count{font-family:Lato;font-size:20px;font-weight:700;color:#006400}.cbp .div-green-label{color:#006400;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.cbp .gray-bg-item{background-color:rgb(248,250,252,var(--tw-bg-opacity, 1));border-radius:8px;border:1px solid #ccc;padding:4px 8px;margin:10px}.cbp .add-btn{color:#1b4ca1;font-size:14px;font-family:Lato}.cbp .list-flex{display:flex;flex-direction:row;justify-content:space-between}.cbp .all-category-list .mat-icon{vertical-align:middle}.cbp .course-list-container-flex{display:flex;align-items:flex-start;gap:2rem}.cbp .left-panel{flex:0 0 250px;font-weight:700;text-align:left}.cbp .right-panel{flex:1;display:flex;flex-direction:row;flex-wrap:wrap;gap:20px;align-content:flex-start;justify-content:flex-start}.cbp .category-list-item{font-weight:400;font-size:16px;font-family:Lato;padding:5px}.cbp .right-panel-flex{display:flex;flex:0 0 100%;width:100%;flex-direction:row;flex-wrap:wrap;gap:20px;justify-content:flex-start}.cbp .course-list-container-right-flex{display:flex}.cbp .no-gaps-message{display:flex;flex-direction:column;align-items:center;padding:24px;background:linear-gradient(135deg,#4caf501a,#81c7841a);border:2px solid #4CAF50;border-radius:16px;margin:16px 0}.cbp .no-gaps-message .success-icon{font-size:25px;color:#4caf50;margin-bottom:16px}.cbp .no-gaps-message h4{color:#2e7d32;font-family:Montserrat;font-size:20px;font-weight:600;margin:0 0 8px;text-align:center}.cbp .no-gaps-message p{color:#388e3c;font-family:Lato;font-size:14px;font-weight:400;margin:0;text-align:center;line-height:1.5}.cbp .section-header-improved{display:flex;flex-direction:column;gap:16px}.cbp .search-and-buttons-container{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.cbp .search-container-compact{flex:0 0 auto;min-width:280px}.cbp .search-container-compact .rsearch{position:relative;display:flex;align-items:center}.cbp .search-container-compact .search-icon{position:absolute;left:12px;color:#666;font-size:20px;z-index:1}.cbp .search-container-compact .sinput-compact{border-radius:25px;border:1px solid #d5d0d0;padding:8px 12px 8px 40px;height:32px;width:100%;font:400 14px Lato;box-sizing:border-box;transition:border-color .3s ease}.cbp .search-container-compact .sinput-compact:focus{outline:none;border-color:#1b4ca1;box-shadow:0 0 0 2px #1b4ca11a}.cbp .search-container-compact .sinput-compact::placeholder{color:#999}.cbp .btn-group-compact{display:flex;gap:8px;flex:0 0 auto}.cbp .category-list-item{padding:8px 12px!important;border-radius:6px;border:1px solid transparent;transition:all .3s ease;background:#f8f9fa;color:#333;font-family:Lato;font-size:14px!important;font-weight:400!important}.cbp .category-list-item:hover{background:#1b4ca10d;border-color:#1b4ca133}.cbp .category-list-item.selected-theme{background:#1b4ca11a;border-color:#1b4ca1;color:#1b4ca1;font-weight:600!important}.cbp .category-list-item.selected-theme:before{content:\"\\2713 \";color:#1b4ca1;font-weight:700}.cbp .theme-filter-controls{margin-bottom:8px}.cbp .clear-filter-btn{background:#f8f9fa;border:1px solid #ddd;border-radius:20px;padding:4px 12px;font-size:12px;color:#666;cursor:pointer;transition:all .3s ease;display:flex;align-items:center;gap:4px}.cbp .clear-filter-btn:hover{background:#e9ecef;border-color:#adb5bd}.cbp .clear-filter-btn mat-icon{font-size:16px;width:16px;height:16px}.cbp .no-course-found-container{display:flex;justify-content:center;align-items:center;min-height:300px;padding:20px}.cbp .no-course-card{background:linear-gradient(135deg,#f8f9fa,#e9ecef);border:2px dashed #ced4da;border-radius:16px;padding:40px;text-align:center;max-width:500px;box-shadow:0 4px 12px #0000000d}.cbp .no-course-card .no-course-icon{margin-bottom:20px}.cbp .no-course-card .no-course-icon mat-icon{font-size:48px;width:48px;height:48px;color:#6c757d}.cbp .no-course-card .no-course-content h4{color:#495057;font-family:Montserrat;font-size:24px;font-weight:600;margin-bottom:12px}.cbp .no-course-card .no-course-content p{color:#6c757d;font-family:Lato;font-size:16px;line-height:1.5;margin-bottom:12px}.cbp .no-course-card .no-course-content p strong{color:#1b4ca1;font-weight:600}.cbp .no-course-card .suggest-course-btn{background:linear-gradient(135deg,#1b4ca1,#164080);color:#fff;border:none;border-radius:25px;padding:12px 24px;font-family:Lato;font-size:14px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:8px;margin:20px auto 0;transition:all .3s ease;box-shadow:0 4px 12px #1b4ca14d}.cbp .no-course-card .suggest-course-btn:hover{background:linear-gradient(135deg,#164080,#0f2f5f);transform:translateY(-2px);box-shadow:0 6px 16px #1b4ca166}.cbp .no-course-card .suggest-course-btn:active{transform:translateY(0)}.cbp .no-course-card .suggest-course-btn mat-icon{font-size:18px;width:18px;height:18px}.cbp .left-panel{flex:0 0 280px!important;background:#f8f9fa;border-radius:12px;padding:16px;border:1px solid #e9ecef;max-height:600px;overflow-y:auto;font-weight:400!important}@media (max-width: 1200px){.cbp .search-and-buttons-container{flex-direction:column;align-items:stretch}.cbp .search-container-compact{min-width:auto;width:100%}.cbp .btn-group-compact{justify-content:center;flex-wrap:wrap}}@media (max-width: 1200px) and (min-width: 769px){.cbp .course-list-item{flex:1 1 calc(50% - 10px);min-width:300px;max-width:none}}@media (max-width: 768px){.cbp .course-list-container-flex{flex-direction:column}.cbp .left-panel{flex:none!important;max-height:300px}.cbp .course-list-item{flex:0 0 100%;max-width:100%}.cbp .no-course-card{padding:20px}.cbp .no-course-card .no-course-content h4{font-size:20px}.cbp .no-course-card .no-course-content p{font-size:14px}}.cbp ::ng-deep .error-snackbar{background-color:#f44336!important;color:#fff!important;font-weight:500}.cbp ::ng-deep .error-snackbar .mat-simple-snackbar-action{color:#fff!important}.cbp ::ng-deep .session-expired-snackbar{background-color:#ff9800!important;color:#fff!important;font-weight:600}.cbp ::ng-deep .session-expired-snackbar .mat-simple-snackbar-action{color:#fff!important;font-weight:700}.cbp .download-pdf{justify-content:end;display:flex;flex-direction:row}.section-header-improved,.section-header-improved-sec-2{display:flex;flex-direction:row;gap:0px;width:100%}.search-and-buttons-container{display:flex;justify-content:space-between;gap:4px;flex-direction:column;flex-wrap:wrap;width:37%;margin:0 5px}::ng-deep .select-search-panel{border:1px solid #ccc!important;border-radius:12px!important;box-shadow:0 8px 20px #0000001f}:host ::ng-deep .mat-select-arrow-wrapper{margin-top:5px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:#ccc}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#1b4ca1;border-color:#1b4ca1!important}::ng-deep .select-search-panel .mat-option.mat-selected:not(.mat-option-disabled){background-color:#1b4ca1!important;color:#fff!important}:host ::ng-deep .mat-form-field-appearance-outline{border-radius:25px;border:1px solid #ccc}:host ::ng-deep .mat-form-field-focused .mat-form-field-appearance-outline{border-color:#1b4ca1!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start{border-radius:25px 0 0 25px;border:none!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-right:none!important;border:none!important;border-radius:0 25px 25px 0}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-gap{border:none!important;border-radius:25px}:host::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix{background-color:transparent!important}:host ::ng-deep .search-and-buttons-container .mat-option-text{color:#fff!important}.header-container{display:flex;flex-direction:row;justify-content:space-between;width:100%;margin:10px 0}.right-side-container{display:flex;justify-content:space-between;gap:64px}::ng-deep .language-select .mat-select-trigger{font-weight:400!important}::ng-deep .language-select .mat-select-value{color:#fff!important}:host ::ng-deep .select-search-panel .mat-option-text{color:#fff!important}.competency-tags{display:flex;gap:6px;margin-top:6px;flex-wrap:wrap}.proficiency-tag,.delivery-mode-tag{display:inline-flex;align-items:center;justify-content:center;padding:2px 8px;border-radius:16px;font-size:11px;line-height:16px;font-weight:500;white-space:nowrap}.delivery-mode-tag.online{background:#e6f4ea;color:#1a7f45;border:1px solid #9BD3B0}.delivery-mode-tag.offline{background:#fdf0e3;color:#a2590a;border:1px solid #F0C48A}.delivery-mode-tag.blended{background:#efe9fb;color:#5b21b6;border:1px solid #C9B6F0}.proficiency-tag.strategic{background:#1b4ca1;color:#fff;border:none}.proficiency-tag.tactical{background:#5b8def;color:#fff;border:none}.proficiency-tag.operational{background:#dbe6f7;color:#1b4ca1;border:none}.flex-col-theme{display:flex;flex-direction:row;gap:6px}\n"] }]
|
|
1041
|
+
args: [{ selector: 'app-view-final-cbp-plan', template: "<div class=\"view-cbp-plan\" #dialogContent style=\"max-height: 80vh; overflow: auto;\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div class=\"header-container\">\n <div>\n <div class=\"heading\">View Final <span *ngIf=\"openedFrom === 'cbp'\">CBP</span><span\n *ngIf=\"openedFrom === 'acbp'\">ACBP</span></div>\n </div>\n <div class=\"right-side-container\">\n <div class=\"search-and-buttons-container\">\n <form [formGroup]=\"filterForm\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\" style=\" height: 34px;\">\n <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('language')?.value ? '' : 'Select Language' }}\n </mat-label>\n\n <mat-select formControlName=\"language\" panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\"\n matInput placeholder=\"Search Languages\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'language')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredLanguages\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </form>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n\n\n\n </div>\n <div class=\"section-container\" #pdfContent>\n <header class=\"bg-white header-border\">\n <div class=\"header-flex justify-between\" style=\"width:100%\">\n <div class=\"flex items-center space-x-4\" style=\"width:50%\">\n <div class=\"image-container\">\n <div>\n <img src=\"assets/icons/dopt-logo.png\" alt=\"Department of Personnel & Training\"\n class=\"h-15\" />\n </div>\n <div>\n <img src=\"assets/icons/CBC_logo.svg\" alt=\"Capacity Building Commission Logo\"\n class=\"h-10\" />\n </div>\n <div>\n <img src=\"assets/icons/karmayogiLogo-min.png\" alt=\"Karmayogi Bharat Logo\"\n class=\"h-10\" />\n </div>\n </div>\n </div>\n <div class=\"text-right\" style=\"width:50%\">\n <h1 class=\"text-2xl font-bold text-gray-900\">\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.ministry?.sbOrgType === 'state'\">{{sharedService?.cbpPlanFinalObj?.ministry?.orgName}}</span>\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.ministry?.sbOrgType === 'ministry'\">{{sharedService?.cbpPlanFinalObj?.ministry?.orgName}}</span>\n <span\n *ngIf=\"sharedService?.cbpPlanFinalObj?.department_name\">/{{sharedService?.cbpPlanFinalObj?.department_name}}</span>\n - Capacity Building Plan\n </h1>\n <p class=\"text-gray-600\">Comprehensive Role-Based Competency Analysis</p>\n </div>\n </div>\n </header>\n <div class=\"min-h-screen bg-gradient-to-br from-slate-50 via-blue-50 to-indigo-100\">\n <!-- Header -->\n\n\n <div class=\"max-w-7xl mx-auto px-6 py-8 mt-4\">\n <!-- KPI Dashboard -->\n <div class=\"competency-container mt-2\">\n <div class=\"outside-layer-total\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <path d=\"M14 2v6h6\" />\n <path d=\"M16 13H8\" />\n <path d=\"M16 17H8\" />\n <path d=\"M10 9H8\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.total}}</div>\n </div>\n </div>\n\n <div class=\"mt-4\">\n <div class=\"sub-heading\">\n <p>Total Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Total Competencies: {{totalCompetencieObj?.total}}</div>\n </div>\n <div class=\"count\">\n <!-- {{competenciesCount?.total}} -->\n </div>\n </div>\n <div class=\"outside-layer-behavioral\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M15.5 17a4 4 0 0 1-5 0\" />\n <path d=\"M13 14h.01\" />\n <path d=\"M11 11h.01\" />\n <path d=\"M17 14h.01\" />\n <path d=\"M13 10h.01\" />\n <path d=\"M13 18h.01\" />\n <path d=\"M13 6h.01\" />\n <path d=\"M17 18h.01\" />\n <path d=\"M17 6h.01\" />\n <path d=\"M21 12a9 9 0 0 1-9 9a9 9 0 0 1-9-9a9 9 0 0 1 9-9a9 9 0 0 1 9 9z\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.behavioral}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Behavioral Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-behavioural\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Behavioral Competencies: {{totalCompetencieObj?.behavioral}}\n </div>\n </div>\n\n </div>\n <div class=\"outside-layer-functional\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\" />\n <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.functional}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Functional Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-functional\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Functional Competencies: {{totalCompetencieObj?.functional}}</div>\n </div>\n\n\n </div>\n <div class=\"outside-layer-domain\">\n <div class=\"horizontal-flex mt-2\">\n <div>\n <svg class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <circle cx=\"12\" cy=\"12\" r=\"6\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n </svg>\n </div>\n <div>\n <div class=\"count\">{{totalCompetencieObj?.domain}}</div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"sub-heading\">\n <p>Domain Competencies</p>\n </div>\n </div>\n <div class=\"progress-bar mt-2\">\n <div class=\"progress-bar-fill-domain\" style=\"width: 60%;\"></div>\n </div>\n <div>\n <div class=\"sub-text\">Domain Competencies: {{totalCompetencieObj?.domain}}</div>\n </div>\n\n </div>\n </div>\n <!-- <div class=\"mb-8\">\n <h2 class=\"text-2xl font-bold text-gray-900 mb-6nheading\">Competency Overview</h2>\n <div class=\"competency-grid\">\n <ng-container *ngFor=\"let kpi of overallKPIs;\">\n <div class=\"bg-white rounded-xl outside-layer-total p-6 border-l-4 hover:shadow-xl transition-shadow\" [style.border-left-color]=\"kpi.color\">\n <div class=\"flex items-center justify-between mb-4 inside-layer\">\n <div [class]=\"'p-3 rounded-lg ' + kpi.bgColor\">\n <ng-container [ngSwitch]=\"kpi.name\">\n <svg *ngSwitchCase=\"'Behavioral Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M15.5 17a4 4 0 0 1-5 0\"/>\n <path d=\"M13 14h.01\"/><path d=\"M11 11h.01\"/><path d=\"M17 14h.01\"/><path d=\"M13 10h.01\"/>\n <path d=\"M13 18h.01\"/><path d=\"M13 6h.01\"/><path d=\"M17 18h.01\"/><path d=\"M17 6h.01\"/>\n <path d=\"M21 12a9 9 0 0 1-9 9a9 9 0 0 1-9-9a9 9 0 0 1 9-9a9 9 0 0 1 9 9z\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Functional Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"/><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Domain Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/><circle cx=\"12\" cy=\"12\" r=\"6\"/><circle cx=\"12\" cy=\"12\" r=\"2\"/>\n </svg>\n \n <svg *ngSwitchCase=\"'Total Competencies'\" class=\"h-8 w-8 icon-sm\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewBox=\"0 0 24 24\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/>\n <path d=\"M14 2v6h6\"/><path d=\"M16 13H8\"/><path d=\"M16 17H8\"/><path d=\"M10 9H8\"/>\n </svg>\n \n </ng-container>\n </div>\n <div class=\"text-right\">\n <div class=\"text-2xl font-bold text-gray-900\">{{kpi.total}}</div>\n </div>\n </div>\n <h3 class=\"text-gray-900 font-semibold mb-2 heading\">{{kpi.name}}</h3>\n <div class=\"w-full bg-gray-200 rounded-full h-3\">\n <div class=\"h-3 rounded-full transition-all duration-500\"\n [style.width.%]=\"kpi.avgCompletion\"\n [style.background-color]=\"kpi.color\">\n </div>\n </div>\n <p class=\"text-sm text-gray-500 mt-2\">Total Competencies: {{kpi.total}}</p>\n </div>\n </ng-container>\n </div>\n </div> -->\n\n <!-- Designation Reports -->\n <div class=\"space-y-8 mt-4\">\n <h2 class=\"text-2xl font-bold text-gray-900 mb-6 heading\">Detailed Competency Framework by\n Designation</h2>\n\n <ng-container *ngFor=\"let designation of designationData;\">\n <div class=\"bg-white rounded-xl overflow-hidden section-shadow\">\n <!-- Header -->\n <div\n class=\"bg-gradient-to-r from-indigo-600 to-blue-600 text-white p-6 heading-with-bg\">\n <div class=\"flex items-center justify-between\">\n <div>\n <h3 class=\"text-2xl font-bold mb-2 heading-bg\">{{designation.designation}}\n </h3>\n <p class=\"text-indigo-100 mb-1\">Wing/Division: {{designation.wing}}</p>\n </div>\n <div class=\"flex items-center space-x-4 competency-count-by-designation\">\n <span class=\"font-semibold text-sm\">Behavioral:\n {{designation.behavioralCompetencies.length}} total</span>\n <span class=\"font-semibold text-sm\">Functional:\n {{designation.functionalCompetencies.length}} total</span>\n <span class=\"font-semibold text-sm\">Domain:\n {{designation.domainCompetencies.length}} total</span>\n </div>\n </div>\n </div>\n\n <!-- Body -->\n <div class=\"p-4 section-shadow\">\n <!-- Roles -->\n <div class=\"mb-6\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Roles & Responsibilities\n </h4>\n <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2\">\n <div *ngFor=\"let role of designation.rolesResponsibilities; let i = index\"\n class=\"bg-gray-50 p-2 rounded border-l-3 border-indigo-500\">\n <p class=\"text-sm text-gray-700 leading-relaxed\">{{role}}</p>\n </div>\n </div>\n </div>\n <!-- Activities -->\n <div class=\"mb-6 mt-4\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Activities\n </h4>\n <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2\">\n <div *ngFor=\"let role of designation.activities; let i = index\"\n class=\"bg-gray-50 p-2 rounded border-l-3 border-indigo-500\">\n <p class=\"text-sm text-gray-700 leading-relaxed\">{{role}}</p>\n </div>\n </div>\n </div>\n <div class=\"page-break\"></div>\n <!-- Competencies -->\n <div class=\"competencis-grid mt-4\">\n <!-- Behavioral -->\n <div class=\"bg-blue-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-blue-800 text-base mb-2\">Behavioral</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-behavioral\">\n <div *ngFor=\"let comp of designation.behavioralCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-blue-400\">\n {{comp}}\n <div class=\"flex-col-theme\">\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.behavioralSetForProficiencyLevel[i]\"\n class=\"proficiency-tag\"\n [ngClass]=\"designation.behavioralSetForProficiencyLevel[i]?.toLowerCase()\"\n [matTooltip]=\"designation.behavioralSetForProficiencyLevelRationale[i]\"\n >\n {{ designation.behavioralSetForProficiencyLevel[i] }}\n </span>\n\n \n </span>\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.behavioralSetForDeliveryMode[i]\"\n class=\"delivery-mode-tag\"\n [ngClass]=\"designation.behavioralSetForDeliveryMode[i]?.toLowerCase()\"\n [matTooltip]=\"designation.behavioralSetForDeliveryModeRationale[i]\"\n >\n {{ designation.behavioralSetForDeliveryMode[i] }}\n </span>\n\n \n </span>\n </div>\n </div>\n \n </div>\n \n <div class=\"mt-2 text-sm text-blue-600 font-medium\">\n {{designation.behavioralCompetencies.length}} total\n </div>\n </div>\n\n <!-- Functional -->\n <div class=\"bg-green-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-green-800 text-base mb-2\">Functional</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-functional\">\n <div *ngFor=\"let comp of designation.functionalCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-green-400\">\n {{comp}}\n <div class=\"flex-col-theme\">\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.functionalSetForProficiencyLevel[i]\"\n class=\"proficiency-tag\"\n [ngClass]=\"designation.functionalSetForProficiencyLevel[i]?.toLowerCase()\"\n [matTooltip]=\"designation.functionalSetForProficiencyLevelRationale[i]\"\n >\n {{ designation.functionalSetForProficiencyLevel[i] }}\n </span>\n\n \n </span>\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.functionalSetForDeliveryMode[i]\"\n class=\"delivery-mode-tag\"\n [ngClass]=\"designation.functionalSetForDeliveryMode[i]?.toLowerCase()\"\n [matTooltip]=\"designation.functionalSetForDeliveryModeRationale[i]\"\n >\n {{ designation.functionalSetForDeliveryMode[i] }}\n </span>\n\n \n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-2 text-sm text-green-600 font-medium\">\n {{designation.functionalCompetencies.length}} total\n </div>\n </div>\n\n <!-- Domain -->\n <div class=\"bg-purple-50 rounded-lg p-3 competencies-grid-3\">\n <h4 class=\"font-semibold text-purple-800 text-base mb-2\">Domain</h4>\n <div class=\"space-y-1 grid-list-item grid-list-item-domain\">\n <div *ngFor=\"let comp of designation.domainCompetencies; let i = index\"\n class=\"bg-white p-1.5 rounded text-sm text-gray-700 border-l-2 border-purple-400\">\n {{comp}}\n <div class=\"flex-col-theme\">\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.domainSetForProficiencyLevel[i]\"\n class=\"proficiency-tag\"\n [ngClass]=\"designation.domainSetForProficiencyLevel[i]?.toLowerCase()\"\n [matTooltip]=\"designation.domainSetForProficiencyLevelRationale[i]\"\n >\n {{ designation.domainSetForProficiencyLevel[i] }}\n </span>\n\n \n </span>\n \n <span class=\"competency-tags\">\n <span *ngIf=\"designation.domainSetForDeliveryMode[i]\"\n class=\"delivery-mode-tag\"\n [ngClass]=\"designation.domainSetForDeliveryMode[i]?.toLowerCase()\"\n [matTooltip]=\"designation.domainSetForDeliveryModeRationale[i]\"\n >\n {{ designation.domainSetForDeliveryMode[i] }}\n </span>\n\n \n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-2 text-sm text-purple-600 font-medium\">\n {{designation.domainCompetencies.length}} total\n </div>\n </div>\n </div>\n <!-- Adding courses -->\n <div class=\"cbp mt-4\"\n *ngIf=\"designation.selectedCourses?.length && openedFrom === 'acbp'\">\n <h4 class=\"text-xl font-semibold text-gray-900 mb-3 flex items-center\">\n <svg class=\"h-5 w-5 mr-2 text-indigo-600 icon-sm\" fill=\"none\"\n viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n Courses\n </h4>\n <div class=\"course-list-container\">\n <div class=\"course-list-item\"\n *ngFor=\"let item of designation.selectedCourses; let i = index\">\n <div class=\"course-header\">\n <div class=\"checked-course-container\">\n\n <div>\n <div class=\"course-pill\">\n <div class=\"course-pill-text\">\n <span><img\n src=\"assets/icons/course.svg\"></span> <span>Course</span>\n </div>\n </div>\n </div>\n\n </div>\n <div *ngIf=\"item?.rationale && !item?.is_public\">\n <div class=\"ai-recommened-pill-green\">\n <div class=\"ai-recommened-pill-green-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>AI Recommended - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"item?.rationale && item?.is_public\">\n <div class=\"ai-recommened-pill-public\">\n <div class=\"ai-recommened-pill-public-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>AI Recommended - Public </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item?.rationale\">\n <div class=\"ai-recommened-pill-gray\">\n <div class=\"ai-recommened-pill-gray-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n\n <span>Manually Suggested - iGOT </span>\n\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.platform\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <a class=\"cursor-pointer\" [href]=\"item?.public_link\"\n target=\"_blank\"><span>Platform -\n {{item?.platform}}</span></a>\n </div>\n </div>\n <div class=\"ai-recommened-pill-orange mt-2\"\n *ngIf=\"item?.organisation?.length\">\n <div class=\"ai-recommened-pill-orange-text\">\n <span class=\"ai-loader-icon\"><img\n src=\"assets/icons/ai-loader.gif\"></span>\n <span>Provider - {{item?.organisation[0]}}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"course-title mt-4\">\n <div>\n <div *ngIf=\"item?.course\">{{item?.course}}</div>\n <div *ngIf=\"item?.name\">{{item?.name}}</div>\n </div>\n </div>\n <div class=\"course-desc mt-2\">\n <div *ngIf=\"isPDFDownload\">\n <div>{{item?.rationale}}</div>\n </div>\n </div>\n <div class=\"mt-3\"\n *ngIf=\"getCompetenciesByType('Behavioural',item)?.length\">\n <div class=\"competency-sub-heading\">Behavioral Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"behavioural-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Behavioural',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Behavioural',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Behavioural',item)\">\n {{ isExpanded('Behavioural',item) ? 'Show Less' : '+' +\n getRemainingCount('Behavioural',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\"\n *ngIf=\"getCompetenciesByType('Functional',item)?.length\">\n <div class=\"competency-sub-heading\">Functional Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"functional-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Functional',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Functional',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Functional',item)\">\n {{ isExpanded('Functional',item) ? 'Show Less' : '+' +\n getRemainingCount('Functional',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2\" *ngIf=\"getCompetenciesByType('Domain',item)?.length\">\n <div class=\"competency-sub-heading\">Domain Competencies</div>\n <ul class=\"competency-list mt-1\">\n <li class=\"domain-pill\"\n *ngFor=\"let comp of getDisplayedCompetencies('Domain',item)\">\n <span class=\"competency-text\"> {{ comp.competencyThemeName\n }} -\n {{\n comp.competencySubThemeName }} </span>\n </li>\n <li *ngIf=\"hasMoreThanTwo('Domain',item)\"\n class=\"show-more-competency\">\n <span class=\"show-more-link cursor-pointer\"\n (click)=\"toggleCompetencies('Domain',item)\">\n {{ isExpanded('Domain',item) ? 'Show Less' : '+' +\n getRemainingCount('Domain',item) + ' More' }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"mt-2 d-flex justify-content-between item\">\n <div class=\"relevancy-container\">\n <div class=\"relevancy\">Relevancy</div>\n <div class=\"dash\">-</div>\n <div class=\"percentage\" *ngIf=\"item?.relevancy\">\n {{item?.relevancy}}%</div>\n <div class=\"percentage\" *ngIf=\"!item?.relevancy\">N/A</div>\n </div>\n\n </div>\n\n </div>\n\n </div>\n </div>\n\n <!-- adding courses -->\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Footer -->\n\n </div>\n <footer class=\"org-footer\">\n <div class=\"max-w-7xl mx-auto px-6 flex flex-col md:flex-row items-center justify-between\">\n <div class=\"flex items-center space-x-4 mb-4 mt-4 md:mb-0 footer-container\">\n <div class=\"footer-logo-container\">\n <img src=\"assets/icons/karmayogiLogo-min.png\" alt=\"Karmayogi Bharat Logo\" class=\"h-10\"\n style=\"margin-left:20px\" />\n </div>\n <div style=\"margin-left: 100px;\">\n <a href=\"https://karmayogibharat.gov.in\" target=\"_blank\" rel=\"noopener noreferrer\"\n class=\"text-sm font-semibold transition-colors\">\n karmayogibharat.gov.in\n </a>\n </div>\n\n\n </div>\n <div class=\"text-sm text-center md:text-right mb-4\" style=\"margin-left: 100px;\">\n <p>© 2025 All Rights Reserved.</p>\n </div>\n </div>\n </footer>\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Download as Excel\" (click)=\"downloadCSV()\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Download as PDF\"\n (click)=\"downloadPdfFromBE(openedFrom)\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n </div>\n </div>\n <div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n <div class=\"loader-message\" *ngIf=\"downloadInProgress\">\n Download is in progress. Please wait, this may take a while for large files...\n </div>\n </div>", styles: ["@charset \"UTF-8\";.container{margin:10px auto}.sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:150%}::ng-deep mat-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}::ng-deep .mat-select-panel{background-color:#fff!important}::ng-deep .mat-select-panel .mat-option{border-radius:0!important}::ng-deep mat-form-field .mat-form-field-underline{display:none!important}::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.btn-group{display:flex;flex-direction:row;justify-content:space-between}.pl-2{padding-left:5px}.search-filter-section{display:flex;flex-direction:row;justify-content:space-between}.search .rsearch{position:relative}.search .search-icon{position:absolute;top:15px;font-size:20px;left:10px}.search .sinput{border-radius:32px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato;width:800px}.select-map-route-container{display:flex;flex-direction:row}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.search-container{display:flex;flex-direction:row}.course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.ai-recommened-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #1B4CA1;background:#1b4ca129}.igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:30px}.course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.relevancy,.competencies-matched{color:var(--accessbility-shades-with-opacity-kb-greys-black-60, rgba(0, 0, 0, .6));font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;align-items:center}.percentage{color:#1d8923;font-family:Lato;font-size:14px;font-style:normal;font-weight:800;line-height:normal}.relevancy-container,.competencies-matched-container{display:flex;flex-direction:row;align-items:center}.dash{padding:0 5px}::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.course-list-container{display:flex;flex-wrap:wrap;gap:16px}.course-list-item{flex:0 0 48%;box-sizing:border-box;border:1px solid #ccc;padding:16px;background-color:#fff;border-radius:8px}.checked-course-container{display:flex}.ml-2{margin-left:8px}::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.ai-recommened-pill-text,.igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.ai-loader-icon img,.igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.competency-container{display:flex;justify-content:normal;flex-direction:row;gap:16px}.outside-layer-total{display:flex;padding:4px 20px;justify-content:left;align-items:left;gap:6px;border-radius:12px;border-left:2px solid #1B4CA1;border-right:2px solid #1B4CA1;background:#edf1f8;flex-direction:column;width:25%}.outside-layer-functional{display:flex;padding:4px 12px;justify-content:left;align-items:left;gap:16px;border-radius:12px;border-left:2px solid #E24577;border-right:2px solid #E24577;background:#f8d2de;flex-direction:column;width:25%}.outside-layer-domain{display:flex;padding:4px 12px;justify-content:left;align-items:left;gap:16px;border-radius:12px;border-left:2px solid #7B47A4;border-right:2px solid #7B47A4;background:#dfd3e9;flex-direction:column;width:25%}.outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:left;align-items:left;gap:16px;border-radius:12px;border-left:2px solid #F8B861;border-right:2px solid #F8B861;background:#fde8cc;flex-direction:column;width:25%}.inside-layer{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.suggest-course-control{display:flex;flex-direction:row}.course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.heading{color:#000;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.heading-bg{color:#fff;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.behavioural-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:99px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:5px 0}.functional-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:99px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:5px 0}.domain-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:99px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:5px 0}.popup-header{display:flex;flex-direction:row;justify-content:space-between}.popup-footer{display:flex;flex-direction:row;justify-content:center}.view-cbp-plan{margin:10px;padding:10px}.view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.section{border-radius:8px;background:#1b4ca114;padding:16px}.popup-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;font-weight:700;flex-shrink:0}.popup-footer{display:flex;justify-content:center;gap:16px;padding:16px 24px;background-color:#fff;flex-shrink:0;position:sticky;bottom:-15px}.section-container{overflow-y:auto;flex:1 1 auto;display:flex;flex-direction:column;justify-content:center;align-items:center}.competency-list{display:flex;flex-direction:row;gap:16px}.competency-text{color:#000;font-family:Lato;font-size:10px;font-style:normal;font-weight:700;line-height:normal}.competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:12px;font-style:normal;font-weight:600;line-height:normal}.cursor-pointer{cursor:pointer}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center}.grid{display:grid;gap:1.5rem}.grid-cols-1{grid-template-columns:repeat(1,1fr)}@media (min-width: 768px){.md\\:grid-cols-2{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.lg\\:grid-cols-4{grid-template-columns:repeat(4,1fr)}}.kpi-card{background:#fff;border-radius:12px;padding:1.5rem;box-shadow:0 4px 14px #0000000d;border-left:4px solid transparent;transition:box-shadow .3s ease}.kpi-card:hover{box-shadow:0 8px 24px #0000001a}.kpi-icon{padding:.75rem;border-radius:.5rem;display:flex;align-items:center;justify-content:center}.kpi-text{font-size:1.25rem;font-weight:700}.progress-container{background:#e5e7eb;height:.75rem;border-radius:9999px;margin-top:.5rem}.progress-bar{height:100%;border-radius:9999px;transition:width .4s ease}.competency-block{background-color:#fff;border-radius:12px;box-shadow:0 2px 10px #0000000f;overflow:hidden}.competency-header{padding:1.5rem;background:linear-gradient(to right,#4f46e5,#3b82f6);color:#fff}.competency-header h3{font-size:1.25rem;font-weight:600}.competency-body{padding:1rem}.role-card{background-color:#f9fafb;padding:.5rem;border-left:4px solid #6366f1;border-radius:6px}.role-title{font-size:1rem;font-weight:600;margin-bottom:.75rem;display:flex;align-items:center;color:#1e40af}.comp-section{border-radius:.5rem;padding:.75rem;background-color:#f0f9ff;margin-bottom:1rem}.comp-section h4{font-weight:600;margin-bottom:.5rem}.comp-item{background-color:#fff;border-left:3px solid #3b82f6;padding:.5rem;border-radius:4px;margin-bottom:.25rem;font-size:.875rem}.bg-blue-50{background-color:#fde8cc;border-radius:4px}.bg-green-50{background-color:#f8d2de;border-radius:4px}.bg-purple-50{background-color:#dfd3e9;border-radius:4px}.text-blue-800{color:#1e3a8a}.text-green-800{color:#ff1493}.text-purple-800{color:#6b21a8}.border-blue-400{border-color:#60a5fa}.border-green-400{border-color:#34d399}.border-purple-400{border-color:#c084fc}.text-sm{font-size:.875rem}.text-gray-700{color:#374151}.icon-sm{width:24px;height:24px}.heading-with-bg{background:#4f46e5;padding:24px;border-radius:8px 8px 0 0}.competencis-grid{display:flex;flex-direction:row;justify-content:space-between;gap:16px}.section-shadow{padding:16px;border-radius:4px;background:#fff;box-shadow:0 2px 4px #0000001a,0 1px 10px #0000000f}.count{color:#1b4ca1;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.competency-grid{display:flex;flex-direction:row;gap:16px;justify-content:space-between}.text-blue-600{color:#1b4ca1;font-weight:600}.text-green-600{color:#ff1493;font-weight:600}.text-purple-600{color:#6b21a8;font-weight:600}.horizontal-flex{display:flex;align-items:center;justify-content:space-between;width:100%}.progress-bar{width:100%;height:10px;background-color:#e0e0e0;border-radius:10px;overflow:hidden;box-shadow:inset 0 1px 3px #0003}.progress-bar-fill{height:100%;background-color:#1b4ca1;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.progress-bar-fill-behavioural{height:100%;background-color:#f8b861;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.progress-bar-fill-functional{height:100%;background-color:#e24577;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.progress-bar-fill-domain{height:100%;background-color:#7b47a4;width:0;border-radius:10px 0 0 10px;transition:width .5s ease-in-out}.sub-text{font-size:12px;font-weight:600;font-family:Lato}.competency-count-by-designation{display:flex;gap:10px;flex-direction:row}.competencies-grid-3{width:33%}.grid-list-item div{padding:5px 10px;margin:10px 0}.grid-list-item-behavioral div{border-left:2px solid darkorange}.grid-list-item-functional div{border-left:2px solid #ff1493}.grid-list-item-domain div{border-left:2px solid #6b21a8}.header-flex{display:flex;flex-direction:row;width:100%;justify-content:space-between;gap:30px}.header-border{border-bottom:1px solid #ccc;margin:10px;padding:10px}.text-gray-600{font-family:Lato;font-size:14px;font-weight:600}.image-container .h-10,.image-container .h-15{height:50px}.image-container{display:flex;gap:10px;flex-direction:row}.org-footer{display:flex;flex-direction:row;background:#fff;gap:16px;color:#000;width:100%;justify-content:center;align-items:center;border-top:1px solid #ccc;border-bottom:1px solid #ccc}.dialog-scrollable-content{max-height:70vh;overflow-y:auto}.org-footer a{color:#000!important}h1{font-size:1.75rem!important}@media print{.org-footer,.header-border{page-break-inside:avoid}}.header-border{padding-top:10px;padding-bottom:10px;background-color:#fff}.footer-container{display:flex;justify-content:center;align-items:center;flex-direction:column}.footer-logo-container{display:flex;justify-content:center;align-items:center;flex-direction:row;width:30%}.avoid-page-break{page-break-inside:avoid;break-inside:avoid}.pdf-clean *{box-shadow:none!important;filter:none!important;transform:none!important}.view-cbp-plan.pdf-clean{overflow:visible!important;max-height:none!important}.section-container,.popup-container,.outside-layer-total,.outside-layer-behavioral,.outside-layer-functional,.outside-layer-domain,.section-shadow{page-break-inside:avoid!important;break-inside:avoid!important}.bg-gradient-to-br{background:none!important}.section-container,.outside-layer-total,.outside-layer-behavioral,.outside-layer-functional,.outside-layer-domain,.competencis-grid{page-break-inside:avoid}.page-break{page-break-before:always}.cbp .container{margin:10px auto}.cbp .sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.cbp .ministry-heading{color:#1b4ca1;font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal}.cbp .radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.cbp .radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.cbp .label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:16px;font-style:normal;font-weight:700;line-height:150%}.cbp ::ng-deep mat-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}.cbp ::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}.cbp ::ng-deep .mat-select-panel{background-color:#fff!important}.cbp ::ng-deep .mat-select-panel .mat-option{border-radius:0!important}.cbp ::ng-deep mat-form-field .mat-form-field-underline{display:none!important}.cbp ::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.cbp ::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}.cbp ::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.cbp .additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.cbp .section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.cbp .btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.cbp .btn-group{display:flex;flex-direction:row;justify-content:space-between}.cbp .pl-2{padding-left:5px}.cbp .search-filter-section{display:flex;flex-direction:row;justify-content:space-between}.cbp .search .rsearch{position:relative}.cbp .search .search-icon{position:absolute;top:15px;font-size:20px;left:10px}.cbp .search .sinput{border-radius:32px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato;width:800px}.cbp .select-map-route-container{display:flex;flex-direction:row}.cbp .selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.cbp .edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.cbp .search-container{display:flex;flex-direction:row}.cbp .course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.cbp .course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.cbp .course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.cbp .ai-recommened-pill-green{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#0080001c}.cbp .ai-recommened-pill-green-text{color:#006400;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-public{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#1b4ca129}.cbp .ai-recommened-pill-public-text{color:#1b4ca1;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-gray{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#d3d3d3}.cbp .ai-recommened-pill-gray-text{color:#000;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-orange{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);background:#ffa50052}.cbp .ai-recommened-pill-orange-text{color:#5a3f0d;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .ai-recommened-pill-orange-text a{color:#5a3f0d!important;font-family:Lato;font-size:11px;font-style:normal;font-weight:600;line-height:normal}.cbp .igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.cbp .course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:22px}.cbp .course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:1.4;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.cbp .relevancy,.cbp .competencies-matched{color:#6c757d;font-family:Lato;font-size:12px;font-style:normal;font-weight:500;line-height:normal;align-items:center}.cbp .percentage{color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:600;line-height:normal}.cbp .delete-button input{background-color:#b60a0a;border-radius:10px}.cbp .relevancy-container,.cbp .competencies-matched-container{display:flex;flex-direction:row;align-items:center}.cbp .dash{padding:0 5px}.cbp ::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.cbp .course-list-container{display:flex;flex-wrap:wrap;gap:16px;width:100%;padding:1rem}.cbp .course-list-item{flex:1 1 calc(50% - 10px);min-width:350px;max-width:500px;box-sizing:border-box;border:1px solid #e0e0e0;padding:16px;background-color:#fff;border-radius:12px;min-height:auto;box-shadow:0 2px 4px #0000001a;transition:box-shadow .2s ease;display:flex;flex-direction:column}.cbp .course-list-item:hover{box-shadow:0 4px 8px #00000026}.cbp .course-list-item:only-child{flex:1 1 auto;max-width:800px}.cbp .checked-course-container{display:flex;width:60%}.cbp .ml-2{margin-left:8px}.cbp ::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.cbp .igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.cbp .course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.cbp .ai-loader-icon img,.cbp .igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.cbp .competency-container{display:flex;justify-content:normal;gap:16px;flex-direction:row}.cbp .outside-layer-total{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #1B4CA1;background:#edf1f8;width:132px}.cbp .outside-layer-functional{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #E24577;background:#f8d2de;width:132px}.cbp .outside-layer-domain{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #7B47A4;background:#dfd3e9;width:132px}.cbp .outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px 4px 4px 12px;border-left:2px solid #F8B861;background:#fde8cc;width:132px}.cbp .inside-layer{color:#1b4ca1;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.cbp .count{color:#1b4ca1;font-family:Montserrat;font-size:18px;font-style:normal;font-weight:600;line-height:normal}.cbp .suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.cbp .suggest-course-control{display:flex;flex-direction:row}.cbp .course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.cbp .highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.cbp .ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.cbp .heading{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.cbp .pdf-heading{color:#000;font-family:Montserrat;font-size:18px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0;text-align:center}.cbp .popup-header{display:flex;justify-content:space-between;align-items:center;padding:16px;border-bottom:1px solid #e0e0e0}.cbp .header-left{flex:1}.cbp .header-actions{display:flex;align-items:center;gap:12px}.cbp .regenerate-btn{display:flex;align-items:center;gap:8px;padding:8px 16px;border-radius:6px;font-size:14px;font-weight:500;min-width:auto}.cbp .regenerate-btn .mat-icon{margin:0;font-size:18px;width:18px;height:18px}.cbp .regenerate-btn .mat-spinner{margin:0}.cbp .regenerate-btn:disabled{opacity:.7;cursor:not-allowed}.cbp .close-btn{padding:8px;border-radius:4px;transition:background-color .2s ease}.cbp .close-btn:hover{background-color:#f5f5f5}.cbp .close-btn .mat-icon{font-size:20px;width:20px;height:20px}.cbp .progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.cbp .progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.cbp .behavioural-pill{display:flex;padding:2px 6px;justify-content:center;align-items:center;gap:4px;border-radius:16px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:2px 4px 2px 0;font-size:12px}.cbp .functional-pill{display:flex;padding:2px 6px;justify-content:center;align-items:center;gap:4px;border-radius:16px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:2px 4px 2px 0;font-size:12px}.cbp .domain-pill{display:flex;padding:2px 6px;justify-content:center;align-items:center;gap:4px;border-radius:16px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:2px 4px 2px 0;font-size:12px}.cbp .popup-header{display:flex;flex-direction:row;justify-content:space-between}.cbp .popup-footer{display:flex;flex-direction:row;justify-content:end}.cbp .view-cbp-plan{margin:10px;padding:10px}.cbp .view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.cbp .section{border-radius:8px;background:#1b4ca114;padding:16px}.cbp .popup-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;font-weight:700;flex-shrink:0}.cbp .popup-footer{display:flex;justify-content:flex-end;gap:16px;padding:16px 24px;border-top:1px solid #ddd;background-color:#fff;flex-shrink:0;position:sticky;bottom:0}.cbp .section-container{overflow-y:auto;flex:1 1 auto}.cbp .competency-list{display:flex;flex-direction:row;gap:0px;flex-wrap:wrap;margin:0;padding:0;list-style:none}.cbp .competency-text{color:#000;font-family:Lato;font-size:12px;font-style:normal;font-weight:400;line-height:normal;padding:3px 6px}.cbp .competency-text-behavioral{color:#654321;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.cbp .competency-text-functional{color:#b01669;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.cbp .competency-text-domain{color:#301934;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.cbp .competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:14px;font-style:normal;font-weight:600;line-height:normal}.cbp .cursor-pointer{cursor:pointer}.cbp .btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.cbp .custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.cbp .overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center;gap:16px}.cbp .loader-message{color:#1b4ca1;font-family:Lato;font-size:16px;font-weight:600;text-align:center;padding:0 16px}.cbp .competencis-grid{display:flex;flex-direction:row;justify-content:space-between;gap:16px}.cbp .grid-list-item-behavioral div{border-left:2px solid darkorange}.cbp .grid-list-item-functional div{border-left:2px solid #ff1493}.cbp .grid-list-item-domain div{border-left:2px solid #6b21a8}.cbp .competencies-grid-3{width:33%}.cbp .bg-blue-50{background-color:#fde8cc;border-radius:4px}.cbp .bg-green-50{background-color:#f8d2de;border-radius:4px}.cbp .bg-purple-50{background-color:#dfd3e9;border-radius:4px}.cbp .grid-list-item div{padding:5px 10px;margin:10px 0}.cbp .course-pill-container{display:flex;gap:8px}.cbp .relevancy-pill-green{display:flex;padding:4px 8px;align-items:center;gap:4px;border-radius:16px;border:1px solid #e0e0e0;background:#f8f9fa}.cbp .mt-1{margin-top:.25rem}.cbp .mt-2{margin-top:.5rem}.cbp .mt-3{margin-top:.75rem}.cbp .show-more-competency{display:inline-flex;align-items:center}.cbp .show-more-link{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:500;line-height:normal;margin:2px 4px 2px 0;text-decoration:none}.cbp .show-more-link:hover{text-decoration:underline}.cbp .course-content{flex:1;display:flex;flex-direction:column}.cbp .course-footer{margin-top:auto;padding-top:12px;display:flex;justify-content:space-between}.cbp ::ng-deep .mdc-tab__text-label{font-weight:700;font-family:Montserrat!important;font-size:16px;color:#000!important;text-transform:capitalize}.cbp .competency-tag{display:inline-block;padding:.25rem .75rem;border-radius:9999px;font-size:.75rem;font-weight:500;margin-right:.5rem;margin-bottom:.5rem}.cbp .menu-list-item.active{background-color:#1b4ca1;color:#fff}.cbp .menu-list-item:hover{background-color:#1b4ca1;color:#fff;border-color:#1b4ca1}.cbp .gray-bg{background-color:rgb(248,250,252,var(--tw-bg-opacity, 1));border-radius:8px;border:1px solid #ccc}.cbp .div-count{font-family:Lato;font-size:20px;font-weight:700}.cbp .green-bg{background-color:#0080001c;border:1px solid #006400;border-radius:8px}.cbp .div-green-count{font-family:Lato;font-size:20px;font-weight:700;color:#006400}.cbp .div-green-label{color:#006400;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.cbp .gray-bg-item{background-color:rgb(248,250,252,var(--tw-bg-opacity, 1));border-radius:8px;border:1px solid #ccc;padding:4px 8px;margin:10px}.cbp .add-btn{color:#1b4ca1;font-size:14px;font-family:Lato}.cbp .list-flex{display:flex;flex-direction:row;justify-content:space-between}.cbp .all-category-list .mat-icon{vertical-align:middle}.cbp .course-list-container-flex{display:flex;align-items:flex-start;gap:2rem}.cbp .left-panel{flex:0 0 250px;font-weight:700;text-align:left}.cbp .right-panel{flex:1;display:flex;flex-direction:row;flex-wrap:wrap;gap:20px;align-content:flex-start;justify-content:flex-start}.cbp .category-list-item{font-weight:400;font-size:16px;font-family:Lato;padding:5px}.cbp .right-panel-flex{display:flex;flex:0 0 100%;width:100%;flex-direction:row;flex-wrap:wrap;gap:20px;justify-content:flex-start}.cbp .course-list-container-right-flex{display:flex}.cbp .no-gaps-message{display:flex;flex-direction:column;align-items:center;padding:24px;background:linear-gradient(135deg,#4caf501a,#81c7841a);border:2px solid #4CAF50;border-radius:16px;margin:16px 0}.cbp .no-gaps-message .success-icon{font-size:25px;color:#4caf50;margin-bottom:16px}.cbp .no-gaps-message h4{color:#2e7d32;font-family:Montserrat;font-size:20px;font-weight:600;margin:0 0 8px;text-align:center}.cbp .no-gaps-message p{color:#388e3c;font-family:Lato;font-size:14px;font-weight:400;margin:0;text-align:center;line-height:1.5}.cbp .section-header-improved{display:flex;flex-direction:column;gap:16px}.cbp .search-and-buttons-container{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.cbp .search-container-compact{flex:0 0 auto;min-width:280px}.cbp .search-container-compact .rsearch{position:relative;display:flex;align-items:center}.cbp .search-container-compact .search-icon{position:absolute;left:12px;color:#666;font-size:20px;z-index:1}.cbp .search-container-compact .sinput-compact{border-radius:25px;border:1px solid #d5d0d0;padding:8px 12px 8px 40px;height:32px;width:100%;font:400 14px Lato;box-sizing:border-box;transition:border-color .3s ease}.cbp .search-container-compact .sinput-compact:focus{outline:none;border-color:#1b4ca1;box-shadow:0 0 0 2px #1b4ca11a}.cbp .search-container-compact .sinput-compact::placeholder{color:#999}.cbp .btn-group-compact{display:flex;gap:8px;flex:0 0 auto}.cbp .category-list-item{padding:8px 12px!important;border-radius:6px;border:1px solid transparent;transition:all .3s ease;background:#f8f9fa;color:#333;font-family:Lato;font-size:14px!important;font-weight:400!important}.cbp .category-list-item:hover{background:#1b4ca10d;border-color:#1b4ca133}.cbp .category-list-item.selected-theme{background:#1b4ca11a;border-color:#1b4ca1;color:#1b4ca1;font-weight:600!important}.cbp .category-list-item.selected-theme:before{content:\"\\2713 \";color:#1b4ca1;font-weight:700}.cbp .theme-filter-controls{margin-bottom:8px}.cbp .clear-filter-btn{background:#f8f9fa;border:1px solid #ddd;border-radius:20px;padding:4px 12px;font-size:12px;color:#666;cursor:pointer;transition:all .3s ease;display:flex;align-items:center;gap:4px}.cbp .clear-filter-btn:hover{background:#e9ecef;border-color:#adb5bd}.cbp .clear-filter-btn mat-icon{font-size:16px;width:16px;height:16px}.cbp .no-course-found-container{display:flex;justify-content:center;align-items:center;min-height:300px;padding:20px}.cbp .no-course-card{background:linear-gradient(135deg,#f8f9fa,#e9ecef);border:2px dashed #ced4da;border-radius:16px;padding:40px;text-align:center;max-width:500px;box-shadow:0 4px 12px #0000000d}.cbp .no-course-card .no-course-icon{margin-bottom:20px}.cbp .no-course-card .no-course-icon mat-icon{font-size:48px;width:48px;height:48px;color:#6c757d}.cbp .no-course-card .no-course-content h4{color:#495057;font-family:Montserrat;font-size:24px;font-weight:600;margin-bottom:12px}.cbp .no-course-card .no-course-content p{color:#6c757d;font-family:Lato;font-size:16px;line-height:1.5;margin-bottom:12px}.cbp .no-course-card .no-course-content p strong{color:#1b4ca1;font-weight:600}.cbp .no-course-card .suggest-course-btn{background:linear-gradient(135deg,#1b4ca1,#164080);color:#fff;border:none;border-radius:25px;padding:12px 24px;font-family:Lato;font-size:14px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:8px;margin:20px auto 0;transition:all .3s ease;box-shadow:0 4px 12px #1b4ca14d}.cbp .no-course-card .suggest-course-btn:hover{background:linear-gradient(135deg,#164080,#0f2f5f);transform:translateY(-2px);box-shadow:0 6px 16px #1b4ca166}.cbp .no-course-card .suggest-course-btn:active{transform:translateY(0)}.cbp .no-course-card .suggest-course-btn mat-icon{font-size:18px;width:18px;height:18px}.cbp .left-panel{flex:0 0 280px!important;background:#f8f9fa;border-radius:12px;padding:16px;border:1px solid #e9ecef;max-height:600px;overflow-y:auto;font-weight:400!important}@media (max-width: 1200px){.cbp .search-and-buttons-container{flex-direction:column;align-items:stretch}.cbp .search-container-compact{min-width:auto;width:100%}.cbp .btn-group-compact{justify-content:center;flex-wrap:wrap}}@media (max-width: 1200px) and (min-width: 769px){.cbp .course-list-item{flex:1 1 calc(50% - 10px);min-width:300px;max-width:none}}@media (max-width: 768px){.cbp .course-list-container-flex{flex-direction:column}.cbp .left-panel{flex:none!important;max-height:300px}.cbp .course-list-item{flex:0 0 100%;max-width:100%}.cbp .no-course-card{padding:20px}.cbp .no-course-card .no-course-content h4{font-size:20px}.cbp .no-course-card .no-course-content p{font-size:14px}}.cbp ::ng-deep .error-snackbar{background-color:#f44336!important;color:#fff!important;font-weight:500}.cbp ::ng-deep .error-snackbar .mat-simple-snackbar-action{color:#fff!important}.cbp ::ng-deep .session-expired-snackbar{background-color:#ff9800!important;color:#fff!important;font-weight:600}.cbp ::ng-deep .session-expired-snackbar .mat-simple-snackbar-action{color:#fff!important;font-weight:700}.cbp .download-pdf{justify-content:end;display:flex;flex-direction:row}.section-header-improved,.section-header-improved-sec-2{display:flex;flex-direction:row;gap:0px;width:100%}.search-and-buttons-container{display:flex;justify-content:space-between;gap:4px;flex-direction:column;flex-wrap:wrap;width:37%;margin:0 5px}::ng-deep .select-search-panel{border:1px solid #ccc!important;border-radius:12px!important;box-shadow:0 8px 20px #0000001f}:host ::ng-deep .mat-select-arrow-wrapper{margin-top:5px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:#ccc}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#1b4ca1;border-color:#1b4ca1!important}::ng-deep .select-search-panel .mat-option.mat-selected:not(.mat-option-disabled){background-color:#1b4ca1!important;color:#fff!important}:host ::ng-deep .mat-form-field-appearance-outline{border-radius:25px;border:1px solid #ccc}:host ::ng-deep .mat-form-field-focused .mat-form-field-appearance-outline{border-color:#1b4ca1!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start{border-radius:25px 0 0 25px;border:none!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-right:none!important;border:none!important;border-radius:0 25px 25px 0}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-gap{border:none!important;border-radius:25px}:host::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix{background-color:transparent!important}:host ::ng-deep .search-and-buttons-container .mat-option-text{color:#fff!important}.header-container{display:flex;flex-direction:row;justify-content:space-between;width:100%;margin:10px 0}.right-side-container{display:flex;justify-content:space-between;gap:64px}::ng-deep .language-select .mat-select-trigger{font-weight:400!important}::ng-deep .language-select .mat-select-value{color:#fff!important}:host ::ng-deep .select-search-panel .mat-option-text{color:#fff!important}.competency-tags{display:flex;gap:6px;margin-top:6px;flex-wrap:wrap}.proficiency-tag,.delivery-mode-tag{display:inline-flex;align-items:center;justify-content:center;padding:2px 8px;border-radius:16px;font-size:11px;line-height:16px;font-weight:500;white-space:nowrap}.delivery-mode-tag.online{background:#e6f4ea;color:#1a7f45;border:1px solid #9BD3B0}.delivery-mode-tag.offline{background:#fdf0e3;color:#a2590a;border:1px solid #F0C48A}.delivery-mode-tag.blended{background:#efe9fb;color:#5b21b6;border:1px solid #C9B6F0}.proficiency-tag.strategic{background:#1b4ca1;color:#fff;border:none}.proficiency-tag.tactical{background:#5b8def;color:#fff;border:none}.proficiency-tag.operational{background:#dbe6f7;color:#1b4ca1;border:none}.flex-col-theme{display:flex;flex-direction:row;gap:6px}\n"] }]
|
|
1024
1042
|
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
1025
1043
|
type: Inject,
|
|
1026
1044
|
args: [MAT_DIALOG_DATA]
|
|
@@ -1031,4 +1049,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1031
1049
|
type: ViewChild,
|
|
1032
1050
|
args: ['dialogContent']
|
|
1033
1051
|
}] } });
|
|
1034
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1maW5hbC1jYnAtcGxhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvY29tcG9uZW50cy92aWV3LWZpbmFsLWNicC1wbGFuL3ZpZXctZmluYWwtY2JwLXBsYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvdmlldy1maW5hbC1jYnAtcGxhbi92aWV3LWZpbmFsLWNicC1wbGFuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlDLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLGVBQWUsRUFBMkIsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLFFBQVEsTUFBTSxhQUFhLENBQUM7QUFDbkMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRbkgsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxZQUNTLFNBQWtELEVBQ3pCLElBQVMsRUFDakMsTUFBaUIsRUFDakIsR0FBc0IsRUFDdkIsYUFBNEIsRUFDM0IsUUFBcUIsRUFDckIsRUFBZTtRQU5oQixjQUFTLEdBQVQsU0FBUyxDQUF5QztRQUN6QixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdkIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0IsYUFBUSxHQUFS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LGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDN0YsTUFBTTtTQUNUO0lBQ0gsQ0FBQzsrR0FycUNVLHlCQUF5Qiw4Q0FHMUIsZUFBZTttR0FIZCx5QkFBeUIsMFFDZnRDLGtvakRBNHJCVTs7NEZEN3FCRyx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UseUJBQXlCOzswQkFPaEMsTUFBTTsyQkFBQyxlQUFlO29MQXdCbUIsVUFBVTtzQkFBckQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQWFkLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVsZW1lbnRSZWYsIEluamVjdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCBodG1sMnBkZiBmcm9tICdodG1sMnBkZi5qcyc7XG5pbXBvcnQganNQREYgZnJvbSAnanNwZGYnO1xuaW1wb3J0IGh0bWwyY2FudmFzIGZyb20gJ2h0bWwyY2FudmFzJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XG5pbXBvcnQgeyBEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vZGVsZXRlLXJvbGUtbWFwcGluZy1wb3B1cC9kZWxldGUtcm9sZS1tYXBwaW5nLXBvcHVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC12aWV3LWZpbmFsLWNicC1wbGFuJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXctZmluYWwtY2JwLXBsYW4uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92aWV3LWZpbmFsLWNicC1wbGFuLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVmlld0ZpbmFsQ2JwUGxhbkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxWaWV3RmluYWxDYnBQbGFuQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlclxuICApIHtcbiAgICB0aGlzLmZpbHRlckZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGxhbmd1YWdlOiBbJ2VuJ11cbiAgICB9KTtcbiAgICB0aGlzLm9wZW5lZEZyb20gPSBkYXRhPy5vcGVuZWRGcm9tO1xuICAgIHRoaXMuZ2V0TWFwcGluZ0RhdGEoKVxuICB9XG4gIGZpbHRlckZvcm0hOiBGb3JtR3JvdXA7XG4gIGxhbmd1YWdlcyA9IFt7IFwiY29kZVwiOiBcImVuXCIsIGxhYmVsOiBcIkVuZ2xpc2hcIiB9LFxuICB7IFwiY29kZVwiOiBcImhpXCIsIGxhYmVsOiBcIkhpbmRpXCIgfSxcbiAgeyBcImNvZGVcIjogXCJ0ZVwiLCBsYWJlbDogXCJUZWx1Z3VcIiB9LFxuICB7IFwiY29kZVwiOiBcImtuXCIsIGxhYmVsOiBcIkthbm5hZGFcIiB9LFxuICB7IFwiY29kZVwiOiBcIm1yXCIsIGxhYmVsOiBcIk1hcmF0aGlcIiB9LFxuICB7IFwiY29kZVwiOiBcInRhXCIsIGxhYmVsOiBcIlRhbWlsXCIgfSxcbiAgeyBcImNvZGVcIjogXCJndVwiLCBsYWJlbDogXCJHdWphcmF0aVwiIH0sXG4gIHsgXCJjb2RlXCI6IFwibWxcIiwgbGFiZWw6IFwiTWFsYXlhbGFtXCIgfSxcbiAgeyBcImNvZGVcIjogXCJiblwiLCBsYWJlbDogXCJCZW5nYWxpXCIgfSxdO1xuICBmaWx0ZXJlZExhbmd1YWdlcyA9IFsuLi50aGlzLmxhbmd1YWdlc107XG4gIEBWaWV3Q2hpbGQoJ3BkZkNvbnRlbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgcGRmQ29udGVudCE6IEVsZW1lbnRSZWY7XG4gIGxvYWRpbmcgPSBmYWxzZVxuICBkZXNpZ25hdGlvbkRhdGE6IGFueSA9IFtdXG4gIHRvdGFsQ29tcGV0ZW5jaWVPYmogPSB7IHRvdGFsOiAwLCBiZWhhdmlvcmFsOiAwLCBmdW5jdGlvbmFsOiAwLCBkb21haW46IDAgfVxuICBwZGZUcmlnZ2VyID0gZmFsc2VcbiAganNvbkRhdGEgPSBbXVxuICBmaWx0ZXJkQ291cnNlcyA9IFtdO1xuICBwbGFuRGF0YTogYW55XG4gIHJlY29tbWVuZGVkX2NvdXJzZV9pZCA9ICcnXG4gIGV4cGFuZGVkQ29tcGV0ZW5jaWVzOiBhbnkgPSB7fTtcbiAgY29tcGV0ZW5jaWVzQ291bnQgPSB7IHRvdGFsOiAwLCBwdWJsaWNfY291cnNlczogMCwgaWdvdDogMCB9O1xuICBvcGVuZWRGcm9tITogc3RyaW5nO1xuICBpc1BERkRvd25sb2FkID0gZmFsc2U7XG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0NvbnRlbnQnKSBkaWFsb2dDb250ZW50ITogRWxlbWVudFJlZjtcbiAgLy8gZGVzaWduYXRpb25EYXRhID0gW1xuICAvLyAgIHtcbiAgLy8gICAgIGRlc2lnbmF0aW9uOiBcIlNlY3JldGFyeSAoV0NEKVwiLFxuICAvLyAgICAgd2luZzogXCJNaW5pc3RyeSBMZWFkZXJzaGlwXCIsXG4gIC8vICAgICB1cGRhdGVkOiBcIjEwLzA5LzIwMjVcIixcbiAgLy8gICAgIHJvbGVzUmVzcG9uc2liaWxpdGllczogW1xuICAvLyAgICAgICBcIlByb3ZpZGUgb3ZlcmFsbCBzdXBlcnZpc2lvbiBvZiBtaW5pc3RyeSBwcm9ncmFtbWVzIGFuZCBzY2hlbWVzXCIsXG4gIC8vICAgICAgIFwiRW5zdXJlIGVmZmVjdGl2ZSBjb29yZGluYXRpb24gd2l0aCBTdGF0ZSBHb3Zlcm5tZW50cyBmb3Igc2NoZW1lIGltcGxlbWVudGF0aW9uXCIsXG4gIC8vICAgICAgIFwiU3RyYXRlZ2ljIHBvbGljeSBmb3JtdWxhdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb3ZlcnNpZ2h0XCIsXG4gIC8vICAgICAgIFwiSW50ZXItbWluaXN0ZXJpYWwgY29vcmRpbmF0aW9uIGFuZCBsaWFpc29uXCIsXG4gIC8vICAgICAgIFwiUGFybGlhbWVudGFyeSBhZmZhaXJzIG1hbmFnZW1lbnRcIixcbiAgLy8gICAgICAgXCJTZW5pb3IgbGVhZGVyc2hpcCBnb3Zlcm5hbmNlIGFuZCBvdmVyc2lnaHRcIixcbiAgLy8gICAgICAgXCJOYXRpb25hbCBwcm9ncmFtbWUgc3RyYXRlZ2ljIGRpcmVjdGlvblwiLFxuICAvLyAgICAgICBcIkNhYmluZXQgbm90ZSB3cml0aW5nIGFuZCBwb2xpY3kgYnJpZWZzXCJcbiAgLy8gICAgIF0sXG4gIC8vICAgICBiZWhhdmlvcmFsQ29tcGV0ZW5jaWVzOiBbXG4gIC8vICAgICAgIFwiU3RyYXRlZ2ljIExlYWRlcnNoaXBcIiwgXCJFeGVjdXRpdmUgUHJlc2VuY2VcIiwgXCJJbmZsdWVuY2luZyBhbmQgTmVnb3RpYXRpb25cIixcbiAgLy8gICAgICAgXCJSZWxhdGlvbnNoaXAgTWFuYWdlbWVudFwiLCBcIlZlcmJhbCAmIE5vbi1WZXJiYWwgRmx1ZW5jeVwiLCBcIlBsYW5uaW5nICYgUHJpb3JpdGl6YXRpb25cIixcbiAgLy8gICAgICAgXCJBY2NvdW50YWJpbGl0eVwiLCBcIkNvbmZsaWN0IE1hbmFnZW1lbnRcIlxuICAvLyAgICAgXSxcbiAgLy8gICAgIGZ1bmN0aW9uYWxDb21wZXRlbmNpZXM6IFtcbiAgLy8gICAgICAgXCJSdWxlcyBvZiBidXNpbmVzcyAoQW9CL1RvQilcIiwgXCJDYWJpbmV0IG5vdGUgd3JpdGluZ1wiLCBcIlN1Ym1pc3Npb24gb2YgYnJpZWZzLCBzdXBwbHkgb2YgaW5mb3JtYXRpb25cIixcbiAgLy8gICAgICAgXCJQb2xpY3kgZGVzaWduLyBhbWVuZG1lbnRcIiwgXCJQb2xpY3kgaW1wbGVtZW50YXRpb25cIiwgXCJQb2xpY3kgbW9uaXRvcmluZyAmIGltcGFjdCBhc3Nlc3NtZW50XCIsXG4gIC8vICAgICAgIFwiUHJvamVjdCBQbGFubmluZ1wiLCBcIlByb2plY3QgRXZhbHVhdGlvbiAmIE1vbml0b3JpbmdcIiwgXCJDcmVhdGlvbiBvZiBNJkUgRnJhbWV3b3JrXCIsXG4gIC8vICAgICAgIFwiQ2l0aXplbiBQYXJ0bmVyaW5nICYgQ29sbGFib3JhdGlvblwiLCBcIlB1YmxpYyBHcmlldmFuY2UgSGFuZGxpbmdcIlxuICAvLyAgICAgXSxcbiAgLy8gICAgIGRvbWFpbkNvbXBldGVuY2llczogW1xuICAvLyAgICAgICBcIlN0cmF0ZWdpYyBQb2xpY3kgRm9ybXVsYXRpb25cIiwgXCJJbnRlci1taW5pc3RlcmlhbCAmIFN0YXRlIEdvdmVybm1lbnQgQ29vcmRpbmF0aW9uXCIsXG4gIC8vICAgICAgIFwiU2VuaW9yIExlYWRlcnNoaXAgR292ZXJuYW5jZSAmIE92ZXJzaWdodFwiLCBcIkxlZ2lzbGF0aXZlICYgUGFybGlhbWVudGFyeSBBZmZhaXJzIE1hbmFnZW1lbnRcIixcbiAgLy8gICAgICAgXCJOYXRpb25hbCBQcm9ncmFtbWUgU3RyYXRlZ2ljIERpcmVjdGlvblwiXG4gIC8vICAgICBdLFxuICAvLyAgICAgY29tcGxldGlvblJhdGU6IHsgYmVoYXZpb3JhbDogODUsIGZ1bmN0aW9uYWw6IDc4LCBkb21haW46IDkyIH1cbiAgLy8gICB9XG4gIC8vIF07XG5cbiAgLy8gLy8gQ2FsY3VsYXRlIHRoZSB0b3RhbHMgZHluYW1pY2FsbHlcbiAgLy8gcHJpdmF0ZSBiZWhhdmlvcmFsVG90YWwgPSB0aGlzLmRlc2lnbmF0aW9uRGF0YS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjICsgaXRlbS5iZWhhdmlvcmFsQ29tcGV0ZW5jaWVzLmxlbmd0aCwgMCk7XG4gIC8vIHByaXZhdGUgZnVuY3Rpb25hbFRvdGFsID0gdGhpcy5kZXNpZ25hdGlvbkRhdGEucmVkdWNlKChhY2MsIGl0ZW0pID0+IGFjYyArIGl0ZW0uZnVuY3Rpb25hbENvbXBldGVuY2llcy5sZW5ndGgsIDApO1xuICAvLyBwcml2YXRlIGRvbWFpblRvdGFsID0gdGhpcy5kZXNpZ25hdGlvbkRhdGEucmVkdWNlKChhY2MsIGl0ZW0pID0+IGFjYyArIGl0ZW0uZG9tYWluQ29tcGV0ZW5jaWVzLmxlbmd0aCwgMCk7XG5cbiAgLy8gLy8gQ2FsY3VsYXRlIHRoZSBhdmVyYWdlcyBkeW5hbWljYWxseVxuICAvLyBwcml2YXRlIGJlaGF2aW9yYWxBdmcgPSBNYXRoLnJvdW5kKHRoaXMuZGVzaWduYXRpb25EYXRhLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiBhY2MgKyBpdGVtLmNvbXBsZXRpb25SYXRlLmJlaGF2aW9yYWwsIDApIC8gdGhpcy5kZXNpZ25hdGlvbkRhdGEubGVuZ3RoKTtcbiAgLy8gcHJpdmF0ZSBmdW5jdGlvbmFsQXZnID0gTWF0aC5yb3VuZCh0aGlzLmRlc2lnbmF0aW9uRGF0YS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjICsgaXRlbS5jb21wbGV0aW9uUmF0ZS5mdW5jdGlvbmFsLCAwKSAvIHRoaXMuZGVzaWduYXRpb25EYXRhLmxlbmd0aCk7XG4gIC8vIHByaXZhdGUgZG9tYWluQXZnID0gTWF0aC5yb3VuZCh0aGlzLmRlc2lnbmF0aW9uRGF0YS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjICsgaXRlbS5jb21wbGV0aW9uUmF0ZS5kb21haW4sIDApIC8gdGhpcy5kZXNpZ25hdGlvbkRhdGEubGVuZ3RoKTtcblxuICAvLyBvdmVyYWxsS1BJcyA9IFtcbiAgLy8gICB7XG4gIC8vICAgICBuYW1lOiAnQmVoYXZpb3JhbCBDb21wZXRlbmNpZXMnLFxuICAvLyAgICAgdG90YWw6IHRoaXMuYmVoYXZpb3JhbFRvdGFsLFxuICAvLyAgICAgYXZnQ29tcGxldGlvbjogdGhpcy5iZWhhdmlvcmFsQXZnLFxuICAvLyAgICAgY29sb3I6ICcjM0I4MkY2JyxcbiAgLy8gICAgIGJnQ29sb3I6ICdiZy1ibHVlLTUwJyxcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIG5hbWU6ICdGdW5jdGlvbmFsIENvbXBldGVuY2llcycsXG4gIC8vICAgICB0b3RhbDogdGhpcy5mdW5jdGlvbmFsVG90YWwsXG4gIC8vICAgICBhdmdDb21wbGV0aW9uOiB0aGlzLmZ1bmN0aW9uYWxBdmcsXG4gIC8vICAgICBjb2xvcjogJyMxMEI5ODEnLFxuICAvLyAgICAgYmdDb2xvcjogJ2JnLWdyZWVuLTUwJyxcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIG5hbWU6ICdEb21haW4gQ29tcGV0ZW5jaWVzJyxcbiAgLy8gICAgIHRvdGFsOiB0aGlzLmRvbWFpblRvdGFsLFxuICAvLyAgICAgYXZnQ29tcGxldGlvbjogdGhpcy5kb21haW5BdmcsXG4gIC8vICAgICBjb2xvcjogJyM4QjVDRjYnLFxuICAvLyAgICAgYmdDb2xvcjogJ2JnLXB1cnBsZS01MCcsXG4gIC8vICAgfSxcbiAgLy8gICB7XG4gIC8vICAgICBuYW1lOiAnVG90YWwgQ29tcGV0ZW5jaWVzJyxcbiAgLy8gICAgIHRvdGFsOiB0aGlzLmJlaGF2aW9yYWxUb3RhbCArIHRoaXMuZnVuY3Rpb25hbFRvdGFsICsgdGhpcy5kb21haW5Ub3RhbCxcbiAgLy8gICAgIGF2Z0NvbXBsZXRpb246IE1hdGgucm91bmQoKHRoaXMuYmVoYXZpb3JhbEF2ZyArIHRoaXMuZnVuY3Rpb25hbEF2ZyArIHRoaXMuZG9tYWluQXZnKSAvIDMpLFxuICAvLyAgICAgY29sb3I6ICcjNEI1NTYzJyxcbiAgLy8gICAgIGJnQ29sb3I6ICdiZy1ncmF5LTIwMCcsXG4gIC8vICAgfVxuICAvLyBdO1xuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgfVxuXG4gIGNhbmNlbEZvcm0oKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICB9XG5cbiAgc2F2ZVJvbGVNYXBwaW5nKCkge1xuXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgY29uc29sZS5sb2coJ3RoaXMuZGF0YScsIHRoaXMuZGF0YSlcbiAgICB0aGlzLmpzb25EYXRhID0gdGhpcy5kYXRhPy5wYXlsb2FkXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5kaWFsb2dDb250ZW50KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5kaWFsb2dDb250ZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oe1xuICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgICAgfSk7XG4gICAgICB9LCA1MDApXG5cbiAgICB9XG4gIH1cblxuICBnZXRNYXBwaW5nRGF0YSgpIHtcbiAgICBjb25zb2xlLmxvZygnaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmonLCB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Q2JwUGxhbnNXaXRoU2VsZWN0ZWRDb3Vyc2VzKCkpXG4gICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgICAgbGV0IHN0YXRlX2NlbnRlcl9pZCA9IHRoaXMuc2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5LmlkZW50aWZpZXJcblxuICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzPy5sZW5ndGgpIHtcblxuICAgICAgICBsZXQgZGVwYXJ0bWVudF9pZCA9IHRoaXMuc2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzXG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRSb2xlTWFwcGluZ0J5U3RhdGVDZW50ZXJBbmREZXBhcnRtZW50KHN0YXRlX2NlbnRlcl9pZCwgZGVwYXJ0bWVudF9pZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5qc29uRGF0YSA9IHJlcztcbiAgICAgICAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iaiA9IHsgdG90YWw6IDAsIGJlaGF2aW9yYWw6IDAsIGZ1bmN0aW9uYWw6IDAsIGRvbWFpbjogMCB9O1xuICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRhdGEgPSBbXTtcblxuICAgICAgICAgICAgLy8g4pyFIEdMT0JBTCBVTklRVUUgU0VUUyAoZm9yIG92ZXJhbGwgdW5pcXVlIGNvdW50KVxuICAgICAgICAgICAgY29uc3QgZ2xvYmFsVG90YWxTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIGNvbnN0IGdsb2JhbEJlaGF2aW9yYWxTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIGNvbnN0IGdsb2JhbEZ1bmN0aW9uYWxTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIGNvbnN0IGdsb2JhbERvbWFpblNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgICAgICAgIC8vIOKchSBMT0NBTCBVTklRVUUgU0VUUyAocGVyIGRlc2lnbmF0aW9uKVxuICAgICAgICAgICAgICBjb25zdCB0b3RhbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgICBjb25zdCBiZWhhdmlvcmFsU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgICAgIGNvbnN0IGJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGUgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGUgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZSA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbCA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGUgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGUgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbCA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBkb21haW5TZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGUgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgZG9tYWluU2V0Rm9yRGVsaXZlcnlNb2RlID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGUgPSBbXTtcblxuICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbmFsU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgICAgICAgY29uc3QgZG9tYWluU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgICAgICAgbGV0IGNvbXBldGVuY2llc09iaiA9IHsgdG90YWw6IDAsIGJlaGF2aW9yYWw6IDAsIGZ1bmN0aW9uYWw6IDAsIGRvbWFpbjogMCB9O1xuXG4gICAgICAgICAgICAgIHJlc1tpXT8uY29tcGV0ZW5jaWVzPy5mb3JFYWNoKGMgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGhlbWUgPSAoYz8udGhlbWUgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YlRoZW1lID0gKGM/LnN1Yl90aGVtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IChjPy50eXBlIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhlbWUgJiYgIXN1YlRoZW1lKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBgJHt0aGVtZX0tJHtzdWJUaGVtZX1gO1xuXG4gICAgICAgICAgICAgICAgLy8g4pyFIFBFUiBERVNJR05BVElPTiBVTklRVUVcbiAgICAgICAgICAgICAgICBpZiAoIXRvdGFsU2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICB0b3RhbFNldC5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICAgIGNvbXBldGVuY2llc09iai50b3RhbCsrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnYmVoYXZpb3JhbCcgJiYgIWJlaGF2aW9yYWxTZXQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbC5wdXNoKGAke2M/LnByb2ZpY2llbmN5X2xldmVsIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZS5wdXNoKGAke2M/LmRlbGl2ZXJ5X21vZGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZS5wdXNoKGAke2M/LnByb2ZpY2llbmN5X3JhdGlvbmFsZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGUucHVzaChgJHtjPy5kZWxpdmVyeV9tb2RlX3JhdGlvbmFsZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGNvbXBldGVuY2llc09iai5iZWhhdmlvcmFsKys7XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uYWwnICYmICFmdW5jdGlvbmFsU2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWwucHVzaChgJHtjPy5wcm9maWNpZW5jeV9sZXZlbCB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGUucHVzaChgJHtjPy5kZWxpdmVyeV9tb2RlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGUucHVzaChgJHtjPy5wcm9maWNpZW5jeV9yYXRpb25hbGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlLnB1c2goYCR7Yz8uZGVsaXZlcnlfbW9kZV9yYXRpb25hbGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBjb21wZXRlbmNpZXNPYmouZnVuY3Rpb25hbCsrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZG9tYWluJyAmJiAhZG9tYWluU2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICBkb21haW5TZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgICBkb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsLnB1c2goYCR7Yz8ucHJvZmljaWVuY3lfbGV2ZWwgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBkb21haW5TZXRGb3JEZWxpdmVyeU1vZGUucHVzaChgJHtjPy5kZWxpdmVyeV9tb2RlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZS5wdXNoKGAke2M/LnByb2ZpY2llbmN5X3JhdGlvbmFsZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZS5wdXNoKGAke2M/LmRlbGl2ZXJ5X21vZGVfcmF0aW9uYWxlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgY29tcGV0ZW5jaWVzT2JqLmRvbWFpbisrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIOKchSBHTE9CQUwgVU5JUVVFIFRSQUNLSU5HXG4gICAgICAgICAgICAgICAgZ2xvYmFsVG90YWxTZXQuYWRkKGtleSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2JlaGF2aW9yYWwnKSBnbG9iYWxCZWhhdmlvcmFsU2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZnVuY3Rpb25hbCcpIGdsb2JhbEZ1bmN0aW9uYWxTZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkb21haW4nKSBnbG9iYWxEb21haW5TZXQuYWRkKGtleSk7XG5cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgZGVzaWduYXRpb246IHJlc1tpXS5kZXNpZ25hdGlvbl9uYW1lLFxuICAgICAgICAgICAgICAgIHdpbmc6IHJlc1tpXS53aW5nX2RpdmlzaW9uX3NlY3Rpb24sXG4gICAgICAgICAgICAgICAgdXBkYXRlZDogcmVzW2ldLnVwZGF0ZWRfYXQsXG4gICAgICAgICAgICAgICAgcm9sZXNSZXNwb25zaWJpbGl0aWVzOiByZXNbaV0ucm9sZV9yZXNwb25zaWJpbGl0aWVzLFxuICAgICAgICAgICAgICAgIGFjdGl2aXRpZXM6IHJlc1tpXS5hY3Rpdml0aWVzLFxuICAgICAgICAgICAgICAgIGNvbXBldGVuY2llc09iaixcbiAgICAgICAgICAgICAgICBiZWhhdmlvcmFsQ29tcGV0ZW5jaWVzOiBbLi4uYmVoYXZpb3JhbFNldF0sXG4gICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWw6IFsuLi5iZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbF0sXG4gICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZTogWy4uLmJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGVdLFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlOiBbLi4uYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGVdLFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGU6IFsuLi5iZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlXSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbDogWy4uLmZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsXSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlOiBbLi4uZnVuY3Rpb25hbFNldEZvckRlbGl2ZXJ5TW9kZV0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGU6IFsuLi5mdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZV0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZTogWy4uLmZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGVdLFxuICAgICAgICAgICAgICAgIGRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWw6IFsuLi5kb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsXSxcbiAgICAgICAgICAgICAgICBkb21haW5TZXRGb3JEZWxpdmVyeU1vZGU6IFsuLi5kb21haW5TZXRGb3JEZWxpdmVyeU1vZGVdLFxuICAgICAgICAgICAgICAgIGRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGU6IFsuLi5kb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlXSxcbiAgICAgICAgICAgICAgICBkb21haW5TZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGU6IFsuLi5kb21haW5TZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGVdLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxDb21wZXRlbmNpZXM6IFsuLi5mdW5jdGlvbmFsU2V0XSxcbiAgICAgICAgICAgICAgICBkb21haW5Db21wZXRlbmNpZXM6IFsuLi5kb21haW5TZXRdLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ291cnNlczogcmVzW2ldPy5jYnBfcGxhbnM/LmF0KC0xKT8uc2VsZWN0ZWRfY291cnNlcyB8fCBbXVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDinIUgU0VUIEdMT0JBTCBDT1VOVFMgQUZURVIgTE9PUFxuICAgICAgICAgICAgdGhpcy50b3RhbENvbXBldGVuY2llT2JqLnRvdGFsID0gZ2xvYmFsVG90YWxTZXQuc2l6ZTtcbiAgICAgICAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iai5iZWhhdmlvcmFsID0gZ2xvYmFsQmVoYXZpb3JhbFNldC5zaXplO1xuICAgICAgICAgICAgdGhpcy50b3RhbENvbXBldGVuY2llT2JqLmZ1bmN0aW9uYWwgPSBnbG9iYWxGdW5jdGlvbmFsU2V0LnNpemU7XG4gICAgICAgICAgICB0aGlzLnRvdGFsQ29tcGV0ZW5jaWVPYmouZG9tYWluID0gZ2xvYmFsRG9tYWluU2V0LnNpemU7XG5cbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvVG9wKClcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuZGVzaWduYXRpb25EYXRhJywgdGhpcy5kZXNpZ25hdGlvbkRhdGEpXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy50b3RhbENvbXBldGVuY2llT2JqJywgdGhpcy50b3RhbENvbXBldGVuY2llT2JqKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRSb2xlTWFwcGluZ0J5U3RhdGVDZW50ZXIoc3RhdGVfY2VudGVyX2lkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB0aGlzLmpzb25EYXRhID0gcmVzO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3JlcycsIHJlcylcbiAgICAgICAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iaiA9IHsgdG90YWw6IDAsIGJlaGF2aW9yYWw6IDAsIGZ1bmN0aW9uYWw6IDAsIGRvbWFpbjogMCB9O1xuICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRhdGEgPSBbXTtcblxuICAgICAgICAgICAgLy8g4pyFIEdMT0JBTCBVTklRVUUgU0VUUyAoZm9yIG92ZXJhbGwgdW5pcXVlIGNvdW50KVxuICAgICAgICAgICAgY29uc3QgZ2xvYmFsVG90YWxTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIGNvbnN0IGdsb2JhbEJlaGF2aW9yYWxTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIGNvbnN0IGdsb2JhbEZ1bmN0aW9uYWxTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIGNvbnN0IGdsb2JhbERvbWFpblNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgICAgICAgIC8vIOKchSBMT0NBTCBVTklRVUUgU0VUUyAocGVyIGRlc2lnbmF0aW9uKVxuICAgICAgICAgICAgICBjb25zdCB0b3RhbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgICBjb25zdCBiZWhhdmlvcmFsU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgICAgIGNvbnN0IGJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGUgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGUgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZSA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBkb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZSA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBkb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZSA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbCA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGUgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25hbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgICBjb25zdCBkb21haW5TZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICAgICAgICBsZXQgY29tcGV0ZW5jaWVzT2JqID0geyB0b3RhbDogMCwgYmVoYXZpb3JhbDogMCwgZnVuY3Rpb25hbDogMCwgZG9tYWluOiAwIH07XG5cbiAgICAgICAgICAgICAgcmVzW2ldPy5jb21wZXRlbmNpZXM/LmZvckVhY2goYyA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0aGVtZSA9IChjPy50aGVtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViVGhlbWUgPSAoYz8uc3ViX3RoZW1lIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gKGM/LnR5cGUgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGVtZSAmJiAhc3ViVGhlbWUpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGAke3RoZW1lfS0ke3N1YlRoZW1lfWA7XG5cbiAgICAgICAgICAgICAgICAvLyDinIUgUEVSIERFU0lHTkFUSU9OIFVOSVFVRVxuICAgICAgICAgICAgICAgIGlmICghdG90YWxTZXQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgIHRvdGFsU2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICAgICAgY29tcGV0ZW5jaWVzT2JqLnRvdGFsKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdiZWhhdmlvcmFsJyAmJiAhYmVoYXZpb3JhbFNldC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldC5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsLnB1c2goYCR7Yz8ucHJvZmljaWVuY3lfbGV2ZWwgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlLnB1c2goYCR7Yz8uZGVsaXZlcnlfbW9kZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlLnB1c2goYCR7Yz8ucHJvZmljaWVuY3lfcmF0aW9uYWxlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZS5wdXNoKGAke2M/LmRlbGl2ZXJ5X21vZGVfcmF0aW9uYWxlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgY29tcGV0ZW5jaWVzT2JqLmJlaGF2aW9yYWwrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uYWwnICYmICFmdW5jdGlvbmFsU2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWwucHVzaChgJHtjPy5wcm9maWNpZW5jeV9sZXZlbCB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlLnB1c2goYCR7Yz8ucHJvZmljaWVuY3lfcmF0aW9uYWxlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldEZvckRlbGl2ZXJ5TW9kZS5wdXNoKGAke2M/LmRlbGl2ZXJ5X21vZGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlLnB1c2goYCR7Yz8uZGVsaXZlcnlfbW9kZV9yYXRpb25hbGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBjb21wZXRlbmNpZXNPYmouZnVuY3Rpb25hbCsrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZG9tYWluJyAmJiAhZG9tYWluU2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICBkb21haW5TZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgICBkb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsLnB1c2goYCR7Yz8ucHJvZmljaWVuY3lfbGV2ZWwgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBkb21haW5TZXRGb3JEZWxpdmVyeU1vZGUucHVzaChgJHtjPy5kZWxpdmVyeV9tb2RlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZS5wdXNoKGAke2M/LnByb2ZpY2llbmN5X3JhdGlvbmFsZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZS5wdXNoKGAke2M/LmRlbGl2ZXJ5X21vZGVfcmF0aW9uYWxlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgY29tcGV0ZW5jaWVzT2JqLmRvbWFpbisrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIOKchSBHTE9CQUwgVU5JUVVFIFRSQUNLSU5HXG4gICAgICAgICAgICAgICAgZ2xvYmFsVG90YWxTZXQuYWRkKGtleSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2JlaGF2aW9yYWwnKSBnbG9iYWxCZWhhdmlvcmFsU2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZnVuY3Rpb25hbCcpIGdsb2JhbEZ1bmN0aW9uYWxTZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkb21haW4nKSBnbG9iYWxEb21haW5TZXQuYWRkKGtleSk7XG5cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgZGVzaWduYXRpb246IHJlc1tpXS5kZXNpZ25hdGlvbl9uYW1lLFxuICAgICAgICAgICAgICAgIHdpbmc6IHJlc1tpXS53aW5nX2RpdmlzaW9uX3NlY3Rpb24sXG4gICAgICAgICAgICAgICAgdXBkYXRlZDogcmVzW2ldLnVwZGF0ZWRfYXQsXG4gICAgICAgICAgICAgICAgcm9sZXNSZXNwb25zaWJpbGl0aWVzOiByZXNbaV0ucm9sZV9yZXNwb25zaWJpbGl0aWVzLFxuICAgICAgICAgICAgICAgIGFjdGl2aXRpZXM6IHJlc1tpXS5hY3Rpdml0aWVzLFxuICAgICAgICAgICAgICAgIGNvbXBldGVuY2llc09iaixcbiAgICAgICAgICAgICAgICBiZWhhdmlvcmFsQ29tcGV0ZW5jaWVzOiBbLi4uYmVoYXZpb3JhbFNldF0sXG4gICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWw6IFsuLi5iZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbF0sXG4gICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZTogWy4uLmJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGVdLFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlOiBbLi4uYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGVdLFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGU6IFsuLi5iZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlXSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbDogWy4uLmZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsXSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlOiBbLi4uZnVuY3Rpb25hbFNldEZvckRlbGl2ZXJ5TW9kZV0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGU6IFsuLi5mdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZV0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZTogWy4uLmZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGVdLFxuICAgICAgICAgICAgICAgIGRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWw6IFsuLi5kb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsXSxcbiAgICAgICAgICAgICAgICBkb21haW5TZXRGb3JEZWxpdmVyeU1vZGU6IFsuLi5kb21haW5TZXRGb3JEZWxpdmVyeU1vZGVdLFxuICAgICAgICAgICAgICAgIGRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGU6IFsuLi5kb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlXSxcbiAgICAgICAgICAgICAgICBkb21haW5TZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGU6IFsuLi5kb21haW5TZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGVdLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxDb21wZXRlbmNpZXM6IFsuLi5mdW5jdGlvbmFsU2V0XSxcbiAgICAgICAgICAgICAgICBkb21haW5Db21wZXRlbmNpZXM6IFsuLi5kb21haW5TZXRdLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ291cnNlczogcmVzW2ldPy5jYnBfcGxhbnM/LmF0KC0xKT8uc2VsZWN0ZWRfY291cnNlcyB8fCBbXVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5kZXNpZ25hdGlvbkRhdGEnLCB0aGlzLmRlc2lnbmF0aW9uRGF0YSlcblxuICAgICAgICAgICAgLy8g4pyFIFNFVCBHTE9CQUwgQ09VTlRTIEFGVEVSIExPT1BcbiAgICAgICAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iai50b3RhbCA9IGdsb2JhbFRvdGFsU2V0LnNpemU7XG4gICAgICAgICAgICB0aGlzLnRvdGFsQ29tcGV0ZW5jaWVPYmouYmVoYXZpb3JhbCA9IGdsb2JhbEJlaGF2aW9yYWxTZXQuc2l6ZTtcbiAgICAgICAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iai5mdW5jdGlvbmFsID0gZ2xvYmFsRnVuY3Rpb25hbFNldC5zaXplO1xuICAgICAgICAgICAgdGhpcy50b3RhbENvbXBldGVuY2llT2JqLmRvbWFpbiA9IGdsb2JhbERvbWFpblNldC5zaXplO1xuXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1RvcCgpXG4gICAgICAgICAgICB9LCAxMDAwKTtcblxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8uZGV0YWlsLCAnWCcsIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuXG5cbiAgICB9XG4gICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5LnNiT3JnVHlwZSA9PT0gJ3N0YXRlJykge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgICAgY29uc29sZS5sb2coJ3RoaXMuc2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqJywgdGhpcy5zaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmopXG4gICAgICBsZXQgc3RhdGVfY2VudGVyX2lkID0gdGhpcy5zaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllclxuICAgICAgbGV0IGRlcGFydG1lbnRfaWQgPSB0aGlzLnNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50c1xuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJvbGVNYXBwaW5nQnlTdGF0ZUNlbnRlckFuZERlcGFydG1lbnQoc3RhdGVfY2VudGVyX2lkLCBkZXBhcnRtZW50X2lkKS5zdWJzY3JpYmUoKHJlcyk9PntcbiAgICAgIC8vICAgY29uc29sZS5sb2coJ3JlcycsIHJlcylcbiAgICAgIC8vICAgbGV0IGJlaGF2aW9yYWxDb21wZXRlbmNpZXMgPVtdXG4gICAgICAvLyAgIGxldCBmdW5jdGlvbmFsQ29tcGV0ZW5jaWVzID1bXVxuICAgICAgLy8gICBsZXQgZG9tYWluQ29tcGV0ZW5jaWVzID1bXVxuICAgICAgLy8gICBmb3IobGV0IGk9MDsgaTxyZXMubGVuZ3RoO2krKykge1xuICAgICAgLy8gICAgYmVoYXZpb3JhbENvbXBldGVuY2llcyA9IFtdXG4gICAgICAvLyAgICBmdW5jdGlvbmFsQ29tcGV0ZW5jaWVzID1bXVxuICAgICAgLy8gICAgZG9tYWluQ29tcGV0ZW5jaWVzID1bXVxuICAgICAgLy8gICAgbGV0IGNvbXBldGVuY2llc09iaiA9IHt0b3RhbDowLCBiZWhhdmlvcmFsOjAsIGZ1bmN0aW9uYWw6MCwgZG9tYWluOjB9XG4gICAgICAvLyAgIHJlc1tpXS5jb21wZXRlbmNpZXMuZm9yRWFjaChjID0+IHtcbiAgICAgIC8vICAgIGNvbXBldGVuY2llc09iai50b3RhbCsrO1xuICAgICAgLy8gICAgdGhpcy50b3RhbENvbXBldGVuY2llT2JqLnRvdGFsKytcbiAgICAgIC8vICAgICBpZiAoYy50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICdiZWhhdmlvcmFsJykgeyBcblxuICAgICAgLy8gICAgICBiZWhhdmlvcmFsQ29tcGV0ZW5jaWVzLnB1c2goYCR7Yy50aGVtZX0gLSAke2Muc3ViX3RoZW1lfWApXG4gICAgICAvLyAgICAgIGNvbXBldGVuY2llc09iai5iZWhhdmlvcmFsKys7XG4gICAgICAvLyAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iai5iZWhhdmlvcmFsKytcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgICAgaWYgKGMudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnZnVuY3Rpb25hbCcpIHtcbiAgICAgIC8vICAgICAgZnVuY3Rpb25hbENvbXBldGVuY2llcy5wdXNoKGAke2MudGhlbWV9IC0gJHtjLnN1Yl90aGVtZX1gKVxuICAgICAgLy8gICAgICBjb21wZXRlbmNpZXNPYmouZnVuY3Rpb25hbCsrO1xuICAgICAgLy8gICAgICB0aGlzLnRvdGFsQ29tcGV0ZW5jaWVPYmouZnVuY3Rpb25hbCsrXG4gICAgICAvLyAgICAgfVxuICAgICAgLy8gICAgIGlmIChjLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2RvbWFpbicpIHsgXG4gICAgICAvLyAgICAgIGRvbWFpbkNvbXBldGVuY2llcy5wdXNoKGAke2MudGhlbWV9IC0gJHtjLnN1Yl90aGVtZX1gKVxuICAgICAgLy8gICAgICBjb21wZXRlbmNpZXNPYmouZG9tYWluKys7XG4gICAgICAvLyAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iai5kb21haW4rK1xuXG4gICAgICAvLyAgICAgfVxuICAgICAgLy8gICB9KTtcbiAgICAgIC8vICAgIGxldCBvYmo6YW55ID0gIHtcbiAgICAgIC8vICAgICAgZGVzaWduYXRpb246IHJlc1tpXS5kZXNpZ25hdGlvbl9uYW1lLFxuICAgICAgLy8gICAgICB3aW5nOiByZXNbaV0ud2luZ19kaXZpc2lvbl9zZWN0aW9uLFxuICAgICAgLy8gICAgICB1cGRhdGVkOiByZXNbaV0udXBkYXRlZF9hdCxcbiAgICAgIC8vICAgICAgcm9sZXNSZXNwb25zaWJpbGl0aWVzOiByZXNbaV0ucm9sZV9yZXNwb25zaWJpbGl0aWVzLFxuICAgICAgLy8gICAgICBhY3Rpdml0aWVzOnJlc1tpXS5hY3Rpdml0aWVzLFxuICAgICAgLy8gICAgICBjb21wZXRlbmNpZXNPYmo6IGNvbXBldGVuY2llc09iaixcbiAgICAgIC8vICAgICAgYmVoYXZpb3JhbENvbXBldGVuY2llczogYmVoYXZpb3JhbENvbXBldGVuY2llcyxcbiAgICAgIC8vICAgICAgZnVuY3Rpb25hbENvbXBldGVuY2llczogZnVuY3Rpb25hbENvbXBldGVuY2llcyxcbiAgICAgIC8vICAgICAgZG9tYWluQ29tcGV0ZW5jaWVzOiBkb21haW5Db21wZXRlbmNpZXNcbiAgICAgIC8vICAgICAgLy8gYmVoYXZpb3JhbENvbXBldGVuY2llczogW1xuICAgICAgLy8gICAgICAvLyAgIFwiU3RyYXRlZ2ljIExlYWRlcnNoaXBcIiwgXCJFeGVjdXRpdmUgUHJlc2VuY2VcIiwgXCJJbmZsdWVuY2luZyBhbmQgTmVnb3RpYXRpb25cIixcbiAgICAgIC8vICAgICAgLy8gICBcIlJlbGF0aW9uc2hpcCBNYW5hZ2VtZW50XCIsIFwiVmVyYmFsICYgTm9uLVZlcmJhbCBGbHVlbmN5XCIsIFwiUGxhbm5pbmcgJiBQcmlvcml0aXphdGlvblwiLFxuICAgICAgLy8gICAgICAvLyAgIFwiQWNjb3VudGFiaWxpdHlcIiwgXCJDb25mbGljdCBNYW5hZ2VtZW50XCJcbiAgICAgIC8vICAgICAgLy8gXSxcbiAgICAgIC8vICAgICAgLy8gZnVuY3Rpb25hbENvbXBldGVuY2llczogW1xuICAgICAgLy8gICAgICAvLyAgIFwiUnVsZXMgb2YgYnVzaW5lc3MgKEFvQi9Ub0IpXCIsIFwiQ2FiaW5ldCBub3RlIHdyaXRpbmdcIiwgXCJTdWJtaXNzaW9uIG9mIGJyaWVmcywgc3VwcGx5IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgICAvLyAgICAgIC8vICAgXCJQb2xpY3kgZGVzaWduLyBhbWVuZG1lbnRcIiwgXCJQb2xpY3kgaW1wbGVtZW50YXRpb25cIiwgXCJQb2xpY3kgbW9uaXRvcmluZyAmIGltcGFjdCBhc3Nlc3NtZW50XCIsXG4gICAgICAvLyAgICAgIC8vICAgXCJQcm9qZWN0IFBsYW5uaW5nXCIsIFwiUHJvamVjdCBFdmFsdWF0aW9uICYgTW9uaXRvcmluZ1wiLCBcIkNyZWF0aW9uIG9mIE0mRSBGcmFtZXdvcmtcIixcbiAgICAgIC8vICAgICAgLy8gICBcIkNpdGl6ZW4gUGFydG5lcmluZyAmIENvbGxhYm9yYXRpb25cIiwgXCJQdWJsaWMgR3JpZXZhbmNlIEhhbmRsaW5nXCJcbiAgICAgIC8vICAgICAgLy8gXSxcbiAgICAgIC8vICAgICAgLy8gZG9tYWluQ29tcGV0ZW5jaWVzOiBbXG4gICAgICAvLyAgICAgIC8vICAgXCJTdHJhdGVnaWMgUG9saWN5IEZvcm11bGF0aW9uXCIsIFwiSW50ZXItbWluaXN0ZXJpYWwgJiBTdGF0ZSBHb3Zlcm5tZW50IENvb3JkaW5hdGlvblwiLFxuICAgICAgLy8gICAgICAvLyAgIFwiU2VuaW9yIExlYWRlcnNoaXAgR292ZXJuYW5jZSAmIE92ZXJzaWdodFwiLCBcIkxlZ2lzbGF0aXZlICYgUGFybGlhbWVudGFyeSBBZmZhaXJzIE1hbmFnZW1lbnRcIixcbiAgICAgIC8vICAgICAgLy8gICBcIk5hdGlvbmFsIFByb2dyYW1tZSBTdHJhdGVnaWMgRGlyZWN0aW9uXCJcbiAgICAgIC8vICAgICAgLy8gXSxcbiAgICAgIC8vICAgICAgLy8gY29tcGxldGlvblJhdGU6IHsgYmVoYXZpb3JhbDogODUsIGZ1bmN0aW9uYWw6IDc4LCBkb21haW46IDkyIH1cbiAgICAgIC8vICAgIH1cblxuXG4gICAgICAvLyAgIHRoaXMuZGVzaWduYXRpb25EYXRhLnB1c2gob2JqKVxuICAgICAgLy8gICB9XG4gICAgICAvLyAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgICB0aGlzLnNjcm9sbFRvVG9wKClcbiAgICAgIC8vICAgfSwgMTAwMCk7XG4gICAgICAvLyAgIGNvbnNvbGUubG9nKCd0aGlzLmRlc2lnbmF0aW9uRGF0YScsIHRoaXMuZGVzaWduYXRpb25EYXRhKVxuICAgICAgLy8gICBjb25zb2xlLmxvZygndGhpcy50b3RhbENvbXBldGVuY2llT2JqJywgdGhpcy50b3RhbENvbXBldGVuY2llT2JqIClcblxuICAgICAgLy8gIH0pXG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Um9sZU1hcHBpbmdCeVN0YXRlQ2VudGVyQW5kRGVwYXJ0bWVudChzdGF0ZV9jZW50ZXJfaWQsIGRlcGFydG1lbnRfaWQpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuanNvbkRhdGEgPSByZXM7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3JlcycsIHJlcylcbiAgICAgICAgICB0aGlzLnRvdGFsQ29tcGV0ZW5jaWVPYmogPSB7IHRvdGFsOiAwLCBiZWhhdmlvcmFsOiAwLCBmdW5jdGlvbmFsOiAwLCBkb21haW46IDAgfTtcbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGF0YSA9IFtdO1xuXG4gICAgICAgICAgLy8g4pyFIEdMT0JBTCBVTklRVUUgU0VUUyAoZm9yIG92ZXJhbGwgdW5pcXVlIGNvdW50KVxuICAgICAgICAgIGNvbnN0IGdsb2JhbFRvdGFsU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgY29uc3QgZ2xvYmFsQmVoYXZpb3JhbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgIGNvbnN0IGdsb2JhbEZ1bmN0aW9uYWxTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICBjb25zdCBnbG9iYWxEb21haW5TZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgICAgIC8vIOKchSBMT0NBTCBVTklRVUUgU0VUUyAocGVyIGRlc2lnbmF0aW9uKVxuICAgICAgICAgICAgY29uc3QgdG90YWxTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIGNvbnN0IGJlaGF2aW9yYWxTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIGNvbnN0IGJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsID0gW107XG4gICAgICAgICAgICBjb25zdCBiZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWwgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlID0gW107XG4gICAgICAgICAgICBjb25zdCBmdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlID0gW107XG4gICAgICAgICAgICBjb25zdCBmdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlID0gW107XG4gICAgICAgICAgICBjb25zdCBkb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsID0gW107XG4gICAgICAgICAgICBjb25zdCBkb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlID0gW107XG4gICAgICAgICAgICBjb25zdCBkb21haW5TZXRGb3JEZWxpdmVyeU1vZGUgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZSA9IFtdO1xuXG4gICAgICAgICAgICBjb25zdCBmdW5jdGlvbmFsU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgICBjb25zdCBkb21haW5TZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICAgICAgbGV0IGNvbXBldGVuY2llc09iaiA9IHsgdG90YWw6IDAsIGJlaGF2aW9yYWw6IDAsIGZ1bmN0aW9uYWw6IDAsIGRvbWFpbjogMCB9O1xuXG4gICAgICAgICAgICByZXNbaV0/LmNvbXBldGVuY2llcz8uZm9yRWFjaChjID0+IHtcblxuICAgICAgICAgICAgICBjb25zdCB0aGVtZSA9IChjPy50aGVtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIGNvbnN0IHN1YlRoZW1lID0gKGM/LnN1Yl90aGVtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSAoYz8udHlwZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICAgaWYgKCF0aGVtZSAmJiAhc3ViVGhlbWUpIHJldHVybjtcblxuICAgICAgICAgICAgICBjb25zdCBrZXkgPSBgJHt0aGVtZX0tJHtzdWJUaGVtZX1gO1xuXG4gICAgICAgICAgICAgIC8vIOKchSBQRVIgREVTSUdOQVRJT04gVU5JUVVFXG4gICAgICAgICAgICAgIGlmICghdG90YWxTZXQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICB0b3RhbFNldC5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICBjb21wZXRlbmNpZXNPYmoudG90YWwrKztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0eXBlID09PSAnYmVoYXZpb3JhbCcgJiYgIWJlaGF2aW9yYWxTZXQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsLnB1c2goYCR7Yz8ucHJvZmljaWVuY3lfbGV2ZWwgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZS5wdXNoKGAke2M/LmRlbGl2ZXJ5X21vZGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGUucHVzaChgJHtjPy5wcm9maWNpZW5jeV9sZXZlbF9yYXRpb25hbGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZS5wdXNoKGAke2M/LmRlbGl2ZXJ5X21vZGVfcmF0aW9uYWxlIHx8ICcnfWApO1xuXG4gICAgICAgICAgICAgICAgY29tcGV0ZW5jaWVzT2JqLmJlaGF2aW9yYWwrKztcbiAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdmdW5jdGlvbmFsJyAmJiAhZnVuY3Rpb25hbFNldC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWwucHVzaChgJHtjPy5wcm9maWNpZW5jeV9sZXZlbCB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlLnB1c2goYCR7Yz8uZGVsaXZlcnlfbW9kZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZS5wdXNoKGAke2M/LnByb2ZpY2llbmN5X2xldmVsX3JhdGlvbmFsZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlLnB1c2goYCR7Yz8uZGVsaXZlcnlfbW9kZV9yYXRpb25hbGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgY29tcGV0ZW5jaWVzT2JqLmZ1bmN0aW9uYWwrKztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZG9tYWluJyAmJiAhZG9tYWluU2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZG9tYWluU2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICAgIGRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWwucHVzaChgJHtjPy5wcm9maWNpZW5jeV9sZXZlbCB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICBkb21haW5TZXRGb3JEZWxpdmVyeU1vZGUucHVzaChgJHtjPy5kZWxpdmVyeV9tb2RlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgIGRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGUucHVzaChgJHtjPy5wcm9maWNpZW5jeV9sZXZlbF9yYXRpb25hbGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgZG9tYWluU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlLnB1c2goYCR7Yz8uZGVsaXZlcnlfbW9kZV9yYXRpb25hbGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgY29tcGV0ZW5jaWVzT2JqLmRvbWFpbisrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8g4pyFIEdMT0JBTCBVTklRVUUgVFJBQ0tJTkdcbiAgICAgICAgICAgICAgZ2xvYmFsVG90YWxTZXQuYWRkKGtleSk7XG5cbiAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdiZWhhdmlvcmFsJykgZ2xvYmFsQmVoYXZpb3JhbFNldC5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdmdW5jdGlvbmFsJykgZ2xvYmFsRnVuY3Rpb25hbFNldC5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkb21haW4nKSBnbG9iYWxEb21haW5TZXQuYWRkKGtleSk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgZGVzaWduYXRpb246IHJlc1tpXS5kZXNpZ25hdGlvbl9uYW1lLFxuICAgICAgICAgICAgICB3aW5nOiByZXNbaV0ud2luZ19kaXZpc2lvbl9zZWN0aW9uLFxuICAgICAgICAgICAgICB1cGRhdGVkOiByZXNbaV0udXBkYXRlZF9hdCxcbiAgICAgICAgICAgICAgcm9sZXNSZXNwb25zaWJpbGl0aWVzOiByZXNbaV0ucm9sZV9yZXNwb25zaWJpbGl0aWVzLFxuICAgICAgICAgICAgICBhY3Rpdml0aWVzOiByZXNbaV0uYWN0aXZpdGllcyxcbiAgICAgICAgICAgICAgY29tcGV0ZW5jaWVzT2JqLFxuICAgICAgICAgICAgICBiZWhhdmlvcmFsQ29tcGV0ZW5jaWVzOiBbLi4uYmVoYXZpb3JhbFNldF0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uYWxDb21wZXRlbmNpZXM6IFsuLi5mdW5jdGlvbmFsU2V0XSxcbiAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWw6IFsuLi5iZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbF0sXG4gICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGU6IFsuLi5iZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlXSxcbiAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGU6IFsuLi5iZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZV0sXG4gICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGU6IFsuLi5iZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlXSxcbiAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGU6IFsuLi5mdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZV0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGU6IFsuLi5mdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlXSxcbiAgICAgICAgICAgICAgZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZTogWy4uLmRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGVdLFxuICAgICAgICAgICAgICBkb21haW5TZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGU6IFsuLi5kb21haW5TZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGVdLFxuICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbDogWy4uLmZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsXSxcbiAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldEZvckRlbGl2ZXJ5TW9kZTogWy4uLmZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVdLFxuICAgICAgICAgICAgICBkb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsOiBbLi4uZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbF0sXG4gICAgICAgICAgICAgIGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZTogWy4uLmRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZV0sXG4gICAgICAgICAgICAgIGRvbWFpbkNvbXBldGVuY2llczogWy4uLmRvbWFpblNldF0sXG4gICAgICAgICAgICAgIHNlbGVjdGVkQ291cnNlczogcmVzW2ldPy5jYnBfcGxhbnM/LmF0KC0xKT8uc2VsZWN0ZWRfY291cnNlcyB8fCBbXVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICB9IFxuXG4gICAgICAgICAgLy8g4pyFIFNFVCBHTE9CQUwgQ09VTlRTIEFGVEVSIExPT1BcbiAgICAgICAgICB0aGlzLnRvdGFsQ29tcGV0ZW5jaWVPYmoudG90YWwgPSBnbG9iYWxUb3RhbFNldC5zaXplO1xuICAgICAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iai5iZWhhdmlvcmFsID0gZ2xvYmFsQmVoYXZpb3JhbFNldC5zaXplO1xuICAgICAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iai5mdW5jdGlvbmFsID0gZ2xvYmFsRnVuY3Rpb25hbFNldC5zaXplO1xuICAgICAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iai5kb21haW4gPSBnbG9iYWxEb21haW5TZXQuc2l6ZTtcblxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1RvcCgpXG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuZGVzaWduYXRpb25EYXRhJywgdGhpcy5kZXNpZ25hdGlvbkRhdGEpXG4gICAgICAgICAgY29uc29sZS5sb2coJ3RoaXMudG90YWxDb21wZXRlbmNpZU9iaicsIHRoaXMudG90YWxDb21wZXRlbmNpZU9iailcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8uZGV0YWlsLCAnWCcsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuXG5cbiAgfVxuICBnZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZTogc3RyaW5nLCBjb3Vyc2U6IGFueSk6IGFueVtdIHtcbiAgICBpZiAoIWNvdXJzZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGxldCBjb21wZXRlbmNpZXM6IGFueVtdID0gW107XG5cbiAgICAvLyBBSSBSZWNvbW1lbmRlZCAvIFB1YmxpYyAvIFVzZXIgQWRkZWRcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzKSkge1xuICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llcztcbiAgICB9XG4gICAgLy8gTWFudWFsbHkgU3VnZ2VzdGVkIC0gaUdPVCAodjYpXG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2KSkge1xuICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llc192NjtcbiAgICB9XG5cbiAgICBpZiAoIWNvbXBldGVuY2llcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICByZXR1cm4gY29tcGV0ZW5jaWVzLmZpbHRlcihjID0+IHtcbiAgICAgIGlmICghYz8uY29tcGV0ZW5jeUFyZWFOYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJlYSA9IGMuY29tcGV0ZW5jeUFyZWFOYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgICAvLyBoYW5kbGUgYmVoYXZpb3VyYWwgLyBiZWhhdmlvcmFsXG4gICAgICBpZiAobm9ybWFsaXplZFR5cGUgPT09ICdiZWhhdmlvdXJhbCcgfHwgbm9ybWFsaXplZFR5cGUgPT09ICdiZWhhdmlvcmFsJykge1xuICAgICAgICByZXR1cm4gYXJlYSA9PT0gJ2JlaGF2aW91cmFsJyB8fCBhcmVhID09PSAnYmVoYXZpb3JhbCc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcmVhID09PSBub3JtYWxpemVkVHlwZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldERpc3BsYXllZENvbXBldGVuY2llcyh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBhbnlbXSB7XG4gICAgY29uc3QgY29tcGV0ZW5jaWVzID0gdGhpcy5nZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZSwgaW5kZXgpO1xuICAgIGNvbnN0IGtleSA9IGAke2luZGV4fS0ke3R5cGV9YDtcblxuICAgIGlmICh0aGlzLmV4cGFuZGVkQ29tcGV0ZW5jaWVzW2tleV0pIHtcbiAgICAgIHJldHVybiBjb21wZXRlbmNpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBldGVuY2llcy5zbGljZSgwLCAyKTtcbiAgfVxuXG4gIHRvZ2dsZUNvbXBldGVuY2llcyh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBgJHtpbmRleH0tJHt0eXBlfWA7XG4gICAgdGhpcy5leHBhbmRlZENvbXBldGVuY2llc1trZXldID0gIXRoaXMuZXhwYW5kZWRDb21wZXRlbmNpZXNba2V5XTtcbiAgfVxuXG4gIGlzRXhwYW5kZWQodHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gYCR7aW5kZXh9LSR7dHlwZX1gO1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQ29tcGV0ZW5jaWVzW2tleV0gfHwgZmFsc2U7XG4gIH1cblxuICBoYXNNb3JlVGhhblR3byh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZSwgaW5kZXgpLmxlbmd0aCA+IDI7XG4gIH1cbiAgZ2V0UmVtYWluaW5nQ291bnQodHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy5nZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZSwgaW5kZXgpLmxlbmd0aDtcbiAgICByZXR1cm4gdG90YWxDb3VudCAtIDI7XG4gIH1cbiAgdXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpIHtcbiAgICAvLyBjb25zdCBjb21wcyA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWU7XG4gICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudCA9IHsgdG90YWw6IDAsIHB1YmxpY19jb3Vyc2VzOiAwLCBpZ290OiAwIH07XG4gICAgdGhpcy5maWx0ZXJkQ291cnNlcy5mb3JFYWNoKGMgPT4ge1xuICAgICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudC50b3RhbCsrO1xuICAgICAgaWYgKGMuaXNfcHVibGljKSB0aGlzLmNvbXBldGVuY2llc0NvdW50LnB1YmxpY19jb3Vyc2VzKys7XG4gICAgICBpZiAoIWMuaXNfcHVibGljKSB0aGlzLmNvbXBldGVuY2llc0NvdW50Lmlnb3QrKztcbiAgICB9KTtcbiAgfVxuXG4gIGNvbmZpcm1EZWxldGVDb3Vyc2UoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3Qgcm9sZU1hcHBpbmdJZCA9IHRoaXMucmVjb21tZW5kZWRfY291cnNlX2lkO1xuICAgIGNvbnN0IGNvdXJzZUlkZW50aWZpZXIgPVxuICAgICAgaXRlbT8uY291cnNlX2lkZW50aWZpZXIgfHwgaXRlbT8uaWQgfHwgaXRlbT8uaWRlbnRpZmllcjtcblxuICAgIGlmICghcm9sZU1hcHBpbmdJZCB8fCAhY291cnNlSWRlbnRpZmllcikge1xuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdVbmFibGUgdG8gZGVsZXRlIGNvdXJzZScsICdYJywge1xuICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVjb21tZW5kZWRDb3Vyc2Uocm9sZU1hcHBpbmdJZCwgY291cnNlSWRlbnRpZmllcilcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgLy8gUmVtb3ZlIGZyb20gVUlcbiAgICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgICAvLyBVcGRhdGUgY291bnRzXG4gICAgICAgICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKCk7XG5cbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ291cnNlIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5JywgJ1gnLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcbiAgICAgICAgICAgIGVycm9yPy5lcnJvcj8uZGV0YWlsIHx8ICdGYWlsZWQgdG8gZGVsZXRlIGNvdXJzZScsXG4gICAgICAgICAgICAnWCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZUNhcmQoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc29sZS5sb2coXCJpdGVtLCBpbmRleFwiLCBpdGVtLCBpbmRleClcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERlbGV0ZVJvbGVNYXBwaW5nUG9wdXBDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNjAwcHgnLFxuICAgICAgZGF0YToge1xuICAgICAgICBwbGFuSWQ6IHRoaXMucGxhbkRhdGE/LmlkLCAgIC8vIHJvbGUgbWFwcGluZyBpZFxuICAgICAgICBjb3Vyc2U6IGl0ZW0sICAgICAgICAgICAgICAgIC8vIGNvdXJzZSBvYmplY3RcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBmcm9tOiAndmlld0NvdXJzZScgICAgICAgICAgICAgICAgIC8vIGluZGV4IGZvciBVSSByZW1vdmFsXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLFxuICAgICAgbWluSGVpZ2h0OiAnMzAwcHgnLFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICB0aGlzLmNvbmZpcm1EZWxldGVDb3Vyc2UoaXRlbSwgaW5kZXgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHNjcm9sbFRvVG9wKCk6IHZvaWQge1xuXG4gICAgLy8gaWYgKHRoaXMucGRmQ29udGVudCAmJiB0aGlzLnBkZkNvbnRlbnQubmF0aXZlRWxlbWVudCAmJiB0aGlzLnBkZkNvbnRlbnQubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vICAgdGhpcy5wZGZDb250ZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgLy8gfVxuICAgIC8vIGNvbnN0IGRpYWxvZ0NvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21hdC1kaWFsb2ctY29udGFpbmVyJyk7XG4gICAgLy8gaWYgKGRpYWxvZ0NvbnRhaW5lcikge1xuICAgIC8vICAgZGlhbG9nQ29udGFpbmVyLnNjcm9sbFRvcCA9IDA7XG4gICAgLy8gfVxuICB9XG5cbiAgZG93bmxvYWRQREYoKSB7XG4gICAgdGhpcy5wZGZUcmlnZ2VyID0gdHJ1ZVxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgLy8gICBjb25zdCBlbGVtZW50ID0gdGhpcy5wZGZDb250ZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAvLyAvLyBXYWl0IGZvciBpbWFnZXMgdG8gbG9hZFxuICAgIC8vIGNvbnN0IGltYWdlcyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW1nJyk7XG4gICAgLy8gY29uc3QgcHJvbWlzZXMgPSBBcnJheS5mcm9tKGltYWdlcykubWFwKChpbWc6IEhUTUxJbWFnZUVsZW1lbnQpID0+IHtcbiAgICAvLyAgIGlmIChpbWcuY29tcGxldGUpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAvLyAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGltZy5vbmxvYWQgPSByZXNvbHZlKTtcbiAgICAvLyB9KTtcblxuICAgIC8vIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAvLyAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgLy8gICAgIG1hcmdpbjogMC41LFxuICAgIC8vICAgICBmaWxlbmFtZTogJ0ZpbmFsIENCUCBQbGFuLnBkZicsXG4gICAgLy8gICAgIGltYWdlOiB7IHR5cGU6ICdqcGVnJywgcXVhbGl0eTogMC45OCB9LFxuICAgIC8vICAgICBodG1sMmNhbnZhczoge1xuICAgIC8vICAgICAgIHNjYWxlOiAyLFxuICAgIC8vICAgICAgIHVzZUNPUlM6IHRydWUsXG4gICAgLy8gICAgICAgc2Nyb2xsWTogMCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAganNQREY6IHtcbiAgICAvLyAgICAgICB1bml0OiAnaW4nLFxuICAgIC8vICAgICAgIGZvcm1hdDogJ2E0JyxcbiAgICAvLyAgICAgICBvcmllbnRhdGlvbjogJ3BvcnRyYWl0J1xuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBwYWdlYnJlYWs6IHtcbiAgICAvLyAgICAgICBtb2RlOiBbJ2NzcycsICdsZWdhY3knLCAnYXZvaWQtYWxsJ11cbiAgICAvLyAgICAgfVxuICAgIC8vICAgfTtcblxuICAgIC8vICAgaHRtbDJwZGYoKS5mcm9tKGVsZW1lbnQpLnNldChvcHRpb25zKS5zYXZlKCk7XG4gICAgLy8gfSk7XG4gICAgLy9jb25zdCBlbGVtZW50ID0gdGhpcy5wZGZDb250ZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBkZkNvbnRlbnQubmF0aXZlRWxlbWVudDtcbiAgICBodG1sMmNhbnZhcyhlbGVtZW50LCB7XG4gICAgICBzY2FsZTogMS4yNSxcbiAgICAgIHVzZUNPUlM6IHRydWUsXG4gICAgICBzY3JvbGxZOiAwLFxuICAgICAgbG9nZ2luZzogdHJ1ZSxcbiAgICB9KS50aGVuKChjYW52YXMpID0+IHtcbiAgICAgIGNvbnN0IHBkZiA9IG5ldyBqc1BERigncCcsICdtbScsICdhNCcpO1xuICAgICAgY29uc3QgcGRmV2lkdGggPSBwZGYuaW50ZXJuYWwucGFnZVNpemUuZ2V0V2lkdGgoKTtcbiAgICAgIGNvbnN0IHBkZkhlaWdodCA9IHBkZi5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRIZWlnaHQoKTtcblxuICAgICAgLy8gTWFyZ2luc1xuICAgICAgY29uc3QgbWFyZ2luTGVmdCA9IDU7XG4gICAgICBjb25zdCBtYXJnaW5Ub3AgPSAxNTtcbiAgICAgIGNvbnN0IG1hcmdpblJpZ2h0ID0gNTtcbiAgICAgIGNvbnN0IG1hcmdpbkJvdHRvbSA9IDE1O1xuXG4gICAgICBjb25zdCB1c2FibGVXaWR0aCA9IHBkZldpZHRoIC0gbWFyZ2luTGVmdCAtIG1hcmdpblJpZ2h0O1xuICAgICAgY29uc3QgdXNhYmxlSGVpZ2h0ID0gcGRmSGVpZ2h0IC0gbWFyZ2luVG9wIC0gbWFyZ2luQm90dG9tO1xuXG4gICAgICBjb25zdCBjYW52YXNXaWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICAgIGNvbnN0IHJhdGlvID0gY2FudmFzV2lkdGggLyB1c2FibGVXaWR0aDtcbiAgICAgIGNvbnN0IHBhZ2VIZWlnaHRQeCA9IHVzYWJsZUhlaWdodCAqIHJhdGlvO1xuXG4gICAgICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKGNhbnZhc0hlaWdodCAvIHBhZ2VIZWlnaHRQeCk7XG5cbiAgICAgIGZvciAobGV0IHBhZ2UgPSAwOyBwYWdlIDwgdG90YWxQYWdlczsgcGFnZSsrKSB7XG4gICAgICAgIGNvbnN0IGNhbnZhc1BhZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzUGFnZS53aWR0aCA9IGNhbnZhc1dpZHRoO1xuICAgICAgICBjYW52YXNQYWdlLmhlaWdodCA9IE1hdGgubWluKHBhZ2VIZWlnaHRQeCwgY2FudmFzSGVpZ2h0IC0gcGFnZSAqIHBhZ2VIZWlnaHRQeCk7XG5cbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzUGFnZS5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjZmZmZmZmJztcbiAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgY2FudmFzUGFnZS53aWR0aCwgY2FudmFzUGFnZS5oZWlnaHQpO1xuXG4gICAgICAgICAgY3R4LmRyYXdJbWFnZShcbiAgICAgICAgICAgIGNhbnZhcyxcbiAgICAgICAgICAgIDAsIHBhZ2UgKiBwYWdlSGVpZ2h0UHgsXG4gICAgICAgICAgICBjYW52YXNXaWR0aCwgY2FudmFzUGFnZS5oZWlnaHQsXG4gICAgICAgICAgICAwLCAwLFxuICAgICAgICAgICAgY2FudmFzV2lkdGgsIGNhbnZhc1BhZ2UuaGVpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGltZ0RhdGEgPSBjYW52YXNQYWdlLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJywgMSk7XG4gICAgICAgIGlmIChwYWdlID4gMCkgcGRmLmFkZFBhZ2UoKTtcbiAgICAgICAgY29uc3QgaW1nSGVpZ2h0TU0gPSBjYW52YXNQYWdlLmhlaWdodCAvIHJhdGlvO1xuICAgICAgICBwZGYuYWRkSW1hZ2UoaW1nRGF0YSwgJ1BORycsIG1hcmdpbkxlZnQsIG1hcmdpblRvcCwgdXNhYmxlV2lkdGgsIGltZ0hlaWdodE1NKTtcbiAgICAgIH1cblxuICAgICAgcGRmLnNhdmUoJ0ZpbmFsX0NCUC5wZGYnKTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignUERGIGdlbmVyYXRpb24gZXJyb3I6JywgZXJyb3IpO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfSk7XG5cblxuXG5cblxuXG5cbiAgfVxuXG4gIGRvd25sb2FkUERGTmV3KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wZGZDb250ZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjb25zdCBvcHQgPSB7XG4gICAgICBtYXJnaW46IFsxMCwgNSwgNSwgMTBdLCAvLyB0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQgaW4gbW1cbiAgICAgIGZpbGVuYW1lOiAnQ0JQX1BsYW4ucGRmJyxcbiAgICAgIGltYWdlOiB7IHR5cGU6ICdqcGVnJywgcXVhbGl0eTogMC44NSB9LFxuICAgICAgaHRtbDJjYW52YXM6IHsgc2NhbGU6IDEuNSwgdXNlQ09SUzogdHJ1ZSwgbG9nZ2luZzogZmFsc2UgfSxcbiAgICAgIGpzUERGOiB7IHVuaXQ6ICdtbScsIGZvcm1hdDogJ2E0Jywgb3JpZW50YXRpb246ICdsYW5kc2NhcGUnIH0sXG4gICAgICBwYWdlYnJlYWs6IHsgbW9kZTogWydhdm9pZC1hbGwnLCAnY3NzJywgJ2xlZ2FjeSddIH0gLy8gYXZvaWQgY3V0dGluZyB0ZXh0XG4gICAgfTtcblxuICAgIGh0bWwycGRmKClcbiAgICAgIC5zZXQob3B0KVxuICAgICAgLmZyb20oZWxlbWVudClcbiAgICAgIC5zYXZlKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gUERGIGRvd25sb2FkIGZpbmlzaGVkXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIC8vIEhhbmRsZSBlcnJvcnMgYW5kIHN0b3AgbG9hZGluZ1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB9LCAyMDAwKTtcblxuXG5cbiAgfVxuXG5cblxuICBnZW5lcmF0ZUV4Y2VsKGpzb25BcnJheTogYW55W10sIGZpbGVuYW1lOiBzdHJpbmcgPSBcImZpbmFsLnhsc3hcIikge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWVcblxuICAgIGlmICghanNvbkFycmF5IHx8IGpzb25BcnJheS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGNvbnN0IGV4Y2VsQ2VsbFRleHRMaW1pdCA9IDMyMDAwO1xuXG4gICAgLy8gLS0tLS0tLS0gTUFJTiBIRUFERVIgRlJPTSBGSVJTVCBPQkpFQ1QgLS0tLS0tLS0tXG4gICAgY29uc3QgZmlyc3RPYmogPSBqc29uQXJyYXlbMF07XG4gICAgbGV0IHRpdGxlID0gZmlyc3RPYmouc3RhdGVfY2VudGVyX25hbWUgfHwgXCJcIjtcbiAgICBpZiAoZmlyc3RPYmouZGVwYXJ0bWVudF9uYW1lKSB0aXRsZSArPSBcIiAvIFwiICsgZmlyc3RPYmouZGVwYXJ0bWVudF9uYW1lO1xuXG4gICAgLy8gLS0tLS0tLS0gQ09MVU1OIEhFQURFUlMgLS0tLS0tLS0tXG4gICAgY29uc3QgaGVhZGVycyA9IFtcbiAgICAgIFwiRGVzaWduYXRpb25cIixcbiAgICAgIFwiUm9sZSAmIFJlc3BvbnNpYmlsaXRpZXNcIixcbiAgICAgIFwiQWN0aXZpdGllc1wiLFxuICAgICAgXCJCZWhhdmlvcmFsIENvbXBldGVuY2llc1wiLFxuICAgICAgXCJGdW5jdGlvbmFsIENvbXBldGVuY2llc1wiLFxuICAgICAgXCJEb21haW4gQ29tcGV0ZW5jaWVzXCJcbiAgICBdO1xuXG4gICAgLy8gLS0tLS0tLS0gREFUQSBST1dTIC0tLS0tLS0tLVxuICAgIGNvbnN0IGRhdGFSb3dzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9IGpzb25BcnJheS5tYXAoanNvbiA9PiB7XG4gICAgICBjb25zdCBjb3Vyc2VzID1cbiAgICAgICAganNvbj8uY2JwX3BsYW5zPy5sZW5ndGhcbiAgICAgICAgICA/IGpzb24uY2JwX3BsYW5zW2pzb24uY2JwX3BsYW5zLmxlbmd0aCAtIDFdPy5zZWxlY3RlZF9jb3Vyc2VzIHx8IFtdXG4gICAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IGNvdXJzZURldGFpbEJsb2NrcyA9IGNvdXJzZXMubWFwKChjOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBjb21wZXRlbmNpZXMgPSAoYy5jb21wZXRlbmNpZXMgfHwgYy5jb21wZXRlbmNpZXNfdjYgfHwgW10pXG4gICAgICAgICAgLm1hcCgoY2M6IGFueSkgPT5cbiAgICAgICAgICAgIGAke2NjLmNvbXBldGVuY3lBcmVhTmFtZX0g4oaSICR7Y2MuY29tcGV0ZW5jeVRoZW1lTmFtZX0g4oaSICR7Y2MuY29tcGV0ZW5jeVN1YlRoZW1lTmFtZX1gXG4gICAgICAgICAgKVxuICAgICAgICAgIC5qb2luKFwiIHwgXCIpO1xuXG4gICAgICAgIHJldHVybiBgJHtpICsgMX0uIENvdXJzZSBOYW1lOiAke2M/LmNvdXJzZSB8fCBjPy5uYW1lfVxcbmAgK1xuICAgICAgICAgIGAgICBJZGVudGlmaWVyOiAke2M/LmlkZW50aWZpZXJ9XFxuYCArXG4gICAgICAgICAgYCAgIER1cmF0aW9uIChtaW5zKTogJHtNYXRoLnJvdW5kKCtjLmR1cmF0aW9uIC8gNjApfVxcbmAgK1xuICAgICAgICAgIGAgICBSZWxldmFuY3k6ICR7Yz8ucmVsZXZhbmN5fSVcXG5gICtcbiAgICAgICAgICBgICAgUmF0aW9uYWxlOiAke2M/LnJhdGlvbmFsZX1cXG5gICtcbiAgICAgICAgICBgICAgT3JnYW5pc2F0aW9uOiAke0FycmF5LmlzQXJyYXkoYz8ub3JnYW5pc2F0aW9uKSA/IGMub3JnYW5pc2F0aW9uLmpvaW4oXCIsIFwiKSA6IChjPy5vcmdhbmlzYXRpb24gPz8gXCJcIil9XFxuYCArXG4gICAgICAgICAgYCAgIENvbXBldGVuY2llczogJHtjb21wZXRlbmNpZXN9YDtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHJ1bmNhdGlvbk5vdGljZSA9IFwiXFxuW2NvdXJzZSBkZXRhaWxzIHRydW5jYXRlZF1cIjtcbiAgICAgIGNvbnN0IGNvdXJzZURldGFpbFBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgbGV0IGN1cnJlbnRQYXJ0ID0gXCJcIjtcblxuICAgICAgY291cnNlRGV0YWlsQmxvY2tzLmZvckVhY2goKGNvdXJzZURldGFpbDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChjb3Vyc2VEZXRhaWwubGVuZ3RoID4gZXhjZWxDZWxsVGV4dExpbWl0KSB7XG4gICAgICAgICAgY291cnNlRGV0YWlsID0gY291cnNlRGV0YWlsLnNsaWNlKDAsIGV4Y2VsQ2VsbFRleHRMaW1pdCAtIHRydW5jYXRpb25Ob3RpY2UubGVuZ3RoKSArIHRydW5jYXRpb25Ob3RpY2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gY3VycmVudFBhcnQgPyBcIlxcblxcblwiIDogXCJcIjtcbiAgICAgICAgaWYgKGN1cnJlbnRQYXJ0ICYmIGN1cnJlbnRQYXJ0Lmxlbmd0aCArIHNlcGFyYXRvci5sZW5ndGggKyBjb3Vyc2VEZXRhaWwubGVuZ3RoID4gZXhjZWxDZWxsVGV4dExpbWl0KSB7XG4gICAgICAgICAgY291cnNlRGV0YWlsUGFydHMucHVzaChjdXJyZW50UGFydCk7XG4gICAgICAgICAgY3VycmVudFBhcnQgPSBjb3Vyc2VEZXRhaWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudFBhcnQgKz0gc2VwYXJhdG9yICsgY291cnNlRGV0YWlsO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGN1cnJlbnRQYXJ0KSBjb3Vyc2VEZXRhaWxQYXJ0cy5wdXNoKGN1cnJlbnRQYXJ0KTtcblxuICAgICAgY29uc3Qgcm93OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgICBcIkRlc2lnbmF0aW9uXCI6IGAke2pzb24uZGVzaWduYXRpb25fbmFtZX0gOiBXaW5nL0RpdmlzaW9uIC0gJHtqc29uLndpbmdfZGl2aXNpb25fc2VjdGlvbn1gLFxuICAgICAgICBcIlJvbGUgJiBSZXNwb25zaWJpbGl0aWVzXCI6IChqc29uLnJvbGVfcmVzcG9uc2liaWxpdGllcyB8fCBbXSlcbiAgICAgICAgICAubWFwKCh2OiBzdHJpbmcsIGk6IG51bWJlcikgPT4gYCR7aSArIDF9LiAke3Z9YCkuam9pbihcIlxcblxcblwiKSxcbiAgICAgICAgXCJBY3Rpdml0aWVzXCI6IChqc29uLmFjdGl2aXRpZXMgfHwgW10pXG4gICAgICAgICAgLm1hcCgodjogc3RyaW5nLCBpOiBudW1iZXIpID0+IGAke2kgKyAxfS4gJHt2fWApLmpvaW4oXCJcXG5cXG5cIiksXG4gICAgICAgIFwiQmVoYXZpb3JhbCBDb21wZXRlbmNpZXNcIjogKGpzb24uY29tcGV0ZW5jaWVzIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGM6IGFueSkgPT4gYy50eXBlID09PSBcIkJlaGF2aW9yYWxcIilcbiAgICAgICAgICAubWFwKChjOiBhbnksIGk6IG51bWJlcikgPT4gYCR7aSArIDF9LiAke2MudGhlbWV9IC0gJHtjLnN1Yl90aGVtZX0gKCR7Yz8ucHJvZmljaWVuY3lfbGV2ZWx9LCAke2M/LmRlbGl2ZXJ5X21vZGV9KWApLmpvaW4oXCJcXG5cXG5cIiksXG4gICAgICAgIFwiRnVuY3Rpb25hbCBDb21wZXRlbmNpZXNcIjogKGpzb24uY29tcGV0ZW5jaWVzIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGM6IGFueSkgPT4gYy50eXBlID09PSBcIkZ1bmN0aW9uYWxcIilcbiAgICAgICAgICAubWFwKChjOiBhbnksIGk6IG51bWJlcikgPT4gYCR7aSArIDF9LiAke2MudGhlbWV9IC0gJHtjLnN1Yl90aGVtZX0gKCR7Yz8ucHJvZmljaWVuY3lfbGV2ZWx9LCAke2M/LmRlbGl2ZXJ5X21vZGV9KWApLmpvaW4oXCJcXG5cXG5cIiksXG4gICAgICAgIFwiRG9tYWluIENvbXBldGVuY2llc1wiOiAoanNvbi5jb21wZXRlbmNpZXMgfHwgW10pXG4gICAgICAgICAgLmZpbHRlcigoYzogYW55KSA9PiBjLnR5cGUgPT09IFwiRG9tYWluXCIpXG4gICAgICAgICAgLm1hcCgoYzogYW55LCBpOiBudW1iZXIpID0+IGAke2kgKyAxfS4gJHtjLnRoZW1lfSAtICR7Yy5zdWJfdGhlbWV9YCkuam9pbihcIlxcblxcblwiKSxcbiAgICAgICAgXCJDb3Vyc2UgRGV0YWlscyAxXCI6IGNvdXJzZURldGFpbFBhcnRzWzBdIHx8IFwiXCJcbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IHBhcnQgPSAxOyBwYXJ0IDwgY291cnNlRGV0YWlsUGFydHMubGVuZ3RoOyBwYXJ0KyspIHtcbiAgICAgICAgcm93W2BDb3Vyc2UgRGV0YWlscyAke3BhcnQgKyAxfWBdID0gY291cnNlRGV0YWlsUGFydHNbcGFydF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByb3c7XG4gICAgfSk7XG5cbiAgICBjb25zdCBtYXhDb3Vyc2VEZXRhaWxQYXJ0cyA9IE1hdGgubWF4KFxuICAgICAgMSxcbiAgICAgIC4uLmRhdGFSb3dzLm1hcChyb3cgPT4gT2JqZWN0LmtleXMocm93KS5maWx0ZXIoa2V5ID0+XG4gICAgICAgIGtleS5pbmRleE9mKFwiQ291cnNlIERldGFpbHMgXCIpID09PSAwXG4gICAgICApLmxlbmd0aClcbiAgICApO1xuICAgIGZvciAobGV0IHBhcnQgPSAxOyBwYXJ0IDw9IG1heENvdXJzZURldGFpbFBhcnRzOyBwYXJ0KyspIHtcbiAgICAgIGhlYWRlcnMucHVzaChgQ291cnNlIERldGFpbHMgJHtwYXJ0fWApO1xuICAgIH1cbiAgICBkYXRhUm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goaGVhZGVyID0+IHtcbiAgICAgICAgaWYgKCEoaGVhZGVyIGluIHJvdykpIHJvd1toZWFkZXJdID0gXCJcIjtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICAvLyAtLS0tLS0tLSBDUkVBVEUgV09SS1NIRUVUIC0tLS0tLS0tLVxuICAgIGNvbnN0IHdzID0gWExTWC51dGlscy5hb2FfdG9fc2hlZXQoW10pO1xuXG4gICAgLy8gTWFpbiBoZWFkZXIgKG1lcmdlZClcbiAgICBYTFNYLnV0aWxzLnNoZWV0X2FkZF9hb2Eod3MsIFtbdGl0bGVdXSwgeyBvcmlnaW46IFwiQTFcIiB9KTtcbiAgICB3c1snIW1lcmdlcyddID0gW3tcbiAgICAgIHM6IHsgcjogMCwgYzogMCB9LFxuICAgICAgZTogeyByOiAwLCBjOiBoZWFkZXJzLmxlbmd0aCAtIDEgfVxuICAgIH1dO1xuXG4gICAgLy8gQ29sdW1uIGhlYWRlcnMgYXQgcm93IDJcbiAgICBYTFNYLnV0aWxzLnNoZWV0X2FkZF9hb2Eod3MsIFtoZWFkZXJzXSwgeyBvcmlnaW46IFwiQTJcIiB9KTtcblxuICAgIC8vIFN0eWxlIGNvbHVtbiBoZWFkZXJzXG4gICAgaGVhZGVycy5mb3JFYWNoKChoZWFkZXIsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjZWxsQWRkcmVzcyA9IFhMU1gudXRpbHMuZW5jb2RlX2NlbGwoeyByOiAxLCBjOiBpbmRleCB9KTtcbiAgICAgIGlmICh3c1tjZWxsQWRkcmVzc10pIHtcbiAgICAgICAgd3NbY2VsbEFkZHJlc3NdLnMgPSB7XG4gICAgICAgICAgZm9udDogeyBib2xkOiB0cnVlIH0sXG4gICAgICAgICAgZmlsbDogeyBwYXR0ZXJuVHlwZTogXCJzb2xpZFwiLCBmZ0NvbG9yOiB7IHJnYjogXCJGRkZGMDBcIiB9IH0sXG4gICAgICAgICAgYWxpZ25tZW50OiB7IGhvcml6b250YWw6IFwiY2VudGVyXCIsIHZlcnRpY2FsOiBcImNlbnRlclwiLCB3cmFwVGV4dDogdHJ1ZSB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBJbnNlcnQgZGF0YSByb3dzIHN0YXJ0aW5nIGZyb20gcm93IDNcbiAgICBYTFNYLnV0aWxzLnNoZWV0X2FkZF9qc29uKHdzLCBkYXRhUm93cywgeyBvcmlnaW46IFwiQTNcIiwgc2tpcEhlYWRlcjogdHJ1ZSB9KTtcblxuICAgIC8vIEF1dG8gY29sdW1uIHdpZHRocyBiYXNlZCBvbiBsb25nZXN0IGxpbmUgaW4gZWFjaCBjb2x1bW5cbiAgICBjb25zdCBjb2xXaWR0aHMgPSBoZWFkZXJzLm1hcChoZWFkZXIgPT4ge1xuICAgICAgY29uc3QgbWF4TGVuID0gTWF0aC5tYXgoXG4gICAgICAgIGhlYWRlci5sZW5ndGgsXG4gICAgICAgIC4uLmRhdGFSb3dzLm1hcChyb3cgPT4gU3RyaW5nKHJvd1toZWFkZXJdIHx8IFwiXCIpXG4gICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgLnJlZHVjZSgobWF4TGVuZ3RoOiBudW1iZXIsIGxpbmU6IHN0cmluZykgPT4gTWF0aC5tYXgobWF4TGVuZ3RoLCBsaW5lLmxlbmd0aCksIDApKVxuICAgICAgKTtcbiAgICAgIHJldHVybiB7IHdjaDogTWF0aC5taW4oTWF0aC5tYXgobWF4TGVuICsgNSwgMjApLCA4MCkgfTsgLy8gbWluIDIwLCBtYXggODBcbiAgICB9KTtcbiAgICB3c1snIWNvbHMnXSA9IGNvbFdpZHRocztcblxuICAgIC8vIFdyYXAgdGV4dCBpbiBkYXRhIHJvd3NcbiAgICBkYXRhUm93cy5mb3JFYWNoKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goKGhlYWRlciwgY29sSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY2VsbEFkZHJlc3MgPSBYTFNYLnV0aWxzLmVuY29kZV9jZWxsKHsgcjogcm93SW5kZXggKyAyLCBjOiBjb2xJbmRleCB9KTtcbiAgICAgICAgaWYgKHdzW2NlbGxBZGRyZXNzXSkge1xuICAgICAgICAgIHdzW2NlbGxBZGRyZXNzXS5zID0geyBhbGlnbm1lbnQ6IHsgd3JhcFRleHQ6IHRydWUsIHZlcnRpY2FsOiBcInRvcFwiIH0gfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBTdHlsZSBtYWluIGhlYWRlclxuICAgIGlmICh3c1tcIkExXCJdKSB7XG4gICAgICB3c1tcIkExXCJdLnMgPSB7XG4gICAgICAgIGZvbnQ6IHsgYm9sZDogdHJ1ZSwgc3o6IDE2IH0sXG4gICAgICAgIGFsaWdubWVudDogeyBob3Jpem9udGFsOiBcImNlbnRlclwiLCB2ZXJ0aWNhbDogXCJjZW50ZXJcIiB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tIENSRUFURSBXT1JLQk9PSyAtLS0tLS0tLS1cbiAgICBjb25zdCB3YiA9IFhMU1gudXRpbHMuYm9va19uZXcoKTtcbiAgICBYTFNYLnV0aWxzLmJvb2tfYXBwZW5kX3NoZWV0KHdiLCB3cywgXCJTaGVldDFcIik7XG5cbiAgICAvLyBFeHBvcnQgRXhjZWxcbiAgICBYTFNYLndyaXRlRmlsZSh3YiwgZmlsZW5hbWUpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICB9LCA1MDAwKVxuICB9XG5cblxuXG5cbiAgZG93bmxvYWRDU1YoKSB7XG4gICAgbGV0IGZpbGVOYW1lID0gJydcbiAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzKSB7XG4gICAgICBmaWxlTmFtZSA9IGBDQlBfUmVwb3J0XyR7dGhpcy5zaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcn1fJHt0aGlzLnNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50c30ueGxzeGBcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZU5hbWUgPSBgQ0JQX1JlcG9ydF8ke3RoaXMuc2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5LmlkZW50aWZpZXJ9Lnhsc3hgXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVFeGNlbCh0aGlzLmpzb25EYXRhLCBmaWxlTmFtZSk7XG4gIH1cblxuICBkb3dubG9hZFBkZkZyb21CRShjb250ZXh0OiBzdHJpbmcpIHtcbiAgICBsZXQgc2VsZWN0ZWRMYW5ndWFnZSA9IHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2xhbmd1YWdlJyk/LnZhbHVlIHx8ICdlbic7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIC8vICB0aGlzLnNoYXJlZFNlcnZpY2UuZG93bmxvYWRQZGYodGhpcy5zaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcilcbiAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzKSB7XG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZG93bmxvYWRQZGYodGhpcy5zaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllciwgY29udGV4dCwgc2VsZWN0ZWRMYW5ndWFnZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmRvd25sb2FkUGRmRm9yRGVwYXJ0bWVudCh0aGlzLnNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5pZGVudGlmaWVyLCB0aGlzLnNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cywgY29udGV4dCwgc2VsZWN0ZWRMYW5ndWFnZSlcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgfSwgNTAwMClcbiAgfVxuICBnZXRTZWxlY3RlZENvdXJzZXMoZGVwYXJ0bWVudDogYW55KTogYW55W10ge1xuICAgIGlmICghZGVwYXJ0bWVudD8uY2JwX3BsYW5zPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyB0YWtlIGxhdGVzdCBDQlAgcGxhbiAob3IgYWRqdXN0IGxvZ2ljIGlmIG5lZWRlZClcbiAgICBjb25zdCBsYXRlc3RQbGFuID0gZGVwYXJ0bWVudC5jYnBfcGxhbnNbZGVwYXJ0bWVudC5jYnBfcGxhbnMubGVuZ3RoIC0gMV07XG5cbiAgICByZXR1cm4gbGF0ZXN0UGxhbj8uc2VsZWN0ZWRfY291cnNlcyB8fCBbXTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVycygpIHtcblxuICB9XG5cbiAgZmlsdGVyTGlzdCh2YWx1ZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWFyY2ggPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG5cbiAgICAgIGNhc2UgJ2xhbmd1YWdlJzpcbiAgICAgICAgdGhpcy5maWx0ZXJlZExhbmd1YWdlcyA9IHRoaXMubGFuZ3VhZ2VzLmZpbHRlcih2ID0+IHYubGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG59IiwiPGRpdiBjbGFzcz1cInZpZXctY2JwLXBsYW5cIiAjZGlhbG9nQ29udGVudCBzdHlsZT1cIm1heC1oZWlnaHQ6IDgwdmg7IG92ZXJmbG93OiBhdXRvO1wiPlxuICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiPlZpZXcgRmluYWwgPHNwYW4gKm5nSWY9XCJvcGVuZWRGcm9tID09PSAnY2JwJ1wiPkNCUDwvc3Bhbj48c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3BlbmVkRnJvbSA9PT0gJ2FjYnAnXCI+QUNCUDwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtc2lkZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1hbmQtYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwibGFuZ3VhZ2Utc2VsZWN0XCIgc3R5bGU9XCIgaGVpZ2h0OiAzNHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBzdHlsZT1cImZvbnQtd2VpZ2h0OiBub3JtYWw7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyRm9ybS5nZXQoJ2xhbmd1YWdlJyk/LnZhbHVlID8gJycgOiAnU2VsZWN0IExhbmd1YWdlJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImxhbmd1YWdlXCIgcGFuZWxDbGFzcz1cInNlbGVjdC1zZWFyY2gtcGFuZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiYXBwbHlGaWx0ZXJzKClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDVweDt3aWR0aDogOTIlO21hcmdpbjogNXB4O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoIExhbmd1YWdlc1wiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwiZmlsdGVyTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCAnbGFuZ3VhZ2UnKVwiIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFZhbHVlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgciBvZiBmaWx0ZXJlZExhbmd1YWdlc1wiIFt2YWx1ZV09XCJyPy5jb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHI/LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuXG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRhaW5lclwiICNwZGZDb250ZW50PlxuICAgICAgICAgICAgPGhlYWRlciBjbGFzcz1cImJnLXdoaXRlIGhlYWRlci1ib3JkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWZsZXgganVzdGlmeS1iZXR3ZWVuXCIgc3R5bGU9XCJ3aWR0aDoxMDAlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTRcIiBzdHlsZT1cIndpZHRoOjUwJVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2RvcHQtbG9nby5wbmdcIiBhbHQ9XCJEZXBhcnRtZW50IG9mIFBlcnNvbm5lbCAmIFRyYWluaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0xNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvQ0JDX2xvZ28uc3ZnXCIgYWx0PVwiQ2FwYWNpdHkgQnVpbGRpbmcgQ29tbWlzc2lvbiBMb2dvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0xMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMva2FybWF5b2dpTG9nby1taW4ucG5nXCIgYWx0PVwiS2FybWF5b2dpIEJoYXJhdCBMb2dvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0xMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCIgc3R5bGU9XCJ3aWR0aDo1MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdzdGF0ZSdcIj57e3NoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/Lm9yZ05hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5J1wiPnt7c2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeT8ub3JnTmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqPy5kZXBhcnRtZW50X25hbWVcIj4ve3tzaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmo/LmRlcGFydG1lbnRfbmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQ2FwYWNpdHkgQnVpbGRpbmcgUGxhblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1ncmF5LTYwMFwiPkNvbXByZWhlbnNpdmUgUm9sZS1CYXNlZCBDb21wZXRlbmN5IEFuYWx5c2lzPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi1oLXNjcmVlbiBiZy1ncmFkaWVudC10by1iciBmcm9tLXNsYXRlLTUwIHZpYS1ibHVlLTUwIHRvLWluZGlnby0xMDBcIj5cbiAgICAgICAgICAgICAgICA8IS0tIEhlYWRlciAtLT5cblxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13LTd4bCBteC1hdXRvIHB4LTYgcHktOCBtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gS1BJIERhc2hib2FyZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktY29udGFpbmVyIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLXRvdGFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvcml6b250YWwtZmxleCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC04IHctOCBpY29uLXNtXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgMnY2aDZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYgMTNIOFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNiAxN0g4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDlIOFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e3RvdGFsQ29tcGV0ZW5jaWVPYmo/LnRvdGFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRvdGFsIENvbXBldGVuY2llczwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhciBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXItZmlsbFwiIHN0eWxlPVwid2lkdGg6IDYwJTtcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLXRleHRcIj5Ub3RhbCBDb21wZXRlbmNpZXM6IHt7dG90YWxDb21wZXRlbmNpZU9iaj8udG90YWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LnRvdGFsfX0gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLWJlaGF2aW9yYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG9yaXpvbnRhbC1mbGV4IG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTggdy04IGljb24tc21cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1LjUgMTdhNCA0IDAgMCAxLTUgMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMyAxNGguMDFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEgMTFoLjAxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3IDE0aC4wMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMyAxMGguMDFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgMThoLjAxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzIDZoLjAxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3IDE4aC4wMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNyA2aC4wMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMSAxMmE5IDkgMCAwIDEtOSA5YTkgOSAwIDAgMS05LTlhOSA5IDAgMCAxIDktOWE5IDkgMCAwIDEgOSA5elwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e3RvdGFsQ29tcGV0ZW5jaWVPYmo/LmJlaGF2aW9yYWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+QmVoYXZpb3JhbCBDb21wZXRlbmNpZXM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyLWZpbGwtYmVoYXZpb3VyYWxcIiBzdHlsZT1cIndpZHRoOiA2MCU7XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi10ZXh0XCI+QmVoYXZpb3JhbCBDb21wZXRlbmNpZXM6IHt7dG90YWxDb21wZXRlbmNpZU9iaj8uYmVoYXZpb3JhbH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLWZ1bmN0aW9uYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG9yaXpvbnRhbC1mbGV4IG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTggdy04IGljb24tc21cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIgM2g2YTQgNCAwIDAgMSA0IDR2MTRhMyAzIDAgMCAwLTMtM0gyelwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMiAzaC02YTQgNCAwIDAgMC00IDR2MTRhMyAzIDAgMCAxIDMtM2g3elwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e3RvdGFsQ29tcGV0ZW5jaWVPYmo/LmZ1bmN0aW9uYWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+RnVuY3Rpb25hbCBDb21wZXRlbmNpZXM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyLWZpbGwtZnVuY3Rpb25hbFwiIHN0eWxlPVwid2lkdGg6IDYwJTtcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLXRleHRcIj5GdW5jdGlvbmFsIENvbXBldGVuY2llczoge3t0b3RhbENvbXBldGVuY2llT2JqPy5mdW5jdGlvbmFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLWRvbWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWZsZXggbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtOCB3LTggaWNvbi1zbVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiNlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7dG90YWxDb21wZXRlbmNpZU9iaj8uZG9tYWlufX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkRvbWFpbiBDb21wZXRlbmNpZXM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyLWZpbGwtZG9tYWluXCIgc3R5bGU9XCJ3aWR0aDogNjAlO1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItdGV4dFwiPkRvbWFpbiBDb21wZXRlbmNpZXM6IHt7dG90YWxDb21wZXRlbmNpZU9iaj8uZG9tYWlufX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtYi04XCI+XG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgbWItNm5oZWFkaW5nXCI+Q29tcGV0ZW5jeSBPdmVydmlldzwvaDI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQga3BpIG9mIG92ZXJhbGxLUElzO1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgcm91bmRlZC14bCAgb3V0c2lkZS1sYXllci10b3RhbCBwLTYgYm9yZGVyLWwtNCBob3ZlcjpzaGFkb3cteGwgdHJhbnNpdGlvbi1zaGFkb3dcIiBbc3R5bGUuYm9yZGVyLWxlZnQtY29sb3JdPVwia3BpLmNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi00IGluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ3AtMyByb3VuZGVkLWxnICcgKyBrcGkuYmdDb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJrcGkubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIidCZWhhdmlvcmFsIENvbXBldGVuY2llcydcIiBjbGFzcz1cImgtOCB3LTggaWNvbi1zbVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1LjUgMTdhNCA0IDAgMCAxLTUgMFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgMTRoLjAxXCIvPjxwYXRoIGQ9XCJNMTEgMTFoLjAxXCIvPjxwYXRoIGQ9XCJNMTcgMTRoLjAxXCIvPjxwYXRoIGQ9XCJNMTMgMTBoLjAxXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMyAxOGguMDFcIi8+PHBhdGggZD1cIk0xMyA2aC4wMVwiLz48cGF0aCBkPVwiTTE3IDE4aC4wMVwiLz48cGF0aCBkPVwiTTE3IDZoLjAxXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMSAxMmE5IDkgMCAwIDEtOSA5YTkgOSAwIDAgMS05LTlhOSA5IDAgMCAxIDktOWE5IDkgMCAwIDEgOSA5elwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ1N3aXRjaENhc2U9XCInRnVuY3Rpb25hbCBDb21wZXRlbmNpZXMnXCIgY2xhc3M9XCJoLTggdy04IGljb24tc21cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yIDNoNmE0IDQgMCAwIDEgNCA0djE0YTMgMyAwIDAgMC0zLTNIMnpcIi8+PHBhdGggZD1cIk0yMiAzaC02YTQgNCAwIDAgMC00IDR2MTRhMyAzIDAgMCAxIDMtM2g3elwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ1N3aXRjaENhc2U9XCInRG9tYWluIENvbXBldGVuY2llcydcIiBjbGFzcz1cImgtOCB3LTggaWNvbi1zbVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIvPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiNlwiLz48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjJcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdTd2l0Y2hDYXNlPVwiJ1RvdGFsIENvbXBldGVuY2llcydcIiBjbGFzcz1cImgtOCB3LTggaWNvbi1zbVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4elwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgMnY2aDZcIi8+PHBhdGggZD1cIk0xNiAxM0g4XCIvPjxwYXRoIGQ9XCJNMTYgMTdIOFwiLz48cGF0aCBkPVwiTTEwIDlIOFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1ncmF5LTkwMFwiPnt7a3BpLnRvdGFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInRleHQtZ3JheS05MDAgZm9udC1zZW1pYm9sZCBtYi0yIGhlYWRpbmdcIj57e2twaS5uYW1lfX08L2gzPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgYmctZ3JheS0yMDAgcm91bmRlZC1mdWxsIGgtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtMyByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwia3BpLmF2Z0NvbXBsZXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJrcGkuY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWdyYXktNTAwIG10LTJcIj5Ub3RhbCBDb21wZXRlbmNpZXM6IHt7a3BpLnRvdGFsfX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIERlc2lnbmF0aW9uIFJlcG9ydHMgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZS15LTggbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgbWItNiBoZWFkaW5nXCI+RGV0YWlsZWQgQ29tcGV0ZW5jeSBGcmFtZXdvcmsgYnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNpZ25hdGlvbjwvaDI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRlc2lnbmF0aW9uIG9mIGRlc2lnbmF0aW9uRGF0YTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgcm91bmRlZC14bCAgb3ZlcmZsb3ctaGlkZGVuIHNlY3Rpb24tc2hhZG93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJnLWdyYWRpZW50LXRvLXIgZnJvbS1pbmRpZ28tNjAwIHRvLWJsdWUtNjAwIHRleHQtd2hpdGUgcC02IGhlYWRpbmctd2l0aC1iZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInRleHQtMnhsIGZvbnQtYm9sZCBtYi0yIGhlYWRpbmctYmdcIj57e2Rlc2lnbmF0aW9uLmRlc2lnbmF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWluZGlnby0xMDAgbWItMVwiPldpbmcvRGl2aXNpb246IHt7ZGVzaWduYXRpb24ud2luZ319PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTQgY29tcGV0ZW5jeS1jb3VudC1ieS1kZXNpZ25hdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbVwiPkJlaGF2aW9yYWw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Rlc2lnbmF0aW9uLmJlaGF2aW9yYWxDb21wZXRlbmNpZXMubGVuZ3RofX0gdG90YWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNtXCI+RnVuY3Rpb25hbDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGVzaWduYXRpb24uZnVuY3Rpb25hbENvbXBldGVuY2llcy5sZW5ndGh9fSB0b3RhbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtc21cIj5Eb21haW46XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Rlc2lnbmF0aW9uLmRvbWFpbkNvbXBldGVuY2llcy5sZW5ndGh9fSB0b3RhbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEJvZHkgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTQgc2VjdGlvbi1zaGFkb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUm9sZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cInRleHQteGwgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTMgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtNSB3LTUgbXItMiB0ZXh0LWluZGlnby02MDAgaWNvbi1zbVwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTYgN2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6TTEyIDE0YTcgNyAwIDAwLTcgN2gxNGE3IDcgMCAwMC03LTd6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvbGVzICYgUmVzcG9uc2liaWxpdGllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTMgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm9sZSBvZiBkZXNpZ25hdGlvbi5yb2xlc1Jlc3BvbnNpYmlsaXRpZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiZy1ncmF5LTUwIHAtMiByb3VuZGVkIGJvcmRlci1sLTMgYm9yZGVyLWluZGlnby01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWdyYXktNzAwIGxlYWRpbmctcmVsYXhlZFwiPnt7cm9sZX19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBY3Rpdml0aWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTYgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cInRleHQteGwgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTMgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtNSB3LTUgbXItMiB0ZXh0LWluZGlnby02MDAgaWNvbi1zbVwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTYgN2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6TTEyIDE0YTcgNyAwIDAwLTcgN2gxNGE3IDcgMCAwMC03LTd6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvbGUgb2YgZGVzaWduYXRpb24uYWN0aXZpdGllczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJnLWdyYXktNTAgcC0yIHJvdW5kZWQgYm9yZGVyLWwtMyBib3JkZXItaW5kaWdvLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtZ3JheS03MDAgbGVhZGluZy1yZWxheGVkXCI+e3tyb2xlfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1icmVha1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDb21wZXRlbmNpZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jaXMtZ3JpZCBtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBCZWhhdmlvcmFsIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy1ibHVlLTUwIHJvdW5kZWQtbGcgcC0zIGNvbXBldGVuY2llcy1ncmlkLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LWJsdWUtODAwIHRleHQtYmFzZSBtYi0yXCI+QmVoYXZpb3JhbDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZS15LTEgZ3JpZC1saXN0LWl0ZW0gZ3JpZC1saXN0LWl0ZW0tYmVoYXZpb3JhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29tcCBvZiBkZXNpZ25hdGlvbi5iZWhhdmlvcmFsQ29tcGV0ZW5jaWVzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJnLXdoaXRlIHAtMS41IHJvdW5kZWQgdGV4dC1zbSB0ZXh0LWdyYXktNzAwIGJvcmRlci1sLTIgYm9yZGVyLWJsdWUtNDAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1jb2wtdGhlbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGFnc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRlc2lnbmF0aW9uLmJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsW2ldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9maWNpZW5jeS10YWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJkZXNpZ25hdGlvbi5iZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFtpXT8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImRlc2lnbmF0aW9uLmJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlW2ldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkZXNpZ25hdGlvbi5iZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFtpXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10YWdzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGVzaWduYXRpb24uYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZVtpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVsaXZlcnktbW9kZS10YWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJkZXNpZ25hdGlvbi5iZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlW2ldPy50b0xvd2VyQ2FzZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZGVzaWduYXRpb24uYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZVtpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVzaWduYXRpb24uYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZVtpXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LXNtIHRleHQtYmx1ZS02MDAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGVzaWduYXRpb24uYmVoYXZpb3JhbENvbXBldGVuY2llcy5sZW5ndGh9fSB0b3RhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRnVuY3Rpb25hbCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctZ3JlZW4tNTAgcm91bmRlZC1sZyBwLTMgY29tcGV0ZW5jaWVzLWdyaWQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtZ3JlZW4tODAwIHRleHQtYmFzZSBtYi0yXCI+RnVuY3Rpb25hbDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZS15LTEgZ3JpZC1saXN0LWl0ZW0gZ3JpZC1saXN0LWl0ZW0tZnVuY3Rpb25hbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29tcCBvZiBkZXNpZ25hdGlvbi5mdW5jdGlvbmFsQ29tcGV0ZW5jaWVzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJnLXdoaXRlIHAtMS41IHJvdW5kZWQgdGV4dC1zbSB0ZXh0LWdyYXktNzAwIGJvcmRlci1sLTIgYm9yZGVyLWdyZWVuLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtY29sLXRoZW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRhZ3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkZXNpZ25hdGlvbi5mdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFtpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZmljaWVuY3ktdGFnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGVzaWduYXRpb24uZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxbaV0/LnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJkZXNpZ25hdGlvbi5mdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZVtpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVzaWduYXRpb24uZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxbaV0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGFnc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRlc2lnbmF0aW9uLmZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVbaV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRlbGl2ZXJ5LW1vZGUtdGFnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGVzaWduYXRpb24uZnVuY3Rpb25hbFNldEZvckRlbGl2ZXJ5TW9kZVtpXT8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImRlc2lnbmF0aW9uLmZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGVbaV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRlc2lnbmF0aW9uLmZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVbaV0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LXNtIHRleHQtZ3JlZW4tNjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Rlc2lnbmF0aW9uLmZ1bmN0aW9uYWxDb21wZXRlbmNpZXMubGVuZ3RofX0gdG90YWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERvbWFpbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctcHVycGxlLTUwIHJvdW5kZWQtbGcgcC0zIGNvbXBldGVuY2llcy1ncmlkLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXB1cnBsZS04MDAgdGV4dC1iYXNlIG1iLTJcIj5Eb21haW48L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2UteS0xIGdyaWQtbGlzdC1pdGVtIGdyaWQtbGlzdC1pdGVtLWRvbWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29tcCBvZiBkZXNpZ25hdGlvbi5kb21haW5Db21wZXRlbmNpZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmctd2hpdGUgcC0xLjUgcm91bmRlZCB0ZXh0LXNtIHRleHQtZ3JheS03MDAgYm9yZGVyLWwtMiBib3JkZXItcHVycGxlLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtY29sLXRoZW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRhZ3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkZXNpZ25hdGlvbi5kb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsW2ldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9maWNpZW5jeS10YWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJkZXNpZ25hdGlvbi5kb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsW2ldPy50b0xvd2VyQ2FzZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZGVzaWduYXRpb24uZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZVtpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVzaWduYXRpb24uZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFtpXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10YWdzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGVzaWduYXRpb24uZG9tYWluU2V0Rm9yRGVsaXZlcnlNb2RlW2ldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkZWxpdmVyeS1tb2RlLXRhZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRlc2lnbmF0aW9uLmRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVtpXT8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImRlc2lnbmF0aW9uLmRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZVtpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVzaWduYXRpb24uZG9tYWluU2V0Rm9yRGVsaXZlcnlNb2RlW2ldIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1zbSB0ZXh0LXB1cnBsZS02MDAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGVzaWduYXRpb24uZG9tYWluQ29tcGV0ZW5jaWVzLmxlbmd0aH19IHRvdGFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFkZGluZyBjb3Vyc2VzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNicCBtdC00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRlc2lnbmF0aW9uLnNlbGVjdGVkQ291cnNlcz8ubGVuZ3RoICYmIG9wZW5lZEZyb20gPT09ICdhY2JwJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cInRleHQteGwgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTMgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtNSB3LTUgbXItMiB0ZXh0LWluZGlnby02MDAgaWNvbi1zbVwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTYgN2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6TTEyIDE0YTcgNyAwIDAwLTcgN2gxNGE3IDcgMCAwMC03LTd6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdXJzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtbGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1saXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGVzaWduYXRpb24uc2VsZWN0ZWRDb3Vyc2VzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2VkLWNvdXJzZS1jb250YWluZXJcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1waWxsLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9jb3Vyc2Uuc3ZnXCI+PC9zcGFuPiZuYnNwOzxzcGFuPkNvdXJzZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5yYXRpb25hbGUgJiYgIWl0ZW0/LmlzX3B1YmxpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyZWVuLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BSSBSZWNvbW1lbmRlZCAtIGlHT1QgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtPy5wbGF0Zm9ybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW2hyZWZdPVwiaXRlbT8ucHVibGljX2xpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIj48c3Bhbj5QbGF0Zm9ybSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0/LnBsYXRmb3JtfX08L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbT8ub3JnYW5pc2F0aW9uPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UHJvdmlkZXIgLSB7e2l0ZW0/Lm9yZ2FuaXNhdGlvblswXX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5yYXRpb25hbGUgJiYgaXRlbT8uaXNfcHVibGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtcHVibGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXB1YmxpYy10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgUmVjb21tZW5kZWQgLSBQdWJsaWMgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtPy5wbGF0Zm9ybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW2hyZWZdPVwiaXRlbT8ucHVibGljX2xpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIj48c3Bhbj5QbGF0Zm9ybSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0/LnBsYXRmb3JtfX08L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbT8ub3JnYW5pc2F0aW9uPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UHJvdmlkZXIgLSB7e2l0ZW0/Lm9yZ2FuaXNhdGlvblswXX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbT8ucmF0aW9uYWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtZ3JheVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1ncmF5LXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5NYW51YWxseSBTdWdnZXN0ZWQgLSBpR09UIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbT8ucGxhdGZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4+UGxhdGZvcm0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtPy5wbGF0Zm9ybX19PC9zcGFuPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UgbXQtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0/Lm9yZ2FuaXNhdGlvbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlByb3ZpZGVyIC0ge3tpdGVtPy5vcmdhbmlzYXRpb25bMF19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS10aXRsZSBtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0/LmNvdXJzZVwiPnt7aXRlbT8uY291cnNlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0/Lm5hbWVcIj57e2l0ZW0/Lm5hbWV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWRlc2MgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1BERkRvd25sb2FkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tpdGVtPy5yYXRpb25hbGV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0JlaGF2aW91cmFsJyxpdGVtKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmdcIj5CZWhhdmlvcmFsIENvbXBldGVuY2llczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNvbXBldGVuY3ktbGlzdCBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImJlaGF2aW91cmFsLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0RGlzcGxheWVkQ29tcGV0ZW5jaWVzKCdCZWhhdmlvdXJhbCcsaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0XCI+IHt7IGNvbXAuY29tcGV0ZW5jeVRoZW1lTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXAuY29tcGV0ZW5jeVN1YlRoZW1lTmFtZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhhc01vcmVUaGFuVHdvKCdCZWhhdmlvdXJhbCcsaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaG93LW1vcmUtY29tcGV0ZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzaG93LW1vcmUtbGluayBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbXBldGVuY2llcygnQmVoYXZpb3VyYWwnLGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNFeHBhbmRlZCgnQmVoYXZpb3VyYWwnLGl0ZW0pID8gJ1Nob3cgTGVzcycgOiAnKycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlbWFpbmluZ0NvdW50KCdCZWhhdmlvdXJhbCcsaXRlbSkgKyAnIE1vcmUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdGdW5jdGlvbmFsJyxpdGVtKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmdcIj5GdW5jdGlvbmFsIENvbXBldGVuY2llczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNvbXBldGVuY3ktbGlzdCBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImZ1bmN0aW9uYWwtcGlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXREaXNwbGF5ZWRDb21wZXRlbmNpZXMoJ0Z1bmN0aW9uYWwnLGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dFwiPiB7eyBjb21wLmNvbXBldGVuY3lUaGVtZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLmNvbXBldGVuY3lTdWJUaGVtZU5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJoYXNNb3JlVGhhblR3bygnRnVuY3Rpb25hbCcsaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaG93LW1vcmUtY29tcGV0ZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzaG93LW1vcmUtbGluayBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbXBldGVuY2llcygnRnVuY3Rpb25hbCcsaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpc0V4cGFuZGVkKCdGdW5jdGlvbmFsJyxpdGVtKSA/ICdTaG93IExlc3MnIDogJysnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZW1haW5pbmdDb3VudCgnRnVuY3Rpb25hbCcsaXRlbSkgKyAnIE1vcmUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImdldENvbXBldGVuY2llc0J5VHlwZSgnRG9tYWluJyxpdGVtKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmdcIj5Eb21haW4gQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29tcGV0ZW5jeS1saXN0IG10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZG9tYWluLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0RGlzcGxheWVkQ29tcGV0ZW5jaWVzKCdEb21haW4nLGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dFwiPiB7eyBjb21wLmNvbXBldGVuY3lUaGVtZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLmNvbXBldGVuY3lTdWJUaGVtZU5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJoYXNNb3JlVGhhblR3bygnRG9tYWluJyxpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNob3ctbW9yZS1jb21wZXRlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3ctbW9yZS1saW5rIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29tcGV0ZW5jaWVzKCdEb21haW4nLGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNFeHBhbmRlZCgnRG9tYWluJyxpdGVtKSA/ICdTaG93IExlc3MnIDogJysnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZW1haW5pbmdDb3VudCgnRG9tYWluJyxpdGVtKSArICcgTW9yZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmFuY3ktY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmFuY3lcIj5SZWxldmFuY3k8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlXCIgKm5nSWY9XCJpdGVtPy5yZWxldmFuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbT8ucmVsZXZhbmN5fX0lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlXCIgKm5nSWY9XCIhaXRlbT8ucmVsZXZhbmN5XCI+Ti9BPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBhZGRpbmcgY291cnNlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEZvb3RlciAtLT5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Zm9vdGVyIGNsYXNzPVwib3JnLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtdy03eGwgbXgtYXV0byBweC02IGZsZXggZmxleC1jb2wgbWQ6ZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC00IG1iLTQgbXQtNCBtZDptYi0wIGZvb3Rlci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItbG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9rYXJtYXlvZ2lMb2dvLW1pbi5wbmdcIiBhbHQ9XCJLYXJtYXlvZ2kgQmhhcmF0IExvZ29cIiBjbGFzcz1cImgtMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OjIwcHhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2thcm1heW9naWJoYXJhdC5nb3YuaW5cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdHJhbnNpdGlvbi1jb2xvcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FybWF5b2dpYmhhcmF0Lmdvdi5pblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtY2VudGVyIG1kOnRleHQtcmlnaHQgbWItNFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+JmNvcHk7IDIwMjUgQWxsIFJpZ2h0cyBSZXNlcnZlZC48L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb290ZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZm9vdGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJEb3dubG9hZCBhcyBFeGNlbFwiIChjbGljayk9XCJkb3dubG9hZENTVigpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiRG93bmxvYWQgYXMgUERGXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkUGRmRnJvbUJFKG9wZW5lZEZyb20pXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiQ2FuY2VsXCIgKGNsaWNrKT1cImNhbmNlbEZvcm0oKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICA8L2Rpdj4iXX0=
|
|
1052
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1maW5hbC1jYnAtcGxhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvY29tcG9uZW50cy92aWV3LWZpbmFsLWNicC1wbGFuL3ZpZXctZmluYWwtY2JwLXBsYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvdmlldy1maW5hbC1jYnAtcGxhbi92aWV3LWZpbmFsLWNicC1wbGFuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlDLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLGVBQWUsRUFBMkIsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLFFBQVEsTUFBTSxhQUFhLENBQUM7QUFDbkMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRbkgsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxZQUNTLFNBQWtELEVBQ3pCLElBQVMsRUFDakMsTUFBaUIsRUFDakIsR0FBc0IsRUFDdkIsYUFBNEIsRUFDM0IsUUFBcUIsRUFDckIsRUFBZTtRQU5oQixjQUFTLEdBQVQsU0FBUyxDQUF5QztRQUN6QixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdkIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0IsYUFBUSxHQUFS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Q29tcG9uZW50LCBDaGFuZ2VEZXRlY3RvclJlZiwgRWxlbWVudFJlZiwgSW5qZWN0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IGh0bWwycGRmIGZyb20gJ2h0bWwycGRmLmpzJztcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XG5pbXBvcnQgaHRtbDJjYW52YXMgZnJvbSAnaHRtbDJjYW52YXMnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcbmltcG9ydCB7IERlbGV0ZVJvbGVNYXBwaW5nUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9kZWxldGUtcm9sZS1tYXBwaW5nLXBvcHVwL2RlbGV0ZS1yb2xlLW1hcHBpbmctcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXZpZXctZmluYWwtY2JwLXBsYW4nLFxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy1maW5hbC1jYnAtcGxhbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZpZXctZmluYWwtY2JwLXBsYW4uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBWaWV3RmluYWxDYnBQbGFuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFZpZXdGaW5hbENicFBsYW5Db21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyXG4gICkge1xuICAgIHRoaXMuZmlsdGVyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgbGFuZ3VhZ2U6IFsnZW4nXVxuICAgIH0pO1xuICAgIHRoaXMub3BlbmVkRnJvbSA9IGRhdGE/Lm9wZW5lZEZyb207XG4gICAgdGhpcy5nZXRNYXBwaW5nRGF0YSgpXG4gIH1cbiAgZmlsdGVyRm9ybSE6IEZvcm1Hcm91cDtcbiAgbGFuZ3VhZ2VzID0gW3sgXCJjb2RlXCI6IFwiZW5cIiwgbGFiZWw6IFwiRW5nbGlzaFwiIH0sXG4gIHsgXCJjb2RlXCI6IFwiaGlcIiwgbGFiZWw6IFwiSGluZGlcIiB9LFxuICB7IFwiY29kZVwiOiBcInRlXCIsIGxhYmVsOiBcIlRlbHVndVwiIH0sXG4gIHsgXCJjb2RlXCI6IFwia25cIiwgbGFiZWw6IFwiS2FubmFkYVwiIH0sXG4gIHsgXCJjb2RlXCI6IFwibXJcIiwgbGFiZWw6IFwiTWFyYXRoaVwiIH0sXG4gIHsgXCJjb2RlXCI6IFwidGFcIiwgbGFiZWw6IFwiVGFtaWxcIiB9LFxuICB7IFwiY29kZVwiOiBcImd1XCIsIGxhYmVsOiBcIkd1amFyYXRpXCIgfSxcbiAgeyBcImNvZGVcIjogXCJtbFwiLCBsYWJlbDogXCJNYWxheWFsYW1cIiB9LFxuICB7IFwiY29kZVwiOiBcImJuXCIsIGxhYmVsOiBcIkJlbmdhbGlcIiB9LF07XG4gIGZpbHRlcmVkTGFuZ3VhZ2VzID0gWy4uLnRoaXMubGFuZ3VhZ2VzXTtcbiAgQFZpZXdDaGlsZCgncGRmQ29udGVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwZGZDb250ZW50ITogRWxlbWVudFJlZjtcbiAgbG9hZGluZyA9IGZhbHNlXG4gIGRvd25sb2FkSW5Qcm9ncmVzcyA9IGZhbHNlXG4gIGRlc2lnbmF0aW9uRGF0YTogYW55ID0gW11cbiAgdG90YWxDb21wZXRlbmNpZU9iaiA9IHsgdG90YWw6IDAsIGJlaGF2aW9yYWw6IDAsIGZ1bmN0aW9uYWw6IDAsIGRvbWFpbjogMCB9XG4gIHBkZlRyaWdnZXIgPSBmYWxzZVxuICBqc29uRGF0YSA9IFtdXG4gIGZpbHRlcmRDb3Vyc2VzID0gW107XG4gIHBsYW5EYXRhOiBhbnlcbiAgcmVjb21tZW5kZWRfY291cnNlX2lkID0gJydcbiAgZXhwYW5kZWRDb21wZXRlbmNpZXM6IGFueSA9IHt9O1xuICBjb21wZXRlbmNpZXNDb3VudCA9IHsgdG90YWw6IDAsIHB1YmxpY19jb3Vyc2VzOiAwLCBpZ290OiAwIH07XG4gIG9wZW5lZEZyb20hOiBzdHJpbmc7XG4gIGlzUERGRG93bmxvYWQgPSBmYWxzZTtcbiAgQFZpZXdDaGlsZCgnZGlhbG9nQ29udGVudCcpIGRpYWxvZ0NvbnRlbnQhOiBFbGVtZW50UmVmO1xuICAvLyBkZXNpZ25hdGlvbkRhdGEgPSBbXG4gIC8vICAge1xuICAvLyAgICAgZGVzaWduYXRpb246IFwiU2VjcmV0YXJ5IChXQ0QpXCIsXG4gIC8vICAgICB3aW5nOiBcIk1pbmlzdHJ5IExlYWRlcnNoaXBcIixcbiAgLy8gICAgIHVwZGF0ZWQ6IFwiMTAvMDkvMjAyNVwiLFxuICAvLyAgICAgcm9sZXNSZXNwb25zaWJpbGl0aWVzOiBbXG4gIC8vICAgICAgIFwiUHJvdmlkZSBvdmVyYWxsIHN1cGVydmlzaW9uIG9mIG1pbmlzdHJ5IHByb2dyYW1tZXMgYW5kIHNjaGVtZXNcIixcbiAgLy8gICAgICAgXCJFbnN1cmUgZWZmZWN0aXZlIGNvb3JkaW5hdGlvbiB3aXRoIFN0YXRlIEdvdmVybm1lbnRzIGZvciBzY2hlbWUgaW1wbGVtZW50YXRpb25cIixcbiAgLy8gICAgICAgXCJTdHJhdGVnaWMgcG9saWN5IGZvcm11bGF0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvdmVyc2lnaHRcIixcbiAgLy8gICAgICAgXCJJbnRlci1taW5pc3RlcmlhbCBjb29yZGluYXRpb24gYW5kIGxpYWlzb25cIixcbiAgLy8gICAgICAgXCJQYXJsaWFtZW50YXJ5IGFmZmFpcnMgbWFuYWdlbWVudFwiLFxuICAvLyAgICAgICBcIlNlbmlvciBsZWFkZXJzaGlwIGdvdmVybmFuY2UgYW5kIG92ZXJzaWdodFwiLFxuICAvLyAgICAgICBcIk5hdGlvbmFsIHByb2dyYW1tZSBzdHJhdGVnaWMgZGlyZWN0aW9uXCIsXG4gIC8vICAgICAgIFwiQ2FiaW5ldCBub3RlIHdyaXRpbmcgYW5kIHBvbGljeSBicmllZnNcIlxuICAvLyAgICAgXSxcbiAgLy8gICAgIGJlaGF2aW9yYWxDb21wZXRlbmNpZXM6IFtcbiAgLy8gICAgICAgXCJTdHJhdGVnaWMgTGVhZGVyc2hpcFwiLCBcIkV4ZWN1dGl2ZSBQcmVzZW5jZVwiLCBcIkluZmx1ZW5jaW5nIGFuZCBOZWdvdGlhdGlvblwiLFxuICAvLyAgICAgICBcIlJlbGF0aW9uc2hpcCBNYW5hZ2VtZW50XCIsIFwiVmVyYmFsICYgTm9uLVZlcmJhbCBGbHVlbmN5XCIsIFwiUGxhbm5pbmcgJiBQcmlvcml0aXphdGlvblwiLFxuICAvLyAgICAgICBcIkFjY291bnRhYmlsaXR5XCIsIFwiQ29uZmxpY3QgTWFuYWdlbWVudFwiXG4gIC8vICAgICBdLFxuICAvLyAgICAgZnVuY3Rpb25hbENvbXBldGVuY2llczogW1xuICAvLyAgICAgICBcIlJ1bGVzIG9mIGJ1c2luZXNzIChBb0IvVG9CKVwiLCBcIkNhYmluZXQgbm90ZSB3cml0aW5nXCIsIFwiU3VibWlzc2lvbiBvZiBicmllZnMsIHN1cHBseSBvZiBpbmZvcm1hdGlvblwiLFxuICAvLyAgICAgICBcIlBvbGljeSBkZXNpZ24vIGFtZW5kbWVudFwiLCBcIlBvbGljeSBpbXBsZW1lbnRhdGlvblwiLCBcIlBvbGljeSBtb25pdG9yaW5nICYgaW1wYWN0IGFzc2Vzc21lbnRcIixcbiAgLy8gICAgICAgXCJQcm9qZWN0IFBsYW5uaW5nXCIsIFwiUHJvamVjdCBFdmFsdWF0aW9uICYgTW9uaXRvcmluZ1wiLCBcIkNyZWF0aW9uIG9mIE0mRSBGcmFtZXdvcmtcIixcbiAgLy8gICAgICAgXCJDaXRpemVuIFBhcnRuZXJpbmcgJiBDb2xsYWJvcmF0aW9uXCIsIFwiUHVibGljIEdyaWV2YW5jZSBIYW5kbGluZ1wiXG4gIC8vICAgICBdLFxuICAvLyAgICAgZG9tYWluQ29tcGV0ZW5jaWVzOiBbXG4gIC8vICAgICAgIFwiU3RyYXRlZ2ljIFBvbGljeSBGb3JtdWxhdGlvblwiLCBcIkludGVyLW1pbmlzdGVyaWFsICYgU3RhdGUgR292ZXJubWVudCBDb29yZGluYXRpb25cIixcbiAgLy8gICAgICAgXCJTZW5pb3IgTGVhZGVyc2hpcCBHb3Zlcm5hbmNlICYgT3ZlcnNpZ2h0XCIsIFwiTGVnaXNsYXRpdmUgJiBQYXJsaWFtZW50YXJ5IEFmZmFpcnMgTWFuYWdlbWVudFwiLFxuICAvLyAgICAgICBcIk5hdGlvbmFsIFByb2dyYW1tZSBTdHJhdGVnaWMgRGlyZWN0aW9uXCJcbiAgLy8gICAgIF0sXG4gIC8vICAgICBjb21wbGV0aW9uUmF0ZTogeyBiZWhhdmlvcmFsOiA4NSwgZnVuY3Rpb25hbDogNzgsIGRvbWFpbjogOTIgfVxuICAvLyAgIH1cbiAgLy8gXTtcblxuICAvLyAvLyBDYWxjdWxhdGUgdGhlIHRvdGFscyBkeW5hbWljYWxseVxuICAvLyBwcml2YXRlIGJlaGF2aW9yYWxUb3RhbCA9IHRoaXMuZGVzaWduYXRpb25EYXRhLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiBhY2MgKyBpdGVtLmJlaGF2aW9yYWxDb21wZXRlbmNpZXMubGVuZ3RoLCAwKTtcbiAgLy8gcHJpdmF0ZSBmdW5jdGlvbmFsVG90YWwgPSB0aGlzLmRlc2lnbmF0aW9uRGF0YS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjICsgaXRlbS5mdW5jdGlvbmFsQ29tcGV0ZW5jaWVzLmxlbmd0aCwgMCk7XG4gIC8vIHByaXZhdGUgZG9tYWluVG90YWwgPSB0aGlzLmRlc2lnbmF0aW9uRGF0YS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjICsgaXRlbS5kb21haW5Db21wZXRlbmNpZXMubGVuZ3RoLCAwKTtcblxuICAvLyAvLyBDYWxjdWxhdGUgdGhlIGF2ZXJhZ2VzIGR5bmFtaWNhbGx5XG4gIC8vIHByaXZhdGUgYmVoYXZpb3JhbEF2ZyA9IE1hdGgucm91bmQodGhpcy5kZXNpZ25hdGlvbkRhdGEucmVkdWNlKChhY2MsIGl0ZW0pID0+IGFjYyArIGl0ZW0uY29tcGxldGlvblJhdGUuYmVoYXZpb3JhbCwgMCkgLyB0aGlzLmRlc2lnbmF0aW9uRGF0YS5sZW5ndGgpO1xuICAvLyBwcml2YXRlIGZ1bmN0aW9uYWxBdmcgPSBNYXRoLnJvdW5kKHRoaXMuZGVzaWduYXRpb25EYXRhLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiBhY2MgKyBpdGVtLmNvbXBsZXRpb25SYXRlLmZ1bmN0aW9uYWwsIDApIC8gdGhpcy5kZXNpZ25hdGlvbkRhdGEubGVuZ3RoKTtcbiAgLy8gcHJpdmF0ZSBkb21haW5BdmcgPSBNYXRoLnJvdW5kKHRoaXMuZGVzaWduYXRpb25EYXRhLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiBhY2MgKyBpdGVtLmNvbXBsZXRpb25SYXRlLmRvbWFpbiwgMCkgLyB0aGlzLmRlc2lnbmF0aW9uRGF0YS5sZW5ndGgpO1xuXG4gIC8vIG92ZXJhbGxLUElzID0gW1xuICAvLyAgIHtcbiAgLy8gICAgIG5hbWU6ICdCZWhhdmlvcmFsIENvbXBldGVuY2llcycsXG4gIC8vICAgICB0b3RhbDogdGhpcy5iZWhhdmlvcmFsVG90YWwsXG4gIC8vICAgICBhdmdDb21wbGV0aW9uOiB0aGlzLmJlaGF2aW9yYWxBdmcsXG4gIC8vICAgICBjb2xvcjogJyMzQjgyRjYnLFxuICAvLyAgICAgYmdDb2xvcjogJ2JnLWJsdWUtNTAnLFxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgbmFtZTogJ0Z1bmN0aW9uYWwgQ29tcGV0ZW5jaWVzJyxcbiAgLy8gICAgIHRvdGFsOiB0aGlzLmZ1bmN0aW9uYWxUb3RhbCxcbiAgLy8gICAgIGF2Z0NvbXBsZXRpb246IHRoaXMuZnVuY3Rpb25hbEF2ZyxcbiAgLy8gICAgIGNvbG9yOiAnIzEwQjk4MScsXG4gIC8vICAgICBiZ0NvbG9yOiAnYmctZ3JlZW4tNTAnLFxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgbmFtZTogJ0RvbWFpbiBDb21wZXRlbmNpZXMnLFxuICAvLyAgICAgdG90YWw6IHRoaXMuZG9tYWluVG90YWwsXG4gIC8vICAgICBhdmdDb21wbGV0aW9uOiB0aGlzLmRvbWFpbkF2ZyxcbiAgLy8gICAgIGNvbG9yOiAnIzhCNUNGNicsXG4gIC8vICAgICBiZ0NvbG9yOiAnYmctcHVycGxlLTUwJyxcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIG5hbWU6ICdUb3RhbCBDb21wZXRlbmNpZXMnLFxuICAvLyAgICAgdG90YWw6IHRoaXMuYmVoYXZpb3JhbFRvdGFsICsgdGhpcy5mdW5jdGlvbmFsVG90YWwgKyB0aGlzLmRvbWFpblRvdGFsLFxuICAvLyAgICAgYXZnQ29tcGxldGlvbjogTWF0aC5yb3VuZCgodGhpcy5iZWhhdmlvcmFsQXZnICsgdGhpcy5mdW5jdGlvbmFsQXZnICsgdGhpcy5kb21haW5BdmcpIC8gMyksXG4gIC8vICAgICBjb2xvcjogJyM0QjU1NjMnLFxuICAvLyAgICAgYmdDb2xvcjogJ2JnLWdyYXktMjAwJyxcbiAgLy8gICB9XG4gIC8vIF07XG5cbiAgY2xvc2VEaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICB9XG5cbiAgY2FuY2VsRm9ybSgpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gIH1cblxuICBzYXZlUm9sZU1hcHBpbmcoKSB7XG5cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zb2xlLmxvZygndGhpcy5kYXRhJywgdGhpcy5kYXRhKVxuICAgIHRoaXMuanNvbkRhdGEgPSB0aGlzLmRhdGE/LnBheWxvYWRcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmRpYWxvZ0NvbnRlbnQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmRpYWxvZ0NvbnRlbnQubmF0aXZlRWxlbWVudC5zY3JvbGxUbyh7XG4gICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgICB9KTtcbiAgICAgIH0sIDUwMClcblxuICAgIH1cbiAgfVxuXG4gIGdldE1hcHBpbmdEYXRhKCkge1xuICAgIGNvbnNvbGUubG9nKCdoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iaicsIHRoaXMuc2hhcmVkU2VydmljZS5nZXRDYnBQbGFuc1dpdGhTZWxlY3RlZENvdXJzZXMoKSlcbiAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuc2JPcmdUeXBlID09PSAnbWluaXN0cnknKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgICBsZXQgc3RhdGVfY2VudGVyX2lkID0gdGhpcy5zaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllclxuXG4gICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudHM/Lmxlbmd0aCkge1xuXG4gICAgICAgIGxldCBkZXBhcnRtZW50X2lkID0gdGhpcy5zaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudHNcbiAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJvbGVNYXBwaW5nQnlTdGF0ZUNlbnRlckFuZERlcGFydG1lbnQoc3RhdGVfY2VudGVyX2lkLCBkZXBhcnRtZW50X2lkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB0aGlzLmpzb25EYXRhID0gcmVzO1xuICAgICAgICAgICAgdGhpcy50b3RhbENvbXBldGVuY2llT2JqID0geyB0b3RhbDogMCwgYmVoYXZpb3JhbDogMCwgZnVuY3Rpb25hbDogMCwgZG9tYWluOiAwIH07XG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGF0YSA9IFtdO1xuXG4gICAgICAgICAgICAvLyDinIUgR0xPQkFMIFVOSVFVRSBTRVRTIChmb3Igb3ZlcmFsbCB1bmlxdWUgY291bnQpXG4gICAgICAgICAgICBjb25zdCBnbG9iYWxUb3RhbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgY29uc3QgZ2xvYmFsQmVoYXZpb3JhbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgY29uc3QgZ2xvYmFsRnVuY3Rpb25hbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgY29uc3QgZ2xvYmFsRG9tYWluU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgICAgICAgLy8g4pyFIExPQ0FMIFVOSVFVRSBTRVRTIChwZXIgZGVzaWduYXRpb24pXG4gICAgICAgICAgICAgIGNvbnN0IHRvdGFsU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgICAgIGNvbnN0IGJlaGF2aW9yYWxTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgICAgY29uc3QgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWwgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZSA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBiZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZSA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBiZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGUgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25hbFNldEZvckRlbGl2ZXJ5TW9kZSA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZSA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBkb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZSA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBkb21haW5TZXRGb3JEZWxpdmVyeU1vZGUgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZSA9IFtdO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICAgICAgICBjb25zdCBkb21haW5TZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICAgICAgICBsZXQgY29tcGV0ZW5jaWVzT2JqID0geyB0b3RhbDogMCwgYmVoYXZpb3JhbDogMCwgZnVuY3Rpb25hbDogMCwgZG9tYWluOiAwIH07XG5cbiAgICAgICAgICAgICAgcmVzW2ldPy5jb21wZXRlbmNpZXM/LmZvckVhY2goYyA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0aGVtZSA9IChjPy50aGVtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViVGhlbWUgPSAoYz8uc3ViX3RoZW1lIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gKGM/LnR5cGUgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGVtZSAmJiAhc3ViVGhlbWUpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGAke3RoZW1lfS0ke3N1YlRoZW1lfWA7XG5cbiAgICAgICAgICAgICAgICAvLyDinIUgUEVSIERFU0lHTkFUSU9OIFVOSVFVRVxuICAgICAgICAgICAgICAgIGlmICghdG90YWxTZXQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgIHRvdGFsU2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICAgICAgY29tcGV0ZW5jaWVzT2JqLnRvdGFsKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdiZWhhdmlvcmFsJyAmJiAhYmVoYXZpb3JhbFNldC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldC5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsLnB1c2goYCR7Yz8ucHJvZmljaWVuY3lfbGV2ZWwgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlLnB1c2goYCR7Yz8uZGVsaXZlcnlfbW9kZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlLnB1c2goYCR7Yz8ucHJvZmljaWVuY3lfcmF0aW9uYWxlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZS5wdXNoKGAke2M/LmRlbGl2ZXJ5X21vZGVfcmF0aW9uYWxlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgY29tcGV0ZW5jaWVzT2JqLmJlaGF2aW9yYWwrKztcbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZnVuY3Rpb25hbCcgJiYgIWZ1bmN0aW9uYWxTZXQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbC5wdXNoKGAke2M/LnByb2ZpY2llbmN5X2xldmVsIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldEZvckRlbGl2ZXJ5TW9kZS5wdXNoKGAke2M/LmRlbGl2ZXJ5X21vZGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZS5wdXNoKGAke2M/LnByb2ZpY2llbmN5X3JhdGlvbmFsZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGUucHVzaChgJHtjPy5kZWxpdmVyeV9tb2RlX3JhdGlvbmFsZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGNvbXBldGVuY2llc09iai5mdW5jdGlvbmFsKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkb21haW4nICYmICFkb21haW5TZXQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgIGRvbWFpblNldC5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICAgIGRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWwucHVzaChgJHtjPy5wcm9maWNpZW5jeV9sZXZlbCB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZS5wdXNoKGAke2M/LmRlbGl2ZXJ5X21vZGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBkb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlLnB1c2goYCR7Yz8ucHJvZmljaWVuY3lfcmF0aW9uYWxlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgZG9tYWluU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlLnB1c2goYCR7Yz8uZGVsaXZlcnlfbW9kZV9yYXRpb25hbGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBjb21wZXRlbmNpZXNPYmouZG9tYWluKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8g4pyFIEdMT0JBTCBVTklRVUUgVFJBQ0tJTkdcbiAgICAgICAgICAgICAgICBnbG9iYWxUb3RhbFNldC5hZGQoa2V5KTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnYmVoYXZpb3JhbCcpIGdsb2JhbEJlaGF2aW9yYWxTZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdmdW5jdGlvbmFsJykgZ2xvYmFsRnVuY3Rpb25hbFNldC5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RvbWFpbicpIGdsb2JhbERvbWFpblNldC5hZGQoa2V5KTtcblxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBkZXNpZ25hdGlvbjogcmVzW2ldLmRlc2lnbmF0aW9uX25hbWUsXG4gICAgICAgICAgICAgICAgd2luZzogcmVzW2ldLndpbmdfZGl2aXNpb25fc2VjdGlvbixcbiAgICAgICAgICAgICAgICB1cGRhdGVkOiByZXNbaV0udXBkYXRlZF9hdCxcbiAgICAgICAgICAgICAgICByb2xlc1Jlc3BvbnNpYmlsaXRpZXM6IHJlc1tpXS5yb2xlX3Jlc3BvbnNpYmlsaXRpZXMsXG4gICAgICAgICAgICAgICAgYWN0aXZpdGllczogcmVzW2ldLmFjdGl2aXRpZXMsXG4gICAgICAgICAgICAgICAgY29tcGV0ZW5jaWVzT2JqLFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxDb21wZXRlbmNpZXM6IFsuLi5iZWhhdmlvcmFsU2V0XSxcbiAgICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbDogWy4uLmJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsXSxcbiAgICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlOiBbLi4uYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZV0sXG4gICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGU6IFsuLi5iZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZV0sXG4gICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZTogWy4uLmJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGVdLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsOiBbLi4uZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxdLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGU6IFsuLi5mdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlXSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZTogWy4uLmZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlXSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlOiBbLi4uZnVuY3Rpb25hbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZV0sXG4gICAgICAgICAgICAgICAgZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbDogWy4uLmRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWxdLFxuICAgICAgICAgICAgICAgIGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZTogWy4uLmRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZV0sXG4gICAgICAgICAgICAgICAgZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZTogWy4uLmRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGVdLFxuICAgICAgICAgICAgICAgIGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZTogWy4uLmRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZV0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25hbENvbXBldGVuY2llczogWy4uLmZ1bmN0aW9uYWxTZXRdLFxuICAgICAgICAgICAgICAgIGRvbWFpbkNvbXBldGVuY2llczogWy4uLmRvbWFpblNldF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb3Vyc2VzOiByZXNbaV0/LmNicF9wbGFucz8uYXQoLTEpPy5zZWxlY3RlZF9jb3Vyc2VzIHx8IFtdXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBTRVQgR0xPQkFMIENPVU5UUyBBRlRFUiBMT09QXG4gICAgICAgICAgICB0aGlzLnRvdGFsQ29tcGV0ZW5jaWVPYmoudG90YWwgPSBnbG9iYWxUb3RhbFNldC5zaXplO1xuICAgICAgICAgICAgdGhpcy50b3RhbENvbXBldGVuY2llT2JqLmJlaGF2aW9yYWwgPSBnbG9iYWxCZWhhdmlvcmFsU2V0LnNpemU7XG4gICAgICAgICAgICB0aGlzLnRvdGFsQ29tcGV0ZW5jaWVPYmouZnVuY3Rpb25hbCA9IGdsb2JhbEZ1bmN0aW9uYWxTZXQuc2l6ZTtcbiAgICAgICAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iai5kb21haW4gPSBnbG9iYWxEb21haW5TZXQuc2l6ZTtcblxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKVxuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5kZXNpZ25hdGlvbkRhdGEnLCB0aGlzLmRlc2lnbmF0aW9uRGF0YSlcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLnRvdGFsQ29tcGV0ZW5jaWVPYmonLCB0aGlzLnRvdGFsQ29tcGV0ZW5jaWVPYmopXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8uZGV0YWlsLCAnWCcsIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJvbGVNYXBwaW5nQnlTdGF0ZUNlbnRlcihzdGF0ZV9jZW50ZXJfaWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuanNvbkRhdGEgPSByZXM7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygncmVzJywgcmVzKVxuICAgICAgICAgICAgdGhpcy50b3RhbENvbXBldGVuY2llT2JqID0geyB0b3RhbDogMCwgYmVoYXZpb3JhbDogMCwgZnVuY3Rpb25hbDogMCwgZG9tYWluOiAwIH07XG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGF0YSA9IFtdO1xuXG4gICAgICAgICAgICAvLyDinIUgR0xPQkFMIFVOSVFVRSBTRVRTIChmb3Igb3ZlcmFsbCB1bmlxdWUgY291bnQpXG4gICAgICAgICAgICBjb25zdCBnbG9iYWxUb3RhbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgY29uc3QgZ2xvYmFsQmVoYXZpb3JhbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgY29uc3QgZ2xvYmFsRnVuY3Rpb25hbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgY29uc3QgZ2xvYmFsRG9tYWluU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgICAgICAgLy8g4pyFIExPQ0FMIFVOSVFVRSBTRVRTIChwZXIgZGVzaWduYXRpb24pXG4gICAgICAgICAgICAgIGNvbnN0IHRvdGFsU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgICAgIGNvbnN0IGJlaGF2aW9yYWxTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgICAgY29uc3QgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWwgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZSA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBiZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZSA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBiZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWwgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgZG9tYWluU2V0Rm9yRGVsaXZlcnlNb2RlID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGUgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgZG9tYWluU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGUgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGUgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25hbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZSA9IFtdO1xuICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbmFsU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgICAgIGNvbnN0IGRvbWFpblNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgICAgICAgIGxldCBjb21wZXRlbmNpZXNPYmogPSB7IHRvdGFsOiAwLCBiZWhhdmlvcmFsOiAwLCBmdW5jdGlvbmFsOiAwLCBkb21haW46IDAgfTtcblxuICAgICAgICAgICAgICByZXNbaV0/LmNvbXBldGVuY2llcz8uZm9yRWFjaChjID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRoZW1lID0gKGM/LnRoZW1lIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJUaGVtZSA9IChjPy5zdWJfdGhlbWUgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSAoYz8udHlwZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoZW1lICYmICFzdWJUaGVtZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYCR7dGhlbWV9LSR7c3ViVGhlbWV9YDtcblxuICAgICAgICAgICAgICAgIC8vIOKchSBQRVIgREVTSUdOQVRJT04gVU5JUVVFXG4gICAgICAgICAgICAgICAgaWYgKCF0b3RhbFNldC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgdG90YWxTZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgICBjb21wZXRlbmNpZXNPYmoudG90YWwrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2JlaGF2aW9yYWwnICYmICFiZWhhdmlvcmFsU2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWwucHVzaChgJHtjPy5wcm9maWNpZW5jeV9sZXZlbCB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGUucHVzaChgJHtjPy5kZWxpdmVyeV9tb2RlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGUucHVzaChgJHtjPy5wcm9maWNpZW5jeV9yYXRpb25hbGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlLnB1c2goYCR7Yz8uZGVsaXZlcnlfbW9kZV9yYXRpb25hbGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBjb21wZXRlbmNpZXNPYmouYmVoYXZpb3JhbCsrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZnVuY3Rpb25hbCcgJiYgIWZ1bmN0aW9uYWxTZXQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbC5wdXNoKGAke2M/LnByb2ZpY2llbmN5X2xldmVsIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGUucHVzaChgJHtjPy5wcm9maWNpZW5jeV9yYXRpb25hbGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlLnB1c2goYCR7Yz8uZGVsaXZlcnlfbW9kZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGUucHVzaChgJHtjPy5kZWxpdmVyeV9tb2RlX3JhdGlvbmFsZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGNvbXBldGVuY2llc09iai5mdW5jdGlvbmFsKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkb21haW4nICYmICFkb21haW5TZXQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgIGRvbWFpblNldC5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICAgIGRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWwucHVzaChgJHtjPy5wcm9maWNpZW5jeV9sZXZlbCB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICAgIGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZS5wdXNoKGAke2M/LmRlbGl2ZXJ5X21vZGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBkb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlLnB1c2goYCR7Yz8ucHJvZmljaWVuY3lfcmF0aW9uYWxlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgICAgZG9tYWluU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlLnB1c2goYCR7Yz8uZGVsaXZlcnlfbW9kZV9yYXRpb25hbGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgICBjb21wZXRlbmNpZXNPYmouZG9tYWluKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8g4pyFIEdMT0JBTCBVTklRVUUgVFJBQ0tJTkdcbiAgICAgICAgICAgICAgICBnbG9iYWxUb3RhbFNldC5hZGQoa2V5KTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnYmVoYXZpb3JhbCcpIGdsb2JhbEJlaGF2aW9yYWxTZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdmdW5jdGlvbmFsJykgZ2xvYmFsRnVuY3Rpb25hbFNldC5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RvbWFpbicpIGdsb2JhbERvbWFpblNldC5hZGQoa2V5KTtcblxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBkZXNpZ25hdGlvbjogcmVzW2ldLmRlc2lnbmF0aW9uX25hbWUsXG4gICAgICAgICAgICAgICAgd2luZzogcmVzW2ldLndpbmdfZGl2aXNpb25fc2VjdGlvbixcbiAgICAgICAgICAgICAgICB1cGRhdGVkOiByZXNbaV0udXBkYXRlZF9hdCxcbiAgICAgICAgICAgICAgICByb2xlc1Jlc3BvbnNpYmlsaXRpZXM6IHJlc1tpXS5yb2xlX3Jlc3BvbnNpYmlsaXRpZXMsXG4gICAgICAgICAgICAgICAgYWN0aXZpdGllczogcmVzW2ldLmFjdGl2aXRpZXMsXG4gICAgICAgICAgICAgICAgY29tcGV0ZW5jaWVzT2JqLFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxDb21wZXRlbmNpZXM6IFsuLi5iZWhhdmlvcmFsU2V0XSxcbiAgICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbDogWy4uLmJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsXSxcbiAgICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlOiBbLi4uYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZV0sXG4gICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGU6IFsuLi5iZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZV0sXG4gICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZTogWy4uLmJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGVdLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsOiBbLi4uZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxdLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGU6IFsuLi5mdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlXSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZTogWy4uLmZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlXSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlOiBbLi4uZnVuY3Rpb25hbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZV0sXG4gICAgICAgICAgICAgICAgZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbDogWy4uLmRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWxdLFxuICAgICAgICAgICAgICAgIGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZTogWy4uLmRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZV0sXG4gICAgICAgICAgICAgICAgZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZTogWy4uLmRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGVdLFxuICAgICAgICAgICAgICAgIGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZTogWy4uLmRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZV0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25hbENvbXBldGVuY2llczogWy4uLmZ1bmN0aW9uYWxTZXRdLFxuICAgICAgICAgICAgICAgIGRvbWFpbkNvbXBldGVuY2llczogWy4uLmRvbWFpblNldF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb3Vyc2VzOiByZXNbaV0/LmNicF9wbGFucz8uYXQoLTEpPy5zZWxlY3RlZF9jb3Vyc2VzIHx8IFtdXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmRlc2lnbmF0aW9uRGF0YScsIHRoaXMuZGVzaWduYXRpb25EYXRhKVxuXG4gICAgICAgICAgICAvLyDinIUgU0VUIEdMT0JBTCBDT1VOVFMgQUZURVIgTE9PUFxuICAgICAgICAgICAgdGhpcy50b3RhbENvbXBldGVuY2llT2JqLnRvdGFsID0gZ2xvYmFsVG90YWxTZXQuc2l6ZTtcbiAgICAgICAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iai5iZWhhdmlvcmFsID0gZ2xvYmFsQmVoYXZpb3JhbFNldC5zaXplO1xuICAgICAgICAgICAgdGhpcy50b3RhbENvbXBldGVuY2llT2JqLmZ1bmN0aW9uYWwgPSBnbG9iYWxGdW5jdGlvbmFsU2V0LnNpemU7XG4gICAgICAgICAgICB0aGlzLnRvdGFsQ29tcGV0ZW5jaWVPYmouZG9tYWluID0gZ2xvYmFsRG9tYWluU2V0LnNpemU7XG5cbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvVG9wKClcbiAgICAgICAgICAgIH0sIDEwMDApO1xuXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5kZXRhaWwsICdYJywge1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG5cblxuICAgIH1cbiAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuc2JPcmdUeXBlID09PSAnc3RhdGUnKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgICBjb25zb2xlLmxvZygndGhpcy5zaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmonLCB0aGlzLnNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iailcbiAgICAgIGxldCBzdGF0ZV9jZW50ZXJfaWQgPSB0aGlzLnNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5pZGVudGlmaWVyXG4gICAgICBsZXQgZGVwYXJ0bWVudF9pZCA9IHRoaXMuc2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzXG4gICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Um9sZU1hcHBpbmdCeVN0YXRlQ2VudGVyQW5kRGVwYXJ0bWVudChzdGF0ZV9jZW50ZXJfaWQsIGRlcGFydG1lbnRfaWQpLnN1YnNjcmliZSgocmVzKT0+e1xuICAgICAgLy8gICBjb25zb2xlLmxvZygncmVzJywgcmVzKVxuICAgICAgLy8gICBsZXQgYmVoYXZpb3JhbENvbXBldGVuY2llcyA9W11cbiAgICAgIC8vICAgbGV0IGZ1bmN0aW9uYWxDb21wZXRlbmNpZXMgPVtdXG4gICAgICAvLyAgIGxldCBkb21haW5Db21wZXRlbmNpZXMgPVtdXG4gICAgICAvLyAgIGZvcihsZXQgaT0wOyBpPHJlcy5sZW5ndGg7aSsrKSB7XG4gICAgICAvLyAgICBiZWhhdmlvcmFsQ29tcGV0ZW5jaWVzID0gW11cbiAgICAgIC8vICAgIGZ1bmN0aW9uYWxDb21wZXRlbmNpZXMgPVtdXG4gICAgICAvLyAgICBkb21haW5Db21wZXRlbmNpZXMgPVtdXG4gICAgICAvLyAgICBsZXQgY29tcGV0ZW5jaWVzT2JqID0ge3RvdGFsOjAsIGJlaGF2aW9yYWw6MCwgZnVuY3Rpb25hbDowLCBkb21haW46MH1cbiAgICAgIC8vICAgcmVzW2ldLmNvbXBldGVuY2llcy5mb3JFYWNoKGMgPT4ge1xuICAgICAgLy8gICAgY29tcGV0ZW5jaWVzT2JqLnRvdGFsKys7XG4gICAgICAvLyAgICB0aGlzLnRvdGFsQ29tcGV0ZW5jaWVPYmoudG90YWwrK1xuICAgICAgLy8gICAgIGlmIChjLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2JlaGF2aW9yYWwnKSB7IFxuXG4gICAgICAvLyAgICAgIGJlaGF2aW9yYWxDb21wZXRlbmNpZXMucHVzaChgJHtjLnRoZW1lfSAtICR7Yy5zdWJfdGhlbWV9YClcbiAgICAgIC8vICAgICAgY29tcGV0ZW5jaWVzT2JqLmJlaGF2aW9yYWwrKztcbiAgICAgIC8vICAgICAgdGhpcy50b3RhbENvbXBldGVuY2llT2JqLmJlaGF2aW9yYWwrK1xuICAgICAgLy8gICAgIH1cbiAgICAgIC8vICAgICBpZiAoYy50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICdmdW5jdGlvbmFsJykge1xuICAgICAgLy8gICAgICBmdW5jdGlvbmFsQ29tcGV0ZW5jaWVzLnB1c2goYCR7Yy50aGVtZX0gLSAke2Muc3ViX3RoZW1lfWApXG4gICAgICAvLyAgICAgIGNvbXBldGVuY2llc09iai5mdW5jdGlvbmFsKys7XG4gICAgICAvLyAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iai5mdW5jdGlvbmFsKytcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgICAgaWYgKGMudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnZG9tYWluJykgeyBcbiAgICAgIC8vICAgICAgZG9tYWluQ29tcGV0ZW5jaWVzLnB1c2goYCR7Yy50aGVtZX0gLSAke2Muc3ViX3RoZW1lfWApXG4gICAgICAvLyAgICAgIGNvbXBldGVuY2llc09iai5kb21haW4rKztcbiAgICAgIC8vICAgICAgdGhpcy50b3RhbENvbXBldGVuY2llT2JqLmRvbWFpbisrXG5cbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgIH0pO1xuICAgICAgLy8gICAgbGV0IG9iajphbnkgPSAge1xuICAgICAgLy8gICAgICBkZXNpZ25hdGlvbjogcmVzW2ldLmRlc2lnbmF0aW9uX25hbWUsXG4gICAgICAvLyAgICAgIHdpbmc6IHJlc1tpXS53aW5nX2RpdmlzaW9uX3NlY3Rpb24sXG4gICAgICAvLyAgICAgIHVwZGF0ZWQ6IHJlc1tpXS51cGRhdGVkX2F0LFxuICAgICAgLy8gICAgICByb2xlc1Jlc3BvbnNpYmlsaXRpZXM6IHJlc1tpXS5yb2xlX3Jlc3BvbnNpYmlsaXRpZXMsXG4gICAgICAvLyAgICAgIGFjdGl2aXRpZXM6cmVzW2ldLmFjdGl2aXRpZXMsXG4gICAgICAvLyAgICAgIGNvbXBldGVuY2llc09iajogY29tcGV0ZW5jaWVzT2JqLFxuICAgICAgLy8gICAgICBiZWhhdmlvcmFsQ29tcGV0ZW5jaWVzOiBiZWhhdmlvcmFsQ29tcGV0ZW5jaWVzLFxuICAgICAgLy8gICAgICBmdW5jdGlvbmFsQ29tcGV0ZW5jaWVzOiBmdW5jdGlvbmFsQ29tcGV0ZW5jaWVzLFxuICAgICAgLy8gICAgICBkb21haW5Db21wZXRlbmNpZXM6IGRvbWFpbkNvbXBldGVuY2llc1xuICAgICAgLy8gICAgICAvLyBiZWhhdmlvcmFsQ29tcGV0ZW5jaWVzOiBbXG4gICAgICAvLyAgICAgIC8vICAgXCJTdHJhdGVnaWMgTGVhZGVyc2hpcFwiLCBcIkV4ZWN1dGl2ZSBQcmVzZW5jZVwiLCBcIkluZmx1ZW5jaW5nIGFuZCBOZWdvdGlhdGlvblwiLFxuICAgICAgLy8gICAgICAvLyAgIFwiUmVsYXRpb25zaGlwIE1hbmFnZW1lbnRcIiwgXCJWZXJiYWwgJiBOb24tVmVyYmFsIEZsdWVuY3lcIiwgXCJQbGFubmluZyAmIFByaW9yaXRpemF0aW9uXCIsXG4gICAgICAvLyAgICAgIC8vICAgXCJBY2NvdW50YWJpbGl0eVwiLCBcIkNvbmZsaWN0IE1hbmFnZW1lbnRcIlxuICAgICAgLy8gICAgICAvLyBdLFxuICAgICAgLy8gICAgICAvLyBmdW5jdGlvbmFsQ29tcGV0ZW5jaWVzOiBbXG4gICAgICAvLyAgICAgIC8vICAgXCJSdWxlcyBvZiBidXNpbmVzcyAoQW9CL1RvQilcIiwgXCJDYWJpbmV0IG5vdGUgd3JpdGluZ1wiLCBcIlN1Ym1pc3Npb24gb2YgYnJpZWZzLCBzdXBwbHkgb2YgaW5mb3JtYXRpb25cIixcbiAgICAgIC8vICAgICAgLy8gICBcIlBvbGljeSBkZXNpZ24vIGFtZW5kbWVudFwiLCBcIlBvbGljeSBpbXBsZW1lbnRhdGlvblwiLCBcIlBvbGljeSBtb25pdG9yaW5nICYgaW1wYWN0IGFzc2Vzc21lbnRcIixcbiAgICAgIC8vICAgICAgLy8gICBcIlByb2plY3QgUGxhbm5pbmdcIiwgXCJQcm9qZWN0IEV2YWx1YXRpb24gJiBNb25pdG9yaW5nXCIsIFwiQ3JlYXRpb24gb2YgTSZFIEZyYW1ld29ya1wiLFxuICAgICAgLy8gICAgICAvLyAgIFwiQ2l0aXplbiBQYXJ0bmVyaW5nICYgQ29sbGFib3JhdGlvblwiLCBcIlB1YmxpYyBHcmlldmFuY2UgSGFuZGxpbmdcIlxuICAgICAgLy8gICAgICAvLyBdLFxuICAgICAgLy8gICAgICAvLyBkb21haW5Db21wZXRlbmNpZXM6IFtcbiAgICAgIC8vICAgICAgLy8gICBcIlN0cmF0ZWdpYyBQb2xpY3kgRm9ybXVsYXRpb25cIiwgXCJJbnRlci1taW5pc3RlcmlhbCAmIFN0YXRlIEdvdmVybm1lbnQgQ29vcmRpbmF0aW9uXCIsXG4gICAgICAvLyAgICAgIC8vICAgXCJTZW5pb3IgTGVhZGVyc2hpcCBHb3Zlcm5hbmNlICYgT3ZlcnNpZ2h0XCIsIFwiTGVnaXNsYXRpdmUgJiBQYXJsaWFtZW50YXJ5IEFmZmFpcnMgTWFuYWdlbWVudFwiLFxuICAgICAgLy8gICAgICAvLyAgIFwiTmF0aW9uYWwgUHJvZ3JhbW1lIFN0cmF0ZWdpYyBEaXJlY3Rpb25cIlxuICAgICAgLy8gICAgICAvLyBdLFxuICAgICAgLy8gICAgICAvLyBjb21wbGV0aW9uUmF0ZTogeyBiZWhhdmlvcmFsOiA4NSwgZnVuY3Rpb25hbDogNzgsIGRvbWFpbjogOTIgfVxuICAgICAgLy8gICAgfVxuXG5cbiAgICAgIC8vICAgdGhpcy5kZXNpZ25hdGlvbkRhdGEucHVzaChvYmopXG4gICAgICAvLyAgIH1cbiAgICAgIC8vICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKVxuICAgICAgLy8gICB9LCAxMDAwKTtcbiAgICAgIC8vICAgY29uc29sZS5sb2coJ3RoaXMuZGVzaWduYXRpb25EYXRhJywgdGhpcy5kZXNpZ25hdGlvbkRhdGEpXG4gICAgICAvLyAgIGNvbnNvbGUubG9nKCd0aGlzLnRvdGFsQ29tcGV0ZW5jaWVPYmonLCB0aGlzLnRvdGFsQ29tcGV0ZW5jaWVPYmogKVxuXG4gICAgICAvLyAgfSlcbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRSb2xlTWFwcGluZ0J5U3RhdGVDZW50ZXJBbmREZXBhcnRtZW50KHN0YXRlX2NlbnRlcl9pZCwgZGVwYXJ0bWVudF9pZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5qc29uRGF0YSA9IHJlcztcbiAgICAgICAgICBjb25zb2xlLmxvZygncmVzJywgcmVzKVxuICAgICAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iaiA9IHsgdG90YWw6IDAsIGJlaGF2aW9yYWw6IDAsIGZ1bmN0aW9uYWw6IDAsIGRvbWFpbjogMCB9O1xuICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25EYXRhID0gW107XG5cbiAgICAgICAgICAvLyDinIUgR0xPQkFMIFVOSVFVRSBTRVRTIChmb3Igb3ZlcmFsbCB1bmlxdWUgY291bnQpXG4gICAgICAgICAgY29uc3QgZ2xvYmFsVG90YWxTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICBjb25zdCBnbG9iYWxCZWhhdmlvcmFsU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgY29uc3QgZ2xvYmFsRnVuY3Rpb25hbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgIGNvbnN0IGdsb2JhbERvbWFpblNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICAgICAgLy8g4pyFIExPQ0FMIFVOSVFVRSBTRVRTIChwZXIgZGVzaWduYXRpb24pXG4gICAgICAgICAgICBjb25zdCB0b3RhbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgY29uc3QgYmVoYXZpb3JhbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgY29uc3QgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWwgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlID0gW107XG4gICAgICAgICAgICBjb25zdCBiZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlID0gW107XG4gICAgICAgICAgICBjb25zdCBiZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlID0gW107XG4gICAgICAgICAgICBjb25zdCBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbCA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGUgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGUgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGUgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWwgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGUgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZG9tYWluU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIGNvbnN0IGRvbWFpblNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgICAgICBsZXQgY29tcGV0ZW5jaWVzT2JqID0geyB0b3RhbDogMCwgYmVoYXZpb3JhbDogMCwgZnVuY3Rpb25hbDogMCwgZG9tYWluOiAwIH07XG5cbiAgICAgICAgICAgIHJlc1tpXT8uY29tcGV0ZW5jaWVzPy5mb3JFYWNoKGMgPT4ge1xuXG4gICAgICAgICAgICAgIGNvbnN0IHRoZW1lID0gKGM/LnRoZW1lIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgY29uc3Qgc3ViVGhlbWUgPSAoYz8uc3ViX3RoZW1lIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IChjPy50eXBlIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgICBpZiAoIXRoZW1lICYmICFzdWJUaGVtZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGtleSA9IGAke3RoZW1lfS0ke3N1YlRoZW1lfWA7XG5cbiAgICAgICAgICAgICAgLy8g4pyFIFBFUiBERVNJR05BVElPTiBVTklRVUVcbiAgICAgICAgICAgICAgaWYgKCF0b3RhbFNldC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRvdGFsU2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICAgIGNvbXBldGVuY2llc09iai50b3RhbCsrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdiZWhhdmlvcmFsJyAmJiAhYmVoYXZpb3JhbFNldC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGJlaGF2aW9yYWxTZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWwucHVzaChgJHtjPy5wcm9maWNpZW5jeV9sZXZlbCB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlLnB1c2goYCR7Yz8uZGVsaXZlcnlfbW9kZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZS5wdXNoKGAke2M/LnByb2ZpY2llbmN5X2xldmVsX3JhdGlvbmFsZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlLnB1c2goYCR7Yz8uZGVsaXZlcnlfbW9kZV9yYXRpb25hbGUgfHwgJyd9YCk7XG5cbiAgICAgICAgICAgICAgICBjb21wZXRlbmNpZXNPYmouYmVoYXZpb3JhbCsrO1xuICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uYWwnICYmICFmdW5jdGlvbmFsU2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldC5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbC5wdXNoKGAke2M/LnByb2ZpY2llbmN5X2xldmVsIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGUucHVzaChgJHtjPy5kZWxpdmVyeV9tb2RlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlLnB1c2goYCR7Yz8ucHJvZmljaWVuY3lfbGV2ZWxfcmF0aW9uYWxlIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGUucHVzaChgJHtjPy5kZWxpdmVyeV9tb2RlX3JhdGlvbmFsZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICBjb21wZXRlbmNpZXNPYmouZnVuY3Rpb25hbCsrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkb21haW4nICYmICFkb21haW5TZXQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBkb21haW5TZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbC5wdXNoKGAke2M/LnByb2ZpY2llbmN5X2xldmVsIHx8ICcnfWApO1xuICAgICAgICAgICAgICAgIGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZS5wdXNoKGAke2M/LmRlbGl2ZXJ5X21vZGUgfHwgJyd9YCk7XG4gICAgICAgICAgICAgICAgZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZS5wdXNoKGAke2M/LnByb2ZpY2llbmN5X2xldmVsX3JhdGlvbmFsZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICBkb21haW5TZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGUucHVzaChgJHtjPy5kZWxpdmVyeV9tb2RlX3JhdGlvbmFsZSB8fCAnJ31gKTtcbiAgICAgICAgICAgICAgICBjb21wZXRlbmNpZXNPYmouZG9tYWluKys7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyDinIUgR0xPQkFMIFVOSVFVRSBUUkFDS0lOR1xuICAgICAgICAgICAgICBnbG9iYWxUb3RhbFNldC5hZGQoa2V5KTtcblxuICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2JlaGF2aW9yYWwnKSBnbG9iYWxCZWhhdmlvcmFsU2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uYWwnKSBnbG9iYWxGdW5jdGlvbmFsU2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RvbWFpbicpIGdsb2JhbERvbWFpblNldC5hZGQoa2V5KTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25EYXRhLnB1c2goe1xuICAgICAgICAgICAgICBkZXNpZ25hdGlvbjogcmVzW2ldLmRlc2lnbmF0aW9uX25hbWUsXG4gICAgICAgICAgICAgIHdpbmc6IHJlc1tpXS53aW5nX2RpdmlzaW9uX3NlY3Rpb24sXG4gICAgICAgICAgICAgIHVwZGF0ZWQ6IHJlc1tpXS51cGRhdGVkX2F0LFxuICAgICAgICAgICAgICByb2xlc1Jlc3BvbnNpYmlsaXRpZXM6IHJlc1tpXS5yb2xlX3Jlc3BvbnNpYmlsaXRpZXMsXG4gICAgICAgICAgICAgIGFjdGl2aXRpZXM6IHJlc1tpXS5hY3Rpdml0aWVzLFxuICAgICAgICAgICAgICBjb21wZXRlbmNpZXNPYmosXG4gICAgICAgICAgICAgIGJlaGF2aW9yYWxDb21wZXRlbmNpZXM6IFsuLi5iZWhhdmlvcmFsU2V0XSxcbiAgICAgICAgICAgICAgZnVuY3Rpb25hbENvbXBldGVuY2llczogWy4uLmZ1bmN0aW9uYWxTZXRdLFxuICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbDogWy4uLmJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsXSxcbiAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZTogWy4uLmJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGVdLFxuICAgICAgICAgICAgICBiZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZTogWy4uLmJlaGF2aW9yYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlXSxcbiAgICAgICAgICAgICAgYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZTogWy4uLmJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGVdLFxuICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZTogWy4uLmZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlXSxcbiAgICAgICAgICAgICAgZnVuY3Rpb25hbFNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZTogWy4uLmZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGVdLFxuICAgICAgICAgICAgICBkb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsUmF0aW9uYWxlOiBbLi4uZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZV0sXG4gICAgICAgICAgICAgIGRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZTogWy4uLmRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVJhdGlvbmFsZV0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsOiBbLi4uZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxdLFxuICAgICAgICAgICAgICBmdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlOiBbLi4uZnVuY3Rpb25hbFNldEZvckRlbGl2ZXJ5TW9kZV0sXG4gICAgICAgICAgICAgIGRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWw6IFsuLi5kb21haW5TZXRGb3JQcm9maWNpZW5jeUxldmVsXSxcbiAgICAgICAgICAgICAgZG9tYWluU2V0Rm9yRGVsaXZlcnlNb2RlOiBbLi4uZG9tYWluU2V0Rm9yRGVsaXZlcnlNb2RlXSxcbiAgICAgICAgICAgICAgZG9tYWluQ29tcGV0ZW5jaWVzOiBbLi4uZG9tYWluU2V0XSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRDb3Vyc2VzOiByZXNbaV0/LmNicF9wbGFucz8uYXQoLTEpPy5zZWxlY3RlZF9jb3Vyc2VzIHx8IFtdXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIH0gXG5cbiAgICAgICAgICAvLyDinIUgU0VUIEdMT0JBTCBDT1VOVFMgQUZURVIgTE9PUFxuICAgICAgICAgIHRoaXMudG90YWxDb21wZXRlbmNpZU9iai50b3RhbCA9IGdsb2JhbFRvdGFsU2V0LnNpemU7XG4gICAgICAgICAgdGhpcy50b3RhbENvbXBldGVuY2llT2JqLmJlaGF2aW9yYWwgPSBnbG9iYWxCZWhhdmlvcmFsU2V0LnNpemU7XG4gICAgICAgICAgdGhpcy50b3RhbENvbXBldGVuY2llT2JqLmZ1bmN0aW9uYWwgPSBnbG9iYWxGdW5jdGlvbmFsU2V0LnNpemU7XG4gICAgICAgICAgdGhpcy50b3RhbENvbXBldGVuY2llT2JqLmRvbWFpbiA9IGdsb2JhbERvbWFpblNldC5zaXplO1xuXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG5cbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvVG9wKClcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5kZXNpZ25hdGlvbkRhdGEnLCB0aGlzLmRlc2lnbmF0aW9uRGF0YSlcbiAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy50b3RhbENvbXBldGVuY2llT2JqJywgdGhpcy50b3RhbENvbXBldGVuY2llT2JqKVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5kZXRhaWwsICdYJywge1xuICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG5cblxuICB9XG4gIGdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlOiBzdHJpbmcsIGNvdXJzZTogYW55KTogYW55W10ge1xuICAgIGlmICghY291cnNlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IGNvbXBldGVuY2llczogYW55W10gPSBbXTtcblxuICAgIC8vIEFJIFJlY29tbWVuZGVkIC8gUHVibGljIC8gVXNlciBBZGRlZFxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXMpKSB7XG4gICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzO1xuICAgIH1cbiAgICAvLyBNYW51YWxseSBTdWdnZXN0ZWQgLSBpR09UICh2NilcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXNfdjYpKSB7XG4gICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2O1xuICAgIH1cblxuICAgIGlmICghY29tcGV0ZW5jaWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgIHJldHVybiBjb21wZXRlbmNpZXMuZmlsdGVyKGMgPT4ge1xuICAgICAgaWYgKCFjPy5jb21wZXRlbmN5QXJlYU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcmVhID0gYy5jb21wZXRlbmN5QXJlYU5hbWUudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgIC8vIGhhbmRsZSBiZWhhdmlvdXJhbCAvIGJlaGF2aW9yYWxcbiAgICAgIGlmIChub3JtYWxpemVkVHlwZSA9PT0gJ2JlaGF2aW91cmFsJyB8fCBub3JtYWxpemVkVHlwZSA9PT0gJ2JlaGF2aW9yYWwnKSB7XG4gICAgICAgIHJldHVybiBhcmVhID09PSAnYmVoYXZpb3VyYWwnIHx8IGFyZWEgPT09ICdiZWhhdmlvcmFsJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFyZWEgPT09IG5vcm1hbGl6ZWRUeXBlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0RGlzcGxheWVkQ29tcGV0ZW5jaWVzKHR5cGU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGFueVtdIHtcbiAgICBjb25zdCBjb21wZXRlbmNpZXMgPSB0aGlzLmdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlLCBpbmRleCk7XG4gICAgY29uc3Qga2V5ID0gYCR7aW5kZXh9LSR7dHlwZX1gO1xuXG4gICAgaWYgKHRoaXMuZXhwYW5kZWRDb21wZXRlbmNpZXNba2V5XSkge1xuICAgICAgcmV0dXJuIGNvbXBldGVuY2llcztcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGV0ZW5jaWVzLnNsaWNlKDAsIDIpO1xuICB9XG5cbiAgdG9nZ2xlQ29tcGV0ZW5jaWVzKHR5cGU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGAke2luZGV4fS0ke3R5cGV9YDtcbiAgICB0aGlzLmV4cGFuZGVkQ29tcGV0ZW5jaWVzW2tleV0gPSAhdGhpcy5leHBhbmRlZENvbXBldGVuY2llc1trZXldO1xuICB9XG5cbiAgaXNFeHBhbmRlZCh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSBgJHtpbmRleH0tJHt0eXBlfWA7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRDb21wZXRlbmNpZXNba2V5XSB8fCBmYWxzZTtcbiAgfVxuXG4gIGhhc01vcmVUaGFuVHdvKHR5cGU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlLCBpbmRleCkubGVuZ3RoID4gMjtcbiAgfVxuICBnZXRSZW1haW5pbmdDb3VudCh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsQ291bnQgPSB0aGlzLmdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlLCBpbmRleCkubGVuZ3RoO1xuICAgIHJldHVybiB0b3RhbENvdW50IC0gMjtcbiAgfVxuICB1cGRhdGVDb21wZXRlbmN5Q291bnRzKCkge1xuICAgIC8vIGNvbnN0IGNvbXBzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZTtcbiAgICB0aGlzLmNvbXBldGVuY2llc0NvdW50ID0geyB0b3RhbDogMCwgcHVibGljX2NvdXJzZXM6IDAsIGlnb3Q6IDAgfTtcbiAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzLmZvckVhY2goYyA9PiB7XG4gICAgICB0aGlzLmNvbXBldGVuY2llc0NvdW50LnRvdGFsKys7XG4gICAgICBpZiAoYy5pc19wdWJsaWMpIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQucHVibGljX2NvdXJzZXMrKztcbiAgICAgIGlmICghYy5pc19wdWJsaWMpIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQuaWdvdCsrO1xuICAgIH0pO1xuICB9XG5cbiAgY29uZmlybURlbGV0ZUNvdXJzZShpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCByb2xlTWFwcGluZ0lkID0gdGhpcy5yZWNvbW1lbmRlZF9jb3Vyc2VfaWQ7XG4gICAgY29uc3QgY291cnNlSWRlbnRpZmllciA9XG4gICAgICBpdGVtPy5jb3Vyc2VfaWRlbnRpZmllciB8fCBpdGVtPy5pZCB8fCBpdGVtPy5pZGVudGlmaWVyO1xuXG4gICAgaWYgKCFyb2xlTWFwcGluZ0lkIHx8ICFjb3Vyc2VJZGVudGlmaWVyKSB7XG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1VuYWJsZSB0byBkZWxldGUgY291cnNlJywgJ1gnLCB7XG4gICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2VcbiAgICAgIC5kZWxldGVSZWNvbW1lbmRlZENvdXJzZShyb2xlTWFwcGluZ0lkLCBjb3Vyc2VJZGVudGlmaWVyKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBSZW1vdmUgZnJvbSBVSVxuICAgICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICAgIC8vIFVwZGF0ZSBjb3VudHNcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKTtcblxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDb3Vyc2UgZGVsZXRlZCBzdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgICAgICAgZXJyb3I/LmVycm9yPy5kZXRhaWwgfHwgJ0ZhaWxlZCB0byBkZWxldGUgY291cnNlJyxcbiAgICAgICAgICAgICdYJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlQ2FyZChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zb2xlLmxvZyhcIml0ZW0sIGluZGV4XCIsIGl0ZW0sIGluZGV4KVxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRGVsZXRlUm9sZU1hcHBpbmdQb3B1cENvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc2MDBweCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHBsYW5JZDogdGhpcy5wbGFuRGF0YT8uaWQsICAgLy8gcm9sZSBtYXBwaW5nIGlkXG4gICAgICAgIGNvdXJzZTogaXRlbSwgICAgICAgICAgICAgICAgLy8gY291cnNlIG9iamVjdFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGZyb206ICd2aWV3Q291cnNlJyAgICAgICAgICAgICAgICAgLy8gaW5kZXggZm9yIFVJIHJlbW92YWxcbiAgICAgIH0sXG4gICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICBtaW5IZWlnaHQ6ICczMDBweCcsXG4gICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgIHRoaXMuY29uZmlybURlbGV0ZUNvdXJzZShpdGVtLCBpbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgc2Nyb2xsVG9Ub3AoKTogdm9pZCB7XG5cbiAgICAvLyBpZiAodGhpcy5wZGZDb250ZW50ICYmIHRoaXMucGRmQ29udGVudC5uYXRpdmVFbGVtZW50ICYmIHRoaXMucGRmQ29udGVudC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gICB0aGlzLnBkZkNvbnRlbnQubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAvLyB9XG4gICAgLy8gY29uc3QgZGlhbG9nQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWF0LWRpYWxvZy1jb250YWluZXInKTtcbiAgICAvLyBpZiAoZGlhbG9nQ29udGFpbmVyKSB7XG4gICAgLy8gICBkaWFsb2dDb250YWluZXIuc2Nyb2xsVG9wID0gMDtcbiAgICAvLyB9XG4gIH1cblxuICBkb3dubG9hZFBERigpIHtcbiAgICB0aGlzLnBkZlRyaWdnZXIgPSB0cnVlXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAvLyAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBkZkNvbnRlbnQubmF0aXZlRWxlbWVudDtcblxuICAgIC8vIC8vIFdhaXQgZm9yIGltYWdlcyB0byBsb2FkXG4gICAgLy8gY29uc3QgaW1hZ2VzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbWcnKTtcbiAgICAvLyBjb25zdCBwcm9taXNlcyA9IEFycmF5LmZyb20oaW1hZ2VzKS5tYXAoKGltZzogSFRNTEltYWdlRWxlbWVudCkgPT4ge1xuICAgIC8vICAgaWYgKGltZy5jb21wbGV0ZSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIC8vICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gaW1nLm9ubG9hZCA9IHJlc29sdmUpO1xuICAgIC8vIH0pO1xuXG4gICAgLy8gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgIC8vICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAvLyAgICAgbWFyZ2luOiAwLjUsXG4gICAgLy8gICAgIGZpbGVuYW1lOiAnRmluYWwgQ0JQIFBsYW4ucGRmJyxcbiAgICAvLyAgICAgaW1hZ2U6IHsgdHlwZTogJ2pwZWcnLCBxdWFsaXR5OiAwLjk4IH0sXG4gICAgLy8gICAgIGh0bWwyY2FudmFzOiB7XG4gICAgLy8gICAgICAgc2NhbGU6IDIsXG4gICAgLy8gICAgICAgdXNlQ09SUzogdHJ1ZSxcbiAgICAvLyAgICAgICBzY3JvbGxZOiAwLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBqc1BERjoge1xuICAgIC8vICAgICAgIHVuaXQ6ICdpbicsXG4gICAgLy8gICAgICAgZm9ybWF0OiAnYTQnLFxuICAgIC8vICAgICAgIG9yaWVudGF0aW9uOiAncG9ydHJhaXQnXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHBhZ2VicmVhazoge1xuICAgIC8vICAgICAgIG1vZGU6IFsnY3NzJywgJ2xlZ2FjeScsICdhdm9pZC1hbGwnXVxuICAgIC8vICAgICB9XG4gICAgLy8gICB9O1xuXG4gICAgLy8gICBodG1sMnBkZigpLmZyb20oZWxlbWVudCkuc2V0KG9wdGlvbnMpLnNhdmUoKTtcbiAgICAvLyB9KTtcbiAgICAvL2NvbnN0IGVsZW1lbnQgPSB0aGlzLnBkZkNvbnRlbnQubmF0aXZlRWxlbWVudDtcblxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGRmQ29udGVudC5uYXRpdmVFbGVtZW50O1xuICAgIGh0bWwyY2FudmFzKGVsZW1lbnQsIHtcbiAgICAgIHNjYWxlOiAxLjI1LFxuICAgICAgdXNlQ09SUzogdHJ1ZSxcbiAgICAgIHNjcm9sbFk6IDAsXG4gICAgICBsb2dnaW5nOiB0cnVlLFxuICAgIH0pLnRoZW4oKGNhbnZhcykgPT4ge1xuICAgICAgY29uc3QgcGRmID0gbmV3IGpzUERGKCdwJywgJ21tJywgJ2E0Jyk7XG4gICAgICBjb25zdCBwZGZXaWR0aCA9IHBkZi5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRXaWR0aCgpO1xuICAgICAgY29uc3QgcGRmSGVpZ2h0ID0gcGRmLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpO1xuXG4gICAgICAvLyBNYXJnaW5zXG4gICAgICBjb25zdCBtYXJnaW5MZWZ0ID0gNTtcbiAgICAgIGNvbnN0IG1hcmdpblRvcCA9IDE1O1xuICAgICAgY29uc3QgbWFyZ2luUmlnaHQgPSA1O1xuICAgICAgY29uc3QgbWFyZ2luQm90dG9tID0gMTU7XG5cbiAgICAgIGNvbnN0IHVzYWJsZVdpZHRoID0gcGRmV2lkdGggLSBtYXJnaW5MZWZ0IC0gbWFyZ2luUmlnaHQ7XG4gICAgICBjb25zdCB1c2FibGVIZWlnaHQgPSBwZGZIZWlnaHQgLSBtYXJnaW5Ub3AgLSBtYXJnaW5Cb3R0b207XG5cbiAgICAgIGNvbnN0IGNhbnZhc1dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgICAgY29uc3QgY2FudmFzSGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgICAgY29uc3QgcmF0aW8gPSBjYW52YXNXaWR0aCAvIHVzYWJsZVdpZHRoO1xuICAgICAgY29uc3QgcGFnZUhlaWdodFB4ID0gdXNhYmxlSGVpZ2h0ICogcmF0aW87XG5cbiAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLmNlaWwoY2FudmFzSGVpZ2h0IC8gcGFnZUhlaWdodFB4KTtcblxuICAgICAgZm9yIChsZXQgcGFnZSA9IDA7IHBhZ2UgPCB0b3RhbFBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgY29uc3QgY2FudmFzUGFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXNQYWdlLndpZHRoID0gY2FudmFzV2lkdGg7XG4gICAgICAgIGNhbnZhc1BhZ2UuaGVpZ2h0ID0gTWF0aC5taW4ocGFnZUhlaWdodFB4LCBjYW52YXNIZWlnaHQgLSBwYWdlICogcGFnZUhlaWdodFB4KTtcblxuICAgICAgICBjb25zdCBjdHggPSBjYW52YXNQYWdlLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyNmZmZmZmYnO1xuICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBjYW52YXNQYWdlLndpZHRoLCBjYW52YXNQYWdlLmhlaWdodCk7XG5cbiAgICAgICAgICBjdHguZHJhd0ltYWdlKFxuICAgICAgICAgICAgY2FudmFzLFxuICAgICAgICAgICAgMCwgcGFnZSAqIHBhZ2VIZWlnaHRQeCxcbiAgICAgICAgICAgIGNhbnZhc1dpZHRoLCBjYW52YXNQYWdlLmhlaWdodCxcbiAgICAgICAgICAgIDAsIDAsXG4gICAgICAgICAgICBjYW52YXNXaWR0aCwgY2FudmFzUGFnZS5oZWlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW1nRGF0YSA9IGNhbnZhc1BhZ2UudG9EYXRhVVJMKCdpbWFnZS9wbmcnLCAxKTtcbiAgICAgICAgaWYgKHBhZ2UgPiAwKSBwZGYuYWRkUGFnZSgpO1xuICAgICAgICBjb25zdCBpbWdIZWlnaHRNTSA9IGNhbnZhc1BhZ2UuaGVpZ2h0IC8gcmF0aW87XG4gICAgICAgIHBkZi5hZGRJbWFnZShpbWdEYXRhLCAnUE5HJywgbWFyZ2luTGVmdCwgbWFyZ2luVG9wLCB1c2FibGVXaWR0aCwgaW1nSGVpZ2h0TU0pO1xuICAgICAgfVxuXG4gICAgICBwZGYuc2F2ZSgnRmluYWxfQ0JQLnBkZicpO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdQREYgZ2VuZXJhdGlvbiBlcnJvcjonLCBlcnJvcik7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB9KTtcblxuXG5cblxuXG5cblxuICB9XG5cbiAgZG93bmxvYWRQREZOZXcoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBkZkNvbnRlbnQubmF0aXZlRWxlbWVudDtcblxuICAgIGNvbnN0IG9wdCA9IHtcbiAgICAgIG1hcmdpbjogWzEwLCA1LCA1LCAxMF0sIC8vIHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCBpbiBtbVxuICAgICAgZmlsZW5hbWU6ICdDQlBfUGxhbi5wZGYnLFxuICAgICAgaW1hZ2U6IHsgdHlwZTogJ2pwZWcnLCBxdWFsaXR5OiAwLjg1IH0sXG4gICAgICBodG1sMmNhbnZhczogeyBzY2FsZTogMS41LCB1c2VDT1JTOiB0cnVlLCBsb2dnaW5nOiBmYWxzZSB9LFxuICAgICAganNQREY6IHsgdW5pdDogJ21tJywgZm9ybWF0OiAnYTQnLCBvcmllbnRhdGlvbjogJ2xhbmRzY2FwZScgfSxcbiAgICAgIHBhZ2VicmVhazogeyBtb2RlOiBbJ2F2b2lkLWFsbCcsICdjc3MnLCAnbGVnYWN5J10gfSAvLyBhdm9pZCBjdXR0aW5nIHRleHRcbiAgICB9O1xuXG4gICAgaHRtbDJwZGYoKVxuICAgICAgLnNldChvcHQpXG4gICAgICAuZnJvbShlbGVtZW50KVxuICAgICAgLnNhdmUoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBQREYgZG93bmxvYWQgZmluaXNoZWRcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgLy8gSGFuZGxlIGVycm9ycyBhbmQgc3RvcCBsb2FkaW5nXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIH0sIDIwMDApO1xuXG5cblxuICB9XG5cblxuXG4gIGdlbmVyYXRlRXhjZWwoanNvbkFycmF5OiBhbnlbXSwgZmlsZW5hbWU6IHN0cmluZyA9IFwiZmluYWwueGxzeFwiKSB7XG4gICAgaWYgKCFqc29uQXJyYXkgfHwganNvbkFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZXhjZWxDZWxsVGV4dExpbWl0ID0gMzIwMDA7XG5cbiAgICAvLyAtLS0tLS0tLSBNQUlOIEhFQURFUiBGUk9NIEZJUlNUIE9CSkVDVCAtLS0tLS0tLS1cbiAgICBjb25zdCBmaXJzdE9iaiA9IGpzb25BcnJheVswXTtcbiAgICBsZXQgdGl0bGUgPSBmaXJzdE9iai5zdGF0ZV9jZW50ZXJfbmFtZSB8fCBcIlwiO1xuICAgIGlmIChmaXJzdE9iai5kZXBhcnRtZW50X25hbWUpIHRpdGxlICs9IFwiIC8gXCIgKyBmaXJzdE9iai5kZXBhcnRtZW50X25hbWU7XG5cbiAgICAvLyAtLS0tLS0tLSBDT0xVTU4gSEVBREVSUyAtLS0tLS0tLS1cbiAgICBjb25zdCBoZWFkZXJzID0gW1xuICAgICAgXCJEZXNpZ25hdGlvblwiLFxuICAgICAgXCJSb2xlICYgUmVzcG9uc2liaWxpdGllc1wiLFxuICAgICAgXCJBY3Rpdml0aWVzXCIsXG4gICAgICBcIkJlaGF2aW9yYWwgQ29tcGV0ZW5jaWVzXCIsXG4gICAgICBcIkZ1bmN0aW9uYWwgQ29tcGV0ZW5jaWVzXCIsXG4gICAgICBcIkRvbWFpbiBDb21wZXRlbmNpZXNcIlxuICAgIF07XG5cbiAgICAvLyAtLS0tLS0tLSBEQVRBIFJPV1MgLS0tLS0tLS0tXG4gICAgY29uc3QgZGF0YVJvd3M6IEFycmF5PFJlY29yZDxzdHJpbmcsIGFueT4+ID0ganNvbkFycmF5Lm1hcChqc29uID0+IHtcbiAgICAgIGNvbnN0IGNvdXJzZXMgPVxuICAgICAgICBqc29uPy5jYnBfcGxhbnM/Lmxlbmd0aFxuICAgICAgICAgID8ganNvbi5jYnBfcGxhbnNbanNvbi5jYnBfcGxhbnMubGVuZ3RoIC0gMV0/LnNlbGVjdGVkX2NvdXJzZXMgfHwgW11cbiAgICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgY291cnNlRGV0YWlsQmxvY2tzID0gY291cnNlcy5tYXAoKGM6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBldGVuY2llcyA9IChjLmNvbXBldGVuY2llcyB8fCBjLmNvbXBldGVuY2llc192NiB8fCBbXSlcbiAgICAgICAgICAubWFwKChjYzogYW55KSA9PlxuICAgICAgICAgICAgYCR7Y2MuY29tcGV0ZW5jeUFyZWFOYW1lfSDihpIgJHtjYy5jb21wZXRlbmN5VGhlbWVOYW1lfSDihpIgJHtjYy5jb21wZXRlbmN5U3ViVGhlbWVOYW1lfWBcbiAgICAgICAgICApXG4gICAgICAgICAgLmpvaW4oXCIgfCBcIik7XG5cbiAgICAgICAgcmV0dXJuIGAke2kgKyAxfS4gQ291cnNlIE5hbWU6ICR7Yz8uY291cnNlIHx8IGM/Lm5hbWV9XFxuYCArXG4gICAgICAgICAgYCAgIElkZW50aWZpZXI6ICR7Yz8uaWRlbnRpZmllcn1cXG5gICtcbiAgICAgICAgICBgICAgRHVyYXRpb24gKG1pbnMpOiAke01hdGgucm91bmQoK2MuZHVyYXRpb24gLyA2MCl9XFxuYCArXG4gICAgICAgICAgYCAgIFJlbGV2YW5jeTogJHtjPy5yZWxldmFuY3l9JVxcbmAgK1xuICAgICAgICAgIGAgICBSYXRpb25hbGU6ICR7Yz8ucmF0aW9uYWxlfVxcbmAgK1xuICAgICAgICAgIGAgICBPcmdhbmlzYXRpb246ICR7QXJyYXkuaXNBcnJheShjPy5vcmdhbmlzYXRpb24pID8gYy5vcmdhbmlzYXRpb24uam9pbihcIiwgXCIpIDogKGM/Lm9yZ2FuaXNhdGlvbiA/PyBcIlwiKX1cXG5gICtcbiAgICAgICAgICBgICAgQ29tcGV0ZW5jaWVzOiAke2NvbXBldGVuY2llc31gO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB0cnVuY2F0aW9uTm90aWNlID0gXCJcXG5bY291cnNlIGRldGFpbHMgdHJ1bmNhdGVkXVwiO1xuICAgICAgY29uc3QgY291cnNlRGV0YWlsUGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgICBsZXQgY3VycmVudFBhcnQgPSBcIlwiO1xuXG4gICAgICBjb3Vyc2VEZXRhaWxCbG9ja3MuZm9yRWFjaCgoY291cnNlRGV0YWlsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKGNvdXJzZURldGFpbC5sZW5ndGggPiBleGNlbENlbGxUZXh0TGltaXQpIHtcbiAgICAgICAgICBjb3Vyc2VEZXRhaWwgPSBjb3Vyc2VEZXRhaWwuc2xpY2UoMCwgZXhjZWxDZWxsVGV4dExpbWl0IC0gdHJ1bmNhdGlvbk5vdGljZS5sZW5ndGgpICsgdHJ1bmNhdGlvbk5vdGljZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSBjdXJyZW50UGFydCA/IFwiXFxuXFxuXCIgOiBcIlwiO1xuICAgICAgICBpZiAoY3VycmVudFBhcnQgJiYgY3VycmVudFBhcnQubGVuZ3RoICsgc2VwYXJhdG9yLmxlbmd0aCArIGNvdXJzZURldGFpbC5sZW5ndGggPiBleGNlbENlbGxUZXh0TGltaXQpIHtcbiAgICAgICAgICBjb3Vyc2VEZXRhaWxQYXJ0cy5wdXNoKGN1cnJlbnRQYXJ0KTtcbiAgICAgICAgICBjdXJyZW50UGFydCA9IGNvdXJzZURldGFpbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50UGFydCArPSBzZXBhcmF0b3IgKyBjb3Vyc2VEZXRhaWw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoY3VycmVudFBhcnQpIGNvdXJzZURldGFpbFBhcnRzLnB1c2goY3VycmVudFBhcnQpO1xuXG4gICAgICBjb25zdCByb3c6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICAgIFwiRGVzaWduYXRpb25cIjogYCR7anNvbi5kZXNpZ25hdGlvbl9uYW1lfSA6IFdpbmcvRGl2aXNpb24gLSAke2pzb24ud2luZ19kaXZpc2lvbl9zZWN0aW9ufWAsXG4gICAgICAgIFwiUm9sZSAmIFJlc3BvbnNpYmlsaXRpZXNcIjogKGpzb24ucm9sZV9yZXNwb25zaWJpbGl0aWVzIHx8IFtdKVxuICAgICAgICAgIC5tYXAoKHY6IHN0cmluZywgaTogbnVtYmVyKSA9PiBgJHtpICsgMX0uICR7dn1gKS5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgICBcIkFjdGl2aXRpZXNcIjogKGpzb24uYWN0aXZpdGllcyB8fCBbXSlcbiAgICAgICAgICAubWFwKCh2OiBzdHJpbmcsIGk6IG51bWJlcikgPT4gYCR7aSArIDF9LiAke3Z9YCkuam9pbihcIlxcblxcblwiKSxcbiAgICAgICAgXCJCZWhhdmlvcmFsIENvbXBldGVuY2llc1wiOiAoanNvbi5jb21wZXRlbmNpZXMgfHwgW10pXG4gICAgICAgICAgLmZpbHRlcigoYzogYW55KSA9PiBjLnR5cGUgPT09IFwiQmVoYXZpb3JhbFwiKVxuICAgICAgICAgIC5tYXAoKGM6IGFueSwgaTogbnVtYmVyKSA9PiBgJHtpICsgMX0uICR7Yy50aGVtZX0gLSAke2Muc3ViX3RoZW1lfSAoJHtjPy5wcm9maWNpZW5jeV9sZXZlbH0sICR7Yz8uZGVsaXZlcnlfbW9kZX0pYCkuam9pbihcIlxcblxcblwiKSxcbiAgICAgICAgXCJGdW5jdGlvbmFsIENvbXBldGVuY2llc1wiOiAoanNvbi5jb21wZXRlbmNpZXMgfHwgW10pXG4gICAgICAgICAgLmZpbHRlcigoYzogYW55KSA9PiBjLnR5cGUgPT09IFwiRnVuY3Rpb25hbFwiKVxuICAgICAgICAgIC5tYXAoKGM6IGFueSwgaTogbnVtYmVyKSA9PiBgJHtpICsgMX0uICR7Yy50aGVtZX0gLSAke2Muc3ViX3RoZW1lfSAoJHtjPy5wcm9maWNpZW5jeV9sZXZlbH0sICR7Yz8uZGVsaXZlcnlfbW9kZX0pYCkuam9pbihcIlxcblxcblwiKSxcbiAgICAgICAgXCJEb21haW4gQ29tcGV0ZW5jaWVzXCI6IChqc29uLmNvbXBldGVuY2llcyB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKChjOiBhbnkpID0+IGMudHlwZSA9PT0gXCJEb21haW5cIilcbiAgICAgICAgICAubWFwKChjOiBhbnksIGk6IG51bWJlcikgPT4gYCR7aSArIDF9LiAke2MudGhlbWV9IC0gJHtjLnN1Yl90aGVtZX1gKS5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgICBcIkNvdXJzZSBEZXRhaWxzIDFcIjogY291cnNlRGV0YWlsUGFydHNbMF0gfHwgXCJcIlxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgcGFydCA9IDE7IHBhcnQgPCBjb3Vyc2VEZXRhaWxQYXJ0cy5sZW5ndGg7IHBhcnQrKykge1xuICAgICAgICByb3dbYENvdXJzZSBEZXRhaWxzICR7cGFydCArIDF9YF0gPSBjb3Vyc2VEZXRhaWxQYXJ0c1twYXJ0XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdztcbiAgICB9KTtcblxuICAgIGNvbnN0IG1heENvdXJzZURldGFpbFBhcnRzID0gTWF0aC5tYXgoXG4gICAgICAxLFxuICAgICAgLi4uZGF0YVJvd3MubWFwKHJvdyA9PiBPYmplY3Qua2V5cyhyb3cpLmZpbHRlcihrZXkgPT5cbiAgICAgICAga2V5LmluZGV4T2YoXCJDb3Vyc2UgRGV0YWlscyBcIikgPT09IDBcbiAgICAgICkubGVuZ3RoKVxuICAgICk7XG4gICAgZm9yIChsZXQgcGFydCA9IDE7IHBhcnQgPD0gbWF4Q291cnNlRGV0YWlsUGFydHM7IHBhcnQrKykge1xuICAgICAgaGVhZGVycy5wdXNoKGBDb3Vyc2UgRGV0YWlscyAke3BhcnR9YCk7XG4gICAgfVxuICAgIGRhdGFSb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgIGhlYWRlcnMuZm9yRWFjaChoZWFkZXIgPT4ge1xuICAgICAgICBpZiAoIShoZWFkZXIgaW4gcm93KSkgcm93W2hlYWRlcl0gPSBcIlwiO1xuICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIC8vIC0tLS0tLS0tIENSRUFURSBXT1JLU0hFRVQgLS0tLS0tLS0tXG4gICAgY29uc3Qgd3MgPSBYTFNYLnV0aWxzLmFvYV90b19zaGVldChbXSk7XG5cbiAgICAvLyBNYWluIGhlYWRlciAobWVyZ2VkKVxuICAgIFhMU1gudXRpbHMuc2hlZXRfYWRkX2FvYSh3cywgW1t0aXRsZV1dLCB7IG9yaWdpbjogXCJBMVwiIH0pO1xuICAgIHdzWychbWVyZ2VzJ10gPSBbe1xuICAgICAgczogeyByOiAwLCBjOiAwIH0sXG4gICAgICBlOiB7IHI6IDAsIGM6IGhlYWRlcnMubGVuZ3RoIC0gMSB9XG4gICAgfV07XG5cbiAgICAvLyBDb2x1bW4gaGVhZGVycyBhdCByb3cgMlxuICAgIFhMU1gudXRpbHMuc2hlZXRfYWRkX2FvYSh3cywgW2hlYWRlcnNdLCB7IG9yaWdpbjogXCJBMlwiIH0pO1xuXG4gICAgLy8gU3R5bGUgY29sdW1uIGhlYWRlcnNcbiAgICBoZWFkZXJzLmZvckVhY2goKGhlYWRlciwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxBZGRyZXNzID0gWExTWC51dGlscy5lbmNvZGVfY2VsbCh7IHI6IDEsIGM6IGluZGV4IH0pO1xuICAgICAgaWYgKHdzW2NlbGxBZGRyZXNzXSkge1xuICAgICAgICB3c1tjZWxsQWRkcmVzc10ucyA9IHtcbiAgICAgICAgICBmb250OiB7IGJvbGQ6IHRydWUgfSxcbiAgICAgICAgICBmaWxsOiB7IHBhdHRlcm5UeXBlOiBcInNvbGlkXCIsIGZnQ29sb3I6IHsgcmdiOiBcIkZGRkYwMFwiIH0gfSxcbiAgICAgICAgICBhbGlnbm1lbnQ6IHsgaG9yaXpvbnRhbDogXCJjZW50ZXJcIiwgdmVydGljYWw6IFwiY2VudGVyXCIsIHdyYXBUZXh0OiB0cnVlIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEluc2VydCBkYXRhIHJvd3Mgc3RhcnRpbmcgZnJvbSByb3cgM1xuICAgIFhMU1gudXRpbHMuc2hlZXRfYWRkX2pzb24od3MsIGRhdGFSb3dzLCB7IG9yaWdpbjogXCJBM1wiLCBza2lwSGVhZGVyOiB0cnVlIH0pO1xuXG4gICAgLy8gQXV0byBjb2x1bW4gd2lkdGhzIGJhc2VkIG9uIGxvbmdlc3QgbGluZSBpbiBlYWNoIGNvbHVtblxuICAgIGNvbnN0IGNvbFdpZHRocyA9IGhlYWRlcnMubWFwKGhlYWRlciA9PiB7XG4gICAgICBjb25zdCBtYXhMZW4gPSBNYXRoLm1heChcbiAgICAgICAgaGVhZGVyLmxlbmd0aCxcbiAgICAgICAgLi4uZGF0YVJvd3MubWFwKHJvdyA9PiBTdHJpbmcocm93W2hlYWRlcl0gfHwgXCJcIilcbiAgICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAucmVkdWNlKChtYXhMZW5ndGg6IG51bWJlciwgbGluZTogc3RyaW5nKSA9PiBNYXRoLm1heChtYXhMZW5ndGgsIGxpbmUubGVuZ3RoKSwgMCkpXG4gICAgICApO1xuICAgICAgcmV0dXJuIHsgd2NoOiBNYXRoLm1pbihNYXRoLm1heChtYXhMZW4gKyA1LCAyMCksIDgwKSB9OyAvLyBtaW4gMjAsIG1heCA4MFxuICAgIH0pO1xuICAgIHdzWychY29scyddID0gY29sV2lkdGhzO1xuXG4gICAgLy8gV3JhcCB0ZXh0IGluIGRhdGEgcm93c1xuICAgIGRhdGFSb3dzLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyLCBjb2xJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjZWxsQWRkcmVzcyA9IFhMU1gudXRpbHMuZW5jb2RlX2NlbGwoeyByOiByb3dJbmRleCArIDIsIGM6IGNvbEluZGV4IH0pO1xuICAgICAgICBpZiAod3NbY2VsbEFkZHJlc3NdKSB7XG4gICAgICAgICAgd3NbY2VsbEFkZHJlc3NdLnMgPSB7IGFsaWdubWVudDogeyB3cmFwVGV4dDogdHJ1ZSwgdmVydGljYWw6IFwidG9wXCIgfSB9O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFN0eWxlIG1haW4gaGVhZGVyXG4gICAgaWYgKHdzW1wiQTFcIl0pIHtcbiAgICAgIHdzW1wiQTFcIl0ucyA9IHtcbiAgICAgICAgZm9udDogeyBib2xkOiB0cnVlLCBzejogMTYgfSxcbiAgICAgICAgYWxpZ25tZW50OiB7IGhvcml6b250YWw6IFwiY2VudGVyXCIsIHZlcnRpY2FsOiBcImNlbnRlclwiIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0gQ1JFQVRFIFdPUktCT09LIC0tLS0tLS0tLVxuICAgIGNvbnN0IHdiID0gWExTWC51dGlscy5ib29rX25ldygpO1xuICAgIFhMU1gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQod2IsIHdzLCBcIlNoZWV0MVwiKTtcblxuICAgIC8vIEV4cG9ydCBFeGNlbFxuICAgIFhMU1gud3JpdGVGaWxlKHdiLCBmaWxlbmFtZSk7XG4gIH1cblxuXG5cblxuICBkb3dubG9hZENTVigpIHtcbiAgICBsZXQgZmlsZU5hbWUgPSAnJ1xuICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudHMpIHtcbiAgICAgIGZpbGVOYW1lID0gYENCUF9SZXBvcnRfJHt0aGlzLnNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5pZGVudGlmaWVyfV8ke3RoaXMuc2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzfS54bHN4YFxuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlTmFtZSA9IGBDQlBfUmVwb3J0XyR7dGhpcy5zaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcn0ueGxzeGBcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIHRoaXMuZG93bmxvYWRJblByb2dyZXNzID0gdHJ1ZVxuICAgIC8vIExldCB0aGUgbG9hZGVyIHJlbmRlciBiZWZvcmUgdGhlIHN5bmNocm9ub3VzIEV4Y2VsIGdlbmVyYXRpb24gYmxvY2tzIHRoZSBVSSB0aHJlYWRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVFeGNlbCh0aGlzLmpzb25EYXRhLCBmaWxlTmFtZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRvd25sb2FkSW5Qcm9ncmVzcyA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGRvd25sb2FkUGRmRnJvbUJFKGNvbnRleHQ6IHN0cmluZykge1xuICAgIGxldCBzZWxlY3RlZExhbmd1YWdlID0gdGhpcy5maWx0ZXJGb3JtLmdldCgnbGFuZ3VhZ2UnKT8udmFsdWUgfHwgJ2VuJztcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgdGhpcy5kb3dubG9hZEluUHJvZ3Jlc3MgPSB0cnVlXG4gICAgLy8gIHRoaXMuc2hhcmVkU2VydmljZS5kb3dubG9hZFBkZih0aGlzLnNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5pZGVudGlmaWVyKVxuICAgIGNvbnN0IGRvd25sb2FkJCA9ICF0aGlzLnNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50c1xuICAgICAgPyB0aGlzLnNoYXJlZFNlcnZpY2UuZG93bmxvYWRQZGYodGhpcy5zaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllciwgY29udGV4dCwgc2VsZWN0ZWRMYW5ndWFnZSlcbiAgICAgIDogdGhpcy5zaGFyZWRTZXJ2aWNlLmRvd25sb2FkUGRmRm9yRGVwYXJ0bWVudCh0aGlzLnNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5pZGVudGlmaWVyLCB0aGlzLnNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cywgY29udGV4dCwgc2VsZWN0ZWRMYW5ndWFnZSlcblxuICAgIC8vIEtlZXAgdGhlIGxvYWRlciB1bnRpbCB0aGUgZmlsZSBoYXMgYWN0dWFsbHkgYmVlbiByZWNlaXZlZCBhbmQgc2F2ZWRcbiAgICBkb3dubG9hZCQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kb3dubG9hZEluUHJvZ3Jlc3MgPSBmYWxzZVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZG93bmxvYWRJblByb2dyZXNzID0gZmFsc2VcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdVbmFibGUgdG8gZG93bmxvYWQgUERGJywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgZ2V0U2VsZWN0ZWRDb3Vyc2VzKGRlcGFydG1lbnQ6IGFueSk6IGFueVtdIHtcbiAgICBpZiAoIWRlcGFydG1lbnQ/LmNicF9wbGFucz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gdGFrZSBsYXRlc3QgQ0JQIHBsYW4gKG9yIGFkanVzdCBsb2dpYyBpZiBuZWVkZWQpXG4gICAgY29uc3QgbGF0ZXN0UGxhbiA9IGRlcGFydG1lbnQuY2JwX3BsYW5zW2RlcGFydG1lbnQuY2JwX3BsYW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgcmV0dXJuIGxhdGVzdFBsYW4/LnNlbGVjdGVkX2NvdXJzZXMgfHwgW107XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKSB7XG5cbiAgfVxuXG4gIGZpbHRlckxpc3QodmFsdWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VhcmNoID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuXG4gICAgICBjYXNlICdsYW5ndWFnZSc6XG4gICAgICAgIHRoaXMuZmlsdGVyZWRMYW5ndWFnZXMgPSB0aGlzLmxhbmd1YWdlcy5maWx0ZXIodiA9PiB2LmxhYmVsPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxufSIsIjxkaXYgY2xhc3M9XCJ2aWV3LWNicC1wbGFuXCIgI2RpYWxvZ0NvbnRlbnQgc3R5bGU9XCJtYXgtaGVpZ2h0OiA4MHZoOyBvdmVyZmxvdzogYXV0bztcIj5cbiAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIj5WaWV3IEZpbmFsIDxzcGFuICpuZ0lmPVwib3BlbmVkRnJvbSA9PT0gJ2NicCdcIj5DQlA8L3NwYW4+PHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wZW5lZEZyb20gPT09ICdhY2JwJ1wiPkFDQlA8L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LXNpZGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImxhbmd1YWdlLXNlbGVjdFwiIHN0eWxlPVwiIGhlaWdodDogMzRweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgc3R5bGU9XCJmb250LXdlaWdodDogbm9ybWFsO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckZvcm0uZ2V0KCdsYW5ndWFnZScpPy52YWx1ZSA/ICcnIDogJ1NlbGVjdCBMYW5ndWFnZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJsYW5ndWFnZVwiIHBhbmVsQ2xhc3M9XCJzZWxlY3Qtc2VhcmNoLXBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImFwcGx5RmlsdGVycygpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBib3ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7d2lkdGg6IDkyJTttYXJnaW46IDVweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlNlYXJjaCBMYW5ndWFnZXNcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cImZpbHRlckxpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgJ2xhbmd1YWdlJylcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBWYWx1ZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHIgb2YgZmlsdGVyZWRMYW5ndWFnZXNcIiBbdmFsdWVdPVwicj8uY29kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByPy5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cblxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jb250YWluZXJcIiAjcGRmQ29udGVudD5cbiAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJiZy13aGl0ZSBoZWFkZXItYm9yZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1mbGV4IGp1c3RpZnktYmV0d2VlblwiIHN0eWxlPVwid2lkdGg6MTAwJVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC00XCIgc3R5bGU9XCJ3aWR0aDo1MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9kb3B0LWxvZ28ucG5nXCIgYWx0PVwiRGVwYXJ0bWVudCBvZiBQZXJzb25uZWwgJiBUcmFpbmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtMTVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL0NCQ19sb2dvLnN2Z1wiIGFsdD1cIkNhcGFjaXR5IEJ1aWxkaW5nIENvbW1pc3Npb24gTG9nb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtMTBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2thcm1heW9naUxvZ28tbWluLnBuZ1wiIGFsdD1cIkthcm1heW9naSBCaGFyYXQgTG9nb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtMTBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiIHN0eWxlPVwid2lkdGg6NTAlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJ0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1ncmF5LTkwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlID09PSAnc3RhdGUnXCI+e3tzaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5vcmdOYW1lfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdtaW5pc3RyeSdcIj57e3NoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/Lm9yZ05hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iaj8uZGVwYXJ0bWVudF9uYW1lXCI+L3t7c2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqPy5kZXBhcnRtZW50X25hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIENhcGFjaXR5IEJ1aWxkaW5nIFBsYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtZ3JheS02MDBcIj5Db21wcmVoZW5zaXZlIFJvbGUtQmFzZWQgQ29tcGV0ZW5jeSBBbmFseXNpczwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4taC1zY3JlZW4gYmctZ3JhZGllbnQtdG8tYnIgZnJvbS1zbGF0ZS01MCB2aWEtYmx1ZS01MCB0by1pbmRpZ28tMTAwXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBIZWFkZXIgLS0+XG5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtdy03eGwgbXgtYXV0byBweC02IHB5LTggbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIEtQSSBEYXNoYm9hcmQgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWNvbnRhaW5lciBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0c2lkZS1sYXllci10b3RhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWZsZXggbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtOCB3LTggaWNvbi1zbVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjh6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDJ2Nmg2XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE2IDEzSDhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYgMTdIOFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA5SDhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3t0b3RhbENvbXBldGVuY2llT2JqPy50b3RhbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Ub3RhbCBDb21wZXRlbmNpZXM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyLWZpbGxcIiBzdHlsZT1cIndpZHRoOiA2MCU7XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi10ZXh0XCI+VG90YWwgQ29tcGV0ZW5jaWVzOiB7e3RvdGFsQ29tcGV0ZW5jaWVPYmo/LnRvdGFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7e2NvbXBldGVuY2llc0NvdW50Py50b3RhbH19IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0c2lkZS1sYXllci1iZWhhdmlvcmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvcml6b250YWwtZmxleCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC04IHctOCBpY29uLXNtXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNS41IDE3YTQgNCAwIDAgMS01IDBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgMTRoLjAxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExIDExaC4wMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNyAxNGguMDFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgMTBoLjAxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzIDE4aC4wMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMyA2aC4wMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNyAxOGguMDFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcgNmguMDFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEgMTJhOSA5IDAgMCAxLTkgOWE5IDkgMCAwIDEtOS05YTkgOSAwIDAgMSA5LTlhOSA5IDAgMCAxIDkgOXpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3t0b3RhbENvbXBldGVuY2llT2JqPy5iZWhhdmlvcmFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkJlaGF2aW9yYWwgQ29tcGV0ZW5jaWVzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhci1maWxsLWJlaGF2aW91cmFsXCIgc3R5bGU9XCJ3aWR0aDogNjAlO1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItdGV4dFwiPkJlaGF2aW9yYWwgQ29tcGV0ZW5jaWVzOiB7e3RvdGFsQ29tcGV0ZW5jaWVPYmo/LmJlaGF2aW9yYWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0c2lkZS1sYXllci1mdW5jdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvcml6b250YWwtZmxleCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC04IHctOCBpY29uLXNtXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yIDNoNmE0IDQgMCAwIDEgNCA0djE0YTMgMyAwIDAgMC0zLTNIMnpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIgM2gtNmE0IDQgMCAwIDAtNCA0djE0YTMgMyAwIDAgMSAzLTNoN3pcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3t0b3RhbENvbXBldGVuY2llT2JqPy5mdW5jdGlvbmFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkZ1bmN0aW9uYWwgQ29tcGV0ZW5jaWVzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhci1maWxsLWZ1bmN0aW9uYWxcIiBzdHlsZT1cIndpZHRoOiA2MCU7XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi10ZXh0XCI+RnVuY3Rpb25hbCBDb21wZXRlbmNpZXM6IHt7dG90YWxDb21wZXRlbmNpZU9iaj8uZnVuY3Rpb25hbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0c2lkZS1sYXllci1kb21haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG9yaXpvbnRhbC1mbGV4IG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTggdy04IGljb24tc21cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e3RvdGFsQ29tcGV0ZW5jaWVPYmo/LmRvbWFpbn19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Eb21haW4gQ29tcGV0ZW5jaWVzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhci1maWxsLWRvbWFpblwiIHN0eWxlPVwid2lkdGg6IDYwJTtcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLXRleHRcIj5Eb21haW4gQ29tcGV0ZW5jaWVzOiB7e3RvdGFsQ29tcGV0ZW5jaWVPYmo/LmRvbWFpbn19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibWItOFwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTZuaGVhZGluZ1wiPkNvbXBldGVuY3kgT3ZlcnZpZXc8L2gyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWdyaWRcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGtwaSBvZiBvdmVyYWxsS1BJcztcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIHJvdW5kZWQteGwgIG91dHNpZGUtbGF5ZXItdG90YWwgcC02IGJvcmRlci1sLTQgaG92ZXI6c2hhZG93LXhsIHRyYW5zaXRpb24tc2hhZG93XCIgW3N0eWxlLmJvcmRlci1sZWZ0LWNvbG9yXT1cImtwaS5jb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItNCBpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidwLTMgcm91bmRlZC1sZyAnICsga3BpLmJnQ29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwia3BpLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ1N3aXRjaENhc2U9XCInQmVoYXZpb3JhbCBDb21wZXRlbmNpZXMnXCIgY2xhc3M9XCJoLTggdy04IGljb24tc21cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNS41IDE3YTQgNCAwIDAgMS01IDBcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzIDE0aC4wMVwiLz48cGF0aCBkPVwiTTExIDExaC4wMVwiLz48cGF0aCBkPVwiTTE3IDE0aC4wMVwiLz48cGF0aCBkPVwiTTEzIDEwaC4wMVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgMThoLjAxXCIvPjxwYXRoIGQ9XCJNMTMgNmguMDFcIi8+PHBhdGggZD1cIk0xNyAxOGguMDFcIi8+PHBhdGggZD1cIk0xNyA2aC4wMVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEgMTJhOSA5IDAgMCAxLTkgOWE5IDkgMCAwIDEtOS05YTkgOSAwIDAgMSA5LTlhOSA5IDAgMCAxIDkgOXpcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdTd2l0Y2hDYXNlPVwiJ0Z1bmN0aW9uYWwgQ29tcGV0ZW5jaWVzJ1wiIGNsYXNzPVwiaC04IHctOCBpY29uLXNtXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMiAzaDZhNCA0IDAgMCAxIDQgNHYxNGEzIDMgMCAwIDAtMy0zSDJ6XCIvPjxwYXRoIGQ9XCJNMjIgM2gtNmE0IDQgMCAwIDAtNCA0djE0YTMgMyAwIDAgMSAzLTNoN3pcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdTd2l0Y2hDYXNlPVwiJ0RvbWFpbiBDb21wZXRlbmNpZXMnXCIgY2xhc3M9XCJoLTggdy04IGljb24tc21cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMFwiLz48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjZcIi8+PGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIyXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIidUb3RhbCBDb21wZXRlbmNpZXMnXCIgY2xhc3M9XCJoLTggdy04IGljb24tc21cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHpcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDJ2Nmg2XCIvPjxwYXRoIGQ9XCJNMTYgMTNIOFwiLz48cGF0aCBkPVwiTTE2IDE3SDhcIi8+PHBhdGggZD1cIk0xMCA5SDhcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDBcIj57e2twaS50b3RhbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LWdyYXktOTAwIGZvbnQtc2VtaWJvbGQgbWItMiBoZWFkaW5nXCI+e3trcGkubmFtZX19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGJnLWdyYXktMjAwIHJvdW5kZWQtZnVsbCBoLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTMgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTUwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cImtwaS5hdmdDb21wbGV0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwia3BpLmNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtc20gdGV4dC1ncmF5LTUwMCBtdC0yXCI+VG90YWwgQ29tcGV0ZW5jaWVzOiB7e2twaS50b3RhbH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBEZXNpZ25hdGlvbiBSZXBvcnRzIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2UteS04IG10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTYgaGVhZGluZ1wiPkRldGFpbGVkIENvbXBldGVuY3kgRnJhbWV3b3JrIGJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzaWduYXRpb248L2gyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkZXNpZ25hdGlvbiBvZiBkZXNpZ25hdGlvbkRhdGE7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIHJvdW5kZWQteGwgIG92ZXJmbG93LWhpZGRlbiBzZWN0aW9uLXNoYWRvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEhlYWRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiZy1ncmFkaWVudC10by1yIGZyb20taW5kaWdvLTYwMCB0by1ibHVlLTYwMCB0ZXh0LXdoaXRlIHAtNiBoZWFkaW5nLXdpdGgtYmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LTJ4bCBmb250LWJvbGQgbWItMiBoZWFkaW5nLWJnXCI+e3tkZXNpZ25hdGlvbi5kZXNpZ25hdGlvbn19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1pbmRpZ28tMTAwIG1iLTFcIj5XaW5nL0RpdmlzaW9uOiB7e2Rlc2lnbmF0aW9uLndpbmd9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC00IGNvbXBldGVuY3ktY291bnQtYnktZGVzaWduYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtc21cIj5CZWhhdmlvcmFsOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXNpZ25hdGlvbi5iZWhhdmlvcmFsQ29tcGV0ZW5jaWVzLmxlbmd0aH19IHRvdGFsPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbVwiPkZ1bmN0aW9uYWw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Rlc2lnbmF0aW9uLmZ1bmN0aW9uYWxDb21wZXRlbmNpZXMubGVuZ3RofX0gdG90YWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNtXCI+RG9tYWluOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXNpZ25hdGlvbi5kb21haW5Db21wZXRlbmNpZXMubGVuZ3RofX0gdG90YWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBCb2R5IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC00IHNlY3Rpb24tc2hhZG93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJvbGVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCBtYi0zIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTUgdy01IG1yLTIgdGV4dC1pbmRpZ28tNjAwIGljb24tc21cIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE2IDdhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwek0xMiAxNGE3IDcgMCAwMC03IDdoMTRhNyA3IDAgMDAtNy03elwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb2xlcyAmIFJlc3BvbnNpYmlsaXRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvbGUgb2YgZGVzaWduYXRpb24ucm9sZXNSZXNwb25zaWJpbGl0aWVzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmctZ3JheS01MCBwLTIgcm91bmRlZCBib3JkZXItbC0zIGJvcmRlci1pbmRpZ28tNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtc20gdGV4dC1ncmF5LTcwMCBsZWFkaW5nLXJlbGF4ZWRcIj57e3JvbGV9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aXZpdGllcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi02IG10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCBtYi0zIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTUgdy01IG1yLTIgdGV4dC1pbmRpZ28tNjAwIGljb24tc21cIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE2IDdhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwek0xMiAxNGE3IDcgMCAwMC03IDdoMTRhNyA3IDAgMDAtNy03elwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtMyBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb2xlIG9mIGRlc2lnbmF0aW9uLmFjdGl2aXRpZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiZy1ncmF5LTUwIHAtMiByb3VuZGVkIGJvcmRlci1sLTMgYm9yZGVyLWluZGlnby01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWdyYXktNzAwIGxlYWRpbmctcmVsYXhlZFwiPnt7cm9sZX19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtYnJlYWtcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ29tcGV0ZW5jaWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY2lzLWdyaWQgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQmVoYXZpb3JhbCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctYmx1ZS01MCByb3VuZGVkLWxnIHAtMyBjb21wZXRlbmNpZXMtZ3JpZC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1ibHVlLTgwMCB0ZXh0LWJhc2UgbWItMlwiPkJlaGF2aW9yYWw8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2UteS0xIGdyaWQtbGlzdC1pdGVtIGdyaWQtbGlzdC1pdGVtLWJlaGF2aW9yYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbXAgb2YgZGVzaWduYXRpb24uYmVoYXZpb3JhbENvbXBldGVuY2llczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiZy13aGl0ZSBwLTEuNSByb3VuZGVkIHRleHQtc20gdGV4dC1ncmF5LTcwMCBib3JkZXItbC0yIGJvcmRlci1ibHVlLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtY29sLXRoZW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRhZ3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkZXNpZ25hdGlvbi5iZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFtpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZmljaWVuY3ktdGFnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGVzaWduYXRpb24uYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWxbaV0/LnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJkZXNpZ25hdGlvbi5iZWhhdmlvcmFsU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFJhdGlvbmFsZVtpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVzaWduYXRpb24uYmVoYXZpb3JhbFNldEZvclByb2ZpY2llbmN5TGV2ZWxbaV0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGFnc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRlc2lnbmF0aW9uLmJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGVbaV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRlbGl2ZXJ5LW1vZGUtdGFnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGVzaWduYXRpb24uYmVoYXZpb3JhbFNldEZvckRlbGl2ZXJ5TW9kZVtpXT8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImRlc2lnbmF0aW9uLmJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGVbaV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRlc2lnbmF0aW9uLmJlaGF2aW9yYWxTZXRGb3JEZWxpdmVyeU1vZGVbaV0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1zbSB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Rlc2lnbmF0aW9uLmJlaGF2aW9yYWxDb21wZXRlbmNpZXMubGVuZ3RofX0gdG90YWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZ1bmN0aW9uYWwgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLWdyZWVuLTUwIHJvdW5kZWQtbGcgcC0zIGNvbXBldGVuY2llcy1ncmlkLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LWdyZWVuLTgwMCB0ZXh0LWJhc2UgbWItMlwiPkZ1bmN0aW9uYWw8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2UteS0xIGdyaWQtbGlzdC1pdGVtIGdyaWQtbGlzdC1pdGVtLWZ1bmN0aW9uYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbXAgb2YgZGVzaWduYXRpb24uZnVuY3Rpb25hbENvbXBldGVuY2llczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiZy13aGl0ZSBwLTEuNSByb3VuZGVkIHRleHQtc20gdGV4dC1ncmF5LTcwMCBib3JkZXItbC0yIGJvcmRlci1ncmVlbi00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbC10aGVtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10YWdzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGVzaWduYXRpb24uZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxbaV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2ZpY2llbmN5LXRhZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRlc2lnbmF0aW9uLmZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsW2ldPy50b0xvd2VyQ2FzZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZGVzaWduYXRpb24uZnVuY3Rpb25hbFNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGVbaV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRlc2lnbmF0aW9uLmZ1bmN0aW9uYWxTZXRGb3JQcm9maWNpZW5jeUxldmVsW2ldIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRhZ3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkZXNpZ25hdGlvbi5mdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlW2ldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkZWxpdmVyeS1tb2RlLXRhZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRlc2lnbmF0aW9uLmZ1bmN0aW9uYWxTZXRGb3JEZWxpdmVyeU1vZGVbaV0/LnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJkZXNpZ25hdGlvbi5mdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlUmF0aW9uYWxlW2ldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkZXNpZ25hdGlvbi5mdW5jdGlvbmFsU2V0Rm9yRGVsaXZlcnlNb2RlW2ldIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1zbSB0ZXh0LWdyZWVuLTYwMCBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXNpZ25hdGlvbi5mdW5jdGlvbmFsQ29tcGV0ZW5jaWVzLmxlbmd0aH19IHRvdGFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEb21haW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXB1cnBsZS01MCByb3VuZGVkLWxnIHAtMyBjb21wZXRlbmNpZXMtZ3JpZC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1wdXJwbGUtODAwIHRleHQtYmFzZSBtYi0yXCI+RG9tYWluPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktMSBncmlkLWxpc3QtaXRlbSBncmlkLWxpc3QtaXRlbS1kb21haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbXAgb2YgZGVzaWduYXRpb24uZG9tYWluQ29tcGV0ZW5jaWVzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJnLXdoaXRlIHAtMS41IHJvdW5kZWQgdGV4dC1zbSB0ZXh0LWdyYXktNzAwIGJvcmRlci1sLTIgYm9yZGVyLXB1cnBsZS00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbC10aGVtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10YWdzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGVzaWduYXRpb24uZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFtpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZmljaWVuY3ktdGFnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGVzaWduYXRpb24uZG9tYWluU2V0Rm9yUHJvZmljaWVuY3lMZXZlbFtpXT8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImRlc2lnbmF0aW9uLmRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWxSYXRpb25hbGVbaV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRlc2lnbmF0aW9uLmRvbWFpblNldEZvclByb2ZpY2llbmN5TGV2ZWxbaV0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGFnc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRlc2lnbmF0aW9uLmRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVtpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVsaXZlcnktbW9kZS10YWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJkZXNpZ25hdGlvbi5kb21haW5TZXRGb3JEZWxpdmVyeU1vZGVbaV0/LnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJkZXNpZ25hdGlvbi5kb21haW5TZXRGb3JEZWxpdmVyeU1vZGVSYXRpb25hbGVbaV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRlc2lnbmF0aW9uLmRvbWFpblNldEZvckRlbGl2ZXJ5TW9kZVtpXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtc20gdGV4dC1wdXJwbGUtNjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Rlc2lnbmF0aW9uLmRvbWFpbkNvbXBldGVuY2llcy5sZW5ndGh9fSB0b3RhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGRpbmcgY291cnNlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYnAgbXQtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZXNpZ25hdGlvbi5zZWxlY3RlZENvdXJzZXM/Lmxlbmd0aCAmJiBvcGVuZWRGcm9tID09PSAnYWNicCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCBtYi0zIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTUgdy01IG1yLTIgdGV4dC1pbmRpZ28tNjAwIGljb24tc21cIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE2IDdhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwek0xMiAxNGE3IDcgMCAwMC03IDdoMTRhNyA3IDAgMDAtNy03elwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Vyc2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWxpc3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRlc2lnbmF0aW9uLnNlbGVjdGVkQ291cnNlczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tlZC1jb3Vyc2UtY29udGFpbmVyXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtcGlsbC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvY291cnNlLnN2Z1wiPjwvc3Bhbj4mbmJzcDs8c3Bhbj5Db3Vyc2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbT8ucmF0aW9uYWxlICYmICFpdGVtPy5pc19wdWJsaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1ncmVlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1ncmVlbi10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgUmVjb21tZW5kZWQgLSBpR09UIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbT8ucGxhdGZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4+UGxhdGZvcm0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtPy5wbGF0Zm9ybX19PC9zcGFuPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UgbXQtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0/Lm9yZ2FuaXNhdGlvbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlByb3ZpZGVyIC0ge3tpdGVtPy5vcmdhbmlzYXRpb25bMF19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbT8ucmF0aW9uYWxlICYmIGl0ZW0/LmlzX3B1YmxpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXB1YmxpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1wdWJsaWMtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFJIFJlY29tbWVuZGVkIC0gUHVibGljIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbT8ucGxhdGZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4+UGxhdGZvcm0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtPy5wbGF0Zm9ybX19PC9zcGFuPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UgbXQtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0/Lm9yZ2FuaXNhdGlvbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlByb3ZpZGVyIC0ge3tpdGVtPy5vcmdhbmlzYXRpb25bMF19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWl0ZW0/LnJhdGlvbmFsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtZ3JheS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+TWFudWFsbHkgU3VnZ2VzdGVkIC0gaUdPVCA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UgbXQtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0/LnBsYXRmb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbaHJlZl09XCJpdGVtPy5wdWJsaWNfbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiPjxzcGFuPlBsYXRmb3JtIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbT8ucGxhdGZvcm19fTwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtPy5vcmdhbmlzYXRpb24/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Qcm92aWRlciAtIHt7aXRlbT8ub3JnYW5pc2F0aW9uWzBdfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtdGl0bGUgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5jb3Vyc2VcIj57e2l0ZW0/LmNvdXJzZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5uYW1lXCI+e3tpdGVtPy5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1kZXNjIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNQREZEb3dubG9hZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7aXRlbT8ucmF0aW9uYWxlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdCZWhhdmlvdXJhbCcsaXRlbSk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nXCI+QmVoYXZpb3JhbCBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjb21wZXRlbmN5LWxpc3QgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJiZWhhdmlvdXJhbC1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldERpc3BsYXllZENvbXBldGVuY2llcygnQmVoYXZpb3VyYWwnLGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dFwiPiB7eyBjb21wLmNvbXBldGVuY3lUaGVtZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLmNvbXBldGVuY3lTdWJUaGVtZU5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJoYXNNb3JlVGhhblR3bygnQmVoYXZpb3VyYWwnLGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2hvdy1tb3JlLWNvbXBldGVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2hvdy1tb3JlLWxpbmsgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb21wZXRlbmNpZXMoJ0JlaGF2aW91cmFsJyxpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGlzRXhwYW5kZWQoJ0JlaGF2aW91cmFsJyxpdGVtKSA/ICdTaG93IExlc3MnIDogJysnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZW1haW5pbmdDb3VudCgnQmVoYXZpb3VyYWwnLGl0ZW0pICsgJyBNb3JlJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbXBldGVuY2llc0J5VHlwZSgnRnVuY3Rpb25hbCcsaXRlbSk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nXCI+RnVuY3Rpb25hbCBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjb21wZXRlbmN5LWxpc3QgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJmdW5jdGlvbmFsLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0RGlzcGxheWVkQ29tcGV0ZW5jaWVzKCdGdW5jdGlvbmFsJyxpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHRcIj4ge3sgY29tcC5jb21wZXRlbmN5VGhlbWVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC5jb21wZXRlbmN5U3ViVGhlbWVOYW1lIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiaGFzTW9yZVRoYW5Ud28oJ0Z1bmN0aW9uYWwnLGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2hvdy1tb3JlLWNvbXBldGVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2hvdy1tb3JlLWxpbmsgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb21wZXRlbmNpZXMoJ0Z1bmN0aW9uYWwnLGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNFeHBhbmRlZCgnRnVuY3Rpb25hbCcsaXRlbSkgPyAnU2hvdyBMZXNzJyA6ICcrJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmVtYWluaW5nQ291bnQoJ0Z1bmN0aW9uYWwnLGl0ZW0pICsgJyBNb3JlJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0RvbWFpbicsaXRlbSk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nXCI+RG9tYWluIENvbXBldGVuY2llczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNvbXBldGVuY3ktbGlzdCBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImRvbWFpbi1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldERpc3BsYXllZENvbXBldGVuY2llcygnRG9tYWluJyxpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHRcIj4ge3sgY29tcC5jb21wZXRlbmN5VGhlbWVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC5jb21wZXRlbmN5U3ViVGhlbWVOYW1lIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiaGFzTW9yZVRoYW5Ud28oJ0RvbWFpbicsaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaG93LW1vcmUtY29tcGV0ZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzaG93LW1vcmUtbGluayBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbXBldGVuY2llcygnRG9tYWluJyxpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGlzRXhwYW5kZWQoJ0RvbWFpbicsaXRlbSkgPyAnU2hvdyBMZXNzJyA6ICcrJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmVtYWluaW5nQ291bnQoJ0RvbWFpbicsaXRlbSkgKyAnIE1vcmUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5XCI+UmVsZXZhbmN5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXNoXCI+LTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVyY2VudGFnZVwiICpuZ0lmPVwiaXRlbT8ucmVsZXZhbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0/LnJlbGV2YW5jeX19JTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVyY2VudGFnZVwiICpuZ0lmPVwiIWl0ZW0/LnJlbGV2YW5jeVwiPk4vQTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYWRkaW5nIGNvdXJzZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBGb290ZXIgLS0+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGZvb3RlciBjbGFzcz1cIm9yZy1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNiBmbGV4IGZsZXgtY29sIG1kOmZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNCBtYi00IG10LTQgbWQ6bWItMCBmb290ZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMva2FybWF5b2dpTG9nby1taW4ucG5nXCIgYWx0PVwiS2FybWF5b2dpIEJoYXJhdCBMb2dvXCIgY2xhc3M9XCJoLTEwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDoyMHB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMDBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9rYXJtYXlvZ2liaGFyYXQuZ292LmluXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthcm1heW9naWJoYXJhdC5nb3YuaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSB0ZXh0LWNlbnRlciBtZDp0ZXh0LXJpZ2h0IG1iLTRcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMDBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPiZjb3B5OyAyMDI1IEFsbCBSaWdodHMgUmVzZXJ2ZWQuPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZm9vdGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWZvb3RlclwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiRG93bmxvYWQgYXMgRXhjZWxcIiAoY2xpY2spPVwiZG93bmxvYWRDU1YoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkRvd25sb2FkIGFzIFBERlwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZFBkZkZyb21CRShvcGVuZWRGcm9tKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkNhbmNlbFwiIChjbGljayk9XCJjYW5jZWxGb3JtKClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5LWxvYWRlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkZXItbWVzc2FnZVwiICpuZ0lmPVwiZG93bmxvYWRJblByb2dyZXNzXCI+XG4gICAgICAgICAgICBEb3dubG9hZCBpcyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQsIHRoaXMgbWF5IHRha2UgYSB3aGlsZSBmb3IgbGFyZ2UgZmlsZXMuLi5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+Il19
|