client-core-services 1.0.2 → 1.0.4
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/esm2020/lib/clientCore.module.mjs +94 -0
- package/esm2020/lib/services/api/api.service.mjs +7 -7
- package/esm2020/lib/services/api/auth/auth.service.mjs +5 -5
- package/esm2020/lib/services/data-share/data-share.service.mjs +29 -8
- package/esm2020/lib/services/env/env.service.mjs +6 -1
- package/esm2020/lib/services/env/serverHostList.mjs +2 -52
- package/esm2020/lib/services/form/form-creation/form-creation.service.mjs +7 -7
- package/esm2020/lib/services/storage/storage.service.mjs +1 -203
- package/esm2020/public-api.mjs +2 -2
- package/fesm2015/client-core-services.mjs +53 -283
- package/fesm2015/client-core-services.mjs.map +1 -1
- package/fesm2020/client-core-services.mjs +53 -283
- package/fesm2020/client-core-services.mjs.map +1 -1
- package/lib/{my-lib.module.d.ts → clientCore.module.d.ts} +2 -3
- package/lib/services/data-share/data-share.service.d.ts +17 -4
- package/lib/services/env/env.service.d.ts +3 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/esm2020/lib/my-lib.module.mjs +0 -98
|
@@ -110,7 +110,7 @@ export class FormCreationService {
|
|
|
110
110
|
responce.headerFiledsData = form.headerFields;
|
|
111
111
|
}
|
|
112
112
|
if (form['tableFields'] && form['tableFields'] != undefined && form['tableFields'] != null) {
|
|
113
|
-
responce.tableFields =
|
|
113
|
+
responce.tableFields = structuredClone(form['tableFields']);
|
|
114
114
|
responce.getTableField = false;
|
|
115
115
|
}
|
|
116
116
|
else {
|
|
@@ -323,7 +323,7 @@ export class FormCreationService {
|
|
|
323
323
|
if (element.type == 'list_of_fields' && element.datatype != 'key_value') {
|
|
324
324
|
data['notDisplay'] = false;
|
|
325
325
|
}
|
|
326
|
-
let modifyData =
|
|
326
|
+
let modifyData = structuredClone(data);
|
|
327
327
|
modifyData['parent'] = element.field_name;
|
|
328
328
|
//show if handling
|
|
329
329
|
if (data.show_if && data.show_if != '') {
|
|
@@ -415,7 +415,7 @@ export class FormCreationService {
|
|
|
415
415
|
if (step.list_of_fields != undefined && step.list_of_fields.length > 0) {
|
|
416
416
|
const stepper_of_fields = {};
|
|
417
417
|
step.list_of_fields.forEach((data) => {
|
|
418
|
-
let modifyData =
|
|
418
|
+
let modifyData = structuredClone(data);
|
|
419
419
|
modifyData.parent = step.field_name;
|
|
420
420
|
//show if handling
|
|
421
421
|
if (data.show_if && data.show_if != '') {
|
|
@@ -435,7 +435,7 @@ export class FormCreationService {
|
|
|
435
435
|
}
|
|
436
436
|
this.createFormControl(stepper_of_fields, modifyData, '', "text");
|
|
437
437
|
if (data.tree_view_object && data.tree_view_object.field_name != "") {
|
|
438
|
-
let treeModifyData =
|
|
438
|
+
let treeModifyData = structuredClone(data.tree_view_object);
|
|
439
439
|
treeModifyData.is_mandatory = false;
|
|
440
440
|
this.createFormControl(stepper_of_fields, treeModifyData, '', "text");
|
|
441
441
|
}
|
|
@@ -458,7 +458,7 @@ export class FormCreationService {
|
|
|
458
458
|
break;
|
|
459
459
|
case "grid_selection":
|
|
460
460
|
if (element && element.gridColumns && element.gridColumns.length > 0) {
|
|
461
|
-
let colParField =
|
|
461
|
+
let colParField = structuredClone(element);
|
|
462
462
|
colParField['mendetory_fields'] = [];
|
|
463
463
|
element.gridColumns.forEach((colField) => {
|
|
464
464
|
if (colField && colField.is_mandatory) {
|
|
@@ -494,7 +494,7 @@ export class FormCreationService {
|
|
|
494
494
|
break;
|
|
495
495
|
}
|
|
496
496
|
if (element.tree_view_object && element.tree_view_object.field_name != "") {
|
|
497
|
-
let treeModifyData =
|
|
497
|
+
let treeModifyData = structuredClone(element.tree_view_object);
|
|
498
498
|
treeModifyData.is_mandatory = false;
|
|
499
499
|
this.createFormControl(responce.forControl, treeModifyData, '', "text");
|
|
500
500
|
}
|
|
@@ -877,4 +877,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
877
877
|
providedIn: 'root'
|
|
878
878
|
}]
|
|
879
879
|
}], ctorParameters: function () { return [{ type: i1.CommonFunctionService }, { type: i2.EnvService }, { type: i3.StorageService }, { type: i4.UntypedFormBuilder }, { type: i5.CustomvalidationService }, { type: i6.ApiCallService }, { type: i7.CheckIfService }, { type: i8.ModelService }]; } });
|
|
880
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jcmVhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9mb3JtL2Zvcm0tY3JlYXRpb24vZm9ybS1jcmVhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUF3QyxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQVN0RyxNQUFNLE9BQU8sbUJBQW1CO0lBSzlCLFlBQ1UscUJBQTJDLEVBQzNDLFVBQXFCLEVBQ3JCLGNBQTZCLEVBQzdCLFdBQStCLEVBQy9CLHVCQUErQyxFQUMvQyxjQUE2QixFQUM3QixjQUE2QixFQUM3QixZQUF5QjtRQVB6QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBQzNDLGVBQVUsR0FBVixVQUFVLENBQVc7UUFDckIsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBd0I7UUFDL0MsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0IsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0IsaUJBQVksR0FBWixZQUFZLENBQWE7UUFFL0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJ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QUFFLE1BQU0sR0FBRyxDQUFDLEVBQUM7Z0JBQ3RFLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDN0M7U0FDRjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7O2lIQTcwQlUsbUJBQW1CO3FIQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBpQ2FsbFNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL2FwaS9hcGktY2FsbC9hcGktY2FsbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25GdW5jdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24tdXRpbHMvY29tbW9uLWZ1bmN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnZTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZW52L2Vudi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc3RvcmFnZS9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b212YWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2N1c3RvbXZhbGlkYXRpb24vY3VzdG9tdmFsaWRhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2hlY2tJZlNlcnZpY2UgfSBmcm9tICcuLi8uLi9jaGVjay1pZi9jaGVjay1pZi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kZWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kZWwvbW9kZWwuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtQ3JlYXRpb25TZXJ2aWNlIHtcclxuXHJcbiAgbWluRGF0ZTogRGF0ZTtcclxuICBtYXhEYXRlOiBEYXRlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29tbW9uRnVuY3Rpb25TZXJ2aWNlOkNvbW1vbkZ1bmN0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZW52U2VydmljZTpFbnZTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTpTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgY3VzdG9tdmFsaWRhdGlvblNlcnZpY2U6Q3VzdG9tdmFsaWRhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwaUNhbGxTZXJ2aWNlOkFwaUNhbGxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGVja2lmU2VydmljZTpDaGVja0lmU2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOk1vZGVsU2VydmljZVxyXG4gICkge1xyXG4gICAgICBjb25zdCBjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoY3VycmVudFllYXIgLSAxMDAsIDAsIDEpO1xyXG4gICAgICB0aGlzLm1heERhdGUgPSBuZXcgRGF0ZShjdXJyZW50WWVhciArIDI1LCAxMSwgMzEpO1xyXG4gIH1cclxuICBnZXRUZW1wRGF0YSh0ZW1wRGF0YTphbnksdGFiSW5kZXg6YW55LGN1cnJlbnRNZW51OmFueSxmb3JtTmFtZTphbnksZGluYW1pY19mb3JtOmFueSl7XHJcbiAgICBsZXQgcmVzcG9uY2U6YW55PXtcclxuICAgICAgdGFiOnt9LFxyXG4gICAgICBjdXJyZW50TWVudTpjdXJyZW50TWVudSxcclxuICAgICAgZ3JpZF92aWV3X21vZGU6XCJcIixcclxuICAgICAgZm9ybTp7fSxcclxuICAgICAgZm9ybXM6e31cclxuICAgIH1cclxuICAgIGlmKHRlbXBEYXRhWzBdLnRlbXBsYXRlVGFicyl7XHJcbiAgICAgIHJlc3BvbmNlLnRhYiA9IHRlbXBEYXRhWzBdLnRlbXBsYXRlVGFic1t0YWJJbmRleF07XHJcbiAgICB9XHJcbiAgICBsZXQgdGFiID0gcmVzcG9uY2UudGFiXHJcbiAgICBpZiAodGFiICYmIHRhYi50YWJfbmFtZSAhPSBcIlwiICYmIHRhYi50YWJfbmFtZSAhPSBudWxsICYmIHRhYi50YWJfbmFtZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYoY3VycmVudE1lbnUgJiYgY3VycmVudE1lbnUubmFtZSAmJiBjdXJyZW50TWVudS5uYW1lICE9IHVuZGVmaW5lZCAmJiBjdXJyZW50TWVudS5uYW1lICE9IG51bGwpe1xyXG4gICAgICAgIGNvbnN0IG1lbnUgPSB7XCJuYW1lXCI6dGFiLnRhYl9uYW1lfTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLlNldEFjdGl2ZU1lbnUobWVudSk7XHJcbiAgICAgICAgcmVzcG9uY2UuY3VycmVudE1lbnUubmFtZSA9IHRhYi50YWJfbmFtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYodGFiICAmJiB0YWIuZ3JpZCAhPSBudWxsICYmIHRhYi5ncmlkICE9IHVuZGVmaW5lZCApe1xyXG4gICAgICBpZih0YWIuZ3JpZC5ncmlkX3ZpZXcgIT0gbnVsbCAmJiB0YWIuZ3JpZC5ncmlkX3ZpZXcgIT0gdW5kZWZpbmVkICYmIHRhYi5ncmlkLmdyaWRfdmlldyAhPSAnJyl7XHJcbiAgICAgICAgcmVzcG9uY2UuZ3JpZF92aWV3X21vZGU9dGFiLmdyaWQuZ3JpZF92aWV3O1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICByZXNwb25jZS5ncmlkX3ZpZXdfbW9kZT0ndGFibGVWaWV3JztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmKHRhYiAmJiBmb3JtTmFtZSAhPSAnJyl7XHJcbiAgICAgIGlmKGZvcm1OYW1lID09ICdESU5BTUlDX0ZPUk0nKXtcclxuICAgICAgICByZXNwb25jZS5mb3JtID0gZGluYW1pY19mb3JtXHJcbiAgICAgIH1lbHNlIGlmKHRhYi5mb3JtcyAhPSBudWxsICYmIHRhYi5mb3JtcyAhPSB1bmRlZmluZWQgKXtcclxuICAgICAgICByZXNwb25jZS5mb3JtcyA9IHRhYi5mb3JtcztcclxuICAgICAgICBsZXQgZ3JpZEFjdGlvbkJ1dHRvbnMgPSBbXTtcclxuICAgICAgICBpZih0YWIuZ3JpZCAmJiB0YWIuZ3JpZC5hY3Rpb25fYnV0dG9ucyl7XHJcbiAgICAgICAgICBncmlkQWN0aW9uQnV0dG9ucyA9IHRhYi5ncmlkLmFjdGlvbl9idXR0b25zO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNwb25jZS5mb3JtID0gdGhpcy5jb21tb25GdW5jdGlvblNlcnZpY2UuZ2V0Rm9ybShyZXNwb25jZS5mb3Jtcyxmb3JtTmFtZSxncmlkQWN0aW9uQnV0dG9ucylcclxuICAgICAgICBpZihmb3JtTmFtZSA9PSAnY2xvbmVfb2JqZWN0Jyl7XHJcbiAgICAgICAgICByZXNwb25jZS5mb3JtWydhcGlfcGFyYW1zJ10gPSBcIlFUTVA6Q0xPTkVfT0JKRUNUXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vdGhpcy5zZXRGb3JtKCk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHJlc3BvbmNlLmZvcm0gPSB7fTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3BvbmNlO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tGb3JtRGV0YWlscyhmb3JtOmFueSx0YWI6YW55LGN1cnJlbnRNZW51OmFueSl7XHJcbiAgICBsZXQgcmVzcG9uY2U6YW55PXtcclxuICAgICAgY3VycmVudE1lbnU6Y3VycmVudE1lbnUsXHJcbiAgICAgIGJ1bGt1cGRhdGVzOmZhbHNlLFxyXG4gICAgICBnZXRMb2NhdGlvbjpmYWxzZSxcclxuICAgICAgaGVhZGVyRmlsZWRzRGF0YTpbXSxcclxuICAgICAgdGFibGVGaWVsZHM6W10sXHJcbiAgICAgIGZvcm1GaWVsZEJ1dHRvbnM6W10sXHJcbiAgICAgIGdldFRhYmxlRmllbGQ6dHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYoZm9ybSl7XHJcbiAgICAgIGlmKGZvcm0uZGV0YWlscyl7XHJcbiAgICAgICAgaWYoZm9ybS5kZXRhaWxzLmNvbGxlY3Rpb25fbmFtZSAmJiBmb3JtLmRldGFpbHMuY29sbGVjdGlvbl9uYW1lICE9ICcnICYmIChyZXNwb25jZS5jdXJyZW50TWVudSAhPSB1bmRlZmluZWQgfHwgdGhpcy5lbnZTZXJ2aWNlLmdldFJlcXVlc3RUeXBlKCkgPT0gJ1BVQkxJQycpKXtcclxuICAgICAgICAgIGlmKHJlc3BvbmNlLmN1cnJlbnRNZW51ID09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIHJlc3BvbmNlLmN1cnJlbnRNZW51ID0ge307XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXNwb25jZS5jdXJyZW50TWVudVsnbmFtZSddID0gZm9ybS5kZXRhaWxzLmNvbGxlY3Rpb25fbmFtZTtcclxuICAgICAgICAgIGlmKHRhYiAmJiB0YWIudGFiX25hbWUgJiYgdGFiLnRhYl9uYW1lICE9ICcnKXtcclxuICAgICAgICAgICAgcmVzcG9uY2UuY3VycmVudE1lbnVbJ3RhYl9uYW1lJ10gPSB0YWIudGFiX25hbWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGZvcm0uZGV0YWlscy5idWxrX3VwZGF0ZSl7XHJcbiAgICAgICAgICByZXNwb25jZS5idWxrdXBkYXRlcyA9IHRydWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICByZXNwb25jZS5idWxrdXBkYXRlcyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZihmb3JtLmdldExvY2F0aW9uKXtcclxuICAgICAgICByZXNwb25jZS5nZXRMb2NhdGlvbiA9IGZvcm0uZ2V0TG9jYXRpb247XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHJlc3BvbmNlLmdldExvY2F0aW9uID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYoZm9ybS5oZWFkZXJGaWVsZHMpe1xyXG4gICAgICAgIHJlc3BvbmNlLmhlYWRlckZpbGVkc0RhdGEgPSBmb3JtLmhlYWRlckZpZWxkcztcclxuICAgICAgfVxyXG4gICAgICBpZihmb3JtWyd0YWJsZUZpZWxkcyddICYmIGZvcm1bJ3RhYmxlRmllbGRzJ10gIT0gdW5kZWZpbmVkICYmIGZvcm1bJ3RhYmxlRmllbGRzJ10gIT0gbnVsbCl7XHJcbiAgICAgICAgcmVzcG9uY2UudGFibGVGaWVsZHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZvcm1bJ3RhYmxlRmllbGRzJ10pKTtcclxuICAgICAgICByZXNwb25jZS5nZXRUYWJsZUZpZWxkID0gZmFsc2U7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHJlc3BvbmNlLnRhYmxlRmllbGRzID0gW107XHJcbiAgICAgIH1cclxuICAgICAgaWYoZm9ybS50YWJfbGlzdF9idXR0b25zICYmIGZvcm0udGFiX2xpc3RfYnV0dG9ucyAhPSB1bmRlZmluZWQgJiYgZm9ybS50YWJfbGlzdF9idXR0b25zLmxlbmd0aCA+IDApe1xyXG4gICAgICAgIHJlc3BvbmNlLmZvcm1GaWVsZEJ1dHRvbnMgPSBmb3JtLnRhYl9saXN0X2J1dHRvbnM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25jZTtcclxuXHJcbiAgfVxyXG4gIGNyZWF0ZUZvcm1Db250cm9sKGZvckNvbnRyb2w6YW55LCBmaWVsZDphbnksIG9iamVjdDphbnksIHR5cGU6c3RyaW5nKSB7XHJcbiAgICBsZXQgZGlzYWJsZWQgPSBmaWVsZC5pc19kaXNhYmxlZCA/IHRydWUgOiAoKGZpZWxkLmRpc2FibGVfaWYgIT0gdW5kZWZpbmVkICYmIGZpZWxkLmRpc2FibGVfaWYgIT0gJycpID8gdHJ1ZSA6IGZhbHNlKTtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFwibGlzdFwiOlxyXG4gICAgICAgIGZvckNvbnRyb2xbZmllbGQuZmllbGRfbmFtZV0gPSB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KG9iamVjdCwgdGhpcy52YWxpZGF0b3IoZmllbGQpKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2NoZWNrYm94JzpcclxuICAgICAgICAgIGZvckNvbnRyb2xbZmllbGQuZmllbGRfbmFtZV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IG9iamVjdCwgZGlzYWJsZWQ6IGRpc2FibGVkIH0sIHRoaXMudmFsaWRhdG9yKGZpZWxkKSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwidGV4dFwiOlxyXG4gICAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBcImdzdF9udW1iZXJcIjpcclxuICAgICAgICAgICAgZm9yQ29udHJvbFtmaWVsZC5maWVsZF9uYW1lXSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogb2JqZWN0LCBkaXNhYmxlZDogZGlzYWJsZWQgfSx0aGlzLnZhbGlkYXRvcihmaWVsZCksdGhpcy5jdXN0b212YWxpZGF0aW9uU2VydmljZS5pc1ZhbGlkR1NUTnVtYmVyLmJpbmQodGhpcy5jdXN0b212YWxpZGF0aW9uU2VydmljZSkpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcImFwaVwiOlxyXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmFwaV9jYWxsX25hbWUpIHtcclxuICAgICAgICAgICAgICBjYXNlIFwiZ3N0X251bWJlclwiOlxyXG4gICAgICAgICAgICAgICAgZm9yQ29udHJvbFtmaWVsZC5maWVsZF9uYW1lXSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogb2JqZWN0LCBkaXNhYmxlZDogZGlzYWJsZWQgfSx0aGlzLnZhbGlkYXRvcihmaWVsZCksdGhpcy5jdXN0b212YWxpZGF0aW9uU2VydmljZS5pc1ZhbGlkR1NUTnVtYmVyLmJpbmQodGhpcy5jdXN0b212YWxpZGF0aW9uU2VydmljZSkpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgZm9yQ29udHJvbFtmaWVsZC5maWVsZF9uYW1lXSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogb2JqZWN0LCBkaXNhYmxlZDogZGlzYWJsZWQgfSwgdGhpcy52YWxpZGF0b3IoZmllbGQpKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3JDb250cm9sW2ZpZWxkLmZpZWxkX25hbWVdID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7IHZhbHVlOiBvYmplY3QsIGRpc2FibGVkOiBkaXNhYmxlZCB9LHRoaXMudmFsaWRhdG9yKGZpZWxkKSx0aGlzLmN1c3RvbXZhbGlkYXRpb25TZXJ2aWNlLmlzVmFsaWRHU1ROdW1iZXIuYmluZCh0aGlzLmN1c3RvbXZhbGlkYXRpb25TZXJ2aWNlKSlcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJ0eXBlYWhlYWRcIjpcclxuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5kYXRhdHlwZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6XHJcbiAgICAgICAgICAgICAgICBmb3JDb250cm9sW2ZpZWxkLmZpZWxkX25hbWVdID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7IHZhbHVlOiBvYmplY3QsIGRpc2FibGVkOiBkaXNhYmxlZCB9LHRoaXMudmFsaWRhdG9yKGZpZWxkKSx0aGlzLmN1c3RvbXZhbGlkYXRpb25TZXJ2aWNlLmlzVmFsaWREYXRhLmJpbmQodGhpcy5jdXN0b212YWxpZGF0aW9uU2VydmljZSkpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgZm9yQ29udHJvbFtmaWVsZC5maWVsZF9uYW1lXSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogb2JqZWN0LCBkaXNhYmxlZDogZGlzYWJsZWQgfSwgdGhpcy52YWxpZGF0b3IoZmllbGQpKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBmb3JDb250cm9sW2ZpZWxkLmZpZWxkX25hbWVdID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7IHZhbHVlOiBvYmplY3QsIGRpc2FibGVkOiBkaXNhYmxlZCB9LCB0aGlzLnZhbGlkYXRvcihmaWVsZCkpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImdyb3VwXCI6XHJcbiAgICAgICAgZm9yQ29udHJvbFtmaWVsZC5maWVsZF9uYW1lXSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAob2JqZWN0KVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuICB2YWxpZGF0b3IoZmllbGQ6YW55KSB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBbXVxyXG4gICAgaWYgKGZpZWxkLmlzX21hbmRhdG9yeSAhPSB1bmRlZmluZWQgJiYgZmllbGQuaXNfbWFuZGF0b3J5KSB7XHJcbiAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xyXG4gICAgICAgIGNhc2UgXCJncmlkX3NlbGVjdGlvblwiOlxyXG4gICAgICAgIGNhc2UgXCJsaXN0X29mX3N0cmluZ1wiOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInR5cGVhaGVhZFwiOlxyXG4gICAgICAgICAgaWYgKGZpZWxkLmRhdGF0eXBlICE9ICdsaXN0X29mX29iamVjdCcgJiYgZmllbGQuZGF0YXR5cGUgIT0gJ2NoaXBzJykge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxyXG4gICAgICAgICAgdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiZW1haWxcIjpcclxuICAgICAgICAgIHZhbGlkYXRvci5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgICB2YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLmVtYWlsKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB2YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1lbHNle1xyXG4gICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpe1xyXG4gICAgICAgIGNhc2UgXCJlbWFpbFwiOlxyXG4gICAgICAgICAgdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5lbWFpbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChmaWVsZC5taW5fbGVuZ3RoICE9IHVuZGVmaW5lZCAmJiBmaWVsZC5taW5fbGVuZ3RoICE9IG51bGwgJiYgZmllbGQubWluX2xlbmd0aCAhPSAnJyAmJiBOdW1iZXIoZmllbGQubWluX2xlbmd0aCkgJiYgZmllbGQubWluX2xlbmd0aCA+IDApIHtcclxuICAgICAgdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoZmllbGQubWluX2xlbmd0aCkpXHJcbiAgICB9XHJcbiAgICBpZihmaWVsZC5tYXhfbGVuZ3RoICE9IHVuZGVmaW5lZCAmJiBmaWVsZC5tYXhfbGVuZ3RoICE9IG51bGwgJiYgZmllbGQubWF4X2xlbmd0aCAhPSAnJyAmJiBOdW1iZXIoZmllbGQubWF4X2xlbmd0aCkgJiYgZmllbGQubWF4X2xlbmd0aCA+IDApe1xyXG4gICAgICB2YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aChmaWVsZC5tYXhfbGVuZ3RoKSlcclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGF0b3I7XHJcbiAgfVxyXG4gIHNldE5ld0Zvcm0odGFibGVGaWVsZHM6YW55LGZvcm1GaWVsZEJ1dHRvbnM6YW55LGZvcm06YW55LGVsZW1lbnRzOmFueSxzZWxlY3RlZFJvd0luZGV4Om51bWJlcil7XHJcbiAgICBsZXQgcmVzcG9uY2U6YW55ID0ge1xyXG4gICAgICBjYWxjdWxhdGlvbkZpZWxkTGlzdDpbXSxcclxuICAgICAgc2hvd0lmRmllbGRMaXN0OltdLFxyXG4gICAgICBidXR0b25JZkxpc3Q6W10sXHJcbiAgICAgIGRpc2FibGVJZkZpZWxkTGlzdDpbXSxcclxuICAgICAgbWVuZGV0b3J5SWZGaWVsZExpc3QgOiBbXSxcclxuICAgICAgZ3JpZFNlbGVjdGlvbk1lbmRldG9yeUxpc3Q6W10sXHJcbiAgICAgIGN1c3RvbVZhbGlkYXRpb25GaWVscyA6IFtdLFxyXG4gICAgICBlZGl0b3JUeXBlRmllbGRMaXN0IDogW10sXHJcbiAgICAgIGNoZWNrQm94RmllbGRMaXN0VmFsdWU6W10sXHJcbiAgICAgIGZpbGVQcmV2aWV3RmllbGRzOltdLFxyXG4gICAgICBzdGF0aWNNb2RhbDpbXSxcclxuICAgICAgZm9yQ29udHJvbDp7fSxcclxuICAgICAgc2hvd0dyaWREYXRhOnt9LFxyXG4gICAgICBpc1N0ZXBwZXI6ZmFsc2UsXHJcbiAgICAgIGJsYW5rRmllbGQ6e2ZpZWxkTmFtZTonJyxpbmRleDotMX1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0YWJsZUZpZWxkcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IHRhYmxlRmllbGRzW2luZGV4XTtcclxuICAgICAgaWYoZWxlbWVudCA9PSBudWxsKXtcclxuICAgICAgICByZXNwb25jZS5ibGFua0ZpZWxkLmZpZWxkTmFtZSA9IGZvcm0ubmFtZTtcclxuICAgICAgICByZXNwb25jZS5ibGFua0ZpZWxkLmluZGV4ID0gaW5kZXgrMTtcclxuICAgICAgICAvL3RoaXMubm90aWZ5RmllbGRWYWx1ZUlzTnVsbChmb3JtLm5hbWUsaW5kZXgrMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYoZWxlbWVudC50eXBlID09ICdwZGZfdmlldycpe1xyXG4gICAgICAgIGlmKHNlbGVjdGVkUm93SW5kZXggJiYgc2VsZWN0ZWRSb3dJbmRleCAhPSAtMSAmJiBlbGVtZW50cyAmJiBlbGVtZW50cy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgIGNvbnN0IG9iamVjdCA9IGVsZW1lbnRzW3NlbGVjdGVkUm93SW5kZXhdO1xyXG4gICAgICAgICAgcmVzcG9uY2Uuc3RhdGljTW9kYWwucHVzaCh0aGlzLmFwaUNhbGxTZXJ2aWNlLmdldFBheWxvZFdpdGhDcml0ZXJpYShlbGVtZW50Lm9uY2hhbmdlX2FwaV9wYXJhbXMsZWxlbWVudC5vbmNoYW5nZV9jYWxsX2JhY2tfZmllbGQsZWxlbWVudC5vbmNoYW5nZV9hcGlfcGFyYW1zX2NyaXRlcmlhLG9iamVjdCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNwb25jZS5lZGl0b3JUeXBlRmllbGRMaXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYoZWxlbWVudC50eXBlID09ICdpbmZvX2h0bWwnIHx8IGVsZW1lbnQudHlwZSA9PSAnaHRtbF92aWV3Jykge1xyXG4gICAgICAgIHJlc3BvbmNlLmVkaXRvclR5cGVGaWVsZExpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICByZXNwb25jZS5maWxlUHJldmlld0ZpZWxkcy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKGVsZW1lbnQuZmllbGRfbmFtZSAmJiBlbGVtZW50LmZpZWxkX25hbWUgIT0gJycpe1xyXG4gICAgICAgIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XHJcbiAgICAgICAgICBjYXNlIFwibGlzdF9vZl9jaGVja2JveFwiOlxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKHJlc3BvbmNlLmZvckNvbnRyb2wsIGVsZW1lbnQsIFtdLCBcImxpc3RcIilcclxuICAgICAgICAgICAgcmVzcG9uY2UuY2hlY2tCb3hGaWVsZExpc3RWYWx1ZS5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJjaGVja2JveFwiOlxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKHJlc3BvbmNlLmZvckNvbnRyb2wsIGVsZW1lbnQsIGZhbHNlLCBcImNoZWNrYm94XCIpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgICAgICBsZXQgdmFsdWU6YW55ID0gXCJcIjtcclxuICAgICAgICAgICAgaWYoZWxlbWVudC5kZWZhdWx0VmFsdWUgJiYgZWxlbWVudC5kZWZhdWx0VmFsdWUgIT0gbnVsbCAmJiBlbGVtZW50LmRlZmF1bHRWYWx1ZSAhPSAnJyl7XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnNldERlZmF1bHREYXRlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKGVsZW1lbnQuZGF0YXR5cGUgPT0gJ29iamVjdCcpe1xyXG4gICAgICAgICAgICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgaWYoZWxlbWVudC5ldGNfZmllbGRzICYmIGVsZW1lbnQuZXRjX2ZpZWxkcyAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgIGlmKGVsZW1lbnQuZXRjX2ZpZWxkcy5taW5EYXRlKXtcclxuICAgICAgICAgICAgICAgICAgaWYoZWxlbWVudC5ldGNfZmllbGRzLm1pbkRhdGUgPT0gJy0xJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoY3VycmVudFllYXIgLSAxMDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbkRhdGUuc2V0RGF0ZShuZXcgRGF0ZSgpLmdldERhdGUoKSAtIE51bWJlcihlbGVtZW50LmV0Y19maWVsZHMubWluRGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgaWYoZWxlbWVudC5ldGNfZmllbGRzICYmIGVsZW1lbnQuZXRjX2ZpZWxkcyAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgIGlmKGVsZW1lbnQuZXRjX2ZpZWxkcy5tYXhEYXRlKXtcclxuICAgICAgICAgICAgICAgICAgaWYoZWxlbWVudC5ldGNfZmllbGRzLm1heERhdGUgPT0gJy0xJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEYXRlID0gbmV3IERhdGUoY3VycmVudFllYXIgKyAyNSwgMTEsIDMxKTtcclxuICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEYXRlLnNldERhdGUobmV3IERhdGUoKS5nZXREYXRlKCkgKyBOdW1iZXIoZWxlbWVudC5ldGNfZmllbGRzLm1heERhdGUpKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoY3VycmVudFllYXIgLSAxMDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKGN1cnJlbnRZZWFyICsgMjUsIDExLCAzMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxlbWVudFsnbWluRGF0ZSddID0gdGhpcy5taW5EYXRlXHJcbiAgICAgICAgICAgIGVsZW1lbnRbJ21heERhdGUnXSA9IHRoaXMubWF4RGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChyZXNwb25jZS5mb3JDb250cm9sLCBlbGVtZW50LCB2YWx1ZSwgXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcImRhdGVyYW5nZVwiOlxyXG4gICAgICAgICAgICBjb25zdCBkYXRlX3JhbmdlID0ge307XHJcbiAgICAgICAgICAgIGxldCBsaXN0X29mX2RhdGVzID0gW1xyXG4gICAgICAgICAgICAgIHtmaWVsZF9uYW1lIDogJ3N0YXJ0J30sXHJcbiAgICAgICAgICAgICAge2ZpZWxkX25hbWUgOiAnZW5kJ31cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICBpZiAobGlzdF9vZl9kYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgbGlzdF9vZl9kYXRlcy5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKGRhdGVfcmFuZ2UsIGRhdGEsICcnLCBcInRleHRcIilcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKHJlc3BvbmNlLmZvckNvbnRyb2wsIGVsZW1lbnQsIGRhdGVfcmFuZ2UsIFwiZ3JvdXBcIilcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwibGlzdF9vZl9maWVsZHNcIjpcclxuICAgICAgICAgIGNhc2UgXCJncm91cF9vZl9maWVsZHNcIjpcclxuICAgICAgICAgICAgY29uc3QgbGlzdF9vZl9maWVsZHMgPSB7fTtcclxuICAgICAgICAgICAgaWYoZWxlbWVudCl7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubGlzdF9vZl9maWVsZHMgJiYgZWxlbWVudC5saXN0X29mX2ZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQubGlzdF9vZl9maWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGVsZW1lbnQubGlzdF9vZl9maWVsZHNbal07XHJcbiAgICAgICAgICAgICAgICAgIGlmKGRhdGEgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uY2UuYmxhbmtGaWVsZC5maWVsZE5hbWUgPSBlbGVtZW50Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uY2UuYmxhbmtGaWVsZC5pbmRleCA9IGluZGV4KzErXCItPlwiK2orMTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMubm90aWZ5RmllbGRWYWx1ZUlzTnVsbChlbGVtZW50Lm5hbWUsaisxKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZihlbGVtZW50LnR5cGUgPT0gJ2xpc3Rfb2ZfZmllbGRzJyAmJiBlbGVtZW50LmRhdGF0eXBlICE9ICdrZXlfdmFsdWUnKXtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhWydub3REaXNwbGF5J10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBsZXQgbW9kaWZ5RGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgICAgICAgICBtb2RpZnlEYXRhWydwYXJlbnQnXSA9IGVsZW1lbnQuZmllbGRfbmFtZTtcclxuICAgICAgICAgICAgICAgICAgLy9zaG93IGlmIGhhbmRsaW5nXHJcbiAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc2hvd19pZiAmJiBkYXRhLnNob3dfaWYgIT0gJycpe1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGlmeURhdGFbJ3BhcmVudEluZGV4J10gPSBpbmRleDtcclxuICAgICAgICAgICAgICAgICAgICBtb2RpZnlEYXRhWydjdXJyZW50SW5kZXgnXSA9IGo7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uY2Uuc2hvd0lmRmllbGRMaXN0LnB1c2gobW9kaWZ5RGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy9NZW5kZXRvcnkgSWYgaGFuZGxpbmdcclxuICAgICAgICAgICAgICAgICAgaWYoZGF0YS5tYW5kYXRvcnlfaWYgJiYgZGF0YS5tYW5kYXRvcnlfaWYgIT0gJycpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLm1lbmRldG9yeUlmRmllbGRMaXN0LnB1c2gobW9kaWZ5RGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy9kaXNhYmxlIGlmIGhhbmRsaW5nXHJcbiAgICAgICAgICAgICAgICAgIGlmKChkYXRhLmRpc2FibGVfaWYgJiYgZGF0YS5kaXNhYmxlX2lmICE9ICcnKSB8fCAoZGF0YS5kaXNhYmxlX29uX3VwZGF0ZSAmJiBkYXRhLmRpc2FibGVfb25fdXBkYXRlICE9ICcnICYmIGRhdGEuZGlzYWJsZV9vbl91cGRhdGUgIT0gdW5kZWZpbmVkICYmIGRhdGEuZGlzYWJsZV9vbl91cGRhdGUgIT0gbnVsbCkgfHwgKGRhdGEuZGlzYWJsZV9vbl9hZGQgJiYgZGF0YS5kaXNhYmxlX29uX2FkZCAhPSAnJyAmJiBkYXRhLmRpc2FibGVfb25fYWRkICE9IHVuZGVmaW5lZCAmJiBkYXRhLmRpc2FibGVfb25fYWRkICE9IG51bGwpKXtcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25jZS5kaXNhYmxlSWZGaWVsZExpc3QucHVzaChtb2RpZnlEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZihlbGVtZW50LnR5cGUgPT0gJ2xpc3Rfb2ZfZmllbGRzJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kaWZ5RGF0YS5pc19tYW5kYXRvcnk9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYoZGF0YS5maWVsZF9uYW1lICYmIGRhdGEuZmllbGRfbmFtZSAhPSAnJyAmJiBlbGVtZW50LmRhdGF0eXBlICE9IFwibGlzdF9vZl9vYmplY3Rfd2l0aF9wb3B1cFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGlvbiBvbkNoYW5nZSBoYW5kbGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm9uY2hhbmdlX2Z1bmN0aW9uICYmIGVsZW1lbnQub25jaGFuZ2VfZnVuY3Rpb25fcGFyYW0gJiYgZWxlbWVudC5vbmNoYW5nZV9mdW5jdGlvbl9wYXJhbSAhPSBcIlwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLmNhbGN1bGF0aW9uRmllbGRMaXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibGlzdF9vZl9jaGVja2JveFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKGxpc3Rfb2ZfZmllbGRzLCBtb2RpZnlEYXRhLCBbXSwgXCJsaXN0XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLmNoZWNrQm94RmllbGRMaXN0VmFsdWUucHVzaChtb2RpZnlEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tib3hcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChsaXN0X29mX2ZpZWxkcywgbW9kaWZ5RGF0YSwgZmFsc2UsIFwiY2hlY2tib3hcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuZGF0YXR5cGUgPT0gJ29iamVjdCcpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5ldGNfZmllbGRzICYmIGRhdGEuZXRjX2ZpZWxkcyAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuZXRjX2ZpZWxkcy5taW5EYXRlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5ldGNfZmllbGRzLm1pbkRhdGUgPT0gJy0xJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoY3VycmVudFllYXIgLSAxMDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbkRhdGUuc2V0RGF0ZShuZXcgRGF0ZSgpLmdldERhdGUoKSAtIE51bWJlcihkYXRhLmV0Y19maWVsZHMubWluRGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5ldGNfZmllbGRzICYmIGRhdGEuZXRjX2ZpZWxkcyAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuZXRjX2ZpZWxkcy5tYXhEYXRlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5ldGNfZmllbGRzLm1heERhdGUgPT0gJy0xJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEYXRlID0gbmV3IERhdGUoY3VycmVudFllYXIgKyAyNSwgMTEsIDMxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEYXRlLnNldERhdGUobmV3IERhdGUoKS5nZXREYXRlKCkgKyBOdW1iZXIoZGF0YS5ldGNfZmllbGRzLm1heERhdGUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoY3VycmVudFllYXIgLSAxMDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKGN1cnJlbnRZZWFyICsgMjUsIDExLCAzMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnbWluRGF0ZSddID0gdGhpcy5taW5EYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ21heERhdGUnXSA9IHRoaXMubWF4RGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChsaXN0X29mX2ZpZWxkcywgbW9kaWZ5RGF0YSwgJycsIFwidGV4dFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2wobGlzdF9vZl9maWVsZHMsIG1vZGlmeURhdGEsICcnLCBcInRleHRcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGRhdGEuZmllbGRfY2xhc3MgPSB0aGlzLmNvbW1vbkZ1bmN0aW9uU2VydmljZS5nZXREaXZDbGFzcyhkYXRhLCh0YWJsZUZpZWxkcy5sZW5ndGggKyBlbGVtZW50Lmxpc3Rfb2ZfZmllbGRzLmxlbmd0aCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKHJlc3BvbmNlLmZvckNvbnRyb2wsIGVsZW1lbnQsIGxpc3Rfb2ZfZmllbGRzLCBcImdyb3VwXCIpXHJcbiAgICAgICAgICAgIC8vIGlmKGVsZW1lbnQudHlwZSA9PSAnbGlzdF9vZl9maWVsZHMnKXtcclxuICAgICAgICAgICAgLy8gICB0aGlzLmxpc3Rfb2ZfZmllbGRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyBjYXNlICdodG1sX3ZpZXcnOlxyXG4gICAgICAgICAgLy8gICBjb25zdCBmaWVsZCA9IHtcclxuICAgICAgICAgIC8vICAgICBmaWVsZF9uYW1lIDogJ2h0bWxfdmlld18xJ1xyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woZm9yQ29udHJvbCwgZWxlbWVudCwgJycsIFwidGV4dFwiKVxyXG4gICAgICAgICAgLy8gICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJzdGVwcGVyXCI6XHJcbiAgICAgICAgICAgIGlmKGVsZW1lbnQubGlzdF9vZl9maWVsZHMgJiYgZWxlbWVudC5saXN0X29mX2ZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5saXN0X29mX2ZpZWxkcy5mb3JFYWNoKChzdGVwOmFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoc3RlcC5saXN0X29mX2ZpZWxkcyAhPSB1bmRlZmluZWQgJiYgc3RlcC5saXN0X29mX2ZpZWxkcy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgY29uc3Qgc3RlcHBlcl9vZl9maWVsZHMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgc3RlcC5saXN0X29mX2ZpZWxkcy5mb3JFYWNoKChkYXRhOmFueSkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1vZGlmeURhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICAgICAgICAgICAgICBtb2RpZnlEYXRhLnBhcmVudCA9IHN0ZXAuZmllbGRfbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAvL3Nob3cgaWYgaGFuZGxpbmdcclxuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLnNob3dfaWYgJiYgZGF0YS5zaG93X2lmICE9ICcnKXtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLnNob3dJZkZpZWxkTGlzdC5wdXNoKG1vZGlmeURhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvL21lbmRldG9yeSBpZiBoYW5kbGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEubWFuZGF0b3J5X2lmICYmIGRhdGEubWFuZGF0b3J5X2lmICE9ICcnKXtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLm1lbmRldG9yeUlmRmllbGRMaXN0LnB1c2gobW9kaWZ5RGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vZGlzYWJsZSBpZiBoYW5kbGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKChkYXRhLmRpc2FibGVfaWYgJiYgZGF0YS5kaXNhYmxlX2lmICE9ICcnKSB8fCAoZGF0YS5kaXNhYmxlX29uX3VwZGF0ZSAmJiBkYXRhLmRpc2FibGVfb25fdXBkYXRlICE9ICcnICYmIGRhdGEuZGlzYWJsZV9vbl91cGRhdGUgIT0gdW5kZWZpbmVkICYmIGRhdGEuZGlzYWJsZV9vbl91cGRhdGUgIT0gbnVsbCkgfHwgKGRhdGEuZGlzYWJsZV9vbl9hZGQgJiYgZGF0YS5kaXNhYmxlX29uX2FkZCAhPSAnJyAmJiBkYXRhLmRpc2FibGVfb25fYWRkICE9IHVuZGVmaW5lZCAmJiBkYXRhLmRpc2FibGVfb25fYWRkICE9IG51bGwpKXtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLmRpc2FibGVJZkZpZWxkTGlzdC5wdXNoKG1vZGlmeURhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGlvbiBvbkNoYW5nZSBoYW5kbGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm9uY2hhbmdlX2Z1bmN0aW9uICYmIGVsZW1lbnQub25jaGFuZ2VfZnVuY3Rpb25fcGFyYW0gJiYgZWxlbWVudC5vbmNoYW5nZV9mdW5jdGlvbl9wYXJhbSAhPSBcIlwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLmNhbGN1bGF0aW9uRmllbGRMaXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKHN0ZXBwZXJfb2ZfZmllbGRzLCBtb2RpZnlEYXRhLCAnJywgXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS50cmVlX3ZpZXdfb2JqZWN0ICYmIGRhdGEudHJlZV92aWV3X29iamVjdC5maWVsZF9uYW1lICE9IFwiXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHRyZWVNb2RpZnlEYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhLnRyZWVfdmlld19vYmplY3QpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRyZWVNb2RpZnlEYXRhLmlzX21hbmRhdG9yeT1mYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woc3RlcHBlcl9vZl9maWVsZHMsIHRyZWVNb2RpZnlEYXRhICwgJycsIFwidGV4dFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2wocmVzcG9uY2UuZm9yQ29udHJvbCwgc3RlcCwgc3RlcHBlcl9vZl9maWVsZHMsIFwiZ3JvdXBcIilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZXNwb25jZS5pc1N0ZXBwZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcInBkZl92aWV3XCIgOlxyXG4gICAgICAgICAgICBpZihzZWxlY3RlZFJvd0luZGV4ICYmIHNlbGVjdGVkUm93SW5kZXggIT0gLTEgJiYgZWxlbWVudHMgJiYgZWxlbWVudHMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gZWxlbWVudHNbc2VsZWN0ZWRSb3dJbmRleF07XHJcbiAgICAgICAgICAgICAgcmVzcG9uY2Uuc3RhdGljTW9kYWwucHVzaCh0aGlzLmFwaUNhbGxTZXJ2aWNlLmdldFBheWxvZFdpdGhDcml0ZXJpYShlbGVtZW50Lm9uY2hhbmdlX2FwaV9wYXJhbXMsZWxlbWVudC5vbmNoYW5nZV9jYWxsX2JhY2tfZmllbGQsZWxlbWVudC5vbmNoYW5nZV9hcGlfcGFyYW1zX2NyaXRlcmlhLG9iamVjdCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcImlucHV0X3dpdGhfdXBsb2FkZmlsZVwiOlxyXG4gICAgICAgICAgICBlbGVtZW50LmlzX2Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChyZXNwb25jZS5mb3JDb250cm9sLCBlbGVtZW50LCAnJywgXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcImdyaWRfc2VsZWN0aW9uXCI6XHJcbiAgICAgICAgICAgIGlmKGVsZW1lbnQgJiYgZWxlbWVudC5ncmlkQ29sdW1ucyAmJiBlbGVtZW50LmdyaWRDb2x1bW5zLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgIGxldCBjb2xQYXJGaWVsZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZWxlbWVudCkpO1xyXG4gICAgICAgICAgICAgIGNvbFBhckZpZWxkWydtZW5kZXRvcnlfZmllbGRzJ10gPSBbXTtcclxuICAgICAgICAgICAgICBlbGVtZW50LmdyaWRDb2x1bW5zLmZvckVhY2goKGNvbEZpZWxkOmFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoY29sRmllbGQgJiYgY29sRmllbGQuaXNfbWFuZGF0b3J5KXtcclxuICAgICAgICAgICAgICAgICAgY29sUGFyRmllbGRbJ21lbmRldG9yeV9maWVsZHMnXS5wdXNoKGNvbEZpZWxkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZihjb2xQYXJGaWVsZCAmJiBjb2xQYXJGaWVsZFsnbWVuZGV0b3J5X2ZpZWxkcyddICYmIGNvbFBhckZpZWxkWydtZW5kZXRvcnlfZmllbGRzJ10ubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICByZXNwb25jZS5ncmlkU2VsZWN0aW9uTWVuZGV0b3J5TGlzdC5wdXNoKGNvbFBhckZpZWxkKTtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRbJ21lbmRldG9yeV9maWVsZHMnXSA9IGNvbFBhckZpZWxkWydtZW5kZXRvcnlfZmllbGRzJ107XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJlc3BvbmNlLnNob3dHcmlkRGF0YVtlbGVtZW50LmZpZWxkX25hbWVdID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihlbGVtZW50ICYmIGVsZW1lbnQuYWRkTmV3QnV0dG9uSWYgJiYgZWxlbWVudC5hZGROZXdCdXR0b25JZiAhPSAnJyl7XHJcbiAgICAgICAgICAgICAgZWxlbWVudFsnZmllbGRJbmRleCddID0gaW5kZXg7XHJcbiAgICAgICAgICAgICAgcmVzcG9uY2UuYnV0dG9uSWZMaXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxlbWVudFsnc2hvd0J1dHRvbiddID0gdGhpcy5jaGVja0dyaWRTZWxlY3Rpb25CdXR0b25Db25kaXRpb24oZWxlbWVudCwnYWRkJyx7fSx7fSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2wocmVzcG9uY2UuZm9yQ29udHJvbCwgZWxlbWVudCwgJycsIFwidGV4dFwiKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwidHJlZV92aWV3XCI6XHJcbiAgICAgICAgICAgIC8vIHRoaXMudHJlZUNvbnRyb2xbZWxlbWVudC5maWVsZF9uYW1lXSA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8VG9kb0l0ZW1GbGF0Tm9kZT4odGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUpO1xyXG4gICAgICAgICAgICAvLyB0aGlzLmRhdGFTb3VyY2VbZWxlbWVudC5maWVsZF9uYW1lXSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbFtlbGVtZW50LmZpZWxkX25hbWVdLCB0aGlzLnRyZWVGbGF0dGVuZXIpO1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKHJlc3BvbmNlLmZvckNvbnRyb2wsIGVsZW1lbnQsICcnLCBcInRleHRcIik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgaWYoZWxlbWVudC5kZWZhdWx0VmFsdWUgJiYgZWxlbWVudC5kZWZhdWx0VmFsdWUgIT0gbnVsbCAmJiBlbGVtZW50LmRlZmF1bHRWYWx1ZSAhPSAnJyl7XHJcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlbGVtZW50LmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKHJlc3BvbmNlLmZvckNvbnRyb2wsIGVsZW1lbnQsIHZhbHVlLCBcInRleHRcIik7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2wocmVzcG9uY2UuZm9yQ29udHJvbCwgZWxlbWVudCwgJycsIFwidGV4dFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZWxlbWVudC50cmVlX3ZpZXdfb2JqZWN0ICYmIGVsZW1lbnQudHJlZV92aWV3X29iamVjdC5maWVsZF9uYW1lICE9IFwiXCIpe1xyXG4gICAgICAgICAgbGV0IHRyZWVNb2RpZnlEYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlbGVtZW50LnRyZWVfdmlld19vYmplY3QpKTtcclxuICAgICAgICAgIHRyZWVNb2RpZnlEYXRhLmlzX21hbmRhdG9yeT1mYWxzZTtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2wocmVzcG9uY2UuZm9yQ29udHJvbCwgdHJlZU1vZGlmeURhdGEgLCAnJywgXCJ0ZXh0XCIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vc2hvdyBpZiBoYW5kbGluZ1xyXG4gICAgICBpZihlbGVtZW50LnNob3dfaWYgJiYgZWxlbWVudC5zaG93X2lmICE9ICcnKXtcclxuICAgICAgICByZXNwb25jZS5zaG93SWZGaWVsZExpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICAvL21lbmRhdG9yeSBpZiBoYW5kbGluZ1xyXG4gICAgICBpZihlbGVtZW50Lm1hbmRhdG9yeV9pZiAmJiBlbGVtZW50Lm1hbmRhdG9yeV9pZiAhPSAnJyl7XHJcbiAgICAgICAgcmVzcG9uY2UubWVuZGV0b3J5SWZGaWVsZExpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICAvL0N1c3RvbXZhbGlkYXRpb24gaGFuZGxpbmdcclxuICAgICAgaWYoZWxlbWVudC5jb21wYXJlRmllbGROYW1lICYmIGVsZW1lbnQuY29tcGFyZUZpZWxkTmFtZSAhPSAnJyl7XHJcbiAgICAgICAgcmVzcG9uY2UuY3VzdG9tVmFsaWRhdGlvbkZpZWxzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgLy9kaXNhYmxlIGlmIGhhbmRsaW5nXHJcbiAgICAgIGlmKChlbGVtZW50LmRpc2FibGVfaWYgJiYgZWxlbWVudC5kaXNhYmxlX2lmICE9ICcnKSB8fCAoZWxlbWVudC5kaXNhYmxlX29uX3VwZGF0ZSAmJiBlbGVtZW50LmRpc2FibGVfb25fdXBkYXRlICE9ICcnICYmIGVsZW1lbnQuZGlzYWJsZV9vbl91cGRhdGUgIT0gdW5kZWZpbmVkICYmIGVsZW1lbnQuZGlzYWJsZV9vbl91cGRhdGUgIT0gbnVsbCkgfHwgKGVsZW1lbnQuZGlzYWJsZV9vbl9hZGQgJiYgZWxlbWVudC5kaXNhYmxlX29uX2FkZCAhPSAnJyAmJiBlbGVtZW50LmRpc2FibGVfb25fYWRkICE9IHVuZGVmaW5lZCAmJiBlbGVtZW50LmRpc2FibGVfb25fYWRkICE9IG51bGwpKXtcclxuICAgICAgICByZXNwb25jZS5kaXNhYmxlSWZGaWVsZExpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBDYWxjdWxhdGlvbiBvbkNoYW5nZSBoYW5kbGluZ1xyXG4gICAgICBpZiAoZWxlbWVudC5vbmNoYW5nZV9mdW5jdGlvbiAmJiBlbGVtZW50Lm9uY2hhbmdlX2Z1bmN0aW9uX3BhcmFtICYmIGVsZW1lbnQub25jaGFuZ2VfZnVuY3Rpb25fcGFyYW0gIT0gXCJcIil7XHJcbiAgICAgICAgcmVzcG9uY2UuY2FsY3VsYXRpb25GaWVsZExpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICBlbGVtZW50LmZpZWxkX2NsYXNzID0gdGhpcy5jb21tb25GdW5jdGlvblNlcnZpY2UuZ2V0RGl2Q2xhc3MoZWxlbWVudCx0YWJsZUZpZWxkcy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgaWYoZm9ybUZpZWxkQnV0dG9ucyAmJiBmb3JtRmllbGRCdXR0b25zLmxlbmd0aCA+IDApe1xyXG4gICAgICBmb3JtRmllbGRCdXR0b25zLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XHJcbiAgICAgICAgaWYoZWxlbWVudC5maWVsZF9uYW1lICYmIGVsZW1lbnQuZmllbGRfbmFtZSAhPSAnJyl7XHJcbiAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiZHJvcGRvd25cIjpcclxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKHJlc3BvbmNlLmZvckNvbnRyb2wsIGVsZW1lbnQsICcnLCBcInRleHRcIilcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZWxlbWVudC5zaG93X2lmICYmIGVsZW1lbnQuc2hvd19pZiAhPSAnJyl7XHJcbiAgICAgICAgICByZXNwb25jZS5zaG93SWZGaWVsZExpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZWxlbWVudC5tYW5kYXRvcnlfaWYgJiYgZWxlbWVudC5tYW5kYXRvcnlfaWYgIT0gJycpe1xyXG4gICAgICAgICAgcmVzcG9uY2UubWVuZGV0b3J5SWZGaWVsZExpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoKGVsZW1lbnQuZGlzYWJsZV9pZiAmJiBlbGVtZW50LmRpc2FibGVfaWYgIT0gJycpIHx8IChlbGVtZW50LmRpc2FibGVfb25fdXBkYXRlICYmIGVsZW1lbnQuZGlzYWJsZV9vbl91cGRhdGUgIT0gJycgJiYgZWxlbWVudC5kaXNhYmxlX29uX3VwZGF0ZSAhPSB1bmRlZmluZWQgJiYgZWxlbWVudC5kaXNhYmxlX29uX3VwZGF0ZSAhPSBudWxsKSB8fCAoZWxlbWVudC5kaXNhYmxlX29uX2FkZCAmJiBlbGVtZW50LmRpc2FibGVfb25fYWRkICE9ICcnICYmIGVsZW1lbnQuZGlzYWJsZV9vbl9hZGQgIT0gdW5kZWZpbmVkICYmIGVsZW1lbnQuZGlzYWJsZV9vbl9hZGQgIT0gbnVsbCkpe1xyXG4gICAgICAgICAgcmVzcG9uY2UuZGlzYWJsZUlmRmllbGRMaXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25jZTtcclxuICB9XHJcbiAgY2hlY2tGaWVsZEJ1dHRvbkNvbmRpdGlvbih0YWJsZUZpZWxkczphbnkpe1xyXG4gICAgbGV0IHJlc3BvbmNlOmFueT17XHJcbiAgICAgIHRlbXBWYWw6e31cclxuICAgIH1cclxuICAgIHRhYmxlRmllbGRzLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBcInR5cGVhaGVhZFwiOlxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZGF0YXR5cGUgPT0gJ2xpc3Rfb2Zfb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXNwb25jZS50ZW1wVmFsW2VsZW1lbnQuZmllbGRfbmFtZSArIFwiX2FkZF9idXR0b25cIl0gPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImxpc3Rfb2Zfc3RyaW5nXCI6XHJcbiAgICAgICAgICByZXNwb25jZS50ZW1wVmFsW2VsZW1lbnQuZmllbGRfbmFtZSArIFwiX2FkZF9idXR0b25cIl0gPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImxpc3Rfb2ZfZmllbGRzXCI6XHJcbiAgICAgICAgY2FzZSBcImdyb3VwX29mX2ZpZWxkc1wiOlxyXG4gICAgICAgICAgaWYoZWxlbWVudC5saXN0X29mX2ZpZWxkcyAhPSB1bmRlZmluZWQgJiYgZWxlbWVudC5saXN0X29mX2ZpZWxkcyAhPSBudWxsICYmIGVsZW1lbnQubGlzdF9vZl9maWVsZHMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGVsZW1lbnQubGlzdF9vZl9maWVsZHMuZm9yRWFjaCgoY2hpbGQ6YW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYoY2hpbGQgJiYgY2hpbGQgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoaWxkLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcInR5cGVhaGVhZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5kYXRhdHlwZSA9PSAnbGlzdF9vZl9vYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXNwb25jZS50ZW1wVmFsW2VsZW1lbnQuZmllbGRfbmFtZSArICdfJyArIGNoaWxkLmZpZWxkX25hbWUgKyBcIl9hZGRfYnV0dG9uXCJdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJsaXN0X29mX3N0cmluZ1wiOlxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLnRlbXBWYWxbZWxlbWVudC5maWVsZF9uYW1lICsgJ18nICsgY2hpbGQuZmllbGRfbmFtZSArIFwiX2FkZF9idXR0b25cIl0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic3RlcHBlclwiOlxyXG4gICAgICAgICAgaWYoZWxlbWVudC5saXN0X29mX2ZpZWxkcyAhPSB1bmRlZmluZWQgJiYgZWxlbWVudC5saXN0X29mX2ZpZWxkcyAhPSBudWxsICYmIGVsZW1lbnQubGlzdF9vZl9maWVsZHMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGVsZW1lbnQubGlzdF9vZl9maWVsZHMuZm9yRWFjaCgoc3RlcDphbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZihzdGVwLmxpc3Rfb2ZfZmllbGRzICE9IHVuZGVmaW5lZCAmJiBzdGVwLmxpc3Rfb2ZfZmllbGRzICE9IG51bGwgJiYgc3RlcC5saXN0X29mX2ZpZWxkcy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgIHN0ZXAubGlzdF9vZl9maWVsZHMuZm9yRWFjaCgoY2hpbGQ6YW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2hpbGQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0eXBlYWhlYWRcIjpcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5kYXRhdHlwZSA9PSAnbGlzdF9vZl9vYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLnRlbXBWYWxbc3RlcC5maWVsZF9uYW1lICsgJ18nICsgY2hpbGQuZmllbGRfbmFtZSArIFwiX2FkZF9idXR0b25cIl0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImxpc3Rfb2Zfc3RyaW5nXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXNwb25jZS50ZW1wVmFsW3N0ZXAuZmllbGRfbmFtZSArICdfJyArIGNoaWxkLmZpZWxkX25hbWUgKyBcIl9hZGRfYnV0dG9uXCJdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzcG9uY2U7XHJcbiAgfVxyXG4gIHVwZGF0ZVNlbGVjdENvbnRhY3Qoc2VsZWN0Q29udGFjdDphbnksdGFiRmlsdGVyRGF0YTphbnksdGFibGVGaWVsZHM6YW55LHRlbXBsYXRlRm9ybTpVbnR5cGVkRm9ybUdyb3VwLGZvcm1WYWx1ZVdpdGhDdXN0b21EYXRhOmFueSxzdGF0aWNNb2RhbDphbnkpe1xyXG4gICAgbGV0IGFjY291bnQ9e307XHJcbiAgICBsZXQgY29udGFjdD17fTtcclxuICAgIGxldCBwYXlsb2FkOmFueSA9IHt9O1xyXG4gICAgbGV0IHNlbGVjdENvbnRhY3RPYmplY3Q6YW55ID0ge307XHJcbiAgICBpZihzZWxlY3RDb250YWN0KXtcclxuICAgICAgc2VsZWN0Q29udGFjdE9iamVjdCA9IHNlbGVjdENvbnRhY3Q7XHJcbiAgICB9XHJcbiAgICBpZih0YWJGaWx0ZXJEYXRhICYmIHRhYkZpbHRlckRhdGEubGVuZ3RoID4gMCl7XHJcbiAgICAgIHRhYkZpbHRlckRhdGEuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcclxuICAgICAgICBpZihlbGVtZW50ICYmIGVsZW1lbnQuX2lkKXtcclxuICAgICAgICAgIGlmKGVsZW1lbnQuX2lkID09IHNlbGVjdENvbnRhY3Qpe1xyXG4gICAgICAgICAgICBzZWxlY3RDb250YWN0T2JqZWN0ID0gZWxlbWVudDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYoc2VsZWN0Q29udGFjdE9iamVjdCl7XHJcbiAgICAgIGlmKHNlbGVjdENvbnRhY3RPYmplY3RbJ19pZCddKXtcclxuICAgICAgICBjb250YWN0ID0ge1xyXG4gICAgICAgICAgXCJfaWRcIjpzZWxlY3RDb250YWN0T2JqZWN0WydfaWQnXSxcclxuICAgICAgICAgIFwibmFtZVwiOnNlbGVjdENvbnRhY3RPYmplY3RbJ25hbWUnXSxcclxuICAgICAgICAgIFwiY29kZVwiOnNlbGVjdENvbnRhY3RPYmplY3RbJ3NlcmlhbElkJ11cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYoc2VsZWN0Q29udGFjdE9iamVjdFsnbGVhZCddKXtcclxuICAgICAgICBhY2NvdW50ID0gc2VsZWN0Q29udGFjdE9iamVjdFsnbGVhZCddO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZih0YWJsZUZpZWxkcyAmJiB0YWJsZUZpZWxkcy5sZW5ndGggPiAwKXtcclxuICAgICAgdGFibGVGaWVsZHMuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcclxuICAgICAgICBpZihlbGVtZW50ICYmIGVsZW1lbnQuZmllbGRfbmFtZSAmJiBlbGVtZW50LmZpZWxkX25hbWUgIT0gJycpe1xyXG4gICAgICAgICAgbGV0IGZpZWxkTmFtZSA9IGVsZW1lbnQuZmllbGRfbmFtZTtcclxuICAgICAgICAgIGlmKGZpZWxkTmFtZSA9PSAnYWNjb3VudCcpe1xyXG4gICAgICAgICAgICBpZihhY2NvdW50ICYmIE9iamVjdC5rZXlzKGFjY291bnQpLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlRm9ybS5jb250cm9sc1snYWNjb3VudCddLnNldFZhbHVlKGFjY291bnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm9uY2hhbmdlX2FwaV9wYXJhbXMgJiYgZWxlbWVudC5vbmNoYW5nZV9jYWxsX2JhY2tfZmllbGQgJiYgIWVsZW1lbnQuZG9fbm90X2F1dG9fdHJpZ2dlcl9vbl9lZGl0KSB7XHJcbiAgICAgICAgICAgICAgcGF5bG9hZCA9IHRoaXMuYXBpQ2FsbFNlcnZpY2UuZ2V0UGF5bG9kV2l0aENyaXRlcmlhKGVsZW1lbnQub25jaGFuZ2VfYXBpX3BhcmFtcywgZWxlbWVudC5vbmNoYW5nZV9jYWxsX2JhY2tfZmllbGQsIGVsZW1lbnQub25jaGFuZ2VfYXBpX3BhcmFtc19jcml0ZXJpYSwgZm9ybVZhbHVlV2l0aEN1c3RvbURhdGEpXHJcbiAgICAgICAgICAgICAgaWYoZWxlbWVudC5vbmNoYW5nZV9hcGlfcGFyYW1zLmluZGV4T2YoXCJGT1JNX0dST1VQXCIpID49IDAgfHwgZWxlbWVudC5vbmNoYW5nZV9hcGlfcGFyYW1zLmluZGV4T2YoXCJRVE1QXCIpID49IDApe1xyXG4gICAgICAgICAgICAgICAgcGF5bG9hZFtcImRhdGFcIl09Zm9ybVZhbHVlV2l0aEN1c3RvbURhdGE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHN0YXRpY01vZGFsLnB1c2gocGF5bG9hZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKGVsZW1lbnQuZmllbGRfbmFtZSA9PSAnY29udGFjdCcpe1xyXG4gICAgICAgICAgICBpZihjb250YWN0ICYmIE9iamVjdC5rZXlzKGNvbnRhY3QpLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlRm9ybS5jb250cm9sc1snY29udGFjdCddLnNldFZhbHVlKGNvbnRhY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm9uY2hhbmdlX2FwaV9wYXJhbXMgJiYgZWxlbWVudC5vbmNoYW5nZV9jYWxsX2JhY2tfZmllbGQgJiYgIWVsZW1lbnQuZG9fbm90X2F1dG9fdHJpZ2dlcl9vbl9lZGl0KSB7XHJcbiAgICAgICAgICAgICAgcGF5bG9hZCA9IHRoaXMuYXBpQ2FsbFNlcnZpY2UuZ2V0UGF5bG9kV2l0aENyaXRlcmlhKGVsZW1lbnQub25jaGFuZ2VfYXBpX3BhcmFtcywgZWxlbWVudC5vbmNoYW5nZV9jYWxsX2JhY2tfZmllbGQsIGVsZW1lbnQub25jaGFuZ2VfYXBpX3BhcmFtc19jcml0ZXJpYSwgZm9ybVZhbHVlV2l0aEN1c3RvbURhdGEpXHJcbiAgICAgICAgICAgICAgaWYoZWxlbWVudC5vbmNoYW5nZV9hcGlfcGFyYW1zLmluZGV4T2YoXCJGT1JNX0dST1VQXCIpID49IDAgfHwgZWxlbWVudC5vbmNoYW5nZV9hcGlfcGFyYW1zLmluZGV4T2YoXCJRVE1QXCIpID49IDApe1xyXG4gICAgICAgICAgICAgICAgcGF5bG9hZFtcImRhdGFcIl09Zm9ybVZhbHVlV2l0aEN1c3RvbURhdGE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHN0YXRpY01vZGFsLnB1c2gocGF5bG9hZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKGVsZW1lbnQudHlwZSA9PSAnc3RlcHBlcicgJiYgZWxlbWVudC5saXN0X29mX2ZpZWxkcyAmJiBlbGVtZW50Lmxpc3Rfb2ZfZmllbGRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBlbGVtZW50Lmxpc3Rfb2ZfZmllbGRzLmZvckVhY2goKHN0ZXBEYXRhOmFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKHN0ZXBEYXRhICYmIHN0ZXBEYXRhLmxpc3Rfb2ZfZmllbGRzICYmIHN0ZXBEYXRhLmxpc3Rfb2ZfZmllbGRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgc3RlcERhdGEubGlzdF9vZl9maWVsZHMuZm9yRWFjaCgoZGF0YTphbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkTmFtZSA9IHN0ZXBEYXRhLmZpZWxkX25hbWU7XHJcbiAgICAgICAgICAgICAgICAgIGlmKGRhdGEuZmllbGRfbmFtZSA9PSAnYWNjb3VudCcpe1xyXG4gICAgICAgICAgICAgICAgICAgICg8VW50eXBlZEZvcm1Hcm91cD50ZW1wbGF0ZUZvcm0uY29udHJvbHNbZmllbGROYW1lXSkuY29udHJvbHNbJ2FjY291bnQnXS5zZXRWYWx1ZShhY2NvdW50KTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMudGVtcGxhdGVGb3JtLmdldChzdGVwRGF0YS5maWVsZF9uYW1lKS5nZXQoJ2FjY291bnQnKS5zZXRWYWx1ZShhY2NvdW50KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5vbmNoYW5nZV9hcGlfcGFyYW1zICYmIGRhdGEub25jaGFuZ2VfY2FsbF9iYWNrX2ZpZWxkICYmICFkYXRhLmRvX25vdF9hdXRvX3RyaWdnZXJfb25fZWRpdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IHRoaXMuYXBpQ2FsbFNlcnZpY2UuZ2V0UGF5bG9kV2l0aENyaXRlcmlhKGRhdGEub25jaGFuZ2VfYXBpX3BhcmFtcywgZGF0YS5vbmNoYW5nZV9jYWxsX2JhY2tfZmllbGQsIGRhdGEub25jaGFuZ2VfYXBpX3BhcmFtc19jcml0ZXJpYSwgZm9ybVZhbHVlV2l0aEN1c3RvbURhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhLm9uY2hhbmdlX2FwaV9wYXJhbXMuaW5kZXhPZihcIkZPUk1fR1JPVVBcIikgPj0gMCB8fCBkYXRhLm9uY2hhbmdlX2FwaV9wYXJhbXMuaW5kZXhPZihcIlFUTVBcIikgPj0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRbXCJkYXRhXCJdPWZvcm1WYWx1ZVdpdGhDdXN0b21EYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljTW9kYWwucHVzaChwYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYoZGF0YS5maWVsZF9uYW1lID09ICdjb250YWN0Jyl7XHJcbiAgICAgICAgICAgICAgICAgICAgKDxVbnR5cGVkRm9ybUdyb3VwPnRlbXBsYXRlRm9ybS5jb250cm9sc1tmaWVsZE5hbWVdKS5jb250cm9sc1snY29udGFjdCddLnNldFZhbHVlKGNvbnRhY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLm9uY2hhbmdlX2FwaV9wYXJhbXMgJiYgZGF0YS5vbmNoYW5nZV9jYWxsX2JhY2tfZmllbGQgJiYgIWRhdGEuZG9fbm90X2F1dG9fdHJpZ2dlcl9vbl9lZGl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0gdGhpcy5hcGlDYWxsU2VydmljZS5nZXRQYXlsb2RXaXRoQ3JpdGVyaWEoZGF0YS5vbmNoYW5nZV9hcGlfcGFyYW1zLCBkYXRhLm9uY2hhbmdlX2NhbGxfYmFja19maWVsZCwgZGF0YS5vbmNoYW5nZV9hcGlfcGFyYW1zX2NyaXRlcmlhLCBmb3JtVmFsdWVXaXRoQ3VzdG9tRGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGEub25jaGFuZ2VfYXBpX3BhcmFtcy5pbmRleE9mKFwiRk9STV9HUk9VUFwiKSA+PSAwIHx8IGRhdGEub25jaGFuZ2VfYXBpX3BhcmFtcy5pbmRleE9mKFwiUVRNUFwiKSA+PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZFtcImRhdGFcIl09Zm9ybVZhbHVlV2l0aEN1c3RvbURhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNNb2RhbC5wdXNoKHBheWxvYWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0YXRpY01vZGFsO1xyXG4gIH1cclxuICBjaGVja0dyaWRTZWxlY3Rpb25CdXR0b25Db25kaXRpb24oZmllbGQ6YW55LGJ1dHRvbjphbnksc2VsZWN0ZWRSb3c6YW55LGZvcm1WYWx1ZTphbnkpe1xyXG4gICAgbGV0IGNoZWNrOmFueSA9IHRydWU7XHJcbiAgICBzd2l0Y2ggKGJ1dHRvbikge1xyXG4gICAgICBjYXNlICdhZGQnOlxyXG4gICAgICAgIGlmKGZpZWxkICYmIGZpZWxkLmFkZE5ld0J1dHRvbklmICYmIGZpZWxkLmFkZE5ld0J1dHRvbklmICE9ICcnKXtcclxuICAgICAgICAgIGxldCBtb2RpZnllZEZpZWxkOmFueSA9IHt9O1xyXG4gICAgICAgICAgbW9kaWZ5ZWRGaWVsZFsnc2hvd19pZiddID0gZmllbGQuYWRkTmV3QnV0dG9uSWY7XHJcbiAgICAgICAgICBjaGVjayA9IHRoaXMuY2hlY2tpZlNlcnZpY2UuY2hlY2tTaG93SWYobW9kaWZ5ZWRGaWVsZCxzZWxlY3RlZFJvdyxmb3JtVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBjaGVjaztcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHREYXRlKGVsZW1lbnQ6YW55KXtcclxuICAgIGxldCB2YWx1ZTphbnkgPSBcIlwiO1xyXG4gICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIHRvZGF5LnNldEhvdXJzKDAsMCwwLDApO1xyXG4gICAgbGV0IHllc3RlcmRheSA9IG5ldyBEYXRlKHRvZGF5KTtcclxuICAgIHllc3RlcmRheS5zZXREYXRlKHllc3RlcmRheS5nZXREYXRlKCkgLSAxKTtcclxuICAgIHllc3RlcmRheS5zZXRIb3VycygwLDAsMCwwKTtcclxuICAgIHN3aXRjaCAoZWxlbWVudC5kZWZhdWx0VmFsdWUpIHtcclxuICAgICAgY2FzZSBcIlRvZGF5XCI6XHJcbiAgICAgICAgdmFsdWUgPSB0b2RheTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlllc3RlcmRheVwiOlxyXG4gICAgICAgIHZhbHVlID0geWVzdGVyZGF5O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuICBnZXRGb2N1c0ZpZWxkKHByZXZpb3VzRm9ybUZvY3VzRmllbGQ6YW55LHRhYmxlRmllbGRzOmFueSx0ZW1wbGF0ZUZvcm06VW50eXBlZEZvcm1Hcm91cCxmb2N1c0ZpZWxkUGFyZW50OmFueSxjaGVja0Zvcm1GaWVsZEF1dGZvY3VzOmFueSl7XHJcbiAgICBsZXQgcmVzcG9uY2U6YW55PXtcclxuICAgICAgY2hlY2tGb3JtRmllbGRBdXRmb2N1czpjaGVja0Zvcm1GaWVsZEF1dGZvY3VzLFxyXG4gICAgICBwcmV2aW91c0Zvcm1Gb2N1c0ZpZWxkOnByZXZpb3VzRm9ybUZvY3VzRmllbGQsXHJcbiAgICAgIGZvY3VzRmllbGRQYXJlbnQ6Zm9jdXNGaWVsZFBhcmVudCxcclxuICAgICAgaWQ6XCJcIlxyXG4gICAgfVxyXG4gICAgaWYocHJldmlvdXNGb3JtRm9jdXNGaWVsZCAmJiBwcmV2aW91c0Zvcm1Gb2N1c0ZpZWxkLl9pZCl7XHJcbiAgICAgIHJlc3BvbmNlID0gdGhpcy5mb2N1c0ZpZWxkKFwiXCIscHJldmlvdXNGb3JtRm9jdXNGaWVsZCx0ZW1wbGF0ZUZvcm0sZm9jdXNGaWVsZFBhcmVudCxjaGVja0Zvcm1GaWVsZEF1dGZvY3VzLHByZXZpb3VzRm9ybUZvY3VzRmllbGQscmVzcG9uY2UpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgaWYocHJldmlvdXNGb3JtRm9jdXNGaWVsZCA9PSB1bmRlZmluZWQgfHwgcHJldmlvdXNGb3JtRm9jdXNGaWVsZC5faWQgPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB0YWJsZUZpZWxkcykge1xyXG4gICAgICAgICAgaWYoa2V5LnR5cGUgPT0gXCJzdGVwcGVyXCIpe1xyXG4gICAgICAgICAgICBpZihrZXkubGlzdF9vZl9maWVsZHMgJiYga2V5Lmxpc3Rfb2ZfZmllbGRzICE9IG51bGwgJiYga2V5Lmxpc3Rfb2ZfZmllbGRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RlcCBvZiBrZXkubGlzdF9vZl9maWVsZHMpIHtcclxuICAgICAgICAgICAgICAgIGlmKHN0ZXAubGlzdF9vZl9maWVsZHMgJiYgc3RlcC5saXN0X29mX2ZpZWxkcyAhPSBudWxsICYmIHN0ZXAubGlzdF9vZl9maWVsZHMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2Ygc3RlcC5saXN0X29mX2ZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5maWVsZF9uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXNwb25jZSA9IHRoaXMuZm9jdXNGaWVsZChzdGVwLGZpZWxkLHRlbXBsYXRlRm9ybSxmb2N1c0ZpZWxkUGFyZW50LGNoZWNrRm9ybUZpZWxkQXV0Zm9jdXMscHJldmlvdXNGb3JtRm9jdXNGaWVsZCxyZXNwb25jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNlIGlmIChrZXkuZmllbGRfbmFtZSkge1xyXG4gICAgICAgICAgICBpZihrZXkudHlwZSA9PSAndGV4dCcpe1xyXG4gICAgICAgICAgICAgIHJlc3BvbmNlID0gdGhpcy5mb2N1c0ZpZWxkKFwiXCIsa2V5LHRlbXBsYXRlRm9ybSxmb2N1c0ZpZWxkUGFyZW50LGNoZWNrRm9ybUZpZWxkQXV0Zm9jdXMscHJldmlvdXNGb3JtRm9jdXNGaWVsZCxyZXNwb25jZSk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIHJlc3BvbmNlLmNoZWNrRm9ybUZpZWxkQXV0Zm9jdXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3BvbmNlO1xyXG4gIH1cclxuICBmb2N1c0ZpZWxkKHBhcmVudDphbnksa2V5OmFueSx0ZW1wbGF0ZUZvcm06VW50eXBlZEZvcm1Hcm91cCxmb2N1c0ZpZWxkUGFyZW50OmFueSxjaGVja0Zvcm1GaWVsZEF1dGZvY3VzOmFueSxwcmV2aW91c0Zvcm1Gb2N1c0ZpZWxkOmFueSxyZXNwb25jZTphbnkpe1xyXG4gICAgcmVzcG9uY2UuaWQgPSBrZXkuX2lkICsgXCJfXCIgKyBrZXkuZmllbGRfbmFtZTtcclxuICAgIGxldCBmaWVsZDphbnkgPSB7fTtcclxuICAgIGlmKHBhcmVudCA9PSAnJyl7XHJcbiAgICAgIGlmKGZvY3VzRmllbGRQYXJlbnQgJiYgZm9jdXNGaWVsZFBhcmVudC5maWVsZF9uYW1lICYmIGZvY3VzRmllbGRQYXJlbnQuZmllbGRfbmFtZSAhPSAnJyl7XHJcbiAgICAgICAgcGFyZW50ID0gZm9jdXNGaWVsZFBhcmVudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYocGFyZW50ICE9IFwiXCIpe1xyXG4gICAgICBmaWVsZCA9ICg8VW50eXBlZEZvcm1Hcm91cD50ZW1wbGF0ZUZvcm0uY29udHJvbHNbcGFyZW50LmZpZWxkX25hbWVdKS5jb250cm9sc1trZXkuZmllbGRfbmFtZV07XHJcbiAgICB9ZWxzZXtcclxuICAgICAgZmllbGQgPSB0ZW1wbGF0ZUZvcm0uY29udHJvbHNba2V5LmZpZWxkX25hbWVdO1xyXG4gICAgfVxyXG4gICAgaWYoZmllbGQgJiYgZmllbGQudG91Y2hlZCl7XHJcbiAgICAgIHJlc3BvbmNlLmNoZWNrRm9ybUZpZWxkQXV0Zm9jdXMgPSBmYWxzZTtcclxuICAgICAgaWYocHJldmlvdXNGb3JtRm9jdXNGaWVsZCAmJiBwcmV2aW91c0Zvcm1Gb2N1c0ZpZWxkLl9pZCl7XHJcbiAgICAgICAgcmVzcG9uY2UucHJldmlvdXNGb3JtRm9jdXNGaWVsZCA9IHt9O1xyXG4gICAgICAgIHJlc3BvbmNlLmZvY3VzRmllbGRQYXJlbnQ9e307XHJcbiAgICAgIH1cclxuICAgIH1lbHNlIGlmKGZpZWxkID09IHVuZGVmaW5lZCl7XHJcbiAgICAgIHJlc3BvbmNlLnByZXZpb3VzRm9ybUZvY3VzRmllbGQgPSB7fTtcclxuICAgICAgcmVzcG9uY2UuZm9jdXNGaWVsZFBhcmVudD17fTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25jZTtcclxuICB9XHJcbiAgZ2V0RG9ub3RSZXNldEZpZWxkcyh0YWJsZUZpZWxkczphbnksZG9ub3RSZXNldEZpZWxkTGlzdHM6YW55LEZvcm1WYWx1ZTphbnkpe1xyXG4gICAgdGFibGVGaWVsZHMuZm9yRWFjaCgodGFibGVmaWVsZDphbnkpID0+IHtcclxuICAgICAgaWYodGFibGVmaWVsZC5kb19ub3RfcmVmcmVzaF9vbl9hZGQgJiYgdGFibGVmaWVsZC50eXBlICE9IFwibGlzdF9vZl9maWVsZHNcIiAmJiB0YWJsZWZpZWxkLnR5cGUgIT0gXCJncm91cF9vZl9maWVsZHNcIiAmJiB0YWJsZWZpZWxkLnR5cGUgIT0gXCJzdGVwcGVyXCIpe1xyXG4gICAgICAgIGRvbm90UmVzZXRGaWVsZExpc3RzW3RhYmxlZmllbGQuZmllbGRfbmFtZV0gPSBGb3JtVmFsdWVbdGFibGVmaWVsZC5maWVsZF9uYW1lXTtcclxuICAgICAgfWVsc2UgaWYodGFibGVmaWVsZC50eXBlID09IFwiZ3JvdXBfb2ZfZmllbGRzXCIpe1xyXG4gICAgICAgIGlmKHRhYmxlZmllbGQubGlzdF9vZl9maWVsZHMgJiYgdGFibGVmaWVsZC5saXN0X29mX2ZpZWxkcy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgIHRhYmxlZmllbGQubGlzdF9vZl9maWVsZHMuZm9yRWFjaCgoZmllbGQ6YW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmKGZpZWxkLmRvX25vdF9yZWZyZXNoX29uX2FkZCl7XHJcbiAgICAgICAgICAgICAgZG9ub3RSZXNldEZpZWxkTGlzdHNbdGFibGVmaWVsZC5maWVsZF9uYW1lXVtmaWVsZC5maWVsZF9uYW1lXSA9IEZvcm1WYWx1ZVt0YWJsZWZpZWxkLmZpZWxkX25hbWVdW2ZpZWxkLmZpZWxkX25hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1lbHNlIGlmKHRhYmxlZmllbGQudHlwZSA9PSBcInN0ZXBwZXJcIil7XHJcbiAgICAgICAgaWYodGFibGVmaWVsZC5saXN0X29mX2ZpZWxkcyAmJiB0YWJsZWZpZWxkLmxpc3Rfb2ZfZmllbGRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgdGFibGVmaWVsZC5saXN0X29mX2ZpZWxkcy5mb3JFYWNoKChzdGVwOmFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZihzdGVwLmxpc3Rfb2ZfZmllbGRzICYmIHN0ZXAubGlzdF9vZl9maWVsZHMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgc3RlcC5saXN0X29mX2ZpZWxkcy5mb3JFYWNoKChmaWVsZDphbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKGZpZWxkLmRvX25vdF9yZWZyZXNoX29uX2FkZCl7XHJcbiAgICAgICAgICAgICAgICAgIGRvbm90UmVzZXRGaWVsZExpc3RzW3N0ZXAuZmllbGRfbmFtZV1bZmllbGQuZmllbGRfbmFtZV0gPSBGb3JtVmFsdWVbc3RlcC5maWVsZF9uYW1lXVtmaWVsZC5maWVsZF9uYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkb25vdFJlc2V0RmllbGRMaXN0cztcclxuICB9XHJcbiAgYWRkTmV3Rm9ybShzZWxlY3RUYWJJbmRleDpudW1iZXIsaXNCdWxrVXBkYXRlOmJvb2xlYW4sYnVsa3VwbG9hZExpc3Q6YW55LHNlbGVjdGVkUm93SW5kZXg6bnVtYmVyLGZvcm1OYW1lOnN0cmluZyxzZWxlY3RDb250YWN0QWRkOmFueSl7XHJcbiAgICBsZXQgZm9ybURhdGE6YW55ID0ge31cclxuICAgIGZvcm1EYXRhWyd0YWJJbmRleCddID0gc2VsZWN0VGFiSW5kZXg7XHJcbiAgICBmb3JtRGF0YVsnYnVsa1VwZGF0ZSddID0gaXNCdWxrVXBkYXRlO1xyXG4gICAgZm9ybURhdGFbJ2J1bGtEYXRhTGlzdCddID0gYnVsa3VwbG9hZExpc3Q7XHJcbiAgICBmb3JtRGF0YVsnZWRpdGVkUm93SW5kZXgnXSA9IHNlbGVjdGVkUm93SW5kZXg7XHJcbiAgICBmb3JtRGF0YVsnZm9ybU5hbWUnXSA9IGZvcm1OYW1lO1xyXG4gICAgZm9ybURhdGFbJ3NlbGVjdENvbnRhY3QnXSA9IHNlbGVjdENvbnRhY3RBZGQ7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKCdmb3JtLW1vZGFsJyxmb3JtRGF0YSlcclxuICB9XHJcbiAgZ2V0RmllbGRzRnJvbUZvcm1zKHRhYjphbnksZm9ybU5hbWU6c3RyaW5nLGRpbmFtaWNfZm9ybTphbnksZ3JpZEJ1dHRvbnM6YW55LHRhYmxlRmllbGRzOmFueSxhY3Rpb25CdXR0b25zOmFueSl7XHJcbiAgICBsZXQgcmVzcG9uY2UgPSB7XHJcbiAgICAgIFwiZmllbGRzXCIgOiB0YWJsZUZpZWxkcyxcclxuICAgICAgXCJidXR0b25zXCIgOiBhY3Rpb25CdXR0b25zXHJcbiAgICB9XHJcbiAgICBsZXQgZm9ybSA9IG51bGw7XHJcbiAgICBpZihmb3JtTmFtZSAhPSAnRElOQU1JQ19GT1JNJyAmJiB0YWIgJiYgdGFiLmZvcm1zKXtcclxuICAgICAgZm9ybSA9IHRoaXMuY29tbW9uRnVuY3Rpb25TZXJ2aWNlLmdldEZvcm0odGFiLmZvcm1zLGZvcm1OYW1lLGdyaWRCdXR0b25zKTtcclxuICAgIH1lbHNlIGlmKGZvcm1OYW1lID09ICdESU5BTUlDX0ZPUk0nKXtcclxuICAgICAgZm9ybSA9IGRpbmFtaWNfZm9ybTtcclxuICAgIH1lbHNle1xyXG4gICAgICBmb3JtID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYoZm9ybSAhPSBudWxsKXtcclxuICAgICAgaWYoZm9ybT8uWyd0YWJsZUZpZWxkcyddICYmIGZvcm0/LlsndGFibGVGaWVsZHMnXT8ubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgcmVzcG9uY2UuZmllbGRzID0gZm9ybVsndGFibGVGaWVsZHMnXTtcclxuICAgICAgfVxyXG4gICAgICBpZihmb3JtPy5bJ3RhYl9saXN0X2J1dHRvbnMnXSAmJiBmb3JtPy5bJ3RhYl9saXN0X2J1dHRvbnMnXT8ubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgcmVzcG9uY2UuYnV0dG9ucyA9IGZvcm1bJ3RhYl9saXN0X2J1dHRvbnMnXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3BvbmNlO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
880
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jcmVhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9mb3JtL2Zvcm0tY3JlYXRpb24vZm9ybS1jcmVhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUF3QyxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQVN0RyxNQUFNLE9BQU8sbUJBQW1CO0lBSzlCLFlBQ1UscUJBQTRDLEVBQzVDLFVBQXNCLEVBQ3RCLGNBQThCLEVBQzlCLFdBQStCLEVBQy9CLHVCQUFnRCxFQUNoRCxjQUE4QixFQUM5QixjQUE4QixFQUM5QixZQUEwQjtRQVAxQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFFbEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FB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QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwaUNhbGxTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9hcGkvYXBpLWNhbGwvYXBpLWNhbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uRnVuY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uLXV0aWxzL2NvbW1vbi1mdW5jdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW52U2VydmljZSB9IGZyb20gJy4uLy4uL2Vudi9lbnYuc2VydmljZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3N0b3JhZ2Uvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3VzdG9tdmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jdXN0b212YWxpZGF0aW9uL2N1c3RvbXZhbGlkYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENoZWNrSWZTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2hlY2staWYvY2hlY2staWYuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZGVsU2VydmljZSB9IGZyb20gJy4uLy4uL21vZGVsL21vZGVsLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybUNyZWF0aW9uU2VydmljZSB7XHJcblxyXG4gIG1pbkRhdGU6IERhdGU7XHJcbiAgbWF4RGF0ZTogRGF0ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvbW1vbkZ1bmN0aW9uU2VydmljZTogQ29tbW9uRnVuY3Rpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbnZTZXJ2aWNlOiBFbnZTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGN1c3RvbXZhbGlkYXRpb25TZXJ2aWNlOiBDdXN0b212YWxpZGF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBpQ2FsbFNlcnZpY2U6IEFwaUNhbGxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGVja2lmU2VydmljZTogQ2hlY2tJZlNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kZWxTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBjb25zdCBjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcclxuICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKGN1cnJlbnRZZWFyIC0gMTAwLCAwLCAxKTtcclxuICAgIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKGN1cnJlbnRZZWFyICsgMjUsIDExLCAzMSk7XHJcbiAgfVxyXG4gIGdldFRlbXBEYXRhKHRlbXBEYXRhOiBhbnksIHRhYkluZGV4OiBhbnksIGN1cnJlbnRNZW51OiBhbnksIGZvcm1OYW1lOiBhbnksIGRpbmFtaWNfZm9ybTogYW55KSB7XHJcbiAgICBsZXQgcmVzcG9uY2U6IGFueSA9IHtcclxuICAgICAgdGFiOiB7fSxcclxuICAgICAgY3VycmVudE1lbnU6IGN1cnJlbnRNZW51LFxyXG4gICAgICBncmlkX3ZpZXdfbW9kZTogXCJcIixcclxuICAgICAgZm9ybToge30sXHJcbiAgICAgIGZvcm1zOiB7fVxyXG4gICAgfVxyXG4gICAgaWYgKHRlbXBEYXRhWzBdLnRlbXBsYXRlVGFicykge1xyXG4gICAgICByZXNwb25jZS50YWIgPSB0ZW1wRGF0YVswXS50ZW1wbGF0ZVRhYnNbdGFiSW5kZXhdO1xyXG4gICAgfVxyXG4gICAgbGV0IHRhYiA9IHJlc3BvbmNlLnRhYlxyXG4gICAgaWYgKHRhYiAmJiB0YWIudGFiX25hbWUgIT0gXCJcIiAmJiB0YWIudGFiX25hbWUgIT0gbnVsbCAmJiB0YWIudGFiX25hbWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChjdXJyZW50TWVudSAmJiBjdXJyZW50TWVudS5uYW1lICYmIGN1cnJlbnRNZW51Lm5hbWUgIT0gdW5kZWZpbmVkICYmIGN1cnJlbnRNZW51Lm5hbWUgIT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IG1lbnUgPSB7IFwibmFtZVwiOiB0YWIudGFiX25hbWUgfTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLlNldEFjdGl2ZU1lbnUobWVudSk7XHJcbiAgICAgICAgcmVzcG9uY2UuY3VycmVudE1lbnUubmFtZSA9IHRhYi50YWJfbmFtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhYiAmJiB0YWIuZ3JpZCAhPSBudWxsICYmIHRhYi5ncmlkICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGFiLmdyaWQuZ3JpZF92aWV3ICE9IG51bGwgJiYgdGFiLmdyaWQuZ3JpZF92aWV3ICE9IHVuZGVmaW5lZCAmJiB0YWIuZ3JpZC5ncmlkX3ZpZXcgIT0gJycpIHtcclxuICAgICAgICByZXNwb25jZS5ncmlkX3ZpZXdfbW9kZSA9IHRhYi5ncmlkLmdyaWRfdmlldztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXNwb25jZS5ncmlkX3ZpZXdfbW9kZSA9ICd0YWJsZVZpZXcnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRhYiAmJiBmb3JtTmFtZSAhPSAnJykge1xyXG4gICAgICBpZiAoZm9ybU5hbWUgPT0gJ0RJTkFNSUNfRk9STScpIHtcclxuICAgICAgICByZXNwb25jZS5mb3JtID0gZGluYW1pY19mb3JtXHJcbiAgICAgIH0gZWxzZSBpZiAodGFiLmZvcm1zICE9IG51bGwgJiYgdGFiLmZvcm1zICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJlc3BvbmNlLmZvcm1zID0gdGFiLmZvcm1zO1xyXG4gICAgICAgIGxldCBncmlkQWN0aW9uQnV0dG9ucyA9IFtdO1xyXG4gICAgICAgIGlmICh0YWIuZ3JpZCAmJiB0YWIuZ3JpZC5hY3Rpb25fYnV0dG9ucykge1xyXG4gICAgICAgICAgZ3JpZEFjdGlvbkJ1dHRvbnMgPSB0YWIuZ3JpZC5hY3Rpb25fYnV0dG9ucztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzcG9uY2UuZm9ybSA9IHRoaXMuY29tbW9uRnVuY3Rpb25TZXJ2aWNlLmdldEZvcm0ocmVzcG9uY2UuZm9ybXMsIGZvcm1OYW1lLCBncmlkQWN0aW9uQnV0dG9ucylcclxuICAgICAgICBpZiAoZm9ybU5hbWUgPT0gJ2Nsb25lX29iamVjdCcpIHtcclxuICAgICAgICAgIHJlc3BvbmNlLmZvcm1bJ2FwaV9wYXJhbXMnXSA9IFwiUVRNUDpDTE9ORV9PQkpFQ1RcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy90aGlzLnNldEZvcm0oKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXNwb25jZS5mb3JtID0ge307XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25jZTtcclxuICB9XHJcblxyXG4gIGNoZWNrRm9ybURldGFpbHMoZm9ybTogYW55LCB0YWI6IGFueSwgY3VycmVudE1lbnU6IGFueSkge1xyXG4gICAgbGV0IHJlc3BvbmNlOiBhbnkgPSB7XHJcbiAgICAgIGN1cnJlbnRNZW51OiBjdXJyZW50TWVudSxcclxuICAgICAgYnVsa3VwZGF0ZXM6IGZhbHNlLFxyXG4gICAgICBnZXRMb2NhdGlvbjogZmFsc2UsXHJcbiAgICAgIGhlYWRlckZpbGVkc0RhdGE6IFtdLFxyXG4gICAgICB0YWJsZUZpZWxkczogW10sXHJcbiAgICAgIGZvcm1GaWVsZEJ1dHRvbnM6IFtdLFxyXG4gICAgICBnZXRUYWJsZUZpZWxkOiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoZm9ybSkge1xyXG4gICAgICBpZiAoZm9ybS5kZXRhaWxzKSB7XHJcbiAgICAgICAgaWYgKGZvcm0uZGV0YWlscy5jb2xsZWN0aW9uX25hbWUgJiYgZm9ybS5kZXRhaWxzLmNvbGxlY3Rpb25fbmFtZSAhPSAnJyAmJiAocmVzcG9uY2UuY3VycmVudE1lbnUgIT0gdW5kZWZpbmVkIHx8IHRoaXMuZW52U2VydmljZS5nZXRSZXF1ZXN0VHlwZSgpID09ICdQVUJMSUMnKSkge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbmNlLmN1cnJlbnRNZW51ID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXNwb25jZS5jdXJyZW50TWVudSA9IHt9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzcG9uY2UuY3VycmVudE1lbnVbJ25hbWUnXSA9IGZvcm0uZGV0YWlscy5jb2xsZWN0aW9uX25hbWU7XHJcbiAgICAgICAgICBpZiAodGFiICYmIHRhYi50YWJfbmFtZSAmJiB0YWIudGFiX25hbWUgIT0gJycpIHtcclxuICAgICAgICAgICAgcmVzcG9uY2UuY3VycmVudE1lbnVbJ3RhYl9uYW1lJ10gPSB0YWIudGFiX25hbWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3JtLmRldGFpbHMuYnVsa191cGRhdGUpIHtcclxuICAgICAgICAgIHJlc3BvbmNlLmJ1bGt1cGRhdGVzID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzcG9uY2UuYnVsa3VwZGF0ZXMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGZvcm0uZ2V0TG9jYXRpb24pIHtcclxuICAgICAgICByZXNwb25jZS5nZXRMb2NhdGlvbiA9IGZvcm0uZ2V0TG9jYXRpb247XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzcG9uY2UuZ2V0TG9jYXRpb24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZm9ybS5oZWFkZXJGaWVsZHMpIHtcclxuICAgICAgICByZXNwb25jZS5oZWFkZXJGaWxlZHNEYXRhID0gZm9ybS5oZWFkZXJGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGZvcm1bJ3RhYmxlRmllbGRzJ10gJiYgZm9ybVsndGFibGVGaWVsZHMnXSAhPSB1bmRlZmluZWQgJiYgZm9ybVsndGFibGVGaWVsZHMnXSAhPSBudWxsKSB7XHJcbiAgICAgICAgcmVzcG9uY2UudGFibGVGaWVsZHMgPSBzdHJ1Y3R1cmVkQ2xvbmUoZm9ybVsndGFibGVGaWVsZHMnXSk7XHJcbiAgICAgICAgcmVzcG9uY2UuZ2V0VGFibGVGaWVsZCA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3BvbmNlLnRhYmxlRmllbGRzID0gW107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGZvcm0udGFiX2xpc3RfYnV0dG9ucyAmJiBmb3JtLnRhYl9saXN0X2J1dHRvbnMgIT0gdW5kZWZpbmVkICYmIGZvcm0udGFiX2xpc3RfYnV0dG9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmVzcG9uY2UuZm9ybUZpZWxkQnV0dG9ucyA9IGZvcm0udGFiX2xpc3RfYnV0dG9ucztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3BvbmNlO1xyXG5cclxuICB9XHJcbiAgY3JlYXRlRm9ybUNvbnRyb2woZm9yQ29udHJvbDogYW55LCBmaWVsZDogYW55LCBvYmplY3Q6IGFueSwgdHlwZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZGlzYWJsZWQgPSBmaWVsZC5pc19kaXNhYmxlZCA/IHRydWUgOiAoKGZpZWxkLmRpc2FibGVfaWYgIT0gdW5kZWZpbmVkICYmIGZpZWxkLmRpc2FibGVfaWYgIT0gJycpID8gdHJ1ZSA6IGZhbHNlKTtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFwibGlzdFwiOlxyXG4gICAgICAgIGZvckNvbnRyb2xbZmllbGQuZmllbGRfbmFtZV0gPSB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KG9iamVjdCwgdGhpcy52YWxpZGF0b3IoZmllbGQpKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjaGVja2JveCc6XHJcbiAgICAgICAgZm9yQ29udHJvbFtmaWVsZC5maWVsZF9uYW1lXSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogb2JqZWN0LCBkaXNhYmxlZDogZGlzYWJsZWQgfSwgdGhpcy52YWxpZGF0b3IoZmllbGQpKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwidGV4dFwiOlxyXG4gICAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBcImdzdF9udW1iZXJcIjpcclxuICAgICAgICAgICAgZm9yQ29udHJvbFtmaWVsZC5maWVsZF9uYW1lXSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogb2JqZWN0LCBkaXNhYmxlZDogZGlzYWJsZWQgfSwgdGhpcy52YWxpZGF0b3IoZmllbGQpLCB0aGlzLmN1c3RvbXZhbGlkYXRpb25TZXJ2aWNlLmlzVmFsaWRHU1ROdW1iZXIuYmluZCh0aGlzLmN1c3RvbXZhbGlkYXRpb25TZXJ2aWNlKSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwiYXBpXCI6XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuYXBpX2NhbGxfbmFtZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgXCJnc3RfbnVtYmVyXCI6XHJcbiAgICAgICAgICAgICAgICBmb3JDb250cm9sW2ZpZWxkLmZpZWxkX25hbWVdID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7IHZhbHVlOiBvYmplY3QsIGRpc2FibGVkOiBkaXNhYmxlZCB9LCB0aGlzLnZhbGlkYXRvcihmaWVsZCksIHRoaXMuY3VzdG9tdmFsaWRhdGlvblNlcnZpY2UuaXNWYWxpZEdTVE51bWJlci5iaW5kKHRoaXMuY3VzdG9tdmFsaWRhdGlvblNlcnZpY2UpKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGZvckNvbnRyb2xbZmllbGQuZmllbGRfbmFtZV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IG9iamVjdCwgZGlzYWJsZWQ6IGRpc2FibGVkIH0sIHRoaXMudmFsaWRhdG9yKGZpZWxkKSlcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvckNvbnRyb2xbZmllbGQuZmllbGRfbmFtZV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IG9iamVjdCwgZGlzYWJsZWQ6IGRpc2FibGVkIH0sIHRoaXMudmFsaWRhdG9yKGZpZWxkKSwgdGhpcy5jdXN0b212YWxpZGF0aW9uU2VydmljZS5pc1ZhbGlkR1NUTnVtYmVyLmJpbmQodGhpcy5jdXN0b212YWxpZGF0aW9uU2VydmljZSkpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcInR5cGVhaGVhZFwiOlxyXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmRhdGF0eXBlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzpcclxuICAgICAgICAgICAgICAgIGZvckNvbnRyb2xbZmllbGQuZmllbGRfbmFtZV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IG9iamVjdCwgZGlzYWJsZWQ6IGRpc2FibGVkIH0sIHRoaXMudmFsaWRhdG9yKGZpZWxkKSwgdGhpcy5jdXN0b212YWxpZGF0aW9uU2VydmljZS5pc1ZhbGlkRGF0YS5iaW5kKHRoaXMuY3VzdG9tdmFsaWRhdGlvblNlcnZpY2UpKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGZvckNvbnRyb2xbZmllbGQuZmllbGRfbmFtZV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IG9iamVjdCwgZGlzYWJsZWQ6IGRpc2FibGVkIH0sIHRoaXMudmFsaWRhdG9yKGZpZWxkKSlcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgZm9yQ29udHJvbFtmaWVsZC5maWVsZF9uYW1lXSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogb2JqZWN0LCBkaXNhYmxlZDogZGlzYWJsZWQgfSwgdGhpcy52YWxpZGF0b3IoZmllbGQpKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJncm91cFwiOlxyXG4gICAgICAgIGZvckNvbnRyb2xbZmllbGQuZmllbGRfbmFtZV0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKG9iamVjdClcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgdmFsaWRhdG9yKGZpZWxkOiBhbnkpIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvciA9IFtdXHJcbiAgICBpZiAoZmllbGQuaXNfbWFuZGF0b3J5ICE9IHVuZGVmaW5lZCAmJiBmaWVsZC5pc19tYW5kYXRvcnkpIHtcclxuICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBcImdyaWRfc2VsZWN0aW9uXCI6XHJcbiAgICAgICAgY2FzZSBcImxpc3Rfb2Zfc3RyaW5nXCI6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwidHlwZWFoZWFkXCI6XHJcbiAgICAgICAgICBpZiAoZmllbGQuZGF0YXR5cGUgIT0gJ2xpc3Rfb2Zfb2JqZWN0JyAmJiBmaWVsZC5kYXRhdHlwZSAhPSAnY2hpcHMnKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvci5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdjaGVja2JveCc6XHJcbiAgICAgICAgICB2YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkVHJ1ZSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJlbWFpbFwiOlxyXG4gICAgICAgICAgdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgICAgIHZhbGlkYXRvci5wdXNoKFZhbGlkYXRvcnMuZW1haWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHZhbGlkYXRvci5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBcImVtYWlsXCI6XHJcbiAgICAgICAgICB2YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLmVtYWlsKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGZpZWxkLm1pbl9sZW5ndGggIT0gdW5kZWZpbmVkICYmIGZpZWxkLm1pbl9sZW5ndGggIT0gbnVsbCAmJiBmaWVsZC5taW5fbGVuZ3RoICE9ICcnICYmIE51bWJlcihmaWVsZC5taW5fbGVuZ3RoKSAmJiBmaWVsZC5taW5fbGVuZ3RoID4gMCkge1xyXG4gICAgICB2YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aChmaWVsZC5taW5fbGVuZ3RoKSlcclxuICAgIH1cclxuICAgIGlmIChmaWVsZC5tYXhfbGVuZ3RoICE9IHVuZGVmaW5lZCAmJiBmaWVsZC5tYXhfbGVuZ3RoICE9IG51bGwgJiYgZmllbGQubWF4X2xlbmd0aCAhPSAnJyAmJiBOdW1iZXIoZmllbGQubWF4X2xlbmd0aCkgJiYgZmllbGQubWF4X2xlbmd0aCA+IDApIHtcclxuICAgICAgdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgoZmllbGQubWF4X2xlbmd0aCkpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWRhdG9yO1xyXG4gIH1cclxuICBzZXROZXdGb3JtKHRhYmxlRmllbGRzOiBhbnksIGZvcm1GaWVsZEJ1dHRvbnM6IGFueSwgZm9ybTogYW55LCBlbGVtZW50czogYW55LCBzZWxlY3RlZFJvd0luZGV4OiBudW1iZXIpIHtcclxuICAgIGxldCByZXNwb25jZTogYW55ID0ge1xyXG4gICAgICBjYWxjdWxhdGlvbkZpZWxkTGlzdDogW10sXHJcbiAgICAgIHNob3dJZkZpZWxkTGlzdDogW10sXHJcbiAgICAgIGJ1dHRvbklmTGlzdDogW10sXHJcbiAgICAgIGRpc2FibGVJZkZpZWxkTGlzdDogW10sXHJcbiAgICAgIG1lbmRldG9yeUlmRmllbGRMaXN0OiBbXSxcclxuICAgICAgZ3JpZFNlbGVjdGlvbk1lbmRldG9yeUxpc3Q6IFtdLFxyXG4gICAgICBjdXN0b21WYWxpZGF0aW9uRmllbHM6IFtdLFxyXG4gICAgICBlZGl0b3JUeXBlRmllbGRMaXN0OiBbXSxcclxuICAgICAgY2hlY2tCb3hGaWVsZExpc3RWYWx1ZTogW10sXHJcbiAgICAgIGZpbGVQcmV2aWV3RmllbGRzOiBbXSxcclxuICAgICAgc3RhdGljTW9kYWw6IFtdLFxyXG4gICAgICBmb3JDb250cm9sOiB7fSxcclxuICAgICAgc2hvd0dyaWREYXRhOiB7fSxcclxuICAgICAgaXNTdGVwcGVyOiBmYWxzZSxcclxuICAgICAgYmxhbmtGaWVsZDogeyBmaWVsZE5hbWU6ICcnLCBpbmRleDogLTEgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRhYmxlRmllbGRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGFibGVGaWVsZHNbaW5kZXhdO1xyXG4gICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XHJcbiAgICAgICAgcmVzcG9uY2UuYmxhbmtGaWVsZC5maWVsZE5hbWUgPSBmb3JtLm5hbWU7XHJcbiAgICAgICAgcmVzcG9uY2UuYmxhbmtGaWVsZC5pbmRleCA9IGluZGV4ICsgMTtcclxuICAgICAgICAvL3RoaXMubm90aWZ5RmllbGRWYWx1ZUlzTnVsbChmb3JtLm5hbWUsaW5kZXgrMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSAncGRmX3ZpZXcnKSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkUm93SW5kZXggJiYgc2VsZWN0ZWRSb3dJbmRleCAhPSAtMSAmJiBlbGVtZW50cyAmJiBlbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBvYmplY3QgPSBlbGVtZW50c1tzZWxlY3RlZFJvd0luZGV4XTtcclxuICAgICAgICAgIHJlc3BvbmNlLnN0YXRpY01vZGFsLnB1c2godGhpcy5hcGlDYWxsU2VydmljZS5nZXRQYXlsb2RXaXRoQ3JpdGVyaWEoZWxlbWVudC5vbmNoYW5nZV9hcGlfcGFyYW1zLCBlbGVtZW50Lm9uY2hhbmdlX2NhbGxfYmFja19maWVsZCwgZWxlbWVudC5vbmNoYW5nZV9hcGlfcGFyYW1zX2NyaXRlcmlhLCBvYmplY3QpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzcG9uY2UuZWRpdG9yVHlwZUZpZWxkTGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gJ2luZm9faHRtbCcgfHwgZWxlbWVudC50eXBlID09ICdodG1sX3ZpZXcnKSB7XHJcbiAgICAgICAgcmVzcG9uY2UuZWRpdG9yVHlwZUZpZWxkTGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIHJlc3BvbmNlLmZpbGVQcmV2aWV3RmllbGRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVsZW1lbnQuZmllbGRfbmFtZSAmJiBlbGVtZW50LmZpZWxkX25hbWUgIT0gJycpIHtcclxuICAgICAgICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBcImxpc3Rfb2ZfY2hlY2tib3hcIjpcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChyZXNwb25jZS5mb3JDb250cm9sLCBlbGVtZW50LCBbXSwgXCJsaXN0XCIpXHJcbiAgICAgICAgICAgIHJlc3BvbmNlLmNoZWNrQm94RmllbGRMaXN0VmFsdWUucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwiY2hlY2tib3hcIjpcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChyZXNwb25jZS5mb3JDb250cm9sLCBlbGVtZW50LCBmYWxzZSwgXCJjaGVja2JveFwiKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kZWZhdWx0VmFsdWUgJiYgZWxlbWVudC5kZWZhdWx0VmFsdWUgIT0gbnVsbCAmJiBlbGVtZW50LmRlZmF1bHRWYWx1ZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5zZXREZWZhdWx0RGF0ZShlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kYXRhdHlwZSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZXRjX2ZpZWxkcyAmJiBlbGVtZW50LmV0Y19maWVsZHMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZXRjX2ZpZWxkcy5taW5EYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmV0Y19maWVsZHMubWluRGF0ZSA9PSAnLTEnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoY3VycmVudFllYXIgLSAxMDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWluRGF0ZS5zZXREYXRlKG5ldyBEYXRlKCkuZ2V0RGF0ZSgpIC0gTnVtYmVyKGVsZW1lbnQuZXRjX2ZpZWxkcy5taW5EYXRlKSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5tYXhEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICBpZiAoZWxlbWVudC5ldGNfZmllbGRzICYmIGVsZW1lbnQuZXRjX2ZpZWxkcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5ldGNfZmllbGRzLm1heERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZXRjX2ZpZWxkcy5tYXhEYXRlID09ICctMScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1heERhdGUgPSBuZXcgRGF0ZShjdXJyZW50WWVhciArIDI1LCAxMSwgMzEpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF4RGF0ZS5zZXREYXRlKG5ldyBEYXRlKCkuZ2V0RGF0ZSgpICsgTnVtYmVyKGVsZW1lbnQuZXRjX2ZpZWxkcy5tYXhEYXRlKSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoY3VycmVudFllYXIgLSAxMDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKGN1cnJlbnRZZWFyICsgMjUsIDExLCAzMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxlbWVudFsnbWluRGF0ZSddID0gdGhpcy5taW5EYXRlXHJcbiAgICAgICAgICAgIGVsZW1lbnRbJ21heERhdGUnXSA9IHRoaXMubWF4RGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChyZXNwb25jZS5mb3JDb250cm9sLCBlbGVtZW50LCB2YWx1ZSwgXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcImRhdGVyYW5nZVwiOlxyXG4gICAgICAgICAgICBjb25zdCBkYXRlX3JhbmdlID0ge307XHJcbiAgICAgICAgICAgIGxldCBsaXN0X29mX2RhdGVzID0gW1xyXG4gICAgICAgICAgICAgIHsgZmllbGRfbmFtZTogJ3N0YXJ0JyB9LFxyXG4gICAgICAgICAgICAgIHsgZmllbGRfbmFtZTogJ2VuZCcgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIGlmIChsaXN0X29mX2RhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBsaXN0X29mX2RhdGVzLmZvckVhY2goKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woZGF0ZV9yYW5nZSwgZGF0YSwgJycsIFwidGV4dFwiKVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2wocmVzcG9uY2UuZm9yQ29udHJvbCwgZWxlbWVudCwgZGF0ZV9yYW5nZSwgXCJncm91cFwiKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJsaXN0X29mX2ZpZWxkc1wiOlxyXG4gICAgICAgICAgY2FzZSBcImdyb3VwX29mX2ZpZWxkc1wiOlxyXG4gICAgICAgICAgICBjb25zdCBsaXN0X29mX2ZpZWxkcyA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50Lmxpc3Rfb2ZfZmllbGRzICYmIGVsZW1lbnQubGlzdF9vZl9maWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50Lmxpc3Rfb2ZfZmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBlbGVtZW50Lmxpc3Rfb2ZfZmllbGRzW2pdO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uY2UuYmxhbmtGaWVsZC5maWVsZE5hbWUgPSBlbGVtZW50Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uY2UuYmxhbmtGaWVsZC5pbmRleCA9IGluZGV4ICsgMSArIFwiLT5cIiArIGogKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5ub3RpZnlGaWVsZFZhbHVlSXNOdWxsKGVsZW1lbnQubmFtZSxqKzEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gJ2xpc3Rfb2ZfZmllbGRzJyAmJiBlbGVtZW50LmRhdGF0eXBlICE9ICdrZXlfdmFsdWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVsnbm90RGlzcGxheSddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgbGV0IG1vZGlmeURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIG1vZGlmeURhdGFbJ3BhcmVudCddID0gZWxlbWVudC5maWVsZF9uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAvL3Nob3cgaWYgaGFuZGxpbmdcclxuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc2hvd19pZiAmJiBkYXRhLnNob3dfaWYgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICBtb2RpZnlEYXRhWydwYXJlbnRJbmRleCddID0gaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kaWZ5RGF0YVsnY3VycmVudEluZGV4J10gPSBqO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLnNob3dJZkZpZWxkTGlzdC5wdXNoKG1vZGlmeURhdGEpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vTWVuZGV0b3J5IElmIGhhbmRsaW5nXHJcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhLm1hbmRhdG9yeV9pZiAmJiBkYXRhLm1hbmRhdG9yeV9pZiAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLm1lbmRldG9yeUlmRmllbGRMaXN0LnB1c2gobW9kaWZ5RGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy9kaXNhYmxlIGlmIGhhbmRsaW5nXHJcbiAgICAgICAgICAgICAgICAgIGlmICgoZGF0YS5kaXNhYmxlX2lmICYmIGRhdGEuZGlzYWJsZV9pZiAhPSAnJykgfHwgKGRhdGEuZGlzYWJsZV9vbl91cGRhdGUgJiYgZGF0YS5kaXNhYmxlX29uX3VwZGF0ZSAhPSAnJyAmJiBkYXRhLmRpc2FibGVfb25fdXBkYXRlICE9IHVuZGVmaW5lZCAmJiBkYXRhLmRpc2FibGVfb25fdXBkYXRlICE9IG51bGwpIHx8IChkYXRhLmRpc2FibGVfb25fYWRkICYmIGRhdGEuZGlzYWJsZV9vbl9hZGQgIT0gJycgJiYgZGF0YS5kaXNhYmxlX29uX2FkZCAhPSB1bmRlZmluZWQgJiYgZGF0YS5kaXNhYmxlX29uX2FkZCAhPSBudWxsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLmRpc2FibGVJZkZpZWxkTGlzdC5wdXNoKG1vZGlmeURhdGEpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gJ2xpc3Rfb2ZfZmllbGRzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGlmeURhdGEuaXNfbWFuZGF0b3J5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZmllbGRfbmFtZSAmJiBkYXRhLmZpZWxkX25hbWUgIT0gJycgJiYgZWxlbWVudC5kYXRhdHlwZSAhPSBcImxpc3Rfb2Zfb2JqZWN0X3dpdGhfcG9wdXBcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0aW9uIG9uQ2hhbmdlIGhhbmRsaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQub25jaGFuZ2VfZnVuY3Rpb24gJiYgZWxlbWVudC5vbmNoYW5nZV9mdW5jdGlvbl9wYXJhbSAmJiBlbGVtZW50Lm9uY2hhbmdlX2Z1bmN0aW9uX3BhcmFtICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLmNhbGN1bGF0aW9uRmllbGRMaXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibGlzdF9vZl9jaGVja2JveFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKGxpc3Rfb2ZfZmllbGRzLCBtb2RpZnlEYXRhLCBbXSwgXCJsaXN0XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLmNoZWNrQm94RmllbGRMaXN0VmFsdWUucHVzaChtb2RpZnlEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tib3hcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChsaXN0X29mX2ZpZWxkcywgbW9kaWZ5RGF0YSwgZmFsc2UsIFwiY2hlY2tib3hcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRhdGF0eXBlID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5ldGNfZmllbGRzICYmIGRhdGEuZXRjX2ZpZWxkcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5ldGNfZmllbGRzLm1pbkRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZXRjX2ZpZWxkcy5taW5EYXRlID09ICctMScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbkRhdGUgPSBuZXcgRGF0ZShjdXJyZW50WWVhciAtIDEwMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taW5EYXRlLnNldERhdGUobmV3IERhdGUoKS5nZXREYXRlKCkgLSBOdW1iZXIoZGF0YS5ldGNfZmllbGRzLm1pbkRhdGUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1heERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmV0Y19maWVsZHMgJiYgZGF0YS5ldGNfZmllbGRzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmV0Y19maWVsZHMubWF4RGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5ldGNfZmllbGRzLm1heERhdGUgPT0gJy0xJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKGN1cnJlbnRZZWFyICsgMjUsIDExLCAzMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEYXRlLnNldERhdGUobmV3IERhdGUoKS5nZXREYXRlKCkgKyBOdW1iZXIoZGF0YS5ldGNfZmllbGRzLm1heERhdGUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbkRhdGUgPSBuZXcgRGF0ZShjdXJyZW50WWVhciAtIDEwMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEYXRlID0gbmV3IERhdGUoY3VycmVudFllYXIgKyAyNSwgMTEsIDMxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydtaW5EYXRlJ10gPSB0aGlzLm1pbkRhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnbWF4RGF0ZSddID0gdGhpcy5tYXhEYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKGxpc3Rfb2ZfZmllbGRzLCBtb2RpZnlEYXRhLCAnJywgXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChsaXN0X29mX2ZpZWxkcywgbW9kaWZ5RGF0YSwgJycsIFwidGV4dFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZGF0YS5maWVsZF9jbGFzcyA9IHRoaXMuY29tbW9uRnVuY3Rpb25TZXJ2aWNlLmdldERpdkNsYXNzKGRhdGEsICh0YWJsZUZpZWxkcy5sZW5ndGggKyBlbGVtZW50Lmxpc3Rfb2ZfZmllbGRzLmxlbmd0aCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKHJlc3BvbmNlLmZvckNvbnRyb2wsIGVsZW1lbnQsIGxpc3Rfb2ZfZmllbGRzLCBcImdyb3VwXCIpXHJcbiAgICAgICAgICAgIC8vIGlmKGVsZW1lbnQudHlwZSA9PSAnbGlzdF9vZl9maWVsZHMnKXtcclxuICAgICAgICAgICAgLy8gICB0aGlzLmxpc3Rfb2ZfZmllbGRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyBjYXNlICdodG1sX3ZpZXcnOlxyXG4gICAgICAgICAgLy8gICBjb25zdCBmaWVsZCA9IHtcclxuICAgICAgICAgIC8vICAgICBmaWVsZF9uYW1lIDogJ2h0bWxfdmlld18xJ1xyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woZm9yQ29udHJvbCwgZWxlbWVudCwgJycsIFwidGV4dFwiKVxyXG4gICAgICAgICAgLy8gICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJzdGVwcGVyXCI6XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lmxpc3Rfb2ZfZmllbGRzICYmIGVsZW1lbnQubGlzdF9vZl9maWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQubGlzdF9vZl9maWVsZHMuZm9yRWFjaCgoc3RlcDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RlcC5saXN0X29mX2ZpZWxkcyAhPSB1bmRlZmluZWQgJiYgc3RlcC5saXN0X29mX2ZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZXBwZXJfb2ZfZmllbGRzID0ge307XHJcbiAgICAgICAgICAgICAgICAgIHN0ZXAubGlzdF9vZl9maWVsZHMuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1vZGlmeURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kaWZ5RGF0YS5wYXJlbnQgPSBzdGVwLmZpZWxkX25hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9zaG93IGlmIGhhbmRsaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc2hvd19pZiAmJiBkYXRhLnNob3dfaWYgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlLnNob3dJZkZpZWxkTGlzdC5wdXNoKG1vZGlmeURhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvL21lbmRldG9yeSBpZiBoYW5kbGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLm1hbmRhdG9yeV9pZiAmJiBkYXRhLm1hbmRhdG9yeV9pZiAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVzcG9uY2UubWVuZGV0b3J5SWZGaWVsZExpc3QucHVzaChtb2RpZnlEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy9kaXNhYmxlIGlmIGhhbmRsaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChkYXRhLmRpc2FibGVfaWYgJiYgZGF0YS5kaXNhYmxlX2lmICE9ICcnKSB8fCAoZGF0YS5kaXNhYmxlX29uX3VwZGF0ZSAmJiBkYXRhLmRpc2FibGVfb25fdXBkYXRlICE9ICcnICYmIGRhdGEuZGlzYWJsZV9vbl91cGRhdGUgIT0gdW5kZWZpbmVkICYmIGRhdGEuZGlzYWJsZV9vbl91cGRhdGUgIT0gbnVsbCkgfHwgKGRhdGEuZGlzYWJsZV9vbl9hZGQgJiYgZGF0YS5kaXNhYmxlX29uX2FkZCAhPSAnJyAmJiBkYXRhLmRpc2FibGVfb25fYWRkICE9IHVuZGVmaW5lZCAmJiBkYXRhLmRpc2FibGVfb25fYWRkICE9IG51bGwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXNwb25jZS5kaXNhYmxlSWZGaWVsZExpc3QucHVzaChtb2RpZnlEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRpb24gb25DaGFuZ2UgaGFuZGxpbmdcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vbmNoYW5nZV9mdW5jdGlvbiAmJiBlbGVtZW50Lm9uY2hhbmdlX2Z1bmN0aW9uX3BhcmFtICYmIGVsZW1lbnQub25jaGFuZ2VfZnVuY3Rpb25fcGFyYW0gIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVzcG9uY2UuY2FsY3VsYXRpb25GaWVsZExpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woc3RlcHBlcl9vZl9maWVsZHMsIG1vZGlmeURhdGEsICcnLCBcInRleHRcIilcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS50cmVlX3ZpZXdfb2JqZWN0ICYmIGRhdGEudHJlZV92aWV3X29iamVjdC5maWVsZF9uYW1lICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCB0cmVlTW9kaWZ5RGF0YSA9IHN0cnVjdHVyZWRDbG9uZShkYXRhLnRyZWVfdmlld19vYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHJlZU1vZGlmeURhdGEuaXNfbWFuZGF0b3J5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKHN0ZXBwZXJfb2ZfZmllbGRzLCB0cmVlTW9kaWZ5RGF0YSwgJycsIFwidGV4dFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2wocmVzcG9uY2UuZm9yQ29udHJvbCwgc3RlcCwgc3RlcHBlcl9vZl9maWVsZHMsIFwiZ3JvdXBcIilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZXNwb25jZS5pc1N0ZXBwZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcInBkZl92aWV3XCI6XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFJvd0luZGV4ICYmIHNlbGVjdGVkUm93SW5kZXggIT0gLTEgJiYgZWxlbWVudHMgJiYgZWxlbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9iamVjdCA9IGVsZW1lbnRzW3NlbGVjdGVkUm93SW5kZXhdO1xyXG4gICAgICAgICAgICAgIHJlc3BvbmNlLnN0YXRpY01vZGFsLnB1c2godGhpcy5hcGlDYWxsU2VydmljZS5nZXRQYXlsb2RXaXRoQ3JpdGVyaWEoZWxlbWVudC5vbmNoYW5nZV9hcGlfcGFyYW1zLCBlbGVtZW50Lm9uY2hhbmdlX2NhbGxfYmFja19maWVsZCwgZWxlbWVudC5vbmNoYW5nZV9hcGlfcGFyYW1zX2NyaXRlcmlhLCBvYmplY3QpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJpbnB1dF93aXRoX3VwbG9hZGZpbGVcIjpcclxuICAgICAgICAgICAgZWxlbWVudC5pc19kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2wocmVzcG9uY2UuZm9yQ29udHJvbCwgZWxlbWVudCwgJycsIFwidGV4dFwiKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJncmlkX3NlbGVjdGlvblwiOlxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmdyaWRDb2x1bW5zICYmIGVsZW1lbnQuZ3JpZENvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGxldCBjb2xQYXJGaWVsZCA9IHN0cnVjdHVyZWRDbG9uZShlbGVtZW50KTtcclxuICAgICAgICAgICAgICBjb2xQYXJGaWVsZFsnbWVuZGV0b3J5X2ZpZWxkcyddID0gW107XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5ncmlkQ29sdW1ucy5mb3JFYWNoKChjb2xGaWVsZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sRmllbGQgJiYgY29sRmllbGQuaXNfbWFuZGF0b3J5KSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbFBhckZpZWxkWydtZW5kZXRvcnlfZmllbGRzJ10ucHVzaChjb2xGaWVsZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbFBhckZpZWxkICYmIGNvbFBhckZpZWxkWydtZW5kZXRvcnlfZmllbGRzJ10gJiYgY29sUGFyRmllbGRbJ21lbmRldG9yeV9maWVsZHMnXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25jZS5ncmlkU2VsZWN0aW9uTWVuZGV0b3J5TGlzdC5wdXNoKGNvbFBhckZpZWxkKTtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRbJ21lbmRldG9yeV9maWVsZHMnXSA9IGNvbFBhckZpZWxkWydtZW5kZXRvcnlfZmllbGRzJ107XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJlc3BvbmNlLnNob3dHcmlkRGF0YVtlbGVtZW50LmZpZWxkX25hbWVdID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmFkZE5ld0J1dHRvbklmICYmIGVsZW1lbnQuYWRkTmV3QnV0dG9uSWYgIT0gJycpIHtcclxuICAgICAgICAgICAgICBlbGVtZW50WydmaWVsZEluZGV4J10gPSBpbmRleDtcclxuICAgICAgICAgICAgICByZXNwb25jZS5idXR0b25JZkxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbGVtZW50WydzaG93QnV0dG9uJ10gPSB0aGlzLmNoZWNrR3JpZFNlbGVjdGlvbkJ1dHRvbkNvbmRpdGlvbihlbGVtZW50LCAnYWRkJywge30sIHt9KTtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChyZXNwb25jZS5mb3JDb250cm9sLCBlbGVtZW50LCAnJywgXCJ0ZXh0XCIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJ0cmVlX3ZpZXdcIjpcclxuICAgICAgICAgICAgLy8gdGhpcy50cmVlQ29udHJvbFtlbGVtZW50LmZpZWxkX25hbWVdID0gbmV3IEZsYXRUcmVlQ29udHJvbDxUb2RvSXRlbUZsYXROb2RlPih0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuZGF0YVNvdXJjZVtlbGVtZW50LmZpZWxkX25hbWVdID0gbmV3IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sW2VsZW1lbnQuZmllbGRfbmFtZV0sIHRoaXMudHJlZUZsYXR0ZW5lcik7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2wocmVzcG9uY2UuZm9yQ29udHJvbCwgZWxlbWVudCwgJycsIFwidGV4dFwiKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kZWZhdWx0VmFsdWUgJiYgZWxlbWVudC5kZWZhdWx0VmFsdWUgIT0gbnVsbCAmJiBlbGVtZW50LmRlZmF1bHRWYWx1ZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZWxlbWVudC5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChyZXNwb25jZS5mb3JDb250cm9sLCBlbGVtZW50LCB2YWx1ZSwgXCJ0ZXh0XCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2wocmVzcG9uY2UuZm9yQ29udHJvbCwgZWxlbWVudCwgJycsIFwidGV4dFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQudHJlZV92aWV3X29iamVjdCAmJiBlbGVtZW50LnRyZWVfdmlld19vYmplY3QuZmllbGRfbmFtZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgICBsZXQgdHJlZU1vZGlmeURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoZWxlbWVudC50cmVlX3ZpZXdfb2JqZWN0KTtcclxuICAgICAgICAgIHRyZWVNb2RpZnlEYXRhLmlzX21hbmRhdG9yeSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChyZXNwb25jZS5mb3JDb250cm9sLCB0cmVlTW9kaWZ5RGF0YSwgJycsIFwidGV4dFwiKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvL3Nob3cgaWYgaGFuZGxpbmdcclxuICAgICAgaWYgKGVsZW1lbnQuc2hvd19pZiAmJiBlbGVtZW50LnNob3dfaWYgIT0gJycpIHtcclxuICAgICAgICByZXNwb25jZS5zaG93SWZGaWVsZExpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICAvL21lbmRhdG9yeSBpZiBoYW5kbGluZ1xyXG4gICAgICBpZiAoZWxlbWVudC5tYW5kYXRvcnlfaWYgJiYgZWxlbWVudC5tYW5kYXRvcnlfaWYgIT0gJycpIHtcclxuICAgICAgICByZXNwb25jZS5tZW5kZXRvcnlJZkZpZWxkTGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vQ3VzdG9tdmFsaWRhdGlvbiBoYW5kbGluZ1xyXG4gICAgICBpZiAoZWxlbWVudC5jb21wYXJlRmllbGROYW1lICYmIGVsZW1lbnQuY29tcGFyZUZpZWxkTmFtZSAhPSAnJykge1xyXG4gICAgICAgIHJlc3BvbmNlLmN1c3RvbVZhbGlkYXRpb25GaWVscy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vZGlzYWJsZSBpZiBoYW5kbGluZ1xyXG4gICAgICBpZiAoKGVsZW1lbnQuZGlzYWJsZV9pZiAmJiBlbGVtZW50LmRpc2FibGVfaWYgIT0gJycpIHx8IChlbGVtZW50LmRpc2FibGVfb25fdXBkYXRlICYmIGVsZW1lbnQuZGlzYWJsZV9vbl91cGRhdGUgIT0gJycgJiYgZWxlbWVudC5kaXNhYmxlX29uX3VwZGF0ZSAhPSB1bmRlZmluZWQgJiYgZWxlbWVudC5kaXNhYmxlX29uX3VwZGF0ZSAhPSBudWxsKSB8fCAoZWxlbWVudC5kaXNhYmxlX29uX2FkZCAmJiBlbGVtZW50LmRpc2FibGVfb25fYWRkICE9ICcnICYmIGVsZW1lbnQuZGlzYWJsZV9vbl9hZGQgIT0gdW5kZWZpbmVkICYmIGVsZW1lbnQuZGlzYWJsZV9vbl9hZGQgIT0gbnVsbCkpIHtcclxuICAgICAgICByZXNwb25jZS5kaXNhYmxlSWZGaWVsZExpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBDYWxjdWxhdGlvbiBvbkNoYW5nZSBoYW5kbGluZ1xyXG4gICAgICBpZiAoZWxlbWVudC5vbmNoYW5nZV9mdW5jdGlvbiAmJiBlbGVtZW50Lm9uY2hhbmdlX2Z1bmN0aW9uX3BhcmFtICYmIGVsZW1lbnQub25jaGFuZ2VfZnVuY3Rpb25fcGFyYW0gIT0gXCJcIikge1xyXG4gICAgICAgIHJlc3BvbmNlLmNhbGN1bGF0aW9uRmllbGRMaXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxlbWVudC5maWVsZF9jbGFzcyA9IHRoaXMuY29tbW9uRnVuY3Rpb25TZXJ2aWNlLmdldERpdkNsYXNzKGVsZW1lbnQsIHRhYmxlRmllbGRzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBpZiAoZm9ybUZpZWxkQnV0dG9ucyAmJiBmb3JtRmllbGRCdXR0b25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9ybUZpZWxkQnV0dG9ucy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudC5maWVsZF9uYW1lICYmIGVsZW1lbnQuZmllbGRfbmFtZSAhPSAnJykge1xyXG4gICAgICAgICAgc3dpdGNoIChlbGVtZW50LnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcImRyb3Bkb3duXCI6XHJcbiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChyZXNwb25jZS5mb3JDb250cm9sLCBlbGVtZW50LCAnJywgXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50LnNob3dfaWYgJiYgZWxlbWVudC5zaG93X2lmICE9ICcnKSB7XHJcbiAgICAgICAgICByZXNwb25jZS5zaG93SWZGaWVsZExpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQubWFuZGF0b3J5X2lmICYmIGVsZW1lbnQubWFuZGF0b3J5X2lmICE9ICcnKSB7XHJcbiAgICAgICAgICByZXNwb25jZS5tZW5kZXRvcnlJZkZpZWxkTGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGVsZW1lbnQuZGlzYWJsZV9pZiAmJiBlbGVtZW50LmRpc2FibGVfaWYgIT0gJycpIHx8IChlbGVtZW50LmRpc2FibGVfb25fdXBkYXRlICYmIGVsZW1lbnQuZGlzYWJsZV9vbl91cGRhdGUgIT0gJycgJiYgZWxlbWVudC5kaXNhYmxlX29uX3VwZGF0ZSAhPSB1bmRlZmluZWQgJiYgZWxlbWVudC5kaXNhYmxlX29uX3VwZGF0ZSAhPSBudWxsKSB8fCAoZWxlbWVudC5kaXNhYmxlX29uX2FkZCAmJiBlbGVtZW50LmRpc2FibGVfb25fYWRkICE9ICcnICYmIGVsZW1lbnQuZGlzYWJsZV9vbl9hZGQgIT0gdW5kZWZpbmVkICYmIGVsZW1lbnQuZGlzYWJsZV9vbl9hZGQgIT0gbnVsbCkpIHtcclxuICAgICAgICAgIHJlc3BvbmNlLmRpc2FibGVJZkZpZWxkTGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzcG9uY2U7XHJcbiAgfVxyXG4gIGNoZWNrRmllbGRCdXR0b25Db25kaXRpb24odGFibGVGaWVsZHM6IGFueSkge1xyXG4gICAgbGV0IHJlc3BvbmNlOiBhbnkgPSB7XHJcbiAgICAgIHRlbXBWYWw6IHt9XHJcbiAgICB9XHJcbiAgICB0YWJsZUZpZWxkcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgc3dpdGNoIChlbGVtZW50LnR5cGUpIHtcclxuICAgICAgICBjYXNlIFwidHlwZWFoZWFkXCI6XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5kYXRhdHlwZSA9PSAnbGlzdF9vZl9vYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJlc3BvbmNlLnRlbXBWYWxbZWxlbWVudC5maWVsZF9uYW1lICsgXCJfYWRkX2J1dHRvblwiXSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwibGlzdF9vZl9zdHJpbmdcIjpcclxuICAgICAgICAgIHJlc3BvbmNlLnRlbXBWYWxbZWxlbWVudC5maWVsZF9uYW1lICsgXCJfYWRkX2J1dHRvblwiXSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwibGlzdF9vZl9maWVsZHNcIjpcclxuICAgICAgICBjYXNlIFwiZ3JvdXBfb2ZfZmllbGRzXCI6XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5saXN0X29mX2ZpZWxkcyAhPSB1bmRlZmluZWQgJiYgZWxlbWVudC5saXN0X29mX2ZpZWxkcyAhPSBudWxsICYmIGVsZW1lbnQubGlzdF9vZl9maWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBlbGVtZW50Lmxpc3Rfb2ZfZmllbGRzLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChjaGlsZC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0eXBlYWhlYWRcIjpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZGF0YXR5cGUgPT0gJ2xpc3Rfb2Zfb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVzcG9uY2UudGVtcFZhbFtlbGVtZW50LmZpZWxkX25hbWUgKyAnXycgKyBjaGlsZC5maWVsZF9uYW1lICsgXCJfYWRkX2J1dHRvblwiXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwibGlzdF9vZl9zdHJpbmdcIjpcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25jZS50ZW1wVmFsW2VsZW1lbnQuZmllbGRfbmFtZSArICdfJyArIGNoaWxkLmZpZWxkX25hbWUgKyBcIl9hZGRfYnV0dG9uXCJdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInN0ZXBwZXJcIjpcclxuICAgICAgICAgIGlmIChlbGVtZW50Lmxpc3Rfb2ZfZmllbGRzICE9IHVuZGVmaW5lZCAmJiBlbGVtZW50Lmxpc3Rfb2ZfZmllbGRzICE9IG51bGwgJiYgZWxlbWVudC5saXN0X29mX2ZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQubGlzdF9vZl9maWVsZHMuZm9yRWFjaCgoc3RlcDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHN0ZXAubGlzdF9vZl9maWVsZHMgIT0gdW5kZWZpbmVkICYmIHN0ZXAubGlzdF9vZl9maWVsZHMgIT0gbnVsbCAmJiBzdGVwLmxpc3Rfb2ZfZmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0ZXAubGlzdF9vZl9maWVsZHMuZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoaWxkLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwidHlwZWFoZWFkXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZGF0YXR5cGUgPT0gJ2xpc3Rfb2Zfb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25jZS50ZW1wVmFsW3N0ZXAuZmllbGRfbmFtZSArICdfJyArIGNoaWxkLmZpZWxkX25hbWUgKyBcIl9hZGRfYnV0dG9uXCJdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJsaXN0X29mX3N0cmluZ1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgcmVzcG9uY2UudGVtcFZhbFtzdGVwLmZpZWxkX25hbWUgKyAnXycgKyBjaGlsZC5maWVsZF9uYW1lICsgXCJfYWRkX2J1dHRvblwiXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3BvbmNlO1xyXG4gIH1cclxuICB1cGRhdGVTZWxlY3RDb250YWN0KHNlbGVjdENvbnRhY3Q6IGFueSwgdGFiRmlsdGVyRGF0YTogYW55LCB0YWJsZUZpZWxkczogYW55LCB0ZW1wbGF0ZUZvcm06IFVudHlwZWRGb3JtR3JvdXAsIGZvcm1WYWx1ZVdpdGhDdXN0b21EYXRhOiBhbnksIHN0YXRpY01vZGFsOiBhbnkpIHtcclxuICAgIGxldCBhY2NvdW50ID0ge307XHJcbiAgICBsZXQgY29udGFjdCA9IHt9O1xyXG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IHt9O1xyXG4gICAgbGV0IHNlbGVjdENvbnRhY3RPYmplY3Q6IGFueSA9IHt9O1xyXG4gICAgaWYgKHNlbGVjdENvbnRhY3QpIHtcclxuICAgICAgc2VsZWN0Q29udGFjdE9iamVjdCA9IHNlbGVjdENvbnRhY3Q7XHJcbiAgICB9XHJcbiAgICBpZiAodGFiRmlsdGVyRGF0YSAmJiB0YWJGaWx0ZXJEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGFiRmlsdGVyRGF0YS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9pZCkge1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuX2lkID09IHNlbGVjdENvbnRhY3QpIHtcclxuICAgICAgICAgICAgc2VsZWN0Q29udGFjdE9iamVjdCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChzZWxlY3RDb250YWN0T2JqZWN0KSB7XHJcbiAgICAgIGlmIChzZWxlY3RDb250YWN0T2JqZWN0WydfaWQnXSkge1xyXG4gICAgICAgIGNvbnRhY3QgPSB7XHJcbiAgICAgICAgICBcIl9pZFwiOiBzZWxlY3RDb250YWN0T2JqZWN0WydfaWQnXSxcclxuICAgICAgICAgIFwibmFtZVwiOiBzZWxlY3RDb250YWN0T2JqZWN0WyduYW1lJ10sXHJcbiAgICAgICAgICBcImNvZGVcIjogc2VsZWN0Q29udGFjdE9iamVjdFsnc2VyaWFsSWQnXVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoc2VsZWN0Q29udGFjdE9iamVjdFsnbGVhZCddKSB7XHJcbiAgICAgICAgYWNjb3VudCA9IHNlbGVjdENvbnRhY3RPYmplY3RbJ2xlYWQnXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhYmxlRmllbGRzICYmIHRhYmxlRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGFibGVGaWVsZHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5maWVsZF9uYW1lICYmIGVsZW1lbnQuZmllbGRfbmFtZSAhPSAnJykge1xyXG4gICAgICAgICAgbGV0IGZpZWxkTmFtZSA9IGVsZW1lbnQuZmllbGRfbmFtZTtcclxuICAgICAgICAgIGlmIChmaWVsZE5hbWUgPT0gJ2FjY291bnQnKSB7XHJcbiAgICAgICAgICAgIGlmIChhY2NvdW50ICYmIE9iamVjdC5rZXlzKGFjY291bnQpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0ZW1wbGF0ZUZvcm0uY29udHJvbHNbJ2FjY291bnQnXS5zZXRWYWx1ZShhY2NvdW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5vbmNoYW5nZV9hcGlfcGFyYW1zICYmIGVsZW1lbnQub25jaGFuZ2VfY2FsbF9iYWNrX2ZpZWxkICYmICFlbGVtZW50LmRvX25vdF9hdXRvX3RyaWdnZXJfb25fZWRpdCkge1xyXG4gICAgICAgICAgICAgIHBheWxvYWQgPSB0aGlzLmFwaUNhbGxTZXJ2aWNlLmdldFBheWxvZFdpdGhDcml0ZXJpYShlbGVtZW50Lm9uY2hhbmdlX2FwaV9wYXJhbXMsIGVsZW1lbnQub25jaGFuZ2VfY2FsbF9iYWNrX2ZpZWxkLCBlbGVtZW50Lm9uY2hhbmdlX2FwaV9wYXJhbXNfY3JpdGVyaWEsIGZvcm1WYWx1ZVdpdGhDdXN0b21EYXRhKVxyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50Lm9uY2hhbmdlX2FwaV9wYXJhbXMuaW5kZXhPZihcIkZPUk1fR1JPVVBcIikgPj0gMCB8fCBlbGVtZW50Lm9uY2hhbmdlX2FwaV9wYXJhbXMuaW5kZXhPZihcIlFUTVBcIikgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgcGF5bG9hZFtcImRhdGFcIl0gPSBmb3JtVmFsdWVXaXRoQ3VzdG9tRGF0YTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgc3RhdGljTW9kYWwucHVzaChwYXlsb2FkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZmllbGRfbmFtZSA9PSAnY29udGFjdCcpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRhY3QgJiYgT2JqZWN0LmtleXMoY29udGFjdCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlRm9ybS5jb250cm9sc1snY29udGFjdCddLnNldFZhbHVlKGNvbnRhY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm9uY2hhbmdlX2FwaV9wYXJhbXMgJiYgZWxlbWVudC5vbmNoYW5nZV9jYWxsX2JhY2tfZmllbGQgJiYgIWVsZW1lbnQuZG9fbm90X2F1dG9fdHJpZ2dlcl9vbl9lZGl0KSB7XHJcbiAgICAgICAgICAgICAgcGF5bG9hZCA9IHRoaXMuYXBpQ2FsbFNlcnZpY2UuZ2V0UGF5bG9kV2l0aENyaXRlcmlhKGVsZW1lbnQub25jaGFuZ2VfYXBpX3BhcmFtcywgZWxlbWVudC5vbmNoYW5nZV9jYWxsX2JhY2tfZmllbGQsIGVsZW1lbnQub25jaGFuZ2VfYXBpX3BhcmFtc19jcml0ZXJpYSwgZm9ybVZhbHVlV2l0aEN1c3RvbURhdGEpXHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQub25jaGFuZ2VfYXBpX3BhcmFtcy5pbmRleE9mKFwiRk9STV9HUk9VUFwiKSA+PSAwIHx8IGVsZW1lbnQub25jaGFuZ2VfYXBpX3BhcmFtcy5pbmRleE9mKFwiUVRNUFwiKSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBwYXlsb2FkW1wiZGF0YVwiXSA9IGZvcm1WYWx1ZVdpdGhDdXN0b21EYXRhO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBzdGF0aWNNb2RhbC5wdXNoKHBheWxvYWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09ICdzdGVwcGVyJyAmJiBlbGVtZW50Lmxpc3Rfb2ZfZmllbGRzICYmIGVsZW1lbnQubGlzdF9vZl9maWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBlbGVtZW50Lmxpc3Rfb2ZfZmllbGRzLmZvckVhY2goKHN0ZXBEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoc3RlcERhdGEgJiYgc3RlcERhdGEubGlzdF9vZl9maWVsZHMgJiYgc3RlcERhdGEubGlzdF9vZl9maWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcERhdGEubGlzdF9vZl9maWVsZHMuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBmaWVsZE5hbWUgPSBzdGVwRGF0YS5maWVsZF9uYW1lO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YS5maWVsZF9uYW1lID09ICdhY2NvdW50Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICg8VW50eXBlZEZvcm1Hcm91cD50ZW1wbGF0ZUZvcm0uY29udHJvbHNbZmllbGROYW1lXSkuY29udHJvbHNbJ2FjY291bnQnXS5zZXRWYWx1ZShhY2NvdW50KTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMudGVtcGxhdGVGb3JtLmdldChzdGVwRGF0YS5maWVsZF9uYW1lKS5nZXQoJ2FjY291bnQnKS5zZXRWYWx1ZShhY2NvdW50KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5vbmNoYW5nZV9hcGlfcGFyYW1zICYmIGRhdGEub25jaGFuZ2VfY2FsbF9iYWNrX2ZpZWxkICYmICFkYXRhLmRvX25vdF9hdXRvX3RyaWdnZXJfb25fZWRpdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IHRoaXMuYXBpQ2FsbFNlcnZpY2UuZ2V0UGF5bG9kV2l0aENyaXRlcmlhKGRhdGEub25jaGFuZ2VfYXBpX3BhcmFtcywgZGF0YS5vbmNoYW5nZV9jYWxsX2JhY2tfZmllbGQsIGRhdGEub25jaGFuZ2VfYXBpX3BhcmFtc19jcml0ZXJpYSwgZm9ybVZhbHVlV2l0aEN1c3RvbURhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5vbmNoYW5nZV9hcGlfcGFyYW1zLmluZGV4T2YoXCJGT1JNX0dST1VQXCIpID49IDAgfHwgZGF0YS5vbmNoYW5nZV9hcGlfcGFyYW1zLmluZGV4T2YoXCJRVE1QXCIpID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZFtcImRhdGFcIl0gPSBmb3JtVmFsdWVXaXRoQ3VzdG9tRGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY01vZGFsLnB1c2gocGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmZpZWxkX25hbWUgPT0gJ2NvbnRhY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgKDxVbnR5cGVkRm9ybUdyb3VwPnRlbXBsYXRlRm9ybS5jb250cm9sc1tmaWVsZE5hbWVdKS5jb250cm9sc1snY29udGFjdCddLnNldFZhbHVlKGNvbnRhY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLm9uY2hhbmdlX2FwaV9wYXJhbXMgJiYgZGF0YS5vbmNoYW5nZV9jYWxsX2JhY2tfZmllbGQgJiYgIWRhdGEuZG9fbm90X2F1dG9fdHJpZ2dlcl9vbl9lZGl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0gdGhpcy5hcGlDYWxsU2VydmljZS5nZXRQYXlsb2RXaXRoQ3JpdGVyaWEoZGF0YS5vbmNoYW5nZV9hcGlfcGFyYW1zLCBkYXRhLm9uY2hhbmdlX2NhbGxfYmFja19maWVsZCwgZGF0YS5vbmNoYW5nZV9hcGlfcGFyYW1zX2NyaXRlcmlhLCBmb3JtVmFsdWVXaXRoQ3VzdG9tRGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLm9uY2hhbmdlX2FwaV9wYXJhbXMuaW5kZXhPZihcIkZPUk1fR1JPVVBcIikgPj0gMCB8fCBkYXRhLm9uY2hhbmdlX2FwaV9wYXJhbXMuaW5kZXhPZihcIlFUTVBcIikgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkW1wiZGF0YVwiXSA9IGZvcm1WYWx1ZVdpdGhDdXN0b21EYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljTW9kYWwucHVzaChwYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdGF0aWNNb2RhbDtcclxuICB9XHJcbiAgY2hlY2tHcmlkU2VsZWN0aW9uQnV0dG9uQ29uZGl0aW9uKGZpZWxkOiBhbnksIGJ1dHRvbjogYW55LCBzZWxlY3RlZFJvdzogYW55LCBmb3JtVmFsdWU6IGFueSkge1xyXG4gICAgbGV0IGNoZWNrOiBhbnkgPSB0cnVlO1xyXG4gICAgc3dpdGNoIChidXR0b24pIHtcclxuICAgICAgY2FzZSAnYWRkJzpcclxuICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQuYWRkTmV3QnV0dG9uSWYgJiYgZmllbGQuYWRkTmV3QnV0dG9uSWYgIT0gJycpIHtcclxuICAgICAgICAgIGxldCBtb2RpZnllZEZpZWxkOiBhbnkgPSB7fTtcclxuICAgICAgICAgIG1vZGlmeWVkRmllbGRbJ3Nob3dfaWYnXSA9IGZpZWxkLmFkZE5ld0J1dHRvbklmO1xyXG4gICAgICAgICAgY2hlY2sgPSB0aGlzLmNoZWNraWZTZXJ2aWNlLmNoZWNrU2hvd0lmKG1vZGlmeWVkRmllbGQsIHNlbGVjdGVkUm93LCBmb3JtVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBjaGVjaztcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHREYXRlKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgbGV0IHZhbHVlOiBhbnkgPSBcIlwiO1xyXG4gICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgbGV0IHllc3RlcmRheSA9IG5ldyBEYXRlKHRvZGF5KTtcclxuICAgIHllc3RlcmRheS5zZXREYXRlKHllc3RlcmRheS5nZXREYXRlKCkgLSAxKTtcclxuICAgIHllc3RlcmRheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgIHN3aXRjaCAoZWxlbWVudC5kZWZhdWx0VmFsdWUpIHtcclxuICAgICAgY2FzZSBcIlRvZGF5XCI6XHJcbiAgICAgICAgdmFsdWUgPSB0b2RheTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlllc3RlcmRheVwiOlxyXG4gICAgICAgIHZhbHVlID0geWVzdGVyZGF5O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuICBnZXRGb2N1c0ZpZWxkKHByZXZpb3VzRm9ybUZvY3VzRmllbGQ6IGFueSwgdGFibGVGaWVsZHM6IGFueSwgdGVtcGxhdGVGb3JtOiBVbnR5cGVkRm9ybUdyb3VwLCBmb2N1c0ZpZWxkUGFyZW50OiBhbnksIGNoZWNrRm9ybUZpZWxkQXV0Zm9jdXM6IGFueSkge1xyXG4gICAgbGV0IHJlc3BvbmNlOiBhbnkgPSB7XHJcbiAgICAgIGNoZWNrRm9ybUZpZWxkQXV0Zm9jdXM6IGNoZWNrRm9ybUZpZWxkQXV0Zm9jdXMsXHJcbiAgICAgIHByZXZpb3VzRm9ybUZvY3VzRmllbGQ6IHByZXZpb3VzRm9ybUZvY3VzRmllbGQsXHJcbiAgICAgIGZvY3VzRmllbGRQYXJlbnQ6IGZvY3VzRmllbGRQYXJlbnQsXHJcbiAgICAgIGlkOiBcIlwiXHJcbiAgICB9XHJcbiAgICBpZiAocHJldmlvdXNGb3JtRm9jdXNGaWVsZCAmJiBwcmV2aW91c0Zvcm1Gb2N1c0ZpZWxkLl9pZCkge1xyXG4gICAgICByZXNwb25jZSA9IHRoaXMuZm9jdXNGaWVsZChcIlwiLCBwcmV2aW91c0Zvcm1Gb2N1c0ZpZWxkLCB0ZW1wbGF0ZUZvcm0sIGZvY3VzRmllbGRQYXJlbnQsIGNoZWNrRm9ybUZpZWxkQXV0Zm9jdXMsIHByZXZpb3VzRm9ybUZvY3VzRmllbGQsIHJlc3BvbmNlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHByZXZpb3VzRm9ybUZvY3VzRmllbGQgPT0gdW5kZWZpbmVkIHx8IHByZXZpb3VzRm9ybUZvY3VzRmllbGQuX2lkID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRhYmxlRmllbGRzKSB7XHJcbiAgICAgICAgICBpZiAoa2V5LnR5cGUgPT0gXCJzdGVwcGVyXCIpIHtcclxuICAgICAgICAgICAgaWYgKGtleS5saXN0X29mX2ZpZWxkcyAmJiBrZXkubGlzdF9vZl9maWVsZHMgIT0gbnVsbCAmJiBrZXkubGlzdF9vZl9maWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RlcCBvZiBrZXkubGlzdF9vZl9maWVsZHMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGVwLmxpc3Rfb2ZfZmllbGRzICYmIHN0ZXAubGlzdF9vZl9maWVsZHMgIT0gbnVsbCAmJiBzdGVwLmxpc3Rfb2ZfZmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBzdGVwLmxpc3Rfb2ZfZmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZpZWxkX25hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmNlID0gdGhpcy5mb2N1c0ZpZWxkKHN0ZXAsIGZpZWxkLCB0ZW1wbGF0ZUZvcm0sIGZvY3VzRmllbGRQYXJlbnQsIGNoZWNrRm9ybUZpZWxkQXV0Zm9jdXMsIHByZXZpb3VzRm9ybUZvY3VzRmllbGQsIHJlc3BvbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChrZXkuZmllbGRfbmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5LnR5cGUgPT0gJ3RleHQnKSB7XHJcbiAgICAgICAgICAgICAgcmVzcG9uY2UgPSB0aGlzLmZvY3VzRmllbGQoXCJcIiwga2V5LCB0ZW1wbGF0ZUZvcm0sIGZvY3VzRmllbGRQYXJlbnQsIGNoZWNrRm9ybUZpZWxkQXV0Zm9jdXMsIHByZXZpb3VzRm9ybUZvY3VzRmllbGQsIHJlc3BvbmNlKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXNwb25jZS5jaGVja0Zvcm1GaWVsZEF1dGZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25jZTtcclxuICB9XHJcbiAgZm9jdXNGaWVsZChwYXJlbnQ6IGFueSwga2V5OiBhbnksIHRlbXBsYXRlRm9ybTogVW50eXBlZEZvcm1Hcm91cCwgZm9jdXNGaWVsZFBhcmVudDogYW55LCBjaGVja0Zvcm1GaWVsZEF1dGZvY3VzOiBhbnksIHByZXZpb3VzRm9ybUZvY3VzRmllbGQ6IGFueSwgcmVzcG9uY2U6IGFueSkge1xyXG4gICAgcmVzcG9uY2UuaWQgPSBrZXkuX2lkICsgXCJfXCIgKyBrZXkuZmllbGRfbmFtZTtcclxuICAgIGxldCBmaWVsZDogYW55ID0ge307XHJcbiAgICBpZiAocGFyZW50ID09ICcnKSB7XHJcbiAgICAgIGlmIChmb2N1c0ZpZWxkUGFyZW50ICYmIGZvY3VzRmllbGRQYXJlbnQuZmllbGRfbmFtZSAmJiBmb2N1c0ZpZWxkUGFyZW50LmZpZWxkX25hbWUgIT0gJycpIHtcclxuICAgICAgICBwYXJlbnQgPSBmb2N1c0ZpZWxkUGFyZW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocGFyZW50ICE9IFwiXCIpIHtcclxuICAgICAgZmllbGQgPSAoPFVudHlwZWRGb3JtR3JvdXA+dGVtcGxhdGVGb3JtLmNvbnRyb2xzW3BhcmVudC5maWVsZF9uYW1lXSkuY29udHJvbHNba2V5LmZpZWxkX25hbWVdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmllbGQgPSB0ZW1wbGF0ZUZvcm0uY29udHJvbHNba2V5LmZpZWxkX25hbWVdO1xyXG4gICAgfVxyXG4gICAgaWYgKGZpZWxkICYmIGZpZWxkLnRvdWNoZWQpIHtcclxuICAgICAgcmVzcG9uY2UuY2hlY2tGb3JtRmllbGRBdXRmb2N1cyA9IGZhbHNlO1xyXG4gICAgICBpZiAocHJldmlvdXNGb3JtRm9jdXNGaWVsZCAmJiBwcmV2aW91c0Zvcm1Gb2N1c0ZpZWxkLl9pZCkge1xyXG4gICAgICAgIHJlc3BvbmNlLnByZXZpb3VzRm9ybUZvY3VzRmllbGQgPSB7fTtcclxuICAgICAgICByZXNwb25jZS5mb2N1c0ZpZWxkUGFyZW50ID0ge307XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZmllbGQgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJlc3BvbmNlLnByZXZpb3VzRm9ybUZvY3VzRmllbGQgPSB7fTtcclxuICAgICAgcmVzcG9uY2UuZm9jdXNGaWVsZFBhcmVudCA9IHt9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3BvbmNlO1xyXG4gIH1cclxuICBnZXREb25vdFJlc2V0RmllbGRzKHRhYmxlRmllbGRzOiBhbnksIGRvbm90UmVzZXRGaWVsZExpc3RzOiBhbnksIEZvcm1WYWx1ZTogYW55KSB7XHJcbiAgICB0YWJsZUZpZWxkcy5mb3JFYWNoKCh0YWJsZWZpZWxkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRhYmxlZmllbGQuZG9fbm90X3JlZnJlc2hfb25fYWRkICYmIHRhYmxlZmllbGQudHlwZSAhPSBcImxpc3Rfb2ZfZmllbGRzXCIgJiYgdGFibGVmaWVsZC50eXBlICE9IFwiZ3JvdXBfb2ZfZmllbGRzXCIgJiYgdGFibGVmaWVsZC50eXBlICE9IFwic3RlcHBlclwiKSB7XHJcbiAgICAgICAgZG9ub3RSZXNldEZpZWxkTGlzdHNbdGFibGVmaWVsZC5maWVsZF9uYW1lXSA9IEZvcm1WYWx1ZVt0YWJsZWZpZWxkLmZpZWxkX25hbWVdO1xyXG4gICAgICB9IGVsc2UgaWYgKHRhYmxlZmllbGQudHlwZSA9PSBcImdyb3VwX29mX2ZpZWxkc1wiKSB7XHJcbiAgICAgICAgaWYgKHRhYmxlZmllbGQubGlzdF9vZl9maWVsZHMgJiYgdGFibGVmaWVsZC5saXN0X29mX2ZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0YWJsZWZpZWxkLmxpc3Rfb2ZfZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGZpZWxkLmRvX25vdF9yZWZyZXNoX29uX2FkZCkge1xyXG4gICAgICAgICAgICAgIGRvbm90UmVzZXRGaWVsZExpc3RzW3RhYmxlZmllbGQuZmllbGRfbmFtZV1bZmllbGQuZmllbGRfbmFtZV0gPSBGb3JtVmFsdWVbdGFibGVmaWVsZC5maWVsZF9uYW1lXVtmaWVsZC5maWVsZF9uYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHRhYmxlZmllbGQudHlwZSA9PSBcInN0ZXBwZXJcIikge1xyXG4gICAgICAgIGlmICh0YWJsZWZpZWxkLmxpc3Rfb2ZfZmllbGRzICYmIHRhYmxlZmllbGQubGlzdF9vZl9maWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGFibGVmaWVsZC5saXN0X29mX2ZpZWxkcy5mb3JFYWNoKChzdGVwOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHN0ZXAubGlzdF9vZl9maWVsZHMgJiYgc3RlcC5saXN0X29mX2ZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgc3RlcC5saXN0X29mX2ZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZG9fbm90X3JlZnJlc2hfb25fYWRkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRvbm90UmVzZXRGaWVsZExpc3RzW3N0ZXAuZmllbGRfbmFtZV1bZmllbGQuZmllbGRfbmFtZV0gPSBGb3JtVmFsdWVbc3RlcC5maWVsZF9uYW1lXVtmaWVsZC5maWVsZF9uYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkb25vdFJlc2V0RmllbGRMaXN0cztcclxuICB9XHJcbiAgYWRkTmV3Rm9ybShzZWxlY3RUYWJJbmRleDogbnVtYmVyLCBpc0J1bGtVcGRhdGU6IGJvb2xlYW4sIGJ1bGt1cGxvYWRMaXN0OiBhbnksIHNlbGVjdGVkUm93SW5kZXg6IG51bWJlciwgZm9ybU5hbWU6IHN0cmluZywgc2VsZWN0Q29udGFjdEFkZDogYW55KSB7XHJcbiAgICBsZXQgZm9ybURhdGE6IGFueSA9IHt9XHJcbiAgICBmb3JtRGF0YVsndGFiSW5kZXgnXSA9IHNlbGVjdFRhYkluZGV4O1xyXG4gICAgZm9ybURhdGFbJ2J1bGtVcGRhdGUnXSA9IGlzQnVsa1VwZGF0ZTtcclxuICAgIGZvcm1EYXRhWydidWxrRGF0YUxpc3QnXSA9IGJ1bGt1cGxvYWRMaXN0O1xyXG4gICAgZm9ybURhdGFbJ2VkaXRlZFJvd0luZGV4J10gPSBzZWxlY3RlZFJvd0luZGV4O1xyXG4gICAgZm9ybURhdGFbJ2Zvcm1OYW1lJ10gPSBmb3JtTmFtZTtcclxuICAgIGZvcm1EYXRhWydzZWxlY3RDb250YWN0J10gPSBzZWxlY3RDb250YWN0QWRkO1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbignZm9ybS1tb2RhbCcsIGZvcm1EYXRhKVxyXG4gIH1cclxuICBnZXRGaWVsZHNGcm9tRm9ybXModGFiOiBhbnksIGZvcm1OYW1lOiBzdHJpbmcsIGRpbmFtaWNfZm9ybTogYW55LCBncmlkQnV0dG9uczogYW55LCB0YWJsZUZpZWxkczogYW55LCBhY3Rpb25CdXR0b25zOiBhbnkpIHtcclxuICAgIGxldCByZXNwb25jZSA9IHtcclxuICAgICAgXCJmaWVsZHNcIjogdGFibGVGaWVsZHMsXHJcbiAgICAgIFwiYnV0dG9uc1wiOiBhY3Rpb25CdXR0b25zXHJcbiAgICB9XHJcbiAgICBsZXQgZm9ybSA9IG51bGw7XHJcbiAgICBpZiAoZm9ybU5hbWUgIT0gJ0RJTkFNSUNfRk9STScgJiYgdGFiICYmIHRhYi5mb3Jtcykge1xyXG4gICAgICBmb3JtID0gdGhpcy5jb21tb25GdW5jdGlvblNlcnZpY2UuZ2V0Rm9ybSh0YWIuZm9ybXMsIGZvcm1OYW1lLCBncmlkQnV0dG9ucyk7XHJcbiAgICB9IGVsc2UgaWYgKGZvcm1OYW1lID09ICdESU5BTUlDX0ZPUk0nKSB7XHJcbiAgICAgIGZvcm0gPSBkaW5hbWljX2Zvcm07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3JtID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKGZvcm0gIT0gbnVsbCkge1xyXG4gICAgICBpZiAoZm9ybT8uWyd0YWJsZUZpZWxkcyddICYmIGZvcm0/LlsndGFibGVGaWVsZHMnXT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlc3BvbmNlLmZpZWxkcyA9IGZvcm1bJ3RhYmxlRmllbGRzJ107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGZvcm0/LlsndGFiX2xpc3RfYnV0dG9ucyddICYmIGZvcm0/LlsndGFiX2xpc3RfYnV0dG9ucyddPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmVzcG9uY2UuYnV0dG9ucyA9IGZvcm1bJ3RhYl9saXN0X2J1dHRvbnMnXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3BvbmNlO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|