@arsedizioni/ars-utils 18.2.68 → 18.2.69
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/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +13 -14
- package/esm2022/clipper.ui/ui/references/references.component.mjs +13 -14
- package/esm2022/help/components/help-viewer/help-viewer.component.mjs +13 -15
- package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +13 -15
- package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +8 -3
- package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +13 -15
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +23 -25
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-help.mjs +12 -14
- package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +12 -14
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +18 -15
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
- package/package.json +7 -7
|
@@ -22,7 +22,7 @@ import { SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';
|
|
|
22
22
|
import { ExtendedModule } from '@ngbracket/ngx-layout/extended';
|
|
23
23
|
import { FlexModule } from '@ngbracket/ngx-layout/flex';
|
|
24
24
|
import { fromEvent } from 'rxjs';
|
|
25
|
-
import { debounceTime,
|
|
25
|
+
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
26
26
|
import { ClipperDocumentsUtils } from '../../documents';
|
|
27
27
|
import { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';
|
|
28
28
|
import { ClipperSearchDialogComponent } from '../search-dialog/search-dialog.component';
|
|
@@ -90,7 +90,7 @@ export class ClipperBrowserDialogComponent extends ClipperSearchResultManager {
|
|
|
90
90
|
});
|
|
91
91
|
// React to window size change
|
|
92
92
|
fromEvent(window, 'resize')
|
|
93
|
-
.pipe(takeUntil(this.unsubscribe), debounceTime(
|
|
93
|
+
.pipe(takeUntil(this.unsubscribe), debounceTime(250))
|
|
94
94
|
.subscribe(() => {
|
|
95
95
|
this.resize();
|
|
96
96
|
});
|
|
@@ -137,19 +137,18 @@ export class ClipperBrowserDialogComponent extends ClipperSearchResultManager {
|
|
|
137
137
|
* Resize
|
|
138
138
|
*/
|
|
139
139
|
resize() {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
elem.setAttribute('style', 'padding:0 0 0 0;height:' + height + 'px !important;max-height:' + height + 'px !important');
|
|
146
|
-
this.resize();
|
|
147
|
-
}
|
|
140
|
+
let elem = document.getElementById('clipper-browser-scrollable');
|
|
141
|
+
if (elem) {
|
|
142
|
+
const height = this.dialogService.getCurrentDialogScrollableHeight(['clipper-browser-fixed'], window.innerHeight);
|
|
143
|
+
if (height != elem.clientHeight) {
|
|
144
|
+
elem.setAttribute('style', 'padding:0 0 0 0;height:' + height + 'px !important;max-height:' + height + 'px !important');
|
|
148
145
|
}
|
|
149
|
-
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
setTimeout(() => {
|
|
150
149
|
this.resize();
|
|
151
|
-
}
|
|
152
|
-
}
|
|
150
|
+
}, 100);
|
|
151
|
+
}
|
|
153
152
|
}
|
|
154
153
|
/**
|
|
155
154
|
* Show hide filter pane manually
|
|
@@ -741,4 +740,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
741
740
|
type: ViewChild,
|
|
742
741
|
args: ['filterPane']
|
|
743
742
|
}] } });
|
|
744
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvYnJvd3Nlci1kaWFsb2cvYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvYnJvd3Nlci1kaWFsb2cvYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsK0NBQStDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1B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QWlCLDhXQUNqQixhQUFhLDAxQkFDYixnQkFBZ0Isb0lBQ2hCLDRCQUE0QixzTUFDNUIsZ0JBQWdCLHdHQUNoQixnQkFBZ0IsMGRBQ2hCLG9CQUFvQiwwTkFDcEIsNEJBQTRCLHdGQUM1QixPQUFPLG9GQUNQLGdDQUFnQywyS0FDaEMsa0JBQWtCOzsyRkFHVCw2QkFBNkI7a0JBakN6QyxTQUFTOzJCQUNGLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUdqQzt3QkFDVCwrQ0FBK0M7cUJBQ2hELG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxVQUFVO3dCQUNWLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxXQUFXO3dCQUNYLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLDRCQUE0Qjt3QkFDNUIsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLG9CQUFvQjt3QkFDcEIsNEJBQTRCO3dCQUM1QixPQUFPO3dCQUNQLGdDQUFnQzt3QkFDaEMsa0JBQWtCO3FCQUNuQjs4QkFLd0IsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludHMgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcclxuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QmFkZ2VNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBNQVRfREFURVBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWV9QUk9WSURFUiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xyXG5pbXBvcnQgeyBNYXREcmF3ZXIsIE1hdFNpZGVuYXZNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcclxuaW1wb3J0IHsgTWF0VGFic01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7XHJcbiAgQ2xpcHBlckF1dGhvcnMsXHJcbiAgQ2xpcHBlckRvY3VtZW50Q2hhbmdlUmVhc29uLFxyXG4gIENsaXBwZXJNZXNzYWdlcyxcclxuICBDbGlwcGVyTW9kZWwsXHJcbiAgQ2xpcHBlck1vZGVscyxcclxuICBDbGlwcGVyU2VhcmNoRmFjZXRzU25hcHNob3QsXHJcbiAgQ2xpcHBlclNlYXJjaFBhcmFtcyxcclxuICBDbGlwcGVyU2VhcmNoUmVzdWx0LFxyXG4gIENsaXBwZXJTZWFyY2hVdGlscyxcclxuICBDbGlwcGVyU2VjdG9yVHlwZXMsXHJcbiAgQ2xpcHBlclNlY3RvcnMsXHJcbiAgQ2xpcHBlclNlbGVjdGlvbk1vZGUsXHJcbiAgQ2xpcHBlclNvcnQsXHJcbiAgQ2xpcHBlclNvdXJjZXNcclxufSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uJztcclxuaW1wb3J0IHsgU2VsZWN0YWJsZU1vZGVsLCBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IEV4dGVuZGVkTW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2V4dGVuZGVkJztcclxuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dC9mbGV4JztcclxuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRzVXRpbHMgfSBmcm9tICcuLi8uLi9kb2N1bWVudHMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vZG9jdW1lbnQtbWVudS9kb2N1bWVudC1tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZGlhbG9nL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mYWNldHMvc2VhcmNoLWZhY2V0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRnJlZVRleHRIZWxwQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWZyZWUtdGV4dC1oZWxwL3NlYXJjaC1mcmVlLXRleHQtaGVscC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRnJlZVRleHRRdWVyeUJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZnJlZS10ZXh0LXF1ZXJ5LWJ1aWxkZXIvc2VhcmNoLWZyZWUtdGV4dC1xdWVyeS1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hSZXN1bHRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLXJlc3VsdC1pdGVtL3NlYXJjaC1yZXN1bHQtaXRlbS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlciB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtbWFuYWdlci9zZWFyY2gtcmVzdWx0LW1hbmFnZXInO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2xpcHBlckJyb3dzZXJEaWFsb2dEYXRhIHtcclxuICBzZWxlY3Rpb25Nb2RlPzogQ2xpcHBlclNlbGVjdGlvbk1vZGUgfCBudWxsLFxyXG4gIHNlbGVjdGFibGVNb2RlbHM/OiBudW1iZXJbXSB8IG51bGwsXHJcbiAgaW5pdGlhbE1vZGVsPzogbnVtYmVyIHwgbnVsbFxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBob3N0OiB7ICdCaW5kJzogU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkgfSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Jyb3dzZXItZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBNQVRfREFURVBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWV9QUk9WSURFUlxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGbGV4TW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRCYWRnZU1vZHVsZSxcclxuICAgIE1hdFRhYnNNb2R1bGUsXHJcbiAgICBFeHRlbmRlZE1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxyXG4gICAgQ2xpcHBlckRvY3VtZW50TWVudUNvbXBvbmVudCxcclxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXHJcbiAgICBNYXRTaWRlbmF2TW9kdWxlLFxyXG4gICAgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUsXHJcbiAgICBDbGlwcGVyU2VhcmNoRmFjZXRzQ29tcG9uZW50LFxyXG4gICAgTmdDbGFzcyxcclxuICAgIENsaXBwZXJTZWFyY2hSZXN1bHRJdGVtQ29tcG9uZW50LFxyXG4gICAgTWF0UGFnaW5hdG9yTW9kdWxlXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJCcm93c2VyRGlhbG9nQ29tcG9uZW50XHJcbiAgZXh0ZW5kcyBDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlclxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlclBhbmUnKSBmaWx0ZXJQYW5lITogTWF0RHJhd2VyO1xyXG5cclxuICBwcml2YXRlIGRpYWxvZ1JlZiA9IGluamVjdChNYXREaWFsb2dSZWY8Q2xpcHBlckJyb3dzZXJEaWFsb2dDb21wb25lbnQ+KTtcclxuICBwcm90ZWN0ZWQgZGlhbG9nRGF0YTogQ2xpcHBlckJyb3dzZXJEaWFsb2dEYXRhID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSk7XHJcbiAgcHJvdGVjdGVkIHRpdGxlOiBzdHJpbmcgPSAnUmljZXJjYSBpbiBDbGlwcGVyJztcclxuICBwcm90ZWN0ZWQgc25hcHNob3Q6IENsaXBwZXJTZWFyY2hSZXN1bHQgPSB7XHJcbiAgICBzZWFyY2hJbmZvOiBudWxsLFxyXG4gICAgc2VhcmNoUGFyYW1zOiBuZXcgQ2xpcHBlclNlYXJjaFBhcmFtcygpXHJcbiAgfTtcclxuXHJcbiAgcHJvdGVjdGVkIGN1cnJlbnRNb2RlbDogc3RyaW5nID0gJ1R1dHRvJztcclxuICBwcm90ZWN0ZWQgY3VycmVudFNvcnQ6IHN0cmluZyA9ICdSaWxldmFuemEnO1xyXG5cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBVc2Ugc2VydmljZSBzbmFwc2hvdFxyXG4gICAgdGhpcy5zbmFwc2hvdCA9IHRoaXMuY2xpcHBlclNlcnZpY2Uuc25hcHNob3Q7XHJcbiAgICBpZiAoIXRoaXMuc25hcHNob3QpXHJcbiAgICAgIHRoaXMuc25hcHNob3QgPSB7XHJcbiAgICAgICAgc2VhcmNoSW5mbzogbnVsbCxcclxuICAgICAgICBzZWFyY2hQYXJhbXM6IG51bGwsXHJcbiAgICAgIH07XHJcbiAgICBpZiAoIXRoaXMuZmlsdGVyUGFyYW1zKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zID0gbmV3IENsaXBwZXJTZWFyY2hQYXJhbXMoKTtcclxuICAgICAgLy8gU3RvcmUgc25hcHNob3RcclxuICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5zbmFwc2hvdCA9IHRoaXMuc25hcHNob3Q7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBzZWxlY3Rpb25cclxuICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGFibGVNb2RlbDxhbnksIHN0cmluZz4odHJ1ZSwgJ2RvY3VtZW50SWQnKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgbW9kZWxcclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEuaW5pdGlhbE1vZGVsKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlTW9kZWwodGhpcy5kaWFsb2dEYXRhLmluaXRpYWxNb2RlbCwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5nZXRNZXNzYWdlKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKChtZXNzYWdlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gQ2xpcHBlck1lc3NhZ2VzLkRPQ1VNRU5UX1NFTEVDVEVEX0lOTkVSKSB7XHJcbiAgICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkRPQ1VNRU5UX1NFTEVDVEVELCBtZXNzYWdlLmRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFJlYWN0IHRvIHdpbmRvdyBzaXplIGNoYW5nZVxyXG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSwgZGVib3VuY2VUaW1lKDEwMCksIG1hcCgoKSA9PiB3aW5kb3cuaW5uZXJXaWR0aCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2xpcHBlclNlcnZpY2UudmlzaWJsZS5zZXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5jbGlwcGVyU2VydmljZS52aXNpYmxlLnNldChmYWxzZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8vIEhhbmRsZSBmaWx0ZXIgcGFuZSBcclxuICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJQYW5lVmlzaWJpbGl0eSgpO1xyXG4gICAgICAvLyBIYW5kbGUgZmFjZXRzXHJcbiAgICAgIGlmICh0aGlzLmZhY2V0cykge1xyXG4gICAgICAgIHRoaXMuZmFjZXRzLmNoYW5nZWRcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBDbGlwcGVyU2VhcmNoRmFjZXRzU25hcHNob3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmZyb21EYXRlID0gdGhpcy5zbmFwc2hvdC5mYWNldHM/LmZyb21EYXRlO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRvRGF0ZSA9IHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGU7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMueWVhciA9IHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzPy5jaGFuZ2VkSW50ZXJ2YWwpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy55ZWFyID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5mcm9tRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvciB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cz8uY2hhbmdlZFNlY3RvcilcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3IgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHM/LnR5cGUgfHwgdGhpcy5zbmFwc2hvdC5mYWNldHM/LmNoYW5nZWRUeXBlKVxyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnR5cGUgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8udHlwZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzPy5hdXRob3IgfHwgdGhpcy5zbmFwc2hvdC5mYWNldHM/LmNoYW5nZWRBdXRob3IpXHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuYXV0aG9yID0gdGhpcy5zbmFwc2hvdC5mYWNldHM/LmF1dGhvcjtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaCh0cnVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBSZXNpemUgXHJcbiAqL1xyXG4gIHByaXZhdGUgcmVzaXplKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsaXBwZXItYnJvd3Nlci1zY3JvbGxhYmxlJyk7XHJcbiAgICAgIGlmIChlbGVtKSB7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmdldEN1cnJlbnREaWFsb2dTY3JvbGxhYmxlSGVpZ2h0KFxyXG4gICAgICAgICAgWydjbGlwcGVyLWJyb3dzZXItZml4ZWQnXSxcclxuICAgICAgICAgIHdpbmRvdy5pbm5lckhlaWdodFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGhlaWdodCAhPSBlbGVtLmNsaWVudEhlaWdodCkge1xyXG4gICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ3BhZGRpbmc6MCAwIDAgMDtoZWlnaHQ6JyArIGhlaWdodCArICdweCAhaW1wb3J0YW50O21heC1oZWlnaHQ6JyArIGhlaWdodCArICdweCAhaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4qIFNob3cgaGlkZSBmaWx0ZXIgcGFuZSBtYW51YWxseVxyXG4qL1xyXG4gIHByb3RlY3RlZCB0b2dnbGVGaWx0ZXJQYW5lKCkge1xyXG4gICAgdGhpcy5maWx0ZXJQYW5lQ2xvc2VkID0gIXRoaXMuZmlsdGVyUGFuZUNsb3NlZDtcclxuICAgIHRoaXMuZmlsdGVyUGFuZT8udG9nZ2xlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIGZpbHRlciBwYW5lIHZpc2liaWxpdHlcclxuICAgKi9cclxuICBwcml2YXRlIGhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFuZSkge1xyXG4gICAgICBpZiAodGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKEJyZWFrcG9pbnRzLlhTbWFsbCkgfHxcclxuICAgICAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuU21hbGwpIHx8XHJcbiAgICAgICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKEJyZWFrcG9pbnRzLk1lZGl1bSkpIHtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJQYW5lLm9wZW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZS5tb2RlID0gJ292ZXInO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZS5kaXNhYmxlQ2xvc2UgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmVIYXNCYWNrZHJvcCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbHRlclBhbmUub3BlbmVkICYmICF0aGlzLmZpbHRlclBhbmVDbG9zZWQgJiYgdGhpcy5oYXNGYWNldHMoKSkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm9wZW4oKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyUGFuZS5vcGVuZWQgJiYgdGhpcy5maWx0ZXJQYW5lQ2xvc2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm1vZGUgPSAnc2lkZSc7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lSGFzQmFja2Ryb3AgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBkb2N1bWVudHMgY2FuIGJlIHNlbGVjdGVkIGFuZCByZXR1cm5lZCBhcyBtZXNzYWdlXHJcbiAgICovXHJcbiAgY2FuU2VsZWN0KCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGFsbG93ID1cclxuICAgICAgdGhpcy5zZWxlY3Rpb24gJiZcclxuICAgICAgKCh0aGlzLmRpYWxvZ0RhdGEuc2VsZWN0aW9uTW9kZSA9PT0gMSAmJlxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuc2VsZWN0ZWQubGVuZ3RoID09PSAxKSB8fFxyXG4gICAgICAgICh0aGlzLmRpYWxvZ0RhdGEuc2VsZWN0aW9uTW9kZSA9PT0gMiAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY3VycmVudC5zZWxlY3RlZC5sZW5ndGggPiAxKSB8fFxyXG4gICAgICAgICh0aGlzLmRpYWxvZ0RhdGEuc2VsZWN0aW9uTW9kZSA9PT0gMyAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY3VycmVudC5zZWxlY3RlZC5sZW5ndGggPiAwKSk7XHJcbiAgICBpZiAoYWxsb3cgJiYgdGhpcy5kaWFsb2dEYXRhLnNlbGVjdGFibGVNb2RlbHM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uY3VycmVudC5zZWxlY3RlZC5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEuc2VsZWN0YWJsZU1vZGVscy5pbmRleE9mKG4ubW9kZWwpID09PSAtMSkge1xyXG4gICAgICAgICAgYWxsb3cgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFsbG93O1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmQgYSBtZXNzYWdlIHdpdGggY3VycmVudCBzZWxlY3Rpb24gYW5kIGNsb3NlIGRpYWxvZ1xyXG4gICAqL1xyXG4gIHNlbGVjdCgpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbi5jdXJyZW50LnNlbGVjdGVkICYmIHRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoXHJcbiAgICAgICAgQ2xpcHBlck1lc3NhZ2VzLkRPQ1VNRU5UX1NFTEVDVEVELFxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuc2VsZWN0ZWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2UgZGlhbG9nXHJcbiAgICogQHBhcmFtIG5ld1JvdXRlOiB0aGUgbmV3IHJvdXRlIHRvIG5hdmlnYXRlIHRvXHJcbiAgICovXHJcbiAgY2xvc2UobmV3Um91dGU6IGFueSA9IG51bGwpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKG5ld1JvdXRlKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgc29ydFxyXG4gICAqL1xyXG4gIHVwZGF0ZVNvcnRPcHRpb25zKCkge1xyXG4gICAgc3dpdGNoICh0aGlzLmZpbHRlclBhcmFtcy5zb3J0TW9kZSkge1xyXG4gICAgICBjYXNlIENsaXBwZXJTb3J0LkRhdGVBc2M6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydCA9ICdEYXRhIGNyZS4nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENsaXBwZXJTb3J0LlBvcHVsYXJpdHk6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydCA9ICdQb3BvbGFyaXTDoCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclNvcnQuUmVsZXZhbmNlOlxyXG4gICAgICAgIHRoaXMuY3VycmVudFNvcnQgPSAnUmlsZXZhbnphJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5zb3J0TW9kZSA9IENsaXBwZXJTb3J0LkRhdGVEZXNjO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNvcnQgPSAnRGF0YSBkZWNyLic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGN1cnJlbnQgc2VhcmNoIGluZm9cclxuICAgKi9cclxuICBwcml2YXRlIHVwZGF0ZVNlYXJjaEluZm8oKSB7XHJcbiAgICBsZXQgc2kgPSBbXTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yIHx8XHJcbiAgICAgICh0aGlzLmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBzID0gU3lzdGVtVXRpbHMuYXJyYXlGaW5kQnlLZXkoXHJcbiAgICAgICAgQ2xpcHBlclNlY3RvcnMsXHJcbiAgICAgICAgJ3ZhbHVlJyxcclxuICAgICAgICB0aGlzLmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3JcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChzKSB7XHJcbiAgICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgICBmaWVsZDogJ3NldHRvcmUnLFxyXG4gICAgICAgICAgdmFsdWU6IHMubmFtZSxcclxuICAgICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgcyA9IFN5c3RlbVV0aWxzLmFycmF5RmluZEJ5S2V5KFxyXG4gICAgICAgICAgQ2xpcHBlck1vZGVscyxcclxuICAgICAgICAgICd2YWx1ZScsXHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yXHJcbiAgICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvclxyXG4gICAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHMpIHtcclxuICAgICAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgICAgICBmaWVsZDogJ3NlemlvbmUnLFxyXG4gICAgICAgICAgICB2YWx1ZTogcy5uYW1lLFxyXG4gICAgICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuYXV0aG9yIHx8XHJcbiAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8uYXV0aG9yKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBhID0gU3lzdGVtVXRpbHMuYXJyYXlGaW5kQnlLZXkoXHJcbiAgICAgICAgQ2xpcHBlckF1dGhvcnMsXHJcbiAgICAgICAgJ3ZhbHVlJyxcclxuICAgICAgICB0aGlzLmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8uYXV0aG9yXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy5hdXRob3JcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuYXV0aG9yXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgICBmaWVsZDogJ2F1dG9yZScsXHJcbiAgICAgICAgICB2YWx1ZTogYS5hdXRob3JEZXNjcmlwdGlvbixcclxuICAgICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnRvcGljKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2FyZ29tZW50bycsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLnRvcGljLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMudGF4b25vbXkpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnYXJnb21lbnRvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMudGF4b25vbXlOb2RlLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMubnVtYmVyKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ251bWVybycsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLm51bWJlcixcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5zbmFwc2hvdC5pbnRlcnZhbCAmJlxyXG4gICAgICAodGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGUgfHxcclxuICAgICAgICAodGhpcy5zbmFwc2hvdC5mYWNldHMgJiZcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZSAmJlxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZWwgIT09XHJcbiAgICAgICAgICBDbGlwcGVyTW9kZWwuQWdnaW9ybmFtZW50b05vcm1hdGl2bykpXHJcbiAgICApIHtcclxuICAgICAgbGV0IGQxID1cclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGVcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LmZyb21EYXRlXHJcbiAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLmZyb21EYXRlO1xyXG4gICAgICBjb25zdCBkMiA9XHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgJiYgdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZVxyXG4gICAgICAgICAgPyB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLnRvRGF0ZTtcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICFkMiA/ICdpbiBkYXRhJyA6ICdkYSBkYXRhJyxcclxuICAgICAgICB2YWx1ZTogU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShkMSksXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zbmFwc2hvdC5pbnRlcnZhbCAmJlxyXG4gICAgICAodGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlIHx8XHJcbiAgICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmXHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlICYmXHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlbCAhPT1cclxuICAgICAgICAgIENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvKSlcclxuICAgICkge1xyXG4gICAgICBsZXQgZCA9XHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgJiYgdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZVxyXG4gICAgICAgICAgPyB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLnRvRGF0ZTtcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdhIGRhdGEnLFxyXG4gICAgICAgIHZhbHVlOiBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGQpLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbmFwc2hvdC5pbnRlcnZhbClcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdpbnRlcnZhbGxvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5zbmFwc2hvdC5pbnRlcnZhbCxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZSlcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdmb250ZScsXHJcbiAgICAgICAgdmFsdWU6IFN5c3RlbVV0aWxzLmFycmF5R2V0VmFsdWUoXHJcbiAgICAgICAgICBDbGlwcGVyU291cmNlcyxcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZVxyXG4gICAgICAgICksXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VOdW1iZXIpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnbnVtLiBmb250ZScsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZU51bWJlcixcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VGcm9tRGF0ZSB8fFxyXG4gICAgICAodGhpcy5zbmFwc2hvdC5mYWNldHMgJiZcclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGUgJiZcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlbCA9PT1cclxuICAgICAgICBDbGlwcGVyTW9kZWwuQWdnaW9ybmFtZW50b05vcm1hdGl2bylcclxuICAgICkge1xyXG4gICAgICBsZXQgZDEgPVxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZVxyXG4gICAgICAgICAgPyB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuc291cmNlRnJvbURhdGU7XHJcbiAgICAgIGNvbnN0IGQyID1cclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuc291cmNlVG9EYXRlO1xyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogIWQyID8gJ2luIGRhdGEgZm9udGUnIDogJ2RhIGRhdGEgZm9udGUnLFxyXG4gICAgICAgIHZhbHVlOiBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGQxKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VUb0RhdGUgfHxcclxuICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmXHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZSAmJlxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZGVsID09PVxyXG4gICAgICAgIENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBkID1cclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuc291cmNlVG9EYXRlO1xyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2EgZGF0YSBmb250ZScsXHJcbiAgICAgICAgdmFsdWU6IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoZCksXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy50ZXh0KVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ3Rlc3RvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMudGV4dCxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy50eXBlIHx8XHJcbiAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8udHlwZSlcclxuICAgICkge1xyXG4gICAgICBsZXQgdCA9IFN5c3RlbVV0aWxzLmFycmF5RmluZEJ5S2V5KFxyXG4gICAgICAgIENsaXBwZXJTZWN0b3JUeXBlcyxcclxuICAgICAgICAndmFsdWUnLFxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlXHJcbiAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLnR5cGVcclxuICAgICAgKTtcclxuICAgICAgaWYgKHQpIHtcclxuICAgICAgICBzaS5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkOiAndGlwbycsXHJcbiAgICAgICAgICB2YWx1ZTogdC5kb2N1bWVudFR5cGVEZXNjcmlwdGlvbixcclxuICAgICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnNob3dVbnJlYWREb2N1bWVudHNPbmx5KVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ3N0YXRvJyxcclxuICAgICAgICB2YWx1ZTogJ25vbiBsZXR0aScsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuY2hhbmdlUmVhc29uIHx8XHJcbiAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8ucmVhc29uKVxyXG4gICAgKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ3RpcG8gbW9kLicsXHJcbiAgICAgICAgdmFsdWU6IFN5c3RlbVV0aWxzLmFycmF5R2V0VmFsdWUoXHJcbiAgICAgICAgICBDbGlwcGVyRG9jdW1lbnRDaGFuZ2VSZWFzb24sXHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8ucmVhc29uXHJcbiAgICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnJlYXNvblxyXG4gICAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZVJlYXNvblxyXG4gICAgICAgICksXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VkTnVtYmVyKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ251bS4gbW9kaWZpY2F0bycsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWROdW1iZXIsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VkWWVhcilcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdhbm5vIG1vZGlmaWNhdG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VkWWVhcixcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWRUaXRsZSlcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICd0aXRvbG8gbW9kaWZpY2F0bycsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWRUaXRsZSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLm1vZGlmaWVyTnVtYmVyKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ251bS4gbW9kaWZpY2FudGUnLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy5tb2RpZmllck51bWJlcixcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLm1vZGlmaWVyWWVhcilcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdhbm5vIG1vZGlmaWNhbnRlJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMubW9kaWZpZXJZZWFyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMubW9kaWZpZXJUaXRsZSlcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICd0aXRvbG8gbW9kaWZpY2FudGUnLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy5tb2RpZmllclRpdGxlLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zbmFwc2hvdC5zZWFyY2hJbmZvID0gc2k7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogQ2hhbmdlIHNlYXJjaCBtb2RlbFxyXG4gKiBAcGFyYW0gbW9kZWwgOiB0aGUgbmV3IGRvY3VtZW50IG1vZGVsIFxyXG4gKiBAcGFyYW0gZmV0Y2ggOiB0cnVlIGlmIGRhdGEgbXVzdCBiZSBmZXRjaGVkLiBEZWZhdWx0IGlzIHRydWVcclxuICovXHJcbiAgY2hhbmdlTW9kZWwobW9kZWw6IG51bWJlciA9IG51bGwsIGZldGNoOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZWwgPSBtb2RlbDtcclxuICAgIHN3aXRjaCAobW9kZWwpIHtcclxuICAgICAgY2FzZSBDbGlwcGVyTW9kZWwuQWdnaW9ybmFtZW50b05vcm1hdGl2bzogdGhpcy5jdXJyZW50TW9kZWwgPSBcIkdhenpldHRlIGUgYm9sbGV0dGluaVwiOyBicmVhaztcclxuICAgICAgY2FzZSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZTogdGhpcy5jdXJyZW50TW9kZWwgPSBcIk5vcm1hdGl2YSB2aWdlbnRlXCI7IGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuY3VycmVudE1vZGVsID0gXCJUdXR0b1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKGZldGNoKVxyXG4gICAgICB0aGlzLmZldGNoKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgYSBzb3J0XHJcbiAgICogQHBhcmFtIG1vZGUgOiB0aGUgc29ydCBtb2RlXHJcbiAgICovXHJcbiAgc29ydEJ5KG1vZGU6IG51bWJlcikge1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMuc29ydE1vZGUgPSBtb2RlO1xyXG4gICAgdGhpcy51cGRhdGVTb3J0T3B0aW9ucygpO1xyXG4gICAgdGhpcy5mZXRjaChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogR2V0IGZhY2V0c1xyXG4gKi9cclxuICBmZXRjaEZhY2V0cygpIHtcclxuICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICB0aGlzLmZpbHRlckJ1c3kuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5jbGlwcGVyU2VydmljZS5xdWVyeUZhY2V0cyh0aGlzLmZpbHRlclBhcmFtcylcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHIpID0+IHtcclxuICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlUmVzdWx0cyhudWxsLCByLnZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJQYW5lVmlzaWJpbGl0eSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyQnVzeS5zZXQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIaWRlIGZhY2V0c1xyXG4gICAqL1xyXG4gIGhpZGVGYWNldHMoKSB7XHJcbiAgICB0aGlzLmZhY2V0cz8ucmVzZXQoKTtcclxuICAgIHRoaXMuZmlsdGVyUGFuZS5jbG9zZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcmZvcm0gYSBzZWFyY2ggdXNpbmcgY3VycmVudCBwYXJhbXNcclxuICAgKi9cclxuICBmZXRjaChuZXdTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3koJ1JpY2VyY2EgaW4gY29yc28uLi4nKTtcclxuICAgIHRoaXMuZmlsdGVyUGFyYW1zLmNvdW50ID0gMTU7XHJcbiAgICBpZiAobmV3U2VhcmNoKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmZpcnN0ID0gMDtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnRleHQpXHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc29ydE1vZGUgPSBDbGlwcGVyU29ydC5SZWxldmFuY2U7XHJcbiAgICAgIGVsc2UgaWYgKCF0aGlzLmZpbHRlclBhcmFtcy5zb3J0TW9kZSlcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5zb3J0TW9kZSA9IENsaXBwZXJTb3J0LkRhdGVEZXNjO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNvcnRPcHRpb25zKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMueWVhciA+IDApIHtcclxuICAgICAgY29uc3QgeWVhciA9IHRoaXMuZmlsdGVyUGFyYW1zLnllYXI7XHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmZyb21EYXRlID0gbmV3IERhdGUoeWVhciwgMCwgMSwgMik7XHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRvRGF0ZSA9IG5ldyBEYXRlKHllYXIsIDExLCAzMSwgMik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy55ZWFyID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy50ZXh0KSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRleHQgPSBDbGlwcGVyU2VhcmNoVXRpbHMubm9ybWFsaXplVGV4dFF1ZXJ5KHRoaXMuZmlsdGVyUGFyYW1zLnRleHQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGlwcGVyU2VydmljZS5xdWVyeSh0aGlzLmZpbHRlclBhcmFtcylcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVJlc3VsdHMoci52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBIYW5kbGUgZmFjZXRzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90LnRvdGFsID4gMCkge1xyXG4gICAgICAgICAgICAgIGlmIChuZXdTZWFyY2gpIHtcclxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBmYWNldHNcclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hGYWNldHMoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5oaWRlRmFjZXRzKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChuZXdTZWFyY2gpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHZpZXdcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWFyY2hJbmZvKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IGEgbmV3IHBhZ2UgcmVzdWx0XHJcbiAgICogQHBhcmFtIGUgOiB0aGUgTWF0UGFnaW5hdG9yIFBhZ2VFdmVudCBkYXRhXHJcbiAgICovXHJcbiAgZmV0Y2hNb3JlKGU6IGFueSkge1xyXG4gICAgbGV0IGZpcnN0ID0gZS5wYWdlSW5kZXggKiB0aGlzLmZpbHRlclBhcmFtcy5jb3VudDtcclxuICAgIHRoaXMuZmlsdGVyUGFyYW1zLmZpcnN0ID0gZmlyc3Q7XHJcbiAgICB0aGlzLmZldGNoKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBzZWFyY2hcclxuICAgKi9cclxuICBjbGVhclNlYXJjaCgpIHtcclxuICAgIHRoaXMuY3VycmVudE1vZGVsID0gJ05vcm1hdGl2YSB2aWdlbnRlJztcclxuICAgIHRoaXMuc25hcHNob3QuaXRlbXMgPSBudWxsO1xyXG4gICAgdGhpcy5zbmFwc2hvdC50b3RhbCA9IDA7XHJcbiAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyA9IG51bGw7XHJcbiAgICB0aGlzLmZhY2V0cy5yZXNldCgpO1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMgPSBuZXcgQ2xpcHBlclNlYXJjaFBhcmFtcygpO1xyXG4gICAgdGhpcy5maWx0ZXJQYW5lLmNsb3NlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVNlYXJjaEluZm8oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gYW4gaXRlbVxyXG4gICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAgICogQHBhcmFtIG5ld1dpbmRvdzogdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgbXVzdCBiZSBvcGVuIGludG8gYSBuZXcgd2luZG93XHJcbiAgICovXHJcbiAgb3Blbihkb2N1bWVudElkOiBzdHJpbmcsIG5ld1dpbmRvdzogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoIW5ld1dpbmRvdykgdGhpcy5vcGVuRG9jdW1lbnQoZG9jdW1lbnRJZCk7XHJcbiAgICBlbHNlIHdpbmRvdy5vcGVuKCcvZG9jdW1lbnRvLycgKyBkb2N1bWVudElkLCAnX2JsYW5rJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVuIGEgZG9jdW1lbnRcclxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgb3BlbkRvY3VtZW50KGRvY3VtZW50SWQ6IHN0cmluZykge1xyXG4gICAgaWYgKCFkb2N1bWVudElkKSByZXR1cm47XHJcbiAgICBDbGlwcGVyRG9jdW1lbnRzVXRpbHMub3BlbkRvY3VtZW50KFxyXG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UsXHJcbiAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UsXHJcbiAgICAgIGRvY3VtZW50SWQsXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRleHQsXHJcbiAgICAgIHRoaXMuZGlhbG9nRGF0YS5zZWxlY3Rpb25Nb2RlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcG9zZSBhIGZyZWUgdGV4dCBzZWFyY2ggcXVlcnlcclxuICAgKi9cclxuICBjb21wb3NlU2VhcmNoKCkge1xyXG4gICAgbGV0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyU2VhcmNoRnJlZVRleHRRdWVyeUJ1aWxkZXJDb21wb25lbnQsIHtcclxuICAgICAgYXJpYUxhYmVsOiAnY29zdHJ1aXNjaSByaWNlcmNhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc2MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgIH0pO1xyXG4gICAgZC5jb21wb25lbnRJbnN0YW5jZS5kb25lXHJcbiAgICAgIC5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRleHQgPSByLnF1ZXJ5O1xyXG4gICAgICAgIGQuY2xvc2UoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAqIFBlcmZvcm0gc2VhcmNoXHJcbiAqL1xyXG4gIHNlYXJjaCgpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3IgPT09IHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3IpXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvciA9IG51bGw7XHJcblxyXG4gICAgLy8gUmVzZXQgcGFnaW5hdG9yXHJcbiAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcblxyXG4gICAgLy8gUmVzZXQgZmFjZXRzIHNlYXJjaFxyXG4gICAgdGhpcy5mYWNldHMucmVzZXQoKTtcclxuXHJcbiAgICAvLyBEbyBzZWFyY2hcclxuICAgIHRoaXMuZmV0Y2godHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IGFkdmFuY2VkIHNlYXJjaFxyXG4gICAqL1xyXG4gIGFkdmFuY2VkU2VhcmNoKCkge1xyXG4gICAgbGV0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyU2VhcmNoRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIGFyaWFMYWJlbDogJ3JpY2VyY2EgYXZhbnphdGEnLFxyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IGZhbHNlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgcGFyYW1zOiB0aGlzLmZpbHRlclBhcmFtcyxcclxuICAgICAgICBlbmFibGVSZWFkOiBmYWxzZSxcclxuICAgICAgICBlbmFibGVTZWN0b3I6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlVHlwZTogdHJ1ZSxcclxuICAgICAgICBlbmFibGVBdXRob3I6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlVG9waWM6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlVGV4dDogdHJ1ZSxcclxuICAgICAgICBlbmFibGVEb2N1bWVudDogdHJ1ZSxcclxuICAgICAgICBlbmFibGVTb3VyY2U6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogJzcwMHB4JyxcclxuICAgICAgd2lkdGg6ICc5OSUnLFxyXG4gICAgfSk7XHJcbiAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gVXBkYXRlIHNlYXJjaCBwYXJhbXNcclxuICAgICAgICByLm1vZGVsID0gdGhpcy5maWx0ZXJQYXJhbXMubW9kZWw7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMgPSByO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmZpcnN0ID0gMDtcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5jb3VudCA9IDE1O1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3IgPT09IHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3IpXHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3IgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBSZXNldCBwYWdpbmF0b3JcclxuICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IGZhY2V0cyBzZWFyY2hcclxuICAgICAgICB0aGlzLmZhY2V0cy5yZXNldCgpO1xyXG5cclxuICAgICAgICAvLyBEbyBzZWFyY2hcclxuICAgICAgICB0aGlzLmZldGNoKHRydWUpO1xyXG5cclxuICAgICAgICAvLyBGaW5pc2hlZFxyXG4gICAgICAgIGQuY2xvc2UoKTtcclxuXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFNob3cgZnJlZSB0ZXh0IGhlbHBcclxuICovXHJcbiAgaGVscFNlYXJjaCgpIHtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJTZWFyY2hGcmVlVGV4dEhlbHBDb21wb25lbnQsIHtcclxuICAgICAgYXJpYUxhYmVsOiAnaW5mb3JtYXppb25pIHJpY2VyY2EnLFxyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IHRydWUsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogJzgwMHB4JyxcclxuICAgICAgd2lkdGg6ICc5OSUnLFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjbGlwcGVyLWJyb3dzZXItZml4ZWRcIj5cclxuICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWhlYWRlclwiPlxyXG4gICAgPGRpdj5cclxuICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMjBweFwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgY2xhc3M9XCJkaWFsb2ctdGl0bGVcIj5cclxuICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2NsaXBwZXIuYXJzZWRpemlvbmkuaXRcIiBtYXRUb29sdGlwPVwiQXByaSBDbGlwcGVyIGluIHVuIG51b3ZvIHRhYlwiIHRhcmdldD1cIl9ibGFua1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xpcHBlci1sb2dvXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgQGlmIChkaWFsb2dEYXRhPy5zZWxlY3Rpb25Nb2RlID4gMCAmJiBjYW5TZWxlY3QoKSkge1xyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiMTcwcHhcIiBmeEZsZXgubHQtbWQ9XCI1OHB4XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGZ4SGlkZS5sdC1tZCBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBjb2xvcj1cInByaW1hcnlcIiBtYXQtZmxhdC1idXR0b24gKGNsaWNrKT1cInNlbGVjdCgpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJjbGlwcGVyLXNlbGVjdGlvbi1idXR0b25cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWFsbCB1cHBlcmNhc2VcIj5Vc2Egc2VsZXppb25lPC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGZ4SGlkZS5ndC1zbSBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBjb2xvcj1cInByaW1hcnlcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNlbGVjdCgpXCJcclxuICAgICAgICAgIG1hdFRvb2x0aXA9XCJVc2Egc2VsZXppb25lXCIgYXJpYS1sYWJlbD1cIidVc2EgbGEgc2VsZXppb25lJ1wiICBjbGFzcz1cImNsaXBwZXItc2VsZWN0aW9uLWljb24tYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jaGVjazwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIxMDZweFwiIGZ4TGF5b3V0QWxpZ249XCJlbmRcIiBjbGFzcz1cImRpYWxvZy1jbG9zZVwiPlxyXG4gICAgICAgICAgQGlmIChjbGlwcGVyU2VydmljZS5iYWcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJEb2N1bWVudGkgZGkgbGF2b3JvXCIgYXJpYS1sYWJlbD1cIidEb2N1bWVudGkgZGkgbGF2b3JvJ1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJtYW5hZ2VCYWcoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gYXJpYS1oaWRkZW49XCJmYWxzZVwiIFttYXRCYWRnZV09XCJjbGlwcGVyU2VydmljZS5iYWcubGVuZ3RoXCJcclxuICAgICAgICAgICAgICBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+d29ya19vdXRsaW5lPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJDaGl1ZGlcIiBhcmlhLWxhYmVsPVwiQ2hpdWRpXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdj5cclxuICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMjBweFwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZpbGwgc3R5bGU9XCJwYWRkaW5nOiAxMHB4IDEwcHggMTBweCAyMHB4XCI+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9JzEwcHgnIGZ4RmlsbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjEzMHB4XCIgZnhIaWRlLnhzIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtZXJvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWx0ZXJQYXJhbXMubnVtYmVyXCIgI251bWJlcj1cIm5nTW9kZWxcIiBuYW1lPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCIgKGtleXVwLkVudGVyKT1cImZldGNoKHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgQGlmIChmaWx0ZXJQYXJhbXMubnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIkF6emVyYVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyUGFyYW1zLm51bWJlciA9IG51bGw7XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjEzMHB4XCIgZnhIaWRlLnhzIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+QW5ubzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWx0ZXJQYXJhbXMueWVhclwiICN5ZWFyPVwibmdNb2RlbFwiIG5hbWU9XCJ5ZWFyXCIgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI0XCIgKGtleXVwLkVudGVyKT1cImZldGNoKHRydWUpXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKGZpbHRlclBhcmFtcy55ZWFyKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlclBhcmFtcy55ZWFyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgQGlmICh5ZWFyLmludmFsaWQpIHtcclxuICAgICAgICAgICAgICA8bWF0LWVycm9yPk5vbiB2YWxpZG8uPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTAwXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5QYXJvbGUsIGZyYXNpIG8gY29uY2V0dGkuLi48L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgI3NlYXJjaElucHV0PVwibWF0SW5wdXRcIiB0eXBlPVwidGV4dFwiICN0ZXh0IFsobmdNb2RlbCldPVwiZmlsdGVyUGFyYW1zLnRleHRcIiBtYXhsZW5ndGg9XCIyMDBcIlxyXG4gICAgICAgICAgICAgICAgKGtleXVwLkVudGVyKT1cInNlYXJjaCgpXCIgYXV0b2ZvY3VzIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChmaWx0ZXJQYXJhbXMudGV4dCkge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJQYXJhbXMudGV4dCA9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8YnV0dG9uIGZ4SGlkZS54cyB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCBhcmlhLWxhYmVsPVwiQ29tcG9uaVwiIG1hdFRvb2x0aXA9XCJDb21wb25pXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0ZXh0LmZvY3VzKCk7IGNvbXBvc2VTZWFyY2goKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmJ1aWxkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGZ4SGlkZS54cyB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCBhcmlhLWxhYmVsPVwiSW5mb3JtYXppb25pXCJcclxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDb21lIGVmZmV0dHVhcmUgbGEgcmljZXJjYSBpbiB0ZXN0byBsaWJlcm9cIiAoY2xpY2spPVwidGV4dC5mb2N1cygpOyBoZWxwU2VhcmNoKClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5oZWxwX291dGxpbmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiIGZ4RmlsbD5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzZWFyY2goKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0F2dmlhIGxhIHJpY2VyY2EnXCJcclxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQXZ2aWEgcmljZXJjYVwiIFtkaXNhYmxlZF09XCIhY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJhZHZhbmNlZFNlYXJjaCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInUmljZXJjYSBhdmFuemF0YSdcIlxyXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSaWNlcmNhIGF2YW56YXRhXCIgW2Rpc2FibGVkXT1cIiFjbGlwcGVyU2VydmljZS5sb2dnZWRJbigpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnNldHRpbmdzPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZiAoc25hcHNob3Quc2VhcmNoSW5mbyAmJiBzbmFwc2hvdC5zZWFyY2hJbmZvLmxlbmd0aCA+IDApIHtcclxuICAgIDxkaXYgZnhIaWRlLnhzPlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbCBjbGFzcz1cInNtYWxsXCJcclxuICAgICAgICBzdHlsZT1cInBhZGRpbmc6MCAxMHB4IDAgMjBweDtcIj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIj5cclxuICAgICAgICAgIDxiPlJJQ0VSQ0EgQVRUSVZBPC9iPiZuYnNwOyZuYnNwOyZuYnNwO1xyXG4gICAgICAgICAgQGZvciAoc2kgb2Ygc25hcHNob3Quc2VhcmNoSW5mbzsgdHJhY2sgc2kpIHtcclxuICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICB7e3NpLnNlcCA/ICcmbmJzcDsmbmJzcDsnIDogJyd9fSB7e3NpLmZpZWxkfX06IDxzcGFuIGNsYXNzPVwiYWNjZW50IGxvd2VyY2FzZVwiPjxpPnt7c2kudmFsdWV9fTwvaT48L3NwYW4+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeEZsZXhBbGlnbj1cInN0YXJ0XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkF6emVyYSByaWNlcmNhXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gICAgPGRpdj5cclxuICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwLXJldmVyc2VcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeEZpbGwgc3R5bGU9XCJwYWRkaW5nOiAwIDEwcHggMCAxNXB4O1wiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG4gICAgICAgICAgICBAaWYgKHNuYXBzaG90LnRvdGFsID4gMCkge1xyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleEFsaWduPVwiY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdEFsbCgkZXZlbnQpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24/Lmhhc1ZhbHVlKCkgJiYgIWFsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInU2VsZXppb25hL2Rlc2VsZXppb25hIHR1dHRvJ1wiIG1hdFRvb2x0aXA9XCJTZWxlemlvbmEvZGVzZWxlemlvbmEgdHV0dG9cIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzbmFwc2hvdC5pdGVtcyB8fCBzbmFwc2hvdC5pdGVtcy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIj5cclxuICAgICAgICAgICAgICBAaWYgKHNuYXBzaG90LnRvdGFsID4gMCkge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiBtYXRUb29sdGlwPVwiT3JkaW5hXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01lbnUgb3JkaW5hJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51U29ydFwiIFtkaXNhYmxlZF09XCIhc25hcHNob3QudG90YWxcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGZ4SGlkZS5sdC1sZz5PcmRpbmEgcGVyOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmeEhpZGUuZ3QtbWQ+c29ydDwvbWF0LWljb24+IHt7Y3VycmVudFNvcnR9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnVTb3J0PVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJzb3J0QnkoMylcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidPcmRpbmEgcGVyIGRhdGEgZGVjcmVzY2VudGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgIERhdGEgZGVjcmVzY2VudGVcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJzb3J0QnkoMilcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidPcmRpbmEgcGVyIGRhdGEgY3Jlc2NlbnRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICBEYXRhIGNyZXNjZW50ZVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICBAaWYgKGZpbHRlclBhcmFtcy50ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInNvcnRCeSgxKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09yZGluYSBwZXIgcmlsZXZhbnphJ1wiPlxyXG4gICAgICAgICAgICAgICAgICBSaWxldmFuemFcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJzb3J0QnkoNSlcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidPcmRpbmEgcGVyIHBvcG9sYXJpdMOgJ1wiPlxyXG4gICAgICAgICAgICAgICAgICBQb3BvbGFyaXTDoFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBtb2RlbGxvJ1wiXHJcbiAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudU1vZGVsc1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZnhIaWRlLmx0LWxnPk1vc3RyYTo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gZnhIaWRlLmd0LW1kPmZpbHRlcl9saXN0PC9tYXQtaWNvbj4ge3tjdXJyZW50TW9kZWx9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudU1vZGVscz1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2hhbmdlTW9kZWwoMilcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgYWdnaW9ybmFtZW50byBub3JtYXRpdm8nXCI+XHJcbiAgICAgICAgICAgICAgICAgIEdhenpldHRlIGUgYm9sbGV0dGluaVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNoYW5nZU1vZGVsKDkpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInTm9ybWF0aXZhIHZpZ2VudGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgIE5vcm1hdGl2YSB2aWdlbnRlXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjaGFuZ2VNb2RlbCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIHR1dHRpIGkgZG9jdW1lbnRpJ1wiPlxyXG4gICAgICAgICAgICAgICAgICBUdXR0b1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJlbmRcIj5cclxuICAgICAgICAgIEBpZiAoc2VsZWN0aW9uPy5oYXNWYWx1ZSgpKSB7XHJcbiAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQXppb25pIGRhIGVzZWd1aXJlIHN1Z2xpIGVsZW1lbnRpIHNlbGV6aW9uYXRpXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBvcHppb25pIHBlciBlbGVtZW50aSBzZWxlemlvbmF0aSdcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVNlbGVjdGlvbnNcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNuYXBzaG90LnRvdGFsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW21hdEJhZGdlXT1cInNlbGVjdGlvbj8uYWxsLmxlbmd0aFwiIG1hdEJhZGdlQ29sb3I9XCJhY2NlbnRcIj5jaGVja2xpc3Q8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8bWF0LW1lbnUgI21lbnVTZWxlY3Rpb25zPVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICA8Y2xpcHBlci1kb2N1bWVudC1tZW51IFtwYXJlbnRdPVwidGhpc1wiIHNlbGVjdGlvblNvdXJjZT1cInNlbGVjdGlvblwiIFt1c2VTZWxlY3Rpb25zXT1cImNhblNlbGVjdCgpXCJcclxuICAgICAgICAgICAgICBbaXNSZWFkYWJsZV09XCJmYWxzZVwiIFtpc0xhd0luRm9yY2VdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8L2NsaXBwZXItZG9jdW1lbnQtbWVudT5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICBAaWYgKHNuYXBzaG90ICYmIHNuYXBzaG90LmZhY2V0cz8uaGFzRmFjZXRzICYmIGZpbHRlclBhbmUgJiYgKCFmaWx0ZXJQYW5lLm9wZW5lZCB8fCBmaWx0ZXJQYW5lQ2xvc2VkKSkge1xyXG4gICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkFmZmluYSByaWNlcmNhXCJcclxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIidBZmZpbmEgcmljZXJjYSdcIiAoY2xpY2spPVwidG9nZ2xlRmlsdGVyUGFuZSgpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5tZW51X29wZW48L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBpZD1cImNsaXBwZXItYnJvd3Nlci1zY3JvbGxhYmxlXCI+XHJcbiAgPG1hdC1kcmF3ZXItY29udGFpbmVyIGNsYXNzPVwiZmlsbFwiPlxyXG4gICAgPG1hdC1kcmF3ZXIgI2ZpbHRlclBhbmUgcG9zaXRpb249XCJlbmRcIiBjbGFzcz1cImRyYXdlci1zbWFsbCBkcmF3ZXItd2l0aC1sb2FkZXJcIj5cclxuICAgICAgQGlmIChmaWx0ZXJCdXN5KCkpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj48L2Rpdj5cclxuICAgICAgfVxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGaWxsPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiNnB4XCI+XHJcbiAgICAgICAgICBAaWYgKGZpbHRlckJ1c3koKSkge1xyXG4gICAgICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgc3R5bGU9XCJ6LWluZGV4OiAxMTtcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPlxyXG4gICAgICAgICAgPC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiNTZweFwiIGNsYXNzPVwidGl0bGUtY29udGFpbmVyLXdpdGgtbG9hZGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleEFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aXRsZVwiPkFmZmluYSByaWNlcmNhPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4TGF5b3V0QWxpZ249XCJlbmRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJQYW5lKClcIlxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIk5hc2NvbmRpXCI+PG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBjbGFzcz1cInNjcm9sbC1oaWRkZW5cIj5cclxuICAgICAgICAgIDxjbGlwcGVyLXNlYXJjaC1mYWNldHMgI2ZhY2V0cz48L2NsaXBwZXItc2VhcmNoLWZhY2V0cz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1kcmF3ZXI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGaWxsPlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIipcIiBbaWRdPVwic2Nyb2xsZXJJZFwiIGNsYXNzPVwic2Nyb2xsLWF1dG9cIiBzdHlsZT1cInBhZGRpbmc6IDAgNXB4O1wiPlxyXG4gICAgICAgIEBpZiAoIXNuYXBzaG90LnRvdGFsKSB7XHJcbiAgICAgICAgPHAgY2xhc3M9XCJtZXNzYWdlXCI+PGk+TmVzc3VuIGVsZW1lbnRvIGRhIHZpc3VhbGl6emFyZS48L2k+PC9wPlxyXG4gICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICBAZm9yIChpdGVtIG9mIHNuYXBzaG90Lml0ZW1zOyB0cmFjayAkaW5kZXg7IGxldCBpID0gJGluZGV4KSB7XHJcbiAgICAgICAgICBAaWYgKGl0ZW0uZ3JvdXApIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtcy1ncm91cC10aXRsZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZ3JvdXAtc3BhY2VkJzogaSA+IDB9XCI+e3tpdGVtLmdyb3VwfX08L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPGRpdiAoY29udGV4dG1lbnUpPVwib25Db250ZXh0TWVudSgkZXZlbnQsIGl0ZW0pXCIgKG1vdXNlZW50ZXIpPVwiaXRlbS5pc092ZXIgPSB0cnVlXCJcclxuICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaXRlbS5pc092ZXIgPSBmYWxzZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCI2cHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsIGNsYXNzPVwiaXRlbVwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpdGVtLXNlbGVjdGVkJzogc2VsZWN0aW9uPy5pc1NlbGVjdGVkKGl0ZW0uZG9jdW1lbnRJZCkgfVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiNTRweFwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXJcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogNnB4O1wiPlxyXG4gICAgICAgICAgICAgICAgQGlmIChzY3JlZW5TZXJ2aWNlLmlzVG91Y2hhYmxlIHx8IGl0ZW0uaXNPdmVyIHx8IHNlbGVjdGlvbj8uaXNTZWxlY3RlZChpdGVtLmRvY3VtZW50SWQpKSB7XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbj8udG9nZ2xlKGl0ZW0sIGl0ZW0uZG9jdW1lbnRJZCkgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uPy5pc1NlbGVjdGVkKGl0ZW0uZG9jdW1lbnRJZClcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJpdGVtLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxjbGlwcGVyLXNlYXJjaC1yZXN1bHQtaXRlbSBbaXRlbV09XCJpdGVtXCIgW3BhcmVudF09XCJ0aGlzXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlNb2RlbE5hbWVdPVwidHJ1ZVwiPjwvY2xpcHBlci1zZWFyY2gtcmVzdWx0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCI0OHB4XCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgICAgICAgQGlmIChpdGVtLmlzT3ZlciB8fCBpdGVtLmlzTWVudU9wZW4gfHwgc2VsZWN0aW9uPy5pc1NlbGVjdGVkKGl0ZW0uZG9jdW1lbnRJZCkpIHtcclxuICAgICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJNZW51XCJcclxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBvcHppb25pJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb250ZXh0TWVudVwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwie2l0ZW06IGl0ZW19XCIgKGNsaWNrKT1cIml0ZW0uaXNNZW51T3BlbiA9IHRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICNjb250ZXh0TWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiIHN0eWxlPVwicG9zaXRpb246IGZpeGVkXCIgW3N0eWxlLmxlZnRdPVwiY29udGV4dE1lbnVQb3NpdGlvbi54XCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS50b3BdPVwiY29udGV4dE1lbnVQb3NpdGlvbi55XCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbnRleHRNZW51XCJcclxuICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwie2l0ZW06IGl0ZW19XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8bWF0LW1lbnUgI2NvbnRleHRNZW51PVwibWF0TWVudVwiIChjbG9zZWQpPVwidXBkYXRlTWVudUJ1dHRvbnNWaXNpYmlsaXR5KClcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgIDxjbGlwcGVyLWRvY3VtZW50LW1lbnUgW3BhcmVudF09XCJ0aGlzXCIgW2l0ZW1dPVwiaXRlbVwiIFt1c2VTZWxlY3Rpb25zXT1cImNhblNlbGVjdCgpXCIgW2lzUmVhZGFibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgW2lzTGF3SW5Gb3JjZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgPC9jbGlwcGVyLWRvY3VtZW50LW1lbnU+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gZm9vdGVyIC0tPlxyXG4gICAgICBAaWYgKChzbmFwc2hvdD8udG90YWwgPz8gMCkgPiAwKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpdGVtcy1mb290ZXJcIj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhMYXlvdXRBbGlnbj1cImVuZCBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgICA8bWF0LXBhZ2luYXRvciAjcGFnaW5hdG9yIGNsYXNzPVwicGFnaW5hdG9yXCIgW2hpZGVQYWdlU2l6ZV09XCJ0cnVlXCIgW2xlbmd0aF09XCJzbmFwc2hvdD8udG90YWwgPz8gMFwiXHJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJmaWx0ZXJQYXJhbXMuY291bnQgPz8gMTVcIiBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiIChwYWdlKT1cImZldGNoTW9yZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8L21hdC1wYWdpbmF0b3I+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1kcmF3ZXItY29udGFpbmVyPlxyXG48L2Rpdj4iXX0=
|
|
743
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvYnJvd3Nlci1kaWFsb2cvYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvYnJvd3Nlci1kaWFsb2cvYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsK0NBQStDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1B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MktBQ2hDLGtCQUFrQjs7MkZBR1QsNkJBQTZCO2tCQWpDekMsU0FBUzsyQkFDRixFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFHakM7d0JBQ1QsK0NBQStDO3FCQUNoRCxtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsVUFBVTt3QkFDVixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQiw0QkFBNEI7d0JBQzVCLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixvQkFBb0I7d0JBQ3BCLDRCQUE0Qjt3QkFDNUIsT0FBTzt3QkFDUCxnQ0FBZ0M7d0JBQ2hDLGtCQUFrQjtxQkFDbkI7OEJBS3dCLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEJhZGdlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYmFkZ2UnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTUFUX0RBVEVQSUNLRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllfUFJPVklERVIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcclxuaW1wb3J0IHsgTWF0RHJhd2VyLCBNYXRTaWRlbmF2TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XHJcbmltcG9ydCB7IE1hdFRhYnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQge1xyXG4gIENsaXBwZXJBdXRob3JzLFxyXG4gIENsaXBwZXJEb2N1bWVudENoYW5nZVJlYXNvbixcclxuICBDbGlwcGVyTWVzc2FnZXMsXHJcbiAgQ2xpcHBlck1vZGVsLFxyXG4gIENsaXBwZXJNb2RlbHMsXHJcbiAgQ2xpcHBlclNlYXJjaEZhY2V0c1NuYXBzaG90LFxyXG4gIENsaXBwZXJTZWFyY2hQYXJhbXMsXHJcbiAgQ2xpcHBlclNlYXJjaFJlc3VsdCxcclxuICBDbGlwcGVyU2VhcmNoVXRpbHMsXHJcbiAgQ2xpcHBlclNlY3RvclR5cGVzLFxyXG4gIENsaXBwZXJTZWN0b3JzLFxyXG4gIENsaXBwZXJTZWxlY3Rpb25Nb2RlLFxyXG4gIENsaXBwZXJTb3J0LFxyXG4gIENsaXBwZXJTb3VyY2VzXHJcbn0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbic7XHJcbmltcG9ydCB7IFNlbGVjdGFibGVNb2RlbCwgU3lzdGVtVXRpbHMgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQgeyBFeHRlbmRlZE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dC9leHRlbmRlZCc7XHJcbmltcG9ydCB7IEZsZXhNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQvZmxleCc7XHJcbmltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50c1V0aWxzIH0gZnJvbSAnLi4vLi4vZG9jdW1lbnRzJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50TWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2RvY3VtZW50LW1lbnUvZG9jdW1lbnQtbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWRpYWxvZy9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hGYWNldHNDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZmFjZXRzL3NlYXJjaC1mYWNldHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZyZWVUZXh0SGVscENvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mcmVlLXRleHQtaGVscC9zZWFyY2gtZnJlZS10ZXh0LWhlbHAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZyZWVUZXh0UXVlcnlCdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWZyZWUtdGV4dC1xdWVyeS1idWlsZGVyL3NlYXJjaC1mcmVlLXRleHQtcXVlcnktYnVpbGRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtaXRlbS9zZWFyY2gtcmVzdWx0LWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXIgfSBmcm9tICcuLi9zZWFyY2gtcmVzdWx0LW1hbmFnZXIvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyJztcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENsaXBwZXJCcm93c2VyRGlhbG9nRGF0YSB7XHJcbiAgc2VsZWN0aW9uTW9kZT86IENsaXBwZXJTZWxlY3Rpb25Nb2RlIHwgbnVsbCxcclxuICBzZWxlY3RhYmxlTW9kZWxzPzogbnVtYmVyW10gfCBudWxsLFxyXG4gIGluaXRpYWxNb2RlbD86IG51bWJlciB8IG51bGxcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgaG9zdDogeyAnQmluZCc6IFN5c3RlbVV0aWxzLmdlbmVyYXRlVVVJRCgpIH0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jyb3dzZXItZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9icm93c2VyLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgTUFUX0RBVEVQSUNLRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllfUFJPVklERVJcclxuICBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgRmxleE1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0QmFkZ2VNb2R1bGUsXHJcbiAgICBNYXRUYWJzTW9kdWxlLFxyXG4gICAgRXh0ZW5kZWRNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICBNYXRNZW51TW9kdWxlLFxyXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcclxuICAgIENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQsXHJcbiAgICBNYXREaWFsb2dDb250ZW50LFxyXG4gICAgTWF0U2lkZW5hdk1vZHVsZSxcclxuICAgIE1hdFByb2dyZXNzQmFyTW9kdWxlLFxyXG4gICAgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCxcclxuICAgIE5nQ2xhc3MsXHJcbiAgICBDbGlwcGVyU2VhcmNoUmVzdWx0SXRlbUNvbXBvbmVudCxcclxuICAgIE1hdFBhZ2luYXRvck1vZHVsZVxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyQnJvd3NlckRpYWxvZ0NvbXBvbmVudFxyXG4gIGV4dGVuZHMgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXJcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdmaWx0ZXJQYW5lJykgZmlsdGVyUGFuZSE6IE1hdERyYXdlcjtcclxuXHJcbiAgcHJpdmF0ZSBkaWFsb2dSZWYgPSBpbmplY3QoTWF0RGlhbG9nUmVmPENsaXBwZXJCcm93c2VyRGlhbG9nQ29tcG9uZW50Pik7XHJcbiAgcHJvdGVjdGVkIGRpYWxvZ0RhdGE6IENsaXBwZXJCcm93c2VyRGlhbG9nRGF0YSA9IGluamVjdChNQVRfRElBTE9HX0RBVEEpO1xyXG4gIHByb3RlY3RlZCB0aXRsZTogc3RyaW5nID0gJ1JpY2VyY2EgaW4gQ2xpcHBlcic7XHJcbiAgcHJvdGVjdGVkIHNuYXBzaG90OiBDbGlwcGVyU2VhcmNoUmVzdWx0ID0ge1xyXG4gICAgc2VhcmNoSW5mbzogbnVsbCxcclxuICAgIHNlYXJjaFBhcmFtczogbmV3IENsaXBwZXJTZWFyY2hQYXJhbXMoKVxyXG4gIH07XHJcblxyXG4gIHByb3RlY3RlZCBjdXJyZW50TW9kZWw6IHN0cmluZyA9ICdUdXR0byc7XHJcbiAgcHJvdGVjdGVkIGN1cnJlbnRTb3J0OiBzdHJpbmcgPSAnUmlsZXZhbnphJztcclxuXHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gVXNlIHNlcnZpY2Ugc25hcHNob3RcclxuICAgIHRoaXMuc25hcHNob3QgPSB0aGlzLmNsaXBwZXJTZXJ2aWNlLnNuYXBzaG90O1xyXG4gICAgaWYgKCF0aGlzLnNuYXBzaG90KVxyXG4gICAgICB0aGlzLnNuYXBzaG90ID0ge1xyXG4gICAgICAgIHNlYXJjaEluZm86IG51bGwsXHJcbiAgICAgICAgc2VhcmNoUGFyYW1zOiBudWxsLFxyXG4gICAgICB9O1xyXG4gICAgaWYgKCF0aGlzLmZpbHRlclBhcmFtcykge1xyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcyA9IG5ldyBDbGlwcGVyU2VhcmNoUGFyYW1zKCk7XHJcbiAgICAgIC8vIFN0b3JlIHNuYXBzaG90XHJcbiAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2Uuc25hcHNob3QgPSB0aGlzLnNuYXBzaG90O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxpemUgc2VsZWN0aW9uXHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3RhYmxlTW9kZWw8YW55LCBzdHJpbmc+KHRydWUsICdkb2N1bWVudElkJyk7XHJcblxyXG4gICAgLy8gVXBkYXRlIG1vZGVsXHJcbiAgICBpZiAodGhpcy5kaWFsb2dEYXRhLmluaXRpYWxNb2RlbCkge1xyXG4gICAgICB0aGlzLmNoYW5nZU1vZGVsKHRoaXMuZGlhbG9nRGF0YS5pbml0aWFsTW9kZWwsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2UuZ2V0TWVzc2FnZSgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgobWVzc2FnZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IENsaXBwZXJNZXNzYWdlcy5ET0NVTUVOVF9TRUxFQ1RFRF9JTk5FUikge1xyXG4gICAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5ET0NVTUVOVF9TRUxFQ1RFRCwgbWVzc2FnZS5kYXRhKTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBSZWFjdCB0byB3aW5kb3cgc2l6ZSBjaGFuZ2VcclxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSksIGRlYm91bmNlVGltZSgyNTApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnZpc2libGUuc2V0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgIHRoaXMuY2xpcHBlclNlcnZpY2UudmlzaWJsZS5zZXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyBIYW5kbGUgZmlsdGVyIHBhbmUgXHJcbiAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgICAgLy8gSGFuZGxlIGZhY2V0c1xyXG4gICAgICBpZiAodGhpcy5mYWNldHMpIHtcclxuICAgICAgICB0aGlzLmZhY2V0cy5jaGFuZ2VkXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogQ2xpcHBlclNlYXJjaEZhY2V0c1NuYXBzaG90KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZTtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50b0RhdGUgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnllYXIgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cz8uY2hhbmdlZEludGVydmFsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMueWVhciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRvRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3IgfHwgdGhpcy5zbmFwc2hvdC5mYWNldHM/LmNoYW5nZWRTZWN0b3IpXHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID0gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvcjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlIHx8IHRoaXMuc25hcHNob3QuZmFjZXRzPy5jaGFuZ2VkVHlwZSlcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50eXBlID0gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnR5cGU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cz8uYXV0aG9yIHx8IHRoaXMuc25hcHNob3QuZmFjZXRzPy5jaGFuZ2VkQXV0aG9yKVxyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmF1dGhvciA9IHRoaXMuc25hcHNob3QuZmFjZXRzPy5hdXRob3I7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2godHJ1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUmVzaXplIFxyXG4gKi9cclxuICBwcml2YXRlIHJlc2l6ZSgpIHtcclxuICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsaXBwZXItYnJvd3Nlci1zY3JvbGxhYmxlJyk7XHJcbiAgICBpZiAoZWxlbSkge1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZ2V0Q3VycmVudERpYWxvZ1Njcm9sbGFibGVIZWlnaHQoXHJcbiAgICAgICAgWydjbGlwcGVyLWJyb3dzZXItZml4ZWQnXSxcclxuICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHRcclxuICAgICAgKTtcclxuICAgICAgaWYgKGhlaWdodCAhPSBlbGVtLmNsaWVudEhlaWdodCkge1xyXG4gICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdzdHlsZScsICdwYWRkaW5nOjAgMCAwIDA7aGVpZ2h0OicgKyBoZWlnaHQgKyAncHggIWltcG9ydGFudDttYXgtaGVpZ2h0OicgKyBoZWlnaHQgKyAncHggIWltcG9ydGFudCcpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9LCAxMDApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiogU2hvdyBoaWRlIGZpbHRlciBwYW5lIG1hbnVhbGx5XHJcbiovXHJcbiAgcHJvdGVjdGVkIHRvZ2dsZUZpbHRlclBhbmUoKSB7XHJcbiAgICB0aGlzLmZpbHRlclBhbmVDbG9zZWQgPSAhdGhpcy5maWx0ZXJQYW5lQ2xvc2VkO1xyXG4gICAgdGhpcy5maWx0ZXJQYW5lPy50b2dnbGUoKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgZmlsdGVyIHBhbmUgdmlzaWJpbGl0eVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKSB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYW5lKSB7XHJcbiAgICAgIGlmICh0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuWFNtYWxsKSB8fFxyXG4gICAgICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChCcmVha3BvaW50cy5TbWFsbCkgfHxcclxuICAgICAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuTWVkaXVtKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclBhbmUub3BlbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm1vZGUgPSAnb3Zlcic7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmRpc2FibGVDbG9zZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZUhhc0JhY2tkcm9wID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyUGFuZS5vcGVuZWQgJiYgIXRoaXMuZmlsdGVyUGFuZUNsb3NlZCAmJiB0aGlzLmhhc0ZhY2V0cygpKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUub3BlbigpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJQYW5lLm9wZW5lZCAmJiB0aGlzLmZpbHRlclBhbmVDbG9zZWQpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFuZS5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbHRlclBhbmUubW9kZSA9ICdzaWRlJztcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmUuZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmVIYXNCYWNrZHJvcCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGRvY3VtZW50cyBjYW4gYmUgc2VsZWN0ZWQgYW5kIHJldHVybmVkIGFzIG1lc3NhZ2VcclxuICAgKi9cclxuICBjYW5TZWxlY3QoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgYWxsb3cgPVxyXG4gICAgICB0aGlzLnNlbGVjdGlvbiAmJlxyXG4gICAgICAoKHRoaXMuZGlhbG9nRGF0YS5zZWxlY3Rpb25Nb2RlID09PSAxICYmXHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY3VycmVudC5zZWxlY3RlZC5sZW5ndGggPT09IDEpIHx8XHJcbiAgICAgICAgKHRoaXMuZGlhbG9nRGF0YS5zZWxlY3Rpb25Nb2RlID09PSAyICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jdXJyZW50LnNlbGVjdGVkLmxlbmd0aCA+IDEpIHx8XHJcbiAgICAgICAgKHRoaXMuZGlhbG9nRGF0YS5zZWxlY3Rpb25Nb2RlID09PSAzICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jdXJyZW50LnNlbGVjdGVkLmxlbmd0aCA+IDApKTtcclxuICAgIGlmIChhbGxvdyAmJiB0aGlzLmRpYWxvZ0RhdGEuc2VsZWN0YWJsZU1vZGVscz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5jdXJyZW50LnNlbGVjdGVkLmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5zZWxlY3RhYmxlTW9kZWxzLmluZGV4T2Yobi5tb2RlbCkgPT09IC0xKSB7XHJcbiAgICAgICAgICBhbGxvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWxsb3c7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBhIG1lc3NhZ2Ugd2l0aCBjdXJyZW50IHNlbGVjdGlvbiBhbmQgY2xvc2UgZGlhbG9nXHJcbiAgICovXHJcbiAgc2VsZWN0KCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3Rpb24uY3VycmVudC5zZWxlY3RlZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShcclxuICAgICAgICBDbGlwcGVyTWVzc2FnZXMuRE9DVU1FTlRfU0VMRUNURUQsXHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY3VycmVudC5zZWxlY3RlZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSBkaWFsb2dcclxuICAgKiBAcGFyYW0gbmV3Um91dGU6IHRoZSBuZXcgcm91dGUgdG8gbmF2aWdhdGUgdG9cclxuICAgKi9cclxuICBjbG9zZShuZXdSb3V0ZTogYW55ID0gbnVsbCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UobmV3Um91dGUpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBzb3J0XHJcbiAgICovXHJcbiAgdXBkYXRlU29ydE9wdGlvbnMoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZmlsdGVyUGFyYW1zLnNvcnRNb2RlKSB7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclNvcnQuRGF0ZUFzYzpcclxuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0ID0gJ0RhdGEgY3JlLic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclNvcnQuUG9wdWxhcml0eTpcclxuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0ID0gJ1BvcG9sYXJpdMOgJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDbGlwcGVyU29ydC5SZWxldmFuY2U6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydCA9ICdSaWxldmFuemEnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNvcnRNb2RlID0gQ2xpcHBlclNvcnQuRGF0ZURlc2M7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydCA9ICdEYXRhIGRlY3IuJztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgY3VycmVudCBzZWFyY2ggaW5mb1xyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlU2VhcmNoSW5mbygpIHtcclxuICAgIGxldCBzaSA9IFtdO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3IgfHxcclxuICAgICAgKHRoaXMuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3IpXHJcbiAgICApIHtcclxuICAgICAgbGV0IHMgPSBTeXN0ZW1VdGlscy5hcnJheUZpbmRCeUtleShcclxuICAgICAgICBDbGlwcGVyU2VjdG9ycyxcclxuICAgICAgICAndmFsdWUnLFxyXG4gICAgICAgIHRoaXMuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3JcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvclxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3JcclxuICAgICAgKTtcclxuICAgICAgaWYgKHMpIHtcclxuICAgICAgICBzaS5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkOiAnc2V0dG9yZScsXHJcbiAgICAgICAgICB2YWx1ZTogcy5uYW1lLFxyXG4gICAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBzID0gU3lzdGVtVXRpbHMuYXJyYXlGaW5kQnlLZXkoXHJcbiAgICAgICAgICBDbGlwcGVyTW9kZWxzLFxyXG4gICAgICAgICAgJ3ZhbHVlJyxcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3JcclxuICAgICAgICAgICAgPyB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yXHJcbiAgICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAocykge1xyXG4gICAgICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc2V6aW9uZScsXHJcbiAgICAgICAgICAgIHZhbHVlOiBzLm5hbWUsXHJcbiAgICAgICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5hdXRob3IgfHxcclxuICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5hdXRob3IpXHJcbiAgICApIHtcclxuICAgICAgbGV0IGEgPSBTeXN0ZW1VdGlscy5hcnJheUZpbmRCeUtleShcclxuICAgICAgICBDbGlwcGVyQXV0aG9ycyxcclxuICAgICAgICAndmFsdWUnLFxyXG4gICAgICAgIHRoaXMuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5hdXRob3JcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LmF1dGhvclxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5hdXRob3JcclxuICAgICAgKTtcclxuICAgICAgaWYgKGEpIHtcclxuICAgICAgICBzaS5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkOiAnYXV0b3JlJyxcclxuICAgICAgICAgIHZhbHVlOiBhLmF1dGhvckRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMudG9waWMpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnYXJnb21lbnRvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMudG9waWMsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy50YXhvbm9teSlcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdhcmdvbWVudG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy50YXhvbm9teU5vZGUsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5udW1iZXIpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnbnVtZXJvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMubnVtYmVyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnNuYXBzaG90LmludGVydmFsICYmXHJcbiAgICAgICh0aGlzLmZpbHRlclBhcmFtcy5mcm9tRGF0ZSB8fFxyXG4gICAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJlxyXG4gICAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHM/LmZyb21EYXRlICYmXHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlbCAhPT1cclxuICAgICAgICAgIENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvKSlcclxuICAgICkge1xyXG4gICAgICBsZXQgZDEgPVxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZVxyXG4gICAgICAgICAgPyB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGU7XHJcbiAgICAgIGNvbnN0IGQyID1cclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlO1xyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogIWQyID8gJ2luIGRhdGEnIDogJ2RhIGRhdGEnLFxyXG4gICAgICAgIHZhbHVlOiBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGQxKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnNuYXBzaG90LmludGVydmFsICYmXHJcbiAgICAgICh0aGlzLmZpbHRlclBhcmFtcy50b0RhdGUgfHxcclxuICAgICAgICAodGhpcy5zbmFwc2hvdC5mYWNldHMgJiZcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGUgJiZcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZGVsICE9PVxyXG4gICAgICAgICAgQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8pKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBkID1cclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlO1xyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2EgZGF0YScsXHJcbiAgICAgICAgdmFsdWU6IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoZCksXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNuYXBzaG90LmludGVydmFsKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2ludGVydmFsbG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLnNuYXBzaG90LmludGVydmFsLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuc291cmNlKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2ZvbnRlJyxcclxuICAgICAgICB2YWx1ZTogU3lzdGVtVXRpbHMuYXJyYXlHZXRWYWx1ZShcclxuICAgICAgICAgIENsaXBwZXJTb3VyY2VzLFxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc291cmNlXHJcbiAgICAgICAgKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZU51bWJlcilcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdudW0uIGZvbnRlJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMuc291cmNlTnVtYmVyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZUZyb21EYXRlIHx8XHJcbiAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJlxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZSAmJlxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZGVsID09PVxyXG4gICAgICAgIENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBkMSA9XHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgJiYgdGhpcy5zbmFwc2hvdC5mYWNldHM/LmZyb21EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZVxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VGcm9tRGF0ZTtcclxuICAgICAgY29uc3QgZDIgPVxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZVxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VUb0RhdGU7XHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAhZDIgPyAnaW4gZGF0YSBmb250ZScgOiAnZGEgZGF0YSBmb250ZScsXHJcbiAgICAgICAgdmFsdWU6IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoZDEpLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZVRvRGF0ZSB8fFxyXG4gICAgICAodGhpcy5zbmFwc2hvdC5mYWNldHMgJiZcclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlICYmXHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZWwgPT09XHJcbiAgICAgICAgQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8pXHJcbiAgICApIHtcclxuICAgICAgbGV0IGQgPVxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZVxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VUb0RhdGU7XHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnYSBkYXRhIGZvbnRlJyxcclxuICAgICAgICB2YWx1ZTogU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShkKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnRleHQpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAndGVzdG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy50ZXh0LFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnR5cGUgfHxcclxuICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCB0ID0gU3lzdGVtVXRpbHMuYXJyYXlGaW5kQnlLZXkoXHJcbiAgICAgICAgQ2xpcHBlclNlY3RvclR5cGVzLFxyXG4gICAgICAgICd2YWx1ZScsXHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgJiYgdGhpcy5zbmFwc2hvdC5mYWNldHM/LnR5cGVcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnR5cGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMudHlwZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodCkge1xyXG4gICAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgICAgZmllbGQ6ICd0aXBvJyxcclxuICAgICAgICAgIHZhbHVlOiB0LmRvY3VtZW50VHlwZURlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuc2hvd1VucmVhZERvY3VtZW50c09ubHkpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnc3RhdG8nLFxyXG4gICAgICAgIHZhbHVlOiAnbm9uIGxldHRpJyxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VSZWFzb24gfHxcclxuICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5yZWFzb24pXHJcbiAgICApXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAndGlwbyBtb2QuJyxcclxuICAgICAgICB2YWx1ZTogU3lzdGVtVXRpbHMuYXJyYXlHZXRWYWx1ZShcclxuICAgICAgICAgIENsaXBwZXJEb2N1bWVudENoYW5nZVJlYXNvbixcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5yZWFzb25cclxuICAgICAgICAgICAgPyB0aGlzLnNuYXBzaG90LmZhY2V0cz8ucmVhc29uXHJcbiAgICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuY2hhbmdlUmVhc29uXHJcbiAgICAgICAgKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWROdW1iZXIpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnbnVtLiBtb2RpZmljYXRvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMuY2hhbmdlZE51bWJlcixcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWRZZWFyKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2Fubm8gbW9kaWZpY2F0bycsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWRZZWFyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuY2hhbmdlZFRpdGxlKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ3RpdG9sbyBtb2RpZmljYXRvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMuY2hhbmdlZFRpdGxlLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMubW9kaWZpZXJOdW1iZXIpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnbnVtLiBtb2RpZmljYW50ZScsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLm1vZGlmaWVyTnVtYmVyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMubW9kaWZpZXJZZWFyKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2Fubm8gbW9kaWZpY2FudGUnLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy5tb2RpZmllclllYXIsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5tb2RpZmllclRpdGxlKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ3RpdG9sbyBtb2RpZmljYW50ZScsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLm1vZGlmaWVyVGl0bGUsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNuYXBzaG90LnNlYXJjaEluZm8gPSBzaTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBDaGFuZ2Ugc2VhcmNoIG1vZGVsXHJcbiAqIEBwYXJhbSBtb2RlbCA6IHRoZSBuZXcgZG9jdW1lbnQgbW9kZWwgXHJcbiAqIEBwYXJhbSBmZXRjaCA6IHRydWUgaWYgZGF0YSBtdXN0IGJlIGZldGNoZWQuIERlZmF1bHQgaXMgdHJ1ZVxyXG4gKi9cclxuICBjaGFuZ2VNb2RlbChtb2RlbDogbnVtYmVyID0gbnVsbCwgZmV0Y2g6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgc3dpdGNoIChtb2RlbCkge1xyXG4gICAgICBjYXNlIENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvOiB0aGlzLmN1cnJlbnRNb2RlbCA9IFwiR2F6emV0dGUgZSBib2xsZXR0aW5pXCI7IGJyZWFrO1xyXG4gICAgICBjYXNlIENsaXBwZXJNb2RlbC5Ob3JtYXRpdmFWaWdlbnRlOiB0aGlzLmN1cnJlbnRNb2RlbCA9IFwiTm9ybWF0aXZhIHZpZ2VudGVcIjsgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TW9kZWwgPSBcIlR1dHRvXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBpZiAoZmV0Y2gpXHJcbiAgICAgIHRoaXMuZmV0Y2godHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBseSBhIHNvcnRcclxuICAgKiBAcGFyYW0gbW9kZSA6IHRoZSBzb3J0IG1vZGVcclxuICAgKi9cclxuICBzb3J0QnkobW9kZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmZpbHRlclBhcmFtcy5zb3J0TW9kZSA9IG1vZGU7XHJcbiAgICB0aGlzLnVwZGF0ZVNvcnRPcHRpb25zKCk7XHJcbiAgICB0aGlzLmZldGNoKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBHZXQgZmFjZXRzXHJcbiAqL1xyXG4gIGZldGNoRmFjZXRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgIHRoaXMuZmlsdGVyQnVzeS5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnF1ZXJ5RmFjZXRzKHRoaXMuZmlsdGVyUGFyYW1zKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocikgPT4ge1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVSZXN1bHRzKG51bGwsIHIudmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJCdXN5LnNldChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhpZGUgZmFjZXRzXHJcbiAgICovXHJcbiAgaGlkZUZhY2V0cygpIHtcclxuICAgIHRoaXMuZmFjZXRzPy5yZXNldCgpO1xyXG4gICAgdGhpcy5maWx0ZXJQYW5lLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBhIHNlYXJjaCB1c2luZyBjdXJyZW50IHBhcmFtc1xyXG4gICAqL1xyXG4gIGZldGNoKG5ld1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnUmljZXJjYSBpbiBjb3Jzby4uLicpO1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMuY291bnQgPSAxNTtcclxuICAgIGlmIChuZXdTZWFyY2gpIHtcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZmlyc3QgPSAwO1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMudGV4dClcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5zb3J0TW9kZSA9IENsaXBwZXJTb3J0LlJlbGV2YW5jZTtcclxuICAgICAgZWxzZSBpZiAoIXRoaXMuZmlsdGVyUGFyYW1zLnNvcnRNb2RlKVxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNvcnRNb2RlID0gQ2xpcHBlclNvcnQuRGF0ZURlc2M7XHJcbiAgICAgIHRoaXMudXBkYXRlU29ydE9wdGlvbnMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy55ZWFyID4gMCkge1xyXG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy5maWx0ZXJQYXJhbXMueWVhcjtcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGUgPSBuZXcgRGF0ZSh5ZWFyLCAwLCAxLCAyKTtcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlID0gbmV3IERhdGUoeWVhciwgMTEsIDMxLCAyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnllYXIgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnRleHQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudGV4dCA9IENsaXBwZXJTZWFyY2hVdGlscy5ub3JtYWxpemVUZXh0UXVlcnkodGhpcy5maWx0ZXJQYXJhbXMudGV4dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnF1ZXJ5KHRoaXMuZmlsdGVyUGFyYW1zKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocjogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXIuc3VjY2VzcykgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlUmVzdWx0cyhyLnZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEhhbmRsZSBmYWNldHNcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QudG90YWwgPiAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5ld1NlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGZhY2V0c1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEZhY2V0cygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmhpZGVGYWNldHMoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG5ld1NlYXJjaCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRvcikgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwoMCk7XHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgdmlld1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaEluZm8oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYSBuZXcgcGFnZSByZXN1bHRcclxuICAgKiBAcGFyYW0gZSA6IHRoZSBNYXRQYWdpbmF0b3IgUGFnZUV2ZW50IGRhdGFcclxuICAgKi9cclxuICBmZXRjaE1vcmUoZTogYW55KSB7XHJcbiAgICBsZXQgZmlyc3QgPSBlLnBhZ2VJbmRleCAqIHRoaXMuZmlsdGVyUGFyYW1zLmNvdW50O1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMuZmlyc3QgPSBmaXJzdDtcclxuICAgIHRoaXMuZmV0Y2goKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHNlYXJjaFxyXG4gICAqL1xyXG4gIGNsZWFyU2VhcmNoKCkge1xyXG4gICAgdGhpcy5jdXJyZW50TW9kZWwgPSAnTm9ybWF0aXZhIHZpZ2VudGUnO1xyXG4gICAgdGhpcy5zbmFwc2hvdC5pdGVtcyA9IG51bGw7XHJcbiAgICB0aGlzLnNuYXBzaG90LnRvdGFsID0gMDtcclxuICAgIHRoaXMuc25hcHNob3QuZmFjZXRzID0gbnVsbDtcclxuICAgIHRoaXMuZmFjZXRzLnJlc2V0KCk7XHJcbiAgICB0aGlzLmZpbHRlclBhcmFtcyA9IG5ldyBDbGlwcGVyU2VhcmNoUGFyYW1zKCk7XHJcbiAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgIHRoaXMudXBkYXRlU2VhcmNoSW5mbygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbiBhbiBpdGVtXHJcbiAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgKiBAcGFyYW0gbmV3V2luZG93OiB0cnVlIGlmIHRoZSBkb2N1bWVudCBtdXN0IGJlIG9wZW4gaW50byBhIG5ldyB3aW5kb3dcclxuICAgKi9cclxuICBvcGVuKGRvY3VtZW50SWQ6IHN0cmluZywgbmV3V2luZG93OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICghbmV3V2luZG93KSB0aGlzLm9wZW5Eb2N1bWVudChkb2N1bWVudElkKTtcclxuICAgIGVsc2Ugd2luZG93Lm9wZW4oJy9kb2N1bWVudG8vJyArIGRvY3VtZW50SWQsICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gYSBkb2N1bWVudFxyXG4gICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvcGVuRG9jdW1lbnQoZG9jdW1lbnRJZDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIWRvY3VtZW50SWQpIHJldHVybjtcclxuICAgIENsaXBwZXJEb2N1bWVudHNVdGlscy5vcGVuRG9jdW1lbnQoXHJcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZSxcclxuICAgICAgdGhpcy5jbGlwcGVyU2VydmljZSxcclxuICAgICAgZG9jdW1lbnRJZCxcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudGV4dCxcclxuICAgICAgdGhpcy5kaWFsb2dEYXRhLnNlbGVjdGlvbk1vZGVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wb3NlIGEgZnJlZSB0ZXh0IHNlYXJjaCBxdWVyeVxyXG4gICAqL1xyXG4gIGNvbXBvc2VTZWFyY2goKSB7XHJcbiAgICBsZXQgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJTZWFyY2hGcmVlVGV4dFF1ZXJ5QnVpbGRlckNvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdjb3N0cnVpc2NpIHJpY2VyY2EnLFxyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IHRydWUsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogJzYwMHB4JyxcclxuICAgICAgd2lkdGg6ICc5OSUnLFxyXG4gICAgfSk7XHJcbiAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudGV4dCA9IHIucXVlcnk7XHJcbiAgICAgICAgZC5jbG9zZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICogUGVyZm9ybSBzZWFyY2hcclxuICovXHJcbiAgc2VhcmNoKCkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvciA9PT0gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvcilcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID0gbnVsbDtcclxuXHJcbiAgICAvLyBSZXNldCBwYWdpbmF0b3JcclxuICAgIGlmICh0aGlzLnBhZ2luYXRvcikgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuXHJcbiAgICAvLyBSZXNldCBmYWNldHMgc2VhcmNoXHJcbiAgICB0aGlzLmZhY2V0cy5yZXNldCgpO1xyXG5cclxuICAgIC8vIERvIHNlYXJjaFxyXG4gICAgdGhpcy5mZXRjaCh0cnVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYWR2YW5jZWQgc2VhcmNoXHJcbiAgICovXHJcbiAgYWR2YW5jZWRTZWFyY2goKSB7XHJcbiAgICBsZXQgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJTZWFyY2hEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgYXJpYUxhYmVsOiAncmljZXJjYSBhdmFuemF0YScsXHJcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBwYXJhbXM6IHRoaXMuZmlsdGVyUGFyYW1zLFxyXG4gICAgICAgIGVuYWJsZVJlYWQ6IGZhbHNlLFxyXG4gICAgICAgIGVuYWJsZVNlY3RvcjogdHJ1ZSxcclxuICAgICAgICBlbmFibGVUeXBlOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZUF1dGhvcjogdHJ1ZSxcclxuICAgICAgICBlbmFibGVUb3BpYzogdHJ1ZSxcclxuICAgICAgICBlbmFibGVUZXh0OiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZURvY3VtZW50OiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZVNvdXJjZTogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgIG1heFdpZHRoOiAnNzAwcHgnLFxyXG4gICAgICB3aWR0aDogJzk5JScsXHJcbiAgICB9KTtcclxuICAgIGQuY29tcG9uZW50SW5zdGFuY2UuZG9uZVxyXG4gICAgICAuc3Vic2NyaWJlKChyOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBVcGRhdGUgc2VhcmNoIHBhcmFtc1xyXG4gICAgICAgIHIubW9kZWwgPSB0aGlzLmZpbHRlclBhcmFtcy5tb2RlbDtcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcyA9IHI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZmlyc3QgPSAwO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmNvdW50ID0gMTU7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvciA9PT0gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvcilcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IHBhZ2luYXRvclxyXG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRvcikgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgLy8gUmVzZXQgZmFjZXRzIHNlYXJjaFxyXG4gICAgICAgIHRoaXMuZmFjZXRzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIC8vIERvIHNlYXJjaFxyXG4gICAgICAgIHRoaXMuZmV0Y2godHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vIEZpbmlzaGVkXHJcbiAgICAgICAgZC5jbG9zZSgpO1xyXG5cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogU2hvdyBmcmVlIHRleHQgaGVscFxyXG4gKi9cclxuICBoZWxwU2VhcmNoKCkge1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2xpcHBlclNlYXJjaEZyZWVUZXh0SGVscENvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdpbmZvcm1hemlvbmkgcmljZXJjYScsXHJcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIHJlc3RvcmVGb2N1czogdHJ1ZSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcclxuICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgIG1heFdpZHRoOiAnODAwcHgnLFxyXG4gICAgICB3aWR0aDogJzk5JScsXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNsaXBwZXItYnJvd3Nlci1maXhlZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJkaWFsb2ctaGVhZGVyXCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIyMHB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbD5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBjbGFzcz1cImRpYWxvZy10aXRsZVwiPlxyXG4gICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vY2xpcHBlci5hcnNlZGl6aW9uaS5pdFwiIG1hdFRvb2x0aXA9XCJBcHJpIENsaXBwZXIgaW4gdW4gbnVvdm8gdGFiXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGlwcGVyLWxvZ29cIj48L2Rpdj5cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBAaWYgKGRpYWxvZ0RhdGE/LnNlbGVjdGlvbk1vZGUgPiAwICYmIGNhblNlbGVjdCgpKSB7XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIxNzBweFwiIGZ4RmxleC5sdC1tZD1cIjU4cHhcIj5cclxuICAgICAgICAgIDxidXR0b24gZnhIaWRlLmx0LW1kIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1mbGF0LWJ1dHRvbiAoY2xpY2spPVwic2VsZWN0KClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImNsaXBwZXItc2VsZWN0aW9uLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtYWxsIHVwcGVyY2FzZVwiPlVzYSBzZWxlemlvbmU8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gZnhIaWRlLmd0LXNtIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2VsZWN0KClcIlxyXG4gICAgICAgICAgbWF0VG9vbHRpcD1cIlVzYSBzZWxlemlvbmVcIiBhcmlhLWxhYmVsPVwiJ1VzYSBsYSBzZWxlemlvbmUnXCIgIGNsYXNzPVwiY2xpcHBlci1zZWxlY3Rpb24taWNvbi1idXR0b25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmNoZWNrPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjEwNnB4XCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiIGNsYXNzPVwiZGlhbG9nLWNsb3NlXCI+XHJcbiAgICAgICAgICBAaWYgKGNsaXBwZXJTZXJ2aWNlLmJhZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkRvY3VtZW50aSBkaSBsYXZvcm9cIiBhcmlhLWxhYmVsPVwiJ0RvY3VtZW50aSBkaSBsYXZvcm8nXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm1hbmFnZUJhZygpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW21hdEJhZGdlXT1cImNsaXBwZXJTZXJ2aWNlLmJhZy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgIG1hdEJhZGdlQ29sb3I9XCJhY2NlbnRcIj53b3JrX291dGxpbmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkNoaXVkaVwiIGFyaWEtbGFiZWw9XCJDaGl1ZGlcIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIyMHB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbCBzdHlsZT1cInBhZGRpbmc6IDEwcHggMTBweCAxMHB4IDIwcHhcIj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD0nMTBweCcgZnhGaWxsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTMwcHhcIiBmeEhpZGUueHMgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5OdW1lcm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpbHRlclBhcmFtcy5udW1iZXJcIiAjbnVtYmVyPVwibmdNb2RlbFwiIG5hbWU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIiAoa2V5dXAuRW50ZXIpPVwiZmV0Y2godHJ1ZSlcIj5cclxuICAgICAgICAgICAgICBAaWYgKGZpbHRlclBhcmFtcy5udW1iZXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCBhcmlhLWxhYmVsPVwiQXp6ZXJhXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJQYXJhbXMubnVtYmVyID0gbnVsbDtcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTMwcHhcIiBmeEhpZGUueHMgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Bbm5vPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpbHRlclBhcmFtcy55ZWFyXCIgI3llYXI9XCJuZ01vZGVsXCIgbmFtZT1cInllYXJcIiBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjRcIiAoa2V5dXAuRW50ZXIpPVwiZmV0Y2godHJ1ZSlcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAoZmlsdGVyUGFyYW1zLnllYXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyUGFyYW1zLnllYXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAaWYgKHllYXIuaW52YWxpZCkge1xyXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3I+Tm9uIHZhbGlkby48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIxMDBcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlBhcm9sZSwgZnJhc2kgbyBjb25jZXR0aS4uLjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAjc2VhcmNoSW5wdXQ9XCJtYXRJbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgI3RleHQgWyhuZ01vZGVsKV09XCJmaWx0ZXJQYXJhbXMudGV4dFwiIG1heGxlbmd0aD1cIjIwMFwiXHJcbiAgICAgICAgICAgICAgICAoa2V5dXAuRW50ZXIpPVwic2VhcmNoKClcIiBhdXRvZm9jdXMgLz5cclxuICAgICAgICAgICAgICBAaWYgKGZpbHRlclBhcmFtcy50ZXh0KSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlclBhcmFtcy50ZXh0ID0gJydcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhIaWRlLnhzIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJDb21wb25pXCIgbWF0VG9vbHRpcD1cIkNvbXBvbmlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRleHQuZm9jdXMoKTsgY29tcG9zZVNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+YnVpbGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhIaWRlLnhzIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJJbmZvcm1hemlvbmlcIlxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNvbWUgZWZmZXR0dWFyZSBsYSByaWNlcmNhIGluIHRlc3RvIGxpYmVyb1wiIChjbGljayk9XCJ0ZXh0LmZvY3VzKCk7IGhlbHBTZWFyY2goKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmhlbHBfb3V0bGluZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4TGF5b3V0QWxpZ249XCJlbmQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNlYXJjaCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQXZ2aWEgbGEgcmljZXJjYSdcIlxyXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBdnZpYSByaWNlcmNhXCIgW2Rpc2FibGVkXT1cIiFjbGlwcGVyU2VydmljZS5sb2dnZWRJbigpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkdmFuY2VkU2VhcmNoKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidSaWNlcmNhIGF2YW56YXRhJ1wiXHJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlJpY2VyY2EgYXZhbnphdGFcIiBbZGlzYWJsZWRdPVwiIWNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+c2V0dGluZ3M8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmIChzbmFwc2hvdC5zZWFyY2hJbmZvICYmIHNuYXBzaG90LnNlYXJjaEluZm8ubGVuZ3RoID4gMCkge1xyXG4gICAgPGRpdiBmeEhpZGUueHM+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsIGNsYXNzPVwic21hbGxcIlxyXG4gICAgICAgIHN0eWxlPVwicGFkZGluZzowIDEwcHggMCAyMHB4O1wiPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgICAgPGI+UklDRVJDQSBBVFRJVkE8L2I+Jm5ic3A7Jm5ic3A7Jm5ic3A7XHJcbiAgICAgICAgICBAZm9yIChzaSBvZiBzbmFwc2hvdC5zZWFyY2hJbmZvOyB0cmFjayBzaSkge1xyXG4gICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgIHt7c2kuc2VwID8gJyZuYnNwOyZuYnNwOycgOiAnJ319IHt7c2kuZmllbGR9fTogPHNwYW4gY2xhc3M9XCJhY2NlbnQgbG93ZXJjYXNlXCI+PGk+e3tzaS52YWx1ZX19PC9pPjwvc3Bhbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4RmxleEFsaWduPVwic3RhcnRcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQXp6ZXJhIHJpY2VyY2FcIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXAtcmV2ZXJzZVwiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGZ4RmlsbCBzdHlsZT1cInBhZGRpbmc6IDAgMTBweCAwIDE1cHg7XCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgICAgIEBpZiAoc25hcHNob3QudG90YWwgPiAwKSB7XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwiJGV2ZW50ID8gc2VsZWN0QWxsKCRldmVudCkgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGlvbj8uaGFzVmFsdWUoKSAmJiAhYWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZWxlemlvbmEvZGVzZWxlemlvbmEgdHV0dG8nXCIgbWF0VG9vbHRpcD1cIlNlbGV6aW9uYS9kZXNlbGV6aW9uYSB0dXR0b1wiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNuYXBzaG90Lml0ZW1zIHx8IHNuYXBzaG90Lml0ZW1zLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgICAgICAgIEBpZiAoc25hcHNob3QudG90YWwgPiAwKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uIG1hdFRvb2x0aXA9XCJPcmRpbmFcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBvcmRpbmEnXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVTb3J0XCIgW2Rpc2FibGVkXT1cIiFzbmFwc2hvdC50b3RhbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZnhIaWRlLmx0LWxnPk9yZGluYSBwZXI6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGZ4SGlkZS5ndC1tZD5zb3J0PC9tYXQtaWNvbj4ge3tjdXJyZW50U29ydH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudVNvcnQ9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInNvcnRCeSgzKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09yZGluYSBwZXIgZGF0YSBkZWNyZXNjZW50ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgRGF0YSBkZWNyZXNjZW50ZVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInNvcnRCeSgyKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09yZGluYSBwZXIgZGF0YSBjcmVzY2VudGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgIERhdGEgY3Jlc2NlbnRlXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIEBpZiAoZmlsdGVyUGFyYW1zLnRleHQpIHtcclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic29ydEJ5KDEpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInT3JkaW5hIHBlciByaWxldmFuemEnXCI+XHJcbiAgICAgICAgICAgICAgICAgIFJpbGV2YW56YVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInNvcnRCeSg1KVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09yZGluYSBwZXIgcG9wb2xhcml0w6AnXCI+XHJcbiAgICAgICAgICAgICAgICAgIFBvcG9sYXJpdMOgXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiBbYXR0ci5hcmlhLWxhYmVsXT1cIidNZW51IG1vZGVsbG8nXCJcclxuICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51TW9kZWxzXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBmeEhpZGUubHQtbGc+TW9zdHJhOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmeEhpZGUuZ3QtbWQ+ZmlsdGVyX2xpc3Q8L21hdC1pY29uPiB7e2N1cnJlbnRNb2RlbH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51TW9kZWxzPVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjaGFuZ2VNb2RlbCgyKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBhZ2dpb3JuYW1lbnRvIG5vcm1hdGl2bydcIj5cclxuICAgICAgICAgICAgICAgICAgR2F6emV0dGUgZSBib2xsZXR0aW5pXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2hhbmdlTW9kZWwoOSlcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidOb3JtYXRpdmEgdmlnZW50ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgTm9ybWF0aXZhIHZpZ2VudGVcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNoYW5nZU1vZGVsKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgdHV0dGkgaSBkb2N1bWVudGknXCI+XHJcbiAgICAgICAgICAgICAgICAgIFR1dHRvXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgQGlmIChzZWxlY3Rpb24/Lmhhc1ZhbHVlKCkpIHtcclxuICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBemlvbmkgZGEgZXNlZ3VpcmUgc3VnbGkgZWxlbWVudGkgc2VsZXppb25hdGlcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNZW51IG9wemlvbmkgcGVyIGVsZW1lbnRpIHNlbGV6aW9uYXRpJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51U2VsZWN0aW9uc1wiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc25hcHNob3QudG90YWxcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbbWF0QmFkZ2VdPVwic2VsZWN0aW9uPy5hbGwubGVuZ3RoXCIgbWF0QmFkZ2VDb2xvcj1cImFjY2VudFwiPmNoZWNrbGlzdDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxtYXQtbWVudSAjbWVudVNlbGVjdGlvbnM9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgIDxjbGlwcGVyLWRvY3VtZW50LW1lbnUgW3BhcmVudF09XCJ0aGlzXCIgc2VsZWN0aW9uU291cmNlPVwic2VsZWN0aW9uXCIgW3VzZVNlbGVjdGlvbnNdPVwiY2FuU2VsZWN0KClcIlxyXG4gICAgICAgICAgICAgIFtpc1JlYWRhYmxlXT1cImZhbHNlXCIgW2lzTGF3SW5Gb3JjZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDwvY2xpcHBlci1kb2N1bWVudC1tZW51PlxyXG4gICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgIEBpZiAoc25hcHNob3QgJiYgc25hcHNob3QuZmFjZXRzPy5oYXNGYWNldHMgJiYgZmlsdGVyUGFuZSAmJiAoIWZpbHRlclBhbmUub3BlbmVkIHx8IGZpbHRlclBhbmVDbG9zZWQpKSB7XHJcbiAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQWZmaW5hIHJpY2VyY2FcIlxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiJ0FmZmluYSByaWNlcmNhJ1wiIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJQYW5lKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPm1lbnVfb3BlbjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IGlkPVwiY2xpcHBlci1icm93c2VyLXNjcm9sbGFibGVcIj5cclxuICA8bWF0LWRyYXdlci1jb250YWluZXIgY2xhc3M9XCJmaWxsXCI+XHJcbiAgICA8bWF0LWRyYXdlciAjZmlsdGVyUGFuZSBwb3NpdGlvbj1cImVuZFwiIGNsYXNzPVwiZHJhd2VyLXNtYWxsIGRyYXdlci13aXRoLWxvYWRlclwiPlxyXG4gICAgICBAaWYgKGZpbHRlckJ1c3koKSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPjwvZGl2PlxyXG4gICAgICB9XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZpbGw+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCI2cHhcIj5cclxuICAgICAgICAgIEBpZiAoZmlsdGVyQnVzeSgpKSB7XHJcbiAgICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBzdHlsZT1cInotaW5kZXg6IDExO1wiIG1vZGU9XCJpbmRldGVybWluYXRlXCI+XHJcbiAgICAgICAgICA8L21hdC1wcm9ncmVzcy1iYXI+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCI1NnB4XCIgY2xhc3M9XCJ0aXRsZS1jb250YWluZXItd2l0aC1sb2FkZXJcIj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRpdGxlXCI+QWZmaW5hIHJpY2VyY2E8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZUZpbHRlclBhbmUoKVwiXHJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiTmFzY29uZGlcIj48bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGNsYXNzPVwic2Nyb2xsLWhpZGRlblwiPlxyXG4gICAgICAgICAgPGNsaXBwZXItc2VhcmNoLWZhY2V0cyAjZmFjZXRzPjwvY2xpcHBlci1zZWFyY2gtZmFjZXRzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWRyYXdlcj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZpbGw+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIFtpZF09XCJzY3JvbGxlcklkXCIgY2xhc3M9XCJzY3JvbGwtYXV0b1wiIHN0eWxlPVwicGFkZGluZzogMCA1cHg7XCI+XHJcbiAgICAgICAgQGlmICghc25hcHNob3QudG90YWwpIHtcclxuICAgICAgICA8cCBjbGFzcz1cIm1lc3NhZ2VcIj48aT5OZXNzdW4gZWxlbWVudG8gZGEgdmlzdWFsaXp6YXJlLjwvaT48L3A+XHJcbiAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc25hcHNob3QuaXRlbXM7IHRyYWNrICRpbmRleDsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICAgICAgICAgIEBpZiAoaXRlbS5ncm91cCkge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLWdyb3VwLXRpdGxlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydncm91cC1zcGFjZWQnOiBpID4gMH1cIj57e2l0ZW0uZ3JvdXB9fTwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8ZGl2IChjb250ZXh0bWVudSk9XCJvbkNvbnRleHRNZW51KCRldmVudCwgaXRlbSlcIiAobW91c2VlbnRlcik9XCJpdGVtLmlzT3ZlciA9IHRydWVcIlxyXG4gICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJpdGVtLmlzT3ZlciA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjZweFwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZpbGwgY2xhc3M9XCJpdGVtXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2l0ZW0tc2VsZWN0ZWQnOiBzZWxlY3Rpb24/LmlzU2VsZWN0ZWQoaXRlbS5kb2N1bWVudElkKSB9XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCI1NHB4XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlclwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICBAaWYgKHNjcmVlblNlcnZpY2UuaXNUb3VjaGFibGUgfHwgaXRlbS5pc092ZXIgfHwgc2VsZWN0aW9uPy5pc1NlbGVjdGVkKGl0ZW0uZG9jdW1lbnRJZCkpIHtcclxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50ID8gc2VsZWN0aW9uPy50b2dnbGUoaXRlbSwgaXRlbS5kb2N1bWVudElkKSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24/LmlzU2VsZWN0ZWQoaXRlbS5kb2N1bWVudElkKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cIml0ZW0tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGNsaXBwZXItc2VhcmNoLXJlc3VsdC1pdGVtIFtpdGVtXT1cIml0ZW1cIiBbcGFyZW50XT1cInRoaXNcIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzcGxheU1vZGVsTmFtZV09XCJ0cnVlXCI+PC9jbGlwcGVyLXNlYXJjaC1yZXN1bHQtaXRlbT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjQ4cHhcIiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uaXNPdmVyIHx8IGl0ZW0uaXNNZW51T3BlbiB8fCBzZWxlY3Rpb24/LmlzU2VsZWN0ZWQoaXRlbS5kb2N1bWVudElkKSkge1xyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIk1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNZW51IG9wemlvbmknXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbnRleHRNZW51XCJcclxuICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRGF0YV09XCJ7aXRlbTogaXRlbX1cIiAoY2xpY2spPVwiaXRlbS5pc01lbnVPcGVuID0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgI2NvbnRleHRNZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCIgc3R5bGU9XCJwb3NpdGlvbjogZml4ZWRcIiBbc3R5bGUubGVmdF09XCJjb250ZXh0TWVudVBvc2l0aW9uLnhcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRvcF09XCJjb250ZXh0TWVudVBvc2l0aW9uLnlcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY29udGV4dE1lbnVcIlxyXG4gICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRGF0YV09XCJ7aXRlbTogaXRlbX1cIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxtYXQtbWVudSAjY29udGV4dE1lbnU9XCJtYXRNZW51XCIgKGNsb3NlZCk9XCJ1cGRhdGVNZW51QnV0dG9uc1Zpc2liaWxpdHkoKVwiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgPGNsaXBwZXItZG9jdW1lbnQtbWVudSBbcGFyZW50XT1cInRoaXNcIiBbaXRlbV09XCJpdGVtXCIgW3VzZVNlbGVjdGlvbnNdPVwiY2FuU2VsZWN0KClcIiBbaXNSZWFkYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBbaXNMYXdJbkZvcmNlXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICA8L2NsaXBwZXItZG9jdW1lbnQtbWVudT5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBmb290ZXIgLS0+XHJcbiAgICAgIEBpZiAoKHNuYXBzaG90Py50b3RhbCA/PyAwKSA+IDApIHtcclxuICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLWZvb3RlclwiPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiIGZ4RmlsbD5cclxuICAgICAgICAgIDxtYXQtcGFnaW5hdG9yICNwYWdpbmF0b3IgY2xhc3M9XCJwYWdpbmF0b3JcIiBbaGlkZVBhZ2VTaXplXT1cInRydWVcIiBbbGVuZ3RoXT1cInNuYXBzaG90Py50b3RhbCA/PyAwXCJcclxuICAgICAgICAgICAgW3BhZ2VTaXplXT1cImZpbHRlclBhcmFtcy5jb3VudCA/PyAxNVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCIgKHBhZ2UpPVwiZmV0Y2hNb3JlKCRldmVudClcIj5cclxuICAgICAgICAgIDwvbWF0LXBhZ2luYXRvcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LWRyYXdlci1jb250YWluZXI+XHJcbjwvZGl2PiJdfQ==
|