@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
|
@@ -2,7 +2,7 @@ import { HttpHeaders, HttpParams } from '@angular/common/http';
|
|
|
2
2
|
//Injectable
|
|
3
3
|
import { HostListener, Injectable } from '@angular/core';
|
|
4
4
|
import { Subject } from 'rxjs';
|
|
5
|
-
import { map } from 'rxjs/operators';
|
|
5
|
+
import { map, tap } from 'rxjs/operators';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@angular/common/http";
|
|
8
8
|
import * as i2 from "./init.service";
|
|
@@ -693,11 +693,12 @@ export class SharedService {
|
|
|
693
693
|
: API_END_POINTS.DOWNLOAD_PDF;
|
|
694
694
|
const url = `${this.baseUrl}${endpoint}?state_center_id=${state_center_id}&language=${language}`;
|
|
695
695
|
const headers = this.headers;
|
|
696
|
+
// Returns an observable so the caller can keep the loader visible until the file is saved
|
|
696
697
|
return this.http.get(url, {
|
|
697
698
|
headers,
|
|
698
699
|
observe: 'response',
|
|
699
700
|
responseType: 'blob'
|
|
700
|
-
}).
|
|
701
|
+
}).pipe(tap((res) => {
|
|
701
702
|
const contentDisposition = res.headers.get('content-disposition');
|
|
702
703
|
console.log('contentDisposition', res.headers);
|
|
703
704
|
let filename = `CBP_Report_${state_center_id}.pdf`;
|
|
@@ -715,7 +716,7 @@ export class SharedService {
|
|
|
715
716
|
a.download = filename;
|
|
716
717
|
a.click();
|
|
717
718
|
URL.revokeObjectURL(downloadUrl);
|
|
718
|
-
});
|
|
719
|
+
}));
|
|
719
720
|
}
|
|
720
721
|
downloadPdfForDepartment(state_center_id, department_id, context, language) {
|
|
721
722
|
const endpoint = context === 'acbp'
|
|
@@ -723,11 +724,12 @@ export class SharedService {
|
|
|
723
724
|
: API_END_POINTS.DOWNLOAD_PDF;
|
|
724
725
|
const url = `${this.baseUrl}${endpoint}?state_center_id=${state_center_id}&department_id=${department_id}&language=${language}`;
|
|
725
726
|
const headers = this.headers;
|
|
727
|
+
// Returns an observable so the caller can keep the loader visible until the file is saved
|
|
726
728
|
return this.http.get(url, {
|
|
727
729
|
headers,
|
|
728
730
|
observe: 'response',
|
|
729
731
|
responseType: 'blob'
|
|
730
|
-
}).
|
|
732
|
+
}).pipe(tap((res) => {
|
|
731
733
|
const contentDisposition = res.headers.get('content-disposition');
|
|
732
734
|
console.log('contentDisposition', res.headers);
|
|
733
735
|
let filename = `CBP_Report_${state_center_id}_${department_id}.pdf`;
|
|
@@ -745,7 +747,7 @@ export class SharedService {
|
|
|
745
747
|
a.download = filename;
|
|
746
748
|
a.click();
|
|
747
749
|
URL.revokeObjectURL(downloadUrl);
|
|
748
|
-
});
|
|
750
|
+
}));
|
|
749
751
|
}
|
|
750
752
|
getCenterBasedDepartment(state_center_id, options) {
|
|
751
753
|
const headers = this.headers;
|
|
@@ -900,7 +902,7 @@ export class SharedService {
|
|
|
900
902
|
"identifier",
|
|
901
903
|
"avgRating"
|
|
902
904
|
],
|
|
903
|
-
"limit":
|
|
905
|
+
"limit": identifiers?.length || 0,
|
|
904
906
|
"offset": 0,
|
|
905
907
|
"sort_by": {}
|
|
906
908
|
}
|
|
@@ -1106,4 +1108,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1106
1108
|
type: HostListener,
|
|
1107
1109
|
args: ['window:resize', ['$event']]
|
|
1108
1110
|
}] } });
|
|
1109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxZQUFZO0FBQ1osT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUErQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBOzs7O0FBRXBDLCtFQUErRTtBQUUvRSxNQUFNLGNBQWMsR0FBRztJQUNyQixhQUFhLEVBQUUsMEJBQTBCO0lBQ3pDLG9CQUFvQixFQUFFLDBCQUEwQjtJQUNoRCxxQkFBcUIsRUFBRSwwQkFBMEI7SUFDakQsa0JBQWtCLEVBQUUsd0JBQXdCO0lBQzVDLGFBQWEsRUFBRSw2QkFBNkI7SUFDNUMsYUFBYSxFQUFFLDBCQUEwQjtJQUN6QyxnQkFBZ0IsRUFBRSxnQ0FBZ0M7SUFDbEQsZ0JBQWdCLEVBQUUseUNBQXlDO0lBQzNELG1CQUFtQixFQUFFLHVDQUF1QztJQUM1RCxjQUFjLEVBQUUsMkNBQTJDO0lBQzNELGdDQUFnQyxFQUFFLDZDQUE2QztJQUMvRSwyQ0FBMkMsRUFBRSw2Q0FBNkM7SUFDMUYsbUJBQW1CLEVBQUUsZ0NBQWdDO0lBQ3JELHNCQUFzQixFQUFFLG9CQUFvQjtJQUM1QyxZQUFZLEVBQUUsaUNBQWlDO0lBQy9DLFdBQVcsRUFBRSw0QkFBNEI7SUFDekMsY0FBYyxFQUFFLDRCQUE0QjtJQUM1QyxxQkFBcUIsRUFBRSwwQkFBMEI7SUFDakQsNEJBQTRCLEVBQUUsMkNBQTJDO0lBQ3pFLHFCQUFx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QUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsNkJBQTZCLG9CQUFvQixlQUFlLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDO2lCQUN4SSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzFCLE9BQU8sUUFBUSxDQUFBO1lBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDTjtJQUVILENBQUM7K0dBenBDVSxhQUFhO21IQUFiLGFBQWEsY0FIWixNQUFNOzs0RkFHUCxhQUFhO2tCQUp6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjsySEFrQkMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuLy9JbmplY3RhYmxlXG5pbXBvcnQgeyBIb3N0TGlzdGVuZXIsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBJbml0U2VydmljZSB9IGZyb20gJy4vaW5pdC5zZXJ2aWNlJztcbi8vIGltcG9ydCBjb25maWd1cmF0aW9uIGZyb20gJy4uLy4uLy4uLy4uL2Fzc2V0cy9qc29uZmlsZXMvY29uZmlndXJhdGlvbnMuanNvbidcblxuY29uc3QgQVBJX0VORF9QT0lOVFMgPSB7XG4gIEZFVENIX0NPVVJTRVM6ICdhcGkvdjEvY291cnNlL3YyL2V4cGxvcmUnLFxuICBGRVRDSF9QT1NUQUxfQ09VUlNFUzogJ2FwaS92MS9jb250ZW50L3YxL3NlYXJjaCcsXG4gIEZFVENIX1JBSUxXQVlfQ09VUlNFUzogJ2FwaS92MS9jb250ZW50L3YxL3NlYXJjaCcsXG4gIEZFVENIX0hBTExfT0ZfRkFNRTogJ2FwaS92MS9oYWxsb2ZmYW1lL3JlYWQnLFxuICBOTFdfRk9STV9SRUFEOiAnYXBpcy92MS9zdGF0aWMvZm9ybS92MS9yZWFkJyxcbiAgRkVUQ0hfVEVOREVSUzogJ2FwaS92MS9jb250ZW50L3YxL3NlYXJjaCcsXG4gIEdFVF9TVEFURV9DRU5URVI6ICdjYnAtdHBjLWFpL2FwaS92MS9zdGF0ZS1jZW50ZXInLFxuICBHRVRfUk9MRV9NQVBQSU5HOiAnY2JwLXRwYy1haS9hcGkvdjMvcm9sZS1tYXBwaW5nL2dlbmVyYXRlJyxcbiAgREVMRVRFX1JPTEVfTUFQUElORzogJ2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZy9kZWxldGUnLFxuICBHRVRfREVQQVJUTUVOVDogJ2NicC10cGMtYWkvYXBpL3YxL2RlcGFydG1lbnQvc3RhdGUtY2VudGVyJyxcbiAgR0VUX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVI6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcvc3RhdGUtY2VudGVyJyxcbiAgR0VUX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVJfREVQQVJUTUVOVDogJ2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZy9zdGF0ZS1jZW50ZXInLFxuICBVUERBVEVfUk9MRV9NQVBQSU5HOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nJyxcbiAgR0VUX1JFQ09NTUVOREVEX0NPVVJTRTogJ2NicC10cGMtYWkvYXBpL3YxLycsXG4gIFNBVkVfQ09VUlNFUzogJ2NicC10cGMtYWkvYXBpL3YxL2NicC1wbGFuL3NhdmUnLFxuICBHRVRfQ09VUlNFUzogJ2NicC10cGMtYWkvYXBpL3YxL2NicC1wbGFuJyxcbiAgVVBEQVRFX0NPVVJTRVM6ICdjYnAtdHBjLWFpL2FwaS92MS9jYnAtcGxhbicsXG4gIElHT1RfU1VHR0VTVEVEX0NPVVJTRTogJ2FwaS92MS9jb250ZW50L3YxL3NlYXJjaCcsXG4gIFNBVkVfQ09VUlNFX1NVR0dFU1RFRF9DT1VSU0U6ICdjYnAtdHBjLWFpL2FwaS92MS9jb3Vyc2Uvc3VnZ2VzdGlvbnMvc2F2ZScsXG4gIFNVR0dFU1RFRF9DT1VSU0VfTElTVDogJ2NicC10cGMtYWkvYXBpL3YxL2NvdXJzZS9zdWdnZXN0aW9ucycsXG4gIEFERF9ERVNJR05BVElPTjogJ2NicC10cGMtYWkvYXBpL3YyL3JvbGUtbWFwcGluZy9hZGQtZGVzaWduYXRpb24nLFxuICBMT0dJTjogJ2NicC10cGMtYWkvYXBpL3YxL2F1dGgvbG9naW4nLFxuICBMT0dPVVQ6ICdjYnAtdHBjLWFpL2FwaS92MS9hdXRoL2xvZ291dCcsXG4gIERFTEVURV9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nJyxcbiAgQUREX1VTRVJfQ09VUlNFUzogJ2NicC10cGMtYWkvYXBpL3YxL3VzZXItYWRkZWQtY291cnNlcycsXG4gIEdFVF9VU0VSX0NPVVJTRVM6ICdjYnAtdHBjLWFpL2FwaS92MS91c2VyLWFkZGVkLWNvdXJzZXMvcm9sZS1tYXBwaW5nJyxcbiAgR0VUX1VTRVJfU0VMRUNURURfQ09VUlNFUzogJ2NicC10cGMtYWkvYXBpL3YxL2NicC1wbGFuJyxcbiAgVVBMT0FEX0RPQ1VNRU5UOiAnY2JwLXRwYy1haS9hcGkvdjEvZmlsZXMnLFxuICBHRVRfRE9DVU1FTlRTOiAnY2JwLXRwYy1haS9hcGkvdjEvZmlsZXMnLFxuICBERUxFVEVfRklMRTogJ2NicC10cGMtYWkvYXBpL3YxL2ZpbGVzJyxcbiAgVFJJR0dFUl9GSUxFX1NVTU1BUlk6ICdjYnAtdHBjLWFpL2FwaS92MS9maWxlcycsXG4gIERPV05MT0FEX0ZJTEU6ICdjYnAtdHBjLWFpL2FwaS92MS9maWxlcycsXG4gIERFTEVURV9TVU1NQVJZOiAnY2JwLXRwYy1haS9hcGkvdjEvZmlsZXMnLFxuICBHRVRfVVNFUl9QUk9GSUxFOiAnY2JwLXRwYy1haS9hcGkvdjEvdXNlcnMvbWUnLFxuICBHRVRfVVNFUl9SRUNPTU1FTkVEX0NPVVJTRVM6ICdjYnAtdHBjLWFpL2FwaS92MS9jb3Vyc2UtcmVjb21tZW5kYXRpb25zJyxcbiAgRE9XTkxPQURfUERGOiAnY2JwLXRwYy1haS9hcGkvdjEvcmVwb3J0cy9jYnAtcGxhbi9kb3dubG9hZCcsXG4gIERPV05MT0FEX1BERl9BQ0JQOiAnY2JwLXRwYy1haS9hcGkvdjEvcmVwb3J0cy9hY2JwLXBsYW4vZG93bmxvYWQnLFxuICBDRU5URVJfQkFTRURfTUlOSVNUUlk6ICdjYnAtdHBjLWFpL2FwaS92MS9kZXBhcnRtZW50L3N0YXRlLWNlbnRlcicsXG4gIERPV05MT0FEX0NPVVJTRV9SRUNPTU1FTkRBVElPTjogJ2NicC10cGMtYWkvYXBpL3YxL3JlcG9ydHMvY291cnNlLXJlY29tbWVuZGF0aW9ucy9kb3dubG9hZCcsXG4gIERFTEVURV9DT1VSU0VfUkVDT01NRU5EQVRJT046ICdjYnAtdHBjLWFpL2FwaS92MS9jYnAtcGxhbicsXG4gIFVQREFURV9ERVNJR05BVElPTl9ISUVSQVJDSFk6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcvcmVvcmRlcicsXG4gIFNFQVJDSF9QVUJMSUNfREVTSUdOQVRJT046ICdhcGlzL3B1YmxpYy92OC9kZXNpZ25hdGlvbi9zZWFyY2gnLFxuICBEQVNIQk9BUkRfQURNSU46ICdjYnAtdHBjLWFpL2FwaS92MS9kYXNoYm9hcmQvY2JwLWRhc2hib2FyZC1tZXRyaWNzJyxcbiAgR0FQX0FOQUxZU0lTX0FETUlOOiAnY2JwLXRwYy1haS9hcGkvdjEvZGFzaGJvYXJkL2dhcC1hbmFseXNpcycsXG4gIERBU0hCT0FSRF9QVUJMSUM6ICdjYnAtdHBjLWFpL2FwaS92MS9kYXNoYm9hcmQvbXktZGFzaGJvYXJkLW1ldHJpY3MnLFxuICBHQVBfQU5BTFlTSVNfUFVCTElDOiAnY2JwLXRwYy1haS9hcGkvdjEvZGFzaGJvYXJkL215LWdhcC1hbmFseXNpcycsXG4gIE1BVENIRURfUk9MRV9NQVBQSU5HOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nL21hdGNoLWRlc2lnbmF0aW9ucycsXG4gIEdFVF9BUFBST1ZBTF9SRVFVRVNUUzogJ2NicC10cGMtYWkvYXBpL3YxL2FwcHJvdmFsLXJlcXVlc3RzL2xpc3QnLFxuICBTRUFSQ0hfUFVCTElDX01ETzogJ2NicC10cGMtYWkvYXBpL3YxL2FwcHJvdmFsLXJlcXVlc3RzL21kby1hZG1pbnMnLFxuICBTQVZFX0FQUFJPVkFMX1JFUVVFU1Q6ICdjYnAtdHBjLWFpL2FwaS92MS9hcHByb3ZhbC1yZXF1ZXN0cy9zZW5kJyxcbiAgVklFV19BUFBST1ZBTF9SRVFVRVNUOiAnY2JwLXRwYy1haS9hcGkvdjEvYXBwcm92YWwtcmVxdWVzdHMnLFxuICBSRVZPS0VfQVBQUk9WQUxfUkVRVUVTVDogJ2NicC10cGMtYWkvYXBpL3YxL2FwcHJvdmFsLXJlcXVlc3RzL3Jldm9rZScsXG4gIFNBVkVfREVTSUdOQVRJT05fQVBQUk9WQUxfUkVRVUVTVDogJ2NicC10cGMtYWkvYXBpL3YxL2Rlc2lnbmF0aW9uLWFwcHJvdmFsL2NyZWF0ZScsXG4gIFZJRVdfTURPX0FQUFJPVkFMX1JFUVVFU1Q6ICdhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL21kby9hcHByb3ZhbC1yZXF1ZXN0cy9yZWFkJyxcbiAgQVBQUk9WRV9BTkRfUFVCTElTSF9NRE9fQVBQUk9WQUxfUkVRVUVTVDogJ2FwaXMvcHJveGllcy92OC9haS9jYnAvdjEvbWRvL2FwcHJvdmFsLXJlcXVlc3RzL3B1Ymxpc2gnLFxuICBSRUpFQ1RfQVBQUk9WQUxfUkVRVUVTVDogJ2FwaXMvcHJveGllcy92OC9haS9jYnAvdjEvbWRvL2FwcHJvdmFsLXJlcXVlc3RzL3JlamVjdCcsXG4gIFJFSkVDVF9JVEVNX0FQUFJPVkFMX1JFUVVFU1Q6ICdhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL21kby9hcHByb3ZhbC1yZXF1ZXN0cy9pdGVtcy9yZWplY3QnLFxuICBNRE9fREVTSUdOQVRJT05fU0VBUkNIOiAnYXBpcy9wcm94aWVzL3Y4L2FpL2NicC92MS9kZXNpZ25hdGlvbi9zZWFyY2gnLFxuICBNRE9fQUREX1VTRVJfQ09VUlNFOiAnYXBpcy9wcm94aWVzL3Y4L2FpL2NicC92MS9tZG8vYXBwcm92YWwtcmVxdWVzdHMvY291cnNlL2FkZCcsXG4gIE1ET19TVUdHRVNURURfQ09VUlNFX0xJU1Q6ICdhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL2NvdXJzZS9zdWdnZXN0aW9ucycsXG4gIE1ET19ST0xFX01BUFBJTkdfVVBEQVRFOidhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL21kby9hcHByb3ZhbC1yZXF1ZXN0cy9pdGVtcy91cGRhdGUnLFxuICBSRVBVQkxJU0hfUkVRVUVTVDogJ2FwaXMvcHJveGllcy92OC9haS9jYnAvdjEvbWRvL2FwcHJvdmFsLXJlcXVlc3RzL3B1Ymxpc2gvcmV0cnknLFxuICBNRE9fQUREX0NPVVJTRTonYXBpcy9wcm94aWVzL3Y4L2FpL2NicC92MS9tZG8vYXBwcm92YWwtcmVxdWVzdHMvY291cnNlL2FkZCcsXG4gIE1ET19ERUxFVEVfQVBQUk9WRV9DT1VSU0U6J2FwaXMvcHJveGllcy92OC9haS9jYnAvdjEvbWRvL2FwcHJvdmFsLXJlcXVlc3RzL2NvdXJzZS9yZW1vdmUnLFxuICBTRUFSQ0hfUk9MRV9NQVBQSU5HOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nL3NlYXJjaCcsXG4gIEdFVF9ST0xFX01BUFBJTkdfUkVPUkRFUl9MSVNUOidjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcvcmVvcmRlci9saXN0J1xufVxuXG5cblxuLy8gQERpcmVjdGl2ZSgpXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcblxuZXhwb3J0IGNsYXNzIFNoYXJlZFNlcnZpY2Uge1xuICBjYnBQbGFuRmluYWxPYmo6IGFueSA9IHt9XG4gIGJhc2VVcmw6IHN0cmluZ1xuICBjb25maWdEZXRhaWxzOiBhbnlcbiAgbWRvQmFzZVVybDogYW55XG4gIG1kb0NvbmZpZ0RldGFpbHM6IGFueVxuICBzY3JlZW5XaWR0aDogbnVtYmVyO1xuICBoZWFkZXJzOiBhbnlcbiAgc3VtbWFyeVRyaWdnZXJFeGVjdXRlZCA9IG5ldyBTdWJqZWN0KClcbiAgbG9naW5TdWNjZXNzID0gbmV3IFN1YmplY3QoKVxuICBjaGVja1JvbGVNYXBwaW5nRm9ybVZhbGlkYXRpb24gPSBuZXcgU3ViamVjdCgpXG4gIHVwZGF0ZURlc2lnbmF0aW9uSGllcmFyY2h5U3ViamVjdCA9IG5ldyBTdWJqZWN0KClcbiAgZnJvbU1kb1BvcnRhbCA9IGZhbHNlXG4gIHJlcXVlc3REYXRhOmFueVxuICByb2xlTWFwcGluZ0dlbmVyYXRpb25EYXRhOmFueVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgb25SZXNpemUoZXZlbnQpIHtcbiAgICB0aGlzLnNjcmVlbldpZHRoID0gZXZlbnQudGFyZ2V0LmlubmVyV2lkdGg7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBpbml0U3ZjOiBJbml0U2VydmljZSxcbiAgKSB7XG4gICAgaWYgKGluaXRTdmMgJiYgdGhpcy5pbml0U3ZjLmJhc2VVcmwgJiYgdGhpcy5pbml0U3ZjLmNvbmZpZ0RldGFpbHMpIHtcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmluaXRTdmMnLCB0aGlzLmluaXRTdmMpXG4gICAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmluaXRTdmMuYmFzZVVybFxuICAgICAgdGhpcy5jb25maWdEZXRhaWxzID0gdGhpcy5pbml0U3ZjLmNvbmZpZ0RldGFpbHNcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRDb25maURldGFpbHMoKVxuICAgIH1cbiAgICB0aGlzLnNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgY29uc3Qgc3RvcmFnZURhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luRGF0YScpKVxuICAgIGNvbnNvbGUubG9nKCdzdG9yYWdlRGF0YS0tJywgc3RvcmFnZURhdGEpXG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3N0b3JhZ2VEYXRhPy5hY2Nlc3NfdG9rZW59YFxuICAgIH0pO1xuICB9XG5cbiAgc2V0Q29uZmlEZXRhaWxzKGNvbmZpZ0RldGFpbHM6IGFueSA9IG51bGwpIHtcbiAgICBpZiAoY29uZmlnRGV0YWlscykge1xuICAgICAgdGhpcy5jb25maWdEZXRhaWxzID0gY29uZmlnRGV0YWlsc1xuICAgICAgdGhpcy5iYXNlVXJsID0gY29uZmlnRGV0YWlscy5wb3J0YWxVUkxcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZXRDb25maWdEZXRhaWxzKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnRGV0YWlscyA9IHJlc3BvbnNlXG4gICAgICAgIHRoaXMuYmFzZVVybCA9IHJlc3BvbnNlLnBvcnRhbFVSTFxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgZ2V0Q29uZmlnKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZ0RldGFpbHMpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZ0RldGFpbHM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldENvbmZpZ0RldGFpbHMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oJ2Fzc2V0cy9qc29uZmlsZXMvY29uZmlndXJhdGlvbnMuanNvbicpO1xuICB9XG5cblxuXG4gIGdldGNvdXJzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5GRVRDSF9DT1VSU0VTfWApXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0ZUZlYXR1cmVDb3Vyc2VzKHJlc3BvbnNlLnJlc3VsdC5jb250ZW50KVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRQb3N0YWxjb3Vyc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfUE9TVEFMX0NPVVJTRVN9YClcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRlRmVhdHVyZUNvdXJzZXMocmVzcG9uc2UucmVzdWx0LmNvbnRlbnQpXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFJhaWx3YXljb3Vyc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfUkFJTFdBWV9DT1VSU0VTfWApXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0ZUZlYXR1cmVDb3Vyc2VzKHJlc3BvbnNlLnJlc3VsdC5jb250ZW50KVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRIYWxsT2ZGYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkZFVENIX0hBTExfT0ZfRkFNRX1gLCBudWxsKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBmb3JtYXRlRmVhdHVyZUNvdXJzZXMoZmVhdHVyZUNvdXJzZXM6IGFueSkge1xuICAgIGNvbnN0IGZvcm1hdGVkRmVhdHVyZUNvdXJzZXMgPSBbXTtcbiAgICBjb25zdCBmb3JtYXRlZE5ld3Nyb29tID0gW107XG4gICAgY29uc3QgZm9ybWF0ZWRQaG90b2dhbGxhcnkgPSBbXTtcbiAgICBjb25zdCBmb3JtYXRlZFRlc3RpbW9uaWFsID0gW107XG4gICAgaWYgKGZlYXR1cmVDb3Vyc2VzKSB7XG4gICAgICBmZWF0dXJlQ291cnNlcy5mb3JFYWNoKGNvdXJzZSA9PiB7XG4gICAgICAgIGlmIChjb3Vyc2UucHJpbWFyeUNhdGVnb3J5ID09PSAnQ291cnNlJykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdGVkQ291cnNlID0ge1xuICAgICAgICAgICAgcG9zdGVySW1hZ2U6IGNvdXJzZS5wb3N0ZXJJbWFnZSxcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbjogY291cnNlLm9yZ2FuaXNhdGlvblswXSA/IGNvdXJzZS5vcmdhbmlzYXRpb25bMF0gOiAnS2FybWF5b2dpIEJoYXJhdCcsXG4gICAgICAgICAgICBuYW1lOiBjb3Vyc2UubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjb3Vyc2UuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBjb3Vyc2UuaWRlbnRpZmllcixcbiAgICAgICAgICAgIGFsdDogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBjcmVhdG9yTG9nbzogY291cnNlLmNyZWF0b3JMb2dvIHx8ICcnLFxuICAgICAgICAgICAgZHVyYXRpb246IHRoaXMudGltZUNvbnZlcnQoY291cnNlLmR1cmF0aW9uKSxcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybWF0ZWRGZWF0dXJlQ291cnNlcy5wdXNoKGZvcm1hdGVkQ291cnNlKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvdXJzZS5yZXNvdXJjZUNhdGVnb3J5ID09PSAnTmV3c3Jvb20nKSB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ZWRDb3Vyc2UgPSB7XG4gICAgICAgICAgICBwb3N0ZXJJbWFnZTogY291cnNlLnBvc3RlckltYWdlLFxuICAgICAgICAgICAgbmFtZTogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY291cnNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogY291cnNlLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBhbHQ6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgY2xvdWRTdG9yYWdlS2V5OiBgJHt0aGlzLmJhc2VVcmx9YXNzZXRzL3B1YmxpYy8ke2NvdXJzZS5jbG91ZFN0b3JhZ2VLZXl9YFxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtYXRlZE5ld3Nyb29tLnB1c2goZm9ybWF0ZWRDb3Vyc2UpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY291cnNlLnJlc291cmNlQ2F0ZWdvcnkgPT09ICdQaG90byBHYWxsZXJ5Jykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdGVkQ291cnNlID0ge1xuICAgICAgICAgICAgbmFtZTogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY291cnNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogY291cnNlLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBhbHQ6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgY2xvdWRTdG9yYWdlS2V5OiBgJHt0aGlzLmJhc2VVcmx9YXNzZXRzL3B1YmxpYy8ke2NvdXJzZS5jbG91ZFN0b3JhZ2VLZXl9YFxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtYXRlZFBob3RvZ2FsbGFyeS5wdXNoKGZvcm1hdGVkQ291cnNlKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvdXJzZS5yZXNvdXJjZUNhdGVnb3J5ID09PSAnVGVzdGltb25pYWxzJykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdGVkQ291cnNlID0ge1xuICAgICAgICAgICAgbmFtZTogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY291cnNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogY291cnNlLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBhbHQ6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgY2xvdWRTdG9yYWdlS2V5OiBgJHt0aGlzLmJhc2VVcmx9YXNzZXRzL3B1YmxpYy8ke2NvdXJzZS5jbG91ZFN0b3JhZ2VLZXl9YCxcbiAgICAgICAgICAgIG1pbWVUeXBlOiBjb3Vyc2UubWltZVR5cGUsXG4gICAgICAgICAgICBwb3N0ZXJJbWFnZTogY291cnNlLnBvc3RlckltYWdlLFxuICAgICAgICAgICAgYXJ0aWZhY3RVcmw6IGNvdXJzZS5hcnRpZmFjdFVybCxcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybWF0ZWRUZXN0aW1vbmlhbC5wdXNoKGZvcm1hdGVkQ291cnNlKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgY291cnNlOiBmb3JtYXRlZEZlYXR1cmVDb3Vyc2VzLCBuZXdzcm9vbTogZm9ybWF0ZWROZXdzcm9vbSwgZ2FsbGFyeTogZm9ybWF0ZWRQaG90b2dhbGxhcnksIHRlc3RpbW9uaWxzOiBmb3JtYXRlZFRlc3RpbW9uaWFsIH1cbiAgfVxuXG4gIHRpbWVDb252ZXJ0KGR1cmF0aW9uOiBudW1iZXIpIHtcbiAgICBpZiAoZHVyYXRpb24pIHtcbiAgICAgIHZhciBudW0gPSBkdXJhdGlvbjtcbiAgICAgIHZhciBob3VycyA9IChudW0gLyAzNjAwKTtcbiAgICAgIHZhciByaG91cnMgPSBNYXRoLmZsb29yKGhvdXJzKTtcbiAgICAgIHZhciBtaW51dGVzID0gKGhvdXJzIC0gcmhvdXJzKSAqIDYwO1xuICAgICAgdmFyIHJtaW51dGVzID0gTWF0aC5yb3VuZChtaW51dGVzKTtcbiAgICAgIGlmIChybWludXRlcyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmhvdXJzICsgXCJoXCI7XG4gICAgICB9IGVsc2UgaWYgKHJob3VycyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcm1pbnV0ZXMgKyBcIm1cIlxuICAgICAgfVxuICAgICAgcmV0dXJuIHJob3VycyArIFwiaCBcIiArIHJtaW51dGVzICsgXCJtXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIGdldENsaWVudExpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoJy4vYXNzZXRzL2pzb25maWxlcy9jbGllbnQtbGlzdC5qc29uJyk7XG4gIH1cblxuICBnZXRUZW5kZXJzKCkge1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IFtcInRlbmRlclwiXSxcbiAgICAgICAgICBzdGF0dXM6IHsgXCIhPVwiOiBcIlJldGlyZWRcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhY2V0czogW1wibWltZVR5cGVcIl0sXG4gICAgICAgIHNvcnRCeTogeyBjcmVhdGVkT246IFwiRGVzY1wiIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfVEVOREVSU31gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXROb3RpZmljYXRpb25zKCkge1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IFtcIm5vdGlmaWNhdGlvblwiXSxcbiAgICAgICAgICBzdGF0dXM6IHsgXCIhPVwiOiBcIlJldGlyZWRcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhY2V0czogW1wibWltZVR5cGVcIl0sXG4gICAgICAgIHNvcnRCeTogeyBjcmVhdGVkT246IFwiZGVzY1wiIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfVEVOREVSU31gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cbiAgZ2V0Rm9ybVJlYWREYXRhKHJlcTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuTkxXX0ZPUk1fUkVBRH1gLCByZXEpXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG5cbiAgZ2V0TWluaXN0cnlEYXRhKG1pbmlzdHJ5VHlwZSkge1xuICAgIGxldCBzdWJfb3JnX3R5cGUgPSAnJ1xuICAgIGlmIChtaW5pc3RyeVR5cGUgPT0gJ21pbmlzdHJ5Jykge1xuICAgICAgc3ViX29yZ190eXBlID0gJ21pbmlzdHJ5J1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWJfb3JnX3R5cGUgPSAnc3RhdGUnXG4gICAgfVxuICAgIGNvbnN0IHN0b3JhZ2VEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dpbkRhdGEnKSlcbiAgICBjb25zb2xlLmxvZygnc3RvcmFnZURhdGEtLScsIHN0b3JhZ2VEYXRhKVxuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtzdG9yYWdlRGF0YT8uYWNjZXNzX3Rva2VufWBcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZygndGhpcy5iYXNlVXJsJywgdGhpcy5iYXNlVXJsKVxuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9TVEFURV9DRU5URVJ9Lz9zdWJfb3JnX3R5cGU9JHtzdWJfb3JnX3R5cGV9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdlbmVyYXRlUm9sZU1hcHBpbmcocmVxQm9keSwgZmlsZXM/OiBGaWxlIHwgRmlsZVtdKSB7XG4gICAgY29uc29sZS5sb2coJ3JlcUJvZHktLScsIHJlcUJvZHkpO1xuICAgIGNvbnNvbGUubG9nKCdmaWxlcy0tLScsIGZpbGVzKVxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICAvLyBBZGQgcmVxdWlyZWQgZmllbGRzXG4gICAgaWYgKHJlcUJvZHkuc3RhdGVfY2VudGVyX2lkKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9pZCcsIHJlcUJvZHkuc3RhdGVfY2VudGVyX2lkKTtcbiAgICB9XG5cbiAgICBpZiAocmVxQm9keS5zdGF0ZV9jZW50ZXJfbmFtZSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdzdGF0ZV9jZW50ZXJfbmFtZScsIHJlcUJvZHkuc3RhdGVfY2VudGVyX25hbWUpO1xuICAgIH1cblxuICAgIGlmIChyZXFCb2R5LmRlcGFydG1lbnRfaWQpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVwYXJ0bWVudF9pZCcsIHJlcUJvZHkuZGVwYXJ0bWVudF9pZCk7XG4gICAgfVxuXG4gICAgaWYgKHJlcUJvZHkuZGVwYXJ0bWVudF9uYW1lKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2RlcGFydG1lbnRfbmFtZScsIHJlcUJvZHkuZGVwYXJ0bWVudF9uYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocmVxQm9keS5pbnN0cnVjdGlvbikge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdpbnN0cnVjdGlvbicsIHJlcUJvZHkuaW5zdHJ1Y3Rpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IGNicERhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicpIHx8ICd7fScpO1xuICAgIGNvbnN0IG9yZ1R5cGUgPVxuICAgICAgY2JwRGF0YT8ubWluaXN0cnk/LnNiT3JnVHlwZSB8fFxuICAgICAgY2JwRGF0YT8ub3JnX3R5cGUgfHxcbiAgICAgICcnO1xuICAgIGlmIChvcmdUeXBlKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ29yZ190eXBlJywgb3JnVHlwZSk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIG11bHRpcGxlIG9yIHNpbmdsZSBmaWxlXG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWxlcykpIHtcbiAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZTogRmlsZSkgPT4ge1xuICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnYWRkaXRpb25hbF9kb2N1bWVudCcsIGZpbGUsIGZpbGUubmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2luZ2xlIGZpbGVcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdhZGRpdGlvbmFsX2RvY3VtZW50JywgZmlsZXMsIGZpbGVzLm5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlYnVnIEZvcm1EYXRhIGNvbnRlbnRcbiAgICBjb25zb2xlLmxvZyhcIkZvcm1EYXRhIGNvbnRlbnRzOlwiKTtcbiAgICBmb3JtRGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke2tleX06IEZJTEUgLT4gJHt2YWx1ZS5uYW1lfSAoJHt2YWx1ZS5zaXplfSBieXRlcylgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke2tleX06ICR7dmFsdWV9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JPTEVfTUFQUElOR31gLCBmb3JtRGF0YSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSkpO1xuICB9XG5cblxuXG4gIGdldERlcGFydG1lbnRMaXN0KG1pbmlzdHJ5SWQsIG9wdGlvbnM/OiB7IGxpbWl0PzogbnVtYmVyLCBvZmZzZXQ/OiBudW1iZXIsIHF1ZXJ5Pzogc3RyaW5nIH0pIHtcbiAgICBjb25zdCBzdG9yYWdlRGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9naW5EYXRhJykpXG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3N0b3JhZ2VEYXRhPy5hY2Nlc3NfdG9rZW59YFxuICAgIH0pO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgIGlmIChvcHRpb25zPy5saW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhvcHRpb25zLmxpbWl0KSlcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/Lm9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdvZmZzZXQnLCBTdHJpbmcob3B0aW9ucy5vZmZzZXQpKVxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8ucXVlcnkpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3F1ZXJ5Jywgb3B0aW9ucy5xdWVyeSlcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfREVQQVJUTUVOVH0vJHttaW5pc3RyeUlkfWAsIHsgaGVhZGVycywgcGFyYW1zIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFJvbGVNYXBwaW5nQnlTdGF0ZUNlbnRlcihzdGF0ZV9jZW50ZXJfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSfS8ke3N0YXRlX2NlbnRlcl9pZH0/bG9hZF9jYnBfcGxhbnM9dHJ1ZWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRSb2xlTWFwcGluZ0J5U3RhdGVDZW50ZXJBbmREZXBhcnRtZW50KHN0YXRlX2NlbnRlcl9pZCwgZGVwYXJ0bWVudF9pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICBpZiAodHlwZW9mIGRlcGFydG1lbnRfaWQgPT09ICdzdHJpbmcnKXtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVJ9LyR7c3RhdGVfY2VudGVyX2lkfS9kZXBhcnRtZW50LyR7ZGVwYXJ0bWVudF9pZH0/bG9hZF9jYnBfcGxhbnM9dHJ1ZWAsIHsgaGVhZGVycyB9KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVJ9LyR7c3RhdGVfY2VudGVyX2lkfT9sb2FkX2NicF9wbGFucz10cnVlYCwgeyBoZWFkZXJzIH0pXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9XG5cbiAgfVxuXG5cbiAgZ2V0Um9sZU1hcHBpbmdCeVN0YXRlQ2VudGVyQnlTZWFyY2goc3RhdGVfY2VudGVyX2lkLHF1ZXJ5LCBsaW1pdCwgb2Zmc2V0LG1hdGNoX3N0YXR1cykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICBsZXQgcmVxQm9keSA9IHtcbiAgICAgIFwicXVlcnlcIjogcXVlcnkgfHwgXCJcIixcbiAgICAgIFwibGltaXRcIjogbGltaXQsXG4gICAgICBcIm9mZnNldFwiOiBvZmZzZXQsXG4gICAgICBcImxvYWRfY2JwX3BsYW5zXCI6IHRydWUsXG4gICAgICBcImZpbHRlcnNcIjoge1xuICAgICAgICBcInN0YXRlX2NlbnRlcl9pZFwiOiBzdGF0ZV9jZW50ZXJfaWQsXG4gICAgICAgIFwibWF0Y2hfc3RhdHVzXCI6bWF0Y2hfc3RhdHVzXG4gICAgICB9LFxuICAgICAgXCJzb3J0X2J5XCI6IG51bGxcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0VBUkNIX1JPTEVfTUFQUElOR31gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0Um9sZU1hcHBpbmdCeVN0YXRlQ2VudGVyQW5kRGVwYXJ0bWVudEJ5U2VhcmNoKHN0YXRlX2NlbnRlcl9pZCwgZGVwYXJ0bWVudF9pZCxxdWVyeSwgbGltaXQsIG9mZnNldCxtYXRjaF9zdGF0dXMpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgIGxldCByZXFCb2R5OiBhbnkgPSB7XG4gICAgICBcInF1ZXJ5XCI6IHF1ZXJ5IHx8IFwiXCIsXG4gICAgICBcImxpbWl0XCI6IGxpbWl0LFxuICAgICAgXCJvZmZzZXRcIjogb2Zmc2V0LFxuICAgICAgXCJsb2FkX2NicF9wbGFuc1wiOiB0cnVlLFxuICAgICAgXCJmaWx0ZXJzXCI6IHtcbiAgICAgICAgXCJzdGF0ZV9jZW50ZXJfaWRcIjogc3RhdGVfY2VudGVyX2lkLFxuICAgICAgICBcIm1hdGNoX3N0YXR1c1wiOm1hdGNoX3N0YXR1cyxcbiAgICAgICAgXCJkZXBhcnRtZW50X2lkXCI6IGRlcGFydG1lbnRfaWRcbiAgICAgIH0sXG4gICAgICBcInNvcnRfYnlcIjogbnVsbFxuICAgIH07XG4gIGlmICh0eXBlb2YgZGVwYXJ0bWVudF9pZCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXFCb2R5LmZpbHRlcnMuZGVwYXJ0bWVudF9pZCA9IGRlcGFydG1lbnRfaWQ7XG4gIFxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0VBUkNIX1JPTEVfTUFQUElOR31gLCByZXFCb2R5LHsgaGVhZGVycyB9KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNFQVJDSF9ST0xFX01BUFBJTkd9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9XG5cbiAgfVxuXG4gIHVwZGF0ZVJvbGVNYXBwaW5nKHJvbGVfbWFwcGluZ19pZCwgcmVxQm9keSkge1xuICAgICBpZiAodGhpcy5mcm9tTWRvUG9ydGFsKSB7XG4gICAgICBsZXQgbWRvQmFzZVVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KGAke3RoaXMubWRvQmFzZVVybH0vJHtBUElfRU5EX1BPSU5UUy5NRE9fUk9MRV9NQVBQSU5HX1VQREFURX1gLCByZXFCb2R5KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5VUERBVEVfUk9MRV9NQVBQSU5HfS8ke3JvbGVfbWFwcGluZ19pZH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZVJvbGVNYXBwaW5nKHJvbGVfbWFwcGluZ19pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlVQREFURV9ST0xFX01BUFBJTkd9LyR7cm9sZV9tYXBwaW5nX2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRSZWNvbW1lbmRlZENvdXJzZShyb2xlX21hcHBpbmdfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgbGV0IHJlcUJvZHkgPSB7XG4gICAgICByb2xlX21hcHBpbmdfaWQ6IHJvbGVfbWFwcGluZ19pZFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfUkVDT01NRU5ERURfQ09VUlNFfS9jb3Vyc2UtcmVjb21tZW5kYXRpb25zL2dlbmVyYXRlYCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGRlbGV0ZUNvdXJzZVJlY29tbWVuZGF0aW9ucyhyb2xlTWFwSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9SRUNPTU1FTkRFRF9DT1VSU0V9L2NvdXJzZS1yZWNvbW1lbmRhdGlvbnMvcm9sZS1tYXBwaW5nLyR7cm9sZU1hcElkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzYXZlQ291cnNlKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0FWRV9DT1VSU0VTfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cbiAgdXBkYXRlQ291cnNlKHJlcUJvZHksIGNicF9wbGFuX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuVVBEQVRFX0NPVVJTRVN9LyR7Y2JwX3BsYW5faWR9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGFkZE1ET0NvdXJzZShyZXFCb2R5KSB7XG4gICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuTURPX0FERF9DT1VSU0V9YCwgcmVxQm9keSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0Q291cnNlKHJvbGVfbWFwcGluZ19pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9DT1VSU0VTfT9yb2xlX21hcHBpbmdfaWQ9JHtyb2xlX21hcHBpbmdfaWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldElHT1RTdWdnZXN0ZWRDb3Vyc2VzKHJlcUJvZHkpIHtcbiAgICAvLyBVc2UgdGhlIHJlcUJvZHkgcGFyYW1ldGVyIHBhc3NlZCBmcm9tIHRoZSBjb21wb25lbnRcbiAgICAvLyBJZiBubyByZXFCb2R5IGlzIHByb3ZpZGVkLCB1c2UgZGVmYXVsdCBzdHJ1Y3R1cmVcbiAgICBsZXQgcmVxID0gcmVxQm9keSB8fCB7XG4gICAgICBcInJlcXVlc3RcIjoge1xuICAgICAgICBcImZpbHRlcnNcIjoge1xuICAgICAgICAgIFwicHJpbWFyeUNhdGVnb3J5XCI6IFtcIkNvdXJzZVwiXSxcbiAgICAgICAgICBcInN0YXR1c1wiOiBbXCJMaXZlXCJdLFxuICAgICAgICAgIFwiY291cnNlQ2F0ZWdvcnlcIjogW1wiQ291cnNlXCJdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmllbGRzXCI6IFtcInBvc3RlckltYWdlXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJuYW1lXCJdLFxuICAgICAgICBcImxpbWl0XCI6IDEyLFxuICAgICAgICBcIm9mZnNldFwiOiAwXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnNvbGUubG9nKCdnZXRJR09UU3VnZ2VzdGVkQ291cnNlcyBmaW5hbCByZXF1ZXN0OicsIEpTT04uc3RyaW5naWZ5KHJlcSwgbnVsbCwgMikpO1xuICAgIGlmICh0aGlzLmZyb21NZG9Qb3J0YWwpIHtcblxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS8ke0FQSV9FTkRfUE9JTlRTLk1ET19TVUdHRVNURURfQ09VUlNFX0xJU1R9YCwgcmVxQm9keSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TVUdHRVNURURfQ09VUlNFX0xJU1R9YCwgcmVxLCB7IGhlYWRlcnMgfSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH1cblxuICAgIFxuICB9XG5cbiAgZ2V0U3VnZ2VzdGVkQ291cnNlcyhyb2xlX21hcHBpbmdfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TVUdHRVNURURfQ09VUlNFX0xJU1R9LyR7cm9sZV9tYXBwaW5nX2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzYXZlU3VnZ2VzdGVkQ291cnNlKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0FWRV9DT1VSU0VfU1VHR0VTVEVEX0NPVVJTRX1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgYWRkRGVzaWduYXRpb24ocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5BRERfREVTSUdOQVRJT059YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHBlcmZvcm1Mb2dpbihyZXFCb2R5KSB7XG4gICAgY29uc3QgYm9keSA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAgIC5zZXQoJ3VzZXJuYW1lJywgcmVxQm9keS51c2VybmFtZSlcbiAgICAgIC5zZXQoJ3Bhc3N3b3JkJywgcmVxQm9keS5wYXNzd29yZCk7XG4gICAgY29uc29sZS5sb2coJ2luIGxvZ2luIHVhdCcpXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuTE9HSU59YCwgYm9keS50b1N0cmluZygpLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgbG9nb3V0KCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5MT0dPVVR9YCwgJycsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzZXRDQlBQbGFuTG9jYWxTdG9yYWdlKCkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonLCBKU09OLnN0cmluZ2lmeSh0aGlzLmNicFBsYW5GaW5hbE9iaikpXG4gIH1cblxuICBnZXRDQlBQbGFuTG9jYWxTdG9yYWdlKCkge1xuICAgIGxldCBjYnBQbGFuRmluYWxPYmogPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonKSlcbiAgICByZXR1cm4gY2JwUGxhbkZpbmFsT2JqXG4gIH1cblxuICBjaGVja0lmTG9naW4oKSB7XG4gICAgbGV0IGZsYWcgPSBmYWxzZVxuICAgIGxldCBsb2dpbkRhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9naW5EYXRhJylcbiAgICBpZiAobG9naW5EYXRhICYmIEpTT04ucGFyc2UobG9naW5EYXRhKVsnYWNjZXNzX3Rva2VuJ10pIHtcbiAgICAgIGZsYWcgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYWcgPSBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gZmxhZ1xuICB9XG5cbiAgZGVsZXRlUm9sZU1hcHBpbmdCeVN0YXRlQW5kRGVwYXJ0bWVudChzdGF0ZV9jZW50ZXJfaWQsIGRlcGFydG1lbnRfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgbGV0IHVybCA9ICcnXG4gICAgaWYgKGRlcGFydG1lbnRfaWQgJiYgZGVwYXJ0bWVudF9pZCAhPT0gJ251bGwnICYmIGRlcGFydG1lbnRfaWQgIT09ICd1bmRlZmluZWQnICYmIGRlcGFydG1lbnRfaWQgIT09IHVuZGVmaW5lZCAmJiBkZXBhcnRtZW50X2lkICE9PSBudWxsKSB7XG4gICAgICB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ERUxFVEVfUk9MRV9NQVBQSU5HX0JZX1NUQVRFX0NFTlRFUn0/c3RhdGVfY2VudGVyX2lkPSR7c3RhdGVfY2VudGVyX2lkfSZkZXBhcnRtZW50X2lkPSR7ZGVwYXJ0bWVudF9pZH1gXG4gICAgfSBlbHNlIHtcbiAgICAgIHVybCA9IGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRFTEVURV9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSfT9zdGF0ZV9jZW50ZXJfaWQ9JHtzdGF0ZV9jZW50ZXJfaWR9YFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4odXJsLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgYWRkVXNlckNvdXJzZShyZXFCb2R5KSB7XG4gICAgaWYgKHRoaXMuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgbGV0IG1kb0Jhc2VVcmwgPSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJ1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuTURPX0FERF9VU0VSX0NPVVJTRX1gKVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkFERF9VU0VSX0NPVVJTRVN9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9XG5cbiAgfVxuXG4gIGdldFVzZXJDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1VTRVJfQ09VUlNFU30vJHtyb2xlX21hcHBpbmdfaWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldENvbXBldGVuY3lKc29uKCkge1xuICAgIGlmICh0aGlzLmZyb21NZG9Qb3J0YWwpIHtcbiAgICAgIGxldCBtZG9CYXNlVXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCdcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS9hc3NldHMvanNvbmZpbGVzL2NvbXBldGVuY2llcy5qc29uYClcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0vdHJhaW5pbmctcGxhLWFpL2Fzc2V0cy9qc29uZmlsZXMvY29tcGV0ZW5jaWVzLmpzb25gLCB7IGhlYWRlcnMgfSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH1cblxuICAgIC8vIHRoaXMuaHR0cC5nZXQ8YW55W10+KCcvYXNzZXRzL2pzb25maWxlcy9jb21wZXRlbmNpZXMuanNvbicpXG4gIH1cblxuICBjb252ZXJ0KHNlY29uZHM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKCFzZWNvbmRzIHx8IHNlY29uZHMgPD0gMCkge1xuICAgICAgcmV0dXJuICdOL0EnO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdGFsU2Vjb25kcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyk7XG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAvIDYwKTtcbiAgICBjb25zdCByZW1haW5pbmdTZWNvbmRzID0gdG90YWxTZWNvbmRzICUgNjA7XG5cbiAgICBpZiAoaG91cnMgPiAwKSB7XG4gICAgICAvLyBGb3IgZHVyYXRpb25zIHdpdGggaG91cnMsIHNob3cgaG91cnMgYW5kIG1pbnV0ZXMgKGUuZy4sIFwiM2ggMTBtXCIpXG4gICAgICBpZiAobWludXRlcyA+IDApIHtcbiAgICAgICAgcmV0dXJuIGAke2hvdXJzfWggJHttaW51dGVzfW1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGAke2hvdXJzfWhgO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWludXRlcyA+IDApIHtcbiAgICAgIC8vIEZvciBkdXJhdGlvbnMgdW5kZXIgYW4gaG91ciwgc2hvdyBtaW51dGVzIGFuZCBzZWNvbmRzIChlLmcuLCBcIjU4bSAzc1wiKVxuICAgICAgaWYgKHJlbWFpbmluZ1NlY29uZHMgPiAwKSB7XG4gICAgICAgIHJldHVybiBgJHttaW51dGVzfW0gJHtyZW1haW5pbmdTZWNvbmRzfXNgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGAke21pbnV0ZXN9bWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBkdXJhdGlvbnMgdW5kZXIgYSBtaW51dGUsIHNob3cgc2Vjb25kcyBvbmx5XG4gICAgICByZXR1cm4gYCR7cmVtYWluaW5nU2Vjb25kc31zYDtcbiAgICB9XG4gIH1cblxuICBnZXRVc2VyUHJvZmlsZSgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfVVNFUl9QUk9GSUxFfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRVc2VyUmVjb21tZW5kYXRpb25Db3Vyc2Uocm9sZV9tYXBwaW5nX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1VTRVJfU0VMRUNURURfQ09VUlNFU30/cm9sZV9tYXBwaW5nX2lkPSR7cm9sZV9tYXBwaW5nX2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBkb3dubG9hZFBkZihzdGF0ZV9jZW50ZXJfaWQ6IHN0cmluZywgY29udGV4dDogc3RyaW5nLCBsYW5ndWFnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZW5kcG9pbnQgPVxuICAgICAgY29udGV4dCA9PT0gJ2FjYnAnXG4gICAgICAgID8gQVBJX0VORF9QT0lOVFMuRE9XTkxPQURfUERGX0FDQlBcbiAgICAgICAgOiBBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9QREY7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfSR7ZW5kcG9pbnR9P3N0YXRlX2NlbnRlcl9pZD0ke3N0YXRlX2NlbnRlcl9pZH0mbGFuZ3VhZ2U9JHtsYW5ndWFnZX1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgIH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgICAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LWRpc3Bvc2l0aW9uJyk7XG4gICAgICBjb25zb2xlLmxvZygnY29udGVudERpc3Bvc2l0aW9uJywgcmVzLmhlYWRlcnMpXG4gICAgICBsZXQgZmlsZW5hbWUgPSBgQ0JQX1JlcG9ydF8ke3N0YXRlX2NlbnRlcl9pZH0ucGRmYDtcblxuICAgICAgaWYgKGNvbnRlbnREaXNwb3NpdGlvbikge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbnRlbnREaXNwb3NpdGlvbi5tYXRjaCgvZmlsZW5hbWU9XCI/KFteXCJdKylcIj8vKTtcbiAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XG4gICAgICAgICAgZmlsZW5hbWUgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgYSBibG9iIFVSTCBhbmQgZG93bmxvYWRcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcmVzLmJvZHldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xuICAgICAgY29uc3QgZG93bmxvYWRVcmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGEuaHJlZiA9IGRvd25sb2FkVXJsO1xuICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgYS5jbGljaygpO1xuXG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGRvd25sb2FkVXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRvd25sb2FkUGRmRm9yRGVwYXJ0bWVudChzdGF0ZV9jZW50ZXJfaWQsIGRlcGFydG1lbnRfaWQ6IHN0cmluZywgY29udGV4dDogc3RyaW5nLCBsYW5ndWFnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZW5kcG9pbnQgPVxuICAgICAgY29udGV4dCA9PT0gJ2FjYnAnXG4gICAgICAgID8gQVBJX0VORF9QT0lOVFMuRE9XTkxPQURfUERGX0FDQlBcbiAgICAgICAgOiBBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9QREY7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfSR7ZW5kcG9pbnR9P3N0YXRlX2NlbnRlcl9pZD0ke3N0YXRlX2NlbnRlcl9pZH0mZGVwYXJ0bWVudF9pZD0ke2RlcGFydG1lbnRfaWR9Jmxhbmd1YWdlPSR7bGFuZ3VhZ2V9YDtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcbiAgICB9KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cbiAgICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpO1xuICAgICAgY29uc29sZS5sb2coJ2NvbnRlbnREaXNwb3NpdGlvbicsIHJlcy5oZWFkZXJzKVxuICAgICAgbGV0IGZpbGVuYW1lID0gYENCUF9SZXBvcnRfJHtzdGF0ZV9jZW50ZXJfaWR9XyR7ZGVwYXJ0bWVudF9pZH0ucGRmYDtcblxuICAgICAgaWYgKGNvbnRlbnREaXNwb3NpdGlvbikge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbnRlbnREaXNwb3NpdGlvbi5tYXRjaCgvZmlsZW5hbWU9XCI/KFteXCJdKylcIj8vKTtcbiAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XG4gICAgICAgICAgZmlsZW5hbWUgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgYSBibG9iIFVSTCBhbmQgZG93bmxvYWRcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcmVzLmJvZHldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xuICAgICAgY29uc3QgZG93bmxvYWRVcmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGEuaHJlZiA9IGRvd25sb2FkVXJsO1xuICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgYS5jbGljaygpO1xuXG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGRvd25sb2FkVXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENlbnRlckJhc2VkRGVwYXJ0bWVudChzdGF0ZV9jZW50ZXJfaWQsIG9wdGlvbnM/OiB7IGxpbWl0PzogbnVtYmVyLCBvZmZzZXQ/OiBudW1iZXIsIHF1ZXJ5Pzogc3RyaW5nIH0pIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAgIC5zZXQoJ2xpbWl0JywgU3RyaW5nKG9wdGlvbnM/LmxpbWl0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmxpbWl0IDogNTApKVxuICAgICAgLnNldCgnb2Zmc2V0JywgU3RyaW5nKG9wdGlvbnM/Lm9mZnNldCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5vZmZzZXQgOiAwKSlcbiAgICAgIC5zZXQoJ3N1Yl9vcmdfdHlwZScsICdtaW5pc3RyeScpXG4gICAgaWYgKG9wdGlvbnM/LnF1ZXJ5KSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdxdWVyeScsIG9wdGlvbnMucXVlcnkpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuQ0VOVEVSX0JBU0VEX01JTklTVFJZfS8ke3N0YXRlX2NlbnRlcl9pZH1gLCB7IGhlYWRlcnMsIHBhcmFtcyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuXG4gIGRvd25sb2FkUGRmRm9yQ291cnNlUmVjb21tZW5kYXRpb24oc3RhdGVfY2VudGVyX2lkKSB7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9DT1VSU0VfUkVDT01NRU5EQVRJT059P3JvbGVfbWFwcGluZ19pZD0ke3N0YXRlX2NlbnRlcl9pZH1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgIH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgICAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LWRpc3Bvc2l0aW9uJyk7XG4gICAgICBsZXQgZmlsZW5hbWUgPSBgQ09VUlNFX1JFQ09NTUVOREFUSU9OX1JlcG9ydF8ke3N0YXRlX2NlbnRlcl9pZH0ucGRmYDtcblxuICAgICAgaWYgKGNvbnRlbnREaXNwb3NpdGlvbikge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbnRlbnREaXNwb3NpdGlvbi5tYXRjaCgvZmlsZW5hbWU9XCI/KFteXCJdKylcIj8vKTtcbiAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XG4gICAgICAgICAgZmlsZW5hbWUgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgYSBibG9iIFVSTCBhbmQgZG93bmxvYWRcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcmVzLmJvZHldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xuICAgICAgY29uc3QgZG93bmxvYWRVcmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGEuaHJlZiA9IGRvd25sb2FkVXJsO1xuICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgYS5jbGljaygpO1xuXG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGRvd25sb2FkVXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwbG9hZERvY3VtZW50KHJlcUJvZHksIGZpbGU/OiBGaWxlKSB7XG4gICAgY29uc3Qgc3RvcmFnZURhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luRGF0YScpKVxuICAgIC8vICBjb25zb2xlLmxvZygnc3RvcmFnZURhdGEtLScsIHN0b3JhZ2VEYXRhKVxuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtzdG9yYWdlRGF0YT8uYWNjZXNzX3Rva2VufWBcbiAgICB9KTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG5cbiAgICAvLyBBZGQgcmVxdWlyZWQgZmllbGRzXG4gICAgLy8gaWYgKHJlcUJvZHkuc3RhdGVfY2VudGVyX2lkKSB7XG4gICAgLy8gICBmb3JtRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9pZCcsIHJlcUJvZHkuc3RhdGVfY2VudGVyX2lkKTtcbiAgICAvLyB9XG5cbiAgICAvLyBpZiAocmVxQm9keS5kZXBhcnRtZW50X2lkKSB7XG4gICAgLy8gICBmb3JtRGF0YS5hcHBlbmQoJ2RlcGFydG1lbnRfaWQnLCByZXFCb2R5LmRlcGFydG1lbnRfaWQpO1xuICAgIC8vIH1cblxuXG5cbiAgICAvLyBpZihyZXFCb2R5LmRvY3VtZW50TmFtZSkge1xuICAgIC8vICAgZm9ybURhdGEuYXBwZW5kKCdkb2N1bWVudF9uYW1lJywgcmVxQm9keS5kb2N1bWVudE5hbWUpO1xuICAgIC8vIH1cbiAgICAvLyBBZGQgZmlsZSBpZiBwcm92aWRlZFxuICAgIC8vIGlmIChmaWxlKSB7XG4gICAgLy8gICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcbiAgICAvLyB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuVVBMT0FEX0RPQ1VNRU5UfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRVcGxvYWRlZERvY3VtZW50cyhyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVycztcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHJlcUJvZHkpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldChrZXksIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfRE9DVU1FTlRTfWAsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBwYXJhbXNcbiAgICB9KS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUZpbGUoZmlsZUlkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREVMRVRFX0ZJTEV9LyR7ZmlsZUlkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICB0cmlnZ2VyRmlsZVN1bW1hcnkoZmlsZUlkKSB7XG4gICAgY29uc3Qgc3RvcmFnZURhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luRGF0YScpKVxuICAgIC8vIGNvbnNvbGUubG9nKCdzdG9yYWdlRGF0YS0tJywgc3RvcmFnZURhdGEpXG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3N0b3JhZ2VEYXRhPy5hY2Nlc3NfdG9rZW59YFxuICAgIH0pO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ERUxFVEVfRklMRX0vJHtmaWxlSWR9L3N1bW1hcnlgLCB7fSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGRvd25sb2FkRmlsZShmaWxlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QmxvYj4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnM7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9GSUxFfS8ke2ZpbGVJZH0vZG93bmxvYWRgLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZVN1bW1hcnkoZmlsZUlkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREVMRVRFX1NVTU1BUll9LyR7ZmlsZUlkfS9zdW1tYXJ5YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGRlbGV0ZVJlY29tbWVuZGVkQ291cnNlKHJvbGVNYXBwaW5nSWQ6IHN0cmluZywgY291cnNlSWRlbnRpZmllcjogc3RyaW5nICwgcmVxdWVzdElkPzogc3RyaW5nKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVycztcblxuICAgIGlmKHRoaXMuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgbGV0IHJlcUJvZHkgPSB7XG4gICAgICAgICAgXCJyZXF1ZXN0X2lkXCI6IHJlcXVlc3RJZCxcbiAgICAgICAgICBcIml0ZW1faWRcIjogcm9sZU1hcHBpbmdJZCxcbiAgICAgICAgICBcImlkZW50aWZpZXJcIjogY291cnNlSWRlbnRpZmllclxuICAgICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuTURPX0RFTEVURV9BUFBST1ZFX0NPVVJTRX1gLCByZXFCb2R5KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oXG4gICAgICBgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ERUxFVEVfQ09VUlNFX1JFQ09NTUVOREFUSU9OfS8ke3JvbGVNYXBwaW5nSWR9L2NvdXJzZS8ke2NvdXJzZUlkZW50aWZpZXJ9YCxcbiAgICAgIHsgaGVhZGVycyB9XG4gICAgKTtcbiAgICB9XG5cbiAgICBcbiAgfVxuXG4gIGdldENicFBsYW5zV2l0aFNlbGVjdGVkQ291cnNlcygpOiBhbnlbXSB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5jYnBQbGFuRmluYWxPYmo7XG5cbiAgICByZXR1cm4gc291cmNlPy5yb2xlX21hcHBpbmdfZ2VuZXJhdGlvblxuICAgICAgPy5mbGF0TWFwKChyb2xlOiBhbnkpID0+IHJvbGUuY2JwX3BsYW5zIHx8IFtdKVxuICAgICAgPy5maWx0ZXIoXG4gICAgICAgIChwbGFuOiBhbnkpID0+XG4gICAgICAgICAgQXJyYXkuaXNBcnJheShwbGFuLnNlbGVjdGVkX2NvdXJzZXMpICYmXG4gICAgICAgICAgcGxhbi5zZWxlY3RlZF9jb3Vyc2VzLmxlbmd0aCA+IDBcbiAgICAgICkgfHwgW107XG4gIH1cblxuICBnZXRBZGRpdGlvbmFsUGFyYW1ldGVyZm9yU3VnZ2VzdGVkQ291cnNlcyhpZGVudGlmaWVycykge1xuICAgIFxuICAgIGxldCByZXFCb2R5ID0ge1xuICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgXCJmaWx0ZXJzXCI6IHtcbiAgICAgICAgICBcImlkZW50aWZpZXJcIjogaWRlbnRpZmllcnMsXG5cblxuICAgICAgICAgIFwic3RhdHVzXCI6IFtcbiAgICAgICAgICAgIFwiTGl2ZVwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZpZWxkc1wiOiBbXG4gICAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgICAgXCJsYW5ndWFnZVwiLFxuICAgICAgICAgIFwiaWRlbnRpZmllclwiLFxuICAgICAgICAgIFwiYXZnUmF0aW5nXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJsaW1pdFwiOiAxMDAwLFxuICAgICAgICBcIm9mZnNldFwiOiAwLFxuICAgICAgICBcInNvcnRfYnlcIjoge31cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuZnJvbU1kb1BvcnRhbCkge1xuXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuTURPX1NVR0dFU1RFRF9DT1VSU0VfTElTVH1gLCByZXFCb2R5KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNVR0dFU1RFRF9DT1VSU0VfTElTVH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH1cblxuICB9XG5cbiAgdXBkYXRlRGVzaWduYXRpb25IaWVyYXJjaHkocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlVQREFURV9ERVNJR05BVElPTl9ISUVSQVJDSFl9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHNlYXJjaFB1YmxpY0Rlc2lnbmF0aW9uKHJlcUJvZHkpIHtcbiAgICBpZiAodGhpcy5mcm9tTWRvUG9ydGFsKSB7XG4gICAgICBsZXQgbWRvQmFzZVVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuTURPX0RFU0lHTkFUSU9OX1NFQVJDSH1gLCByZXFCb2R5KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNFQVJDSF9QVUJMSUNfREVTSUdOQVRJT059YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9XG5cbiAgfVxuXG4gIGdldERhc2hib2FyZEFkbWluKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREFTSEJPQVJEX0FETUlOfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXREYXNoYm9hcmRHYXBBbmFseXNpc0FkbWluKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0FQX0FOQUxZU0lTX0FETUlOfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXREYXNoYm9hcmRQdWJsaWMocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5EQVNIQk9BUkRfUFVCTElDfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXREYXNoYm9hcmRHYXBBbmFseXNpc1B1YmxpYyhyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdBUF9BTkFMWVNJU19QVUJMSUN9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldE1hdGNoZWRSb2xlTWFwcGluZyhyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLk1BVENIRURfUk9MRV9NQVBQSU5HfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuXG5nZXRBcHByb3ZhbFJlcXVlc3RzKHJlcUJvZHk6IGFueSkge1xuXG4gIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnM7XG5cbiAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG5cbiAgaWYgKHJlcUJvZHk/LnBhZ2UpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlJywgcmVxQm9keS5wYWdlKTtcbiAgfVxuXG4gIGlmIChyZXFCb2R5Py5wYWdlX3NpemUpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlX3NpemUnLCByZXFCb2R5LnBhZ2Vfc2l6ZSk7XG4gIH1cblxuICBpZiAocmVxQm9keT8uc2VhcmNoKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgnc2VhcmNoJywgcmVxQm9keS5zZWFyY2gpO1xuICB9XG5cbiAgaWYgKHJlcUJvZHk/LnN0YXR1cykge1xuICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3N0YXR1cycsIHJlcUJvZHkuc3RhdHVzKTtcbiAgfVxuXG4gIGlmIChyZXFCb2R5Py5mcm9tX2RhdGUpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdmcm9tX2RhdGUnLCByZXFCb2R5LmZyb21fZGF0ZSk7XG4gIH1cblxuICBpZiAocmVxQm9keT8udG9fZGF0ZSkge1xuICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3RvX2RhdGUnLCByZXFCb2R5LnRvX2RhdGUpO1xuICB9XG5cbiAgaWYgKHJlcUJvZHk/LnN0YXRlX2NlbnRlcl9pZCkge1xuICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3N0YXRlX2NlbnRlcl9pZCcsIHJlcUJvZHkuc3RhdGVfY2VudGVyX2lkKTtcbiAgfVxuXG4gIGlmIChyZXFCb2R5Py5kZXBhcnRtZW50X2lkKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgnZGVwYXJ0bWVudF9pZCcsIHJlcUJvZHkuZGVwYXJ0bWVudF9pZCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KFxuICAgIGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9BUFBST1ZBTF9SRVFVRVNUU31gLFxuICAgIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBwYXJhbXNcbiAgICB9XG4gICkucGlwZShcbiAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKVxuICApO1xufVxuXG4gIHNhdmVBcHByb3ZhbFJlcXVlc3QocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TQVZFX0FQUFJPVkFMX1JFUVVFU1R9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHNlYXJjaFB1YmxpY21kbyhyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNFQVJDSF9QVUJMSUNfTURPfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICB2aWV3QXBwcm92YWxSZXF1ZXN0cyhyZXF1ZXN0X2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuVklFV19BUFBST1ZBTF9SRVFVRVNUfS8ke3JlcXVlc3RfaWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHZpZXdNRE9BcHByb3ZhbFJlcXVlc3RzKHJlcXVlc3RfaWQpIHtcbiAgICBsZXQgbWRvQmFzZVVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuVklFV19NRE9fQVBQUk9WQUxfUkVRVUVTVH0vJHtyZXF1ZXN0X2lkfWApXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGFwcHJvdmVBbmRQdWJsaXNoTURPQXBwcm92YWxSZXF1ZXN0cyhyZXF1ZXN0KSB7XG4gICAgbGV0IG1kb0Jhc2VVcmwgPSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJ1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMubWRvQmFzZVVybH0vJHtBUElfRU5EX1BPSU5UUy5BUFBST1ZFX0FORF9QVUJMSVNIX01ET19BUFBST1ZBTF9SRVFVRVNUfWAsIHJlcXVlc3QpXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHJlamVjdE1ET0FwcHJvdmFsUmVxdWVzdHMocmVxdWVzdCkge1xuICAgIGxldCBtZG9CYXNlVXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCdcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuUkVKRUNUX0FQUFJPVkFMX1JFUVVFU1R9YCwgcmVxdWVzdClcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgcmVqZWN0SXRlbU1ET0FwcHJvdmFsUmVxdWVzdHMocmVxdWVzdCkge1xuICAgIGxldCBtZG9CYXNlVXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCdcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuUkVKRUNUX0lURU1fQVBQUk9WQUxfUkVRVUVTVH1gLCByZXF1ZXN0KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICByZXZva2VBcHByb3ZhbFJlcXVlc3QocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5SRVZPS0VfQVBQUk9WQUxfUkVRVUVTVH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgc2F2ZURlc2lnbmF0aW9uQXBwcm92YWxSZXF1ZXN0KHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0FWRV9ERVNJR05BVElPTl9BUFBST1ZBTF9SRVFVRVNUfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICAgUmVQdWJsaXNoTURPQXBwcm92YWxSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICBsZXQgbWRvQmFzZVVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS8ke0FQSV9FTkRfUE9JTlRTLlJFUFVCTElTSF9SRVFVRVNUfWAsIHJlcXVlc3QpXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gICBnZXRSb2xlTWFwcGluZ1JlT3JkZXJMaXN0KHN0YXRlX2NlbnRlcl9pZCwgX2RlcGFydG1lbnRfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgaWYgKHR5cGVvZiBfZGVwYXJ0bWVudF9pZCA9PT0gJ3N0cmluZycpe1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfUk9MRV9NQVBQSU5HX1JFT1JERVJfTElTVH0/c3RhdGVfY2VudGVyX2lkPSR7c3RhdGVfY2VudGVyX2lkfSZkZXBhcnRtZW50X2lkPSR7X2RlcGFydG1lbnRfaWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfUk9MRV9NQVBQSU5HX1JFT1JERVJfTElTVH0/c3RhdGVfY2VudGVyX2lkPSR7c3RhdGVfY2VudGVyX2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfVxuXG4gIH1cblxufVxuIl19
|
|
1111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxZQUFZO0FBQ1osT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUErQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTs7OztBQUV6QywrRUFBK0U7QUFFL0UsTUFBTSxjQUFjLEdBQUc7SUFDckIsYUFBYSxFQUFFLDBCQUEwQjtJQUN6QyxvQkFBb0IsRUFBRSwwQkFBMEI7SUFDaEQscUJBQXFCLEVBQUUsMEJBQTBCO0lBQ2pELGtCQUFrQixFQUFFLHdCQUF3QjtJQUM1QyxhQUFhLEVBQUUsNkJBQTZCO0lBQzVDLGFBQWEsRUFBRSwwQkFBMEI7SUFDekMsZ0JBQWdCLEVBQUUsZ0NBQWdDO0lBQ2xELGdCQUFnQixFQUFFLHlDQUF5QztJQUMzRCxtQkFBbUIsRUFBRSx1Q0FBdUM7SUFDNUQsY0FBYyxFQUFFLDJDQUEyQztJQUMzRCxnQ0FBZ0MsRUFBRSw2Q0FBNkM7SUFDL0UsMkNBQTJDLEVBQUUsNkNBQTZDO0lBQzFGLG1CQUFtQixFQUFFLGdDQUFnQztJQUNyRCxzQkFBc0IsRUFBRSxvQkFBb0I7SUFDNUMsWUFBWSxFQUFFLGlDQUFpQztJQUMvQyxXQUFXLEVBQUUsNEJBQTRCO0lBQ3pDLGNBQWMsRUFBRSw0QkFBNEI7SUFDNUMscUJBQXFCLEVBQUUsMEJBQTBCO0lBQ2pELDRCQUE0QixFQUFFLDJDQUEyQztJ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QUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtnQkFDMUIsT0FBTyxRQUFRLENBQUE7WUFDakIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUNOO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsNkJBQTZCLG9CQUFvQixlQUFlLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDO2lCQUN4SSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzFCLE9BQU8sUUFBUSxDQUFBO1lBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDTjtJQUVILENBQUM7K0dBM3BDVSxhQUFhO21IQUFiLGFBQWEsY0FIWixNQUFNOzs0RkFHUCxhQUFhO2tCQUp6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjsySEFrQkMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuLy9JbmplY3RhYmxlXG5pbXBvcnQgeyBIb3N0TGlzdGVuZXIsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IEluaXRTZXJ2aWNlIH0gZnJvbSAnLi9pbml0LnNlcnZpY2UnO1xuLy8gaW1wb3J0IGNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vLi4vLi4vLi4vYXNzZXRzL2pzb25maWxlcy9jb25maWd1cmF0aW9ucy5qc29uJ1xuXG5jb25zdCBBUElfRU5EX1BPSU5UUyA9IHtcbiAgRkVUQ0hfQ09VUlNFUzogJ2FwaS92MS9jb3Vyc2UvdjIvZXhwbG9yZScsXG4gIEZFVENIX1BPU1RBTF9DT1VSU0VTOiAnYXBpL3YxL2NvbnRlbnQvdjEvc2VhcmNoJyxcbiAgRkVUQ0hfUkFJTFdBWV9DT1VSU0VTOiAnYXBpL3YxL2NvbnRlbnQvdjEvc2VhcmNoJyxcbiAgRkVUQ0hfSEFMTF9PRl9GQU1FOiAnYXBpL3YxL2hhbGxvZmZhbWUvcmVhZCcsXG4gIE5MV19GT1JNX1JFQUQ6ICdhcGlzL3YxL3N0YXRpYy9mb3JtL3YxL3JlYWQnLFxuICBGRVRDSF9URU5ERVJTOiAnYXBpL3YxL2NvbnRlbnQvdjEvc2VhcmNoJyxcbiAgR0VUX1NUQVRFX0NFTlRFUjogJ2NicC10cGMtYWkvYXBpL3YxL3N0YXRlLWNlbnRlcicsXG4gIEdFVF9ST0xFX01BUFBJTkc6ICdjYnAtdHBjLWFpL2FwaS92My9yb2xlLW1hcHBpbmcvZ2VuZXJhdGUnLFxuICBERUxFVEVfUk9MRV9NQVBQSU5HOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nL2RlbGV0ZScsXG4gIEdFVF9ERVBBUlRNRU5UOiAnY2JwLXRwYy1haS9hcGkvdjEvZGVwYXJ0bWVudC9zdGF0ZS1jZW50ZXInLFxuICBHRVRfUk9MRV9NQVBQSU5HX0JZX1NUQVRFX0NFTlRFUjogJ2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZy9zdGF0ZS1jZW50ZXInLFxuICBHRVRfUk9MRV9NQVBQSU5HX0JZX1NUQVRFX0NFTlRFUl9ERVBBUlRNRU5UOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nL3N0YXRlLWNlbnRlcicsXG4gIFVQREFURV9ST0xFX01BUFBJTkc6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcnLFxuICBHRVRfUkVDT01NRU5ERURfQ09VUlNFOiAnY2JwLXRwYy1haS9hcGkvdjEvJyxcbiAgU0FWRV9DT1VSU0VTOiAnY2JwLXRwYy1haS9hcGkvdjEvY2JwLXBsYW4vc2F2ZScsXG4gIEdFVF9DT1VSU0VTOiAnY2JwLXRwYy1haS9hcGkvdjEvY2JwLXBsYW4nLFxuICBVUERBVEVfQ09VUlNFUzogJ2NicC10cGMtYWkvYXBpL3YxL2NicC1wbGFuJyxcbiAgSUdPVF9TVUdHRVNURURfQ09VUlNFOiAnYXBpL3YxL2NvbnRlbnQvdjEvc2VhcmNoJyxcbiAgU0FWRV9DT1VSU0VfU1VHR0VTVEVEX0NPVVJTRTogJ2NicC10cGMtYWkvYXBpL3YxL2NvdXJzZS9zdWdnZXN0aW9ucy9zYXZlJyxcbiAgU1VHR0VTVEVEX0NPVVJTRV9MSVNUOiAnY2JwLXRwYy1haS9hcGkvdjEvY291cnNlL3N1Z2dlc3Rpb25zJyxcbiAgQUREX0RFU0lHTkFUSU9OOiAnY2JwLXRwYy1haS9hcGkvdjIvcm9sZS1tYXBwaW5nL2FkZC1kZXNpZ25hdGlvbicsXG4gIExPR0lOOiAnY2JwLXRwYy1haS9hcGkvdjEvYXV0aC9sb2dpbicsXG4gIExPR09VVDogJ2NicC10cGMtYWkvYXBpL3YxL2F1dGgvbG9nb3V0JyxcbiAgREVMRVRFX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVI6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcnLFxuICBBRERfVVNFUl9DT1VSU0VTOiAnY2JwLXRwYy1haS9hcGkvdjEvdXNlci1hZGRlZC1jb3Vyc2VzJyxcbiAgR0VUX1VTRVJfQ09VUlNFUzogJ2NicC10cGMtYWkvYXBpL3YxL3VzZXItYWRkZWQtY291cnNlcy9yb2xlLW1hcHBpbmcnLFxuICBHRVRfVVNFUl9TRUxFQ1RFRF9DT1VSU0VTOiAnY2JwLXRwYy1haS9hcGkvdjEvY2JwLXBsYW4nLFxuICBVUExPQURfRE9DVU1FTlQ6ICdjYnAtdHBjLWFpL2FwaS92MS9maWxlcycsXG4gIEdFVF9ET0NVTUVOVFM6ICdjYnAtdHBjLWFpL2FwaS92MS9maWxlcycsXG4gIERFTEVURV9GSUxFOiAnY2JwLXRwYy1haS9hcGkvdjEvZmlsZXMnLFxuICBUUklHR0VSX0ZJTEVfU1VNTUFSWTogJ2NicC10cGMtYWkvYXBpL3YxL2ZpbGVzJyxcbiAgRE9XTkxPQURfRklMRTogJ2NicC10cGMtYWkvYXBpL3YxL2ZpbGVzJyxcbiAgREVMRVRFX1NVTU1BUlk6ICdjYnAtdHBjLWFpL2FwaS92MS9maWxlcycsXG4gIEdFVF9VU0VSX1BST0ZJTEU6ICdjYnAtdHBjLWFpL2FwaS92MS91c2Vycy9tZScsXG4gIEdFVF9VU0VSX1JFQ09NTUVORURfQ09VUlNFUzogJ2NicC10cGMtYWkvYXBpL3YxL2NvdXJzZS1yZWNvbW1lbmRhdGlvbnMnLFxuICBET1dOTE9BRF9QREY6ICdjYnAtdHBjLWFpL2FwaS92MS9yZXBvcnRzL2NicC1wbGFuL2Rvd25sb2FkJyxcbiAgRE9XTkxPQURfUERGX0FDQlA6ICdjYnAtdHBjLWFpL2FwaS92MS9yZXBvcnRzL2FjYnAtcGxhbi9kb3dubG9hZCcsXG4gIENFTlRFUl9CQVNFRF9NSU5JU1RSWTogJ2NicC10cGMtYWkvYXBpL3YxL2RlcGFydG1lbnQvc3RhdGUtY2VudGVyJyxcbiAgRE9XTkxPQURfQ09VUlNFX1JFQ09NTUVOREFUSU9OOiAnY2JwLXRwYy1haS9hcGkvdjEvcmVwb3J0cy9jb3Vyc2UtcmVjb21tZW5kYXRpb25zL2Rvd25sb2FkJyxcbiAgREVMRVRFX0NPVVJTRV9SRUNPTU1FTkRBVElPTjogJ2NicC10cGMtYWkvYXBpL3YxL2NicC1wbGFuJyxcbiAgVVBEQVRFX0RFU0lHTkFUSU9OX0hJRVJBUkNIWTogJ2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZy9yZW9yZGVyJyxcbiAgU0VBUkNIX1BVQkxJQ19ERVNJR05BVElPTjogJ2FwaXMvcHVibGljL3Y4L2Rlc2lnbmF0aW9uL3NlYXJjaCcsXG4gIERBU0hCT0FSRF9BRE1JTjogJ2NicC10cGMtYWkvYXBpL3YxL2Rhc2hib2FyZC9jYnAtZGFzaGJvYXJkLW1ldHJpY3MnLFxuICBHQVBfQU5BTFlTSVNfQURNSU46ICdjYnAtdHBjLWFpL2FwaS92MS9kYXNoYm9hcmQvZ2FwLWFuYWx5c2lzJyxcbiAgREFTSEJPQVJEX1BVQkxJQzogJ2NicC10cGMtYWkvYXBpL3YxL2Rhc2hib2FyZC9teS1kYXNoYm9hcmQtbWV0cmljcycsXG4gIEdBUF9BTkFMWVNJU19QVUJMSUM6ICdjYnAtdHBjLWFpL2FwaS92MS9kYXNoYm9hcmQvbXktZ2FwLWFuYWx5c2lzJyxcbiAgTUFUQ0hFRF9ST0xFX01BUFBJTkc6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcvbWF0Y2gtZGVzaWduYXRpb25zJyxcbiAgR0VUX0FQUFJPVkFMX1JFUVVFU1RTOiAnY2JwLXRwYy1haS9hcGkvdjEvYXBwcm92YWwtcmVxdWVzdHMvbGlzdCcsXG4gIFNFQVJDSF9QVUJMSUNfTURPOiAnY2JwLXRwYy1haS9hcGkvdjEvYXBwcm92YWwtcmVxdWVzdHMvbWRvLWFkbWlucycsXG4gIFNBVkVfQVBQUk9WQUxfUkVRVUVTVDogJ2NicC10cGMtYWkvYXBpL3YxL2FwcHJvdmFsLXJlcXVlc3RzL3NlbmQnLFxuICBWSUVXX0FQUFJPVkFMX1JFUVVFU1Q6ICdjYnAtdHBjLWFpL2FwaS92MS9hcHByb3ZhbC1yZXF1ZXN0cycsXG4gIFJFVk9LRV9BUFBST1ZBTF9SRVFVRVNUOiAnY2JwLXRwYy1haS9hcGkvdjEvYXBwcm92YWwtcmVxdWVzdHMvcmV2b2tlJyxcbiAgU0FWRV9ERVNJR05BVElPTl9BUFBST1ZBTF9SRVFVRVNUOiAnY2JwLXRwYy1haS9hcGkvdjEvZGVzaWduYXRpb24tYXBwcm92YWwvY3JlYXRlJyxcbiAgVklFV19NRE9fQVBQUk9WQUxfUkVRVUVTVDogJ2FwaXMvcHJveGllcy92OC9haS9jYnAvdjEvbWRvL2FwcHJvdmFsLXJlcXVlc3RzL3JlYWQnLFxuICBBUFBST1ZFX0FORF9QVUJMSVNIX01ET19BUFBST1ZBTF9SRVFVRVNUOiAnYXBpcy9wcm94aWVzL3Y4L2FpL2NicC92MS9tZG8vYXBwcm92YWwtcmVxdWVzdHMvcHVibGlzaCcsXG4gIFJFSkVDVF9BUFBST1ZBTF9SRVFVRVNUOiAnYXBpcy9wcm94aWVzL3Y4L2FpL2NicC92MS9tZG8vYXBwcm92YWwtcmVxdWVzdHMvcmVqZWN0JyxcbiAgUkVKRUNUX0lURU1fQVBQUk9WQUxfUkVRVUVTVDogJ2FwaXMvcHJveGllcy92OC9haS9jYnAvdjEvbWRvL2FwcHJvdmFsLXJlcXVlc3RzL2l0ZW1zL3JlamVjdCcsXG4gIE1ET19ERVNJR05BVElPTl9TRUFSQ0g6ICdhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL2Rlc2lnbmF0aW9uL3NlYXJjaCcsXG4gIE1ET19BRERfVVNFUl9DT1VSU0U6ICdhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL21kby9hcHByb3ZhbC1yZXF1ZXN0cy9jb3Vyc2UvYWRkJyxcbiAgTURPX1NVR0dFU1RFRF9DT1VSU0VfTElTVDogJ2FwaXMvcHJveGllcy92OC9haS9jYnAvdjEvY291cnNlL3N1Z2dlc3Rpb25zJyxcbiAgTURPX1JPTEVfTUFQUElOR19VUERBVEU6J2FwaXMvcHJveGllcy92OC9haS9jYnAvdjEvbWRvL2FwcHJvdmFsLXJlcXVlc3RzL2l0ZW1zL3VwZGF0ZScsXG4gIFJFUFVCTElTSF9SRVFVRVNUOiAnYXBpcy9wcm94aWVzL3Y4L2FpL2NicC92MS9tZG8vYXBwcm92YWwtcmVxdWVzdHMvcHVibGlzaC9yZXRyeScsXG4gIE1ET19BRERfQ09VUlNFOidhcGlzL3Byb3hpZXMvdjgvYWkvY2JwL3YxL21kby9hcHByb3ZhbC1yZXF1ZXN0cy9jb3Vyc2UvYWRkJyxcbiAgTURPX0RFTEVURV9BUFBST1ZFX0NPVVJTRTonYXBpcy9wcm94aWVzL3Y4L2FpL2NicC92MS9tZG8vYXBwcm92YWwtcmVxdWVzdHMvY291cnNlL3JlbW92ZScsXG4gIFNFQVJDSF9ST0xFX01BUFBJTkc6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcvc2VhcmNoJyxcbiAgR0VUX1JPTEVfTUFQUElOR19SRU9SREVSX0xJU1Q6J2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZy9yZW9yZGVyL2xpc3QnXG59XG5cblxuXG4vLyBARGlyZWN0aXZlKClcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuXG5leHBvcnQgY2xhc3MgU2hhcmVkU2VydmljZSB7XG4gIGNicFBsYW5GaW5hbE9iajogYW55ID0ge31cbiAgYmFzZVVybDogc3RyaW5nXG4gIGNvbmZpZ0RldGFpbHM6IGFueVxuICBtZG9CYXNlVXJsOiBhbnlcbiAgbWRvQ29uZmlnRGV0YWlsczogYW55XG4gIHNjcmVlbldpZHRoOiBudW1iZXI7XG4gIGhlYWRlcnM6IGFueVxuICBzdW1tYXJ5VHJpZ2dlckV4ZWN1dGVkID0gbmV3IFN1YmplY3QoKVxuICBsb2dpblN1Y2Nlc3MgPSBuZXcgU3ViamVjdCgpXG4gIGNoZWNrUm9sZU1hcHBpbmdGb3JtVmFsaWRhdGlvbiA9IG5ldyBTdWJqZWN0KClcbiAgdXBkYXRlRGVzaWduYXRpb25IaWVyYXJjaHlTdWJqZWN0ID0gbmV3IFN1YmplY3QoKVxuICBmcm9tTWRvUG9ydGFsID0gZmFsc2VcbiAgcmVxdWVzdERhdGE6YW55XG4gIHJvbGVNYXBwaW5nR2VuZXJhdGlvbkRhdGE6YW55XG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBvblJlc2l6ZShldmVudCkge1xuICAgIHRoaXMuc2NyZWVuV2lkdGggPSBldmVudC50YXJnZXQuaW5uZXJXaWR0aDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGluaXRTdmM6IEluaXRTZXJ2aWNlLFxuICApIHtcbiAgICBpZiAoaW5pdFN2YyAmJiB0aGlzLmluaXRTdmMuYmFzZVVybCAmJiB0aGlzLmluaXRTdmMuY29uZmlnRGV0YWlscykge1xuICAgICAgY29uc29sZS5sb2coJ3RoaXMuaW5pdFN2YycsIHRoaXMuaW5pdFN2YylcbiAgICAgIHRoaXMuYmFzZVVybCA9IHRoaXMuaW5pdFN2Yy5iYXNlVXJsXG4gICAgICB0aGlzLmNvbmZpZ0RldGFpbHMgPSB0aGlzLmluaXRTdmMuY29uZmlnRGV0YWlsc1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldENvbmZpRGV0YWlscygpXG4gICAgfVxuICAgIHRoaXMuc2NyZWVuV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBjb25zdCBzdG9yYWdlRGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9naW5EYXRhJykpXG4gICAgY29uc29sZS5sb2coJ3N0b3JhZ2VEYXRhLS0nLCBzdG9yYWdlRGF0YSlcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7c3RvcmFnZURhdGE/LmFjY2Vzc190b2tlbn1gXG4gICAgfSk7XG4gIH1cblxuICBzZXRDb25maURldGFpbHMoY29uZmlnRGV0YWlsczogYW55ID0gbnVsbCkge1xuICAgIGlmIChjb25maWdEZXRhaWxzKSB7XG4gICAgICB0aGlzLmNvbmZpZ0RldGFpbHMgPSBjb25maWdEZXRhaWxzXG4gICAgICB0aGlzLmJhc2VVcmwgPSBjb25maWdEZXRhaWxzLnBvcnRhbFVSTFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldENvbmZpZ0RldGFpbHMoKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jb25maWdEZXRhaWxzID0gcmVzcG9uc2VcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gcmVzcG9uc2UucG9ydGFsVVJMXG4gICAgICB9KVxuICAgIH1cbiAgfVxuICBnZXRDb25maWcoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnRGV0YWlscykge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnRGV0YWlscztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZ2V0Q29uZmlnRGV0YWlscygpOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PignYXNzZXRzL2pzb25maWxlcy9jb25maWd1cmF0aW9ucy5qc29uJyk7XG4gIH1cblxuXG5cbiAgZ2V0Y291cnNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkZFVENIX0NPVVJTRVN9YClcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRlRmVhdHVyZUNvdXJzZXMocmVzcG9uc2UucmVzdWx0LmNvbnRlbnQpXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFBvc3RhbGNvdXJzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5GRVRDSF9QT1NUQUxfQ09VUlNFU31gKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdGVGZWF0dXJlQ291cnNlcyhyZXNwb25zZS5yZXN1bHQuY29udGVudClcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0UmFpbHdheWNvdXJzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5GRVRDSF9SQUlMV0FZX0NPVVJTRVN9YClcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRlRmVhdHVyZUNvdXJzZXMocmVzcG9uc2UucmVzdWx0LmNvbnRlbnQpXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldEhhbGxPZkZhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfSEFMTF9PRl9GQU1FfWAsIG51bGwpXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGZvcm1hdGVGZWF0dXJlQ291cnNlcyhmZWF0dXJlQ291cnNlczogYW55KSB7XG4gICAgY29uc3QgZm9ybWF0ZWRGZWF0dXJlQ291cnNlcyA9IFtdO1xuICAgIGNvbnN0IGZvcm1hdGVkTmV3c3Jvb20gPSBbXTtcbiAgICBjb25zdCBmb3JtYXRlZFBob3RvZ2FsbGFyeSA9IFtdO1xuICAgIGNvbnN0IGZvcm1hdGVkVGVzdGltb25pYWwgPSBbXTtcbiAgICBpZiAoZmVhdHVyZUNvdXJzZXMpIHtcbiAgICAgIGZlYXR1cmVDb3Vyc2VzLmZvckVhY2goY291cnNlID0+IHtcbiAgICAgICAgaWYgKGNvdXJzZS5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdDb3Vyc2UnKSB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ZWRDb3Vyc2UgPSB7XG4gICAgICAgICAgICBwb3N0ZXJJbWFnZTogY291cnNlLnBvc3RlckltYWdlLFxuICAgICAgICAgICAgb3JnYW5pc2F0aW9uOiBjb3Vyc2Uub3JnYW5pc2F0aW9uWzBdID8gY291cnNlLm9yZ2FuaXNhdGlvblswXSA6ICdLYXJtYXlvZ2kgQmhhcmF0JyxcbiAgICAgICAgICAgIG5hbWU6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGNvdXJzZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGNvdXJzZS5pZGVudGlmaWVyLFxuICAgICAgICAgICAgYWx0OiBjb3Vyc2UubmFtZSxcbiAgICAgICAgICAgIGNyZWF0b3JMb2dvOiBjb3Vyc2UuY3JlYXRvckxvZ28gfHwgJycsXG4gICAgICAgICAgICBkdXJhdGlvbjogdGhpcy50aW1lQ29udmVydChjb3Vyc2UuZHVyYXRpb24pLFxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtYXRlZEZlYXR1cmVDb3Vyc2VzLnB1c2goZm9ybWF0ZWRDb3Vyc2UpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY291cnNlLnJlc291cmNlQ2F0ZWdvcnkgPT09ICdOZXdzcm9vbScpIHtcbiAgICAgICAgICBjb25zdCBmb3JtYXRlZENvdXJzZSA9IHtcbiAgICAgICAgICAgIHBvc3RlckltYWdlOiBjb3Vyc2UucG9zdGVySW1hZ2UsXG4gICAgICAgICAgICBuYW1lOiBjb3Vyc2UubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjb3Vyc2UuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBjb3Vyc2UuaWRlbnRpZmllcixcbiAgICAgICAgICAgIGFsdDogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBjbG91ZFN0b3JhZ2VLZXk6IGAke3RoaXMuYmFzZVVybH1hc3NldHMvcHVibGljLyR7Y291cnNlLmNsb3VkU3RvcmFnZUtleX1gXG4gICAgICAgICAgfVxuICAgICAgICAgIGZvcm1hdGVkTmV3c3Jvb20ucHVzaChmb3JtYXRlZENvdXJzZSlcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb3Vyc2UucmVzb3VyY2VDYXRlZ29yeSA9PT0gJ1Bob3RvIEdhbGxlcnknKSB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ZWRDb3Vyc2UgPSB7XG4gICAgICAgICAgICBuYW1lOiBjb3Vyc2UubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjb3Vyc2UuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBjb3Vyc2UuaWRlbnRpZmllcixcbiAgICAgICAgICAgIGFsdDogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBjbG91ZFN0b3JhZ2VLZXk6IGAke3RoaXMuYmFzZVVybH1hc3NldHMvcHVibGljLyR7Y291cnNlLmNsb3VkU3RvcmFnZUtleX1gXG4gICAgICAgICAgfVxuICAgICAgICAgIGZvcm1hdGVkUGhvdG9nYWxsYXJ5LnB1c2goZm9ybWF0ZWRDb3Vyc2UpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY291cnNlLnJlc291cmNlQ2F0ZWdvcnkgPT09ICdUZXN0aW1vbmlhbHMnKSB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ZWRDb3Vyc2UgPSB7XG4gICAgICAgICAgICBuYW1lOiBjb3Vyc2UubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjb3Vyc2UuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBjb3Vyc2UuaWRlbnRpZmllcixcbiAgICAgICAgICAgIGFsdDogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBjbG91ZFN0b3JhZ2VLZXk6IGAke3RoaXMuYmFzZVVybH1hc3NldHMvcHVibGljLyR7Y291cnNlLmNsb3VkU3RvcmFnZUtleX1gLFxuICAgICAgICAgICAgbWltZVR5cGU6IGNvdXJzZS5taW1lVHlwZSxcbiAgICAgICAgICAgIHBvc3RlckltYWdlOiBjb3Vyc2UucG9zdGVySW1hZ2UsXG4gICAgICAgICAgICBhcnRpZmFjdFVybDogY291cnNlLmFydGlmYWN0VXJsLFxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtYXRlZFRlc3RpbW9uaWFsLnB1c2goZm9ybWF0ZWRDb3Vyc2UpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4geyBjb3Vyc2U6IGZvcm1hdGVkRmVhdHVyZUNvdXJzZXMsIG5ld3Nyb29tOiBmb3JtYXRlZE5ld3Nyb29tLCBnYWxsYXJ5OiBmb3JtYXRlZFBob3RvZ2FsbGFyeSwgdGVzdGltb25pbHM6IGZvcm1hdGVkVGVzdGltb25pYWwgfVxuICB9XG5cbiAgdGltZUNvbnZlcnQoZHVyYXRpb246IG51bWJlcikge1xuICAgIGlmIChkdXJhdGlvbikge1xuICAgICAgdmFyIG51bSA9IGR1cmF0aW9uO1xuICAgICAgdmFyIGhvdXJzID0gKG51bSAvIDM2MDApO1xuICAgICAgdmFyIHJob3VycyA9IE1hdGguZmxvb3IoaG91cnMpO1xuICAgICAgdmFyIG1pbnV0ZXMgPSAoaG91cnMgLSByaG91cnMpICogNjA7XG4gICAgICB2YXIgcm1pbnV0ZXMgPSBNYXRoLnJvdW5kKG1pbnV0ZXMpO1xuICAgICAgaWYgKHJtaW51dGVzID09PSAwKSB7XG4gICAgICAgIHJldHVybiByaG91cnMgKyBcImhcIjtcbiAgICAgIH0gZWxzZSBpZiAocmhvdXJzID09PSAwKSB7XG4gICAgICAgIHJldHVybiBybWludXRlcyArIFwibVwiXG4gICAgICB9XG4gICAgICByZXR1cm4gcmhvdXJzICsgXCJoIFwiICsgcm1pbnV0ZXMgKyBcIm1cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2xpZW50TGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCgnLi9hc3NldHMvanNvbmZpbGVzL2NsaWVudC1saXN0Lmpzb24nKTtcbiAgfVxuXG4gIGdldFRlbmRlcnMoKSB7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgIHByaW1hcnlDYXRlZ29yeTogW1widGVuZGVyXCJdLFxuICAgICAgICAgIHN0YXR1czogeyBcIiE9XCI6IFwiUmV0aXJlZFwiIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFjZXRzOiBbXCJtaW1lVHlwZVwiXSxcbiAgICAgICAgc29ydEJ5OiB7IGNyZWF0ZWRPbjogXCJEZXNjXCIgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5GRVRDSF9URU5ERVJTfWAsIGJvZHkpXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldE5vdGlmaWNhdGlvbnMoKSB7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgIHByaW1hcnlDYXRlZ29yeTogW1wibm90aWZpY2F0aW9uXCJdLFxuICAgICAgICAgIHN0YXR1czogeyBcIiE9XCI6IFwiUmV0aXJlZFwiIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFjZXRzOiBbXCJtaW1lVHlwZVwiXSxcbiAgICAgICAgc29ydEJ5OiB7IGNyZWF0ZWRPbjogXCJkZXNjXCIgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5GRVRDSF9URU5ERVJTfWAsIGJvZHkpXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuICBnZXRGb3JtUmVhZERhdGEocmVxOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5OTFdfRk9STV9SRUFEfWAsIHJlcSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cblxuICBnZXRNaW5pc3RyeURhdGEobWluaXN0cnlUeXBlKSB7XG4gICAgbGV0IHN1Yl9vcmdfdHlwZSA9ICcnXG4gICAgaWYgKG1pbmlzdHJ5VHlwZSA9PSAnbWluaXN0cnknKSB7XG4gICAgICBzdWJfb3JnX3R5cGUgPSAnbWluaXN0cnknXG4gICAgfSBlbHNlIHtcbiAgICAgIHN1Yl9vcmdfdHlwZSA9ICdzdGF0ZSdcbiAgICB9XG4gICAgY29uc3Qgc3RvcmFnZURhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luRGF0YScpKVxuICAgIGNvbnNvbGUubG9nKCdzdG9yYWdlRGF0YS0tJywgc3RvcmFnZURhdGEpXG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3N0b3JhZ2VEYXRhPy5hY2Nlc3NfdG9rZW59YFxuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKCd0aGlzLmJhc2VVcmwnLCB0aGlzLmJhc2VVcmwpXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1NUQVRFX0NFTlRFUn0vP3N1Yl9vcmdfdHlwZT0ke3N1Yl9vcmdfdHlwZX1gLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2VuZXJhdGVSb2xlTWFwcGluZyhyZXFCb2R5LCBmaWxlcz86IEZpbGUgfCBGaWxlW10pIHtcbiAgICBjb25zb2xlLmxvZygncmVxQm9keS0tJywgcmVxQm9keSk7XG4gICAgY29uc29sZS5sb2coJ2ZpbGVzLS0tJywgZmlsZXMpXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIC8vIEFkZCByZXF1aXJlZCBmaWVsZHNcbiAgICBpZiAocmVxQm9keS5zdGF0ZV9jZW50ZXJfaWQpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnc3RhdGVfY2VudGVyX2lkJywgcmVxQm9keS5zdGF0ZV9jZW50ZXJfaWQpO1xuICAgIH1cblxuICAgIGlmIChyZXFCb2R5LnN0YXRlX2NlbnRlcl9uYW1lKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9uYW1lJywgcmVxQm9keS5zdGF0ZV9jZW50ZXJfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHJlcUJvZHkuZGVwYXJ0bWVudF9pZCkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdkZXBhcnRtZW50X2lkJywgcmVxQm9keS5kZXBhcnRtZW50X2lkKTtcbiAgICB9XG5cbiAgICBpZiAocmVxQm9keS5kZXBhcnRtZW50X25hbWUpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVwYXJ0bWVudF9uYW1lJywgcmVxQm9keS5kZXBhcnRtZW50X25hbWUpO1xuICAgIH1cblxuICAgIGlmIChyZXFCb2R5Lmluc3RydWN0aW9uKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2luc3RydWN0aW9uJywgcmVxQm9keS5pbnN0cnVjdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgY2JwRGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJykgfHwgJ3t9Jyk7XG4gICAgY29uc3Qgb3JnVHlwZSA9XG4gICAgICBjYnBEYXRhPy5taW5pc3RyeT8uc2JPcmdUeXBlIHx8XG4gICAgICBjYnBEYXRhPy5vcmdfdHlwZSB8fFxuICAgICAgJyc7XG4gICAgaWYgKG9yZ1R5cGUpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnb3JnX3R5cGUnLCBvcmdUeXBlKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgbXVsdGlwbGUgb3Igc2luZ2xlIGZpbGVcbiAgICBpZiAoZmlsZXMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbGVzKSkge1xuICAgICAgICBmaWxlcy5mb3JFYWNoKChmaWxlOiBGaWxlKSA9PiB7XG4gICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdhZGRpdGlvbmFsX2RvY3VtZW50JywgZmlsZSwgZmlsZS5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaW5nbGUgZmlsZVxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnLCBmaWxlcywgZmlsZXMubmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVidWcgRm9ybURhdGEgY29udGVudFxuICAgIGNvbnNvbGUubG9nKFwiRm9ybURhdGEgY29udGVudHM6XCIpO1xuICAgIGZvcm1EYXRhLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7a2V5fTogRklMRSAtPiAke3ZhbHVlLm5hbWV9ICgke3ZhbHVlLnNpemV9IGJ5dGVzKWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7a2V5fTogJHt2YWx1ZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnM7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfUk9MRV9NQVBQSU5HfWAsIGZvcm1EYXRhLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9KSk7XG4gIH1cblxuXG5cbiAgZ2V0RGVwYXJ0bWVudExpc3QobWluaXN0cnlJZCwgb3B0aW9ucz86IHsgbGltaXQ/OiBudW1iZXIsIG9mZnNldD86IG51bWJlciwgcXVlcnk/OiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IHN0b3JhZ2VEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dpbkRhdGEnKSlcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7c3RvcmFnZURhdGE/LmFjY2Vzc190b2tlbn1gXG4gICAgfSk7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgaWYgKG9wdGlvbnM/LmxpbWl0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2xpbWl0JywgU3RyaW5nKG9wdGlvbnMubGltaXQpKVxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8ub2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ29mZnNldCcsIFN0cmluZyhvcHRpb25zLm9mZnNldCkpXG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5xdWVyeSkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgncXVlcnknLCBvcHRpb25zLnF1ZXJ5KVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9ERVBBUlRNRU5UfS8ke21pbmlzdHJ5SWR9YCwgeyBoZWFkZXJzLCBwYXJhbXMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0Um9sZU1hcHBpbmdCeVN0YXRlQ2VudGVyKHN0YXRlX2NlbnRlcl9pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVJ9LyR7c3RhdGVfY2VudGVyX2lkfT9sb2FkX2NicF9wbGFucz10cnVlYCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFJvbGVNYXBwaW5nQnlTdGF0ZUNlbnRlckFuZERlcGFydG1lbnQoc3RhdGVfY2VudGVyX2lkLCBkZXBhcnRtZW50X2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIGlmICh0eXBlb2YgZGVwYXJ0bWVudF9pZCA9PT0gJ3N0cmluZycpe1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfUk9MRV9NQVBQSU5HX0JZX1NUQVRFX0NFTlRFUn0vJHtzdGF0ZV9jZW50ZXJfaWR9L2RlcGFydG1lbnQvJHtkZXBhcnRtZW50X2lkfT9sb2FkX2NicF9wbGFucz10cnVlYCwgeyBoZWFkZXJzIH0pXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfUk9MRV9NQVBQSU5HX0JZX1NUQVRFX0NFTlRFUn0vJHtzdGF0ZV9jZW50ZXJfaWR9P2xvYWRfY2JwX3BsYW5zPXRydWVgLCB7IGhlYWRlcnMgfSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH1cblxuICB9XG5cblxuICBnZXRSb2xlTWFwcGluZ0J5U3RhdGVDZW50ZXJCeVNlYXJjaChzdGF0ZV9jZW50ZXJfaWQscXVlcnksIGxpbWl0LCBvZmZzZXQsbWF0Y2hfc3RhdHVzKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIGxldCByZXFCb2R5ID0ge1xuICAgICAgXCJxdWVyeVwiOiBxdWVyeSB8fCBcIlwiLFxuICAgICAgXCJsaW1pdFwiOiBsaW1pdCxcbiAgICAgIFwib2Zmc2V0XCI6IG9mZnNldCxcbiAgICAgIFwibG9hZF9jYnBfcGxhbnNcIjogdHJ1ZSxcbiAgICAgIFwiZmlsdGVyc1wiOiB7XG4gICAgICAgIFwic3RhdGVfY2VudGVyX2lkXCI6IHN0YXRlX2NlbnRlcl9pZCxcbiAgICAgICAgXCJtYXRjaF9zdGF0dXNcIjptYXRjaF9zdGF0dXNcbiAgICAgIH0sXG4gICAgICBcInNvcnRfYnlcIjogbnVsbFxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TRUFSQ0hfUk9MRV9NQVBQSU5HfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRSb2xlTWFwcGluZ0J5U3RhdGVDZW50ZXJBbmREZXBhcnRtZW50QnlTZWFyY2goc3RhdGVfY2VudGVyX2lkLCBkZXBhcnRtZW50X2lkLHF1ZXJ5LCBsaW1pdCwgb2Zmc2V0LG1hdGNoX3N0YXR1cykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICAgbGV0IHJlcUJvZHk6IGFueSA9IHtcbiAgICAgIFwicXVlcnlcIjogcXVlcnkgfHwgXCJcIixcbiAgICAgIFwibGltaXRcIjogbGltaXQsXG4gICAgICBcIm9mZnNldFwiOiBvZmZzZXQsXG4gICAgICBcImxvYWRfY2JwX3BsYW5zXCI6IHRydWUsXG4gICAgICBcImZpbHRlcnNcIjoge1xuICAgICAgICBcInN0YXRlX2NlbnRlcl9pZFwiOiBzdGF0ZV9jZW50ZXJfaWQsXG4gICAgICAgIFwibWF0Y2hfc3RhdHVzXCI6bWF0Y2hfc3RhdHVzLFxuICAgICAgICBcImRlcGFydG1lbnRfaWRcIjogZGVwYXJ0bWVudF9pZFxuICAgICAgfSxcbiAgICAgIFwic29ydF9ieVwiOiBudWxsXG4gICAgfTtcbiAgaWYgKHR5cGVvZiBkZXBhcnRtZW50X2lkID09PSAnc3RyaW5nJykge1xuICAgIHJlcUJvZHkuZmlsdGVycy5kZXBhcnRtZW50X2lkID0gZGVwYXJ0bWVudF9pZDtcbiAgXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TRUFSQ0hfUk9MRV9NQVBQSU5HfWAsIHJlcUJvZHkseyBoZWFkZXJzIH0pXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0VBUkNIX1JPTEVfTUFQUElOR31gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH1cblxuICB9XG5cbiAgdXBkYXRlUm9sZU1hcHBpbmcocm9sZV9tYXBwaW5nX2lkLCByZXFCb2R5KSB7XG4gICAgIGlmICh0aGlzLmZyb21NZG9Qb3J0YWwpIHtcbiAgICAgIGxldCBtZG9CYXNlVXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCdcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS8ke0FQSV9FTkRfUE9JTlRTLk1ET19ST0xFX01BUFBJTkdfVVBEQVRFfWAsIHJlcUJvZHkpXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9IGVsc2Uge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlVQREFURV9ST0xFX01BUFBJTkd9LyR7cm9sZV9tYXBwaW5nX2lkfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAgZGVsZXRlUm9sZU1hcHBpbmcocm9sZV9tYXBwaW5nX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuVVBEQVRFX1JPTEVfTUFQUElOR30vJHtyb2xlX21hcHBpbmdfaWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFJlY29tbWVuZGVkQ291cnNlKHJvbGVfbWFwcGluZ19pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICBsZXQgcmVxQm9keSA9IHtcbiAgICAgIHJvbGVfbWFwcGluZ19pZDogcm9sZV9tYXBwaW5nX2lkXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9SRUNPTU1FTkRFRF9DT1VSU0V9L2NvdXJzZS1yZWNvbW1lbmRhdGlvbnMvZ2VuZXJhdGVgLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZGVsZXRlQ291cnNlUmVjb21tZW5kYXRpb25zKHJvbGVNYXBJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JFQ09NTUVOREVEX0NPVVJTRX0vY291cnNlLXJlY29tbWVuZGF0aW9ucy9yb2xlLW1hcHBpbmcvJHtyb2xlTWFwSWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHNhdmVDb3Vyc2UocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TQVZFX0NPVVJTRVN9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuICB1cGRhdGVDb3Vyc2UocmVxQm9keSwgY2JwX3BsYW5faWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5VUERBVEVfQ09VUlNFU30vJHtjYnBfcGxhbl9pZH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgYWRkTURPQ291cnNlKHJlcUJvZHkpIHtcbiAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5NRE9fQUREX0NPVVJTRX1gLCByZXFCb2R5KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX0NPVVJTRVN9P3JvbGVfbWFwcGluZ19pZD0ke3JvbGVfbWFwcGluZ19pZH1gLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0SUdPVFN1Z2dlc3RlZENvdXJzZXMocmVxQm9keSkge1xuICAgIC8vIFVzZSB0aGUgcmVxQm9keSBwYXJhbWV0ZXIgcGFzc2VkIGZyb20gdGhlIGNvbXBvbmVudFxuICAgIC8vIElmIG5vIHJlcUJvZHkgaXMgcHJvdmlkZWQsIHVzZSBkZWZhdWx0IHN0cnVjdHVyZVxuICAgIGxldCByZXEgPSByZXFCb2R5IHx8IHtcbiAgICAgIFwicmVxdWVzdFwiOiB7XG4gICAgICAgIFwiZmlsdGVyc1wiOiB7XG4gICAgICAgICAgXCJwcmltYXJ5Q2F0ZWdvcnlcIjogW1wiQ291cnNlXCJdLFxuICAgICAgICAgIFwic3RhdHVzXCI6IFtcIkxpdmVcIl0sXG4gICAgICAgICAgXCJjb3Vyc2VDYXRlZ29yeVwiOiBbXCJDb3Vyc2VcIl1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWVsZHNcIjogW1wicG9zdGVySW1hZ2VcIiwgXCJkZXNjcmlwdGlvblwiLCBcIm5hbWVcIl0sXG4gICAgICAgIFwibGltaXRcIjogMTIsXG4gICAgICAgIFwib2Zmc2V0XCI6IDBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc29sZS5sb2coJ2dldElHT1RTdWdnZXN0ZWRDb3Vyc2VzIGZpbmFsIHJlcXVlc3Q6JywgSlNPTi5zdHJpbmdpZnkocmVxLCBudWxsLCAyKSk7XG4gICAgaWYgKHRoaXMuZnJvbU1kb1BvcnRhbCkge1xuXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuTURPX1NVR0dFU1RFRF9DT1VSU0VfTElTVH1gLCByZXFCb2R5KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNVR0dFU1RFRF9DT1VSU0VfTElTVH1gLCByZXEsIHsgaGVhZGVycyB9KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfVxuXG4gICAgXG4gIH1cblxuICBnZXRTdWdnZXN0ZWRDb3Vyc2VzKHJvbGVfbWFwcGluZ19pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNVR0dFU1RFRF9DT1VSU0VfTElTVH0vJHtyb2xlX21hcHBpbmdfaWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHNhdmVTdWdnZXN0ZWRDb3Vyc2UocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TQVZFX0NPVVJTRV9TVUdHRVNURURfQ09VUlNFfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBhZGREZXNpZ25hdGlvbihyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkFERF9ERVNJR05BVElPTn1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgcGVyZm9ybUxvZ2luKHJlcUJvZHkpIHtcbiAgICBjb25zdCBib2R5ID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgLnNldCgndXNlcm5hbWUnLCByZXFCb2R5LnVzZXJuYW1lKVxuICAgICAgLnNldCgncGFzc3dvcmQnLCByZXFCb2R5LnBhc3N3b3JkKTtcbiAgICBjb25zb2xlLmxvZygnaW4gbG9naW4gdWF0JylcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5MT0dJTn1gLCBib2R5LnRvU3RyaW5nKCksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBsb2dvdXQoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkxPR09VVH1gLCAnJywgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHNldENCUFBsYW5Mb2NhbFN0b3JhZ2UoKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuY2JwUGxhbkZpbmFsT2JqKSlcbiAgfVxuXG4gIGdldENCUFBsYW5Mb2NhbFN0b3JhZ2UoKSB7XG4gICAgbGV0IGNicFBsYW5GaW5hbE9iaiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicpKVxuICAgIHJldHVybiBjYnBQbGFuRmluYWxPYmpcbiAgfVxuXG4gIGNoZWNrSWZMb2dpbigpIHtcbiAgICBsZXQgZmxhZyA9IGZhbHNlXG4gICAgbGV0IGxvZ2luRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dpbkRhdGEnKVxuICAgIGlmIChsb2dpbkRhdGEgJiYgSlNPTi5wYXJzZShsb2dpbkRhdGEpWydhY2Nlc3NfdG9rZW4nXSkge1xuICAgICAgZmxhZyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhZyA9IGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBmbGFnXG4gIH1cblxuICBkZWxldGVSb2xlTWFwcGluZ0J5U3RhdGVBbmREZXBhcnRtZW50KHN0YXRlX2NlbnRlcl9pZCwgZGVwYXJ0bWVudF9pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICBsZXQgdXJsID0gJydcbiAgICBpZiAoZGVwYXJ0bWVudF9pZCAmJiBkZXBhcnRtZW50X2lkICE9PSAnbnVsbCcgJiYgZGVwYXJ0bWVudF9pZCAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVwYXJ0bWVudF9pZCAhPT0gdW5kZWZpbmVkICYmIGRlcGFydG1lbnRfaWQgIT09IG51bGwpIHtcbiAgICAgIHVybCA9IGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRFTEVURV9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSfT9zdGF0ZV9jZW50ZXJfaWQ9JHtzdGF0ZV9jZW50ZXJfaWR9JmRlcGFydG1lbnRfaWQ9JHtkZXBhcnRtZW50X2lkfWBcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsID0gYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREVMRVRFX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVJ9P3N0YXRlX2NlbnRlcl9pZD0ke3N0YXRlX2NlbnRlcl9pZH1gXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55Pih1cmwsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBhZGRVc2VyQ291cnNlKHJlcUJvZHkpIHtcbiAgICBpZiAodGhpcy5mcm9tTWRvUG9ydGFsKSB7XG4gICAgICBsZXQgbWRvQmFzZVVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMubWRvQmFzZVVybH0vJHtBUElfRU5EX1BPSU5UUy5NRE9fQUREX1VTRVJfQ09VUlNFfWApXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuQUREX1VTRVJfQ09VUlNFU31gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH1cblxuICB9XG5cbiAgZ2V0VXNlckNvdXJzZShyb2xlX21hcHBpbmdfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfVVNFUl9DT1VSU0VTfS8ke3JvbGVfbWFwcGluZ19pZH1gLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0Q29tcGV0ZW5jeUpzb24oKSB7XG4gICAgaWYgKHRoaXMuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgbGV0IG1kb0Jhc2VVcmwgPSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJ1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9L2Fzc2V0cy9qc29uZmlsZXMvY29tcGV0ZW5jaWVzLmpzb25gKVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfS90cmFpbmluZy1wbGEtYWkvYXNzZXRzL2pzb25maWxlcy9jb21wZXRlbmNpZXMuanNvbmAsIHsgaGVhZGVycyB9KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfVxuXG4gICAgLy8gdGhpcy5odHRwLmdldDxhbnlbXT4oJy9hc3NldHMvanNvbmZpbGVzL2NvbXBldGVuY2llcy5qc29uJylcbiAgfVxuXG4gIGNvbnZlcnQoc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoIXNlY29uZHMgfHwgc2Vjb25kcyA8PSAwKSB7XG4gICAgICByZXR1cm4gJ04vQSc7XG4gICAgfVxuXG4gICAgY29uc3QgdG90YWxTZWNvbmRzID0gTWF0aC5mbG9vcihzZWNvbmRzKTtcbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IodG90YWxTZWNvbmRzIC8gMzYwMCk7XG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKHRvdGFsU2Vjb25kcyAlIDM2MDApIC8gNjApO1xuICAgIGNvbnN0IHJlbWFpbmluZ1NlY29uZHMgPSB0b3RhbFNlY29uZHMgJSA2MDtcblxuICAgIGlmIChob3VycyA+IDApIHtcbiAgICAgIC8vIEZvciBkdXJhdGlvbnMgd2l0aCBob3Vycywgc2hvdyBob3VycyBhbmQgbWludXRlcyAoZS5nLiwgXCIzaCAxMG1cIilcbiAgICAgIGlmIChtaW51dGVzID4gMCkge1xuICAgICAgICByZXR1cm4gYCR7aG91cnN9aCAke21pbnV0ZXN9bWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYCR7aG91cnN9aGA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtaW51dGVzID4gMCkge1xuICAgICAgLy8gRm9yIGR1cmF0aW9ucyB1bmRlciBhbiBob3VyLCBzaG93IG1pbnV0ZXMgYW5kIHNlY29uZHMgKGUuZy4sIFwiNThtIDNzXCIpXG4gICAgICBpZiAocmVtYWluaW5nU2Vjb25kcyA+IDApIHtcbiAgICAgICAgcmV0dXJuIGAke21pbnV0ZXN9bSAke3JlbWFpbmluZ1NlY29uZHN9c2A7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYCR7bWludXRlc31tYDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIGR1cmF0aW9ucyB1bmRlciBhIG1pbnV0ZSwgc2hvdyBzZWNvbmRzIG9ubHlcbiAgICAgIHJldHVybiBgJHtyZW1haW5pbmdTZWNvbmRzfXNgO1xuICAgIH1cbiAgfVxuXG4gIGdldFVzZXJQcm9maWxlKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9VU0VSX1BST0ZJTEV9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFVzZXJSZWNvbW1lbmRhdGlvbkNvdXJzZShyb2xlX21hcHBpbmdfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfVVNFUl9TRUxFQ1RFRF9DT1VSU0VTfT9yb2xlX21hcHBpbmdfaWQ9JHtyb2xlX21hcHBpbmdfaWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGRvd25sb2FkUGRmKHN0YXRlX2NlbnRlcl9pZDogc3RyaW5nLCBjb250ZXh0OiBzdHJpbmcsIGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbmRwb2ludCA9XG4gICAgICBjb250ZXh0ID09PSAnYWNicCdcbiAgICAgICAgPyBBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9QREZfQUNCUFxuICAgICAgICA6IEFQSV9FTkRfUE9JTlRTLkRPV05MT0FEX1BERjtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9JHtlbmRwb2ludH0/c3RhdGVfY2VudGVyX2lkPSR7c3RhdGVfY2VudGVyX2lkfSZsYW5ndWFnZT0ke2xhbmd1YWdlfWA7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuXG4gICAgLy8gUmV0dXJucyBhbiBvYnNlcnZhYmxlIHNvIHRoZSBjYWxsZXIgY2FuIGtlZXAgdGhlIGxvYWRlciB2aXNpYmxlIHVudGlsIHRoZSBmaWxlIGlzIHNhdmVkXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgfSkucGlwZSh0YXAoKHJlczogYW55KSA9PiB7XG5cbiAgICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpO1xuICAgICAgY29uc29sZS5sb2coJ2NvbnRlbnREaXNwb3NpdGlvbicsIHJlcy5oZWFkZXJzKVxuICAgICAgbGV0IGZpbGVuYW1lID0gYENCUF9SZXBvcnRfJHtzdGF0ZV9jZW50ZXJfaWR9LnBkZmA7XG5cbiAgICAgIGlmIChjb250ZW50RGlzcG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjb250ZW50RGlzcG9zaXRpb24ubWF0Y2goL2ZpbGVuYW1lPVwiPyhbXlwiXSspXCI/Lyk7XG4gICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xuICAgICAgICAgIGZpbGVuYW1lID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIGEgYmxvYiBVUkwgYW5kIGRvd25sb2FkXG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlcy5ib2R5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KTtcbiAgICAgIGNvbnN0IGRvd25sb2FkVXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBhLmhyZWYgPSBkb3dubG9hZFVybDtcbiAgICAgIGEuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgIGEuY2xpY2soKTtcblxuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChkb3dubG9hZFVybCk7XG4gICAgfSkpO1xuICB9XG5cbiAgZG93bmxvYWRQZGZGb3JEZXBhcnRtZW50KHN0YXRlX2NlbnRlcl9pZCwgZGVwYXJ0bWVudF9pZDogc3RyaW5nLCBjb250ZXh0OiBzdHJpbmcsIGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbmRwb2ludCA9XG4gICAgICBjb250ZXh0ID09PSAnYWNicCdcbiAgICAgICAgPyBBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9QREZfQUNCUFxuICAgICAgICA6IEFQSV9FTkRfUE9JTlRTLkRPV05MT0FEX1BERjtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9JHtlbmRwb2ludH0/c3RhdGVfY2VudGVyX2lkPSR7c3RhdGVfY2VudGVyX2lkfSZkZXBhcnRtZW50X2lkPSR7ZGVwYXJ0bWVudF9pZH0mbGFuZ3VhZ2U9JHtsYW5ndWFnZX1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcblxuICAgIC8vIFJldHVybnMgYW4gb2JzZXJ2YWJsZSBzbyB0aGUgY2FsbGVyIGNhbiBrZWVwIHRoZSBsb2FkZXIgdmlzaWJsZSB1bnRpbCB0aGUgZmlsZSBpcyBzYXZlZFxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgIH0pLnBpcGUodGFwKChyZXM6IGFueSkgPT4ge1xuXG4gICAgICBjb25zdCBjb250ZW50RGlzcG9zaXRpb24gPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcbiAgICAgIGNvbnNvbGUubG9nKCdjb250ZW50RGlzcG9zaXRpb24nLCByZXMuaGVhZGVycylcbiAgICAgIGxldCBmaWxlbmFtZSA9IGBDQlBfUmVwb3J0XyR7c3RhdGVfY2VudGVyX2lkfV8ke2RlcGFydG1lbnRfaWR9LnBkZmA7XG5cbiAgICAgIGlmIChjb250ZW50RGlzcG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjb250ZW50RGlzcG9zaXRpb24ubWF0Y2goL2ZpbGVuYW1lPVwiPyhbXlwiXSspXCI/Lyk7XG4gICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xuICAgICAgICAgIGZpbGVuYW1lID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIGEgYmxvYiBVUkwgYW5kIGRvd25sb2FkXG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlcy5ib2R5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KTtcbiAgICAgIGNvbnN0IGRvd25sb2FkVXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBhLmhyZWYgPSBkb3dubG9hZFVybDtcbiAgICAgIGEuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgIGEuY2xpY2soKTtcblxuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChkb3dubG9hZFVybCk7XG4gICAgfSkpO1xuICB9XG5cbiAgZ2V0Q2VudGVyQmFzZWREZXBhcnRtZW50KHN0YXRlX2NlbnRlcl9pZCwgb3B0aW9ucz86IHsgbGltaXQ/OiBudW1iZXIsIG9mZnNldD86IG51bWJlciwgcXVlcnk/OiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgLnNldCgnbGltaXQnLCBTdHJpbmcob3B0aW9ucz8ubGltaXQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubGltaXQgOiA1MCkpXG4gICAgICAuc2V0KCdvZmZzZXQnLCBTdHJpbmcob3B0aW9ucz8ub2Zmc2V0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm9mZnNldCA6IDApKVxuICAgICAgLnNldCgnc3ViX29yZ190eXBlJywgJ21pbmlzdHJ5JylcbiAgICBpZiAob3B0aW9ucz8ucXVlcnkpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3F1ZXJ5Jywgb3B0aW9ucy5xdWVyeSlcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5DRU5URVJfQkFTRURfTUlOSVNUUll9LyR7c3RhdGVfY2VudGVyX2lkfWAsIHsgaGVhZGVycywgcGFyYW1zIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG5cbiAgZG93bmxvYWRQZGZGb3JDb3Vyc2VSZWNvbW1lbmRhdGlvbihzdGF0ZV9jZW50ZXJfaWQpIHtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRPV05MT0FEX0NPVVJTRV9SRUNPTU1FTkRBVElPTn0/cm9sZV9tYXBwaW5nX2lkPSR7c3RhdGVfY2VudGVyX2lkfWA7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgfSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuXG4gICAgICBjb25zdCBjb250ZW50RGlzcG9zaXRpb24gPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcbiAgICAgIGxldCBmaWxlbmFtZSA9IGBDT1VSU0VfUkVDT01NRU5EQVRJT05fUmVwb3J0XyR7c3RhdGVfY2VudGVyX2lkfS5wZGZgO1xuXG4gICAgICBpZiAoY29udGVudERpc3Bvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gY29udGVudERpc3Bvc2l0aW9uLm1hdGNoKC9maWxlbmFtZT1cIj8oW15cIl0rKVwiPy8pO1xuICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMV0pIHtcbiAgICAgICAgICBmaWxlbmFtZSA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBhIGJsb2IgVVJMIGFuZCBkb3dubG9hZFxuICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtyZXMuYm9keV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XG4gICAgICBjb25zdCBkb3dubG9hZFVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgYS5ocmVmID0gZG93bmxvYWRVcmw7XG4gICAgICBhLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgICBhLmNsaWNrKCk7XG5cbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoZG93bmxvYWRVcmwpO1xuICAgIH0pO1xuICB9XG5cbiAgdXBsb2FkRG9jdW1lbnQocmVxQm9keSwgZmlsZT86IEZpbGUpIHtcbiAgICBjb25zdCBzdG9yYWdlRGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9naW5EYXRhJykpXG4gICAgLy8gIGNvbnNvbGUubG9nKCdzdG9yYWdlRGF0YS0tJywgc3RvcmFnZURhdGEpXG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3N0b3JhZ2VEYXRhPy5hY2Nlc3NfdG9rZW59YFxuICAgIH0pO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcblxuICAgIC8vIEFkZCByZXF1aXJlZCBmaWVsZHNcbiAgICAvLyBpZiAocmVxQm9keS5zdGF0ZV9jZW50ZXJfaWQpIHtcbiAgICAvLyAgIGZvcm1EYXRhLmFwcGVuZCgnc3RhdGVfY2VudGVyX2lkJywgcmVxQm9keS5zdGF0ZV9jZW50ZXJfaWQpO1xuICAgIC8vIH1cblxuICAgIC8vIGlmIChyZXFCb2R5LmRlcGFydG1lbnRfaWQpIHtcbiAgICAvLyAgIGZvcm1EYXRhLmFwcGVuZCgnZGVwYXJ0bWVudF9pZCcsIHJlcUJvZHkuZGVwYXJ0bWVudF9pZCk7XG4gICAgLy8gfVxuXG5cblxuICAgIC8vIGlmKHJlcUJvZHkuZG9jdW1lbnROYW1lKSB7XG4gICAgLy8gICBmb3JtRGF0YS5hcHBlbmQoJ2RvY3VtZW50X25hbWUnLCByZXFCb2R5LmRvY3VtZW50TmFtZSk7XG4gICAgLy8gfVxuICAgIC8vIEFkZCBmaWxlIGlmIHByb3ZpZGVkXG4gICAgLy8gaWYgKGZpbGUpIHtcbiAgICAvLyAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xuICAgIC8vIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5VUExPQURfRE9DVU1FTlR9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFVwbG9hZGVkRG9jdW1lbnRzKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzO1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gICAgT2JqZWN0LmVudHJpZXMocmVxQm9keSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KGtleSwgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9ET0NVTUVOVFN9YCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIHBhcmFtc1xuICAgIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlRmlsZShmaWxlSWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ERUxFVEVfRklMRX0vJHtmaWxlSWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHRyaWdnZXJGaWxlU3VtbWFyeShmaWxlSWQpIHtcbiAgICBjb25zdCBzdG9yYWdlRGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9naW5EYXRhJykpXG4gICAgLy8gY29uc29sZS5sb2coJ3N0b3JhZ2VEYXRhLS0nLCBzdG9yYWdlRGF0YSlcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7c3RvcmFnZURhdGE/LmFjY2Vzc190b2tlbn1gXG4gICAgfSk7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRFTEVURV9GSUxFfS8ke2ZpbGVJZH0vc3VtbWFyeWAsIHt9LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZG93bmxvYWRGaWxlKGZpbGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCbG9iPiB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVycztcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRPV05MT0FEX0ZJTEV9LyR7ZmlsZUlkfS9kb3dubG9hZGAsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlU3VtbWFyeShmaWxlSWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ERUxFVEVfU1VNTUFSWX0vJHtmaWxlSWR9L3N1bW1hcnlgLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZGVsZXRlUmVjb21tZW5kZWRDb3Vyc2Uocm9sZU1hcHBpbmdJZDogc3RyaW5nLCBjb3Vyc2VJZGVudGlmaWVyOiBzdHJpbmcgLCByZXF1ZXN0SWQ/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzO1xuXG4gICAgaWYodGhpcy5mcm9tTWRvUG9ydGFsKSB7XG4gICAgICBsZXQgcmVxQm9keSA9IHtcbiAgICAgICAgICBcInJlcXVlc3RfaWRcIjogcmVxdWVzdElkLFxuICAgICAgICAgIFwiaXRlbV9pZFwiOiByb2xlTWFwcGluZ0lkLFxuICAgICAgICAgIFwiaWRlbnRpZmllclwiOiBjb3Vyc2VJZGVudGlmaWVyXG4gICAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMubWRvQmFzZVVybH0vJHtBUElfRU5EX1BPSU5UUy5NRE9fREVMRVRFX0FQUFJPVkVfQ09VUlNFfWAsIHJlcUJvZHkpXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihcbiAgICAgIGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRFTEVURV9DT1VSU0VfUkVDT01NRU5EQVRJT059LyR7cm9sZU1hcHBpbmdJZH0vY291cnNlLyR7Y291cnNlSWRlbnRpZmllcn1gLFxuICAgICAgeyBoZWFkZXJzIH1cbiAgICApO1xuICAgIH1cblxuICAgIFxuICB9XG5cbiAgZ2V0Q2JwUGxhbnNXaXRoU2VsZWN0ZWRDb3Vyc2VzKCk6IGFueVtdIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmNicFBsYW5GaW5hbE9iajtcblxuICAgIHJldHVybiBzb3VyY2U/LnJvbGVfbWFwcGluZ19nZW5lcmF0aW9uXG4gICAgICA/LmZsYXRNYXAoKHJvbGU6IGFueSkgPT4gcm9sZS5jYnBfcGxhbnMgfHwgW10pXG4gICAgICA/LmZpbHRlcihcbiAgICAgICAgKHBsYW46IGFueSkgPT5cbiAgICAgICAgICBBcnJheS5pc0FycmF5KHBsYW4uc2VsZWN0ZWRfY291cnNlcykgJiZcbiAgICAgICAgICBwbGFuLnNlbGVjdGVkX2NvdXJzZXMubGVuZ3RoID4gMFxuICAgICAgKSB8fCBbXTtcbiAgfVxuXG4gIGdldEFkZGl0aW9uYWxQYXJhbWV0ZXJmb3JTdWdnZXN0ZWRDb3Vyc2VzKGlkZW50aWZpZXJzKSB7XG4gICAgXG4gICAgbGV0IHJlcUJvZHkgPSB7XG4gICAgICBcInJlcXVlc3RcIjoge1xuICAgICAgICBcImZpbHRlcnNcIjoge1xuICAgICAgICAgIFwiaWRlbnRpZmllclwiOiBpZGVudGlmaWVycyxcblxuXG4gICAgICAgICAgXCJzdGF0dXNcIjogW1xuICAgICAgICAgICAgXCJMaXZlXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmllbGRzXCI6IFtcbiAgICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgICBcImxhbmd1YWdlXCIsXG4gICAgICAgICAgXCJpZGVudGlmaWVyXCIsXG4gICAgICAgICAgXCJhdmdSYXRpbmdcIlxuICAgICAgICBdLFxuICAgICAgICBcImxpbWl0XCI6IGlkZW50aWZpZXJzPy5sZW5ndGggfHwgMCxcbiAgICAgICAgXCJvZmZzZXRcIjogMCxcbiAgICAgICAgXCJzb3J0X2J5XCI6IHt9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmZyb21NZG9Qb3J0YWwpIHtcblxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS8ke0FQSV9FTkRfUE9JTlRTLk1ET19TVUdHRVNURURfQ09VUlNFX0xJU1R9YCwgcmVxQm9keSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TVUdHRVNURURfQ09VUlNFX0xJU1R9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9KSlcbiAgICB9XG5cbiAgfVxuXG4gIHVwZGF0ZURlc2lnbmF0aW9uSGllcmFyY2h5KHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5VUERBVEVfREVTSUdOQVRJT05fSElFUkFSQ0hZfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzZWFyY2hQdWJsaWNEZXNpZ25hdGlvbihyZXFCb2R5KSB7XG4gICAgaWYgKHRoaXMuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgbGV0IG1kb0Jhc2VVcmwgPSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJ1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS8ke0FQSV9FTkRfUE9JTlRTLk1ET19ERVNJR05BVElPTl9TRUFSQ0h9YCwgcmVxQm9keSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TRUFSQ0hfUFVCTElDX0RFU0lHTkFUSU9OfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfVxuXG4gIH1cblxuICBnZXREYXNoYm9hcmRBZG1pbihyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRBU0hCT0FSRF9BRE1JTn1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0RGFzaGJvYXJkR2FwQW5hbHlzaXNBZG1pbihyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdBUF9BTkFMWVNJU19BRE1JTn1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0RGFzaGJvYXJkUHVibGljKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREFTSEJPQVJEX1BVQkxJQ31gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0RGFzaGJvYXJkR2FwQW5hbHlzaXNQdWJsaWMocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HQVBfQU5BTFlTSVNfUFVCTElDfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRNYXRjaGVkUm9sZU1hcHBpbmcocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5NQVRDSEVEX1JPTEVfTUFQUElOR31gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cblxuZ2V0QXBwcm92YWxSZXF1ZXN0cyhyZXFCb2R5OiBhbnkpIHtcblxuICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzO1xuXG4gIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gIGlmIChyZXFCb2R5Py5wYWdlKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgncGFnZScsIHJlcUJvZHkucGFnZSk7XG4gIH1cblxuICBpZiAocmVxQm9keT8ucGFnZV9zaXplKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgncGFnZV9zaXplJywgcmVxQm9keS5wYWdlX3NpemUpO1xuICB9XG5cbiAgaWYgKHJlcUJvZHk/LnNlYXJjaCkge1xuICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3NlYXJjaCcsIHJlcUJvZHkuc2VhcmNoKTtcbiAgfVxuXG4gIGlmIChyZXFCb2R5Py5zdGF0dXMpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdzdGF0dXMnLCByZXFCb2R5LnN0YXR1cyk7XG4gIH1cblxuICBpZiAocmVxQm9keT8uZnJvbV9kYXRlKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgnZnJvbV9kYXRlJywgcmVxQm9keS5mcm9tX2RhdGUpO1xuICB9XG5cbiAgaWYgKHJlcUJvZHk/LnRvX2RhdGUpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCd0b19kYXRlJywgcmVxQm9keS50b19kYXRlKTtcbiAgfVxuXG4gIGlmIChyZXFCb2R5Py5zdGF0ZV9jZW50ZXJfaWQpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdzdGF0ZV9jZW50ZXJfaWQnLCByZXFCb2R5LnN0YXRlX2NlbnRlcl9pZCk7XG4gIH1cblxuICBpZiAocmVxQm9keT8uZGVwYXJ0bWVudF9pZCkge1xuICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2RlcGFydG1lbnRfaWQnLCByZXFCb2R5LmRlcGFydG1lbnRfaWQpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihcbiAgICBgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfQVBQUk9WQUxfUkVRVUVTVFN9YCxcbiAgICB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgcGFyYW1zXG4gICAgfVxuICApLnBpcGUoXG4gICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSlcbiAgKTtcbn1cblxuICBzYXZlQXBwcm92YWxSZXF1ZXN0KHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0FWRV9BUFBST1ZBTF9SRVFVRVNUfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzZWFyY2hQdWJsaWNtZG8ocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TRUFSQ0hfUFVCTElDX01ET31gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgdmlld0FwcHJvdmFsUmVxdWVzdHMocmVxdWVzdF9pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlZJRVdfQVBQUk9WQUxfUkVRVUVTVH0vJHtyZXF1ZXN0X2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICB2aWV3TURPQXBwcm92YWxSZXF1ZXN0cyhyZXF1ZXN0X2lkKSB7XG4gICAgbGV0IG1kb0Jhc2VVcmwgPSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJ1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS8ke0FQSV9FTkRfUE9JTlRTLlZJRVdfTURPX0FQUFJPVkFMX1JFUVVFU1R9LyR7cmVxdWVzdF9pZH1gKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBhcHByb3ZlQW5kUHVibGlzaE1ET0FwcHJvdmFsUmVxdWVzdHMocmVxdWVzdCkge1xuICAgIGxldCBtZG9CYXNlVXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCdcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLm1kb0Jhc2VVcmx9LyR7QVBJX0VORF9QT0lOVFMuQVBQUk9WRV9BTkRfUFVCTElTSF9NRE9fQVBQUk9WQUxfUkVRVUVTVH1gLCByZXF1ZXN0KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICByZWplY3RNRE9BcHByb3ZhbFJlcXVlc3RzKHJlcXVlc3QpIHtcbiAgICBsZXQgbWRvQmFzZVVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS8ke0FQSV9FTkRfUE9JTlRTLlJFSkVDVF9BUFBST1ZBTF9SRVFVRVNUfWAsIHJlcXVlc3QpXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHJlamVjdEl0ZW1NRE9BcHByb3ZhbFJlcXVlc3RzKHJlcXVlc3QpIHtcbiAgICBsZXQgbWRvQmFzZVVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5tZG9CYXNlVXJsfS8ke0FQSV9FTkRfUE9JTlRTLlJFSkVDVF9JVEVNX0FQUFJPVkFMX1JFUVVFU1R9YCwgcmVxdWVzdClcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgcmV2b2tlQXBwcm92YWxSZXF1ZXN0KHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuUkVWT0tFX0FQUFJPVkFMX1JFUVVFU1R9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHNhdmVEZXNpZ25hdGlvbkFwcHJvdmFsUmVxdWVzdChyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNBVkVfREVTSUdOQVRJT05fQVBQUk9WQUxfUkVRVUVTVH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgIFJlUHVibGlzaE1ET0FwcHJvdmFsUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgbGV0IG1kb0Jhc2VVcmwgPSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJ1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMubWRvQmFzZVVybH0vJHtBUElfRU5EX1BPSU5UUy5SRVBVQkxJU0hfUkVRVUVTVH1gLCByZXF1ZXN0KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICAgZ2V0Um9sZU1hcHBpbmdSZU9yZGVyTGlzdChzdGF0ZV9jZW50ZXJfaWQsIF9kZXBhcnRtZW50X2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIGlmICh0eXBlb2YgX2RlcGFydG1lbnRfaWQgPT09ICdzdHJpbmcnKXtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JPTEVfTUFQUElOR19SRU9SREVSX0xJU1R9P3N0YXRlX2NlbnRlcl9pZD0ke3N0YXRlX2NlbnRlcl9pZH0mZGVwYXJ0bWVudF9pZD0ke19kZXBhcnRtZW50X2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JPTEVfTUFQUElOR19SRU9SREVSX0xJU1R9P3N0YXRlX2NlbnRlcl9pZD0ke3N0YXRlX2NlbnRlcl9pZH1gLCB7IGhlYWRlcnMgfSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0pKVxuICAgIH1cblxuICB9XG5cbn1cbiJdfQ==
|