tnx-shared 5.0.59 → 5.0.60
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/bundles/tnx-shared.umd.js +73 -32
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/data-list-base.d.ts +3 -1
- package/classes/base/data-list-base.d.ts.map +1 -1
- package/esm2015/classes/base/data-list-base.js +42 -22
- package/esm2015/components/crud/crud-list/crud-list.component.js +2 -2
- package/esm2015/pipes/tn-date.pipe.js +12 -2
- package/fesm2015/tnx-shared.js +52 -23
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/pipes/tn-date.pipe.d.ts +2 -0
- package/pipes/tn-date.pipe.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
- package/tnx-shared.module.d.ts +2 -1
- package/tnx-shared.module.d.ts.map +1 -1
|
@@ -79,12 +79,14 @@ export declare abstract class DataListBase extends ComponentBase implements OnIn
|
|
|
79
79
|
_view(rowData: any): Promise<void>;
|
|
80
80
|
beforeView(): Promise<void>;
|
|
81
81
|
modifyViewModel(rowData: any): Promise<void>;
|
|
82
|
+
validateEdit(rowData: any): Promise<boolean>;
|
|
82
83
|
_edit(rowData: any, scopeDataEdit?: any): Promise<void>;
|
|
83
84
|
beforeEdit(): Promise<void>;
|
|
84
85
|
modifyEditModel(rowData: any): Promise<void>;
|
|
85
86
|
private cloneData;
|
|
86
87
|
getPromiseDeleteItem(rowData: any): Promise<ResponseResult>;
|
|
87
|
-
|
|
88
|
+
validateDelete(rowData: any): Promise<boolean>;
|
|
89
|
+
_delete(rowData: any): Promise<void>;
|
|
88
90
|
getPromiseDeleteItems(items: any): Promise<ResponseResult>;
|
|
89
91
|
_deleteMultiple(items: any): void;
|
|
90
92
|
onBeforeCancel(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-list-base.d.ts","sourceRoot":"../../../../projects/tnx-shared/src/lib/","sources":["classes/base/data-list-base.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"data-list-base.d.ts","sourceRoot":"../../../../projects/tnx-shared/src/lib/","sources":["classes/base/data-list-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -321,8 +321,17 @@ export class DataListBase extends ComponentBase {
|
|
|
321
321
|
return __awaiter(this, void 0, void 0, function* () {
|
|
322
322
|
});
|
|
323
323
|
}
|
|
324
|
+
validateEdit(rowData) {
|
|
325
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
326
|
+
return true;
|
|
327
|
+
});
|
|
328
|
+
}
|
|
324
329
|
_edit(rowData, scopeDataEdit = {}) {
|
|
325
330
|
return __awaiter(this, void 0, void 0, function* () {
|
|
331
|
+
const resultValidate = yield this.validateEdit(rowData);
|
|
332
|
+
if (!resultValidate) {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
326
335
|
const flashShow = rowData[KeyFlashShow];
|
|
327
336
|
delete rowData[KeyFlashShow];
|
|
328
337
|
this.formModel.formState = FormState.EDIT;
|
|
@@ -352,33 +361,44 @@ export class DataListBase extends ComponentBase {
|
|
|
352
361
|
getPromiseDeleteItem(rowData) {
|
|
353
362
|
return this.setting.baseService.delete(rowData.id);
|
|
354
363
|
}
|
|
364
|
+
validateDelete(rowData) {
|
|
365
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
366
|
+
return true;
|
|
367
|
+
});
|
|
368
|
+
}
|
|
355
369
|
_delete(rowData) {
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
}
|
|
359
|
-
this._notifierService.showDeleteConfirm().then(rs => {
|
|
360
|
-
if (!rs) {
|
|
370
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
371
|
+
if (rowData.__disableDelete) {
|
|
361
372
|
return;
|
|
362
373
|
}
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
374
|
+
const resultValidate = yield this.validateDelete(rowData);
|
|
375
|
+
if (!resultValidate) {
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
this._notifierService.showDeleteConfirm().then(rs => {
|
|
379
|
+
if (!rs) {
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
if (this.setting.baseService) {
|
|
383
|
+
this.getPromiseDeleteItem(rowData)
|
|
384
|
+
.then(response => {
|
|
385
|
+
if (response.success) {
|
|
386
|
+
if (this.setting.showVersionButton) {
|
|
387
|
+
this.context.fireEvent(ComCtxConstants.COMMON.RELOAD_DATA_VERSION, {}, true);
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
this._triggerProcessData();
|
|
391
|
+
}
|
|
392
|
+
this._notifierService.showDeleteDataSuccess();
|
|
369
393
|
}
|
|
370
394
|
else {
|
|
371
|
-
this.
|
|
395
|
+
this._notifierService.showWarningByReponse(response);
|
|
372
396
|
}
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
}, error => {
|
|
379
|
-
this._notifierService.showDeleteDataError();
|
|
380
|
-
});
|
|
381
|
-
}
|
|
397
|
+
}, error => {
|
|
398
|
+
this._notifierService.showDeleteDataError();
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
});
|
|
382
402
|
});
|
|
383
403
|
}
|
|
384
404
|
getPromiseDeleteItems(items) {
|
|
@@ -845,4 +865,4 @@ DataListBase.propDecorators = {
|
|
|
845
865
|
content: [{ type: ViewChild, args: ['crudList',] }],
|
|
846
866
|
parentModel: [{ type: Input }]
|
|
847
867
|
};
|
|
848
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDbkgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFckcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8s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R0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN6QyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkYsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUM7b0JBQ3BELEtBQUssRUFBRSxJQUFJO29CQUNYLE9BQU87aUJBQ1YsQ0FBQyxDQUFDLENBQUM7YUFDUDtTQUNKO0lBQ0wsQ0FBQztJQUVhLGtCQUFrQixDQUFDLE9BQU87O1lBQ3BDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDZixPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMxRDtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7S0FBQTs7O1lBMzNCSixTQUFTOzs7WUE1QjRDLFFBQVE7OztzQkErQnpELFNBQVMsU0FBQyxVQUFVOzBCQWFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQ3J1ZExpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NydWQvY3J1ZC1saXN0L2NydWQtbGlzdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbnRpdHlQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZW50aXR5LXBlcm1pc3Npb24vc2VydmljZXMuY3MvZW50aXR5LXBlcm1pc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFN0YXRlTWFjaGluZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zdGF0ZW1hY2hpbmVzL3NlcnZpY2VzL3N0YXRlbWFjaGluZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IFdmSXRlbSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvbW9kZWxzL21vZGVscyc7XHJcbmltcG9ydCB7IEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL2VudGl0eS13b3JrZmxvdy1oaXN0b3J5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy9lbnRpdHktd29ya2Zsb3ctc2V0dGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvd29ya2Zsb3ctcGVybWlzc2lvbi1kZXRhaWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy93b3JrZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IEZpbHRlciwgR3JpZEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZVdvcmtmbG93Q29yZVN0YXR1cyB9IGZyb20gJy4uLy4uL21vZGVscy93b3JrZmxvdy1jb3JlLXN0YXR1cy5lbnVtJztcclxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21Sb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5TWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LW1ldGFkYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXhwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMaXN0SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xpc3QtaGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnVtR2V0UmVmVHlwZSwgRm9ybVN0YXRlLCBLZXlGaWVsZEdldFJlZlR5cGUsIEtleUZsYXNoU2hvdywgV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IENvbHVtblNjaGVtYUJhc2UsIENvbnRyb2xUeXBlLCBDcnVkRm9ybURhdGEsIENydWRMaXN0RGF0YSwgQ3J1ZExpc3RTZXR0aW5nLCBEcm9wZG93bk9wdGlvbnMsIE9wZXJhdG9yLCBUZXh0QWxpZ24gfSBmcm9tICcuLi9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuL2NvbXBvbmVudC1iYXNlJztcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0YUxpc3RCYXNlIGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICAgIHB1YmxpYyBjcnVkTGlzdDogQ3J1ZExpc3RDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdjcnVkTGlzdCcpIHNldCBjb250ZW50KGNvbnRlbnQ6IENydWRMaXN0Q29tcG9uZW50KSB7XHJcbiAgICAgICAgY29uc3QgYmVmb3JlVmFsdWUgPSB0aGlzLmNydWRMaXN0O1xyXG4gICAgICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QgPSBjb250ZW50O1xyXG4gICAgICAgICAgICBpZiAoIWJlZm9yZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50UmVhZHkrKztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvdW50UmVhZHkgPCAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgQElucHV0KCkgcGFyZW50TW9kZWw6IENydWRMaXN0RGF0YTtcclxuXHJcbiAgICBwcml2YXRlIG5vdENvbmZpZ0Jhc2VTZXJ2aWNlTWVzc2FnZSA9ICdDaMawYSBj4bqldSBow6xuaCBDUlVEIGJhc2Ugc2VydmljZSc7XHJcbiAgICBkb05vdENoZWNrQmFzZVNlcnZpY2UgPSBmYWxzZTtcclxuICAgIHNldHRpbmc6IENydWRMaXN0U2V0dGluZyA9IG5ldyBDcnVkTGlzdFNldHRpbmcoKTtcclxuICAgIG1vZGVsOiBDcnVkTGlzdERhdGEgPSBuZXcgQ3J1ZExpc3REYXRhKCk7XHJcbiAgICBmb3JtTW9kZWw6IENydWRGb3JtRGF0YSA9IG5ldyBDcnVkRm9ybURhdGEoKTtcclxuICAgIHNjb3BlRGF0YUVkaXQ6IGFueSA9IHt9O1xyXG4gICAgc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcclxuICAgIGNvdW50UmVhZHk6IG51bWJlciA9IDA7XHJcbiAgICBoYXNDcnVkTGlzdCA9IHRydWU7XHJcbiAgICBjdXN0b21HZXREYXRhID0gZmFsc2U7XHJcbiAgICByZWFkeVRvVHJpbmhLeSA9IGZhbHNlO1xyXG4gICAgcGx1c1VybCA9ICcnO1xyXG4gICAgcm93RGF0YUN1cnJlbnQ6IGFueTtcclxuXHJcbiAgICBpc0NydWRMaXN0ID0gZmFsc2U7XHJcbiAgICBsb2FkaW5nVGltZW91dDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9saXN0SGVscGVyU2VydmljZTogTGlzdEhlbHBlclNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2V4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3JvdXRlcjogUm91dGVyO1xyXG4gICAgcHJvdGVjdGVkIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2RhdGVQaXBlOiBEYXRlUGlwZTtcclxuICAgIHByb3RlY3RlZCBfY2Q6IENoYW5nZURldGVjdG9yUmVmO1xyXG4gICAgcHJvdGVjdGVkIF9lbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9tYXN0ZXJEYXRhU2VydmljZTogTWFzdGVyRGF0YVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2U6IEVudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2U6IEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlOiBFbnRpdHlQZXJtaXNzaW9uU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfd29ya2Zsb3dTZXR0aW5nU2VydmljZTogV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2U6IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3N0YXRlTWFjaGluZXNTZXJ2aWNlOiBTdGF0ZU1hY2hpbmVzU2VydmljZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBfaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIgPSB0aGlzLl9pbmplY3Rvci5nZXQoUm91dGVyKTtcclxuICAgICAgICB0aGlzLl9jdXN0b21Sb3V0ZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEN1c3RvbVJvdXRlclNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2xpc3RIZWxwZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KExpc3RIZWxwZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZXhwb3J0U2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFeHBvcnRTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9jcnVkU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDcnVkU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZGF0ZVBpcGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoRGF0ZVBpcGUpO1xyXG4gICAgICAgIHRoaXMuX2NkID0gdGhpcy5faW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgICB0aGlzLl91c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fbWFzdGVyRGF0YVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTWFzdGVyRGF0YVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2VudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9lbnRpdHlQZXJtaXNzaW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlQZXJtaXNzaW9uU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fd29ya2Zsb3dTZXR0aW5nU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChXb3JrZmxvd1NldHRpbmdzU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fd29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9zdGF0ZU1hY2hpbmVzU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChTdGF0ZU1hY2hpbmVzU2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2xzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xzID0gdGhpcy5zZXR0aW5nLmNvbHMuZmlsdGVyKHEgPT4gIXEucmVtb3ZlT25Jbml0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tZXJnZUluZm9Ub0NvbHVtblNjaGVtYSgpO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVGaWVsZFNlYXJjaFRleHQoKTtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZG9Ob3RDaGVja0Jhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcodGhpcy5ub3RDb25maWdCYXNlU2VydmljZU1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nV29ya2Zsb3cpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS51c2VXb3JrZmxvdyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEtleVdvcmtmbG93U2V0dGluZygpO1xyXG4gICAgICAgICAgICB0aGlzLl9lbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2VudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UucmVnaXN0ZXJTZXJ2aWNlKGtleSwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKTtcclxuICAgICAgICAgICAgdGhpcy5fZW50aXR5UGVybWlzc2lvblNlcnZpY2UucmVnaXN0ZXJTZXJ2aWNlKGtleSwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKTtcclxuICAgICAgICAgICAgdGhpcy5fd29ya2Zsb3dTZXR0aW5nU2VydmljZS5yZWdpc3RlclNlcnZpY2Uoa2V5LCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoZWNrQWxsb3dUcmluaEt5ID0gdGhpcy5jaGVja0FsbG93VHJpbmhLeS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jaGVja0FsbG93VHJpbmhLeSA9IHRoaXMuY2hlY2tBbGxvd1RyaW5oS3k7XHJcbiAgICAgICAgdGhpcy5nZXRNZW51QnV0dG9ucyA9IHRoaXMuZ2V0TWVudUJ1dHRvbnMuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVBZnRlclZpZXdJbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkaW5nVGltZW91dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UgJiYgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tIYXNXb3JrZmxvdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoZWNrSGFzRW5hYmxlV29ya2Zsb3dDb3JlU3RhdHVzKCk7XHJcbiAgICAgICAgdGhpcy5jb3VudFJlYWR5Kys7XHJcbiAgICAgICAgaWYgKHRoaXMuY291bnRSZWFkeSA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tIYXNFbmFibGVXb3JrZmxvd0NvcmVTdGF0dXMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb3JlU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbFBhcmVudCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnd29ya2Zsb3dDb3JlU3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVHLhuqFuZyB0aMOhaSB0csOsbmgga8O9JyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnd29ya2Zsb3dDb3JlU3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlUmVmRmllbGQ6ICd3b3JrZmxvd0NvcmVTdGF0dXMnLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMjBweCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBEYXRhU291cmNlV29ya2Zsb3dDb3JlU3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmLnVuc2hpZnQoY29sUGFyZW50KTtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5jb2xQYXJlbnQsXHJcbiAgICAgICAgICAgICAgICByYXdDb2x1bW46IGNvbFBhcmVudCxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjb2xQYXJlbnQuZGF0YVR5cGVSZWZGaWVsZCxcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGNvbFBhcmVudC5maWVsZCxcclxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBjb2xQYXJlbnQuYWxsb3dGaWx0ZXIsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW5cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29sUGFyZW50LnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xQYXJlbnQsIGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5mb3JtYXRDb2x1bW5zKFtjb2xQYXJlbnQsIGNoaWxkcmVuXSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuYnVpbGRGaWx0ZXJDb2x1bW4oW2NvbFBhcmVudF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrSGFzV29ya2Zsb3coKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEtleVdvcmtmbG93U2V0dGluZygpO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLl9lbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlLmdldFNldHRpbmcoa2V5KTtcclxuICAgICAgICBpZiAoZGF0YSAhPSBudWxsICYmIGRhdGEuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBkYXRhLmRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmcgPSBzZXR0aW5nO1xyXG4gICAgICAgICAgICAvLyBM4bqleSB0aMO0bmcgdGluIHF1eeG7gW4gY+G7p2EgbmfGsOG7nWkgZMO5bmdcclxuICAgICAgICAgICAgY29uc3QgdXNlckRhdGEgPSBhd2FpdCB0aGlzLl91c2VyU2VydmljZS5nZXRJbmZvRm9yV29ya2Zsb3codGhpcy5fdXNlclNlcnZpY2UuZ2V0VXNlcklkQ29tYmluZSgpKTtcclxuICAgICAgICAgICAgaWYgKHVzZXJEYXRhLmRhdGEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdM4buXaSBs4bqleSB0aMO0bmcgdGluIG5nxrDhu51pIGTDuW5nJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5hZHZhbmNlRGF0YS51c2VyRGF0YSA9IHVzZXJEYXRhLmRhdGE7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbFBhcmVudCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdlbnRpdHlXb3JrZmxvd1N0YXR1cycsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAnZW50aXR5V29ya2Zsb3dTdGF0dXMnLFxyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtbixcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVHLhuqFuZyB0aMOhaScsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEyMHB4JyxcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IHNldHRpbmcuc3RhdHVzZXMubWFwKGl0ZW0gPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5tYSxcclxuICAgICAgICAgICAgICAgICAgICB0ZW46IGl0ZW0udGVuXHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYudW5zaGlmdChjb2xQYXJlbnQpO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEudXNlckRhdGEgPSB0aGlzLm1vZGVsLmFkdmFuY2VEYXRhLnVzZXJEYXRhO1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHtcclxuICAgICAgICAgICAgICAgIC4uLmNvbFBhcmVudCxcclxuICAgICAgICAgICAgICAgIHJhd0NvbHVtbjogY29sUGFyZW50LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IGNvbFBhcmVudC5kYXRhVHlwZVJlZkZpZWxkLFxyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdzdHInICsgY29sUGFyZW50LmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGNvbFBhcmVudC5hbGxvd0ZpbHRlcixcclxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtblxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb2xQYXJlbnQudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbFBhcmVudCwgY2hpbGRyZW4pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmZvcm1hdENvbHVtbnMoW2NvbFBhcmVudCwgY2hpbGRyZW5dKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5idWlsZEZpbHRlckNvbHVtbihbY29sUGFyZW50XSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldERhdGFTb3VyY2VUcmFuZ1RoYWlXb3JrZmxvdygpIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRXb3JrZmxvd0RldGFpbEJ5V29ya2Zsb3dTZXR0aW5nKGl0ZW1Xb3JrZmxvd1NldHRpbmc6IGFueSkge1xyXG4gICAgICAgIGlmIChpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMgJiYgIUFycmF5LmlzQXJyYXkoaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzKSkge1xyXG4gICAgICAgICAgICBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMgPSBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMuc3BsaXQoJywnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dzID0gKGF3YWl0IHRoaXMuX3N0YXRlTWFjaGluZXNTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignY29kZScsIE9wZXJhdG9yLmluLCBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMpXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIG5ldyBEcm9wZG93bk9wdGlvbnMoe1xyXG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ2NvZGUnLFxyXG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiAndGl0bGUnLFxyXG4gICAgICAgICAgICAgICAgZmllbGRQbHVzOiAnZGF0YSdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApKTtcclxuICAgICAgICB3b3JrZmxvd3MuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaXRlbS5kYXRhID0gSlNPTi5wYXJzZShpdGVtLmRhdGEpO1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0ZU1hY2hpbmVEYXRhID0gaXRlbS5kYXRhO1xyXG4gICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5tYWNoaW5lcy5mb3JFYWNoKG1hY2hpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuY29ubmVjdGlvbnMuZm9yRWFjaChjb25uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29ubi5zb3VyY2UgPT0gbWFjaGluZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnNbbWFjaGluZS5jb2RlXS5wdXNoKGNvbm4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cyA9IHdvcmtmbG93cztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXBwZW5kQ29sV29ya2Zsb3dTdGF0dXMod29ya2Zsb3dzOiBXZkl0ZW1bXSkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBbe1xyXG4gICAgICAgICAgICBpZDogbnVsbCxcclxuICAgICAgICAgICAgcmF3VGVuOiAnQ2jGsGEgYuG6r3QgxJHhuqd1JyxcclxuICAgICAgICAgICAgdGVuOiAnQ2jGsGEgYuG6r3QgxJHhuqd1JyxcclxuICAgICAgICAgICAgbWFMb3dlcjogJycsXHJcbiAgICAgICAgICAgIHRlbkxvd2VyOiAnY2jGsGEgYuG6r3QgxJHhuqd1J1xyXG4gICAgICAgIH1dO1xyXG4gICAgICAgIGlmICh3b3JrZmxvd3MgJiYgd29ya2Zsb3dzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB3b3JrZmxvd3MuZm9yRWFjaCh3b3JrZmxvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICB3b3JrZmxvdy5kYXRhLm1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVN0YXR1cyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1hY2hpbmUuY29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3VGVuOiBtYWNoaW5lLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbjogbWFjaGluZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYUxvd2VyOiBtYWNoaW5lLmNvZGUudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVuTG93ZXI6IG1hY2hpbmUubmFtZS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFTb3VyY2Uuc29tZSh4ID0+IHgudGVuTG93ZXIgPT0gaXRlbVN0YXR1cy50ZW5Mb3dlciAmJiB4Lm1hTG93ZXIgPT0gaXRlbVN0YXR1cy5tYUxvd2VyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLnB1c2goaXRlbVN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TYW1lTmFtZSA9IGRhdGFTb3VyY2UuZmluZChxID0+IHEudGVuTG93ZXIgPT0gaXRlbVN0YXR1cy50ZW5Mb3dlciAmJiBxLm1hTG93ZXIgIT0gaXRlbVN0YXR1cy5tYUxvd2VyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1TYW1lTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNhbWVOYW1lLnRlbiA9IGAke2l0ZW1TYW1lTmFtZS5yYXdUZW59ICgke2l0ZW1TYW1lTmFtZS5pZH0pYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TdGF0dXMudGVuID0gYCR7aXRlbVN0YXR1cy5yYXdUZW59ICgke2l0ZW1TdGF0dXMuaWR9KWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbFBhcmVudCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgZmllbGQ6IFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAndHJhbmdUaGFpVjUnLFxyXG4gICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAndHJhbmdUaGFpVjUnLFxyXG4gICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uLFxyXG4gICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgIGxhYmVsOiAnVHLhuqFuZyB0aMOhaScsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnMTIwcHgnLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFRleHRBbGlnbi5DZW50ZXIsXHJcbiAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcclxuICAgICAgICAgICAgZmllbGRUcmVlOiAncGFyZW50SWQnLFxyXG4gICAgICAgICAgICBkYXRhU291cmNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkTmVlZEdldFJlZi51bnNoaWZ0KGNvbFBhcmVudCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLnVzZXJEYXRhID0gdGhpcy5tb2RlbC5hZHZhbmNlRGF0YS51c2VyRGF0YTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHtcclxuICAgICAgICAgICAgLi4uY29sUGFyZW50LFxyXG4gICAgICAgICAgICByYXdDb2x1bW46IGNvbFBhcmVudCxcclxuICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogY29sUGFyZW50LmRhdGFUeXBlUmVmRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGNvbFBhcmVudC5maWVsZCxcclxuICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGNvbFBhcmVudC5hbGxvd0ZpbHRlcixcclxuICAgICAgICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW5cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbFBhcmVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xQYXJlbnQsIGNoaWxkcmVuKTtcclxuICAgICAgICB0aGlzLmNydWRMaXN0LmZvcm1hdENvbHVtbnMoW2NvbFBhcmVudCwgY2hpbGRyZW5dKTtcclxuICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xQYXJlbnRdKTtcclxuXHJcbiAgICAgICAgY29uc3QgdXNlckN1cnJlbnQgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIGlmICh1c2VyQ3VycmVudC51c2VyTmFtZSA9PSAnYWRtaW4nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbEZvckFkbWluID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdfX3ZpZXdIaXN0b3J5JyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnX192aWV3SGlzdG9yeScsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMHB4JyxcclxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogVGV4dEFsaWduLkNlbnRlclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xGb3JBZG1pbik7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sRm9yQWRtaW5dKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5idWlsZEZpbHRlckNvbHVtbihbY29sRm9yQWRtaW5dKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tBbGxvd1RyaW5oS3kocm93RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1lbnVCdXR0b25zKHJvd0RhdGEpIHtcclxuICAgICAgICB0aGlzLnJvd0RhdGFDdXJyZW50ID0gcm93RGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfYWRkKGV2dCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdFZhbGlkYXRlID0gYXdhaXQgdGhpcy52YWxpZGF0ZUFkZCgpO1xyXG4gICAgICAgIGlmICghcmVzdWx0VmFsaWRhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhID0ge307XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkFERDtcclxuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZUFkZCgpO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5wb3B1cEhlYWRlciA9IGBUaMOqbSBt4bubaSAke3RoaXMuc2V0dGluZy5vYmplY3ROYW1lfWA7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdmFsaWRhdGVBZGQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYmVmb3JlQWRkKCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF92aWV3KHJvd0RhdGEpIHtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcclxuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZVZpZXcoKTtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBIZWFkZXIgPSBgWGVtICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcclxuICAgICAgICB0aGlzLnNldHRpbmcubWFza0NsYXNzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhID0gdGhpcy5jbG9uZURhdGEocm93RGF0YSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlWaWV3TW9kZWwocm93RGF0YSk7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYmVmb3JlVmlldygpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlWaWV3TW9kZWwocm93RGF0YTogYW55KSB7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2VkaXQocm93RGF0YSwgc2NvcGVEYXRhRWRpdDogYW55ID0ge30pIHtcclxuICAgICAgICBjb25zdCBmbGFzaFNob3cgPSByb3dEYXRhW0tleUZsYXNoU2hvd107XHJcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbS2V5Rmxhc2hTaG93XTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcclxuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZUVkaXQoKTtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBIZWFkZXIgPSBgQ+G6rXAgbmjhuq10ICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcclxuICAgICAgICB0aGlzLnNldHRpbmcubWFza0NsYXNzID0gZmxhc2hTaG93ID8gJ2hpZGUnIDogbnVsbDtcclxuICAgICAgICB0aGlzLnNjb3BlRGF0YUVkaXQgPSBzY29wZURhdGFFZGl0O1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB0aGlzLmNsb25lRGF0YShyb3dEYXRhKTtcclxuICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeUVkaXRNb2RlbChyb3dEYXRhKTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhW0tleUZsYXNoU2hvd10gPSBmbGFzaFNob3c7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYmVmb3JlRWRpdCgpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlFZGl0TW9kZWwocm93RGF0YTogYW55KSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbG9uZURhdGEocm93RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiByb3dEYXRhW3RoaXMuc2V0dGluZy5lbnRpdHlLZXldXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlRGVsZXRlSXRlbShyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGUocm93RGF0YS5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2RlbGV0ZShyb3dEYXRhKSB7XHJcbiAgICAgICAgaWYgKHJvd0RhdGEuX19kaXNhYmxlRGVsZXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcnMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VEZWxldGVJdGVtKHJvd0RhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93VmVyc2lvbkJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5SRUxPQURfREFUQV9WRVJTSU9OLCB7fSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YUVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlRGVsZXRlSXRlbXMoaXRlbXMpIHtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcy5tYXAoeCA9PiB4LmlkKS5qb2luKCcsJyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGVNYW55KGlkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgX2RlbGV0ZU11bHRpcGxlKGl0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcnMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VEZWxldGVJdGVtcyhpdGVtcykudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJlZm9yZUNhbmNlbCgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZVNhdmVkKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlQ2FuY2VsKCRldmVudCkge1xyXG4gICAgICAgIHRoaXMub25CZWZvcmVDYW5jZWwoKTtcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlNZXRhZGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXR0aW5nLmRhdGEgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZXR0aW5nLmVudGl0eU1ldGFkYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlNZXRhZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlID0gdGhpcy5zZXR0aW5nLmVudGl0eU1ldGFkYXRhU2VydmljZTtcclxuICAgICAgICAgICAgLy8gICAgIGF3YWl0IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5sb2FkKHRoaXMuX2Jhc2VTZXJ2aWNlLCB0aGlzLmNvbnRleHQsIHRydWUpOyAgLy8gZm9yY2UgbG9hZCDEkeG7gyDEkeG7jWMgdOG7qyBjc2RsXHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXR0aW5nLmRhdGEgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BsZWFzZSBpbmNsdWRlIEVudGl0eU1ldGFkYXRhU2VydmljZSBpbiBwcm92aWRlciBvZiBjb21wb25lbnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVsb2FkKCkge1xyXG4gICAgICAgIHRoaXMuY3J1ZExpc3QucmVsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3RyaWdnZXJQcm9jZXNzRGF0YShncmlkSW5mbz86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzRGF0YShncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzRGF0YShncmlkSW5mbz86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NydWRMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvID0gdGhpcy5jcnVkTGlzdC5nZXRHcmlkSW5mbygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWdyaWRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZUluZm86IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IDk5OVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgc29ydHM6IFtdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldERhdGEoZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbyk6IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAmJiB0aGlzLm1vZGVsLnJlYWR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLm1vZGlmeUZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBmaWx0ZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNOdWxsVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN0VmFsdWVzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmaWx0ZXIudmFsdWUpLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc051bGxWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0VmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc051bGxWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdFZhbHVlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gT3BlcmF0b3IuaXNOdWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5sb2dpYyA9ICdvcic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWVsZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5vcGVyYXRvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSwgT3BlcmF0b3IuaXNOdWxsLCAnJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBPcGVyYXRvci5pbiwgcmVzdFZhbHVlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHRNb2RpZnkgPSBhd2FpdCB0aGlzLm1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE1vZGlmeSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC50b3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5cyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdW5tYXJrTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZG9HZXRSZXF1ZXN0KGdyaWRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX21hcmtMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5hZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnTcOheSBjaOG7pyBwaOG6o24gaOG7k2kgcXXDoSBsw6J1LCB2dWkgbMOybmcga2nhu4NtIHRyYSBs4bqhaSDEkcaw4budbmcgdHJ1eeG7gW4gbeG6oW5nIScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LCAyMDAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZVJlbG9hZGVkKGV2dCA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgdGhpcy5hZnRlclJlbG9hZGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWZ0ZXJSZWxvYWRlZCgpIHsgfVxyXG5cclxuICAgIF91bm1hcmtMb2FkaW5nKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcclxuICAgICAgICB0aGlzLm1vZGVsLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpcmVEYXRhTG9hZGVkKHN1Y2Nlc3M6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgdGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LnByb2Nlc3NCYXNlRGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCB0aGlzLnBsdXNVcmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGFDdXN0b20oZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZG9HZXRSZXF1ZXN0KGdyaWRJbmZvOiBHcmlkSW5mbykge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXN0b21HZXREYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm8pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzR2V0RGF0YShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dIdHRwVW5rbm93RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRGF0YUxvYWRlZChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YUN1c3RvbShncmlkSW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0dldERhdGEocmVzcG9uc2U6IFJlc3BvbnNlUmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5leHBhbmRlZFJvd0tleXMgPSB7fTtcclxuICAgICAgICB0aGlzLm1vZGVsLnRvdGFsID0gcmVzcG9uc2UudG90YWxSZWNvcmQ7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlUmVuZGVyRGF0YVNvdXJjZShyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YS5mb3JFYWNoKHJvd0l0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5c1tyb3dJdGVtW3RoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGRdXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NGb3JlYWNoSXRlbUFmdGVyR2V0RGF0YShyb3dJdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSByZXNwb25zZS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZykge1xyXG4gICAgICAgICAgICAvLyBM4bqleSByYSBuaOG7r25nIHRy4bqhbmcgdGjDoWkgbcOgIGLhuqNuIGdoaSBraMO0bmcgxJHGsOG7o2Mgc+G7rWFcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHVzTm90QWxsb3dFZGl0cyA9IHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmcuc3RhdHVzZXMuZmlsdGVyKHAgPT4gIXAub3B0aW9ucy5jaG9QaGVwU3VhKS5tYXAoaXRlbSA9PiBpdGVtLnRyYW5nVGhhaUNvbnRhaW5lci5tYSk7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX2luZGV4ID0gKHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlIC0gMSkgKiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgKyAxICsgaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAvLyBpdGVtLmN1cnJlbnRTdGF0ZUNvZGUgPSBpdGVtLmN1cnJlbnRTdGF0ZUNvZGU7XHJcbiAgICAgICAgICAgICAgICBpdGVtLl9fZGlzYWJsZUVkaXQgPSBzdGF0dXNOb3RBbGxvd0VkaXRzLmluZGV4T2YoaXRlbS5jdXJyZW50U3RhdGVDb2RlKSA+IC0xO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX2luZGV4ID0gKHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlIC0gMSkgKiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgKyAxICsgaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAvLyBpdGVtLmN1cnJlbnRTdGF0ZUNvZGUgPSBpdGVtLmN1cnJlbnRTdGF0ZUNvZGU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzZXRTZWxlY3RlZEl0ZW1zID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJHZXREYXRhKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2dldFJlZkRhdGFEcm9wZG93bih0aGlzLm1vZGVsLmRhdGFTb3VyY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGJlZm9yZVJlbmRlckRhdGFTb3VyY2UoZGF0YXNvdXJjZTogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gZGF0YXNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb2Nlc3NGb3JlYWNoSXRlbUFmdGVyR2V0RGF0YSh4OiBhbnkpIHtcclxuICAgICAgICAvLyBwcm9jZXNzIHdvcmtmbG93XHJcbiAgICAgICAgaWYgKHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLmlzV2YxKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudXNlcklkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoeFsnbWV0YWRhdGFTdGF0dXMnXSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhbJ2NyZWF0ZWRCeSddICE9IGN1cnJlbnRVc2VySWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVFZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVEZWxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHhbJ21ldGFkYXRhU3RhdHVzJ10gPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0geC5jb3VudE9mQXBwcm92ZSA/IHguY291bnRPZkFwcHJvdmUgKyAxIDogMTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSAnb2JqZWN0SXNVc2VyJyArIGNvdW50O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVELTExOTggLSBOYW1OSCAtIFRyxrDhu51uZyBo4bujcCBzZXR0aW5nIGNoxrBhIGPDsyBk4buvIGxp4buHdSB0aMOsIGLhu4sgZXhjZXB0aW9uLCBkbyBjw6FjIGLhuqNuIGdoaSB0aMOqbSBt4bubaSB0csaw4bubYyBraGkgYuG6rXQgcXV5IHRyw6xuaCB0aMOsIGtvIGPDsyBk4buvIGxp4buHdSBuw6B5XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ1trZXldLnNvbWUoeCA9PiB4ID09IGN1cnJlbnRVc2VySWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVEZWxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEVORCBVRC0xMTk4XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh4WydtZXRhZGF0YVN0YXR1cyddID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHguX19kaXNhYmxlRGVsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlckdldERhdGEoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2dldFJlZkRhdGFEcm9wZG93bihkYXRhU291cmNlKSB7XHJcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJQcm9taXNlRG9udE5lZWRXYWl0ID0gW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJTY2hlbWFEb250TmVlZFdhaXQgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYS5maWVsZDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hW0tleUZpZWxkR2V0UmVmVHlwZV0gPT0gRW51bUdldFJlZlR5cGUuU0VSVkVSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZm9yY2VHZXREYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uICYmIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5yYXdDb2x1bW4gJiYgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbi5maWVsZCA9PSBzY2hlbWEuZmllbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLnNldHRpbmcuY29scy5zb21lKGl0ZW0gPT4gaXRlbS5maWVsZCA9PSAnc3RyJyArIGZpZWxkICYmIGl0ZW0udmlzaWJsZSAhPSBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJWYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBjdXJyZW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaWRzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcyA9IGlkcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBjdXJyZW50VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBNYXN0ZXJEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5ncm91cENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgYXJyVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW3RoaXMubmV3RmlsdGVyKHNjaGVtYS52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgYXJyVmFsdWUpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tb2RpZnlGaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5tb2RpZnlGaWx0ZXIoZmlsdGVycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEub3JkZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWEsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJQcm9taXNlRG9udE5lZWRXYWl0LnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclNjaGVtYURvbnROZWVkV2FpdC5wdXNoKHNjaGVtYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gaXRlbSA9PiBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ2xhYmVsJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gc2NoZW1hLmRhdGFTb3VyY2UuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBpdGVtRGF0YVtmaWVsZF0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFyclByb21pc2VEb250TmVlZFdhaXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyclJlcyA9IGF3YWl0IFByb21pc2UuYWxsKGFyclByb21pc2VEb250TmVlZFdhaXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyclNjaGVtYURvbnROZWVkV2FpdC5mb3JFYWNoKChzY2hlbWEsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2UsIHNjaGVtYSwgYXJyUmVzW2luZGV4XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFmdGVyR2V0UmVmRGF0YURyb3Bkb3duKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5VG9UcmluaEt5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgc2NoZW1hOiBDb2x1bW5TY2hlbWFCYXNlLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGRhdGEgPz89IFtdO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHsgfTtcclxuICAgICAgICBsZXQgZnVuY0dldFJlZkRhdGFSb3cgPSAocmVmSXRlbXMpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZkl0ZW1zLm1hcChpdGVtID0+IGZ1bmNHZXRMYWJlbChpdGVtKSkuam9pbihgJHtzY2hlbWEuc2VwYXJhdG9yfSBgKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93KSB7XHJcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3cpIHtcclxuICAgICAgICAgICAgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW1zID0gZGF0YS5maWx0ZXIoaSA9PiBpZHMuc29tZShxID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBxKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldFJlZkRhdGFSb3cocmVmSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSBkYXRhLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgaXRlbURhdGFbZmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KGl0ZW1EYXRhLCByZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZnRlckdldFJlZkRhdGFEcm9wZG93bihmaWVsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hOiBDb2x1bW5TY2hlbWFCYXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wZG93bk9wdGlvbnMoe1xyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHNjaGVtYS5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHNjaGVtYS52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHNjaGVtYS5maWVsZFBsdXMsXHJcbiAgICAgICAgICAgIGZpZWxkVHJlZTogc2NoZW1hLmZpZWxkVHJlZSxcclxuICAgICAgICAgICAgZmllbGRQYXJlbnRUcmVlSXRlbTogc2NoZW1hLmZpZWxkUGFyZW50VHJlZUl0ZW0sXHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogc2NoZW1hLmZ1bmNHZXRMYWJlbCxcclxuICAgICAgICAgICAgc29ydEZpZWxkOiBzY2hlbWEuc29ydEZpZWxkLFxyXG4gICAgICAgICAgICBzb3J0RGlyOiBzY2hlbWEuc29ydERpcixcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhRmluaXNoOiBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24oZmllbGQ6IHN0cmluZykge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lcmdlSW5mb1RvQ29sdW1uU2NoZW1hKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uTW9kZWxTY2hlbWEgPSB0aGlzLnNldHRpbmcubW9kZWxTY2hlbWFzLmZpbmQocCA9PiBwLmZpZWxkID09IGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5Nb2RlbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgY29sLmxhYmVsID0gY29sdW1uTW9kZWxTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgIGNvbC5mdWxsTGFiZWwgPSBjb2x1bW5Nb2RlbFNjaGVtYS5mdWxsTmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICghY29sLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sLmRhdGFUeXBlID0gdGhpcy5nZXREYXRhVHlwZShjb2x1bW5Nb2RlbFNjaGVtYS5kYXRhVHlwZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERhdGFUeXBlKHR5cGU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2VuZXJhdGVGaWVsZFNlYXJjaFRleHQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29sLmZ1bGxUZXh0U2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0LnB1c2goY29sLmZpZWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0LmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBmaWVsZCwgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sIHNvdXJjZUZpZWxkOiAnX2snIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpbHRlclRlbXBsYXRlQWR2cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpbHRlclRlbXBsYXRlQWR2cy5zcGxpY2UoMCwgMCwgbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyc1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVQZXJtaXNzaW9uKHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcnVkTGlzdC52YWxpZGF0ZVBlcm1pc3Npb24ocm93RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
868
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDbkgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFckcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdqRCxNQUFNLE9BQWdCLFlBQWEsU0FBUSxhQUFhO0lBc0RwRCxZQUNJLFNBQW1CO1FBRW5CLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQXhDYixnQ0FBMkIsR0FBRyxpQ0FBaUMsQ0FBQztRQUN4RSwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDOUIsWUFBTyxHQUFvQixJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2pELFVBQUssR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN6QyxjQUFTLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0Msa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFDeEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsZUFBVSxHQUFXLENBQUMsQ0FBQztRQUN2QixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBR2IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQTJCZixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDMUUsQ0FBQztJQTNFRCxJQUEyQixPQUFPLENBQUMsT0FBMEI7UUFDekQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxJQUFJLE9BQU8sRUFBRTtZQUNULElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNsQixJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFO29CQUNyQixPQUFPO2lCQUNWO2dCQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN0QjtTQUNKO0lBQ0wsQ0FBQztJQWlFRCxRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN0RTtRQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO2dCQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2FBQ3ZFO1NBQ0o7YUFDSTtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFO2dCQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQy9DO1lBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMsNkJBQTZCLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQy9FO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDeEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXO1FBQ1AsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVhLG1CQUFtQjs7WUFDN0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQ2xFLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDakM7WUFDRCxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtnQkFDckIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7YUFDOUI7UUFDTCxDQUFDO0tBQUE7SUFFYSxnQ0FBZ0M7O1lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFO2dCQUN4QyxNQUFNLFNBQVMsR0FBRyxJQUFJLGdCQUFnQixDQUFDO29CQUNuQyxLQUFLLEVBQUUsb0JBQW9CO29CQUMzQixLQUFLLEVBQUUscUJBQXFCO29CQUM1QixRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixnQkFBZ0IsRUFBRSxvQkFBb0I7b0JBQ3RDLEtBQUssRUFBRSxPQUFPO29CQUNkLFVBQVUsRUFBRSw0QkFBNEI7b0JBQ3hDLE9BQU8sRUFBRSxJQUFJO29CQUNiLFdBQVcsRUFBRSxXQUFXLENBQUMsUUFBUTtpQkFDcEMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzVELE1BQU0sUUFBUSxtQ0FDUCxTQUFTLEtBQ1osU0FBUyxFQUFFLFNBQVMsRUFDcEIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQ2pDLFFBQVEsRUFBRSxTQUFTLENBQUMsZ0JBQWdCLEVBQ3BDLEtBQUssRUFBRSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFDOUIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQ2xDLElBQUksRUFBRSxLQUFLLEVBQ1gsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsR0FDOUMsQ0FBQztnQkFDRixTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDaEQ7UUFDTCxDQUFDO0tBQUE7SUFFYSxnQkFBZ0I7O1lBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsNkJBQTZCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtnQkFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO2dCQUN2QyxxQ0FBcUM7Z0JBQ3JDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztnQkFDbEcsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtvQkFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO2lCQUNyRTtnQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztvQkFDbkMsS0FBSyxFQUFFLHNCQUFzQjtvQkFDN0IsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsZ0JBQWdCLEVBQUUsc0JBQXNCO29CQUN4QyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQjtvQkFDM0MsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRO29CQUNqQyxLQUFLLEVBQUUsWUFBWTtvQkFDbkIsS0FBSyxFQUFFLE9BQU87b0JBQ2QsVUFBVSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDdEMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO3dCQUNYLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztxQkFDaEIsQ0FBQyxDQUFDO2lCQUNOLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO2dCQUNwRSxNQUFNLFFBQVEsbUNBQ1AsU0FBUyxLQUNaLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLFdBQVcsRUFBRSxXQUFXLENBQUMsUUFBUSxFQUNqQyxRQUFRLEVBQUUsU0FBUyxDQUFDLGdCQUFnQixFQUNwQyxLQUFLLEVBQUUsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQzlCLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUNsQyxJQUFJLEVBQUUsS0FBSyxFQUNYLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEdBQzlDLENBQUM7Z0JBQ0YsU0FBUyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ2hEO1FBQ0wsQ0FBQztLQUFBO0lBRUssOEJBQThCOztZQUNoQyxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7S0FBQTtJQUVhLGtDQUFrQyxDQUFDLG1CQUF3Qjs7WUFDckUsSUFBSSxtQkFBbUIsQ0FBQyxhQUFhLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUN4RixtQkFBbUIsQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNwRjtZQUNELE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLENBQ3ZFO2dCQUNJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxDQUFDO2FBQ3pFLEVBQ0QsSUFBSSxlQUFlLENBQUM7Z0JBQ2hCLFVBQVUsRUFBRSxNQUFNO2dCQUNsQixZQUFZLEVBQUUsT0FBTztnQkFDckIsU0FBUyxFQUFFLE1BQU07YUFDcEIsQ0FBQyxDQUNMLENBQUMsQ0FBQztZQUNILFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDbkMsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDOUIsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDeEMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzVDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ3hDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFOzRCQUMzQixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDckQ7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztZQUNILG1CQUFtQixDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDOUMsQ0FBQztLQUFBO0lBRVMsdUJBQXVCLENBQUMsU0FBbUI7UUFDakQsTUFBTSxVQUFVLEdBQUcsQ0FBQztnQkFDaEIsRUFBRSxFQUFFLElBQUk7Z0JBQ1IsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLEdBQUcsRUFBRSxjQUFjO2dCQUNuQixPQUFPLEVBQUUsRUFBRTtnQkFDWCxRQUFRLEVBQUUsY0FBYzthQUMzQixDQUFDLENBQUM7UUFDSCxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQy9CLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDckMsTUFBTSxVQUFVLEdBQUc7d0JBQ2YsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJO3dCQUNoQixNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUk7d0JBQ3BCLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSTt3QkFDakIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO3dCQUNuQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7cUJBQ3ZDLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQzdGLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQzVCLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ2hILElBQUksWUFBWSxFQUFFOzRCQUNkLFlBQVksQ0FBQyxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxFQUFFLEdBQUcsQ0FBQzs0QkFDakUsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDO3lCQUM5RDtxQkFDSjtnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLGdCQUFnQixDQUFDO1lBQ25DLEtBQUssRUFBRSxzQkFBc0I7WUFDN0IsUUFBUSxFQUFFLGFBQWE7WUFDdkIsZ0JBQWdCLEVBQUUsYUFBYTtZQUMvQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQjtZQUMzQyxXQUFXLEVBQUUsV0FBVyxDQUFDLFFBQVE7WUFDakMsS0FBSyxFQUFFLFlBQVk7WUFDbkIsS0FBSyxFQUFFLE9BQU87WUFDZCxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU07WUFDM0IsTUFBTSxFQUFFLElBQUk7WUFDWixTQUFTLEVBQUUsVUFBVTtZQUNyQixVQUFVO1NBQ2IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQ3BFLE1BQU0sUUFBUSxtQ0FDUCxTQUFTLEtBQ1osU0FBUyxFQUFFLFNBQVMsRUFDcEIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQ2pDLFFBQVEsRUFBRSxTQUFTLENBQUMsZ0JBQWdCLEVBQ3BDLEtBQUssRUFBRSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFDOUIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQ2xDLElBQUksRUFBRSxLQUFLLEVBQ1gsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsR0FDOUMsQ0FBQztRQUNGLFNBQVMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUU3QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZELElBQUksV0FBVyxDQUFDLFFBQVEsSUFBSSxPQUFPLEVBQUU7WUFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztnQkFDckMsS0FBSyxFQUFFLGVBQWU7Z0JBQ3RCLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixLQUFLLEVBQUUsRUFBRTtnQkFDVCxLQUFLLEVBQUUsT0FBTztnQkFDZCxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU07YUFDOUIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUNsRDtJQUNMLENBQUM7SUFFSyxpQkFBaUIsQ0FBQyxPQUFPOztZQUMzQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQUE7SUFFRCxjQUFjLENBQUMsT0FBTztRQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztJQUNsQyxDQUFDO0lBRUssSUFBSSxDQUFDLEdBQUc7O1lBQ1YsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDakIsT0FBTzthQUNWO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7WUFDekMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDO0tBQUE7SUFFSyxXQUFXOztZQUNiLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQUVLLFNBQVM7O1FBQ2YsQ0FBQztLQUFBO0lBRUssS0FBSyxDQUFDLE9BQU87O1lBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUMxQyxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUMsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQy9CLENBQUM7S0FBQTtJQUVLLFVBQVU7O1FBQ2hCLENBQUM7S0FBQTtJQUVLLGVBQWUsQ0FBQyxPQUFZOztRQUNsQyxDQUFDO0tBQUE7SUFFSyxZQUFZLENBQUMsT0FBTzs7WUFDdEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztLQUFBO0lBRUssS0FBSyxDQUFDLE9BQU8sRUFBRSxnQkFBcUIsRUFBRTs7WUFDeEMsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ2pCLE9BQU87YUFDVjtZQUNELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4QyxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNqRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1lBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUMsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUM5QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDO0tBQUE7SUFFSyxVQUFVOztRQUNoQixDQUFDO0tBQUE7SUFFSyxlQUFlLENBQUMsT0FBWTs7UUFDbEMsQ0FBQztLQUFBO0lBRU8sU0FBUyxDQUFDLE9BQU87UUFDckIsT0FBTztZQUNILEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7U0FDdEMsQ0FBQztJQUNOLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFPO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUssY0FBYyxDQUFDLE9BQU87O1lBQ3hCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQUVLLE9BQU8sQ0FBQyxPQUFPOztZQUNqQixJQUFJLE9BQU8sQ0FBQyxlQUFlLEVBQUU7Z0JBQ3pCLE9BQU87YUFDVjtZQUNELE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNqQixPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxFQUFFLEVBQUU7b0JBQ0wsT0FBTztpQkFDVjtnQkFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO29CQUMxQixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDO3lCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQ2IsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFOzRCQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUU7Z0NBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDOzZCQUNoRjtpQ0FDSTtnQ0FDRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzs2QkFDOUI7NEJBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLENBQUM7eUJBQ2pEOzZCQUNJOzRCQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQzt5QkFDeEQ7b0JBQ0wsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO3dCQUNQLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO29CQUNoRCxDQUFDLENBQUMsQ0FBQztpQkFDVjtZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztLQUFBO0lBRUQscUJBQXFCLENBQUMsS0FBSztRQUN2QixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQUs7UUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2hELElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ0wsT0FBTzthQUNWO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDOUMsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO3dCQUNsQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLENBQUM7cUJBQ2pEO3lCQUNJO3dCQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDeEQ7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDTjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWM7SUFFZCxDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBTTtRQUNoQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVhLGlCQUFpQjs7WUFDM0IsSUFBSTtnQkFDQSxxQ0FBcUM7Z0JBQ3JDLDZGQUE2RjtnQkFDN0YsY0FBYztnQkFDZCxXQUFXO2dCQUNYLHNGQUFzRjtnQkFDdEYsd0VBQXdFO2dCQUN4RSxtSEFBbUg7Z0JBQ25ILDZGQUE2RjtnQkFDN0YsSUFBSTthQUNQO1lBQ0QsT0FBTyxDQUFDLEVBQUU7Z0JBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO2FBQ2xGO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztLQUFBO0lBRUssTUFBTTs7WUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLENBQUM7S0FBQTtJQUVLLG1CQUFtQixDQUFDLFFBQW1COztZQUN6QyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsQ0FBQztLQUFBO0lBRWEsV0FBVyxDQUFDLFFBQW1COztZQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNoQixPQUFPO2lCQUNWO2dCQUNELElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ1gsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQzFDO2FBQ0o7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDWCxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUM7d0JBQ3BCLFFBQVEsRUFBRTs0QkFDTixJQUFJLEVBQUUsQ0FBQzs0QkFDUCxRQUFRLEVBQUUsR0FBRzt5QkFDaEI7d0JBQ0QsT0FBTyxFQUFFLEVBQUU7d0JBQ1gsS0FBSyxFQUFFLEVBQUU7cUJBQ1osQ0FBQyxDQUFDO2lCQUNOO2FBQ0o7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLENBQUM7S0FBQTtJQUVLLGNBQWMsQ0FBQyxRQUFrQjs7WUFDbkMsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztLQUFBO0lBRWEsT0FBTyxDQUFDLFFBQWtCOztZQUNwQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO2dCQUM5QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BCLFFBQVEsQ0FBQyxZQUFZLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ25ELElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTt3QkFDZCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7d0JBQ3pCLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFOzRCQUNyQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7Z0NBQ2hCLFlBQVksR0FBRyxJQUFJLENBQUM7NkJBQ3ZCO2lDQUNJO2dDQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQzFCO3dCQUNMLENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksWUFBWSxFQUFFOzRCQUNkLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0NBQ3hCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQ0FDbEMsT0FBTzs2QkFDVjs0QkFDRCxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzs0QkFDcEIsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7NEJBQ3BCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOzRCQUNwQixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzs0QkFDdkIsTUFBTSxDQUFDLE9BQU8sR0FBRztnQ0FDYixJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dDQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDOzZCQUNsRSxDQUFDO3lCQUNMO3FCQUNKO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekQsSUFBSSxZQUFZLEtBQUssS0FBSyxFQUFFO29CQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztvQkFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO29CQUNoQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3RCLE9BQU87aUJBQ1Y7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUMvQjtRQUNMLENBQUM7S0FBQTtJQUVELFlBQVk7UUFDUixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQzdDO1FBQ0QsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1lBQ3hHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUMvQixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQUcsR0FBRyxJQUFJO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVLLGFBQWE7OERBQUssQ0FBQztLQUFBO0lBRXpCLGNBQWM7UUFDVixZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRU8sY0FBYyxDQUFDLFVBQW1CLElBQUk7UUFDMUMsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxRQUFrQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUFrQjtJQUVoQyxDQUFDO0lBRU8sWUFBWSxDQUFDLFFBQWtCO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7cUJBQzNCLElBQUksQ0FBQyxDQUFNLFFBQVEsRUFBQyxFQUFFO29CQUNuQixJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7d0JBQ2xCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDcEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO3FCQUN6Qjt5QkFDSTt3QkFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDOUI7Z0JBQ0wsQ0FBQyxDQUFBLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ1AsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQzVDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDO2FBQ1Y7U0FDSjthQUNJO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoQztJQUNMLENBQUM7SUFFYSxjQUFjLENBQUMsUUFBd0I7O1lBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQ3hDLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzNDLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakQsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQzVCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFO3dCQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7cUJBQ3JGO29CQUNELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakQsQ0FBQyxDQUFDLENBQUM7YUFDTjtZQUNELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFFakMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRTtnQkFDOUIsb0RBQW9EO2dCQUNwRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM3SSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUNsRyxpREFBaUQ7b0JBQ2pELElBQUksQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNqRixDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUNJO2dCQUNELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7b0JBQ2xHLGlEQUFpRDtnQkFDckQsQ0FBQyxDQUFDLENBQUM7YUFDTjtZQUVELElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUVuQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztZQUN2RixJQUFJLGtCQUFrQixFQUFFO2dCQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZDO1lBRUQsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEQsQ0FBQztLQUFBO0lBRUQsc0JBQXNCLENBQUMsVUFBZTtRQUNsQyxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRU8sOEJBQThCLENBQUMsQ0FBTTtRQUN6QyxtQkFBbUI7UUFDbkIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDN0IsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDNUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzNFLElBQUksQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMxQixJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxhQUFhLEVBQUU7d0JBQ2pDLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO3dCQUN2QixDQUFDLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDNUI7aUJBQ0o7cUJBQ0ksSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQy9CLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzFELE1BQU0sR0FBRyxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUM7b0JBQ25DLCtJQUErSTtvQkFDL0ksSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQ2QsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxFQUFFOzRCQUM1QyxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzs0QkFDdkIsQ0FBQyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7eUJBQzVCO3FCQUNKO29CQUNELGNBQWM7aUJBQ2pCO3FCQUNJLElBQUksQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMvQixDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDdkIsQ0FBQyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7aUJBQzVCO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFSyxZQUFZOztRQUVsQixDQUFDO0tBQUE7SUFFYSxtQkFBbUIsQ0FBQyxVQUFVOztZQUN4QyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDckMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUU7b0JBQzFDLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO29CQUNsQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztvQkFDakMsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUU7d0JBQzNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7d0JBQzNCLElBQUksTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRTs0QkFDckQsSUFBSSxNQUFNLENBQUMsWUFBWTttQ0FDaEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDO21DQUM1SCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsRUFDekY7Z0NBQ0UsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO2dDQUNwQixVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29DQUMxQixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7b0NBQ3JDLElBQUksWUFBWSxJQUFJLElBQUksRUFBRTt3Q0FDdEIsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFOzRDQUNqQixJQUFJLEdBQUcsR0FBRyxZQUFZLENBQUM7NENBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dEQUNyQixHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzs2Q0FDeEI7NENBQ0QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtnREFDYixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRTtvREFDOUIsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztpREFDckI7NENBQ0wsQ0FBQyxDQUFDLENBQUM7eUNBQ047NkNBQ0ksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLEVBQUU7NENBQzdDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7eUNBQy9CO3FDQUNKO2dDQUNMLENBQUMsQ0FBQyxDQUFDO2dDQUNILElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0NBQ3JCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztvQ0FDbkIsSUFBSSxNQUFNLENBQUMsV0FBVyxZQUFZLGlCQUFpQixFQUFFO3dDQUNqRCxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQ3hDLE1BQU0sQ0FBQyxTQUFTLEVBQ2QsUUFBUSxFQUNSLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3FDQUM3Qzt5Q0FDSTt3Q0FDRCxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0NBQzNFLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTs0Q0FDckIsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQzt5Q0FDaEM7d0NBQ0QsT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQ2hELE9BQU8sRUFDUCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQ3JDLENBQUM7cUNBQ0w7b0NBQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTt3Q0FDdEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUM7d0NBQzdCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3FDQUM3RDt5Q0FDSTt3Q0FDRCxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0NBQ3JDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQ0FDdEM7aUNBQ0o7NkJBQ0o7eUJBQ0o7NkJBQ0k7NEJBQ0QsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzs0QkFDdEUsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO2dDQUNyQixZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQzs2QkFDdEM7NEJBQ0QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQ0FDMUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUNwRixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7b0NBQ2pCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lDQUNuRDs0QkFDTCxDQUFDLENBQUMsQ0FBQzt5QkFDTjtxQkFDSjtvQkFDRCxJQUFJLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ25DLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO3dCQUN6RCxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7NEJBQzVDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNyRSxDQUFDLENBQUMsQ0FBQztxQkFDTjtvQkFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2lCQUM5QjtxQkFDSTtvQkFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztpQkFDOUI7YUFDSjtRQUNMLENBQUM7S0FBQTtJQUVPLHdCQUF3QixDQUFDLFVBQWlCLEVBQUUsTUFBd0IsRUFBRSxJQUFXO1FBQ3JGLElBQUksYUFBSixJQUFJLGNBQUosSUFBSSxJQUFKLElBQUksR0FBSyxFQUFFLEVBQUM7UUFDWixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEUsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQ3JCLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxlQUFlLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0MsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2pDLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2pGLENBQUMsQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRTtZQUN4QixlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztTQUM1QztRQUNELElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztTQUNoRDtRQUNELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNqQixVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUMxQixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUU7b0JBQ3pCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQ3JCLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUN4QjtvQkFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0UsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDckIsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDdEQsZUFBZSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztxQkFDdkM7aUJBQ0o7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQ0k7WUFDRCxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUMxQixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUU7b0JBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN2RSxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7d0JBQ2pCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNoRCxlQUFlLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO3FCQUN0QztpQkFDSjtZQUVMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLHFCQUFxQixDQUFDLE1BQXdCO1FBQ2xELE9BQU8sSUFBSSxlQUFlLENBQUM7WUFDdkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1lBQ2pDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUM3QixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7WUFDM0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQzNCLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxtQkFBbUI7WUFDL0MsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1lBQ2pDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztZQUMzQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87WUFDdkIsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtTQUNoRCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsS0FBYTtJQUVyQyxDQUFDO0lBRU8sdUJBQXVCO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BGLElBQUksaUJBQWlCLEVBQUU7Z0JBQ25CLEdBQUcsQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO2dCQUNuQyxHQUFHLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUU7b0JBQ2YsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUMvRDthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sV0FBVyxDQUFDLElBQVk7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLHVCQUF1QjtRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDNUIsSUFBSSxHQUFHLENBQUMsY0FBYyxFQUFFO2dCQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2hEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDekMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFO2dCQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDO29CQUNwRCxLQUFLLEVBQUUsSUFBSTtvQkFDWCxPQUFPO2lCQUNWLENBQUMsQ0FBQyxDQUFDO2FBQ1A7U0FDSjtJQUNMLENBQUM7SUFFYSxrQkFBa0IsQ0FBQyxPQUFPOztZQUNwQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDMUQ7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0tBQUE7OztZQTM0QkosU0FBUzs7O1lBNUI0QyxRQUFROzs7c0JBK0J6RCxTQUFTLFNBQUMsVUFBVTswQkFhcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IENydWRMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jcnVkL2NydWQtbGlzdC9jcnVkLWxpc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRW50aXR5UGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2VudGl0eS1wZXJtaXNzaW9uL3NlcnZpY2VzLmNzL2VudGl0eS1wZXJtaXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGF0ZU1hY2hpbmVzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc3RhdGVtYWNoaW5lcy9zZXJ2aWNlcy9zdGF0ZW1hY2hpbmVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXZkl0ZW0gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L21vZGVscy9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy9lbnRpdHktd29ya2Zsb3ctaGlzdG9yeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvZW50aXR5LXdvcmtmbG93LXNldHRpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL3dvcmtmbG93LXBlcm1pc3Npb24tZGV0YWlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvd29ya2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBGaWx0ZXIsIEdyaWRJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XHJcbmltcG9ydCB7IERhdGFTb3VyY2VXb3JrZmxvd0NvcmVTdGF0dXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvd29ya2Zsb3ctY29yZS1zdGF0dXMuZW51bSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3J1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3VzdG9tUm91dGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1yb3V0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V4cG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGlzdEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saXN0LWhlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFzdGVyRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXN0ZXItZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW51bUdldFJlZlR5cGUsIEZvcm1TdGF0ZSwgS2V5RmllbGRHZXRSZWZUeXBlLCBLZXlGbGFzaFNob3csIFdvcmtmbG93RmllbGRTdGF0ZUNvZGUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TY2hlbWFCYXNlLCBDb250cm9sVHlwZSwgQ3J1ZEZvcm1EYXRhLCBDcnVkTGlzdERhdGEsIENydWRMaXN0U2V0dGluZywgRHJvcGRvd25PcHRpb25zLCBPcGVyYXRvciwgVGV4dEFsaWduIH0gZnJvbSAnLi4vZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi9jb21wb25lbnQtYmFzZSc7XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFMaXN0QmFzZSBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBwdWJsaWMgY3J1ZExpc3Q6IENydWRMaXN0Q29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnY3J1ZExpc3QnKSBzZXQgY29udGVudChjb250ZW50OiBDcnVkTGlzdENvbXBvbmVudCkge1xyXG4gICAgICAgIGNvbnN0IGJlZm9yZVZhbHVlID0gdGhpcy5jcnVkTGlzdDtcclxuICAgICAgICBpZiAoY29udGVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0ID0gY29udGVudDtcclxuICAgICAgICAgICAgaWYgKCFiZWZvcmVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudFJlYWR5Kys7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3VudFJlYWR5IDwgMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBJbnB1dCgpIHBhcmVudE1vZGVsOiBDcnVkTGlzdERhdGE7XHJcblxyXG4gICAgcHJpdmF0ZSBub3RDb25maWdCYXNlU2VydmljZU1lc3NhZ2UgPSAnQ2jGsGEgY+G6pXUgaMOsbmggQ1JVRCBiYXNlIHNlcnZpY2UnO1xyXG4gICAgZG9Ob3RDaGVja0Jhc2VTZXJ2aWNlID0gZmFsc2U7XHJcbiAgICBzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XHJcbiAgICBtb2RlbDogQ3J1ZExpc3REYXRhID0gbmV3IENydWRMaXN0RGF0YSgpO1xyXG4gICAgZm9ybU1vZGVsOiBDcnVkRm9ybURhdGEgPSBuZXcgQ3J1ZEZvcm1EYXRhKCk7XHJcbiAgICBzY29wZURhdGFFZGl0OiBhbnkgPSB7fTtcclxuICAgIHNob3dEZXRhaWxGb3JtID0gZmFsc2U7XHJcbiAgICBjb3VudFJlYWR5OiBudW1iZXIgPSAwO1xyXG4gICAgaGFzQ3J1ZExpc3QgPSB0cnVlO1xyXG4gICAgY3VzdG9tR2V0RGF0YSA9IGZhbHNlO1xyXG4gICAgcmVhZHlUb1RyaW5oS3kgPSBmYWxzZTtcclxuICAgIHBsdXNVcmwgPSAnJztcclxuICAgIHJvd0RhdGFDdXJyZW50OiBhbnk7XHJcblxyXG4gICAgaXNDcnVkTGlzdCA9IGZhbHNlO1xyXG4gICAgbG9hZGluZ1RpbWVvdXQ7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfY3VzdG9tUm91dGVyU2VydmljZTogQ3VzdG9tUm91dGVyU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfbGlzdEhlbHBlclNlcnZpY2U6IExpc3RIZWxwZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9leHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9yb3V0ZXI6IFJvdXRlcjtcclxuICAgIHByb3RlY3RlZCBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9kYXRlUGlwZTogRGF0ZVBpcGU7XHJcbiAgICBwcm90ZWN0ZWQgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZjtcclxuICAgIHByb3RlY3RlZCBfZW50aXR5TWV0YWRhdGFTZXJ2aWNlOiBFbnRpdHlNZXRhZGF0YVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfbWFzdGVyRGF0YVNlcnZpY2U6IE1hc3RlckRhdGFTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9lbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlOiBFbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9lbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlOiBFbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9lbnRpdHlQZXJtaXNzaW9uU2VydmljZTogRW50aXR5UGVybWlzc2lvblNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3dvcmtmbG93U2V0dGluZ1NlcnZpY2U6IFdvcmtmbG93U2V0dGluZ3NTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlOiBXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9zdGF0ZU1hY2hpbmVzU2VydmljZTogU3RhdGVNYWNoaW5lc1NlcnZpY2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgX2luamVjdG9yOiBJbmplY3RvclxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IHRoaXMuX2luamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KFJvdXRlcik7XHJcbiAgICAgICAgdGhpcy5fY3VzdG9tUm91dGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDdXN0b21Sb3V0ZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9saXN0SGVscGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChMaXN0SGVscGVyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRXhwb3J0U2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3J1ZFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2RhdGVQaXBlID0gdGhpcy5faW5qZWN0b3IuZ2V0KERhdGVQaXBlKTtcclxuICAgICAgICB0aGlzLl9jZCA9IHRoaXMuX2luamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX21hc3RlckRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1hc3RlckRhdGFTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9lbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2VudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5UGVybWlzc2lvblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5UGVybWlzc2lvblNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fc3RhdGVNYWNoaW5lc1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoU3RhdGVNYWNoaW5lc1NlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29scykge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29scyA9IHRoaXMuc2V0dGluZy5jb2xzLmZpbHRlcihxID0+ICFxLnJlbW92ZU9uSW5pdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWVyZ2VJbmZvVG9Db2x1bW5TY2hlbWEoKTtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlRmllbGRTZWFyY2hUZXh0KCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmRvTm90Q2hlY2tCYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHRoaXMubm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1dvcmtmbG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UudXNlV29ya2Zsb3cgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRLZXlXb3JrZmxvd1NldHRpbmcoKTtcclxuICAgICAgICAgICAgdGhpcy5fZW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZS5yZWdpc3RlclNlcnZpY2Uoa2V5LCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9lbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UucmVnaXN0ZXJTZXJ2aWNlKGtleSwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGVja0FsbG93VHJpbmhLeSA9IHRoaXMuY2hlY2tBbGxvd1RyaW5oS3kuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY2hlY2tBbGxvd1RyaW5oS3kgPSB0aGlzLmNoZWNrQWxsb3dUcmluaEt5O1xyXG4gICAgICAgIHRoaXMuZ2V0TWVudUJ1dHRvbnMgPSB0aGlzLmdldE1lbnVCdXR0b25zLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlICYmIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS51c2VXb3JrZmxvdykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSGFzV29ya2Zsb3coKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGVja0hhc0VuYWJsZVdvcmtmbG93Q29yZVN0YXR1cygpO1xyXG4gICAgICAgIHRoaXMuY291bnRSZWFkeSsrO1xyXG4gICAgICAgIGlmICh0aGlzLmNvdW50UmVhZHkgPiAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrSGFzRW5hYmxlV29ya2Zsb3dDb3JlU3RhdHVzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29yZVN0YXR1cykge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xQYXJlbnQgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3dvcmtmbG93Q29yZVN0YXR1cycsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Ry4bqhbmcgdGjDoWkgdHLDrG5oIGvDvScsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3dvcmtmbG93Q29yZVN0YXR1cycsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAnd29ya2Zsb3dDb3JlU3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTIwcHgnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZVdvcmtmbG93Q29yZVN0YXR1cyxcclxuICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkTmVlZEdldFJlZi51bnNoaWZ0KGNvbFBhcmVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uY29sUGFyZW50LFxyXG4gICAgICAgICAgICAgICAgcmF3Q29sdW1uOiBjb2xQYXJlbnQsXHJcbiAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogY29sUGFyZW50LmRhdGFUeXBlUmVmRmllbGQsXHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3N0cicgKyBjb2xQYXJlbnQuZmllbGQsXHJcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogY29sUGFyZW50LmFsbG93RmlsdGVyLFxyXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbFBhcmVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLnB1c2goY29sUGFyZW50LCBjaGlsZHJlbik7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sUGFyZW50LCBjaGlsZHJlbl0pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xQYXJlbnRdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBjaGVja0hhc1dvcmtmbG93KCkge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRLZXlXb3JrZmxvd1NldHRpbmcoKTtcclxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5fZW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZS5nZXRTZXR0aW5nKGtleSk7XHJcbiAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCAmJiBkYXRhLmRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nID0gZGF0YS5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nID0gc2V0dGluZztcclxuICAgICAgICAgICAgLy8gTOG6pXkgdGjDtG5nIHRpbiBxdXnhu4FuIGPhu6dhIG5nxrDhu51pIGTDuW5nXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJEYXRhID0gYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0SW5mb0ZvcldvcmtmbG93KHRoaXMuX3VzZXJTZXJ2aWNlLmdldFVzZXJJZENvbWJpbmUoKSk7XHJcbiAgICAgICAgICAgIGlmICh1c2VyRGF0YS5kYXRhID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnTOG7l2kgbOG6pXkgdGjDtG5nIHRpbiBuZ8aw4budaSBkw7luZycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuYWR2YW5jZURhdGEudXNlckRhdGEgPSB1c2VyRGF0YS5kYXRhO1xyXG4gICAgICAgICAgICBjb25zdCBjb2xQYXJlbnQgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZW50aXR5V29ya2Zsb3dTdGF0dXMnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGVSZWZGaWVsZDogJ2VudGl0eVdvcmtmbG93U3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW4sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Ry4bqhbmcgdGjDoWknLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMjBweCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBzZXR0aW5nLnN0YXR1c2VzLm1hcChpdGVtID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0ubWEsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVuOiBpdGVtLnRlblxyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmLnVuc2hpZnQoY29sUGFyZW50KTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLnVzZXJEYXRhID0gdGhpcy5tb2RlbC5hZHZhbmNlRGF0YS51c2VyRGF0YTtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5jb2xQYXJlbnQsXHJcbiAgICAgICAgICAgICAgICByYXdDb2x1bW46IGNvbFBhcmVudCxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjb2xQYXJlbnQuZGF0YVR5cGVSZWZGaWVsZCxcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGNvbFBhcmVudC5maWVsZCxcclxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBjb2xQYXJlbnQuYWxsb3dGaWx0ZXIsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW5cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29sUGFyZW50LnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xQYXJlbnQsIGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5mb3JtYXRDb2x1bW5zKFtjb2xQYXJlbnQsIGNoaWxkcmVuXSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuYnVpbGRGaWx0ZXJDb2x1bW4oW2NvbFBhcmVudF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREYXRhU291cmNlVHJhbmdUaGFpV29ya2Zsb3coKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0V29ya2Zsb3dEZXRhaWxCeVdvcmtmbG93U2V0dGluZyhpdGVtV29ya2Zsb3dTZXR0aW5nOiBhbnkpIHtcclxuICAgICAgICBpZiAoaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzICYmICFBcnJheS5pc0FycmF5KGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcykpIHtcclxuICAgICAgICAgICAgaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzID0gaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHdvcmtmbG93cyA9IChhd2FpdCB0aGlzLl9zdGF0ZU1hY2hpbmVzU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2NvZGUnLCBPcGVyYXRvci5pbiwgaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzKVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBuZXcgRHJvcGRvd25PcHRpb25zKHtcclxuICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICdjb2RlJyxcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ3RpdGxlJyxcclxuICAgICAgICAgICAgICAgIGZpZWxkUGx1czogJ2RhdGEnXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKSk7XHJcbiAgICAgICAgd29ya2Zsb3dzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0uZGF0YSA9IEpTT04ucGFyc2UoaXRlbS5kYXRhKTtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lRGF0YSA9IGl0ZW0uZGF0YTtcclxuICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zID0ge307XHJcbiAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEubWFjaGluZXMuZm9yRWFjaChtYWNoaW5lID0+IHtcclxuICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdID0gW107XHJcbiAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmNvbm5lY3Rpb25zLmZvckVhY2goY29ubiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm4uc291cmNlID09IG1hY2hpbmUuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0ucHVzaChjb25uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd3MgPSB3b3JrZmxvd3M7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFwcGVuZENvbFdvcmtmbG93U3RhdHVzKHdvcmtmbG93czogV2ZJdGVtW10pIHtcclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gW3tcclxuICAgICAgICAgICAgaWQ6IG51bGwsXHJcbiAgICAgICAgICAgIHJhd1RlbjogJ0NoxrBhIGLhuq90IMSR4bqndScsXHJcbiAgICAgICAgICAgIHRlbjogJ0NoxrBhIGLhuq90IMSR4bqndScsXHJcbiAgICAgICAgICAgIG1hTG93ZXI6ICcnLFxyXG4gICAgICAgICAgICB0ZW5Mb3dlcjogJ2NoxrBhIGLhuq90IMSR4bqndSdcclxuICAgICAgICB9XTtcclxuICAgICAgICBpZiAod29ya2Zsb3dzICYmIHdvcmtmbG93cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgd29ya2Zsb3dzLmZvckVhY2god29ya2Zsb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgd29ya2Zsb3cuZGF0YS5tYWNoaW5lcy5mb3JFYWNoKG1hY2hpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TdGF0dXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtYWNoaW5lLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd1RlbjogbWFjaGluZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW46IG1hY2hpbmUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFMb3dlcjogbWFjaGluZS5jb2RlLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbkxvd2VyOiBtYWNoaW5lLm5hbWUudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhU291cmNlLnNvbWUoeCA9PiB4LnRlbkxvd2VyID09IGl0ZW1TdGF0dXMudGVuTG93ZXIgJiYgeC5tYUxvd2VyID09IGl0ZW1TdGF0dXMubWFMb3dlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5wdXNoKGl0ZW1TdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2FtZU5hbWUgPSBkYXRhU291cmNlLmZpbmQocSA9PiBxLnRlbkxvd2VyID09IGl0ZW1TdGF0dXMudGVuTG93ZXIgJiYgcS5tYUxvd2VyICE9IGl0ZW1TdGF0dXMubWFMb3dlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2FtZU5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TYW1lTmFtZS50ZW4gPSBgJHtpdGVtU2FtZU5hbWUucmF3VGVufSAoJHtpdGVtU2FtZU5hbWUuaWR9KWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU3RhdHVzLnRlbiA9IGAke2l0ZW1TdGF0dXMucmF3VGVufSAoJHtpdGVtU3RhdHVzLmlkfSlgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb2xQYXJlbnQgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgIGZpZWxkOiBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogJ3RyYW5nVGhhaVY1JyxcclxuICAgICAgICAgICAgZGF0YVR5cGVSZWZGaWVsZDogJ3RyYW5nVGhhaVY1JyxcclxuICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtbixcclxuICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICBsYWJlbDogJ1Ry4bqhbmcgdGjDoWknLFxyXG4gICAgICAgICAgICB3aWR0aDogJzEyMHB4JyxcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBUZXh0QWxpZ24uQ2VudGVyLFxyXG4gICAgICAgICAgICBpc1RyZWU6IHRydWUsXHJcbiAgICAgICAgICAgIGZpZWxkVHJlZTogJ3BhcmVudElkJyxcclxuICAgICAgICAgICAgZGF0YVNvdXJjZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYudW5zaGlmdChjb2xQYXJlbnQpO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS51c2VyRGF0YSA9IHRoaXMubW9kZWwuYWR2YW5jZURhdGEudXNlckRhdGE7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB7XHJcbiAgICAgICAgICAgIC4uLmNvbFBhcmVudCxcclxuICAgICAgICAgICAgcmF3Q29sdW1uOiBjb2xQYXJlbnQsXHJcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcclxuICAgICAgICAgICAgZGF0YVR5cGU6IGNvbFBhcmVudC5kYXRhVHlwZVJlZkZpZWxkLFxyXG4gICAgICAgICAgICBmaWVsZDogJ3N0cicgKyBjb2xQYXJlbnQuZmllbGQsXHJcbiAgICAgICAgICAgIGFsbG93RmlsdGVyOiBjb2xQYXJlbnQuYWxsb3dGaWx0ZXIsXHJcbiAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2xQYXJlbnQudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLnB1c2goY29sUGFyZW50LCBjaGlsZHJlbik7XHJcbiAgICAgICAgdGhpcy5jcnVkTGlzdC5mb3JtYXRDb2x1bW5zKFtjb2xQYXJlbnQsIGNoaWxkcmVuXSk7XHJcbiAgICAgICAgdGhpcy5jcnVkTGlzdC5idWlsZEZpbHRlckNvbHVtbihbY29sUGFyZW50XSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXJDdXJyZW50ID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgICAgICBpZiAodXNlckN1cnJlbnQudXNlck5hbWUgPT0gJ2FkbWluJykge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xGb3JBZG1pbiA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnX192aWV3SGlzdG9yeScsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ19fdmlld0hpc3RvcnknLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDBweCcsXHJcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IFRleHRBbGlnbi5DZW50ZXJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLnB1c2goY29sRm9yQWRtaW4pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmZvcm1hdENvbHVtbnMoW2NvbEZvckFkbWluXSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuYnVpbGRGaWx0ZXJDb2x1bW4oW2NvbEZvckFkbWluXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrQWxsb3dUcmluaEt5KHJvd0RhdGEpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNZW51QnV0dG9ucyhyb3dEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5yb3dEYXRhQ3VycmVudCA9IHJvd0RhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2FkZChldnQpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVBZGQoKTtcclxuICAgICAgICBpZiAoIXJlc3VsdFZhbGlkYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHt9O1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5BREQ7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVBZGQoKTtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBIZWFkZXIgPSBgVGjDqm0gbeG7m2kgJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZX1gO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tYXNrQ2xhc3MgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHZhbGlkYXRlQWRkKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGJlZm9yZUFkZCgpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfdmlldyhyb3dEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLlZJRVc7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVWaWV3KCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBvcHVwSGVhZGVyID0gYFhlbSAke3RoaXMuc2V0dGluZy5vYmplY3ROYW1lfWA7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHRoaXMuY2xvbmVEYXRhKHJvd0RhdGEpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMubW9kaWZ5Vmlld01vZGVsKHJvd0RhdGEpO1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGJlZm9yZVZpZXcoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbW9kaWZ5Vmlld01vZGVsKHJvd0RhdGE6IGFueSkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHZhbGlkYXRlRWRpdChyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2VkaXQocm93RGF0YSwgc2NvcGVEYXRhRWRpdDogYW55ID0ge30pIHtcclxuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVFZGl0KHJvd0RhdGEpO1xyXG4gICAgICAgIGlmICghcmVzdWx0VmFsaWRhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmbGFzaFNob3cgPSByb3dEYXRhW0tleUZsYXNoU2hvd107XHJcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbS2V5Rmxhc2hTaG93XTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcclxuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZUVkaXQoKTtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBIZWFkZXIgPSBgQ+G6rXAgbmjhuq10ICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcclxuICAgICAgICB0aGlzLnNldHRpbmcubWFza0NsYXNzID0gZmxhc2hTaG93ID8gJ2hpZGUnIDogbnVsbDtcclxuICAgICAgICB0aGlzLnNjb3BlRGF0YUVkaXQgPSBzY29wZURhdGFFZGl0O1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB0aGlzLmNsb25lRGF0YShyb3dEYXRhKTtcclxuICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeUVkaXRNb2RlbChyb3dEYXRhKTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhW0tleUZsYXNoU2hvd10gPSBmbGFzaFNob3c7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYmVmb3JlRWRpdCgpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlFZGl0TW9kZWwocm93RGF0YTogYW55KSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbG9uZURhdGEocm93RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiByb3dEYXRhW3RoaXMuc2V0dGluZy5lbnRpdHlLZXldXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlRGVsZXRlSXRlbShyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGUocm93RGF0YS5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdmFsaWRhdGVEZWxldGUocm93RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9kZWxldGUocm93RGF0YSkge1xyXG4gICAgICAgIGlmIChyb3dEYXRhLl9fZGlzYWJsZURlbGV0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdFZhbGlkYXRlID0gYXdhaXQgdGhpcy52YWxpZGF0ZURlbGV0ZShyb3dEYXRhKTtcclxuICAgICAgICBpZiAoIXJlc3VsdFZhbGlkYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcnMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VEZWxldGVJdGVtKHJvd0RhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93VmVyc2lvbkJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5SRUxPQURfREFUQV9WRVJTSU9OLCB7fSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YUVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlRGVsZXRlSXRlbXMoaXRlbXMpIHtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcy5tYXAoeCA9PiB4LmlkKS5qb2luKCcsJyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGVNYW55KGlkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgX2RlbGV0ZU11bHRpcGxlKGl0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcnMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VEZWxldGVJdGVtcyhpdGVtcykudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJlZm9yZUNhbmNlbCgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZVNhdmVkKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlQ2FuY2VsKCRldmVudCkge1xyXG4gICAgICAgIHRoaXMub25CZWZvcmVDYW5jZWwoKTtcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlNZXRhZGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXR0aW5nLmRhdGEgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZXR0aW5nLmVudGl0eU1ldGFkYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlNZXRhZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlID0gdGhpcy5zZXR0aW5nLmVudGl0eU1ldGFkYXRhU2VydmljZTtcclxuICAgICAgICAgICAgLy8gICAgIGF3YWl0IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5sb2FkKHRoaXMuX2Jhc2VTZXJ2aWNlLCB0aGlzLmNvbnRleHQsIHRydWUpOyAgLy8gZm9yY2UgbG9hZCDEkeG7gyDEkeG7jWMgdOG7qyBjc2RsXHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXR0aW5nLmRhdGEgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BsZWFzZSBpbmNsdWRlIEVudGl0eU1ldGFkYXRhU2VydmljZSBpbiBwcm92aWRlciBvZiBjb21wb25lbnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVsb2FkKCkge1xyXG4gICAgICAgIHRoaXMuY3J1ZExpc3QucmVsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3RyaWdnZXJQcm9jZXNzRGF0YShncmlkSW5mbz86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzRGF0YShncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzRGF0YShncmlkSW5mbz86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NydWRMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvID0gdGhpcy5jcnVkTGlzdC5nZXRHcmlkSW5mbygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWdyaWRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZUluZm86IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IDk5OVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgc29ydHM6IFtdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldERhdGEoZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbyk6IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAmJiB0aGlzLm1vZGVsLnJlYWR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLm1vZGlmeUZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBmaWx0ZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNOdWxsVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN0VmFsdWVzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmaWx0ZXIudmFsdWUpLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc051bGxWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0VmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc051bGxWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdFZhbHVlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gT3BlcmF0b3IuaXNOdWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5sb2dpYyA9ICdvcic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWVsZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5vcGVyYXRvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSwgT3BlcmF0b3IuaXNOdWxsLCAnJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBPcGVyYXRvci5pbiwgcmVzdFZhbHVlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHRNb2RpZnkgPSBhd2FpdCB0aGlzLm1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE1vZGlmeSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC50b3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5cyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdW5tYXJrTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZG9HZXRSZXF1ZXN0KGdyaWRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX21hcmtMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5hZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnTcOheSBjaOG7pyBwaOG6o24gaOG7k2kgcXXDoSBsw6J1LCB2dWkgbMOybmcga2nhu4NtIHRyYSBs4bqhaSDEkcaw4budbmcgdHJ1eeG7gW4gbeG6oW5nIScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LCAyMDAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZVJlbG9hZGVkKGV2dCA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgdGhpcy5hZnRlclJlbG9hZGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWZ0ZXJSZWxvYWRlZCgpIHsgfVxyXG5cclxuICAgIF91bm1hcmtMb2FkaW5nKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcclxuICAgICAgICB0aGlzLm1vZGVsLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpcmVEYXRhTG9hZGVkKHN1Y2Nlc3M6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgdGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LnByb2Nlc3NCYXNlRGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCB0aGlzLnBsdXNVcmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGFDdXN0b20oZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZG9HZXRSZXF1ZXN0KGdyaWRJbmZvOiBHcmlkSW5mbykge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXN0b21HZXREYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm8pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzR2V0RGF0YShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dIdHRwVW5rbm93RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRGF0YUxvYWRlZChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YUN1c3RvbShncmlkSW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0dldERhdGEocmVzcG9uc2U6IFJlc3BvbnNlUmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5leHBhbmRlZFJvd0tleXMgPSB7fTtcclxuICAgICAgICB0aGlzLm1vZGVsLnRvdGFsID0gcmVzcG9uc2UudG90YWxSZWNvcmQ7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlUmVuZGVyRGF0YVNvdXJjZShyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YS5mb3JFYWNoKHJvd0l0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5c1tyb3dJdGVtW3RoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGRdXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NGb3JlYWNoSXRlbUFmdGVyR2V0RGF0YShyb3dJdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSByZXNwb25zZS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZykge1xyXG4gICAgICAgICAgICAvLyBM4bqleSByYSBuaOG7r25nIHRy4bqhbmcgdGjDoWkgbcOgIGLhuqNuIGdoaSBraMO0bmcgxJHGsOG7o2Mgc+G7rWFcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHVzTm90QWxsb3dFZGl0cyA9IHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmcuc3RhdHVzZXMuZmlsdGVyKHAgPT4gIXAub3B0aW9ucy5jaG9QaGVwU3VhKS5tYXAoaXRlbSA9PiBpdGVtLnRyYW5nVGhhaUNvbnRhaW5lci5tYSk7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX2luZGV4ID0gKHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlIC0gMSkgKiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgKyAxICsgaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAvLyBpdGVtLmN1cnJlbnRTdGF0ZUNvZGUgPSBpdGVtLmN1cnJlbnRTdGF0ZUNvZGU7XHJcbiAgICAgICAgICAgICAgICBpdGVtLl9fZGlzYWJsZUVkaXQgPSBzdGF0dXNOb3RBbGxvd0VkaXRzLmluZGV4T2YoaXRlbS5jdXJyZW50U3RhdGVDb2RlKSA+IC0xO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX2luZGV4ID0gKHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlIC0gMSkgKiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgKyAxICsgaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAvLyBpdGVtLmN1cnJlbnRTdGF0ZUNvZGUgPSBpdGVtLmN1cnJlbnRTdGF0ZUNvZGU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzZXRTZWxlY3RlZEl0ZW1zID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJHZXREYXRhKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2dldFJlZkRhdGFEcm9wZG93bih0aGlzLm1vZGVsLmRhdGFTb3VyY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGJlZm9yZVJlbmRlckRhdGFTb3VyY2UoZGF0YXNvdXJjZTogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gZGF0YXNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb2Nlc3NGb3JlYWNoSXRlbUFmdGVyR2V0RGF0YSh4OiBhbnkpIHtcclxuICAgICAgICAvLyBwcm9jZXNzIHdvcmtmbG93XHJcbiAgICAgICAgaWYgKHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLmlzV2YxKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudXNlcklkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoeFsnbWV0YWRhdGFTdGF0dXMnXSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhbJ2NyZWF0ZWRCeSddICE9IGN1cnJlbnRVc2VySWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVFZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVEZWxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHhbJ21ldGFkYXRhU3RhdHVzJ10gPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0geC5jb3VudE9mQXBwcm92ZSA/IHguY291bnRPZkFwcHJvdmUgKyAxIDogMTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSAnb2JqZWN0SXNVc2VyJyArIGNvdW50O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVELTExOTggLSBOYW1OSCAtIFRyxrDhu51uZyBo4bujcCBzZXR0aW5nIGNoxrBhIGPDsyBk4buvIGxp4buHdSB0aMOsIGLhu4sgZXhjZXB0aW9uLCBkbyBjw6FjIGLhuqNuIGdoaSB0aMOqbSBt4bubaSB0csaw4bubYyBraGkgYuG6rXQgcXV5IHRyw6xuaCB0aMOsIGtvIGPDsyBk4buvIGxp4buHdSBuw6B5XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ1trZXldLnNvbWUoeCA9PiB4ID09IGN1cnJlbnRVc2VySWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVEZWxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEVORCBVRC0xMTk4XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh4WydtZXRhZGF0YVN0YXR1cyddID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHguX19kaXNhYmxlRGVsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlckdldERhdGEoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2dldFJlZkRhdGFEcm9wZG93bihkYXRhU291cmNlKSB7XHJcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJQcm9taXNlRG9udE5lZWRXYWl0ID0gW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJTY2hlbWFEb250TmVlZFdhaXQgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYS5maWVsZDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hW0tleUZpZWxkR2V0UmVmVHlwZV0gPT0gRW51bUdldFJlZlR5cGUuU0VSVkVSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZm9yY2VHZXREYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uICYmIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5yYXdDb2x1bW4gJiYgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbi5maWVsZCA9PSBzY2hlbWEuZmllbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLnNldHRpbmcuY29scy5zb21lKGl0ZW0gPT4gaXRlbS5maWVsZCA9PSAnc3RyJyArIGZpZWxkICYmIGl0ZW0udmlzaWJsZSAhPSBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJWYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBjdXJyZW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaWRzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcyA9IGlkcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBjdXJyZW50VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBNYXN0ZXJEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5ncm91cENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgYXJyVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW3RoaXMubmV3RmlsdGVyKHNjaGVtYS52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgYXJyVmFsdWUpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tb2RpZnlGaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5tb2RpZnlGaWx0ZXIoZmlsdGVycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEub3JkZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWEsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJQcm9taXNlRG9udE5lZWRXYWl0LnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclNjaGVtYURvbnROZWVkV2FpdC5wdXNoKHNjaGVtYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gaXRlbSA9PiBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ2xhYmVsJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gc2NoZW1hLmRhdGFTb3VyY2UuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBpdGVtRGF0YVtmaWVsZF0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFyclByb21pc2VEb250TmVlZFdhaXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyclJlcyA9IGF3YWl0IFByb21pc2UuYWxsKGFyclByb21pc2VEb250TmVlZFdhaXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyclNjaGVtYURvbnROZWVkV2FpdC5mb3JFYWNoKChzY2hlbWEsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2UsIHNjaGVtYSwgYXJyUmVzW2luZGV4XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFmdGVyR2V0UmVmRGF0YURyb3Bkb3duKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5VG9UcmluaEt5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgc2NoZW1hOiBDb2x1bW5TY2hlbWFCYXNlLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGRhdGEgPz89IFtdO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHsgfTtcclxuICAgICAgICBsZXQgZnVuY0dldFJlZkRhdGFSb3cgPSAocmVmSXRlbXMpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZkl0ZW1zLm1hcChpdGVtID0+IGZ1bmNHZXRMYWJlbChpdGVtKSkuam9pbihgJHtzY2hlbWEuc2VwYXJhdG9yfSBgKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93KSB7XHJcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3cpIHtcclxuICAgICAgICAgICAgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW1zID0gZGF0YS5maWx0ZXIoaSA9PiBpZHMuc29tZShxID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBxKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldFJlZkRhdGFSb3cocmVmSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSBkYXRhLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgaXRlbURhdGFbZmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KGl0ZW1EYXRhLCByZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZnRlckdldFJlZkRhdGFEcm9wZG93bihmaWVsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hOiBDb2x1bW5TY2hlbWFCYXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wZG93bk9wdGlvbnMoe1xyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHNjaGVtYS5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHNjaGVtYS52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHNjaGVtYS5maWVsZFBsdXMsXHJcbiAgICAgICAgICAgIGZpZWxkVHJlZTogc2NoZW1hLmZpZWxkVHJlZSxcclxuICAgICAgICAgICAgZmllbGRQYXJlbnRUcmVlSXRlbTogc2NoZW1hLmZpZWxkUGFyZW50VHJlZUl0ZW0sXHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogc2NoZW1hLmZ1bmNHZXRMYWJlbCxcclxuICAgICAgICAgICAgc29ydEZpZWxkOiBzY2hlbWEuc29ydEZpZWxkLFxyXG4gICAgICAgICAgICBzb3J0RGlyOiBzY2hlbWEuc29ydERpcixcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhRmluaXNoOiBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24oZmllbGQ6IHN0cmluZykge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lcmdlSW5mb1RvQ29sdW1uU2NoZW1hKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uTW9kZWxTY2hlbWEgPSB0aGlzLnNldHRpbmcubW9kZWxTY2hlbWFzLmZpbmQocCA9PiBwLmZpZWxkID09IGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5Nb2RlbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgY29sLmxhYmVsID0gY29sdW1uTW9kZWxTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgIGNvbC5mdWxsTGFiZWwgPSBjb2x1bW5Nb2RlbFNjaGVtYS5mdWxsTmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICghY29sLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sLmRhdGFUeXBlID0gdGhpcy5nZXREYXRhVHlwZShjb2x1bW5Nb2RlbFNjaGVtYS5kYXRhVHlwZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERhdGFUeXBlKHR5cGU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2VuZXJhdGVGaWVsZFNlYXJjaFRleHQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29sLmZ1bGxUZXh0U2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0LnB1c2goY29sLmZpZWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0LmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBmaWVsZCwgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sIHNvdXJjZUZpZWxkOiAnX2snIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpbHRlclRlbXBsYXRlQWR2cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpbHRlclRlbXBsYXRlQWR2cy5zcGxpY2UoMCwgMCwgbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyc1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVQZXJtaXNzaW9uKHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcnVkTGlzdC52YWxpZGF0ZVBlcm1pc3Npb24ocm93RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iXX0=
|