@sunbird-cb/toc 0.0.33 → 0.0.34
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/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +3 -3
- package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +34 -31
- package/fesm2022/sunbird-cb-toc.mjs +35 -32
- package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
- package/package.json +1 -1
- package/sunbird-cb-toc-0.0.34.tgz +0 -0
- package/sunbird-cb-toc-0.0.33.tgz +0 -0
|
@@ -2898,37 +2898,40 @@ export class AppTocHomeV2Component {
|
|
|
2898
2898
|
}
|
|
2899
2899
|
openPublicSurveyPopup(navigationUrl, queryParams) {
|
|
2900
2900
|
// Get survey ID and course ID from environment and content data
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
this.contentReadData?.
|
|
2907
|
-
|
|
2908
|
-
|
|
2909
|
-
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
|
|
2913
|
-
|
|
2914
|
-
|
|
2915
|
-
|
|
2916
|
-
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
|
|
2922
|
-
|
|
2923
|
-
|
|
2924
|
-
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
if (
|
|
2928
|
-
|
|
2901
|
+
if (this.forPreview) {
|
|
2902
|
+
this.router.navigate([navigationUrl], { queryParams: queryParams });
|
|
2903
|
+
}
|
|
2904
|
+
else {
|
|
2905
|
+
const surveyId = this.environment.publicContentSurveyId || '';
|
|
2906
|
+
const courseId = this.contentReadData?.identifier || '';
|
|
2907
|
+
const courseName = this.contentReadData?.name || '';
|
|
2908
|
+
const contextOrgId = this.contentReadData?.createdFor && this.contentReadData?.createdFor.length > 0 ?
|
|
2909
|
+
this.contentReadData?.createdFor[0] : '';
|
|
2910
|
+
this.clearExistingPublicSurveyData(surveyId, courseId);
|
|
2911
|
+
const data = {
|
|
2912
|
+
surveyId: surveyId,
|
|
2913
|
+
courseId: courseId,
|
|
2914
|
+
courseName: courseName,
|
|
2915
|
+
contextOrgId: contextOrgId,
|
|
2916
|
+
forPreview: this.forPreview
|
|
2917
|
+
};
|
|
2918
|
+
const dialogRef = this.dialog.open(PublicSurveyFormComponent, {
|
|
2919
|
+
// disableClose: true,
|
|
2920
|
+
width: '750px',
|
|
2921
|
+
maxWidth: '90vw',
|
|
2922
|
+
height: '80vh',
|
|
2923
|
+
data: data,
|
|
2924
|
+
autoFocus: false,
|
|
2925
|
+
});
|
|
2926
|
+
dialogRef.afterClosed().subscribe((result) => {
|
|
2927
|
+
if (result) {
|
|
2928
|
+
// Navigate to the intended URL only when survey is submitted successfully
|
|
2929
|
+
if (navigationUrl) {
|
|
2930
|
+
this.router.navigate([navigationUrl], { queryParams: queryParams });
|
|
2931
|
+
}
|
|
2929
2932
|
}
|
|
2930
|
-
}
|
|
2931
|
-
}
|
|
2933
|
+
});
|
|
2934
|
+
}
|
|
2932
2935
|
}
|
|
2933
2936
|
resumeContentData() {
|
|
2934
2937
|
const navigationUrl = (this.resumeData && !this.certData) ? this.resumeDataLink?.url : this.firstResourceLink?.url;
|
|
@@ -2993,4 +2996,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
2993
2996
|
type: HostListener,
|
|
2994
2997
|
args: ['window:scroll', ['$event']]
|
|
2995
2998
|
}] } });
|
|
2996
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1ob21lLXYyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9jb21wb25lbnRzL2FwcC10b2MtaG9tZS12Mi9hcHAtdG9jLWhvbWUtdjIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1ob21lLXYyL2FwcC10b2MtaG9tZS12Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFBYyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUM3RCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUE7QUFHdEIsT0FBTyxFQUF1QyxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNwRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHL0QsT0FBTyxFQUE0QixPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDeEUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFBO0FBQ3pCLDJCQUEyQjtBQUMzQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUE7QUFFdEIsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFBO0FBQzNCLE9BQU8sY0FBYyxNQUFNLDZCQUE2QixDQUFBO0FBRXhELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUVoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUV4RSxPQUFPLEVBSWdDLFFBQVEsR0FDOUMsTUFBTSxzQkFBc0IsQ0FBQTtBQUU3QixPQUFPLEVBQUUsMkJBQTJCLEVBQTBCLDhCQUE4QixFQUFpRCxNQUFNLHlCQUF5QixDQUFBO0FBQzVLLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQVVyRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQTtBQUNwSCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1RkFBdUYsQ0FBQTtBQU10SSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQTtBQUNoSCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQTtBQUMxRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQTtBQUM5RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDL0QsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sd0VBQXdFLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFyQzNILEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUE7QUF3QzVCLE1BQU0sQ0FBTixJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDbkIsOENBQWlDLENBQUE7SUFDakMsc0RBQXlDLENBQUE7SUFDekMsOENBQWlDLENBQUE7QUFDbkMsQ0FBQyxFQUpXLFNBQVMsS0FBVCxTQUFTLFFBSXBCO0FBRUQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFZLEVBQUUsR0FBb0IsRUFBRSxFQUFFO0lBQzFELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUMzQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3pCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUM1QiwyQkFBMkI7WUFDM0IsY0FBYyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO1NBQ3JFO1FBQ0QsT0FBTyxjQUFjLENBQUE7UUFDckIsMkJBQTJCO0lBQzdCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUNSLENBQUMsQ0FBQTtBQUNELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFBO0FBUTlCLE1BQU0sT0FBTyxxQkFBcUI7SUFtS2hDLFlBQVk7UUFDVixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFBO1FBQ3ZDLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxFQUFFO1lBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFBO1NBQ25CO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtTQUNwQjtRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2hFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO2FBQ3ZEO2lCQUFNO2dCQUNMLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUE7aUJBQ3REO2FBRUY7U0FDRjtRQUVELDhDQUE4QztRQUM5QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNsRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtTQUNyQjthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7U0FDdEI7SUFDSCxDQUFDO0lBRUQsWUFDVSxLQUFxQixFQUNyQixNQUFjLEVBQ2QsVUFBZ0MsRUFDakMsTUFBcUIsRUFDcEIsU0FBd0IsRUFDeEIsU0FBZ0MsRUFDaEMsWUFBMEIsRUFDMUIsUUFBcUIsRUFDckIsTUFBaUIsRUFDakIsYUFBZ0MsRUFDaEMsVUFBMEI7SUFDbEMsK0NBQStDO0lBQ3ZDLGNBQXNDLEVBQ3RDLFNBQXdCLEVBQ3hCLFNBQTRCLEVBQzVCLFNBQXdCLEVBQ3hCLGdCQUFrQyxFQUNsQyxTQUEyQixFQUMzQixnQkFBaUQsRUFDakQsTUFBb0I7SUFDNUIsb0NBQW9DO0lBQzVCLGdCQUFrQyxFQUNsQyxrQkFBc0MsRUFDdEMsbUJBQXdDLEVBQ3hDLFlBQTBCLEVBQzNCLFNBQThCLEVBQzlCLGFBQXNDLEVBQ3RDLGVBQW9DLEVBQ25DLGNBQThCLEVBQzlCLGNBQW9DLEVBQ3JDLGNBQThCLEVBQzlCLFdBQTRCLEVBQzNCLFFBQWtCLEVBQ0ksV0FBZ0I7UUFqQ3RDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFzQjtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3BCLGNBQVMsR0FBVCxTQUFTLENBQWU7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFDaEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQUNoQyxlQUFVLEdBQVYsVUFBVSxDQUFnQjtRQUUxQixtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUFDdEMsY0FBUyxHQUFULFNBQVMsQ0FBZTtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFlO1FBQ3hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQztRQUNqRCxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBRXBCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzNCLGNBQVMsR0FBVCxTQUFTLENBQXFCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUF5QjtRQUN0QyxvQkFBZSxHQUFmLGVBQWUsQ0FBcUI7UUFDbkMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFzQjtRQUNyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDSSxnQkFBVyxHQUFYLFdBQVcsQ0FBSztRQS9OaEQsb0JBQWUsR0FBOEIsRUFBRSxDQUFDLENBQUMsNkJBQTZCO1FBQzlFLFNBQUksR0FBRyxLQUFLLENBQUE7UUFDWixjQUFTLEdBQUcsS0FBSyxDQUFBO1FBQ2pCLG1CQUFjLEdBQUcsSUFBSSxDQUFBO1FBQ3JCLFlBQU8sR0FBK0IsSUFBSSxDQUFBO1FBQzFDLG1CQUFjLEdBQUcsS0FBSyxDQUFBO1FBQ3RCLFlBQU8sR0FBOEIsSUFBSSxDQUFBO1FBQ3pDLG9CQUFlLEdBQThCLElBQUksQ0FBQTtRQUNqRCx3QkFBbUIsR0FBOEIsSUFBSSxDQUFBO1FBQ3JELGNBQVMsR0FBb0MsSUFBSSxDQUFBO1FBQ2pELGVBQVUsR0FBUSxJQUFJLENBQUE7UUFDdEIsc0JBQWlCLEdBQVEsYUFBYSxDQUFDLFNBQVMsQ0FBQTtRQUNoRCxjQUFTLEdBQXdDLElBQUksQ0FBQTtRQUNyRCx5QkFBb0IsR0FBa0IsSUFBSSxDQUFBO1FBRTFDLHNCQUFpQixHQUF3QixJQUFJLENBQUE7UUFDN0MsZUFBVSxHQUFtQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQTtRQUN0RSx3QkFBbUIsR0FBRyxLQUFLLENBQUE7UUFDM0IsV0FBTSxHQUFHLEtBQUssQ0FBQTtRQUNkLGVBQVUsR0FBRyxLQUFLLENBQUE7UUFJVCxlQUFVLEdBQVEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFdEosbUJBQWMsR0FBUSxJQUFJLENBQUE7UUFDbkMseURBQXlEO1FBQ3pELGNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUE7UUFDL0Qsb0JBQWUsR0FBcUQ7WUFDbEUsVUFBVSxFQUFFLGVBQWU7WUFDM0IsYUFBYSxFQUFFLGVBQWU7WUFDOUIsVUFBVSxFQUFFO2dCQUNWLFNBQVMsRUFBRSxnQkFBZ0I7YUFDNUI7U0FDRixDQUFBO1FBQ0QsYUFBUSxHQUFHLEtBQUssQ0FBQTtRQUNoQixvQkFBZSxHQUFvQjtZQUNqQyxXQUFXLEVBQUUsbUJBQW1CO1lBQ2hDLE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsWUFBWTthQUNuQjtTQUNGLENBQUE7UUFDRCxjQUFTLEdBQVEsSUFBSSxDQUFBO1FBQ3JCLG9CQUFlLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFBO1FBQzVDLG1CQUFjLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQTtRQUMxQywyQkFBc0IsR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUE7UUFDekQscUJBQWdCLEdBQUcsSUFBSSxDQUFBO1FBQ3ZCLHdCQUFtQixHQUFHLEtBQUssQ0FBQTtRQUUzQixTQUFJLEdBQW9CLElBQUksQ0FBQTtRQUM1QiwwQkFBcUIsR0FBRyxLQUFLLENBQUE7UUFDN0Isb0JBQWUsR0FBRyxLQUFLLENBQUE7UUFDdkIsaUJBQVksR0FBa0MsSUFBSSxDQUFBO1FBQ2xELG1CQUFjLEdBQXlELEVBQUUsQ0FBQTtRQUN6RSxZQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQTtRQUVyQixtQkFBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO1FBQ2xELG9CQUFlLEdBQUcsVUFBVSxDQUFBO1FBRTVCLHFCQUFnQixHQUFHLEdBQUcsQ0FBQTtRQUN0QixxQkFBZ0IsR0FBRyxFQUFFLENBQUE7UUFFckIsc0JBQWlCLEdBQXdCLElBQUksQ0FBQTtRQUM3QywwQkFBcUIsR0FBd0IsSUFBSSxDQUFBO1FBQ2pELDJCQUFzQixHQUF3QixJQUFJLENBQUE7UUFDbEQsNEJBQXVCLEdBQXdCLElBQUksQ0FBQTtRQUNuRCwrQkFBMEIsR0FBd0IsSUFBSSxDQUFBO1FBRXRELGlCQUFZLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzlELG9CQUFlLEdBQUcsQ0FBQyxDQUFBO1FBQ25CLGNBQVMsR0FBcUIsSUFBSSxDQUFBO1FBQ2xDLGNBQVMsR0FBRyxVQUFVLENBQUE7UUFDdEIsZUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFBO1FBQzNELDRCQUF1QixHQUF3QixJQUFJLENBQUE7UUFFbkQsb0JBQWUsR0FBRyxNQUFNLENBQUE7UUFDeEIsNEJBQXVCLEdBQUcsS0FBSyxDQUFBO1FBQy9CLHdCQUFtQixHQUFHLEtBQUssQ0FBQTtRQUMzQixzQkFBaUIsR0FBZ0UsSUFBSSxDQUFBO1FBQ3JGLG1CQUFjLEdBQWdFLElBQUksQ0FBQTtRQUNsRixhQUFRLEdBQVEsSUFBSSxDQUFBO1FBQ3BCLHVCQUFrQixHQUFvQyxJQUFJLENBQUE7UUFDMUQsNkJBQXdCLEdBQWdCLElBQUksR0FBRyxDQUFDO1lBQzlDLDBCQUEwQjtZQUMxQixzQkFBc0I7WUFDdEIsYUFBYTtTQUNkLENBQUMsQ0FBQTtRQUNGLCtCQUEwQixHQUFpQixNQUFNLENBQUE7UUFDakQsd0JBQW1CLEdBQUcsS0FBSyxDQUFBO1FBQzNCLG1CQUFjLEdBQUcsS0FBSyxDQUFBO1FBR3RCLGlCQUFZLEdBQUcsRUFBRSxDQUFBO1FBQ2pCLHFCQUFnQixHQUFHLEtBQUssQ0FBQTtRQUN4QixvQkFBZSxHQUFHLEtBQUssQ0FBQTtRQUN2QixzQkFBaUIsR0FBRyxLQUFLLENBQUE7UUFDekIsb0JBQWUsR0FBRyxLQUFLLENBQUE7UUFHdkIsd0JBQW1CLEdBQUcsQ0FBQyxDQUFBO1FBR3ZCLGdCQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUE7UUFDMUMsYUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFBO1FBQ3BDLFlBQU8sR0FBRyxLQUFLLENBQUE7UUFNZixZQUFPLEdBQVEsRUFBRSxDQUFBO1FBQ2pCLHFCQUFnQixHQUFHLEtBQUssQ0FBQTtRQUN4QixpQkFBWSxHQUFHLEtBQUssQ0FBQTtRQUNwQixnQkFBVyxHQUFHLEtBQUssQ0FBQTtRQUVuQixjQUFTLEdBQUcsS0FBSyxDQUFBO1FBQ2pCLHFCQUFnQixHQUFHLEtBQUssQ0FBQTtRQUN4Qix5QkFBb0IsR0FBRyxLQUFLLENBQUE7UUFRNUIsbUJBQWMsR0FBRyxLQUFLLENBQUE7UUFDdEIsZ0JBQVcsR0FBRyxDQUFDLENBQUE7UUFDZixXQUFNLEdBQUc7WUFDUCxTQUFTLEVBQUUsQ0FBQztZQUNaLFNBQVMsRUFBRSxDQUFDO1NBQ2IsQ0FBQTtRQUNELGFBQVEsR0FBRyxLQUFLLENBQUE7UUFDaEIsWUFBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDbkIsYUFBUSxHQUFHLEtBQUssQ0FBQTtRQUNoQixnQkFBVyxHQUFHLEtBQUssQ0FBQTtRQU1uQix1QkFBa0IsR0FBUSxFQUFFLENBQUE7UUFDNUIsOEJBQThCO1FBQzlCLCtCQUErQjtRQUV2QixvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUE7UUFHNUMseUJBQW9CLEdBQUcsS0FBSyxDQUFBO1FBQzVCLDBCQUFxQixHQUFHLHNDQUFzQyxDQUFBO1FBQzlELDBCQUFxQixHQUFHLGdEQUFnRCxDQUFBO1FBQ3hFLHlCQUFvQixHQUFHLEVBQUUsQ0FBQTtRQUV6QixrQ0FBNkIsR0FBRyxLQUFLLENBQUE7UUFDckMsZ0JBQVcsR0FBRyxLQUFLLENBQUE7UUFDbkIsaUJBQVksR0FBUSxFQUFFLENBQUE7UUFHdEIsOEJBQXlCLEdBQVEsS0FBSyxDQUFBO1FBQ3RDLG9CQUFlLEdBQUcsS0FBSyxDQUFBO1FBQ2YsNEJBQXVCLEdBQVcsQ0FBQyxDQUFBO1FBQ25DLHlCQUFvQixHQUFZLEtBQUssQ0FBQTtRQWlFM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFBO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzdELElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ25DLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUUsQ0FBQTtZQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtTQUN6QjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDaEUscUNBQXFDO1lBQ3JDLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDekMsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBUSxDQUFBO29CQUMvRCxJQUFJLFVBQVUsRUFBRTt3QkFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQWEsQ0FBQTtxQkFDcEU7Z0JBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO2FBQ1I7WUFFRCxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsRUFBRTtnQkFDL0MsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBUSxDQUFBO2dCQUNyRSxJQUFJLFVBQVUsRUFBRTtvQkFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQWEsQ0FBQTtpQkFDcEU7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQWUsRUFBRSxFQUFFO1lBQ25FLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDakMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7b0JBQ3JCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFBO29CQUMvQixJQUFJLElBQUksRUFBRTt3QkFDUixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyw4QkFBOEIsSUFBSSxDQUFDLENBQUE7cUJBQzdFO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtJQUNILENBQUM7SUFFRCw0QkFBNEI7UUFDMUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDeEQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQTtZQUMxQyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsb0JBQW9CLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUU7Z0JBQ25GLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO2dCQUN2RSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFBO2dCQUNoRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFBO2dCQUN0RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsY0FBYyxLQUFLLFlBQVksQ0FBQTtnQkFDM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUE7Z0JBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQTthQUNyRDtTQUNGO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVE7UUFDdkIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDaEQsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUM5QyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2QsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFBO2dCQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7Z0JBQ25DLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO2dCQUN6RCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUN4RSxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBRTtvQkFDcEYsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQTtnQkFDdEUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO29CQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTtvQkFDeEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7b0JBQzVELElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDdEMsTUFBTSxVQUFVLEdBQUc7NEJBQ2pCLE9BQU8sRUFBRTtnQ0FDUCxPQUFPLEVBQUU7b0NBQ1AsV0FBVyxFQUFFLFFBQVE7b0NBQ3JCLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUTtpQ0FDekI7NkJBQ0Y7eUJBQ0YsQ0FBQTt3QkFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFOzRCQUN0RSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFO2dDQUNyQixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFBO2dDQUN0QixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7b0NBQ2YsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUU7d0NBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO3dDQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtxQ0FDdEI7eUNBQU07d0NBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUE7cUNBQ3hCO2lDQUNGO3FDQUFNO29DQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO2lDQUN4Qjs2QkFDRjtpQ0FBTTtnQ0FDTCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQTs2QkFDeEI7d0JBQ0gsQ0FBQyxDQUFDLENBQUE7cUJBQ0g7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELDBCQUEwQixDQUFDLFlBQW9CLEVBQUUsVUFBa0I7UUFDakUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDaEM7WUFDRSxJQUFJLEVBQUUsT0FBTztZQUNiLEVBQUUsRUFBRSxjQUFjO1NBQ25CLEVBQ0Q7WUFDRSxFQUFFLEVBQUUsWUFBWTtZQUNoQixJQUFJLEVBQUUsVUFBVTtTQUNqQixFQUNEO1lBQ0UsU0FBUyxFQUFFLGNBQWM7WUFDekIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPO1NBQzlDLENBQUMsQ0FBQTtJQUVOLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDaEM7WUFDRSxJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ2xCLEVBQ0Q7WUFDRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDakIsSUFBSSxFQUFFLFFBQVE7U0FDZixFQUNEO1lBQ0UsU0FBUyxFQUFFLGdCQUFnQjtZQUMzQixNQUFNLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFdBQVc7U0FDbEQsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLE1BQU0sT0FBTyxHQUFHO1lBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVU7WUFDOUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUE7UUFDRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUMvRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLHdDQUF3QyxDQUFDLENBQUE7WUFDM0QsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1FBQzVCLENBQUMsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUM1QyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUE7WUFDMUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFBO1NBQy9EO1FBQ0QseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRTthQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNyQyxTQUFTLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQTtRQUNyQixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQ3RDLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFBO2dCQUNyQyxNQUFNLE1BQU0sR0FBRztvQkFDYixDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLO2lCQUMxQixDQUFBO2dCQUNELDJDQUEyQztnQkFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFBO2FBQzFJO2lCQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQUU7Z0JBQ3pELE1BQU0sUUFBUSxHQUFHLG1DQUFtQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFBO2dCQUM1RSw0Q0FBNEM7Z0JBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQTthQUNsSTtpQkFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtnQkFDOUMsTUFBTSxRQUFRLEdBQUcsaUNBQWlDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUE7Z0JBQzFFLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUE7YUFDdkg7aUJBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFBRTtnQkFDdkQsTUFBTSxRQUFRLEdBQUcsa0RBQWtELENBQUE7Z0JBQ25FLDRDQUE0QztnQkFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFBO2FBQzlIO2lCQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQUU7Z0JBQ3pELE1BQU0sUUFBUSxHQUFHLDhCQUE4QixDQUFBO2dCQUMvQyw0Q0FBNEM7Z0JBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQTthQUNqSTtpQkFBTTtnQkFDTCwyQ0FBMkM7Z0JBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQTthQUN4STtTQUNGO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJO1lBQ0YsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixrREFBa0Q7Z0JBQ2xELFFBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUUsQ0FBQyxRQUFRLENBQUM7b0JBQ3JELEdBQUcsRUFBRSxFQUFFO29CQUNQLFFBQVEsRUFBRSxRQUFRO2lCQUNuQixDQUFDLENBQUE7YUFDSDtTQUNGO1FBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRztJQUNqQixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRTtZQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUE7U0FDOUQ7UUFDRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQjtnQkFDL0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLFFBQVE7bUJBQ2pFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUI7bUJBQzdFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0I7bUJBQzVFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlO21CQUMzRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsZUFBZTttQkFDM0UsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzdELElBQUksVUFBVSxFQUFFO2dCQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTthQUNoRDtZQUNELE9BQU8sVUFBVSxDQUFBO1NBQ2xCO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUNoQyx5R0FBeUc7WUFDekcsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQTtZQUMzQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtZQUN6QyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFBO2dCQUM1Qyw2Q0FBNkM7Z0JBQzdDLHNEQUFzRDtnQkFDdEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBQzFFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxhQUFhLEdBQUcsR0FBRyxDQUFBO2dCQUM5QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxFQUFFO29CQUM1RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUE7b0JBQ3pFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO29CQUMvRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUE7b0JBQ3ZGLE9BQU8sQ0FBQyxHQUFHLElBQUksV0FBVyxLQUFLLFlBQVksT0FBTyxVQUFVLENBQUMsQ0FBQTtpQkFDOUQ7Z0JBQ0QsT0FBTyxJQUFJLENBQUE7YUFDWjtZQUNELE9BQU8sSUFBSSxDQUFBO1lBQ1gsa0ZBQWtGO1lBQ2xGLHVEQUF1RDtZQUN2RCxJQUFJO1lBQ0osK0VBQStFO1lBQy9FLGdCQUFnQjtZQUNoQixJQUFJO1lBQ0osMkRBQTJEO1lBQzNELDJDQUEyQztZQUMzQyxJQUFJO1lBQ0osdURBQXVEO1lBQ3ZELGtCQUFrQjtZQUNsQixNQUFNO1lBQ04sY0FBYztTQUNmO1FBQUMsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsaURBQWlEO1FBQ2pELDhEQUE4RDtRQUM5RCxtQ0FBbUM7UUFDbkMsMERBQTBEO1FBQzFELHFDQUFxQztRQUNyQyxvREFBb0Q7UUFDcEQsNEdBQTRHO1FBQzVHLG1CQUFtQjtRQUNuQixtRkFBbUY7UUFDbkYscUdBQXFHO1FBQ3JHLG9CQUFvQjtRQUNwQixnQ0FBZ0M7UUFDaEMsbURBQW1EO1FBQ25ELG1EQUFtRDtRQUNuRCxhQUFhO1FBQ2IsOERBQThEO1FBQzlELDBEQUEwRDtRQUMxRCw2REFBNkQ7UUFDN0QsbURBQW1EO1FBQ25ELHlDQUF5QztRQUN6Qyw2QkFBNkI7UUFDN0IsVUFBVTtRQUNWLFFBQVE7UUFDUixtQkFBbUI7UUFDbkIsTUFBTTtRQUNOLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFFakIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFBO1lBQzNDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFBO1lBQ3pDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUE7Z0JBQzVDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFBO2dCQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ2hCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFBO29CQUMxRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtvQkFDcEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQTtvQkFDakMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO29CQUNyQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsR0FBRyxHQUFHLGFBQWEsQ0FBQTtvQkFDOUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFdBQVcsR0FBRyxHQUFHLENBQUE7b0JBQzFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO3dCQUNwRixPQUFPLElBQUksQ0FBQTtxQkFDWjtvQkFDRCxPQUFPLEtBQUssQ0FBQTtpQkFDYjtnQkFDRCxPQUFPLElBQUksQ0FBQTthQUNaO1lBQ0QsT0FBTyxLQUFLLENBQUE7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUlELGFBQWEsQ0FBQyxVQUFtQjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO2dCQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUE7YUFDdEQ7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUU7Z0JBQzNFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQ3BHLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBRVgsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTt3QkFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQTt3QkFDckMsSUFBSSxVQUFVLEVBQUU7NEJBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTt5QkFDdEM7cUJBQ0Y7b0JBQ0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUN6QyxDQUFDLEVBQ0QsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxHQUFHLENBQUMsQ0FBQTtnQkFDeEQsQ0FBQyxDQUNGLENBQUE7YUFDRjtTQUNGO1FBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsRUFBRSxFQUFFO2dCQUM1RSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQTthQUMzQjtRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNULENBQUM7SUFJTSxxQkFBcUI7UUFDMUIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNySCxNQUFNLEdBQUcsR0FBRztZQUNWLGNBQWM7WUFDZCxXQUFXLEVBQUUsZ0JBQWdCO1lBQzdCLEtBQUssRUFBRSxHQUFHO1lBQ1YsTUFBTSxFQUFFLENBQUM7U0FDVixDQUFBO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQzFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDWixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDbEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFPLEVBQUUsRUFBRTtvQkFDL0QsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBQzdDLENBQUMsQ0FBQyxDQUFBO2dCQUNGLGdFQUFnRTtnQkFDaEUsOEJBQThCO2dCQUM5QixJQUFJLENBQUMsU0FBVSxDQUFDLFFBQVEsR0FBRztvQkFDekIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLDhCQUE4QjtvQkFDOUIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyxhQUFhLENBQUM7b0JBQ2hJLE1BQU0sRUFBRSxRQUFRO2lCQUNqQixDQUFBO2dCQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTthQUN0QztZQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLElBQUksQ0FBQyxDQUFBO1FBQzFELENBQUMsRUFDRCxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDOUQsQ0FBQyxDQUNGLENBQUE7SUFDSCxDQUFDO0lBRU0sa0JBQWtCLENBQUMsTUFBVztRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO1lBQzlDLE9BQU8sS0FBSyxDQUFBO1NBQ2I7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZFLENBQUM7SUFFTSxVQUFVO1FBQ2YsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFBO1FBQ2hCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUM1QyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO2dCQUMxQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTthQUN4QjtTQUNGO1FBQ0QsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUdNLHFCQUFxQjtRQUMxQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFBO1NBQzlCO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFBO1lBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFBO1lBQ2hDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO1lBQzNCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUM3QixJQUFJLENBQUMsMENBQTBDLEVBQUUsQ0FBQTthQUNsRDtZQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUM3QixJQUFJLENBQUMsMENBQTBDLEVBQUUsQ0FBQTthQUNsRDtZQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDekcsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUU7Z0JBQy9GLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQTthQUNwRjtpQkFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDdEcsSUFBSSxrQkFBdUIsQ0FBQTtnQkFDM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ2pGLGtCQUFrQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7aUJBQ25IO3FCQUFNO29CQUNMLGtCQUFrQixHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7aUJBQzNGO2dCQUNELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUE7YUFDL0Y7aUJBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsS0FBSyxTQUFTLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFO2dCQUNyRixJQUFJLENBQUMseUJBQXlCLENBQUMsU0FBUyxDQUFDLENBQUE7YUFDMUM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7YUFDeEI7U0FDRjtRQUNELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRU0seUJBQXlCLENBQUMsU0FBYztRQUM3QyxJQUFJLE9BQU8sR0FBRyxTQUFTLEVBQUUsT0FBTyxDQUFBO1FBQ2hDLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDNUUsSUFBSSxHQUFHLEVBQUU7b0JBQ1AsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFBO29CQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO2lCQUM5QjtZQUNILENBQUMsRUFBRSxDQUFDLEdBQU8sRUFBRSxFQUFFO2dCQUNiLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxzQkFBc0IsQ0FBQTtnQkFDeEYsSUFBRyxNQUFNLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFO29CQUM5RCxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQ3hFO2dCQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO1lBQy9CLENBQUMsQ0FBQyxDQUFBO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUE7WUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQTtTQUM5QjtJQUNILENBQUM7SUFFTSx3QkFBd0IsQ0FBQyxXQUFnQixFQUFFLFNBQWM7UUFDOUQsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7WUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtZQUN0QyxPQUFNO1NBQ1A7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDM0MsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFBO1lBQ2YsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ25FLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUE7YUFDM0M7WUFDRCxNQUFNLEdBQUcsR0FBRztnQkFDVixPQUFPLEVBQUU7b0JBQ1AsTUFBTTtvQkFDTixTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO29CQUNsQyw4RUFBOEU7b0JBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTztpQkFDNUI7YUFDRixDQUFBO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUNuRSxDQUFDLElBQWtDLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxJQUFJLEVBQUU7b0JBQ1IsSUFBSSxXQUFXLEtBQUssU0FBUyxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFO3dCQUNwRixJQUFJLENBQUMsU0FBUyxHQUFHOzRCQUNmLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQzs0QkFDcEIsUUFBUSxFQUFFLElBQUk7eUJBQ2YsQ0FBQTt3QkFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUE7d0JBQzlCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7NEJBQ2QsK0JBQStCOzRCQUMvQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTt3QkFDNUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO3FCQUNUO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO3FCQUMvQztpQkFDRjtZQUNILENBQUMsRUFDRCxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUNkLGdDQUFnQztnQkFDaEMsbUhBQW1IO2dCQUNuSCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxJQUFJLHdCQUF3QixDQUFDLENBQUE7Z0JBQ3BGLElBQUk7Z0JBQ0osSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQTtZQUMvQixDQUFDLENBQ0YsQ0FBQTtTQUNGO0lBQ0gsQ0FBQztJQUVNLGdCQUFnQjtRQUN6QixvREFBb0Q7UUFDbEQ7OztXQUdHO1FBQ0wsd0RBQXdELENBQUksSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRTtZQUMzSCxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUN0RyxDQUFDLElBQWtDLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRztvQkFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3JCLFFBQVEsRUFBRSxJQUFJO2lCQUNmLENBQUE7Z0JBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO2dCQUNqQyxJQUFJLE9BQU8sRUFBRTtvQkFDWCxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUE7aUJBQ25DO2dCQUNELGdDQUFnQztZQUNsQyxDQUFDLEVBQ0QsQ0FBQyxNQUFXLEVBQUUsRUFBRTtnQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxJQUFJLHdCQUF3QixDQUFDLENBQUE7Z0JBQ3BGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7WUFDL0IsQ0FBQyxDQUNGLENBQUE7U0FDRjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsT0FBZTtRQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQTtZQUM1QixJQUFJLG9CQUFvQixDQUFBO1lBQ3hCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFO2dCQUNoRixvQkFBb0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTthQUM5RTtpQkFBTTtnQkFDTCwrR0FBK0c7Z0JBQy9HLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQTtnQkFDbEUsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7YUFDOUU7WUFDRCxJQUFJLGVBQWUsQ0FBQTtZQUNuQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRTtnQkFDN0MsZUFBZSxHQUFHLG1CQUFtQixDQUFBO2FBQ3RDO2lCQUFNO2dCQUNMLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUE7YUFDdkY7WUFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUE7WUFDMUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1NBQ25KO0lBQ0gsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDM0MsTUFBTSxHQUFHLEdBQUc7Z0JBQ1YsT0FBTyxFQUFFO29CQUNQLE9BQU8sRUFBRTt3QkFDUCxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO3dCQUNqQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQzt3QkFDdkIscURBQXFEO3FCQUN0RDtvQkFDRCxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFO2lCQUNqQzthQUNGLENBQUE7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FDL0MsQ0FBQyxJQUFrQyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO2dCQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7Z0JBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtnQkFDeEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ2pDLENBQUMsRUFDRCxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQzlELENBQUMsQ0FDRixDQUFBO1NBQ0Y7SUFDSCxDQUFDO0lBR0QsV0FBVztRQUNULENBQUMsU0FBUyxZQUFZO1lBQ3BCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFBO1lBQ25GLElBQUksYUFBYSxHQUFHLENBQUMsRUFBRTtnQkFDckIsNkNBQTZDO2dCQUM3QywwREFBMEQ7Z0JBQzFELE1BQU0sQ0FBQyxRQUFRLENBQUM7b0JBQ2QsR0FBRyxFQUFFLENBQUM7b0JBQ04sUUFBUSxFQUFFLFFBQVE7aUJBQ25CLENBQUMsQ0FBQTthQUNIO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLENBQUM7SUFFTSxlQUFlLENBQUMsWUFBaUI7UUFDdEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ2xELE1BQU0scUJBQXFCLEdBQVUsRUFBRSxDQUFBO1FBQ3ZDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQy9CLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDcEMsQ0FBQyxDQUFDLENBQUE7UUFDRixPQUFPLHFCQUFxQixDQUFBO0lBQzlCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFDRCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN0RCxPQUFPLEtBQUssQ0FBQTtTQUNiO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE9BQU8sQ0FDTCxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsTUFBTTtnQkFDbEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEtBQUssZ0JBQWdCLENBQy9DLENBQUE7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUE7SUFDakMsQ0FBQztJQUVELElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQTtJQUN0QyxDQUFDO0lBRU0sdUJBQXVCLENBQUMsS0FBVTtRQUN2QyxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3ZGLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxDQUFBO1FBQzFCLE9BQU8saUJBQWlCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQ2xGLENBQUM7SUFFTyxZQUFZLENBQUMsVUFBa0IsRUFBRSxXQUFtQixJQUFJO1FBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7WUFDbEMsUUFBUTtTQUNULENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxJQUFJLG9CQUFvQjtRQUN0QixPQUFPLENBQ0wsSUFBSSxDQUFDLGlCQUFpQjtZQUN0QixJQUFJLENBQUMsT0FBTztZQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLGdCQUFnQjtZQUM5QyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07WUFDN0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FDMUIsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUE7SUFDNUUsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sQ0FDTCxJQUFJLENBQUMsZUFBZSxLQUFLLE1BQU07WUFDL0IsSUFBSSxDQUFDLE9BQU87WUFDWixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FDbEMsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLENBQ0wsSUFBSSxDQUFDLGVBQWUsS0FBSyxPQUFPO1lBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDN0QsQ0FBQyxDQUNDLElBQUksQ0FBQyxPQUFPO2dCQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxLQUFLLFFBQVE7Z0JBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUNsQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUMxQjtZQUNELENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQ3hGLENBQUE7SUFDSCxDQUFDO0lBRU8scUJBQXFCLENBQUMsSUFBYTtRQUN6QyxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3ZDLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCwyQ0FBMkM7Z0JBRTNDLE1BQU0sUUFBUSxHQUFHLFVBQVUsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFLENBQ2hFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtnQkFDdEYsT0FBTztvQkFDTCxVQUFVLEVBQUUsUUFBUSxDQUFDLFNBQVM7b0JBQzlCLFFBQVEsRUFBRSxRQUFRLENBQUMsZUFBZSxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUTtpQkFDeEUsQ0FBQTthQUNGO1lBQ0QsTUFBTSxTQUFTLEdBQUcsVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2xFLE9BQU87Z0JBQ0wsVUFBVSxFQUFFLFNBQVMsQ0FBQyxTQUFTO2dCQUMvQixRQUFRLEVBQUUsU0FBUyxDQUFDLGVBQWUsSUFBSSxTQUFTLENBQUMsZUFBZSxDQUFDLFFBQVE7YUFDMUUsQ0FBQTtTQUNGO1FBQ0QsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLElBQ0UsSUFBSSxDQUFDLE9BQU87WUFDWixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWE7WUFDMUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQzlDO1lBQ0EsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1NBQy9GO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFO1lBQzVGLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQTtTQUMzRjtJQUNILENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQ3hFLENBQUE7WUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUN0RSxDQUFBO1lBRUQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNuRixJQUFJLGVBQWUsQ0FBQTtZQUNuQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRTtnQkFDN0MsZUFBZSxHQUFHLG1CQUFtQixDQUFBO2FBQ3RDO2lCQUFNO2dCQUNMLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUE7YUFDdkY7WUFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUE7WUFFdkYsOEJBQThCO1lBQzlCLDhHQUE4RztZQUM5Ryw0REFBNEQ7WUFDNUQsSUFBSTtTQUNMO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QixDQUFDLEdBQVc7UUFDM0MsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNqQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtZQUNyQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7U0FDdkI7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUN6RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQ3ZDLENBQUE7U0FDRjtJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFO2dCQUNoRCxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUI7Z0JBQ3BDLE1BQU0sRUFBRSxPQUFPO2dCQUNmLEtBQUssRUFBRSxPQUFPO2FBQ2YsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBRUQsSUFBSSw4QkFBOEI7UUFDaEMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUU7WUFDdEQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUE7U0FDaEc7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFO1lBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsVUFBVSxDQUFBO2dCQUM1QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFBO2dCQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUN2RSxJQUFJLENBQUMsRUFBRTtvQkFDTCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsTUFBTSxDQUFBO29CQUN4QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQTtnQkFDM0MsQ0FBQyxFQUNELE1BQU0sQ0FBQyxFQUFFO29CQUNQLElBQUksQ0FBQywwQkFBMEIsR0FBRyxNQUFNLENBQUE7b0JBQ3hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUE7Z0JBQ2xDLENBQUMsQ0FDRixDQUFBO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLDBCQUEwQixHQUFHLE1BQU0sQ0FBQTtnQkFDeEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQTthQUNoQztTQUNGO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxXQUFtQjtRQUMvQixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUE7WUFDNUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUN6QyxJQUFJLFdBQVcsSUFBSSxXQUFXLEVBQUU7Z0JBQzlCLE9BQU8sTUFBTSxDQUFBO2FBQ2Q7WUFDRCxJQUFJLFdBQVcsS0FBSyxXQUFXLEdBQUcsQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN4RCxPQUFPLFdBQVcsQ0FBQTthQUNuQjtTQUNGO1FBQ0QsT0FBTyxhQUFhLENBQUE7SUFDdEIsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDbkUsSUFDRSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQ2hCLENBQUMsSUFBSSxDQUFDLHVCQUF1QjtZQUM3QixJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUN6QztZQUNBLElBQUksQ0FBQyxVQUFVO2lCQUNaLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztpQkFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNWLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRTtvQkFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUE7aUJBQy9CO3FCQUFNO29CQUNMLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFBO29CQUMvQixJQUFJLEdBQUcsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTt3QkFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQTtxQkFDbkQ7aUJBQ0Y7WUFDSCxDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7U0FDdEI7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFBO1NBQy9CO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUF1QztRQUNuRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxLQUFLLFlBQVksQ0FBQyxFQUFFO1lBQ3pFLElBQUksT0FBTyxHQUE4QjtnQkFDdkMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVztnQkFDckMsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7YUFDM0IsQ0FBQTtZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN0QyxPQUFPLEdBQUc7b0JBQ1IsR0FBRyxPQUFPO29CQUNWLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUztvQkFDNUIsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXO2lCQUNqQyxDQUFBO2FBQ0Y7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQTthQUN4QjtZQUNELE9BQU8sR0FBRztnQkFDUixHQUFHLE9BQU87Z0JBQ1YsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzFCLENBQUE7WUFDRCxPQUFPLE9BQU8sQ0FBQTtTQUNmO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDNUMsSUFBSSxPQUFPLEdBQThCO2dCQUN2QyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVztnQkFDbEMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQzFCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixxREFBcUQ7YUFDdEQsQ0FBQTtZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN0QyxPQUFPLEdBQUc7b0JBQ1IsR0FBRyxPQUFPO29CQUNWLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUztvQkFDNUIsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXO2lCQUNqQyxDQUFBO2FBQ0Y7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQTthQUN4QjtZQUNELE9BQU8sR0FBRztnQkFDUixHQUFHLE9BQU87Z0JBQ1YsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzFCLENBQUE7WUFDRCxPQUFPLE9BQU8sQ0FBQTtTQUNmO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE9BQU8sRUFBRSxDQUFBO1NBQ1Y7UUFDRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDMUIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLElBQUk7WUFDRixPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQTtTQUNsQztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxJQUFJLENBQUE7U0FDWjtJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFZO1FBQzdCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFO1lBQ2pFLEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1NBQ3BFLENBQUMsQ0FBQTtRQUVGLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUNoRCxJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN4QiwrQkFBK0I7Z0JBQy9CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO2dCQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUE7YUFDdEQ7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYyxFQUFFLFVBQWU7UUFDNUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQzlDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUE7UUFDckUsSUFBSSxlQUFlLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsU0FBUztpQkFDbEIsMENBQTBDLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1NBRWxFO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQzdGLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxTQUFjO1FBQy9CLElBQUksU0FBUyxFQUFFO1lBQ2IsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUE7WUFDeEUsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUE7WUFDcEUscUNBQXFDO1lBQ3JDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUM3QztRQUNELE9BQU8sRUFBRSxDQUFBO0lBQ1gsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVk7UUFDM0IsSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtZQUN0RCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtTQUM3QjtJQUNILENBQUM7SUFJRCxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsSUFBYTtRQUN6QyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUE7UUFDcEIsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUU7Z0JBQ25CLFdBQVcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDdEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ3JELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUNiO2lCQUFNO2dCQUVMLFdBQVcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUNsRTtTQUNGO1FBQ0QsT0FBTyxXQUFXLENBQUE7SUFDcEIsQ0FBQztJQUVNLG1CQUFtQixDQUFDLENBQU07UUFDL0IsSUFBSTtZQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDbEMsT0FBTyxZQUFZLENBQUE7U0FDcEI7UUFBQyxNQUFNO1lBQ04sT0FBTyxFQUFFLENBQUE7U0FDVjtJQUNILENBQUM7SUFFRCx1QkFBdUI7UUFDckIsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBUSxDQUFBO1FBRXZFLElBQUksYUFBYSxFQUFFO1lBQ2pCLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQ2QsR0FBRyxFQUFFLGFBQWEsQ0FBQyxTQUFTO2dCQUM1QixRQUFRLEVBQUUsUUFBUTthQUNuQixDQUFDLENBQUE7U0FDSDtJQUNILENBQUM7SUFFRCwwQkFBMEI7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDaEM7WUFDRSxJQUFJLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEtBQUs7WUFDdEMsRUFBRSxFQUFFLGtCQUFrQjtZQUN0QixPQUFPLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFdBQVc7U0FDbkQsRUFDRDtZQUNFLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNmLElBQUksRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsV0FBVztTQUNoRCxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWEsRUFBRSxJQUFTO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFJRCxxQkFBcUI7UUFDbkIsSUFBSSxvQkFBb0IsQ0FBQTtRQUN4QixJQUFJLFlBQWlCLENBQUE7UUFDckIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsS0FBSyxHQUFHLEVBQUU7Z0JBQzdDLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUE7YUFDbkQ7aUJBQU07Z0JBQ0wsWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO2FBQzVDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUE7U0FDNUM7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzdFLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUE7YUFFcEQ7U0FDRjtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsVUFBa0I7UUFDOUIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLFVBQVUsRUFBRTtZQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1lBQzlELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQXNCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1NBQzNFO0lBQ0gsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUNoQztZQUNFLElBQUksRUFBRSxPQUFPO1lBQ2IsT0FBTyxFQUFFLFFBQVE7WUFDakIsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ2hELEVBQ0Q7WUFDRSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ3ZELEVBQ0Q7WUFDRSxTQUFTLEVBQUUsWUFBWTtZQUN2QixNQUFNLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE9BQU87U0FDOUMsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELDBDQUEwQztRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUNoQztZQUNFLElBQUksRUFBRSxPQUFPO1lBQ2IsT0FBTyxFQUFFLFFBQVE7WUFDakIsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9DLE1BQU0sRUFBRTtnQkFDTixFQUFFLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtnQkFDN0IsR0FBRyxFQUFFLEtBQUs7Z0JBQ1YsSUFBSSxFQUFFLFNBQVM7YUFDaEI7U0FDSyxFQUNSO1lBQ0UsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9DLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUN2RCxFQUNEO1lBQ0UsTUFBTSxFQUFFLFlBQVksSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLHNCQUFzQjtZQUNsRSxNQUFNLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE9BQU87U0FDOUMsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQTtRQUN2QixJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixzQkFBc0IsQ0FBQyxPQUFZO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQ2hDO1lBQ0UsSUFBSSxFQUFFLE9BQU87WUFDYixPQUFPO1lBQ1AsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ2hELEVBQ0Q7WUFDRSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ3ZELEVBQ0Q7WUFDRSxTQUFTLEVBQUUsT0FBTyxPQUFPLEVBQUU7WUFDM0IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPO1NBQzlDLENBQ0YsQ0FBQTtJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQTtJQUMxQixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWEsRUFBRSxJQUFTO1FBQ3JDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtTQUM3RDtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQ3JDO1FBQ0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQ3JDO1FBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDOUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUE7UUFDekMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQzNDO1FBQ0QsSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUU7WUFDbEMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQzdDO1FBQ0QsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDL0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQzFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQ3BDO1FBQ0QsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDbkMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQzlDO1FBRUQsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBYztRQUM5QixJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUN2RixDQUFDO0lBRUQsdUJBQXVCLENBQUMsTUFBVztRQUNqQyw2REFBNkQ7UUFDN0QsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtRQUM1RCxJQUFJLHVCQUF1QixFQUFFO1lBQzNCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQTtZQUN2QixNQUFNLENBQUMsZUFBZSxFQUFFLENBQUE7U0FDekI7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUNoQztZQUNFLElBQUksRUFBRSxPQUFPO1lBQ2IsRUFBRSxFQUFFLGlCQUFpQjtZQUNyQixPQUFPLEVBQUUsc0JBQXNCO1NBQ2hDLEVBQUUsRUFBRSxFQUNMO1lBQ0UsTUFBTSxFQUFFLGNBQWM7U0FDdkIsQ0FBQyxDQUFBO1FBRUosSUFBSSx1QkFBdUIsRUFBRTtZQUMzQiw2QkFBNkI7WUFDN0IsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQTtZQUNsSCxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUE7WUFFcEgscURBQXFEO1lBQ3JELElBQUksYUFBYSxFQUFFO2dCQUNqQixJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFBO2FBQ3ZEO1lBQ0QsT0FBTyxLQUFLLENBQUE7U0FDYjtJQUNILENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsb0RBQW9EO1FBQ3BELHdEQUF3RDtRQUN4RCxPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsZUFBZTtlQUN6RCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsS0FBSyxTQUFTLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQTtJQUNuRixDQUFDO0lBR0QsS0FBSyxDQUFDLG1CQUFtQjtRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQTtRQUM5QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFBO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNwQyxxQkFBcUI7UUFDckIsMkJBQTJCO1FBQzNCLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU07WUFDN0ksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87WUFDekUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQjtZQUN2RixJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCO1lBQ3ZGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlO1lBQ2pGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUU7WUFDbkYsa0ZBQWtGO1lBQ2xGLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtTQUN6RTtRQUVELElBQUksY0FBNkMsQ0FBQTtRQUNqRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3ZHLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7Z0JBQzdELGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7b0JBQzVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQTtvQkFDeEYsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRTt3QkFDbEMsT0FBTyxTQUFTLENBQUE7cUJBQ2pCO29CQUNELE9BQU8sTUFBTSxDQUFBO2dCQUNmLENBQUMsQ0FBQyxDQUFBO2FBQ0g7WUFFRCxtRUFBbUU7WUFDbkUsSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRTtnQkFDNUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUMxRSxJQUFJLEdBQUcsRUFBRTt3QkFDUCxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQTt3QkFDckIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUE7d0JBQzVCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFBO3FCQUNqQztnQkFDSCxDQUFDLENBQUMsQ0FBQTtnQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDN0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGNBQWMsQ0FBQTtnQkFDeEMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUE7Z0JBQ25DLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFBO2dCQUNsRCx1REFBdUQ7Z0JBQ3ZELElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxrQkFBa0I7b0JBQ3JELGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7b0JBQzFDLE1BQU0sV0FBVyxHQUFRLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUUsQ0FDakYsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO29CQUMxRSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFBO29CQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtvQkFDcEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO3dCQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUc7NEJBQy9CLE1BQU07NEJBQ04sUUFBUSxFQUFFLEVBQUU7eUJBQ2IsQ0FBQTtxQkFDRjtpQkFDRjtnQkFDRCx5R0FBeUc7Z0JBQ3pHLElBQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDdkgsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtvQkFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQTtvQkFDcEMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLG1DQUFtQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtvQkFDbkUsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUE7b0JBQzdFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUE7b0JBQ3JHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7b0JBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtvQkFDeEMsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUE7aUJBQ3ZDO3FCQUFNO29CQUNMLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUU7d0JBQ3pKLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO3dCQUN2RixJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQTt3QkFDdEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFOzRCQUMxRSxJQUFJLEdBQUcsRUFBRTtnQ0FDUCxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQTtnQ0FDckIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUE7Z0NBQzVCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFBOzZCQUNqQzt3QkFDSCxDQUFDLENBQUMsQ0FBQTt3QkFFRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO3dCQUM3Qix3Q0FBd0M7cUJBQ3pDO3lCQUFNO3dCQUNMLElBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsS0FBSyxTQUFTLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFOzRCQUM3RyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTs0QkFDN0UsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQTs0QkFDckcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQTs0QkFDMUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO3lCQUN6Qzt3QkFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO3dCQUM3Qix3Q0FBd0M7cUJBQ3pDO2lCQUNGO2dCQUNELElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLGNBQWMsS0FBSyxTQUFTLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFO29CQUMzRiwyRkFBMkY7b0JBQzNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO29CQUNsRSxJQUFJLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtvQkFDckQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO29CQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFBO29CQUMvQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtpQkFFL0I7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRztvQkFDZixPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO29CQUMvQixRQUFRLEVBQUUsSUFBSTtpQkFDZixDQUFBO2dCQUNELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7Z0JBQzNFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO2FBQ3RDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQ3hDLG9EQUFvRDtnQkFDcEQsa0RBQWtEO2dCQUNsRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTt1QkFDM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUU7b0JBQ2xFLHFDQUFxQztvQkFDckMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRTt3QkFDekUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7cUJBQ3pCO2lCQUNGO3FCQUFNO29CQUNMLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO2lCQUN6QjtnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDckQsa0ZBQWtGO2dCQUNsRixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLEtBQUssU0FBUyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDM0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDaEQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7aUJBQy9CO2dCQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7Z0JBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTthQUN0QztTQUNGO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUE7SUFDN0IsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixJQUFJLG9CQUFvQixHQUFHLENBQUMsQ0FBQTtRQUM1QixJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQTtRQUN4QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUM1RSxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNoRixvQkFBb0IsR0FBRyxjQUFjLENBQUE7WUFDckMsZ0JBQWdCLEdBQUcsY0FBYyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDakQ7YUFBTTtZQUNMLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ2pJLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDckQsb0JBQW9CLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixDQUFBO2dCQUN4RCxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFBO2FBQ3ZDO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQTtZQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFBO1NBQ2pEO0lBQ0gsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUMxQixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFO1lBQ3JFLFlBQVksRUFBRSxJQUFJO1lBQ2xCLEtBQUssRUFBRSxPQUFPO1lBQ2QsVUFBVSxFQUFFLENBQUMsMEJBQTBCLENBQUM7U0FDekMsQ0FBQyxDQUFBO1FBQ0YsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ2hELElBQUksTUFBTSxFQUFFO2dCQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFBO2dCQUM1QixTQUFTLENBQUMsS0FBSyxFQUFFLENBQUE7YUFDbEI7aUJBQU07Z0JBQ0wsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFBO2FBQ2xCO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsMEJBQTBCLENBQUMsU0FBYztRQUN2QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFFLFVBQVU7ZUFDeEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFVBQVU7ZUFDakUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFVBQVU7ZUFDL0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVO2VBQzVFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVU7VUFDeEY7WUFDQSxJQUFJLE9BQU8sR0FBUSxFQUFFLENBQUE7WUFDckIsNEdBQTRHO1lBQzVHLHVGQUF1RjtZQUN2RixJQUFJO1lBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUNyQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUE7YUFDNUM7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7Z0JBQy9DLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFBO2FBQzFEO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUMzQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUE7YUFDaEQ7WUFDRCwwQ0FBMEM7WUFDMUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFBO1lBQzdDLElBQUk7WUFDSixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3hDLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQTthQUNoRDtZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtnQkFDekMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2FBQzdIO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUNoQztZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFDeEM7Z0JBQ0EsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUE7Z0JBQ2xELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFBO2FBQ25EO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFO2dCQUNoRCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQTthQUN6RDtZQUNELDBDQUEwQztZQUMxQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7WUFDM0csT0FBTyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO1lBQzNHLElBQUk7WUFDSixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFBO2FBQ3ZEO1lBQ0Qsa0NBQWtDO1lBQ2xDLElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRTtnQkFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO2FBQ3ZJO2lCQUFNLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRTtnQkFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7YUFDNUk7aUJBQU0sSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFO2dCQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTthQUM3STtTQUVGO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxDQUFNO1FBQ2xCLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDYixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUM1QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDakMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFBO1FBRWpDLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUNqRSxJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDckUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ2pFLE9BQU8sUUFBUSxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDdkMsQ0FBQztJQUdELEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBZSxFQUFFLE1BQU0sR0FBRyxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtZQUM5QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDMUIsUUFBUSxFQUFFLE1BQU07WUFDaEIsVUFBVSxFQUFFLE9BQU87WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLE1BQU0sSUFBSSxFQUFFO1NBQ3BELENBQUE7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ3JHLElBQUksUUFBUSxJQUFJLFFBQVEsRUFBRSxPQUFPLEVBQUU7WUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3RCLDhCQUE4QixFQUFFLEdBQUcsRUFDbkMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FDekQsQ0FBQTtZQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQTtTQUVyRjthQUFNLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3RCLDZDQUE2QyxFQUFFLEdBQUcsRUFDbEQsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDdkQsQ0FBQTtTQUNGO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO2FBQ3hHO1NBQ0Y7SUFFSCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO0lBQzlCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFjO1FBQ2hDLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUE7U0FDckM7SUFDSCxDQUFDO0lBRUQsMEJBQTBCLENBQUMsSUFBdUM7UUFDaEUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksS0FBSyxZQUFZLENBQUMsRUFBRTtZQUN6RSxJQUFJLE9BQU8sR0FBOEI7Z0JBQ3ZDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVc7Z0JBQ3JDLFFBQVEsRUFBRSxJQUFJO2dCQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO2FBQzNCLENBQUE7WUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDdEMsT0FBTyxHQUFHO29CQUNSLEdBQUcsT0FBTztvQkFDVixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQzVCLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVztpQkFDakMsQ0FBQTthQUNGO1lBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQixPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUE7YUFDeEI7WUFDRCxPQUFPLEdBQUc7Z0JBQ1IsR0FBRyxPQUFPO2dCQUNWLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzthQUMxQixDQUFBO1lBQ0QsT0FBTyxPQUFPLENBQUE7U0FDZjtRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzVDLElBQUksT0FBTyxHQUE4QjtnQkFDdkMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVc7Z0JBQ2xDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUMxQixRQUFRLEVBQUUsUUFBUTtnQkFDbEIscURBQXFEO2FBQ3RELENBQUE7WUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDdEMsT0FBTyxHQUFHO29CQUNSLEdBQUcsT0FBTztvQkFDVixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQzVCLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVztpQkFDakMsQ0FBQTthQUNGO1lBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQixPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUE7YUFDeEI7WUFDRCxPQUFPLEdBQUc7Z0JBQ1IsR0FBRyxPQUFPO2dCQUNWLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzthQUMxQixDQUFBO1lBQ0QsT0FBTyxPQUFPLENBQUE7U0FDZjtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixPQUFPLEVBQUUsQ0FBQTtTQUNWO1FBQ0QsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzFCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQTtJQUNILENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLDJDQUEyQztZQUMzQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2pFLElBQUksUUFBUSxHQUFHLGFBQWEsRUFBRSxjQUFjLEtBQUssMEJBQTBCLENBQUMsQ0FBQyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFBO1lBQzVJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FDM0MsYUFBYSxDQUFDLFVBQVUsRUFDeEIsUUFBUSxFQUNSLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxFQUNoQyxJQUFJLENBQUMsZUFBZSxFQUFFLGNBQWMsRUFDcEMsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxJQUFJLEVBQUUsRUFDNUYsRUFBRSxDQUNILENBQUE7WUFDRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFBO1lBQzVDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUMxRCxXQUFXLEdBQUcsRUFBRSxHQUFHLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUE7WUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO1NBQ3pEO0lBQ0gsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFBO1FBQ3RDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUU7WUFDdkQsSUFBSSxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDakUsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLFdBQVcsRUFBRTtvQkFDN0IsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQTtpQkFDdEM7WUFDSCxDQUFDLENBQUMsQ0FBQTtTQUNIO0lBQ0gsQ0FBQztJQUVELGdDQUFnQztRQUM5QixJQUFJLENBQUMsNkJBQTZCLEdBQUcsS0FBSyxDQUFBO1FBQzFDLElBQUkseUJBQXlCLEdBQVEsRUFBRSxDQUFBO1FBQ3ZDLElBQUksa0NBQWtDLEdBQVEsRUFBRSxDQUFBO1FBQ2hELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUU7WUFDdkQsSUFBSSxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDakUseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQTtnQkFDaEQsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLFdBQVcsRUFBRTtvQkFDN0Isa0NBQWtDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQTtpQkFDMUQ7WUFDSCxDQUFDLENBQUMsQ0FBQTtTQUNIO1FBQ0QsSUFBSSx5QkFBeUIsSUFBSSx5QkFBeUIsQ0FBQyxNQUFNLEVBQUU7WUFDakUsSUFBSSxHQUFHLEdBQUc7Z0JBQ1IsU0FBUyxFQUFFO29CQUNULFlBQVksRUFBRSx5QkFBeUI7b0JBQ3ZDLFFBQVEsRUFBRSxFQUNUO2lCQUNGO2FBQ0YsQ0FBQTtZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ3ZFLElBQUkscUJBQXFCLEdBQUcsRUFBRSxDQUFBO2dCQUM5QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTtvQkFDcEYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDdkQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksa0NBQWtDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7NEJBQ3RJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO3lCQUNwRTtxQkFDRjtvQkFDRCxJQUFJLHlCQUF5QixFQUFFLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUU7d0JBQ3pFLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUE7cUJBQzFDO3lCQUFNLElBQUkscUJBQXFCLENBQUMsTUFBTSxLQUFLLGtDQUFrQyxDQUFDLE1BQU0sRUFBRTt3QkFDckYsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQTtxQkFDMUM7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEtBQUssQ0FBQTtxQkFDM0M7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEtBQUssQ0FBQTtpQkFDM0M7WUFDSCxDQUFDLENBQUMsQ0FBQTtTQUNIO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO1FBQzFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1FBQzFCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1FBQzlCLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUNuQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1FBQ3JELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFBO1FBQ2hDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1FBQzlCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO1FBQzNCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO1FBQzVCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1FBQzlCLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFBO1FBQ25DLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO1FBQzVCLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFBO1FBRXJDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQTtJQUN6RCxDQUFDO0lBRU8sUUFBUSxDQUFDLElBQVU7UUFDekIsTUFBTSxRQUFRLEdBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3RELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3JDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFBO1FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0lBRU8sWUFBWSxDQUFDLFNBQW1DO1FBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO1FBQzFCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUN0QixLQUFLLFFBQVEsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO1lBQzFDLEtBQUssUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7WUFDM0MsS0FBSyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU87Z0JBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFBO2dCQUNwRSxNQUFLO1lBQ1A7Z0JBQ0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUE7Z0JBQ3BFLE1BQUs7U0FDUjtJQUNILENBQUM7SUFJTyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUE7UUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNsQixVQUFVLEVBQUUsQ0FBQztZQUNiLE1BQU0sRUFBRSxDQUFDO1lBQ1QsT0FBTyxFQUFFLENBQUM7WUFDVixnQkFBZ0IsRUFBRSxDQUFDO1lBQ25CLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLEtBQUssRUFBRSxDQUFDO1lBQ1IsR0FBRyxFQUFFLENBQUM7WUFDTixNQUFNLEVBQUUsQ0FBQztZQUNULE9BQU8sRUFBRSxDQUFDO1lBQ1YsWUFBWSxFQUFFLENBQUM7WUFDZixTQUFTLEVBQUUsQ0FBQztZQUNaLElBQUksRUFBRSxDQUFDO1lBQ1AsS0FBSyxFQUFFLENBQUM7WUFDUixTQUFTLEVBQUUsQ0FBQztZQUNaLE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTyxFQUFFLENBQUM7WUFDVixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLHVCQUF1QixFQUFFLENBQUM7U0FDM0IsQ0FBQTtJQUNILENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBdUIsRUFBRSxFQUFFO1lBQ25FLElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTthQUNsQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLHFCQUFxQixDQUFDLEtBQXVCO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUE7UUFDNUIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQTtRQUVyRCxNQUFNLEdBQUcsR0FBRztZQUNWLE9BQU8sRUFBRTtnQkFDUCxNQUFNO2dCQUNOLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtnQkFDeEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2FBQ3ZCO1NBQ0YsQ0FBQTtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDekQsSUFBSSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsS0FBSyxTQUFTLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQTthQUN2QztpQkFBTTtnQkFDTCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTthQUMvQjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLDBCQUEwQixDQUFDLEtBQXVCO1FBQ3hELElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFMUQscUZBQXFGO1FBQ3JGLGdGQUFnRjtRQUNoRixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLEtBQUssa0JBQWtCLEVBQUU7WUFDbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUMvQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtTQUMvQjtRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQTtJQUMvQixDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsK0NBQStDLENBQUMsQ0FBQTtRQUNsRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO0lBQy9CLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO1lBQy9FLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUE7U0FDaEY7SUFDSCxDQUFDO0lBRU8sOEJBQThCO1FBQ3BDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNsRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFBO1FBQ3BDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZTtZQUNwRCxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxPQUFPO1lBQy9DLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDUixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUk7WUFDRixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQTtTQUM3QztRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7U0FDeEI7SUFDSCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLElBQUksZUFBZSxHQUFRLEVBQUUsQ0FBQTtRQUM3QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFVLEVBQUUsRUFBRTtnQkFDdEUsSUFBSSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7b0JBQ25DLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtpQkFDcEQ7cUJBQU07b0JBQ0wsTUFBTSxRQUFRLEdBQUc7d0JBQ2YsT0FBTyxFQUFFOzRCQUNQLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWTt5QkFDeEI7cUJBQ0YsQ0FBQTtvQkFDRCxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUE7aUJBQ3hEO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtRQUNELE9BQU8sZUFBZSxDQUFBO0lBQ3hCLENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBVTtRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFJLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFBO1FBQy9GLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNqRCx1QkFBdUI7UUFDdkIsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUN2RCxxRUFBcUU7UUFDckUsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUU7WUFDNUIsZ0RBQWdEO1lBQ2hELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFBO1lBRTNDLGlDQUFpQztZQUNqQyxJQUFJO2dCQUNGLElBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsS0FBSyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUM7b0JBQ2xFLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQTtpQkFDeEM7cUJBQU07b0JBQ1AsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUE7b0JBQ3JFLElBQUksQ0FBQyxPQUFPLEVBQUU7d0JBQ1oseUVBQXlFO3dCQUN6RSxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUE7d0JBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHFFQUFxRSxDQUFDLENBQUE7cUJBQzNGO2lCQUNGO2FBQ0E7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxxQ0FBcUM7Z0JBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQTtnQkFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMscUNBQXFDLEVBQUUsS0FBSyxDQUFDLENBQUE7Z0JBQ2xFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtvQkFDckUsUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQyxDQUFBO2FBQ0g7U0FDRjthQUFNO1lBQ0wsOERBQThEO1lBQzlELElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQTtZQUN2QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQTtTQUM1QztRQUNELG9IQUFvSDtRQUNwSCxJQUFJLENBQUMsZUFBZSxHQUFHLG1CQUFtQixDQUFBO1FBRTFDLDJDQUEyQztRQUMzQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUN2QixJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQTtRQUN2QyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTtRQUUvQixNQUFNLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFBO1FBRTdDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUE7UUFDNUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2pDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFBO1FBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFbkIsOENBQThDO1FBQzlDLHlEQUF5RDtRQUN6RCwwRUFBMEU7UUFDMUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsSUFBSSxFQUFFLENBQUE7UUFDN0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxVQUFVLElBQUksRUFBRSxDQUFBO1FBQ3ZELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFFdEQsT0FBTyxtQkFBbUIsQ0FBQTtJQUM1QixDQUFDO0lBRUQsNkJBQTZCO1FBQzNCLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLHNCQUFzQixDQUFDLEVBQUU7WUFDdkYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUMzRSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDdkIsTUFBTSxJQUFJLEdBQUc7Z0JBQ1gsUUFBUTtnQkFDUixVQUFVLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLElBQUksRUFBRTtnQkFDNUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxJQUFJLEVBQUU7Z0JBQ2hELFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzdGLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2FBQzNDLENBQUE7WUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRTtnQkFDaEUsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLEtBQUssRUFBRSxPQUFPO2dCQUNkLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixJQUFJLEVBQUUsSUFBSTtnQkFDVixTQUFTLEVBQUUsS0FBSzthQUNqQixDQUFDLENBQUE7WUFDRixTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzNDLElBQUksTUFBTSxFQUFFO29CQUNWLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO2lCQUM5QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQTtpQkFDNUI7WUFDSCxDQUFDLENBQUMsQ0FBQTtTQUNIO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixNQUFNLFVBQVUsR0FBRztZQUNqQixRQUFRLEVBQUU7Z0JBQ1I7b0JBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO29CQUN6RCxPQUFPLEVBQUUsY0FBYztpQkFDeEI7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDZDQUE2QyxDQUFDO29CQUM5RSxPQUFPLEVBQUUseUJBQXlCO2lCQUNuQzthQUNGO1lBQ0QsUUFBUSxFQUFFLGNBQWM7WUFDeEIsSUFBSSxFQUFFLFNBQVM7WUFDZixvQkFBb0IsRUFBRSw2QkFBNkI7WUFDbkQsT0FBTyxFQUFFO2dCQUNQO29CQUNFLE9BQU8sRUFBRSwwQkFBMEI7b0JBQ25DLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQztvQkFDMUQsUUFBUSxFQUFFLElBQUk7aUJBQ2Y7YUFDRjtTQUNGLENBQUE7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUM5RCxJQUFJLEVBQUUsVUFBVTtZQUNoQixZQUFZLEVBQUUsSUFBSTtZQUNsQixLQUFLLEVBQUUsT0FBTztZQUNkLFFBQVEsRUFBRSxNQUFNO1NBQ2pCLENBQUMsQ0FBQTtRQUNGLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMzQyxJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQTthQUM3QjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ3BGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUN2RixDQUFDO0lBRU8sS0FBSyxDQUFDLGdDQUFnQztRQUM1QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsTUFBTSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtTQUNuQzthQUFNO1lBQ0wsa0ZBQWtGO1lBQ2xGLDJEQUEyRDtZQUMzRCx1RUFBdUU7WUFDdkUsNERBQTREO1lBQzVELFVBQVU7WUFDVix5RUFBeUU7WUFDekUsd0RBQXdEO1lBQ3hELDhCQUE4QjtZQUM5QixzQkFBc0I7WUFDdEIseUZBQXlGO1lBQ3pGLE1BQU07WUFDTixJQUFJO1lBRUosd0NBQXdDO1lBQ3hDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFBO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxxQkFBcUI7UUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3BDLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ3hFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM3QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQTtJQUM3QixDQUFDO0lBRU8sc0JBQXNCLENBQUMsSUFBVTtRQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxpQkFBaUIsSUFBSSxLQUFLLENBQUE7UUFDaEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsZUFBZSxJQUFJLEtBQUssQ0FBQTtRQUM1RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQTtRQUMzQyxJQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsY0FBYyxLQUFLLFNBQVMsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUU7WUFDdEYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsSUFBSTtnQkFDN0M7b0JBQ0UsZUFBZSxFQUFFLFFBQVE7b0JBQ3pCLGdCQUFnQixFQUFFLE1BQU07b0JBQ3hCLFFBQVEsRUFBRSxJQUFJO29CQUNkLGlCQUFpQixFQUFFLGFBQWE7b0JBQ2hDLGVBQWUsRUFBRSxnQkFBZ0I7b0JBQ2pDLGFBQWEsRUFBRSxlQUFlO2lCQUMvQjthQUNGLENBQUE7U0FDRjthQUFNO1lBQ1AsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUE7U0FFOUM7SUFDSCxDQUFDO0lBRU8saUNBQWlDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDN0UsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtnQkFDakMsS0FBSyxNQUFNLENBQUMsSUFBSSxjQUFjLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTt3QkFDN0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQTt3QkFDM0IsTUFBSztxQkFDTjtpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFBO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxJQUFJLFVBQVUsQ0FBQTtRQUMvQyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUMvRCxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFDOUIsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FDekQsQ0FBQTtRQUVELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FDcEUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLEVBQ3ZDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQzdELENBQUE7SUFDSCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1FBQ3hCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUU7WUFDMUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUE7U0FDN0I7SUFDSCxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUU7WUFDMUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUE7U0FDN0I7SUFDSCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFBO1FBQ3BELElBQUksY0FBYyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRTtZQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUE7U0FDM0Q7SUFDSCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRTtZQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDckUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUE7WUFDNUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtTQUNoRztJQUNILENBQUM7SUFFTyw0QkFBNEI7UUFDbEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQWtCLEVBQUUsRUFBRTtZQUNqRixJQUFJLFdBQVcsWUFBWSxhQUFhLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBRS9DLGlFQUFpRTtnQkFDakUsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO29CQUNyQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7b0JBQ3JDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO2FBR3REO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBSUQ7OztPQUdHO0lBQ0ssOEJBQThCO1FBQ3BDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqRixJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxLQUFLLGtCQUFrQixFQUFFO2dCQUM3RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7Z0JBQ2hGLCtEQUErRDtnQkFDL0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7YUFDL0I7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFHRCx5QkFBeUI7UUFFdkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUE7UUFDN0QsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUE7WUFDbkYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtZQUM1QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtZQUMxQixPQUFNO1NBQ1A7UUFFRCxNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRTtnQkFDUCxxQkFBcUIsRUFBRSxJQUFJO2dCQUMzQixRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUM7YUFDdkI7U0FDRixDQUFBO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ2pELFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQy9CLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3JCLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUE7Z0JBQzVDLDhCQUE4QjtnQkFDOUIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUN2RCxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsVUFBVTtvQkFDbkUsRUFBRSxDQUFDLG9CQUFvQixLQUFLLEdBQUcsQ0FDbEMsQ0FBQTtnQkFDRCxJQUFJLG9CQUFvQixFQUFFO29CQUN4QixJQUFJLENBQUMsMEJBQTBCLENBQUMsVUFBVSxDQUFDLENBQUE7aUJBQzVDO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO2dCQUMzRCxJQUFHLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ3RCLHdFQUF3RTtvQkFDeEUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRTt3QkFDekgsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTt3QkFDbEcsSUFBSSx5QkFBeUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxVQUFVLENBQUMsQ0FBQTt3QkFDbkksSUFBSSxJQUFJLElBQUkseUJBQXlCLElBQUkseUJBQXlCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksRUFBRTs0QkFDM0csSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxDQUFDLENBQUE7NEJBQ3BJLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFO2dDQUM5QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQTs2QkFDcEo7aUNBQU07Z0NBQ0wsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7NkJBQzdGO3lCQUNGO3dCQUNELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFBO3FCQUNqQjt5QkFBTTt3QkFDTCwwQ0FBMEM7d0JBQzFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFBO3FCQUNoRjtpQkFDRjtxQkFBSztvQkFDRiwwQ0FBMEM7b0JBQzFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFBO2lCQUNoRjthQUVKO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUE7Z0JBQzVCLHFFQUFxRTtnQkFDckUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUE7Z0JBQ2hHLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQTtvQkFDN0UsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUE7aUJBQ2pCO2dCQUNELDhDQUE4QztnQkFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7YUFDbkQ7UUFDSCxDQUFDLENBQUM7UUFDRixrRUFBa0U7UUFDbEUsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ2xFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxDQUFDO1lBQ1YsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDVCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsRUFBRTtvQkFDOUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7b0JBQzFCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO2lCQUMzQjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtpQkFDM0I7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxDQUFDLENBQUE7Z0JBQ25FLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUE7Z0JBQzVCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1lBQzVCLENBQUM7WUFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUNiLHdDQUF3QztZQUMxQyxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxtQkFBbUI7UUFDL0IsSUFBSTtZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFBO2FBRWxFO1lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDL0MsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FDdEUsQ0FBQTtZQUVELElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHdEQUF3RCxDQUFDLENBQUE7YUFFOUU7WUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUN0RCxJQUFJLENBQUMsT0FBTyxFQUNaLENBQUMsWUFBWSxDQUFDLEVBQ2QsSUFBSSxFQUNKLElBQUksQ0FBQyxtQkFBbUIsRUFDeEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxVQUFVLElBQUksRUFBRSxDQUN2QyxDQUFBO1lBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDWixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxDQUFBO2FBRWhFO1lBRUQsSUFBSSxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUNoQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO29CQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQTtpQkFDL0M7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUE7b0JBQzlDLCtIQUErSDtvQkFDL0gsSUFBSSxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTt3QkFDekYsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFBO3FCQUN2Qzt5QkFBTTt3QkFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDbEIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQ2IsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7cUJBQ3hDO2lCQUNGO2FBQ0Y7U0FFRjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUE7U0FDL0M7SUFDSCxDQUFDO0lBQ08scUJBQXFCLENBQUMsVUFBa0I7UUFDOUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxLQUFLLGtCQUFrQixFQUFFO1lBQ25FLE9BQU8sSUFBSSxPQUFPLENBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFBO2dCQUd4Qyx3Q0FBd0M7Z0JBQ3hDLElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFFM0Usc0RBQXNEO2dCQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLGlDQUFpQyxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO2dCQUVqRyx5RkFBeUY7Z0JBQ3pGLElBQUksQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtnQkFDN0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQTtnQkFDbkMsNEJBQTRCO2dCQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7Z0JBRWhGLDRGQUE0RjtnQkFDNUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtnQkFFckQsNERBQTREO2dCQUM1RCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtnQkFFOUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7Z0JBQ3ZCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtnQkFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNiLE9BQU07WUFDUixDQUFDLENBQUMsQ0FBQTtTQUNIO2FBQU07WUFDTCxPQUFPLElBQUksT0FBTyxDQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUM5QyxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDZCxPQUFNO2lCQUNQO2dCQUVELHdEQUF3RDtnQkFDeEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUE7Z0JBRTlFLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQTtvQkFDMUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUNkLE9BQU07aUJBQ1A7Z0JBRUQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztvQkFDeEMsSUFBSSxFQUFFLENBQUMsUUFBYSxFQUFFLEVBQUU7d0JBQ3RCLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7NEJBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUE7NEJBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBOzRCQUN2QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7NEJBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dDQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQTtnQ0FDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTs2QkFDMUI7NEJBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO3lCQUNkOzZCQUFNOzRCQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTt5QkFDZjt3QkFDRCxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUE7b0JBQzVCLENBQUM7b0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUU7d0JBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLEtBQUssQ0FBQyxDQUFBO3dCQUNoRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7d0JBQ2IsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFBO29CQUM1QixDQUFDO2lCQUNGLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO1FBQzdCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFBO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3hHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2hHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDaEYsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUN4QyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNuQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQTtvQkFDM0IsTUFBSztpQkFDTjthQUNGO1lBRUQsbUJBQW1CO1lBQ25CLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFBO1lBQ2pDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFBO1lBQ2xDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQy9DLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtTQUN2QjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCx1QkFBdUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVE7WUFBRSxPQUFNO1FBRW5ELElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQTtRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUMzQyxJQUFJLEtBQUssQ0FBQyxlQUFlLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7Z0JBQzdELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtnQkFDdEQsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtvQkFDdkQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQTtvQkFDaEMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUE7b0JBQzFDLElBQUksU0FBUyxLQUFLLEtBQUssQ0FBQyxRQUFRLEVBQUU7d0JBQ2hDLFVBQVUsR0FBRyxJQUFJLENBQUE7cUJBQ2xCO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssNEJBQTRCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLE9BQU07U0FDUDtRQUVELElBQUk7WUFFRiw0QkFBNEI7WUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1lBRWhGLDJEQUEyRDtZQUMzRCxzRkFBc0Y7WUFDdEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUVyRCxnREFBZ0Q7WUFDaEQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7U0FFL0I7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsMENBQTBDLEVBQUUsS0FBSyxDQUFDLENBQUE7U0FDakU7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBUztRQUN4QixnREFBZ0Q7UUFDaEQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pGLE9BQU0sQ0FBQyxnREFBZ0Q7U0FDeEQ7UUFFRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO1lBQzdELElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQTtZQUNiLGdDQUFnQztZQUNoQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUNySSxJQUFJLGNBQWMsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDakQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFBO2FBQ3BDO2lCQUFNO2dCQUNMLGlEQUFpRDtnQkFDakQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3pFLElBQUksR0FBRzt3QkFDTCxLQUFLLEVBQUUsT0FBTzt3QkFDZCxNQUFNLEVBQUUsTUFBTTt3QkFDZCxJQUFJLEVBQUU7NEJBQ0osSUFBSSxFQUFFLGdCQUFnQjs0QkFDdEIsSUFBSSxFQUFFLFdBQVc7NEJBQ2pCLE1BQU0sRUFBRSxrQ0FBa0MsSUFBSSxDQUFDLElBQUksR0FBRzs0QkFDdEQsT0FBTyxFQUFFLCtHQUErRzs0QkFDeEgsWUFBWSxFQUFFLE1BQU07NEJBQ3BCLFlBQVksRUFBRSxRQUFRO3lCQUN2QjtxQkFDRixDQUFBO2lCQUNGO3FCQUFNO29CQUNMLDRFQUE0RTtvQkFDNUUsSUFBSSxHQUFHO3dCQUNMLEtBQUssRUFBRSxPQUFPO3dCQUNkLE1BQU0sRUFBRSxNQUFNO3dCQUNkLElBQUksRUFBRTs0QkFDSixJQUFJLEVBQUUsZ0JBQWdCOzRCQUN0QixJQUFJLEVBQUUsV0FBVzs0QkFDakIsTUFBTSxFQUFFLCtDQUErQzs0QkFDdkQsT0FBTyxFQUFFLDBIQUEwSDs0QkFDbkksWUFBWSxFQUFFLE1BQU07NEJBQ3BCLFlBQVksRUFBRSxpQkFBaUI7eUJBQ2hDO3FCQUNGLENBQUE7aUJBQ0Y7Z0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTthQUNyQztTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDcEM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBUyxFQUFFLElBQVU7UUFDdkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDeEUsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzlDLElBQUksU0FBUyxFQUFFO2dCQUNiLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTthQUNwQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHdCQUF3QixDQUFDLE9BQVk7UUFDbkMsTUFBTSxJQUFJLEdBQUc7WUFDWCxLQUFLLEVBQUUsT0FBTztZQUNkLE1BQU0sRUFBRSxNQUFNO1lBQ2QsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLElBQUksRUFBRSxXQUFXO2dCQUNqQixNQUFNLEVBQUUsb0NBQW9DO2dCQUM1QyxPQUFPLEVBQUUsbUtBQW1LO2dCQUM1SyxZQUFZLEVBQUUsZUFBZTtnQkFDN0IsWUFBWSxFQUFFLFFBQVE7YUFDdkI7U0FDRixDQUFBO1FBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDeEUsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzlDLElBQUksU0FBUyxFQUFFO2dCQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUNsQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFDYixFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQTthQUN4QztpQkFBTTtnQkFDTCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7Z0JBQ2pILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTthQUNwQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHdCQUF3QixDQUFDLElBQVM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQTtRQUU1Qiw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUE7UUFDMUIsbURBQW1EO1FBQ25ELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0IsMEVBQTBFO1lBQzFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNuQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNULHdEQUF3RDtnQkFDeEQsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ3BELENBQUMsQ0FBQztpQkFDRCxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNULGtDQUFrQztnQkFDbEMsdUNBQXVDO2dCQUN2QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzlCLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7b0JBQzdELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFBO2lCQUNqQztnQkFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtvQkFDdEIsdUVBQXVFO29CQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTt3QkFDcEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7cUJBQzNCO2lCQUNGO2dCQUNELDZGQUE2RjtnQkFDN0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNyRCxxQ0FBcUM7Z0JBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFBO1lBQzdCLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZix5Q0FBeUM7Z0JBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUM1RCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQTtnQkFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO29CQUNyRSxRQUFRLEVBQUUsSUFBSTtpQkFDZixDQUFDLENBQUE7WUFDSixDQUFDLENBQUMsQ0FBQTtTQUNMO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUN4RCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQTtZQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7Z0JBQ3BELFFBQVEsRUFBRSxJQUFJO2FBQ2YsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFrQjtRQUMvQyxPQUFPLElBQUksT0FBTyxDQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzlDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQTtnQkFDbkUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNkLE9BQU07YUFDUDtZQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFL0QsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDZixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFBO2dCQUNyRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQ2QsT0FBTTthQUNQO1lBRUQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztnQkFDeEMsSUFBSSxFQUFFLENBQUMsUUFBYSxFQUFFLEVBQUU7b0JBQ3RCLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7d0JBQzdCLGtEQUFrRDt3QkFDbEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQTt3QkFFOUMsZ0RBQWdEO3dCQUNoRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7NEJBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUE7NEJBQ3BGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTt5QkFDdEY7d0JBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO3FCQUNkO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO3dCQUNuRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7cUJBQ2Y7b0JBQ0QsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFBO2dCQUM1QixDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLENBQUMsQ0FBQTtvQkFDM0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUNiLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtnQkFDNUIsQ0FBQzthQUNGLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELG1CQUFtQixDQUFDLGFBQXNCO1FBQ3hDLE1BQU0sV0FBVyxHQUFRLEVBQUUsQ0FBQTtRQUUzQix5QkFBeUI7UUFDekIsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3RDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1NBQ3hDO1FBRUQsZ0VBQWdFO1FBQ2hFLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRTtZQUMzRCxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUE7WUFFakIsZ0RBQWdEO1lBQ2hELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNoRCxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7YUFDMUQ7aUJBQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRTtnQkFDeEMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO2FBQ3ZEO1lBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3pFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRztvQkFDdEIsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZDLENBQUE7YUFDRjtZQUNELDRDQUE0QztZQUM1QyxJQUFJLFFBQVEsRUFBRTtnQkFDWixXQUFXLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQTthQUMxQjtZQUVELFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUE7U0FDbkQ7UUFFRCx3REFBd0Q7UUFDeEQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQ2xCLEVBQUUsRUFDRjtnQkFDRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ3RCLFdBQVcsRUFBRSxXQUFXO2dCQUN4QixtQkFBbUIsRUFBRSxPQUFPO2FBQzdCLENBQ0YsQ0FBQTtTQUNGO0lBQ0gsQ0FBQztJQUVPLHVCQUF1QixDQUFDLFNBQWlCLEVBQUUsT0FBZ0IsRUFBRSxJQUFhO1FBQ2hGLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtRQUN0QixJQUFJLE1BQU0sQ0FBQTtRQUNWLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUU7WUFDOUIsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUE7U0FDakQ7UUFFRCxNQUFNLEdBQUcsR0FBdUM7WUFDOUMsT0FBTyxFQUFFO2dCQUNQLE9BQU87Z0JBQ1AsTUFBTTtnQkFDTixRQUFRLEVBQUUsU0FBUyxJQUFJLEVBQUU7Z0JBQ3pCLFVBQVUsRUFBRSxFQUFFO2dCQUNkLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixDQUFDO2dCQUMzQixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ3RDO1NBQ0YsQ0FBQTtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFO1lBQ3hGLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUNsRCxJQUFJLENBQUMsRUFBRTtnQkFDTCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTtvQkFDcEYsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQTtvQkFDeEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLElBQUksRUFBRSxDQUFBO29CQUN2RSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxFQUFFO3dCQUMzQywyQkFBMkI7d0JBQzNCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFBO3dCQUM3SixDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSwwQkFBMEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTt3QkFDeEUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLHNCQUFzQixDQUFDLEVBQUU7NEJBQ3RDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dDQUM3QixDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQTs2QkFDdkM7aUNBQU07Z0NBQ0wsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUE7NkJBQ3JDO3lCQUNGO3dCQUNELE9BQU8sRUFBRSxDQUFBO29CQUNYLENBQUMsQ0FBQyxDQUFBO29CQUNGLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO29CQUMvRCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO29CQUMxRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsVUFBVSxFQUFFO3dCQUNoQyxNQUFNLElBQUksR0FBRyxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQTt3QkFDekMsSUFBSSxJQUFJLEVBQUU7NEJBQ1IsMkJBQTJCOzRCQUMzQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRTtnQ0FDM0IsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTs0QkFDbEIsQ0FBQyxDQUFDLENBQUE7eUJBQ0g7cUJBQ0Y7b0JBQ0QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUE7b0JBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO29CQUM3Qyx1RUFBdUU7b0JBQ3ZFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO29CQUM1QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLEtBQUssR0FBRyxFQUFFO3dCQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO3FCQUNuRTtvQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtvQkFDckQsMkRBQTJEO29CQUMzRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLEtBQUssa0JBQWtCLEVBQUU7d0JBQ25FLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTt3QkFDaEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQTt3QkFDckQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7cUJBQy9CO29CQUNELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtpQkFDdEM7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7b0JBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO29CQUNyRCxnRUFBZ0U7b0JBQ2hFLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLGNBQWMsS0FBSyxrQkFBa0IsRUFBRTt3QkFDbkUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO3dCQUNoRixJQUFJLENBQUMsTUFBTSxDQUFDLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxDQUFBO3dCQUNyRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtxQkFDL0I7b0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO2lCQUN0QztnQkFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUE7Z0JBQ3JFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsS0FBSyxHQUFHLEVBQUU7b0JBQzlDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO2lCQUNoQztZQUNILENBQUMsRUFDRCxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQzlELENBQUMsQ0FDRixDQUFBO1NBQ0Y7SUFDSCxDQUFDO0lBRUQseUJBQXlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ25DLElBQUksWUFBaUIsQ0FBQTtZQUNyQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEtBQUssR0FBRyxFQUFFO2dCQUM3QyxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFBO2FBQ25EO2lCQUFNO2dCQUNMLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTthQUM1QztZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO2dCQUMxQixZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFBO2FBQ3ZGO1lBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFBO1lBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQTtZQUN4RCw4QkFBOEI7U0FDL0I7SUFDSCxDQUFDO0lBQ0Qsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUM1RCxPQUFPLEtBQUssQ0FBQTtTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUNuRCxJQUFJLEVBQUUsVUFBVSxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQ3ZELENBQUE7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDbEIsTUFBTSxtQkFBbUIsR0FBUSxFQUFFLENBQUE7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUMsVUFBVSxFQUFDLEVBQUU7WUFFN0UsMkNBQTJDO1lBQzNDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUN0RCxDQUFDLENBQUMsQ0FBQTtZQUNGLG1CQUFtQixDQUFBO1lBRW5CLDhCQUE4QjtZQUM5QixNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUNsRCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUN0RCxNQUFNLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLENBQUE7WUFFcEUsSUFBSSxTQUFTLElBQUksV0FBVyxFQUFFO2dCQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtnQkFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7YUFDL0I7WUFFRCxJQUFJLG9CQUFvQixFQUFFO2dCQUN4QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUE7Z0JBQ2hELElBQUk7b0JBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLDhCQUE4QixDQUFDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxFQUFFLENBQUE7b0JBQzNHLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7d0JBQy9ELElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO3FCQUN2RztpQkFDRjtnQkFBQyxPQUFPLEtBQUssRUFBRTtvQkFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtpQkFDbkU7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxtQkFBbUIsQ0FBQTtJQUM1QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUM7WUFDbkIsU0FBUyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0I7WUFDMUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxxQkFBcUI7WUFDL0MsU0FBUyxDQUFDLGVBQWUsQ0FBQyxpQkFBaUI7WUFDM0MsU0FBUyxDQUFDLGVBQWUsQ0FBQyxtQkFBbUI7U0FDOUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtZQUNwQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO2dCQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQTthQUN0RDtTQUNGO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscUJBQXFCO1FBQ25CLElBQUk7WUFDRiw2Q0FBNkM7WUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLDJEQUEyRCxDQUFDLENBQUE7Z0JBQ2hGLE9BQU07YUFDUDtZQUVELHFFQUFxRTtZQUNyRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUE7WUFFM0QsOENBQThDO1lBQzlDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUU7Z0JBQ3hDLDZEQUE2RDtnQkFDN0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFBO2FBQ3pGO2lCQUFNO2dCQUNMLDhDQUE4QztnQkFDOUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTthQUM3QjtZQUVELHVFQUF1RTtZQUN2RSxxRUFBcUU7WUFDckUsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtTQUM1RTtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ3JFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUE7WUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7U0FDckI7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLGlEQUFpRDtRQUNqRCxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCO2FBQ25FLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMseURBQXlEO2FBQy9GLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUNsQixxQ0FBcUM7Z0JBQ3JDLElBQUksSUFBSSxFQUFFO29CQUNSLG1EQUFtRDtvQkFDbkQsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO29CQUM5RCxJQUFJLGNBQWMsRUFBRTt3QkFDbEIsbUNBQW1DO3dCQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQTt3QkFFbkMscUNBQXFDO3dCQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtxQkFDbkM7aUJBQ0Y7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsZ0RBQWdEO2dCQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUM1RSxDQUFDO1NBQ0YsQ0FBQyxDQUFBO1FBRUoscUVBQXFFO1FBQ3JFLElBQUksQ0FBQyx1QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQTtJQUN4RCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2Ysc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUNuQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ2hCLCtDQUErQztZQUMvQyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFO2dCQUNuQywyREFBMkQ7Z0JBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO2dCQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUE7YUFDdEM7aUJBQU07Z0JBQ0wsNERBQTREO2dCQUM1RCxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFBO2dCQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFBO2dCQUN4QyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTthQUM3QjtZQUVELHVEQUF1RDtZQUN2RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7WUFDZixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUM1QixDQUFDLEVBQ0QsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNiLDhCQUE4QjtZQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUV6RCxxQ0FBcUM7WUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzlCLENBQUMsQ0FDRixDQUFBO1FBRUQsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVU7YUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxvQ0FBb0M7YUFDMUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzlCLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELElBQUksd0JBQXdCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUE7SUFDL0UsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFO1lBQ3RFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1NBQ3BDO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBVTtRQUV6QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUMzQjthQUFNO1lBQ0wsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUE7U0FDN0I7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQVc7UUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUU7WUFDbEUsS0FBSyxFQUFFLE9BQU87WUFDZCxNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFlBQVksRUFBRSxLQUFLO1lBQ25CLElBQUksRUFBRTtnQkFDSixTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDaEMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO2FBQ2hDO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ2pELElBQUksWUFBWSxFQUFFO2dCQUNoQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFBO2dCQUNwQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTthQUM3QjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxZQUFpQixFQUFFLE9BQWEsRUFBRSxlQUFxQjtRQUNsRSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQTtRQUNsRCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQTtRQUM1QyxJQUFJLGFBQWEsR0FBRyxvQkFBb0IsQ0FDdEMsWUFBWSxDQUFDLFVBQVUsRUFDdkIsWUFBWSxDQUFDLFFBQVEsRUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQ3BHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLElBQUksRUFBRSxFQUNyRyxJQUFJLENBQUMsVUFBVSxFQUNmLGVBQWUsSUFBSSxtQkFBbUIsRUFDdEMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFDNUIsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLElBQUksRUFBRSxFQUNoRSxFQUFFLEVBQ0YsSUFBSSxDQUNMLENBQUE7UUFDRCxPQUFPLGFBQWEsQ0FBQTtJQUN0QixDQUFDO0lBRUQsSUFBSSx3QkFBd0I7UUFDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRTtZQUM1QixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3BHLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDeEgsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFBO2lCQUMvRDtxQkFBTTtvQkFDTCxPQUFPLENBQUMsQ0FBQTtpQkFDVDthQUNGO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsSUFBSSxDQUFDLENBQUE7YUFDL0M7U0FDRjtJQUNILENBQUM7SUFFRCwrQkFBK0I7UUFDN0IsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEMsbUlBQW1JO1lBQ25JLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsT0FBTztnQkFDM0ksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRTtnQkFDdkosSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRTtvQkFDbkksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7b0JBQ3ZFLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUE7b0JBQ2hELGdEQUFnRDtvQkFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ3BFLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ3RFLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFBO3lCQUM3Qjs2QkFBTTs0QkFDTCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQTs0QkFDM0IsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUE7eUJBQ3JDO29CQUNILENBQUMsQ0FBQyxDQUFBO2lCQUNIO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRCxxRUFBcUU7SUFDckUsNkJBQTZCLENBQUMsUUFBZ0IsRUFBRSxRQUFnQjtRQUM5RCxNQUFNLFVBQVUsR0FBRyxVQUFVLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQTtRQUNuRCxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtTQUNwQztJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxhQUFzQixFQUFFLFdBQWlCO1FBQzdELGdFQUFnRTtRQUNoRSxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUM1RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQTtRQUM3RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUE7UUFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFBO1FBQ25ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwRyxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBRTFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFFdEQsTUFBTSxJQUFJLEdBQUc7WUFDWCxRQUFRLEVBQUUsUUFBUTtZQUNsQixRQUFRLEVBQUUsUUFBUTtZQUNsQixVQUFVLEVBQUUsVUFBVTtZQUN0QixZQUFZLEVBQUUsWUFBWTtZQUMxQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDNUIsQ0FBQTtRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFDLElBQUksQ0FBQyxDQUFBO1FBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQzVELHNCQUFzQjtZQUN0QixLQUFLLEVBQUUsT0FBTztZQUNkLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDLENBQUE7UUFDRixTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDM0MsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsMEVBQTBFO2dCQUMxRSxJQUFJLGFBQWEsRUFBRTtvQkFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO2lCQUNwRTthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQTtRQUNsSCxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDcEgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRDs7O09BR0c7SUFHSCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQzVFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsZUFBZSxFQUFFLGtCQUFrQixFQUFFLFVBQVUsV0FBVyxDQUFDLENBQUMsQ0FBQTtRQUNwRyxDQUFDLENBQUMsQ0FBQTtJQUVKLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUU7WUFDbkUsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDOUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDakYsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLElBQUksQ0FBQTthQUNaO2lCQUFNO2dCQUNMLE9BQU8sS0FBSyxDQUFBO2FBQ2I7U0FDRjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUE7U0FDWjtJQUNILENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUN0QixDQUFDOytHQTVxR1UscUJBQXFCLDgvQkFnT3RCLGFBQWE7bUdBaE9aLHFCQUFxQiwwb0JDakZsQywwcStEQTgrQmM7OzRGRDc1QkQscUJBQXFCO2tCQVBqQyxTQUFTOytCQUNFLHdCQUF3QixpQkFJbkIsaUJBQWlCLENBQUMsSUFBSTs7MEJBa09sQyxNQUFNOzJCQUFDLGFBQWE7NENBeE1kLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQTBDcUMsV0FBVztzQkFBckQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXVEWixTQUFTO3NCQUFyQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDbUIsVUFBVTtzQkFBdkQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBc0MxQixZQUFZO3NCQURYLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uLCBJbnB1dCxcbiAgSW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBTYWZlSHRtbCwgRG9tU2FuaXRpemVyLCBTYWZlU3R5bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJ1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEV2ZW50LCBEYXRhLCBSb3V0ZXIsIE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcydcbi8vIGltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgb2YsIGZyb20gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc2hhcmUsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCdcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSlcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZSdcblxuaW1wb3J0IHsgTnNDb250ZW50IH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzL3dpZGdldC1jb250ZW50Lm1vZGVsJ1xuaW1wb3J0IHsgV2lkZ2V0Q29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQuc2VydmljZSdcbmltcG9ydCB7IHZpZXdlclJvdXRlR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzL3ZpZXdlci1yb3V0ZS11dGlsJ1xuaW1wb3J0IHsgTnNXaWRnZXRSZXNvbHZlciB9IGZyb20gJ0BzdW5iaXJkLWNiL3Jlc29sdmVyLXYyJ1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvbnNTZXJ2aWNlLCBEYXRhVHJhbnNmZXJTZXJ2aWNlLCBFdmVudFNlcnZpY2UsXG4gIExvZ2dlclNlcnZpY2UsIE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2UsXG4gIE5zUGFnZSwgVEZldGNoU3RhdHVzLCBUZWxlbWV0cnlTZXJ2aWNlLFxuICBVdGlsaXR5U2VydmljZSwgV2lkZ2V0RW5yb2xsU2VydmljZSwgV3NFdmVudHMsXG59IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJ1xuXG5pbXBvcnQgeyBDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIENvbnRlbnRMYW5ndWFnZVNlcnZpY2UsIFRPQ011bHRpTGluZ3VhbERpYWxvZ0NvbXBvbmVudCwgV2lkZ2V0Q29udGVudExpYlNlcnZpY2UsIFdpZGdldFVzZXJTZXJ2aWNlTGliIH0gZnJvbSAnQHN1bmJpcmQtY2IvY29uc3VtcHRpb24nXG5pbXBvcnQgeyBOc0FwcFRvYyB9IGZyb20gJy4uLy4uL21vZGVscy9hcHAtdG9jLm1vZGVsJ1xuaW1wb3J0IHsgQXBwVG9jU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC10b2Muc2VydmljZSdcbmltcG9ydCB7IE1vYmlsZUFwcHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9iaWxlLWFwcHMuc2VydmljZSdcbmltcG9ydCB7IEhhbmRsZUNsYWltU2VydmljZSB9IGZyb20gJy4uLy4uL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvY29udGVudC1zZXJ2aWNlcy9oYW5kbGUtY2xhaW0uc2VydmljZSdcbmltcG9ydCB7IEFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY3Rpb24uc2VydmljZSdcbmltcG9ydCB7IFJhdGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvcmF0aW5nLnNlcnZpY2UnXG5pbXBvcnQgeyBWaWV3ZXJVdGlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdlci11dGlsLnNlcnZpY2UnXG5pbXBvcnQgeyBMb2FkQ2hlY2tTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9hZC1jaGVjay5zZXJ2aWNlJ1xuaW1wb3J0IHsgUmVzZXRSYXRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc2V0LXJhdGluZ3Muc2VydmljZSdcblxuaW1wb3J0IHsgQXBwVG9jRGlhbG9nSW50cm9WaWRlb0NvbXBvbmVudCB9IGZyb20gJy4uL2FwcC10b2MtZGlhbG9nLWludHJvLXZpZGVvL2FwcC10b2MtZGlhbG9nLWludHJvLXZpZGVvLmNvbXBvbmVudCdcbmltcG9ydCB7IENvbnRlbnRSYXRpbmdWMkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC1yYXRpbmctdjItZGlhbG9nL2NvbnRlbnQtcmF0aW5nLXYyLWRpYWxvZy5jb21wb25lbnQnXG5pbXBvcnQgeyBUaW1lclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aW1lci5zZXJ2aWNlJ1xuaW1wb3J0IHsgTWF0TGVnYWN5RGlhbG9nIGFzIE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnXG5pbXBvcnQgeyBNYXRMZWdhY3lTbmFja0JhciBhcyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1zbmFjay1iYXInXG5pbXBvcnQgeyBNYXRTbmFja0JhciBhcyBNYXRTbmFja2Jhck5ldyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcidcbmltcG9ydCB7IE5ldENvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmV0Y29yZS5zZXJ2aWNlJ1xuaW1wb3J0IHsgRW5yb2xsTGFuZ3VhZ2VEaWFsb2d1ZUNvbXBvbmVudCB9IGZyb20gJy4uL2Vucm9sbC1sYW5ndWFnZS1kaWFsb2d1ZS9lbnJvbGwtbGFuZ3VhZ2UtZGlhbG9ndWUuY29tcG9uZW50J1xuaW1wb3J0IHsgQ29tcGxldGlvblN1cnZleUZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9jb21wbGV0aW9uLXN1cnZleS1mb3JtL2NvbXBsZXRpb24tc3VydmV5LWZvcm0uY29tcG9uZW50J1xuaW1wb3J0IHsgUHVibGljU3VydmV5Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL3B1YmxpYy1zdXJ2ZXktZm9ybS9wdWJsaWMtc3VydmV5LWZvcm0uY29tcG9uZW50J1xuaW1wb3J0IHsgTnNDYXJkQ29udGVudCB9IGZyb20gJy4uLy4uL21vZGVscy9jYXJkLWNvbnRlbnQubW9kZWwnXG5pbXBvcnQgeyBOb25SZWxldmVudEZlZWRiYWNrRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vbm9uLXJlbGV2ZW50LWZlZWRiYWNrLWRpYWxvZy9ub24tcmVsZXZlbnQtZmVlZGJhY2stZGlhbG9nLmNvbXBvbmVudCdcbmltcG9ydCB7IEFwcFRvY1YyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC10b2MtdjIuc2VydmljZSdcblxuZXhwb3J0IGVudW0gRXJyb3JUeXBlIHtcbiAgaW50ZXJuYWxTZXJ2ZXIgPSAnaW50ZXJuYWxTZXJ2ZXInLFxuICBzZXJ2aWNlVW5hdmFpbGFibGUgPSAnc2VydmljZVVuYXZhaWxhYmxlJyxcbiAgc29tZXRoaW5nV3JvbmcgPSAnc29tZXRoaW5nV3JvbmcnLFxufVxuXG5jb25zdCBmbGF0dGVuSXRlbXMgPSAoaXRlbXM6IGFueVtdLCBrZXk6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICByZXR1cm4gaXRlbXMucmVkdWNlKChmbGF0dGVuZWRJdGVtcywgaXRlbSkgPT4ge1xuICAgIGZsYXR0ZW5lZEl0ZW1zLnB1c2goaXRlbSlcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtW2tleV0pKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGZsYXR0ZW5lZEl0ZW1zID0gZmxhdHRlbmVkSXRlbXMuY29uY2F0KGZsYXR0ZW5JdGVtcyhpdGVtW2tleV0sIGtleSkpXG4gICAgfVxuICAgIHJldHVybiBmbGF0dGVuZWRJdGVtc1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICB9LCBbXSlcbn1cbmNvbnN0IFNOQUNLQkFSX0RVUkFUSU9OID0gMzAwMFxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd3MtYXBwLWFwcC10b2MtaG9tZS12MicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtdG9jLWhvbWUtdjIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHAtdG9jLWhvbWUtdjIuY29tcG9uZW50LnNjc3MnXSxcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB1c2UtY29tcG9uZW50LXZpZXctZW5jYXBzdWxhdGlvblxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBUb2NIb21lVjJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHF1ZXJ5UGFyYW1zRGF0YTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9OyAvLyBJbml0aWFsaXplIHF1ZXJ5UGFyYW1zRGF0YVxuICBzaG93ID0gZmFsc2VcbiAgY2hhbmdlVGFiID0gZmFsc2VcbiAgc2tlbGV0b25Mb2FkZXIgPSB0cnVlXG4gIGJhbm5lcnM6IE5zQXBwVG9jLklUb2NCYW5uZXIgfCBudWxsID0gbnVsbFxuICBzaG93TW9yZUdsYW5jZSA9IGZhbHNlXG4gIGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwgPSBudWxsXG4gIGNvbnRlbnRSZWFkRGF0YTogTnNDb250ZW50LklDb250ZW50IHwgbnVsbCA9IG51bGxcbiAgYmFzZUNvbnRlbnRSZWFkRGF0YTogTnNDb250ZW50LklDb250ZW50IHwgbnVsbCA9IG51bGxcbiAgZXJyb3JDb2RlOiBOc0FwcFRvYy5FV3NUb2NFcnJvckNvZGUgfCBudWxsID0gbnVsbFxuICByZXN1bWVEYXRhOiBhbnkgPSBudWxsXG4gIG5zQ2FyZENvbnRlbnREYXRhOiBhbnkgPSBOc0NhcmRDb250ZW50LkFDQlBDb25zdFxuICBiYXRjaERhdGE6IE5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2UgfCBudWxsID0gbnVsbFxuICBjdXJyZW50Q291cnNlQmF0Y2hJZDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgdXNlckVucm9sbG1lbnRMaXN0ITogTnNDb250ZW50LklDb3Vyc2VbXVxuICByb3V0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGxcbiAgcGFnZU5hdmJhcjogUGFydGlhbDxOc1BhZ2UuSU5hdkJhY2tncm91bmQ+ID0gdGhpcy5jb25maWdTdmMucGFnZU5hdkJhclxuICBpc0NvaG9ydHNSZXN0cmljdGVkID0gZmFsc2VcbiAgc3RpY2t5ID0gZmFsc2VcbiAgaXNJbklmcmFtZSA9IGZhbHNlXG4gIGNiUGxhbkVuZERhdGU6IGFueVxuICBjYlBsYW5EdXJhdGlvbjogYW55XG4gIGVucm9sbGVkQ291cnNlRGF0YTogYW55XG4gIEBJbnB1dCgpIGZvclByZXZpZXc6IGFueSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvcHVibGljLycpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvYXV0aG9yLycpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvcHJldmlldy8nKVxuICBASW5wdXQoKSBpbnB1dENvbnRlbnQ6IGFueVxuICBASW5wdXQoKSBkaXNwbGF5Vmlld0J0bjogYW55ID0gdHJ1ZVxuICAvLyBmb3JQcmV2aWV3ID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9hdXRob3IvJylcbiAgYW5hbHl0aWNzID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhPy5wYWdlRGF0YT8uZGF0YT8uYW5hbHl0aWNzXG4gIGVycm9yV2lkZ2V0RGF0YTogTnNXaWRnZXRSZXNvbHZlci5JUmVuZGVyQ29uZmlnV2l0aFR5cGVkRGF0YTxhbnk+ID0ge1xuICAgIHdpZGdldFR5cGU6ICdlcnJvclJlc29sdmVyJyxcbiAgICB3aWRnZXRTdWJUeXBlOiAnZXJyb3JSZXNvbHZlcicsXG4gICAgd2lkZ2V0RGF0YToge1xuICAgICAgZXJyb3JUeXBlOiAnaW50ZXJuYWxTZXJ2ZXInLFxuICAgIH0sXG4gIH1cbiAgaXNBdXRob3IgPSBmYWxzZVxuICBhdXRob3JCdG5XaWRnZXQ6IE5zUGFnZS5JTmF2TGluayA9IHtcbiAgICBhY3Rpb25CdG5JZDogJ2ZlYXR1cmVfYXV0aG9yaW5nJyxcbiAgICBjb25maWc6IHtcbiAgICAgIHR5cGU6ICdtYXQtYnV0dG9uJyxcbiAgICB9LFxuICB9XG4gIHRvY0NvbmZpZzogYW55ID0gbnVsbFxuICBwcmltYXJ5Q2F0ZWdvcnkgPSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeVxuICBjb3Vyc2VDYXRlZ29yeSA9IE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnlcbiAgV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cyA9IE5zQ29udGVudC5XRkJsZW5kZWRQcm9ncmFtU3RhdHVzXG4gIGFza0F1dGhvckVuYWJsZWQgPSB0cnVlXG4gIHRyYWluaW5nTEh1YkVuYWJsZWQgPSBmYWxzZVxuICB0cmFpbmluZ0xIdWJDb3VudCQ/OiBPYnNlcnZhYmxlPG51bWJlcj5cbiAgYm9keTogU2FmZUh0bWwgfCBudWxsID0gbnVsbFxuICB2aWV3TW9yZVJlbGF0ZWRUb3BpY3MgPSBmYWxzZVxuICBoYXNUb2NTdHJ1Y3R1cmUgPSBmYWxzZVxuICB0b2NTdHJ1Y3R1cmU6IE5zQXBwVG9jLklUb2NTdHJ1Y3R1cmUgfCBudWxsID0gbnVsbFxuICBjb250ZW50UGFyZW50czogeyBba2V5OiBzdHJpbmddOiBOc0FwcFRvYy5JQ29udGVudFBhcmVudFJlc3BvbnNlW10gfSA9IHt9XG4gIG9iaktleXMgPSBPYmplY3Qua2V5c1xuICBmcmFnbWVudCE6IHN0cmluZ1xuICBhY3RpdmVGcmFnbWVudCA9IHRoaXMucm91dGUuZnJhZ21lbnQucGlwZShzaGFyZSgpKVxuICBjdXJyZW50RnJhZ21lbnQgPSAnb3ZlcnZpZXcnXG4gIHNob3dTY3JvbGwhOiBib29sZWFuXG4gIHNob3dTY3JvbGxIZWlnaHQgPSAzMDBcbiAgaGlkZVNjcm9sbEhlaWdodCA9IDEwXG4gIGVsZW1lbnRQb3NpdGlvbjogYW55XG4gIGJhdGNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxuICBiYXRjaERhdGFTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXG4gIHJlc3VtZURhdGFTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXG4gIHRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxuICBoYXNobWFwVXBkYXRlZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGxcbiAgQFZpZXdDaGlsZCgnc3RpY2t5TWVudScsIHsgc3RhdGljOiB0cnVlIH0pIG1lbnVFbGVtZW50ITogRWxlbWVudFJlZlxuICBiYXRjaENvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICBjb250ZW50UHJvZ3Jlc3MgPSAwXG4gIGJhbm5lclVybDogU2FmZVN0eWxlIHwgbnVsbCA9IG51bGxcbiAgcm91dGVQYXRoID0gJ292ZXJ2aWV3J1xuICB2YWxpZFBhdGhzID0gbmV3IFNldChbJ292ZXJ2aWV3JywgJ2NvbnRlbnRzJywgJ2FuYWx5dGljcyddKVxuICByb3V0ZXJQYXJhbVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGxcbiAgaW5pdGlhbHJvdXRlRGF0YTogYW55XG4gIGFjdGlvbkJ0blN0YXR1cyA9ICd3YWl0J1xuICBpc1JlZ2lzdHJhdGlvblN1cHBvcnRlZCA9IGZhbHNlXG4gIHNob3dJbnRyYW5ldE1lc3NhZ2UgPSBmYWxzZVxuICBmaXJzdFJlc291cmNlTGluazogeyB1cmw6IHN0cmluZzsgcXVlcnlQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfSB8IG51bGwgPSBudWxsXG4gIHJlc3VtZURhdGFMaW5rOiB7IHVybDogc3RyaW5nOyBxdWVyeVBhcmFtczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB9IHwgbnVsbCA9IG51bGxcbiAgY2VydERhdGE6IGFueSA9IG51bGxcbiAgc2hvd1Rha2VBc3Nlc3NtZW50OiBOc0FwcFRvYy5JUG9zdEFzc2Vzc21lbnQgfCBudWxsID0gbnVsbFxuICBjaGVja1JlZ2lzdHJhdGlvblNvdXJjZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICAgJ1NraWxsU29mdCBEaWdpdGFsaXphdGlvbicsXG4gICAgJ1NraWxsU29mdCBMZWFkZXJzaGlwJyxcbiAgICAnUGx1cmFsc2lnaHQnLFxuICBdKVxuICBleHRlcm5hbENvbnRlbnRGZXRjaFN0YXR1czogVEZldGNoU3RhdHVzID0gJ2RvbmUnXG4gIHJlZ2lzdGVyRm9yRXh0ZXJuYWwgPSBmYWxzZVxuICBpc0dvYWxzRW5hYmxlZCA9IGZhbHNlXG4gIGNvbnRleHRJZD86IHN0cmluZ1xuICBjb250ZXh0UGF0aD86IHN0cmluZ1xuICBkZWZhdWx0U0xvZ28gPSAnJ1xuICBkaXNhYmxlRW5yb2xsQnRuID0gZmFsc2VcbiAgaXNBc3Nlc3NWaXNpYmxlID0gZmFsc2VcbiAgaXNQcmFjdGljZVZpc2libGUgPSBmYWxzZVxuICBjZXJ0aWZpY2F0ZU9wZW4gPSBmYWxzZVxuICBicmVhZGNydW1iczogYW55XG4gIGhpc3RvcnlEYXRhOiBhbnlcbiAgY291cnNlQ29tcGxldGVTdGF0ZSA9IDJcbiAgdXNlcklkOiBhbnlcbiAgdXNlclJhdGluZzogYW55XG4gIGRha3NodGFOYW1lID0gdGhpcy5lbnZpcm9ubWVudC5kYWtzaHRhTmFtZVxuICBjc2Ntc1VybCA9IHRoaXMuZW52aXJvbm1lbnQuY3NjbXNVcmxcbiAgc2hvd0J0biA9IGZhbHNlXG4gIGNoYW5uZWxJZDogYW55XG4gIHNlbGVjdGVkQmF0Y2hEYXRhOiBhbnlcbiAgc2VsZWN0ZWRCYXRjaFN1YnNjcmlwdGlvbjogYW55XG4gIHNlcnZlckRhdGVTdWJzY3JpcHRpb246IGFueVxuICBzZXJ2ZXJEYXRlOiBhbnlcbiAga3BhcnJheTogYW55ID0gW11cbiAgZW5yb2xsQnRuTG9hZGluZyA9IGZhbHNlXG4gIGlzQWNicENvdXJzZSA9IGZhbHNlXG4gIGlzQWNicENsYWltID0gZmFsc2VcbiAgY291cnNlSUQ6IGFueVxuICBpc0NsYWltZWQgPSBmYWxzZVxuICBtb250aGx5Q2FwRXhjZWVkID0gZmFsc2VcbiAgaXNDb21wbGV0ZWRUaGlzTW9udGggPSBmYWxzZVxuICBzdGFydERhdGU6IGFueVxuICBlbmREYXRlOiBhbnlcbiAgc3RhcnREYXRlRGlmZmVyZW5jZTogYW55XG4gIGVuZERhdGVEaWZmZXJlbmNlOiBhbnlcbiAgQFZpZXdDaGlsZCgncmlnaHRDb250YWluZXInKSByY0VsZW1lbnQhOiBFbGVtZW50UmVmXG4gIEBWaWV3Q2hpbGQoJ2Jhbm5lckRldGFpbHMnLCB7IHN0YXRpYzogdHJ1ZSB9KSBiYW5uZXJFbGVtITogRWxlbWVudFJlZlxuICBAVmlld0NoaWxkKCdjb250ZW50U291cmNlJykgY29udGVudFNvdXJjZSE6IEVsZW1lbnRSZWZcbiAgc291cmNlRWxsaXBzaXMgPSBmYWxzZVxuICBzY3JvbGxMaW1pdCA9IDBcbiAgcmNFbGVtID0ge1xuICAgIG9mZlNldFRvcDogMCxcbiAgICBCb3R0b21Qb3M6IDAsXG4gIH1cbiAgc2Nyb2xsZWQgPSBmYWxzZVxuICBwYXRoU2V0ID0gbmV3IFNldCgpXG4gIGNhblNoYXJlID0gZmFsc2VcbiAgZW5hYmxlU2hhcmUgPSBmYWxzZVxuICByb290T3JnSWQ6IGFueVxuICBjZXJ0SWQ6IGFueVxuICBtb2JpbGUxMjAwOiBhbnlcbiAgYXNzZXNzbWVudFN0cmlwOiBhbnlcbiAgbGVhcm5BZHZpc29yeURhdGE6IGFueVxuICBjb250ZW50Q3JlYXRvckRhdGE6IGFueSA9IFtdXG4gIC8vIHJhbmRvbWxlYXJuQWR2aXNvcnlPYmo6IGFueVxuICAvLyBsZWFybkFkdmlzb3J5RGF0YUxlbmd0aDogYW55XG5cbiAgcHJpdmF0ZSBkZXN0cm95U3ViamVjdCQgPSBuZXcgU3ViamVjdDxhbnk+KClcbiAgdGltZXJVbnN1YnNjcmliZTogYW55XG4gIHRpbWVyOiBhbnlcbiAgaXNSZWxldmVudEJ0bkhvdmVyZWQgPSBmYWxzZVxuICBTQUtTSEFNQUlfSUNPTl9OT1JNQUwgPSAnL2Fzc2V0cy9pbWFnZXMvc2Frc2hhbUFJL2FpLWljb24uc3ZnJ1xuICBTQUtTSEFNQUlfSUNPTl9MT0FERVIgPSAnL2Fzc2V0cy9pbWFnZXMvc2Frc2hhbUFJL3Nha3NoYW1fYWlfbG9hZGVyLmdpZidcbiAgcmVjb21tZW5kZWRDb3Vyc2VzSWQgPSAnJ1xuICBmZWVkYmFja0dpdmVuOiBhbnlcbiAgcHJlQXNzZXNzbWVudENvbXBsZXRpb25TdGF0dXMgPSBmYWxzZVxuICBmcm9tQUlUdXRvciA9IGZhbHNlXG4gIGxhbmd1YWdlTGlzdDogYW55ID0gW11cbiAgc2VsZWN0ZWRMYW5ndWFnZTogYW55XG4gIGxhbmd1YWdlTWFwUHJvZ3Jlc3M6IGFueVxuICBwcmVBc3Nlc3NtZW50UmVxdWlyZWRGbGFnOiBhbnkgPSBmYWxzZVxuICBsb2NrQ2VydGlmaWNhdGUgPSBmYWxzZVxuICBwcml2YXRlIGxhc3RQcm9ncmVzc1JlZnJlc2hUaW1lOiBudW1iZXIgPSAwXG4gIHByaXZhdGUgaXNSZWZyZXNoaW5nUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlU2Nyb2xsKCkge1xuICAgIGNvbnN0IHdpbmRvd1Njcm9sbCA9IHdpbmRvdy5wYWdlWU9mZnNldFxuICAgIGlmICh3aW5kb3dTY3JvbGwgPj0gdGhpcy5lbGVtZW50UG9zaXRpb24gLSAxMDApIHtcbiAgICAgIHRoaXMuc3RpY2t5ID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0aWNreSA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Nyb2xsTGltaXQpIHtcbiAgICAgIGlmICgod2luZG93LnNjcm9sbFkgKyB0aGlzLnJjRWxlbS5Cb3R0b21Qb3MpID49IHRoaXMuc2Nyb2xsTGltaXQpIHtcbiAgICAgICAgdGhpcy5yY0VsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdzdGlja3knXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5yY0VsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnJjRWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJ1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyMzYuLi4gKE9mZnNldFRvcCBvZiByaWdodCBjb250YWluZXIgKyAxMDQpXG4gICAgaWYgKHdpbmRvdy5zY3JvbGxZID4gKHRoaXMucmNFbGVtLm9mZlNldFRvcCArIDEwNCkpIHtcbiAgICAgIHRoaXMuc2Nyb2xsZWQgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2Nyb2xsZWQgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBjb250ZW50U3ZjOiBXaWRnZXRDb250ZW50U2VydmljZSxcbiAgICBwdWJsaWMgdG9jU3ZjOiBBcHBUb2NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyU3ZjOiBMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU3ZjOiBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgbW9iaWxlQXBwc1N2YzogTW9iaWxlQXBwc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB1dGlsaXR5U3ZjOiBVdGlsaXR5U2VydmljZSxcbiAgICAvLyBwcml2YXRlIHByb2dyZXNzU3ZjOiBDb250ZW50UHJvZ3Jlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGVudExhbmdTdmM6IENvbnRlbnRMYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25TVkM6IEFjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB2aWV3ZXJTdmM6IFZpZXdlclV0aWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmF0aW5nU3ZjOiBSYXRpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGxhbmd0cmFuc2xhdGlvbnM6IE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBldmVudHM6IEV2ZW50U2VydmljZSxcbiAgICAvLyBwcml2YXRlIG1hdFNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwcml2YXRlIGxvYWRDaGVja1NlcnZpY2U6IExvYWRDaGVja1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBoYW5kbGVDbGFpbVNlcnZpY2U6IEhhbmRsZUNsYWltU2VydmljZSxcbiAgICBwcml2YXRlIHJlc2V0UmF0aW5nc1NlcnZpY2U6IFJlc2V0UmF0aW5nc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0aW1lclNlcnZpY2U6IFRpbWVyU2VydmljZSxcbiAgICBwdWJsaWMgZW5yb2xsU3ZjOiBXaWRnZXRFbnJvbGxTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb250ZW50TGliU3ZjOiBXaWRnZXRDb250ZW50TGliU2VydmljZSxcbiAgICBwdWJsaWMgZGF0YVRyYW5zZmVyU3ZjOiBEYXRhVHJhbnNmZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWF0U25hY2tiYXJOZXc6IE1hdFNuYWNrYmFyTmV3LFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2VMaWI6IFdpZGdldFVzZXJTZXJ2aWNlTGliLFxuICAgIHB1YmxpYyBuZXRDb3JlU2VydmljZTogTmV0Q29yZVNlcnZpY2UsXG4gICAgcHVibGljIGFwcFRvY1YyU3ZjOiBBcHBUb2NWMlNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwdWJsaWMgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcbiAgICB0aGlzLmhpc3RvcnlEYXRhID0gaGlzdG9yeS5zdGF0ZVxuICAgIHRoaXMuaGFuZGxlQnJlYWRjcnVtYnMoKVxuICAgIHRoaXMubW9iaWxlQXBwc1N2Yy5tb2JpbGVUb3BIZWFkZXJWaXNpYmlsaXR5U3RhdHVzLm5leHQodHJ1ZSlcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZygnZW4nKVxuICAgICAgY29uc3QgbGFuZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSFcbiAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5nKVxuICAgIH1cblxuICAgIHRoaXMubG9hZENoZWNrU2VydmljZS5jaGlsZENvbXBvbmVudExvYWRlZCQuc3Vic2NyaWJlKF9pc0xvYWRlZCA9PiB7XG4gICAgICAvLyBQcmVzZW50IGluIGFwcC10b2MtYWJvdXQuY29tcG9uZW50XG4gICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhdGluZ3NEaXYnKSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCByYXRpbmdzRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhdGluZ3NEaXYnKSBhcyBhbnlcbiAgICAgICAgICBpZiAocmF0aW5nc0Rpdikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxMaW1pdCA9IHJhdGluZ3NEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tIGFzIGFueVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwKVxuICAgICAgfVxuXG4gICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRlbnRDb250YWluZXInKSkge1xuICAgICAgICBjb25zdCBjb250ZW50RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRlbnRDb250YWluZXInKSBhcyBhbnlcbiAgICAgICAgaWYgKGNvbnRlbnREaXYpIHtcbiAgICAgICAgICB0aGlzLnNjcm9sbExpbWl0ID0gY29udGVudERpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gYXMgYW55XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5oYW5kbGVDbGFpbVNlcnZpY2UuZ2V0Q2xhaW1EYXRhKCkuc3Vic2NyaWJlKChfZXZlbnREYXRhOiBhbnkpID0+IHtcbiAgICAgIHRoaXMub25DbGlja09mQ2xhaW0oX2V2ZW50RGF0YSlcbiAgICB9KVxuICB9XG5cbiAgZ2V0S2FybWFwb2ludHNMaW1pdCgpIHtcbiAgICBpZiAoIXRoaXMuZm9yUHJldmlldykge1xuICAgICAgdGhpcy5jb250ZW50U3ZjLnVzZXJLYXJtYVBvaW50cygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcyAmJiByZXMua3BMaXN0KSB7XG4gICAgICAgICAgY29uc3QgaW5mbyA9IHJlcy5rcExpc3QuYWRkaW5mb1xuICAgICAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRobHlDYXBFeGNlZWQgPSBKU09OLnBhcnNlKGluZm8pLmNsYWltZWROb25BQ0JQQ291cnNlS2FybWFRdW90YSA+PSA0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGlzQ291cnNlQ29tcGxldGVkT25UaGlzTW9udGgoKSB7XG4gICAgY29uc3Qgbm93ID0gbW9tZW50KHRoaXMuc2VydmVyRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJylcbiAgICBpZiAodGhpcy5jb250ZW50KSB7XG4gICAgICBjb25zdCBjb3Vyc2VEYXRhID0gdGhpcy5lbnJvbGxlZENvdXJzZURhdGFcbiAgICAgIGlmIChjb3Vyc2VEYXRhICYmIGNvdXJzZURhdGEuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCAmJiBjb3Vyc2VEYXRhLmNvbXBsZXRlZE9uKSB7XG4gICAgICAgIGNvbnN0IGNvbXBsZXRlZE9uID0gbW9tZW50KGNvdXJzZURhdGEuY29tcGxldGVkT24pLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG4gICAgICAgIGNvbnN0IGNvbXBsZXRlZE1vbnRoID0gbW9tZW50KGNvbXBsZXRlZE9uLCAnWVlZWS1NTS1ERCcpLm1vbnRoKClcbiAgICAgICAgY29uc3QgY3VycmVudE1vbnRoID0gbW9tZW50KG5vdywgJ1lZWVktTU0tREQnKS5tb250aCgpXG4gICAgICAgIHRoaXMuaXNDb21wbGV0ZWRUaGlzTW9udGggPSBjb21wbGV0ZWRNb250aCA9PT0gY3VycmVudE1vbnRoXG4gICAgICAgIHRoaXMuY29udGVudFsndmlld01vcmUnXSA9IGZhbHNlXG4gICAgICAgIHRoaXMuY29udGVudFsnY29tcGxldGVkT24nXSA9IGNvdXJzZURhdGEuY29tcGxldGVkT25cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaWx0ZXJlZEFjYnBMaXN0KHJlczogYW55KSB7XG4gICAgcmV0dXJuIHJlcy5maWx0ZXIoKHY6IGFueSkgPT4gdi5pZGVudGlmaWVyID09PSB0aGlzLmNvdXJzZUlEKVxuICB9XG5cbiAgZmluZEFDUEIoKSB7XG4gICAgY29uc3QgbG9jYWxDYnAgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2JwRGF0YScpXG4gICAgaWYgKGxvY2FsQ2JwKSB7XG4gICAgICBjb25zdCBzdG9yZWFnZUNicCA9IEpTT04ucGFyc2UobG9jYWxDYnApXG4gICAgICBjb25zdCBjYnAgPSB0aGlzLmZpbHRlcmVkQWNicExpc3Qoc3RvcmVhZ2VDYnApXG4gICAgICBpZiAoY2JwLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBhY2JwID0gJ2NiUGxhbidcbiAgICAgICAgdGhpcy5jYlBsYW5FbmREYXRlID0gY2JwWzBdLmVuZERhdGVcbiAgICAgICAgY29uc3Qgc0RhdGUgPSBkYXlqcyh0aGlzLnNlcnZlckRhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG4gICAgICAgIGNvbnN0IGRheXNDb3VudCA9IGRheWpzKHRoaXMuY2JQbGFuRW5kRGF0ZSkuZGlmZih0aGlzLnNlcnZlckRhdGUsICdkYXknKVxuICAgICAgICB0aGlzLmNiUGxhbkR1cmF0aW9uID0gZGF5c0NvdW50IDwgMCA/IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUgOiBkYXlzQ291bnQgPiAyOVxuICAgICAgICAgID8gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuU1VDQ0VTUyA6IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0LlVQQ09NSU5HXG4gICAgICAgIGlmIChhY2JwICYmIHRoaXMuY2JQbGFuRW5kRGF0ZSAmJiBhY2JwID09PSAnY2JQbGFuJykge1xuICAgICAgICAgIHRoaXMuaXNBY2JwQ291cnNlID0gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGVEYXRlID0gZGF5anModGhpcy5jYlBsYW5FbmREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuICAgICAgICAgIGlmIChkYXlqcyhzRGF0ZSkuaXNTYW1lT3JCZWZvcmUoZURhdGUpKSB7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0T2JqID0ge1xuICAgICAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgICAgICAgICAgY29udGV4dFR5cGU6ICdDb3Vyc2UnLFxuICAgICAgICAgICAgICAgICAgY29udGV4dElkOiB0aGlzLmNvdXJzZUlELFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRTdmMuZ2V0Q291cnNlS2FybWFQb2ludHMocmVxdWVzdE9iaikuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzICYmIHJlcy5rcExpc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSByZXMua3BMaXN0XG4gICAgICAgICAgICAgICAgaWYgKHJvdy5hZGRpbmZvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoSlNPTi5wYXJzZShyb3cuYWRkaW5mbykuQUNCUCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQWNicENsYWltID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NsYWltZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQWNicENsYWltID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlzQWNicENsYWltID0gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWNicENsYWltID0gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJhaXNlVGVsZW1ldGVyeUZvclByb3ZpZGVyKHByb3ZpZGVyTmFtZTogc3RyaW5nLCBwcml2aWRlcklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV2ZW50cy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxuICAgICAge1xuICAgICAgICB0eXBlOiAnY2xpY2snLFxuICAgICAgICBpZDogJ2J0bi1wcm92aWRlcicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogcHJvdmlkZXJOYW1lLFxuICAgICAgICB0eXBlOiBwcml2aWRlcklkLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcGFnZUlkRXh0OiAnYnRuLXByb3ZpZGVyJyxcbiAgICAgICAgbW9kdWxlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5bW9kdWxlcy5DT05URU5ULFxuICAgICAgfSlcblxuICB9XG5cbiAgcmFpc2VUZWxlbWV0cnkoKSB7XG4gICAgdGhpcy5ldmVudHMucmFpc2VJbnRlcmFjdFRlbGVtZXRyeShcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2NsaWNrJyxcbiAgICAgICAgc3ViVHlwZTogJ2thcm1hcG9pbnRzLWNsYWltJyxcbiAgICAgICAgaWQ6IHRoaXMuY291cnNlSUQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogdGhpcy5jb3Vyc2VJRCxcbiAgICAgICAgdHlwZTogJ2NvdXJzZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwYWdlSWRFeHQ6ICdidG4tYWNicC1jbGFpbScsXG4gICAgICAgIG1vZHVsZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeW1vZHVsZXMuS0FSTUFQT0lOVFMsXG4gICAgICB9KVxuICB9XG5cbiAgb25DbGlja09mQ2xhaW0oZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICB1c2VySWQ6IHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlci5pZGVudGlmaWVyLFxuICAgICAgY291cnNlSWQ6IHRoaXMuY291cnNlSUQsXG4gICAgfVxuICAgIHRoaXMucmFpc2VUZWxlbWV0cnkoKVxuICAgIHRoaXMuY29udGVudFN2Yy5jbGFpbUthcm1hcG9pbnRzKHJlcXVlc3QpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuaXNDbGFpbWVkID0gdHJ1ZVxuICAgICAgdGhpcy5vcGVuU25hY2tiYXIoJ0thcm1hIHBvaW50cyBhcmUgc3VjY2Vzc2Z1bGx5IGNsYWltZWQuJylcbiAgICAgIC8vIHRoaXMuZ2V0VXNlckVucm9sbG1lbnRMaXN0KClcbiAgICAgIHRoaXMuY2hlY2tJZlVzZXJFbnJvbGxlZCgpXG4gICAgfSwgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgIHRoaXMub3BlblNuYWNrYmFyKCdzb21ldGhpbmcgd2VudCB3cm9uZy4nKVxuICAgIH0pXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMucmNFbGVtZW50KSB7XG4gICAgICB0aGlzLnJjRWxlbS5Cb3R0b21Qb3MgPSB0aGlzLnJjRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCArIHRoaXMucmNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0XG4gICAgICB0aGlzLnJjRWxlbS5vZmZTZXRUb3AgPSB0aGlzLnJjRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcFxuICAgIH1cbiAgICAvLyBHZXQgVGltZSBmb3IgdGhlIGJhdGNoXG4gICAgdGhpcy50aW1lclVuc3Vic2NyaWJlID0gdGhpcy50aW1lclNlcnZpY2UuZ2V0VGltZXJEYXRhKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChfdGltZXI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRpbWVyID0gX3RpbWVyXG4gICAgICB9KVxuICB9XG5cbiAgaGFuZGxlQnJlYWRjcnVtYnMoKSB7XG4gICAgaWYgKHRoaXMuaGlzdG9yeURhdGEpIHtcbiAgICAgIGlmICh0aGlzLmhpc3RvcnlEYXRhLnBhdGggPT09ICdTZWFyY2gnKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaHVybCA9IGAvYXBwL2dsb2JhbHNlYXJjaGBcbiAgICAgICAgY29uc3QgcVBhcmFtID0ge1xuICAgICAgICAgIHE6IHRoaXMuaGlzdG9yeURhdGEucGFyYW0sXG4gICAgICAgIH1cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICB0aGlzLmJyZWFkY3J1bWJzID0geyB1cmw6ICdob21lJywgdGl0bGVzOiBbeyB0aXRsZTogJ1NlYXJjaCcsIHVybDogc2VhcmNodXJsLCBxdWVyeVBhcmFtczogcVBhcmFtIH0sIHsgdGl0bGU6ICdEZXRhaWxzJywgdXJsOiAnbm9uZScgfV0gfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmhpc3RvcnlEYXRhLnBhdGggPT09ICdjb21wZXRlbmN5LWRldGFpbHMnKSB7XG4gICAgICAgIGNvbnN0IGZpbmFsVXJsID0gYC9hcHAvbGVhcm4vYnJvd3NlLWJ5L2NvbXBldGVuY3kvJHt0aGlzLmhpc3RvcnlEYXRhLnBhcmFtfWBcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICAgICAgdGhpcy5icmVhZGNydW1icyA9IHsgdXJsOiAnaG9tZScsIHRpdGxlczogW3sgdGl0bGU6IHRoaXMuaGlzdG9yeURhdGEucGFyYW0sIHVybDogZmluYWxVcmwgfSwgeyB0aXRsZTogJ0RldGFpbHMnLCB1cmw6ICdub25lJyB9XSB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaGlzdG9yeURhdGEucGF0aCA9PT0gJ2FsbC1DQlAnKSB7XG4gICAgICAgIGNvbnN0IGZpbmFsVVJMID0gYC9hcHAvbGVhcm4vYnJvd3NlLWJ5L3Byb3ZpZGVyLyR7dGhpcy5oaXN0b3J5RGF0YS5wYXJhbX1gXG4gICAgICAgIHRoaXMuYnJlYWRjcnVtYnMgPSB7IHVybDogJ2hvbWUnLCB0aXRsZXM6IFt7IHRpdGxlOiBgYWxsIENCUCdzYCwgdXJsOiBmaW5hbFVSTCB9LCB7IHRpdGxlOiAnRGV0YWlscycsIHVybDogJ25vbmUnIH1dIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5oaXN0b3J5RGF0YS5wYXRoID09PSAnYWxsLWNvbXBldGVuY2llcycpIHtcbiAgICAgICAgY29uc3QgZmluYWxVcmwgPSBgL2FwcC9sZWFybi9icm93c2UtYnkvY29tcGV0ZW5jeS9hbGwtY29tcGV0ZW5jaWVzYFxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgICB0aGlzLmJyZWFkY3J1bWJzID0geyB1cmw6ICdob21lJywgdGl0bGVzOiBbeyB0aXRsZTogJ2FsbCBjb21wZXRlbmNpZXMnLCB1cmw6IGZpbmFsVXJsIH0sIHsgdGl0bGU6ICdEZXRhaWxzJywgdXJsOiAnbm9uZScgfV0gfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmhpc3RvcnlEYXRhLnBhdGggPT09ICdjdXJhdGVkQ29sbGVjdGlvbnMnKSB7XG4gICAgICAgIGNvbnN0IGZpbmFsVXJsID0gYC9hcHAvY3VyYXRlZENvbGxlY3Rpb25zL2hvbWVgXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIHRoaXMuYnJlYWRjcnVtYnMgPSB7IHVybDogJ2hvbWUnLCB0aXRsZXM6IFt7IHRpdGxlOiAnY3VyYXRlZCBjb2xsZWN0aW9ucycsIHVybDogZmluYWxVcmwgfSwgeyB0aXRsZTogJ0RldGFpbHMnLCB1cmw6ICdub25lJyB9XSB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIHRoaXMuYnJlYWRjcnVtYnMgPSB7IHVybDogJ2hvbWUnLCB0aXRsZXM6IFt7IHRpdGxlOiAnTGVhcm4nLCB1cmw6ICcvcGFnZS9sZWFybicsIGljb246ICdzY2hvb2wnIH0sIHsgdGl0bGU6ICdEZXRhaWxzJywgdXJsOiAnbm9uZScgfV0gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZnJhZ21lbnQpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgZG9jdW1lbnQhLnF1ZXJ5U2VsZWN0b3IoYCMke3RoaXMuZnJhZ21lbnR9YCkhLnNjcm9sbFRvKHtcbiAgICAgICAgICB0b3A6IDgwLFxuICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7IH1cbiAgfVxuXG4gIGdldCBlbmFibGVBbmFseXRpY3MoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjLnJlc3RyaWN0ZWRGZWF0dXJlcykge1xuICAgICAgcmV0dXJuICF0aGlzLmNvbmZpZ1N2Yy5yZXN0cmljdGVkRmVhdHVyZXMuaGFzKCd0b2NBbmFseXRpY3MnKVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGdldCBpc1Jlc291cmNlKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGNvbnN0IGlzUmVzb3VyY2UgPSB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5LTk9XTEVER0VfQVJUSUZBQ1QgfHxcbiAgICAgICAgdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUkVTT1VSQ0VcbiAgICAgICAgfHwgdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUFJBQ1RJQ0VfUkVTT1VSQ0VcbiAgICAgICAgfHwgdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuRklOQUxfQVNTRVNTTUVOVFxuICAgICAgICB8fCB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT01QX0FTU0VTU01FTlRcbiAgICAgICAgfHwgdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuT0ZGTElORV9TRVNTSU9OXG4gICAgICAgIHx8ICEodGhpcy5jb250ZW50LmNoaWxkcmVuICYmIHRoaXMuY29udGVudC5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICBpZiAoaXNSZXNvdXJjZSkge1xuICAgICAgICB0aGlzLm1vYmlsZUFwcHNTdmMuc2VuZFZpZXdlckRhdGEodGhpcy5jb250ZW50KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzUmVzb3VyY2VcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBnZXQgZ2V0U3RhcnREYXRlKCkge1xuICAgIGlmICh0aGlzLmVucm9sbGVkQ291cnNlRGF0YSkge1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIC8vIGNvbnN0IGJhdGNoID0gXy5maXJzdChfLmZpbHRlcih0aGlzLmNvbnRlbnRbJ2JhdGNoZXMnXSwgeyBiYXRjaElkOiB0aGlzLmN1cnJlbnRDb3Vyc2VCYXRjaElkIH0pIHx8IFtdKVxuICAgICAgY29uc3QgYmF0Y2ggPSB0aGlzLmVucm9sbGVkQ291cnNlRGF0YS5iYXRjaFxuICAgICAgdGhpcy5jdXJyZW50Q291cnNlQmF0Y2hJZCA9IGJhdGNoLmJhdGNoSWRcbiAgICAgIGlmIChiYXRjaCAmJiB0aGlzLmN1cnJlbnRDb3Vyc2VCYXRjaElkKSB7XG4gICAgICAgIHRoaXMuc3RhcnREYXRlID0gKF8uZ2V0KGJhdGNoLCAnc3RhcnREYXRlJykpXG4gICAgICAgIC8vIGNvbnN0IHBhcnNlZERhdGUgPSBtb21lbnQodGhpcy5zdGFydERhdGUpO1xuICAgICAgICAvLyBjb25zdCBkYXRlT25seSA9IHBhcnNlZERhdGUuY2xvbmUoKS5zdGFydE9mKCdkYXknKTtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlVGltZSA9IHRoaXMuc3RhcnREYXRlICYmIG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlKS5nZXRUaW1lKClcbiAgICAgICAgdGhpcy5zdGFydERhdGVEaWZmZXJlbmNlID0gc3RhcnREYXRlVGltZSAtIG5vd1xuICAgICAgICBpZiAodGhpcy5zdGFydERhdGVEaWZmZXJlbmNlICYmIHRoaXMuc3RhcnREYXRlRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgICAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcih0aGlzLnN0YXJ0RGF0ZURpZmZlcmVuY2UgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpXG4gICAgICAgICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKCh0aGlzLnN0YXJ0RGF0ZURpZmZlcmVuY2UgJSAoMTAwMCAqIDYwICogNjAgKiAyNCkpIC8gKDEwMDAgKiA2MCAqIDYwKSlcbiAgICAgICAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigodGhpcy5zdGFydERhdGVEaWZmZXJlbmNlICUgKDEwMDAgKiA2MCAqIDYwKSkgLyAoMTAwMCAqIDYwKSlcbiAgICAgICAgICByZXR1cm4gKGAke2RheXN9IERheXMgOiAke2hvdXJzfSBIb3VycyA6ICR7bWludXRlc30gTWludXRlc2ApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdOQSdcbiAgICAgIH1cbiAgICAgIHJldHVybiAnTkEnXG4gICAgICAvLyBpZiAoXy5nZXQoYmF0Y2gsICdzdGFydERhdGUnKSAmJiBtb21lbnQoXy5nZXQoYmF0Y2gsICdzdGFydERhdGUnKSkuaXNBZnRlcigpKSB7XG4gICAgICAvLyAgIHJldHVybiBtb21lbnQoXy5nZXQoYmF0Y2gsICdzdGFydERhdGUnKSkuZnJvbShub3cpXG4gICAgICAvLyB9XG4gICAgICAvLyBpZiAoXy5nZXQoYmF0Y2gsICdlbmREYXRlJykgJiYgbW9tZW50KF8uZ2V0KGJhdGNoLCAnZW5kRGF0ZScpKS5pc0JlZm9yZSgpKSB7XG4gICAgICAvLyAgIHJldHVybiAnTkEnXG4gICAgICAvLyB9XG4gICAgICAvLyBpZiAoc3RhcnREYXRlVGltZSAmJiBtb21lbnQoc3RhcnREYXRlVGltZSkuaXNBZnRlcigpKSAge1xuICAgICAgLy8gICByZXR1cm4gbW9tZW50KHN0YXJ0RGF0ZVRpbWUpLmZyb20obm93KVxuICAgICAgLy8gfVxuICAgICAgLy8gaWYgKGVuZERhdGVUaW1lICYmIG1vbWVudChlbmREYXRlVGltZSkuaXNCZWZvcmUoKSkge1xuICAgICAgLy8gICAgIHJldHVybiAnTkEnXG4gICAgICAvLyAgIH1cbiAgICAgIC8vIHJldHVybiAnTkEnXG4gICAgfSByZXR1cm4gJ05BJ1xuICB9XG5cbiAgZ2V0IGlzQmF0Y2hJblByb2dyZXNzKCkge1xuICAgIC8vIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50WydiYXRjaGVzJ10pIHtcbiAgICAvLyBjb25zdCBiYXRjaGVzID0gdGhpcy5jb250ZW50WydiYXRjaGVzJ10gYXMgTnNDb250ZW50LklCYXRjaFxuICAgIC8vIGlmICh0aGlzLmN1cnJlbnRDb3Vyc2VCYXRjaElkKSB7XG4gICAgLy8gICAvLyBjb25zdCBub3cgPSBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKVxuICAgIC8vICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAvLyAgIGlmICh0aGlzLmJhdGNoRGF0YSAmJiB0aGlzLmJhdGNoRGF0YS5jb250ZW50KSB7XG4gICAgLy8gICAgIGNvbnN0IGJhdGNoID0gXy5maXJzdChfLmZpbHRlcih0aGlzLmJhdGNoRGF0YS5jb250ZW50LCB7IGJhdGNoSWQ6IHRoaXMuY3VycmVudENvdXJzZUJhdGNoSWQgfSkgfHwgW10pXG4gICAgLy8gICAgIGlmIChiYXRjaCkge1xuICAgIC8vICAgICAgIC8vIGNvbnN0IHN0YXJ0RGF0ZSA9IG1vbWVudChiYXRjaC5zdGFydERhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpXG4gICAgLy8gICAgICAgLy8gY29uc3QgZW5kRGF0ZSA9IGJhdGNoLmVuZERhdGUgPyBtb21lbnQoYmF0Y2guZW5kRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJykgOiBub3dcbiAgICAvLyAgICAgICAvLyByZXR1cm4gKFxuICAgIC8vICAgICAgIC8vICAgLy8gYmF0Y2guc3RhdHVzICYmXG4gICAgLy8gICAgICAgLy8gICBtb21lbnQoc3RhcnREYXRlKS5pc1NhbWVPckJlZm9yZShub3cpXG4gICAgLy8gICAgICAgLy8gICAmJiBtb21lbnQoZW5kRGF0ZSkuaXNTYW1lT3JBZnRlcihub3cpXG4gICAgLy8gICAgICAgLy8gKVxuICAgIC8vICAgICAgIHRoaXMuc3RhcnREYXRlID0gYmF0Y2ggJiYgKF8uZ2V0KGJhdGNoLCAnc3RhcnRUaW1lJykpXG4gICAgLy8gICAgICAgdGhpcy5lbmREYXRlID0gYmF0Y2ggJiYgKF8uZ2V0KGJhdGNoLCAnZW5kVGltZScpKVxuICAgIC8vICAgICAgIGNvbnN0IGVuZERhdGVUaW1lID0gbmV3IERhdGUodGhpcy5lbmREYXRlKS5nZXRUaW1lKClcbiAgICAvLyAgICAgICB0aGlzLmVuZERhdGVEaWZmZXJlbmNlID0gZW5kRGF0ZVRpbWUgLSBub3dcbiAgICAvLyAgICAgICBpZih0aGlzLmVuZERhdGVEaWZmZXJlbmNlID4gMCkge1xuICAgIC8vICAgICAgIHJldHVybiAgYmF0Y2guc3RhdHVzXG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHJldHVybiBmYWxzZVxuICAgIC8vICAgfVxuICAgIC8vICAgcmV0dXJuIGZhbHNlXG4gICAgLy8gfSByZXR1cm4gZmFsc2VcblxuICAgIGlmICh0aGlzLmVucm9sbGVkQ291cnNlRGF0YSkge1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIGNvbnN0IGJhdGNoID0gdGhpcy5lbnJvbGxlZENvdXJzZURhdGEuYmF0Y2hcbiAgICAgIHRoaXMuY3VycmVudENvdXJzZUJhdGNoSWQgPSBiYXRjaC5iYXRjaElkXG4gICAgICBpZiAoYmF0Y2ggJiYgdGhpcy5jdXJyZW50Q291cnNlQmF0Y2hJZCkge1xuICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IChfLmdldChiYXRjaCwgJ3N0YXJ0RGF0ZScpKVxuICAgICAgICB0aGlzLmVuZERhdGUgPSAoXy5nZXQoYmF0Y2gsICdlbmREYXRlJykpXG4gICAgICAgIGlmICh0aGlzLmVuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBzdGFydERhdGVUaW1lID0gdGhpcy5zdGFydERhdGUgJiYgbmV3IERhdGUodGhpcy5zdGFydERhdGUpLmdldFRpbWUoKVxuICAgICAgICAgIGxldCBlbmREYXRlID0gdGhpcy5lbmREYXRlICYmIG5ldyBEYXRlKHRoaXMuZW5kRGF0ZSlcbiAgICAgICAgICBlbmREYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSlcbiAgICAgICAgICBjb25zdCBlbmREYXRlVGltZSA9IGVuZERhdGUuZ2V0VGltZSgpXG4gICAgICAgICAgdGhpcy5zdGFydERhdGVEaWZmZXJlbmNlID0gbm93IC0gc3RhcnREYXRlVGltZVxuICAgICAgICAgIHRoaXMuZW5kRGF0ZURpZmZlcmVuY2UgPSBlbmREYXRlVGltZSAtIG5vd1xuICAgICAgICAgIGlmICh0aGlzLmVuZERhdGVEaWZmZXJlbmNlID4gMCAmJiB0aGlzLnN0YXJ0RGF0ZURpZmZlcmVuY2UgPiAwICYmIGJhdGNoLnN0YXR1cyAhPT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG5cblxuICBnZXRVc2VyUmF0aW5nKGZpcmVVcGRhdGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuZm9yUHJldmlldykge1xuICAgICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICAgIHRoaXMudXNlcklkID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUudXNlcklkIHx8ICcnXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5pZGVudGlmaWVyICYmIHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkpIHtcbiAgICAgICAgdGhpcy5yYXRpbmdTdmMuZ2V0UmF0aW5nKHRoaXMuY29udGVudC5pZGVudGlmaWVyLCB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5LCB0aGlzLnVzZXJJZCkuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXM6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICBpZiAocmVzICYmIHJlcy5yZXN1bHQgJiYgcmVzLnJlc3VsdC5yZXNwb25zZSkge1xuICAgICAgICAgICAgICB0aGlzLnVzZXJSYXRpbmcgPSByZXMucmVzdWx0LnJlc3BvbnNlXG4gICAgICAgICAgICAgIGlmIChmaXJlVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2NTdmMuY2hhbmdlVXBkYXRlUmV2aWV3cyh0cnVlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRWaWV3RXZlbnRGb3JOZXRDb3JlKCd2aWV3JylcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ1VTRVIgUkFUSU5HIEZFVENIIEVSUk9SID4nLCBlcnIpXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jb250ZW50U291cmNlICYmIHRoaXMuY29udGVudFNvdXJjZS5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA+IDQ0KSB7XG4gICAgICAgIHRoaXMuc291cmNlRWxsaXBzaXMgPSB0cnVlXG4gICAgICB9XG4gICAgfSwgMjUwKVxuICB9XG5cblxuXG4gIHB1YmxpYyBmZXRjaFVzZXJXRkZvckJsZW5kZWQoKSB7XG4gICAgY29uc3QgYXBwbGljYXRpb25JZHMgPSAodGhpcy5iYXRjaERhdGEgJiYgdGhpcy5iYXRjaERhdGEuY29udGVudCAmJiB0aGlzLmJhdGNoRGF0YS5jb250ZW50Lm1hcChlID0+IGUuYmF0Y2hJZCkpIHx8IFtdXG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgYXBwbGljYXRpb25JZHMsXG4gICAgICBzZXJ2aWNlTmFtZTogJ2JsZW5kZWRwcm9ncmFtJyxcbiAgICAgIGxpbWl0OiAxMDAsXG4gICAgICBvZmZzZXQ6IDAsXG4gICAgfVxuXG4gICAgdGhpcy5jb250ZW50U3ZjLmZldGNoQmxlbmRlZFVzZXJXRihyZXEpLnRoZW4oXG4gICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEucmVzdWx0ICYmIGRhdGEucmVzdWx0LmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgbGF0ZXN0V0YgPSBfLm1heEJ5KGRhdGEucmVzdWx0LmRhdGFbMF0ud2ZJbmZvLCAoZWw6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGVsLmxhc3RVcGRhdGVkT24pLmdldFRpbWUoKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gbGF0ZXN0V0YuY3VycmVudFN0YXR1cyA9IHRoaXMuV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5SRUpFQ1RFRFxuICAgICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSAqL1xuICAgICAgICAgIHRoaXMuYmF0Y2hEYXRhIS53b3JrRmxvdyA9IHtcbiAgICAgICAgICAgIHdmSW5pdGlhdGVkOiB0cnVlLFxuICAgICAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXG4gICAgICAgICAgICBiYXRjaDogdGhpcy5iYXRjaERhdGEgJiYgdGhpcy5iYXRjaERhdGEuY29udGVudCAmJiB0aGlzLmJhdGNoRGF0YS5jb250ZW50LmZpbmQoKGU6IGFueSkgPT4gZS5iYXRjaElkID09PSBsYXRlc3RXRi5hcHBsaWNhdGlvbklkKSxcbiAgICAgICAgICAgIHdmSXRlbTogbGF0ZXN0V0YsXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudG9jU3ZjLnNldFdGRGF0YSh0aGlzLmJhdGNoRGF0YSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLmluZm8oJ2ZldGNoQmxlbmRlZFVzZXJXRiBkYXRhID09ICcsIGRhdGEpXG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ0NPTlRFTlQgSElTVE9SWSBGRVRDSCBFUlJPUiA+JywgZXJyb3IpXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0lmQmF0Y2hFeGlzdHMobGF0ZXN0OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuYmF0Y2hEYXRhIHx8ICF0aGlzLmJhdGNoRGF0YS5jb250ZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYmF0Y2hEYXRhLmNvbnRlbnQuZmluZChiID0+IGIuYmF0Y2hJZCA9PT0gbGF0ZXN0LmJhdGNoSWQpXG4gIH1cblxuICBwdWJsaWMgZ2V0QmF0Y2hJZCgpOiBzdHJpbmcge1xuICAgIGxldCBiYXRjaElkID0gJydcbiAgICBpZiAodGhpcy5iYXRjaERhdGEgJiYgdGhpcy5iYXRjaERhdGEuY29udGVudCkge1xuICAgICAgZm9yIChjb25zdCBiYXRjaCBvZiB0aGlzLmJhdGNoRGF0YS5jb250ZW50KSB7XG4gICAgICAgIGJhdGNoSWQgPSBiYXRjaC5iYXRjaElkXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiYXRjaElkXG4gIH1cblxuXG4gIHB1YmxpYyBoYW5kbGVBdXRvQmF0Y2hBc3NpZ24oKSB7XG4gICAgaWYgKHRoaXMuZm9yUHJldmlldykge1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRvUGxheWVyUGFnZSgnJylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbnJvbGxCdG5Mb2FkaW5nID0gdHJ1ZVxuICAgICAgdGhpcy5jaGFuZ2VUYWIgPSAhdGhpcy5jaGFuZ2VUYWJcbiAgICAgIHRoaXMucmFpc2VFbnJvbGxUZWxlbWV0cnkoKVxuICAgICAgaWYgKHRoaXMucmVjb21tZW5kZWRDb3Vyc2VzSWQpIHtcbiAgICAgICAgdGhpcy5yYWlzZUVucm9sbFRlbGVtZW50cnlGb3JTYWtzaGFtQUlHZW5lcmF0ZWQoKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmVjb21tZW5kZWRDb3Vyc2VzSWQpIHtcbiAgICAgICAgdGhpcy5yYWlzZUVucm9sbFRlbGVtZW50cnlGb3JTYWtzaGFtQUlHZW5lcmF0ZWQoKVxuICAgICAgfVxuICAgICAgY29uc3QgYmF0Y2hEYXRhID0gdGhpcy5jb250ZW50UmVhZERhdGEgJiYgdGhpcy5jb250ZW50UmVhZERhdGEuYmF0Y2hlcyAmJiB0aGlzLmNvbnRlbnRSZWFkRGF0YS5iYXRjaGVzWzBdXG4gICAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkNVUkFURURfUFJPR1JBTSkge1xuICAgICAgICB0aGlzLmF1dG9FbnJvbGxDdXJhdGVkUHJvZ3JhbShOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LkNVUkFURURfUFJPR1JBTSwgYmF0Y2hEYXRhKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmNvdXJzZUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5Lk1PREVSQVRFRF9QUk9HUkFNKSB7XG4gICAgICAgIGxldCBtb2RlcmF0ZWRCYXRjaERhdGE6IGFueVxuICAgICAgICBpZiAodGhpcy5iYXRjaERhdGEgJiYgdGhpcy5iYXRjaERhdGEuY29udGVudCAmJiB0aGlzLmJhdGNoRGF0YS5jb250ZW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBtb2RlcmF0ZWRCYXRjaERhdGEgPSB0aGlzLnNlbGVjdGVkQmF0Y2hEYXRhICYmIHRoaXMuc2VsZWN0ZWRCYXRjaERhdGEuY29udGVudCAmJiB0aGlzLnNlbGVjdGVkQmF0Y2hEYXRhLmNvbnRlbnRbMF1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtb2RlcmF0ZWRCYXRjaERhdGEgPSB0aGlzLmJhdGNoRGF0YSAmJiB0aGlzLmJhdGNoRGF0YS5jb250ZW50ICYmIHRoaXMuYmF0Y2hEYXRhLmNvbnRlbnRbMF1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF1dG9FbnJvbGxDdXJhdGVkUHJvZ3JhbShOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5Lk1PREVSQVRFRF9QUk9HUkFNLCBtb2RlcmF0ZWRCYXRjaERhdGEpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29udGVudC5jb3Vyc2VDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5MRUFSTklOR19QQVRIV0FZKSB7XG4gICAgICAgIHRoaXMuYXV0b0Vucm9sbExlYXJuaW5nUGF0aHdheShiYXRjaERhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmF1dG9Bc3NpZ25FbnJvbGwoKVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNvbnRlbnRWaWV3RXZlbnRGb3JOZXRDb3JlKCdlbnJvbGwnKVxuICB9XG5cbiAgcHVibGljIGF1dG9FbnJvbGxMZWFybmluZ1BhdGh3YXkoYmF0Y2hEYXRhOiBhbnkpIHtcbiAgICBsZXQgYmF0Y2hJZCA9IGJhdGNoRGF0YT8uYmF0Y2hJZFxuICAgIGlmIChiYXRjaElkKSB7XG4gICAgICB0aGlzLmNvbnRlbnRTdmMuYXV0b0Vucm9sbExQKHRoaXMuY29udGVudD8uaWRlbnRpZmllcikuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvUGxheWVyUGFnZShiYXRjaElkKVxuICAgICAgICAgIHRoaXMuZW5yb2xsQnRuTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sIChlcnI6YW55KSA9PiB7XG4gICAgICAgIGxldCBlcnJNc2cgPSBlcnI/LmVycm9yPy5wYXJhbXM/LmVycm1zZyB8fCBlcnI/LnBhcmFtcz8uZXJybXNnIHx8ICdTb21ldGhpbmcgd2VudCB3cm9uZydcbiAgICAgICAgaWYoZXJyTXNnPy5pbmNsdWRlcygnY291cnNlLicpICYmIHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkpIHtcbiAgICAgICAgICBlcnJNc2cgPSBlcnJNc2cucmVwbGFjZSgnY291cnNlLicsIHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkpICsgJy4nO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJNc2cpXG4gICAgICAgIHRoaXMuZW5yb2xsQnRuTG9hZGluZyA9IGZhbHNlXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ05vIGJhdGNoZXMgZm91bmQnKVxuICAgICAgdGhpcy5lbnJvbGxCdG5Mb2FkaW5nID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXV0b0Vucm9sbEN1cmF0ZWRQcm9ncmFtKHByb2dyYW1UeXBlOiBhbnksIGJhdGNoRGF0YTogYW55KSB7XG4gICAgaWYgKCFiYXRjaERhdGEpIHtcbiAgICAgIHRoaXMuZW5yb2xsQnRuTG9hZGluZyA9IGZhbHNlXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ05vIGJhY3RoZXMgZm91bmQnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmlkZW50aWZpZXIpIHtcbiAgICAgIGxldCB1c2VySWQgPSAnJ1xuICAgICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlICYmIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZCkge1xuICAgICAgICB1c2VySWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWRcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICBwcm9ncmFtSWQ6IHRoaXMuY29udGVudC5pZGVudGlmaWVyLFxuICAgICAgICAgIC8vIGFzIG9mIG5vdyBjdXJhdGVkIHByb2dyYW0gb25seSBvbmUgYmF0Y2ggaXMgY29taW5nIG5lZWQgdG8gY2hlY2sgYW5kIG1vZGlmeVxuICAgICAgICAgIGJhdGNoSWQ6IGJhdGNoRGF0YT8uYmF0Y2hJZCxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGVudFN2Yy5hdXRvQXNzaWduQ3VyYXRlZEJhdGNoQXBpKHJlcSwgcHJvZ3JhbVR5cGUpLnN1YnNjcmliZShcbiAgICAgICAgKGRhdGE6IE5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgaWYgKHByb2dyYW1UeXBlID09PSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5Lk1PREVSQVRFRF9QUk9HUkFNICYmIGJhdGNoRGF0YS5lbmREYXRlKSB7XG4gICAgICAgICAgICAgIHRoaXMuYmF0Y2hEYXRhID0ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFtiYXRjaERhdGFdLFxuICAgICAgICAgICAgICAgIGVucm9sbGVkOiB0cnVlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucm91dGVyQ2hhbmdlSGFuZGxlcih0cnVlKVxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmdldFVzZXJFbnJvbGxtZW50TGlzdCgpXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVXNlckVucm9sbGVkKClcbiAgICAgICAgICAgICAgfSwgMjAwMClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb1BsYXllclBhZ2UocmVxLnJlcXVlc3QuYmF0Y2hJZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChfZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdfZXJyb3InLCBfZXJyb3IpXG4gICAgICAgICAgLy8gaWYoX2Vycm9yICYmIF9lcnJvci5lcnJvciAmJiBfZXJyb3IuZXJyb3IucGFyYW1zICYmIF9lcnJvci5lcnJvci5wYXJhbXMuZXJyICYmIF9lcnJvci5lcnJvci5wYXJhbXMuZXJyLmVycm1zZykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihfLmdldChfZXJyb3IsICdlcnJvci5wYXJhbXMuZXJybXNnJykgfHwgJ1BsZWFzZSB0cnkgYWdhaW4gbGF0ZXInKVxuICAgICAgICAgIC8vIH1cbiAgICAgICAgICB0aGlzLmVucm9sbEJ0bkxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGF1dG9Bc3NpZ25FbnJvbGwoKSB7XG4vKioqKioqKioqKioqKiAg4pyoIFdpbmRzdXJmIENvbW1hbmQg4q2QICAqKioqKioqKioqKioqL1xuICAvKipcbiAgICogSWYgdGhlIHVzZXIgaXMgbm90IGVucm9sbGVkIGluIHRoZSBjb3Vyc2UsIGF1dG8tYXNzaWducyBhIGJhdGNoIGFuZCBuYXZpZ2F0ZXMgdG8gdGhlIHBsYXllciBwYWdlLlxuICAgKiBJZiB0aGUgdXNlciBpcyBhbHJlYWR5IGVucm9sbGVkLCBkb2VzIG5vdGhpbmcuXG4gICAqL1xuLyoqKioqKiogIDZkOTRjNjQ2LTI1NGMtNDRkNi1hN2MzLTkwYmRiOTUwNzMxOCAgKioqKioqKi8gICAgaWYgKHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuaWRlbnRpZmllcikge1xuICAgICAgdGhpcy5jb250ZW50U3ZjLmF1dG9Bc3NpZ25CYXRjaEFwaSh0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuaWRlbnRpZmllciwgdGhpcy5zZWxlY3RlZExhbmd1YWdlKS5zdWJzY3JpYmUoXG4gICAgICAgIChkYXRhOiBOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5iYXRjaERhdGEgPSB7XG4gICAgICAgICAgICBjb250ZW50OiBkYXRhLmNvbnRlbnQsXG4gICAgICAgICAgICBlbnJvbGxlZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYmF0Y2hJZCA9IHRoaXMuZ2V0QmF0Y2hJZCgpXG4gICAgICAgICAgaWYgKGJhdGNoSWQpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb1BsYXllclBhZ2UoYmF0Y2hJZClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5lbnJvbGxCdG5Mb2FkaW5nID0gZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgKF9lcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKF8uZ2V0KF9lcnJvciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCAnUGxlYXNlIHRyeSBhZ2FpbiBsYXRlcicpXG4gICAgICAgICAgdGhpcy5lbnJvbGxCdG5Mb2FkaW5nID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlVG9QbGF5ZXJQYWdlKGJhdGNoSWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmNvbnRlbnQpIHtcbiAgICAgIHRoaXMuZW5yb2xsQnRuTG9hZGluZyA9IHRydWVcbiAgICAgIGxldCBmaXJzdFBsYXlhYmxlQ29udGVudFxuICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQuaWRlbnRpZmllciA9PT0gdGhpcy5zZWxlY3RlZExhbmd1YWdlLmlkZW50aWZpZXIpIHtcbiAgICAgICAgZmlyc3RQbGF5YWJsZUNvbnRlbnQgPSB0aGlzLmNvbnRlbnRTdmMuZ2V0Rmlyc3RDaGlsZEluSGllcmFyY2h5KHRoaXMuY29udGVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZldGNoIGhpZXJhcmNoeSBmb3IgdGhlIHNlbGVjdGVkIGxhbmd1YWdlIGluIHBvcHVwIGZpcnN0LCB0aGVuIGdldCBmaXJzdCBwbGF5YWJsZSBjb250ZW50IGFuZCByZWRpcmVjdCB0byBpdFxuICAgICAgICBhd2FpdCB0aGlzLmZldGNoQ29udGVudEhpZXJhcmNoeSh0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UuaWRlbnRpZmllcilcbiAgICAgICAgZmlyc3RQbGF5YWJsZUNvbnRlbnQgPSB0aGlzLmNvbnRlbnRTdmMuZ2V0Rmlyc3RDaGlsZEluSGllcmFyY2h5KHRoaXMuY29udGVudClcbiAgICAgIH1cbiAgICAgIGxldCBwcmltYXJ5Q2F0ZWdvcnlcbiAgICAgIGlmICh0aGlzLmNvbnRlbnQuc2VjdXJlU2V0dGluZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcmltYXJ5Q2F0ZWdvcnkgPSAnTGVhcm5pbmcgUmVzb3VyY2UnXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmltYXJ5Q2F0ZWdvcnkgPSBmaXJzdFBsYXlhYmxlQ29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgfHwgdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeVxuICAgICAgfVxuICAgICAgdGhpcy5maXJzdFJlc291cmNlTGluayA9IHRoaXMuZ2V0UmVzdW1lVXJsKGZpcnN0UGxheWFibGVDb250ZW50LCBiYXRjaElkLCBwcmltYXJ5Q2F0ZWdvcnkpXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5maXJzdFJlc291cmNlTGluay51cmx9YF0sIHsgcXVlcnlQYXJhbXM6IHsgLi4udGhpcy5maXJzdFJlc291cmNlTGluay5xdWVyeVBhcmFtcywgZnJvbUFJVHV0b3I6IHRoaXMuZnJvbUFJVHV0b3IgfSB9KVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmZXRjaEJhdGNoRGV0YWlscygpIHtcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5pZGVudGlmaWVyKSB7XG4gICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICBjb3Vyc2VJZDogdGhpcy5jb250ZW50LmlkZW50aWZpZXIsXG4gICAgICAgICAgICBzdGF0dXM6IFsnMCcsICcxJywgJzInXSxcbiAgICAgICAgICAgIC8vIGNyZWF0ZWRCeTogJ2ZjYTI5MjVmLTFlZWUtNDY1NC05MTc3LWZlY2UzZmQ2YWZjOScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzb3J0X2J5OiB7IGNyZWF0ZWREYXRlOiAnZGVzYycgfSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGVudFN2Yy5mZXRjaENvdXJzZUJhdGNoZXMocmVxKS5zdWJzY3JpYmUoXG4gICAgICAgIChkYXRhOiBOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5iYXRjaERhdGEgPSBkYXRhXG4gICAgICAgICAgdGhpcy5iYXRjaERhdGEuZW5yb2xsZWQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMudG9jU3ZjLnNldEJhdGNoRGF0YSh0aGlzLmJhdGNoRGF0YSlcbiAgICAgICAgICB0aGlzLnJvdXRlckNoYW5nZUhhbmRsZXIoZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ0NPTlRFTlQgSElTVE9SWSBGRVRDSCBFUlJPUiA+JywgZXJyb3IpXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfVxuICB9XG5cblxuICBzY3JvbGxUb1RvcCgpIHtcbiAgICAoZnVuY3Rpb24gc21vb3Roc2Nyb2xsKCkge1xuICAgICAgY29uc3QgY3VycmVudFNjcm9sbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3BcbiAgICAgIGlmIChjdXJyZW50U2Nyb2xsID4gMCkge1xuICAgICAgICAvLyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNtb290aHNjcm9sbClcbiAgICAgICAgLy8gd2luZG93LnNjcm9sbFRvKDAsIGN1cnJlbnRTY3JvbGwgLSAoY3VycmVudFNjcm9sbCAvIDUpKVxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xuICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSkoKVxuICB9XG5cbiAgcHVibGljIGdldENvbXBldGVuY2llcyhjb21wZXRlbmNpZXM6IGFueSkge1xuICAgIGNvbnN0IGNvbXBldGVuY2llc0FycmF5ID0gSlNPTi5wYXJzZShjb21wZXRlbmNpZXMpXG4gICAgY29uc3QgY29tcGV0ZW5jeVN0cmluZ0FycmF5OiBhbnlbXSA9IFtdXG4gICAgY29tcGV0ZW5jaWVzQXJyYXkubWFwKChjOiBhbnkpID0+IHtcbiAgICAgIGNvbXBldGVuY3lTdHJpbmdBcnJheS5wdXNoKGMubmFtZSlcbiAgICB9KVxuICAgIHJldHVybiBjb21wZXRlbmN5U3RyaW5nQXJyYXlcbiAgfVxuXG4gIGdldCBzaG93SW50cmFuZXRNc2coKSB7XG4gICAgaWYgKHRoaXMuaXNNb2JpbGUpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNob3dJbnRyYW5ldE1lc3NhZ2VcbiAgfVxuXG4gIGdldCBzaG93U3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9jU3ZjLnNob3dTdGFydEJ1dHRvbih0aGlzLmNvbnRlbnQpXG4gIH1cblxuICBnZXQgaXNQb3N0QXNzZXNzbWVudCgpOiBib29sZWFuIHtcbiAgICBpZiAoISh0aGlzLnRvY0NvbmZpZyAmJiB0aGlzLnRvY0NvbmZpZy5wb3N0QXNzZXNzbWVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBpZiAodGhpcy5jb250ZW50KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UgJiZcbiAgICAgICAgdGhpcy5jb250ZW50LmxlYXJuaW5nTW9kZSA9PT0gJ0luc3RydWN0b3ItTGVkJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51dGlsaXR5U3ZjLmlzTW9iaWxlXG4gIH1cblxuICBnZXQgc2hvd1N1YnRpdGxlT25CYW5uZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9jU3ZjLnN1YnRpdGxlT25CYW5uZXJzXG4gIH1cblxuICBwdWJsaWMgaGFuZGxlRW5yb2xsbWVudEVuZERhdGUoYmF0Y2g6IGFueSkge1xuICAgIGNvbnN0IGVucm9sbG1lbnRFbmREYXRlID0gZGF5anMoXy5nZXQoYmF0Y2gsICdlbnJvbGxtZW50RW5kRGF0ZScpKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuICAgIGNvbnN0IHN5c3RlbURhdGUgPSBkYXlqcygpXG4gICAgcmV0dXJuIGVucm9sbG1lbnRFbmREYXRlID8gZGF5anMoZW5yb2xsbWVudEVuZERhdGUpLmlzQmVmb3JlKHN5c3RlbURhdGUpIDogZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNuYWNrYmFyKHByaW1hcnlNc2c6IHN0cmluZywgZHVyYXRpb246IG51bWJlciA9IDUwMDApIHtcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocHJpbWFyeU1zZywgJ1gnLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICB9KVxuICB9XG5cbiAgZ2V0IHNob3dJbnN0cnVjdG9yTGVkTXNnKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNob3dBY3Rpb25CdXR0b25zICYmXG4gICAgICB0aGlzLmNvbnRlbnQgJiZcbiAgICAgIHRoaXMuY29udGVudC5sZWFybmluZ01vZGUgPT09ICdJbnN0cnVjdG9yLUxlZCcgJiZcbiAgICAgICF0aGlzLmNvbnRlbnQuY2hpbGRyZW4ubGVuZ3RoICYmXG4gICAgICAhdGhpcy5jb250ZW50LmFydGlmYWN0VXJsXG4gICAgKVxuICB9XG5cbiAgZ2V0IGlzSGVhZGVySGlkZGVuKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVzb3VyY2UgJiYgdGhpcy5jb250ZW50ICYmICF0aGlzLmNvbnRlbnQuYXJ0aWZhY3RVcmwubGVuZ3RoXG4gIH1cblxuICBnZXQgc2hvd0FjdGlvbkJ1dHRvbnMoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYWN0aW9uQnRuU3RhdHVzICE9PSAnd2FpdCcgJiZcbiAgICAgIHRoaXMuY29udGVudCAmJlxuICAgICAgdGhpcy5jb250ZW50LnN0YXR1cyAhPT0gJ0RlbGV0ZWQnICYmXG4gICAgICB0aGlzLmNvbnRlbnQuc3RhdHVzICE9PSAnRXhwaXJlZCdcbiAgICApXG4gIH1cblxuICBnZXQgc2hvd0J1dHRvbkNvbnRhaW5lcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hY3Rpb25CdG5TdGF0dXMgPT09ICdncmFudCcgJiZcbiAgICAgICEodGhpcy5pc01vYmlsZSAmJiB0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmlzSW5JbnRyYW5ldCkgJiZcbiAgICAgICEoXG4gICAgICAgIHRoaXMuY29udGVudCAmJlxuICAgICAgICB0aGlzLmNvbnRlbnQuY29udGVudFR5cGUgPT09ICdDb3Vyc2UnICYmXG4gICAgICAgIHRoaXMuY29udGVudC5jaGlsZHJlbi5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgIXRoaXMuY29udGVudC5hcnRpZmFjdFVybFxuICAgICAgKSAmJlxuICAgICAgISh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmNvbnRlbnRUeXBlID09PSAnUmVzb3VyY2UnICYmICF0aGlzLmNvbnRlbnQuYXJ0aWZhY3RVcmwpXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXN1bWVEYXRhRnJvbUxpc3QodHlwZT86IHN0cmluZyk6IGFueSB8IHZvaWQge1xuICAgIGNvbnN0IHJlc3VtZUNvcHkgPSBbLi4udGhpcy5yZXN1bWVEYXRhXVxuICAgIGlmIChyZXN1bWVDb3B5ICYmIHJlc3VtZUNvcHkubGVuZ3RoKSB7XG4gICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuXG4gICAgICAgIGNvbnN0IGxhc3RJdGVtID0gcmVzdW1lQ29weSAmJiByZXN1bWVDb3B5LnNvcnQoKGE6IGFueSwgYjogYW55KSA9PlxuICAgICAgICAgIG5ldyBEYXRlKGIubGFzdEFjY2Vzc1RpbWUpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEubGFzdEFjY2Vzc1RpbWUpLmdldFRpbWUoKSkuc2hpZnQoKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkZW50aWZpZXI6IGxhc3RJdGVtLmNvbnRlbnRJZCxcbiAgICAgICAgICBtaW1lVHlwZTogbGFzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzICYmIGxhc3RJdGVtLnByb2dyZXNzZGV0YWlscy5taW1lVHlwZSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgZmlyc3RJdGVtID0gcmVzdW1lQ29weSAmJiByZXN1bWVDb3B5Lmxlbmd0aCAmJiByZXN1bWVDb3B5WzBdXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZGVudGlmaWVyOiBmaXJzdEl0ZW0uY29udGVudElkLFxuICAgICAgICBtaW1lVHlwZTogZmlyc3RJdGVtLnByb2dyZXNzZGV0YWlscyAmJiBmaXJzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzLm1pbWVUeXBlLFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIHByaXZhdGUgbW9kaWZ5U2Vuc2libGVDb250ZW50UmF0aW5nKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29udGVudCAmJlxuICAgICAgdGhpcy5jb250ZW50LmF2ZXJhZ2VSYXRpbmcgJiZcbiAgICAgIHR5cGVvZiB0aGlzLmNvbnRlbnQuYXZlcmFnZVJhdGluZyAhPT0gJ251bWJlcidcbiAgICApIHtcbiAgICAgIHRoaXMuY29udGVudC5hdmVyYWdlUmF0aW5nID0gKHRoaXMuY29udGVudC5hdmVyYWdlUmF0aW5nIGFzIGFueSlbdGhpcy5jb25maWdTdmMucm9vdE9yZyB8fCAnJ11cbiAgICB9XG4gICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQudG90YWxSYXRpbmcgJiYgdHlwZW9mIHRoaXMuY29udGVudC50b3RhbFJhdGluZyAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuY29udGVudC50b3RhbFJhdGluZyA9ICh0aGlzLmNvbnRlbnQudG90YWxSYXRpbmcgYXMgYW55KVt0aGlzLmNvbmZpZ1N2Yy5yb290T3JnIHx8ICcnXVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGVhcm5pbmdVcmxzKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQpIHtcbiAgICAgIHRoaXMuaXNQcmFjdGljZVZpc2libGUgPSBCb29sZWFuKFxuICAgICAgICB0aGlzLnRvY1N2Yy5maWx0ZXJUb2ModGhpcy5jb250ZW50LCBOc0NvbnRlbnQuRUZpbHRlckNhdGVnb3J5LlBSQUNUSUNFKSxcbiAgICAgIClcblxuICAgICAgdGhpcy5pc0Fzc2Vzc1Zpc2libGUgPSBCb29sZWFuKFxuICAgICAgICB0aGlzLnRvY1N2Yy5maWx0ZXJUb2ModGhpcy5jb250ZW50LCBOc0NvbnRlbnQuRUZpbHRlckNhdGVnb3J5LkFTU0VTUyksXG4gICAgICApXG5cbiAgICAgIGNvbnN0IGZpcnN0UGxheWFibGVDb250ZW50ID0gdGhpcy5jb250ZW50U3ZjLmdldEZpcnN0Q2hpbGRJbkhpZXJhcmNoeSh0aGlzLmNvbnRlbnQpXG4gICAgICBsZXQgcHJpbWFyeUNhdGVnb3J5XG4gICAgICBpZiAodGhpcy5jb250ZW50LnNlY3VyZVNldHRpbmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJpbWFyeUNhdGVnb3J5ID0gJ0xlYXJuaW5nIFJlc291cmNlJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJpbWFyeUNhdGVnb3J5ID0gZmlyc3RQbGF5YWJsZUNvbnRlbnQucHJpbWFyeUNhdGVnb3J5IHx8IHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnlcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlyc3RSZXNvdXJjZUxpbmsgPSB0aGlzLmdldFJlc3VtZVVybChmaXJzdFBsYXlhYmxlQ29udGVudCwgbnVsbCwgcHJpbWFyeUNhdGVnb3J5KVxuXG4gICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgICAgIC8vIGlmIChmaXJzdFBsYXlhYmxlQ29udGVudC5vcHRpb25hbFJlYWRpbmcgJiYgZmlyc3RQbGF5YWJsZUNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSAnTGVhcm5pbmcgUmVzb3VyY2UnKSB7XG4gICAgICAvLyAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoMiwgZmlyc3RQbGF5YWJsZUNvbnRlbnQuaWRlbnRpZmllcilcbiAgICAgIC8vIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzc2lnblBhdGhBbmRVcGRhdGVCYW5uZXIodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXRoID0gdXJsLnNwbGl0KCcvJykucG9wKClcbiAgICBpZiAocGF0aCAmJiB0aGlzLnZhbGlkUGF0aHMuaGFzKHBhdGgpKSB7XG4gICAgICB0aGlzLnJvdXRlUGF0aCA9IHBhdGhcbiAgICAgIHRoaXMudXBkYXRlQmFubmVyVXJsKClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUJhbm5lclVybCgpIHtcbiAgICBpZiAodGhpcy5iYW5uZXJzKSB7XG4gICAgICB0aGlzLmJhbm5lclVybCA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShcbiAgICAgICAgYHVybCgke3RoaXMuYmFubmVyc1t0aGlzLnJvdXRlUGF0aF19KWAsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcGxheUludHJvVmlkZW8oKSB7XG4gICAgaWYgKHRoaXMuY29udGVudCkge1xuICAgICAgdGhpcy5kaWFsb2cub3BlbihBcHBUb2NEaWFsb2dJbnRyb1ZpZGVvQ29tcG9uZW50LCB7XG4gICAgICAgIGRhdGE6IHRoaXMuY29udGVudC5pbnRyb2R1Y3RvcnlWaWRlbyxcbiAgICAgICAgaGVpZ2h0OiAnMzUwcHgnLFxuICAgICAgICB3aWR0aDogJzYyMHB4JyxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0IHNhbml0aXplZEludHJvZHVjdG9yeVZpZGVvSWNvbigpIHtcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5pbnRyb2R1Y3RvcnlWaWRlb0ljb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoYHVybCgke3RoaXMuY29udGVudC5pbnRyb2R1Y3RvcnlWaWRlb0ljb259KWApXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBwcml2YXRlIGZldGNoRXh0ZXJuYWxDb250ZW50QWNjZXNzKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LnJlZ2lzdHJhdGlvblVybCkge1xuICAgICAgaWYgKCF0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgICAgdGhpcy5leHRlcm5hbENvbnRlbnRGZXRjaFN0YXR1cyA9ICdmZXRjaGluZydcbiAgICAgICAgdGhpcy5yZWdpc3RlckZvckV4dGVybmFsID0gZmFsc2VcbiAgICAgICAgdGhpcy50b2NTdmMuZmV0Y2hFeHRlcm5hbENvbnRlbnRBY2Nlc3ModGhpcy5jb250ZW50LmlkZW50aWZpZXIpLnN1YnNjcmliZShcbiAgICAgICAgICBkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxDb250ZW50RmV0Y2hTdGF0dXMgPSAnZG9uZSdcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJGb3JFeHRlcm5hbCA9IGRhdGEuaGFzQWNjZXNzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBfZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5leHRlcm5hbENvbnRlbnRGZXRjaFN0YXR1cyA9ICdkb25lJ1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckZvckV4dGVybmFsID0gZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4dGVybmFsQ29udGVudEZldGNoU3RhdHVzID0gJ2RvbmUnXG4gICAgICAgIHRoaXMucmVnaXN0ZXJGb3JFeHRlcm5hbCA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRSYXRpbmdJY29uKHJhdGluZ0luZGV4OiBudW1iZXIpOiAnc3RhcicgfCAnc3Rhcl9ib3JkZXInIHwgJ3N0YXJfaGFsZicge1xuICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmF2ZXJhZ2VSYXRpbmcpIHtcbiAgICAgIGNvbnN0IGF2Z1JhdGluZyA9IHRoaXMuY29udGVudC5hdmVyYWdlUmF0aW5nXG4gICAgICBjb25zdCByYXRpbmdGbG9vciA9IE1hdGguZmxvb3IoYXZnUmF0aW5nKVxuICAgICAgaWYgKHJhdGluZ0luZGV4IDw9IHJhdGluZ0Zsb29yKSB7XG4gICAgICAgIHJldHVybiAnc3RhcidcbiAgICAgIH1cbiAgICAgIGlmIChyYXRpbmdGbG9vciA9PT0gcmF0aW5nSW5kZXggLSAxICYmIGF2Z1JhdGluZyAlIDEgPiAwKSB7XG4gICAgICAgIHJldHVybiAnc3Rhcl9oYWxmJ1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJ3N0YXJfYm9yZGVyJ1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1JlZ2lzdHJhdGlvblN0YXR1cygpIHtcbiAgICBjb25zdCBzb3VyY2UgPSAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5zb3VyY2VTaG9ydE5hbWUpIHx8ICcnXG4gICAgaWYgKFxuICAgICAgIXRoaXMuZm9yUHJldmlldyAmJlxuICAgICAgIXRoaXMuaXNSZWdpc3RyYXRpb25TdXBwb3J0ZWQgJiZcbiAgICAgIHRoaXMuY2hlY2tSZWdpc3RyYXRpb25Tb3VyY2VzLmhhcyhzb3VyY2UpXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRlbnRTdmNcbiAgICAgICAgLmdldFJlZ2lzdHJhdGlvblN0YXR1cyhzb3VyY2UpXG4gICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5oYXNBY2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uQnRuU3RhdHVzID0gJ2dyYW50J1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkJ0blN0YXR1cyA9ICdyZWplY3QnXG4gICAgICAgICAgICBpZiAocmVzLnJlZ2lzdHJhdGlvblVybCAmJiB0aGlzLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250ZW50LnJlZ2lzdHJhdGlvblVybCA9IHJlcy5yZWdpc3RyYXRpb25VcmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChfZXJyID0+IHsgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3Rpb25CdG5TdGF0dXMgPSAnZ3JhbnQnXG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVRdWVyeSh0eXBlOiAnUkVTVU1FJyB8ICdTVEFSVF9PVkVSJyB8ICdTVEFSVCcpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBpZiAodGhpcy5maXJzdFJlc291cmNlTGluayAmJiAodHlwZSA9PT0gJ1NUQVJUJyB8fCB0eXBlID09PSAnU1RBUlRfT1ZFUicpKSB7XG4gICAgICBsZXQgcVBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgLi4udGhpcy5maXJzdFJlc291cmNlTGluay5xdWVyeVBhcmFtcyxcbiAgICAgICAgdmlld01vZGU6IHR5cGUsXG4gICAgICAgIGJhdGNoSWQ6IHRoaXMuZ2V0QmF0Y2hJZCgpLFxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29udGV4dElkICYmIHRoaXMuY29udGV4dFBhdGgpIHtcbiAgICAgICAgcVBhcmFtcyA9IHtcbiAgICAgICAgICAuLi5xUGFyYW1zLFxuICAgICAgICAgIGNvbGxlY3Rpb25JZDogdGhpcy5jb250ZXh0SWQsXG4gICAgICAgICAgY29sbGVjdGlvblR5cGU6IHRoaXMuY29udGV4dFBhdGgsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgICAgZGVsZXRlIHFQYXJhbXMudmlld01vZGVcbiAgICAgIH1cbiAgICAgIHFQYXJhbXMgPSB7XG4gICAgICAgIC4uLnFQYXJhbXMsXG4gICAgICAgIGNoYW5uZWxJZDogdGhpcy5jaGFubmVsSWQsXG4gICAgICB9XG4gICAgICByZXR1cm4gcVBhcmFtc1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlc3VtZURhdGFMaW5rICYmIHR5cGUgPT09ICdSRVNVTUUnKSB7XG4gICAgICBsZXQgcVBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgLi4udGhpcy5yZXN1bWVEYXRhTGluay5xdWVyeVBhcmFtcyxcbiAgICAgICAgYmF0Y2hJZDogdGhpcy5nZXRCYXRjaElkKCksXG4gICAgICAgIHZpZXdNb2RlOiAnUkVTVU1FJyxcbiAgICAgICAgLy8gY291cnNlTmFtZTogdGhpcy5jb250ZW50ID8gdGhpcy5jb250ZW50Lm5hbWUgOiAnJyxcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnRleHRJZCAmJiB0aGlzLmNvbnRleHRQYXRoKSB7XG4gICAgICAgIHFQYXJhbXMgPSB7XG4gICAgICAgICAgLi4ucVBhcmFtcyxcbiAgICAgICAgICBjb2xsZWN0aW9uSWQ6IHRoaXMuY29udGV4dElkLFxuICAgICAgICAgIGNvbGxlY3Rpb25UeXBlOiB0aGlzLmNvbnRleHRQYXRoLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICAgIGRlbGV0ZSBxUGFyYW1zLnZpZXdNb2RlXG4gICAgICB9XG4gICAgICBxUGFyYW1zID0ge1xuICAgICAgICAuLi5xUGFyYW1zLFxuICAgICAgICBjaGFubmVsSWQ6IHRoaXMuY2hhbm5lbElkLFxuICAgICAgfVxuICAgICAgcmV0dXJuIHFQYXJhbXNcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9yUHJldmlldykge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBiYXRjaElkOiB0aGlzLmdldEJhdGNoSWQoKSxcbiAgICAgIHZpZXdNb2RlOiB0eXBlLFxuICAgIH1cbiAgfVxuXG4gIGdldCBpc0luSUZyYW1lKCk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gd2luZG93LnNlbGYgIT09IHdpbmRvdy50b3BcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIG9wZW5GZWVkYmFja0RpYWxvZyhjb250ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbnRlbnRSYXRpbmdWMkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc3NjhweCcsXG4gICAgICBkYXRhOiB7IGNvbnRlbnQsIHVzZXJJZDogdGhpcy51c2VySWQsIHVzZXJSYXRpbmc6IHRoaXMudXNlclJhdGluZyB9LFxuICAgIH0pXG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMuZ2V0VXNlclJhdGluZyh0cnVlKVxuICAgICAgICAvLyB0aGlzLmdldFVzZXJFbnJvbGxtZW50TGlzdCgpXG4gICAgICAgIHRoaXMuY2hlY2tJZlVzZXJFbnJvbGxlZCgpXG4gICAgICAgIHRoaXMucmVzZXRSYXRpbmdzU2VydmljZS5zZXRSYXRpbmdTZXJ2aWNlVXBkYXRlKHRydWUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHVwZGF0ZVByb2dyZXNzKHN0YXR1czogbnVtYmVyLCByZXNvdXJjZUlkOiBhbnkpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5pZCA/XG4gICAgICB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5pZCA6ICcnXG4gICAgY29uc3QgYmF0Y2hJZCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuYmF0Y2hJZCA/XG4gICAgICB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmJhdGNoSWQgOiAnJ1xuICAgIGNvbnN0IGlzUHJlQXNzZXNzbWVudCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMucHJlQXNzZXNzbWVudFxuICAgIGlmIChpc1ByZUFzc2Vzc21lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnZpZXdlclN2Y1xuICAgICAgICAucmVhbFRpbWVQcm9ncmVzc1VwZGF0ZUZvclByZUFzc2Vzc21lbnRRdWl6KHJlc291cmNlSWQsIHN0YXR1cylcblxuICAgIH1cbiAgICByZXR1cm4gdGhpcy52aWV3ZXJTdmMucmVhbFRpbWVQcm9ncmVzc1VwZGF0ZVF1aXoocmVzb3VyY2VJZCwgY29sbGVjdGlvbklkLCBiYXRjaElkLCBzdGF0dXMpXG4gIH1cblxuICBnZXRQcm9ncmFtRHVyYXRpb24oYmF0Y2hEYXRhOiBhbnkpIHtcbiAgICBpZiAoYmF0Y2hEYXRhKSB7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBkYXlqcyhkYXlqcyhiYXRjaERhdGEuc3RhcnREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcbiAgICAgIGNvbnN0IGVuZERhdGUgPSBkYXlqcyhkYXlqcyhiYXRjaERhdGEuZW5kRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJykpXG4gICAgICAvLyBhZGRpbmcgMSB0byBpbmNsdWRlIHRoZSBzdGFydCBkYXRlXG4gICAgICByZXR1cm4gKGVuZERhdGUuZGlmZihzdGFydERhdGUsICdkYXlzJykgKyAxKVxuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIHdpdGhkcmF3T3JFbnJvbGwoZGF0YTogc3RyaW5nKSB7XG4gICAgaWYgKGRhdGEgPT09IE5zQ29udGVudC5XRkJsZW5kZWRQcm9ncmFtU3RhdHVzLklOSVRJQVRFKSB7XG4gICAgICB0aGlzLmZldGNoVXNlcldGRm9yQmxlbmRlZCgpXG4gICAgfVxuICB9XG5cblxuXG4gIGhhbmRsZUNhcGl0YWxpemUoc3RyOiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXR1cm5WYWx1ZSA9ICcnXG4gICAgaWYgKHN0cikge1xuICAgICAgaWYgKHR5cGUgPT09ICduYW1lJykge1xuICAgICAgICByZXR1cm5WYWx1ZSA9IHN0ci5zcGxpdCgnICcpLm1hcChfc3RyID0+IHtcbiAgICAgICAgICByZXR1cm4gX3N0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIF9zdHIuc2xpY2UoMSlcbiAgICAgICAgfSkuam9pbignICcpXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHJldHVyblZhbHVlID0gc3RyICYmIChzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSkpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZVxuICB9XG5cbiAgcHVibGljIGhhbmRsZVBhcnNlSnNvbkRhdGEoczogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZFN0cmluZyA9IEpTT04ucGFyc2UocylcbiAgICAgIHJldHVybiBwYXJzZWRTdHJpbmdcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU5hdmlnYXRlVG9SZXZpZXdzKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnRUb1ZpZXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmV2aWV3Q29udGFpbmVyJykgYXMgYW55XG5cbiAgICBpZiAoZWxlbWVudFRvVmlldykge1xuICAgICAgd2luZG93LnNjcm9sbFRvKHtcbiAgICAgICAgdG9wOiBlbGVtZW50VG9WaWV3Lm9mZnNldFRvcCxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByYWlzZUNlcnRJbnRyZWFjdFRlbGVtZXRyeSgpIHtcbiAgICB0aGlzLmV2ZW50cy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxuICAgICAge1xuICAgICAgICB0eXBlOiBXc0V2ZW50cy5FbnVtSW50ZXJhY3RUeXBlcy5DTElDSyxcbiAgICAgICAgaWQ6ICd2aWV3LWNlcnRpZmljYXRlJyxcbiAgICAgICAgc3ViVHlwZTogV3NFdmVudHMuRW51bUludGVyYWN0U3ViVHlwZXMuQ0VSVElGSUNBVEUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogdGhpcy5jZXJ0SWQsICAgLy8gaWQgb2YgdGhlIGNlcnRpZmljYXRlXG4gICAgICAgIHR5cGU6IFdzRXZlbnRzLkVudW1JbnRlcmFjdFN1YlR5cGVzLkNFUlRJRklDQVRFLFxuICAgICAgfSlcbiAgfVxuXG4gIHRyYW5zbGF0ZUxhYmVscyhsYWJlbDogc3RyaW5nLCB0eXBlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndHJhbnNsYXRpb25zLnRyYW5zbGF0ZUxhYmVsKGxhYmVsLCB0eXBlLCAnJylcbiAgfVxuXG5cblxuICBnZXRMYXN0UGxheWVkUmVzb3VyY2UoKSB7XG4gICAgbGV0IGZpcnN0UGxheWFibGVDb250ZW50XG4gICAgbGV0IHJlc3VtZURhdGFWMjogYW55XG4gICAgaWYgKHRoaXMucmVzdW1lRGF0YSAmJiB0aGlzLnJlc3VtZURhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGlmICh0aGlzLmNvbnRlbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCkge1xuICAgICAgICByZXN1bWVEYXRhVjIgPSB0aGlzLmdldFJlc3VtZURhdGFGcm9tTGlzdCgnc3RhcnQnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdW1lRGF0YVYyID0gdGhpcy5nZXRSZXN1bWVEYXRhRnJvbUxpc3QoKVxuICAgICAgfVxuICAgICAgdGhpcy5leHBhbmRUaGVQYXRoKHJlc3VtZURhdGFWMi5pZGVudGlmaWVyKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jb250ZW50KSB7XG4gICAgICAgIGZpcnN0UGxheWFibGVDb250ZW50ID0gdGhpcy5jb250ZW50U3ZjLmdldEZpcnN0Q2hpbGRJbkhpZXJhcmNoeSh0aGlzLmNvbnRlbnQpXG4gICAgICAgIHRoaXMuZXhwYW5kVGhlUGF0aChmaXJzdFBsYXlhYmxlQ29udGVudC5pZGVudGlmaWVyKVxuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kVGhlUGF0aChyZXNvdXJjZUlkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHJlc291cmNlSWQpIHtcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnV0aWxpdHlTdmMuZ2V0UGF0aCh0aGlzLmNvbnRlbnQsIHJlc291cmNlSWQpXG4gICAgICB0aGlzLnBhdGhTZXQgPSBuZXcgU2V0KHBhdGgubWFwKCh1OiB7IGlkZW50aWZpZXI6IGFueSB9KSA9PiB1LmlkZW50aWZpZXIpKVxuICAgIH1cbiAgfVxuXG4gIHJhaXNlRW5yb2xsVGVsZW1ldHJ5KCkge1xuICAgIHRoaXMuZXZlbnRzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdjbGljaycsXG4gICAgICAgIHN1YlR5cGU6ICdlbnJvbGwnLFxuICAgICAgICBpZDogdGhpcy5jb250ZW50ID8gdGhpcy5jb250ZW50LmlkZW50aWZpZXIgOiAnJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiB0aGlzLmNvbnRlbnQgPyB0aGlzLmNvbnRlbnQuaWRlbnRpZmllciA6ICcnLFxuICAgICAgICB0eXBlOiB0aGlzLmNvbnRlbnQgPyB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5IDogJycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwYWdlSWRFeHQ6IGBidG4tZW5yb2xsYCxcbiAgICAgICAgbW9kdWxlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5bW9kdWxlcy5DT05URU5ULFxuICAgICAgfVxuICAgIClcbiAgfVxuXG4gIHJhaXNlRW5yb2xsVGVsZW1lbnRyeUZvclNha3NoYW1BSUdlbmVyYXRlZCgpIHtcbiAgICB0aGlzLmV2ZW50cy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxuICAgICAge1xuICAgICAgICB0eXBlOiAnY2xpY2snLFxuICAgICAgICBzdWJUeXBlOiAnZW5yb2xsJyxcbiAgICAgICAgaWQ6IHRoaXMuY29udGVudCA/IHRoaXMuY29udGVudC5pZGVudGlmaWVyIDogJycsXG4gICAgICAgIHRhcmdldDoge1xuICAgICAgICAgIGlkOiB0aGlzLnJlY29tbWVuZGVkQ291cnNlc0lkLFxuICAgICAgICAgIHZlcjogXCIxLjBcIixcbiAgICAgICAgICB0eXBlOiBcImlnb3QtYWlcIlxuICAgICAgICB9LFxuICAgICAgfSBhcyBhbnksXG4gICAgICB7XG4gICAgICAgIGlkOiB0aGlzLmNvbnRlbnQgPyB0aGlzLmNvbnRlbnQuaWRlbnRpZmllciA6ICcnLFxuICAgICAgICB0eXBlOiB0aGlzLmNvbnRlbnQgPyB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5IDogJycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwYWdlSWQ6IGAvYXBwL3RvYy8ke3RoaXMuY29udGVudD8uaWRlbnRpZmllcn0vb3ZlcnZpZXdfYnRuLWVucm9sbGAsXG4gICAgICAgIG1vZHVsZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeW1vZHVsZXMuQ09OVEVOVCxcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICBvbkNsaWNrT2ZTaGFyZSgpIHtcbiAgICB0aGlzLmVuYWJsZVNoYXJlID0gdHJ1ZVxuICAgIHRoaXMucmFpc2VUZWxlbWV0cnlGb3JTaGFyZSgnc2hhcmVDb250ZW50JylcbiAgfVxuXG4gIC8qIHRzbGludDpkaXNhYmxlICovXG4gIHJhaXNlVGVsZW1ldHJ5Rm9yU2hhcmUoc3ViVHlwZTogYW55KSB7XG4gICAgdGhpcy5ldmVudHMucmFpc2VJbnRlcmFjdFRlbGVtZXRyeShcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2NsaWNrJyxcbiAgICAgICAgc3ViVHlwZSxcbiAgICAgICAgaWQ6IHRoaXMuY29udGVudCA/IHRoaXMuY29udGVudC5pZGVudGlmaWVyIDogJycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogdGhpcy5jb250ZW50ID8gdGhpcy5jb250ZW50LmlkZW50aWZpZXIgOiAnJyxcbiAgICAgICAgdHlwZTogdGhpcy5jb250ZW50ID8gdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA6ICcnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcGFnZUlkRXh0OiBgYnRuLSR7c3ViVHlwZX1gLFxuICAgICAgICBtb2R1bGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnltb2R1bGVzLkNPTlRFTlQsXG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgcmVzZXRFbmFibGVTaGFyZSgpIHtcbiAgICB0aGlzLmVuYWJsZVNoYXJlID0gZmFsc2VcbiAgfVxuXG4gIHRyYW5zbGF0ZUxhYmVsKGxhYmVsOiBzdHJpbmcsIHR5cGU6IGFueSkge1xuICAgIGlmIChsYWJlbCAmJiB0eXBlKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYW5ndHJhbnNsYXRpb25zLnRyYW5zbGF0ZUxhYmVsKGxhYmVsLCB0eXBlLCAnJylcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5yb3V0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yb3V0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgfVxuICAgIGlmICh0aGlzLmJhdGNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmJhdGNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICB9XG4gICAgaWYgKHRoaXMuYmF0Y2hEYXRhU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmJhdGNoRGF0YVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgfVxuICAgIHRoaXMudG9jU3ZjLmFuYWx5dGljc0ZldGNoU3RhdHVzID0gJ25vbmUnXG4gICAgaWYgKHRoaXMucm91dGVyUGFyYW1TdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucm91dGVyUGFyYW1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZEJhdGNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQmF0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgICBpZiAodGhpcy5yZXN1bWVEYXRhU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlc3VtZURhdGFTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgICBpZiAodGhpcy50aW1lclVuc3Vic2NyaWJlKSB7XG4gICAgICB0aGlzLnRpbWVyVW5zdWJzY3JpYmUudW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgICBpZiAodGhpcy5oYXNobWFwVXBkYXRlZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5oYXNobWFwVXBkYXRlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgfVxuICAgIFxuICAgIC8vIENsZWFyIGNvbnRlbnQgZGF0YSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgd2hlbiBuYXZpZ2F0aW5nIGJldHdlZW4gY29udGVudHNcbiAgICB0aGlzLnRvY1N2Yy5yZXNldENvbnRlbnREYXRhKClcbiAgfVxuXG4gIHByb2dyYW1FbnJvbGxDYWxsKGJhdGNoRGF0YTogYW55KSB7XG4gICAgdGhpcy5hdXRvRW5yb2xsQ3VyYXRlZFByb2dyYW0oTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5NT0RFUkFURURfUFJPR1JBTSwgYmF0Y2hEYXRhKVxuICB9XG5cbiAgcmFpc2VUZWxlbWV0cnlGb3JQdWJsaWMoJGV2ZW50OiBhbnkpIHtcbiAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgZmlyc3QgcHJldmVudCBuYXZpZ2F0aW9uIHRvIHBsYXllciBwYWdlXG4gICAgY29uc3Qgc2hvdWxkUHJldmVudE5hdmlnYXRpb24gPSB0aGlzLnNob3VsZFNob3dTdXJ2ZXlQb3B1cCgpXG4gICAgaWYgKHNob3VsZFByZXZlbnROYXZpZ2F0aW9uKSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuXG4gICAgdGhpcy5ldmVudHMucmFpc2VJbnRlcmFjdFRlbGVtZXRyeShcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2NsaWNrJyxcbiAgICAgICAgaWQ6IFwidmlldy1hc3Nlc3NtZW50XCIsXG4gICAgICAgIHN1YlR5cGU6IFwiYW5vbnltb3VzLWFzc2Vzc21lbnRcIixcbiAgICAgIH0sIHt9LFxuICAgICAge1xuICAgICAgICBtb2R1bGU6ICdMYW5kaW5nIFBhZ2UnLFxuICAgICAgfSlcblxuICAgIGlmIChzaG91bGRQcmV2ZW50TmF2aWdhdGlvbikge1xuICAgICAgLy8gUHJlcGFyZSBuYXZpZ2F0aW9uIGRldGFpbHNcbiAgICAgIGNvbnN0IG5hdmlnYXRpb25VcmwgPSAodGhpcy5yZXN1bWVEYXRhICYmICF0aGlzLmNlcnREYXRhKSA/IHRoaXMucmVzdW1lRGF0YUxpbms/LnVybCA6IHRoaXMuZmlyc3RSZXNvdXJjZUxpbms/LnVybFxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSAodGhpcy5yZXN1bWVEYXRhICYmICF0aGlzLmNlcnREYXRhKSA/IHRoaXMuZ2VuZXJhdGVRdWVyeSgnUkVTVU1FJykgOiB0aGlzLmdlbmVyYXRlUXVlcnkoJ1NUQVJUJylcblxuICAgICAgLy8gT3BlbiBzdXJ2ZXkgcG9wdXAgZGlyZWN0bHkgd2l0aCBuYXZpZ2F0aW9uIGRldGFpbHNcbiAgICAgIGlmIChuYXZpZ2F0aW9uVXJsKSB7XG4gICAgICAgIHRoaXMub3BlblB1YmxpY1N1cnZleVBvcHVwKG5hdmlnYXRpb25VcmwsIHF1ZXJ5UGFyYW1zKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgc2hvdWxkU2hvd1N1cnZleVBvcHVwKCk6IGJvb2xlYW4ge1xuICAgIC8vIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHN1cnZleSBwb3B1cCBjb25kaXRpb25cbiAgICAvLyBDaGVjayBpZiBpdCdzIHB1YmxpYyB2aWV3IGFuZCBjb250ZW50IGlzIGEgY2FzZSBzdHVkeVxuICAgIHJldHVybiB0aGlzLmZvclByZXZpZXcgJiYgdGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudFJlYWREYXRhXG4gICAgICAmJiB0aGlzLmNvbnRlbnRSZWFkRGF0YS5jb3Vyc2VDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5DQVNFX1NUVURZXG4gIH1cblxuXG4gIGFzeW5jIGNoZWNrSWZVc2VyRW5yb2xsZWQoKSB7XG4gICAgdGhpcy5jb250ZW50TGliU3ZjLm9uZVN0ZXBSZXN1bWVFbmFibGUgPSBmYWxzZVxuICAgIHRoaXMuZW5yb2xsQnRuTG9hZGluZyA9IHRydWVcbiAgICB0aGlzLnRvY1N2Yy5jb250ZW50TG9hZGVyLm5leHQodHJ1ZSlcbiAgICAvLyBvbmx5IGZvciAgcmVzb3VyY2VcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICBpZiAodGhpcy5iYXNlQ29udGVudFJlYWREYXRhICYmIHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YS5pZGVudGlmaWVyICYmIHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YS5wcmltYXJ5Q2F0ZWdvcnkgIT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LkNPVVJTRSAmJlxuICAgICAgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLnByaW1hcnlDYXRlZ29yeSAhPT0gdGhpcy5wcmltYXJ5Q2F0ZWdvcnkuUFJPR1JBTSAmJlxuICAgICAgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLnByaW1hcnlDYXRlZ29yeSAhPT0gdGhpcy5wcmltYXJ5Q2F0ZWdvcnkuTUFOREFUT1JZX0NPVVJTRV9HT0FMICYmXG4gICAgICB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEucHJpbWFyeUNhdGVnb3J5ICE9PSB0aGlzLnByaW1hcnlDYXRlZ29yeS5TVEFOREFMT05FX0FTU0VTU01FTlQgJiZcbiAgICAgIHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YS5wcmltYXJ5Q2F0ZWdvcnkgIT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSAmJlxuICAgICAgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLnByaW1hcnlDYXRlZ29yeSAhPT0gdGhpcy5wcmltYXJ5Q2F0ZWdvcnkuQ1VSQVRFRF9QUk9HUkFNKSB7XG4gICAgICAvLyBjb25zdCBjb2xsZWN0aW9uSWQgPSB0aGlzLmlzUmVzb3VyY2UgPyAnJyA6IHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YS5pZGVudGlmaWVyXG4gICAgICByZXR1cm4gdGhpcy5nZXRDb250aW51ZUxlYXJuaW5nRGF0YSh0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuaWRlbnRpZmllcilcbiAgICB9XG5cbiAgICBsZXQgZW5yb2xsZWRDb3Vyc2U6IE5zQ29udGVudC5JQ291cnNlIHwgdW5kZWZpbmVkXG4gICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEgJiYgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLmlkZW50aWZpZXIgJiYgIXRoaXMuZm9yUHJldmlldykge1xuICAgICAgaWYgKHRoaXMudXNlckVucm9sbG1lbnRMaXN0ICYmIHRoaXMudXNlckVucm9sbG1lbnRMaXN0Lmxlbmd0aCkge1xuICAgICAgICBlbnJvbGxlZENvdXJzZSA9IHRoaXMudXNlckVucm9sbG1lbnRMaXN0LmZpbmQoKGNvdXJzZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuaWRlbnRpZmllciB8fCAnJ1xuICAgICAgICAgIGlmIChjb3Vyc2UuY291cnNlSWQgIT09IGlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvdXJzZVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBJZiBjdXJyZW50IGNvdXJzZSBpcyBwcmVzZW50IGluIHRoZSBsaXN0IG9mIHVzZXIgZW5yb2xsZWQgY291cnNlXG4gICAgICBpZiAoZW5yb2xsZWRDb3Vyc2UgJiYgZW5yb2xsZWRDb3Vyc2UuYmF0Y2hJZCkge1xuICAgICAgICB0aGlzLnJlc3VtZURhdGFTdWJzY3JpcHRpb24gPSB0aGlzLnRvY1N2Yy5yZXN1bWVEYXRhLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VtZURhdGEgPSByZXNcbiAgICAgICAgICAgIHRoaXMuZ2V0TGFzdFBsYXllZFJlc291cmNlKClcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVSZXN1bWVEYXRhTGlua05ldygpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnRvY1N2Yy5jaGVja01vZHVsZVdpc2VEYXRhKHRoaXMuY29udGVudClcbiAgICAgICAgdGhpcy5lbnJvbGxlZENvdXJzZURhdGEgPSBlbnJvbGxlZENvdXJzZVxuICAgICAgICB0aGlzLmlzQ291cnNlQ29tcGxldGVkT25UaGlzTW9udGgoKVxuICAgICAgICB0aGlzLmN1cnJlbnRDb3Vyc2VCYXRjaElkID0gZW5yb2xsZWRDb3Vyc2UuYmF0Y2hJZFxuICAgICAgICAvLyB0aGlzLmRvd25sb2FkQ2VydChlbnJvbGxlZENvdXJzZS5pc3N1ZWRDZXJ0aWZpY2F0ZXMpXG4gICAgICAgIGlmIChlbnJvbGxlZENvdXJzZSAmJiBlbnJvbGxlZENvdXJzZS5pc3N1ZWRDZXJ0aWZpY2F0ZXMgJiZcbiAgICAgICAgICBlbnJvbGxlZENvdXJzZS5pc3N1ZWRDZXJ0aWZpY2F0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgY2VydGlmaWNhdGU6IGFueSA9IGVucm9sbGVkQ291cnNlLmlzc3VlZENlcnRpZmljYXRlcy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT5cbiAgICAgICAgICAgIG5ldyBEYXRlKGIubGFzdElzc3VlZE9uKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLmxhc3RJc3N1ZWRPbikuZ2V0VGltZSgpKVxuICAgICAgICAgIGNvbnN0IGNlcnRJZCA9IGNlcnRpZmljYXRlWzBdLmlkZW50aWZpZXJcbiAgICAgICAgICB0aGlzLmNlcnRJZCA9IGNlcnRJZFxuICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudFsnY2VydGlmaWNhdGVPYmonXSA9IHtcbiAgICAgICAgICAgICAgY2VydElkLFxuICAgICAgICAgICAgICBjZXJ0RGF0YTogJycsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGVucm9sbGVkIGNvdXJzZSBpcyBjb21wbGV0ZWQgdGhlbiB0byBtYWtlIGFsbCBsYW5ndWFnZXMgY291cnNlcyBhcyB3ZWxsIGFzIGFsbCBjb250ZW50IGFzIGNvbXBsZXRlZFxuICAgICAgICBpZiAoICB0aGlzLmNvbnRlbnRSZWFkRGF0YS5jb3Vyc2VDYXRlZ29yeSAhPT0gTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5MRUFSTklOR19QQVRIV0FZICYmIGVucm9sbGVkQ291cnNlLnN0YXR1cyA9PT0gMikge1xuICAgICAgICAgIHRoaXMuY29udGVudFsnY29tcGxldGlvblBlcmNlbnRhZ2UnXSA9IDEwMFxuICAgICAgICAgIHRoaXMuY29udGVudFsnY29tcGxldGlvblN0YXR1cyddID0gMlxuICAgICAgICAgIGF3YWl0IHRoaXMudG9jU3ZjLm1hcENvbXBsZXRpb25DaGlsZFBlcmNlbnRhZ2VQcm9ncmFtKHRoaXMuY29udGVudClcbiAgICAgICAgICBsZXQgY29udGVudExhZyA9IHRoaXMuY29udGVudExhbmdTdmMuZ2V0Q29udGVudExhbmd1YWdlKHRoaXMuY29udGVudFJlYWREYXRhKVxuICAgICAgICAgIHRoaXMuZ2V0Q29udGludWVMZWFybmluZ0RhdGEodGhpcy5iYXNlQ29udGVudFJlYWREYXRhLmlkZW50aWZpZXIsIGVucm9sbGVkQ291cnNlLmJhdGNoSWQsIGNvbnRlbnRMYWcpXG4gICAgICAgICAgdGhpcy5lbnJvbGxCdG5Mb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5tYXBNb2R1bGVDb3VudCh0aGlzLmNvbnRlbnQpXG4gICAgICAgICAgdGhpcy5jaGVja0ZvckNvbXBsZXRpb25TdXJ2ZXlUcmlnZ2VyKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5jb250ZW50UmVhZERhdGEgJiYgdGhpcy5jb250ZW50UmVhZERhdGEuY3VtdWxhdGl2ZVRyYWNraW5nICYmIHRoaXMuY29udGVudFJlYWREYXRhLmNvdXJzZUNhdGVnb3J5ICE9PSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LkxFQVJOSU5HX1BBVEhXQVkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudG9jU3ZjLm1hcENvbXBsZXRpb25QZXJjZW50YWdlUHJvZ3JhbSh0aGlzLmNvbnRlbnQsIHRoaXMudXNlckVucm9sbG1lbnRMaXN0KVxuICAgICAgICAgICAgdGhpcy5jaGVja0ZvckNvbXBsZXRpb25TdXJ2ZXlUcmlnZ2VyKClcbiAgICAgICAgICAgIHRoaXMucmVzdW1lRGF0YVN1YnNjcmlwdGlvbiA9IHRoaXMudG9jU3ZjLnJlc3VtZURhdGEuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bWVEYXRhID0gcmVzXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRMYXN0UGxheWVkUmVzb3VyY2UoKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVSZXN1bWVEYXRhTGlua05ldygpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHRoaXMuZW5yb2xsQnRuTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAvLyB0aGlzLnRvY1N2Yy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmKHRoaXMuY29udGVudFJlYWREYXRhICYmIHRoaXMuY29udGVudFJlYWREYXRhLmNvdXJzZUNhdGVnb3J5ICE9PSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LkxFQVJOSU5HX1BBVEhXQVkpIHtcbiAgICAgICAgICAgICAgbGV0IGNvbnRlbnRMYWcgPSB0aGlzLmNvbnRlbnRMYW5nU3ZjLmdldENvbnRlbnRMYW5ndWFnZSh0aGlzLmNvbnRlbnRSZWFkRGF0YSlcbiAgICAgICAgICAgICAgdGhpcy5nZXRDb250aW51ZUxlYXJuaW5nRGF0YSh0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuaWRlbnRpZmllciwgZW5yb2xsZWRDb3Vyc2UuYmF0Y2hJZCwgY29udGVudExhZylcbiAgICAgICAgICAgICAgdGhpcy5jb250ZW50Wydjb21wbGV0aW9uUGVyY2VudGFnZSddID0gZW5yb2xsZWRDb3Vyc2UuY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgICAgICAgICAgdGhpcy50b2NTdmMubWFwTW9kdWxlQ291bnQodGhpcy5jb250ZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbnJvbGxCdG5Mb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIC8vIHRoaXMudG9jU3ZjLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnkgPT09IE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuTEVBUk5JTkdfUEFUSFdBWSkge1xuICAgICAgICAgIC8vIHRoaXMuYXBwVG9jVjJTdmMubWFwQ29udGVudEhpZXJhcmNoeVByb2dyZXNzVXBkYXRlKHRoaXMuY29udGVudCx0aGlzLnVzZXJFbnJvbGxtZW50TGlzdClcbiAgICAgICAgICBjb25zb2xlLmxvZygnbWFwcGluZyBwcm9ncmVzcyBmb3IgbGVhcm5pbmcgcGF0aHdheScsIHRoaXMuY29udGVudClcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5jYWxsSGlyYXJjaHlQcm9ncmVzc0hhc2htYXAodGhpcy5jb250ZW50KVxuICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXBwZWQgcHJvZ3Jlc3MgZm9yIGxlYXJuaW5nIHBhdGh3YXknLCB0aGlzLnRvY1N2Yy5oYXNobWFwKVxuICAgICAgICAgIHRoaXMudG9jU3ZjLmNvbXB1dGVNaWxlc3RvbmVMb2NraW5nU3RhdHVzKHRydWUpXG4gICAgICAgICAgdGhpcy5zeW5jTWlsZXN0b25lTG9ja1N0YXR1cygpXG4gICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iYXRjaERhdGEgPSB7XG4gICAgICAgICAgY29udGVudDogW2Vucm9sbGVkQ291cnNlLmJhdGNoXSxcbiAgICAgICAgICBlbnJvbGxlZDogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvY1N2Yy5zZXRCYXRjaERhdGEodGhpcy5iYXRjaERhdGEpXG4gICAgICAgIHRoaXMudG9jU3ZjLmdldFNlbGVjdGVkQmF0Y2hEYXRhKHRoaXMuYmF0Y2hEYXRhKVxuICAgICAgICB0aGlzLnRvY1N2Yy5tYXBTZXNzaW9uQ29tcGxldGlvblBlcmNlbnRhZ2UodGhpcy5iYXRjaERhdGEsIHRoaXMucmVzdW1lRGF0YSlcbiAgICAgICAgdGhpcy5yb3V0ZXJDaGFuZ2VIYW5kbGVyKHRydWUpXG4gICAgICAgIHRoaXMudG9jU3ZjLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9jU3ZjLmNoZWNrTW9kdWxlV2lzZURhdGEodGhpcy5jb250ZW50KVxuICAgICAgICB0aGlzLnRvY1N2Yy5tYXBNb2R1bGVDb3VudCh0aGlzLmNvbnRlbnQpXG4gICAgICAgIC8vIEl0J3MgdW5kZXJzdG9vZCB0aGF0IHVzZXIgaXMgbm90IGFscmVhZHkgZW5yb2xsZWRcbiAgICAgICAgLy8gRmV0Y2ggdGhlIGF2YWlsYWJsZSBiYXRjaGVzIGFuZCBwcmVzZW50IHRvIHVzZXJcbiAgICAgICAgaWYgKHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LkNPVVJTRVxuICAgICAgICAgIHx8IHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgIT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LlBST0dSQU0pIHtcbiAgICAgICAgICAvLyBEaXNhYmxpbmcgYXV0byBlbnJvbGxtZW50IHRvIGJhdGNoXG4gICAgICAgICAgaWYgKHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEJhdGNoRGV0YWlscygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmV0Y2hCYXRjaERldGFpbHMoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9jU3ZjLmNhbGxIaXJhcmNoeVByb2dyZXNzSGFzaG1hcCh0aGlzLmNvbnRlbnQpXG4gICAgICAgIC8vIEZvciBMZWFybmluZyBQYXRod2F5cywgY29tcHV0ZSBtaWxlc3RvbmUgbG9ja2luZyB3aGVuIG5vdCBlbnJvbGxlZCAoYWxsIGxvY2tlZClcbiAgICAgICAgaWYgKHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnkgPT09IE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuTEVBUk5JTkdfUEFUSFdBWSkge1xuICAgICAgICAgIHRoaXMudG9jU3ZjLmNvbXB1dGVNaWxlc3RvbmVMb2NraW5nU3RhdHVzKGZhbHNlKVxuICAgICAgICAgIHRoaXMuc3luY01pbGVzdG9uZUxvY2tTdGF0dXMoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5yb2xsQnRuTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMudG9jU3ZjLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNrZWxldG9uTG9hZGVyID0gZmFsc2VcbiAgfVxuXG4gIGJpbmRDb21wbGV0aW9uUGVyY2VudGFnZSgpIHtcbiAgICBsZXQgY29tcGxldGlvblBlcmNlbnRhZ2UgPSAwXG4gICAgbGV0IGNvbXBsZXRpb25TdGF0dXMgPSAwXG4gICAgaWYgKHRoaXMubGFuZ3VhZ2VNYXBQcm9ncmVzcyAmJiBPYmplY3Qua2V5cyh0aGlzLmxhbmd1YWdlTWFwUHJvZ3Jlc3MpLmxlbmd0aCkge1xuICAgICAgbGV0IGxhbmdQZXJjZW50YWdlID0gdGhpcy5sYW5ndWFnZU1hcFByb2dyZXNzW3RoaXMuc2VsZWN0ZWRMYW5ndWFnZS5sYW5nSWRdIHx8IDBcbiAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlID0gbGFuZ1BlcmNlbnRhZ2VcbiAgICAgIGNvbXBsZXRpb25TdGF0dXMgPSBsYW5nUGVyY2VudGFnZSA+PSAxMDAgPyAyIDogMFxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZW5yb2xsZWREYXRhID0gdGhpcy50b2NTdmMuZmluZEVucm9sbWVudEJ5Q29sbGVjdGlvbklkKHRoaXMudXNlckVucm9sbG1lbnRMaXN0LCAodGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyIHx8ICcnKSlcbiAgICAgIGlmIChlbnJvbGxlZERhdGEgJiYgZW5yb2xsZWREYXRhLmNvbXBsZXRpb25QZXJjZW50YWdlKSB7XG4gICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlID0gZW5yb2xsZWREYXRhLmNvbXBsZXRpb25QZXJjZW50YWdlXG4gICAgICAgIGNvbXBsZXRpb25TdGF0dXMgPSBlbnJvbGxlZERhdGEuc3RhdHVzXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udGVudCkge1xuICAgICAgdGhpcy5jb250ZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID0gY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgIHRoaXMuY29udGVudC5jb21wbGV0aW9uU3RhdHVzID0gY29tcGxldGlvblN0YXR1c1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUFjY2VwdFJlbGV2ZW50KCkge1xuICAgIHRoaXMuc2F2ZUZlZWRiYWNrKCcnLCAxKVxuICB9XG5cbiAgaGFuZGxlRGVjbGluZVJlbGV2ZW50KCkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTm9uUmVsZXZlbnRGZWVkYmFja0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgd2lkdGg6ICc1MDJweCcsXG4gICAgICBwYW5lbENsYXNzOiBbJ3JlbGV2ZW50LWZlZWRiYWNrLWRpYWxvZyddLFxuICAgIH0pXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLnNhdmVGZWVkYmFjayhyZXN1bHQsIDApXG4gICAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWFsb2dSZWYuY2xvc2UoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjb250ZW50Vmlld0V2ZW50Rm9yTmV0Q29yZShldmVudFR5cGU6IGFueSkge1xuICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy5uZXRjb3JlQ29uZmlnICYmIHRoaXMuY29uZmlnU3ZjLm5ldGNvcmVDb25maWcubmV0Y29yZVdlYkNvbmZpZyAgLy8gTk9TT05BUlxuICAgICAgJiYgdGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZy5uZXRjb3JlV2ViQ29uZmlnLmlzQWN0aXZlIC8vIE5PU09OQVJcbiAgICAgICYmIHRoaXMuY29uZmlnU3ZjLm5ldGNvcmVDb25maWcubmV0Y29yZVdlYkNvbmZpZy5ldmVudHMgLy8gTk9TT05BUlxuICAgICAgJiYgdGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZy5uZXRjb3JlV2ViQ29uZmlnLmV2ZW50cy5jb250ZW50X3ZpZXcgLy8gTk9TT05BUlxuICAgICAgJiYgdGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZy5uZXRjb3JlV2ViQ29uZmlnLmV2ZW50cy5jb250ZW50X3ZpZXcuaXNBY3RpdmUgLy8gTk9TT05BUlxuICAgICkge1xuICAgICAgbGV0IHBheWxvYWQ6IGFueSA9IHt9XG4gICAgICAvLyBpZiAodGhpcy5jb25maWdTdmMgJiYgdGhpcy5jb25maWdTdmMudW5NYXBwZWRVc2VyICYmIHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlci5pZGVudGlmaWVyKSB7IC8vIE5PU09OQVJcbiAgICAgIC8vICAgcGF5bG9hZFsncGtedXNlcmlkJ10gPSB0aGlzLmNvbmZpZ1N2Yy51bk1hcHBlZFVzZXIuaWRlbnRpZmllci50cmltKCkudG9Mb3dlckNhc2UoKVxuICAgICAgLy8gfVxuICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQubmFtZSkge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X25hbWUnXSA9IHRoaXMuY29udGVudC5uYW1lXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5jb3Vyc2VDYXRlZ29yeSkge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X2NhdGVnb3J5J10gPSB0aGlzLmNvbnRlbnQuY291cnNlQ2F0ZWdvcnlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmlkZW50aWZpZXIpIHtcbiAgICAgICAgcGF5bG9hZFsnY29udGVudF9pZCddID0gdGhpcy5jb250ZW50LmlkZW50aWZpZXJcbiAgICAgIH1cbiAgICAgIC8vIGlmKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQubmFtZSkge1xuICAgICAgcGF5bG9hZFsnY29udGVudF91cmwnXSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG4gICAgICAvLyB9XG4gICAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5hcHBJY29uKSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfaW1hZ2UnXSA9IHRoaXMuY29udGVudC5hcHBJY29uXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5kdXJhdGlvbikge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X2R1cmF0aW9uJ10gPSB0aGlzLmNvbnRlbnQuZHVyYXRpb24gJiYgTnVtYmVyKHRoaXMuY29udGVudC5kdXJhdGlvbikgPiAwID8gTnVtYmVyKHRoaXMuY29udGVudC5kdXJhdGlvbikgOiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X2R1cmF0aW9uJ10gPSAwXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5hdmdSYXRpbmdcbiAgICAgICkge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X3JhdGluZyddID0gdGhpcy5jb250ZW50LmF2Z1JhdGluZ1xuICAgICAgICBwYXlsb2FkWydjb250ZW50IHJhdGluZyddID0gdGhpcy5jb250ZW50LmF2Z1JhdGluZ1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQudG90YWxOb09mUmF0aW5nKSB7XG4gICAgICAgIHBheWxvYWRbJ25vX3VzZXJzX3JhdGVkJ10gPSB0aGlzLmNvbnRlbnQudG90YWxOb09mUmF0aW5nXG4gICAgICB9XG4gICAgICAvLyBpZih0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50Lm5hbWUpIHtcbiAgICAgIHBheWxvYWRbJ2xlYXJuaW5nX3BhdGhfY29udGVudCddID0gdGhpcy51c2VyRW5yb2xsbWVudExpc3QgJiYgdGhpcy51c2VyRW5yb2xsbWVudExpc3QubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlXG4gICAgICBwYXlsb2FkWydsZWFybmluZyBwYXRoIGNvbnRlbnQnXSA9IHRoaXMudXNlckVucm9sbG1lbnRMaXN0ICYmIHRoaXMudXNlckVucm9sbG1lbnRMaXN0Lmxlbmd0aCA/IHRydWUgOiBmYWxzZVxuICAgICAgLy8gfVxuICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQuc291cmNlKSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfcHJvdmlkZXJfbmFtZSddID0gdGhpcy5jb250ZW50LnNvdXJjZVxuICAgICAgfVxuICAgICAgLy8gY29uc29sZS5sb2coJ3BheWxvYWQnLCBwYXlsb2FkKVxuICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3ZpZXcnKSB7XG4gICAgICAgIHRoaXMubmV0Q29yZVNlcnZpY2UudHJhY2tFdmVudEZvckNvbnRlbnRBbmRFdmVudCgnY29udGVudF92aWV3JywgdGhpcy5jb25maWdTdmMudW5NYXBwZWRVc2VyLmlkZW50aWZpZXIudHJpbSgpLnRvTG93ZXJDYXNlKCksIHBheWxvYWQpXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vucm9sbCcpIHtcbiAgICAgICAgdGhpcy5uZXRDb3JlU2VydmljZS50cmFja0V2ZW50Rm9yQ29udGVudEFuZEV2ZW50KCdjb250ZW50X2Vucm9sbWVudCcsIHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlci5pZGVudGlmaWVyLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCBwYXlsb2FkKVxuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgdGhpcy5uZXRDb3JlU2VydmljZS50cmFja0V2ZW50Rm9yQ29udGVudEFuZEV2ZW50KCdjb250ZW50X2NvbXBsZXRpb24nLCB0aGlzLmNvbmZpZ1N2Yy51bk1hcHBlZFVzZXIuaWRlbnRpZmllci50cmltKCkudG9Mb3dlckNhc2UoKSwgcGF5bG9hZClcbiAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIHNlY29uZHNUb1RpbWUoZDogYW55KSB7XG4gICAgZCA9IE51bWJlcihkKVxuICAgIHZhciBoID0gTWF0aC5mbG9vcihkIC8gMzYwMClcbiAgICB2YXIgbSA9IE1hdGguZmxvb3IoZCAlIDM2MDAgLyA2MClcbiAgICB2YXIgcyA9IE1hdGguZmxvb3IoZCAlIDM2MDAgJSA2MClcblxuICAgIHZhciBoRGlzcGxheSA9IGggPiAwID8gaCArIChoID09IDEgPyBcIiBob3VyLCBcIiA6IFwiIGhvdXJzLCBcIikgOiBcIlwiXG4gICAgdmFyIG1EaXNwbGF5ID0gbSA+IDAgPyBtICsgKG0gPT0gMSA/IFwiIG1pbnV0ZSwgXCIgOiBcIiBtaW51dGVzLCBcIikgOiBcIlwiXG4gICAgdmFyIHNEaXNwbGF5ID0gcyA+IDAgPyBzICsgKHMgPT0gMSA/IFwiIHNlY29uZFwiIDogXCIgc2Vjb25kc1wiKSA6IFwiXCJcbiAgICByZXR1cm4gaERpc3BsYXkgKyBtRGlzcGxheSArIHNEaXNwbGF5XG4gIH1cblxuXG4gIGFzeW5jIHNhdmVGZWVkYmFjayhjb21tZW50OiBzdHJpbmcsIHJhdGluZyA9IDApIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgXCJyZWNvbW1lbmRhdGlvbl9pZFwiOiB0aGlzLnJlY29tbWVuZGVkQ291cnNlc0lkLFxuICAgICAgXCJjb3Vyc2VfaWRcIjogdGhpcy5jb3Vyc2VJRCxcbiAgICAgIFwicmF0aW5nXCI6IHJhdGluZyxcbiAgICAgIFwiY29tbWVudHNcIjogY29tbWVudCxcbiAgICAgIFwidXNlcl9pZFwiOiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZT8udXNlcklkIHx8ICcnXG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb250ZW50TGliU3ZjLnNhdmVGZWVkYmFja1Nha3NoYW1BSShwYXlsb2FkKS50b1Byb21pc2UoKS5jYXRjaCgoKSA9PiB7IH0pXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlPy5tZXNzYWdlKSB7XG4gICAgICB0aGlzLm1hdFNuYWNrYmFyTmV3Lm9wZW4oXG4gICAgICAgICdUaGFuayB5b3UgZm9yIHlvdXIgZmVlZGJhY2suJywgJ1gnLFxuICAgICAgICB7IGR1cmF0aW9uOiBTTkFDS0JBUl9EVVJBVElPTiwgcGFuZWxDbGFzczogWydzdWNjZXNzJ10gfVxuICAgICAgKVxuICAgICAgdGhpcy5mZWVkYmFja0dpdmVuID0geyBjb3Vyc2VfaWQ6IHRoaXMuY291cnNlSUQsIHJhdGluZzogcmF0aW5nLCBjb21tZW50czogY29tbWVudCB9XG5cbiAgICB9IGVsc2UgaWYgKCFyZXNwb25zZSkge1xuICAgICAgdGhpcy5tYXRTbmFja2Jhck5ldy5vcGVuKFxuICAgICAgICAnU29tZXRoaW5nIGlzIHdyb25nLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicsICdYJyxcbiAgICAgICAgeyBkdXJhdGlvbjogU05BQ0tCQVJfRFVSQVRJT04sIHBhbmVsQ2xhc3M6IFsnZXJyb3InXSB9XG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcGxheVJlc3VtZUZvckFJKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGlmICh0aGlzLmZpcnN0UmVzb3VyY2VMaW5rKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmZpcnN0UmVzb3VyY2VMaW5rLnVybF0sIHsgcXVlcnlQYXJhbXM6IHRoaXMuZmlyc3RSZXNvdXJjZUxpbmsucXVlcnlQYXJhbXMgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIGVucm9sbFVzZXJUb0FJKCkge1xuICAgIHRoaXMuZnJvbUFJVHV0b3IgPSB0cnVlXG4gICAgdGhpcy5oYW5kbGVBdXRvQmF0Y2hBc3NpZ24oKVxuICB9XG5cbiAgb3BlblN1cnZleUZvcm1Qb3B1cChldmVudDogYm9vbGVhbikge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5vcGVuQ29tcGxldGlvblN1cnZleUZvcm1Qb3B1cCgpXG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVQcmVBc3Nlc3NtZW50UXVlcnkodHlwZTogJ1JFU1VNRScgfCAnU1RBUlRfT1ZFUicgfCAnU1RBUlQnKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgaWYgKHRoaXMuZmlyc3RSZXNvdXJjZUxpbmsgJiYgKHR5cGUgPT09ICdTVEFSVCcgfHwgdHlwZSA9PT0gJ1NUQVJUX09WRVInKSkge1xuICAgICAgbGV0IHFQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgIC4uLnRoaXMuZmlyc3RSZXNvdXJjZUxpbmsucXVlcnlQYXJhbXMsXG4gICAgICAgIHZpZXdNb2RlOiB0eXBlLFxuICAgICAgICBiYXRjaElkOiB0aGlzLmdldEJhdGNoSWQoKSxcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnRleHRJZCAmJiB0aGlzLmNvbnRleHRQYXRoKSB7XG4gICAgICAgIHFQYXJhbXMgPSB7XG4gICAgICAgICAgLi4ucVBhcmFtcyxcbiAgICAgICAgICBjb2xsZWN0aW9uSWQ6IHRoaXMuY29udGV4dElkLFxuICAgICAgICAgIGNvbGxlY3Rpb25UeXBlOiB0aGlzLmNvbnRleHRQYXRoLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICAgIGRlbGV0ZSBxUGFyYW1zLnZpZXdNb2RlXG4gICAgICB9XG4gICAgICBxUGFyYW1zID0ge1xuICAgICAgICAuLi5xUGFyYW1zLFxuICAgICAgICBjaGFubmVsSWQ6IHRoaXMuY2hhbm5lbElkLFxuICAgICAgfVxuICAgICAgcmV0dXJuIHFQYXJhbXNcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXN1bWVEYXRhTGluayAmJiB0eXBlID09PSAnUkVTVU1FJykge1xuICAgICAgbGV0IHFQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgIC4uLnRoaXMucmVzdW1lRGF0YUxpbmsucXVlcnlQYXJhbXMsXG4gICAgICAgIGJhdGNoSWQ6IHRoaXMuZ2V0QmF0Y2hJZCgpLFxuICAgICAgICB2aWV3TW9kZTogJ1JFU1VNRScsXG4gICAgICAgIC8vIGNvdXJzZU5hbWU6IHRoaXMuY29udGVudCA/IHRoaXMuY29udGVudC5uYW1lIDogJycsXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb250ZXh0SWQgJiYgdGhpcy5jb250ZXh0UGF0aCkge1xuICAgICAgICBxUGFyYW1zID0ge1xuICAgICAgICAgIC4uLnFQYXJhbXMsXG4gICAgICAgICAgY29sbGVjdGlvbklkOiB0aGlzLmNvbnRleHRJZCxcbiAgICAgICAgICBjb2xsZWN0aW9uVHlwZTogdGhpcy5jb250ZXh0UGF0aCxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZm9yUHJldmlldykge1xuICAgICAgICBkZWxldGUgcVBhcmFtcy52aWV3TW9kZVxuICAgICAgfVxuICAgICAgcVBhcmFtcyA9IHtcbiAgICAgICAgLi4ucVBhcmFtcyxcbiAgICAgICAgY2hhbm5lbElkOiB0aGlzLmNoYW5uZWxJZCxcbiAgICAgIH1cbiAgICAgIHJldHVybiBxUGFyYW1zXG4gICAgfVxuICAgIGlmICh0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYmF0Y2hJZDogdGhpcy5nZXRCYXRjaElkKCksXG4gICAgICB2aWV3TW9kZTogdHlwZSxcbiAgICB9XG4gIH1cblxuICByb3V0ZVRvUHJlQXNzZXNzZW50KCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YSkge1xuICAgICAgLy8gdGhpcy5nZW5lcmF0ZVByZUFzc2Vzc21lbnRRdWVyeSgnU1RBUlQnKVxuICAgICAgbGV0IGZpcnN0UmVzb3VyY2UgPSB0aGlzLmNvbnRlbnRSZWFkRGF0YS5wcmVFbnJvbG1lbnRSZXNvdXJjZXNbMF1cbiAgICAgIGxldCBtaW1lVHlwZSA9IGZpcnN0UmVzb3VyY2U/LmNvdXJzZUNhdGVnb3J5ID09PSAnUHJlIEVucm9sbWVudCBBc3Nlc3NtZW50JyA/ICdhcHBsaWNhdGlvbi92bmQuc3VuYmlyZC5xdWVzdGlvbnNldCcgOiBmaXJzdFJlc291cmNlLm1pbWVUeXBlXG4gICAgICB0aGlzLmZpcnN0UmVzb3VyY2VMaW5rID0gdmlld2VyUm91dGVHZW5lcmF0b3IoXG4gICAgICAgIGZpcnN0UmVzb3VyY2UuaWRlbnRpZmllcixcbiAgICAgICAgbWltZVR5cGUsXG4gICAgICAgIHRoaXMuY29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyLFxuICAgICAgICB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnksXG4gICAgICAgIHRoaXMuZm9yUHJldmlldyxcbiAgICAgICAgdGhpcy5jb250ZW50UmVhZERhdGEgJiYgdGhpcy5jb250ZW50UmVhZERhdGEucHJlRW5yb2xtZW50UmVzb3VyY2VzWzBdPy5wcmltYXJ5Q2F0ZWdvcnkgfHwgJycsXG4gICAgICAgICcnLFxuICAgICAgKVxuICAgICAgbGV0IHJvdXRlckxpbmsgPSB0aGlzLmZpcnN0UmVzb3VyY2VMaW5rPy51cmxcbiAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHRoaXMuZ2VuZXJhdGVQcmVBc3Nlc3NtZW50UXVlcnkoJ1NUQVJUJylcbiAgICAgIHF1ZXJ5UGFyYW1zID0geyAuLi5xdWVyeVBhcmFtcywgcHJlQXNzZXNzbWVudDogJ3RydWUnIH1cbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHtyb3V0ZXJMaW5rfWBdLCB7IHF1ZXJ5UGFyYW1zIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0UHJlQXNzZXNzbWVudFJlcXVpcmVkKCkge1xuICAgIHRoaXMucHJlQXNzZXNzbWVudFJlcXVpcmVkRmxhZyA9IGZhbHNlXG4gICAgaWYgKHRoaXMuY29udGVudFJlYWREYXRhPy5wcmVFbnJvbG1lbnRSZXNvdXJjZXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb250ZW50UmVhZERhdGE/LnByZUVucm9sbWVudFJlc291cmNlcz8uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW0/LmlzTWFuZGF0b3J5KSB7XG4gICAgICAgICAgdGhpcy5wcmVBc3Nlc3NtZW50UmVxdWlyZWRGbGFnID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGdldFByZUFzc2Vzc21lbnRDb21wbGV0aW9uU3RhdHVzKCkge1xuICAgIHRoaXMucHJlQXNzZXNzbWVudENvbXBsZXRpb25TdGF0dXMgPSBmYWxzZVxuICAgIGxldCBwcmVFbnJvbGxtZW50UmVzb3VyY2VzQXJyOiBhbnkgPSBbXVxuICAgIGxldCBwcmVFbnJvbGxtZW50TWFuZGF0b3J5UmVzb3VyY2VzQXJyOiBhbnkgPSBbXVxuICAgIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YT8ucHJlRW5yb2xtZW50UmVzb3VyY2VzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29udGVudFJlYWREYXRhPy5wcmVFbnJvbG1lbnRSZXNvdXJjZXM/LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBwcmVFbnJvbGxtZW50UmVzb3VyY2VzQXJyLnB1c2goaXRlbT8uaWRlbnRpZmllcilcbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbT8uaXNNYW5kYXRvcnkpIHtcbiAgICAgICAgICBwcmVFbnJvbGxtZW50TWFuZGF0b3J5UmVzb3VyY2VzQXJyLnB1c2goaXRlbT8uaWRlbnRpZmllcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKHByZUVucm9sbG1lbnRSZXNvdXJjZXNBcnIgJiYgcHJlRW5yb2xsbWVudFJlc291cmNlc0Fyci5sZW5ndGgpIHtcbiAgICAgIGxldCByZXEgPSB7XG4gICAgICAgIFwicmVxdWVzdFwiOiB7XG4gICAgICAgICAgXCJjb250ZW50SWRzXCI6IHByZUVucm9sbG1lbnRSZXNvdXJjZXNBcnIsXG4gICAgICAgICAgXCJmaWVsZHNcIjogW1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50b2NTdmMucmVhZFByZUVucm9sbG1lbnRSZXNvdXJjZXNTdGF0ZShyZXEpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGxldCBtYW5kYXRvcnlJZHNDb21wbGV0ZWQgPSBbXVxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnJlc3VsdCAmJiBkYXRhLnJlc3VsdC5jb250ZW50TGlzdCAmJiBkYXRhLnJlc3VsdC5jb250ZW50TGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEucmVzdWx0LmNvbnRlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQuY29udGVudExpc3RbaV1bJ3N0YXR1cyddID09PSAyICYmIHByZUVucm9sbG1lbnRNYW5kYXRvcnlSZXNvdXJjZXNBcnIuaW5jbHVkZXMoZGF0YS5yZXN1bHQuY29udGVudExpc3RbaV1bJ2NvbnRlbnRJZCddKSkge1xuICAgICAgICAgICAgICBtYW5kYXRvcnlJZHNDb21wbGV0ZWQucHVzaChkYXRhLnJlc3VsdC5jb250ZW50TGlzdFtpXVsnY29udGVudElkJ10pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmVFbnJvbGxtZW50UmVzb3VyY2VzQXJyPy5sZW5ndGggPT09IGRhdGEucmVzdWx0LmNvbnRlbnRMaXN0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucHJlQXNzZXNzbWVudENvbXBsZXRpb25TdGF0dXMgPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIGlmIChtYW5kYXRvcnlJZHNDb21wbGV0ZWQubGVuZ3RoID09PSBwcmVFbnJvbGxtZW50TWFuZGF0b3J5UmVzb3VyY2VzQXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wcmVBc3Nlc3NtZW50Q29tcGxldGlvblN0YXR1cyA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcmVBc3Nlc3NtZW50Q29tcGxldGlvblN0YXR1cyA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJlQXNzZXNzbWVudENvbXBsZXRpb25TdGF0dXMgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGF0YVRyYW5zZmVyU3ZjLnNldEVucm9sbERhdGEobnVsbClcbiAgICB0aGlzLmdldFNlcnZlckRhdGVUaW1lKClcbiAgICB0aGlzLm1vYmlsZTEyMDAgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDEyMDFcbiAgICB0aGlzLmdldEkxOE5UcmFuc2xhdGlvbnMoKVxuICAgIHRoaXMubG9hZExlYXJuZXJBZHZpc29yeURhdGEoKVxuICAgIHRoaXMuc2V0dXBTZWxlY3RlZEJhdGNoU3Vic2NyaXB0aW9uKClcbiAgICB0aGlzLnNldENoYW5uZWxJZCgpXG4gICAgdGhpcy5jaGVja0lmcmFtZUNvbnRleHQoKVxuICAgIHRoaXMucXVlcnlQYXJhbXNEYXRhID0gdGhpcy5zZXR1cFJvdXRlU3Vic2NyaXB0aW9ucygpXG4gICAgdGhpcy5zZXR1cEZyYWdtZW50U3Vic2NyaXB0aW9uKClcbiAgICB0aGlzLnNldHVwQmF0Y2hTdWJzY3JpcHRpb25zKClcbiAgICB0aGlzLmNvbmZpZ3VyZURlZmF1bHRMb2dvKClcbiAgICB0aGlzLmNvbmZpZ3VyZUZlYXR1cmVGbGFncygpXG4gICAgdGhpcy5jaGVja1JlZ2lzdHJhdGlvblN0YXR1cygpXG4gICAgdGhpcy5zZXR1cFJvdXRlckV2ZW50U3Vic2NyaXB0aW9uKClcbiAgICB0aGlzLmdldENvbnRlbnRDcmVhdG9yRGF0YSgpXG4gICAgdGhpcy5zZXR1cEhhc2htYXBVcGRhdGVTdWJzY3JpcHRpb24oKVxuICAgIFxuICAgIHRoaXMudXNlcklkID0gdGhpcy5jb25maWdTdmM/LnVzZXJQcm9maWxlPy51c2VySWQgfHwgJydcbiAgfVxuXG4gIHByaXZhdGUgaW5pdERhdGEoZGF0YTogRGF0YSkge1xuICAgIGNvbnN0IGluaXREYXRhOiBhbnkgPSB0aGlzLnRvY1N2Yy5pbml0RGF0YShkYXRhLCB0cnVlKVxuICAgIHRoaXMuc2V0RXJyb3JDb2RlKGluaXREYXRhLmVycm9yQ29kZSlcbiAgICB0aGlzLnNldHVwQmF0Y2hDb250cm9sU3Vic2NyaXB0aW9uKClcbiAgICB0aGlzLnRvY1N2Yy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gIH1cblxuICBwcml2YXRlIHNldEVycm9yQ29kZShlcnJvckNvZGU6IE5zQXBwVG9jLkVXc1RvY0Vycm9yQ29kZSkge1xuICAgIHRoaXMuZXJyb3JDb2RlID0gZXJyb3JDb2RlXG4gICAgc3dpdGNoICh0aGlzLmVycm9yQ29kZSkge1xuICAgICAgY2FzZSBOc0FwcFRvYy5FV3NUb2NFcnJvckNvZGUuQVBJX0ZBSUxVUkU6XG4gICAgICBjYXNlIE5zQXBwVG9jLkVXc1RvY0Vycm9yQ29kZS5JTlZBTElEX0RBVEE6XG4gICAgICBjYXNlIE5zQXBwVG9jLkVXc1RvY0Vycm9yQ29kZS5OT19EQVRBOlxuICAgICAgICB0aGlzLmVycm9yV2lkZ2V0RGF0YS53aWRnZXREYXRhLmVycm9yVHlwZSA9IEVycm9yVHlwZS5pbnRlcm5hbFNlcnZlclxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5lcnJvcldpZGdldERhdGEud2lkZ2V0RGF0YS5lcnJvclR5cGUgPSBFcnJvclR5cGUuc29tZXRoaW5nV3JvbmdcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuXG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplVG9jU3RydWN0dXJlKCkge1xuICAgIHRoaXMuY29udGVudFBhcmVudHMgPSB7fVxuICAgIHRoaXMudG9jU3RydWN0dXJlID0ge1xuICAgICAgYXNzZXNzbWVudDogMCxcbiAgICAgIGNvdXJzZTogMCxcbiAgICAgIGhhbmRzT246IDAsXG4gICAgICBpbnRlcmFjdGl2ZVZpZGVvOiAwLFxuICAgICAgbGVhcm5pbmdNb2R1bGU6IDAsXG4gICAgICBvdGhlcjogMCxcbiAgICAgIHBkZjogMCxcbiAgICAgIHN1cnZleTogMCxcbiAgICAgIHBvZGNhc3Q6IDAsXG4gICAgICBwcmFjdGljZVRlc3Q6IDAsXG4gICAgICBmaW5hbFRlc3Q6IDAsXG4gICAgICBxdWl6OiAwLFxuICAgICAgdmlkZW86IDAsXG4gICAgICB3ZWJNb2R1bGU6IDAsXG4gICAgICB3ZWJQYWdlOiAwLFxuICAgICAgeW91dHViZTogMCxcbiAgICAgIGludGVyYWN0aXZlY29udGVudDogMCxcbiAgICAgIG9mZmxpbmVTZXNzaW9uOiAwLFxuICAgICAgcHJlRW5yb2xsbWVudEFzc2Vzc21lbnQ6IDAsXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEJhdGNoQ29udHJvbFN1YnNjcmlwdGlvbigpIHtcbiAgICB0aGlzLmJhdGNoQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChiYXRjaDogTnNDb250ZW50LklCYXRjaCkgPT4ge1xuICAgICAgaWYgKGJhdGNoKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQmF0Y2hFbnJvbGxtZW50KGJhdGNoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUJhdGNoRW5yb2xsbWVudChiYXRjaDogTnNDb250ZW50LklCYXRjaCkge1xuICAgIHRoaXMuZGlzYWJsZUVucm9sbEJ0biA9IHRydWVcbiAgICBsZXQgdXNlcklkID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGU/LnVzZXJJZCB8fCAnJ1xuXG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgcmVxdWVzdDoge1xuICAgICAgICB1c2VySWQsXG4gICAgICAgIGNvdXJzZUlkOiBiYXRjaC5jb3Vyc2VJZCxcbiAgICAgICAgYmF0Y2hJZDogYmF0Y2guYmF0Y2hJZCxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgdGhpcy5jb250ZW50U3ZjLmVucm9sbFVzZXJUb0JhdGNoKHJlcSkudGhlbigoZGF0YWI6IGFueSkgPT4ge1xuICAgICAgaWYgKGRhdGFiPy5yZXN1bHQ/LnJlc3BvbnNlID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVTdWNjZXNzZnVsRW5yb2xsbWVudChiYXRjaClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRW5yb2xsbWVudEZhaWx1cmUoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVN1Y2Nlc3NmdWxFbnJvbGxtZW50KGJhdGNoOiBOc0NvbnRlbnQuSUJhdGNoKSB7XG4gICAgdGhpcy5iYXRjaERhdGEgPSB7XG4gICAgICBjb250ZW50OiBbYmF0Y2hdLFxuICAgICAgZW5yb2xsZWQ6IHRydWUsXG4gICAgfVxuICAgIHRoaXMudG9jU3ZjLmdldFNlbGVjdGVkQmF0Y2hEYXRhKHRoaXMuYmF0Y2hEYXRhKVxuICAgIHRoaXMudG9jU3ZjLm1hcFNlc3Npb25Db21wbGV0aW9uUGVyY2VudGFnZSh0aGlzLmJhdGNoRGF0YSlcbiAgICBcbiAgICAvLyBDUklUSUNBTDogRm9yIExlYXJuaW5nIFBhdGh3YXlzLCBjb21wdXRlIG1pbGVzdG9uZSBsb2NraW5nIHN0YXR1cyBhZnRlciBlbnJvbGxtZW50XG4gICAgLy8gVGhpcyBlbnN1cmVzIG1pbGVzdG9uZXMgYXJlIHByb3Blcmx5IGxvY2tlZCB1bnRpbCBwcmUtYXNzZXNzbWVudCBpcyBjb21wbGV0ZWRcbiAgICBpZiAodGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0xlYXJuaW5nIFBhdGh3YXknKSB7XG4gICAgICB0aGlzLnRvY1N2Yy5jYWxsSGlyYXJjaHlQcm9ncmVzc0hhc2htYXAodGhpcy5jb250ZW50KVxuICAgICAgdGhpcy50b2NTdmMuY29tcHV0ZU1pbGVzdG9uZUxvY2tpbmdTdGF0dXModHJ1ZSlcbiAgICAgIHRoaXMuc3luY01pbGVzdG9uZUxvY2tTdGF0dXMoKVxuICAgIH1cbiAgICBcbiAgICB0aGlzLnJvdXRlckNoYW5nZUhhbmRsZXIodHJ1ZSlcbiAgICB0aGlzLm9wZW5TbmFja2JhcignRW5yb2xsZWQgU3VjY2Vzc2Z1bGx5IScpXG4gICAgdGhpcy5kaXNhYmxlRW5yb2xsQnRuID0gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRW5yb2xsbWVudEZhaWx1cmUoKSB7XG4gICAgdGhpcy5vcGVuU25hY2tiYXIoJ1NvbWV0aGluZyB3ZW50IHdyb25nLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgdGhpcy5kaXNhYmxlRW5yb2xsQnRuID0gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgbG9hZExlYXJuZXJBZHZpc29yeURhdGEoKSB7XG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5wYWdlRGF0YSAmJiB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEucGFnZURhdGEuZGF0YSkge1xuICAgICAgdGhpcy5sZWFybkFkdmlzb3J5RGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5wYWdlRGF0YS5kYXRhLmxlYXJuZXJBZHZpc29yeVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBTZWxlY3RlZEJhdGNoU3Vic2NyaXB0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRCYXRjaFN1YnNjcmlwdGlvbiA9IHRoaXMudG9jU3ZjLmdldFNlbGVjdGVkQmF0Y2guc3Vic2NyaWJlKGJhdGNoRGF0YSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkQmF0Y2hEYXRhID0gYmF0Y2hEYXRhXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hhbm5lbElkKCkge1xuICAgIHRoaXMuY2hhbm5lbElkID0gdGhpcy50ZWxlbWV0cnlTZXJ2aWNlLnRlbGVtZXRyeUNvbmZpZ1xuICAgICAgPyB0aGlzLnRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5Q29uZmlnLmNoYW5uZWxcbiAgICAgIDogJydcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZnJhbWVDb250ZXh0KCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmlzSW5JZnJhbWUgPSB3aW5kb3cuc2VsZiAhPT0gd2luZG93LnRvcFxuICAgIH0gY2F0Y2ggKF9leCkge1xuICAgICAgdGhpcy5pc0luSWZyYW1lID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwUm91dGVTdWJzY3JpcHRpb25zKCkge1xuICAgIGxldCBxdWVyeVBhcmFtc3RlbXA6IGFueSA9IHt9XG4gICAgaWYgKHRoaXMucm91dGUpIHtcbiAgICAgIHRoaXMuc2tlbGV0b25Mb2FkZXIgPSB0cnVlXG4gICAgICB0aGlzLnJvdXRlU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZShhc3luYyAoZGF0YTogRGF0YSkgPT4ge1xuICAgICAgICBpZiAoZGF0YT8uY29udGVudD8uZGF0YT8uaWRlbnRpZmllcikge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zdGVtcCA9IGF3YWl0IHRoaXMucHJvY2Vzc1JvdXRlRGF0YShkYXRhKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHRlbXBEYXRhID0ge1xuICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICBkYXRhOiB0aGlzLmlucHV0Q29udGVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBxdWVyeVBhcmFtc3RlbXAgPSBhd2FpdCB0aGlzLnByb2Nlc3NSb3V0ZURhdGEodGVtcERhdGEpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBxdWVyeVBhcmFtc3RlbXBcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1JvdXRlRGF0YShkYXRhOiBEYXRhKSB7XG4gICAgdGhpcy5jb3Vyc2VJRCA9ICBkYXRhPy5jb250ZW50Py5kYXRhPy5zdGF0dXMgPT09ICdSZXRpcmVkJyA/ICcnIDogZGF0YS5jb250ZW50LmRhdGE/LmlkZW50aWZpZXJcbiAgICBjb25zdCBpbml0RGF0YSA9IHRoaXMudG9jU3ZjLmluaXREYXRhKGRhdGEsIHRydWUpXG4gICAgLy8gR2V0IHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICBjb25zdCBxdWVyeVBhcmFtc0RhdGFUZW1wID0gYXdhaXQgdGhpcy5nZXRRdWVyeVBhcmFtcygpXG4gICAgLy8gSGFuZGxlIG11bHRpbGluZ3VhbCBjb250ZW50IGlmIG1sSWQgaXMgcHJlc2VudCBpbiBxdWVyeSBwYXJhbWV0ZXJzXG4gICAgaWYgKHF1ZXJ5UGFyYW1zRGF0YVRlbXAuTUxJZCkge1xuICAgICAgLy8gU3RvcmUgdGhlIG9yaWdpbmFsIGNvbnRlbnQgZGF0YSBmb3IgcmVmZXJlbmNlXG4gICAgICB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEgPSBpbml0RGF0YS5jb250ZW50XG5cbiAgICAgIC8vIEZldGNoIHRoZSBtdWx0aWxpbmd1YWwgY29udGVudFxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYodGhpcy5iYXNlQ29udGVudFJlYWREYXRhLmlkZW50aWZpZXIgPT09IHF1ZXJ5UGFyYW1zRGF0YVRlbXAuTUxJZCl7XG4gICAgICAgICAgdGhpcy5jb250ZW50UmVhZERhdGEgPSBpbml0RGF0YS5jb250ZW50XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmZldGNoQ29udGVudFJlYWQocXVlcnlQYXJhbXNEYXRhVGVtcC5NTElkKVxuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICAvLyBJZiBtdWx0aWxpbmd1YWwgY29udGVudCBmZXRjaCBmYWlscywgZmFsbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjb250ZW50XG4gICAgICAgICAgdGhpcy5jb250ZW50UmVhZERhdGEgPSBpbml0RGF0YS5jb250ZW50XG4gICAgICAgICAgdGhpcy5sb2dnZXJTdmMud2FybignRmFpbGVkIHRvIGxvYWQgbXVsdGlsaW5ndWFsIGNvbnRlbnQsIHVzaW5nIG9yaWdpbmFsIGNvbnRlbnQgaW5zdGVhZCcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE9uIGVycm9yLCB1c2UgdGhlIG9yaWdpbmFsIGNvbnRlbnRcbiAgICAgICAgdGhpcy5jb250ZW50UmVhZERhdGEgPSBpbml0RGF0YS5jb250ZW50XG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdFcnJvciBsb2FkaW5nIG11bHRpbGluZ3VhbCBjb250ZW50OicsIGVycm9yKVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0ZhaWxlZCB0byBsb2FkIGNvbnRlbnQgaW4gc2VsZWN0ZWQgbGFuZ3VhZ2UnLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gbXVsdGlsaW5ndWFsIGNvbnRlbnQgcmVxdWVzdGVkLCB1c2UgdGhlIG9yaWdpbmFsIGNvbnRlbnRcbiAgICAgIHRoaXMuY29udGVudFJlYWREYXRhID0gaW5pdERhdGEuY29udGVudFxuICAgICAgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhID0gaW5pdERhdGEuY29udGVudFxuICAgIH1cbiAgICAvLyBBZGRlZCB0byBtYWtlIHN1cmUgdGhpcyByZWZlcmVuY2Ugd2FzIGluY29ycmVjdCwgYXNzaWduaW5nIGFnYWluIHRvIG1ha2Ugc3VyZSBnbG9iYWwgdmFyaWFibGUgaXMgcHJvcGVybHkgdXBkYXRlZFxuICAgIHRoaXMucXVlcnlQYXJhbXNEYXRhID0gcXVlcnlQYXJhbXNEYXRhVGVtcFxuXG4gICAgLy8gQ29udGludWUgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcHJvY2Vzc2luZ1xuICAgIHRoaXMubG9hZExhbmd1YWdlRGF0YSgpXG4gICAgdGhpcy5nZXRQcmVBc3Nlc3NtZW50Q29tcGxldGlvblN0YXR1cygpXG4gICAgdGhpcy5nZXRQcmVBc3Nlc3NtZW50UmVxdWlyZWQoKVxuXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVDb250ZW50UHJldmlld09yRW5yb2xsbWVudCgpXG5cbiAgICB0aGlzLmluaXRpYWxyb3V0ZURhdGEgPSBkYXRhXG4gICAgdGhpcy5sb2FkQmFubmVyQW5kVG9jQ29uZmlnKGRhdGEpXG4gICAgdGhpcy5mZXRjaFBvc3RBc3Nlc3NtZW50U3RhdHVzSWZOZWVkZWQoKVxuICAgIHRoaXMuaW5pdERhdGEoZGF0YSlcblxuICAgIC8vIHRvIGNsZWFyIHB1YmxpYyBzdXJ2ZXkgZGF0YSBpZiBhbnkgb24gbG9hZCxcbiAgICAvLyBpZiBub3QgY2xlYXJlZCB0aGVuIGl0IHdpbGwgYmUgY2xlYXJlZCBvbiBwb3B1cCBjbG9zZSxcbiAgICAvLyAgYnV0IHRoZSB0ZWFjaGVycyBub3RlcyB3aWxsIGJlIHZpc2libGUgb24gY2ltaW5nIGJhY2sgZnJvbSBwbGF5ZXIgcGFnZVxuICAgIGNvbnN0IHN1cnZleUlkID0gdGhpcy5lbnZpcm9ubWVudC5wdWJsaWNDb250ZW50U3VydmV5SWQgfHwgJydcbiAgICBjb25zdCBjb3Vyc2VJZCA9IHRoaXMuY29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyIHx8ICcnXG4gICAgdGhpcy5jbGVhckV4aXN0aW5nUHVibGljU3VydmV5RGF0YShzdXJ2ZXlJZCwgY291cnNlSWQpXG5cbiAgICByZXR1cm4gcXVlcnlQYXJhbXNEYXRhVGVtcFxuICB9XG5cbiAgb3BlbkNvbXBsZXRpb25TdXJ2ZXlGb3JtUG9wdXAoKSB7XG4gICAgaWYgKHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSAmJiBfLmdldCh0aGlzLmJhc2VDb250ZW50UmVhZERhdGEsICdjb21wbGV0aW9uU3VydmV5TGluaycpKSB7XG4gICAgICBjb25zdCBzSUQgPSB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuY29tcGxldGlvblN1cnZleUxpbmsuc3BsaXQoJ3N1cnZleXMvJylcbiAgICAgIGNvbnN0IHN1cnZleUlkID0gc0lEWzFdXG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBzdXJ2ZXlJZCxcbiAgICAgICAgY291cnNlTmFtZTogdGhpcy5jb250ZW50UmVhZERhdGE/Lm5hbWUgfHwgJycsXG4gICAgICAgIGNvdXJzZUlEOiB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciB8fCAnJyxcbiAgICAgICAgY29udGV4dE9yZ0lkOiB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uY3JlYXRlZEZvciAmJiB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uY3JlYXRlZEZvci5sZW5ndGggPiAwID9cbiAgICAgICAgICB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uY3JlYXRlZEZvclswXSA6ICcnXG4gICAgICB9XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbXBsZXRpb25TdXJ2ZXlGb3JtQ29tcG9uZW50LCB7XG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgd2lkdGg6ICc3NTBweCcsXG4gICAgICAgIG1heFdpZHRoOiAnOTB2dycsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICB9KVxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHRoaXMub3BlbkNvbmZpcm1hdGlvbkRpYWxvZygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2NrQ2VydGlmaWNhdGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgb3BlbkNvbmZpcm1hdGlvbkRpYWxvZygpIHtcbiAgICBjb25zdCBkaWFsb2dEYXRhID0ge1xuICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2FwcHRvYy5zdXJ2ZXlTdWJtaXR0ZWQnKSxcbiAgICAgICAgICBjbGFzc2VzOiAnZGlhbG9nLXRpdGxlJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYXBwdG9jLnN1cnZleUNvbXBsZXRlZENlcnRpZmljYXRlR2VuZXJhdGluZycpLFxuICAgICAgICAgIGNsYXNzZXM6ICdkaWFsb2ctZGVzY3JpcHRpb24gbWItMidcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGljb25OYW1lOiAnY2hlY2tfY2lyY2xlJyxcbiAgICAgIHR5cGU6ICdwcmltYXJ5JyxcbiAgICAgIGJ1dHRvbnNQb3NpdGlvbkNsYXNzOiAnanVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyJyxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzZXM6ICdzdWNjZXMtYnV0dG9uIHdpZHRoLWZ1bGwnLFxuICAgICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2FwcHRvYy5yZXR1cm5Ub1Byb2dyYW1QYWdlJyksXG4gICAgICAgICAgcmVzcG9uc2U6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgbWF4V2lkdGg6ICc5MHZ3J1xuICAgIH0pXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5sb2NrQ2VydGlmaWNhdGUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGxvYWRMYW5ndWFnZURhdGEoKSB7XG4gICAgdGhpcy5sYW5ndWFnZUxpc3QgPSB0aGlzLmNvbnRlbnRMYW5nU3ZjLmdldEFsbENvbnRlbnRMYW5ndWFnZXModGhpcy5jb250ZW50UmVhZERhdGEpXG4gICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0gdGhpcy5jb250ZW50TGFuZ1N2Yy5nZXRTZWxlY3RlZExhbmd1YWdlKHRoaXMuY29udGVudFJlYWREYXRhKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVDb250ZW50UHJldmlld09yRW5yb2xsbWVudCgpIHtcbiAgICBpZiAodGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRDb250ZW50Rm9yUHJldmlldygpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC8vIElmIHdlJ3JlIHdvcmtpbmcgd2l0aCBtdWx0aWxpbmd1YWwgY29udGVudCwgbWFrZSBzdXJlIHRvIGZldGNoIGl0cyBoaWVyYXJjaHlcbiAgICAgIC8vIGlmICh0aGlzLnF1ZXJ5UGFyYW1zRGF0YS5tbElkICYmIHRoaXMuY29udGVudFJlYWREYXRhICYmXG4gICAgICAvLyAgICAgdGhpcy5jb250ZW50UmVhZERhdGEuaWRlbnRpZmllciA9PT0gdGhpcy5xdWVyeVBhcmFtc0RhdGEubWxJZCkge1xuICAgICAgLy8gICAvLyBGZXRjaCBjb250ZW50IGhpZXJhcmNoeSBmb3IgdGhlIG11bHRpbGluZ3VhbCBjb250ZW50XG4gICAgICAvLyAgIHRyeSB7XG4gICAgICAvLyAgICAgYXdhaXQgdGhpcy5mZXRjaENvbnRlbnRIaWVyYXJjaHkodGhpcy5jb250ZW50UmVhZERhdGEuaWRlbnRpZmllcik7XG4gICAgICAvLyAgICAgLy8gQWZ0ZXIgZmV0Y2hpbmcgaGllcmFyY2h5LCB1cGRhdGUgVUkgY29tcG9uZW50c1xuICAgICAgLy8gICAgIHRoaXMuZ2V0TGVhcm5pbmdVcmxzKCk7XG4gICAgICAvLyAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGhpZXJhcmNoeSBmb3IgbXVsdGlsaW5ndWFsIGNvbnRlbnQ6JywgZXJyb3IpO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG5cbiAgICAgIC8vIENvbnRpbnVlIHdpdGggcmVndWxhciBlbnJvbGxtZW50IGZsb3dcbiAgICAgIHRoaXMuZmV0Y2hVc2VyRW5yb2xsbWVudERhdGFWMigpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkQ29udGVudEZvclByZXZpZXcoKSB7XG4gICAgdGhpcy50b2NTdmMuY29udGVudExvYWRlci5uZXh0KHRydWUpXG4gICAgYXdhaXQgdGhpcy5mZXRjaENvbnRlbnRIaWVyYXJjaHkodGhpcy5jb250ZW50UmVhZERhdGE/LmlkZW50aWZpZXIgfHwgJycpXG4gICAgdGhpcy50b2NTdmMuY29udGVudExvYWRlci5uZXh0KGZhbHNlKVxuICAgIHRoaXMudG9jU3ZjLmNoZWNrTW9kdWxlV2lzZURhdGEodGhpcy5jb250ZW50KVxuICAgIHRoaXMuc2tlbGV0b25Mb2FkZXIgPSBmYWxzZVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQmFubmVyQW5kVG9jQ29uZmlnKGRhdGE6IERhdGEpIHtcbiAgICB0aGlzLmJhbm5lcnMgPSBkYXRhPy5wYWdlRGF0YT8uZGF0YT8uYmFubmVycyB8fCBbXVxuICAgIHRoaXMudG9jU3ZjLnN1YnRpdGxlT25CYW5uZXJzID0gZGF0YT8ucGFnZURhdGE/LmRhdGE/LnN1YnRpdGxlT25CYW5uZXJzIHx8IGZhbHNlXG4gICAgdGhpcy50b2NTdmMuc2hvd0Rlc2NyaXB0aW9uID0gZGF0YT8ucGFnZURhdGE/LmRhdGE/LnNob3dEZXNjcmlwdGlvbiB8fCBmYWxzZVxuICAgIHRoaXMudG9jQ29uZmlnID0gZGF0YT8ucGFnZURhdGE/LmRhdGEgfHwge31cbiAgICBpZih0aGlzLmNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnkgPT09IE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuTEVBUk5JTkdfUEFUSFdBWSkge1xuICAgICAgdGhpcy5rcGFycmF5ID0gdGhpcy50b2NDb25maWcua2FybWFQb2ludHNMUCB8fCBbXG4gICAgICAgIHtcbiAgICAgICAgICBcImRpc3BsYXlCdXR0b25cIjogXCJSZXN1bWVcIixcbiAgICAgICAgICBcInRleHRCZWZvcmVJY29uXCI6IFwiZWFyblwiLFxuICAgICAgICAgIFwicG9pbnRzXCI6IFwiMjVcIixcbiAgICAgICAgICBcInRleHRBZnRlclBvaW50c1wiOiBcImthcm1hUG9pbnRzXCIsXG4gICAgICAgICAgXCJ0ZXh0QWZ0ZXJJY29uXCI6IFwiYnlDb21wbGV0aW5nTFBcIixcbiAgICAgICAgICBcInRvb2xUaXBUZXh0XCI6IFwibHBDb21wbGV0ZVRpcFwiXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgIHRoaXMua3BhcnJheSA9IHRoaXMudG9jQ29uZmlnLmthcm1hUG9pbnRzIHx8IFtdXG5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZldGNoUG9zdEFzc2Vzc21lbnRTdGF0dXNJZk5lZWRlZCgpIHtcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuaXNQb3N0QXNzZXNzbWVudCkge1xuICAgICAgdGhpcy50b2NTdmMuZmV0Y2hQb3N0QXNzZXNzbWVudFN0YXR1cyh0aGlzLmNvbnRlbnQuaWRlbnRpZmllcikuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIGNvbnN0IGFzc2Vzc21lbnREYXRhID0gcmVzLnJlc3VsdFxuICAgICAgICBmb3IgKGNvbnN0IG8gb2YgYXNzZXNzbWVudERhdGEpIHtcbiAgICAgICAgICBpZiAoby5jb250ZW50SWQgPT09ICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmlkZW50aWZpZXIpKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dUYWtlQXNzZXNzbWVudCA9IG9cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBGcmFnbWVudFN1YnNjcmlwdGlvbigpIHtcbiAgICB0aGlzLmN1cnJlbnRGcmFnbWVudCA9ICdvdmVydmlldydcbiAgICB0aGlzLnJvdXRlLmZyYWdtZW50LnN1YnNjcmliZSgoZnJhZ21lbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50RnJhZ21lbnQgPSBmcmFnbWVudCB8fCAnb3ZlcnZpZXcnXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBCYXRjaFN1YnNjcmlwdGlvbnMoKSB7XG4gICAgdGhpcy5iYXRjaFN1YnNjcmlwdGlvbiA9IHRoaXMudG9jU3ZjLmJhdGNoUmVwbGF5U3ViamVjdC5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB0aGlzLmhhbmRsZUJhdGNoVXBkYXRlKCksXG4gICAgICAoKSA9PiB0aGlzLmxvZ2dlclN2Yy5lcnJvcignZXJyb3Igb24gYmF0Y2hTdWJzY3JpcHRpb24nKVxuICAgIClcblxuICAgIHRoaXMuYmF0Y2hEYXRhU3Vic2NyaXB0aW9uID0gdGhpcy50b2NTdmMuc2V0QmF0Y2hEYXRhU3ViamVjdC5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB0aGlzLmhhbmRsZUJsZW5kZWRQcm9ncmFtVXBkYXRlKCksXG4gICAgICAoKSA9PiB0aGlzLmxvZ2dlclN2Yy5lcnJvcignZXJyb3Igb24gYmF0Y2hEYXRhU3Vic2NyaXB0aW9uJylcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUJhdGNoVXBkYXRlKCkge1xuICAgIHRoaXMuZmV0Y2hCYXRjaERldGFpbHMoKVxuICAgIGlmICh0aGlzLmNvbnRlbnQ/LnByaW1hcnlDYXRlZ29yeSA9PT0gdGhpcy5wcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNKSB7XG4gICAgICB0aGlzLmZldGNoVXNlcldGRm9yQmxlbmRlZCgpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVCbGVuZGVkUHJvZ3JhbVVwZGF0ZSgpIHtcbiAgICBpZiAodGhpcy5jb250ZW50Py5wcmltYXJ5Q2F0ZWdvcnkgPT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSkge1xuICAgICAgdGhpcy5mZXRjaFVzZXJXRkZvckJsZW5kZWQoKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uZmlndXJlRGVmYXVsdExvZ28oKSB7XG4gICAgY29uc3QgaW5zdGFuY2VDb25maWcgPSB0aGlzLmNvbmZpZ1N2Yy5pbnN0YW5jZUNvbmZpZ1xuICAgIGlmIChpbnN0YW5jZUNvbmZpZz8ubG9nb3M/LmRlZmF1bHRTb3VyY2VMb2dvKSB7XG4gICAgICB0aGlzLmRlZmF1bHRTTG9nbyA9IGluc3RhbmNlQ29uZmlnLmxvZ29zLmRlZmF1bHRTb3VyY2VMb2dvXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25maWd1cmVGZWF0dXJlRmxhZ3MoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjLnJlc3RyaWN0ZWRGZWF0dXJlcykge1xuICAgICAgdGhpcy5pc0dvYWxzRW5hYmxlZCA9ICF0aGlzLmNvbmZpZ1N2Yy5yZXN0cmljdGVkRmVhdHVyZXMuaGFzKCdnb2FscycpXG4gICAgICB0aGlzLmlzUmVnaXN0cmF0aW9uU3VwcG9ydGVkID0gdGhpcy5jb25maWdTdmMucmVzdHJpY3RlZEZlYXR1cmVzLmhhcygncmVnaXN0cmF0aW9uRXh0ZXJuYWwnKVxuICAgICAgdGhpcy5zaG93SW50cmFuZXRNZXNzYWdlID0gIXRoaXMuY29uZmlnU3ZjLnJlc3RyaWN0ZWRGZWF0dXJlcy5oYXMoJ3Nob3dJbnRyYW5ldE1lc3NhZ2VEZXNrdG9wJylcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwUm91dGVyRXZlbnRTdWJzY3JpcHRpb24oKSB7XG4gICAgdGhpcy5yb3V0ZXJQYXJhbVN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKHJvdXRlckV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgaWYgKHJvdXRlckV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICB0aGlzLmFzc2lnblBhdGhBbmRVcGRhdGVCYW5uZXIocm91dGVyRXZlbnQudXJsKVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgb24gdGhlIFRPQy9vdmVydmlldyBwYWdlIGZvciBhIExlYXJuaW5nIFBhdGh3YXlcbiAgICAgICAgY29uc3QgaXNUb2NQYWdlID0gcm91dGVyRXZlbnQudXJsLmluY2x1ZGVzKCcvYXBwL3RvYycpIHx8IFxuICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckV2ZW50LnVybC5pbmNsdWRlcygnL292ZXJ2aWV3JykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJFdmVudC51cmwuaW5jbHVkZXMoJy9jb250ZW50JylcbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBcblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIGhhc2htYXAgdXBkYXRlcyB0byByZWNvbXB1dGUgbWlsZXN0b25lIGxvY2sgc3RhdHVzIGluIHJlYWwtdGltZVxuICAgKiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHByb2dyZXNzIGNoYW5nZXMsIG1pbGVzdG9uZSBsb2NrcyB1cGRhdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBwYWdlIHJlZnJlc2hcbiAgICovXG4gIHByaXZhdGUgc2V0dXBIYXNobWFwVXBkYXRlU3Vic2NyaXB0aW9uKCkge1xuICAgIHRoaXMuaGFzaG1hcFVwZGF0ZWRTdWJzY3JpcHRpb24gPSB0aGlzLnRvY1N2Yy5oYXNobWFwVXBkYXRlZCQuc3Vic2NyaWJlKCh1cGRhdGUpID0+IHtcbiAgICAgIGlmICh1cGRhdGUgJiYgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0xlYXJuaW5nIFBhdGh3YXknKSB7XG4gICAgICAgIGNvbnN0IGlzRW5yb2xsZWQgPSB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdCAmJiB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdC5sZW5ndGggPiAwXG4gICAgICAgIC8vIFN5bmMgY29udGVudCB0cmVlJ3MgaXNMb2NrZWQgd2l0aCB0aGUgdXBkYXRlZCBoYXNobWFwIHZhbHVlc1xuICAgICAgICB0aGlzLnN5bmNNaWxlc3RvbmVMb2NrU3RhdHVzKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cblxuICBmZXRjaFVzZXJFbnJvbGxtZW50RGF0YVYyKCkge1xuXG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciB8fCAnJ1xuICAgIGlmICghaWRlbnRpZmllcikge1xuICAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ0Nhbm5vdCBmZXRjaCBlbnJvbGxtZW50IGRhdGE6IGNvbnRlbnQgaWRlbnRpZmllciBpcyBtaXNzaW5nJylcbiAgICAgIHRoaXMudXNlckVucm9sbG1lbnRMaXN0ID0gW11cbiAgICAgIHRoaXMuY2hlY2tJZlVzZXJFbnJvbGxlZCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgcmVxdWVzdDoge1xuICAgICAgICByZXRpcmVkQ291cnNlc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIGNvdXJzZUlkOiBbaWRlbnRpZmllcl1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmVucm9sbFN2Yy5mZXRjaEVucm9sbENvbnRlbnREYXRhKHJlcXVlc3QpLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpLFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzPy5yZXN1bHQ/LmNvdXJzZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMudXNlckVucm9sbG1lbnRMaXN0ID0gcmVzLnJlc3VsdC5jb3Vyc2VzXG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIGNvbXBsZXRlZCBjb250ZW50XG4gICAgICAgICAgY29uc3QgY29tcGxldGVkQ29udGVudERhdGEgPSB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdC5maW5kKFxuICAgICAgICAgICAgKGVsOiBhbnkpID0+IGVsLmNvbGxlY3Rpb25JZCA9PT0gdGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyICYmXG4gICAgICAgICAgICAgIGVsLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDBcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKGNvbXBsZXRlZENvbnRlbnREYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRWaWV3RXZlbnRGb3JOZXRDb3JlKCdjb21wbGV0ZScpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGF0YVRyYW5zZmVyU3ZjLnNldEVucm9sbERhdGEodGhpcy51c2VyRW5yb2xsbWVudExpc3QpXG4gICAgICAgICAgaWYodGhpcy5pc011bHRpbGluZ3VhbCkge1xuICAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBiYWNrIGZyb20gcGxheWVyIHdlIG5lZWQgdG8gY2hlY2sgcmVjZW50IGxhbmd1YWdlIGFuZCBsb2FkXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29udGVudExpYlN2Yz8ub25lU3RlcFJlc3VtZUVuYWJsZSAmJiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGE/LmlkZW50aWZpZXIgPT09IHRoaXMuY29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgIGxldCBsYW5nID0gdGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5sYW5ndWFnZT8ubGVuZ3RoID8gdGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5sYW5ndWFnZVswXSA6ICcnXG4gICAgICAgICAgICAgIGxldCBiYXNlQ29udGVudEZyb21FbnJvbGxEYXRhID0gdGhpcy51c2VyRW5yb2xsbWVudExpc3QuZmluZCgoZWw6IGFueSkgPT4gZWwuY29sbGVjdGlvbklkID09PSB0aGlzLmJhc2VDb250ZW50UmVhZERhdGE/LmlkZW50aWZpZXIpXG4gICAgICAgICAgICAgIGlmIChsYW5nICYmIGJhc2VDb250ZW50RnJvbUVucm9sbERhdGEgJiYgYmFzZUNvbnRlbnRGcm9tRW5yb2xsRGF0YT8ucmVjZW50X2xhbmd1YWdlPy50b0xvd2VyQ2FzZSgpICE9PSBsYW5nKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxvY2FsTGFuZyA9IHRoaXMuY29udGVudExhbmdTdmMuZ2V0UmVxdWlyZWRMYW5ndWFnZURldGFpbHModGhpcy5iYXNlQ29udGVudFJlYWREYXRhLCBiYXNlQ29udGVudEZyb21FbnJvbGxEYXRhPy5yZWNlbnRfbGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsTGFuZyAmJiBPYmplY3Qua2V5cyhsb2NhbExhbmcpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzTGFuZ3VhZ2VTZWxlY3Rpb24odGhpcy5jb250ZW50TGFuZ1N2Yy5nZXRSZXF1aXJlZExhbmd1YWdlRGV0YWlscyh0aGlzLmJhc2VDb250ZW50UmVhZERhdGEsIGJhc2VDb250ZW50RnJvbUVucm9sbERhdGE/LnJlY2VudF9sYW5ndWFnZSkpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0xhbmd1YWdlU2VsZWN0aW9uKHRoaXMuY29udGVudExhbmdTdmMuZ2V0U2VsZWN0ZWRMYW5ndWFnZSh0aGlzLmNvbnRlbnRSZWFkRGF0YSkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEFsd2F5cyBjYWxsIGZldGNoQ29udGVudEhpZXJhcmNoeSBmaXJzdFxuICAgICAgICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmZldGNoQ29udGVudEhpZXJhcmNoeSh0aGlzLmNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciB8fCAnJykpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgICAvLyBBbHdheXMgY2FsbCBmZXRjaENvbnRlbnRIaWVyYXJjaHkgZmlyc3RcbiAgICAgICAgICAgICAgcmV0dXJuIGZyb20odGhpcy5mZXRjaENvbnRlbnRIaWVyYXJjaHkodGhpcy5jb250ZW50UmVhZERhdGE/LmlkZW50aWZpZXIgfHwgJycpKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51c2VyRW5yb2xsbWVudExpc3QgPSBbXVxuICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgY29udGVudCBJRCBmcm9tIGVpdGhlciBjb250ZW50IG9yIGNvbnRlbnRSZWFkRGF0YVxuICAgICAgICAgIGNvbnN0IGNvbnRlbnRJZCA9IHRoaXMuY29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyIHx8IHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciB8fCAnJ1xuICAgICAgICAgIGlmICghY29udGVudElkKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlclN2Yy5lcnJvcignQ2Fubm90IGZldGNoIGhpZXJhcmNoeTogY29udGVudCBpZGVudGlmaWVyIGlzIG1pc3NpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBGZXRjaCBoaWVyYXJjaHkgY29udGVudCBmb3IgYWRkaXRpb25hbCBkYXRhXG4gICAgICAgICAgcmV0dXJuIGZyb20odGhpcy5mZXRjaENvbnRlbnRIaWVyYXJjaHkoY29udGVudElkKSlcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAvLyBBZGQgY2F0Y2hFcnJvciBoZXJlIHRvIGhhbmRsZSBlcnJvcnMgZnJvbSBmZXRjaENvbnRlbnRIaWVyYXJjaHlcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlclN2Yy5lcnJvcignRXJyb3IgaW4gZW5yb2xsbWVudCBkYXRhIHByb2Nlc3NpbmcnLCBlcnJvcilcbiAgICAgICAgcmV0dXJuIG9mKGZhbHNlKVxuICAgICAgfSlcbiAgICApLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVzZXJFbnJvbGxtZW50TGlzdD8ubGVuZ3RoICYmIHRoaXMuY29udGVudExpYlN2Yz8ub25lU3RlcFJlc3VtZUVuYWJsZSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlT25lU3RlcFJlc3VtZSgpXG4gICAgICAgICAgdGhpcy5jaGVja0lmVXNlckVucm9sbGVkKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoZWNrSWZVc2VyRW5yb2xsZWQoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlclN2Yy5lcnJvcignRmFpbGVkIHRvIGZldGNoIHVzZXIgZW5yb2xsbWVudCBkYXRhJywgZXJyb3IpXG4gICAgICAgIHRoaXMudXNlckVucm9sbG1lbnRMaXN0ID0gW11cbiAgICAgICAgdGhpcy5jaGVja0lmVXNlckVucm9sbGVkKClcbiAgICAgIH0sXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAvLyBPcHRpb25hbCBjb21wbGV0aW9uIGhhbmRsZXIgaWYgbmVlZGVkXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlT25lU3RlcFJlc3VtZSgpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLmNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ0NvbnRlbnQgbm90IGF2YWlsYWJsZSBmb3Igb25lLXN0ZXAgcmVzdW1lJylcblxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZENvbnRlbnQgPSB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdC5maW5kKFxuICAgICAgICAoZWw6IGFueSkgPT4gZWwuY29sbGVjdGlvbklkID09PSB0aGlzLmJhc2VDb250ZW50UmVhZERhdGE/LmlkZW50aWZpZXJcbiAgICAgIClcblxuICAgICAgaWYgKCFmb3VuZENvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXJTdmMud2FybignTm8gbWF0Y2hpbmcgZW5yb2xsZWQgY29udGVudCBmb3VuZCBmb3Igb25lLXN0ZXAgcmVzdW1lJylcblxuICAgICAgfVxuXG4gICAgICBjb25zdCB1cmxEYXRhID0gYXdhaXQgdGhpcy5jb250ZW50TGliU3ZjLmdldFJlc291cnNlTGluayhcbiAgICAgICAgdGhpcy5jb250ZW50LFxuICAgICAgICBbZm91bmRDb250ZW50XSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLFxuICAgICAgICB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciB8fCAnJyxcbiAgICAgIClcblxuICAgICAgaWYgKCF1cmxEYXRhKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLndhcm4oJ05vIFVSTCBkYXRhIHJldHVybmVkIGZvciBvbmUtc3RlcCByZXN1bWUnKVxuXG4gICAgICB9XG5cbiAgICAgIGlmICh1cmxEYXRhPy51cmwpIHtcbiAgICAgICAgaWYgKHVybERhdGEudXJsLmluY2x1ZGVzKCdhcHAvdG9jJykpIHtcbiAgICAgICAgICB0aGlzLmNvbnRlbnRMaWJTdmMub25lU3RlcFJlc3VtZUVuYWJsZSA9IGZhbHNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50TGliU3ZjLm9uZVN0ZXBSZXN1bWVFbmFibGUgPSBmYWxzZVxuICAgICAgICAgIC8vIFdoZW4gY29taW5nIGZyb20gc2VhcmNoIHBhZ2UgZm9yIHBhcnRpY3VsYXIgbGFuZ3VhZ2UgY29udGVudCwgY29uZmlybSBmaXJzdCB0byBvbmUgc3RlcCByZXN1bWUgb3IgbG9hZCB0aGUgc2VhcmNoZWQgbGFuZ3VhZ2VcbiAgICAgICAgICBpZiAodXJsRGF0YT8ucXVlcnlQYXJhbXM/Lk1MICYmICh1cmxEYXRhPy5xdWVyeVBhcmFtcz8uTUwgIT09IHRoaXMucXVlcnlQYXJhbXNEYXRhWydNTCddKSkge1xuICAgICAgICAgICAgdGhpcy5zaG93T25lU3RlcFJlc3VtZUNvbmZpcm0odXJsRGF0YSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXG4gICAgICAgICAgICAgIFt1cmxEYXRhLnVybF0sXG4gICAgICAgICAgICAgIHsgcXVlcnlQYXJhbXM6IHVybERhdGEucXVlcnlQYXJhbXMgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvZ2dlclN2Yy5lcnJvcignRXJyb3IgaW4gaGFuZGxlT25lU3RlcFJlc3VtZScsIGVycm9yKVxuICAgICAgdGhpcy5jb250ZW50TGliU3ZjLm9uZVN0ZXBSZXN1bWVFbmFibGUgPSBmYWxzZVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGZldGNoQ29udGVudEhpZXJhcmNoeShpZGVudGlmaWVyOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0xlYXJuaW5nIFBhdGh3YXknKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIC8vIFNURVAgMTogQ29uc3RydWN0IGhpZXJhcmNoeSBzdHJ1Y3R1cmVcbiAgICAgICAgbGV0IGNvbnRlbnRIZWlyYXJjaHlEYXRhID0gdGhpcy5hcHBUb2NWMlN2Yy5jb25zdHJ1Y3RIZWlyYXJjaHlEYXRhKGNvbnRlbnQpXG4gICAgICAgIFxuICAgICAgICAvLyBTVEVQIDI6IFVwZGF0ZSBwcm9ncmVzcyB3aXRoIGxhdGVzdCBlbnJvbGxtZW50IGRhdGFcbiAgICAgICAgdGhpcy5hcHBUb2NWMlN2Yy5tYXBDb250ZW50SGllcmFyY2h5UHJvZ3Jlc3NVcGRhdGUoY29udGVudEhlaXJhcmNoeURhdGEsIHRoaXMudXNlckVucm9sbG1lbnRMaXN0KVxuICAgICAgICBcbiAgICAgICAgLy8gU1RFUCAzOiBDcmVhdGUgaGFzaG1hcCBmcm9tIHVwZGF0ZWQgaGllcmFyY2h5ICh0aGlzIHNob3VsZCBwcmVzZXJ2ZSBjb21wbGV0aW9uIHN0YXR1cylcbiAgICAgICAgdGhpcy50b2NTdmMuY2FsbEhpcmFyY2h5UHJvZ3Jlc3NIYXNobWFwKGNvbnRlbnRIZWlyYXJjaHlEYXRhKVxuICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50SGVpcmFyY2h5RGF0YVxuICAgICAgICAvLyBDaGVjayBpZiB1c2VyIGlzIGVucm9sbGVkXG4gICAgICAgIGNvbnN0IGlzRW5yb2xsZWQgPSB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdCAmJiB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdC5sZW5ndGggPiAwXG4gICAgICAgIFxuICAgICAgICAvLyBTVEVQIDQ6IENvbXB1dGUgbWlsZXN0b25lIGxvY2tpbmcgc3RhdHVzIHdpdGggZW5yb2xsbWVudCBzdGF0dXMgYW5kIHVwZGF0ZWQgcHJvZ3Jlc3MgZGF0YVxuICAgICAgICB0aGlzLnRvY1N2Yy5jb21wdXRlTWlsZXN0b25lTG9ja2luZ1N0YXR1cyhpc0Vucm9sbGVkKVxuICAgICAgICBcbiAgICAgICAgLy8gU1RFUCA1OiBTeW5jIGNvbnRlbnQgdHJlZSdzIGlzTG9ja2VkIHdpdGggY29tcHV0ZWQgdmFsdWVzXG4gICAgICAgIHRoaXMuc3luY01pbGVzdG9uZUxvY2tTdGF0dXMoKVxuICAgICAgICBcbiAgICAgICAgdGhpcy5nZXRPcmdJZEZvclNoYXJlKClcbiAgICAgICAgdGhpcy5nZXRUb2NTdHJ1Y3R1cmUoKVxuICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYgKCFpZGVudGlmaWVyKSB7XG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSBmZXRjaEhpZXJhcmNoeUNvbnRlbnQgcmV0dXJucyBhbiBPYnNlcnZhYmxlXG4gICAgICAgIGNvbnN0IG9ic2VydmFibGUgPSB0aGlzLmNvbnRlbnRTdmMuZmV0Y2hIaWVyYXJjaHlDb250ZW50KGlkZW50aWZpZXIsICdkZXRhaWwnKVxuXG4gICAgICAgIGlmICghb2JzZXJ2YWJsZSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdmZXRjaEhpZXJhcmNoeUNvbnRlbnQgZGlkIG5vdCByZXR1cm4gYW4gT2JzZXJ2YWJsZScpXG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IG9ic2VydmFibGUuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gcmVzcG9uc2UucmVzdWx0LmNvbnRlbnRcbiAgICAgICAgICAgICAgdGhpcy5nZXRPcmdJZEZvclNoYXJlKClcbiAgICAgICAgICAgICAgdGhpcy5nZXRUb2NTdHJ1Y3R1cmUoKVxuICAgICAgICAgICAgICBpZiAoIXRoaXMuZm9yUHJldmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlclJhdGluZyA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VXNlclJhdGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBoaWVyYXJjaHkgY29udGVudCcsIGVycm9yKVxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGdldFRvY1N0cnVjdHVyZSgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVUb2NTdHJ1Y3R1cmUoKVxuICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy50b2NTdHJ1Y3R1cmUpIHtcbiAgICAgIHRoaXMuaGFzVG9jU3RydWN0dXJlID0gZmFsc2VcbiAgICAgIHRoaXMudG9jU3RydWN0dXJlLmxlYXJuaW5nTW9kdWxlID0gdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gdGhpcy5wcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFID8gLTEgOiAwXG4gICAgICB0aGlzLnRvY1N0cnVjdHVyZS5jb3Vyc2UgPSB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLnByaW1hcnlDYXRlZ29yeS5DT1VSU0UgPyAtMSA6IDBcbiAgICAgIHRoaXMudG9jU3RydWN0dXJlID0gdGhpcy50b2NTdmMuZ2V0VG9jU3RydWN0dXJlKHRoaXMuY29udGVudCwgdGhpcy50b2NTdHJ1Y3R1cmUpXG4gICAgICBmb3IgKGNvbnN0IHByb2dUeXBlIGluIHRoaXMudG9jU3RydWN0dXJlKSB7XG4gICAgICAgIGlmICh0aGlzLnRvY1N0cnVjdHVyZVtwcm9nVHlwZV0gPiAwKSB7XG4gICAgICAgICAgdGhpcy5oYXNUb2NTdHJ1Y3R1cmUgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBmcm9tIG5nT25DaGFuZ2VzXG4gICAgICB0aGlzLmZldGNoRXh0ZXJuYWxDb250ZW50QWNjZXNzKClcbiAgICAgIHRoaXMubW9kaWZ5U2Vuc2libGVDb250ZW50UmF0aW5nKClcbiAgICAgIHRoaXMuYXNzaWduUGF0aEFuZFVwZGF0ZUJhbm5lcih0aGlzLnJvdXRlci51cmwpXG4gICAgICB0aGlzLmdldExlYXJuaW5nVXJscygpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgbWlsZXN0b25lIGlzTG9ja2VkIHByb3BlcnR5IHdpdGggY29tcHV0ZWQgbG9ja2luZyBzdGF0dXMgZnJvbSBoYXNobWFwXG4gICAqIFRoaXMgZW5zdXJlcyB0aGUgY29udGVudCB0cmVlIHJlZmxlY3RzIHRoZSBhY3R1YWwgbG9jayBzdGF0dXNcbiAgICovXG4gIHN5bmNNaWxlc3RvbmVMb2NrU3RhdHVzKCkge1xuICAgIGlmICghdGhpcy5jb250ZW50IHx8ICF0aGlzLmNvbnRlbnQuY2hpbGRyZW4pIHJldHVyblxuXG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZVxuICAgIHRoaXMuY29udGVudC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XG4gICAgICBpZiAoY2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSAnTWlsZXN0b25lJyAmJiBjaGlsZC5pZGVudGlmaWVyKSB7XG4gICAgICAgIGNvbnN0IGhhc2hEYXRhID0gdGhpcy50b2NTdmMuaGFzaG1hcFtjaGlsZC5pZGVudGlmaWVyXVxuICAgICAgICBpZiAoaGFzaERhdGEgJiYgaGFzaERhdGEuY29tcHV0ZWRJc0xvY2tlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb2xkTG9ja2VkID0gY2hpbGQuaXNMb2NrZWRcbiAgICAgICAgICBjaGlsZC5pc0xvY2tlZCA9IGhhc2hEYXRhLmNvbXB1dGVkSXNMb2NrZWRcbiAgICAgICAgICBpZiAob2xkTG9ja2VkICE9PSBjaGlsZC5pc0xvY2tlZCkge1xuICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggbWlsZXN0b25lIGxvY2tpbmcgc3RhdHVzIGZyb20gdGhlIGFscmVhZHktdXBkYXRlZCBoYXNobWFwXG4gICAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcHJvZ3Jlc3MgdXBkYXRlcyB0byBzeW5jIFVJIHdpdGggY29tcHV0ZWQgbG9jayBzdGF0dXNcbiAgICogTm90ZTogRG9lcyBOT1QgZmV0Y2ggZW5yb2xsbWVudCBkYXRhIC0gdXNlcyBleGlzdGluZyBoYXNobWFwIHdoaWNoIGlzIGFscmVhZHkgdXBkYXRlZFxuICAgKi9cbiAgcHJpdmF0ZSByZWZyZXNoRW5yb2xsbWVudEFuZFByb2dyZXNzKCkge1xuICAgIGlmICghdGhpcy5jb250ZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiB1c2VyIGlzIGVucm9sbGVkXG4gICAgICBjb25zdCBpc0Vucm9sbGVkID0gdGhpcy51c2VyRW5yb2xsbWVudExpc3QgJiYgdGhpcy51c2VyRW5yb2xsbWVudExpc3QubGVuZ3RoID4gMFxuICAgICAgXG4gICAgICAvLyBSZWNvbXB1dGUgbWlsZXN0b25lIGxvY2tpbmcgc3RhdHVzIGZyb20gZXhpc3RpbmcgaGFzaG1hcFxuICAgICAgLy8gVGhlIGhhc2htYXAgaXMgYWxyZWFkeSB1cGRhdGVkIHdpdGggbGF0ZXN0IHByb2dyZXNzIHZpYSBoYXNobWFwIHVwZGF0ZSBzdWJzY3JpcHRpb25cbiAgICAgIHRoaXMudG9jU3ZjLmNvbXB1dGVNaWxlc3RvbmVMb2NraW5nU3RhdHVzKGlzRW5yb2xsZWQpXG4gICAgICBcbiAgICAgIC8vIFN5bmMgbG9jayBzdGF0dXMgZnJvbSBoYXNobWFwIHRvIGNvbnRlbnQgdHJlZVxuICAgICAgdGhpcy5zeW5jTWlsZXN0b25lTG9ja1N0YXR1cygpXG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcign4p2MIEVycm9yIGluIHJlZnJlc2hFbnJvbGxtZW50QW5kUHJvZ3Jlc3M6JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgb25MYW5ndWFnZVNlbGVjdChsYW5nOiBhbnkpIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UgaXMgYWxyZWFkeSBzZXRcbiAgICBpZiAodGhpcy5zZWxlY3RlZExhbmd1YWdlICYmIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZS5pZGVudGlmaWVyID09PSBsYW5nLmlkZW50aWZpZXIpIHtcbiAgICAgIHJldHVybiAvLyBFeGl0IHRoZSBmdW5jdGlvbiBpZiB0aGUgbGFuZ3VhZ2UgaXMgdGhlIHNhbWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy51c2VyRW5yb2xsbWVudExpc3QgJiYgdGhpcy51c2VyRW5yb2xsbWVudExpc3QubGVuZ3RoKSB7XG4gICAgICBsZXQgZGF0YSA9IHt9XG4gICAgICAvLyBUT0RPOiBSZW1vdmUgaGFyZGNvZGUgc3RyaW5nc1xuICAgICAgY29uc3QgZW5yb2xsZWRDb3Vyc2UgPSB0aGlzLnRvY1N2Yy5maW5kRW5yb2xtZW50QnlDb2xsZWN0aW9uSWQodGhpcy51c2VyRW5yb2xsbWVudExpc3QsICh0aGlzLmJhc2VDb250ZW50UmVhZERhdGE/LmlkZW50aWZpZXIgfHwgJycpKVxuICAgICAgaWYgKGVucm9sbGVkQ291cnNlICYmIGVucm9sbGVkQ291cnNlLnN0YXR1cyA9PT0gMikge1xuICAgICAgICB0aGlzLnByb2Nlc3NMYW5ndWFnZVNlbGVjdGlvbihsYW5nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgcHJvZ3Jlc3MgaW4gdGhlIHNlbGVjdGVkIGxhbmd1YWdlLFxuICAgICAgICBpZiAodGhpcy5sYW5ndWFnZU1hcFByb2dyZXNzICYmIHRoaXMubGFuZ3VhZ2VNYXBQcm9ncmVzc1tsYW5nLmxhbmdJZF0gPiAwKSB7XG4gICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGZyb206ICdsYW5ndWFnZVN3aXRjaCcsXG4gICAgICAgICAgICAgIGljb246ICd0cmFuc2xhdGUnLFxuICAgICAgICAgICAgICBoZWFkZXI6IGBDb250aW51ZSB3aGVyZSB5b3UgbGVmdCBvZmYgaW4gJHtsYW5nLm5hbWV9P2AsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBZb3UndmUgYWxyZWFkeSBtYWRlIHNvbWUgcHJvZ3Jlc3MgaW4gdGhpcyBsYW5ndWFnZS5cXG4gSWYgeW91IGNvbnRpbnVlIGl0IHdpbGwgcmVzdW1lIGZyb20gd2hlcmUgeW91IGxlZnQgb2ZmLmAsXG4gICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogJ0JhY2snLFxuICAgICAgICAgICAgICBhY2NlcHRCdXR0b246ICdSZXN1bWUnLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBwcm9ncmVzcyBpbiB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UsIG9yIGZpcnN0IHRpbWUgc2VsZWN0aW9uXG4gICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGZyb206ICdsYW5ndWFnZVN3aXRjaCcsXG4gICAgICAgICAgICAgIGljb246ICd0cmFuc2xhdGUnLFxuICAgICAgICAgICAgICBoZWFkZXI6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBsYW5ndWFnZT8nLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnU3dpdGNoaW5nIHRoZSBsYW5ndWFnZSB3aWxsIHJlc2V0IHlvdXIgcHJvZ3Jlc3MuIFxcbiBUaGUgY291cnNlIHdpbGwgcmVzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcgaW4gdGhlIHNlbGVjdGVkIGxhbmd1YWdlLicsXG4gICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogJ0JhY2snLFxuICAgICAgICAgICAgICBhY2NlcHRCdXR0b246ICdDaGFuZ2UgbGFuZ3VhZ2UnLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dMYW5nU3dpdGNoUG9wdXAobGFuZywgZGF0YSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9jZXNzTGFuZ3VhZ2VTZWxlY3Rpb24obGFuZylcbiAgICB9XG4gIH1cblxuICBzaG93TGFuZ1N3aXRjaFBvcHVwKGxhbmc6IGFueSwgZGF0YT86IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVE9DTXVsdGlMaW5ndWFsRGlhbG9nQ29tcG9uZW50LCBkYXRhKVxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoY29uZmlybWVkKSA9PiB7XG4gICAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0xhbmd1YWdlU2VsZWN0aW9uKGxhbmcpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHNob3dPbmVTdGVwUmVzdW1lQ29uZmlybSh1cmxEYXRhOiBhbnkpIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZnJvbTogJ2xhbmd1YWdlU3dpdGNoJyxcbiAgICAgICAgaWNvbjogJ3RyYW5zbGF0ZScsXG4gICAgICAgIGhlYWRlcjogYFlvdSd2ZSBhbHJlYWR5IHN0YXJ0ZWQgdGhpcyBjb3Vyc2VgLFxuICAgICAgICBtZXNzYWdlOiBgWW914oCZdmUgbWFkZSBzb21lIDxiPnByb2dyZXNzPC9iPiBpbiBhbm90aGVyIGxhbmd1YWdlIG9mIHRoaXMgY291cnNlLiBcXG5Xb3VsZCB5b3UgbGlrZSB0byA8Yj5yZXN1bWUgd2hlcmUgeW91IGxlZnQgb2ZmPC9iPiwgb3IgY29udGludWUgd2l0aCB0aGlzIHZlcnNpb24gaW5zdGVhZD9gLFxuICAgICAgICBjYW5jZWxCdXR0b246ICdDb250aW51ZSBIZXJlJyxcbiAgICAgICAgYWNjZXB0QnV0dG9uOiAnUmVzdW1lJyxcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihUT0NNdWx0aUxpbmd1YWxEaWFsb2dDb21wb25lbnQsIGRhdGEpXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChjb25maXJtZWQpID0+IHtcbiAgICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXG4gICAgICAgICAgW3VybERhdGEudXJsXSxcbiAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB1cmxEYXRhLnF1ZXJ5UGFyYW1zIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYW5nID0gdGhpcy5jb250ZW50TGFuZ1N2Yy5nZXRSZXF1aXJlZExhbmd1YWdlRGV0YWlscyh0aGlzLmJhc2VDb250ZW50UmVhZERhdGEsIHRoaXMucXVlcnlQYXJhbXNEYXRhWydNTCddKVxuICAgICAgICB0aGlzLnByb2Nlc3NMYW5ndWFnZVNlbGVjdGlvbihsYW5nKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcm9jZXNzTGFuZ3VhZ2VTZWxlY3Rpb24obGFuZzogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0gbGFuZ1xuXG4gICAgLy8gU2V0IHNrZWxldG9uIGxvYWRlciB0byBzaG93IGxvYWRpbmcgc3RhdGVcbiAgICB0aGlzLnNrZWxldG9uTG9hZGVyID0gdHJ1ZVxuICAgIC8vIENoZWNrIGlmIGxhbmd1YWdlIG9iamVjdCBoYXMgcmVxdWlyZWQgcHJvcGVydGllc1xuICAgIGlmIChsYW5nICYmIGxhbmcuaWRlbnRpZmllcikge1xuICAgICAgLy8gQ3JlYXRlIGEgcHJvbWlzZSBjaGFpbiB0byBmZXRjaCBjb250ZW50IGRhdGEgYW5kIGhpZXJhcmNoeSBzZXF1ZW50aWFsbHlcbiAgICAgIHRoaXMuZmV0Y2hDb250ZW50UmVhZChsYW5nLmlkZW50aWZpZXIpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAvLyBBZnRlciBjb250ZW50IHJlYWQgaXMgc3VjY2Vzc2Z1bCwgZmV0Y2ggdGhlIGhpZXJhcmNoeVxuICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoQ29udGVudEhpZXJhcmNoeShsYW5nLmlkZW50aWZpZXIpXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAvLyBCb3RoIG9wZXJhdGlvbnMgd2VyZSBzdWNjZXNzZnVsXG4gICAgICAgICAgLy8gVXBkYXRlIFVJIGFzIG5lZWRlZCB3aXRoIG5ldyBjb250ZW50XG4gICAgICAgICAgdGhpcy5yb3V0ZXJDaGFuZ2VIYW5kbGVyKHRydWUpXG4gICAgICAgICAgaWYgKHRoaXMudXNlckVucm9sbG1lbnRMaXN0ICYmIHRoaXMudXNlckVucm9sbG1lbnRMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVJlc3VtZURhdGFMaW5rTmV3KClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuY29udGVudCkge1xuICAgICAgICAgICAgdGhpcy5nZXRMZWFybmluZ1VybHMoKVxuICAgICAgICAgICAgLy8gUmVzZXQgdXNlciBwcm9ncmVzcyBhbmQgZmV0Y2ggZW5yb2xsbWVudCBkYXRhIGlmIG5vdCBpbiBwcmV2aWV3IG1vZGVcbiAgICAgICAgICAgIGlmICghdGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlVzZXJFbnJvbGxlZCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFVwZGF0ZSBzdWJqZWN0IHRvIG5vdGlmeSByYXRpbmcgc3VtbXJ5IGNvbXBvbmVudCBhbmQgbG9hZCB0aGUgc3VtYW1yeSBvZiBzZWxlY3RlZCBsYW5ndWFnZVxuICAgICAgICAgIHRoaXMucmVzZXRSYXRpbmdzU2VydmljZS5zZXRSYXRpbmdTZXJ2aWNlVXBkYXRlKHRydWUpXG4gICAgICAgICAgLy8gRmluYWxseSBzZXQgbG9hZGluZyBzdGF0ZSB0byBmYWxzZVxuICAgICAgICAgIHRoaXMuc2tlbGV0b25Mb2FkZXIgPSBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gSGFuZGxlIGFueSBlcnJvcnMgaW4gdGhlIHByb21pc2UgY2hhaW5cbiAgICAgICAgICB0aGlzLmxvZ2dlclN2Yy5lcnJvcignRXJyb3IgZHVyaW5nIGxhbmd1YWdlIGNoYW5nZTonLCBlcnJvcilcbiAgICAgICAgICB0aGlzLnNrZWxldG9uTG9hZGVyID0gZmFsc2VcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0ZhaWxlZCB0byBsb2FkIGNvbnRlbnQgaW4gc2VsZWN0ZWQgbGFuZ3VhZ2UnLCAnWCcsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdJbnZhbGlkIGxhbmd1YWdlIHNlbGVjdGlvbicsIGxhbmcpXG4gICAgICB0aGlzLnNrZWxldG9uTG9hZGVyID0gZmFsc2VcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignSW52YWxpZCBsYW5ndWFnZSBzZWxlY3Rpb24nLCAnWCcsIHtcbiAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGNvbnRlbnQgZGF0YSBmb3IgYSBnaXZlbiBpZGVudGlmaWVyIGFuZCB1cGRhdGVzIHRoZSBjb250ZW50UmVhZERhdGEgcHJvcGVydHlcbiAgICogQHBhcmFtIGlkZW50aWZpZXIgVGhlIGNvbnRlbnQgaWRlbnRpZmllciB0byBmZXRjaFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiBjb250ZW50IHdhcyBmZXRjaGVkIHN1Y2Nlc3NmdWxseSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoQ29udGVudFJlYWQoaWRlbnRpZmllcjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghaWRlbnRpZmllcikge1xuICAgICAgICB0aGlzLmxvZ2dlclN2Yy5lcnJvcignQ2Fubm90IGZldGNoIGNvbnRlbnQ6IGlkZW50aWZpZXIgaXMgbWlzc2luZycpXG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBvYnNlcnZhYmxlID0gdGhpcy5jb250ZW50U3ZjLmZldGNoQ29udGVudERhdGEoaWRlbnRpZmllcilcblxuICAgICAgaWYgKCFvYnNlcnZhYmxlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdmZXRjaENvbnRlbnREYXRhIGRpZCBub3QgcmV0dXJuIGFuIE9ic2VydmFibGUnKVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gb2JzZXJ2YWJsZS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZT8ucmVzdWx0Py5jb250ZW50KSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgY29udGVudFJlYWREYXRhIHdpdGggdGhlIGZldGNoZWQgY29udGVudFxuICAgICAgICAgICAgdGhpcy5jb250ZW50UmVhZERhdGEgPSByZXNwb25zZS5yZXN1bHQuY29udGVudFxuXG4gICAgICAgICAgICAvLyBVcGRhdGUgbGFuZ3VhZ2UgbGlzdCBhZnRlciBjb250ZW50IGlzIGZldGNoZWRcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YSkge1xuICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlTGlzdCA9IHRoaXMuY29udGVudExhbmdTdmMuZ2V0QWxsQ29udGVudExhbmd1YWdlcyh0aGlzLmNvbnRlbnRSZWFkRGF0YSlcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0gdGhpcy5jb250ZW50TGFuZ1N2Yy5nZXRTZWxlY3RlZExhbmd1YWdlKHRoaXMuY29udGVudFJlYWREYXRhKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU3ZjLndhcm4oJ0NvbnRlbnQgZGF0YSBub3QgZm91bmQgaW4gcmVzcG9uc2UnLCByZXNwb25zZSlcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggY29udGVudCBkYXRhJywgZXJyb3IpXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHJvdXRlckNoYW5nZUhhbmRsZXIoYXBwZW5kQmF0Y2hJZDogYm9vbGVhbikge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBhbnkgPSB7fVxuXG4gICAgLy8gQWRkIGJhdGNoIElEIGlmIG5lZWRlZFxuICAgIGlmIChhcHBlbmRCYXRjaElkICYmIHRoaXMuZ2V0QmF0Y2hJZCgpKSB7XG4gICAgICBxdWVyeVBhcmFtcy5iYXRjaElkID0gdGhpcy5nZXRCYXRjaElkKClcbiAgICB9XG5cbiAgICAvLyBBZGQgbXVsdGlsaW5ndWFsIElEIGFuZCBsYW5ndWFnZSB0byBxdWVyeSBwYXJhbXMgaWYgYXZhaWxhYmxlXG4gICAgaWYgKHRoaXMuY29udGVudFJlYWREYXRhICYmIHRoaXMuY29udGVudFJlYWREYXRhLmlkZW50aWZpZXIpIHtcbiAgICAgIGxldCBsYW5ndWFnZSA9ICcnXG5cbiAgICAgIC8vIEhhbmRsZSBib3RoIHN0cmluZyBhbmQgYXJyYXkgbGFuZ3VhZ2UgZm9ybWF0c1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jb250ZW50UmVhZERhdGEubGFuZ3VhZ2UpKSB7XG4gICAgICAgIGxhbmd1YWdlID0gdGhpcy5jb250ZW50UmVhZERhdGEubGFuZ3VhZ2VbMF0udG9Mb3dlckNhc2UoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YS5sYW5ndWFnZSkge1xuICAgICAgICBsYW5ndWFnZSA9IHRoaXMuY29udGVudFJlYWREYXRhLmxhbmd1YWdlLnRvTG93ZXJDYXNlKClcbiAgICAgIH1cbiAgICAgIGlmICghKHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSAmJiBPYmplY3Qua2V5cyh0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UpLmxlbmd0aCkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0ge1xuICAgICAgICAgIGxhbmdJZDogbGFuZ3VhZ2UsXG4gICAgICAgICAgbmFtZTogdGhpcy5jb250ZW50UmVhZERhdGEubGFuZ3VhZ2VbMF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gT25seSBhZGQgcGFyYW1ldGVycyBpZiB3ZSBoYXZlIHZhbGlkIGRhdGFcbiAgICAgIGlmIChsYW5ndWFnZSkge1xuICAgICAgICBxdWVyeVBhcmFtcy5NTCA9IGxhbmd1YWdlXG4gICAgICB9XG5cbiAgICAgIHF1ZXJ5UGFyYW1zLk1MSWQgPSB0aGlzLmNvbnRlbnRSZWFkRGF0YS5pZGVudGlmaWVyXG4gICAgfVxuXG4gICAgLy8gT25seSBuYXZpZ2F0ZSBpZiB3ZSBoYXZlIGJhdGNoIElEIG9yIG90aGVyIHBhcmFtZXRlcnNcbiAgICBpZiAoT2JqZWN0LmtleXMocXVlcnlQYXJhbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxuICAgICAgICBbXSxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRpbnVlTGVhcm5pbmdEYXRhKGNvbnRlbnRJZDogc3RyaW5nLCBiYXRjaElkPzogc3RyaW5nLCBsYW5nPzogc3RyaW5nKSB7XG4gICAgdGhpcy50b2NTdmMuY29udGVudExvYWRlci5uZXh0KHRydWUpXG4gICAgdGhpcy5yZXN1bWVEYXRhID0gbnVsbFxuICAgIGxldCB1c2VySWRcbiAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgIHVzZXJJZCA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZCB8fCAnJ1xuICAgIH1cblxuICAgIGNvbnN0IHJlcTogTnNDb250ZW50LklDb250aW51ZUxlYXJuaW5nRGF0YVJlcSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgYmF0Y2hJZCxcbiAgICAgICAgdXNlcklkLFxuICAgICAgICBjb3Vyc2VJZDogY29udGVudElkIHx8ICcnLFxuICAgICAgICBjb250ZW50SWRzOiBbXSxcbiAgICAgICAgZmllbGRzOiBbJ3Byb2dyZXNzZGV0YWlscyddLFxuICAgICAgICAuLi4obGFuZyA/IHsgbGFuZ3VhZ2U6IGxhbmcgfSA6IG51bGwpLFxuICAgICAgfSxcbiAgICB9XG4gICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ICE9PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5SRVNPVVJDRSkge1xuICAgICAgdGhpcy5jb250ZW50U3ZjLmZldGNoQ29udGVudEhpc3RvcnlWMihyZXEpLnN1YnNjcmliZShcbiAgICAgICAgZGF0YSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5yZXN1bHQgJiYgZGF0YS5yZXN1bHQuY29udGVudExpc3QgJiYgZGF0YS5yZXN1bHQuY29udGVudExpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB0ZW1wUmVzdW1lRGF0YSA9IF8uZ2V0KGRhdGEsICdyZXN1bHQuY29udGVudExpc3QnKVxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZU1hcFByb2dyZXNzID0gXy5nZXQoZGF0YSwgJ3Jlc3VsdC5sYW5ndWFnZVByb2dyZXNzJykgfHwge31cbiAgICAgICAgICAgIHRoaXMucmVzdW1lRGF0YSA9IF8ubWFwKHRlbXBSZXN1bWVEYXRhLCByciA9PiB7XG4gICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IF8uZmlsdGVyKGZsYXR0ZW5JdGVtcyhfLmdldCh0aGlzLmNvbnRlbnQsICdjaGlsZHJlbicpIHx8IFtdLCAnY2hpbGRyZW4nKSwgeyAnaWRlbnRpZmllcic6IHJyLmNvbnRlbnRJZCwgcHJpbWFyeUNhdGVnb3J5OiAnTGVhcm5pbmcgUmVzb3VyY2UnIH0pXG4gICAgICAgICAgICAgIF8uc2V0KHJyLCAncHJvZ3Jlc3NkZXRhaWxzLm1pbWVUeXBlJywgXy5nZXQoXy5maXJzdChpdGVtcyksICdtaW1lVHlwZScpKVxuICAgICAgICAgICAgICBpZiAoIV8uZ2V0KHJyLCAnY29tcGxldGlvblBlcmNlbnRhZ2UnKSkge1xuICAgICAgICAgICAgICAgIGlmIChfLmdldChyciwgJ3N0YXR1cycpID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICBfLnNldChyciwgJ2NvbXBsZXRpb25QZXJjZW50YWdlJywgMTAwKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBfLnNldChyciwgJ2NvbXBsZXRpb25QZXJjZW50YWdlJywgMClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBfLm1hcCh0aGlzLnJlc3VtZURhdGEsICdjb21wbGV0aW9uUGVyY2VudGFnZScpXG4gICAgICAgICAgICBjb25zdCB0b3RhbENvdW50ID0gXy50b0ludGVnZXIoXy5nZXQodGhpcy5jb250ZW50LCAnbGVhZk5vZGVzQ291bnQnKSkgfHwgMVxuICAgICAgICAgICAgaWYgKHByb2dyZXNzLmxlbmd0aCA8IHRvdGFsQ291bnQpIHtcbiAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IHRvdGFsQ291bnQgLSBwcm9ncmVzcy5sZW5ndGhcbiAgICAgICAgICAgICAgaWYgKGRpZmYpIHtcbiAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgICAgICBfLmVhY2gobmV3IEFycmF5KGRpZmYpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBwcm9ncmVzcy5wdXNoKDApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVJlc3VtZURhdGFMaW5rTmV3KClcbiAgICAgICAgICAgIHRoaXMudG9jU3ZjLnVwZGF0ZVJlc3VtYURhdGEodGhpcy5yZXN1bWVEYXRhKVxuICAgICAgICAgICAgLy8gdGhpcy50b2NTdmMubWFwTW9kdWxlRHVyYXRpb25BbmRQcm9ncmVzcyh0aGlzLmNvbnRlbnQsIHRoaXMuY29udGVudClcbiAgICAgICAgICAgIHRoaXMuZ2V0TGFzdFBsYXllZFJlc291cmNlKClcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlICE9PSAxMDApIHtcbiAgICAgICAgICAgICAgdGhpcy50b2NTdmMubWFwQ29tcGxldGlvblBlcmNlbnRhZ2UodGhpcy5jb250ZW50LCB0aGlzLnJlc3VtZURhdGEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRvY1N2Yy5jYWxsSGlyYXJjaHlQcm9ncmVzc0hhc2htYXAodGhpcy5jb250ZW50KVxuICAgICAgICAgICAgLy8gUmVjb21wdXRlIG1pbGVzdG9uZSBsb2NraW5nIHN0YXR1cyBhZnRlciBwcm9ncmVzcyB1cGRhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VDb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5ID09PSAnTGVhcm5pbmcgUGF0aHdheScpIHtcbiAgICAgICAgICAgICAgY29uc3QgaXNFbnJvbGxlZCA9IHRoaXMudXNlckVucm9sbG1lbnRMaXN0ICYmIHRoaXMudXNlckVucm9sbG1lbnRMaXN0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgdGhpcy50b2NTdmMuY29tcHV0ZU1pbGVzdG9uZUxvY2tpbmdTdGF0dXMoaXNFbnJvbGxlZClcbiAgICAgICAgICAgICAgdGhpcy5zeW5jTWlsZXN0b25lTG9ja1N0YXR1cygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRvY1N2Yy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzdW1lRGF0YSA9IG51bGxcbiAgICAgICAgICAgIHRoaXMudG9jU3ZjLmNhbGxIaXJhcmNoeVByb2dyZXNzSGFzaG1hcCh0aGlzLmNvbnRlbnQpXG4gICAgICAgICAgICAvLyBSZWNvbXB1dGUgbWlsZXN0b25lIGxvY2tpbmcgc3RhdHVzIGV2ZW4gd2l0aCBubyBwcm9ncmVzcyBkYXRhXG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0xlYXJuaW5nIFBhdGh3YXknKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzRW5yb2xsZWQgPSB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdCAmJiB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgIHRoaXMudG9jU3ZjLmNvbXB1dGVNaWxlc3RvbmVMb2NraW5nU3RhdHVzKGlzRW5yb2xsZWQpXG4gICAgICAgICAgICAgIHRoaXMuc3luY01pbGVzdG9uZUxvY2tTdGF0dXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50b2NTdmMuY29udGVudExvYWRlci5uZXh0KGZhbHNlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY29udGVudFN2Yy5zZXRQcm9ncmFtQ2hpbGRSZXN1bWVEYXRhKHRoaXMucmVzdW1lRGF0YSwgY29udGVudElkKVxuICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlICE9PSAxMDApIHtcbiAgICAgICAgICAgIHRoaXMuYmluZENvbXBsZXRpb25QZXJjZW50YWdlKClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ0NPTlRFTlQgSElTVE9SWSBGRVRDSCBFUlJPUiA+JywgZXJyb3IpXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVSZXN1bWVEYXRhTGlua05ldygpIHtcbiAgICBpZiAodGhpcy5yZXN1bWVEYXRhICYmIHRoaXMuY29udGVudCkge1xuICAgICAgbGV0IHJlc3VtZURhdGFWMjogYW55XG4gICAgICBpZiAodGhpcy5jb250ZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDApIHtcbiAgICAgICAgcmVzdW1lRGF0YVYyID0gdGhpcy5nZXRSZXN1bWVEYXRhRnJvbUxpc3QoJ3N0YXJ0JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VtZURhdGFWMiA9IHRoaXMuZ2V0UmVzdW1lRGF0YUZyb21MaXN0KClcbiAgICAgIH1cbiAgICAgIGlmICghcmVzdW1lRGF0YVYyLm1pbWVUeXBlKSB7XG4gICAgICAgIHJlc3VtZURhdGFWMi5taW1lVHlwZSA9IHRoaXMudG9jU3ZjLmdldE1pbWVUeXBlKHRoaXMuY29udGVudCwgcmVzdW1lRGF0YVYyLmlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgICB0aGlzLnJlc3VtZURhdGFMaW5rID0gdGhpcy5nZXRSZXN1bWVVcmwocmVzdW1lRGF0YVYyKVxuICAgICAgdGhpcy5hY3Rpb25TVkMuc2V0VXBkYXRlQ29tcEdyb3VwTyA9IHRoaXMucmVzdW1lRGF0YUxpbmtcbiAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSAqL1xuICAgIH1cbiAgfVxuICBpc1NlbGVjdGVkSW5Nb3JlRHJvcGRvd24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkTGFuZ3VhZ2U/LmlkZW50aWZpZXIgfHwgIXRoaXMubGFuZ3VhZ2VMaXN0KSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VMaXN0LnNsaWNlKDUpLnNvbWUoKGxhbmc6IGFueSkgPT5cbiAgICAgIGxhbmc/LmlkZW50aWZpZXIgPT09IHRoaXMuc2VsZWN0ZWRMYW5ndWFnZT8uaWRlbnRpZmllclxuICAgIClcbiAgfVxuXG4gIGFzeW5jIGdldFF1ZXJ5UGFyYW1zKCkge1xuICAgIGNvbnN0IHRlbXBRdWVyeVBhcmFtc0RhdGE6IGFueSA9IHt9XG4gICAgdGhpcy5yb3V0ZVN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGUucXVlcnlQYXJhbU1hcC5zdWJzY3JpYmUoYXN5bmMgcVBhcmFtc01hcCA9PiB7XG5cbiAgICAgIC8vIEV4dHJhY3QgYWxsIHBhcmFtZXRlcnMgZnJvbSB0aGUgUGFyYW1NYXBcbiAgICAgIHFQYXJhbXNNYXAua2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHRlbXBRdWVyeVBhcmFtc0RhdGFba2V5XSA9IHFQYXJhbXNNYXAuZ2V0KGtleSkgPz8gJydcbiAgICAgIH0pXG4gICAgICB0ZW1wUXVlcnlQYXJhbXNEYXRhXG5cbiAgICAgIC8vIFByb2Nlc3Mgc3BlY2lmaWMgcGFyYW1ldGVyc1xuICAgICAgY29uc3QgY29udGV4dElkID0gdGVtcFF1ZXJ5UGFyYW1zRGF0YVsnY29udGV4dElkJ11cbiAgICAgIGNvbnN0IGNvbnRleHRQYXRoID0gdGVtcFF1ZXJ5UGFyYW1zRGF0YVsnY29udGV4dFBhdGgnXVxuICAgICAgY29uc3QgcmVjb21tZW5kZWRDb3Vyc2VzSWQgPSB0ZW1wUXVlcnlQYXJhbXNEYXRhWydyZWNvbW1lbmRhdGlvbklkJ11cblxuICAgICAgaWYgKGNvbnRleHRJZCAmJiBjb250ZXh0UGF0aCkge1xuICAgICAgICB0aGlzLmNvbnRleHRJZCA9IGNvbnRleHRJZFxuICAgICAgICB0aGlzLmNvbnRleHRQYXRoID0gY29udGV4dFBhdGhcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29tbWVuZGVkQ291cnNlc0lkKSB7XG4gICAgICAgIHRoaXMucmVjb21tZW5kZWRDb3Vyc2VzSWQgPSByZWNvbW1lbmRlZENvdXJzZXNJZFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyU2VydmljZUxpYi5nZXRSZWNvbW1lbmRlZENvdXJzZXNTYWtzaGFtQUkocmVjb21tZW5kZWRDb3Vyc2VzSWQpLnRvUHJvbWlzZSgpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmZlZWRiYWNrcyAmJiByZXNwb25zZS5mZWVkYmFja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZlZWRiYWNrR2l2ZW4gPSByZXNwb25zZS5mZWVkYmFja3MuZmluZCgoZmVlZGJhY2s6IGFueSkgPT4gZmVlZGJhY2s/LmNvdXJzZV9pZCA9PT0gdGhpcy5jb3Vyc2VJRClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHJlY29tbWVuZGVkIGNvdXJzZXM6JywgZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB0ZW1wUXVlcnlQYXJhbXNEYXRhXG4gIH1cblxuICBnZXRPcmdJZEZvclNoYXJlKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgIVtcbiAgICAgIE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuTU9ERVJBVEVEX0NPVVJTRSxcbiAgICAgIE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuTU9ERVJBVEVEX0FTU0VTU0VNRU5ULFxuICAgICAgTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5NT0RFUkFURURfUFJPR1JBTSxcbiAgICAgIE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuSU5WSVRFX09OTFlfUFJPR1JBTSxcbiAgICBdLmluY2x1ZGVzKHRoaXMuY29udGVudC5jb3Vyc2VDYXRlZ29yeSkpIHtcbiAgICAgIHRoaXMuY2FuU2hhcmUgPSB0cnVlXG4gICAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgICAgdGhpcy5yb290T3JnSWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS5yb290T3JnSWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhbmQgcHJvY2Vzc2VzIGNvbnRlbnQgY3JlYXRvciBkYXRhIGZyb20gdGhlIGN1cnJlbnQgY29udGVudFxuICAgKiAtIFNldHMgY29udGVudENyZWF0b3JEYXRhIGZyb20gcGFyc2VkIGNyZWF0b3IgY29udGFjdHNcbiAgICogLSBEZXRlcm1pbmVzIGlmIFwic2hvdyBidXR0b25cIiBmbGFnIHNob3VsZCBiZSBlbmFibGVkIGJhc2VkIG9uIGNvbnRlbnQgbmFtZVxuICAgKiAtIEluY2x1ZGVzIHByb3BlciBlcnJvciBoYW5kbGluZyBmb3IgbnVsbCB2YWx1ZXMgYW5kIHBhcnNpbmdcbiAgICovXG4gIGdldENvbnRlbnRDcmVhdG9yRGF0YSgpIHtcbiAgICB0cnkge1xuICAgICAgLy8gT25seSBwcm9jZWVkIGlmIHdlIGhhdmUgdmFsaWQgY29udGVudCBkYXRhXG4gICAgICBpZiAoIXRoaXMuY29udGVudFJlYWREYXRhKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLndhcm4oJ0Nhbm5vdCBnZXQgY3JlYXRvciBkYXRhOiBjb250ZW50UmVhZERhdGEgaXMgbm90IGF2YWlsYWJsZScpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzIGNvbnRlbnQgbmFtZSBmb3IgY29tcGFyaXNvbiAoc2FmZWx5IGhhbmRsZSBudWxsL3VuZGVmaW5lZClcbiAgICAgIGNvbnN0IGNvbnRlbnROYW1lID0gdGhpcy5jb250ZW50UmVhZERhdGEubmFtZT8udHJpbSgpIHx8ICcnXG5cbiAgICAgIC8vIFBhcnNlIGFuZCBzZXQgY3JlYXRvciBjb250YWN0cyBpZiBhdmFpbGFibGVcbiAgICAgIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YS5jcmVhdG9yQ29udGFjdHMpIHtcbiAgICAgICAgLy8gVXNlIHRoZSBleGlzdGluZyBwYXJzaW5nIG1ldGhvZCB0byBoYW5kbGUgY3JlYXRvciBjb250YWN0c1xuICAgICAgICB0aGlzLmNvbnRlbnRDcmVhdG9yRGF0YSA9IHRoaXMuaGFuZGxlUGFyc2VKc29uRGF0YSh0aGlzLmNvbnRlbnRSZWFkRGF0YS5jcmVhdG9yQ29udGFjdHMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZXNldCB0byBlbXB0eSBhcnJheSBpZiBubyBjcmVhdG9yIGNvbnRhY3RzXG4gICAgICAgIHRoaXMuY29udGVudENyZWF0b3JEYXRhID0gW11cbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHNob3dCdG4gZmxhZyBiYXNlZCBvbiBkYWtzaHRhIG5hbWUgY29tcGFyaXNvbiAoY2FzZSBpbnNlbnNpdGl2ZSlcbiAgICAgIC8vIFRoaXMgZGV0ZXJtaW5lcyBpZiB0aGUgc3BlY2lhbCBidXR0b24gZm9yIGRha3NodGEgY29udGVudCBpcyBzaG93blxuICAgICAgdGhpcy5zaG93QnRuID0gY29udGVudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGhpcy5kYWtzaHRhTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBhbnkgdW5leHBlY3RlZCBlcnJvcnNcbiAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdFcnJvciBwcm9jZXNzaW5nIGNvbnRlbnQgY3JlYXRvciBkYXRhOicsIGVycm9yKVxuICAgICAgdGhpcy5jb250ZW50Q3JlYXRvckRhdGEgPSBbXVxuICAgICAgdGhpcy5zaG93QnRuID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBnZXRJMThOVHJhbnNsYXRpb25zKCkge1xuICAgIC8vIFN1YnNjcmliZSB0byBsYW5ndWFnZSB0cmFuc2xhdGlvbiBmbGFnIGNoYW5nZXNcbiAgICBjb25zdCB0cmFuc2xhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMuY29uZmlnU3ZjLmxhbmd1YWdlVHJhbnNsYXRpb25GbGFnXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKSAvLyBFbnN1cmUgc3Vic2NyaXB0aW9uIGlzIGNsZWFuZWQgdXAgb24gY29tcG9uZW50IGRlc3Ryb3lcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgLy8gT25seSBwcm9jZWVkIGlmIHdlIGhhdmUgdmFsaWQgZGF0YVxuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZWJzaXRlIGxhbmd1YWdlIGlzIHNldCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlZExhbmd1YWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpXG4gICAgICAgICAgICBpZiAoc3RvcmVkTGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgICAgLy8gU2V0IGRlZmF1bHQgbGFuZ3VhZ2UgYXMgZmFsbGJhY2tcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcoJ2VuJylcblxuICAgICAgICAgICAgICAvLyBVc2UgdGhlIHN0b3JlZCBsYW5ndWFnZSBwcmVmZXJlbmNlXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShzdG9yZWRMYW5ndWFnZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBMb2cgYW55IGVycm9ycyB0aGF0IG9jY3VyIGR1cmluZyBzdWJzY3JpcHRpb25cbiAgICAgICAgICB0aGlzLmxvZ2dlclN2Yy5lcnJvcignRXJyb3IgaW4gbGFuZ3VhZ2UgdHJhbnNsYXRpb24gc3Vic2NyaXB0aW9uOicsIGVycm9yKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgLy8gU3RvcmUgc3Vic2NyaXB0aW9uIGZvciBjbGVhbnVwIChvcHRpb25hbCBhbHRlcm5hdGl2ZSB0byB0YWtlVW50aWwpXG4gICAgdGhpcy50cmFuc2xhdGlvblN1YnNjcmlwdGlvbiA9IHRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uXG4gIH1cblxuICBnZXRTZXJ2ZXJEYXRlVGltZSgpIHtcbiAgICAvLyBGZXRjaCB0aGUgc2VydmVyIGRhdGUgdGltZSBhbmQgcHJvY2VzcyB0aGUgcmVzcG9uc2VcbiAgICB0aGlzLnRvY1N2Yy5nZXRTZXJ2ZXJEYXRlKCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgcmVzcG9uc2UgY29udGFpbnMgdmFsaWQgc3lzdGVtIGRhdGVcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnN5c3RlbURhdGUpIHtcbiAgICAgICAgICAvLyBVcGRhdGUgc2VydmljZSB3aXRoIHNlcnZlciBkYXRlIChyZW1vdmVkIGR1cGxpY2F0ZSBjYWxsKVxuICAgICAgICAgIHRoaXMudG9jU3ZjLmNoYW5nZVNlcnZlckRhdGUocmVzcG9uc2Uuc3lzdGVtRGF0ZSlcbiAgICAgICAgICB0aGlzLnNlcnZlckRhdGUgPSByZXNwb25zZS5zeXN0ZW1EYXRlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRmFsbGJhY2sgdG8gY2xpZW50J3MgdGltZSBpZiBzZXJ2ZXIgdGltZSBpcyBub3QgYXZhaWxhYmxlXG4gICAgICAgICAgY29uc3QgY2xpZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICAgICAgdGhpcy50b2NTdmMuY2hhbmdlU2VydmVyRGF0ZShjbGllbnRUaW1lKVxuICAgICAgICAgIHRoaXMuc2VydmVyRGF0ZSA9IGNsaWVudFRpbWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluaXRpYWxpemUgZGVwZW5kZW50IGZ1bmN0aW9ucyB0aGF0IG5lZWQgc2VydmVyIGRhdGVcbiAgICAgICAgdGhpcy5maW5kQUNQQigpXG4gICAgICAgIHRoaXMuZ2V0S2FybWFwb2ludHNMaW1pdCgpXG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgLy8gTG9nIHRoZSBlcnJvciBmb3IgZGVidWdnaW5nXG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdGYWlsZWQgdG8gZ2V0IHNlcnZlciBkYXRlOicsIGVycm9yKVxuXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGNsaWVudCdzIHRpbWUgb24gZXJyb3JcbiAgICAgICAgY29uc3QgY2xpZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICAgIHRoaXMudG9jU3ZjLmNoYW5nZVNlcnZlckRhdGUoY2xpZW50VGltZSlcbiAgICAgICAgdGhpcy5zZXJ2ZXJEYXRlID0gY2xpZW50VGltZVxuICAgICAgfVxuICAgIClcblxuICAgIC8vIFN1YnNjcmliZSB0byBzZXJ2ZXIgZGF0ZSBjaGFuZ2VzIGZyb20gc2VydmljZVxuICAgIHRoaXMuc2VydmVyRGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMudG9jU3ZjLnNlcnZlckRhdGVcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpIC8vIEVuc3VyZSBzdWJzY3JpcHRpb24gaXMgY2xlYW5lZCB1cFxuICAgICAgLnN1YnNjcmliZShzZXJ2ZXJEYXRlID0+IHtcbiAgICAgICAgdGhpcy5zZXJ2ZXJEYXRlID0gc2VydmVyRGF0ZVxuICAgICAgfSlcbiAgfVxuXG4gIGdldCBnZXRCYXNlQ29udGVudElkZW50aWZpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciB8fCB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIgfHwgJydcbiAgfVxuXG4gIGdldCBpc011bHRpbGluZ3VhbCgpIHtcbiAgICBpZiAodGhpcy5iYXNlQ29udGVudFJlYWREYXRhICYmIHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YS5sYW5ndWFnZU1hcFYxKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZUxpc3QubGVuZ3RoID4gMVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGhhbmRsZUVucm9sbG1lbnQoZXZlbnQ6IGFueSkge1xuXG4gICAgaWYgKHRoaXMuaXNNdWx0aWxpbmd1YWwpIHtcbiAgICAgIHRoaXMub3BlbkxhbmdEaWFsb2coZXZlbnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlQXV0b0JhdGNoQXNzaWduKClcbiAgICB9XG4gIH1cblxuICBvcGVuTGFuZ0RpYWxvZyhfZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRW5yb2xsTGFuZ3VhZ2VEaWFsb2d1ZUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICByZXN0b3JlRm9jdXM6IGZhbHNlLFxuICAgICAgZGF0YToge1xuICAgICAgICBwcmVTZWxlY3Q6IHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSxcbiAgICAgICAgbGFuZ3VhZ2VMaXN0OiB0aGlzLmxhbmd1YWdlTGlzdCxcbiAgICAgIH1cbiAgICB9KVxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoc2VsZWN0ZWRMYW5nKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0ZWRMYW5nKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSA9IHNlbGVjdGVkTGFuZ1xuICAgICAgICB0aGlzLmhhbmRsZUF1dG9CYXRjaEFzc2lnbigpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldFJlc3VtZVVybChyZXNvdXJjZURhdGE6IGFueSwgYmF0Y2hJZD86IGFueSwgcHJpbWFyeUNhdGVnb3J5PzogYW55KSB7XG4gICAgbGV0IE1MSWQgPSB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2U/LmlkZW50aWZpZXIgfHwgJydcbiAgICBsZXQgTUwgPSB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2U/LmxhbmdJZCB8fCAnJ1xuICAgIGxldCByZXN1bWVEYXRhVXJsID0gdmlld2VyUm91dGVHZW5lcmF0b3IoXG4gICAgICByZXNvdXJjZURhdGEuaWRlbnRpZmllcixcbiAgICAgIHJlc291cmNlRGF0YS5taW1lVHlwZSxcbiAgICAgIHRoaXMuaXNSZXNvdXJjZSA/IHVuZGVmaW5lZCA6IHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGE/LmlkZW50aWZpZXIgfHwgJycsXG4gICAgICB0aGlzLmlzUmVzb3VyY2UgPyB1bmRlZmluZWQgOiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEgJiYgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5jb250ZW50VHlwZSB8fCAnJyxcbiAgICAgIHRoaXMuZm9yUHJldmlldyxcbiAgICAgIHByaW1hcnlDYXRlZ29yeSB8fCAnTGVhcm5pbmcgUmVzb3VyY2UnLFxuICAgICAgYmF0Y2hJZCB8fCB0aGlzLmdldEJhdGNoSWQoKSxcbiAgICAgIHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGE/Lm5hbWUgfHwgJycsXG4gICAgICBNTCxcbiAgICAgIE1MSWQsXG4gICAgKVxuICAgIHJldHVybiByZXN1bWVEYXRhVXJsXG4gIH1cblxuICBnZXQgY29udGVudENvbXBsZXRpb25QZXJjZW50KCkge1xuICAgIGlmICh0aGlzLmJhdGNoRGF0YT8uZW5yb2xsZWQpIHtcbiAgICAgIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmNvbnRlbnRSZWFkRGF0YS5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdDb3Vyc2UnICYmIHRoaXMuaXNNdWx0aWxpbmd1YWwpIHtcbiAgICAgICAgaWYgKHRoaXMubGFuZ3VhZ2VNYXBQcm9ncmVzcyAmJiB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2U/LmxhbmdJZCAmJiB0aGlzLmxhbmd1YWdlTWFwUHJvZ3Jlc3NbdGhpcy5zZWxlY3RlZExhbmd1YWdlPy5sYW5nSWRdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VNYXBQcm9ncmVzc1t0aGlzLnNlbGVjdGVkTGFuZ3VhZ2U/LmxhbmdJZF1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gMFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCAwXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGb3JDb21wbGV0aW9uU3VydmV5VHJpZ2dlcigpIHtcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudFJlYWREYXRhKSB7XG4gICAgICAvLyBjaGVjayBpZiBjb21wbGV0aW9uIHN1cnZleSBpcyBlbmFibGVkIGFuZCB1c2VyIGhhcyBjb21wbGV0ZWQgdGhlIGNvdXJzZSBiZWZvcmUgMjNyZCBERUMgMjAyMyAocmVsZWFzZSBkYXRlIG9mIGNvbXBsZXRpb24gc3VydmV5KVxuICAgICAgaWYgKHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnICYmIHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnLmNvbXBsZXRpb25TdXJ2ZXkgJiYgdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWcuY29tcGxldGlvblN1cnZleS5lbmFibGVkICYmXG4gICAgICAgIHRoaXMuZW5yb2xsZWRDb3Vyc2VEYXRhICYmIHRoaXMuZW5yb2xsZWRDb3Vyc2VEYXRhICYmIHRoaXMuZW5yb2xsZWRDb3Vyc2VEYXRhLmNvbXBsZXRlZE9uID49IHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnLmNvbXBsZXRpb25TdXJ2ZXkuc3RhcnREYXRlKSB7XG4gICAgICAgIGlmICgodGhpcy5jb250ZW50LmNvbXBsZXRpb25TdGF0dXMgPT09IDIgfHwgdGhpcy5jb250ZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDApICYmIHRoaXMuY29udGVudFJlYWREYXRhLmNvbXBsZXRpb25TdXJ2ZXlMaW5rKSB7XG4gICAgICAgICAgY29uc3Qgc0lEID0gdGhpcy5jb250ZW50UmVhZERhdGEuY29tcGxldGlvblN1cnZleUxpbmsuc3BsaXQoJ3N1cnZleXMvJylcbiAgICAgICAgICBjb25zdCBzdXJ2ZXlJZCA9IHNJRFsxXVxuICAgICAgICAgIGNvbnN0IGNvdXJzZUlkID0gdGhpcy5jb250ZW50UmVhZERhdGEuaWRlbnRpZmllclxuICAgICAgICAgIC8vIENhbGwgQVBJIHRvIHNlZSBpZiBzdXJ2ZXkgaXMgc3VibWl0dGVkIG9yIG5vdFxuICAgICAgICAgIHRoaXMudG9jU3ZjLmdldEFwbGxpY2F0aW9uc0J5SWQoc3VydmV5SWQsIGNvdXJzZUlkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcy5yZXN1bHQucmVzcG9uc2UgJiYgT2JqZWN0LmtleXMocmVzLnJlc3VsdC5yZXNwb25zZSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLmxvY2tDZXJ0aWZpY2F0ZSA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmxvY2tDZXJ0aWZpY2F0ZSA9IHRydWVcbiAgICAgICAgICAgICAgdGhpcy5vcGVuQ29tcGxldGlvblN1cnZleUZvcm1Qb3B1cCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENsZWFyIGV4aXN0aW5nIHN1cnZleSBkYXRhIGZyb20gbG9jYWwgc3RvcmFnZSBiZWZvcmUgb3BlbmluZyBwb3B1cFxuICBjbGVhckV4aXN0aW5nUHVibGljU3VydmV5RGF0YShzdXJ2ZXlJZDogc3RyaW5nLCBjb3Vyc2VJZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RvcmFnZUtleSA9IGBzdXJ2ZXlfJHtzdXJ2ZXlJZH1fJHtjb3Vyc2VJZH1gXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHN0b3JhZ2VLZXkpKSB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShzdG9yYWdlS2V5KVxuICAgIH1cbiAgfVxuXG4gIG9wZW5QdWJsaWNTdXJ2ZXlQb3B1cChuYXZpZ2F0aW9uVXJsPzogc3RyaW5nLCBxdWVyeVBhcmFtcz86IGFueSkge1xuICAgIC8vIEdldCBzdXJ2ZXkgSUQgYW5kIGNvdXJzZSBJRCBmcm9tIGVudmlyb25tZW50IGFuZCBjb250ZW50IGRhdGFcbiAgICBjb25zb2xlLmxvZygndGhpcy5jb250ZW50UmVhZERhdGEtLS0nLCB0aGlzLmNvbnRlbnRSZWFkRGF0YSlcbiAgICBjb25zdCBzdXJ2ZXlJZCA9IHRoaXMuZW52aXJvbm1lbnQucHVibGljQ29udGVudFN1cnZleUlkIHx8ICcnXG4gICAgY29uc3QgY291cnNlSWQgPSB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciB8fCAnJ1xuICAgIGNvbnN0IGNvdXJzZU5hbWUgPSB0aGlzLmNvbnRlbnRSZWFkRGF0YT8ubmFtZSB8fCAnJ1xuICAgIGNvbnN0IGNvbnRleHRPcmdJZCA9IHRoaXMuY29udGVudFJlYWREYXRhPy5jcmVhdGVkRm9yICYmIHRoaXMuY29udGVudFJlYWREYXRhPy5jcmVhdGVkRm9yLmxlbmd0aCA+IDAgP1xuICAgICAgdGhpcy5jb250ZW50UmVhZERhdGE/LmNyZWF0ZWRGb3JbMF0gOiAnJ1xuXG4gICAgdGhpcy5jbGVhckV4aXN0aW5nUHVibGljU3VydmV5RGF0YShzdXJ2ZXlJZCwgY291cnNlSWQpXG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgc3VydmV5SWQ6IHN1cnZleUlkLFxuICAgICAgY291cnNlSWQ6IGNvdXJzZUlkLFxuICAgICAgY291cnNlTmFtZTogY291cnNlTmFtZSxcbiAgICAgIGNvbnRleHRPcmdJZDogY29udGV4dE9yZ0lkLFxuICAgICAgZm9yUHJldmlldzogdGhpcy5mb3JQcmV2aWV3XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ2RhdGEtLS0nLGRhdGEpXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihQdWJsaWNTdXJ2ZXlGb3JtQ29tcG9uZW50LCB7XG4gICAgICAvLyBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICB3aWR0aDogJzc1MHB4JyxcbiAgICAgIG1heFdpZHRoOiAnOTB2dycsXG4gICAgICBoZWlnaHQ6ICc4MHZoJyxcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIH0pXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIGludGVuZGVkIFVSTCBvbmx5IHdoZW4gc3VydmV5IGlzIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgaWYgKG5hdmlnYXRpb25VcmwpIHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbmF2aWdhdGlvblVybF0sIHsgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcmVzdW1lQ29udGVudERhdGEoKSB7XG4gICAgY29uc3QgbmF2aWdhdGlvblVybCA9ICh0aGlzLnJlc3VtZURhdGEgJiYgIXRoaXMuY2VydERhdGEpID8gdGhpcy5yZXN1bWVEYXRhTGluaz8udXJsIDogdGhpcy5maXJzdFJlc291cmNlTGluaz8udXJsXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSAodGhpcy5yZXN1bWVEYXRhICYmICF0aGlzLmNlcnREYXRhKSA/IHRoaXMuZ2VuZXJhdGVRdWVyeSgnUkVTVU1FJykgOiB0aGlzLmdlbmVyYXRlUXVlcnkoJ1NUQVJUJylcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbmF2aWdhdGlvblVybF0sIHsgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zIH0pXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdXNlciBjYW4gZW5yb2xsIGluIHRoZSBjb3Vyc2VcbiAgICogUmV0dXJucyB0cnVlIHdoZW4gZW5yb2xsbWVudCBpcyBhbGxvd2VkXG4gICAqL1xuXG5cbiAgbmF2aWdhdGVUb05ld1ZlcnNpb24oKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnL2FwcC90b2MnLCB7IHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSB9KS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgYXBwL3RvYy8ke3RoaXMuY29udGVudFJlYWREYXRhPy5jb250ZW50VmVyc2lvbkluZm8/LmlkZW50aWZpZXJ9L292ZXJ2aWV3YF0pXG4gICAgfSlcblxuICB9XG5cbiAgY2FuRW5yb2xsKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmNvbnRlbnRSZWFkRGF0YS5sYXN0RW5yb2xsbWVudERhdGUpIHtcbiAgICAgIGNvbnN0IHNlcnZlclRpbWUgPSBkYXlqcyh0aGlzLnNlcnZlckRhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG4gICAgICBjb25zdCBlRGF0ZSA9IGRheWpzKHRoaXMuY29udGVudFJlYWREYXRhLmxhc3RFbnJvbGxtZW50RGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJylcbiAgICAgIGlmIChkYXlqcyhzZXJ2ZXJUaW1lKS5pc1NhbWVPckJlZm9yZShlRGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGdvQmFjaygpIHtcbiAgICB0aGlzLmxvY2F0aW9uLmJhY2soKVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiY291cnNlSUQgZWxzZSBub0RhdGFGb3VuZFwiPlxuICA8bmctdGVtcGxhdGUgI2Vucm9sbEZ1bmN0aW9uYWxpdHk+XG4gICAgPGRpdiBbaGlkZGVuXT1cImlzUmVzb3VyY2UgJiYgIWNvbnRlbnQ/LmFydGlmYWN0VXJsPy5sZW5ndGhcIiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgIDwhLS0gQ291cnNlIGJsb2NrIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ICE9PSBwcmltYXJ5Q2F0ZWdvcnkuUFJPR1JBTVxuICAgICAgICAgICAgICAgICAgICAmJiBjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSAhPT0gcHJpbWFyeUNhdGVnb3J5LkNVUkFURURfUFJPR1JBTVxuICAgICAgICAgICAgICAgICAgICAmJiBjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSAhPT0gcHJpbWFyeUNhdGVnb3J5LlNUQU5EQUxPTkVfQVNTRVNTTUVOVCAmJlxuICAgICAgICAgICAgICAgICAgICBjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSAhPT0gcHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGFjdGlvbkJ0blN0YXR1cyA9PT0gJ2dyYW50JyAmJiAhKGlzTW9iaWxlICYmIGNvbnRlbnQ/LmlzSW5JbnRyYW5ldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAhKGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuQ09VUlNFICYmIGNvbnRlbnQ/LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICFjb250ZW50Py5hcnRpZmFjdFVybD8ubGVuZ3RoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICEoY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5DT1VSU0UgJiYgIWJhdGNoRGF0YT8uZW5yb2xsZWQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIShjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LlJFU09VUkNFICYmICFjb250ZW50Py5hcnRpZmFjdFVybCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAhKGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuTUFOREFUT1JZX0NPVVJTRV9HT0FMKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAhKGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuUFJPR1JBTSAmJiBjdXJyZW50Q291cnNlQmF0Y2hJZClcIj5cbiAgICAgICAgICA8YSAqbmdJZj1cInNob3dTdGFydC5zaG93ICYmICFpc1Bvc3RBc3Nlc3NtZW50ICYmICFmb3JQcmV2aWV3XCIgKGNsaWNrKT1cInJhaXNlVGVsZW1ldHJ5Rm9yUHVibGljKClcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiKHJlc3VtZURhdGEgJiYgIWNlcnREYXRhKSA/IHJlc3VtZURhdGFMaW5rPy51cmwgOiBmaXJzdFJlc291cmNlTGluaz8udXJsXCJcbiAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCIocmVzdW1lRGF0YSAmJiAhY2VydERhdGEpID8gZ2VuZXJhdGVRdWVyeSgnUkVTVU1FJykgOiBnZW5lcmF0ZVF1ZXJ5KCdTVEFSVCcpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKCFjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCBjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA8IDEwMCkgJiYgIWNlcnREYXRhXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9yUHJldmlldyB8fCBpc0luSUZyYW1lOyBlbHNlIGF1dGhWaWV3XCI+XG4gICAgICAgICAgICAgICAge3sgdHJhbnNsYXRlTGFiZWxzKCdyZXN1bWUnLCAnYXBwdG9jaG9tZScpIH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCB8fCBjZXJ0RGF0YVwiPlxuICAgICAgICAgICAgICB7eyBjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA+PSAxMDAgPyB0cmFuc2xhdGVMYWJlbHMoJ1N0YXJ0IGFnYWluJywgJ2FwcHRvY2hvbWUnKSA6XG4gICAgICAgICAgICAgIHRyYW5zbGF0ZUxhYmVscygncmVzdW1lJywgJ2FwcHRvY2hvbWUnKSB9fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzUG9zdEFzc2Vzc21lbnQgJiYgc2hvd1Rha2VBc3Nlc3NtZW50Py5wb3N0X2Fzc2Vzc21lbnRcIiAoY2xpY2spPVwicmFpc2VUZWxlbWV0cnlGb3JQdWJsaWMoKVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJmaXJzdFJlc291cmNlTGluaz8udXJsXCIgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9yUHJldmlldyB8fCBpc0luSUZyYW1lOyBlbHNlIGF1dGhWaWV3XCI+e3sgJ2FwcHRvY2hvbWUudGFrZUFzc2Vzc21lbnQnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8IS0tIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzUG9zdEFzc2Vzc21lbnQgJiYgKCFjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCBjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA8IDEwMCkgJiYgIWNlcnREYXRhXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNBY2JwQ2xhaW1cIj5cbiAgICAgICAgICAgICAgPHdzLWFwcC1rYXJtYXBvaW50cy1wYW5lbCBbYnRudHlwZV09XCInQUNCUCdcIiBbZGF0YV09XCJrcGFycmF5XCI+PC93cy1hcHAta2FybWFwb2ludHMtcGFuZWw+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNBY2JwQ2xhaW0gJiYgIW1vbnRobHlDYXBFeGNlZWRcIj5cbiAgICAgICAgICAgICAgPHdzLWFwcC1rYXJtYXBvaW50cy1wYW5lbCBbYnRudHlwZV09XCInUmVzdW1lJ1wiIFtkYXRhXT1cImtwYXJyYXlcIj48L3dzLWFwcC1rYXJtYXBvaW50cy1wYW5lbD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFpc1Bvc3RBc3Nlc3NtZW50ICYmIChjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwIHx8IGNlcnREYXRhKVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQWNicENvdXJzZSAmJiBpc0FjYnBDbGFpbSAmJiAhaXNDbGFpbWVkXCI+XG4gICAgICAgICAgICAgIDx3cy1hcHAta2FybWFwb2ludHMtcGFuZWwgW2J0bnR5cGVdPVwiJ0FDQlAgQ0xBSU0nXCIgW2RhdGFdPVwia3BhcnJheVwiIFtidG5DYXRlZ29yeV09XCInY2xhaW0nXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tDbGFpbUthcm1hUG9pbnRzKT1cIm9uQ2xpY2tPZkNsYWltKCRldmVudClcIj48L3dzLWFwcC1rYXJtYXBvaW50cy1wYW5lbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0FjYnBDb3Vyc2UgJiYgIW1vbnRobHlDYXBFeGNlZWRcIj5cbiAgICAgICAgICAgICAgPHdzLWFwcC1rYXJtYXBvaW50cy1wYW5lbCBbYnRudHlwZV09XCInU3RhcnQgYWdhaW4nXCIgW2RhdGFdPVwia3BhcnJheVwiPjwvd3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzQWNicENvdXJzZSAmJiBtb250aGx5Q2FwRXhjZWVkICYmICFpc0NvbXBsZXRlZFRoaXNNb250aFwiPlxuICAgICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidTdGFydCBhZ2FpbidcIiBbZGF0YV09XCJrcGFycmF5XCI+PC93cy1hcHAta2FybWFwb2ludHMtcGFuZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJpc1Bvc3RBc3Nlc3NtZW50ICYmIHNob3dUYWtlQXNzZXNzbWVudD8ucG9zdF9hc3Nlc3NtZW50XCI+XG4gICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidUYWtlIEFzc2Vzc21lbnQnXCIgW2RhdGFdPVwia3BhcnJheVwiPjwvd3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiAoYWN0aW9uQnRuU3RhdHVzID09PSAnZ3JhbnQnICYmICEoaXNNb2JpbGUgJiYgY29udGVudD8uaXNJbkludHJhbmV0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICEoIGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuQ09VUlNFICYmIGNvbnRlbnQ/LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiAhY29udGVudD8uYXJ0aWZhY3RVcmw/Lmxlbmd0aCApICYmXG4gICAgICAgICAgICAgICAgICAgICAgISggY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5DT1VSU0UgJiYgYmF0Y2hEYXRhPy5lbnJvbGxlZCApICYmXG4gICAgICAgICAgICAgICAgICAgICAgIShjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LlJFU09VUkNFICYmICFjb250ZW50Py5hcnRpZmFjdFVybCkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIShjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LlBST0dSQU0pICYmXG4gICAgICAgICAgICAgICAgICAgICAgIShjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5Lk1BTkRBVE9SWV9DT1VSU0VfR09BTClcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgIT09IHByaW1hcnlDYXRlZ29yeS5SRVNPVVJDRSAgJiYgIWVucm9sbEJ0bkxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIHJlc3VtZVwiICpuZ0lmPVwiIWZvclByZXZpZXcgfHwgaXNJbklGcmFtZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVFbnJvbGxtZW50KClcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGUtc3RhcnQtYnRuJzogIWNhbkVucm9sbCgpfVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIHt7ICdhcHB0b2Nob21lLmVucm9sbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0FjYnBDb3Vyc2VcIj5cbiAgICAgICAgICAgICAgPHdzLWFwcC1rYXJtYXBvaW50cy1wYW5lbCBbYnRudHlwZV09XCInQUNCUCdcIiBbZGF0YV09XCJrcGFycmF5XCI+PC93cy1hcHAta2FybWFwb2ludHMtcGFuZWw+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNBY2JwQ291cnNlICYmICFtb250aGx5Q2FwRXhjZWVkICYmIHVzZXJFbnJvbGxtZW50TGlzdCAmJiAhdXNlckVucm9sbG1lbnRMaXN0Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidFbnJvbGwnXCIgW2RhdGFdPVwia3BhcnJheVwiPjwvd3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICAgIDwhLS0gUFJvZ3JhbSAmIG1hbmRhdG9yeSBjb3Vyc2UgYmxvY2sgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZvclByZXZpZXcgfHwgaXNJbklGcmFtZTsgZWxzZSBhdXRoVmlld0J0blwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LlBST0dSQU0gfHwgY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5NQU5EQVRPUllfQ09VUlNFX0dPQUxcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cIihjb3Vyc2VDYXRlZ29yeT8uTU9ERVJBVEVEX1BST0dSQU0gPT09IGNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnkpICYmIChjb250ZW50UmVhZERhdGE/LmJhdGNoZXMgJiYgIWJhdGNoRGF0YT8uZW5yb2xsZWQpXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiKChjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSAhPT0gcHJpbWFyeUNhdGVnb3J5LlJFU09VUkNFKSAgJiYgIWVucm9sbEJ0bkxvYWRpbmcpICYmICFjb250ZW50UmVhZERhdGE/LmJhdGNoZXNbMF0uZW5kRGF0ZVwiPlxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlciByZXN1bWVcIiAoY2xpY2spPVwiaGFuZGxlRW5yb2xsbWVudCgpXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JQcmV2aWV3IHx8IGlzSW5JRnJhbWVcIj5cbiAgICAgICAgICAgICAgICAgIHt7J2FwcHRvY2hvbWUuZW5yb2xsJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNBY2JwQ291cnNlXCI+XG4gICAgICAgICAgICAgICAgPHdzLWFwcC1rYXJtYXBvaW50cy1wYW5lbCBbYnRudHlwZV09XCInQUNCUCdcIiBbZGF0YV09XCJrcGFycmF5XCI+PC93cy1hcHAta2FybWFwb2ludHMtcGFuZWw+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQWNicENvdXJzZSAmJiAhbW9udGhseUNhcEV4Y2VlZCAmJiB1c2VyRW5yb2xsbWVudExpc3QgJiYgIXVzZXJFbnJvbGxtZW50TGlzdC5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidFbnJvbGwnXCIgW2RhdGFdPVwia3BhcnJheVwiPjwvd3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9yUHJldmlldyB8fCBpc0luSUZyYW1lXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIigoY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgIT09IHByaW1hcnlDYXRlZ29yeS5SRVNPVVJDRSkgICYmICFlbnJvbGxCdG5Mb2FkaW5nKSAmJiBjb250ZW50UmVhZERhdGE/LmJhdGNoZXNbMF0uZW5kRGF0ZVwiPlxuICAgICAgICAgICAgICAgIDx3cy1hcHAtdG9jLWJhbm5lciByb2xlPVwiYmFubmVyXCIgW2Jhbm5lcnNdPVwiYmFubmVyc1wiIFtmb3JQcmV2aWV3XT1cImZvclByZXZpZXdcIiBbY29udGVudF09XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgIFt1c2VyRW5yb2xsbWVudExpc3RdPVwidXNlckVucm9sbG1lbnRMaXN0XCIgW2FuYWx5dGljc109XCJhbmFseXRpY3NcIlxuICAgICAgICAgICAgICAgICAgKHByb2dyYW1FbnJvbGxDYWxsKT1cInByb2dyYW1FbnJvbGxDYWxsKCRldmVudClcIiBbcmVzdW1lRGF0YV09XCJyZXN1bWVEYXRhXCIgW2JhdGNoRGF0YV09XCJiYXRjaERhdGFcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRlbnRSZWFkRGF0YV09XCJjb250ZW50UmVhZERhdGFcIj5cbiAgICAgICAgICAgICAgICA8L3dzLWFwcC10b2MtYmFubmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiKGNvdXJzZUNhdGVnb3J5Py5NT0RFUkFURURfUFJPR1JBTSA9PT0gY29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSkgJiYgIWNvbnRlbnRSZWFkRGF0YT8uYmF0Y2hlcyAmJiAhYmF0Y2hEYXRhPy5lbnJvbGxlZCAmJiAhZW5yb2xsQnRuTG9hZGluZ1wiPlxuICAgICAgICAgICAgTm8gQmF0Y2hlc1xuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiY291cnNlQ2F0ZWdvcnk/Lk1PREVSQVRFRF9QUk9HUkFNICE9PSBjb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5ICYmICFlbnJvbGxCdG5Mb2FkaW5nXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIShjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LlBST0dSQU0gJiYgY3VycmVudENvdXJzZUJhdGNoSWQpICYmIGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ICE9PSBwcmltYXJ5Q2F0ZWdvcnkuTUFOREFUT1JZX0NPVVJTRV9HT0FMXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHNoYWRvdy1sZyB0ZXh0LWluZm8tZGl2XCI+e3sgJ2FwcHRvY2hvbWUueW91QXJlTm90SW52aXRlZCcgfCB0cmFuc2xhdGUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQmF0Y2hJblByb2dyZXNzICYmICEhY3VycmVudENvdXJzZUJhdGNoSWQgJiYgZ2V0U3RhcnREYXRlID09PSAnTkEnXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHNoYWRvdy1sZyB0ZXh0LWluZm8tZGl2XCI+e3sgJ2FwcHRvY2hvbWUubm9BY3RpdmVCYXRjaGVzJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0JhdGNoSW5Qcm9ncmVzcyAmJiBjdXJyZW50Q291cnNlQmF0Y2hJZCAmJiBnZXRTdGFydERhdGUgIT09ICdOQSdcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgc2hhZG93LWxnIHRleHQtaW5mby1kaXZcIj57eyAnYXBwdG9jaG9tZS5iYXRjaFdpbGxTdGFydCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICB7e2dldFN0YXJ0RGF0ZX19ITwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzQmF0Y2hJblByb2dyZXNzICYmIGNvdXJzZUNhdGVnb3J5Py5NT0RFUkFURURfUFJPR1JBTSA9PT0gY29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSAmJiAhZW5yb2xsQnRuTG9hZGluZ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0JhdGNoSW5Qcm9ncmVzcyAmJiBjdXJyZW50Q291cnNlQmF0Y2hJZCAmJiBnZXRTdGFydERhdGUgIT09ICdOQSdcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgc2hhZG93LWxnIHRleHQtaW5mby1kaXZcIj57eyAnYXBwdG9jaG9tZS5iYXRjaFdpbGxTdGFydCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICB7e2dldFN0YXJ0RGF0ZX19ITwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0JhdGNoSW5Qcm9ncmVzcyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKCBhY3Rpb25CdG5TdGF0dXMgPT09ICdncmFudCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIShpc01vYmlsZSAmJiBjb250ZW50Py5pc0luSW50cmFuZXQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LlBST0dSQU0gJiYgY3VycmVudENvdXJzZUJhdGNoSWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5Lk1BTkRBVE9SWV9DT1VSU0VfR09BTCAmJiBjdXJyZW50Q291cnNlQmF0Y2hJZClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcIj5cbiAgICAgICAgICAgIDxhICpuZ0lmPVwic2hvd1N0YXJ0LnNob3cgJiYgIWlzUG9zdEFzc2Vzc21lbnRcIlxuICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyZXN1bWVEYXRhID8gcmVzdW1lRGF0YUxpbms/LnVybCA6IGZpcnN0UmVzb3VyY2VMaW5rPy51cmxcIlxuICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwicmVzdW1lRGF0YSA/IGdlbmVyYXRlUXVlcnkoJ1JFU1VNRScpIDogZ2VuZXJhdGVRdWVyeSgnU1RBUlQnKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIHJlc3VtZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlIDwgMTAwXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JQcmV2aWV3IHx8IGlzSW5JRnJhbWVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHJlc3VtZURhdGEgJiYgKGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlIDwgMTAwICYmIGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlPiAwKSA/XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUxhYmVscygncmVzdW1lJywgJ2FwcHRvY2hvbWUnKSA6XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUxhYmVscygnc3RhcnQnLCAnYXBwdG9jaG9tZScpIH19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMFwiPlxuICAgICAgICAgICAgICAgIHt7IChyZXN1bWVEYXRhKSB8fCBjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwID8gXCJTdGFydCBhZ2FpblwiIDogXCJTdGFydFwiIH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPGEgKm5nSWY9XCJpc1Bvc3RBc3Nlc3NtZW50ICYmIHNob3dUYWtlQXNzZXNzbWVudD8ucG9zdF9hc3Nlc3NtZW50XCIgW3JvdXRlckxpbmtdPVwiZmlyc3RSZXNvdXJjZUxpbms/LnVybFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIHJlc3VtZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZvclByZXZpZXcgfHwgaXNJbklGcmFtZVwiPnt7ICdhcHB0b2Nob21lLnRha2VBc3Nlc3NtZW50JyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCIhaXNQb3N0QXNzZXNzbWVudCAmJiAoIWNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlIDwgMTAwKVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNBY2JwQ2xhaW1cIj5cbiAgICAgICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidBQ0JQJ1wiIFtkYXRhXT1cImtwYXJyYXlcIj48L3dzLWFwcC1rYXJtYXBvaW50cy1wYW5lbD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNBY2JwQ2xhaW0gJiYgIW1vbnRobHlDYXBFeGNlZWRcIj5cbiAgICAgICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidSZXN1bWUnXCIgW2RhdGFdPVwia3BhcnJheVwiPjwvd3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFpc1Bvc3RBc3Nlc3NtZW50ICYmIChjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwKVwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNBY2JwQ291cnNlICYmIGlzQWNicENsYWltICYmICFpc0NsYWltZWRcIj5cbiAgICAgICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidBQ0JQIENMQUlNJ1wiIFtjb25kaXRpb25dPVwie2lzUG9zdEFzc2Vzc21lbnQ6IGlzUG9zdEFzc2Vzc21lbnQsIGNvbnRlbnQ6IGNvbnRlbnQsIGlzQWNicENvdXJzZTogaXNBY2JwQ291cnNlLCBpc0NsYWltZWQ6IGlzQ2xhaW1lZCwgbW9udGhseUNhcEV4Y2VlZDogbW9udGhseUNhcEV4Y2VlZCwgaXNDb21wbGV0ZWRUaGlzTW9udGg6IGlzQ29tcGxldGVkVGhpc01vbnRoLCBzaG93VGFrZUFzc2Vzc21lbnQ6IHNob3dUYWtlQXNzZXNzbWVudCwgdXNlckVucm9sbG1lbnRMaXN0OiB1c2VyRW5yb2xsbWVudExpc3QsIGlzQ29tcGxldGVkVGhpc01vbnRoOiBpc0NvbXBsZXRlZFRoaXNNb250aCwgcmVzdW1lRGF0YTogcmVzdW1lRGF0YSwgdXNlclJhdGluZzogdXNlclJhdGluZ31cIiBbZGF0YV09XCJrcGFycmF5XCIgW2J0bkNhdGVnb3J5XT1cIidjbGFpbSdcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrQ2xhaW1LYXJtYVBvaW50cyk9XCJvbkNsaWNrT2ZDbGFpbSgkZXZlbnQpXCI+PC93cy1hcHAta2FybWFwb2ludHMtcGFuZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzQWNicENvdXJzZSAmJiAhbW9udGhseUNhcEV4Y2VlZFwiPlxuICAgICAgICAgICAgICAgIDx3cy1hcHAta2FybWFwb2ludHMtcGFuZWwgW2J0bnR5cGVdPVwiJ1N0YXJ0IGFnYWluJ1wiIFtkYXRhXT1cImtwYXJyYXlcIj48L3dzLWFwcC1rYXJtYXBvaW50cy1wYW5lbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNBY2JwQ291cnNlICYmIG1vbnRobHlDYXBFeGNlZWQgJiYgIWlzQ29tcGxldGVkVGhpc01vbnRoXCI+XG4gICAgICAgICAgICAgICAgPHdzLWFwcC1rYXJtYXBvaW50cy1wYW5lbCBbYnRudHlwZV09XCInU3RhcnQgYWdhaW4nXCIgW2RhdGFdPVwia3BhcnJheVwiPjwvd3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzUG9zdEFzc2Vzc21lbnQgJiYgc2hvd1Rha2VBc3Nlc3NtZW50Py5wb3N0X2Fzc2Vzc21lbnRcIj5cbiAgICAgICAgICAgICAgPHdzLWFwcC1rYXJtYXBvaW50cy1wYW5lbCBbYnRudHlwZV09XCInVGFrZSBBc3Nlc3NtZW50J1wiIFtkYXRhXT1cImtwYXJyYXlcIj48L3dzLWFwcC1rYXJtYXBvaW50cy1wYW5lbD5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cImlzQmF0Y2hJblByb2dyZXNzICYmIChjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LkNVUkFURURfUFJPR1JBTSAmJiBiYXRjaERhdGE/LmVucm9sbGVkKSAmJiAhZW5yb2xsQnRuTG9hZGluZ1wiPlxuICAgICAgICA8YSAqbmdJZj1cInNob3dTdGFydC5zaG93ICYmICFpc1Bvc3RBc3Nlc3NtZW50XCIgKGNsaWNrKT1cInJhaXNlVGVsZW1ldHJ5Rm9yUHVibGljKClcIlxuICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInJlc3VtZURhdGEgPyByZXN1bWVEYXRhTGluaz8udXJsIDogZmlyc3RSZXNvdXJjZUxpbms/LnVybFwiXG4gICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInJlc3VtZURhdGEgPyBnZW5lcmF0ZVF1ZXJ5KCdSRVNVTUUnKSA6IGdlbmVyYXRlUXVlcnkoJ1NUQVJUJylcIlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIHJlc3VtZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgPCAxMDBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9yUHJldmlldyB8fCBpc0luSUZyYW1lOyBlbHNlIGF1dGhWaWV3XCI+XG4gICAgICAgICAgICAgIHt7IHJlc3VtZURhdGEgJiYgKGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlIDwgMTAwICYmIGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlPiAwKSA/XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlTGFiZWxzKCdyZXN1bWUnLCAnYXBwdG9jaG9tZScpIDpcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVMYWJlbHMoJ3Jlc3VtZScsICdhcHB0b2Nob21lJykgfX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwXCI+XG4gICAgICAgICAgICB7eyByZXN1bWVEYXRhIHx8IGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDAgPyB0cmFuc2xhdGVMYWJlbHMoJ1N0YXJ0IGFnYWluJywgJ2FwcHRvY2hvbWUnKSA6XG4gICAgICAgICAgICB0cmFuc2xhdGVMYWJlbHMoJ3Jlc3VtZScsICdhcHB0b2Nob21lJykgfX1cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbnJvbGxCdG5Mb2FkaW5nXCI+XG4gICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMTAwJSdcIiBbaGVpZ2h0XT1cIiczNnB4J1wiXG4gICAgICAgICAgW2JpbmRpbmdDbGFzc109XCInZmxleCByb3VuZGVkIGgtOCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBDdXJhdGVkIHByb2dyYW0gYmxvY2sgLS0+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5DVVJBVEVEX1BST0dSQU0gJiYgIWJhdGNoRGF0YT8uZW5yb2xsZWQgJiYgIWVucm9sbEJ0bkxvYWRpbmdcIj5cbiAgICAgICAgPGEgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgcmVzdW1lXCIgKm5nSWY9XCIhZm9yUHJldmlldyB8fCBpc0luSUZyYW1lXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRW5yb2xsbWVudCgpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIHt7ICdhcHB0b2Nob21lLmVucm9sbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8IS0tIFNUQU5EQUxPTkVfQVNTRVNTTUVOVCBibGFjayAtLT5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LlNUQU5EQUxPTkVfQVNTRVNTTUVOVCAmJiAhYmF0Y2hEYXRhPy5lbnJvbGxlZCAmJiAhZW5yb2xsQnRuTG9hZGluZyAmJiBjb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5ICE9PSAnSW52aXRlLU9ubHkgQXNzZXNzbWVudCdcIj5cbiAgICAgICAgPGEgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgcmVzdW1lXCIgKGNsaWNrKT1cImhhbmRsZUVucm9sbG1lbnQoKVwiXG4gICAgICAgICAgKm5nSWY9XCIhZm9yUHJldmlldyB8fCBpc0luSUZyYW1lXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIHt7ICdhcHB0b2Nob21lLmVucm9sbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8IS0tIElOVklURSBPTkxZIFNUQU5EQUxPTkUgQVNTRVNTTUVOVCBibG9jay0tPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuU1RBTkRBTE9ORV9BU1NFU1NNRU5UICYmICFiYXRjaERhdGE/LmVucm9sbGVkICYmICFlbnJvbGxCdG5Mb2FkaW5nICYmIGNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnkgPT09ICdJbnZpdGUtT25seSBBc3Nlc3NtZW50J1wiPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9yUHJldmlldyB8fCBpc0luSUZyYW1lOyBlbHNlIGF1dGhWaWV3Rm9ySW52aXRlT25seUFzc2Vzc21lbnRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZCBzaGFkb3ctbGcgdGV4dC1pbmZvLWRpdlwiPnt7ICdhcHB0b2Nob21lLnlvdUFyZU5vdEludml0ZWRGb3JBc3Nlc3NtZW50JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LlNUQU5EQUxPTkVfQVNTRVNTTUVOVCAmJiBiYXRjaERhdGE/LmVucm9sbGVkICYmIGlzQmF0Y2hJblByb2dyZXNzICYmICFlbnJvbGxCdG5Mb2FkaW5nICYmIGNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnkgPT09ICdJbnZpdGUtT25seSBBc3Nlc3NtZW50J1wiPlxuICAgICAgICA8YSBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlciByZXN1bWVcIiBbcm91dGVyTGlua109XCJmaXJzdFJlc291cmNlTGluaz8udXJsXCJcbiAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwiKHJlc3VtZURhdGEgJiYgIWNlcnREYXRhKSA/IGdlbmVyYXRlUXVlcnkoJ1JFU1VNRScpIDogZ2VuZXJhdGVRdWVyeSgnU1RBUlQnKVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwXCI+e3sgJ2FwcHRvY2hvbWUudGFrZVRlc3RBZ2FpbicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlIDwgMTAwXCI+e3sgJ2FwcHRvY2hvbWUudGFrZVRlc3QnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2E+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCIhaXNCYXRjaEluUHJvZ3Jlc3MgJiYgISFjdXJyZW50Q291cnNlQmF0Y2hJZCAmJiBnZXRTdGFydERhdGUgPT09ICdOQScgJiYgY29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0ludml0ZS1Pbmx5IEFzc2Vzc21lbnQnXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHNoYWRvdy1sZyB0ZXh0LWluZm8tZGl2XCI+e3sgJ2FwcHRvY2hvbWUubm9BY3RpdmVCYXRjaGVzJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIiFpc0JhdGNoSW5Qcm9ncmVzcyAmJiBjdXJyZW50Q291cnNlQmF0Y2hJZCAmJiBnZXRTdGFydERhdGUgIT09ICdOQScgJiYgY29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0ludml0ZS1Pbmx5IEFzc2Vzc21lbnQnXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHNoYWRvdy1sZyB0ZXh0LWluZm8tZGl2XCI+e3sgJ2FwcHRvY2hvbWUuYmF0Y2hXaWxsU3RhcnQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAge3tnZXRTdGFydERhdGV9fSE8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBTVEFOREFMT05FX0FTU0VTU01FTlQgZW5yb2xsZWQgYmxhY2sgLS0+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5TVEFOREFMT05FX0FTU0VTU01FTlQgJiYgYmF0Y2hEYXRhPy5lbnJvbGxlZCAmJiAhZW5yb2xsQnRuTG9hZGluZyAmJiBjb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5ICE9PSAnSW52aXRlLU9ubHkgQXNzZXNzbWVudCdcIj5cbiAgICAgICAgPGEgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgcmVzdW1lXCIgW3JvdXRlckxpbmtdPVwiZmlyc3RSZXNvdXJjZUxpbms/LnVybFwiXG4gICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIihyZXN1bWVEYXRhICYmICFjZXJ0RGF0YSkgPyBnZW5lcmF0ZVF1ZXJ5KCdSRVNVTUUnKSA6IGdlbmVyYXRlUXVlcnkoJ1NUQVJUJylcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMFwiPnt7ICdhcHB0b2Nob21lLnRha2VUZXN0QWdhaW4nIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA8IDEwMFwiPnt7ICdhcHB0b2Nob21lLnRha2VUZXN0JyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8IS0tIEJMRU5ERURfUFJPR1JBTSBibG9jayAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTVwiPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJiYXRjaERhdGE/LndvcmtGbG93Py53ZkluaXRpYXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICEoYmF0Y2hEYXRhPy53b3JrRmxvdz8ud2ZJdGVtPy5jdXJyZW50U3RhdHVzID09PSBXRkJsZW5kZWRQcm9ncmFtU3RhdHVzLkFQUFJPVkVEIHx8XG4gICAgICAgICAgICAgICAgICAgICAgYmF0Y2hEYXRhPy53b3JrRmxvdz8ud2ZJdGVtPy5jdXJyZW50U3RhdHVzID09PSBXRkJsZW5kZWRQcm9ncmFtU3RhdHVzLlJFSkVDVEVEIHx8XG4gICAgICAgICAgICAgICAgICAgICAgYmF0Y2hEYXRhPy53b3JrRmxvdz8ud2ZJdGVtPy5jdXJyZW50U3RhdHVzID09PSBXRkJsZW5kZWRQcm9ncmFtU3RhdHVzLldJVEhEUkFXTiB8fFxuICAgICAgICAgICAgICAgICAgICAgIGJhdGNoRGF0YT8ud29ya0Zsb3c/LndmSXRlbT8uY3VycmVudFN0YXR1cyA9PT0gV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5SRU1PVkVEKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cy1tYXQtYWNjZW50LXRleHQgd3MtbWF0LWFjY2VudC1saWdodC1iZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBzdGF0dXNNc2dcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibWFyZ2luLXJlbW92ZS1ib3R0b20gZm9udC1ib2xkXCI+XG4gICAgICAgICAgICAgIHt7ICdhcHB0b2Nob21lLnJlcXVlc3RVbmRlclJldmlldycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgPGEgKm5nSWY9XCJzaG93U3RhcnQuc2hvdyAmJiBiYXRjaERhdGE/LndvcmtGbG93Py53ZkluaXRpYXRlZCAmJiBiYXRjaERhdGE/LndvcmtGbG93Py53Zkl0ZW0/LmN1cnJlbnRTdGF0dXMgPT09IFdGQmxlbmRlZFByb2dyYW1TdGF0dXMuQVBQUk9WRURcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXNCYXRjaEluUHJvZ3Jlc3M/IChyZXN1bWVEYXRhICYmICFjZXJ0RGF0YSkgPyByZXN1bWVEYXRhTGluaz8udXJsIDogZmlyc3RSZXNvdXJjZUxpbms/LnVybCA6ICcnIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicmFpc2VUZWxlbWV0cnlGb3JQdWJsaWMoKVwiXG4gICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwiaXNCYXRjaEluUHJvZ3Jlc3MgPyAocmVzdW1lRGF0YSAmJiAhY2VydERhdGEpID8gZ2VuZXJhdGVRdWVyeSgnUkVTVU1FJykgOiBnZW5lcmF0ZVF1ZXJ5KCdTVEFSVCcpIDogJycgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIHJlc3VtZVwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZS1zdGFydC1idG4nOiAhaXNCYXRjaEluUHJvZ3Jlc3N9XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKCFjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCBjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA8IDEwMCkgJiYgIWNlcnREYXRhXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9yUHJldmlldyB8fCBpc0luSUZyYW1lOyBlbHNlIGF1dGhWaWV3XCI+XG4gICAgICAgICAgICAgICAge3sgcmVzdW1lRGF0YSAmJiAoY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgPCAxMDAgJiYgY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2U+IDApID9cbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUxhYmVscygncmVzdW1lJywgJ2FwcHRvY2hvbWUnKSA6XG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVMYWJlbHMoJ3N0YXJ0JywgJ2FwcHRvY2hvbWUnKSB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDAgfHwgY2VydERhdGFcIj5cbiAgICAgICAgICAgICAge3sgcmVzdW1lRGF0YSB8fCBjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwID8gdHJhbnNsYXRlTGFiZWxzKCdTdGFydCBhZ2FpbicsICdhcHB0b2Nob21lJykgOlxuICAgICAgICAgICAgICB0cmFuc2xhdGVMYWJlbHMoJ3N0YXJ0JywgJ2FwcHRvY2hvbWUnKSB9fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uQnRuU3RhdHVzID09ICdyZWplY3QnICYmIGNvbnRlbnQ/LnJlZ2lzdHJhdGlvblVybFwiPlxuICAgICAgICA8YSBbaHJlZl09XCJjb250ZW50Py5yZWdpc3RyYXRpb25VcmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlclwiPnt7XG4gICAgICAgICAgJ2FwcHRvY2hvbWUucmVnaXN0ZXInIHwgdHJhbnNsYXRlIH19PC9hPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI3Byb2dyZXNzRnVuY3Rpb25hbGl0eT5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtNFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC00IHRleHQtc21cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEgdGV4dC14c1wiPnt7ICdhcHB0b2NzaW5nbGVwYWdlLm92ZXJhbGxQcm9ncmVzcycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzXCIgKm5nSWY9XCJjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDBcIj4ge3sgY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgfX0gJTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx3cy13aWRnZXQtY29udGVudC1wcm9ncmVzcyAqbmdJZj1cImNvbnRlbnQ/LmlkZW50aWZpZXJcIiBbZm9yUHJldmlld109XCJmb3JQcmV2aWV3XCJcbiAgICAgICAgICAgIFtjb250ZW50SWRdPVwiY29udGVudD8uaWRlbnRpZmllclwiIFtwcm9ncmVzc109XCJjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZVwiIFtwcm9ncmVzc1R5cGVdPVwiJ3BlcmNlbnRhZ2UnXCJcbiAgICAgICAgICAgIFtjdXN0b21DbGFzc05hbWVdPVwiJ2NvbnRlbnQtcHJvZ3Jlc3MnXCI+XG4gICAgICAgICAgPC93cy13aWRnZXQtY29udGVudC1wcm9ncmVzcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnRDb21wbGV0aW9uUGVyY2VudCA+PSA1MFwiPlxuICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInJhdGUtYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkZlZWRiYWNrRGlhbG9nKGNvbnRlbnQpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibm9kdHJhbnNsYXRlXCI+c3Rhcl9wdXJwbGU1MDA8L21hdC1pY29uPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdXNlclJhdGluZ1wiPlxuICAgICAgICAgICAgPGRpdj57eyAnYXBwdG9jc2luZ2xlcGFnZS5yYXRlTm93JyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VyUmF0aW5nXCI+XG4gICAgICAgICAgICA8ZGl2Pnt7ICdhcHB0b2NzaW5nbGVwYWdlLmVkaXRSYXRpbmcnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPGRpdiBjbGFzcz1cInRvYy1iYW5uZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtNiBmaXhlZC13aWR0aFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImJhbm5lci1kZXRhaWxzIHRvYy1jb250ZW50XCIgI2Jhbm5lckRldGFpbHM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1iYWNrLWJ0blwiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwidGV4dC13aGl0ZVwiPmFycm93X2JhY2s8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzEzMnB4J1wiIFtoZWlnaHRdPVwiJzMycHgnXCJcbiAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzE0MHB4J1wiIFtoZWlnaHRdPVwiJzI0cHgnXCJcbiAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2tlbGV0b25Mb2FkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyB0YWctZGl2IHJvdW5kZWQtMnhsIGdhcC0xIGl0ZW1zLWNlbnRlciBwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIndzLW1hdC1vcmFuZ2UtdGV4dCBub2R0cmFuc2xhdGVcIj52aWRlb19saWJyYXJ5PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LXdoaXRlIGxlYWRpbmctMyBub2R0cmFuc2xhdGVcIj57e1xuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUxhYmVsKGNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnksICdzZWFyY2hmaWx0ZXJzJykgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LXdoaXRlIGxlYWRpbmctMyBub2R0cmFuc2xhdGVcIj57e1xuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUxhYmVsKGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5LCAnc2VhcmNoZmlsdGVycycpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyB0YWctZGl2IHJvdW5kZWQtMnhsIGdhcC0xIGl0ZW1zLWNlbnRlciBwLTJcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LmFkZGl0aW9uYWxUYWdzPy5pbmNsdWRlcygnaUdPVCBTcGVjaWFsaXphdGlvbicpXCI+XG4gICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXBwcm92ZWQtaWNvblwiIHNyYz1cIi4vYXNzZXRzL2ljb25zL2FwcHJvdmVkLnN2Z1wiIGFsdD1cImFwcHJvdmVkXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBmb250LWJvbGQgdGV4dC13aGl0ZSBsZWFkaW5nLTMgbm9kdHJhbnNsYXRlXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgJ2NhcmRjb250ZW50djIuaUdPVFNwZWNpYWxpemF0aW9uUHJvZ3JhbScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEtub3dsZWRnZSBsZXZlbCBibG9jayBmb3Igc2VhcmNoIGJveCAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIHt7Y29udGVudD8uZGlmZmljdWx0eUxldmVsfX0gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8uZGlmZmljdWx0eUxldmVsXCIgY2xhc3M9XCJrbm93bGVkZ2UtbGV2ZWwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8uZGlmZmljdWx0eUxldmVsPy50b0xvd2VyQ2FzZSgpID09PSAnYmVnaW5uZXInXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsZXZlbC1iYWRnZSBiZWdpbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuICpuZ0lmPVwiZmFsc2VcIiBjbGFzcz1cImxldmVsLWJhZGdlIGJlZ2lubmVyXCI+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCIjREJGNERDXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjQyMjY3IDVDNy42NzkyNyA0LjU1NTU1IDguMzIwNzcgNC41NTU1NiA4LjU3NzM3IDVMMTIuMDQxNSAxMUMxMi4yOTgxIDExLjQ0NDQgMTEuOTc3MyAxMiAxMS40NjQxIDEySDQuNTM1OTJDNC4wMjI3MiAxMiAzLjcwMTk3IDExLjQ0NDQgMy45NTg1NyAxMUw3LjQyMjY3IDVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNDlDOTUxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIHt7Y29udGVudFJlYWREYXRhPy5kaWZmaWN1bHR5TGV2ZWx9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbD8udG9Mb3dlckNhc2UoKSA9PT0gJ2ludGVybWVkaWF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxldmVsLWJhZGdlIGludGVybWVkaWF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuICpuZ0lmPVwidHJ1ZVwiIGNsYXNzPVwibGV2ZWwtYmFkZ2UgaW50ZXJtZWRpYXRlXCI+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCIjRDFEQkVDXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjQyMjY3IDIuNjY2NjZDNy42NzkyNyAyLjIyMjIxIDguMzIwNzcgMi4yMjIyMSA4LjU3NzM3IDIuNjY2NjZMMTIuMDQxNSA4LjY2NjY2QzEyLjI5ODEgOS4xMTExIDExLjk3NzMgOS42NjY2NiAxMS40NjQxIDkuNjY2NjZINC41MzU5MkM0LjAyMjcyIDkuNjY2NjYgMy43MDE5NyA5LjExMTEgMy45NTg1NyA4LjY2NjY2TDcuNDIyNjcgMi42NjY2NlpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxQjRDQTFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjcgNS42NjY2NkM3LjY3OTI3IDUuMjIyMjEgOC4zMjA3NyA1LjIyMjIxIDguNTc3MzcgNS42NjY2NkwxMi4wNDE1IDExLjY2NjdDMTIuMjk4MSAxMi4xMTExIDExLjk3NzMgMTIuNjY2NyAxMS40NjQxIDEyLjY2NjdINC41MzU5MkM0LjAyMjcyIDEyLjY2NjcgMy43MDE5NyAxMi4xMTExIDMuOTU4NTcgMTEuNjY2N0w3LjQyMjY3IDUuNjY2NjZaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMUI0Q0ExXCIgc3Ryb2tlPVwiI0QxREJFQ1wiIHN0cm9rZS13aWR0aD1cIjAuNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICB7e2NvbnRlbnRSZWFkRGF0YT8uZGlmZmljdWx0eUxldmVsfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5kaWZmaWN1bHR5TGV2ZWw/LnRvTG93ZXJDYXNlKCkgPT09ICdhZHZhbmNlZCdcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxldmVsLWJhZGdlIGFkdmFuY2VkXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJmYWxzZVwiIGNsYXNzPVwibGV2ZWwtYmFkZ2UgYWR2YW5jZWRcIj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCIjRkZFNkUxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy40MjI2NCAyLjMzMzM0QzcuNjc5MjQgMS44ODg5IDguMzIwNzQgMS44ODg5IDguNTc3MzQgMi4zMzMzNEwxMi4wNDE0IDguMzMzMzRDMTIuMjk4IDguNzc3NzkgMTEuOTc3MyA5LjMzMzM0IDExLjQ2NDEgOS4zMzMzNEg0LjUzNTg5QzQuMDIyNjkgOS4zMzMzNCAzLjcwMTk0IDguNzc3NzkgMy45NTg1NCA4LjMzMzM0TDcuNDIyNjQgMi4zMzMzNFpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0ZGODI2OFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjQgNUM3LjY3OTI0IDQuNTU1NTUgOC4zMjA3NCA0LjU1NTU2IDguNTc3MzQgNUwxMi4wNDE0IDExQzEyLjI5OCAxMS40NDQ0IDExLjk3NzMgMTIgMTEuNDY0MSAxMkg0LjUzNTg5QzQuMDIyNjkgMTIgMy43MDE5NCAxMS40NDQ0IDMuOTU4NTQgMTFMNy40MjI2NCA1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkY4MjY4XCIgc3Ryb2tlPVwiI0ZGRTZFMVwiIHN0cm9rZS13aWR0aD1cIjAuNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjQgNy42NjY2OUM3LjY3OTI0IDcuMjIyMjQgOC4zMjA3NCA3LjIyMjI0IDguNTc3MzQgNy42NjY2OUwxMi4wNDE0IDEzLjY2NjdDMTIuMjk4IDE0LjExMTEgMTEuOTc3MyAxNC42NjY3IDExLjQ2NDEgMTQuNjY2N0g0LjUzNTg5QzQuMDIyNjkgMTQuNjY2NyAzLjcwMTk0IDE0LjExMTEgMy45NTg1NCAxMy42NjY3TDcuNDIyNjQgNy42NjY2OVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0ZGODI2OFwiIHN0cm9rZT1cIiNGRkU2RTFcIiBzdHJva2Utd2lkdGg9XCIwLjVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIHt7Y29udGVudFJlYWREYXRhPy5kaWZmaWN1bHR5TGV2ZWx9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCIgKm5nSWY9XCJjYlBsYW5FbmREYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZHVlLXRhZyB0ZXh0LXhzIGxlYWRpbmctM1wiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZHVlLXdhcm5pbmcnOiBjYlBsYW5EdXJhdGlvbiA9PT0gbnNDYXJkQ29udGVudERhdGEuVVBDT01JTkcsICdkdWUtb3ZlcmR1ZSc6IGNiUGxhbkR1cmF0aW9uID09PSBuc0NhcmRDb250ZW50RGF0YS5PVkVSRFVFLCAnZHVlLXN1Y2Nlc3MnOiBjYlBsYW5EdXJhdGlvbiA9PT0gbnNDYXJkQ29udGVudERhdGEuU1VDQ0VTU31cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5kdWVCeScgfCB0cmFuc2xhdGUgfX0gLSAmbmJzcDs8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7IGNiUGxhbkVuZERhdGUgfCBkYXRlOiAnZFxuICAgICAgICAgICAgICAgICAgICAgIE1NTSx5J319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyICYmIGNvbnRlbnRSZWFkRGF0YT8uY29udGVudFZlcnNpb25JbmZvPy5pZGVudGlmaWVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXctdmVyc2lvbi1jaGlwIHJvdW5kZWQtMnhsXCIgKGNsaWNrKT1cIm5hdmlnYXRlVG9OZXdWZXJzaW9uKClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm5hdmlnYXRlVG9OZXdWZXJzaW9uKClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5ldy12ZXJzaW9uLXRleHQgbm9kdHJhbnNsYXRlXCI+e3sgJ2FwcHRvYy5uZXdWZXJzaW9uJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXdoaXRlIG1vYi1zaGFyZVwiICpuZ0lmPVwiY2FuU2hhcmVcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibm9kdHJhbnNsYXRlXCIgKGNsaWNrKT1cIm9uQ2xpY2tPZlNoYXJlKClcIj5zaGFyZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInOTAlJ1wiIFtoZWlnaHRdPVwiJzMycHgnXCJcbiAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzcwJSdcIiBbaGVpZ2h0XT1cIiczMnB4J1wiXG4gICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCBibHVlLTItbG9hZGVyJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFubmVyLXRleHQgdGV4dC1iYXNlIHNtOnRleHQtNHhsIGxlYWRpbmctNiBzbTpsZWFkaW5nLTEwIGZvbnQtYm9sZCBub2R0cmFuc2xhdGVcIj57e1xuICAgICAgICAgICAgICAgIGhhbmRsZUNhcGl0YWxpemUoY29udGVudFJlYWREYXRhPy5uYW1lKSB9fTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSBzbTp0ZXh0LWJhc2Ugc291cmNlLXRleHQgZm9udC1zZW1pYm9sZCBicmVhay13b3JkcyBub2R0cmFuc2xhdGVcIiAjY29udGVudFNvdXJjZVxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc291cmNlRWxsaXBzaXMnOiBzb3VyY2VFbGxpcHNpc31cIiB0aXRsZT1cInt7Y29udGVudFJlYWREYXRhPy5zb3VyY2V9fVwiPnt7ICdjYXJkY29udGVudHYyLmJ5J1xuICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlIH19IHt7IGNvbnRlbnRSZWFkRGF0YT8uc291cmNlIH19PC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxMjBweCdcIiBbaGVpZ2h0XT1cIic0MHB4J1wiXG4gICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzg4cHgnXCIgW2hlaWdodF09XCInMjRweCdcIlxuICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2tlbGV0b25Mb2FkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyByYXRpbmctY2hpcCBweS0yIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU5hdmlnYXRlVG9SZXZpZXdzKClcIiAqbmdJZj1cImNvbnRlbnQ/LmF2ZXJhZ2VSYXRpbmdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMSBtYXJnaW4tbGVmdC1zIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibm9kdHJhbnNsYXRlXCI+Z3JhZGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtd2hpdGUgdGV4dC1zbSBsZWFkaW5nLTRcIj57eyBjb250ZW50Py5hdmVyYWdlUmF0aW5nIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXdoaXRlIHRleHQtc20gbGVhZGluZy00IG1hcmdpbi1yaWdodC1tXCI+e3sgY29udGVudD8udG90YWxSYXRpbmcgfCBwaXBlQ291bnRUcmFuc2Zvcm0gfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiICpuZ0lmPVwiY29udGVudD8uYWRkaXRpb25hbFRhZ3M/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb3N0LWVucm9sbGVkLWNoaXAgdGV4dC14cyBsZWFkaW5nLTNcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29udGVudD8uYWRkaXRpb25hbFRhZ3M/LmluY2x1ZGVzKCdtb3N0VHJlbmRpbmcnKVwiPnt7ICdjYXJkY29udGVudHYyLm1vc3RUcmVuZGluZycgfFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbnRlbnQ/LmFkZGl0aW9uYWxUYWdzPy5pbmNsdWRlcygnbW9zdEVucm9sbGVkJylcIj57eyAnY2FyZGNvbnRlbnR2Mi5tb3N0RW5yb2xsZWQnIHxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCIgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LnJldGlyZW1lbnREYXRlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldy12ZXJzaW9uLXBpbGwgdGV4dC14cyBsZWFkaW5nLTNcIiAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8uc3RhdHVzICE9PSAnUmV0aXJlZCdcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdhcHB0b2MucGVuZGluZ1JldGlyZW1lbnQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXctdmVyc2lvbi1yZXRpcmUtcGlsbCB0ZXh0LXhzIGxlYWRpbmctM1wiICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5zdGF0dXMgPT09ICdSZXRpcmVkJ1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ2FwcHRvYy5yZXRpcmVkJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2tlbGV0b25Mb2FkZXJcIj5cbiAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMTgwcHgnXCIgW2hlaWdodF09XCInMjBweCdcIlxuICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2tlbGV0b25Mb2FkZXIgJiYgY29udGVudFJlYWREYXRhPy5zWVNfSU5URVJOQUxfTEFTVF9VUERBVEVEX09OXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBsZWFkaW5nLTQgc291cmNlLXRleHQgbm9kdHJhbnNsYXRlXCI+KHt7ICdhcHB0b2MubGFzdFVwZGF0ZWRPbicgfCB0cmFuc2xhdGUgfX0ge3tcbiAgICAgICAgICAgICAgY29udGVudFJlYWREYXRhPy5zWVNfSU5URVJOQUxfTEFTVF9VUERBVEVEX09OIHwgZGF0ZTogJ01NTSBkLCB5JyB9fSk8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTJcIiAqbmdJZj1cImxhbmd1YWdlTGlzdD8ubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdCBjbGFzcz1cImxhbmctY2hpcHNcIj5cbiAgICAgICAgICAgICAgICA8IS0tIFNob3cgdXAgdG8gNiBjaGlwcyAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsYW5nIG9mIGxhbmd1YWdlTGlzdCB8IHNsaWNlOjA6NTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPVwibWF0Y2hpcC1jdXN0b21cIiBzZWxlY3RhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJsYW5nPy5pZGVudGlmaWVyID09PSBzZWxlY3RlZExhbmd1YWdlPy5pZGVudGlmaWVyXCIgKGNsaWNrKT1cIm9uTGFuZ3VhZ2VTZWxlY3QobGFuZylcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbGFuZy5uYW1lIHx8IGxhbmcudmFsdWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFwiTW9yZVwiIGNoaXAgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiA2IGxhbmd1YWdlcyAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGFuZ3VhZ2VMaXN0Lmxlbmd0aCA+IDVcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBbbWF0TWVudVRyaWdnZXJGb3JdPVwibW9yZUxhbmd1YWdlc01lbnVcIiBzZWxlY3RhYmxlPVwiZmFsc2VcIiBjbGFzcz1cIm1vcmUtY2hpcCBtYXRjaGlwLWN1c3RvbVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJpc1NlbGVjdGVkSW5Nb3JlRHJvcGRvd24oKVwiPlxuICAgICAgICAgICAgICAgICAgICBNb3JlIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uXCI+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtb3JlTGFuZ3VhZ2VzTWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcz1cIm1hdC1yYWRpby1ncm91cCBmbGV4IGZsZXgtY29sIGdhcC0yIHAtM1wiIFt2YWx1ZV09XCJzZWxlY3RlZExhbmd1YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gKm5nRm9yPVwibGV0IGxhbmcgb2YgbGFuZ3VhZ2VMaXN0IHwgc2xpY2U6NVwiIFt2YWx1ZV09XCJsYW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImxhbmc/LmlkZW50aWZpZXIgPT09IHNlbGVjdGVkTGFuZ3VhZ2U/LmlkZW50aWZpZXJcIiAoY2hhbmdlKT1cIm9uTGFuZ3VhZ2VTZWxlY3QobGFuZylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxhbmcuZGlzcGxheU5hbWUgfHwgbGFuZy5uYW1lIHx8IGxhbmcgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC02IGZpeGVkLXdpZHRoXCI+XG4gICAgPGRpdiBjbGFzcz1cInRvYy1jb250ZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0gJiZcbiAgICAgICAgc2VsZWN0ZWRCYXRjaERhdGE/LmNvbnRlbnRbMF0/LmJhdGNoQXR0cmlidXRlcz8uYmF0Y2hMb2NhdGlvbkRldGFpbHMgJiZcbiAgICAgICAgc2VsZWN0ZWRCYXRjaERhdGE/LmNvbnRlbnRbMF0/LmVucm9sbG1lbnRFbmREYXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2NhdGlvbi1kZXRhaWxzIG10LTZcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQgcGItM1wiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibG9jYXRpb24taWNvbiBub2R0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgbG9jYXRpb25fb25cbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9jLWRlc2NcIj5cbiAgICAgICAgICAgICAge3tzZWxlY3RlZEJhdGNoRGF0YT8uY29udGVudFswXT8uYmF0Y2hBdHRyaWJ1dGVzPy5iYXRjaExvY2F0aW9uRGV0YWlsc319XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImV2ZW50LWljb24gbm9kdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgIGV2ZW50PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2MtZGVzY1wiPlxuICAgICAgICAgICAgICBMYXN0IGRhdGUgb2YgZW5yb2xsbWVudCAtIHt7c2VsZWN0ZWRCYXRjaERhdGE/LmNvbnRlbnRbMF0/LmVucm9sbG1lbnRFbmREYXRlIHwgZGF0ZTogJ2RkL01NL3l5eXknfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlY29tbWVuZGVkQ291cnNlc0lkICYmICFmZWVkYmFja0dpdmVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweC00IHB5LTMgbXQtNiByZWxldmVudC13cmFwcGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTQgaXRlbXMtY2VudGVyIGZsZXgtd3JhcCBmbGV4IGp1c3RpZnktY2VudGVyIG1kOmp1c3RpZnktc3RhcnRcIj5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbWFnZXMvc2Frc2hhbUFJL2xhZHktZ3JlZXQuc3ZnXCIgYWx0PVwiZ3JlZXRcIiB3aWR0aD1cIjU2Ljg5XCIgaGVpZ2h0PVwiNjRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmVudC1pbmZvXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkZXIgdGV4dC1zbSByZWxldmVudC1oZWFkaW5nIGJsb2NrIG1iLTFcIj57eyAnaG9tZS50b2NSZWxldmVudEhlYWRpbmcnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVsZXZlbnQtc3ViaW5mbyBmb250LW5vcm1hbCB0ZXh0LXNtIGJsb2NrXCI+e3sgJ2hvbWUudG9jUmVsZXZlbnRTdWJIZWFkaW5nJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LW1pZGRsZSByZWxldmFudC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1taWRkbGUgcmVsZXZlbnQtbm9ybWFsIHJlbGV2ZW50LWJ0biBweS0yIHB4LTQgcmVsZXZhbnQtYm94XCJcbiAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJpc1JlbGV2ZW50QnRuSG92ZXJlZCA9IHRydWVcIiAobW91c2VsZWF2ZSk9XCJpc1JlbGV2ZW50QnRuSG92ZXJlZCA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWNjZXB0UmVsZXZlbnQoKVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpc1JlbGV2ZW50QnRuSG92ZXJlZCAmJiAhaXNSZWxldmVudCA/IFNBS1NIQU1BSV9JQ09OX0xPQURFUiA6IFNBS1NIQU1BSV9JQ09OX05PUk1BTFwiXG4gICAgICAgICAgICAgICAgICBhbHQ9XCJsb2FkZXJcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBjbGFzcz1cIm1yLTJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVsZXZlbnQgZmYtbGF0byB0ZXh0LXNtIGZvbnQtYm9sZFwiPnt7ICdob21lLnJlbGV2ZW50JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1taWRkbGUgbm8tYnV0dG9uIG1sLThcIiAoY2xpY2spPVwiaGFuZGxlRGVjbGluZVJlbGV2ZW50KClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbiB0ZXh0LW5vIG1yLTEgbm9kdHJhbnNsYXRlXCI+dGh1bWJfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW5vIGZmLWxhdG8gdGV4dC1zbSBmb250LWJvbGRcIj57eyAnaG9tZS5ubycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwicGItNCBsZzpweS00XCJcbiAgICAgICAgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LmlkZW50aWZpZXIgJiYgY29udGVudD8uaWRlbnRpZmllciAmJiBiYXNlQ29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyXCI+XG4gICAgICAgIDwhLS0gT3ZlcmFsbCBwcm9ncmVzcyBmdW5jdGlvbmFsaXR5IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLXByb2dyZXNzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9ncmVzc0Z1bmN0aW9uYWxpdHlcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gT3ZlcmFsbCBwcm9ncmVzcyBmdW5jdGlvbmFsaXR5IC0tPlxuICAgICAgICA8d3Mtd2lkZ2V0LWNvbnRlbnQtdG9jIFtjb250ZW50XT1cImNvbnRlbnRcIiBbY29tcG9uZW50TmFtZV09XCIndG9jJ1wiIFtwYXRoU2V0XT1cInBhdGhTZXRcIlxuICAgICAgICAgIFt0b2NTdHJ1Y3R1cmVdPVwidG9jU3RydWN0dXJlXCIgW2ZvclByZXZpZXddPVwiZm9yUHJldmlld1wiIFtpc0Vucm9sbGVkXT1cImJhdGNoRGF0YT8uZW5yb2xsZWRcIlxuICAgICAgICAgIFtyZXN1bWVEYXRhXT1cInJlc3VtZURhdGFcIiBbYmF0Y2hEYXRhXT1cInNlbGVjdGVkQmF0Y2hEYXRhXCIgW3NrZWxldG9uTG9hZGVyXT1cInNrZWxldG9uTG9hZGVyXCJcbiAgICAgICAgICBbY2hhbmdlVGFiXT1cImNoYW5nZVRhYlwiIFtoaWVyYXJjaHlNYXBEYXRhXT1cInRvY1N2Yz8uaGFzaG1hcFwiIFtzZWxlY3RlZEJhdGNoRGF0YV09XCJzZWxlY3RlZEJhdGNoRGF0YVwiXG4gICAgICAgICAgW2NvbmRpdGlvbl09XCJ7aXNQb3N0QXNzZXNzbWVudDogaXNQb3N0QXNzZXNzbWVudCwgY29udGVudDogY29udGVudCwgaXNBY2JwQ291cnNlOiBpc0FjYnBDb3Vyc2UsIGlzQ2xhaW1lZDogaXNDbGFpbWVkLCBtb250aGx5Q2FwRXhjZWVkOiBtb250aGx5Q2FwRXhjZWVkLCBpc0NvbXBsZXRlZFRoaXNNb250aDogaXNDb21wbGV0ZWRUaGlzTW9udGgsIHNob3dUYWtlQXNzZXNzbWVudDogc2hvd1Rha2VBc3Nlc3NtZW50LCB1c2VyRW5yb2xsbWVudExpc3Q6IHVzZXJFbnJvbGxtZW50TGlzdCwgcmVzdW1lRGF0YTogcmVzdW1lRGF0YSwgdXNlclJhdGluZzogdXNlclJhdGluZywgZW5yb2xsQnRuTG9hZGluZzogZW5yb2xsQnRuTG9hZGluZywgcHJpbWFyeUNhdGVnb3J5OiBwcmltYXJ5Q2F0ZWdvcnksIGN1cnJlbnRDb3Vyc2VCYXRjaElkOiBjdXJyZW50Q291cnNlQmF0Y2hJZCwgaXNBY2JwQ2xhaW06IGlzQWNicENsYWltfVwiXG4gICAgICAgICAgW2twYXJyYXldPVwia3BhcnJheVwiIChwbGF5UmVzdW1lRm9yQUkpPVwicGxheVJlc3VtZUZvckFJKClcIiAoZW5yb2xsVXNlclRvQUkpPVwiZW5yb2xsVXNlclRvQUkoKVwiXG4gICAgICAgICAgW2NvbnRlbnRSZWFkRGF0YV09XCJjb250ZW50UmVhZERhdGFcIiBbYmFzZUNvbnRlbnRSZWFkRGF0YV09XCJiYXNlQ29udGVudFJlYWREYXRhXCIgW2xhbmd1YWdlTGlzdF09XCJsYW5ndWFnZUxpc3RcIlxuICAgICAgICAgIFtsb2NrQ2VydGlmaWNhdGVdPVwibG9ja0NlcnRpZmljYXRlXCIgKHRyaWdlckNvbXBsZXRpb25TdXJ2ZXlGb3JtKT1cIm9wZW5TdXJ2ZXlGb3JtUG9wdXAoJGV2ZW50KVwiXG4gICAgICAgICAgKHJlc3VtZUNvbnRlbnQpPVwicmVzdW1lQ29udGVudERhdGEoKVwiPjwvd3Mtd2lkZ2V0LWNvbnRlbnQtdG9jPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9iLXRpcC1mb3ItbGVhcm5lclwiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJsZWFybkFkdmlzb3J5RGF0YSAmJiBsZWFybkFkdmlzb3J5RGF0YT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8d3Mtd2lkZ2V0LXRpcHMtZm9yLWxlYXJuZXItY2FyZCBbbGVhcm5BZHZpc29yeURhdGFdPVwibGVhcm5BZHZpc29yeURhdGFcIj48L3dzLXdpZGdldC10aXBzLWZvci1sZWFybmVyLWNhcmQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cblxuICAgIDxkaXYgY2xhc3M9XCJyaWdodC1jb250YWluZXJcIj5cblxuICAgICAgPCEtLSBpZiBuZWVkZWQgc3RpY2t5IG9mIHJpZ2h0IGNvbnRhaW5lciBhZGQgdGhpcyB0byBiZWxvdyBkaXYgPT4gI3JpZ2h0Q29udGFpbmVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWNvbnRlbnQtaW5uZXJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2tlbGV0b25Mb2FkZXJcIj5cbiAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMzg0cHgnXCIgW2hlaWdodF09XCInMjI0cHgnXCJcbiAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaW1hZ2UtZGl2XCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAnYmFja2dyb3VuZC1pbWFnZSc6ICd1cmwoJyArIGNvbnRlbnRSZWFkRGF0YT8ucG9zdGVySW1hZ2UgKyAnKScsICdiYWNrZ3JvdW5kLXJlcGVhdCc6ICduby1yZXBlYXQnLCAnYmFja2dyb3VuZC1zaXplJzogJ2NvdmVyJ31cIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ltYWdlLWJhY2tkcm9wJzogc2Nyb2xsZWR9XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiB0ZXh0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBqdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydqdXN0aWZ5LWJldHdlZW4nOiBzY3JvbGxlZCwgJ2p1c3RpZnktZW5kJzogIXNjcm9sbGVkfVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgdGFnLWRpdiByb3VuZGVkLTJ4bCBnYXAtMSBpdGVtcy1jZW50ZXIgcC0yXCIgKm5nSWY9XCJzY3JvbGxlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ3cy1tYXQtb3JhbmdlLXRleHQgbm9kdHJhbnNsYXRlXCI+dmlkZW9fbGlicmFyeTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteHMgZm9udC1ib2xkIHRleHQtd2hpdGUgbGVhZGluZy0zXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUxhYmVsKGNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnksICdzZWFyY2hmaWx0ZXJzJykgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LXdoaXRlIGxlYWRpbmctM1wiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVMYWJlbChjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSwgJ3NlYXJjaGZpbHRlcnMnKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25DbGlja09mU2hhcmUoKVwiIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTIgc2hhcmUtdGFnXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5TaGFyZSAmJiAhZm9yUHJldmlld1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJub2R0cmFuc2xhdGVcIj5zaGFyZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgJ2FwcHRvY3NpbmdsZXBhZ2Uuc2hhcmUnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiICpuZ0lmPVwic2Nyb2xsZWRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhsIGxlYWRpbmctNiB0ZXh0LXdoaXRlIGZvbnQtYm9sZFwiPnt7IGhhbmRsZUNhcGl0YWxpemUoY29udGVudFJlYWREYXRhPy5uYW1lKSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSBzb3VyY2UtdGV4dCBmb250LXNlbWlib2xkIGJyZWFrLXdvcmRzXCIgI2NvbnRlbnRTb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzb3VyY2VFbGxpcHNpcyc6IHNvdXJjZUVsbGlwc2lzfVwiIHRpdGxlPVwie3tjb250ZW50UmVhZERhdGE/LnNvdXJjZX19XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgJ2NhcmRjb250ZW50djIuYnknIHwgdHJhbnNsYXRlIH19IHt7IGNvbnRlbnRSZWFkRGF0YT8uc291cmNlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IHAtNSBib3JkZXItYm90dG9tXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMSAgY3Vyc29yLXBvaW50ZXIgc3dpdGNoLXZlcnNpb25cIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFza2VsZXRvbkxvYWRlciAmJiBjb250ZW50UmVhZERhdGE/LmNvbnRlbnRWZXJzaW9uSW5mbz8uaWRlbnRpZmllclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvTmV3VmVyc2lvbigpXCIgKGtleWRvd24pPVwibmF2aWdhdGVUb05ld1ZlcnNpb24oKVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1zd2l0Y2hcIj57eyAnYXBwdG9jLnN3aXRjaFRvTmV3VmVyc2lvbicgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTRcIlxuICAgICAgICAgICAgICAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YSAmJiBjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMyBqdXN0aWZ5LWFyb3VuZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXRjaC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1iYXNlIGZvbnQtYm9sZFwiPnt7IHNlbGVjdGVkQmF0Y2hEYXRhPy5jb250ZW50WzBdPy5iYXRjaEF0dHJpYnV0ZXM/LmN1cnJlbnRCYXRjaFNpemVcbiAgICAgICAgICAgICAgICAgICAgfHwgJzAnIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmF0Y2gtbGFiZWxcIj57eyAnYXBwdG9jLmJhdGNoU2l6ZScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmF0Y2gtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtYmFzZSBmb250LWJvbGRcIj57eyBzZWxlY3RlZEJhdGNoRGF0YT8udXNlckNvdW50Py50b3RhbEFwcGxpZWQgfHwgJzAnIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmF0Y2gtbGFiZWxcIj57eyAnYXBwdG9jLnRvdGFsQXBwbGllZCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmF0Y2gtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtYmFzZSBmb250LWJvbGRcIj57eyBzZWxlY3RlZEJhdGNoRGF0YT8udXNlckNvdW50Py5lbnJvbGxlZCB8fCAnMCcgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXRjaC1sYWJlbFwiPnt7ICdhcHB0b2MudG90YWxFbnJvbGxlZCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNICYmICFwcmVBc3Nlc3NtZW50Q29tcGxldGlvblN0YXR1c1wiPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGVucm9sbC1idG4ganVzdGlmeS1jZW50ZXIgcmVzdW1lXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5wcmVFbnJvbG1lbnRSZXNvdXJjZXM/Lmxlbmd0aFwiIChjbGljayk9XCJyb3V0ZVRvUHJlQXNzZXNzZW50KClcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdhcHB0b2Nob21lLnByZUVucm9sbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNICYmIHByZUFzc2Vzc21lbnRDb21wbGV0aW9uU3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmbGV4IHByZWVucm9sbGRvbmUtYnRuIGp1c3RpZnktY2VudGVyIHJlc3VtZVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ2FwcHRvY2hvbWUucHJlRW5yb2xsRG9uZScgfCB0cmFuc2xhdGUgfX08aW1nIHNyYz1cIi9hc3NldHMvaWNvbnMvQWNjZXB0X2ljb24ucG5nXCIgYWx0PVwidGlja1wiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0aWNrLWljb25cIj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRpbWVyICYmIHRpbWVyLmRheXMgPj0gMCAmJiBjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC02IGJhdGNoLXRpbWVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdW5kZXJsaW5lXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lci1sYWJlbFwiPnt7ICdhcHB0b2NzaW5nbGVwYWdlLmJhdGNoU3RhcnRzSW4nIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdW5kZXJsaW5lXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtNCBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMSBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC00eGwgbGVhZGluZy0xMCBjb3VudGVyXCI+e3sgdGltZXIuZGF5cyB8fCAwIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXItbGFiZWxcIj57eyAnYXBwdG9jc2luZ2xlcGFnZS5kYXlzJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGNvdW50ZXItbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMSBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC00eGwgbGVhZGluZy0xMCBjb3VudGVyXCI+e3sgdGltZXIubWluID09PSA2MCA/IHRpbWVyLmhvdXJzICsgMSA6IHRpbWVyLmhvdXJzIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXItbGFiZWxcIj57eyAnYXBwdG9jc2luZ2xlcGFnZS5ob3VycycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBjb3VudGVyLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTEgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtNHhsIGxlYWRpbmctMTAgY291bnRlclwiPnt7IHRpbWVyLm1pbiA9PT0gNjAgPyAwMCA6IHRpbWVyLm1pbiB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLWxhYmVsXCI+e3sgJ2FwcHRvY3NpbmdsZXBhZ2UubWludXRlcycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9yUHJldmlldyB8fCBpc0luSUZyYW1lOyBlbHNlIGF1dGhWaWV3QnRuXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtb2JpbGUxMjAwICYmIChcbiAgICAgICAgICFjb250ZW50UmVhZERhdGE/LnByZUVucm9sbWVudFJlc291cmNlcz8ubGVuZ3RoIHx8XG4gICAgICAgICAoY29udGVudFJlYWREYXRhPy5wcmVFbnJvbG1lbnRSZXNvdXJjZXM/Lmxlbmd0aCAmJiAocHJlQXNzZXNzbWVudENvbXBsZXRpb25TdGF0dXMgfHwgICFwcmVBc3Nlc3NtZW50UmVxdWlyZWRGbGFnKSlcbiAgICAgICApXCI+XG5cbiAgICAgICAgICAgICAgICAgIDx3cy1hcHAtdG9jLWJhbm5lciByb2xlPVwiYmFubmVyXCIgW2Jhbm5lcnNdPVwiYmFubmVyc1wiIFtmb3JQcmV2aWV3XT1cImZvclByZXZpZXdcIiBbY29udGVudF09XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW3VzZXJFbnJvbGxtZW50TGlzdF09XCJ1c2VyRW5yb2xsbWVudExpc3RcIiAod2l0aGRyYXdPckVucm9sbCk9XCJ3aXRoZHJhd09yRW5yb2xsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbYW5hbHl0aWNzXT1cImFuYWx5dGljc1wiIFtyZXN1bWVEYXRhXT1cInJlc3VtZURhdGFcIiBbYmF0Y2hEYXRhXT1cImJhdGNoRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb250ZW50UmVhZERhdGFdPVwiY29udGVudFJlYWREYXRhXCI+XG4gICAgICAgICAgICAgICAgICA8L3dzLWFwcC10b2MtYmFubmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzMzNnB4J1wiIFtoZWlnaHRdPVwiJzQwcHgnXCJcbiAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIiczMzZweCdcIiBbaGVpZ2h0XT1cIic2OHB4J1wiXG4gICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBnYXAtMiBpbmZvLWRpdlwiICpuZ0lmPVwiY29udGVudD8uaXNJbkludHJhbmV0ICYmIHNob3dJbnRyYW5ldE1zZ1wiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibm9kdHJhbnNsYXRlXCI+aW5mbzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPnt7ICdhcHB0b2Nob21lLnZpZXdlZEluSW50cmFuZXQnIHwgdHJhbnNsYXRlIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGdhcC0yIGluZm8tZGl2XCIgKm5nSWY9XCJzaG93SW5zdHJ1Y3RvckxlZE1zZ1wiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibm9kdHJhbnNsYXRlXCI+aW5mbzwvbWF0LWljb24+Jm5ic3A7XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPnt7ICdhcHB0b2Nob21lLm5vdEF2YWlsYWJsZU9ubGluZScgfCB0cmFuc2xhdGUgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIgZ2FwLTIgaW5mby1kaXZcIiAqbmdJZj1cInNob3dTdGFydC5tc2cgPT09ICd5b3V0dWJlRm9yYmlkZGVuJ1wiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibm9kdHJhbnNsYXRlXCI+aW5mbzwvbWF0LWljb24+Jm5ic3A7XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPnt7ICdhcHB0b2Nob21lLnlvdXR1YmVDb250ZW50QmxvY2tlZCcgfCB0cmFuc2xhdGUgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0J0blwiPlxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cInt7IGNzY21zVXJsIH19XCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ2FwcHRvY2hvbWUuYXBwbHlGb3JQaHlzaWNhbFRyYWluaW5nJyB8IHRyYW5zbGF0ZSB9fTwvYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gT3ZlcmFsbCBwcm9ncmVzcyBmdW5jdGlvbmFsaXR5IC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50Py5jb21wbGV0aW9uU3RhdHVzIDw9IDIgJiYgaXNCYXRjaEluUHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicHJvZ3Jlc3NGdW5jdGlvbmFsaXR5XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPCEtLSBPdmVyYWxsIHByb2dyZXNzIGZ1bmN0aW9uYWxpdHkgLS0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJyZXN1bWVEYXRhICYmICF1c2VyUmF0aW5nXCI+IC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gPHdzLWFwcC1rYXJtYXBvaW50cy1wYW5lbCBbYnRudHlwZV09XCInUmF0ZSB0aGlzIGNvdXJzZSdcIiBbZGF0YV09XCJrcGFycmF5XCJcbiAgICAgICAgICAgICAgICAgIFtwQ2F0ZWdvcnldPVwiY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnlcIj48L3dzLWFwcC1rYXJtYXBvaW50cy1wYW5lbD4gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJyZXN1bWVEYXRhICYmIHVzZXJSYXRpbmdcIj5cbiAgICAgICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidFZGl0IHJhdGluZydcIiBbZGF0YV09XCJrcGFycmF5XCJcbiAgICAgICAgICAgICAgICAgIFtwQ2F0ZWdvcnldPVwiY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnlcIj48L3dzLWFwcC1rYXJtYXBvaW50cy1wYW5lbD5cbiAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb25CdG5TdGF0dXMgIT09ICd3YWl0JyAmJiBjb250ZW50UmVhZERhdGE/LnN0YXR1cyAhPT0gJ0RlbGV0ZWQnICYmIGNvbnRlbnRSZWFkRGF0YT8uc3RhdHVzICE9PSAnRXhwaXJlZCdcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZW5yb2xsRnVuY3Rpb25hbGl0eVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2FybWEtcG9pbnRzLWRpdlwiPlxuICAgICAgICAgICAgICAgIDx3cy13aWRnZXQta2FybWEtcG9pbnRzIFtkYXRhXT1cImtwYXJyYXlcIiAoY2xpY2tDbGFpbUthcm1hUG9pbnRzKT1cIm9uQ2xpY2tPZkNsYWltKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiY29udGVudFwiXG4gICAgICAgICAgICAgICAgICBbY29uZGl0aW9uXT1cIntpc1Bvc3RBc3Nlc3NtZW50OiBpc1Bvc3RBc3Nlc3NtZW50LCBjb250ZW50OiBjb250ZW50LCBpc0FjYnBDb3Vyc2U6IGlzQWNicENvdXJzZSwgaXNDbGFpbWVkOiBpc0NsYWltZWQsIG1vbnRobHlDYXBFeGNlZWQ6IG1vbnRobHlDYXBFeGNlZWQsIGlzQ29tcGxldGVkVGhpc01vbnRoOiBpc0NvbXBsZXRlZFRoaXNNb250aCwgc2hvd1Rha2VBc3Nlc3NtZW50OiBzaG93VGFrZUFzc2Vzc21lbnQsIHVzZXJFbnJvbGxtZW50TGlzdDogdXNlckVucm9sbG1lbnRMaXN0LCBpc0NvbXBsZXRlZFRoaXNNb250aDogaXNDb21wbGV0ZWRUaGlzTW9udGgsIHJlc3VtZURhdGE6IHJlc3VtZURhdGEsIHVzZXJSYXRpbmc6IHVzZXJSYXRpbmcsIGVucm9sbEJ0bkxvYWRpbmc6IGVucm9sbEJ0bkxvYWRpbmcsIHByaW1hcnlDYXRlZ29yeTogcHJpbWFyeUNhdGVnb3J5LCBjdXJyZW50Q291cnNlQmF0Y2hJZDogY3VycmVudENvdXJzZUJhdGNoSWQsIGlzQWNicENsYWltOiBpc0FjYnBDbGFpbX1cIj48L3dzLXdpZGdldC1rYXJtYS1wb2ludHM+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTIga3BpLWxvYWRlci1kaXZcIj5cbiAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMjhweCdcIiBbaGVpZ2h0XT1cIicyOHB4J1wiXG4gICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic0OHB4J1wiIFtoZWlnaHRdPVwiJzhweCdcIlxuICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTIga3BpLWxvYWRlci1kaXZcIj5cbiAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMjhweCdcIiBbaGVpZ2h0XT1cIicyOHB4J1wiXG4gICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic0OHB4J1wiIFtoZWlnaHRdPVwiJzhweCdcIlxuICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTIga3BpLWxvYWRlci1kaXZcIj5cbiAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMjhweCdcIiBbaGVpZ2h0XT1cIicyOHB4J1wiXG4gICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic0OHB4J1wiIFtoZWlnaHRdPVwiJzhweCdcIlxuICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTIga3BpLWxvYWRlci1kaXZcIj5cbiAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMjhweCdcIiBbaGVpZ2h0XT1cIicyOHB4J1wiXG4gICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic0OHB4J1wiIFtoZWlnaHRdPVwiJzhweCdcIlxuICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTIga3BpLWxvYWRlci1kaXZcIj5cbiAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMjhweCdcIiBbaGVpZ2h0XT1cIicyOHB4J1wiXG4gICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic0MHB4J1wiIFtoZWlnaHRdPVwiJzhweCdcIlxuICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInNDhweCdcIiBbaGVpZ2h0XT1cIic4cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2tlbGV0b25Mb2FkZXJcIj5cbiAgICAgICAgICAgICAgPHdzLXdpZGdldC10b2Mta3BpLXZhbHVlcyBbY29udGVudF09XCJjb250ZW50XCIgW3RvY1N0cnVjdHVyZV09XCJ0b2NTdHJ1Y3R1cmVcIlxuICAgICAgICAgICAgICAgIFtzaG93SW5zdHJ1Y3RvckxlZE1zZ109XCJzaG93SW5zdHJ1Y3RvckxlZE1zZ1wiIFtjb250ZW50UmVhZERhdGFdPVwiY29udGVudFJlYWREYXRhXCJcbiAgICAgICAgICAgICAgICBbbGFuZ3VhZ2VMaXN0XT1cImxhbmd1YWdlTGlzdFwiPjwvd3Mtd2lkZ2V0LXRvYy1rcGktdmFsdWVzPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtOCBwLTVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNFwiICpuZ0Zvcj1cImxldCBpIG9mIFsxLCAyXVwiPlxuICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInNzJweCdcIiBbaGVpZ2h0XT1cIicyMHB4J1wiXG4gICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIiczNnB4J1wiIFtoZWlnaHRdPVwiJzM2cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZC1mdWxsJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMTI0cHgnXCIgW2hlaWdodF09XCInMjBweCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzEyNHB4J1wiIFtoZWlnaHRdPVwiJzEycHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0zXCIgKm5nSWY9XCJoYW5kbGVQYXJzZUpzb25EYXRhKGNvbnRlbnRSZWFkRGF0YT8uY3JlYXRvckRldGFpbHMpPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtYm9sZFwiPnt7ICdhcHB0b2NzaW5nbGVwYWdlLmF1dGhvcnMnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTQgaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhdXRob3Igb2YgaGFuZGxlUGFyc2VKc29uRGF0YShjb250ZW50UmVhZERhdGE/LmNyZWF0b3JEZXRhaWxzKVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtYXZhdGFyLXBob3RvIFtyYW5kb21Db2xvcl09XCJ0cnVlXCIgW2RhdGFsZW5dPVwiMVwiIFtzaXplXT1cIidyb3VuZC1tJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Bob3RvVXJsXT1cImF1dGhvcj8ucGhvdG8gfHwgJydcIiBbbmFtZV09XCJhdXRob3I/Lm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC93cy13aWRnZXQtYXZhdGFyLXBob3RvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMSBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1ib2xkXCI+e3sgaGFuZGxlQ2FwaXRhbGl6ZShhdXRob3I/Lm5hbWUsICduYW1lJykgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteHMgbGVhZGluZy0zXCI+e3sgJ2FwcHRvY3NpbmdsZXBhZ2UuYXV0aG9yJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiICpuZ0lmPVwiaGFuZGxlUGFyc2VKc29uRGF0YShjb250ZW50UmVhZERhdGE/LmNyZWF0b3JDb250YWN0cyk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1ib2xkXCI+e3sgJ2FwcHRvY3NpbmdsZXBhZ2UuY3JlYXRvcnMnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTQgaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjcmVlYXRvciBvZiBoYW5kbGVQYXJzZUpzb25EYXRhKGNvbnRlbnRSZWFkRGF0YT8uY3JlYXRvckNvbnRhY3RzKVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtYXZhdGFyLXBob3RvIFtyYW5kb21Db2xvcl09XCJ0cnVlXCIgW2RhdGFsZW5dPVwiMVwiIFtzaXplXT1cIidyb3VuZC1tJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Bob3RvVXJsXT1cImNyZWVhdG9yPy5waG90byB8fCAnJ1wiIFtuYW1lXT1cImNyZWVhdG9yPy5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvd3Mtd2lkZ2V0LWF2YXRhci1waG90bz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTEganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7IGhhbmRsZUNhcGl0YWxpemUoY3JlZWF0b3I/Lm5hbWUsICduYW1lJykgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteHMgbGVhZGluZy0zXCI+e3sgJ2FwcHRvY3NpbmdsZXBhZ2UuY3JlYXRvcicgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTNcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5zb3VyY2UgICYmIChjb250ZW50Q3JlYXRvckRhdGEgJiYgY29udGVudENyZWF0b3JEYXRhPy5sZW5ndGgpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGRcIj57eyAnYXBwdG9jc2luZ2xlcGFnZS5wcm92aWRlcicgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtNCBpdGVtcy1jZW50ZXJcIiAqbmdGb3I9XCJsZXQgY3JlYXRvciBvZiBjb250ZW50Q3JlYXRvckRhdGFcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHByb3ZpZGVyLWxvZ28tZGl2XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LmNyZWF0b3JMb2dvXCIgW3NyY109XCJjb250ZW50UmVhZERhdGE/LmNyZWF0b3JMb2dvXCJcbiAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJ7eyAnYXBwdG9jc2luZ2xlcGFnZS5wcm92aWRlcicgfCB0cmFuc2xhdGUgfX1cIiAvPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiIWNvbnRlbnRSZWFkRGF0YT8uY3JlYXRvckxvZ29cIiBjbGFzcz1cIm1hdC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBzcmM9XCIvYXNzZXRzL2luc3RhbmNlcy9lYWdsZS9hcHBfbG9nb3MvS2FybWF5b2dpQmhhcmF0X0xvZ28uc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJ7eyAnYXBwdG9jc2luZ2xlcGFnZS5wcm92aWRlcicgfCB0cmFuc2xhdGUgfX1cIiAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSB3b3JkLWJyZWFrIGN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LmNyZWF0ZWRGb3I/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyYWlzZVRlbGVtZXRlcnlGb3JQcm92aWRlcihjb250ZW50UmVhZERhdGE/LnNvdXJjZSwgY29udGVudFJlYWREYXRhPy5jcmVhdGVkRm9yWzBdKVwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL2FwcC9sZWFybi9icm93c2UtYnkvcHJvdmlkZXInLCBjb250ZW50UmVhZERhdGE/LnNvdXJjZSwgY29udGVudFJlYWREYXRhPy5jcmVhdGVkRm9yWzBdLCAnbWljcm8tc2l0ZXMnXVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBoYW5kbGVDYXBpdGFsaXplKGNvbnRlbnRSZWFkRGF0YT8uc291cmNlLCAnc291cmNlJykgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gd29yZC1icmVha1wiICpuZ0lmPVwiIWNvbnRlbnRSZWFkRGF0YT8uY3JlYXRlZEZvcj8ubGVuZ3RoXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2FwaXRhbGl6ZShjb250ZW50UmVhZERhdGE/LnNvdXJjZSwgJ3NvdXJjZScpIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cImxlYXJuQWR2aXNvcnlEYXRhICYmIGxlYXJuQWR2aXNvcnlEYXRhPy5sZW5ndGhcIj5cbiAgICAgICAgICA8d3Mtd2lkZ2V0LXRpcHMtZm9yLWxlYXJuZXItY2FyZCBbbGVhcm5BZHZpc29yeURhdGFdPVwibGVhcm5BZHZpc29yeURhdGFcIj48L3dzLXdpZGdldC10aXBzLWZvci1sZWFybmVyLWNhcmQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cblxuXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9iaWxlLWVucm9sbC1kaXZcIlxuICAgIFtuZ0NsYXNzXT1cInsnYmctd2hpdGUnOiBjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSB9XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnQgJiYgY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0gXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItMlwiICpuZ0lmPVwibW9iaWxlMTIwMCAmJiAhZm9yUHJldmlldyB8fCBpc0luSUZyYW1lOyBlbHNlIGF1dGhWaWV3QnRuXCI+XG4gICAgICAgIDx3cy1hcHAtdG9jLWJhbm5lciByb2xlPVwiYmFubmVyXCIgW2Jhbm5lcnNdPVwiYmFubmVyc1wiIFtmb3JQcmV2aWV3XT1cImZvclByZXZpZXdcIiBbY29udGVudF09XCJjb250ZW50XCJcbiAgICAgICAgICBbdXNlckVucm9sbG1lbnRMaXN0XT1cInVzZXJFbnJvbGxtZW50TGlzdFwiICh3aXRoZHJhd09yRW5yb2xsKT1cIndpdGhkcmF3T3JFbnJvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgW2FuYWx5dGljc109XCJhbmFseXRpY3NcIiBbcmVzdW1lRGF0YV09XCJyZXN1bWVEYXRhXCIgW2JhdGNoRGF0YV09XCJiYXRjaERhdGFcIiBbY29udGVudFJlYWREYXRhXT1cImNvbnRlbnRSZWFkRGF0YVwiPlxuICAgICAgICA8L3dzLWFwcC10b2MtYmFubmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJlbnJvbGxGdW5jdGlvbmFsaXR5XCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDx3cy1hcHAtc2hhcmUtdG9jICpuZ0lmPVwiZW5hYmxlU2hhcmVcIiBbcm9vdE9yZ0lkXT1cInJvb3RPcmdJZFwiIFtjb250ZW50XT1cImNvbnRlbnRcIlxuICAgIChyZXNldEVuYWJsZVNoYXJlKT1cInJlc2V0RW5hYmxlU2hhcmUoJGV2ZW50KVwiIFtiYXNlQ29udGVudFJlYWREYXRhXT1cImJhc2VDb250ZW50UmVhZERhdGFcIj48L3dzLWFwcC1zaGFyZS10b2M+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjbm9EYXRhRm91bmQ+XG4gIDxkaXZcbiAgICBjbGFzcz1cImVycm9yLW5vdC1mb3VuZCBmbGV4IGZsZXgtd3JhcHBlZCBtYXJnaW4tbGVmdC1tIG1hcmdpbi10b3AteGwgbWFyZ2luLXJpZ2h0LW0gZmxleC1jb2wganVzdGlmeS1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHRleHQtY2VudGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImVycm9yLWxvZ29cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlIHdzLW1hdC1wcmltYXJ5LXRleHQgZm9udC13ZWlnaHQtYm9sZFwiPlxuICAgICAgICBUaGUgcGFnZSB5b3UgcmVxdWVzdGVkIGNhbm5vdCBiZSBmb3VuZFxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiZXJyb3Itc3VwcG9ydFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInN1cHBvcnQtbWVzc2FnZVwiID5XZSBoYXZlIHVwZGF0ZWQgb3VyIHdlYiBzaXRlIGFuZCBtYW55IFVSTHMgaGF2ZSBjaGFuZ2VkLjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInN1cHBvcnQtbWVzc2FnZVwiID5Zb3UgbWlnaHQgd2FudCB0bzo8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PlxuXG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2F1dGhWaWV3Pnt7J2FwcHRvY2hvbWUudmlldycgfCB0cmFuc2xhdGV9fTwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYXV0aFZpZXdCdG4gaTE4bj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXlWaWV3QnRuXCI+XG4gICAgPGEgKGNsaWNrKT1cInJhaXNlVGVsZW1ldHJ5Rm9yUHVibGljKCRldmVudClcIlxuICAgIFtyb3V0ZXJMaW5rXT1cInNob3VsZFNob3dTdXJ2ZXlQb3B1cCgpID8gbnVsbCA6ICgocmVzdW1lRGF0YSAmJiAhY2VydERhdGEpID8gcmVzdW1lRGF0YUxpbms/LnVybCA6IGZpcnN0UmVzb3VyY2VMaW5rPy51cmwpXCJcbiAgICBbcXVlcnlQYXJhbXNdPVwic2hvdWxkU2hvd1N1cnZleVBvcHVwKCkgPyBudWxsIDogKChyZXN1bWVEYXRhICYmICFjZXJ0RGF0YSkgPyBnZW5lcmF0ZVF1ZXJ5KCdSRVNVTUUnKSA6IGdlbmVyYXRlUXVlcnkoJ1NUQVJUJykpXCJcbiAgICBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlclwiPlxuICAgIHt7J2FwcHRvY2hvbWUudmlldycgfCB0cmFuc2xhdGV9fVxuICA8L2E+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjYXV0aFZpZXdGb3JJbnZpdGVPbmx5QXNzZXNzbWVudD5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvclByZXZpZXcgJiYgY29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0ludml0ZS1Pbmx5IEFzc2Vzc21lbnQnXCI+XG4gICAgPGEgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgcmVzdW1lXCIgW3JvdXRlckxpbmtdPVwiZmlyc3RSZXNvdXJjZUxpbms/LnVybFwiXG4gICAgICBbcXVlcnlQYXJhbXNdPVwiKHJlc3VtZURhdGEgJiYgIWNlcnREYXRhKSA/IGdlbmVyYXRlUXVlcnkoJ1JFU1VNRScpIDogZ2VuZXJhdGVRdWVyeSgnU1RBUlQnKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lcj57eyAnYXBwdG9jaG9tZS50YWtlVGVzdCcgfCB0cmFuc2xhdGUgfX08L25nLWNvbnRhaW5lcj5cbiAgICA8L2E+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
2999
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1ob21lLXYyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9jb21wb25lbnRzL2FwcC10b2MtaG9tZS12Mi9hcHAtdG9jLWhvbWUtdjIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1ob21lLXYyL2FwcC10b2MtaG9tZS12Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFBYyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUM3RCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUE7QUFHdEIsT0FBTyxFQUF1QyxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNwRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHL0QsT0FBTyxFQUE0QixPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDeEUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFBO0FBQ3pCLDJCQUEyQjtBQUMzQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUE7QUFFdEIsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFBO0FBQzNCLE9BQU8sY0FBYyxNQUFNLDZCQUE2QixDQUFBO0FBRXhELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUVoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUV4RSxPQUFPLEVBSWdDLFFBQVEs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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQsXG4gIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiwgSW5wdXQsXG4gIEluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgU2FmZUh0bWwsIERvbVNhbml0aXplciwgU2FmZVN0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlcidcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBFdmVudCwgRGF0YSwgUm91dGVyLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG4vLyBpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIE9ic2VydmFibGUsIFN1YmplY3QsIG9mLCBmcm9tIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHNoYXJlLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCdcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUnXG5cbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcy93aWRnZXQtY29udGVudC5tb2RlbCdcbmltcG9ydCB7IFdpZGdldENvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzL3dpZGdldC1jb250ZW50LnNlcnZpY2UnXG5pbXBvcnQgeyB2aWV3ZXJSb3V0ZUdlbmVyYXRvciB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcy92aWV3ZXItcm91dGUtdXRpbCdcbmltcG9ydCB7IE5zV2lkZ2V0UmVzb2x2ZXIgfSBmcm9tICdAc3VuYmlyZC1jYi9yZXNvbHZlci12MidcbmltcG9ydCB7XG4gIENvbmZpZ3VyYXRpb25zU2VydmljZSwgRGF0YVRyYW5zZmVyU2VydmljZSwgRXZlbnRTZXJ2aWNlLFxuICBMb2dnZXJTZXJ2aWNlLCBNdWx0aWxpbmd1YWxUcmFuc2xhdGlvbnNTZXJ2aWNlLFxuICBOc1BhZ2UsIFRGZXRjaFN0YXR1cywgVGVsZW1ldHJ5U2VydmljZSxcbiAgVXRpbGl0eVNlcnZpY2UsIFdpZGdldEVucm9sbFNlcnZpY2UsIFdzRXZlbnRzLFxufSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12MidcblxuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCBDb250ZW50TGFuZ3VhZ2VTZXJ2aWNlLCBUT0NNdWx0aUxpbmd1YWxEaWFsb2dDb21wb25lbnQsIFdpZGdldENvbnRlbnRMaWJTZXJ2aWNlLCBXaWRnZXRVc2VyU2VydmljZUxpYiB9IGZyb20gJ0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uJ1xuaW1wb3J0IHsgTnNBcHBUb2MgfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwLXRvYy5tb2RlbCdcbmltcG9ydCB7IEFwcFRvY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtdG9jLnNlcnZpY2UnXG5pbXBvcnQgeyBNb2JpbGVBcHBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vYmlsZS1hcHBzLnNlcnZpY2UnXG5pbXBvcnQgeyBIYW5kbGVDbGFpbVNlcnZpY2UgfSBmcm9tICcuLi8uLi9fY29sbGVjdGlvbi9fY29tbW9uL2NvbnRlbnQtdG9jL2NvbnRlbnQtc2VydmljZXMvaGFuZGxlLWNsYWltLnNlcnZpY2UnXG5pbXBvcnQgeyBBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWN0aW9uLnNlcnZpY2UnXG5pbXBvcnQgeyBSYXRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzL3JhdGluZy5zZXJ2aWNlJ1xuaW1wb3J0IHsgVmlld2VyVXRpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92aWV3ZXItdXRpbC5zZXJ2aWNlJ1xuaW1wb3J0IHsgTG9hZENoZWNrU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvYWQtY2hlY2suc2VydmljZSdcbmltcG9ydCB7IFJlc2V0UmF0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXNldC1yYXRpbmdzLnNlcnZpY2UnXG5cbmltcG9ydCB7IEFwcFRvY0RpYWxvZ0ludHJvVmlkZW9Db21wb25lbnQgfSBmcm9tICcuLi9hcHAtdG9jLWRpYWxvZy1pbnRyby12aWRlby9hcHAtdG9jLWRpYWxvZy1pbnRyby12aWRlby5jb21wb25lbnQnXG5pbXBvcnQgeyBDb250ZW50UmF0aW5nVjJEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9fY29sbGVjdGlvbi9fY29tbW9uL2NvbnRlbnQtcmF0aW5nLXYyLWRpYWxvZy9jb250ZW50LXJhdGluZy12Mi1kaWFsb2cuY29tcG9uZW50J1xuaW1wb3J0IHsgVGltZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGltZXIuc2VydmljZSdcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZyBhcyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJ1xuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJ1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgYXMgTWF0U25hY2tiYXJOZXcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInXG5pbXBvcnQgeyBOZXRDb3JlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25ldGNvcmUuc2VydmljZSdcbmltcG9ydCB7IEVucm9sbExhbmd1YWdlRGlhbG9ndWVDb21wb25lbnQgfSBmcm9tICcuLi9lbnJvbGwtbGFuZ3VhZ2UtZGlhbG9ndWUvZW5yb2xsLWxhbmd1YWdlLWRpYWxvZ3VlLmNvbXBvbmVudCdcbmltcG9ydCB7IENvbXBsZXRpb25TdXJ2ZXlGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcGxldGlvbi1zdXJ2ZXktZm9ybS9jb21wbGV0aW9uLXN1cnZleS1mb3JtLmNvbXBvbmVudCdcbmltcG9ydCB7IFB1YmxpY1N1cnZleUZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9wdWJsaWMtc3VydmV5LWZvcm0vcHVibGljLXN1cnZleS1mb3JtLmNvbXBvbmVudCdcbmltcG9ydCB7IE5zQ2FyZENvbnRlbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FyZC1jb250ZW50Lm1vZGVsJ1xuaW1wb3J0IHsgTm9uUmVsZXZlbnRGZWVkYmFja0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL25vbi1yZWxldmVudC1mZWVkYmFjay1kaWFsb2cvbm9uLXJlbGV2ZW50LWZlZWRiYWNrLWRpYWxvZy5jb21wb25lbnQnXG5pbXBvcnQgeyBBcHBUb2NWMlNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtdG9jLXYyLnNlcnZpY2UnXG5cbmV4cG9ydCBlbnVtIEVycm9yVHlwZSB7XG4gIGludGVybmFsU2VydmVyID0gJ2ludGVybmFsU2VydmVyJyxcbiAgc2VydmljZVVuYXZhaWxhYmxlID0gJ3NlcnZpY2VVbmF2YWlsYWJsZScsXG4gIHNvbWV0aGluZ1dyb25nID0gJ3NvbWV0aGluZ1dyb25nJyxcbn1cblxuY29uc3QgZmxhdHRlbkl0ZW1zID0gKGl0ZW1zOiBhbnlbXSwga2V5OiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgoZmxhdHRlbmVkSXRlbXMsIGl0ZW0pID0+IHtcbiAgICBmbGF0dGVuZWRJdGVtcy5wdXNoKGl0ZW0pXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbVtrZXldKSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG4gICAgICBmbGF0dGVuZWRJdGVtcyA9IGZsYXR0ZW5lZEl0ZW1zLmNvbmNhdChmbGF0dGVuSXRlbXMoaXRlbVtrZXldLCBrZXkpKVxuICAgIH1cbiAgICByZXR1cm4gZmxhdHRlbmVkSXRlbXNcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgfSwgW10pXG59XG5jb25zdCBTTkFDS0JBUl9EVVJBVElPTiA9IDMwMDBcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dzLWFwcC1hcHAtdG9jLWhvbWUtdjInLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLXRvYy1ob21lLXYyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLXRvYy1ob21lLXYyLmNvbXBvbmVudC5zY3NzJ10sXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdXNlLWNvbXBvbmVudC12aWV3LWVuY2Fwc3VsYXRpb25cbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgQXBwVG9jSG9tZVYyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQsIEFmdGVyVmlld0luaXQge1xuICBxdWVyeVBhcmFtc0RhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTsgLy8gSW5pdGlhbGl6ZSBxdWVyeVBhcmFtc0RhdGFcbiAgc2hvdyA9IGZhbHNlXG4gIGNoYW5nZVRhYiA9IGZhbHNlXG4gIHNrZWxldG9uTG9hZGVyID0gdHJ1ZVxuICBiYW5uZXJzOiBOc0FwcFRvYy5JVG9jQmFubmVyIHwgbnVsbCA9IG51bGxcbiAgc2hvd01vcmVHbGFuY2UgPSBmYWxzZVxuICBjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQgfCBudWxsID0gbnVsbFxuICBjb250ZW50UmVhZERhdGE6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwgPSBudWxsXG4gIGJhc2VDb250ZW50UmVhZERhdGE6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwgPSBudWxsXG4gIGVycm9yQ29kZTogTnNBcHBUb2MuRVdzVG9jRXJyb3JDb2RlIHwgbnVsbCA9IG51bGxcbiAgcmVzdW1lRGF0YTogYW55ID0gbnVsbFxuICBuc0NhcmRDb250ZW50RGF0YTogYW55ID0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3RcbiAgYmF0Y2hEYXRhOiBOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlIHwgbnVsbCA9IG51bGxcbiAgY3VycmVudENvdXJzZUJhdGNoSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIHVzZXJFbnJvbGxtZW50TGlzdCE6IE5zQ29udGVudC5JQ291cnNlW11cbiAgcm91dGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXG4gIHBhZ2VOYXZiYXI6IFBhcnRpYWw8TnNQYWdlLklOYXZCYWNrZ3JvdW5kPiA9IHRoaXMuY29uZmlnU3ZjLnBhZ2VOYXZCYXJcbiAgaXNDb2hvcnRzUmVzdHJpY3RlZCA9IGZhbHNlXG4gIHN0aWNreSA9IGZhbHNlXG4gIGlzSW5JZnJhbWUgPSBmYWxzZVxuICBjYlBsYW5FbmREYXRlOiBhbnlcbiAgY2JQbGFuRHVyYXRpb246IGFueVxuICBlbnJvbGxlZENvdXJzZURhdGE6IGFueVxuICBASW5wdXQoKSBmb3JQcmV2aWV3OiBhbnkgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL2F1dGhvci8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3ByZXZpZXcvJylcbiAgQElucHV0KCkgaW5wdXRDb250ZW50OiBhbnlcbiAgQElucHV0KCkgZGlzcGxheVZpZXdCdG46IGFueSA9IHRydWVcbiAgLy8gZm9yUHJldmlldyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvYXV0aG9yLycpXG4gIGFuYWx5dGljcyA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YT8ucGFnZURhdGE/LmRhdGE/LmFuYWx5dGljc1xuICBlcnJvcldpZGdldERhdGE6IE5zV2lkZ2V0UmVzb2x2ZXIuSVJlbmRlckNvbmZpZ1dpdGhUeXBlZERhdGE8YW55PiA9IHtcbiAgICB3aWRnZXRUeXBlOiAnZXJyb3JSZXNvbHZlcicsXG4gICAgd2lkZ2V0U3ViVHlwZTogJ2Vycm9yUmVzb2x2ZXInLFxuICAgIHdpZGdldERhdGE6IHtcbiAgICAgIGVycm9yVHlwZTogJ2ludGVybmFsU2VydmVyJyxcbiAgICB9LFxuICB9XG4gIGlzQXV0aG9yID0gZmFsc2VcbiAgYXV0aG9yQnRuV2lkZ2V0OiBOc1BhZ2UuSU5hdkxpbmsgPSB7XG4gICAgYWN0aW9uQnRuSWQ6ICdmZWF0dXJlX2F1dGhvcmluZycsXG4gICAgY29uZmlnOiB7XG4gICAgICB0eXBlOiAnbWF0LWJ1dHRvbicsXG4gICAgfSxcbiAgfVxuICB0b2NDb25maWc6IGFueSA9IG51bGxcbiAgcHJpbWFyeUNhdGVnb3J5ID0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnlcbiAgY291cnNlQ2F0ZWdvcnkgPSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5XG4gIFdGQmxlbmRlZFByb2dyYW1TdGF0dXMgPSBOc0NvbnRlbnQuV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1c1xuICBhc2tBdXRob3JFbmFibGVkID0gdHJ1ZVxuICB0cmFpbmluZ0xIdWJFbmFibGVkID0gZmFsc2VcbiAgdHJhaW5pbmdMSHViQ291bnQkPzogT2JzZXJ2YWJsZTxudW1iZXI+XG4gIGJvZHk6IFNhZmVIdG1sIHwgbnVsbCA9IG51bGxcbiAgdmlld01vcmVSZWxhdGVkVG9waWNzID0gZmFsc2VcbiAgaGFzVG9jU3RydWN0dXJlID0gZmFsc2VcbiAgdG9jU3RydWN0dXJlOiBOc0FwcFRvYy5JVG9jU3RydWN0dXJlIHwgbnVsbCA9IG51bGxcbiAgY29udGVudFBhcmVudHM6IHsgW2tleTogc3RyaW5nXTogTnNBcHBUb2MuSUNvbnRlbnRQYXJlbnRSZXNwb25zZVtdIH0gPSB7fVxuICBvYmpLZXlzID0gT2JqZWN0LmtleXNcbiAgZnJhZ21lbnQhOiBzdHJpbmdcbiAgYWN0aXZlRnJhZ21lbnQgPSB0aGlzLnJvdXRlLmZyYWdtZW50LnBpcGUoc2hhcmUoKSlcbiAgY3VycmVudEZyYWdtZW50ID0gJ292ZXJ2aWV3J1xuICBzaG93U2Nyb2xsITogYm9vbGVhblxuICBzaG93U2Nyb2xsSGVpZ2h0ID0gMzAwXG4gIGhpZGVTY3JvbGxIZWlnaHQgPSAxMFxuICBlbGVtZW50UG9zaXRpb246IGFueVxuICBiYXRjaFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGxcbiAgYmF0Y2hEYXRhU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxuICByZXN1bWVEYXRhU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxuICB0cmFuc2xhdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGxcbiAgaGFzaG1hcFVwZGF0ZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXG4gIEBWaWV3Q2hpbGQoJ3N0aWNreU1lbnUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBtZW51RWxlbWVudCE6IEVsZW1lbnRSZWZcbiAgYmF0Y2hDb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgY29udGVudFByb2dyZXNzID0gMFxuICBiYW5uZXJVcmw6IFNhZmVTdHlsZSB8IG51bGwgPSBudWxsXG4gIHJvdXRlUGF0aCA9ICdvdmVydmlldydcbiAgdmFsaWRQYXRocyA9IG5ldyBTZXQoWydvdmVydmlldycsICdjb250ZW50cycsICdhbmFseXRpY3MnXSlcbiAgcm91dGVyUGFyYW1TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXG4gIGluaXRpYWxyb3V0ZURhdGE6IGFueVxuICBhY3Rpb25CdG5TdGF0dXMgPSAnd2FpdCdcbiAgaXNSZWdpc3RyYXRpb25TdXBwb3J0ZWQgPSBmYWxzZVxuICBzaG93SW50cmFuZXRNZXNzYWdlID0gZmFsc2VcbiAgZmlyc3RSZXNvdXJjZUxpbms6IHsgdXJsOiBzdHJpbmc7IHF1ZXJ5UGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IH0gfCBudWxsID0gbnVsbFxuICByZXN1bWVEYXRhTGluazogeyB1cmw6IHN0cmluZzsgcXVlcnlQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfSB8IG51bGwgPSBudWxsXG4gIGNlcnREYXRhOiBhbnkgPSBudWxsXG4gIHNob3dUYWtlQXNzZXNzbWVudDogTnNBcHBUb2MuSVBvc3RBc3Nlc3NtZW50IHwgbnVsbCA9IG51bGxcbiAgY2hlY2tSZWdpc3RyYXRpb25Tb3VyY2VzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAgICdTa2lsbFNvZnQgRGlnaXRhbGl6YXRpb24nLFxuICAgICdTa2lsbFNvZnQgTGVhZGVyc2hpcCcsXG4gICAgJ1BsdXJhbHNpZ2h0JyxcbiAgXSlcbiAgZXh0ZXJuYWxDb250ZW50RmV0Y2hTdGF0dXM6IFRGZXRjaFN0YXR1cyA9ICdkb25lJ1xuICByZWdpc3RlckZvckV4dGVybmFsID0gZmFsc2VcbiAgaXNHb2Fsc0VuYWJsZWQgPSBmYWxzZVxuICBjb250ZXh0SWQ/OiBzdHJpbmdcbiAgY29udGV4dFBhdGg/OiBzdHJpbmdcbiAgZGVmYXVsdFNMb2dvID0gJydcbiAgZGlzYWJsZUVucm9sbEJ0biA9IGZhbHNlXG4gIGlzQXNzZXNzVmlzaWJsZSA9IGZhbHNlXG4gIGlzUHJhY3RpY2VWaXNpYmxlID0gZmFsc2VcbiAgY2VydGlmaWNhdGVPcGVuID0gZmFsc2VcbiAgYnJlYWRjcnVtYnM6IGFueVxuICBoaXN0b3J5RGF0YTogYW55XG4gIGNvdXJzZUNvbXBsZXRlU3RhdGUgPSAyXG4gIHVzZXJJZDogYW55XG4gIHVzZXJSYXRpbmc6IGFueVxuICBkYWtzaHRhTmFtZSA9IHRoaXMuZW52aXJvbm1lbnQuZGFrc2h0YU5hbWVcbiAgY3NjbXNVcmwgPSB0aGlzLmVudmlyb25tZW50LmNzY21zVXJsXG4gIHNob3dCdG4gPSBmYWxzZVxuICBjaGFubmVsSWQ6IGFueVxuICBzZWxlY3RlZEJhdGNoRGF0YTogYW55XG4gIHNlbGVjdGVkQmF0Y2hTdWJzY3JpcHRpb246IGFueVxuICBzZXJ2ZXJEYXRlU3Vic2NyaXB0aW9uOiBhbnlcbiAgc2VydmVyRGF0ZTogYW55XG4gIGtwYXJyYXk6IGFueSA9IFtdXG4gIGVucm9sbEJ0bkxvYWRpbmcgPSBmYWxzZVxuICBpc0FjYnBDb3Vyc2UgPSBmYWxzZVxuICBpc0FjYnBDbGFpbSA9IGZhbHNlXG4gIGNvdXJzZUlEOiBhbnlcbiAgaXNDbGFpbWVkID0gZmFsc2VcbiAgbW9udGhseUNhcEV4Y2VlZCA9IGZhbHNlXG4gIGlzQ29tcGxldGVkVGhpc01vbnRoID0gZmFsc2VcbiAgc3RhcnREYXRlOiBhbnlcbiAgZW5kRGF0ZTogYW55XG4gIHN0YXJ0RGF0ZURpZmZlcmVuY2U6IGFueVxuICBlbmREYXRlRGlmZmVyZW5jZTogYW55XG4gIEBWaWV3Q2hpbGQoJ3JpZ2h0Q29udGFpbmVyJykgcmNFbGVtZW50ITogRWxlbWVudFJlZlxuICBAVmlld0NoaWxkKCdiYW5uZXJEZXRhaWxzJywgeyBzdGF0aWM6IHRydWUgfSkgYmFubmVyRWxlbSE6IEVsZW1lbnRSZWZcbiAgQFZpZXdDaGlsZCgnY29udGVudFNvdXJjZScpIGNvbnRlbnRTb3VyY2UhOiBFbGVtZW50UmVmXG4gIHNvdXJjZUVsbGlwc2lzID0gZmFsc2VcbiAgc2Nyb2xsTGltaXQgPSAwXG4gIHJjRWxlbSA9IHtcbiAgICBvZmZTZXRUb3A6IDAsXG4gICAgQm90dG9tUG9zOiAwLFxuICB9XG4gIHNjcm9sbGVkID0gZmFsc2VcbiAgcGF0aFNldCA9IG5ldyBTZXQoKVxuICBjYW5TaGFyZSA9IGZhbHNlXG4gIGVuYWJsZVNoYXJlID0gZmFsc2VcbiAgcm9vdE9yZ0lkOiBhbnlcbiAgY2VydElkOiBhbnlcbiAgbW9iaWxlMTIwMDogYW55XG4gIGFzc2Vzc21lbnRTdHJpcDogYW55XG4gIGxlYXJuQWR2aXNvcnlEYXRhOiBhbnlcbiAgY29udGVudENyZWF0b3JEYXRhOiBhbnkgPSBbXVxuICAvLyByYW5kb21sZWFybkFkdmlzb3J5T2JqOiBhbnlcbiAgLy8gbGVhcm5BZHZpc29yeURhdGFMZW5ndGg6IGFueVxuXG4gIHByaXZhdGUgZGVzdHJveVN1YmplY3QkID0gbmV3IFN1YmplY3Q8YW55PigpXG4gIHRpbWVyVW5zdWJzY3JpYmU6IGFueVxuICB0aW1lcjogYW55XG4gIGlzUmVsZXZlbnRCdG5Ib3ZlcmVkID0gZmFsc2VcbiAgU0FLU0hBTUFJX0lDT05fTk9STUFMID0gJy9hc3NldHMvaW1hZ2VzL3Nha3NoYW1BSS9haS1pY29uLnN2ZydcbiAgU0FLU0hBTUFJX0lDT05fTE9BREVSID0gJy9hc3NldHMvaW1hZ2VzL3Nha3NoYW1BSS9zYWtzaGFtX2FpX2xvYWRlci5naWYnXG4gIHJlY29tbWVuZGVkQ291cnNlc0lkID0gJydcbiAgZmVlZGJhY2tHaXZlbjogYW55XG4gIHByZUFzc2Vzc21lbnRDb21wbGV0aW9uU3RhdHVzID0gZmFsc2VcbiAgZnJvbUFJVHV0b3IgPSBmYWxzZVxuICBsYW5ndWFnZUxpc3Q6IGFueSA9IFtdXG4gIHNlbGVjdGVkTGFuZ3VhZ2U6IGFueVxuICBsYW5ndWFnZU1hcFByb2dyZXNzOiBhbnlcbiAgcHJlQXNzZXNzbWVudFJlcXVpcmVkRmxhZzogYW55ID0gZmFsc2VcbiAgbG9ja0NlcnRpZmljYXRlID0gZmFsc2VcbiAgcHJpdmF0ZSBsYXN0UHJvZ3Jlc3NSZWZyZXNoVGltZTogbnVtYmVyID0gMFxuICBwcml2YXRlIGlzUmVmcmVzaGluZ1Byb2dyZXNzOiBib29sZWFuID0gZmFsc2VcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFsnJGV2ZW50J10pXG4gIGhhbmRsZVNjcm9sbCgpIHtcbiAgICBjb25zdCB3aW5kb3dTY3JvbGwgPSB3aW5kb3cucGFnZVlPZmZzZXRcbiAgICBpZiAod2luZG93U2Nyb2xsID49IHRoaXMuZWxlbWVudFBvc2l0aW9uIC0gMTAwKSB7XG4gICAgICB0aGlzLnN0aWNreSA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGlja3kgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNjcm9sbExpbWl0KSB7XG4gICAgICBpZiAoKHdpbmRvdy5zY3JvbGxZICsgdGhpcy5yY0VsZW0uQm90dG9tUG9zKSA+PSB0aGlzLnNjcm9sbExpbWl0KSB7XG4gICAgICAgIHRoaXMucmNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnc3RpY2t5J1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMucmNFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5yY0VsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCdcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMjM2Li4uIChPZmZzZXRUb3Agb2YgcmlnaHQgY29udGFpbmVyICsgMTA0KVxuICAgIGlmICh3aW5kb3cuc2Nyb2xsWSA+ICh0aGlzLnJjRWxlbS5vZmZTZXRUb3AgKyAxMDQpKSB7XG4gICAgICB0aGlzLnNjcm9sbGVkID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNjcm9sbGVkID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY29udGVudFN2YzogV2lkZ2V0Q29udGVudFNlcnZpY2UsXG4gICAgcHVibGljIHRvY1N2YzogQXBwVG9jU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlclN2YzogTG9nZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIG1vYmlsZUFwcHNTdmM6IE1vYmlsZUFwcHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXRpbGl0eVN2YzogVXRpbGl0eVNlcnZpY2UsXG4gICAgLy8gcHJpdmF0ZSBwcm9ncmVzc1N2YzogQ29udGVudFByb2dyZXNzU2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRlbnRMYW5nU3ZjOiBDb250ZW50TGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aW9uU1ZDOiBBY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdmlld2VyU3ZjOiBWaWV3ZXJVdGlsU2VydmljZSxcbiAgICBwcml2YXRlIHJhdGluZ1N2YzogUmF0aW5nU2VydmljZSxcbiAgICBwcml2YXRlIHRlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndHJhbnNsYXRpb25zOiBNdWx0aWxpbmd1YWxUcmFuc2xhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRzOiBFdmVudFNlcnZpY2UsXG4gICAgLy8gcHJpdmF0ZSBtYXRTbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHJpdmF0ZSBsb2FkQ2hlY2tTZXJ2aWNlOiBMb2FkQ2hlY2tTZXJ2aWNlLFxuICAgIHByaXZhdGUgaGFuZGxlQ2xhaW1TZXJ2aWNlOiBIYW5kbGVDbGFpbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXNldFJhdGluZ3NTZXJ2aWNlOiBSZXNldFJhdGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGltZXJTZXJ2aWNlOiBUaW1lclNlcnZpY2UsXG4gICAgcHVibGljIGVucm9sbFN2YzogV2lkZ2V0RW5yb2xsU2VydmljZSxcbiAgICBwdWJsaWMgY29udGVudExpYlN2YzogV2lkZ2V0Q29udGVudExpYlNlcnZpY2UsXG4gICAgcHVibGljIGRhdGFUcmFuc2ZlclN2YzogRGF0YVRyYW5zZmVyU2VydmljZSxcbiAgICBwcml2YXRlIG1hdFNuYWNrYmFyTmV3OiBNYXRTbmFja2Jhck5ldyxcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlTGliOiBXaWRnZXRVc2VyU2VydmljZUxpYixcbiAgICBwdWJsaWMgbmV0Q29yZVNlcnZpY2U6IE5ldENvcmVTZXJ2aWNlLFxuICAgIHB1YmxpYyBhcHBUb2NWMlN2YzogQXBwVG9jVjJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHVibGljIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG4gICAgdGhpcy5oaXN0b3J5RGF0YSA9IGhpc3Rvcnkuc3RhdGVcbiAgICB0aGlzLmhhbmRsZUJyZWFkY3J1bWJzKClcbiAgICB0aGlzLm1vYmlsZUFwcHNTdmMubW9iaWxlVG9wSGVhZGVyVmlzaWJpbGl0eVN0YXR1cy5uZXh0KHRydWUpXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSkge1xuICAgICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcoJ2VuJylcbiAgICAgIGNvbnN0IGxhbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZUxhbmd1YWdlJykhXG4gICAgICB0aGlzLnRyYW5zbGF0ZS51c2UobGFuZylcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRDaGVja1NlcnZpY2UuY2hpbGRDb21wb25lbnRMb2FkZWQkLnN1YnNjcmliZShfaXNMb2FkZWQgPT4ge1xuICAgICAgLy8gUHJlc2VudCBpbiBhcHAtdG9jLWFib3V0LmNvbXBvbmVudFxuICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYXRpbmdzRGl2JykpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmF0aW5nc0RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYXRpbmdzRGl2JykgYXMgYW55XG4gICAgICAgICAgaWYgKHJhdGluZ3NEaXYpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGltaXQgPSByYXRpbmdzRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSBhcyBhbnlcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMClcbiAgICAgIH1cblxuICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50Q29udGFpbmVyJykpIHtcbiAgICAgICAgY29uc3QgY29udGVudERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50Q29udGFpbmVyJykgYXMgYW55XG4gICAgICAgIGlmIChjb250ZW50RGl2KSB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxMaW1pdCA9IGNvbnRlbnREaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tIGFzIGFueVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuaGFuZGxlQ2xhaW1TZXJ2aWNlLmdldENsYWltRGF0YSgpLnN1YnNjcmliZSgoX2V2ZW50RGF0YTogYW55KSA9PiB7XG4gICAgICB0aGlzLm9uQ2xpY2tPZkNsYWltKF9ldmVudERhdGEpXG4gICAgfSlcbiAgfVxuXG4gIGdldEthcm1hcG9pbnRzTGltaXQoKSB7XG4gICAgaWYgKCF0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgIHRoaXMuY29udGVudFN2Yy51c2VyS2FybWFQb2ludHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmtwTGlzdCkge1xuICAgICAgICAgIGNvbnN0IGluZm8gPSByZXMua3BMaXN0LmFkZGluZm9cbiAgICAgICAgICBpZiAoaW5mbykge1xuICAgICAgICAgICAgdGhpcy5tb250aGx5Q2FwRXhjZWVkID0gSlNPTi5wYXJzZShpbmZvKS5jbGFpbWVkTm9uQUNCUENvdXJzZUthcm1hUXVvdGEgPj0gNFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBpc0NvdXJzZUNvbXBsZXRlZE9uVGhpc01vbnRoKCkge1xuICAgIGNvbnN0IG5vdyA9IG1vbWVudCh0aGlzLnNlcnZlckRhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG4gICAgaWYgKHRoaXMuY29udGVudCkge1xuICAgICAgY29uc3QgY291cnNlRGF0YSA9IHRoaXMuZW5yb2xsZWRDb3Vyc2VEYXRhXG4gICAgICBpZiAoY291cnNlRGF0YSAmJiBjb3Vyc2VEYXRhLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDAgJiYgY291cnNlRGF0YS5jb21wbGV0ZWRPbikge1xuICAgICAgICBjb25zdCBjb21wbGV0ZWRPbiA9IG1vbWVudChjb3Vyc2VEYXRhLmNvbXBsZXRlZE9uKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuICAgICAgICBjb25zdCBjb21wbGV0ZWRNb250aCA9IG1vbWVudChjb21wbGV0ZWRPbiwgJ1lZWVktTU0tREQnKS5tb250aCgpXG4gICAgICAgIGNvbnN0IGN1cnJlbnRNb250aCA9IG1vbWVudChub3csICdZWVlZLU1NLUREJykubW9udGgoKVxuICAgICAgICB0aGlzLmlzQ29tcGxldGVkVGhpc01vbnRoID0gY29tcGxldGVkTW9udGggPT09IGN1cnJlbnRNb250aFxuICAgICAgICB0aGlzLmNvbnRlbnRbJ3ZpZXdNb3JlJ10gPSBmYWxzZVxuICAgICAgICB0aGlzLmNvbnRlbnRbJ2NvbXBsZXRlZE9uJ10gPSBjb3Vyc2VEYXRhLmNvbXBsZXRlZE9uXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyZWRBY2JwTGlzdChyZXM6IGFueSkge1xuICAgIHJldHVybiByZXMuZmlsdGVyKCh2OiBhbnkpID0+IHYuaWRlbnRpZmllciA9PT0gdGhpcy5jb3Vyc2VJRClcbiAgfVxuXG4gIGZpbmRBQ1BCKCkge1xuICAgIGNvbnN0IGxvY2FsQ2JwID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NicERhdGEnKVxuICAgIGlmIChsb2NhbENicCkge1xuICAgICAgY29uc3Qgc3RvcmVhZ2VDYnAgPSBKU09OLnBhcnNlKGxvY2FsQ2JwKVxuICAgICAgY29uc3QgY2JwID0gdGhpcy5maWx0ZXJlZEFjYnBMaXN0KHN0b3JlYWdlQ2JwKVxuICAgICAgaWYgKGNicC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYWNicCA9ICdjYlBsYW4nXG4gICAgICAgIHRoaXMuY2JQbGFuRW5kRGF0ZSA9IGNicFswXS5lbmREYXRlXG4gICAgICAgIGNvbnN0IHNEYXRlID0gZGF5anModGhpcy5zZXJ2ZXJEYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuICAgICAgICBjb25zdCBkYXlzQ291bnQgPSBkYXlqcyh0aGlzLmNiUGxhbkVuZERhdGUpLmRpZmYodGhpcy5zZXJ2ZXJEYXRlLCAnZGF5JylcbiAgICAgICAgdGhpcy5jYlBsYW5EdXJhdGlvbiA9IGRheXNDb3VudCA8IDAgPyBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFIDogZGF5c0NvdW50ID4gMjlcbiAgICAgICAgICA/IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0LlNVQ0NFU1MgOiBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5VUENPTUlOR1xuICAgICAgICBpZiAoYWNicCAmJiB0aGlzLmNiUGxhbkVuZERhdGUgJiYgYWNicCA9PT0gJ2NiUGxhbicpIHtcbiAgICAgICAgICB0aGlzLmlzQWNicENvdXJzZSA9IHRydWVcbiAgICAgICAgICBjb25zdCBlRGF0ZSA9IGRheWpzKHRoaXMuY2JQbGFuRW5kRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJylcbiAgICAgICAgICBpZiAoZGF5anMoc0RhdGUpLmlzU2FtZU9yQmVmb3JlKGVEYXRlKSkge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdE9iaiA9IHtcbiAgICAgICAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHRUeXBlOiAnQ291cnNlJyxcbiAgICAgICAgICAgICAgICAgIGNvbnRleHRJZDogdGhpcy5jb3Vyc2VJRCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb250ZW50U3ZjLmdldENvdXJzZUthcm1hUG9pbnRzKHJlcXVlc3RPYmopLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMua3BMaXN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gcmVzLmtwTGlzdFxuICAgICAgICAgICAgICAgIGlmIChyb3cuYWRkaW5mbykge1xuICAgICAgICAgICAgICAgICAgaWYgKEpTT04ucGFyc2Uocm93LmFkZGluZm8pLkFDQlApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0FjYnBDbGFpbSA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDbGFpbWVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0FjYnBDbGFpbSA9IHRydWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5pc0FjYnBDbGFpbSA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0FjYnBDbGFpbSA9IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByYWlzZVRlbGVtZXRlcnlGb3JQcm92aWRlcihwcm92aWRlck5hbWU6IHN0cmluZywgcHJpdmlkZXJJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5ldmVudHMucmFpc2VJbnRlcmFjdFRlbGVtZXRyeShcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2NsaWNrJyxcbiAgICAgICAgaWQ6ICdidG4tcHJvdmlkZXInLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IHByb3ZpZGVyTmFtZSxcbiAgICAgICAgdHlwZTogcHJpdmlkZXJJZCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHBhZ2VJZEV4dDogJ2J0bi1wcm92aWRlcicsXG4gICAgICAgIG1vZHVsZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeW1vZHVsZXMuQ09OVEVOVCxcbiAgICAgIH0pXG5cbiAgfVxuXG4gIHJhaXNlVGVsZW1ldHJ5KCkge1xuICAgIHRoaXMuZXZlbnRzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdjbGljaycsXG4gICAgICAgIHN1YlR5cGU6ICdrYXJtYXBvaW50cy1jbGFpbScsXG4gICAgICAgIGlkOiB0aGlzLmNvdXJzZUlELFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IHRoaXMuY291cnNlSUQsXG4gICAgICAgIHR5cGU6ICdjb3Vyc2UnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcGFnZUlkRXh0OiAnYnRuLWFjYnAtY2xhaW0nLFxuICAgICAgICBtb2R1bGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnltb2R1bGVzLktBUk1BUE9JTlRTLFxuICAgICAgfSlcbiAgfVxuXG4gIG9uQ2xpY2tPZkNsYWltKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgdXNlcklkOiB0aGlzLmNvbmZpZ1N2Yy51bk1hcHBlZFVzZXIuaWRlbnRpZmllcixcbiAgICAgIGNvdXJzZUlkOiB0aGlzLmNvdXJzZUlELFxuICAgIH1cbiAgICB0aGlzLnJhaXNlVGVsZW1ldHJ5KClcbiAgICB0aGlzLmNvbnRlbnRTdmMuY2xhaW1LYXJtYXBvaW50cyhyZXF1ZXN0KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICB0aGlzLmlzQ2xhaW1lZCA9IHRydWVcbiAgICAgIHRoaXMub3BlblNuYWNrYmFyKCdLYXJtYSBwb2ludHMgYXJlIHN1Y2Nlc3NmdWxseSBjbGFpbWVkLicpXG4gICAgICAvLyB0aGlzLmdldFVzZXJFbnJvbGxtZW50TGlzdCgpXG4gICAgICB0aGlzLmNoZWNrSWZVc2VyRW5yb2xsZWQoKVxuICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICB0aGlzLm9wZW5TbmFja2Jhcignc29tZXRoaW5nIHdlbnQgd3JvbmcuJylcbiAgICB9KVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLnJjRWxlbWVudCkge1xuICAgICAgdGhpcy5yY0VsZW0uQm90dG9tUG9zID0gdGhpcy5yY0VsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgKyB0aGlzLnJjRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodFxuICAgICAgdGhpcy5yY0VsZW0ub2ZmU2V0VG9wID0gdGhpcy5yY0VsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRUb3BcbiAgICB9XG4gICAgLy8gR2V0IFRpbWUgZm9yIHRoZSBiYXRjaFxuICAgIHRoaXMudGltZXJVbnN1YnNjcmliZSA9IHRoaXMudGltZXJTZXJ2aWNlLmdldFRpbWVyRGF0YSgpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgoX3RpbWVyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50aW1lciA9IF90aW1lclxuICAgICAgfSlcbiAgfVxuXG4gIGhhbmRsZUJyZWFkY3J1bWJzKCkge1xuICAgIGlmICh0aGlzLmhpc3RvcnlEYXRhKSB7XG4gICAgICBpZiAodGhpcy5oaXN0b3J5RGF0YS5wYXRoID09PSAnU2VhcmNoJykge1xuICAgICAgICBjb25zdCBzZWFyY2h1cmwgPSBgL2FwcC9nbG9iYWxzZWFyY2hgXG4gICAgICAgIGNvbnN0IHFQYXJhbSA9IHtcbiAgICAgICAgICBxOiB0aGlzLmhpc3RvcnlEYXRhLnBhcmFtLFxuICAgICAgICB9XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgICAgdGhpcy5icmVhZGNydW1icyA9IHsgdXJsOiAnaG9tZScsIHRpdGxlczogW3sgdGl0bGU6ICdTZWFyY2gnLCB1cmw6IHNlYXJjaHVybCwgcXVlcnlQYXJhbXM6IHFQYXJhbSB9LCB7IHRpdGxlOiAnRGV0YWlscycsIHVybDogJ25vbmUnIH1dIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5oaXN0b3J5RGF0YS5wYXRoID09PSAnY29tcGV0ZW5jeS1kZXRhaWxzJykge1xuICAgICAgICBjb25zdCBmaW5hbFVybCA9IGAvYXBwL2xlYXJuL2Jyb3dzZS1ieS9jb21wZXRlbmN5LyR7dGhpcy5oaXN0b3J5RGF0YS5wYXJhbX1gXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIHRoaXMuYnJlYWRjcnVtYnMgPSB7IHVybDogJ2hvbWUnLCB0aXRsZXM6IFt7IHRpdGxlOiB0aGlzLmhpc3RvcnlEYXRhLnBhcmFtLCB1cmw6IGZpbmFsVXJsIH0sIHsgdGl0bGU6ICdEZXRhaWxzJywgdXJsOiAnbm9uZScgfV0gfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmhpc3RvcnlEYXRhLnBhdGggPT09ICdhbGwtQ0JQJykge1xuICAgICAgICBjb25zdCBmaW5hbFVSTCA9IGAvYXBwL2xlYXJuL2Jyb3dzZS1ieS9wcm92aWRlci8ke3RoaXMuaGlzdG9yeURhdGEucGFyYW19YFxuICAgICAgICB0aGlzLmJyZWFkY3J1bWJzID0geyB1cmw6ICdob21lJywgdGl0bGVzOiBbeyB0aXRsZTogYGFsbCBDQlAnc2AsIHVybDogZmluYWxVUkwgfSwgeyB0aXRsZTogJ0RldGFpbHMnLCB1cmw6ICdub25lJyB9XSB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaGlzdG9yeURhdGEucGF0aCA9PT0gJ2FsbC1jb21wZXRlbmNpZXMnKSB7XG4gICAgICAgIGNvbnN0IGZpbmFsVXJsID0gYC9hcHAvbGVhcm4vYnJvd3NlLWJ5L2NvbXBldGVuY3kvYWxsLWNvbXBldGVuY2llc2BcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICAgICAgdGhpcy5icmVhZGNydW1icyA9IHsgdXJsOiAnaG9tZScsIHRpdGxlczogW3sgdGl0bGU6ICdhbGwgY29tcGV0ZW5jaWVzJywgdXJsOiBmaW5hbFVybCB9LCB7IHRpdGxlOiAnRGV0YWlscycsIHVybDogJ25vbmUnIH1dIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5oaXN0b3J5RGF0YS5wYXRoID09PSAnY3VyYXRlZENvbGxlY3Rpb25zJykge1xuICAgICAgICBjb25zdCBmaW5hbFVybCA9IGAvYXBwL2N1cmF0ZWRDb2xsZWN0aW9ucy9ob21lYFxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgICB0aGlzLmJyZWFkY3J1bWJzID0geyB1cmw6ICdob21lJywgdGl0bGVzOiBbeyB0aXRsZTogJ2N1cmF0ZWQgY29sbGVjdGlvbnMnLCB1cmw6IGZpbmFsVXJsIH0sIHsgdGl0bGU6ICdEZXRhaWxzJywgdXJsOiAnbm9uZScgfV0gfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICB0aGlzLmJyZWFkY3J1bWJzID0geyB1cmw6ICdob21lJywgdGl0bGVzOiBbeyB0aXRsZTogJ0xlYXJuJywgdXJsOiAnL3BhZ2UvbGVhcm4nLCBpY29uOiAnc2Nob29sJyB9LCB7IHRpdGxlOiAnRGV0YWlscycsIHVybDogJ25vbmUnIH1dIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmZyYWdtZW50KSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIGRvY3VtZW50IS5xdWVyeVNlbGVjdG9yKGAjJHt0aGlzLmZyYWdtZW50fWApIS5zY3JvbGxUbyh7XG4gICAgICAgICAgdG9wOiA4MCxcbiAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkgeyB9XG4gIH1cblxuICBnZXQgZW5hYmxlQW5hbHl0aWNzKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy5yZXN0cmljdGVkRmVhdHVyZXMpIHtcbiAgICAgIHJldHVybiAhdGhpcy5jb25maWdTdmMucmVzdHJpY3RlZEZlYXR1cmVzLmhhcygndG9jQW5hbHl0aWNzJylcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBnZXQgaXNSZXNvdXJjZSgpIHtcbiAgICBpZiAodGhpcy5jb250ZW50KSB7XG4gICAgICBjb25zdCBpc1Jlc291cmNlID0gdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuS05PV0xFREdFX0FSVElGQUNUIHx8XG4gICAgICAgIHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlJFU09VUkNFXG4gICAgICAgIHx8IHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlBSQUNUSUNFX1JFU09VUkNFXG4gICAgICAgIHx8IHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkZJTkFMX0FTU0VTU01FTlRcbiAgICAgICAgfHwgdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ09NUF9BU1NFU1NNRU5UXG4gICAgICAgIHx8IHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk9GRkxJTkVfU0VTU0lPTlxuICAgICAgICB8fCAhKHRoaXMuY29udGVudC5jaGlsZHJlbiAmJiB0aGlzLmNvbnRlbnQuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgaWYgKGlzUmVzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5tb2JpbGVBcHBzU3ZjLnNlbmRWaWV3ZXJEYXRhKHRoaXMuY29udGVudClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1Jlc291cmNlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZ2V0IGdldFN0YXJ0RGF0ZSgpIHtcbiAgICBpZiAodGhpcy5lbnJvbGxlZENvdXJzZURhdGEpIHtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICAvLyBjb25zdCBiYXRjaCA9IF8uZmlyc3QoXy5maWx0ZXIodGhpcy5jb250ZW50WydiYXRjaGVzJ10sIHsgYmF0Y2hJZDogdGhpcy5jdXJyZW50Q291cnNlQmF0Y2hJZCB9KSB8fCBbXSlcbiAgICAgIGNvbnN0IGJhdGNoID0gdGhpcy5lbnJvbGxlZENvdXJzZURhdGEuYmF0Y2hcbiAgICAgIHRoaXMuY3VycmVudENvdXJzZUJhdGNoSWQgPSBiYXRjaC5iYXRjaElkXG4gICAgICBpZiAoYmF0Y2ggJiYgdGhpcy5jdXJyZW50Q291cnNlQmF0Y2hJZCkge1xuICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IChfLmdldChiYXRjaCwgJ3N0YXJ0RGF0ZScpKVxuICAgICAgICAvLyBjb25zdCBwYXJzZWREYXRlID0gbW9tZW50KHRoaXMuc3RhcnREYXRlKTtcbiAgICAgICAgLy8gY29uc3QgZGF0ZU9ubHkgPSBwYXJzZWREYXRlLmNsb25lKCkuc3RhcnRPZignZGF5Jyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSB0aGlzLnN0YXJ0RGF0ZSAmJiBuZXcgRGF0ZSh0aGlzLnN0YXJ0RGF0ZSkuZ2V0VGltZSgpXG4gICAgICAgIHRoaXMuc3RhcnREYXRlRGlmZmVyZW5jZSA9IHN0YXJ0RGF0ZVRpbWUgLSBub3dcbiAgICAgICAgaWYgKHRoaXMuc3RhcnREYXRlRGlmZmVyZW5jZSAmJiB0aGlzLnN0YXJ0RGF0ZURpZmZlcmVuY2UgPiAwKSB7XG4gICAgICAgICAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IodGhpcy5zdGFydERhdGVEaWZmZXJlbmNlIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKVxuICAgICAgICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigodGhpcy5zdGFydERhdGVEaWZmZXJlbmNlICUgKDEwMDAgKiA2MCAqIDYwICogMjQpKSAvICgxMDAwICogNjAgKiA2MCkpXG4gICAgICAgICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKHRoaXMuc3RhcnREYXRlRGlmZmVyZW5jZSAlICgxMDAwICogNjAgKiA2MCkpIC8gKDEwMDAgKiA2MCkpXG4gICAgICAgICAgcmV0dXJuIChgJHtkYXlzfSBEYXlzIDogJHtob3Vyc30gSG91cnMgOiAke21pbnV0ZXN9IE1pbnV0ZXNgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnTkEnXG4gICAgICB9XG4gICAgICByZXR1cm4gJ05BJ1xuICAgICAgLy8gaWYgKF8uZ2V0KGJhdGNoLCAnc3RhcnREYXRlJykgJiYgbW9tZW50KF8uZ2V0KGJhdGNoLCAnc3RhcnREYXRlJykpLmlzQWZ0ZXIoKSkge1xuICAgICAgLy8gICByZXR1cm4gbW9tZW50KF8uZ2V0KGJhdGNoLCAnc3RhcnREYXRlJykpLmZyb20obm93KVxuICAgICAgLy8gfVxuICAgICAgLy8gaWYgKF8uZ2V0KGJhdGNoLCAnZW5kRGF0ZScpICYmIG1vbWVudChfLmdldChiYXRjaCwgJ2VuZERhdGUnKSkuaXNCZWZvcmUoKSkge1xuICAgICAgLy8gICByZXR1cm4gJ05BJ1xuICAgICAgLy8gfVxuICAgICAgLy8gaWYgKHN0YXJ0RGF0ZVRpbWUgJiYgbW9tZW50KHN0YXJ0RGF0ZVRpbWUpLmlzQWZ0ZXIoKSkgIHtcbiAgICAgIC8vICAgcmV0dXJuIG1vbWVudChzdGFydERhdGVUaW1lKS5mcm9tKG5vdylcbiAgICAgIC8vIH1cbiAgICAgIC8vIGlmIChlbmREYXRlVGltZSAmJiBtb21lbnQoZW5kRGF0ZVRpbWUpLmlzQmVmb3JlKCkpIHtcbiAgICAgIC8vICAgICByZXR1cm4gJ05BJ1xuICAgICAgLy8gICB9XG4gICAgICAvLyByZXR1cm4gJ05BJ1xuICAgIH0gcmV0dXJuICdOQSdcbiAgfVxuXG4gIGdldCBpc0JhdGNoSW5Qcm9ncmVzcygpIHtcbiAgICAvLyBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudFsnYmF0Y2hlcyddKSB7XG4gICAgLy8gY29uc3QgYmF0Y2hlcyA9IHRoaXMuY29udGVudFsnYmF0Y2hlcyddIGFzIE5zQ29udGVudC5JQmF0Y2hcbiAgICAvLyBpZiAodGhpcy5jdXJyZW50Q291cnNlQmF0Y2hJZCkge1xuICAgIC8vICAgLy8gY29uc3Qgbm93ID0gbW9tZW50KCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJylcbiAgICAvLyAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgLy8gICBpZiAodGhpcy5iYXRjaERhdGEgJiYgdGhpcy5iYXRjaERhdGEuY29udGVudCkge1xuICAgIC8vICAgICBjb25zdCBiYXRjaCA9IF8uZmlyc3QoXy5maWx0ZXIodGhpcy5iYXRjaERhdGEuY29udGVudCwgeyBiYXRjaElkOiB0aGlzLmN1cnJlbnRDb3Vyc2VCYXRjaElkIH0pIHx8IFtdKVxuICAgIC8vICAgICBpZiAoYmF0Y2gpIHtcbiAgICAvLyAgICAgICAvLyBjb25zdCBzdGFydERhdGUgPSBtb21lbnQoYmF0Y2guc3RhcnREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKVxuICAgIC8vICAgICAgIC8vIGNvbnN0IGVuZERhdGUgPSBiYXRjaC5lbmREYXRlID8gbW9tZW50KGJhdGNoLmVuZERhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpIDogbm93XG4gICAgLy8gICAgICAgLy8gcmV0dXJuIChcbiAgICAvLyAgICAgICAvLyAgIC8vIGJhdGNoLnN0YXR1cyAmJlxuICAgIC8vICAgICAgIC8vICAgbW9tZW50KHN0YXJ0RGF0ZSkuaXNTYW1lT3JCZWZvcmUobm93KVxuICAgIC8vICAgICAgIC8vICAgJiYgbW9tZW50KGVuZERhdGUpLmlzU2FtZU9yQWZ0ZXIobm93KVxuICAgIC8vICAgICAgIC8vIClcbiAgICAvLyAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IGJhdGNoICYmIChfLmdldChiYXRjaCwgJ3N0YXJ0VGltZScpKVxuICAgIC8vICAgICAgIHRoaXMuZW5kRGF0ZSA9IGJhdGNoICYmIChfLmdldChiYXRjaCwgJ2VuZFRpbWUnKSlcbiAgICAvLyAgICAgICBjb25zdCBlbmREYXRlVGltZSA9IG5ldyBEYXRlKHRoaXMuZW5kRGF0ZSkuZ2V0VGltZSgpXG4gICAgLy8gICAgICAgdGhpcy5lbmREYXRlRGlmZmVyZW5jZSA9IGVuZERhdGVUaW1lIC0gbm93XG4gICAgLy8gICAgICAgaWYodGhpcy5lbmREYXRlRGlmZmVyZW5jZSA+IDApIHtcbiAgICAvLyAgICAgICByZXR1cm4gIGJhdGNoLnN0YXR1c1xuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vICAgICByZXR1cm4gZmFsc2VcbiAgICAvLyAgIH1cbiAgICAvLyAgIHJldHVybiBmYWxzZVxuICAgIC8vIH0gcmV0dXJuIGZhbHNlXG5cbiAgICBpZiAodGhpcy5lbnJvbGxlZENvdXJzZURhdGEpIHtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICBjb25zdCBiYXRjaCA9IHRoaXMuZW5yb2xsZWRDb3Vyc2VEYXRhLmJhdGNoXG4gICAgICB0aGlzLmN1cnJlbnRDb3Vyc2VCYXRjaElkID0gYmF0Y2guYmF0Y2hJZFxuICAgICAgaWYgKGJhdGNoICYmIHRoaXMuY3VycmVudENvdXJzZUJhdGNoSWQpIHtcbiAgICAgICAgdGhpcy5zdGFydERhdGUgPSAoXy5nZXQoYmF0Y2gsICdzdGFydERhdGUnKSlcbiAgICAgICAgdGhpcy5lbmREYXRlID0gKF8uZ2V0KGJhdGNoLCAnZW5kRGF0ZScpKVxuICAgICAgICBpZiAodGhpcy5lbmREYXRlKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnREYXRlVGltZSA9IHRoaXMuc3RhcnREYXRlICYmIG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlKS5nZXRUaW1lKClcbiAgICAgICAgICBsZXQgZW5kRGF0ZSA9IHRoaXMuZW5kRGF0ZSAmJiBuZXcgRGF0ZSh0aGlzLmVuZERhdGUpXG4gICAgICAgICAgZW5kRGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpXG4gICAgICAgICAgY29uc3QgZW5kRGF0ZVRpbWUgPSBlbmREYXRlLmdldFRpbWUoKVxuICAgICAgICAgIHRoaXMuc3RhcnREYXRlRGlmZmVyZW5jZSA9IG5vdyAtIHN0YXJ0RGF0ZVRpbWVcbiAgICAgICAgICB0aGlzLmVuZERhdGVEaWZmZXJlbmNlID0gZW5kRGF0ZVRpbWUgLSBub3dcbiAgICAgICAgICBpZiAodGhpcy5lbmREYXRlRGlmZmVyZW5jZSA+IDAgJiYgdGhpcy5zdGFydERhdGVEaWZmZXJlbmNlID4gMCAmJiBiYXRjaC5zdGF0dXMgIT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuXG5cbiAgZ2V0VXNlclJhdGluZyhmaXJlVXBkYXRlOiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSkge1xuICAgICAgICB0aGlzLnVzZXJJZCA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZCB8fCAnJ1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQuaWRlbnRpZmllciAmJiB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5KSB7XG4gICAgICAgIHRoaXMucmF0aW5nU3ZjLmdldFJhdGluZyh0aGlzLmNvbnRlbnQuaWRlbnRpZmllciwgdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSwgdGhpcy51c2VySWQpLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMucmVzdWx0ICYmIHJlcy5yZXN1bHQucmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgdGhpcy51c2VyUmF0aW5nID0gcmVzLnJlc3VsdC5yZXNwb25zZVxuICAgICAgICAgICAgICBpZiAoZmlyZVVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9jU3ZjLmNoYW5nZVVwZGF0ZVJldmlld3ModHJ1ZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb250ZW50Vmlld0V2ZW50Rm9yTmV0Q29yZSgndmlldycpXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdVU0VSIFJBVElORyBGRVRDSCBFUlJPUiA+JywgZXJyKVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29udGVudFNvdXJjZSAmJiB0aGlzLmNvbnRlbnRTb3VyY2UubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgPiA0NCkge1xuICAgICAgICB0aGlzLnNvdXJjZUVsbGlwc2lzID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sIDI1MClcbiAgfVxuXG5cblxuICBwdWJsaWMgZmV0Y2hVc2VyV0ZGb3JCbGVuZGVkKCkge1xuICAgIGNvbnN0IGFwcGxpY2F0aW9uSWRzID0gKHRoaXMuYmF0Y2hEYXRhICYmIHRoaXMuYmF0Y2hEYXRhLmNvbnRlbnQgJiYgdGhpcy5iYXRjaERhdGEuY29udGVudC5tYXAoZSA9PiBlLmJhdGNoSWQpKSB8fCBbXVxuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIGFwcGxpY2F0aW9uSWRzLFxuICAgICAgc2VydmljZU5hbWU6ICdibGVuZGVkcHJvZ3JhbScsXG4gICAgICBsaW1pdDogMTAwLFxuICAgICAgb2Zmc2V0OiAwLFxuICAgIH1cblxuICAgIHRoaXMuY29udGVudFN2Yy5mZXRjaEJsZW5kZWRVc2VyV0YocmVxKS50aGVuKFxuICAgICAgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnJlc3VsdCAmJiBkYXRhLnJlc3VsdC5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IGxhdGVzdFdGID0gXy5tYXhCeShkYXRhLnJlc3VsdC5kYXRhWzBdLndmSW5mbywgKGVsOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShlbC5sYXN0VXBkYXRlZE9uKS5nZXRUaW1lKClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIGxhdGVzdFdGLmN1cnJlbnRTdGF0dXMgPSB0aGlzLldGQmxlbmRlZFByb2dyYW1TdGF0dXMuUkVKRUNURURcbiAgICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgICAgICAgICB0aGlzLmJhdGNoRGF0YSEud29ya0Zsb3cgPSB7XG4gICAgICAgICAgICB3ZkluaXRpYXRlZDogdHJ1ZSxcbiAgICAgICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSAqL1xuICAgICAgICAgICAgYmF0Y2g6IHRoaXMuYmF0Y2hEYXRhICYmIHRoaXMuYmF0Y2hEYXRhLmNvbnRlbnQgJiYgdGhpcy5iYXRjaERhdGEuY29udGVudC5maW5kKChlOiBhbnkpID0+IGUuYmF0Y2hJZCA9PT0gbGF0ZXN0V0YuYXBwbGljYXRpb25JZCksXG4gICAgICAgICAgICB3Zkl0ZW06IGxhdGVzdFdGLFxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRvY1N2Yy5zZXRXRkRhdGEodGhpcy5iYXRjaERhdGEpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2dlclN2Yy5pbmZvKCdmZXRjaEJsZW5kZWRVc2VyV0YgZGF0YSA9PSAnLCBkYXRhKVxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdDT05URU5UIEhJU1RPUlkgRkVUQ0ggRVJST1IgPicsIGVycm9yKVxuICAgICAgfSxcbiAgICApXG4gIH1cblxuICBwdWJsaWMgY2hlY2tJZkJhdGNoRXhpc3RzKGxhdGVzdDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmJhdGNoRGF0YSB8fCAhdGhpcy5iYXRjaERhdGEuY29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJhdGNoRGF0YS5jb250ZW50LmZpbmQoYiA9PiBiLmJhdGNoSWQgPT09IGxhdGVzdC5iYXRjaElkKVxuICB9XG5cbiAgcHVibGljIGdldEJhdGNoSWQoKTogc3RyaW5nIHtcbiAgICBsZXQgYmF0Y2hJZCA9ICcnXG4gICAgaWYgKHRoaXMuYmF0Y2hEYXRhICYmIHRoaXMuYmF0Y2hEYXRhLmNvbnRlbnQpIHtcbiAgICAgIGZvciAoY29uc3QgYmF0Y2ggb2YgdGhpcy5iYXRjaERhdGEuY29udGVudCkge1xuICAgICAgICBiYXRjaElkID0gYmF0Y2guYmF0Y2hJZFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmF0Y2hJZFxuICB9XG5cblxuICBwdWJsaWMgaGFuZGxlQXV0b0JhdGNoQXNzaWduKCkge1xuICAgIGlmICh0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgIHRoaXMubmF2aWdhdGVUb1BsYXllclBhZ2UoJycpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5yb2xsQnRuTG9hZGluZyA9IHRydWVcbiAgICAgIHRoaXMuY2hhbmdlVGFiID0gIXRoaXMuY2hhbmdlVGFiXG4gICAgICB0aGlzLnJhaXNlRW5yb2xsVGVsZW1ldHJ5KClcbiAgICAgIGlmICh0aGlzLnJlY29tbWVuZGVkQ291cnNlc0lkKSB7XG4gICAgICAgIHRoaXMucmFpc2VFbnJvbGxUZWxlbWVudHJ5Rm9yU2Frc2hhbUFJR2VuZXJhdGVkKClcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJlY29tbWVuZGVkQ291cnNlc0lkKSB7XG4gICAgICAgIHRoaXMucmFpc2VFbnJvbGxUZWxlbWVudHJ5Rm9yU2Frc2hhbUFJR2VuZXJhdGVkKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhdGNoRGF0YSA9IHRoaXMuY29udGVudFJlYWREYXRhICYmIHRoaXMuY29udGVudFJlYWREYXRhLmJhdGNoZXMgJiYgdGhpcy5jb250ZW50UmVhZERhdGEuYmF0Y2hlc1swXVxuICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DVVJBVEVEX1BST0dSQU0pIHtcbiAgICAgICAgdGhpcy5hdXRvRW5yb2xsQ3VyYXRlZFByb2dyYW0oTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5DVVJBVEVEX1BST0dSQU0sIGJhdGNoRGF0YSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5jb3Vyc2VDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5NT0RFUkFURURfUFJPR1JBTSkge1xuICAgICAgICBsZXQgbW9kZXJhdGVkQmF0Y2hEYXRhOiBhbnlcbiAgICAgICAgaWYgKHRoaXMuYmF0Y2hEYXRhICYmIHRoaXMuYmF0Y2hEYXRhLmNvbnRlbnQgJiYgdGhpcy5iYXRjaERhdGEuY29udGVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgbW9kZXJhdGVkQmF0Y2hEYXRhID0gdGhpcy5zZWxlY3RlZEJhdGNoRGF0YSAmJiB0aGlzLnNlbGVjdGVkQmF0Y2hEYXRhLmNvbnRlbnQgJiYgdGhpcy5zZWxlY3RlZEJhdGNoRGF0YS5jb250ZW50WzBdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW9kZXJhdGVkQmF0Y2hEYXRhID0gdGhpcy5iYXRjaERhdGEgJiYgdGhpcy5iYXRjaERhdGEuY29udGVudCAmJiB0aGlzLmJhdGNoRGF0YS5jb250ZW50WzBdXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hdXRvRW5yb2xsQ3VyYXRlZFByb2dyYW0oTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5NT0RFUkFURURfUFJPR1JBTSwgbW9kZXJhdGVkQmF0Y2hEYXRhKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRlbnQuY291cnNlQ2F0ZWdvcnkgPT09IE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuTEVBUk5JTkdfUEFUSFdBWSkge1xuICAgICAgICB0aGlzLmF1dG9FbnJvbGxMZWFybmluZ1BhdGh3YXkoYmF0Y2hEYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hdXRvQXNzaWduRW5yb2xsKClcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jb250ZW50Vmlld0V2ZW50Rm9yTmV0Q29yZSgnZW5yb2xsJylcbiAgfVxuXG4gIHB1YmxpYyBhdXRvRW5yb2xsTGVhcm5pbmdQYXRod2F5KGJhdGNoRGF0YTogYW55KSB7XG4gICAgbGV0IGJhdGNoSWQgPSBiYXRjaERhdGE/LmJhdGNoSWRcbiAgICBpZiAoYmF0Y2hJZCkge1xuICAgICAgdGhpcy5jb250ZW50U3ZjLmF1dG9FbnJvbGxMUCh0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMubmF2aWdhdGVUb1BsYXllclBhZ2UoYmF0Y2hJZClcbiAgICAgICAgICB0aGlzLmVucm9sbEJ0bkxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9LCAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGVyck1zZyA9IGVycj8uZXJyb3I/LnBhcmFtcz8uZXJybXNnIHx8IGVycj8ucGFyYW1zPy5lcnJtc2cgfHwgJ1NvbWV0aGluZyB3ZW50IHdyb25nJ1xuICAgICAgICBpZiAoZXJyTXNnPy5pbmNsdWRlcygnY291cnNlLicpICYmIHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkpIHtcbiAgICAgICAgICBlcnJNc2cgPSBlcnJNc2cucmVwbGFjZSgnY291cnNlLicsIHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkpICsgJy4nO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJNc2cpXG4gICAgICAgIHRoaXMuZW5yb2xsQnRuTG9hZGluZyA9IGZhbHNlXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ05vIGJhdGNoZXMgZm91bmQnKVxuICAgICAgdGhpcy5lbnJvbGxCdG5Mb2FkaW5nID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXV0b0Vucm9sbEN1cmF0ZWRQcm9ncmFtKHByb2dyYW1UeXBlOiBhbnksIGJhdGNoRGF0YTogYW55KSB7XG4gICAgaWYgKCFiYXRjaERhdGEpIHtcbiAgICAgIHRoaXMuZW5yb2xsQnRuTG9hZGluZyA9IGZhbHNlXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ05vIGJhY3RoZXMgZm91bmQnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmlkZW50aWZpZXIpIHtcbiAgICAgIGxldCB1c2VySWQgPSAnJ1xuICAgICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlICYmIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZCkge1xuICAgICAgICB1c2VySWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWRcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICBwcm9ncmFtSWQ6IHRoaXMuY29udGVudC5pZGVudGlmaWVyLFxuICAgICAgICAgIC8vIGFzIG9mIG5vdyBjdXJhdGVkIHByb2dyYW0gb25seSBvbmUgYmF0Y2ggaXMgY29taW5nIG5lZWQgdG8gY2hlY2sgYW5kIG1vZGlmeVxuICAgICAgICAgIGJhdGNoSWQ6IGJhdGNoRGF0YT8uYmF0Y2hJZCxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGVudFN2Yy5hdXRvQXNzaWduQ3VyYXRlZEJhdGNoQXBpKHJlcSwgcHJvZ3JhbVR5cGUpLnN1YnNjcmliZShcbiAgICAgICAgKGRhdGE6IE5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgaWYgKHByb2dyYW1UeXBlID09PSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5Lk1PREVSQVRFRF9QUk9HUkFNICYmIGJhdGNoRGF0YS5lbmREYXRlKSB7XG4gICAgICAgICAgICAgIHRoaXMuYmF0Y2hEYXRhID0ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFtiYXRjaERhdGFdLFxuICAgICAgICAgICAgICAgIGVucm9sbGVkOiB0cnVlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucm91dGVyQ2hhbmdlSGFuZGxlcih0cnVlKVxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmdldFVzZXJFbnJvbGxtZW50TGlzdCgpXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVXNlckVucm9sbGVkKClcbiAgICAgICAgICAgICAgfSwgMjAwMClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb1BsYXllclBhZ2UocmVxLnJlcXVlc3QuYmF0Y2hJZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChfZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdfZXJyb3InLCBfZXJyb3IpXG4gICAgICAgICAgLy8gaWYoX2Vycm9yICYmIF9lcnJvci5lcnJvciAmJiBfZXJyb3IuZXJyb3IucGFyYW1zICYmIF9lcnJvci5lcnJvci5wYXJhbXMuZXJyICYmIF9lcnJvci5lcnJvci5wYXJhbXMuZXJyLmVycm1zZykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihfLmdldChfZXJyb3IsICdlcnJvci5wYXJhbXMuZXJybXNnJykgfHwgJ1BsZWFzZSB0cnkgYWdhaW4gbGF0ZXInKVxuICAgICAgICAgIC8vIH1cbiAgICAgICAgICB0aGlzLmVucm9sbEJ0bkxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGF1dG9Bc3NpZ25FbnJvbGwoKSB7XG4vKioqKioqKioqKioqKiAg4pyoIFdpbmRzdXJmIENvbW1hbmQg4q2QICAqKioqKioqKioqKioqL1xuICAvKipcbiAgICogSWYgdGhlIHVzZXIgaXMgbm90IGVucm9sbGVkIGluIHRoZSBjb3Vyc2UsIGF1dG8tYXNzaWducyBhIGJhdGNoIGFuZCBuYXZpZ2F0ZXMgdG8gdGhlIHBsYXllciBwYWdlLlxuICAgKiBJZiB0aGUgdXNlciBpcyBhbHJlYWR5IGVucm9sbGVkLCBkb2VzIG5vdGhpbmcuXG4gICAqL1xuLyoqKioqKiogIDZkOTRjNjQ2LTI1NGMtNDRkNi1hN2MzLTkwYmRiOTUwNzMxOCAgKioqKioqKi8gICAgaWYgKHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuaWRlbnRpZmllcikge1xuICAgICAgdGhpcy5jb250ZW50U3ZjLmF1dG9Bc3NpZ25CYXRjaEFwaSh0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuaWRlbnRpZmllciwgdGhpcy5zZWxlY3RlZExhbmd1YWdlKS5zdWJzY3JpYmUoXG4gICAgICAgIChkYXRhOiBOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5iYXRjaERhdGEgPSB7XG4gICAgICAgICAgICBjb250ZW50OiBkYXRhLmNvbnRlbnQsXG4gICAgICAgICAgICBlbnJvbGxlZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYmF0Y2hJZCA9IHRoaXMuZ2V0QmF0Y2hJZCgpXG4gICAgICAgICAgaWYgKGJhdGNoSWQpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb1BsYXllclBhZ2UoYmF0Y2hJZClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5lbnJvbGxCdG5Mb2FkaW5nID0gZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgKF9lcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKF8uZ2V0KF9lcnJvciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCAnUGxlYXNlIHRyeSBhZ2FpbiBsYXRlcicpXG4gICAgICAgICAgdGhpcy5lbnJvbGxCdG5Mb2FkaW5nID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlVG9QbGF5ZXJQYWdlKGJhdGNoSWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmNvbnRlbnQpIHtcbiAgICAgIHRoaXMuZW5yb2xsQnRuTG9hZGluZyA9IHRydWVcbiAgICAgIGxldCBmaXJzdFBsYXlhYmxlQ29udGVudFxuICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQuaWRlbnRpZmllciA9PT0gdGhpcy5zZWxlY3RlZExhbmd1YWdlLmlkZW50aWZpZXIpIHtcbiAgICAgICAgZmlyc3RQbGF5YWJsZUNvbnRlbnQgPSB0aGlzLmNvbnRlbnRTdmMuZ2V0Rmlyc3RDaGlsZEluSGllcmFyY2h5KHRoaXMuY29udGVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZldGNoIGhpZXJhcmNoeSBmb3IgdGhlIHNlbGVjdGVkIGxhbmd1YWdlIGluIHBvcHVwIGZpcnN0LCB0aGVuIGdldCBmaXJzdCBwbGF5YWJsZSBjb250ZW50IGFuZCByZWRpcmVjdCB0byBpdFxuICAgICAgICBhd2FpdCB0aGlzLmZldGNoQ29udGVudEhpZXJhcmNoeSh0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UuaWRlbnRpZmllcilcbiAgICAgICAgZmlyc3RQbGF5YWJsZUNvbnRlbnQgPSB0aGlzLmNvbnRlbnRTdmMuZ2V0Rmlyc3RDaGlsZEluSGllcmFyY2h5KHRoaXMuY29udGVudClcbiAgICAgIH1cbiAgICAgIGxldCBwcmltYXJ5Q2F0ZWdvcnlcbiAgICAgIGlmICh0aGlzLmNvbnRlbnQuc2VjdXJlU2V0dGluZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcmltYXJ5Q2F0ZWdvcnkgPSAnTGVhcm5pbmcgUmVzb3VyY2UnXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmltYXJ5Q2F0ZWdvcnkgPSBmaXJzdFBsYXlhYmxlQ29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgfHwgdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeVxuICAgICAgfVxuICAgICAgdGhpcy5maXJzdFJlc291cmNlTGluayA9IHRoaXMuZ2V0UmVzdW1lVXJsKGZpcnN0UGxheWFibGVDb250ZW50LCBiYXRjaElkLCBwcmltYXJ5Q2F0ZWdvcnkpXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5maXJzdFJlc291cmNlTGluay51cmx9YF0sIHsgcXVlcnlQYXJhbXM6IHsgLi4udGhpcy5maXJzdFJlc291cmNlTGluay5xdWVyeVBhcmFtcywgZnJvbUFJVHV0b3I6IHRoaXMuZnJvbUFJVHV0b3IgfSB9KVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmZXRjaEJhdGNoRGV0YWlscygpIHtcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5pZGVudGlmaWVyKSB7XG4gICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICBjb3Vyc2VJZDogdGhpcy5jb250ZW50LmlkZW50aWZpZXIsXG4gICAgICAgICAgICBzdGF0dXM6IFsnMCcsICcxJywgJzInXSxcbiAgICAgICAgICAgIC8vIGNyZWF0ZWRCeTogJ2ZjYTI5MjVmLTFlZWUtNDY1NC05MTc3LWZlY2UzZmQ2YWZjOScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzb3J0X2J5OiB7IGNyZWF0ZWREYXRlOiAnZGVzYycgfSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGVudFN2Yy5mZXRjaENvdXJzZUJhdGNoZXMocmVxKS5zdWJzY3JpYmUoXG4gICAgICAgIChkYXRhOiBOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5iYXRjaERhdGEgPSBkYXRhXG4gICAgICAgICAgdGhpcy5iYXRjaERhdGEuZW5yb2xsZWQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMudG9jU3ZjLnNldEJhdGNoRGF0YSh0aGlzLmJhdGNoRGF0YSlcbiAgICAgICAgICB0aGlzLnJvdXRlckNoYW5nZUhhbmRsZXIoZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ0NPTlRFTlQgSElTVE9SWSBGRVRDSCBFUlJPUiA+JywgZXJyb3IpXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfVxuICB9XG5cblxuICBzY3JvbGxUb1RvcCgpIHtcbiAgICAoZnVuY3Rpb24gc21vb3Roc2Nyb2xsKCkge1xuICAgICAgY29uc3QgY3VycmVudFNjcm9sbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3BcbiAgICAgIGlmIChjdXJyZW50U2Nyb2xsID4gMCkge1xuICAgICAgICAvLyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNtb290aHNjcm9sbClcbiAgICAgICAgLy8gd2luZG93LnNjcm9sbFRvKDAsIGN1cnJlbnRTY3JvbGwgLSAoY3VycmVudFNjcm9sbCAvIDUpKVxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xuICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSkoKVxuICB9XG5cbiAgcHVibGljIGdldENvbXBldGVuY2llcyhjb21wZXRlbmNpZXM6IGFueSkge1xuICAgIGNvbnN0IGNvbXBldGVuY2llc0FycmF5ID0gSlNPTi5wYXJzZShjb21wZXRlbmNpZXMpXG4gICAgY29uc3QgY29tcGV0ZW5jeVN0cmluZ0FycmF5OiBhbnlbXSA9IFtdXG4gICAgY29tcGV0ZW5jaWVzQXJyYXkubWFwKChjOiBhbnkpID0+IHtcbiAgICAgIGNvbXBldGVuY3lTdHJpbmdBcnJheS5wdXNoKGMubmFtZSlcbiAgICB9KVxuICAgIHJldHVybiBjb21wZXRlbmN5U3RyaW5nQXJyYXlcbiAgfVxuXG4gIGdldCBzaG93SW50cmFuZXRNc2coKSB7XG4gICAgaWYgKHRoaXMuaXNNb2JpbGUpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNob3dJbnRyYW5ldE1lc3NhZ2VcbiAgfVxuXG4gIGdldCBzaG93U3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9jU3ZjLnNob3dTdGFydEJ1dHRvbih0aGlzLmNvbnRlbnQpXG4gIH1cblxuICBnZXQgaXNQb3N0QXNzZXNzbWVudCgpOiBib29sZWFuIHtcbiAgICBpZiAoISh0aGlzLnRvY0NvbmZpZyAmJiB0aGlzLnRvY0NvbmZpZy5wb3N0QXNzZXNzbWVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBpZiAodGhpcy5jb250ZW50KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UgJiZcbiAgICAgICAgdGhpcy5jb250ZW50LmxlYXJuaW5nTW9kZSA9PT0gJ0luc3RydWN0b3ItTGVkJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51dGlsaXR5U3ZjLmlzTW9iaWxlXG4gIH1cblxuICBnZXQgc2hvd1N1YnRpdGxlT25CYW5uZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9jU3ZjLnN1YnRpdGxlT25CYW5uZXJzXG4gIH1cblxuICBwdWJsaWMgaGFuZGxlRW5yb2xsbWVudEVuZERhdGUoYmF0Y2g6IGFueSkge1xuICAgIGNvbnN0IGVucm9sbG1lbnRFbmREYXRlID0gZGF5anMoXy5nZXQoYmF0Y2gsICdlbnJvbGxtZW50RW5kRGF0ZScpKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuICAgIGNvbnN0IHN5c3RlbURhdGUgPSBkYXlqcygpXG4gICAgcmV0dXJuIGVucm9sbG1lbnRFbmREYXRlID8gZGF5anMoZW5yb2xsbWVudEVuZERhdGUpLmlzQmVmb3JlKHN5c3RlbURhdGUpIDogZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNuYWNrYmFyKHByaW1hcnlNc2c6IHN0cmluZywgZHVyYXRpb246IG51bWJlciA9IDUwMDApIHtcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocHJpbWFyeU1zZywgJ1gnLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICB9KVxuICB9XG5cbiAgZ2V0IHNob3dJbnN0cnVjdG9yTGVkTXNnKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNob3dBY3Rpb25CdXR0b25zICYmXG4gICAgICB0aGlzLmNvbnRlbnQgJiZcbiAgICAgIHRoaXMuY29udGVudC5sZWFybmluZ01vZGUgPT09ICdJbnN0cnVjdG9yLUxlZCcgJiZcbiAgICAgICF0aGlzLmNvbnRlbnQuY2hpbGRyZW4ubGVuZ3RoICYmXG4gICAgICAhdGhpcy5jb250ZW50LmFydGlmYWN0VXJsXG4gICAgKVxuICB9XG5cbiAgZ2V0IGlzSGVhZGVySGlkZGVuKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVzb3VyY2UgJiYgdGhpcy5jb250ZW50ICYmICF0aGlzLmNvbnRlbnQuYXJ0aWZhY3RVcmwubGVuZ3RoXG4gIH1cblxuICBnZXQgc2hvd0FjdGlvbkJ1dHRvbnMoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYWN0aW9uQnRuU3RhdHVzICE9PSAnd2FpdCcgJiZcbiAgICAgIHRoaXMuY29udGVudCAmJlxuICAgICAgdGhpcy5jb250ZW50LnN0YXR1cyAhPT0gJ0RlbGV0ZWQnICYmXG4gICAgICB0aGlzLmNvbnRlbnQuc3RhdHVzICE9PSAnRXhwaXJlZCdcbiAgICApXG4gIH1cblxuICBnZXQgc2hvd0J1dHRvbkNvbnRhaW5lcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hY3Rpb25CdG5TdGF0dXMgPT09ICdncmFudCcgJiZcbiAgICAgICEodGhpcy5pc01vYmlsZSAmJiB0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmlzSW5JbnRyYW5ldCkgJiZcbiAgICAgICEoXG4gICAgICAgIHRoaXMuY29udGVudCAmJlxuICAgICAgICB0aGlzLmNvbnRlbnQuY29udGVudFR5cGUgPT09ICdDb3Vyc2UnICYmXG4gICAgICAgIHRoaXMuY29udGVudC5jaGlsZHJlbi5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgIXRoaXMuY29udGVudC5hcnRpZmFjdFVybFxuICAgICAgKSAmJlxuICAgICAgISh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmNvbnRlbnRUeXBlID09PSAnUmVzb3VyY2UnICYmICF0aGlzLmNvbnRlbnQuYXJ0aWZhY3RVcmwpXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXN1bWVEYXRhRnJvbUxpc3QodHlwZT86IHN0cmluZyk6IGFueSB8IHZvaWQge1xuICAgIGNvbnN0IHJlc3VtZUNvcHkgPSBbLi4udGhpcy5yZXN1bWVEYXRhXVxuICAgIGlmIChyZXN1bWVDb3B5ICYmIHJlc3VtZUNvcHkubGVuZ3RoKSB7XG4gICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuXG4gICAgICAgIGNvbnN0IGxhc3RJdGVtID0gcmVzdW1lQ29weSAmJiByZXN1bWVDb3B5LnNvcnQoKGE6IGFueSwgYjogYW55KSA9PlxuICAgICAgICAgIG5ldyBEYXRlKGIubGFzdEFjY2Vzc1RpbWUpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEubGFzdEFjY2Vzc1RpbWUpLmdldFRpbWUoKSkuc2hpZnQoKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkZW50aWZpZXI6IGxhc3RJdGVtLmNvbnRlbnRJZCxcbiAgICAgICAgICBtaW1lVHlwZTogbGFzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzICYmIGxhc3RJdGVtLnByb2dyZXNzZGV0YWlscy5taW1lVHlwZSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgZmlyc3RJdGVtID0gcmVzdW1lQ29weSAmJiByZXN1bWVDb3B5Lmxlbmd0aCAmJiByZXN1bWVDb3B5WzBdXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZGVudGlmaWVyOiBmaXJzdEl0ZW0uY29udGVudElkLFxuICAgICAgICBtaW1lVHlwZTogZmlyc3RJdGVtLnByb2dyZXNzZGV0YWlscyAmJiBmaXJzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzLm1pbWVUeXBlLFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIHByaXZhdGUgbW9kaWZ5U2Vuc2libGVDb250ZW50UmF0aW5nKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29udGVudCAmJlxuICAgICAgdGhpcy5jb250ZW50LmF2ZXJhZ2VSYXRpbmcgJiZcbiAgICAgIHR5cGVvZiB0aGlzLmNvbnRlbnQuYXZlcmFnZVJhdGluZyAhPT0gJ251bWJlcidcbiAgICApIHtcbiAgICAgIHRoaXMuY29udGVudC5hdmVyYWdlUmF0aW5nID0gKHRoaXMuY29udGVudC5hdmVyYWdlUmF0aW5nIGFzIGFueSlbdGhpcy5jb25maWdTdmMucm9vdE9yZyB8fCAnJ11cbiAgICB9XG4gICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQudG90YWxSYXRpbmcgJiYgdHlwZW9mIHRoaXMuY29udGVudC50b3RhbFJhdGluZyAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuY29udGVudC50b3RhbFJhdGluZyA9ICh0aGlzLmNvbnRlbnQudG90YWxSYXRpbmcgYXMgYW55KVt0aGlzLmNvbmZpZ1N2Yy5yb290T3JnIHx8ICcnXVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGVhcm5pbmdVcmxzKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQpIHtcbiAgICAgIHRoaXMuaXNQcmFjdGljZVZpc2libGUgPSBCb29sZWFuKFxuICAgICAgICB0aGlzLnRvY1N2Yy5maWx0ZXJUb2ModGhpcy5jb250ZW50LCBOc0NvbnRlbnQuRUZpbHRlckNhdGVnb3J5LlBSQUNUSUNFKSxcbiAgICAgIClcblxuICAgICAgdGhpcy5pc0Fzc2Vzc1Zpc2libGUgPSBCb29sZWFuKFxuICAgICAgICB0aGlzLnRvY1N2Yy5maWx0ZXJUb2ModGhpcy5jb250ZW50LCBOc0NvbnRlbnQuRUZpbHRlckNhdGVnb3J5LkFTU0VTUyksXG4gICAgICApXG5cbiAgICAgIGNvbnN0IGZpcnN0UGxheWFibGVDb250ZW50ID0gdGhpcy5jb250ZW50U3ZjLmdldEZpcnN0Q2hpbGRJbkhpZXJhcmNoeSh0aGlzLmNvbnRlbnQpXG4gICAgICBsZXQgcHJpbWFyeUNhdGVnb3J5XG4gICAgICBpZiAodGhpcy5jb250ZW50LnNlY3VyZVNldHRpbmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJpbWFyeUNhdGVnb3J5ID0gJ0xlYXJuaW5nIFJlc291cmNlJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJpbWFyeUNhdGVnb3J5ID0gZmlyc3RQbGF5YWJsZUNvbnRlbnQucHJpbWFyeUNhdGVnb3J5IHx8IHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnlcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlyc3RSZXNvdXJjZUxpbmsgPSB0aGlzLmdldFJlc3VtZVVybChmaXJzdFBsYXlhYmxlQ29udGVudCwgbnVsbCwgcHJpbWFyeUNhdGVnb3J5KVxuXG4gICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgICAgIC8vIGlmIChmaXJzdFBsYXlhYmxlQ29udGVudC5vcHRpb25hbFJlYWRpbmcgJiYgZmlyc3RQbGF5YWJsZUNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSAnTGVhcm5pbmcgUmVzb3VyY2UnKSB7XG4gICAgICAvLyAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoMiwgZmlyc3RQbGF5YWJsZUNvbnRlbnQuaWRlbnRpZmllcilcbiAgICAgIC8vIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzc2lnblBhdGhBbmRVcGRhdGVCYW5uZXIodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXRoID0gdXJsLnNwbGl0KCcvJykucG9wKClcbiAgICBpZiAocGF0aCAmJiB0aGlzLnZhbGlkUGF0aHMuaGFzKHBhdGgpKSB7XG4gICAgICB0aGlzLnJvdXRlUGF0aCA9IHBhdGhcbiAgICAgIHRoaXMudXBkYXRlQmFubmVyVXJsKClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUJhbm5lclVybCgpIHtcbiAgICBpZiAodGhpcy5iYW5uZXJzKSB7XG4gICAgICB0aGlzLmJhbm5lclVybCA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShcbiAgICAgICAgYHVybCgke3RoaXMuYmFubmVyc1t0aGlzLnJvdXRlUGF0aF19KWAsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcGxheUludHJvVmlkZW8oKSB7XG4gICAgaWYgKHRoaXMuY29udGVudCkge1xuICAgICAgdGhpcy5kaWFsb2cub3BlbihBcHBUb2NEaWFsb2dJbnRyb1ZpZGVvQ29tcG9uZW50LCB7XG4gICAgICAgIGRhdGE6IHRoaXMuY29udGVudC5pbnRyb2R1Y3RvcnlWaWRlbyxcbiAgICAgICAgaGVpZ2h0OiAnMzUwcHgnLFxuICAgICAgICB3aWR0aDogJzYyMHB4JyxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0IHNhbml0aXplZEludHJvZHVjdG9yeVZpZGVvSWNvbigpIHtcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5pbnRyb2R1Y3RvcnlWaWRlb0ljb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoYHVybCgke3RoaXMuY29udGVudC5pbnRyb2R1Y3RvcnlWaWRlb0ljb259KWApXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBwcml2YXRlIGZldGNoRXh0ZXJuYWxDb250ZW50QWNjZXNzKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LnJlZ2lzdHJhdGlvblVybCkge1xuICAgICAgaWYgKCF0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgICAgdGhpcy5leHRlcm5hbENvbnRlbnRGZXRjaFN0YXR1cyA9ICdmZXRjaGluZydcbiAgICAgICAgdGhpcy5yZWdpc3RlckZvckV4dGVybmFsID0gZmFsc2VcbiAgICAgICAgdGhpcy50b2NTdmMuZmV0Y2hFeHRlcm5hbENvbnRlbnRBY2Nlc3ModGhpcy5jb250ZW50LmlkZW50aWZpZXIpLnN1YnNjcmliZShcbiAgICAgICAgICBkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxDb250ZW50RmV0Y2hTdGF0dXMgPSAnZG9uZSdcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJGb3JFeHRlcm5hbCA9IGRhdGEuaGFzQWNjZXNzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBfZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5leHRlcm5hbENvbnRlbnRGZXRjaFN0YXR1cyA9ICdkb25lJ1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckZvckV4dGVybmFsID0gZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4dGVybmFsQ29udGVudEZldGNoU3RhdHVzID0gJ2RvbmUnXG4gICAgICAgIHRoaXMucmVnaXN0ZXJGb3JFeHRlcm5hbCA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRSYXRpbmdJY29uKHJhdGluZ0luZGV4OiBudW1iZXIpOiAnc3RhcicgfCAnc3Rhcl9ib3JkZXInIHwgJ3N0YXJfaGFsZicge1xuICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmF2ZXJhZ2VSYXRpbmcpIHtcbiAgICAgIGNvbnN0IGF2Z1JhdGluZyA9IHRoaXMuY29udGVudC5hdmVyYWdlUmF0aW5nXG4gICAgICBjb25zdCByYXRpbmdGbG9vciA9IE1hdGguZmxvb3IoYXZnUmF0aW5nKVxuICAgICAgaWYgKHJhdGluZ0luZGV4IDw9IHJhdGluZ0Zsb29yKSB7XG4gICAgICAgIHJldHVybiAnc3RhcidcbiAgICAgIH1cbiAgICAgIGlmIChyYXRpbmdGbG9vciA9PT0gcmF0aW5nSW5kZXggLSAxICYmIGF2Z1JhdGluZyAlIDEgPiAwKSB7XG4gICAgICAgIHJldHVybiAnc3Rhcl9oYWxmJ1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJ3N0YXJfYm9yZGVyJ1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1JlZ2lzdHJhdGlvblN0YXR1cygpIHtcbiAgICBjb25zdCBzb3VyY2UgPSAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5zb3VyY2VTaG9ydE5hbWUpIHx8ICcnXG4gICAgaWYgKFxuICAgICAgIXRoaXMuZm9yUHJldmlldyAmJlxuICAgICAgIXRoaXMuaXNSZWdpc3RyYXRpb25TdXBwb3J0ZWQgJiZcbiAgICAgIHRoaXMuY2hlY2tSZWdpc3RyYXRpb25Tb3VyY2VzLmhhcyhzb3VyY2UpXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRlbnRTdmNcbiAgICAgICAgLmdldFJlZ2lzdHJhdGlvblN0YXR1cyhzb3VyY2UpXG4gICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5oYXNBY2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uQnRuU3RhdHVzID0gJ2dyYW50J1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkJ0blN0YXR1cyA9ICdyZWplY3QnXG4gICAgICAgICAgICBpZiAocmVzLnJlZ2lzdHJhdGlvblVybCAmJiB0aGlzLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250ZW50LnJlZ2lzdHJhdGlvblVybCA9IHJlcy5yZWdpc3RyYXRpb25VcmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChfZXJyID0+IHsgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3Rpb25CdG5TdGF0dXMgPSAnZ3JhbnQnXG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVRdWVyeSh0eXBlOiAnUkVTVU1FJyB8ICdTVEFSVF9PVkVSJyB8ICdTVEFSVCcpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBpZiAodGhpcy5maXJzdFJlc291cmNlTGluayAmJiAodHlwZSA9PT0gJ1NUQVJUJyB8fCB0eXBlID09PSAnU1RBUlRfT1ZFUicpKSB7XG4gICAgICBsZXQgcVBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgLi4udGhpcy5maXJzdFJlc291cmNlTGluay5xdWVyeVBhcmFtcyxcbiAgICAgICAgdmlld01vZGU6IHR5cGUsXG4gICAgICAgIGJhdGNoSWQ6IHRoaXMuZ2V0QmF0Y2hJZCgpLFxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29udGV4dElkICYmIHRoaXMuY29udGV4dFBhdGgpIHtcbiAgICAgICAgcVBhcmFtcyA9IHtcbiAgICAgICAgICAuLi5xUGFyYW1zLFxuICAgICAgICAgIGNvbGxlY3Rpb25JZDogdGhpcy5jb250ZXh0SWQsXG4gICAgICAgICAgY29sbGVjdGlvblR5cGU6IHRoaXMuY29udGV4dFBhdGgsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgICAgZGVsZXRlIHFQYXJhbXMudmlld01vZGVcbiAgICAgIH1cbiAgICAgIHFQYXJhbXMgPSB7XG4gICAgICAgIC4uLnFQYXJhbXMsXG4gICAgICAgIGNoYW5uZWxJZDogdGhpcy5jaGFubmVsSWQsXG4gICAgICB9XG4gICAgICByZXR1cm4gcVBhcmFtc1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlc3VtZURhdGFMaW5rICYmIHR5cGUgPT09ICdSRVNVTUUnKSB7XG4gICAgICBsZXQgcVBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgLi4udGhpcy5yZXN1bWVEYXRhTGluay5xdWVyeVBhcmFtcyxcbiAgICAgICAgYmF0Y2hJZDogdGhpcy5nZXRCYXRjaElkKCksXG4gICAgICAgIHZpZXdNb2RlOiAnUkVTVU1FJyxcbiAgICAgICAgLy8gY291cnNlTmFtZTogdGhpcy5jb250ZW50ID8gdGhpcy5jb250ZW50Lm5hbWUgOiAnJyxcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnRleHRJZCAmJiB0aGlzLmNvbnRleHRQYXRoKSB7XG4gICAgICAgIHFQYXJhbXMgPSB7XG4gICAgICAgICAgLi4ucVBhcmFtcyxcbiAgICAgICAgICBjb2xsZWN0aW9uSWQ6IHRoaXMuY29udGV4dElkLFxuICAgICAgICAgIGNvbGxlY3Rpb25UeXBlOiB0aGlzLmNvbnRleHRQYXRoLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICAgIGRlbGV0ZSBxUGFyYW1zLnZpZXdNb2RlXG4gICAgICB9XG4gICAgICBxUGFyYW1zID0ge1xuICAgICAgICAuLi5xUGFyYW1zLFxuICAgICAgICBjaGFubmVsSWQ6IHRoaXMuY2hhbm5lbElkLFxuICAgICAgfVxuICAgICAgcmV0dXJuIHFQYXJhbXNcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9yUHJldmlldykge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBiYXRjaElkOiB0aGlzLmdldEJhdGNoSWQoKSxcbiAgICAgIHZpZXdNb2RlOiB0eXBlLFxuICAgIH1cbiAgfVxuXG4gIGdldCBpc0luSUZyYW1lKCk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gd2luZG93LnNlbGYgIT09IHdpbmRvdy50b3BcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIG9wZW5GZWVkYmFja0RpYWxvZyhjb250ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbnRlbnRSYXRpbmdWMkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc3NjhweCcsXG4gICAgICBkYXRhOiB7IGNvbnRlbnQsIHVzZXJJZDogdGhpcy51c2VySWQsIHVzZXJSYXRpbmc6IHRoaXMudXNlclJhdGluZyB9LFxuICAgIH0pXG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMuZ2V0VXNlclJhdGluZyh0cnVlKVxuICAgICAgICAvLyB0aGlzLmdldFVzZXJFbnJvbGxtZW50TGlzdCgpXG4gICAgICAgIHRoaXMuY2hlY2tJZlVzZXJFbnJvbGxlZCgpXG4gICAgICAgIHRoaXMucmVzZXRSYXRpbmdzU2VydmljZS5zZXRSYXRpbmdTZXJ2aWNlVXBkYXRlKHRydWUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHVwZGF0ZVByb2dyZXNzKHN0YXR1czogbnVtYmVyLCByZXNvdXJjZUlkOiBhbnkpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5pZCA/XG4gICAgICB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5pZCA6ICcnXG4gICAgY29uc3QgYmF0Y2hJZCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuYmF0Y2hJZCA/XG4gICAgICB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmJhdGNoSWQgOiAnJ1xuICAgIGNvbnN0IGlzUHJlQXNzZXNzbWVudCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMucHJlQXNzZXNzbWVudFxuICAgIGlmIChpc1ByZUFzc2Vzc21lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnZpZXdlclN2Y1xuICAgICAgICAucmVhbFRpbWVQcm9ncmVzc1VwZGF0ZUZvclByZUFzc2Vzc21lbnRRdWl6KHJlc291cmNlSWQsIHN0YXR1cylcblxuICAgIH1cbiAgICByZXR1cm4gdGhpcy52aWV3ZXJTdmMucmVhbFRpbWVQcm9ncmVzc1VwZGF0ZVF1aXoocmVzb3VyY2VJZCwgY29sbGVjdGlvbklkLCBiYXRjaElkLCBzdGF0dXMpXG4gIH1cblxuICBnZXRQcm9ncmFtRHVyYXRpb24oYmF0Y2hEYXRhOiBhbnkpIHtcbiAgICBpZiAoYmF0Y2hEYXRhKSB7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBkYXlqcyhkYXlqcyhiYXRjaERhdGEuc3RhcnREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcbiAgICAgIGNvbnN0IGVuZERhdGUgPSBkYXlqcyhkYXlqcyhiYXRjaERhdGEuZW5kRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJykpXG4gICAgICAvLyBhZGRpbmcgMSB0byBpbmNsdWRlIHRoZSBzdGFydCBkYXRlXG4gICAgICByZXR1cm4gKGVuZERhdGUuZGlmZihzdGFydERhdGUsICdkYXlzJykgKyAxKVxuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIHdpdGhkcmF3T3JFbnJvbGwoZGF0YTogc3RyaW5nKSB7XG4gICAgaWYgKGRhdGEgPT09IE5zQ29udGVudC5XRkJsZW5kZWRQcm9ncmFtU3RhdHVzLklOSVRJQVRFKSB7XG4gICAgICB0aGlzLmZldGNoVXNlcldGRm9yQmxlbmRlZCgpXG4gICAgfVxuICB9XG5cblxuXG4gIGhhbmRsZUNhcGl0YWxpemUoc3RyOiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXR1cm5WYWx1ZSA9ICcnXG4gICAgaWYgKHN0cikge1xuICAgICAgaWYgKHR5cGUgPT09ICduYW1lJykge1xuICAgICAgICByZXR1cm5WYWx1ZSA9IHN0ci5zcGxpdCgnICcpLm1hcChfc3RyID0+IHtcbiAgICAgICAgICByZXR1cm4gX3N0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIF9zdHIuc2xpY2UoMSlcbiAgICAgICAgfSkuam9pbignICcpXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHJldHVyblZhbHVlID0gc3RyICYmIChzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSkpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZVxuICB9XG5cbiAgcHVibGljIGhhbmRsZVBhcnNlSnNvbkRhdGEoczogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZFN0cmluZyA9IEpTT04ucGFyc2UocylcbiAgICAgIHJldHVybiBwYXJzZWRTdHJpbmdcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU5hdmlnYXRlVG9SZXZpZXdzKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnRUb1ZpZXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmV2aWV3Q29udGFpbmVyJykgYXMgYW55XG5cbiAgICBpZiAoZWxlbWVudFRvVmlldykge1xuICAgICAgd2luZG93LnNjcm9sbFRvKHtcbiAgICAgICAgdG9wOiBlbGVtZW50VG9WaWV3Lm9mZnNldFRvcCxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByYWlzZUNlcnRJbnRyZWFjdFRlbGVtZXRyeSgpIHtcbiAgICB0aGlzLmV2ZW50cy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxuICAgICAge1xuICAgICAgICB0eXBlOiBXc0V2ZW50cy5FbnVtSW50ZXJhY3RUeXBlcy5DTElDSyxcbiAgICAgICAgaWQ6ICd2aWV3LWNlcnRpZmljYXRlJyxcbiAgICAgICAgc3ViVHlwZTogV3NFdmVudHMuRW51bUludGVyYWN0U3ViVHlwZXMuQ0VSVElGSUNBVEUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogdGhpcy5jZXJ0SWQsICAgLy8gaWQgb2YgdGhlIGNlcnRpZmljYXRlXG4gICAgICAgIHR5cGU6IFdzRXZlbnRzLkVudW1JbnRlcmFjdFN1YlR5cGVzLkNFUlRJRklDQVRFLFxuICAgICAgfSlcbiAgfVxuXG4gIHRyYW5zbGF0ZUxhYmVscyhsYWJlbDogc3RyaW5nLCB0eXBlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndHJhbnNsYXRpb25zLnRyYW5zbGF0ZUxhYmVsKGxhYmVsLCB0eXBlLCAnJylcbiAgfVxuXG5cblxuICBnZXRMYXN0UGxheWVkUmVzb3VyY2UoKSB7XG4gICAgbGV0IGZpcnN0UGxheWFibGVDb250ZW50XG4gICAgbGV0IHJlc3VtZURhdGFWMjogYW55XG4gICAgaWYgKHRoaXMucmVzdW1lRGF0YSAmJiB0aGlzLnJlc3VtZURhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGlmICh0aGlzLmNvbnRlbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCkge1xuICAgICAgICByZXN1bWVEYXRhVjIgPSB0aGlzLmdldFJlc3VtZURhdGFGcm9tTGlzdCgnc3RhcnQnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdW1lRGF0YVYyID0gdGhpcy5nZXRSZXN1bWVEYXRhRnJvbUxpc3QoKVxuICAgICAgfVxuICAgICAgdGhpcy5leHBhbmRUaGVQYXRoKHJlc3VtZURhdGFWMi5pZGVudGlmaWVyKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jb250ZW50KSB7XG4gICAgICAgIGZpcnN0UGxheWFibGVDb250ZW50ID0gdGhpcy5jb250ZW50U3ZjLmdldEZpcnN0Q2hpbGRJbkhpZXJhcmNoeSh0aGlzLmNvbnRlbnQpXG4gICAgICAgIHRoaXMuZXhwYW5kVGhlUGF0aChmaXJzdFBsYXlhYmxlQ29udGVudC5pZGVudGlmaWVyKVxuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kVGhlUGF0aChyZXNvdXJjZUlkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHJlc291cmNlSWQpIHtcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnV0aWxpdHlTdmMuZ2V0UGF0aCh0aGlzLmNvbnRlbnQsIHJlc291cmNlSWQpXG4gICAgICB0aGlzLnBhdGhTZXQgPSBuZXcgU2V0KHBhdGgubWFwKCh1OiB7IGlkZW50aWZpZXI6IGFueSB9KSA9PiB1LmlkZW50aWZpZXIpKVxuICAgIH1cbiAgfVxuXG4gIHJhaXNlRW5yb2xsVGVsZW1ldHJ5KCkge1xuICAgIHRoaXMuZXZlbnRzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdjbGljaycsXG4gICAgICAgIHN1YlR5cGU6ICdlbnJvbGwnLFxuICAgICAgICBpZDogdGhpcy5jb250ZW50ID8gdGhpcy5jb250ZW50LmlkZW50aWZpZXIgOiAnJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiB0aGlzLmNvbnRlbnQgPyB0aGlzLmNvbnRlbnQuaWRlbnRpZmllciA6ICcnLFxuICAgICAgICB0eXBlOiB0aGlzLmNvbnRlbnQgPyB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5IDogJycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwYWdlSWRFeHQ6IGBidG4tZW5yb2xsYCxcbiAgICAgICAgbW9kdWxlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5bW9kdWxlcy5DT05URU5ULFxuICAgICAgfVxuICAgIClcbiAgfVxuXG4gIHJhaXNlRW5yb2xsVGVsZW1lbnRyeUZvclNha3NoYW1BSUdlbmVyYXRlZCgpIHtcbiAgICB0aGlzLmV2ZW50cy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxuICAgICAge1xuICAgICAgICB0eXBlOiAnY2xpY2snLFxuICAgICAgICBzdWJUeXBlOiAnZW5yb2xsJyxcbiAgICAgICAgaWQ6IHRoaXMuY29udGVudCA/IHRoaXMuY29udGVudC5pZGVudGlmaWVyIDogJycsXG4gICAgICAgIHRhcmdldDoge1xuICAgICAgICAgIGlkOiB0aGlzLnJlY29tbWVuZGVkQ291cnNlc0lkLFxuICAgICAgICAgIHZlcjogXCIxLjBcIixcbiAgICAgICAgICB0eXBlOiBcImlnb3QtYWlcIlxuICAgICAgICB9LFxuICAgICAgfSBhcyBhbnksXG4gICAgICB7XG4gICAgICAgIGlkOiB0aGlzLmNvbnRlbnQgPyB0aGlzLmNvbnRlbnQuaWRlbnRpZmllciA6ICcnLFxuICAgICAgICB0eXBlOiB0aGlzLmNvbnRlbnQgPyB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5IDogJycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwYWdlSWQ6IGAvYXBwL3RvYy8ke3RoaXMuY29udGVudD8uaWRlbnRpZmllcn0vb3ZlcnZpZXdfYnRuLWVucm9sbGAsXG4gICAgICAgIG1vZHVsZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeW1vZHVsZXMuQ09OVEVOVCxcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICBvbkNsaWNrT2ZTaGFyZSgpIHtcbiAgICB0aGlzLmVuYWJsZVNoYXJlID0gdHJ1ZVxuICAgIHRoaXMucmFpc2VUZWxlbWV0cnlGb3JTaGFyZSgnc2hhcmVDb250ZW50JylcbiAgfVxuXG4gIC8qIHRzbGludDpkaXNhYmxlICovXG4gIHJhaXNlVGVsZW1ldHJ5Rm9yU2hhcmUoc3ViVHlwZTogYW55KSB7XG4gICAgdGhpcy5ldmVudHMucmFpc2VJbnRlcmFjdFRlbGVtZXRyeShcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2NsaWNrJyxcbiAgICAgICAgc3ViVHlwZSxcbiAgICAgICAgaWQ6IHRoaXMuY29udGVudCA/IHRoaXMuY29udGVudC5pZGVudGlmaWVyIDogJycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogdGhpcy5jb250ZW50ID8gdGhpcy5jb250ZW50LmlkZW50aWZpZXIgOiAnJyxcbiAgICAgICAgdHlwZTogdGhpcy5jb250ZW50ID8gdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA6ICcnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcGFnZUlkRXh0OiBgYnRuLSR7c3ViVHlwZX1gLFxuICAgICAgICBtb2R1bGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnltb2R1bGVzLkNPTlRFTlQsXG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgcmVzZXRFbmFibGVTaGFyZSgpIHtcbiAgICB0aGlzLmVuYWJsZVNoYXJlID0gZmFsc2VcbiAgfVxuXG4gIHRyYW5zbGF0ZUxhYmVsKGxhYmVsOiBzdHJpbmcsIHR5cGU6IGFueSkge1xuICAgIGlmIChsYWJlbCAmJiB0eXBlKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYW5ndHJhbnNsYXRpb25zLnRyYW5zbGF0ZUxhYmVsKGxhYmVsLCB0eXBlLCAnJylcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5yb3V0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yb3V0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgfVxuICAgIGlmICh0aGlzLmJhdGNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmJhdGNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICB9XG4gICAgaWYgKHRoaXMuYmF0Y2hEYXRhU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmJhdGNoRGF0YVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgfVxuICAgIHRoaXMudG9jU3ZjLmFuYWx5dGljc0ZldGNoU3RhdHVzID0gJ25vbmUnXG4gICAgaWYgKHRoaXMucm91dGVyUGFyYW1TdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucm91dGVyUGFyYW1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZEJhdGNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQmF0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgICBpZiAodGhpcy5yZXN1bWVEYXRhU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlc3VtZURhdGFTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgICBpZiAodGhpcy50aW1lclVuc3Vic2NyaWJlKSB7XG4gICAgICB0aGlzLnRpbWVyVW5zdWJzY3JpYmUudW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgICBpZiAodGhpcy5oYXNobWFwVXBkYXRlZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5oYXNobWFwVXBkYXRlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgY29udGVudCBkYXRhIHRvIHByZXZlbnQgc3RhbGUgZGF0YSB3aGVuIG5hdmlnYXRpbmcgYmV0d2VlbiBjb250ZW50c1xuICAgIHRoaXMudG9jU3ZjLnJlc2V0Q29udGVudERhdGEoKVxuICB9XG5cbiAgcHJvZ3JhbUVucm9sbENhbGwoYmF0Y2hEYXRhOiBhbnkpIHtcbiAgICB0aGlzLmF1dG9FbnJvbGxDdXJhdGVkUHJvZ3JhbShOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5Lk1PREVSQVRFRF9QUk9HUkFNLCBiYXRjaERhdGEpXG4gIH1cblxuICByYWlzZVRlbGVtZXRyeUZvclB1YmxpYygkZXZlbnQ6IGFueSkge1xuICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCBmaXJzdCBwcmV2ZW50IG5hdmlnYXRpb24gdG8gcGxheWVyIHBhZ2VcbiAgICBjb25zdCBzaG91bGRQcmV2ZW50TmF2aWdhdGlvbiA9IHRoaXMuc2hvdWxkU2hvd1N1cnZleVBvcHVwKClcbiAgICBpZiAoc2hvdWxkUHJldmVudE5hdmlnYXRpb24pIHtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG5cbiAgICB0aGlzLmV2ZW50cy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxuICAgICAge1xuICAgICAgICB0eXBlOiAnY2xpY2snLFxuICAgICAgICBpZDogXCJ2aWV3LWFzc2Vzc21lbnRcIixcbiAgICAgICAgc3ViVHlwZTogXCJhbm9ueW1vdXMtYXNzZXNzbWVudFwiLFxuICAgICAgfSwge30sXG4gICAgICB7XG4gICAgICAgIG1vZHVsZTogJ0xhbmRpbmcgUGFnZScsXG4gICAgICB9KVxuXG4gICAgaWYgKHNob3VsZFByZXZlbnROYXZpZ2F0aW9uKSB7XG4gICAgICAvLyBQcmVwYXJlIG5hdmlnYXRpb24gZGV0YWlsc1xuICAgICAgY29uc3QgbmF2aWdhdGlvblVybCA9ICh0aGlzLnJlc3VtZURhdGEgJiYgIXRoaXMuY2VydERhdGEpID8gdGhpcy5yZXN1bWVEYXRhTGluaz8udXJsIDogdGhpcy5maXJzdFJlc291cmNlTGluaz8udXJsXG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9ICh0aGlzLnJlc3VtZURhdGEgJiYgIXRoaXMuY2VydERhdGEpID8gdGhpcy5nZW5lcmF0ZVF1ZXJ5KCdSRVNVTUUnKSA6IHRoaXMuZ2VuZXJhdGVRdWVyeSgnU1RBUlQnKVxuXG4gICAgICAvLyBPcGVuIHN1cnZleSBwb3B1cCBkaXJlY3RseSB3aXRoIG5hdmlnYXRpb24gZGV0YWlsc1xuICAgICAgaWYgKG5hdmlnYXRpb25VcmwpIHtcbiAgICAgICAgdGhpcy5vcGVuUHVibGljU3VydmV5UG9wdXAobmF2aWdhdGlvblVybCwgcXVlcnlQYXJhbXMpXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBzaG91bGRTaG93U3VydmV5UG9wdXAoKTogYm9vbGVhbiB7XG4gICAgLy8gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3Igc3VydmV5IHBvcHVwIGNvbmRpdGlvblxuICAgIC8vIENoZWNrIGlmIGl0J3MgcHVibGljIHZpZXcgYW5kIGNvbnRlbnQgaXMgYSBjYXNlIHN0dWR5XG4gICAgcmV0dXJuIHRoaXMuZm9yUHJldmlldyAmJiB0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50UmVhZERhdGFcbiAgICAgICYmIHRoaXMuY29udGVudFJlYWREYXRhLmNvdXJzZUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LkNBU0VfU1RVRFlcbiAgfVxuXG5cbiAgYXN5bmMgY2hlY2tJZlVzZXJFbnJvbGxlZCgpIHtcbiAgICB0aGlzLmNvbnRlbnRMaWJTdmMub25lU3RlcFJlc3VtZUVuYWJsZSA9IGZhbHNlXG4gICAgdGhpcy5lbnJvbGxCdG5Mb2FkaW5nID0gdHJ1ZVxuICAgIHRoaXMudG9jU3ZjLmNvbnRlbnRMb2FkZXIubmV4dCh0cnVlKVxuICAgIC8vIG9ubHkgZm9yICByZXNvdXJjZVxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgIGlmICh0aGlzLmJhc2VDb250ZW50UmVhZERhdGEgJiYgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLmlkZW50aWZpZXIgJiYgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLnByaW1hcnlDYXRlZ29yeSAhPT0gdGhpcy5wcmltYXJ5Q2F0ZWdvcnkuQ09VUlNFICYmXG4gICAgICB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEucHJpbWFyeUNhdGVnb3J5ICE9PSB0aGlzLnByaW1hcnlDYXRlZ29yeS5QUk9HUkFNICYmXG4gICAgICB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEucHJpbWFyeUNhdGVnb3J5ICE9PSB0aGlzLnByaW1hcnlDYXRlZ29yeS5NQU5EQVRPUllfQ09VUlNFX0dPQUwgJiZcbiAgICAgIHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YS5wcmltYXJ5Q2F0ZWdvcnkgIT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LlNUQU5EQUxPTkVfQVNTRVNTTUVOVCAmJlxuICAgICAgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLnByaW1hcnlDYXRlZ29yeSAhPT0gdGhpcy5wcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNICYmXG4gICAgICB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEucHJpbWFyeUNhdGVnb3J5ICE9PSB0aGlzLnByaW1hcnlDYXRlZ29yeS5DVVJBVEVEX1BST0dSQU0pIHtcbiAgICAgIC8vIGNvbnN0IGNvbGxlY3Rpb25JZCA9IHRoaXMuaXNSZXNvdXJjZSA/ICcnIDogdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLmlkZW50aWZpZXJcbiAgICAgIHJldHVybiB0aGlzLmdldENvbnRpbnVlTGVhcm5pbmdEYXRhKHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YS5pZGVudGlmaWVyKVxuICAgIH1cblxuICAgIGxldCBlbnJvbGxlZENvdXJzZTogTnNDb250ZW50LklDb3Vyc2UgfCB1bmRlZmluZWRcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuaWRlbnRpZmllciAmJiAhdGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICBpZiAodGhpcy51c2VyRW5yb2xsbWVudExpc3QgJiYgdGhpcy51c2VyRW5yb2xsbWVudExpc3QubGVuZ3RoKSB7XG4gICAgICAgIGVucm9sbGVkQ291cnNlID0gdGhpcy51c2VyRW5yb2xsbWVudExpc3QuZmluZCgoY291cnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5iYXNlQ29udGVudFJlYWREYXRhICYmIHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YS5pZGVudGlmaWVyIHx8ICcnXG4gICAgICAgICAgaWYgKGNvdXJzZS5jb3Vyc2VJZCAhPT0gaWRlbnRpZmllcikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY291cnNlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIElmIGN1cnJlbnQgY291cnNlIGlzIHByZXNlbnQgaW4gdGhlIGxpc3Qgb2YgdXNlciBlbnJvbGxlZCBjb3Vyc2VcbiAgICAgIGlmIChlbnJvbGxlZENvdXJzZSAmJiBlbnJvbGxlZENvdXJzZS5iYXRjaElkKSB7XG4gICAgICAgIHRoaXMucmVzdW1lRGF0YVN1YnNjcmlwdGlvbiA9IHRoaXMudG9jU3ZjLnJlc3VtZURhdGEuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVzdW1lRGF0YSA9IHJlc1xuICAgICAgICAgICAgdGhpcy5nZXRMYXN0UGxheWVkUmVzb3VyY2UoKVxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVJlc3VtZURhdGFMaW5rTmV3KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMudG9jU3ZjLmNoZWNrTW9kdWxlV2lzZURhdGEodGhpcy5jb250ZW50KVxuICAgICAgICB0aGlzLmVucm9sbGVkQ291cnNlRGF0YSA9IGVucm9sbGVkQ291cnNlXG4gICAgICAgIHRoaXMuaXNDb3Vyc2VDb21wbGV0ZWRPblRoaXNNb250aCgpXG4gICAgICAgIHRoaXMuY3VycmVudENvdXJzZUJhdGNoSWQgPSBlbnJvbGxlZENvdXJzZS5iYXRjaElkXG4gICAgICAgIC8vIHRoaXMuZG93bmxvYWRDZXJ0KGVucm9sbGVkQ291cnNlLmlzc3VlZENlcnRpZmljYXRlcylcbiAgICAgICAgaWYgKGVucm9sbGVkQ291cnNlICYmIGVucm9sbGVkQ291cnNlLmlzc3VlZENlcnRpZmljYXRlcyAmJlxuICAgICAgICAgIGVucm9sbGVkQ291cnNlLmlzc3VlZENlcnRpZmljYXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBjZXJ0aWZpY2F0ZTogYW55ID0gZW5yb2xsZWRDb3Vyc2UuaXNzdWVkQ2VydGlmaWNhdGVzLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PlxuICAgICAgICAgICAgbmV3IERhdGUoYi5sYXN0SXNzdWVkT24pLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEubGFzdElzc3VlZE9uKS5nZXRUaW1lKCkpXG4gICAgICAgICAgY29uc3QgY2VydElkID0gY2VydGlmaWNhdGVbMF0uaWRlbnRpZmllclxuICAgICAgICAgIHRoaXMuY2VydElkID0gY2VydElkXG4gICAgICAgICAgaWYgKHRoaXMuY29udGVudCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50WydjZXJ0aWZpY2F0ZU9iaiddID0ge1xuICAgICAgICAgICAgICBjZXJ0SWQsXG4gICAgICAgICAgICAgIGNlcnREYXRhOiAnJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgZW5yb2xsZWQgY291cnNlIGlzIGNvbXBsZXRlZCB0aGVuIHRvIG1ha2UgYWxsIGxhbmd1YWdlcyBjb3Vyc2VzIGFzIHdlbGwgYXMgYWxsIGNvbnRlbnQgYXMgY29tcGxldGVkXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YS5jb3Vyc2VDYXRlZ29yeSAhPT0gTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5MRUFSTklOR19QQVRIV0FZICYmIGVucm9sbGVkQ291cnNlLnN0YXR1cyA9PT0gMikge1xuICAgICAgICAgIHRoaXMuY29udGVudFsnY29tcGxldGlvblBlcmNlbnRhZ2UnXSA9IDEwMFxuICAgICAgICAgIHRoaXMuY29udGVudFsnY29tcGxldGlvblN0YXR1cyddID0gMlxuICAgICAgICAgIGF3YWl0IHRoaXMudG9jU3ZjLm1hcENvbXBsZXRpb25DaGlsZFBlcmNlbnRhZ2VQcm9ncmFtKHRoaXMuY29udGVudClcbiAgICAgICAgICBsZXQgY29udGVudExhZyA9IHRoaXMuY29udGVudExhbmdTdmMuZ2V0Q29udGVudExhbmd1YWdlKHRoaXMuY29udGVudFJlYWREYXRhKVxuICAgICAgICAgIHRoaXMuZ2V0Q29udGludWVMZWFybmluZ0RhdGEodGhpcy5iYXNlQ29udGVudFJlYWREYXRhLmlkZW50aWZpZXIsIGVucm9sbGVkQ291cnNlLmJhdGNoSWQsIGNvbnRlbnRMYWcpXG4gICAgICAgICAgdGhpcy5lbnJvbGxCdG5Mb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5tYXBNb2R1bGVDb3VudCh0aGlzLmNvbnRlbnQpXG4gICAgICAgICAgdGhpcy5jaGVja0ZvckNvbXBsZXRpb25TdXJ2ZXlUcmlnZ2VyKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5jb250ZW50UmVhZERhdGEgJiYgdGhpcy5jb250ZW50UmVhZERhdGEuY3VtdWxhdGl2ZVRyYWNraW5nICYmIHRoaXMuY29udGVudFJlYWREYXRhLmNvdXJzZUNhdGVnb3J5ICE9PSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LkxFQVJOSU5HX1BBVEhXQVkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudG9jU3ZjLm1hcENvbXBsZXRpb25QZXJjZW50YWdlUHJvZ3JhbSh0aGlzLmNvbnRlbnQsIHRoaXMudXNlckVucm9sbG1lbnRMaXN0KVxuICAgICAgICAgICAgdGhpcy5jaGVja0ZvckNvbXBsZXRpb25TdXJ2ZXlUcmlnZ2VyKClcbiAgICAgICAgICAgIHRoaXMucmVzdW1lRGF0YVN1YnNjcmlwdGlvbiA9IHRoaXMudG9jU3ZjLnJlc3VtZURhdGEuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bWVEYXRhID0gcmVzXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRMYXN0UGxheWVkUmVzb3VyY2UoKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVSZXN1bWVEYXRhTGlua05ldygpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHRoaXMuZW5yb2xsQnRuTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAvLyB0aGlzLnRvY1N2Yy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmNvbnRlbnRSZWFkRGF0YS5jb3Vyc2VDYXRlZ29yeSAhPT0gTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5MRUFSTklOR19QQVRIV0FZKSB7XG4gICAgICAgICAgICAgIGxldCBjb250ZW50TGFnID0gdGhpcy5jb250ZW50TGFuZ1N2Yy5nZXRDb250ZW50TGFuZ3VhZ2UodGhpcy5jb250ZW50UmVhZERhdGEpXG4gICAgICAgICAgICAgIHRoaXMuZ2V0Q29udGludWVMZWFybmluZ0RhdGEodGhpcy5iYXNlQ29udGVudFJlYWREYXRhLmlkZW50aWZpZXIsIGVucm9sbGVkQ291cnNlLmJhdGNoSWQsIGNvbnRlbnRMYWcpXG4gICAgICAgICAgICAgIHRoaXMuY29udGVudFsnY29tcGxldGlvblBlcmNlbnRhZ2UnXSA9IGVucm9sbGVkQ291cnNlLmNvbXBsZXRpb25QZXJjZW50YWdlXG4gICAgICAgICAgICAgIHRoaXMudG9jU3ZjLm1hcE1vZHVsZUNvdW50KHRoaXMuY29udGVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW5yb2xsQnRuTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAvLyB0aGlzLnRvY1N2Yy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJhc2VDb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LkxFQVJOSU5HX1BBVEhXQVkpIHtcbiAgICAgICAgICAvLyB0aGlzLmFwcFRvY1YyU3ZjLm1hcENvbnRlbnRIaWVyYXJjaHlQcm9ncmVzc1VwZGF0ZSh0aGlzLmNvbnRlbnQsdGhpcy51c2VyRW5yb2xsbWVudExpc3QpXG4gICAgICAgICAgY29uc29sZS5sb2coJ21hcHBpbmcgcHJvZ3Jlc3MgZm9yIGxlYXJuaW5nIHBhdGh3YXknLCB0aGlzLmNvbnRlbnQpXG4gICAgICAgICAgdGhpcy50b2NTdmMuY2FsbEhpcmFyY2h5UHJvZ3Jlc3NIYXNobWFwKHRoaXMuY29udGVudClcbiAgICAgICAgICBjb25zb2xlLmxvZygnbWFwcGVkIHByb2dyZXNzIGZvciBsZWFybmluZyBwYXRod2F5JywgdGhpcy50b2NTdmMuaGFzaG1hcClcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5jb21wdXRlTWlsZXN0b25lTG9ja2luZ1N0YXR1cyh0cnVlKVxuICAgICAgICAgIHRoaXMuc3luY01pbGVzdG9uZUxvY2tTdGF0dXMoKVxuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iYXRjaERhdGEgPSB7XG4gICAgICAgICAgY29udGVudDogW2Vucm9sbGVkQ291cnNlLmJhdGNoXSxcbiAgICAgICAgICBlbnJvbGxlZDogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvY1N2Yy5zZXRCYXRjaERhdGEodGhpcy5iYXRjaERhdGEpXG4gICAgICAgIHRoaXMudG9jU3ZjLmdldFNlbGVjdGVkQmF0Y2hEYXRhKHRoaXMuYmF0Y2hEYXRhKVxuICAgICAgICB0aGlzLnRvY1N2Yy5tYXBTZXNzaW9uQ29tcGxldGlvblBlcmNlbnRhZ2UodGhpcy5iYXRjaERhdGEsIHRoaXMucmVzdW1lRGF0YSlcbiAgICAgICAgdGhpcy5yb3V0ZXJDaGFuZ2VIYW5kbGVyKHRydWUpXG4gICAgICAgIHRoaXMudG9jU3ZjLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9jU3ZjLmNoZWNrTW9kdWxlV2lzZURhdGEodGhpcy5jb250ZW50KVxuICAgICAgICB0aGlzLnRvY1N2Yy5tYXBNb2R1bGVDb3VudCh0aGlzLmNvbnRlbnQpXG4gICAgICAgIC8vIEl0J3MgdW5kZXJzdG9vZCB0aGF0IHVzZXIgaXMgbm90IGFscmVhZHkgZW5yb2xsZWRcbiAgICAgICAgLy8gRmV0Y2ggdGhlIGF2YWlsYWJsZSBiYXRjaGVzIGFuZCBwcmVzZW50IHRvIHVzZXJcbiAgICAgICAgaWYgKHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LkNPVVJTRVxuICAgICAgICAgIHx8IHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgIT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LlBST0dSQU0pIHtcbiAgICAgICAgICAvLyBEaXNhYmxpbmcgYXV0byBlbnJvbGxtZW50IHRvIGJhdGNoXG4gICAgICAgICAgaWYgKHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEJhdGNoRGV0YWlscygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmV0Y2hCYXRjaERldGFpbHMoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9jU3ZjLmNhbGxIaXJhcmNoeVByb2dyZXNzSGFzaG1hcCh0aGlzLmNvbnRlbnQpXG4gICAgICAgIC8vIEZvciBMZWFybmluZyBQYXRod2F5cywgY29tcHV0ZSBtaWxlc3RvbmUgbG9ja2luZyB3aGVuIG5vdCBlbnJvbGxlZCAoYWxsIGxvY2tlZClcbiAgICAgICAgaWYgKHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnkgPT09IE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuTEVBUk5JTkdfUEFUSFdBWSkge1xuICAgICAgICAgIHRoaXMudG9jU3ZjLmNvbXB1dGVNaWxlc3RvbmVMb2NraW5nU3RhdHVzKGZhbHNlKVxuICAgICAgICAgIHRoaXMuc3luY01pbGVzdG9uZUxvY2tTdGF0dXMoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5yb2xsQnRuTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMudG9jU3ZjLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNrZWxldG9uTG9hZGVyID0gZmFsc2VcbiAgfVxuXG4gIGJpbmRDb21wbGV0aW9uUGVyY2VudGFnZSgpIHtcbiAgICBsZXQgY29tcGxldGlvblBlcmNlbnRhZ2UgPSAwXG4gICAgbGV0IGNvbXBsZXRpb25TdGF0dXMgPSAwXG4gICAgaWYgKHRoaXMubGFuZ3VhZ2VNYXBQcm9ncmVzcyAmJiBPYmplY3Qua2V5cyh0aGlzLmxhbmd1YWdlTWFwUHJvZ3Jlc3MpLmxlbmd0aCkge1xuICAgICAgbGV0IGxhbmdQZXJjZW50YWdlID0gdGhpcy5sYW5ndWFnZU1hcFByb2dyZXNzW3RoaXMuc2VsZWN0ZWRMYW5ndWFnZS5sYW5nSWRdIHx8IDBcbiAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlID0gbGFuZ1BlcmNlbnRhZ2VcbiAgICAgIGNvbXBsZXRpb25TdGF0dXMgPSBsYW5nUGVyY2VudGFnZSA+PSAxMDAgPyAyIDogMFxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZW5yb2xsZWREYXRhID0gdGhpcy50b2NTdmMuZmluZEVucm9sbWVudEJ5Q29sbGVjdGlvbklkKHRoaXMudXNlckVucm9sbG1lbnRMaXN0LCAodGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyIHx8ICcnKSlcbiAgICAgIGlmIChlbnJvbGxlZERhdGEgJiYgZW5yb2xsZWREYXRhLmNvbXBsZXRpb25QZXJjZW50YWdlKSB7XG4gICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlID0gZW5yb2xsZWREYXRhLmNvbXBsZXRpb25QZXJjZW50YWdlXG4gICAgICAgIGNvbXBsZXRpb25TdGF0dXMgPSBlbnJvbGxlZERhdGEuc3RhdHVzXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udGVudCkge1xuICAgICAgdGhpcy5jb250ZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID0gY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgIHRoaXMuY29udGVudC5jb21wbGV0aW9uU3RhdHVzID0gY29tcGxldGlvblN0YXR1c1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUFjY2VwdFJlbGV2ZW50KCkge1xuICAgIHRoaXMuc2F2ZUZlZWRiYWNrKCcnLCAxKVxuICB9XG5cbiAgaGFuZGxlRGVjbGluZVJlbGV2ZW50KCkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTm9uUmVsZXZlbnRGZWVkYmFja0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgd2lkdGg6ICc1MDJweCcsXG4gICAgICBwYW5lbENsYXNzOiBbJ3JlbGV2ZW50LWZlZWRiYWNrLWRpYWxvZyddLFxuICAgIH0pXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLnNhdmVGZWVkYmFjayhyZXN1bHQsIDApXG4gICAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWFsb2dSZWYuY2xvc2UoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjb250ZW50Vmlld0V2ZW50Rm9yTmV0Q29yZShldmVudFR5cGU6IGFueSkge1xuICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy5uZXRjb3JlQ29uZmlnICYmIHRoaXMuY29uZmlnU3ZjLm5ldGNvcmVDb25maWcubmV0Y29yZVdlYkNvbmZpZyAgLy8gTk9TT05BUlxuICAgICAgJiYgdGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZy5uZXRjb3JlV2ViQ29uZmlnLmlzQWN0aXZlIC8vIE5PU09OQVJcbiAgICAgICYmIHRoaXMuY29uZmlnU3ZjLm5ldGNvcmVDb25maWcubmV0Y29yZVdlYkNvbmZpZy5ldmVudHMgLy8gTk9TT05BUlxuICAgICAgJiYgdGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZy5uZXRjb3JlV2ViQ29uZmlnLmV2ZW50cy5jb250ZW50X3ZpZXcgLy8gTk9TT05BUlxuICAgICAgJiYgdGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZy5uZXRjb3JlV2ViQ29uZmlnLmV2ZW50cy5jb250ZW50X3ZpZXcuaXNBY3RpdmUgLy8gTk9TT05BUlxuICAgICkge1xuICAgICAgbGV0IHBheWxvYWQ6IGFueSA9IHt9XG4gICAgICAvLyBpZiAodGhpcy5jb25maWdTdmMgJiYgdGhpcy5jb25maWdTdmMudW5NYXBwZWRVc2VyICYmIHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlci5pZGVudGlmaWVyKSB7IC8vIE5PU09OQVJcbiAgICAgIC8vICAgcGF5bG9hZFsncGtedXNlcmlkJ10gPSB0aGlzLmNvbmZpZ1N2Yy51bk1hcHBlZFVzZXIuaWRlbnRpZmllci50cmltKCkudG9Mb3dlckNhc2UoKVxuICAgICAgLy8gfVxuICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQubmFtZSkge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X25hbWUnXSA9IHRoaXMuY29udGVudC5uYW1lXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5jb3Vyc2VDYXRlZ29yeSkge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X2NhdGVnb3J5J10gPSB0aGlzLmNvbnRlbnQuY291cnNlQ2F0ZWdvcnlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmlkZW50aWZpZXIpIHtcbiAgICAgICAgcGF5bG9hZFsnY29udGVudF9pZCddID0gdGhpcy5jb250ZW50LmlkZW50aWZpZXJcbiAgICAgIH1cbiAgICAgIC8vIGlmKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQubmFtZSkge1xuICAgICAgcGF5bG9hZFsnY29udGVudF91cmwnXSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG4gICAgICAvLyB9XG4gICAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5hcHBJY29uKSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfaW1hZ2UnXSA9IHRoaXMuY29udGVudC5hcHBJY29uXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5kdXJhdGlvbikge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X2R1cmF0aW9uJ10gPSB0aGlzLmNvbnRlbnQuZHVyYXRpb24gJiYgTnVtYmVyKHRoaXMuY29udGVudC5kdXJhdGlvbikgPiAwID8gTnVtYmVyKHRoaXMuY29udGVudC5kdXJhdGlvbikgOiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X2R1cmF0aW9uJ10gPSAwXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5hdmdSYXRpbmdcbiAgICAgICkge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X3JhdGluZyddID0gdGhpcy5jb250ZW50LmF2Z1JhdGluZ1xuICAgICAgICBwYXlsb2FkWydjb250ZW50IHJhdGluZyddID0gdGhpcy5jb250ZW50LmF2Z1JhdGluZ1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQudG90YWxOb09mUmF0aW5nKSB7XG4gICAgICAgIHBheWxvYWRbJ25vX3VzZXJzX3JhdGVkJ10gPSB0aGlzLmNvbnRlbnQudG90YWxOb09mUmF0aW5nXG4gICAgICB9XG4gICAgICAvLyBpZih0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50Lm5hbWUpIHtcbiAgICAgIHBheWxvYWRbJ2xlYXJuaW5nX3BhdGhfY29udGVudCddID0gdGhpcy51c2VyRW5yb2xsbWVudExpc3QgJiYgdGhpcy51c2VyRW5yb2xsbWVudExpc3QubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlXG4gICAgICBwYXlsb2FkWydsZWFybmluZyBwYXRoIGNvbnRlbnQnXSA9IHRoaXMudXNlckVucm9sbG1lbnRMaXN0ICYmIHRoaXMudXNlckVucm9sbG1lbnRMaXN0Lmxlbmd0aCA/IHRydWUgOiBmYWxzZVxuICAgICAgLy8gfVxuICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQuc291cmNlKSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfcHJvdmlkZXJfbmFtZSddID0gdGhpcy5jb250ZW50LnNvdXJjZVxuICAgICAgfVxuICAgICAgLy8gY29uc29sZS5sb2coJ3BheWxvYWQnLCBwYXlsb2FkKVxuICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3ZpZXcnKSB7XG4gICAgICAgIHRoaXMubmV0Q29yZVNlcnZpY2UudHJhY2tFdmVudEZvckNvbnRlbnRBbmRFdmVudCgnY29udGVudF92aWV3JywgdGhpcy5jb25maWdTdmMudW5NYXBwZWRVc2VyLmlkZW50aWZpZXIudHJpbSgpLnRvTG93ZXJDYXNlKCksIHBheWxvYWQpXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vucm9sbCcpIHtcbiAgICAgICAgdGhpcy5uZXRDb3JlU2VydmljZS50cmFja0V2ZW50Rm9yQ29udGVudEFuZEV2ZW50KCdjb250ZW50X2Vucm9sbWVudCcsIHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlci5pZGVudGlmaWVyLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCBwYXlsb2FkKVxuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgdGhpcy5uZXRDb3JlU2VydmljZS50cmFja0V2ZW50Rm9yQ29udGVudEFuZEV2ZW50KCdjb250ZW50X2NvbXBsZXRpb24nLCB0aGlzLmNvbmZpZ1N2Yy51bk1hcHBlZFVzZXIuaWRlbnRpZmllci50cmltKCkudG9Mb3dlckNhc2UoKSwgcGF5bG9hZClcbiAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIHNlY29uZHNUb1RpbWUoZDogYW55KSB7XG4gICAgZCA9IE51bWJlcihkKVxuICAgIHZhciBoID0gTWF0aC5mbG9vcihkIC8gMzYwMClcbiAgICB2YXIgbSA9IE1hdGguZmxvb3IoZCAlIDM2MDAgLyA2MClcbiAgICB2YXIgcyA9IE1hdGguZmxvb3IoZCAlIDM2MDAgJSA2MClcblxuICAgIHZhciBoRGlzcGxheSA9IGggPiAwID8gaCArIChoID09IDEgPyBcIiBob3VyLCBcIiA6IFwiIGhvdXJzLCBcIikgOiBcIlwiXG4gICAgdmFyIG1EaXNwbGF5ID0gbSA+IDAgPyBtICsgKG0gPT0gMSA/IFwiIG1pbnV0ZSwgXCIgOiBcIiBtaW51dGVzLCBcIikgOiBcIlwiXG4gICAgdmFyIHNEaXNwbGF5ID0gcyA+IDAgPyBzICsgKHMgPT0gMSA/IFwiIHNlY29uZFwiIDogXCIgc2Vjb25kc1wiKSA6IFwiXCJcbiAgICByZXR1cm4gaERpc3BsYXkgKyBtRGlzcGxheSArIHNEaXNwbGF5XG4gIH1cblxuXG4gIGFzeW5jIHNhdmVGZWVkYmFjayhjb21tZW50OiBzdHJpbmcsIHJhdGluZyA9IDApIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgXCJyZWNvbW1lbmRhdGlvbl9pZFwiOiB0aGlzLnJlY29tbWVuZGVkQ291cnNlc0lkLFxuICAgICAgXCJjb3Vyc2VfaWRcIjogdGhpcy5jb3Vyc2VJRCxcbiAgICAgIFwicmF0aW5nXCI6IHJhdGluZyxcbiAgICAgIFwiY29tbWVudHNcIjogY29tbWVudCxcbiAgICAgIFwidXNlcl9pZFwiOiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZT8udXNlcklkIHx8ICcnXG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb250ZW50TGliU3ZjLnNhdmVGZWVkYmFja1Nha3NoYW1BSShwYXlsb2FkKS50b1Byb21pc2UoKS5jYXRjaCgoKSA9PiB7IH0pXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlPy5tZXNzYWdlKSB7XG4gICAgICB0aGlzLm1hdFNuYWNrYmFyTmV3Lm9wZW4oXG4gICAgICAgICdUaGFuayB5b3UgZm9yIHlvdXIgZmVlZGJhY2suJywgJ1gnLFxuICAgICAgICB7IGR1cmF0aW9uOiBTTkFDS0JBUl9EVVJBVElPTiwgcGFuZWxDbGFzczogWydzdWNjZXNzJ10gfVxuICAgICAgKVxuICAgICAgdGhpcy5mZWVkYmFja0dpdmVuID0geyBjb3Vyc2VfaWQ6IHRoaXMuY291cnNlSUQsIHJhdGluZzogcmF0aW5nLCBjb21tZW50czogY29tbWVudCB9XG5cbiAgICB9IGVsc2UgaWYgKCFyZXNwb25zZSkge1xuICAgICAgdGhpcy5tYXRTbmFja2Jhck5ldy5vcGVuKFxuICAgICAgICAnU29tZXRoaW5nIGlzIHdyb25nLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicsICdYJyxcbiAgICAgICAgeyBkdXJhdGlvbjogU05BQ0tCQVJfRFVSQVRJT04sIHBhbmVsQ2xhc3M6IFsnZXJyb3InXSB9XG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcGxheVJlc3VtZUZvckFJKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGlmICh0aGlzLmZpcnN0UmVzb3VyY2VMaW5rKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmZpcnN0UmVzb3VyY2VMaW5rLnVybF0sIHsgcXVlcnlQYXJhbXM6IHRoaXMuZmlyc3RSZXNvdXJjZUxpbmsucXVlcnlQYXJhbXMgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIGVucm9sbFVzZXJUb0FJKCkge1xuICAgIHRoaXMuZnJvbUFJVHV0b3IgPSB0cnVlXG4gICAgdGhpcy5oYW5kbGVBdXRvQmF0Y2hBc3NpZ24oKVxuICB9XG5cbiAgb3BlblN1cnZleUZvcm1Qb3B1cChldmVudDogYm9vbGVhbikge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5vcGVuQ29tcGxldGlvblN1cnZleUZvcm1Qb3B1cCgpXG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVQcmVBc3Nlc3NtZW50UXVlcnkodHlwZTogJ1JFU1VNRScgfCAnU1RBUlRfT1ZFUicgfCAnU1RBUlQnKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgaWYgKHRoaXMuZmlyc3RSZXNvdXJjZUxpbmsgJiYgKHR5cGUgPT09ICdTVEFSVCcgfHwgdHlwZSA9PT0gJ1NUQVJUX09WRVInKSkge1xuICAgICAgbGV0IHFQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgIC4uLnRoaXMuZmlyc3RSZXNvdXJjZUxpbmsucXVlcnlQYXJhbXMsXG4gICAgICAgIHZpZXdNb2RlOiB0eXBlLFxuICAgICAgICBiYXRjaElkOiB0aGlzLmdldEJhdGNoSWQoKSxcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnRleHRJZCAmJiB0aGlzLmNvbnRleHRQYXRoKSB7XG4gICAgICAgIHFQYXJhbXMgPSB7XG4gICAgICAgICAgLi4ucVBhcmFtcyxcbiAgICAgICAgICBjb2xsZWN0aW9uSWQ6IHRoaXMuY29udGV4dElkLFxuICAgICAgICAgIGNvbGxlY3Rpb25UeXBlOiB0aGlzLmNvbnRleHRQYXRoLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICAgIGRlbGV0ZSBxUGFyYW1zLnZpZXdNb2RlXG4gICAgICB9XG4gICAgICBxUGFyYW1zID0ge1xuICAgICAgICAuLi5xUGFyYW1zLFxuICAgICAgICBjaGFubmVsSWQ6IHRoaXMuY2hhbm5lbElkLFxuICAgICAgfVxuICAgICAgcmV0dXJuIHFQYXJhbXNcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXN1bWVEYXRhTGluayAmJiB0eXBlID09PSAnUkVTVU1FJykge1xuICAgICAgbGV0IHFQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgIC4uLnRoaXMucmVzdW1lRGF0YUxpbmsucXVlcnlQYXJhbXMsXG4gICAgICAgIGJhdGNoSWQ6IHRoaXMuZ2V0QmF0Y2hJZCgpLFxuICAgICAgICB2aWV3TW9kZTogJ1JFU1VNRScsXG4gICAgICAgIC8vIGNvdXJzZU5hbWU6IHRoaXMuY29udGVudCA/IHRoaXMuY29udGVudC5uYW1lIDogJycsXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb250ZXh0SWQgJiYgdGhpcy5jb250ZXh0UGF0aCkge1xuICAgICAgICBxUGFyYW1zID0ge1xuICAgICAgICAgIC4uLnFQYXJhbXMsXG4gICAgICAgICAgY29sbGVjdGlvbklkOiB0aGlzLmNvbnRleHRJZCxcbiAgICAgICAgICBjb2xsZWN0aW9uVHlwZTogdGhpcy5jb250ZXh0UGF0aCxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZm9yUHJldmlldykge1xuICAgICAgICBkZWxldGUgcVBhcmFtcy52aWV3TW9kZVxuICAgICAgfVxuICAgICAgcVBhcmFtcyA9IHtcbiAgICAgICAgLi4ucVBhcmFtcyxcbiAgICAgICAgY2hhbm5lbElkOiB0aGlzLmNoYW5uZWxJZCxcbiAgICAgIH1cbiAgICAgIHJldHVybiBxUGFyYW1zXG4gICAgfVxuICAgIGlmICh0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYmF0Y2hJZDogdGhpcy5nZXRCYXRjaElkKCksXG4gICAgICB2aWV3TW9kZTogdHlwZSxcbiAgICB9XG4gIH1cblxuICByb3V0ZVRvUHJlQXNzZXNzZW50KCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YSkge1xuICAgICAgLy8gdGhpcy5nZW5lcmF0ZVByZUFzc2Vzc21lbnRRdWVyeSgnU1RBUlQnKVxuICAgICAgbGV0IGZpcnN0UmVzb3VyY2UgPSB0aGlzLmNvbnRlbnRSZWFkRGF0YS5wcmVFbnJvbG1lbnRSZXNvdXJjZXNbMF1cbiAgICAgIGxldCBtaW1lVHlwZSA9IGZpcnN0UmVzb3VyY2U/LmNvdXJzZUNhdGVnb3J5ID09PSAnUHJlIEVucm9sbWVudCBBc3Nlc3NtZW50JyA/ICdhcHBsaWNhdGlvbi92bmQuc3VuYmlyZC5xdWVzdGlvbnNldCcgOiBmaXJzdFJlc291cmNlLm1pbWVUeXBlXG4gICAgICB0aGlzLmZpcnN0UmVzb3VyY2VMaW5rID0gdmlld2VyUm91dGVHZW5lcmF0b3IoXG4gICAgICAgIGZpcnN0UmVzb3VyY2UuaWRlbnRpZmllcixcbiAgICAgICAgbWltZVR5cGUsXG4gICAgICAgIHRoaXMuY29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyLFxuICAgICAgICB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnksXG4gICAgICAgIHRoaXMuZm9yUHJldmlldyxcbiAgICAgICAgdGhpcy5jb250ZW50UmVhZERhdGEgJiYgdGhpcy5jb250ZW50UmVhZERhdGEucHJlRW5yb2xtZW50UmVzb3VyY2VzWzBdPy5wcmltYXJ5Q2F0ZWdvcnkgfHwgJycsXG4gICAgICAgICcnLFxuICAgICAgKVxuICAgICAgbGV0IHJvdXRlckxpbmsgPSB0aGlzLmZpcnN0UmVzb3VyY2VMaW5rPy51cmxcbiAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHRoaXMuZ2VuZXJhdGVQcmVBc3Nlc3NtZW50UXVlcnkoJ1NUQVJUJylcbiAgICAgIHF1ZXJ5UGFyYW1zID0geyAuLi5xdWVyeVBhcmFtcywgcHJlQXNzZXNzbWVudDogJ3RydWUnIH1cbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHtyb3V0ZXJMaW5rfWBdLCB7IHF1ZXJ5UGFyYW1zIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0UHJlQXNzZXNzbWVudFJlcXVpcmVkKCkge1xuICAgIHRoaXMucHJlQXNzZXNzbWVudFJlcXVpcmVkRmxhZyA9IGZhbHNlXG4gICAgaWYgKHRoaXMuY29udGVudFJlYWREYXRhPy5wcmVFbnJvbG1lbnRSZXNvdXJjZXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb250ZW50UmVhZERhdGE/LnByZUVucm9sbWVudFJlc291cmNlcz8uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW0/LmlzTWFuZGF0b3J5KSB7XG4gICAgICAgICAgdGhpcy5wcmVBc3Nlc3NtZW50UmVxdWlyZWRGbGFnID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGdldFByZUFzc2Vzc21lbnRDb21wbGV0aW9uU3RhdHVzKCkge1xuICAgIHRoaXMucHJlQXNzZXNzbWVudENvbXBsZXRpb25TdGF0dXMgPSBmYWxzZVxuICAgIGxldCBwcmVFbnJvbGxtZW50UmVzb3VyY2VzQXJyOiBhbnkgPSBbXVxuICAgIGxldCBwcmVFbnJvbGxtZW50TWFuZGF0b3J5UmVzb3VyY2VzQXJyOiBhbnkgPSBbXVxuICAgIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YT8ucHJlRW5yb2xtZW50UmVzb3VyY2VzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29udGVudFJlYWREYXRhPy5wcmVFbnJvbG1lbnRSZXNvdXJjZXM/LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBwcmVFbnJvbGxtZW50UmVzb3VyY2VzQXJyLnB1c2goaXRlbT8uaWRlbnRpZmllcilcbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbT8uaXNNYW5kYXRvcnkpIHtcbiAgICAgICAgICBwcmVFbnJvbGxtZW50TWFuZGF0b3J5UmVzb3VyY2VzQXJyLnB1c2goaXRlbT8uaWRlbnRpZmllcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKHByZUVucm9sbG1lbnRSZXNvdXJjZXNBcnIgJiYgcHJlRW5yb2xsbWVudFJlc291cmNlc0Fyci5sZW5ndGgpIHtcbiAgICAgIGxldCByZXEgPSB7XG4gICAgICAgIFwicmVxdWVzdFwiOiB7XG4gICAgICAgICAgXCJjb250ZW50SWRzXCI6IHByZUVucm9sbG1lbnRSZXNvdXJjZXNBcnIsXG4gICAgICAgICAgXCJmaWVsZHNcIjogW1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50b2NTdmMucmVhZFByZUVucm9sbG1lbnRSZXNvdXJjZXNTdGF0ZShyZXEpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGxldCBtYW5kYXRvcnlJZHNDb21wbGV0ZWQgPSBbXVxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnJlc3VsdCAmJiBkYXRhLnJlc3VsdC5jb250ZW50TGlzdCAmJiBkYXRhLnJlc3VsdC5jb250ZW50TGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEucmVzdWx0LmNvbnRlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQuY29udGVudExpc3RbaV1bJ3N0YXR1cyddID09PSAyICYmIHByZUVucm9sbG1lbnRNYW5kYXRvcnlSZXNvdXJjZXNBcnIuaW5jbHVkZXMoZGF0YS5yZXN1bHQuY29udGVudExpc3RbaV1bJ2NvbnRlbnRJZCddKSkge1xuICAgICAgICAgICAgICBtYW5kYXRvcnlJZHNDb21wbGV0ZWQucHVzaChkYXRhLnJlc3VsdC5jb250ZW50TGlzdFtpXVsnY29udGVudElkJ10pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmVFbnJvbGxtZW50UmVzb3VyY2VzQXJyPy5sZW5ndGggPT09IGRhdGEucmVzdWx0LmNvbnRlbnRMaXN0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucHJlQXNzZXNzbWVudENvbXBsZXRpb25TdGF0dXMgPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIGlmIChtYW5kYXRvcnlJZHNDb21wbGV0ZWQubGVuZ3RoID09PSBwcmVFbnJvbGxtZW50TWFuZGF0b3J5UmVzb3VyY2VzQXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wcmVBc3Nlc3NtZW50Q29tcGxldGlvblN0YXR1cyA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcmVBc3Nlc3NtZW50Q29tcGxldGlvblN0YXR1cyA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJlQXNzZXNzbWVudENvbXBsZXRpb25TdGF0dXMgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGF0YVRyYW5zZmVyU3ZjLnNldEVucm9sbERhdGEobnVsbClcbiAgICB0aGlzLmdldFNlcnZlckRhdGVUaW1lKClcbiAgICB0aGlzLm1vYmlsZTEyMDAgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDEyMDFcbiAgICB0aGlzLmdldEkxOE5UcmFuc2xhdGlvbnMoKVxuICAgIHRoaXMubG9hZExlYXJuZXJBZHZpc29yeURhdGEoKVxuICAgIHRoaXMuc2V0dXBTZWxlY3RlZEJhdGNoU3Vic2NyaXB0aW9uKClcbiAgICB0aGlzLnNldENoYW5uZWxJZCgpXG4gICAgdGhpcy5jaGVja0lmcmFtZUNvbnRleHQoKVxuICAgIHRoaXMucXVlcnlQYXJhbXNEYXRhID0gdGhpcy5zZXR1cFJvdXRlU3Vic2NyaXB0aW9ucygpXG4gICAgdGhpcy5zZXR1cEZyYWdtZW50U3Vic2NyaXB0aW9uKClcbiAgICB0aGlzLnNldHVwQmF0Y2hTdWJzY3JpcHRpb25zKClcbiAgICB0aGlzLmNvbmZpZ3VyZURlZmF1bHRMb2dvKClcbiAgICB0aGlzLmNvbmZpZ3VyZUZlYXR1cmVGbGFncygpXG4gICAgdGhpcy5jaGVja1JlZ2lzdHJhdGlvblN0YXR1cygpXG4gICAgdGhpcy5zZXR1cFJvdXRlckV2ZW50U3Vic2NyaXB0aW9uKClcbiAgICB0aGlzLmdldENvbnRlbnRDcmVhdG9yRGF0YSgpXG4gICAgdGhpcy5zZXR1cEhhc2htYXBVcGRhdGVTdWJzY3JpcHRpb24oKVxuXG4gICAgdGhpcy51c2VySWQgPSB0aGlzLmNvbmZpZ1N2Yz8udXNlclByb2ZpbGU/LnVzZXJJZCB8fCAnJ1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RGF0YShkYXRhOiBEYXRhKSB7XG4gICAgY29uc3QgaW5pdERhdGE6IGFueSA9IHRoaXMudG9jU3ZjLmluaXREYXRhKGRhdGEsIHRydWUpXG4gICAgdGhpcy5zZXRFcnJvckNvZGUoaW5pdERhdGEuZXJyb3JDb2RlKVxuICAgIHRoaXMuc2V0dXBCYXRjaENvbnRyb2xTdWJzY3JpcHRpb24oKVxuICAgIHRoaXMudG9jU3ZjLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgfVxuXG4gIHByaXZhdGUgc2V0RXJyb3JDb2RlKGVycm9yQ29kZTogTnNBcHBUb2MuRVdzVG9jRXJyb3JDb2RlKSB7XG4gICAgdGhpcy5lcnJvckNvZGUgPSBlcnJvckNvZGVcbiAgICBzd2l0Y2ggKHRoaXMuZXJyb3JDb2RlKSB7XG4gICAgICBjYXNlIE5zQXBwVG9jLkVXc1RvY0Vycm9yQ29kZS5BUElfRkFJTFVSRTpcbiAgICAgIGNhc2UgTnNBcHBUb2MuRVdzVG9jRXJyb3JDb2RlLklOVkFMSURfREFUQTpcbiAgICAgIGNhc2UgTnNBcHBUb2MuRVdzVG9jRXJyb3JDb2RlLk5PX0RBVEE6XG4gICAgICAgIHRoaXMuZXJyb3JXaWRnZXREYXRhLndpZGdldERhdGEuZXJyb3JUeXBlID0gRXJyb3JUeXBlLmludGVybmFsU2VydmVyXG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmVycm9yV2lkZ2V0RGF0YS53aWRnZXREYXRhLmVycm9yVHlwZSA9IEVycm9yVHlwZS5zb21ldGhpbmdXcm9uZ1xuICAgICAgICBicmVha1xuICAgIH1cbiAgfVxuXG5cblxuICBwcml2YXRlIGluaXRpYWxpemVUb2NTdHJ1Y3R1cmUoKSB7XG4gICAgdGhpcy5jb250ZW50UGFyZW50cyA9IHt9XG4gICAgdGhpcy50b2NTdHJ1Y3R1cmUgPSB7XG4gICAgICBhc3Nlc3NtZW50OiAwLFxuICAgICAgY291cnNlOiAwLFxuICAgICAgaGFuZHNPbjogMCxcbiAgICAgIGludGVyYWN0aXZlVmlkZW86IDAsXG4gICAgICBsZWFybmluZ01vZHVsZTogMCxcbiAgICAgIG90aGVyOiAwLFxuICAgICAgcGRmOiAwLFxuICAgICAgc3VydmV5OiAwLFxuICAgICAgcG9kY2FzdDogMCxcbiAgICAgIHByYWN0aWNlVGVzdDogMCxcbiAgICAgIGZpbmFsVGVzdDogMCxcbiAgICAgIHF1aXo6IDAsXG4gICAgICB2aWRlbzogMCxcbiAgICAgIHdlYk1vZHVsZTogMCxcbiAgICAgIHdlYlBhZ2U6IDAsXG4gICAgICB5b3V0dWJlOiAwLFxuICAgICAgaW50ZXJhY3RpdmVjb250ZW50OiAwLFxuICAgICAgb2ZmbGluZVNlc3Npb246IDAsXG4gICAgICBwcmVFbnJvbGxtZW50QXNzZXNzbWVudDogMCxcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwQmF0Y2hDb250cm9sU3Vic2NyaXB0aW9uKCkge1xuICAgIHRoaXMuYmF0Y2hDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGJhdGNoOiBOc0NvbnRlbnQuSUJhdGNoKSA9PiB7XG4gICAgICBpZiAoYmF0Y2gpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVCYXRjaEVucm9sbG1lbnQoYmF0Y2gpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQmF0Y2hFbnJvbGxtZW50KGJhdGNoOiBOc0NvbnRlbnQuSUJhdGNoKSB7XG4gICAgdGhpcy5kaXNhYmxlRW5yb2xsQnRuID0gdHJ1ZVxuICAgIGxldCB1c2VySWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZT8udXNlcklkIHx8ICcnXG5cbiAgICBjb25zdCByZXEgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIHVzZXJJZCxcbiAgICAgICAgY291cnNlSWQ6IGJhdGNoLmNvdXJzZUlkLFxuICAgICAgICBiYXRjaElkOiBiYXRjaC5iYXRjaElkLFxuICAgICAgfSxcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRlbnRTdmMuZW5yb2xsVXNlclRvQmF0Y2gocmVxKS50aGVuKChkYXRhYjogYW55KSA9PiB7XG4gICAgICBpZiAoZGF0YWI/LnJlc3VsdD8ucmVzcG9uc2UgPT09ICdTVUNDRVNTJykge1xuICAgICAgICB0aGlzLmhhbmRsZVN1Y2Nlc3NmdWxFbnJvbGxtZW50KGJhdGNoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oYW5kbGVFbnJvbGxtZW50RmFpbHVyZSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3VjY2Vzc2Z1bEVucm9sbG1lbnQoYmF0Y2g6IE5zQ29udGVudC5JQmF0Y2gpIHtcbiAgICB0aGlzLmJhdGNoRGF0YSA9IHtcbiAgICAgIGNvbnRlbnQ6IFtiYXRjaF0sXG4gICAgICBlbnJvbGxlZDogdHJ1ZSxcbiAgICB9XG4gICAgdGhpcy50b2NTdmMuZ2V0U2VsZWN0ZWRCYXRjaERhdGEodGhpcy5iYXRjaERhdGEpXG4gICAgdGhpcy50b2NTdmMubWFwU2Vzc2lvbkNvbXBsZXRpb25QZXJjZW50YWdlKHRoaXMuYmF0Y2hEYXRhKVxuXG4gICAgLy8gQ1JJVElDQUw6IEZvciBMZWFybmluZyBQYXRod2F5cywgY29tcHV0ZSBtaWxlc3RvbmUgbG9ja2luZyBzdGF0dXMgYWZ0ZXIgZW5yb2xsbWVudFxuICAgIC8vIFRoaXMgZW5zdXJlcyBtaWxlc3RvbmVzIGFyZSBwcm9wZXJseSBsb2NrZWQgdW50aWwgcHJlLWFzc2Vzc21lbnQgaXMgY29tcGxldGVkXG4gICAgaWYgKHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnkgPT09ICdMZWFybmluZyBQYXRod2F5Jykge1xuICAgICAgdGhpcy50b2NTdmMuY2FsbEhpcmFyY2h5UHJvZ3Jlc3NIYXNobWFwKHRoaXMuY29udGVudClcbiAgICAgIHRoaXMudG9jU3ZjLmNvbXB1dGVNaWxlc3RvbmVMb2NraW5nU3RhdHVzKHRydWUpXG4gICAgICB0aGlzLnN5bmNNaWxlc3RvbmVMb2NrU3RhdHVzKClcbiAgICB9XG5cbiAgICB0aGlzLnJvdXRlckNoYW5nZUhhbmRsZXIodHJ1ZSlcbiAgICB0aGlzLm9wZW5TbmFja2JhcignRW5yb2xsZWQgU3VjY2Vzc2Z1bGx5IScpXG4gICAgdGhpcy5kaXNhYmxlRW5yb2xsQnRuID0gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRW5yb2xsbWVudEZhaWx1cmUoKSB7XG4gICAgdGhpcy5vcGVuU25hY2tiYXIoJ1NvbWV0aGluZyB3ZW50IHdyb25nLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgdGhpcy5kaXNhYmxlRW5yb2xsQnRuID0gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgbG9hZExlYXJuZXJBZHZpc29yeURhdGEoKSB7XG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5wYWdlRGF0YSAmJiB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEucGFnZURhdGEuZGF0YSkge1xuICAgICAgdGhpcy5sZWFybkFkdmlzb3J5RGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5wYWdlRGF0YS5kYXRhLmxlYXJuZXJBZHZpc29yeVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBTZWxlY3RlZEJhdGNoU3Vic2NyaXB0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRCYXRjaFN1YnNjcmlwdGlvbiA9IHRoaXMudG9jU3ZjLmdldFNlbGVjdGVkQmF0Y2guc3Vic2NyaWJlKGJhdGNoRGF0YSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkQmF0Y2hEYXRhID0gYmF0Y2hEYXRhXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hhbm5lbElkKCkge1xuICAgIHRoaXMuY2hhbm5lbElkID0gdGhpcy50ZWxlbWV0cnlTZXJ2aWNlLnRlbGVtZXRyeUNvbmZpZ1xuICAgICAgPyB0aGlzLnRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5Q29uZmlnLmNoYW5uZWxcbiAgICAgIDogJydcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZnJhbWVDb250ZXh0KCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmlzSW5JZnJhbWUgPSB3aW5kb3cuc2VsZiAhPT0gd2luZG93LnRvcFxuICAgIH0gY2F0Y2ggKF9leCkge1xuICAgICAgdGhpcy5pc0luSWZyYW1lID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwUm91dGVTdWJzY3JpcHRpb25zKCkge1xuICAgIGxldCBxdWVyeVBhcmFtc3RlbXA6IGFueSA9IHt9XG4gICAgaWYgKHRoaXMucm91dGUpIHtcbiAgICAgIHRoaXMuc2tlbGV0b25Mb2FkZXIgPSB0cnVlXG4gICAgICB0aGlzLnJvdXRlU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZShhc3luYyAoZGF0YTogRGF0YSkgPT4ge1xuICAgICAgICBpZiAoZGF0YT8uY29udGVudD8uZGF0YT8uaWRlbnRpZmllcikge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zdGVtcCA9IGF3YWl0IHRoaXMucHJvY2Vzc1JvdXRlRGF0YShkYXRhKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHRlbXBEYXRhID0ge1xuICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICBkYXRhOiB0aGlzLmlucHV0Q29udGVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBxdWVyeVBhcmFtc3RlbXAgPSBhd2FpdCB0aGlzLnByb2Nlc3NSb3V0ZURhdGEodGVtcERhdGEpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBxdWVyeVBhcmFtc3RlbXBcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1JvdXRlRGF0YShkYXRhOiBEYXRhKSB7XG4gICAgdGhpcy5jb3Vyc2VJRCA9IGRhdGE/LmNvbnRlbnQ/LmRhdGE/LnN0YXR1cyA9PT0gJ1JldGlyZWQnID8gJycgOiBkYXRhLmNvbnRlbnQuZGF0YT8uaWRlbnRpZmllclxuICAgIGNvbnN0IGluaXREYXRhID0gdGhpcy50b2NTdmMuaW5pdERhdGEoZGF0YSwgdHJ1ZSlcbiAgICAvLyBHZXQgcXVlcnkgcGFyYW1ldGVyc1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zRGF0YVRlbXAgPSBhd2FpdCB0aGlzLmdldFF1ZXJ5UGFyYW1zKClcbiAgICAvLyBIYW5kbGUgbXVsdGlsaW5ndWFsIGNvbnRlbnQgaWYgbWxJZCBpcyBwcmVzZW50IGluIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICBpZiAocXVlcnlQYXJhbXNEYXRhVGVtcC5NTElkKSB7XG4gICAgICAvLyBTdG9yZSB0aGUgb3JpZ2luYWwgY29udGVudCBkYXRhIGZvciByZWZlcmVuY2VcbiAgICAgIHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSA9IGluaXREYXRhLmNvbnRlbnRcblxuICAgICAgLy8gRmV0Y2ggdGhlIG11bHRpbGluZ3VhbCBjb250ZW50XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGhpcy5iYXNlQ29udGVudFJlYWREYXRhLmlkZW50aWZpZXIgPT09IHF1ZXJ5UGFyYW1zRGF0YVRlbXAuTUxJZCkge1xuICAgICAgICAgIHRoaXMuY29udGVudFJlYWREYXRhID0gaW5pdERhdGEuY29udGVudFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmZldGNoQ29udGVudFJlYWQocXVlcnlQYXJhbXNEYXRhVGVtcC5NTElkKVxuICAgICAgICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICAgICAgLy8gSWYgbXVsdGlsaW5ndWFsIGNvbnRlbnQgZmV0Y2ggZmFpbHMsIGZhbGwgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGVudFxuICAgICAgICAgICAgdGhpcy5jb250ZW50UmVhZERhdGEgPSBpbml0RGF0YS5jb250ZW50XG4gICAgICAgICAgICB0aGlzLmxvZ2dlclN2Yy53YXJuKCdGYWlsZWQgdG8gbG9hZCBtdWx0aWxpbmd1YWwgY29udGVudCwgdXNpbmcgb3JpZ2luYWwgY29udGVudCBpbnN0ZWFkJylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE9uIGVycm9yLCB1c2UgdGhlIG9yaWdpbmFsIGNvbnRlbnRcbiAgICAgICAgdGhpcy5jb250ZW50UmVhZERhdGEgPSBpbml0RGF0YS5jb250ZW50XG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdFcnJvciBsb2FkaW5nIG11bHRpbGluZ3VhbCBjb250ZW50OicsIGVycm9yKVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0ZhaWxlZCB0byBsb2FkIGNvbnRlbnQgaW4gc2VsZWN0ZWQgbGFuZ3VhZ2UnLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gbXVsdGlsaW5ndWFsIGNvbnRlbnQgcmVxdWVzdGVkLCB1c2UgdGhlIG9yaWdpbmFsIGNvbnRlbnRcbiAgICAgIHRoaXMuY29udGVudFJlYWREYXRhID0gaW5pdERhdGEuY29udGVudFxuICAgICAgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhID0gaW5pdERhdGEuY29udGVudFxuICAgIH1cbiAgICAvLyBBZGRlZCB0byBtYWtlIHN1cmUgdGhpcyByZWZlcmVuY2Ugd2FzIGluY29ycmVjdCwgYXNzaWduaW5nIGFnYWluIHRvIG1ha2Ugc3VyZSBnbG9iYWwgdmFyaWFibGUgaXMgcHJvcGVybHkgdXBkYXRlZFxuICAgIHRoaXMucXVlcnlQYXJhbXNEYXRhID0gcXVlcnlQYXJhbXNEYXRhVGVtcFxuXG4gICAgLy8gQ29udGludWUgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcHJvY2Vzc2luZ1xuICAgIHRoaXMubG9hZExhbmd1YWdlRGF0YSgpXG4gICAgdGhpcy5nZXRQcmVBc3Nlc3NtZW50Q29tcGxldGlvblN0YXR1cygpXG4gICAgdGhpcy5nZXRQcmVBc3Nlc3NtZW50UmVxdWlyZWQoKVxuXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVDb250ZW50UHJldmlld09yRW5yb2xsbWVudCgpXG5cbiAgICB0aGlzLmluaXRpYWxyb3V0ZURhdGEgPSBkYXRhXG4gICAgdGhpcy5sb2FkQmFubmVyQW5kVG9jQ29uZmlnKGRhdGEpXG4gICAgdGhpcy5mZXRjaFBvc3RBc3Nlc3NtZW50U3RhdHVzSWZOZWVkZWQoKVxuICAgIHRoaXMuaW5pdERhdGEoZGF0YSlcblxuICAgIC8vIHRvIGNsZWFyIHB1YmxpYyBzdXJ2ZXkgZGF0YSBpZiBhbnkgb24gbG9hZCxcbiAgICAvLyBpZiBub3QgY2xlYXJlZCB0aGVuIGl0IHdpbGwgYmUgY2xlYXJlZCBvbiBwb3B1cCBjbG9zZSxcbiAgICAvLyAgYnV0IHRoZSB0ZWFjaGVycyBub3RlcyB3aWxsIGJlIHZpc2libGUgb24gY2ltaW5nIGJhY2sgZnJvbSBwbGF5ZXIgcGFnZVxuICAgIGNvbnN0IHN1cnZleUlkID0gdGhpcy5lbnZpcm9ubWVudC5wdWJsaWNDb250ZW50U3VydmV5SWQgfHwgJydcbiAgICBjb25zdCBjb3Vyc2VJZCA9IHRoaXMuY29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyIHx8ICcnXG4gICAgdGhpcy5jbGVhckV4aXN0aW5nUHVibGljU3VydmV5RGF0YShzdXJ2ZXlJZCwgY291cnNlSWQpXG5cbiAgICByZXR1cm4gcXVlcnlQYXJhbXNEYXRhVGVtcFxuICB9XG5cbiAgb3BlbkNvbXBsZXRpb25TdXJ2ZXlGb3JtUG9wdXAoKSB7XG4gICAgaWYgKHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSAmJiBfLmdldCh0aGlzLmJhc2VDb250ZW50UmVhZERhdGEsICdjb21wbGV0aW9uU3VydmV5TGluaycpKSB7XG4gICAgICBjb25zdCBzSUQgPSB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuY29tcGxldGlvblN1cnZleUxpbmsuc3BsaXQoJ3N1cnZleXMvJylcbiAgICAgIGNvbnN0IHN1cnZleUlkID0gc0lEWzFdXG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBzdXJ2ZXlJZCxcbiAgICAgICAgY291cnNlTmFtZTogdGhpcy5jb250ZW50UmVhZERhdGE/Lm5hbWUgfHwgJycsXG4gICAgICAgIGNvdXJzZUlEOiB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciB8fCAnJyxcbiAgICAgICAgY29udGV4dE9yZ0lkOiB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uY3JlYXRlZEZvciAmJiB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uY3JlYXRlZEZvci5sZW5ndGggPiAwID9cbiAgICAgICAgICB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uY3JlYXRlZEZvclswXSA6ICcnXG4gICAgICB9XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbXBsZXRpb25TdXJ2ZXlGb3JtQ29tcG9uZW50LCB7XG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgd2lkdGg6ICc3NTBweCcsXG4gICAgICAgIG1heFdpZHRoOiAnOTB2dycsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICB9KVxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHRoaXMub3BlbkNvbmZpcm1hdGlvbkRpYWxvZygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2NrQ2VydGlmaWNhdGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgb3BlbkNvbmZpcm1hdGlvbkRpYWxvZygpIHtcbiAgICBjb25zdCBkaWFsb2dEYXRhID0ge1xuICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2FwcHRvYy5zdXJ2ZXlTdWJtaXR0ZWQnKSxcbiAgICAgICAgICBjbGFzc2VzOiAnZGlhbG9nLXRpdGxlJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYXBwdG9jLnN1cnZleUNvbXBsZXRlZENlcnRpZmljYXRlR2VuZXJhdGluZycpLFxuICAgICAgICAgIGNsYXNzZXM6ICdkaWFsb2ctZGVzY3JpcHRpb24gbWItMidcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGljb25OYW1lOiAnY2hlY2tfY2lyY2xlJyxcbiAgICAgIHR5cGU6ICdwcmltYXJ5JyxcbiAgICAgIGJ1dHRvbnNQb3NpdGlvbkNsYXNzOiAnanVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyJyxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzZXM6ICdzdWNjZXMtYnV0dG9uIHdpZHRoLWZ1bGwnLFxuICAgICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2FwcHRvYy5yZXR1cm5Ub1Byb2dyYW1QYWdlJyksXG4gICAgICAgICAgcmVzcG9uc2U6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgbWF4V2lkdGg6ICc5MHZ3J1xuICAgIH0pXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5sb2NrQ2VydGlmaWNhdGUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGxvYWRMYW5ndWFnZURhdGEoKSB7XG4gICAgdGhpcy5sYW5ndWFnZUxpc3QgPSB0aGlzLmNvbnRlbnRMYW5nU3ZjLmdldEFsbENvbnRlbnRMYW5ndWFnZXModGhpcy5jb250ZW50UmVhZERhdGEpXG4gICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0gdGhpcy5jb250ZW50TGFuZ1N2Yy5nZXRTZWxlY3RlZExhbmd1YWdlKHRoaXMuY29udGVudFJlYWREYXRhKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVDb250ZW50UHJldmlld09yRW5yb2xsbWVudCgpIHtcbiAgICBpZiAodGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRDb250ZW50Rm9yUHJldmlldygpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC8vIElmIHdlJ3JlIHdvcmtpbmcgd2l0aCBtdWx0aWxpbmd1YWwgY29udGVudCwgbWFrZSBzdXJlIHRvIGZldGNoIGl0cyBoaWVyYXJjaHlcbiAgICAgIC8vIGlmICh0aGlzLnF1ZXJ5UGFyYW1zRGF0YS5tbElkICYmIHRoaXMuY29udGVudFJlYWREYXRhICYmXG4gICAgICAvLyAgICAgdGhpcy5jb250ZW50UmVhZERhdGEuaWRlbnRpZmllciA9PT0gdGhpcy5xdWVyeVBhcmFtc0RhdGEubWxJZCkge1xuICAgICAgLy8gICAvLyBGZXRjaCBjb250ZW50IGhpZXJhcmNoeSBmb3IgdGhlIG11bHRpbGluZ3VhbCBjb250ZW50XG4gICAgICAvLyAgIHRyeSB7XG4gICAgICAvLyAgICAgYXdhaXQgdGhpcy5mZXRjaENvbnRlbnRIaWVyYXJjaHkodGhpcy5jb250ZW50UmVhZERhdGEuaWRlbnRpZmllcik7XG4gICAgICAvLyAgICAgLy8gQWZ0ZXIgZmV0Y2hpbmcgaGllcmFyY2h5LCB1cGRhdGUgVUkgY29tcG9uZW50c1xuICAgICAgLy8gICAgIHRoaXMuZ2V0TGVhcm5pbmdVcmxzKCk7XG4gICAgICAvLyAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGhpZXJhcmNoeSBmb3IgbXVsdGlsaW5ndWFsIGNvbnRlbnQ6JywgZXJyb3IpO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG5cbiAgICAgIC8vIENvbnRpbnVlIHdpdGggcmVndWxhciBlbnJvbGxtZW50IGZsb3dcbiAgICAgIHRoaXMuZmV0Y2hVc2VyRW5yb2xsbWVudERhdGFWMigpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkQ29udGVudEZvclByZXZpZXcoKSB7XG4gICAgdGhpcy50b2NTdmMuY29udGVudExvYWRlci5uZXh0KHRydWUpXG4gICAgYXdhaXQgdGhpcy5mZXRjaENvbnRlbnRIaWVyYXJjaHkodGhpcy5jb250ZW50UmVhZERhdGE/LmlkZW50aWZpZXIgfHwgJycpXG4gICAgdGhpcy50b2NTdmMuY29udGVudExvYWRlci5uZXh0KGZhbHNlKVxuICAgIHRoaXMudG9jU3ZjLmNoZWNrTW9kdWxlV2lzZURhdGEodGhpcy5jb250ZW50KVxuICAgIHRoaXMuc2tlbGV0b25Mb2FkZXIgPSBmYWxzZVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQmFubmVyQW5kVG9jQ29uZmlnKGRhdGE6IERhdGEpIHtcbiAgICB0aGlzLmJhbm5lcnMgPSBkYXRhPy5wYWdlRGF0YT8uZGF0YT8uYmFubmVycyB8fCBbXVxuICAgIHRoaXMudG9jU3ZjLnN1YnRpdGxlT25CYW5uZXJzID0gZGF0YT8ucGFnZURhdGE/LmRhdGE/LnN1YnRpdGxlT25CYW5uZXJzIHx8IGZhbHNlXG4gICAgdGhpcy50b2NTdmMuc2hvd0Rlc2NyaXB0aW9uID0gZGF0YT8ucGFnZURhdGE/LmRhdGE/LnNob3dEZXNjcmlwdGlvbiB8fCBmYWxzZVxuICAgIHRoaXMudG9jQ29uZmlnID0gZGF0YT8ucGFnZURhdGE/LmRhdGEgfHwge31cbiAgICBpZiAodGhpcy5jb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LkxFQVJOSU5HX1BBVEhXQVkpIHtcbiAgICAgIHRoaXMua3BhcnJheSA9IHRoaXMudG9jQ29uZmlnLmthcm1hUG9pbnRzTFAgfHwgW1xuICAgICAgICB7XG4gICAgICAgICAgXCJkaXNwbGF5QnV0dG9uXCI6IFwiUmVzdW1lXCIsXG4gICAgICAgICAgXCJ0ZXh0QmVmb3JlSWNvblwiOiBcImVhcm5cIixcbiAgICAgICAgICBcInBvaW50c1wiOiBcIjI1XCIsXG4gICAgICAgICAgXCJ0ZXh0QWZ0ZXJQb2ludHNcIjogXCJrYXJtYVBvaW50c1wiLFxuICAgICAgICAgIFwidGV4dEFmdGVySWNvblwiOiBcImJ5Q29tcGxldGluZ0xQXCIsXG4gICAgICAgICAgXCJ0b29sVGlwVGV4dFwiOiBcImxwQ29tcGxldGVUaXBcIlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua3BhcnJheSA9IHRoaXMudG9jQ29uZmlnLmthcm1hUG9pbnRzIHx8IFtdXG5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZldGNoUG9zdEFzc2Vzc21lbnRTdGF0dXNJZk5lZWRlZCgpIHtcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuaXNQb3N0QXNzZXNzbWVudCkge1xuICAgICAgdGhpcy50b2NTdmMuZmV0Y2hQb3N0QXNzZXNzbWVudFN0YXR1cyh0aGlzLmNvbnRlbnQuaWRlbnRpZmllcikuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIGNvbnN0IGFzc2Vzc21lbnREYXRhID0gcmVzLnJlc3VsdFxuICAgICAgICBmb3IgKGNvbnN0IG8gb2YgYXNzZXNzbWVudERhdGEpIHtcbiAgICAgICAgICBpZiAoby5jb250ZW50SWQgPT09ICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmlkZW50aWZpZXIpKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dUYWtlQXNzZXNzbWVudCA9IG9cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBGcmFnbWVudFN1YnNjcmlwdGlvbigpIHtcbiAgICB0aGlzLmN1cnJlbnRGcmFnbWVudCA9ICdvdmVydmlldydcbiAgICB0aGlzLnJvdXRlLmZyYWdtZW50LnN1YnNjcmliZSgoZnJhZ21lbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50RnJhZ21lbnQgPSBmcmFnbWVudCB8fCAnb3ZlcnZpZXcnXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBCYXRjaFN1YnNjcmlwdGlvbnMoKSB7XG4gICAgdGhpcy5iYXRjaFN1YnNjcmlwdGlvbiA9IHRoaXMudG9jU3ZjLmJhdGNoUmVwbGF5U3ViamVjdC5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB0aGlzLmhhbmRsZUJhdGNoVXBkYXRlKCksXG4gICAgICAoKSA9PiB0aGlzLmxvZ2dlclN2Yy5lcnJvcignZXJyb3Igb24gYmF0Y2hTdWJzY3JpcHRpb24nKVxuICAgIClcblxuICAgIHRoaXMuYmF0Y2hEYXRhU3Vic2NyaXB0aW9uID0gdGhpcy50b2NTdmMuc2V0QmF0Y2hEYXRhU3ViamVjdC5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB0aGlzLmhhbmRsZUJsZW5kZWRQcm9ncmFtVXBkYXRlKCksXG4gICAgICAoKSA9PiB0aGlzLmxvZ2dlclN2Yy5lcnJvcignZXJyb3Igb24gYmF0Y2hEYXRhU3Vic2NyaXB0aW9uJylcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUJhdGNoVXBkYXRlKCkge1xuICAgIHRoaXMuZmV0Y2hCYXRjaERldGFpbHMoKVxuICAgIGlmICh0aGlzLmNvbnRlbnQ/LnByaW1hcnlDYXRlZ29yeSA9PT0gdGhpcy5wcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNKSB7XG4gICAgICB0aGlzLmZldGNoVXNlcldGRm9yQmxlbmRlZCgpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVCbGVuZGVkUHJvZ3JhbVVwZGF0ZSgpIHtcbiAgICBpZiAodGhpcy5jb250ZW50Py5wcmltYXJ5Q2F0ZWdvcnkgPT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSkge1xuICAgICAgdGhpcy5mZXRjaFVzZXJXRkZvckJsZW5kZWQoKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uZmlndXJlRGVmYXVsdExvZ28oKSB7XG4gICAgY29uc3QgaW5zdGFuY2VDb25maWcgPSB0aGlzLmNvbmZpZ1N2Yy5pbnN0YW5jZUNvbmZpZ1xuICAgIGlmIChpbnN0YW5jZUNvbmZpZz8ubG9nb3M/LmRlZmF1bHRTb3VyY2VMb2dvKSB7XG4gICAgICB0aGlzLmRlZmF1bHRTTG9nbyA9IGluc3RhbmNlQ29uZmlnLmxvZ29zLmRlZmF1bHRTb3VyY2VMb2dvXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25maWd1cmVGZWF0dXJlRmxhZ3MoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjLnJlc3RyaWN0ZWRGZWF0dXJlcykge1xuICAgICAgdGhpcy5pc0dvYWxzRW5hYmxlZCA9ICF0aGlzLmNvbmZpZ1N2Yy5yZXN0cmljdGVkRmVhdHVyZXMuaGFzKCdnb2FscycpXG4gICAgICB0aGlzLmlzUmVnaXN0cmF0aW9uU3VwcG9ydGVkID0gdGhpcy5jb25maWdTdmMucmVzdHJpY3RlZEZlYXR1cmVzLmhhcygncmVnaXN0cmF0aW9uRXh0ZXJuYWwnKVxuICAgICAgdGhpcy5zaG93SW50cmFuZXRNZXNzYWdlID0gIXRoaXMuY29uZmlnU3ZjLnJlc3RyaWN0ZWRGZWF0dXJlcy5oYXMoJ3Nob3dJbnRyYW5ldE1lc3NhZ2VEZXNrdG9wJylcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwUm91dGVyRXZlbnRTdWJzY3JpcHRpb24oKSB7XG4gICAgdGhpcy5yb3V0ZXJQYXJhbVN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKHJvdXRlckV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgaWYgKHJvdXRlckV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICB0aGlzLmFzc2lnblBhdGhBbmRVcGRhdGVCYW5uZXIocm91dGVyRXZlbnQudXJsKVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uIHRoZSBUT0Mvb3ZlcnZpZXcgcGFnZSBmb3IgYSBMZWFybmluZyBQYXRod2F5XG4gICAgICAgIGNvbnN0IGlzVG9jUGFnZSA9IHJvdXRlckV2ZW50LnVybC5pbmNsdWRlcygnL2FwcC90b2MnKSB8fFxuICAgICAgICAgIHJvdXRlckV2ZW50LnVybC5pbmNsdWRlcygnL292ZXJ2aWV3JykgfHxcbiAgICAgICAgICByb3V0ZXJFdmVudC51cmwuaW5jbHVkZXMoJy9jb250ZW50JylcblxuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG5cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIGhhc2htYXAgdXBkYXRlcyB0byByZWNvbXB1dGUgbWlsZXN0b25lIGxvY2sgc3RhdHVzIGluIHJlYWwtdGltZVxuICAgKiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHByb2dyZXNzIGNoYW5nZXMsIG1pbGVzdG9uZSBsb2NrcyB1cGRhdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBwYWdlIHJlZnJlc2hcbiAgICovXG4gIHByaXZhdGUgc2V0dXBIYXNobWFwVXBkYXRlU3Vic2NyaXB0aW9uKCkge1xuICAgIHRoaXMuaGFzaG1hcFVwZGF0ZWRTdWJzY3JpcHRpb24gPSB0aGlzLnRvY1N2Yy5oYXNobWFwVXBkYXRlZCQuc3Vic2NyaWJlKCh1cGRhdGUpID0+IHtcbiAgICAgIGlmICh1cGRhdGUgJiYgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0xlYXJuaW5nIFBhdGh3YXknKSB7XG4gICAgICAgIGNvbnN0IGlzRW5yb2xsZWQgPSB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdCAmJiB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdC5sZW5ndGggPiAwXG4gICAgICAgIC8vIFN5bmMgY29udGVudCB0cmVlJ3MgaXNMb2NrZWQgd2l0aCB0aGUgdXBkYXRlZCBoYXNobWFwIHZhbHVlc1xuICAgICAgICB0aGlzLnN5bmNNaWxlc3RvbmVMb2NrU3RhdHVzKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cblxuICBmZXRjaFVzZXJFbnJvbGxtZW50RGF0YVYyKCkge1xuXG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciB8fCAnJ1xuICAgIGlmICghaWRlbnRpZmllcikge1xuICAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ0Nhbm5vdCBmZXRjaCBlbnJvbGxtZW50IGRhdGE6IGNvbnRlbnQgaWRlbnRpZmllciBpcyBtaXNzaW5nJylcbiAgICAgIHRoaXMudXNlckVucm9sbG1lbnRMaXN0ID0gW11cbiAgICAgIHRoaXMuY2hlY2tJZlVzZXJFbnJvbGxlZCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgcmVxdWVzdDoge1xuICAgICAgICByZXRpcmVkQ291cnNlc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIGNvdXJzZUlkOiBbaWRlbnRpZmllcl1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmVucm9sbFN2Yy5mZXRjaEVucm9sbENvbnRlbnREYXRhKHJlcXVlc3QpLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpLFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzPy5yZXN1bHQ/LmNvdXJzZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMudXNlckVucm9sbG1lbnRMaXN0ID0gcmVzLnJlc3VsdC5jb3Vyc2VzXG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIGNvbXBsZXRlZCBjb250ZW50XG4gICAgICAgICAgY29uc3QgY29tcGxldGVkQ29udGVudERhdGEgPSB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdC5maW5kKFxuICAgICAgICAgICAgKGVsOiBhbnkpID0+IGVsLmNvbGxlY3Rpb25JZCA9PT0gdGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyICYmXG4gICAgICAgICAgICAgIGVsLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDBcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKGNvbXBsZXRlZENvbnRlbnREYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRWaWV3RXZlbnRGb3JOZXRDb3JlKCdjb21wbGV0ZScpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGF0YVRyYW5zZmVyU3ZjLnNldEVucm9sbERhdGEodGhpcy51c2VyRW5yb2xsbWVudExpc3QpXG4gICAgICAgICAgaWYgKHRoaXMuaXNNdWx0aWxpbmd1YWwpIHtcbiAgICAgICAgICAgIC8vIGluIGNhc2Ugb2YgYmFjayBmcm9tIHBsYXllciB3ZSBuZWVkIHRvIGNoZWNrIHJlY2VudCBsYW5ndWFnZSBhbmQgbG9hZFxuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnRMaWJTdmM/Lm9uZVN0ZXBSZXN1bWVFbmFibGUgJiYgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyID09PSB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllcikge1xuICAgICAgICAgICAgICBsZXQgbGFuZyA9IHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YT8ubGFuZ3VhZ2U/Lmxlbmd0aCA/IHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YT8ubGFuZ3VhZ2VbMF0gOiAnJ1xuICAgICAgICAgICAgICBsZXQgYmFzZUNvbnRlbnRGcm9tRW5yb2xsRGF0YSA9IHRoaXMudXNlckVucm9sbG1lbnRMaXN0LmZpbmQoKGVsOiBhbnkpID0+IGVsLmNvbGxlY3Rpb25JZCA9PT0gdGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyKVxuICAgICAgICAgICAgICBpZiAobGFuZyAmJiBiYXNlQ29udGVudEZyb21FbnJvbGxEYXRhICYmIGJhc2VDb250ZW50RnJvbUVucm9sbERhdGE/LnJlY2VudF9sYW5ndWFnZT8udG9Mb3dlckNhc2UoKSAhPT0gbGFuZykge1xuICAgICAgICAgICAgICAgIGxldCBsb2NhbExhbmcgPSB0aGlzLmNvbnRlbnRMYW5nU3ZjLmdldFJlcXVpcmVkTGFuZ3VhZ2VEZXRhaWxzKHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSwgYmFzZUNvbnRlbnRGcm9tRW5yb2xsRGF0YT8ucmVjZW50X2xhbmd1YWdlKVxuICAgICAgICAgICAgICAgIGlmIChsb2NhbExhbmcgJiYgT2JqZWN0LmtleXMobG9jYWxMYW5nKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0xhbmd1YWdlU2VsZWN0aW9uKHRoaXMuY29udGVudExhbmdTdmMuZ2V0UmVxdWlyZWRMYW5ndWFnZURldGFpbHModGhpcy5iYXNlQ29udGVudFJlYWREYXRhLCBiYXNlQ29udGVudEZyb21FbnJvbGxEYXRhPy5yZWNlbnRfbGFuZ3VhZ2UpKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NMYW5ndWFnZVNlbGVjdGlvbih0aGlzLmNvbnRlbnRMYW5nU3ZjLmdldFNlbGVjdGVkTGFuZ3VhZ2UodGhpcy5jb250ZW50UmVhZERhdGEpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBBbHdheXMgY2FsbCBmZXRjaENvbnRlbnRIaWVyYXJjaHkgZmlyc3RcbiAgICAgICAgICAgICAgcmV0dXJuIGZyb20odGhpcy5mZXRjaENvbnRlbnRIaWVyYXJjaHkodGhpcy5jb250ZW50UmVhZERhdGE/LmlkZW50aWZpZXIgfHwgJycpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBBbHdheXMgY2FsbCBmZXRjaENvbnRlbnRIaWVyYXJjaHkgZmlyc3RcbiAgICAgICAgICAgIHJldHVybiBmcm9tKHRoaXMuZmV0Y2hDb250ZW50SGllcmFyY2h5KHRoaXMuY29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyIHx8ICcnKSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdCA9IFtdXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBjb250ZW50IElEIGZyb20gZWl0aGVyIGNvbnRlbnQgb3IgY29udGVudFJlYWREYXRhXG4gICAgICAgICAgY29uc3QgY29udGVudElkID0gdGhpcy5jb250ZW50UmVhZERhdGE/LmlkZW50aWZpZXIgfHwgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyIHx8ICcnXG4gICAgICAgICAgaWYgKCFjb250ZW50SWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdDYW5ub3QgZmV0Y2ggaGllcmFyY2h5OiBjb250ZW50IGlkZW50aWZpZXIgaXMgbWlzc2luZycpXG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEZldGNoIGhpZXJhcmNoeSBjb250ZW50IGZvciBhZGRpdGlvbmFsIGRhdGFcbiAgICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmZldGNoQ29udGVudEhpZXJhcmNoeShjb250ZW50SWQpKVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIC8vIEFkZCBjYXRjaEVycm9yIGhlcmUgdG8gaGFuZGxlIGVycm9ycyBmcm9tIGZldGNoQ29udGVudEhpZXJhcmNoeVxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdFcnJvciBpbiBlbnJvbGxtZW50IGRhdGEgcHJvY2Vzc2luZycsIGVycm9yKVxuICAgICAgICByZXR1cm4gb2YoZmFsc2UpXG4gICAgICB9KVxuICAgICkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudXNlckVucm9sbG1lbnRMaXN0Py5sZW5ndGggJiYgdGhpcy5jb250ZW50TGliU3ZjPy5vbmVTdGVwUmVzdW1lRW5hYmxlKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVPbmVTdGVwUmVzdW1lKClcbiAgICAgICAgICB0aGlzLmNoZWNrSWZVc2VyRW5yb2xsZWQoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hlY2tJZlVzZXJFbnJvbGxlZCgpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggdXNlciBlbnJvbGxtZW50IGRhdGEnLCBlcnJvcilcbiAgICAgICAgdGhpcy51c2VyRW5yb2xsbWVudExpc3QgPSBbXVxuICAgICAgICB0aGlzLmNoZWNrSWZVc2VyRW5yb2xsZWQoKVxuICAgICAgfSxcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgIC8vIE9wdGlvbmFsIGNvbXBsZXRpb24gaGFuZGxlciBpZiBuZWVkZWRcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVPbmVTdGVwUmVzdW1lKCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMuY29udGVudCkge1xuICAgICAgICB0aGlzLmxvZ2dlclN2Yy5lcnJvcignQ29udGVudCBub3QgYXZhaWxhYmxlIGZvciBvbmUtc3RlcCByZXN1bWUnKVxuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvdW5kQ29udGVudCA9IHRoaXMudXNlckVucm9sbG1lbnRMaXN0LmZpbmQoXG4gICAgICAgIChlbDogYW55KSA9PiBlbC5jb2xsZWN0aW9uSWQgPT09IHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllclxuICAgICAgKVxuXG4gICAgICBpZiAoIWZvdW5kQ29udGVudCkge1xuICAgICAgICB0aGlzLmxvZ2dlclN2Yy53YXJuKCdObyBtYXRjaGluZyBlbnJvbGxlZCBjb250ZW50IGZvdW5kIGZvciBvbmUtc3RlcCByZXN1bWUnKVxuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVybERhdGEgPSBhd2FpdCB0aGlzLmNvbnRlbnRMaWJTdmMuZ2V0UmVzb3Vyc2VMaW5rKFxuICAgICAgICB0aGlzLmNvbnRlbnQsXG4gICAgICAgIFtmb3VuZENvbnRlbnRdLFxuICAgICAgICB0cnVlLFxuICAgICAgICB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEsXG4gICAgICAgIHRoaXMuY29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyIHx8ICcnLFxuICAgICAgKVxuXG4gICAgICBpZiAoIXVybERhdGEpIHtcbiAgICAgICAgdGhpcy5sb2dnZXJTdmMud2FybignTm8gVVJMIGRhdGEgcmV0dXJuZWQgZm9yIG9uZS1zdGVwIHJlc3VtZScpXG5cbiAgICAgIH1cblxuICAgICAgaWYgKHVybERhdGE/LnVybCkge1xuICAgICAgICBpZiAodXJsRGF0YS51cmwuaW5jbHVkZXMoJ2FwcC90b2MnKSkge1xuICAgICAgICAgIHRoaXMuY29udGVudExpYlN2Yy5vbmVTdGVwUmVzdW1lRW5hYmxlID0gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbnRlbnRMaWJTdmMub25lU3RlcFJlc3VtZUVuYWJsZSA9IGZhbHNlXG4gICAgICAgICAgLy8gV2hlbiBjb21pbmcgZnJvbSBzZWFyY2ggcGFnZSBmb3IgcGFydGljdWxhciBsYW5ndWFnZSBjb250ZW50LCBjb25maXJtIGZpcnN0IHRvIG9uZSBzdGVwIHJlc3VtZSBvciBsb2FkIHRoZSBzZWFyY2hlZCBsYW5ndWFnZVxuICAgICAgICAgIGlmICh1cmxEYXRhPy5xdWVyeVBhcmFtcz8uTUwgJiYgKHVybERhdGE/LnF1ZXJ5UGFyYW1zPy5NTCAhPT0gdGhpcy5xdWVyeVBhcmFtc0RhdGFbJ01MJ10pKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dPbmVTdGVwUmVzdW1lQ29uZmlybSh1cmxEYXRhKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcbiAgICAgICAgICAgICAgW3VybERhdGEudXJsXSxcbiAgICAgICAgICAgICAgeyBxdWVyeVBhcmFtczogdXJsRGF0YS5xdWVyeVBhcmFtcyB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdFcnJvciBpbiBoYW5kbGVPbmVTdGVwUmVzdW1lJywgZXJyb3IpXG4gICAgICB0aGlzLmNvbnRlbnRMaWJTdmMub25lU3RlcFJlc3VtZUVuYWJsZSA9IGZhbHNlXG4gICAgfVxuICB9XG4gIHByaXZhdGUgZmV0Y2hDb250ZW50SGllcmFyY2h5KGlkZW50aWZpZXI6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmJhc2VDb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5ID09PSAnTGVhcm5pbmcgUGF0aHdheScpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5iYXNlQ29udGVudFJlYWREYXRhXG5cblxuICAgICAgICAvLyBTVEVQIDE6IENvbnN0cnVjdCBoaWVyYXJjaHkgc3RydWN0dXJlXG4gICAgICAgIGxldCBjb250ZW50SGVpcmFyY2h5RGF0YSA9IHRoaXMuYXBwVG9jVjJTdmMuY29uc3RydWN0SGVpcmFyY2h5RGF0YShjb250ZW50KVxuXG4gICAgICAgIC8vIFNURVAgMjogVXBkYXRlIHByb2dyZXNzIHdpdGggbGF0ZXN0IGVucm9sbG1lbnQgZGF0YVxuICAgICAgICB0aGlzLmFwcFRvY1YyU3ZjLm1hcENvbnRlbnRIaWVyYXJjaHlQcm9ncmVzc1VwZGF0ZShjb250ZW50SGVpcmFyY2h5RGF0YSwgdGhpcy51c2VyRW5yb2xsbWVudExpc3QpXG5cbiAgICAgICAgLy8gU1RFUCAzOiBDcmVhdGUgaGFzaG1hcCBmcm9tIHVwZGF0ZWQgaGllcmFyY2h5ICh0aGlzIHNob3VsZCBwcmVzZXJ2ZSBjb21wbGV0aW9uIHN0YXR1cylcbiAgICAgICAgdGhpcy50b2NTdmMuY2FsbEhpcmFyY2h5UHJvZ3Jlc3NIYXNobWFwKGNvbnRlbnRIZWlyYXJjaHlEYXRhKVxuICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50SGVpcmFyY2h5RGF0YVxuICAgICAgICAvLyBDaGVjayBpZiB1c2VyIGlzIGVucm9sbGVkXG4gICAgICAgIGNvbnN0IGlzRW5yb2xsZWQgPSB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdCAmJiB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdC5sZW5ndGggPiAwXG5cbiAgICAgICAgLy8gU1RFUCA0OiBDb21wdXRlIG1pbGVzdG9uZSBsb2NraW5nIHN0YXR1cyB3aXRoIGVucm9sbG1lbnQgc3RhdHVzIGFuZCB1cGRhdGVkIHByb2dyZXNzIGRhdGFcbiAgICAgICAgdGhpcy50b2NTdmMuY29tcHV0ZU1pbGVzdG9uZUxvY2tpbmdTdGF0dXMoaXNFbnJvbGxlZClcblxuICAgICAgICAvLyBTVEVQIDU6IFN5bmMgY29udGVudCB0cmVlJ3MgaXNMb2NrZWQgd2l0aCBjb21wdXRlZCB2YWx1ZXNcbiAgICAgICAgdGhpcy5zeW5jTWlsZXN0b25lTG9ja1N0YXR1cygpXG5cbiAgICAgICAgdGhpcy5nZXRPcmdJZEZvclNoYXJlKClcbiAgICAgICAgdGhpcy5nZXRUb2NTdHJ1Y3R1cmUoKVxuICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYgKCFpZGVudGlmaWVyKSB7XG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSBmZXRjaEhpZXJhcmNoeUNvbnRlbnQgcmV0dXJucyBhbiBPYnNlcnZhYmxlXG4gICAgICAgIGNvbnN0IG9ic2VydmFibGUgPSB0aGlzLmNvbnRlbnRTdmMuZmV0Y2hIaWVyYXJjaHlDb250ZW50KGlkZW50aWZpZXIsICdkZXRhaWwnKVxuXG4gICAgICAgIGlmICghb2JzZXJ2YWJsZSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdmZXRjaEhpZXJhcmNoeUNvbnRlbnQgZGlkIG5vdCByZXR1cm4gYW4gT2JzZXJ2YWJsZScpXG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IG9ic2VydmFibGUuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gcmVzcG9uc2UucmVzdWx0LmNvbnRlbnRcbiAgICAgICAgICAgICAgdGhpcy5nZXRPcmdJZEZvclNoYXJlKClcbiAgICAgICAgICAgICAgdGhpcy5nZXRUb2NTdHJ1Y3R1cmUoKVxuICAgICAgICAgICAgICBpZiAoIXRoaXMuZm9yUHJldmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlclJhdGluZyA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VXNlclJhdGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBoaWVyYXJjaHkgY29udGVudCcsIGVycm9yKVxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGdldFRvY1N0cnVjdHVyZSgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVUb2NTdHJ1Y3R1cmUoKVxuICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy50b2NTdHJ1Y3R1cmUpIHtcbiAgICAgIHRoaXMuaGFzVG9jU3RydWN0dXJlID0gZmFsc2VcbiAgICAgIHRoaXMudG9jU3RydWN0dXJlLmxlYXJuaW5nTW9kdWxlID0gdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gdGhpcy5wcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFID8gLTEgOiAwXG4gICAgICB0aGlzLnRvY1N0cnVjdHVyZS5jb3Vyc2UgPSB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLnByaW1hcnlDYXRlZ29yeS5DT1VSU0UgPyAtMSA6IDBcbiAgICAgIHRoaXMudG9jU3RydWN0dXJlID0gdGhpcy50b2NTdmMuZ2V0VG9jU3RydWN0dXJlKHRoaXMuY29udGVudCwgdGhpcy50b2NTdHJ1Y3R1cmUpXG4gICAgICBmb3IgKGNvbnN0IHByb2dUeXBlIGluIHRoaXMudG9jU3RydWN0dXJlKSB7XG4gICAgICAgIGlmICh0aGlzLnRvY1N0cnVjdHVyZVtwcm9nVHlwZV0gPiAwKSB7XG4gICAgICAgICAgdGhpcy5oYXNUb2NTdHJ1Y3R1cmUgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBmcm9tIG5nT25DaGFuZ2VzXG4gICAgICB0aGlzLmZldGNoRXh0ZXJuYWxDb250ZW50QWNjZXNzKClcbiAgICAgIHRoaXMubW9kaWZ5U2Vuc2libGVDb250ZW50UmF0aW5nKClcbiAgICAgIHRoaXMuYXNzaWduUGF0aEFuZFVwZGF0ZUJhbm5lcih0aGlzLnJvdXRlci51cmwpXG4gICAgICB0aGlzLmdldExlYXJuaW5nVXJscygpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgbWlsZXN0b25lIGlzTG9ja2VkIHByb3BlcnR5IHdpdGggY29tcHV0ZWQgbG9ja2luZyBzdGF0dXMgZnJvbSBoYXNobWFwXG4gICAqIFRoaXMgZW5zdXJlcyB0aGUgY29udGVudCB0cmVlIHJlZmxlY3RzIHRoZSBhY3R1YWwgbG9jayBzdGF0dXNcbiAgICovXG4gIHN5bmNNaWxlc3RvbmVMb2NrU3RhdHVzKCkge1xuICAgIGlmICghdGhpcy5jb250ZW50IHx8ICF0aGlzLmNvbnRlbnQuY2hpbGRyZW4pIHJldHVyblxuXG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZVxuICAgIHRoaXMuY29udGVudC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XG4gICAgICBpZiAoY2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSAnTWlsZXN0b25lJyAmJiBjaGlsZC5pZGVudGlmaWVyKSB7XG4gICAgICAgIGNvbnN0IGhhc2hEYXRhID0gdGhpcy50b2NTdmMuaGFzaG1hcFtjaGlsZC5pZGVudGlmaWVyXVxuICAgICAgICBpZiAoaGFzaERhdGEgJiYgaGFzaERhdGEuY29tcHV0ZWRJc0xvY2tlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb2xkTG9ja2VkID0gY2hpbGQuaXNMb2NrZWRcbiAgICAgICAgICBjaGlsZC5pc0xvY2tlZCA9IGhhc2hEYXRhLmNvbXB1dGVkSXNMb2NrZWRcbiAgICAgICAgICBpZiAob2xkTG9ja2VkICE9PSBjaGlsZC5pc0xvY2tlZCkge1xuICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggbWlsZXN0b25lIGxvY2tpbmcgc3RhdHVzIGZyb20gdGhlIGFscmVhZHktdXBkYXRlZCBoYXNobWFwXG4gICAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcHJvZ3Jlc3MgdXBkYXRlcyB0byBzeW5jIFVJIHdpdGggY29tcHV0ZWQgbG9jayBzdGF0dXNcbiAgICogTm90ZTogRG9lcyBOT1QgZmV0Y2ggZW5yb2xsbWVudCBkYXRhIC0gdXNlcyBleGlzdGluZyBoYXNobWFwIHdoaWNoIGlzIGFscmVhZHkgdXBkYXRlZFxuICAgKi9cbiAgcHJpdmF0ZSByZWZyZXNoRW5yb2xsbWVudEFuZFByb2dyZXNzKCkge1xuICAgIGlmICghdGhpcy5jb250ZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuXG4gICAgICAvLyBDaGVjayBpZiB1c2VyIGlzIGVucm9sbGVkXG4gICAgICBjb25zdCBpc0Vucm9sbGVkID0gdGhpcy51c2VyRW5yb2xsbWVudExpc3QgJiYgdGhpcy51c2VyRW5yb2xsbWVudExpc3QubGVuZ3RoID4gMFxuXG4gICAgICAvLyBSZWNvbXB1dGUgbWlsZXN0b25lIGxvY2tpbmcgc3RhdHVzIGZyb20gZXhpc3RpbmcgaGFzaG1hcFxuICAgICAgLy8gVGhlIGhhc2htYXAgaXMgYWxyZWFkeSB1cGRhdGVkIHdpdGggbGF0ZXN0IHByb2dyZXNzIHZpYSBoYXNobWFwIHVwZGF0ZSBzdWJzY3JpcHRpb25cbiAgICAgIHRoaXMudG9jU3ZjLmNvbXB1dGVNaWxlc3RvbmVMb2NraW5nU3RhdHVzKGlzRW5yb2xsZWQpXG5cbiAgICAgIC8vIFN5bmMgbG9jayBzdGF0dXMgZnJvbSBoYXNobWFwIHRvIGNvbnRlbnQgdHJlZVxuICAgICAgdGhpcy5zeW5jTWlsZXN0b25lTG9ja1N0YXR1cygpXG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcign4p2MIEVycm9yIGluIHJlZnJlc2hFbnJvbGxtZW50QW5kUHJvZ3Jlc3M6JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgb25MYW5ndWFnZVNlbGVjdChsYW5nOiBhbnkpIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UgaXMgYWxyZWFkeSBzZXRcbiAgICBpZiAodGhpcy5zZWxlY3RlZExhbmd1YWdlICYmIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZS5pZGVudGlmaWVyID09PSBsYW5nLmlkZW50aWZpZXIpIHtcbiAgICAgIHJldHVybiAvLyBFeGl0IHRoZSBmdW5jdGlvbiBpZiB0aGUgbGFuZ3VhZ2UgaXMgdGhlIHNhbWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy51c2VyRW5yb2xsbWVudExpc3QgJiYgdGhpcy51c2VyRW5yb2xsbWVudExpc3QubGVuZ3RoKSB7XG4gICAgICBsZXQgZGF0YSA9IHt9XG4gICAgICAvLyBUT0RPOiBSZW1vdmUgaGFyZGNvZGUgc3RyaW5nc1xuICAgICAgY29uc3QgZW5yb2xsZWRDb3Vyc2UgPSB0aGlzLnRvY1N2Yy5maW5kRW5yb2xtZW50QnlDb2xsZWN0aW9uSWQodGhpcy51c2VyRW5yb2xsbWVudExpc3QsICh0aGlzLmJhc2VDb250ZW50UmVhZERhdGE/LmlkZW50aWZpZXIgfHwgJycpKVxuICAgICAgaWYgKGVucm9sbGVkQ291cnNlICYmIGVucm9sbGVkQ291cnNlLnN0YXR1cyA9PT0gMikge1xuICAgICAgICB0aGlzLnByb2Nlc3NMYW5ndWFnZVNlbGVjdGlvbihsYW5nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgcHJvZ3Jlc3MgaW4gdGhlIHNlbGVjdGVkIGxhbmd1YWdlLFxuICAgICAgICBpZiAodGhpcy5sYW5ndWFnZU1hcFByb2dyZXNzICYmIHRoaXMubGFuZ3VhZ2VNYXBQcm9ncmVzc1tsYW5nLmxhbmdJZF0gPiAwKSB7XG4gICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGZyb206ICdsYW5ndWFnZVN3aXRjaCcsXG4gICAgICAgICAgICAgIGljb246ICd0cmFuc2xhdGUnLFxuICAgICAgICAgICAgICBoZWFkZXI6IGBDb250aW51ZSB3aGVyZSB5b3UgbGVmdCBvZmYgaW4gJHtsYW5nLm5hbWV9P2AsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBZb3UndmUgYWxyZWFkeSBtYWRlIHNvbWUgcHJvZ3Jlc3MgaW4gdGhpcyBsYW5ndWFnZS5cXG4gSWYgeW91IGNvbnRpbnVlIGl0IHdpbGwgcmVzdW1lIGZyb20gd2hlcmUgeW91IGxlZnQgb2ZmLmAsXG4gICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogJ0JhY2snLFxuICAgICAgICAgICAgICBhY2NlcHRCdXR0b246ICdSZXN1bWUnLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBwcm9ncmVzcyBpbiB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UsIG9yIGZpcnN0IHRpbWUgc2VsZWN0aW9uXG4gICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGZyb206ICdsYW5ndWFnZVN3aXRjaCcsXG4gICAgICAgICAgICAgIGljb246ICd0cmFuc2xhdGUnLFxuICAgICAgICAgICAgICBoZWFkZXI6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBsYW5ndWFnZT8nLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnU3dpdGNoaW5nIHRoZSBsYW5ndWFnZSB3aWxsIHJlc2V0IHlvdXIgcHJvZ3Jlc3MuIFxcbiBUaGUgY291cnNlIHdpbGwgcmVzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcgaW4gdGhlIHNlbGVjdGVkIGxhbmd1YWdlLicsXG4gICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogJ0JhY2snLFxuICAgICAgICAgICAgICBhY2NlcHRCdXR0b246ICdDaGFuZ2UgbGFuZ3VhZ2UnLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dMYW5nU3dpdGNoUG9wdXAobGFuZywgZGF0YSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9jZXNzTGFuZ3VhZ2VTZWxlY3Rpb24obGFuZylcbiAgICB9XG4gIH1cblxuICBzaG93TGFuZ1N3aXRjaFBvcHVwKGxhbmc6IGFueSwgZGF0YT86IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVE9DTXVsdGlMaW5ndWFsRGlhbG9nQ29tcG9uZW50LCBkYXRhKVxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoY29uZmlybWVkKSA9PiB7XG4gICAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0xhbmd1YWdlU2VsZWN0aW9uKGxhbmcpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHNob3dPbmVTdGVwUmVzdW1lQ29uZmlybSh1cmxEYXRhOiBhbnkpIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZnJvbTogJ2xhbmd1YWdlU3dpdGNoJyxcbiAgICAgICAgaWNvbjogJ3RyYW5zbGF0ZScsXG4gICAgICAgIGhlYWRlcjogYFlvdSd2ZSBhbHJlYWR5IHN0YXJ0ZWQgdGhpcyBjb3Vyc2VgLFxuICAgICAgICBtZXNzYWdlOiBgWW914oCZdmUgbWFkZSBzb21lIDxiPnByb2dyZXNzPC9iPiBpbiBhbm90aGVyIGxhbmd1YWdlIG9mIHRoaXMgY291cnNlLiBcXG5Xb3VsZCB5b3UgbGlrZSB0byA8Yj5yZXN1bWUgd2hlcmUgeW91IGxlZnQgb2ZmPC9iPiwgb3IgY29udGludWUgd2l0aCB0aGlzIHZlcnNpb24gaW5zdGVhZD9gLFxuICAgICAgICBjYW5jZWxCdXR0b246ICdDb250aW51ZSBIZXJlJyxcbiAgICAgICAgYWNjZXB0QnV0dG9uOiAnUmVzdW1lJyxcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihUT0NNdWx0aUxpbmd1YWxEaWFsb2dDb21wb25lbnQsIGRhdGEpXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChjb25maXJtZWQpID0+IHtcbiAgICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXG4gICAgICAgICAgW3VybERhdGEudXJsXSxcbiAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB1cmxEYXRhLnF1ZXJ5UGFyYW1zIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYW5nID0gdGhpcy5jb250ZW50TGFuZ1N2Yy5nZXRSZXF1aXJlZExhbmd1YWdlRGV0YWlscyh0aGlzLmJhc2VDb250ZW50UmVhZERhdGEsIHRoaXMucXVlcnlQYXJhbXNEYXRhWydNTCddKVxuICAgICAgICB0aGlzLnByb2Nlc3NMYW5ndWFnZVNlbGVjdGlvbihsYW5nKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcm9jZXNzTGFuZ3VhZ2VTZWxlY3Rpb24obGFuZzogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0gbGFuZ1xuXG4gICAgLy8gU2V0IHNrZWxldG9uIGxvYWRlciB0byBzaG93IGxvYWRpbmcgc3RhdGVcbiAgICB0aGlzLnNrZWxldG9uTG9hZGVyID0gdHJ1ZVxuICAgIC8vIENoZWNrIGlmIGxhbmd1YWdlIG9iamVjdCBoYXMgcmVxdWlyZWQgcHJvcGVydGllc1xuICAgIGlmIChsYW5nICYmIGxhbmcuaWRlbnRpZmllcikge1xuICAgICAgLy8gQ3JlYXRlIGEgcHJvbWlzZSBjaGFpbiB0byBmZXRjaCBjb250ZW50IGRhdGEgYW5kIGhpZXJhcmNoeSBzZXF1ZW50aWFsbHlcbiAgICAgIHRoaXMuZmV0Y2hDb250ZW50UmVhZChsYW5nLmlkZW50aWZpZXIpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAvLyBBZnRlciBjb250ZW50IHJlYWQgaXMgc3VjY2Vzc2Z1bCwgZmV0Y2ggdGhlIGhpZXJhcmNoeVxuICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoQ29udGVudEhpZXJhcmNoeShsYW5nLmlkZW50aWZpZXIpXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAvLyBCb3RoIG9wZXJhdGlvbnMgd2VyZSBzdWNjZXNzZnVsXG4gICAgICAgICAgLy8gVXBkYXRlIFVJIGFzIG5lZWRlZCB3aXRoIG5ldyBjb250ZW50XG4gICAgICAgICAgdGhpcy5yb3V0ZXJDaGFuZ2VIYW5kbGVyKHRydWUpXG4gICAgICAgICAgaWYgKHRoaXMudXNlckVucm9sbG1lbnRMaXN0ICYmIHRoaXMudXNlckVucm9sbG1lbnRMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVJlc3VtZURhdGFMaW5rTmV3KClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuY29udGVudCkge1xuICAgICAgICAgICAgdGhpcy5nZXRMZWFybmluZ1VybHMoKVxuICAgICAgICAgICAgLy8gUmVzZXQgdXNlciBwcm9ncmVzcyBhbmQgZmV0Y2ggZW5yb2xsbWVudCBkYXRhIGlmIG5vdCBpbiBwcmV2aWV3IG1vZGVcbiAgICAgICAgICAgIGlmICghdGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlVzZXJFbnJvbGxlZCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFVwZGF0ZSBzdWJqZWN0IHRvIG5vdGlmeSByYXRpbmcgc3VtbXJ5IGNvbXBvbmVudCBhbmQgbG9hZCB0aGUgc3VtYW1yeSBvZiBzZWxlY3RlZCBsYW5ndWFnZVxuICAgICAgICAgIHRoaXMucmVzZXRSYXRpbmdzU2VydmljZS5zZXRSYXRpbmdTZXJ2aWNlVXBkYXRlKHRydWUpXG4gICAgICAgICAgLy8gRmluYWxseSBzZXQgbG9hZGluZyBzdGF0ZSB0byBmYWxzZVxuICAgICAgICAgIHRoaXMuc2tlbGV0b25Mb2FkZXIgPSBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gSGFuZGxlIGFueSBlcnJvcnMgaW4gdGhlIHByb21pc2UgY2hhaW5cbiAgICAgICAgICB0aGlzLmxvZ2dlclN2Yy5lcnJvcignRXJyb3IgZHVyaW5nIGxhbmd1YWdlIGNoYW5nZTonLCBlcnJvcilcbiAgICAgICAgICB0aGlzLnNrZWxldG9uTG9hZGVyID0gZmFsc2VcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0ZhaWxlZCB0byBsb2FkIGNvbnRlbnQgaW4gc2VsZWN0ZWQgbGFuZ3VhZ2UnLCAnWCcsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdJbnZhbGlkIGxhbmd1YWdlIHNlbGVjdGlvbicsIGxhbmcpXG4gICAgICB0aGlzLnNrZWxldG9uTG9hZGVyID0gZmFsc2VcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignSW52YWxpZCBsYW5ndWFnZSBzZWxlY3Rpb24nLCAnWCcsIHtcbiAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGNvbnRlbnQgZGF0YSBmb3IgYSBnaXZlbiBpZGVudGlmaWVyIGFuZCB1cGRhdGVzIHRoZSBjb250ZW50UmVhZERhdGEgcHJvcGVydHlcbiAgICogQHBhcmFtIGlkZW50aWZpZXIgVGhlIGNvbnRlbnQgaWRlbnRpZmllciB0byBmZXRjaFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiBjb250ZW50IHdhcyBmZXRjaGVkIHN1Y2Nlc3NmdWxseSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoQ29udGVudFJlYWQoaWRlbnRpZmllcjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghaWRlbnRpZmllcikge1xuICAgICAgICB0aGlzLmxvZ2dlclN2Yy5lcnJvcignQ2Fubm90IGZldGNoIGNvbnRlbnQ6IGlkZW50aWZpZXIgaXMgbWlzc2luZycpXG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBvYnNlcnZhYmxlID0gdGhpcy5jb250ZW50U3ZjLmZldGNoQ29udGVudERhdGEoaWRlbnRpZmllcilcblxuICAgICAgaWYgKCFvYnNlcnZhYmxlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdmZXRjaENvbnRlbnREYXRhIGRpZCBub3QgcmV0dXJuIGFuIE9ic2VydmFibGUnKVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gb2JzZXJ2YWJsZS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZT8ucmVzdWx0Py5jb250ZW50KSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgY29udGVudFJlYWREYXRhIHdpdGggdGhlIGZldGNoZWQgY29udGVudFxuICAgICAgICAgICAgdGhpcy5jb250ZW50UmVhZERhdGEgPSByZXNwb25zZS5yZXN1bHQuY29udGVudFxuXG4gICAgICAgICAgICAvLyBVcGRhdGUgbGFuZ3VhZ2UgbGlzdCBhZnRlciBjb250ZW50IGlzIGZldGNoZWRcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YSkge1xuICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlTGlzdCA9IHRoaXMuY29udGVudExhbmdTdmMuZ2V0QWxsQ29udGVudExhbmd1YWdlcyh0aGlzLmNvbnRlbnRSZWFkRGF0YSlcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0gdGhpcy5jb250ZW50TGFuZ1N2Yy5nZXRTZWxlY3RlZExhbmd1YWdlKHRoaXMuY29udGVudFJlYWREYXRhKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU3ZjLndhcm4oJ0NvbnRlbnQgZGF0YSBub3QgZm91bmQgaW4gcmVzcG9uc2UnLCByZXNwb25zZSlcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggY29udGVudCBkYXRhJywgZXJyb3IpXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHJvdXRlckNoYW5nZUhhbmRsZXIoYXBwZW5kQmF0Y2hJZDogYm9vbGVhbikge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBhbnkgPSB7fVxuXG4gICAgLy8gQWRkIGJhdGNoIElEIGlmIG5lZWRlZFxuICAgIGlmIChhcHBlbmRCYXRjaElkICYmIHRoaXMuZ2V0QmF0Y2hJZCgpKSB7XG4gICAgICBxdWVyeVBhcmFtcy5iYXRjaElkID0gdGhpcy5nZXRCYXRjaElkKClcbiAgICB9XG5cbiAgICAvLyBBZGQgbXVsdGlsaW5ndWFsIElEIGFuZCBsYW5ndWFnZSB0byBxdWVyeSBwYXJhbXMgaWYgYXZhaWxhYmxlXG4gICAgaWYgKHRoaXMuY29udGVudFJlYWREYXRhICYmIHRoaXMuY29udGVudFJlYWREYXRhLmlkZW50aWZpZXIpIHtcbiAgICAgIGxldCBsYW5ndWFnZSA9ICcnXG5cbiAgICAgIC8vIEhhbmRsZSBib3RoIHN0cmluZyBhbmQgYXJyYXkgbGFuZ3VhZ2UgZm9ybWF0c1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jb250ZW50UmVhZERhdGEubGFuZ3VhZ2UpKSB7XG4gICAgICAgIGxhbmd1YWdlID0gdGhpcy5jb250ZW50UmVhZERhdGEubGFuZ3VhZ2VbMF0udG9Mb3dlckNhc2UoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YS5sYW5ndWFnZSkge1xuICAgICAgICBsYW5ndWFnZSA9IHRoaXMuY29udGVudFJlYWREYXRhLmxhbmd1YWdlLnRvTG93ZXJDYXNlKClcbiAgICAgIH1cbiAgICAgIGlmICghKHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSAmJiBPYmplY3Qua2V5cyh0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UpLmxlbmd0aCkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0ge1xuICAgICAgICAgIGxhbmdJZDogbGFuZ3VhZ2UsXG4gICAgICAgICAgbmFtZTogdGhpcy5jb250ZW50UmVhZERhdGEubGFuZ3VhZ2VbMF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gT25seSBhZGQgcGFyYW1ldGVycyBpZiB3ZSBoYXZlIHZhbGlkIGRhdGFcbiAgICAgIGlmIChsYW5ndWFnZSkge1xuICAgICAgICBxdWVyeVBhcmFtcy5NTCA9IGxhbmd1YWdlXG4gICAgICB9XG5cbiAgICAgIHF1ZXJ5UGFyYW1zLk1MSWQgPSB0aGlzLmNvbnRlbnRSZWFkRGF0YS5pZGVudGlmaWVyXG4gICAgfVxuXG4gICAgLy8gT25seSBuYXZpZ2F0ZSBpZiB3ZSBoYXZlIGJhdGNoIElEIG9yIG90aGVyIHBhcmFtZXRlcnNcbiAgICBpZiAoT2JqZWN0LmtleXMocXVlcnlQYXJhbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxuICAgICAgICBbXSxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRpbnVlTGVhcm5pbmdEYXRhKGNvbnRlbnRJZDogc3RyaW5nLCBiYXRjaElkPzogc3RyaW5nLCBsYW5nPzogc3RyaW5nKSB7XG4gICAgdGhpcy50b2NTdmMuY29udGVudExvYWRlci5uZXh0KHRydWUpXG4gICAgdGhpcy5yZXN1bWVEYXRhID0gbnVsbFxuICAgIGxldCB1c2VySWRcbiAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgIHVzZXJJZCA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZCB8fCAnJ1xuICAgIH1cblxuICAgIGNvbnN0IHJlcTogTnNDb250ZW50LklDb250aW51ZUxlYXJuaW5nRGF0YVJlcSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgYmF0Y2hJZCxcbiAgICAgICAgdXNlcklkLFxuICAgICAgICBjb3Vyc2VJZDogY29udGVudElkIHx8ICcnLFxuICAgICAgICBjb250ZW50SWRzOiBbXSxcbiAgICAgICAgZmllbGRzOiBbJ3Byb2dyZXNzZGV0YWlscyddLFxuICAgICAgICAuLi4obGFuZyA/IHsgbGFuZ3VhZ2U6IGxhbmcgfSA6IG51bGwpLFxuICAgICAgfSxcbiAgICB9XG4gICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ICE9PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5SRVNPVVJDRSkge1xuICAgICAgdGhpcy5jb250ZW50U3ZjLmZldGNoQ29udGVudEhpc3RvcnlWMihyZXEpLnN1YnNjcmliZShcbiAgICAgICAgZGF0YSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5yZXN1bHQgJiYgZGF0YS5yZXN1bHQuY29udGVudExpc3QgJiYgZGF0YS5yZXN1bHQuY29udGVudExpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB0ZW1wUmVzdW1lRGF0YSA9IF8uZ2V0KGRhdGEsICdyZXN1bHQuY29udGVudExpc3QnKVxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZU1hcFByb2dyZXNzID0gXy5nZXQoZGF0YSwgJ3Jlc3VsdC5sYW5ndWFnZVByb2dyZXNzJykgfHwge31cbiAgICAgICAgICAgIHRoaXMucmVzdW1lRGF0YSA9IF8ubWFwKHRlbXBSZXN1bWVEYXRhLCByciA9PiB7XG4gICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IF8uZmlsdGVyKGZsYXR0ZW5JdGVtcyhfLmdldCh0aGlzLmNvbnRlbnQsICdjaGlsZHJlbicpIHx8IFtdLCAnY2hpbGRyZW4nKSwgeyAnaWRlbnRpZmllcic6IHJyLmNvbnRlbnRJZCwgcHJpbWFyeUNhdGVnb3J5OiAnTGVhcm5pbmcgUmVzb3VyY2UnIH0pXG4gICAgICAgICAgICAgIF8uc2V0KHJyLCAncHJvZ3Jlc3NkZXRhaWxzLm1pbWVUeXBlJywgXy5nZXQoXy5maXJzdChpdGVtcyksICdtaW1lVHlwZScpKVxuICAgICAgICAgICAgICBpZiAoIV8uZ2V0KHJyLCAnY29tcGxldGlvblBlcmNlbnRhZ2UnKSkge1xuICAgICAgICAgICAgICAgIGlmIChfLmdldChyciwgJ3N0YXR1cycpID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICBfLnNldChyciwgJ2NvbXBsZXRpb25QZXJjZW50YWdlJywgMTAwKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBfLnNldChyciwgJ2NvbXBsZXRpb25QZXJjZW50YWdlJywgMClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBfLm1hcCh0aGlzLnJlc3VtZURhdGEsICdjb21wbGV0aW9uUGVyY2VudGFnZScpXG4gICAgICAgICAgICBjb25zdCB0b3RhbENvdW50ID0gXy50b0ludGVnZXIoXy5nZXQodGhpcy5jb250ZW50LCAnbGVhZk5vZGVzQ291bnQnKSkgfHwgMVxuICAgICAgICAgICAgaWYgKHByb2dyZXNzLmxlbmd0aCA8IHRvdGFsQ291bnQpIHtcbiAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IHRvdGFsQ291bnQgLSBwcm9ncmVzcy5sZW5ndGhcbiAgICAgICAgICAgICAgaWYgKGRpZmYpIHtcbiAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgICAgICBfLmVhY2gobmV3IEFycmF5KGRpZmYpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBwcm9ncmVzcy5wdXNoKDApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVJlc3VtZURhdGFMaW5rTmV3KClcbiAgICAgICAgICAgIHRoaXMudG9jU3ZjLnVwZGF0ZVJlc3VtYURhdGEodGhpcy5yZXN1bWVEYXRhKVxuICAgICAgICAgICAgLy8gdGhpcy50b2NTdmMubWFwTW9kdWxlRHVyYXRpb25BbmRQcm9ncmVzcyh0aGlzLmNvbnRlbnQsIHRoaXMuY29udGVudClcbiAgICAgICAgICAgIHRoaXMuZ2V0TGFzdFBsYXllZFJlc291cmNlKClcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlICE9PSAxMDApIHtcbiAgICAgICAgICAgICAgdGhpcy50b2NTdmMubWFwQ29tcGxldGlvblBlcmNlbnRhZ2UodGhpcy5jb250ZW50LCB0aGlzLnJlc3VtZURhdGEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRvY1N2Yy5jYWxsSGlyYXJjaHlQcm9ncmVzc0hhc2htYXAodGhpcy5jb250ZW50KVxuICAgICAgICAgICAgLy8gUmVjb21wdXRlIG1pbGVzdG9uZSBsb2NraW5nIHN0YXR1cyBhZnRlciBwcm9ncmVzcyB1cGRhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VDb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5ID09PSAnTGVhcm5pbmcgUGF0aHdheScpIHtcbiAgICAgICAgICAgICAgY29uc3QgaXNFbnJvbGxlZCA9IHRoaXMudXNlckVucm9sbG1lbnRMaXN0ICYmIHRoaXMudXNlckVucm9sbG1lbnRMaXN0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgdGhpcy50b2NTdmMuY29tcHV0ZU1pbGVzdG9uZUxvY2tpbmdTdGF0dXMoaXNFbnJvbGxlZClcbiAgICAgICAgICAgICAgdGhpcy5zeW5jTWlsZXN0b25lTG9ja1N0YXR1cygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRvY1N2Yy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzdW1lRGF0YSA9IG51bGxcbiAgICAgICAgICAgIHRoaXMudG9jU3ZjLmNhbGxIaXJhcmNoeVByb2dyZXNzSGFzaG1hcCh0aGlzLmNvbnRlbnQpXG4gICAgICAgICAgICAvLyBSZWNvbXB1dGUgbWlsZXN0b25lIGxvY2tpbmcgc3RhdHVzIGV2ZW4gd2l0aCBubyBwcm9ncmVzcyBkYXRhXG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0xlYXJuaW5nIFBhdGh3YXknKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzRW5yb2xsZWQgPSB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdCAmJiB0aGlzLnVzZXJFbnJvbGxtZW50TGlzdC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgIHRoaXMudG9jU3ZjLmNvbXB1dGVNaWxlc3RvbmVMb2NraW5nU3RhdHVzKGlzRW5yb2xsZWQpXG4gICAgICAgICAgICAgIHRoaXMuc3luY01pbGVzdG9uZUxvY2tTdGF0dXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50b2NTdmMuY29udGVudExvYWRlci5uZXh0KGZhbHNlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY29udGVudFN2Yy5zZXRQcm9ncmFtQ2hpbGRSZXN1bWVEYXRhKHRoaXMucmVzdW1lRGF0YSwgY29udGVudElkKVxuICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlICE9PSAxMDApIHtcbiAgICAgICAgICAgIHRoaXMuYmluZENvbXBsZXRpb25QZXJjZW50YWdlKClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ0NPTlRFTlQgSElTVE9SWSBGRVRDSCBFUlJPUiA+JywgZXJyb3IpXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVSZXN1bWVEYXRhTGlua05ldygpIHtcbiAgICBpZiAodGhpcy5yZXN1bWVEYXRhICYmIHRoaXMuY29udGVudCkge1xuICAgICAgbGV0IHJlc3VtZURhdGFWMjogYW55XG4gICAgICBpZiAodGhpcy5jb250ZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDApIHtcbiAgICAgICAgcmVzdW1lRGF0YVYyID0gdGhpcy5nZXRSZXN1bWVEYXRhRnJvbUxpc3QoJ3N0YXJ0JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VtZURhdGFWMiA9IHRoaXMuZ2V0UmVzdW1lRGF0YUZyb21MaXN0KClcbiAgICAgIH1cbiAgICAgIGlmICghcmVzdW1lRGF0YVYyLm1pbWVUeXBlKSB7XG4gICAgICAgIHJlc3VtZURhdGFWMi5taW1lVHlwZSA9IHRoaXMudG9jU3ZjLmdldE1pbWVUeXBlKHRoaXMuY29udGVudCwgcmVzdW1lRGF0YVYyLmlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgICB0aGlzLnJlc3VtZURhdGFMaW5rID0gdGhpcy5nZXRSZXN1bWVVcmwocmVzdW1lRGF0YVYyKVxuICAgICAgdGhpcy5hY3Rpb25TVkMuc2V0VXBkYXRlQ29tcEdyb3VwTyA9IHRoaXMucmVzdW1lRGF0YUxpbmtcbiAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSAqL1xuICAgIH1cbiAgfVxuICBpc1NlbGVjdGVkSW5Nb3JlRHJvcGRvd24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkTGFuZ3VhZ2U/LmlkZW50aWZpZXIgfHwgIXRoaXMubGFuZ3VhZ2VMaXN0KSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VMaXN0LnNsaWNlKDUpLnNvbWUoKGxhbmc6IGFueSkgPT5cbiAgICAgIGxhbmc/LmlkZW50aWZpZXIgPT09IHRoaXMuc2VsZWN0ZWRMYW5ndWFnZT8uaWRlbnRpZmllclxuICAgIClcbiAgfVxuXG4gIGFzeW5jIGdldFF1ZXJ5UGFyYW1zKCkge1xuICAgIGNvbnN0IHRlbXBRdWVyeVBhcmFtc0RhdGE6IGFueSA9IHt9XG4gICAgdGhpcy5yb3V0ZVN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGUucXVlcnlQYXJhbU1hcC5zdWJzY3JpYmUoYXN5bmMgcVBhcmFtc01hcCA9PiB7XG5cbiAgICAgIC8vIEV4dHJhY3QgYWxsIHBhcmFtZXRlcnMgZnJvbSB0aGUgUGFyYW1NYXBcbiAgICAgIHFQYXJhbXNNYXAua2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHRlbXBRdWVyeVBhcmFtc0RhdGFba2V5XSA9IHFQYXJhbXNNYXAuZ2V0KGtleSkgPz8gJydcbiAgICAgIH0pXG4gICAgICB0ZW1wUXVlcnlQYXJhbXNEYXRhXG5cbiAgICAgIC8vIFByb2Nlc3Mgc3BlY2lmaWMgcGFyYW1ldGVyc1xuICAgICAgY29uc3QgY29udGV4dElkID0gdGVtcFF1ZXJ5UGFyYW1zRGF0YVsnY29udGV4dElkJ11cbiAgICAgIGNvbnN0IGNvbnRleHRQYXRoID0gdGVtcFF1ZXJ5UGFyYW1zRGF0YVsnY29udGV4dFBhdGgnXVxuICAgICAgY29uc3QgcmVjb21tZW5kZWRDb3Vyc2VzSWQgPSB0ZW1wUXVlcnlQYXJhbXNEYXRhWydyZWNvbW1lbmRhdGlvbklkJ11cblxuICAgICAgaWYgKGNvbnRleHRJZCAmJiBjb250ZXh0UGF0aCkge1xuICAgICAgICB0aGlzLmNvbnRleHRJZCA9IGNvbnRleHRJZFxuICAgICAgICB0aGlzLmNvbnRleHRQYXRoID0gY29udGV4dFBhdGhcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29tbWVuZGVkQ291cnNlc0lkKSB7XG4gICAgICAgIHRoaXMucmVjb21tZW5kZWRDb3Vyc2VzSWQgPSByZWNvbW1lbmRlZENvdXJzZXNJZFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyU2VydmljZUxpYi5nZXRSZWNvbW1lbmRlZENvdXJzZXNTYWtzaGFtQUkocmVjb21tZW5kZWRDb3Vyc2VzSWQpLnRvUHJvbWlzZSgpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmZlZWRiYWNrcyAmJiByZXNwb25zZS5mZWVkYmFja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZlZWRiYWNrR2l2ZW4gPSByZXNwb25zZS5mZWVkYmFja3MuZmluZCgoZmVlZGJhY2s6IGFueSkgPT4gZmVlZGJhY2s/LmNvdXJzZV9pZCA9PT0gdGhpcy5jb3Vyc2VJRClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXJTdmMuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHJlY29tbWVuZGVkIGNvdXJzZXM6JywgZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB0ZW1wUXVlcnlQYXJhbXNEYXRhXG4gIH1cblxuICBnZXRPcmdJZEZvclNoYXJlKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgIVtcbiAgICAgIE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuTU9ERVJBVEVEX0NPVVJTRSxcbiAgICAgIE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuTU9ERVJBVEVEX0FTU0VTU0VNRU5ULFxuICAgICAgTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5NT0RFUkFURURfUFJPR1JBTSxcbiAgICAgIE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuSU5WSVRFX09OTFlfUFJPR1JBTSxcbiAgICBdLmluY2x1ZGVzKHRoaXMuY29udGVudC5jb3Vyc2VDYXRlZ29yeSkpIHtcbiAgICAgIHRoaXMuY2FuU2hhcmUgPSB0cnVlXG4gICAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgICAgdGhpcy5yb290T3JnSWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS5yb290T3JnSWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhbmQgcHJvY2Vzc2VzIGNvbnRlbnQgY3JlYXRvciBkYXRhIGZyb20gdGhlIGN1cnJlbnQgY29udGVudFxuICAgKiAtIFNldHMgY29udGVudENyZWF0b3JEYXRhIGZyb20gcGFyc2VkIGNyZWF0b3IgY29udGFjdHNcbiAgICogLSBEZXRlcm1pbmVzIGlmIFwic2hvdyBidXR0b25cIiBmbGFnIHNob3VsZCBiZSBlbmFibGVkIGJhc2VkIG9uIGNvbnRlbnQgbmFtZVxuICAgKiAtIEluY2x1ZGVzIHByb3BlciBlcnJvciBoYW5kbGluZyBmb3IgbnVsbCB2YWx1ZXMgYW5kIHBhcnNpbmdcbiAgICovXG4gIGdldENvbnRlbnRDcmVhdG9yRGF0YSgpIHtcbiAgICB0cnkge1xuICAgICAgLy8gT25seSBwcm9jZWVkIGlmIHdlIGhhdmUgdmFsaWQgY29udGVudCBkYXRhXG4gICAgICBpZiAoIXRoaXMuY29udGVudFJlYWREYXRhKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLndhcm4oJ0Nhbm5vdCBnZXQgY3JlYXRvciBkYXRhOiBjb250ZW50UmVhZERhdGEgaXMgbm90IGF2YWlsYWJsZScpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzIGNvbnRlbnQgbmFtZSBmb3IgY29tcGFyaXNvbiAoc2FmZWx5IGhhbmRsZSBudWxsL3VuZGVmaW5lZClcbiAgICAgIGNvbnN0IGNvbnRlbnROYW1lID0gdGhpcy5jb250ZW50UmVhZERhdGEubmFtZT8udHJpbSgpIHx8ICcnXG5cbiAgICAgIC8vIFBhcnNlIGFuZCBzZXQgY3JlYXRvciBjb250YWN0cyBpZiBhdmFpbGFibGVcbiAgICAgIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YS5jcmVhdG9yQ29udGFjdHMpIHtcbiAgICAgICAgLy8gVXNlIHRoZSBleGlzdGluZyBwYXJzaW5nIG1ldGhvZCB0byBoYW5kbGUgY3JlYXRvciBjb250YWN0c1xuICAgICAgICB0aGlzLmNvbnRlbnRDcmVhdG9yRGF0YSA9IHRoaXMuaGFuZGxlUGFyc2VKc29uRGF0YSh0aGlzLmNvbnRlbnRSZWFkRGF0YS5jcmVhdG9yQ29udGFjdHMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZXNldCB0byBlbXB0eSBhcnJheSBpZiBubyBjcmVhdG9yIGNvbnRhY3RzXG4gICAgICAgIHRoaXMuY29udGVudENyZWF0b3JEYXRhID0gW11cbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHNob3dCdG4gZmxhZyBiYXNlZCBvbiBkYWtzaHRhIG5hbWUgY29tcGFyaXNvbiAoY2FzZSBpbnNlbnNpdGl2ZSlcbiAgICAgIC8vIFRoaXMgZGV0ZXJtaW5lcyBpZiB0aGUgc3BlY2lhbCBidXR0b24gZm9yIGRha3NodGEgY29udGVudCBpcyBzaG93blxuICAgICAgdGhpcy5zaG93QnRuID0gY29udGVudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGhpcy5kYWtzaHRhTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBhbnkgdW5leHBlY3RlZCBlcnJvcnNcbiAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdFcnJvciBwcm9jZXNzaW5nIGNvbnRlbnQgY3JlYXRvciBkYXRhOicsIGVycm9yKVxuICAgICAgdGhpcy5jb250ZW50Q3JlYXRvckRhdGEgPSBbXVxuICAgICAgdGhpcy5zaG93QnRuID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBnZXRJMThOVHJhbnNsYXRpb25zKCkge1xuICAgIC8vIFN1YnNjcmliZSB0byBsYW5ndWFnZSB0cmFuc2xhdGlvbiBmbGFnIGNoYW5nZXNcbiAgICBjb25zdCB0cmFuc2xhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMuY29uZmlnU3ZjLmxhbmd1YWdlVHJhbnNsYXRpb25GbGFnXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKSAvLyBFbnN1cmUgc3Vic2NyaXB0aW9uIGlzIGNsZWFuZWQgdXAgb24gY29tcG9uZW50IGRlc3Ryb3lcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgLy8gT25seSBwcm9jZWVkIGlmIHdlIGhhdmUgdmFsaWQgZGF0YVxuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZWJzaXRlIGxhbmd1YWdlIGlzIHNldCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlZExhbmd1YWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpXG4gICAgICAgICAgICBpZiAoc3RvcmVkTGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgICAgLy8gU2V0IGRlZmF1bHQgbGFuZ3VhZ2UgYXMgZmFsbGJhY2tcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcoJ2VuJylcblxuICAgICAgICAgICAgICAvLyBVc2UgdGhlIHN0b3JlZCBsYW5ndWFnZSBwcmVmZXJlbmNlXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShzdG9yZWRMYW5ndWFnZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBMb2cgYW55IGVycm9ycyB0aGF0IG9jY3VyIGR1cmluZyBzdWJzY3JpcHRpb25cbiAgICAgICAgICB0aGlzLmxvZ2dlclN2Yy5lcnJvcignRXJyb3IgaW4gbGFuZ3VhZ2UgdHJhbnNsYXRpb24gc3Vic2NyaXB0aW9uOicsIGVycm9yKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgLy8gU3RvcmUgc3Vic2NyaXB0aW9uIGZvciBjbGVhbnVwIChvcHRpb25hbCBhbHRlcm5hdGl2ZSB0byB0YWtlVW50aWwpXG4gICAgdGhpcy50cmFuc2xhdGlvblN1YnNjcmlwdGlvbiA9IHRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uXG4gIH1cblxuICBnZXRTZXJ2ZXJEYXRlVGltZSgpIHtcbiAgICAvLyBGZXRjaCB0aGUgc2VydmVyIGRhdGUgdGltZSBhbmQgcHJvY2VzcyB0aGUgcmVzcG9uc2VcbiAgICB0aGlzLnRvY1N2Yy5nZXRTZXJ2ZXJEYXRlKCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgcmVzcG9uc2UgY29udGFpbnMgdmFsaWQgc3lzdGVtIGRhdGVcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnN5c3RlbURhdGUpIHtcbiAgICAgICAgICAvLyBVcGRhdGUgc2VydmljZSB3aXRoIHNlcnZlciBkYXRlIChyZW1vdmVkIGR1cGxpY2F0ZSBjYWxsKVxuICAgICAgICAgIHRoaXMudG9jU3ZjLmNoYW5nZVNlcnZlckRhdGUocmVzcG9uc2Uuc3lzdGVtRGF0ZSlcbiAgICAgICAgICB0aGlzLnNlcnZlckRhdGUgPSByZXNwb25zZS5zeXN0ZW1EYXRlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRmFsbGJhY2sgdG8gY2xpZW50J3MgdGltZSBpZiBzZXJ2ZXIgdGltZSBpcyBub3QgYXZhaWxhYmxlXG4gICAgICAgICAgY29uc3QgY2xpZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICAgICAgdGhpcy50b2NTdmMuY2hhbmdlU2VydmVyRGF0ZShjbGllbnRUaW1lKVxuICAgICAgICAgIHRoaXMuc2VydmVyRGF0ZSA9IGNsaWVudFRpbWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluaXRpYWxpemUgZGVwZW5kZW50IGZ1bmN0aW9ucyB0aGF0IG5lZWQgc2VydmVyIGRhdGVcbiAgICAgICAgdGhpcy5maW5kQUNQQigpXG4gICAgICAgIHRoaXMuZ2V0S2FybWFwb2ludHNMaW1pdCgpXG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgLy8gTG9nIHRoZSBlcnJvciBmb3IgZGVidWdnaW5nXG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdGYWlsZWQgdG8gZ2V0IHNlcnZlciBkYXRlOicsIGVycm9yKVxuXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGNsaWVudCdzIHRpbWUgb24gZXJyb3JcbiAgICAgICAgY29uc3QgY2xpZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICAgIHRoaXMudG9jU3ZjLmNoYW5nZVNlcnZlckRhdGUoY2xpZW50VGltZSlcbiAgICAgICAgdGhpcy5zZXJ2ZXJEYXRlID0gY2xpZW50VGltZVxuICAgICAgfVxuICAgIClcblxuICAgIC8vIFN1YnNjcmliZSB0byBzZXJ2ZXIgZGF0ZSBjaGFuZ2VzIGZyb20gc2VydmljZVxuICAgIHRoaXMuc2VydmVyRGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMudG9jU3ZjLnNlcnZlckRhdGVcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpIC8vIEVuc3VyZSBzdWJzY3JpcHRpb24gaXMgY2xlYW5lZCB1cFxuICAgICAgLnN1YnNjcmliZShzZXJ2ZXJEYXRlID0+IHtcbiAgICAgICAgdGhpcy5zZXJ2ZXJEYXRlID0gc2VydmVyRGF0ZVxuICAgICAgfSlcbiAgfVxuXG4gIGdldCBnZXRCYXNlQ29udGVudElkZW50aWZpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciB8fCB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIgfHwgJydcbiAgfVxuXG4gIGdldCBpc011bHRpbGluZ3VhbCgpIHtcbiAgICBpZiAodGhpcy5iYXNlQ29udGVudFJlYWREYXRhICYmIHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YS5sYW5ndWFnZU1hcFYxKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZUxpc3QubGVuZ3RoID4gMVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGhhbmRsZUVucm9sbG1lbnQoZXZlbnQ6IGFueSkge1xuXG4gICAgaWYgKHRoaXMuaXNNdWx0aWxpbmd1YWwpIHtcbiAgICAgIHRoaXMub3BlbkxhbmdEaWFsb2coZXZlbnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlQXV0b0JhdGNoQXNzaWduKClcbiAgICB9XG4gIH1cblxuICBvcGVuTGFuZ0RpYWxvZyhfZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRW5yb2xsTGFuZ3VhZ2VEaWFsb2d1ZUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICByZXN0b3JlRm9jdXM6IGZhbHNlLFxuICAgICAgZGF0YToge1xuICAgICAgICBwcmVTZWxlY3Q6IHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSxcbiAgICAgICAgbGFuZ3VhZ2VMaXN0OiB0aGlzLmxhbmd1YWdlTGlzdCxcbiAgICAgIH1cbiAgICB9KVxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoc2VsZWN0ZWRMYW5nKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0ZWRMYW5nKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSA9IHNlbGVjdGVkTGFuZ1xuICAgICAgICB0aGlzLmhhbmRsZUF1dG9CYXRjaEFzc2lnbigpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldFJlc3VtZVVybChyZXNvdXJjZURhdGE6IGFueSwgYmF0Y2hJZD86IGFueSwgcHJpbWFyeUNhdGVnb3J5PzogYW55KSB7XG4gICAgbGV0IE1MSWQgPSB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2U/LmlkZW50aWZpZXIgfHwgJydcbiAgICBsZXQgTUwgPSB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2U/LmxhbmdJZCB8fCAnJ1xuICAgIGxldCByZXN1bWVEYXRhVXJsID0gdmlld2VyUm91dGVHZW5lcmF0b3IoXG4gICAgICByZXNvdXJjZURhdGEuaWRlbnRpZmllcixcbiAgICAgIHJlc291cmNlRGF0YS5taW1lVHlwZSxcbiAgICAgIHRoaXMuaXNSZXNvdXJjZSA/IHVuZGVmaW5lZCA6IHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGE/LmlkZW50aWZpZXIgfHwgJycsXG4gICAgICB0aGlzLmlzUmVzb3VyY2UgPyB1bmRlZmluZWQgOiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEgJiYgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhPy5jb250ZW50VHlwZSB8fCAnJyxcbiAgICAgIHRoaXMuZm9yUHJldmlldyxcbiAgICAgIHByaW1hcnlDYXRlZ29yeSB8fCAnTGVhcm5pbmcgUmVzb3VyY2UnLFxuICAgICAgYmF0Y2hJZCB8fCB0aGlzLmdldEJhdGNoSWQoKSxcbiAgICAgIHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGE/Lm5hbWUgfHwgJycsXG4gICAgICBNTCxcbiAgICAgIE1MSWQsXG4gICAgKVxuICAgIHJldHVybiByZXN1bWVEYXRhVXJsXG4gIH1cblxuICBnZXQgY29udGVudENvbXBsZXRpb25QZXJjZW50KCkge1xuICAgIGlmICh0aGlzLmJhdGNoRGF0YT8uZW5yb2xsZWQpIHtcbiAgICAgIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmNvbnRlbnRSZWFkRGF0YS5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdDb3Vyc2UnICYmIHRoaXMuaXNNdWx0aWxpbmd1YWwpIHtcbiAgICAgICAgaWYgKHRoaXMubGFuZ3VhZ2VNYXBQcm9ncmVzcyAmJiB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2U/LmxhbmdJZCAmJiB0aGlzLmxhbmd1YWdlTWFwUHJvZ3Jlc3NbdGhpcy5zZWxlY3RlZExhbmd1YWdlPy5sYW5nSWRdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VNYXBQcm9ncmVzc1t0aGlzLnNlbGVjdGVkTGFuZ3VhZ2U/LmxhbmdJZF1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gMFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCAwXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGb3JDb21wbGV0aW9uU3VydmV5VHJpZ2dlcigpIHtcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudFJlYWREYXRhKSB7XG4gICAgICAvLyBjaGVjayBpZiBjb21wbGV0aW9uIHN1cnZleSBpcyBlbmFibGVkIGFuZCB1c2VyIGhhcyBjb21wbGV0ZWQgdGhlIGNvdXJzZSBiZWZvcmUgMjNyZCBERUMgMjAyMyAocmVsZWFzZSBkYXRlIG9mIGNvbXBsZXRpb24gc3VydmV5KVxuICAgICAgaWYgKHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnICYmIHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnLmNvbXBsZXRpb25TdXJ2ZXkgJiYgdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWcuY29tcGxldGlvblN1cnZleS5lbmFibGVkICYmXG4gICAgICAgIHRoaXMuZW5yb2xsZWRDb3Vyc2VEYXRhICYmIHRoaXMuZW5yb2xsZWRDb3Vyc2VEYXRhICYmIHRoaXMuZW5yb2xsZWRDb3Vyc2VEYXRhLmNvbXBsZXRlZE9uID49IHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnLmNvbXBsZXRpb25TdXJ2ZXkuc3RhcnREYXRlKSB7XG4gICAgICAgIGlmICgodGhpcy5jb250ZW50LmNvbXBsZXRpb25TdGF0dXMgPT09IDIgfHwgdGhpcy5jb250ZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDApICYmIHRoaXMuY29udGVudFJlYWREYXRhLmNvbXBsZXRpb25TdXJ2ZXlMaW5rKSB7XG4gICAgICAgICAgY29uc3Qgc0lEID0gdGhpcy5jb250ZW50UmVhZERhdGEuY29tcGxldGlvblN1cnZleUxpbmsuc3BsaXQoJ3N1cnZleXMvJylcbiAgICAgICAgICBjb25zdCBzdXJ2ZXlJZCA9IHNJRFsxXVxuICAgICAgICAgIGNvbnN0IGNvdXJzZUlkID0gdGhpcy5jb250ZW50UmVhZERhdGEuaWRlbnRpZmllclxuICAgICAgICAgIC8vIENhbGwgQVBJIHRvIHNlZSBpZiBzdXJ2ZXkgaXMgc3VibWl0dGVkIG9yIG5vdFxuICAgICAgICAgIHRoaXMudG9jU3ZjLmdldEFwbGxpY2F0aW9uc0J5SWQoc3VydmV5SWQsIGNvdXJzZUlkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcy5yZXN1bHQucmVzcG9uc2UgJiYgT2JqZWN0LmtleXMocmVzLnJlc3VsdC5yZXNwb25zZSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLmxvY2tDZXJ0aWZpY2F0ZSA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmxvY2tDZXJ0aWZpY2F0ZSA9IHRydWVcbiAgICAgICAgICAgICAgdGhpcy5vcGVuQ29tcGxldGlvblN1cnZleUZvcm1Qb3B1cCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENsZWFyIGV4aXN0aW5nIHN1cnZleSBkYXRhIGZyb20gbG9jYWwgc3RvcmFnZSBiZWZvcmUgb3BlbmluZyBwb3B1cFxuICBjbGVhckV4aXN0aW5nUHVibGljU3VydmV5RGF0YShzdXJ2ZXlJZDogc3RyaW5nLCBjb3Vyc2VJZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RvcmFnZUtleSA9IGBzdXJ2ZXlfJHtzdXJ2ZXlJZH1fJHtjb3Vyc2VJZH1gXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHN0b3JhZ2VLZXkpKSB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShzdG9yYWdlS2V5KVxuICAgIH1cbiAgfVxuXG4gIG9wZW5QdWJsaWNTdXJ2ZXlQb3B1cChuYXZpZ2F0aW9uVXJsPzogc3RyaW5nLCBxdWVyeVBhcmFtcz86IGFueSkge1xuICAgIC8vIEdldCBzdXJ2ZXkgSUQgYW5kIGNvdXJzZSBJRCBmcm9tIGVudmlyb25tZW50IGFuZCBjb250ZW50IGRhdGFcblxuICAgIGlmICh0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtuYXZpZ2F0aW9uVXJsXSwgeyBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3VydmV5SWQgPSB0aGlzLmVudmlyb25tZW50LnB1YmxpY0NvbnRlbnRTdXJ2ZXlJZCB8fCAnJ1xuICAgICAgY29uc3QgY291cnNlSWQgPSB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciB8fCAnJ1xuICAgICAgY29uc3QgY291cnNlTmFtZSA9IHRoaXMuY29udGVudFJlYWREYXRhPy5uYW1lIHx8ICcnXG4gICAgICBjb25zdCBjb250ZXh0T3JnSWQgPSB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uY3JlYXRlZEZvciAmJiB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uY3JlYXRlZEZvci5sZW5ndGggPiAwID9cbiAgICAgICAgdGhpcy5jb250ZW50UmVhZERhdGE/LmNyZWF0ZWRGb3JbMF0gOiAnJ1xuXG4gICAgICB0aGlzLmNsZWFyRXhpc3RpbmdQdWJsaWNTdXJ2ZXlEYXRhKHN1cnZleUlkLCBjb3Vyc2VJZClcblxuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgc3VydmV5SWQ6IHN1cnZleUlkLFxuICAgICAgICBjb3Vyc2VJZDogY291cnNlSWQsXG4gICAgICAgIGNvdXJzZU5hbWU6IGNvdXJzZU5hbWUsXG4gICAgICAgIGNvbnRleHRPcmdJZDogY29udGV4dE9yZ0lkLFxuICAgICAgICBmb3JQcmV2aWV3OiB0aGlzLmZvclByZXZpZXdcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihQdWJsaWNTdXJ2ZXlGb3JtQ29tcG9uZW50LCB7XG4gICAgICAgIC8vIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgd2lkdGg6ICc3NTBweCcsXG4gICAgICAgIG1heFdpZHRoOiAnOTB2dycsXG4gICAgICAgIGhlaWdodDogJzgwdmgnLFxuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgfSlcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgaW50ZW5kZWQgVVJMIG9ubHkgd2hlbiBzdXJ2ZXkgaXMgc3VibWl0dGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICAgIGlmIChuYXZpZ2F0aW9uVXJsKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbmF2aWdhdGlvblVybF0sIHsgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuXG4gIH1cblxuICByZXN1bWVDb250ZW50RGF0YSgpIHtcbiAgICBjb25zdCBuYXZpZ2F0aW9uVXJsID0gKHRoaXMucmVzdW1lRGF0YSAmJiAhdGhpcy5jZXJ0RGF0YSkgPyB0aGlzLnJlc3VtZURhdGFMaW5rPy51cmwgOiB0aGlzLmZpcnN0UmVzb3VyY2VMaW5rPy51cmxcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9ICh0aGlzLnJlc3VtZURhdGEgJiYgIXRoaXMuY2VydERhdGEpID8gdGhpcy5nZW5lcmF0ZVF1ZXJ5KCdSRVNVTUUnKSA6IHRoaXMuZ2VuZXJhdGVRdWVyeSgnU1RBUlQnKVxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtuYXZpZ2F0aW9uVXJsXSwgeyBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB1c2VyIGNhbiBlbnJvbGwgaW4gdGhlIGNvdXJzZVxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiBlbnJvbGxtZW50IGlzIGFsbG93ZWRcbiAgICovXG5cblxuICBuYXZpZ2F0ZVRvTmV3VmVyc2lvbigpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvYXBwL3RvYycsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2BhcHAvdG9jLyR7dGhpcy5jb250ZW50UmVhZERhdGE/LmNvbnRlbnRWZXJzaW9uSW5mbz8uaWRlbnRpZmllcn0vb3ZlcnZpZXdgXSlcbiAgICB9KVxuXG4gIH1cblxuICBjYW5FbnJvbGwoKSB7XG4gICAgaWYgKHRoaXMuY29udGVudFJlYWREYXRhICYmIHRoaXMuY29udGVudFJlYWREYXRhLmxhc3RFbnJvbGxtZW50RGF0ZSkge1xuICAgICAgY29uc3Qgc2VydmVyVGltZSA9IGRheWpzKHRoaXMuc2VydmVyRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJylcbiAgICAgIGNvbnN0IGVEYXRlID0gZGF5anModGhpcy5jb250ZW50UmVhZERhdGEubGFzdEVucm9sbG1lbnREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuICAgICAgaWYgKGRheWpzKHNlcnZlclRpbWUpLmlzU2FtZU9yQmVmb3JlKGVEYXRlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgZ29CYWNrKCkge1xuICAgIHRoaXMubG9jYXRpb24uYmFjaygpXG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb3Vyc2VJRCBlbHNlIG5vRGF0YUZvdW5kXCI+XG4gIDxuZy10ZW1wbGF0ZSAjZW5yb2xsRnVuY3Rpb25hbGl0eT5cbiAgICA8ZGl2IFtoaWRkZW5dPVwiaXNSZXNvdXJjZSAmJiAhY29udGVudD8uYXJ0aWZhY3RVcmw/Lmxlbmd0aFwiIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNCB0ZXh0LWNlbnRlclwiPlxuICAgICAgPCEtLSBDb3Vyc2UgYmxvY2sgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgIT09IHByaW1hcnlDYXRlZ29yeS5QUk9HUkFNXG4gICAgICAgICAgICAgICAgICAgICYmIGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ICE9PSBwcmltYXJ5Q2F0ZWdvcnkuQ1VSQVRFRF9QUk9HUkFNXG4gICAgICAgICAgICAgICAgICAgICYmIGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ICE9PSBwcmltYXJ5Q2F0ZWdvcnkuU1RBTkRBTE9ORV9BU1NFU1NNRU5UICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ICE9PSBwcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoYWN0aW9uQnRuU3RhdHVzID09PSAnZ3JhbnQnICYmICEoaXNNb2JpbGUgJiYgY29udGVudD8uaXNJbkludHJhbmV0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICEoY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5DT1VSU0UgJiYgY29udGVudD8uY2hpbGRyZW4ubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgIWNvbnRlbnQ/LmFydGlmYWN0VXJsPy5sZW5ndGgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIShjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LkNPVVJTRSAmJiAhYmF0Y2hEYXRhPy5lbnJvbGxlZCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAhKGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuUkVTT1VSQ0UgJiYgIWNvbnRlbnQ/LmFydGlmYWN0VXJsKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICEoY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5NQU5EQVRPUllfQ09VUlNFX0dPQUwpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICEoY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5QUk9HUkFNICYmIGN1cnJlbnRDb3Vyc2VCYXRjaElkKVwiPlxuICAgICAgICAgIDxhICpuZ0lmPVwic2hvd1N0YXJ0LnNob3cgJiYgIWlzUG9zdEFzc2Vzc21lbnQgJiYgIWZvclByZXZpZXdcIiAoY2xpY2spPVwicmFpc2VUZWxlbWV0cnlGb3JQdWJsaWMoKVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCIocmVzdW1lRGF0YSAmJiAhY2VydERhdGEpID8gcmVzdW1lRGF0YUxpbms/LnVybCA6IGZpcnN0UmVzb3VyY2VMaW5rPy51cmxcIlxuICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIihyZXN1bWVEYXRhICYmICFjZXJ0RGF0YSkgPyBnZW5lcmF0ZVF1ZXJ5KCdSRVNVTUUnKSA6IGdlbmVyYXRlUXVlcnkoJ1NUQVJUJylcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoIWNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlIDwgMTAwKSAmJiAhY2VydERhdGFcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JQcmV2aWV3IHx8IGlzSW5JRnJhbWU7IGVsc2UgYXV0aFZpZXdcIj5cbiAgICAgICAgICAgICAgICB7eyB0cmFuc2xhdGVMYWJlbHMoJ3Jlc3VtZScsICdhcHB0b2Nob21lJykgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwIHx8IGNlcnREYXRhXCI+XG4gICAgICAgICAgICAgIHt7IGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMCA/IHRyYW5zbGF0ZUxhYmVscygnU3RhcnQgYWdhaW4nLCAnYXBwdG9jaG9tZScpIDpcbiAgICAgICAgICAgICAgdHJhbnNsYXRlTGFiZWxzKCdyZXN1bWUnLCAnYXBwdG9jaG9tZScpIH19XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNQb3N0QXNzZXNzbWVudCAmJiBzaG93VGFrZUFzc2Vzc21lbnQ/LnBvc3RfYXNzZXNzbWVudFwiIChjbGljayk9XCJyYWlzZVRlbGVtZXRyeUZvclB1YmxpYygpXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cImZpcnN0UmVzb3VyY2VMaW5rPy51cmxcIiBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JQcmV2aWV3IHx8IGlzSW5JRnJhbWU7IGVsc2UgYXV0aFZpZXdcIj57eyAnYXBwdG9jaG9tZS50YWtlQXNzZXNzbWVudCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDwhLS0gPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCIhaXNQb3N0QXNzZXNzbWVudCAmJiAoIWNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlIDwgMTAwKSAmJiAhY2VydERhdGFcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0FjYnBDbGFpbVwiPlxuICAgICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidBQ0JQJ1wiIFtkYXRhXT1cImtwYXJyYXlcIj48L3dzLWFwcC1rYXJtYXBvaW50cy1wYW5lbD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0FjYnBDbGFpbSAmJiAhbW9udGhseUNhcEV4Y2VlZFwiPlxuICAgICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidSZXN1bWUnXCIgW2RhdGFdPVwia3BhcnJheVwiPjwvd3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiIWlzUG9zdEFzc2Vzc21lbnQgJiYgKGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDAgfHwgY2VydERhdGEpXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNBY2JwQ291cnNlICYmIGlzQWNicENsYWltICYmICFpc0NsYWltZWRcIj5cbiAgICAgICAgICAgICAgPHdzLWFwcC1rYXJtYXBvaW50cy1wYW5lbCBbYnRudHlwZV09XCInQUNCUCBDTEFJTSdcIiBbZGF0YV09XCJrcGFycmF5XCIgW2J0bkNhdGVnb3J5XT1cIidjbGFpbSdcIlxuICAgICAgICAgICAgICAgIChjbGlja0NsYWltS2FybWFQb2ludHMpPVwib25DbGlja09mQ2xhaW0oJGV2ZW50KVwiPjwvd3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzQWNicENvdXJzZSAmJiAhbW9udGhseUNhcEV4Y2VlZFwiPlxuICAgICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidTdGFydCBhZ2FpbidcIiBbZGF0YV09XCJrcGFycmF5XCI+PC93cy1hcHAta2FybWFwb2ludHMtcGFuZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNBY2JwQ291cnNlICYmIG1vbnRobHlDYXBFeGNlZWQgJiYgIWlzQ29tcGxldGVkVGhpc01vbnRoXCI+XG4gICAgICAgICAgICAgIDx3cy1hcHAta2FybWFwb2ludHMtcGFuZWwgW2J0bnR5cGVdPVwiJ1N0YXJ0IGFnYWluJ1wiIFtkYXRhXT1cImtwYXJyYXlcIj48L3dzLWFwcC1rYXJtYXBvaW50cy1wYW5lbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cImlzUG9zdEFzc2Vzc21lbnQgJiYgc2hvd1Rha2VBc3Nlc3NtZW50Py5wb3N0X2Fzc2Vzc21lbnRcIj5cbiAgICAgICAgICAgIDx3cy1hcHAta2FybWFwb2ludHMtcGFuZWwgW2J0bnR5cGVdPVwiJ1Rha2UgQXNzZXNzbWVudCdcIiBbZGF0YV09XCJrcGFycmF5XCI+PC93cy1hcHAta2FybWFwb2ludHMtcGFuZWw+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIChhY3Rpb25CdG5TdGF0dXMgPT09ICdncmFudCcgJiYgIShpc01vYmlsZSAmJiBjb250ZW50Py5pc0luSW50cmFuZXQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgISggY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5DT1VSU0UgJiYgY29udGVudD8uY2hpbGRyZW4ubGVuZ3RoID09PSAwICYmICFjb250ZW50Py5hcnRpZmFjdFVybD8ubGVuZ3RoICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAhKCBjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LkNPVVJTRSAmJiBiYXRjaERhdGE/LmVucm9sbGVkICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAhKGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuUkVTT1VSQ0UgJiYgIWNvbnRlbnQ/LmFydGlmYWN0VXJsKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAhKGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuUFJPR1JBTSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAhKGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuTUFOREFUT1JZX0NPVVJTRV9HT0FMKVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSAhPT0gcHJpbWFyeUNhdGVnb3J5LlJFU09VUkNFICAmJiAhZW5yb2xsQnRuTG9hZGluZ1wiPlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgcmVzdW1lXCIgKm5nSWY9XCIhZm9yUHJldmlldyB8fCBpc0luSUZyYW1lXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUVucm9sbG1lbnQoKVwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZS1zdGFydC1idG4nOiAhY2FuRW5yb2xsKCl9XCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAge3sgJ2FwcHRvY2hvbWUuZW5yb2xsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQWNicENvdXJzZVwiPlxuICAgICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidBQ0JQJ1wiIFtkYXRhXT1cImtwYXJyYXlcIj48L3dzLWFwcC1rYXJtYXBvaW50cy1wYW5lbD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0FjYnBDb3Vyc2UgJiYgIW1vbnRobHlDYXBFeGNlZWQgJiYgdXNlckVucm9sbG1lbnRMaXN0ICYmICF1c2VyRW5yb2xsbWVudExpc3QubGVuZ3RoXCI+XG4gICAgICAgICAgICAgIDx3cy1hcHAta2FybWFwb2ludHMtcGFuZWwgW2J0bnR5cGVdPVwiJ0Vucm9sbCdcIiBbZGF0YV09XCJrcGFycmF5XCI+PC93cy1hcHAta2FybWFwb2ludHMtcGFuZWw+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgPCEtLSBQUm9ncmFtICYgbWFuZGF0b3J5IGNvdXJzZSBibG9jayAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9yUHJldmlldyB8fCBpc0luSUZyYW1lOyBlbHNlIGF1dGhWaWV3QnRuXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuUFJPR1JBTSB8fCBjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5Lk1BTkRBVE9SWV9DT1VSU0VfR09BTFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiKGNvdXJzZUNhdGVnb3J5Py5NT0RFUkFURURfUFJPR1JBTSA9PT0gY29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSkgJiYgKGNvbnRlbnRSZWFkRGF0YT8uYmF0Y2hlcyAmJiAhYmF0Y2hEYXRhPy5lbnJvbGxlZClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nSWY9XCIoKGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ICE9PSBwcmltYXJ5Q2F0ZWdvcnkuUkVTT1VSQ0UpICAmJiAhZW5yb2xsQnRuTG9hZGluZykgJiYgIWNvbnRlbnRSZWFkRGF0YT8uYmF0Y2hlc1swXS5lbmREYXRlXCI+XG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIHJlc3VtZVwiIChjbGljayk9XCJoYW5kbGVFbnJvbGxtZW50KClcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZvclByZXZpZXcgfHwgaXNJbklGcmFtZVwiPlxuICAgICAgICAgICAgICAgICAge3snYXBwdG9jaG9tZS5lbnJvbGwnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0FjYnBDb3Vyc2VcIj5cbiAgICAgICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidBQ0JQJ1wiIFtkYXRhXT1cImtwYXJyYXlcIj48L3dzLWFwcC1rYXJtYXBvaW50cy1wYW5lbD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNBY2JwQ291cnNlICYmICFtb250aGx5Q2FwRXhjZWVkICYmIHVzZXJFbnJvbGxtZW50TGlzdCAmJiAhdXNlckVucm9sbG1lbnRMaXN0Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDx3cy1hcHAta2FybWFwb2ludHMtcGFuZWwgW2J0bnR5cGVdPVwiJ0Vucm9sbCdcIiBbZGF0YV09XCJrcGFycmF5XCI+PC93cy1hcHAta2FybWFwb2ludHMtcGFuZWw+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JQcmV2aWV3IHx8IGlzSW5JRnJhbWVcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKChjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSAhPT0gcHJpbWFyeUNhdGVnb3J5LlJFU09VUkNFKSAgJiYgIWVucm9sbEJ0bkxvYWRpbmcpICYmIGNvbnRlbnRSZWFkRGF0YT8uYmF0Y2hlc1swXS5lbmREYXRlXCI+XG4gICAgICAgICAgICAgICAgPHdzLWFwcC10b2MtYmFubmVyIHJvbGU9XCJiYW5uZXJcIiBbYmFubmVyc109XCJiYW5uZXJzXCIgW2ZvclByZXZpZXddPVwiZm9yUHJldmlld1wiIFtjb250ZW50XT1cImNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgW3VzZXJFbnJvbGxtZW50TGlzdF09XCJ1c2VyRW5yb2xsbWVudExpc3RcIiBbYW5hbHl0aWNzXT1cImFuYWx5dGljc1wiXG4gICAgICAgICAgICAgICAgICAocHJvZ3JhbUVucm9sbENhbGwpPVwicHJvZ3JhbUVucm9sbENhbGwoJGV2ZW50KVwiIFtyZXN1bWVEYXRhXT1cInJlc3VtZURhdGFcIiBbYmF0Y2hEYXRhXT1cImJhdGNoRGF0YVwiXG4gICAgICAgICAgICAgICAgICBbY29udGVudFJlYWREYXRhXT1cImNvbnRlbnRSZWFkRGF0YVwiPlxuICAgICAgICAgICAgICAgIDwvd3MtYXBwLXRvYy1iYW5uZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCIoY291cnNlQ2F0ZWdvcnk/Lk1PREVSQVRFRF9QUk9HUkFNID09PSBjb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5KSAmJiAhY29udGVudFJlYWREYXRhPy5iYXRjaGVzICYmICFiYXRjaERhdGE/LmVucm9sbGVkICYmICFlbnJvbGxCdG5Mb2FkaW5nXCI+XG4gICAgICAgICAgICBObyBCYXRjaGVzXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJjb3Vyc2VDYXRlZ29yeT8uTU9ERVJBVEVEX1BST0dSQU0gIT09IGNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnkgJiYgIWVucm9sbEJ0bkxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhKGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuUFJPR1JBTSAmJiBjdXJyZW50Q291cnNlQmF0Y2hJZCkgJiYgY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgIT09IHByaW1hcnlDYXRlZ29yeS5NQU5EQVRPUllfQ09VUlNFX0dPQUxcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgc2hhZG93LWxnIHRleHQtaW5mby1kaXZcIj57eyAnYXBwdG9jaG9tZS55b3VBcmVOb3RJbnZpdGVkJyB8IHRyYW5zbGF0ZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNCYXRjaEluUHJvZ3Jlc3MgJiYgISFjdXJyZW50Q291cnNlQmF0Y2hJZCAmJiBnZXRTdGFydERhdGUgPT09ICdOQSdcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgc2hhZG93LWxnIHRleHQtaW5mby1kaXZcIj57eyAnYXBwdG9jaG9tZS5ub0FjdGl2ZUJhdGNoZXMnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQmF0Y2hJblByb2dyZXNzICYmIGN1cnJlbnRDb3Vyc2VCYXRjaElkICYmIGdldFN0YXJ0RGF0ZSAhPT0gJ05BJ1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZCBzaGFkb3ctbGcgdGV4dC1pbmZvLWRpdlwiPnt7ICdhcHB0b2Nob21lLmJhdGNoV2lsbFN0YXJ0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIHt7Z2V0U3RhcnREYXRlfX0hPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCIhaXNCYXRjaEluUHJvZ3Jlc3MgJiYgY291cnNlQ2F0ZWdvcnk/Lk1PREVSQVRFRF9QUk9HUkFNID09PSBjb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5ICYmICFlbnJvbGxCdG5Mb2FkaW5nXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQmF0Y2hJblByb2dyZXNzICYmIGN1cnJlbnRDb3Vyc2VCYXRjaElkICYmIGdldFN0YXJ0RGF0ZSAhPT0gJ05BJ1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZCBzaGFkb3ctbGcgdGV4dC1pbmZvLWRpdlwiPnt7ICdhcHB0b2Nob21lLmJhdGNoV2lsbFN0YXJ0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIHt7Z2V0U3RhcnREYXRlfX0hPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQmF0Y2hJblByb2dyZXNzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoIGFjdGlvbkJ0blN0YXR1cyA9PT0gJ2dyYW50JyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAhKGlzTW9iaWxlICYmIGNvbnRlbnQ/LmlzSW5JbnRyYW5ldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuUFJPR1JBTSAmJiBjdXJyZW50Q291cnNlQmF0Y2hJZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuTUFOREFUT1JZX0NPVVJTRV9HT0FMICYmIGN1cnJlbnRDb3Vyc2VCYXRjaElkKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVwiPlxuICAgICAgICAgICAgPGEgKm5nSWY9XCJzaG93U3RhcnQuc2hvdyAmJiAhaXNQb3N0QXNzZXNzbWVudFwiXG4gICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInJlc3VtZURhdGEgPyByZXN1bWVEYXRhTGluaz8udXJsIDogZmlyc3RSZXNvdXJjZUxpbms/LnVybFwiXG4gICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJyZXN1bWVEYXRhID8gZ2VuZXJhdGVRdWVyeSgnUkVTVU1FJykgOiBnZW5lcmF0ZVF1ZXJ5KCdTVEFSVCcpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgcmVzdW1lXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgPCAxMDBcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZvclByZXZpZXcgfHwgaXNJbklGcmFtZVwiPlxuICAgICAgICAgICAgICAgICAge3sgcmVzdW1lRGF0YSAmJiAoY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgPCAxMDAgJiYgY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2U+IDApID9cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlTGFiZWxzKCdyZXN1bWUnLCAnYXBwdG9jaG9tZScpIDpcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlTGFiZWxzKCdzdGFydCcsICdhcHB0b2Nob21lJykgfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwXCI+XG4gICAgICAgICAgICAgICAge3sgKHJlc3VtZURhdGEpIHx8IGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDAgPyBcIlN0YXJ0IGFnYWluXCIgOiBcIlN0YXJ0XCIgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8YSAqbmdJZj1cImlzUG9zdEFzc2Vzc21lbnQgJiYgc2hvd1Rha2VBc3Nlc3NtZW50Py5wb3N0X2Fzc2Vzc21lbnRcIiBbcm91dGVyTGlua109XCJmaXJzdFJlc291cmNlTGluaz8udXJsXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgcmVzdW1lXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9yUHJldmlldyB8fCBpc0luSUZyYW1lXCI+e3sgJ2FwcHRvY2hvbWUudGFrZUFzc2Vzc21lbnQnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFpc1Bvc3RBc3Nlc3NtZW50ICYmICghY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgPCAxMDApXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0FjYnBDbGFpbVwiPlxuICAgICAgICAgICAgICAgIDx3cy1hcHAta2FybWFwb2ludHMtcGFuZWwgW2J0bnR5cGVdPVwiJ0FDQlAnXCIgW2RhdGFdPVwia3BhcnJheVwiPjwvd3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0FjYnBDbGFpbSAmJiAhbW9udGhseUNhcEV4Y2VlZFwiPlxuICAgICAgICAgICAgICAgIDx3cy1hcHAta2FybWFwb2ludHMtcGFuZWwgW2J0bnR5cGVdPVwiJ1Jlc3VtZSdcIiBbZGF0YV09XCJrcGFycmF5XCI+PC93cy1hcHAta2FybWFwb2ludHMtcGFuZWw+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiIWlzUG9zdEFzc2Vzc21lbnQgJiYgKGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDApXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0FjYnBDb3Vyc2UgJiYgaXNBY2JwQ2xhaW0gJiYgIWlzQ2xhaW1lZFwiPlxuICAgICAgICAgICAgICAgIDx3cy1hcHAta2FybWFwb2ludHMtcGFuZWwgW2J0bnR5cGVdPVwiJ0FDQlAgQ0xBSU0nXCIgW2NvbmRpdGlvbl09XCJ7aXNQb3N0QXNzZXNzbWVudDogaXNQb3N0QXNzZXNzbWVudCwgY29udGVudDogY29udGVudCwgaXNBY2JwQ291cnNlOiBpc0FjYnBDb3Vyc2UsIGlzQ2xhaW1lZDogaXNDbGFpbWVkLCBtb250aGx5Q2FwRXhjZWVkOiBtb250aGx5Q2FwRXhjZWVkLCBpc0NvbXBsZXRlZFRoaXNNb250aDogaXNDb21wbGV0ZWRUaGlzTW9udGgsIHNob3dUYWtlQXNzZXNzbWVudDogc2hvd1Rha2VBc3Nlc3NtZW50LCB1c2VyRW5yb2xsbWVudExpc3Q6IHVzZXJFbnJvbGxtZW50TGlzdCwgaXNDb21wbGV0ZWRUaGlzTW9udGg6IGlzQ29tcGxldGVkVGhpc01vbnRoLCByZXN1bWVEYXRhOiByZXN1bWVEYXRhLCB1c2VyUmF0aW5nOiB1c2VyUmF0aW5nfVwiIFtkYXRhXT1cImtwYXJyYXlcIiBbYnRuQ2F0ZWdvcnldPVwiJ2NsYWltJ1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2tDbGFpbUthcm1hUG9pbnRzKT1cIm9uQ2xpY2tPZkNsYWltKCRldmVudClcIj48L3dzLWFwcC1rYXJtYXBvaW50cy1wYW5lbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNBY2JwQ291cnNlICYmICFtb250aGx5Q2FwRXhjZWVkXCI+XG4gICAgICAgICAgICAgICAgPHdzLWFwcC1rYXJtYXBvaW50cy1wYW5lbCBbYnRudHlwZV09XCInU3RhcnQgYWdhaW4nXCIgW2RhdGFdPVwia3BhcnJheVwiPjwvd3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0FjYnBDb3Vyc2UgJiYgbW9udGhseUNhcEV4Y2VlZCAmJiAhaXNDb21wbGV0ZWRUaGlzTW9udGhcIj5cbiAgICAgICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidTdGFydCBhZ2FpbidcIiBbZGF0YV09XCJrcGFycmF5XCI+PC93cy1hcHAta2FybWFwb2ludHMtcGFuZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNQb3N0QXNzZXNzbWVudCAmJiBzaG93VGFrZUFzc2Vzc21lbnQ/LnBvc3RfYXNzZXNzbWVudFwiPlxuICAgICAgICAgICAgICA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidUYWtlIEFzc2Vzc21lbnQnXCIgW2RhdGFdPVwia3BhcnJheVwiPjwvd3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsPlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiaXNCYXRjaEluUHJvZ3Jlc3MgJiYgKGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuQ1VSQVRFRF9QUk9HUkFNICYmIGJhdGNoRGF0YT8uZW5yb2xsZWQpICYmICFlbnJvbGxCdG5Mb2FkaW5nXCI+XG4gICAgICAgIDxhICpuZ0lmPVwic2hvd1N0YXJ0LnNob3cgJiYgIWlzUG9zdEFzc2Vzc21lbnRcIiAoY2xpY2spPVwicmFpc2VUZWxlbWV0cnlGb3JQdWJsaWMoKVwiXG4gICAgICAgICAgW3JvdXRlckxpbmtdPVwicmVzdW1lRGF0YSA/IHJlc3VtZURhdGFMaW5rPy51cmwgOiBmaXJzdFJlc291cmNlTGluaz8udXJsXCJcbiAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwicmVzdW1lRGF0YSA/IGdlbmVyYXRlUXVlcnkoJ1JFU1VNRScpIDogZ2VuZXJhdGVRdWVyeSgnU1RBUlQnKVwiXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgcmVzdW1lXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCBjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA8IDEwMFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JQcmV2aWV3IHx8IGlzSW5JRnJhbWU7IGVsc2UgYXV0aFZpZXdcIj5cbiAgICAgICAgICAgICAge3sgcmVzdW1lRGF0YSAmJiAoY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgPCAxMDAgJiYgY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2U+IDApID9cbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVMYWJlbHMoJ3Jlc3VtZScsICdhcHB0b2Nob21lJykgOlxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUxhYmVscygncmVzdW1lJywgJ2FwcHRvY2hvbWUnKSB9fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDBcIj5cbiAgICAgICAgICAgIHt7IHJlc3VtZURhdGEgfHwgY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCA/IHRyYW5zbGF0ZUxhYmVscygnU3RhcnQgYWdhaW4nLCAnYXBwdG9jaG9tZScpIDpcbiAgICAgICAgICAgIHRyYW5zbGF0ZUxhYmVscygncmVzdW1lJywgJ2FwcHRvY2hvbWUnKSB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2E+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVucm9sbEJ0bkxvYWRpbmdcIj5cbiAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxMDAlJ1wiIFtoZWlnaHRdPVwiJzM2cHgnXCJcbiAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidmbGV4IHJvdW5kZWQgaC04J1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEN1cmF0ZWQgcHJvZ3JhbSBibG9jayAtLT5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LkNVUkFURURfUFJPR1JBTSAmJiAhYmF0Y2hEYXRhPy5lbnJvbGxlZCAmJiAhZW5yb2xsQnRuTG9hZGluZ1wiPlxuICAgICAgICA8YSBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlciByZXN1bWVcIiAqbmdJZj1cIiFmb3JQcmV2aWV3IHx8IGlzSW5JRnJhbWVcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVFbnJvbGxtZW50KClcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAge3sgJ2FwcHRvY2hvbWUuZW5yb2xsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2E+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwhLS0gU1RBTkRBTE9ORV9BU1NFU1NNRU5UIGJsYWNrIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuU1RBTkRBTE9ORV9BU1NFU1NNRU5UICYmICFiYXRjaERhdGE/LmVucm9sbGVkICYmICFlbnJvbGxCdG5Mb2FkaW5nICYmIGNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnkgIT09ICdJbnZpdGUtT25seSBBc3Nlc3NtZW50J1wiPlxuICAgICAgICA8YSBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlciByZXN1bWVcIiAoY2xpY2spPVwiaGFuZGxlRW5yb2xsbWVudCgpXCJcbiAgICAgICAgICAqbmdJZj1cIiFmb3JQcmV2aWV3IHx8IGlzSW5JRnJhbWVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAge3sgJ2FwcHRvY2hvbWUuZW5yb2xsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2E+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwhLS0gSU5WSVRFIE9OTFkgU1RBTkRBTE9ORSBBU1NFU1NNRU5UIGJsb2NrLS0+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5TVEFOREFMT05FX0FTU0VTU01FTlQgJiYgIWJhdGNoRGF0YT8uZW5yb2xsZWQgJiYgIWVucm9sbEJ0bkxvYWRpbmcgJiYgY29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0ludml0ZS1Pbmx5IEFzc2Vzc21lbnQnXCI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JQcmV2aWV3IHx8IGlzSW5JRnJhbWU7IGVsc2UgYXV0aFZpZXdGb3JJbnZpdGVPbmx5QXNzZXNzbWVudFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHNoYWRvdy1sZyB0ZXh0LWluZm8tZGl2XCI+e3sgJ2FwcHRvY2hvbWUueW91QXJlTm90SW52aXRlZEZvckFzc2Vzc21lbnQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuU1RBTkRBTE9ORV9BU1NFU1NNRU5UICYmIGJhdGNoRGF0YT8uZW5yb2xsZWQgJiYgaXNCYXRjaEluUHJvZ3Jlc3MgJiYgIWVucm9sbEJ0bkxvYWRpbmcgJiYgY29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0ludml0ZS1Pbmx5IEFzc2Vzc21lbnQnXCI+XG4gICAgICAgIDxhIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIHJlc3VtZVwiIFtyb3V0ZXJMaW5rXT1cImZpcnN0UmVzb3VyY2VMaW5rPy51cmxcIlxuICAgICAgICAgIFtxdWVyeVBhcmFtc109XCIocmVzdW1lRGF0YSAmJiAhY2VydERhdGEpID8gZ2VuZXJhdGVRdWVyeSgnUkVTVU1FJykgOiBnZW5lcmF0ZVF1ZXJ5KCdTVEFSVCcpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDBcIj57eyAnYXBwdG9jaG9tZS50YWtlVGVzdEFnYWluJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgPCAxMDBcIj57eyAnYXBwdG9jaG9tZS50YWtlVGVzdCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIiFpc0JhdGNoSW5Qcm9ncmVzcyAmJiAhIWN1cnJlbnRDb3Vyc2VCYXRjaElkICYmIGdldFN0YXJ0RGF0ZSA9PT0gJ05BJyAmJiBjb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5ID09PSAnSW52aXRlLU9ubHkgQXNzZXNzbWVudCdcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgc2hhZG93LWxnIHRleHQtaW5mby1kaXZcIj57eyAnYXBwdG9jaG9tZS5ub0FjdGl2ZUJhdGNoZXMnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiIWlzQmF0Y2hJblByb2dyZXNzICYmIGN1cnJlbnRDb3Vyc2VCYXRjaElkICYmIGdldFN0YXJ0RGF0ZSAhPT0gJ05BJyAmJiBjb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5ID09PSAnSW52aXRlLU9ubHkgQXNzZXNzbWVudCdcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgc2hhZG93LWxnIHRleHQtaW5mby1kaXZcIj57eyAnYXBwdG9jaG9tZS5iYXRjaFdpbGxTdGFydCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICB7e2dldFN0YXJ0RGF0ZX19ITwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIFNUQU5EQUxPTkVfQVNTRVNTTUVOVCBlbnJvbGxlZCBibGFjayAtLT5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LlNUQU5EQUxPTkVfQVNTRVNTTUVOVCAmJiBiYXRjaERhdGE/LmVucm9sbGVkICYmICFlbnJvbGxCdG5Mb2FkaW5nICYmIGNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnkgIT09ICdJbnZpdGUtT25seSBBc3Nlc3NtZW50J1wiPlxuICAgICAgICA8YSBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlciByZXN1bWVcIiBbcm91dGVyTGlua109XCJmaXJzdFJlc291cmNlTGluaz8udXJsXCJcbiAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwiKHJlc3VtZURhdGEgJiYgIWNlcnREYXRhKSA/IGdlbmVyYXRlUXVlcnkoJ1JFU1VNRScpIDogZ2VuZXJhdGVRdWVyeSgnU1RBUlQnKVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwXCI+e3sgJ2FwcHRvY2hvbWUudGFrZVRlc3RBZ2FpbicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlIDwgMTAwXCI+e3sgJ2FwcHRvY2hvbWUudGFrZVRlc3QnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2E+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwhLS0gQkxFTkRFRF9QUk9HUkFNIGJsb2NrIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNXCI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJhdGNoRGF0YT8ud29ya0Zsb3c/LndmSW5pdGlhdGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgIShiYXRjaERhdGE/LndvcmtGbG93Py53Zkl0ZW0/LmN1cnJlbnRTdGF0dXMgPT09IFdGQmxlbmRlZFByb2dyYW1TdGF0dXMuQVBQUk9WRUQgfHxcbiAgICAgICAgICAgICAgICAgICAgICBiYXRjaERhdGE/LndvcmtGbG93Py53Zkl0ZW0/LmN1cnJlbnRTdGF0dXMgPT09IFdGQmxlbmRlZFByb2dyYW1TdGF0dXMuUkVKRUNURUQgfHxcbiAgICAgICAgICAgICAgICAgICAgICBiYXRjaERhdGE/LndvcmtGbG93Py53Zkl0ZW0/LmN1cnJlbnRTdGF0dXMgPT09IFdGQmxlbmRlZFByb2dyYW1TdGF0dXMuV0lUSERSQVdOIHx8XG4gICAgICAgICAgICAgICAgICAgICAgYmF0Y2hEYXRhPy53b3JrRmxvdz8ud2ZJdGVtPy5jdXJyZW50U3RhdHVzID09PSBXRkJsZW5kZWRQcm9ncmFtU3RhdHVzLlJFTU9WRUQpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndzLW1hdC1hY2NlbnQtdGV4dCB3cy1tYXQtYWNjZW50LWxpZ2h0LWJnIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHN0YXR1c01zZ1wiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYXJnaW4tcmVtb3ZlLWJvdHRvbSBmb250LWJvbGRcIj5cbiAgICAgICAgICAgICAge3sgJ2FwcHRvY2hvbWUucmVxdWVzdFVuZGVyUmV2aWV3JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8YSAqbmdJZj1cInNob3dTdGFydC5zaG93ICYmIGJhdGNoRGF0YT8ud29ya0Zsb3c/LndmSW5pdGlhdGVkICYmIGJhdGNoRGF0YT8ud29ya0Zsb3c/LndmSXRlbT8uY3VycmVudFN0YXR1cyA9PT0gV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5BUFBST1ZFRFwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJpc0JhdGNoSW5Qcm9ncmVzcz8gKHJlc3VtZURhdGEgJiYgIWNlcnREYXRhKSA/IHJlc3VtZURhdGFMaW5rPy51cmwgOiBmaXJzdFJlc291cmNlTGluaz8udXJsIDogJycgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJyYWlzZVRlbGVtZXRyeUZvclB1YmxpYygpXCJcbiAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJpc0JhdGNoSW5Qcm9ncmVzcyA/IChyZXN1bWVEYXRhICYmICFjZXJ0RGF0YSkgPyBnZW5lcmF0ZVF1ZXJ5KCdSRVNVTUUnKSA6IGdlbmVyYXRlUXVlcnkoJ1NUQVJUJykgOiAnJyBcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgcmVzdW1lXCIgW25nQ2xhc3NdPVwieydkaXNhYmxlLXN0YXJ0LWJ0bic6ICFpc0JhdGNoSW5Qcm9ncmVzc31cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoIWNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlIDwgMTAwKSAmJiAhY2VydERhdGFcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JQcmV2aWV3IHx8IGlzSW5JRnJhbWU7IGVsc2UgYXV0aFZpZXdcIj5cbiAgICAgICAgICAgICAgICB7eyByZXN1bWVEYXRhICYmIChjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA8IDEwMCAmJiBjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZT4gMCkgP1xuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlTGFiZWxzKCdyZXN1bWUnLCAnYXBwdG9jaG9tZScpIDpcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUxhYmVscygnc3RhcnQnLCAnYXBwdG9jaG9tZScpIH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCB8fCBjZXJ0RGF0YVwiPlxuICAgICAgICAgICAgICB7eyByZXN1bWVEYXRhIHx8IGNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDAgPyB0cmFuc2xhdGVMYWJlbHMoJ1N0YXJ0IGFnYWluJywgJ2FwcHRvY2hvbWUnKSA6XG4gICAgICAgICAgICAgIHRyYW5zbGF0ZUxhYmVscygnc3RhcnQnLCAnYXBwdG9jaG9tZScpIH19XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb25CdG5TdGF0dXMgPT0gJ3JlamVjdCcgJiYgY29udGVudD8ucmVnaXN0cmF0aW9uVXJsXCI+XG4gICAgICAgIDxhIFtocmVmXT1cImNvbnRlbnQ/LnJlZ2lzdHJhdGlvblVybFwiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyXCI+e3tcbiAgICAgICAgICAnYXBwdG9jaG9tZS5yZWdpc3RlcicgfCB0cmFuc2xhdGUgfX08L2E+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjcHJvZ3Jlc3NGdW5jdGlvbmFsaXR5PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC00XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTQgdGV4dC1zbVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMSB0ZXh0LXhzXCI+e3sgJ2FwcHRvY3NpbmdsZXBhZ2Uub3ZlcmFsbFByb2dyZXNzJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteHNcIiAqbmdJZj1cImNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlID4gMFwiPiB7eyBjb250ZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSB9fSAlPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHdzLXdpZGdldC1jb250ZW50LXByb2dyZXNzICpuZ0lmPVwiY29udGVudD8uaWRlbnRpZmllclwiIFtmb3JQcmV2aWV3XT1cImZvclByZXZpZXdcIlxuICAgICAgICAgICAgW2NvbnRlbnRJZF09XCJjb250ZW50Py5pZGVudGlmaWVyXCIgW3Byb2dyZXNzXT1cImNvbnRlbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlXCIgW3Byb2dyZXNzVHlwZV09XCIncGVyY2VudGFnZSdcIlxuICAgICAgICAgICAgW2N1c3RvbUNsYXNzTmFtZV09XCInY29udGVudC1wcm9ncmVzcydcIj5cbiAgICAgICAgICA8L3dzLXdpZGdldC1jb250ZW50LXByb2dyZXNzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudENvbXBsZXRpb25QZXJjZW50ID49IDUwXCI+XG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicmF0ZS1idXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJvcGVuRmVlZGJhY2tEaWFsb2coY29udGVudClcIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJub2R0cmFuc2xhdGVcIj5zdGFyX3B1cnBsZTUwMDwvbWF0LWljb24+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF1c2VyUmF0aW5nXCI+XG4gICAgICAgICAgICA8ZGl2Pnt7ICdhcHB0b2NzaW5nbGVwYWdlLnJhdGVOb3cnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJSYXRpbmdcIj5cbiAgICAgICAgICAgIDxkaXY+e3sgJ2FwcHRvY3NpbmdsZXBhZ2UuZWRpdFJhdGluZycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8ZGl2IGNsYXNzPVwidG9jLWJhbm5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC02IGZpeGVkLXdpZHRoXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYmFubmVyLWRldGFpbHMgdG9jLWNvbnRlbnRcIiAjYmFubmVyRGV0YWlscz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWJhY2stYnRuXCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ0ZXh0LXdoaXRlXCI+YXJyb3dfYmFjazwvbWF0LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMTMycHgnXCIgW2hlaWdodF09XCInMzJweCdcIlxuICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMTQwcHgnXCIgW2hlaWdodF09XCInMjRweCdcIlxuICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHRhZy1kaXYgcm91bmRlZC0yeGwgZ2FwLTEgaXRlbXMtY2VudGVyIHAtMlwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwid3MtbWF0LW9yYW5nZS10ZXh0IG5vZHRyYW5zbGF0ZVwiPnZpZGVvX2xpYnJhcnk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteHMgZm9udC1ib2xkIHRleHQtd2hpdGUgbGVhZGluZy0zIG5vZHRyYW5zbGF0ZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlTGFiZWwoY29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSwgJ3NlYXJjaGZpbHRlcnMnKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteHMgZm9udC1ib2xkIHRleHQtd2hpdGUgbGVhZGluZy0zIG5vZHRyYW5zbGF0ZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlTGFiZWwoY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnksICdzZWFyY2hmaWx0ZXJzJykgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHRhZy1kaXYgcm91bmRlZC0yeGwgZ2FwLTEgaXRlbXMtY2VudGVyIHAtMlwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8uYWRkaXRpb25hbFRhZ3M/LmluY2x1ZGVzKCdpR09UIFNwZWNpYWxpemF0aW9uJylcIj5cbiAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhcHByb3ZlZC1pY29uXCIgc3JjPVwiLi9hc3NldHMvaWNvbnMvYXBwcm92ZWQuc3ZnXCIgYWx0PVwiYXBwcm92ZWRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LXdoaXRlIGxlYWRpbmctMyBub2R0cmFuc2xhdGVcIj57e1xuICAgICAgICAgICAgICAgICAgICAnY2FyZGNvbnRlbnR2Mi5pR09UU3BlY2lhbGl6YXRpb25Qcm9ncmFtJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gS25vd2xlZGdlIGxldmVsIGJsb2NrIGZvciBzZWFyY2ggYm94IC0tPlxuICAgICAgICAgICAgICAgIDwhLS0ge3tjb250ZW50Py5kaWZmaWN1bHR5TGV2ZWx9fSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5kaWZmaWN1bHR5TGV2ZWxcIiBjbGFzcz1cImtub3dsZWRnZS1sZXZlbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5kaWZmaWN1bHR5TGV2ZWw/LnRvTG93ZXJDYXNlKCkgPT09ICdiZWdpbm5lcidcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxldmVsLWJhZGdlIGJlZ2lubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJmYWxzZVwiIGNsYXNzPVwibGV2ZWwtYmFkZ2UgYmVnaW5uZXJcIj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIiNEQkY0RENcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjcgNUM3LjY3OTI3IDQuNTU1NTUgOC4zMjA3NyA0LjU1NTU2IDguNTc3MzcgNUwxMi4wNDE1IDExQzEyLjI5ODEgMTEuNDQ0NCAxMS45NzczIDEyIDExLjQ2NDEgMTJINC41MzU5MkM0LjAyMjcyIDEyIDMuNzAxOTcgMTEuNDQ0NCAzLjk1ODU3IDExTDcuNDIyNjcgNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM0OUM5NTFcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAge3tjb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8uZGlmZmljdWx0eUxldmVsPy50b0xvd2VyQ2FzZSgpID09PSAnaW50ZXJtZWRpYXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGV2ZWwtYmFkZ2UgaW50ZXJtZWRpYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJ0cnVlXCIgY2xhc3M9XCJsZXZlbC1iYWRnZSBpbnRlcm1lZGlhdGVcIj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIiNEMURCRUNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjcgMi42NjY2NkM3LjY3OTI3IDIuMjIyMjEgOC4zMjA3NyAyLjIyMjIxIDguNTc3MzcgMi42NjY2NkwxMi4wNDE1IDguNjY2NjZDMTIuMjk4MSA5LjExMTEgMTEuOTc3MyA5LjY2NjY2IDExLjQ2NDEgOS42NjY2Nkg0LjUzNTkyQzQuMDIyNzIgOS42NjY2NiAzLjcwMTk3IDkuMTExMSAzLjk1ODU3IDguNjY2NjZMNy40MjI2NyAyLjY2NjY2WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzFCNENBMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy40MjI2NyA1LjY2NjY2QzcuNjc5MjcgNS4yMjIyMSA4LjMyMDc3IDUuMjIyMjEgOC41NzczNyA1LjY2NjY2TDEyLjA0MTUgMTEuNjY2N0MxMi4yOTgxIDEyLjExMTEgMTEuOTc3MyAxMi42NjY3IDExLjQ2NDEgMTIuNjY2N0g0LjUzNTkyQzQuMDIyNzIgMTIuNjY2NyAzLjcwMTk3IDEyLjExMTEgMy45NTg1NyAxMS42NjY3TDcuNDIyNjcgNS42NjY2NlpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxQjRDQTFcIiBzdHJva2U9XCIjRDFEQkVDXCIgc3Ryb2tlLXdpZHRoPVwiMC41XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIHt7Y29udGVudFJlYWREYXRhPy5kaWZmaWN1bHR5TGV2ZWx9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbD8udG9Mb3dlckNhc2UoKSA9PT0gJ2FkdmFuY2VkJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGV2ZWwtYmFkZ2UgYWR2YW5jZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiAqbmdJZj1cImZhbHNlXCIgY2xhc3M9XCJsZXZlbC1iYWRnZSBhZHZhbmNlZFwiPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIiNGRkU2RTFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjQyMjY0IDIuMzMzMzRDNy42NzkyNCAxLjg4ODkgOC4zMjA3NCAxLjg4ODkgOC41NzczNCAyLjMzMzM0TDEyLjA0MTQgOC4zMzMzNEMxMi4yOTggOC43Nzc3OSAxMS45NzczIDkuMzMzMzQgMTEuNDY0MSA5LjMzMzM0SDQuNTM1ODlDNC4wMjI2OSA5LjMzMzM0IDMuNzAxOTQgOC43Nzc3OSAzLjk1ODU0IDguMzMzMzRMNy40MjI2NCAyLjMzMzM0WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkY4MjY4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy40MjI2NCA1QzcuNjc5MjQgNC41NTU1NSA4LjMyMDc0IDQuNTU1NTYgOC41NzczNCA1TDEyLjA0MTQgMTFDMTIuMjk4IDExLjQ0NDQgMTEuOTc3MyAxMiAxMS40NjQxIDEySDQuNTM1ODlDNC4wMjI2OSAxMiAzLjcwMTk0IDExLjQ0NDQgMy45NTg1NCAxMUw3LjQyMjY0IDVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRjgyNjhcIiBzdHJva2U9XCIjRkZFNkUxXCIgc3Ryb2tlLXdpZHRoPVwiMC41XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy40MjI2NCA3LjY2NjY5QzcuNjc5MjQgNy4yMjIyNCA4LjMyMDc0IDcuMjIyMjQgOC41NzczNCA3LjY2NjY5TDEyLjA0MTQgMTMuNjY2N0MxMi4yOTggMTQuMTExMSAxMS45NzczIDE0LjY2NjcgMTEuNDY0MSAxNC42NjY3SDQuNTM1ODlDNC4wMjI2OSAxNC42NjY3IDMuNzAxOTQgMTQuMTExMSAzLjk1ODU0IDEzLjY2NjdMNy40MjI2NCA3LjY2NjY5WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkY4MjY4XCIgc3Ryb2tlPVwiI0ZGRTZFMVwiIHN0cm9rZS13aWR0aD1cIjAuNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAge3tjb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIiAqbmdJZj1cImNiUGxhbkVuZERhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBkdWUtdGFnIHRleHQteHMgbGVhZGluZy0zXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydkdWUtd2FybmluZyc6IGNiUGxhbkR1cmF0aW9uID09PSBuc0NhcmRDb250ZW50RGF0YS5VUENPTUlORywgJ2R1ZS1vdmVyZHVlJzogY2JQbGFuRHVyYXRpb24gPT09IG5zQ2FyZENvbnRlbnREYXRhLk9WRVJEVUUsICdkdWUtc3VjY2Vzcyc6IGNiUGxhbkR1cmF0aW9uID09PSBuc0NhcmRDb250ZW50RGF0YS5TVUNDRVNTfVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmR1ZUJ5JyB8IHRyYW5zbGF0ZSB9fSAtICZuYnNwOzxzcGFuIGNsYXNzPVwiZm9udC1ib2xkXCI+e3sgY2JQbGFuRW5kRGF0ZSB8IGRhdGU6ICdkXG4gICAgICAgICAgICAgICAgICAgICAgTU1NLHknfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2tlbGV0b25Mb2FkZXIgJiYgY29udGVudFJlYWREYXRhPy5jb250ZW50VmVyc2lvbkluZm8/LmlkZW50aWZpZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldy12ZXJzaW9uLWNoaXAgcm91bmRlZC0yeGxcIiAoY2xpY2spPVwibmF2aWdhdGVUb05ld1ZlcnNpb24oKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwibmF2aWdhdGVUb05ld1ZlcnNpb24oKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmV3LXZlcnNpb24tdGV4dCBub2R0cmFuc2xhdGVcIj57eyAnYXBwdG9jLm5ld1ZlcnNpb24nIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHRleHQtd2hpdGUgbW9iLXNoYXJlXCIgKm5nSWY9XCJjYW5TaGFyZVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJub2R0cmFuc2xhdGVcIiAoY2xpY2spPVwib25DbGlja09mU2hhcmUoKVwiPnNoYXJlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2tlbGV0b25Mb2FkZXJcIj5cbiAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic5MCUnXCIgW2hlaWdodF09XCInMzJweCdcIlxuICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInNzAlJ1wiIFtoZWlnaHRdPVwiJzMycHgnXCJcbiAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5uZXItdGV4dCB0ZXh0LWJhc2Ugc206dGV4dC00eGwgbGVhZGluZy02IHNtOmxlYWRpbmctMTAgZm9udC1ib2xkIG5vZHRyYW5zbGF0ZVwiPnt7XG4gICAgICAgICAgICAgICAgaGFuZGxlQ2FwaXRhbGl6ZShjb250ZW50UmVhZERhdGE/Lm5hbWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIHNtOnRleHQtYmFzZSBzb3VyY2UtdGV4dCBmb250LXNlbWlib2xkIGJyZWFrLXdvcmRzIG5vZHRyYW5zbGF0ZVwiICNjb250ZW50U291cmNlXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzb3VyY2VFbGxpcHNpcyc6IHNvdXJjZUVsbGlwc2lzfVwiIHRpdGxlPVwie3tjb250ZW50UmVhZERhdGE/LnNvdXJjZX19XCI+e3sgJ2NhcmRjb250ZW50djIuYnknXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGUgfX0ge3sgY29udGVudFJlYWREYXRhPy5zb3VyY2UgfX08L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzEyMHB4J1wiIFtoZWlnaHRdPVwiJzQwcHgnXCJcbiAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCBibHVlLTItbG9hZGVyJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInODhweCdcIiBbaGVpZ2h0XT1cIicyNHB4J1wiXG4gICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTQgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHJhdGluZy1jaGlwIHB5LTIgaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlTmF2aWdhdGVUb1Jldmlld3MoKVwiICpuZ0lmPVwiY29udGVudD8uYXZlcmFnZVJhdGluZ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0xIG1hcmdpbi1sZWZ0LXMgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJub2R0cmFuc2xhdGVcIj5ncmFkZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC13aGl0ZSB0ZXh0LXNtIGxlYWRpbmctNFwiPnt7IGNvbnRlbnQ/LmF2ZXJhZ2VSYXRpbmcgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtd2hpdGUgdGV4dC1zbSBsZWFkaW5nLTQgbWFyZ2luLXJpZ2h0LW1cIj57eyBjb250ZW50Py50b3RhbFJhdGluZyB8IHBpcGVDb3VudFRyYW5zZm9ybSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCIgKm5nSWY9XCJjb250ZW50Py5hZGRpdGlvbmFsVGFncz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vc3QtZW5yb2xsZWQtY2hpcCB0ZXh0LXhzIGxlYWRpbmctM1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb250ZW50Py5hZGRpdGlvbmFsVGFncz8uaW5jbHVkZXMoJ21vc3RUcmVuZGluZycpXCI+e3sgJ2NhcmRjb250ZW50djIubW9zdFRyZW5kaW5nJyB8XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29udGVudD8uYWRkaXRpb25hbFRhZ3M/LmluY2x1ZGVzKCdtb3N0RW5yb2xsZWQnKVwiPnt7ICdjYXJkY29udGVudHYyLm1vc3RFbnJvbGxlZCcgfFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIiAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8ucmV0aXJlbWVudERhdGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV3LXZlcnNpb24tcGlsbCB0ZXh0LXhzIGxlYWRpbmctM1wiICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5zdGF0dXMgIT09ICdSZXRpcmVkJ1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ2FwcHRvYy5wZW5kaW5nUmV0aXJlbWVudCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldy12ZXJzaW9uLXJldGlyZS1waWxsIHRleHQteHMgbGVhZGluZy0zXCIgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LnN0YXR1cyA9PT0gJ1JldGlyZWQnXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnYXBwdG9jLnJldGlyZWQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxODBweCdcIiBbaGVpZ2h0XT1cIicyMHB4J1wiXG4gICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlciAmJiBjb250ZW50UmVhZERhdGE/LnNZU19JTlRFUk5BTF9MQVNUX1VQREFURURfT05cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIGxlYWRpbmctNCBzb3VyY2UtdGV4dCBub2R0cmFuc2xhdGVcIj4oe3sgJ2FwcHRvYy5sYXN0VXBkYXRlZE9uJyB8IHRyYW5zbGF0ZSB9fSB7e1xuICAgICAgICAgICAgICBjb250ZW50UmVhZERhdGE/LnNZU19JTlRFUk5BTF9MQVNUX1VQREFURURfT04gfCBkYXRlOiAnTU1NIGQsIHknIH19KTwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMlwiICpuZ0lmPVwibGFuZ3VhZ2VMaXN0Py5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0IGNsYXNzPVwibGFuZy1jaGlwc1wiPlxuICAgICAgICAgICAgICAgIDwhLS0gU2hvdyB1cCB0byA2IGNoaXBzIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxhbmcgb2YgbGFuZ3VhZ2VMaXN0IHwgc2xpY2U6MDo1OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9XCJtYXRjaGlwLWN1c3RvbVwiIHNlbGVjdGFibGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImxhbmc/LmlkZW50aWZpZXIgPT09IHNlbGVjdGVkTGFuZ3VhZ2U/LmlkZW50aWZpZXJcIiAoY2xpY2spPVwib25MYW5ndWFnZVNlbGVjdChsYW5nKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBsYW5nLm5hbWUgfHwgbGFuZy52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDwhLS0gXCJNb3JlXCIgY2hpcCBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIDYgbGFuZ3VhZ2VzIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYW5ndWFnZUxpc3QubGVuZ3RoID4gNVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIFttYXRNZW51VHJpZ2dlckZvcl09XCJtb3JlTGFuZ3VhZ2VzTWVudVwiIHNlbGVjdGFibGU9XCJmYWxzZVwiIGNsYXNzPVwibW9yZS1jaGlwIG1hdGNoaXAtY3VzdG9tXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWRJbk1vcmVEcm9wZG93bigpXCI+XG4gICAgICAgICAgICAgICAgICAgIE1vcmUgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb25cIj5rZXlib2FyZF9hcnJvd19kb3duPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21vcmVMYW5ndWFnZXNNZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGNsYXNzPVwibWF0LXJhZGlvLWdyb3VwIGZsZXggZmxleC1jb2wgZ2FwLTIgcC0zXCIgW3ZhbHVlXT1cInNlbGVjdGVkTGFuZ3VhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdGb3I9XCJsZXQgbGFuZyBvZiBsYW5ndWFnZUxpc3QgfCBzbGljZTo1XCIgW3ZhbHVlXT1cImxhbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwibGFuZz8uaWRlbnRpZmllciA9PT0gc2VsZWN0ZWRMYW5ndWFnZT8uaWRlbnRpZmllclwiIChjaGFuZ2UpPVwib25MYW5ndWFnZVNlbGVjdChsYW5nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbGFuZy5kaXNwbGF5TmFtZSB8fCBsYW5nLm5hbWUgfHwgbGFuZyB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTYgZml4ZWQtd2lkdGhcIj5cbiAgICA8ZGl2IGNsYXNzPVwidG9jLWNvbnRlbnRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSAmJlxuICAgICAgICBzZWxlY3RlZEJhdGNoRGF0YT8uY29udGVudFswXT8uYmF0Y2hBdHRyaWJ1dGVzPy5iYXRjaExvY2F0aW9uRGV0YWlscyAmJlxuICAgICAgICBzZWxlY3RlZEJhdGNoRGF0YT8uY29udGVudFswXT8uZW5yb2xsbWVudEVuZERhdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvY2F0aW9uLWRldGFpbHMgbXQtNlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBwYi0zXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJsb2NhdGlvbi1pY29uIG5vZHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICBsb2NhdGlvbl9vblxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2MtZGVzY1wiPlxuICAgICAgICAgICAgICB7e3NlbGVjdGVkQmF0Y2hEYXRhPy5jb250ZW50WzBdPy5iYXRjaEF0dHJpYnV0ZXM/LmJhdGNoTG9jYXRpb25EZXRhaWxzfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZXZlbnQtaWNvbiBub2R0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgZXZlbnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYy1kZXNjXCI+XG4gICAgICAgICAgICAgIExhc3QgZGF0ZSBvZiBlbnJvbGxtZW50IC0ge3tzZWxlY3RlZEJhdGNoRGF0YT8uY29udGVudFswXT8uZW5yb2xsbWVudEVuZERhdGUgfCBkYXRlOiAnZGQvTU0veXl5eSd9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVjb21tZW5kZWRDb3Vyc2VzSWQgJiYgIWZlZWRiYWNrR2l2ZW5cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB4LTQgcHktMyBtdC02IHJlbGV2ZW50LXdyYXBwZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNCBpdGVtcy1jZW50ZXIgZmxleC13cmFwIGZsZXgganVzdGlmeS1jZW50ZXIgbWQ6anVzdGlmeS1zdGFydFwiPlxuICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltYWdlcy9zYWtzaGFtQUkvbGFkeS1ncmVldC5zdmdcIiBhbHQ9XCJncmVldFwiIHdpZHRoPVwiNTYuODlcIiBoZWlnaHQ9XCI2NFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGV2ZW50LWluZm9cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGRlciB0ZXh0LXNtIHJlbGV2ZW50LWhlYWRpbmcgYmxvY2sgbWItMVwiPnt7ICdob21lLnRvY1JlbGV2ZW50SGVhZGluZycgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWxldmVudC1zdWJpbmZvIGZvbnQtbm9ybWFsIHRleHQtc20gYmxvY2tcIj57eyAnaG9tZS50b2NSZWxldmVudFN1YkhlYWRpbmcnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtbWlkZGxlIHJlbGV2YW50LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LW1pZGRsZSByZWxldmVudC1ub3JtYWwgcmVsZXZlbnQtYnRuIHB5LTIgcHgtNCByZWxldmFudC1ib3hcIlxuICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImlzUmVsZXZlbnRCdG5Ib3ZlcmVkID0gdHJ1ZVwiIChtb3VzZWxlYXZlKT1cImlzUmVsZXZlbnRCdG5Ib3ZlcmVkID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY2NlcHRSZWxldmVudCgpXCI+XG4gICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImlzUmVsZXZlbnRCdG5Ib3ZlcmVkICYmICFpc1JlbGV2ZW50ID8gU0FLU0hBTUFJX0lDT05fTE9BREVSIDogU0FLU0hBTUFJX0lDT05fTk9STUFMXCJcbiAgICAgICAgICAgICAgICAgIGFsdD1cImxvYWRlclwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGNsYXNzPVwibXItMlwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1yZWxldmVudCBmZi1sYXRvIHRleHQtc20gZm9udC1ib2xkXCI+e3sgJ2hvbWUucmVsZXZlbnQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LW1pZGRsZSBuby1idXR0b24gbWwtOFwiIChjbGljayk9XCJoYW5kbGVEZWNsaW5lUmVsZXZlbnQoKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uIHRleHQtbm8gbXItMSBub2R0cmFuc2xhdGVcIj50aHVtYl9kb3duPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbm8gZmYtbGF0byB0ZXh0LXNtIGZvbnQtYm9sZFwiPnt7ICdob21lLm5vJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYi00IGxnOnB5LTRcIlxuICAgICAgICAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciAmJiBjb250ZW50Py5pZGVudGlmaWVyICYmIGJhc2VDb250ZW50UmVhZERhdGE/LmlkZW50aWZpZXJcIj5cbiAgICAgICAgPCEtLSBPdmVyYWxsIHByb2dyZXNzIGZ1bmN0aW9uYWxpdHkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtcHJvZ3Jlc3NcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByb2dyZXNzRnVuY3Rpb25hbGl0eVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBPdmVyYWxsIHByb2dyZXNzIGZ1bmN0aW9uYWxpdHkgLS0+XG4gICAgICAgIDx3cy13aWRnZXQtY29udGVudC10b2MgW2NvbnRlbnRdPVwiY29udGVudFwiIFtjb21wb25lbnROYW1lXT1cIid0b2MnXCIgW3BhdGhTZXRdPVwicGF0aFNldFwiXG4gICAgICAgICAgW3RvY1N0cnVjdHVyZV09XCJ0b2NTdHJ1Y3R1cmVcIiBbZm9yUHJldmlld109XCJmb3JQcmV2aWV3XCIgW2lzRW5yb2xsZWRdPVwiYmF0Y2hEYXRhPy5lbnJvbGxlZFwiXG4gICAgICAgICAgW3Jlc3VtZURhdGFdPVwicmVzdW1lRGF0YVwiIFtiYXRjaERhdGFdPVwic2VsZWN0ZWRCYXRjaERhdGFcIiBbc2tlbGV0b25Mb2FkZXJdPVwic2tlbGV0b25Mb2FkZXJcIlxuICAgICAgICAgIFtjaGFuZ2VUYWJdPVwiY2hhbmdlVGFiXCIgW2hpZXJhcmNoeU1hcERhdGFdPVwidG9jU3ZjPy5oYXNobWFwXCIgW3NlbGVjdGVkQmF0Y2hEYXRhXT1cInNlbGVjdGVkQmF0Y2hEYXRhXCJcbiAgICAgICAgICBbY29uZGl0aW9uXT1cIntpc1Bvc3RBc3Nlc3NtZW50OiBpc1Bvc3RBc3Nlc3NtZW50LCBjb250ZW50OiBjb250ZW50LCBpc0FjYnBDb3Vyc2U6IGlzQWNicENvdXJzZSwgaXNDbGFpbWVkOiBpc0NsYWltZWQsIG1vbnRobHlDYXBFeGNlZWQ6IG1vbnRobHlDYXBFeGNlZWQsIGlzQ29tcGxldGVkVGhpc01vbnRoOiBpc0NvbXBsZXRlZFRoaXNNb250aCwgc2hvd1Rha2VBc3Nlc3NtZW50OiBzaG93VGFrZUFzc2Vzc21lbnQsIHVzZXJFbnJvbGxtZW50TGlzdDogdXNlckVucm9sbG1lbnRMaXN0LCByZXN1bWVEYXRhOiByZXN1bWVEYXRhLCB1c2VyUmF0aW5nOiB1c2VyUmF0aW5nLCBlbnJvbGxCdG5Mb2FkaW5nOiBlbnJvbGxCdG5Mb2FkaW5nLCBwcmltYXJ5Q2F0ZWdvcnk6IHByaW1hcnlDYXRlZ29yeSwgY3VycmVudENvdXJzZUJhdGNoSWQ6IGN1cnJlbnRDb3Vyc2VCYXRjaElkLCBpc0FjYnBDbGFpbTogaXNBY2JwQ2xhaW19XCJcbiAgICAgICAgICBba3BhcnJheV09XCJrcGFycmF5XCIgKHBsYXlSZXN1bWVGb3JBSSk9XCJwbGF5UmVzdW1lRm9yQUkoKVwiIChlbnJvbGxVc2VyVG9BSSk9XCJlbnJvbGxVc2VyVG9BSSgpXCJcbiAgICAgICAgICBbY29udGVudFJlYWREYXRhXT1cImNvbnRlbnRSZWFkRGF0YVwiIFtiYXNlQ29udGVudFJlYWREYXRhXT1cImJhc2VDb250ZW50UmVhZERhdGFcIiBbbGFuZ3VhZ2VMaXN0XT1cImxhbmd1YWdlTGlzdFwiXG4gICAgICAgICAgW2xvY2tDZXJ0aWZpY2F0ZV09XCJsb2NrQ2VydGlmaWNhdGVcIiAodHJpZ2VyQ29tcGxldGlvblN1cnZleUZvcm0pPVwib3BlblN1cnZleUZvcm1Qb3B1cCgkZXZlbnQpXCJcbiAgICAgICAgICAocmVzdW1lQ29udGVudCk9XCJyZXN1bWVDb250ZW50RGF0YSgpXCI+PC93cy13aWRnZXQtY29udGVudC10b2M+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2ItdGlwLWZvci1sZWFybmVyXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImxlYXJuQWR2aXNvcnlEYXRhICYmIGxlYXJuQWR2aXNvcnlEYXRhPy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDx3cy13aWRnZXQtdGlwcy1mb3ItbGVhcm5lci1jYXJkIFtsZWFybkFkdmlzb3J5RGF0YV09XCJsZWFybkFkdmlzb3J5RGF0YVwiPjwvd3Mtd2lkZ2V0LXRpcHMtZm9yLWxlYXJuZXItY2FyZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuXG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0LWNvbnRhaW5lclwiPlxuXG4gICAgICA8IS0tIGlmIG5lZWRlZCBzdGlja3kgb2YgcmlnaHQgY29udGFpbmVyIGFkZCB0aGlzIHRvIGJlbG93IGRpdiA9PiAjcmlnaHRDb250YWluZXIgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtY29udGVudC1pbm5lclwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIiczODRweCdcIiBbaGVpZ2h0XT1cIicyMjRweCdcIlxuICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpbWFnZS1kaXZcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICdiYWNrZ3JvdW5kLWltYWdlJzogJ3VybCgnICsgY29udGVudFJlYWREYXRhPy5wb3N0ZXJJbWFnZSArICcpJywgJ2JhY2tncm91bmQtcmVwZWF0JzogJ25vLXJlcGVhdCcsICdiYWNrZ3JvdW5kLXNpemUnOiAnY292ZXInfVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW1hZ2UtYmFja2Ryb3AnOiBzY3JvbGxlZH1cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIHRleHQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00IGp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2p1c3RpZnktYmV0d2Vlbic6IHNjcm9sbGVkLCAnanVzdGlmeS1lbmQnOiAhc2Nyb2xsZWR9XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyB0YWctZGl2IHJvdW5kZWQtMnhsIGdhcC0xIGl0ZW1zLWNlbnRlciBwLTJcIiAqbmdJZj1cInNjcm9sbGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIndzLW1hdC1vcmFuZ2UtdGV4dCBub2R0cmFuc2xhdGVcIj52aWRlb19saWJyYXJ5PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8uY291cnNlQ2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBmb250LWJvbGQgdGV4dC13aGl0ZSBsZWFkaW5nLTNcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlTGFiZWwoY29udGVudFJlYWREYXRhPy5jb3Vyc2VDYXRlZ29yeSwgJ3NlYXJjaGZpbHRlcnMnKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteHMgZm9udC1ib2xkIHRleHQtd2hpdGUgbGVhZGluZy0zXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUxhYmVsKGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5LCAnc2VhcmNoZmlsdGVycycpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvbkNsaWNrT2ZTaGFyZSgpXCIgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBnYXAtMiBzaGFyZS10YWdcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNhblNoYXJlICYmICFmb3JQcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm5vZHRyYW5zbGF0ZVwiPnNoYXJlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj57eyAnYXBwdG9jc2luZ2xlcGFnZS5zaGFyZScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCIgKm5nSWY9XCJzY3JvbGxlZFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteGwgbGVhZGluZy02IHRleHQtd2hpdGUgZm9udC1ib2xkXCI+e3sgaGFuZGxlQ2FwaXRhbGl6ZShjb250ZW50UmVhZERhdGE/Lm5hbWUpIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIHNvdXJjZS10ZXh0IGZvbnQtc2VtaWJvbGQgYnJlYWstd29yZHNcIiAjY29udGVudFNvdXJjZVxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NvdXJjZUVsbGlwc2lzJzogc291cmNlRWxsaXBzaXN9XCIgdGl0bGU9XCJ7e2NvbnRlbnRSZWFkRGF0YT8uc291cmNlfX1cIj57e1xuICAgICAgICAgICAgICAgICAgICAnY2FyZGNvbnRlbnR2Mi5ieScgfCB0cmFuc2xhdGUgfX0ge3sgY29udGVudFJlYWREYXRhPy5zb3VyY2UgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTQgcC01IGJvcmRlci1ib3R0b21cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xICBjdXJzb3ItcG9pbnRlciBzd2l0Y2gtdmVyc2lvblwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyICYmIGNvbnRlbnRSZWFkRGF0YT8uY29udGVudFZlcnNpb25JbmZvPy5pZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlVG9OZXdWZXJzaW9uKClcIiAoa2V5ZG93bik9XCJuYXZpZ2F0ZVRvTmV3VmVyc2lvbigpXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLXN3aXRjaFwiPnt7ICdhcHB0b2Muc3dpdGNoVG9OZXdWZXJzaW9uJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29udGVudFJlYWREYXRhICYmIGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0zIGp1c3RpZnktYXJvdW5kXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhdGNoLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LWJhc2UgZm9udC1ib2xkXCI+e3sgc2VsZWN0ZWRCYXRjaERhdGE/LmNvbnRlbnRbMF0/LmJhdGNoQXR0cmlidXRlcz8uY3VycmVudEJhdGNoU2l6ZVxuICAgICAgICAgICAgICAgICAgICB8fCAnMCcgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXRjaC1sYWJlbFwiPnt7ICdhcHB0b2MuYmF0Y2hTaXplJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXRjaC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1iYXNlIGZvbnQtYm9sZFwiPnt7IHNlbGVjdGVkQmF0Y2hEYXRhPy51c2VyQ291bnQ/LnRvdGFsQXBwbGllZCB8fCAnMCcgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXRjaC1sYWJlbFwiPnt7ICdhcHB0b2MudG90YWxBcHBsaWVkJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXRjaC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1iYXNlIGZvbnQtYm9sZFwiPnt7IHNlbGVjdGVkQmF0Y2hEYXRhPy51c2VyQ291bnQ/LmVucm9sbGVkIHx8ICcwJyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhdGNoLWxhYmVsXCI+e3sgJ2FwcHRvYy50b3RhbEVucm9sbGVkJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0gJiYgIXByZUFzc2Vzc21lbnRDb21wbGV0aW9uU3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24gZW5yb2xsLWJ0biBqdXN0aWZ5LWNlbnRlciByZXN1bWVcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LnByZUVucm9sbWVudFJlc291cmNlcz8ubGVuZ3RoXCIgKGNsaWNrKT1cInJvdXRlVG9QcmVBc3Nlc3NlbnQoKVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ2FwcHRvY2hvbWUucHJlRW5yb2xsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0gJiYgcHJlQXNzZXNzbWVudENvbXBsZXRpb25TdGF0dXNcIj5cbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZsZXggcHJlZW5yb2xsZG9uZS1idG4ganVzdGlmeS1jZW50ZXIgcmVzdW1lXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICB7eyAnYXBwdG9jaG9tZS5wcmVFbnJvbGxEb25lJyB8IHRyYW5zbGF0ZSB9fTxpbWcgc3JjPVwiL2Fzc2V0cy9pY29ucy9BY2NlcHRfaWNvbi5wbmdcIiBhbHQ9XCJ0aWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRpY2staWNvblwiPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwidGltZXIgJiYgdGltZXIuZGF5cyA+PSAwICYmIGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTYgYmF0Y2gtdGltZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB1bmRlcmxpbmVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWVyLWxhYmVsXCI+e3sgJ2FwcHRvY3NpbmdsZXBhZ2UuYmF0Y2hTdGFydHNJbicgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB1bmRlcmxpbmVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC00IGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0xIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LTR4bCBsZWFkaW5nLTEwIGNvdW50ZXJcIj57eyB0aW1lci5kYXlzIHx8IDAgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRlci1sYWJlbFwiPnt7ICdhcHB0b2NzaW5nbGVwYWdlLmRheXMnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgY291bnRlci1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0xIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LTR4bCBsZWFkaW5nLTEwIGNvdW50ZXJcIj57eyB0aW1lci5taW4gPT09IDYwID8gdGltZXIuaG91cnMgKyAxIDogdGltZXIuaG91cnMgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRlci1sYWJlbFwiPnt7ICdhcHB0b2NzaW5nbGVwYWdlLmhvdXJzJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGNvdW50ZXItbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMSBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC00eGwgbGVhZGluZy0xMCBjb3VudGVyXCI+e3sgdGltZXIubWluID09PSA2MCA/IDAwIDogdGltZXIubWluIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXItbGFiZWxcIj57eyAnYXBwdG9jc2luZ2xlcGFnZS5taW51dGVzJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JQcmV2aWV3IHx8IGlzSW5JRnJhbWU7IGVsc2UgYXV0aFZpZXdCdG5cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW1vYmlsZTEyMDAgJiYgKFxuICAgICAgICAgIWNvbnRlbnRSZWFkRGF0YT8ucHJlRW5yb2xtZW50UmVzb3VyY2VzPy5sZW5ndGggfHxcbiAgICAgICAgIChjb250ZW50UmVhZERhdGE/LnByZUVucm9sbWVudFJlc291cmNlcz8ubGVuZ3RoICYmIChwcmVBc3Nlc3NtZW50Q29tcGxldGlvblN0YXR1cyB8fCAgIXByZUFzc2Vzc21lbnRSZXF1aXJlZEZsYWcpKVxuICAgICAgIClcIj5cblxuICAgICAgICAgICAgICAgICAgPHdzLWFwcC10b2MtYmFubmVyIHJvbGU9XCJiYW5uZXJcIiBbYmFubmVyc109XCJiYW5uZXJzXCIgW2ZvclByZXZpZXddPVwiZm9yUHJldmlld1wiIFtjb250ZW50XT1cImNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbdXNlckVucm9sbG1lbnRMaXN0XT1cInVzZXJFbnJvbGxtZW50TGlzdFwiICh3aXRoZHJhd09yRW5yb2xsKT1cIndpdGhkcmF3T3JFbnJvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFthbmFseXRpY3NdPVwiYW5hbHl0aWNzXCIgW3Jlc3VtZURhdGFdPVwicmVzdW1lRGF0YVwiIFtiYXRjaERhdGFdPVwiYmF0Y2hEYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRSZWFkRGF0YV09XCJjb250ZW50UmVhZERhdGFcIj5cbiAgICAgICAgICAgICAgICAgIDwvd3MtYXBwLXRvYy1iYW5uZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMzM2cHgnXCIgW2hlaWdodF09XCInNDBweCdcIlxuICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzMzNnB4J1wiIFtoZWlnaHRdPVwiJzY4cHgnXCJcbiAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGdhcC0yIGluZm8tZGl2XCIgKm5nSWY9XCJjb250ZW50Py5pc0luSW50cmFuZXQgJiYgc2hvd0ludHJhbmV0TXNnXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJub2R0cmFuc2xhdGVcIj5pbmZvPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+e3sgJ2FwcHRvY2hvbWUudmlld2VkSW5JbnRyYW5ldCcgfCB0cmFuc2xhdGUgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIgZ2FwLTIgaW5mby1kaXZcIiAqbmdJZj1cInNob3dJbnN0cnVjdG9yTGVkTXNnXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJub2R0cmFuc2xhdGVcIj5pbmZvPC9tYXQtaWNvbj4mbmJzcDtcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+e3sgJ2FwcHRvY2hvbWUubm90QXZhaWxhYmxlT25saW5lJyB8IHRyYW5zbGF0ZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBnYXAtMiBpbmZvLWRpdlwiICpuZ0lmPVwic2hvd1N0YXJ0Lm1zZyA9PT0gJ3lvdXR1YmVGb3JiaWRkZW4nXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJub2R0cmFuc2xhdGVcIj5pbmZvPC9tYXQtaWNvbj4mbmJzcDtcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+e3sgJ2FwcHRvY2hvbWUueW91dHViZUNvbnRlbnRCbG9ja2VkJyB8IHRyYW5zbGF0ZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QnRuXCI+XG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3sgY3NjbXNVcmwgfX1cIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnYXBwdG9jaG9tZS5hcHBseUZvclBoeXNpY2FsVHJhaW5pbmcnIHwgdHJhbnNsYXRlIH19PC9hPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBPdmVyYWxsIHByb2dyZXNzIGZ1bmN0aW9uYWxpdHkgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnQ/LmNvbXBsZXRpb25TdGF0dXMgPD0gMiAmJiBpc0JhdGNoSW5Qcm9ncmVzc1wiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9ncmVzc0Z1bmN0aW9uYWxpdHlcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8IS0tIE92ZXJhbGwgcHJvZ3Jlc3MgZnVuY3Rpb25hbGl0eSAtLT5cblxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cInJlc3VtZURhdGEgJiYgIXVzZXJSYXRpbmdcIj4gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSA8d3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsIFtidG50eXBlXT1cIidSYXRlIHRoaXMgY291cnNlJ1wiIFtkYXRhXT1cImtwYXJyYXlcIlxuICAgICAgICAgICAgICAgICAgW3BDYXRlZ29yeV09XCJjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeVwiPjwvd3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsPiAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cInJlc3VtZURhdGEgJiYgdXNlclJhdGluZ1wiPlxuICAgICAgICAgICAgICAgIDx3cy1hcHAta2FybWFwb2ludHMtcGFuZWwgW2J0bnR5cGVdPVwiJ0VkaXQgcmF0aW5nJ1wiIFtkYXRhXT1cImtwYXJyYXlcIlxuICAgICAgICAgICAgICAgICAgW3BDYXRlZ29yeV09XCJjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeVwiPjwvd3MtYXBwLWthcm1hcG9pbnRzLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbkJ0blN0YXR1cyAhPT0gJ3dhaXQnICYmIGNvbnRlbnRSZWFkRGF0YT8uc3RhdHVzICE9PSAnRGVsZXRlZCcgJiYgY29udGVudFJlYWREYXRhPy5zdGF0dXMgIT09ICdFeHBpcmVkJ1wiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJlbnJvbGxGdW5jdGlvbmFsaXR5XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYXJtYS1wb2ludHMtZGl2XCI+XG4gICAgICAgICAgICAgICAgPHdzLXdpZGdldC1rYXJtYS1wb2ludHMgW2RhdGFdPVwia3BhcnJheVwiIChjbGlja0NsYWltS2FybWFQb2ludHMpPVwib25DbGlja09mQ2xhaW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbY29udGVudF09XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgIFtjb25kaXRpb25dPVwie2lzUG9zdEFzc2Vzc21lbnQ6IGlzUG9zdEFzc2Vzc21lbnQsIGNvbnRlbnQ6IGNvbnRlbnQsIGlzQWNicENvdXJzZTogaXNBY2JwQ291cnNlLCBpc0NsYWltZWQ6IGlzQ2xhaW1lZCwgbW9udGhseUNhcEV4Y2VlZDogbW9udGhseUNhcEV4Y2VlZCwgaXNDb21wbGV0ZWRUaGlzTW9udGg6IGlzQ29tcGxldGVkVGhpc01vbnRoLCBzaG93VGFrZUFzc2Vzc21lbnQ6IHNob3dUYWtlQXNzZXNzbWVudCwgdXNlckVucm9sbG1lbnRMaXN0OiB1c2VyRW5yb2xsbWVudExpc3QsIGlzQ29tcGxldGVkVGhpc01vbnRoOiBpc0NvbXBsZXRlZFRoaXNNb250aCwgcmVzdW1lRGF0YTogcmVzdW1lRGF0YSwgdXNlclJhdGluZzogdXNlclJhdGluZywgZW5yb2xsQnRuTG9hZGluZzogZW5yb2xsQnRuTG9hZGluZywgcHJpbWFyeUNhdGVnb3J5OiBwcmltYXJ5Q2F0ZWdvcnksIGN1cnJlbnRDb3Vyc2VCYXRjaElkOiBjdXJyZW50Q291cnNlQmF0Y2hJZCwgaXNBY2JwQ2xhaW06IGlzQWNicENsYWltfVwiPjwvd3Mtd2lkZ2V0LWthcm1hLXBvaW50cz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtNlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMiBrcGktbG9hZGVyLWRpdlwiPlxuICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicyOHB4J1wiIFtoZWlnaHRdPVwiJzI4cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzQ4cHgnXCIgW2hlaWdodF09XCInOHB4J1wiXG4gICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMiBrcGktbG9hZGVyLWRpdlwiPlxuICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicyOHB4J1wiIFtoZWlnaHRdPVwiJzI4cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzQ4cHgnXCIgW2hlaWdodF09XCInOHB4J1wiXG4gICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMiBrcGktbG9hZGVyLWRpdlwiPlxuICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicyOHB4J1wiIFtoZWlnaHRdPVwiJzI4cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzQ4cHgnXCIgW2hlaWdodF09XCInOHB4J1wiXG4gICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMiBrcGktbG9hZGVyLWRpdlwiPlxuICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicyOHB4J1wiIFtoZWlnaHRdPVwiJzI4cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzQ4cHgnXCIgW2hlaWdodF09XCInOHB4J1wiXG4gICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMiBrcGktbG9hZGVyLWRpdlwiPlxuICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicyOHB4J1wiIFtoZWlnaHRdPVwiJzI4cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzQwcHgnXCIgW2hlaWdodF09XCInOHB4J1wiXG4gICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic0OHB4J1wiIFtoZWlnaHRdPVwiJzhweCdcIlxuICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXRvYy1rcGktdmFsdWVzIFtjb250ZW50XT1cImNvbnRlbnRcIiBbdG9jU3RydWN0dXJlXT1cInRvY1N0cnVjdHVyZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dJbnN0cnVjdG9yTGVkTXNnXT1cInNob3dJbnN0cnVjdG9yTGVkTXNnXCIgW2NvbnRlbnRSZWFkRGF0YV09XCJjb250ZW50UmVhZERhdGFcIlxuICAgICAgICAgICAgICAgIFtsYW5ndWFnZUxpc3RdPVwibGFuZ3VhZ2VMaXN0XCI+PC93cy13aWRnZXQtdG9jLWtwaS12YWx1ZXM+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC04IHAtNVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00XCIgKm5nRm9yPVwibGV0IGkgb2YgWzEsIDJdXCI+XG4gICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic3MnB4J1wiIFtoZWlnaHRdPVwiJzIwcHgnXCJcbiAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzM2cHgnXCIgW2hlaWdodF09XCInMzZweCdcIlxuICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkLWZ1bGwnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxMjRweCdcIiBbaGVpZ2h0XT1cIicyMHB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMTI0cHgnXCIgW2hlaWdodF09XCInMTJweCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2tlbGV0b25Mb2FkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTNcIiAqbmdJZj1cImhhbmRsZVBhcnNlSnNvbkRhdGEoY29udGVudFJlYWREYXRhPy5jcmVhdG9yRGV0YWlscyk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1ib2xkXCI+e3sgJ2FwcHRvY3NpbmdsZXBhZ2UuYXV0aG9ycycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtNCBpdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGF1dGhvciBvZiBoYW5kbGVQYXJzZUpzb25EYXRhKGNvbnRlbnRSZWFkRGF0YT8uY3JlYXRvckRldGFpbHMpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1hdmF0YXItcGhvdG8gW3JhbmRvbUNvbG9yXT1cInRydWVcIiBbZGF0YWxlbl09XCIxXCIgW3NpemVdPVwiJ3JvdW5kLW0nXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcGhvdG9VcmxdPVwiYXV0aG9yPy5waG90byB8fCAnJ1wiIFtuYW1lXT1cImF1dGhvcj8ubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1hdmF0YXItcGhvdG8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LWJvbGRcIj57eyBoYW5kbGVDYXBpdGFsaXplKGF1dGhvcj8ubmFtZSwgJ25hbWUnKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBsZWFkaW5nLTNcIj57eyAnYXBwdG9jc2luZ2xlcGFnZS5hdXRob3InIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0zXCIgKm5nSWY9XCJoYW5kbGVQYXJzZUpzb25EYXRhKGNvbnRlbnRSZWFkRGF0YT8uY3JlYXRvckNvbnRhY3RzKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGRcIj57eyAnYXBwdG9jc2luZ2xlcGFnZS5jcmVhdG9ycycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtNCBpdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNyZWVhdG9yIG9mIGhhbmRsZVBhcnNlSnNvbkRhdGEoY29udGVudFJlYWREYXRhPy5jcmVhdG9yQ29udGFjdHMpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1hdmF0YXItcGhvdG8gW3JhbmRvbUNvbG9yXT1cInRydWVcIiBbZGF0YWxlbl09XCIxXCIgW3NpemVdPVwiJ3JvdW5kLW0nXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcGhvdG9VcmxdPVwiY3JlZWF0b3I/LnBob3RvIHx8ICcnXCIgW25hbWVdPVwiY3JlZWF0b3I/Lm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC93cy13aWRnZXQtYXZhdGFyLXBob3RvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMSBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1ib2xkXCI+e3sgaGFuZGxlQ2FwaXRhbGl6ZShjcmVlYXRvcj8ubmFtZSwgJ25hbWUnKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBsZWFkaW5nLTNcIj57eyAnYXBwdG9jc2luZ2xlcGFnZS5jcmVhdG9yJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LnNvdXJjZSAgJiYgKGNvbnRlbnRDcmVhdG9yRGF0YSAmJiBjb250ZW50Q3JlYXRvckRhdGE/Lmxlbmd0aClcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtYm9sZFwiPnt7ICdhcHB0b2NzaW5nbGVwYWdlLnByb3ZpZGVyJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC00IGl0ZW1zLWNlbnRlclwiICpuZ0Zvcj1cImxldCBjcmVhdG9yIG9mIGNvbnRlbnRDcmVhdG9yRGF0YVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggcHJvdmlkZXItbG9nby1kaXZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8uY3JlYXRvckxvZ29cIiBbc3JjXT1cImNvbnRlbnRSZWFkRGF0YT8uY3JlYXRvckxvZ29cIlxuICAgICAgICAgICAgICAgICAgICAgIGFsdD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLnByb3ZpZGVyJyB8IHRyYW5zbGF0ZSB9fVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCIhY29udGVudFJlYWREYXRhPy5jcmVhdG9yTG9nb1wiIGNsYXNzPVwibWF0LWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIHNyYz1cIi9hc3NldHMvaW5zdGFuY2VzL2VhZ2xlL2FwcF9sb2dvcy9LYXJtYXlvZ2lCaGFyYXRfTG9nby5zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgIGFsdD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLnByb3ZpZGVyJyB8IHRyYW5zbGF0ZSB9fVwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIHdvcmQtYnJlYWsgY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8uY3JlYXRlZEZvcj8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJhaXNlVGVsZW1ldGVyeUZvclByb3ZpZGVyKGNvbnRlbnRSZWFkRGF0YT8uc291cmNlLCBjb250ZW50UmVhZERhdGE/LmNyZWF0ZWRGb3JbMF0pXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvYXBwL2xlYXJuL2Jyb3dzZS1ieS9wcm92aWRlcicsIGNvbnRlbnRSZWFkRGF0YT8uc291cmNlLCBjb250ZW50UmVhZERhdGE/LmNyZWF0ZWRGb3JbMF0sICdtaWNyby1zaXRlcyddXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGhhbmRsZUNhcGl0YWxpemUoY29udGVudFJlYWREYXRhPy5zb3VyY2UsICdzb3VyY2UnKSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSB3b3JkLWJyZWFrXCIgKm5nSWY9XCIhY29udGVudFJlYWREYXRhPy5jcmVhdGVkRm9yPy5sZW5ndGhcIj57e1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVDYXBpdGFsaXplKGNvbnRlbnRSZWFkRGF0YT8uc291cmNlLCAnc291cmNlJykgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwibGVhcm5BZHZpc29yeURhdGEgJiYgbGVhcm5BZHZpc29yeURhdGE/Lmxlbmd0aFwiPlxuICAgICAgICAgIDx3cy13aWRnZXQtdGlwcy1mb3ItbGVhcm5lci1jYXJkIFtsZWFybkFkdmlzb3J5RGF0YV09XCJsZWFybkFkdmlzb3J5RGF0YVwiPjwvd3Mtd2lkZ2V0LXRpcHMtZm9yLWxlYXJuZXItY2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuXG5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJtb2JpbGUtZW5yb2xsLWRpdlwiXG4gICAgW25nQ2xhc3NdPVwieydiZy13aGl0ZSc6IGNvbnRlbnRSZWFkRGF0YT8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNIH1cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudCAmJiBjb250ZW50UmVhZERhdGE/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCIgKm5nSWY9XCJtb2JpbGUxMjAwICYmICFmb3JQcmV2aWV3IHx8IGlzSW5JRnJhbWU7IGVsc2UgYXV0aFZpZXdCdG5cIj5cbiAgICAgICAgPHdzLWFwcC10b2MtYmFubmVyIHJvbGU9XCJiYW5uZXJcIiBbYmFubmVyc109XCJiYW5uZXJzXCIgW2ZvclByZXZpZXddPVwiZm9yUHJldmlld1wiIFtjb250ZW50XT1cImNvbnRlbnRcIlxuICAgICAgICAgIFt1c2VyRW5yb2xsbWVudExpc3RdPVwidXNlckVucm9sbG1lbnRMaXN0XCIgKHdpdGhkcmF3T3JFbnJvbGwpPVwid2l0aGRyYXdPckVucm9sbCgkZXZlbnQpXCJcbiAgICAgICAgICBbYW5hbHl0aWNzXT1cImFuYWx5dGljc1wiIFtyZXN1bWVEYXRhXT1cInJlc3VtZURhdGFcIiBbYmF0Y2hEYXRhXT1cImJhdGNoRGF0YVwiIFtjb250ZW50UmVhZERhdGFdPVwiY29udGVudFJlYWREYXRhXCI+XG4gICAgICAgIDwvd3MtYXBwLXRvYy1iYW5uZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVucm9sbEZ1bmN0aW9uYWxpdHlcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPHdzLWFwcC1zaGFyZS10b2MgKm5nSWY9XCJlbmFibGVTaGFyZVwiIFtyb290T3JnSWRdPVwicm9vdE9yZ0lkXCIgW2NvbnRlbnRdPVwiY29udGVudFwiXG4gICAgKHJlc2V0RW5hYmxlU2hhcmUpPVwicmVzZXRFbmFibGVTaGFyZSgkZXZlbnQpXCIgW2Jhc2VDb250ZW50UmVhZERhdGFdPVwiYmFzZUNvbnRlbnRSZWFkRGF0YVwiPjwvd3MtYXBwLXNoYXJlLXRvYz5cbjwvbmctY29udGFpbmVyPlxuPG5nLXRlbXBsYXRlICNub0RhdGFGb3VuZD5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZXJyb3Itbm90LWZvdW5kIGZsZXggZmxleC13cmFwcGVkIG1hcmdpbi1sZWZ0LW0gbWFyZ2luLXRvcC14bCBtYXJnaW4tcmlnaHQtbSBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbG9nb1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2Ugd3MtbWF0LXByaW1hcnktdGV4dCBmb250LXdlaWdodC1ib2xkXCI+XG4gICAgICAgIFRoZSBwYWdlIHlvdSByZXF1ZXN0ZWQgY2Fubm90IGJlIGZvdW5kXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJlcnJvci1zdXBwb3J0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3VwcG9ydC1tZXNzYWdlXCIgPldlIGhhdmUgdXBkYXRlZCBvdXIgd2ViIHNpdGUgYW5kIG1hbnkgVVJMcyBoYXZlIGNoYW5nZWQuPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic3VwcG9ydC1tZXNzYWdlXCIgPllvdSBtaWdodCB3YW50IHRvOjwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgPC9kaXY+XG5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYXV0aFZpZXc+e3snYXBwdG9jaG9tZS52aWV3JyB8IHRyYW5zbGF0ZX19PC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhdXRoVmlld0J0biBpMThuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheVZpZXdCdG5cIj5cbiAgICA8YSAoY2xpY2spPVwicmFpc2VUZWxlbWV0cnlGb3JQdWJsaWMoJGV2ZW50KVwiXG4gICAgW3JvdXRlckxpbmtdPVwic2hvdWxkU2hvd1N1cnZleVBvcHVwKCkgPyBudWxsIDogKChyZXN1bWVEYXRhICYmICFjZXJ0RGF0YSkgPyByZXN1bWVEYXRhTGluaz8udXJsIDogZmlyc3RSZXNvdXJjZUxpbms/LnVybClcIlxuICAgIFtxdWVyeVBhcmFtc109XCJzaG91bGRTaG93U3VydmV5UG9wdXAoKSA/IG51bGwgOiAoKHJlc3VtZURhdGEgJiYgIWNlcnREYXRhKSA/IGdlbmVyYXRlUXVlcnkoJ1JFU1VNRScpIDogZ2VuZXJhdGVRdWVyeSgnU1RBUlQnKSlcIlxuICAgIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyXCI+XG4gICAge3snYXBwdG9jaG9tZS52aWV3JyB8IHRyYW5zbGF0ZX19XG4gIDwvYT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNhdXRoVmlld0Zvckludml0ZU9ubHlBc3Nlc3NtZW50PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9yUHJldmlldyAmJiBjb250ZW50UmVhZERhdGE/LmNvdXJzZUNhdGVnb3J5ID09PSAnSW52aXRlLU9ubHkgQXNzZXNzbWVudCdcIj5cbiAgICA8YSBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlciByZXN1bWVcIiBbcm91dGVyTGlua109XCJmaXJzdFJlc291cmNlTGluaz8udXJsXCJcbiAgICAgIFtxdWVyeVBhcmFtc109XCIocmVzdW1lRGF0YSAmJiAhY2VydERhdGEpID8gZ2VuZXJhdGVRdWVyeSgnUkVTVU1FJykgOiBnZW5lcmF0ZVF1ZXJ5KCdTVEFSVCcpXCI+XG4gICAgICA8bmctY29udGFpbmVyPnt7ICdhcHB0b2Nob21lLnRha2VUZXN0JyB8IHRyYW5zbGF0ZSB9fTwvbmctY29udGFpbmVyPlxuICAgIDwvYT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPiJdfQ==
|