tnx-shared 5.3.257 → 5.3.258
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 +8 -6
- 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/list-base.d.ts +2 -0
- package/classes/base/list-base.d.ts.map +1 -1
- package/esm2015/classes/base/list-base.js +3 -3
- package/esm2015/services/base.service.js +5 -5
- package/fesm2015/tnx-shared.js +6 -6
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/base.service.d.ts +2 -2
- package/services/base.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -53,6 +53,8 @@ export declare abstract class ListBase<T extends IListComponent> extends Compone
|
|
|
53
53
|
useDefaltSort: boolean;
|
|
54
54
|
defaultSortField: string;
|
|
55
55
|
defaultSortDir: 1 | -1;
|
|
56
|
+
deletePlusUrl: string;
|
|
57
|
+
deleteManyPlusUrl: string;
|
|
56
58
|
/**
|
|
57
59
|
* Addtional fields to add to gridInfo.fields when using setting.autoGenerateSelectFields
|
|
58
60
|
* @date 11/4/2022 - 2:03:19 PM
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-base.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/classes/base/list-base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAa,QAAQ,EAAS,SAAS,EAAsC,MAAM,eAAe,CAAC;AAC7H,OAAO,EAAkB,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAIvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0EAA0E,CAAC;AAEnH,OAAO,EAAU,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,+BAA+B,EAAE,MAAM,mDAAmD,CAAC;AACpG,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AAEnF,OAAO,EAGH,YAAY,EACZ,YAAY,EACZ,eAAe,EAEf,YAAY,EAEZ,SAAS,EACT,QAAQ,EAEX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,4DAA4D,CAAC;AAE7F,OAAO,EAAkC,iBAAiB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGjG,8BACsB,QAAQ,CAAC,CAAC,SAAS,cAAc,CAAE,SAAQ,uBAAuB;IAC7E,QAAQ,EAAE,CAAC,CAAC;IAEK,gBAAgB,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACvE,IAAkC,eAAe,CAAC,OAAO,EAAE,CAAC,EAE3D;IACD,IAAmC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAE7D;IAEQ,WAAW,EAAE,YAAY,CAAC;IAC1B,wBAAwB,EAAE,OAAO,CAAC;IAE3C,OAAO,CAAC,2BAA2B,CAAqC;IACxE,OAAO,EAAE,eAAe,CAAyB;IACjD,KAAK,EAAE,YAAY,CAAsB;IACzC,SAAS,EAAE,YAAY,CAAsB;IAC7C,aAAa,EAAE,GAAG,CAAM;IACxB,cAAc,UAAS;IACvB,WAAW,EAAE,GAAG,CAAM;IACtB,UAAU,SAAK;IACf,aAAa,SAAK;IAClB,mBAAmB,EAAE,YAAY,CAAM;IAEvC,WAAW,UAAQ;IACnB,aAAa,UAAS;IACtB,cAAc,UAAS;IACvB,cAAc,UAAS;IACvB,OAAO,SAAM;IACb,cAAc,MAAC;IACf,gBAAgB,EAAE,GAAG,CAAM;IAC3B,cAAc,EAAE,GAAG,CAAC;IACpB,YAAY,YAAqC;IACjD,aAAa,UAAQ;IACrB,gBAAgB,SAAa;IAC7B,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,CAAM;
|
|
1
|
+
{"version":3,"file":"list-base.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/classes/base/list-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -914,7 +914,7 @@ export class ListBase extends ComponentBaseWithButton {
|
|
|
914
914
|
};
|
|
915
915
|
}
|
|
916
916
|
getPromiseDeleteItem(rowData) {
|
|
917
|
-
return this.setting.baseService.delete(rowData.id);
|
|
917
|
+
return this.setting.baseService.delete(rowData.id, this.deletePlusUrl);
|
|
918
918
|
}
|
|
919
919
|
_delete(rowData) {
|
|
920
920
|
if (rowData.__disableDelete) {
|
|
@@ -948,7 +948,7 @@ export class ListBase extends ComponentBaseWithButton {
|
|
|
948
948
|
}
|
|
949
949
|
getPromiseDeleteItems(items) {
|
|
950
950
|
const ids = items.map(x => x.id).join(',');
|
|
951
|
-
return this.setting.baseService.deleteMany(ids);
|
|
951
|
+
return this.setting.baseService.deleteMany(ids, this.deleteManyPlusUrl);
|
|
952
952
|
}
|
|
953
953
|
_deleteMultiple(items) {
|
|
954
954
|
this._notifierService.showDeleteConfirm('Bạn có chắc chắn muốn xóa bản ghi đã chọn (Và các bản ghi con tương ứng)?').then(rs => {
|
|
@@ -1002,4 +1002,4 @@ ListBase.propDecorators = {
|
|
|
1002
1002
|
parentModel: [{ type: Input }],
|
|
1003
1003
|
loadDetailFromQueryParam: [{ type: Input }]
|
|
1004
1004
|
};
|
|
1005
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NsYXNzZXMvYmFzZS9saXN0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDM0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDbkgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixD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QWlCOytCQUczQixTQUFTLFNBQUMsa0JBQWtCOzBCQUk1QixLQUFLO3VDQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBJbmplY3RvciwgSW5wdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmltcG9ydCB7IENydWRMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jcnVkL2NydWQtbGlzdC9jcnVkLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IFRyZWVUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC90cmVlLXRhYmxlL3RyZWUtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9lbnRpdHktcGVybWlzc2lvbi9zZXJ2aWNlcy5jcy9lbnRpdHktcGVybWlzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgRmlsdGVyLCBHcmlkSW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IEtleVZhbHVlVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy90eXBlcyc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tUm91dGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXhwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTGlzdEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saXN0LWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IFN0YXRlTWFjaGluZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdGVtYWNoaW5lcy5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93b3JrZmxvdy1wZXJtaXNzaW9uLWRldGFpbC5zZXJ2aWNlJztcbmltcG9ydCB7IFdvcmtmbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd29ya2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtU3RhdGUsIEtleUZsYXNoU2hvdywgV2ZJdGVtLCBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gICAgQ29sdW1uU2NoZW1hQmFzZSxcbiAgICBDb250cm9sVHlwZSxcbiAgICBDcnVkRm9ybURhdGEsXG4gICAgQ3J1ZExpc3REYXRhLFxuICAgIENydWRMaXN0U2V0dGluZyxcbiAgICBEcm9wZG93bk9wdGlvbnMsXG4gICAgRmllbGRSb3dTcGFuLFxuICAgIE9wZXJhdG9yLFxuICAgIFBvcHVwU2l6ZSxcbiAgICBSZWZGaWVsZCxcbiAgICBUZXh0QWxpZ25cbn0gZnJvbSAnLi4vZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgQ29tcG9uZW50QmFzZVdpdGhCdXR0b24gfSBmcm9tICcuL2NvbXBvbmVudC1iYXNlLXdpdGgtYnV0dG9uJztcbmltcG9ydCB7IElMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9pLWxpc3QtY29tcG9uZW50JztcbmltcG9ydCB7IENvbmdWaWVjU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY29uZ3ZpZWMtcGlja2VyL3NlcnZpY2VzL2Nvbmd2aWVjLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2F1SGluaFdvcmtmbG93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhdWhpbmgtd29ya2Zsb3cuc2VydmljZSc7XG5pbXBvcnQgeyBFbnVtUHJvcGVydGllcywgUGVybWlzc2lvbkJhc2UsIFBlcm1pc3Npb25TZXJ2aWNlLCBUbk1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XG5cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGlzdEJhc2U8VCBleHRlbmRzIElMaXN0Q29tcG9uZW50PiBleHRlbmRzIENvbXBvbmVudEJhc2VXaXRoQnV0dG9uIHtcbiAgICBwdWJsaWMgY3J1ZExpc3Q6IFQ7XG5cbiAgICBAVmlld0NoaWxkcmVuKCdidXR0b24nKSBsc3RCdXR0b25FbGVtZW50OiBRdWVyeUxpc3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICAgIEBWaWV3Q2hpbGQoQ3J1ZExpc3RDb21wb25lbnQpIHNldCBjb250ZW50Q3J1ZExpc3QoY29udGVudDogVCkge1xuICAgICAgICB0aGlzLnNldE1haW5MaXN0Q29tcG9uZW50VmFsdWUoY29udGVudCk7XG4gICAgfVxuICAgIEBWaWV3Q2hpbGQoVHJlZVRhYmxlQ29tcG9uZW50KSBzZXQgY29udGVudFRyZWVUYWJsZShjb250ZW50OiBUKSB7XG4gICAgICAgIHRoaXMuc2V0TWFpbkxpc3RDb21wb25lbnRWYWx1ZShjb250ZW50KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBwYXJlbnRNb2RlbDogQ3J1ZExpc3REYXRhO1xuICAgIEBJbnB1dCgpIGxvYWREZXRhaWxGcm9tUXVlcnlQYXJhbTogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgbm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlID0gJ0NoxrBhIGPhuqV1IGjDrG5oIENSVUQgYmFzZSBzZXJ2aWNlJztcbiAgICBzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XG4gICAgbW9kZWw6IENydWRMaXN0RGF0YSA9IG5ldyBDcnVkTGlzdERhdGEoKTtcbiAgICBmb3JtTW9kZWw6IENydWRGb3JtRGF0YSA9IG5ldyBDcnVkRm9ybURhdGEoKTtcbiAgICBzY29wZURhdGFFZGl0OiBhbnkgPSB7fTtcbiAgICBzaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xuICAgIGVudmlyb25tZW50OiBhbnkgPSB7fTtcbiAgICBjb3VudFJlYWR5ID0gMDtcbiAgICBudW1iZXJPZlBpbmVkID0gMztcbiAgICBkZWZhdWx0RmlsdGVyQ29sdW1uOiBLZXlWYWx1ZVR5cGUgPSB7fTtcblxuICAgIGhhc0NydWRMaXN0ID0gdHJ1ZTtcbiAgICBjdXN0b21HZXREYXRhID0gZmFsc2U7XG4gICAgcmVhZHlUb1RyaW5oS3kgPSBmYWxzZTtcbiAgICBzaG93QWxsQnV0dG9ucyA9IGZhbHNlO1xuICAgIHBsdXNVcmwgPSAnJztcbiAgICBsb2FkaW5nVGltZW91dDtcbiAgICBkYXRhU2VhcmNoQ29tbW9uOiBhbnkgPSB7fTtcbiAgICByb3dEYXRhQ3VycmVudDogYW55O1xuICAgIHBvcHVwU2l6ZU1heCA9IG5ldyBQb3B1cFNpemUoeyBtYXhpbWl6ZTogdHJ1ZSB9KTtcbiAgICB1c2VEZWZhbHRTb3J0ID0gdHJ1ZTtcbiAgICBkZWZhdWx0U29ydEZpZWxkID0gJ2NyZWF0ZWQnO1xuICAgIGRlZmF1bHRTb3J0RGlyOiAxIHwgLTEgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEFkZHRpb25hbCBmaWVsZHMgdG8gYWRkIHRvIGdyaWRJbmZvLmZpZWxkcyB3aGVuIHVzaW5nIHNldHRpbmcuYXV0b0dlbmVyYXRlU2VsZWN0RmllbGRzXG4gICAgICogQGRhdGUgMTEvNC8yMDIyIC0gMjowMzoxOSBQTVxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ1tdfVxuICAgICAqL1xuICAgIGFkZGl0aW9uYWxGaWVsZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBwcm90ZWN0ZWQgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfY3VzdG9tUm91dGVyU2VydmljZTogQ3VzdG9tUm91dGVyU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX2xpc3RIZWxwZXJTZXJ2aWNlOiBMaXN0SGVscGVyU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX3JvdXRlcjogUm91dGVyO1xuICAgIHByb3RlY3RlZCBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfZGF0ZVBpcGU6IERhdGVQaXBlO1xuICAgIHByb3RlY3RlZCBfY2Q6IENoYW5nZURldGVjdG9yUmVmO1xuICAgIHByb3RlY3RlZCBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfbWFzdGVyRGF0YVNlcnZpY2U6IE1hc3RlckRhdGFTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfZW50aXR5UGVybWlzc2lvblNlcnZpY2U6IEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfd29ya2Zsb3dTZXR0aW5nU2VydmljZTogV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlOiBXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfc3RhdGVNYWNoaW5lc1NlcnZpY2U6IFN0YXRlTWFjaGluZXNTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfY29uZ1ZpZWNTZXJ2aWNlSW5CYXNlOiBDb25nVmllY1NlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9wZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9sb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuXG4gICAgY29uc3RydWN0b3IoX2luamVjdG9yOiBJbmplY3RvciwgX2lzVHJlZUxpc3Q6IGJvb2xlYW4pIHtcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcbiAgICAgICAgY29uc3QgbW9kdWxlQ29uZmlnU2VydmljZSA9IF9pbmplY3Rvci5nZXQoTW9kdWxlQ29uZmlnU2VydmljZSk7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBtb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IHRoaXMuX2luamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIHRoaXMuX3JvdXRlciA9IHRoaXMuX2luamVjdG9yLmdldChSb3V0ZXIpO1xuICAgICAgICB0aGlzLl9jdXN0b21Sb3V0ZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEN1c3RvbVJvdXRlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9saXN0SGVscGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChMaXN0SGVscGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRXhwb3J0U2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENydWRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fZGF0ZVBpcGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoRGF0ZVBpcGUpO1xuICAgICAgICB0aGlzLl9jZCA9IHRoaXMuX2luamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFVzZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fbWFzdGVyRGF0YVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTWFzdGVyRGF0YVNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9lbnRpdHlQZXJtaXNzaW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlQZXJtaXNzaW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2UpO1xuICAgICAgICB0aGlzLl93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9zdGF0ZU1hY2hpbmVzU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChTdGF0ZU1hY2hpbmVzU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZUluQmFzZSA9IHRoaXMuX2luamVjdG9yLmdldChDb25nVmllY1NlcnZpY2UpO1xuICAgICAgICB0aGlzLl9wZXJtaXNzaW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChQZXJtaXNzaW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTG9nZ2VyU2VydmljZSk7XG5cblxuICAgICAgICB0aGlzLnNldHRpbmcua2V5ID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRNYWluTGlzdENvbXBvbmVudFZhbHVlKGNvbnRlbnQ6IFQpIHtcbiAgICAgICAgY29uc3QgYmVmb3JlVmFsdWUgPSB0aGlzLmNydWRMaXN0O1xuICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdCA9IGNvbnRlbnQ7XG4gICAgICAgICAgICBpZiAoIWJlZm9yZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudFJlYWR5Kys7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWVGaWx0ZXIoKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY3J1ZExpc3QuY2hlY2tJc0luc2lkZURpYWxvZygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRJdGVtRnJvbVF1ZXJ5UGFyYW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291bnRSZWFkeSA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmJhc2VSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuYmFzZVJlYWR5ID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29scykge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMgPSB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIocSA9PiAhcS5yZW1vdmVPbkluaXQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVyZ2VJbmZvVG9Db2x1bW5TY2hlbWEoKTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZpZWxkU2VhcmNoVGV4dCgpO1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHRoaXMubm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIELhu48gxJFpLCBraMO0bmcgdGjhu4Mgc2V0IG5n4bqnbSDEkeG7i25oIG5oxrAgbsOgeSDEkcaw4bujYywgY2jhu5cgbsOgbyBkw7luZyB0aMOsIHBo4bqjaSB04buxIHNldCB1c2VXb3JrZmxvd1xuICAgICAgICAgICAgLy8gaWYgKCF0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1dvcmtmbG93KSB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyR2xvYmFsU2VydmljZSh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vZHVsZUNvbmZpZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTW9kdWxlQ29uZmlnU2VydmljZSk7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBtb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW5cbiAgICAgICAgICAgICYmIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZVxuICAgICAgICAgICAgJiYgdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW5bdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlXVxuICAgICAgICAgICAgJiYgIXRoaXMuc2V0dGluZy50YXJnZXRQYXRoXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnRhcmdldFBhdGggPSBgJHt0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpblt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGVdfS8ke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lLnRvTG93ZXJDYXNlKCl9L2RldGFpbGA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXRNZW51QnV0dG9ucyA9IHRoaXMuZ2V0TWVudUJ1dHRvbnMuYmluZCh0aGlzKTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgbWVyZ2VJbmZvVG9Db2x1bW5TY2hlbWEoKSB7XG4gICAgICAgIGxldCBpID0gMCwgY29uc3RXaWR0aCA9IDgzLCBzdW1XaWR0aCA9IDAsIHdpZHRoQ29sQmVmb3JlID0gMDsgLy8gODMgdOG7lW5nIGNoaeG7gXUgZMOgaSBjaGVja2JveCArIHN0dCBjcnVkLWxpc3RcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCkgY29uc3RXaWR0aCAtPSAzNTtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5oaWRkZW5PcmRlckNvbHVtbikgY29uc3RXaWR0aCAtPSA0ODtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuc3RpY2t5Q29sdW1uKSBjb25zdFdpZHRoID0gMDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC5pc1Bpbm5lZCAmJiBjb2wud2lkdGggJiYgaSA8IHRoaXMubnVtYmVyT2ZQaW5lZCkge1xuICAgICAgICAgICAgICAgIGxldCBsZWZ0ID0gY29uc3RXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtV2lkdGggKz0gd2lkdGhDb2xCZWZvcmU7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gc3VtV2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdpZHRoQ29sQmVmb3JlID0gTnVtYmVyKGNvbC53aWR0aC5yZXBsYWNlKC9cXEQvZywgJycpKTtcbiAgICAgICAgICAgICAgICBjb2wubGVmdCA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgY29sLmNsYXNzICs9ICd0aC1zdGlja3ktY29sdW1uJztcbiAgICAgICAgICAgICAgICBjb2wuY2VsbENsYXNzID0gJ3RoLXN0aWNreS1jb2x1bW4nO1xuICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbk1vZGVsU2NoZW1hID0gdGhpcy5zZXR0aW5nLm1vZGVsU2NoZW1hcy5maW5kKHAgPT4gcC5maWVsZCA9PSBjb2wuZmllbGQpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbk1vZGVsU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbk1vZGVsU2NoZW1hLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sLmxhYmVsID0gY29sdW1uTW9kZWxTY2hlbWEubmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbk1vZGVsU2NoZW1hLmZ1bGxOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5mdWxsTGFiZWwgPSBjb2x1bW5Nb2RlbFNjaGVtYS5mdWxsTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29sLmlzRm9yZWlnbkZpZWxkID0gY29sLmRpc3BsYXlGaWVsZEluR3JpZCAmJiBjb2wuZGlzcGxheUZpZWxkSW5HcmlkICE9IGNvbC5kaXNwbGF5RmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKCFjb2wuZGlzcGxheUZpZWxkSW5HcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5kaXNwbGF5RmllbGRJbkdyaWQgPSBjb2wuZGlzcGxheUZpZWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWNvbC5kYXRhVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjb2wuZGF0YVR5cGUgPSB0aGlzLmdldERhdGFUeXBlKGNvbHVtbk1vZGVsU2NoZW1hLmRhdGFUeXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0YVR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVGaWVsZFNlYXJjaFRleHQoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGlmIChjb2wuZnVsbFRleHRTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0LnB1c2goY29sLmZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZFNlYXJjaFRleHQuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBuZXcgRmlsdGVyKHsgZmllbGQsIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLCBzb3VyY2VGaWVsZDogJ19rJyB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5maWx0ZXJUZW1wbGF0ZUFkdnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmlsdGVyVGVtcGxhdGVBZHZzLnNwbGljZSgwLCAwLCBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcmVnaXN0ZXJHbG9iYWxTZXJ2aWNlKHNlcnZpY2U6IEJhc2VTZXJ2aWNlKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHNlcnZpY2UuZ2V0S2V5V29ya2Zsb3dTZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHNlcnZpY2UpO1xuICAgICAgICB0aGlzLl93b3JrZmxvd1NldHRpbmdTZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHNlcnZpY2UpO1xuICAgIH1cblxuICAgIGdldE1lbnVCdXR0b25zKHJvd0RhdGEpOiBhbnlbXSB8IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgdGhpcy5yb3dEYXRhQ3VycmVudCA9IHJvd0RhdGE7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFuZGxlQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkaW5nVGltZW91dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAoKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAmJiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UudXNlV29ya2Zsb3cpXG4gICAgICAgICAgICB8fCB0aGlzLnNldHRpbmcuaXNXb3JrZmxvd1RyZWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSGFzV29ya2Zsb3coKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy5jb3VudFJlYWR5Kys7XG4gICAgICAgIGlmICh0aGlzLmNvdW50UmVhZHkgPiAxKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmJhc2VSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERlZmF1bHRWYWx1ZUZpbHRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEZpbHRlckNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5zZXRJbml0RmlsdGVyKHRoaXMuZGVmYXVsdEZpbHRlckNvbHVtbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAjcmVnaW9uIEdldCBEYXRhXG4gICAgYXN5bmMgcmVsb2FkKCkge1xuICAgICAgICB0aGlzLmNydWRMaXN0LnJlbG9hZCgpO1xuICAgIH1cblxuICAgIGFzeW5jIF90cmlnZ2VyUHJvY2Vzc0RhdGEoaW5mb0dldERhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKGluZm9HZXREYXRhPy5kYXRhU2VhcmNoQ29tbW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTZWFyY2hDb21tb24gPSBpbmZvR2V0RGF0YS5kYXRhU2VhcmNoQ29tbW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5iYXNlUmVhZHkpIHJldHVybjtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzRGF0YShpbmZvR2V0RGF0YT8uZ3JpZEluZm8gfHwgbnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzRGF0YShncmlkSW5mbz86IEdyaWRJbmZvKSB7XG4gICAgICAgIHRoaXMucmVhZHlUb1RyaW5oS3kgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ3J1ZExpc3QpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jcnVkTGlzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcbiAgICAgICAgICAgICAgICBncmlkSW5mbyA9IHRoaXMuY3J1ZExpc3QuZ2V0R3JpZEluZm8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcbiAgICAgICAgICAgICAgICBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IDk5OVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgc29ydHM6IFtdLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGEoZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGFzeW5jIG1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbyk6IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXREYXRhKGdyaWRJbmZvOiBHcmlkSW5mbykge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlICYmIHRoaXMubW9kZWwucmVhZHkgJiYgIXRoaXMubW9kZWwubG9hZGluZykge1xuICAgICAgICAgICAgdGhpcy5fbWFya0xvYWRpbmcoKTtcbiAgICAgICAgICAgIGdyaWRJbmZvLm1vZGlmeUZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhc051bGxWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN0VmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoZmlsdGVyLnZhbHVlKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc051bGxWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0VmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc051bGxWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3RWYWx1ZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIub3BlcmF0b3IgPSBPcGVyYXRvci5pc051bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmxvZ2ljID0gJ29yJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWVsZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsIE9wZXJhdG9yLmlzTnVsbCwgJycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsIE9wZXJhdG9yLmluLCByZXN0VmFsdWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5hdXRvR2VuZXJhdGVTZWxlY3RGaWVsZHMgPT09IHRydWUgJiYgdGhpcy5zZXR0aW5nLmNvbHMgJiYgdGhpcy5zZXR0aW5nLmNvbHMubGVuZ3RoID4gMCAmJiAhdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sczogQ29sdW1uU2NoZW1hQmFzZVtdID0gdGhpcy5zZXR0aW5nLmNvbHM7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzOiBzdHJpbmdbXSA9IFsnaWQnXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2wuaXNSZWZGaWVsZCB8fCBjb2wuaW5jbHVkZVNlbGVjdCA9PT0gZmFsc2UgfHwgY29sLmZpZWxkID09IG51bGwgfHwgY29sLmZpZWxkID09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaChjb2wuZmllbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCguLi50aGlzLmFkZGl0aW9uYWxGaWVsZHMpO1xuICAgICAgICAgICAgICAgIGdyaWRJbmZvLmZpZWxkcyA9IGZpZWxkcy5qb2luKCcsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHRNb2RpZnkgPSBhd2FpdCB0aGlzLm1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZURlZmFsdFNvcnQgJiYgZ3JpZEluZm8uc29ydHMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICBncmlkSW5mby5zb3J0cy51bnNoaWZ0KHRoaXMubmV3U29ydCh0aGlzLmRlZmF1bHRTb3J0RmllbGQsIHRoaXMuZGVmYXVsdFNvcnREaXIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHRNb2RpZnkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC50b3RhbCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5leHBhbmRlZFJvd0tleXMgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9HZXRSZXF1ZXN0KGdyaWRJbmZvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZG9HZXRSZXF1ZXN0KGdyaWRJbmZvOiBHcmlkSW5mbykge1xuICAgICAgICBpZiAoIXRoaXMuY3VzdG9tR2V0RGF0YSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm8pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzR2V0RGF0YShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRGF0YUxvYWRlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZURhdGFMb2FkZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0h0dHBVbmtub3dFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRGF0YUxvYWRlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXREYXRhQ3VzdG9tKGdyaWRJbmZvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9tYXJrTG9hZGluZygpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tb2RlbC5hZGp1c3RlZFBvc2l0aW9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCkge1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5hZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xuICAgICAgICB0aGlzLmxvYWRpbmdUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ03DoXkgY2jhu6cgcGjhuqNuIGjhu5NpIHF1w6EgbMOidSwgdnVpIGzDsm5nIGtp4buDbSB0cmEgbOG6oWkgxJHGsOG7nW5nIHRydXnhu4FuIG3huqFuZyEnKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9LCAyMDAwMCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZVJlbG9hZGVkKGV2dCA9IG51bGwpIHtcbiAgICAgICAgaWYgKGV2dCA9PT0gRW51bVByb3BlcnRpZXMuUkVUUklFVkVfQlVUVE9OX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LnJldHJpZXZlQnV0dG9uVGVtcGxhdGUodGhpcy5sc3RCdXR0b25FbGVtZW50W0VudW1Qcm9wZXJ0aWVzLlJFU1VMVFNdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJSZWxvYWRlZCgpO1xuICAgIH1cblxuICAgIGFzeW5jIGFmdGVyUmVsb2FkZWQoKSB7XG4gICAgfVxuXG4gICAgX3VubWFya0xvYWRpbmcoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5tb2RlbC5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaXJlRGF0YUxvYWRlZChzdWNjZXNzOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBpZiAoc3VjY2VzcyAmJiB0aGlzLmNydWRMaXN0KSB7XG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LnByb2Nlc3NCYXNlRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcbiAgICB9XG5cbiAgICBnZXRQcm9taXNlR2V0RGF0YShncmlkSW5mbzogR3JpZEluZm8pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCB0aGlzLnBsdXNVcmwpO1xuICAgIH1cblxuICAgIGdldERhdGFDdXN0b20oZ3JpZEluZm86IEdyaWRJbmZvKSB7XG5cbiAgICB9XG5cbiAgICBhc3luYyBfZ2V0RGF0YVNvdXJjZShyZXNwb25zZTogUmVzcG9uc2VSZXN1bHQpOiBQcm9taXNlPFthbnlbXSwgYW55W11dPiB7XG4gICAgICAgIHJldHVybiBbW10sIFtdXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHByb2Nlc3NHZXREYXRhKHJlc3BvbnNlOiBSZXNwb25zZVJlc3VsdCkge1xuICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5cyA9IHt9O1xuICAgICAgICB0aGlzLm1vZGVsLnRvdGFsID0gcmVzcG9uc2UudG90YWxSZWNvcmQ7XG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5tZXJnZVJlZkZpZWxkcyhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlUmVuZGVyRGF0YVNvdXJjZShyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbZGF0YVNvdXJjZSwgcmF3RGF0YVNvdXJjZV0gPSBhd2FpdCB0aGlzLl9nZXREYXRhU291cmNlKHJlc3BvbnNlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZnRlclByb2Nlc3NEYXRhSW5CYXNlKGRhdGFTb3VyY2UpO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCAmJiB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEluQ2xpZW50KSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwSW5DbGllbnQoZGF0YVNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcbiAgICAgICAgdGhpcy5tb2RlbC5hbGxEYXRhU291cmNlID0ge1xuICAgICAgICAgICAgcmF3OiByYXdEYXRhU291cmNlLFxuICAgICAgICAgICAgZGF0YTogZGF0YVNvdXJjZVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc2V0U2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xuICAgICAgICBpZiAocmVzZXRTZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJHZXREYXRhKCk7XG4gICAgICAgIC8vIHRoaXMuX2dldFJlZkRhdGFEcm9wZG93bih0aGlzLm1vZGVsLmRhdGFTb3VyY2UpO1xuICAgICAgICAvLyBLIGTDuW5nIGjDoG0g4bufIHRyw6puIHbDrCDEkeG7kWkgduG7m2kgdHJlZSBsaXN0IHRow6wgbW9kZWwuZGF0YVNvdXJjZSDEkcOjIGLhu4sgdMOhaSBj4bqldSB0csO6Y1xuICAgICAgICB0aGlzLl9nZXRSZWZEYXRhRHJvcGRvd24ocmF3RGF0YVNvdXJjZSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRBdXRob3JpemVCdXR0b25zKCk7XG4gICAgICAgIH0sIDEwKTtcbiAgICB9XG5cbiAgICBhc3luYyBzZXRBdXRob3JpemVCdXR0b25zKCkge1xuICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCAmJiAhdGhpcy5zZXR0aW5nLmhpZGRlbkF1dGhvcml6ZUJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5zZXRBdXRob3JpemVCdXR0b24odGhpcy5sc3RCdXR0b25FbGVtZW50W0VudW1Qcm9wZXJ0aWVzLlJFU1VMVFNdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldE1lbnVCdXR0b25DdXN0b21BdXRob3JpemVkKG1lbnVCdXR0b25zOiBUbk1lbnVJdGVtW10pOiBQcm9taXNlPFRuTWVudUl0ZW1bXT4ge1xuICAgICAgICBjb25zdCBidXR0b25TZXR0aW5nOiBhbnkgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQlVUVE9OX0FVVEhPUklaRSkgfHwgJ3t9Jyk7XG4gICAgICAgIGxldCBhdXRob3JpemVCdXR0b25LZXkgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvXFwvL2csICdfJyk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VDb2RlID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgYXV0aG9yaXplQnV0dG9uS2V5ID0gYCR7c2VydmljZUNvZGV9XyR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbHN0QnV0dG9uQXV0aG9yaXplID0gYnV0dG9uU2V0dGluZ1thdXRob3JpemVCdXR0b25LZXldO1xuICAgICAgICBpZiAoIWxzdEJ1dHRvbkF1dGhvcml6ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVudUJ1dHRvbnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgY29uc3QgYXV0aG9yaXplZEJ1dHRvbnM6IFRuTWVudUl0ZW1bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWVudUJ1dHRvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBsc3RCdXR0b25BdXRob3JpemUuZmluZChwID0+IHAuY29kZSA9PSBpdGVtLmF1dGhvcml6YXRpb25QZXJtaXNzaW9uKTtcbiAgICAgICAgICAgIGlmICghaXRlbS5hdXRob3JpemF0aW9uUGVybWlzc2lvbiB8fCAhcGVybWlzc2lvbikge1xuICAgICAgICAgICAgICAgIGF1dGhvcml6ZWRCdXR0b25zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmlzQXV0aG9yaXplZChpdGVtLmF1dGhvcml6YXRpb25TZXJ2aWNlQ29kZSB8fCBzZXJ2aWNlQ29kZSwgcGVybWlzc2lvbiA/IHBlcm1pc3Npb24uY29kZSA6IGl0ZW0uYXV0aG9yaXphdGlvblBlcm1pc3Npb24sIHRydWUpLnRoZW4oYXV0aG9yaXplZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdXRob3JpemVkICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXplZEJ1dHRvbnMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgIHJldHVybiBhdXRob3JpemVkQnV0dG9ucztcbiAgICB9XG5cblxuICAgIGJlZm9yZVJlbmRlckRhdGFTb3VyY2UoZGF0YXNvdXJjZTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGRhdGFzb3VyY2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZXJnZVJlZkZpZWxkcyhkYXRhU291cmNlOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBzY2hlbWFzID0gdGhpcy5zZXR0aW5nLmNvbHMuZmlsdGVyKHAgPT4gcC5pc0ZvcmVpZ25GaWVsZCAmJiAhIXAuZGlzcGxheUZpZWxkSW5HcmlkICYmICFwLmZpZWxkLnN0YXJ0c1dpdGgoJ3N0cicpKTtcbiAgICAgICAgaWYgKCFzY2hlbWFzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3Qgcm93RGF0YSBvZiBkYXRhU291cmNlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgICAgICAgICAgICAgcm93RGF0YVsnc3RyJyArIHNjaGVtYS5maWVsZF0gPSByb3dEYXRhW3NjaGVtYS5kaXNwbGF5RmllbGRJbkdyaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlUm93U3BhbihkYXRhU291cmNlOiBhbnlbXSwgZmllbGRzOiBGaWVsZFJvd1NwYW5bXSwgZnVuY05leHQ/OiBGdW5jdGlvbikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFTb3VyY2UubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZnVuY05leHQgJiYgZnVuY05leHQoZGF0YVNvdXJjZVtpXSkgIT0gZnVuY05leHQoZGF0YVNvdXJjZVtpICsgMV0pKSBjb250aW51ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGVsZW1lbnQuZmllbGQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRSb290SW5kZXggPSBgcm9vdEluZGV4XyR7ZmllbGR9YDtcbiAgICAgICAgICAgICAgICBsZXQgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5mdW5jR2V0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBlbGVtZW50LmZ1bmNHZXRWYWx1ZShkYXRhU291cmNlW2kgKyAxXSkgPT0gZWxlbWVudC5mdW5jR2V0VmFsdWUoZGF0YVNvdXJjZVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcXVhbCA9IGRhdGFTb3VyY2VbaSArIDFdW2ZpZWxkXSA9PSBkYXRhU291cmNlW2ldW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVxdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhU291cmNlW2ldW2ZpZWxkUm9vdEluZGV4XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2ldW2ZpZWxkUm9vdEluZGV4XSA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFTb3VyY2VbaV0ucm93U3Bhbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VbaV0ucm93U3BhbiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZVtpXS5yb3dTcGFuW2ZpZWxkXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhSb290SXRlbSA9IGRhdGFTb3VyY2VbaV1bZmllbGRSb290SW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2kgKyAxXVtmaWVsZFJvb3RJbmRleF0gPSBpbmRleFJvb3RJdGVtO1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2luZGV4Um9vdEl0ZW1dLnJvd1NwYW5bZmllbGRdKys7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZVtpICsgMV0uaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2kgKyAxXS5oaWRkZW4gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2kgKyAxXS5oaWRkZW5bZmllbGRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBhZnRlclByb2Nlc3NEYXRhSW5CYXNlKGRhdGFTb3VyY2U6IGFueVtdID0gW10pIHtcblxuICAgIH1cblxuICAgIGFzeW5jIGFmdGVyR2V0RGF0YSgpIHtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRow6ptIHJlZkZpZWxkIHbDoG8gY3J1ZCBsaXN0IHRyxrDhu5tjIGtoaSB04buVbmcgaOG7o3AgZOG7ryBsaeG7h3VcbiAgICAgKiBz4bq9IG92ZXJyaWRlIGPDoWMgZmllbGQgYuG7iyB0csO5bmdcbiAgICAgKiBAcGFyYW0gcmVmRmllbGRzXG4gICAgICovXG4gICAgYWRkUmVmRmllbGRzKHJlZkZpZWxkczogUmVmRmllbGRbXSkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZiA9PSBudWxsIHx8IHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmID0gWy4uLnJlZkZpZWxkc107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByZWZGaWVsZCBvZiByZWZGaWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFJlZkluZGV4ID0gdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZi5maW5kSW5kZXgoeCA9PiB4LmZpZWxkID09IHJlZkZpZWxkLmZpZWxkKTtcbiAgICAgICAgICAgIGlmIChvbGRSZWZJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLnB1c2gocmVmRmllbGQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZltvbGRSZWZJbmRleF0gPSByZWZGaWVsZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdyb3VwSW5DbGllbnQoZGF0YVNvdXJjZSkge1xuICAgICAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPT0gMCkgcmV0dXJuO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGdyb3VwRmllbGQgPSB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbikge1xuICAgICAgICAgICAgICAgIGdyb3VwRmllbGQgPSB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4ucmF3Q29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zb3J0RGF0YVNvdXJjZUJ5R3JvdXBGaWVsZChkYXRhU291cmNlLCBncm91cEZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNvcnREYXRhU291cmNlQnlHcm91cEZpZWxkKGRhdGFTb3VyY2U6IGFueVtdLCBncm91cEZpZWxkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZGljOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnlbXTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFTb3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlR3JvdXAgPSBkYXRhU291cmNlW2ldW2dyb3VwRmllbGRdO1xuICAgICAgICAgICAgaWYgKCFkaWNbdmFsdWVHcm91cF0pIHtcbiAgICAgICAgICAgICAgICBkaWNbdmFsdWVHcm91cF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpY1t2YWx1ZUdyb3VwXS5wdXNoKGRhdGFTb3VyY2VbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVNvdXJjZS5zcGxpY2UoMCwgZGF0YVNvdXJjZS5sZW5ndGgpO1xuICAgICAgICBPYmplY3QudmFsdWVzKGRpYykuZm9yRWFjaCh2YWx1ZXMgPT4ge1xuICAgICAgICAgICAgZGF0YVNvdXJjZS5wdXNoKC4uLnZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfZ2V0UmVmRGF0YURyb3Bkb3duKGRhdGFTb3VyY2UpIHtcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBsc3RGaWVsZE5lZWRHZXRSZWYgPSB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLmZpbHRlcihwID0+ICFwLmlzRm9yZWlnbkZpZWxkKTtcbiAgICAgICAgICAgIGlmIChsc3RGaWVsZE5lZWRHZXRSZWYpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jcnVkU2VydmljZS5nZXRSZWZEYXRhSW5EYXRhc291cmNlKFxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICBsc3RGaWVsZE5lZWRHZXRSZWYsXG4gICAgICAgICAgICAgICAgICAgIChmaWVsZCkgPT4gdGhpcy5hZnRlckdldFJlZkRhdGFEcm9wZG93bihmaWVsZClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24obnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5VG9UcmluaEt5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFmdGVyR2V0UmVmRGF0YURyb3Bkb3duKGZpZWxkOiBzdHJpbmcpIHtcblxuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb25cblxuICAgIC8vICNyZWdpb24gV29ya2Zsb3dcblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tIYXNXb3JrZmxvdygpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEtleVdvcmtmbG93U2V0dGluZygpO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93KSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhV29ya2Zsb3dOZXcgPSAoYXdhaXQgdGhpcy5fd29ya2Zsb3dTZXR0aW5nU2VydmljZS5nZXREZXRhaWxCeUZpbHRlcihbXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ3RhYmxlTmFtZScsIE9wZXJhdG9yLmVxdWFsLCBrZXkpXG4gICAgICAgICAgICBdKSkuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyR2xvYmFsU2VydmljZSh0aGlzLl9jb25nVmllY1NlcnZpY2VJbkJhc2UpO1xuICAgICAgICAgICAgaWYgKGRhdGFXb3JrZmxvd05ldykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0V29ya2Zsb3dEZXRhaWxCeVdvcmtmbG93U2V0dGluZyhkYXRhV29ya2Zsb3dOZXcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcgPSBkYXRhV29ya2Zsb3dOZXc7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDb2xXb3JrZmxvd1N0YXR1cyhkYXRhV29ya2Zsb3dOZXcud29ya2Zsb3dzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2V0dGluZy5pc1dvcmtmbG93VHJlZSkge1xuICAgICAgICAgICAgICAgIC8vIEzhuqV5IHJhIHRvw6BuIGLhu5kgY+G6pXUgaMOsbmggd29ya2Zsb3cgY3VzdG9tIMSR4buDIGzhuqV5IGRhdGFzb3VyY2UgdHLhuqFuZyB0aMOhaVxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmdldERhdGFTb3VyY2VUcmFuZ1RoYWlXb3JrZmxvdygpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ29sV29ya2Zsb3dTdGF0dXMoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldFdvcmtmbG93RGV0YWlsQnlXb3JrZmxvd1NldHRpbmcoaXRlbVdvcmtmbG93U2V0dGluZzogYW55KSB7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dzID0gW107XG4gICAgICAgIGxldCB3b3JrZmxvd0NvZGVzID0gW107XG4gICAgICAgIC8vIE7hur91IHThuqFvIHRhc2sgdGhheSB2w6wgdOG6oW8gY8O0bmcgdmnhu4djXG4gICAgICAgIGlmIChpdGVtV29ya2Zsb3dTZXR0aW5nLmNyZWF0ZVRhc2tJbnN0ZWFkKSB7XG4gICAgICAgICAgICB3b3JrZmxvd0NvZGVzID0gYXdhaXQgdGhpcy5nZXRXb3JrZmxvd0NvZGVCeVRhc2soKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMgJiYgIUFycmF5LmlzQXJyYXkoaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzKSkge1xuICAgICAgICAgICAgaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzID0gaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICB3b3JrZmxvd0NvZGVzID0gaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdvcmtmbG93Q29kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZmxvd3MgPSAoYXdhaXQgdGhpcy5fc3RhdGVNYWNoaW5lc1NlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignY29kZScsIE9wZXJhdG9yLmluLCB3b3JrZmxvd0NvZGVzKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgbmV3IERyb3Bkb3duT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiAndGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZFBsdXM6ICdkYXRhJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApKTtcbiAgICAgICAgICAgIHdvcmtmbG93cz8uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLmRhdGEgPSBKU09OLnBhcnNlKGl0ZW0uZGF0YSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lRGF0YSA9IGl0ZW0uZGF0YTtcbiAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLm1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuY29ubmVjdGlvbnMuZm9yRWFjaChjb25uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uLnNvdXJjZSA9PSBtYWNoaW5lLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0ucHVzaChjb25uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dzID0gd29ya2Zsb3dzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRXb3JrZmxvd0NvZGVCeVRhc2soKSB7XG4gICAgICAgIC8vIEzhuqV5IGPDoWMgcXV5IHRyw6xuaCBn4bqvbiBjaG8gY8O0bmcgdmnhu4djXG4gICAgICAgIGNvbnN0IHBoYW5Db25nQ29uZ1ZpZWNTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENhdUhpbmhXb3JrZmxvd1NlcnZpY2UpO1xuICAgICAgICBjb25zdCBkYXRhV29ya2Zsb3dCeVRhc2sgPSAoYXdhaXQgcGhhbkNvbmdDb25nVmllY1NlcnZpY2UuZ2V0QWxsKFxuICAgICAgICAgICAgW10sICd3b3JrZmxvd0NvZGVzJ1xuICAgICAgICApKS5kYXRhO1xuICAgICAgICBpZiAoIWRhdGFXb3JrZmxvd0J5VGFzaykgcmV0dXJuIFtdO1xuICAgICAgICBjb25zdCB3b3JrZmxvd0NvZGVzID0gW107XG4gICAgICAgIGRhdGFXb3JrZmxvd0J5VGFzay5mb3JFYWNoKGNhdUhpbmggPT4ge1xuICAgICAgICAgICAgaWYgKCFjYXVIaW5oLndvcmtmbG93Q29kZXMpIHJldHVybjtcbiAgICAgICAgICAgIGNhdUhpbmgud29ya2Zsb3dDb2Rlcy5zcGxpdCgnLCcpLmZvckVhY2god29ya2Zsb3dDb2RlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2Zsb3dDb2Rlcy5pbmRleE9mKHdvcmtmbG93Q29kZSkgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2Zsb3dDb2Rlcy5wdXNoKHdvcmtmbG93Q29kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gd29ya2Zsb3dDb2RlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGVuZENvbFdvcmtmbG93U3RhdHVzKHdvcmtmbG93czogV2ZJdGVtW10pIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFt7XG4gICAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICAgIHJhd1RlbjogJ0NoxrBhIGLhuq90IMSR4bqndScsXG4gICAgICAgICAgICB0ZW46ICdDaMawYSBi4bqvdCDEkeG6p3UnLFxuICAgICAgICAgICAgbWFMb3dlcjogJycsXG4gICAgICAgICAgICB0ZW5Mb3dlcjogJ2NoxrBhIGLhuq90IMSR4bqndSdcbiAgICAgICAgfV07XG4gICAgICAgIGlmICh3b3JrZmxvd3MgJiYgd29ya2Zsb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgd29ya2Zsb3dzLmZvckVhY2god29ya2Zsb3cgPT4ge1xuICAgICAgICAgICAgICAgIHdvcmtmbG93LmRhdGEubWFjaGluZXMuZm9yRWFjaChtYWNoaW5lID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVN0YXR1cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtYWNoaW5lLmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdUZW46IG1hY2hpbmUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbjogbWFjaGluZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFMb3dlcjogbWFjaGluZS5jb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW5Mb3dlcjogbWFjaGluZS5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhU291cmNlLnNvbWUoeCA9PiB4LnRlbkxvd2VyID09IGl0ZW1TdGF0dXMudGVuTG93ZXIgJiYgeC5tYUxvd2VyID09IGl0ZW1TdGF0dXMubWFMb3dlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucHVzaChpdGVtU3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TYW1lTmFtZSA9IGRhdGFTb3VyY2UuZmluZChxID0+IHEudGVuTG93ZXIgPT0gaXRlbVN0YXR1cy50ZW5Mb3dlciAmJiBxLm1hTG93ZXIgIT0gaXRlbVN0YXR1cy5tYUxvd2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2FtZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2FtZU5hbWUudGVuID0gYCR7aXRlbVNhbWVOYW1lLnJhd1Rlbn0gKCR7aXRlbVNhbWVOYW1lLmlkfSlgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TdGF0dXMudGVuID0gYCR7aXRlbVN0YXR1cy5yYXdUZW59ICgke2l0ZW1TdGF0dXMuaWR9KWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS51c2VyRGF0YSA9IHRoaXMubW9kZWwuYWR2YW5jZURhdGEudXNlckRhdGE7XG4gICAgICAgIGNvbnN0IGNvbFBhcmVudCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgIGZpZWxkOiBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLFxuICAgICAgICAgICAgZGF0YVR5cGU6ICd0cmFuZ1RoYWlWNScsXG4gICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAndHJhbmdUaGFpVjUnLFxuICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtbixcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcbiAgICAgICAgICAgIGxhYmVsOiAnVHLhuqFuZyB0aMOhaScsXG4gICAgICAgICAgICB3aWR0aDogJzEyMHB4JyxcbiAgICAgICAgICAgIHRleHRBbGlnbjogVGV4dEFsaWduLkNlbnRlcixcbiAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcbiAgICAgICAgICAgIGZpZWxkVHJlZTogJ3BhcmVudElkJyxcbiAgICAgICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgICAgICBpbmNsdWRlU2VsZWN0OiBmYWxzZSxcbiAgICAgICAgICAgIGFsbG93RmlsdGVyOiB0aGlzLnNldHRpbmcuYWxsb3dGaWx0ZXJXb3JrZmxvd0NvbHVtblxuICAgICAgICB9KTtcbiAgICAgICAgLy8gTuG6v3UgY2jGsGEgY8OzIHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYgdGjDrCBiw6puIGNydWQtbGlzdCBz4bq9IGFkZCBj4buZdCBuw6B5IHNhdVxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZikge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZi51bnNoaWZ0KG5ldyBSZWZGaWVsZCh7XG4gICAgICAgICAgICAgICAgLi4uY29sUGFyZW50XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB7XG4gICAgICAgICAgICAuLi5jb2xQYXJlbnQsXG4gICAgICAgICAgICByYXdDb2x1bW46IGNvbFBhcmVudCxcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcbiAgICAgICAgICAgIGRhdGFUeXBlOiBjb2xQYXJlbnQuZGF0YVR5cGVSZWZGaWVsZCxcbiAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGNvbFBhcmVudC5maWVsZCxcbiAgICAgICAgICAgIGFsbG93RmlsdGVyOiBjb2xQYXJlbnQuYWxsb3dGaWx0ZXIsXG4gICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW5cbiAgICAgICAgfTtcbiAgICAgICAgY29sUGFyZW50LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xQYXJlbnQsIGNoaWxkcmVuKTtcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sUGFyZW50LCBjaGlsZHJlbl0pO1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5idWlsZEZpbHRlckNvbHVtbihbY29sUGFyZW50XSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1c2VyQ3VycmVudCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICAgIGlmICh1c2VyQ3VycmVudC51c2VyTmFtZSA9PSAnYWRtaW4nKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xGb3JBZG1pbiA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ19fdmlld0hpc3RvcnknLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnX192aWV3SGlzdG9yeScsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwcHgnLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogVGV4dEFsaWduLkNlbnRlcixcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVNlbGVjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0hpc3RvcnlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xGb3JBZG1pbik7XG4gICAgICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sRm9yQWRtaW5dKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xGb3JBZG1pbl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RGF0YVNvdXJjZVRyYW5nVGhhaVdvcmtmbG93KCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgLy8gI3JlZ2lvbiBjcnVkXG4gICAgcHJpdmF0ZSBsb2FkSXRlbUZyb21RdWVyeVBhcmFtKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkRGV0YWlsRnJvbVF1ZXJ5UGFyYW0gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmxvYWREZXRhaWxGcm9tUXVlcnlQYXJhbSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgbGV0IGlkSW5RdWVyeVN0cmluZyA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcGlkID0gbnVsbDsgLy8gcGVybWlzc2lvbiBJZCDEkcaw4bujYyBuZ8aw4budaSBraMOhYyBzaGFyZVxuICAgICAgICAgICAgaWYgKHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90XG4gICAgICAgICAgICAgICAgJiYgdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlkSW5RdWVyeVN0cmluZyA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmlkIHx8IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmVudGl0eUtleTtcbiAgICAgICAgICAgICAgICBwaWQgPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5waWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRGV0YWlsUGlkKHBpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpZEluUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgZGV0YWlsIGRhdGFcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0RGV0YWlsV2l0aFBlcm1pc3Npb24oaWRJblF1ZXJ5U3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHTDrG0gdGjhuqV5IGLhuqNuIGdoaSBj4bqnbiB4ZW0gY2hpIHRp4bq/dCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyZXMuZGF0YS5iYXNlUGVybWlzc2lvbiAmIFBlcm1pc3Npb25CYXNlLkVESVQpID09IFBlcm1pc3Npb25CYXNlLkVESVRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5SRUFEKSA9PSBQZXJtaXNzaW9uQmFzZS5SRUFEXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0KHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQuG6oW4ga2jDtG5nIGPDsyBxdXnhu4FuIHhlbSBi4bqjbiBnaGknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UubG9nRXJyb3IoJ2Vycm9yIG9uIGdldCBkZXRhaWwgZnJvbSBxdWVyeXN0cmluZycsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY+G6p24geGVtIGNoaSB0aeG6v3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWREZXRhaWxQaWQocGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldERldGFpbEJ5UGlkKHBpZClcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlcywgJycsIGYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcmVzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgYuG6o24gZ2hpIGPhuqduIHhlbSBjaGkgdGnhur90Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5FRElUKSA9PSBQZXJtaXNzaW9uQmFzZS5FRElUXG4gICAgICAgICAgICAgICAgICAgIHx8IChyZXMuZGF0YS5iYXNlUGVybWlzc2lvbiAmIFBlcm1pc3Npb25CYXNlLlJFQUQpID09IFBlcm1pc3Npb25CYXNlLlJFQURcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEucGlkID0gcGlkO1xuICAgICAgICAgICAgICAgICAgICByZXMuZGF0YS5iYXNlUGVybWlzc2lvbkJ5UGlkID0gcmVzLmRhdGEuYmFzZVBlcm1pc3Npb247XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VkaXQocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdC4bqhbiBraMO0bmcgY8OzIHF1eeG7gW4geGVtIGLhuqNuIGdoaScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UubG9nRXJyb3IoJ2Vycm9yIG9uIGdldCBkZXRhaWwgZnJvbSBxdWVyeXN0cmluZycsIGVycik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgYuG6o24gZ2hpIGPhuqduIHhlbSBjaGkgdGnhur90Jyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBfYWRkKGV2dCkge1xuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVBZGQoKTtcbiAgICAgICAgaWYgKCFyZXN1bHRWYWxpZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkFERDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBvcHVwSGVhZGVyID0gYFRow6ptIG3hu5tpICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlQWRkKCk7XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlQWRkKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBiZWZvcmVBZGQoKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgX3ZpZXcocm93RGF0YSkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNob3dFZGl0TGlua09ubHlWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3T25seShyb3dEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VkaXQocm93RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfdmlld09ubHkocm93RGF0YSkge1xuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcbiAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVWaWV3KCk7XG4gICAgICAgIHRoaXMuc2V0dGluZy5wb3B1cEhlYWRlciA9IGBDaGkgdGnhur90ICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB0aGlzLmNsb25lRGF0YShyb3dEYXRhKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlWaWV3TW9kZWwocm93RGF0YSk7XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIGJlZm9yZVZpZXcoKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgbW9kaWZ5Vmlld01vZGVsKHJvd0RhdGE6IGFueSkge1xuICAgIH1cblxuICAgIGFzeW5jIF9jb3B5TGlua011bHRpcGxlKCkge1xuICAgICAgICBjb25zdCBwYXRocyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICBwYXRocy5wdXNoKGF3YWl0IHRoaXMuZ2V0Q29weVBhdGgodGhpcy5zZXR0aW5nLCBpdGVtKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5jb3B5QnlTdG9yYWdlKHBhdGhzLmpvaW4oJ1xcclxcbicpKTtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCfEkMOjIHNhbyBjaMOpcCBjw6FjIGxpw6puIGvhur90IMSRw6MgY2jhu41uJyk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2NvcHlMaW5rKHJvd0RhdGE6IGFueSkge1xuICAgICAgICBjb25zdCBwYXRoID0gYXdhaXQgdGhpcy5nZXRDb3B5UGF0aCh0aGlzLnNldHRpbmcsIHJvd0RhdGEpO1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmNvcHlCeVN0b3JhZ2UocGF0aCk7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJDDoyBzYW8gY2jDqXAgbGnDqm4ga+G6v3QnKTtcbiAgICB9XG5cbiAgICBhc3luYyBfZWRpdChyb3dEYXRhLCBzY29wZURhdGFFZGl0OiBhbnkgPSB7fSkge1xuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVFZGl0KCk7XG4gICAgICAgIGlmICghcmVzdWx0VmFsaWRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGFzaFNob3cgPSByb3dEYXRhW0tleUZsYXNoU2hvd107XG4gICAgICAgIGRlbGV0ZSByb3dEYXRhW0tleUZsYXNoU2hvd107XG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlRWRpdCgpO1xuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBvcHVwSGVhZGVyID0gYENoaSB0aeG6v3QgJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZX1gO1xuICAgICAgICB0aGlzLnNldHRpbmcubWFza0NsYXNzID0gZmxhc2hTaG93ID8gJ2hpZGUnIDogbnVsbDtcbiAgICAgICAgdGhpcy5zY29wZURhdGFFZGl0ID0gc2NvcGVEYXRhRWRpdDtcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHRoaXMuY2xvbmVEYXRhKHJvd0RhdGEpO1xuICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeUVkaXRNb2RlbCh0aGlzLmZvcm1Nb2RlbC5kYXRhLCByb3dEYXRhKTtcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YVtLZXlGbGFzaFNob3ddID0gZmxhc2hTaG93O1xuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZUVkaXQoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIGJlZm9yZUVkaXQoKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgbW9kaWZ5RWRpdE1vZGVsKG1vZGVsRWRpdDogYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb25lRGF0YShyb3dEYXRhKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwaWQ6IHJvd0RhdGEucGlkLFxuICAgICAgICAgICAgYmFzZVBlcm1pc3Npb25CeVBpZDogcm93RGF0YS5iYXNlUGVybWlzc2lvbkJ5UGlkLFxuICAgICAgICAgICAgaWQ6IHJvd0RhdGFbdGhpcy5zZXR0aW5nLmVudGl0eUtleV0sXG4gICAgICAgICAgICBiYXNlUGVybWlzc2lvbjogcm93RGF0YS5iYXNlUGVybWlzc2lvblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldFByb21pc2VEZWxldGVJdGVtKHJvd0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGUocm93RGF0YS5pZCk7XG4gICAgfVxuXG4gICAgX2RlbGV0ZShyb3dEYXRhKSB7XG4gICAgICAgIGlmIChyb3dEYXRhLl9fZGlzYWJsZURlbGV0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlQ29uZmlybSgpLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgaWYgKCFycykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VEZWxldGVJdGVtKHJvd0RhdGEpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVSZWxvYWRBZnRlckRlbGV0ZShbcm93RGF0YS5pZF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2hvd1ZlcnNpb25CdXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLlJFTE9BRF9EQVRBX1ZFUlNJT04sIHt9LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZURhdGFTdWNjZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmdCeVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFByb21pc2VEZWxldGVJdGVtcyhpdGVtcykge1xuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcy5tYXAoeCA9PiB4LmlkKS5qb2luKCcsJyk7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZGVsZXRlTWFueShpZHMpO1xuICAgIH1cblxuICAgIF9kZWxldGVNdWx0aXBsZShpdGVtcykge1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiB4w7NhIGLhuqNuIGdoaSDEkcOjIGNo4buNbiAoVsOgIGPDoWMgYuG6o24gZ2hpIGNvbiB0xrDGoW5nIOG7qW5nKT8nKS50aGVuKHJzID0+IHtcbiAgICAgICAgICAgIGlmICghcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQcm9taXNlRGVsZXRlSXRlbXMoaXRlbXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVSZWxvYWRBZnRlckRlbGV0ZShpdGVtcy5tYXAocSA9PiBxLmlkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGJlZm9yZVJlbG9hZEFmdGVyRGVsZXRlKGlkczogc3RyaW5nW10pIHtcbiAgICB9XG5cbiAgICBvbkJlZm9yZUNhbmNlbCgpIHtcbiAgICB9XG5cbiAgICBfaGFuZGxlU2F2ZWQoKSB7XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZUNhbmNlbCgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbkJlZm9yZUNhbmNlbCgpO1xuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNwYWNlZC1jb21tZW50XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICBkZWVwQ2xvbmUoZGF0YSkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgfVxufVxuIl19
|
|
1005
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NsYXNzZXMvYmFzZS9saXN0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDM0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDbkgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixD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QkFrRDFDLFlBQVksU0FBQyxRQUFROzhCQUNyQixTQUFTLFNBQUMsaUJBQWlCOytCQUczQixTQUFTLFNBQUMsa0JBQWtCOzBCQUk1QixLQUFLO3VDQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBJbmplY3RvciwgSW5wdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmltcG9ydCB7IENydWRMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jcnVkL2NydWQtbGlzdC9jcnVkLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IFRyZWVUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC90cmVlLXRhYmxlL3RyZWUtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9lbnRpdHktcGVybWlzc2lvbi9zZXJ2aWNlcy5jcy9lbnRpdHktcGVybWlzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgRmlsdGVyLCBHcmlkSW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IEtleVZhbHVlVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy90eXBlcyc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tUm91dGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXhwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTGlzdEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saXN0LWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IFN0YXRlTWFjaGluZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdGVtYWNoaW5lcy5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93b3JrZmxvdy1wZXJtaXNzaW9uLWRldGFpbC5zZXJ2aWNlJztcbmltcG9ydCB7IFdvcmtmbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd29ya2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtU3RhdGUsIEtleUZsYXNoU2hvdywgV2ZJdGVtLCBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gICAgQ29sdW1uU2NoZW1hQmFzZSxcbiAgICBDb250cm9sVHlwZSxcbiAgICBDcnVkRm9ybURhdGEsXG4gICAgQ3J1ZExpc3REYXRhLFxuICAgIENydWRMaXN0U2V0dGluZyxcbiAgICBEcm9wZG93bk9wdGlvbnMsXG4gICAgRmllbGRSb3dTcGFuLFxuICAgIE9wZXJhdG9yLFxuICAgIFBvcHVwU2l6ZSxcbiAgICBSZWZGaWVsZCxcbiAgICBUZXh0QWxpZ25cbn0gZnJvbSAnLi4vZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgQ29tcG9uZW50QmFzZVdpdGhCdXR0b24gfSBmcm9tICcuL2NvbXBvbmVudC1iYXNlLXdpdGgtYnV0dG9uJztcbmltcG9ydCB7IElMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9pLWxpc3QtY29tcG9uZW50JztcbmltcG9ydCB7IENvbmdWaWVjU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY29uZ3ZpZWMtcGlja2VyL3NlcnZpY2VzL2Nvbmd2aWVjLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2F1SGluaFdvcmtmbG93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhdWhpbmgtd29ya2Zsb3cuc2VydmljZSc7XG5pbXBvcnQgeyBFbnVtUHJvcGVydGllcywgUGVybWlzc2lvbkJhc2UsIFBlcm1pc3Npb25TZXJ2aWNlLCBUbk1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XG5cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGlzdEJhc2U8VCBleHRlbmRzIElMaXN0Q29tcG9uZW50PiBleHRlbmRzIENvbXBvbmVudEJhc2VXaXRoQnV0dG9uIHtcbiAgICBwdWJsaWMgY3J1ZExpc3Q6IFQ7XG5cbiAgICBAVmlld0NoaWxkcmVuKCdidXR0b24nKSBsc3RCdXR0b25FbGVtZW50OiBRdWVyeUxpc3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICAgIEBWaWV3Q2hpbGQoQ3J1ZExpc3RDb21wb25lbnQpIHNldCBjb250ZW50Q3J1ZExpc3QoY29udGVudDogVCkge1xuICAgICAgICB0aGlzLnNldE1haW5MaXN0Q29tcG9uZW50VmFsdWUoY29udGVudCk7XG4gICAgfVxuICAgIEBWaWV3Q2hpbGQoVHJlZVRhYmxlQ29tcG9uZW50KSBzZXQgY29udGVudFRyZWVUYWJsZShjb250ZW50OiBUKSB7XG4gICAgICAgIHRoaXMuc2V0TWFpbkxpc3RDb21wb25lbnRWYWx1ZShjb250ZW50KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBwYXJlbnRNb2RlbDogQ3J1ZExpc3REYXRhO1xuICAgIEBJbnB1dCgpIGxvYWREZXRhaWxGcm9tUXVlcnlQYXJhbTogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgbm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlID0gJ0NoxrBhIGPhuqV1IGjDrG5oIENSVUQgYmFzZSBzZXJ2aWNlJztcbiAgICBzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XG4gICAgbW9kZWw6IENydWRMaXN0RGF0YSA9IG5ldyBDcnVkTGlzdERhdGEoKTtcbiAgICBmb3JtTW9kZWw6IENydWRGb3JtRGF0YSA9IG5ldyBDcnVkRm9ybURhdGEoKTtcbiAgICBzY29wZURhdGFFZGl0OiBhbnkgPSB7fTtcbiAgICBzaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xuICAgIGVudmlyb25tZW50OiBhbnkgPSB7fTtcbiAgICBjb3VudFJlYWR5ID0gMDtcbiAgICBudW1iZXJPZlBpbmVkID0gMztcbiAgICBkZWZhdWx0RmlsdGVyQ29sdW1uOiBLZXlWYWx1ZVR5cGUgPSB7fTtcblxuICAgIGhhc0NydWRMaXN0ID0gdHJ1ZTtcbiAgICBjdXN0b21HZXREYXRhID0gZmFsc2U7XG4gICAgcmVhZHlUb1RyaW5oS3kgPSBmYWxzZTtcbiAgICBzaG93QWxsQnV0dG9ucyA9IGZhbHNlO1xuICAgIHBsdXNVcmwgPSAnJztcbiAgICBsb2FkaW5nVGltZW91dDtcbiAgICBkYXRhU2VhcmNoQ29tbW9uOiBhbnkgPSB7fTtcbiAgICByb3dEYXRhQ3VycmVudDogYW55O1xuICAgIHBvcHVwU2l6ZU1heCA9IG5ldyBQb3B1cFNpemUoeyBtYXhpbWl6ZTogdHJ1ZSB9KTtcbiAgICB1c2VEZWZhbHRTb3J0ID0gdHJ1ZTtcbiAgICBkZWZhdWx0U29ydEZpZWxkID0gJ2NyZWF0ZWQnO1xuICAgIGRlZmF1bHRTb3J0RGlyOiAxIHwgLTEgPSAtMTtcbiAgICBkZWxldGVQbHVzVXJsOiBzdHJpbmc7XG4gICAgZGVsZXRlTWFueVBsdXNVcmw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEFkZHRpb25hbCBmaWVsZHMgdG8gYWRkIHRvIGdyaWRJbmZvLmZpZWxkcyB3aGVuIHVzaW5nIHNldHRpbmcuYXV0b0dlbmVyYXRlU2VsZWN0RmllbGRzXG4gICAgICogQGRhdGUgMTEvNC8yMDIyIC0gMjowMzoxOSBQTVxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ1tdfVxuICAgICAqL1xuICAgIGFkZGl0aW9uYWxGaWVsZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBwcm90ZWN0ZWQgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfY3VzdG9tUm91dGVyU2VydmljZTogQ3VzdG9tUm91dGVyU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX2xpc3RIZWxwZXJTZXJ2aWNlOiBMaXN0SGVscGVyU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX3JvdXRlcjogUm91dGVyO1xuICAgIHByb3RlY3RlZCBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfZGF0ZVBpcGU6IERhdGVQaXBlO1xuICAgIHByb3RlY3RlZCBfY2Q6IENoYW5nZURldGVjdG9yUmVmO1xuICAgIHByb3RlY3RlZCBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfbWFzdGVyRGF0YVNlcnZpY2U6IE1hc3RlckRhdGFTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfZW50aXR5UGVybWlzc2lvblNlcnZpY2U6IEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfd29ya2Zsb3dTZXR0aW5nU2VydmljZTogV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlOiBXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfc3RhdGVNYWNoaW5lc1NlcnZpY2U6IFN0YXRlTWFjaGluZXNTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfY29uZ1ZpZWNTZXJ2aWNlSW5CYXNlOiBDb25nVmllY1NlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9wZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9sb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuXG4gICAgY29uc3RydWN0b3IoX2luamVjdG9yOiBJbmplY3RvciwgX2lzVHJlZUxpc3Q6IGJvb2xlYW4pIHtcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcbiAgICAgICAgY29uc3QgbW9kdWxlQ29uZmlnU2VydmljZSA9IF9pbmplY3Rvci5nZXQoTW9kdWxlQ29uZmlnU2VydmljZSk7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBtb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IHRoaXMuX2luamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIHRoaXMuX3JvdXRlciA9IHRoaXMuX2luamVjdG9yLmdldChSb3V0ZXIpO1xuICAgICAgICB0aGlzLl9jdXN0b21Sb3V0ZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEN1c3RvbVJvdXRlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9saXN0SGVscGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChMaXN0SGVscGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRXhwb3J0U2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENydWRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fZGF0ZVBpcGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoRGF0ZVBpcGUpO1xuICAgICAgICB0aGlzLl9jZCA9IHRoaXMuX2luamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFVzZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fbWFzdGVyRGF0YVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTWFzdGVyRGF0YVNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9lbnRpdHlQZXJtaXNzaW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlQZXJtaXNzaW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2UpO1xuICAgICAgICB0aGlzLl93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9zdGF0ZU1hY2hpbmVzU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChTdGF0ZU1hY2hpbmVzU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZUluQmFzZSA9IHRoaXMuX2luamVjdG9yLmdldChDb25nVmllY1NlcnZpY2UpO1xuICAgICAgICB0aGlzLl9wZXJtaXNzaW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChQZXJtaXNzaW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTG9nZ2VyU2VydmljZSk7XG5cblxuICAgICAgICB0aGlzLnNldHRpbmcua2V5ID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRNYWluTGlzdENvbXBvbmVudFZhbHVlKGNvbnRlbnQ6IFQpIHtcbiAgICAgICAgY29uc3QgYmVmb3JlVmFsdWUgPSB0aGlzLmNydWRMaXN0O1xuICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdCA9IGNvbnRlbnQ7XG4gICAgICAgICAgICBpZiAoIWJlZm9yZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudFJlYWR5Kys7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWVGaWx0ZXIoKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY3J1ZExpc3QuY2hlY2tJc0luc2lkZURpYWxvZygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRJdGVtRnJvbVF1ZXJ5UGFyYW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291bnRSZWFkeSA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmJhc2VSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuYmFzZVJlYWR5ID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29scykge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMgPSB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIocSA9PiAhcS5yZW1vdmVPbkluaXQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVyZ2VJbmZvVG9Db2x1bW5TY2hlbWEoKTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZpZWxkU2VhcmNoVGV4dCgpO1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHRoaXMubm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIELhu48gxJFpLCBraMO0bmcgdGjhu4Mgc2V0IG5n4bqnbSDEkeG7i25oIG5oxrAgbsOgeSDEkcaw4bujYywgY2jhu5cgbsOgbyBkw7luZyB0aMOsIHBo4bqjaSB04buxIHNldCB1c2VXb3JrZmxvd1xuICAgICAgICAgICAgLy8gaWYgKCF0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1dvcmtmbG93KSB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyR2xvYmFsU2VydmljZSh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vZHVsZUNvbmZpZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTW9kdWxlQ29uZmlnU2VydmljZSk7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBtb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW5cbiAgICAgICAgICAgICYmIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZVxuICAgICAgICAgICAgJiYgdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW5bdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlXVxuICAgICAgICAgICAgJiYgIXRoaXMuc2V0dGluZy50YXJnZXRQYXRoXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnRhcmdldFBhdGggPSBgJHt0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpblt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGVdfS8ke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lLnRvTG93ZXJDYXNlKCl9L2RldGFpbGA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXRNZW51QnV0dG9ucyA9IHRoaXMuZ2V0TWVudUJ1dHRvbnMuYmluZCh0aGlzKTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgbWVyZ2VJbmZvVG9Db2x1bW5TY2hlbWEoKSB7XG4gICAgICAgIGxldCBpID0gMCwgY29uc3RXaWR0aCA9IDgzLCBzdW1XaWR0aCA9IDAsIHdpZHRoQ29sQmVmb3JlID0gMDsgLy8gODMgdOG7lW5nIGNoaeG7gXUgZMOgaSBjaGVja2JveCArIHN0dCBjcnVkLWxpc3RcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCkgY29uc3RXaWR0aCAtPSAzNTtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5oaWRkZW5PcmRlckNvbHVtbikgY29uc3RXaWR0aCAtPSA0ODtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuc3RpY2t5Q29sdW1uKSBjb25zdFdpZHRoID0gMDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC5pc1Bpbm5lZCAmJiBjb2wud2lkdGggJiYgaSA8IHRoaXMubnVtYmVyT2ZQaW5lZCkge1xuICAgICAgICAgICAgICAgIGxldCBsZWZ0ID0gY29uc3RXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtV2lkdGggKz0gd2lkdGhDb2xCZWZvcmU7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gc3VtV2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdpZHRoQ29sQmVmb3JlID0gTnVtYmVyKGNvbC53aWR0aC5yZXBsYWNlKC9cXEQvZywgJycpKTtcbiAgICAgICAgICAgICAgICBjb2wubGVmdCA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgY29sLmNsYXNzICs9ICd0aC1zdGlja3ktY29sdW1uJztcbiAgICAgICAgICAgICAgICBjb2wuY2VsbENsYXNzID0gJ3RoLXN0aWNreS1jb2x1bW4nO1xuICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbk1vZGVsU2NoZW1hID0gdGhpcy5zZXR0aW5nLm1vZGVsU2NoZW1hcy5maW5kKHAgPT4gcC5maWVsZCA9PSBjb2wuZmllbGQpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbk1vZGVsU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbk1vZGVsU2NoZW1hLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sLmxhYmVsID0gY29sdW1uTW9kZWxTY2hlbWEubmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbk1vZGVsU2NoZW1hLmZ1bGxOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5mdWxsTGFiZWwgPSBjb2x1bW5Nb2RlbFNjaGVtYS5mdWxsTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29sLmlzRm9yZWlnbkZpZWxkID0gY29sLmRpc3BsYXlGaWVsZEluR3JpZCAmJiBjb2wuZGlzcGxheUZpZWxkSW5HcmlkICE9IGNvbC5kaXNwbGF5RmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKCFjb2wuZGlzcGxheUZpZWxkSW5HcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5kaXNwbGF5RmllbGRJbkdyaWQgPSBjb2wuZGlzcGxheUZpZWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWNvbC5kYXRhVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjb2wuZGF0YVR5cGUgPSB0aGlzLmdldERhdGFUeXBlKGNvbHVtbk1vZGVsU2NoZW1hLmRhdGFUeXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0YVR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVGaWVsZFNlYXJjaFRleHQoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGlmIChjb2wuZnVsbFRleHRTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0LnB1c2goY29sLmZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZFNlYXJjaFRleHQuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBuZXcgRmlsdGVyKHsgZmllbGQsIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLCBzb3VyY2VGaWVsZDogJ19rJyB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5maWx0ZXJUZW1wbGF0ZUFkdnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmlsdGVyVGVtcGxhdGVBZHZzLnNwbGljZSgwLCAwLCBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcmVnaXN0ZXJHbG9iYWxTZXJ2aWNlKHNlcnZpY2U6IEJhc2VTZXJ2aWNlKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHNlcnZpY2UuZ2V0S2V5V29ya2Zsb3dTZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHNlcnZpY2UpO1xuICAgICAgICB0aGlzLl93b3JrZmxvd1NldHRpbmdTZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHNlcnZpY2UpO1xuICAgIH1cblxuICAgIGdldE1lbnVCdXR0b25zKHJvd0RhdGEpOiBhbnlbXSB8IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgdGhpcy5yb3dEYXRhQ3VycmVudCA9IHJvd0RhdGE7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFuZGxlQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkaW5nVGltZW91dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAoKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAmJiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UudXNlV29ya2Zsb3cpXG4gICAgICAgICAgICB8fCB0aGlzLnNldHRpbmcuaXNXb3JrZmxvd1RyZWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSGFzV29ya2Zsb3coKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy5jb3VudFJlYWR5Kys7XG4gICAgICAgIGlmICh0aGlzLmNvdW50UmVhZHkgPiAxKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmJhc2VSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERlZmF1bHRWYWx1ZUZpbHRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEZpbHRlckNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5zZXRJbml0RmlsdGVyKHRoaXMuZGVmYXVsdEZpbHRlckNvbHVtbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAjcmVnaW9uIEdldCBEYXRhXG4gICAgYXN5bmMgcmVsb2FkKCkge1xuICAgICAgICB0aGlzLmNydWRMaXN0LnJlbG9hZCgpO1xuICAgIH1cblxuICAgIGFzeW5jIF90cmlnZ2VyUHJvY2Vzc0RhdGEoaW5mb0dldERhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKGluZm9HZXREYXRhPy5kYXRhU2VhcmNoQ29tbW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTZWFyY2hDb21tb24gPSBpbmZvR2V0RGF0YS5kYXRhU2VhcmNoQ29tbW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5iYXNlUmVhZHkpIHJldHVybjtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzRGF0YShpbmZvR2V0RGF0YT8uZ3JpZEluZm8gfHwgbnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzRGF0YShncmlkSW5mbz86IEdyaWRJbmZvKSB7XG4gICAgICAgIHRoaXMucmVhZHlUb1RyaW5oS3kgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ3J1ZExpc3QpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jcnVkTGlzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcbiAgICAgICAgICAgICAgICBncmlkSW5mbyA9IHRoaXMuY3J1ZExpc3QuZ2V0R3JpZEluZm8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcbiAgICAgICAgICAgICAgICBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IDk5OVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgc29ydHM6IFtdLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGEoZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGFzeW5jIG1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbyk6IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXREYXRhKGdyaWRJbmZvOiBHcmlkSW5mbykge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlICYmIHRoaXMubW9kZWwucmVhZHkgJiYgIXRoaXMubW9kZWwubG9hZGluZykge1xuICAgICAgICAgICAgdGhpcy5fbWFya0xvYWRpbmcoKTtcbiAgICAgICAgICAgIGdyaWRJbmZvLm1vZGlmeUZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhc051bGxWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN0VmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoZmlsdGVyLnZhbHVlKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc051bGxWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0VmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc051bGxWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3RWYWx1ZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIub3BlcmF0b3IgPSBPcGVyYXRvci5pc051bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmxvZ2ljID0gJ29yJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWVsZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsIE9wZXJhdG9yLmlzTnVsbCwgJycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsIE9wZXJhdG9yLmluLCByZXN0VmFsdWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5hdXRvR2VuZXJhdGVTZWxlY3RGaWVsZHMgPT09IHRydWUgJiYgdGhpcy5zZXR0aW5nLmNvbHMgJiYgdGhpcy5zZXR0aW5nLmNvbHMubGVuZ3RoID4gMCAmJiAhdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sczogQ29sdW1uU2NoZW1hQmFzZVtdID0gdGhpcy5zZXR0aW5nLmNvbHM7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzOiBzdHJpbmdbXSA9IFsnaWQnXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2wuaXNSZWZGaWVsZCB8fCBjb2wuaW5jbHVkZVNlbGVjdCA9PT0gZmFsc2UgfHwgY29sLmZpZWxkID09IG51bGwgfHwgY29sLmZpZWxkID09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaChjb2wuZmllbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCguLi50aGlzLmFkZGl0aW9uYWxGaWVsZHMpO1xuICAgICAgICAgICAgICAgIGdyaWRJbmZvLmZpZWxkcyA9IGZpZWxkcy5qb2luKCcsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHRNb2RpZnkgPSBhd2FpdCB0aGlzLm1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZURlZmFsdFNvcnQgJiYgZ3JpZEluZm8uc29ydHMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICBncmlkSW5mby5zb3J0cy51bnNoaWZ0KHRoaXMubmV3U29ydCh0aGlzLmRlZmF1bHRTb3J0RmllbGQsIHRoaXMuZGVmYXVsdFNvcnREaXIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHRNb2RpZnkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC50b3RhbCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5leHBhbmRlZFJvd0tleXMgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9HZXRSZXF1ZXN0KGdyaWRJbmZvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZG9HZXRSZXF1ZXN0KGdyaWRJbmZvOiBHcmlkSW5mbykge1xuICAgICAgICBpZiAoIXRoaXMuY3VzdG9tR2V0RGF0YSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm8pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzR2V0RGF0YShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRGF0YUxvYWRlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZURhdGFMb2FkZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0h0dHBVbmtub3dFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRGF0YUxvYWRlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXREYXRhQ3VzdG9tKGdyaWRJbmZvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9tYXJrTG9hZGluZygpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tb2RlbC5hZGp1c3RlZFBvc2l0aW9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCkge1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5hZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xuICAgICAgICB0aGlzLmxvYWRpbmdUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ03DoXkgY2jhu6cgcGjhuqNuIGjhu5NpIHF1w6EgbMOidSwgdnVpIGzDsm5nIGtp4buDbSB0cmEgbOG6oWkgxJHGsOG7nW5nIHRydXnhu4FuIG3huqFuZyEnKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9LCAyMDAwMCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZVJlbG9hZGVkKGV2dCA9IG51bGwpIHtcbiAgICAgICAgaWYgKGV2dCA9PT0gRW51bVByb3BlcnRpZXMuUkVUUklFVkVfQlVUVE9OX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LnJldHJpZXZlQnV0dG9uVGVtcGxhdGUodGhpcy5sc3RCdXR0b25FbGVtZW50W0VudW1Qcm9wZXJ0aWVzLlJFU1VMVFNdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJSZWxvYWRlZCgpO1xuICAgIH1cblxuICAgIGFzeW5jIGFmdGVyUmVsb2FkZWQoKSB7XG4gICAgfVxuXG4gICAgX3VubWFya0xvYWRpbmcoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5tb2RlbC5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaXJlRGF0YUxvYWRlZChzdWNjZXNzOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBpZiAoc3VjY2VzcyAmJiB0aGlzLmNydWRMaXN0KSB7XG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LnByb2Nlc3NCYXNlRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcbiAgICB9XG5cbiAgICBnZXRQcm9taXNlR2V0RGF0YShncmlkSW5mbzogR3JpZEluZm8pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCB0aGlzLnBsdXNVcmwpO1xuICAgIH1cblxuICAgIGdldERhdGFDdXN0b20oZ3JpZEluZm86IEdyaWRJbmZvKSB7XG5cbiAgICB9XG5cbiAgICBhc3luYyBfZ2V0RGF0YVNvdXJjZShyZXNwb25zZTogUmVzcG9uc2VSZXN1bHQpOiBQcm9taXNlPFthbnlbXSwgYW55W11dPiB7XG4gICAgICAgIHJldHVybiBbW10sIFtdXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHByb2Nlc3NHZXREYXRhKHJlc3BvbnNlOiBSZXNwb25zZVJlc3VsdCkge1xuICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5cyA9IHt9O1xuICAgICAgICB0aGlzLm1vZGVsLnRvdGFsID0gcmVzcG9uc2UudG90YWxSZWNvcmQ7XG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5tZXJnZVJlZkZpZWxkcyhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlUmVuZGVyRGF0YVNvdXJjZShyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbZGF0YVNvdXJjZSwgcmF3RGF0YVNvdXJjZV0gPSBhd2FpdCB0aGlzLl9nZXREYXRhU291cmNlKHJlc3BvbnNlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZnRlclByb2Nlc3NEYXRhSW5CYXNlKGRhdGFTb3VyY2UpO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCAmJiB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEluQ2xpZW50KSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwSW5DbGllbnQoZGF0YVNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcbiAgICAgICAgdGhpcy5tb2RlbC5hbGxEYXRhU291cmNlID0ge1xuICAgICAgICAgICAgcmF3OiByYXdEYXRhU291cmNlLFxuICAgICAgICAgICAgZGF0YTogZGF0YVNvdXJjZVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc2V0U2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xuICAgICAgICBpZiAocmVzZXRTZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJHZXREYXRhKCk7XG4gICAgICAgIC8vIHRoaXMuX2dldFJlZkRhdGFEcm9wZG93bih0aGlzLm1vZGVsLmRhdGFTb3VyY2UpO1xuICAgICAgICAvLyBLIGTDuW5nIGjDoG0g4bufIHRyw6puIHbDrCDEkeG7kWkgduG7m2kgdHJlZSBsaXN0IHRow6wgbW9kZWwuZGF0YVNvdXJjZSDEkcOjIGLhu4sgdMOhaSBj4bqldSB0csO6Y1xuICAgICAgICB0aGlzLl9nZXRSZWZEYXRhRHJvcGRvd24ocmF3RGF0YVNvdXJjZSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRBdXRob3JpemVCdXR0b25zKCk7XG4gICAgICAgIH0sIDEwKTtcbiAgICB9XG5cbiAgICBhc3luYyBzZXRBdXRob3JpemVCdXR0b25zKCkge1xuICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCAmJiAhdGhpcy5zZXR0aW5nLmhpZGRlbkF1dGhvcml6ZUJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5zZXRBdXRob3JpemVCdXR0b24odGhpcy5sc3RCdXR0b25FbGVtZW50W0VudW1Qcm9wZXJ0aWVzLlJFU1VMVFNdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldE1lbnVCdXR0b25DdXN0b21BdXRob3JpemVkKG1lbnVCdXR0b25zOiBUbk1lbnVJdGVtW10pOiBQcm9taXNlPFRuTWVudUl0ZW1bXT4ge1xuICAgICAgICBjb25zdCBidXR0b25TZXR0aW5nOiBhbnkgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQlVUVE9OX0FVVEhPUklaRSkgfHwgJ3t9Jyk7XG4gICAgICAgIGxldCBhdXRob3JpemVCdXR0b25LZXkgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvXFwvL2csICdfJyk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VDb2RlID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgYXV0aG9yaXplQnV0dG9uS2V5ID0gYCR7c2VydmljZUNvZGV9XyR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbHN0QnV0dG9uQXV0aG9yaXplID0gYnV0dG9uU2V0dGluZ1thdXRob3JpemVCdXR0b25LZXldO1xuICAgICAgICBpZiAoIWxzdEJ1dHRvbkF1dGhvcml6ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVudUJ1dHRvbnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgY29uc3QgYXV0aG9yaXplZEJ1dHRvbnM6IFRuTWVudUl0ZW1bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWVudUJ1dHRvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBsc3RCdXR0b25BdXRob3JpemUuZmluZChwID0+IHAuY29kZSA9PSBpdGVtLmF1dGhvcml6YXRpb25QZXJtaXNzaW9uKTtcbiAgICAgICAgICAgIGlmICghaXRlbS5hdXRob3JpemF0aW9uUGVybWlzc2lvbiB8fCAhcGVybWlzc2lvbikge1xuICAgICAgICAgICAgICAgIGF1dGhvcml6ZWRCdXR0b25zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmlzQXV0aG9yaXplZChpdGVtLmF1dGhvcml6YXRpb25TZXJ2aWNlQ29kZSB8fCBzZXJ2aWNlQ29kZSwgcGVybWlzc2lvbiA/IHBlcm1pc3Npb24uY29kZSA6IGl0ZW0uYXV0aG9yaXphdGlvblBlcm1pc3Npb24sIHRydWUpLnRoZW4oYXV0aG9yaXplZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdXRob3JpemVkICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXplZEJ1dHRvbnMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgIHJldHVybiBhdXRob3JpemVkQnV0dG9ucztcbiAgICB9XG5cblxuICAgIGJlZm9yZVJlbmRlckRhdGFTb3VyY2UoZGF0YXNvdXJjZTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGRhdGFzb3VyY2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZXJnZVJlZkZpZWxkcyhkYXRhU291cmNlOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBzY2hlbWFzID0gdGhpcy5zZXR0aW5nLmNvbHMuZmlsdGVyKHAgPT4gcC5pc0ZvcmVpZ25GaWVsZCAmJiAhIXAuZGlzcGxheUZpZWxkSW5HcmlkICYmICFwLmZpZWxkLnN0YXJ0c1dpdGgoJ3N0cicpKTtcbiAgICAgICAgaWYgKCFzY2hlbWFzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3Qgcm93RGF0YSBvZiBkYXRhU291cmNlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgICAgICAgICAgICAgcm93RGF0YVsnc3RyJyArIHNjaGVtYS5maWVsZF0gPSByb3dEYXRhW3NjaGVtYS5kaXNwbGF5RmllbGRJbkdyaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlUm93U3BhbihkYXRhU291cmNlOiBhbnlbXSwgZmllbGRzOiBGaWVsZFJvd1NwYW5bXSwgZnVuY05leHQ/OiBGdW5jdGlvbikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFTb3VyY2UubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZnVuY05leHQgJiYgZnVuY05leHQoZGF0YVNvdXJjZVtpXSkgIT0gZnVuY05leHQoZGF0YVNvdXJjZVtpICsgMV0pKSBjb250aW51ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGVsZW1lbnQuZmllbGQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRSb290SW5kZXggPSBgcm9vdEluZGV4XyR7ZmllbGR9YDtcbiAgICAgICAgICAgICAgICBsZXQgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5mdW5jR2V0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBlbGVtZW50LmZ1bmNHZXRWYWx1ZShkYXRhU291cmNlW2kgKyAxXSkgPT0gZWxlbWVudC5mdW5jR2V0VmFsdWUoZGF0YVNvdXJjZVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcXVhbCA9IGRhdGFTb3VyY2VbaSArIDFdW2ZpZWxkXSA9PSBkYXRhU291cmNlW2ldW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVxdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhU291cmNlW2ldW2ZpZWxkUm9vdEluZGV4XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2ldW2ZpZWxkUm9vdEluZGV4XSA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFTb3VyY2VbaV0ucm93U3Bhbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VbaV0ucm93U3BhbiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZVtpXS5yb3dTcGFuW2ZpZWxkXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhSb290SXRlbSA9IGRhdGFTb3VyY2VbaV1bZmllbGRSb290SW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2kgKyAxXVtmaWVsZFJvb3RJbmRleF0gPSBpbmRleFJvb3RJdGVtO1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2luZGV4Um9vdEl0ZW1dLnJvd1NwYW5bZmllbGRdKys7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZVtpICsgMV0uaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2kgKyAxXS5oaWRkZW4gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2kgKyAxXS5oaWRkZW5bZmllbGRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBhZnRlclByb2Nlc3NEYXRhSW5CYXNlKGRhdGFTb3VyY2U6IGFueVtdID0gW10pIHtcblxuICAgIH1cblxuICAgIGFzeW5jIGFmdGVyR2V0RGF0YSgpIHtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRow6ptIHJlZkZpZWxkIHbDoG8gY3J1ZCBsaXN0IHRyxrDhu5tjIGtoaSB04buVbmcgaOG7o3AgZOG7ryBsaeG7h3VcbiAgICAgKiBz4bq9IG92ZXJyaWRlIGPDoWMgZmllbGQgYuG7iyB0csO5bmdcbiAgICAgKiBAcGFyYW0gcmVmRmllbGRzXG4gICAgICovXG4gICAgYWRkUmVmRmllbGRzKHJlZkZpZWxkczogUmVmRmllbGRbXSkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZiA9PSBudWxsIHx8IHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmID0gWy4uLnJlZkZpZWxkc107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByZWZGaWVsZCBvZiByZWZGaWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFJlZkluZGV4ID0gdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZi5maW5kSW5kZXgoeCA9PiB4LmZpZWxkID09IHJlZkZpZWxkLmZpZWxkKTtcbiAgICAgICAgICAgIGlmIChvbGRSZWZJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLnB1c2gocmVmRmllbGQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZltvbGRSZWZJbmRleF0gPSByZWZGaWVsZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdyb3VwSW5DbGllbnQoZGF0YVNvdXJjZSkge1xuICAgICAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPT0gMCkgcmV0dXJuO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGdyb3VwRmllbGQgPSB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbikge1xuICAgICAgICAgICAgICAgIGdyb3VwRmllbGQgPSB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4ucmF3Q29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zb3J0RGF0YVNvdXJjZUJ5R3JvdXBGaWVsZChkYXRhU291cmNlLCBncm91cEZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNvcnREYXRhU291cmNlQnlHcm91cEZpZWxkKGRhdGFTb3VyY2U6IGFueVtdLCBncm91cEZpZWxkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZGljOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnlbXTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFTb3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlR3JvdXAgPSBkYXRhU291cmNlW2ldW2dyb3VwRmllbGRdO1xuICAgICAgICAgICAgaWYgKCFkaWNbdmFsdWVHcm91cF0pIHtcbiAgICAgICAgICAgICAgICBkaWNbdmFsdWVHcm91cF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpY1t2YWx1ZUdyb3VwXS5wdXNoKGRhdGFTb3VyY2VbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVNvdXJjZS5zcGxpY2UoMCwgZGF0YVNvdXJjZS5sZW5ndGgpO1xuICAgICAgICBPYmplY3QudmFsdWVzKGRpYykuZm9yRWFjaCh2YWx1ZXMgPT4ge1xuICAgICAgICAgICAgZGF0YVNvdXJjZS5wdXNoKC4uLnZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfZ2V0UmVmRGF0YURyb3Bkb3duKGRhdGFTb3VyY2UpIHtcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBsc3RGaWVsZE5lZWRHZXRSZWYgPSB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLmZpbHRlcihwID0+ICFwLmlzRm9yZWlnbkZpZWxkKTtcbiAgICAgICAgICAgIGlmIChsc3RGaWVsZE5lZWRHZXRSZWYpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jcnVkU2VydmljZS5nZXRSZWZEYXRhSW5EYXRhc291cmNlKFxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICBsc3RGaWVsZE5lZWRHZXRSZWYsXG4gICAgICAgICAgICAgICAgICAgIChmaWVsZCkgPT4gdGhpcy5hZnRlckdldFJlZkRhdGFEcm9wZG93bihmaWVsZClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24obnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5VG9UcmluaEt5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFmdGVyR2V0UmVmRGF0YURyb3Bkb3duKGZpZWxkOiBzdHJpbmcpIHtcblxuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb25cblxuICAgIC8vICNyZWdpb24gV29ya2Zsb3dcblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tIYXNXb3JrZmxvdygpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEtleVdvcmtmbG93U2V0dGluZygpO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93KSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhV29ya2Zsb3dOZXcgPSAoYXdhaXQgdGhpcy5fd29ya2Zsb3dTZXR0aW5nU2VydmljZS5nZXREZXRhaWxCeUZpbHRlcihbXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ3RhYmxlTmFtZScsIE9wZXJhdG9yLmVxdWFsLCBrZXkpXG4gICAgICAgICAgICBdKSkuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyR2xvYmFsU2VydmljZSh0aGlzLl9jb25nVmllY1NlcnZpY2VJbkJhc2UpO1xuICAgICAgICAgICAgaWYgKGRhdGFXb3JrZmxvd05ldykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0V29ya2Zsb3dEZXRhaWxCeVdvcmtmbG93U2V0dGluZyhkYXRhV29ya2Zsb3dOZXcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcgPSBkYXRhV29ya2Zsb3dOZXc7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDb2xXb3JrZmxvd1N0YXR1cyhkYXRhV29ya2Zsb3dOZXcud29ya2Zsb3dzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2V0dGluZy5pc1dvcmtmbG93VHJlZSkge1xuICAgICAgICAgICAgICAgIC8vIEzhuqV5IHJhIHRvw6BuIGLhu5kgY+G6pXUgaMOsbmggd29ya2Zsb3cgY3VzdG9tIMSR4buDIGzhuqV5IGRhdGFzb3VyY2UgdHLhuqFuZyB0aMOhaVxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmdldERhdGFTb3VyY2VUcmFuZ1RoYWlXb3JrZmxvdygpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ29sV29ya2Zsb3dTdGF0dXMoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldFdvcmtmbG93RGV0YWlsQnlXb3JrZmxvd1NldHRpbmcoaXRlbVdvcmtmbG93U2V0dGluZzogYW55KSB7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dzID0gW107XG4gICAgICAgIGxldCB3b3JrZmxvd0NvZGVzID0gW107XG4gICAgICAgIC8vIE7hur91IHThuqFvIHRhc2sgdGhheSB2w6wgdOG6oW8gY8O0bmcgdmnhu4djXG4gICAgICAgIGlmIChpdGVtV29ya2Zsb3dTZXR0aW5nLmNyZWF0ZVRhc2tJbnN0ZWFkKSB7XG4gICAgICAgICAgICB3b3JrZmxvd0NvZGVzID0gYXdhaXQgdGhpcy5nZXRXb3JrZmxvd0NvZGVCeVRhc2soKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMgJiYgIUFycmF5LmlzQXJyYXkoaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzKSkge1xuICAgICAgICAgICAgaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzID0gaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICB3b3JrZmxvd0NvZGVzID0gaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdvcmtmbG93Q29kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZmxvd3MgPSAoYXdhaXQgdGhpcy5fc3RhdGVNYWNoaW5lc1NlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignY29kZScsIE9wZXJhdG9yLmluLCB3b3JrZmxvd0NvZGVzKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgbmV3IERyb3Bkb3duT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiAndGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZFBsdXM6ICdkYXRhJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApKTtcbiAgICAgICAgICAgIHdvcmtmbG93cz8uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLmRhdGEgPSBKU09OLnBhcnNlKGl0ZW0uZGF0YSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lRGF0YSA9IGl0ZW0uZGF0YTtcbiAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLm1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuY29ubmVjdGlvbnMuZm9yRWFjaChjb25uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uLnNvdXJjZSA9PSBtYWNoaW5lLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0ucHVzaChjb25uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dzID0gd29ya2Zsb3dzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRXb3JrZmxvd0NvZGVCeVRhc2soKSB7XG4gICAgICAgIC8vIEzhuqV5IGPDoWMgcXV5IHRyw6xuaCBn4bqvbiBjaG8gY8O0bmcgdmnhu4djXG4gICAgICAgIGNvbnN0IHBoYW5Db25nQ29uZ1ZpZWNTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENhdUhpbmhXb3JrZmxvd1NlcnZpY2UpO1xuICAgICAgICBjb25zdCBkYXRhV29ya2Zsb3dCeVRhc2sgPSAoYXdhaXQgcGhhbkNvbmdDb25nVmllY1NlcnZpY2UuZ2V0QWxsKFxuICAgICAgICAgICAgW10sICd3b3JrZmxvd0NvZGVzJ1xuICAgICAgICApKS5kYXRhO1xuICAgICAgICBpZiAoIWRhdGFXb3JrZmxvd0J5VGFzaykgcmV0dXJuIFtdO1xuICAgICAgICBjb25zdCB3b3JrZmxvd0NvZGVzID0gW107XG4gICAgICAgIGRhdGFXb3JrZmxvd0J5VGFzay5mb3JFYWNoKGNhdUhpbmggPT4ge1xuICAgICAgICAgICAgaWYgKCFjYXVIaW5oLndvcmtmbG93Q29kZXMpIHJldHVybjtcbiAgICAgICAgICAgIGNhdUhpbmgud29ya2Zsb3dDb2Rlcy5zcGxpdCgnLCcpLmZvckVhY2god29ya2Zsb3dDb2RlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2Zsb3dDb2Rlcy5pbmRleE9mKHdvcmtmbG93Q29kZSkgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2Zsb3dDb2Rlcy5wdXNoKHdvcmtmbG93Q29kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gd29ya2Zsb3dDb2RlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGVuZENvbFdvcmtmbG93U3RhdHVzKHdvcmtmbG93czogV2ZJdGVtW10pIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFt7XG4gICAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICAgIHJhd1RlbjogJ0NoxrBhIGLhuq90IMSR4bqndScsXG4gICAgICAgICAgICB0ZW46ICdDaMawYSBi4bqvdCDEkeG6p3UnLFxuICAgICAgICAgICAgbWFMb3dlcjogJycsXG4gICAgICAgICAgICB0ZW5Mb3dlcjogJ2NoxrBhIGLhuq90IMSR4bqndSdcbiAgICAgICAgfV07XG4gICAgICAgIGlmICh3b3JrZmxvd3MgJiYgd29ya2Zsb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgd29ya2Zsb3dzLmZvckVhY2god29ya2Zsb3cgPT4ge1xuICAgICAgICAgICAgICAgIHdvcmtmbG93LmRhdGEubWFjaGluZXMuZm9yRWFjaChtYWNoaW5lID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVN0YXR1cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtYWNoaW5lLmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdUZW46IG1hY2hpbmUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbjogbWFjaGluZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFMb3dlcjogbWFjaGluZS5jb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW5Mb3dlcjogbWFjaGluZS5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhU291cmNlLnNvbWUoeCA9PiB4LnRlbkxvd2VyID09IGl0ZW1TdGF0dXMudGVuTG93ZXIgJiYgeC5tYUxvd2VyID09IGl0ZW1TdGF0dXMubWFMb3dlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucHVzaChpdGVtU3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TYW1lTmFtZSA9IGRhdGFTb3VyY2UuZmluZChxID0+IHEudGVuTG93ZXIgPT0gaXRlbVN0YXR1cy50ZW5Mb3dlciAmJiBxLm1hTG93ZXIgIT0gaXRlbVN0YXR1cy5tYUxvd2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2FtZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2FtZU5hbWUudGVuID0gYCR7aXRlbVNhbWVOYW1lLnJhd1Rlbn0gKCR7aXRlbVNhbWVOYW1lLmlkfSlgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TdGF0dXMudGVuID0gYCR7aXRlbVN0YXR1cy5yYXdUZW59ICgke2l0ZW1TdGF0dXMuaWR9KWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS51c2VyRGF0YSA9IHRoaXMubW9kZWwuYWR2YW5jZURhdGEudXNlckRhdGE7XG4gICAgICAgIGNvbnN0IGNvbFBhcmVudCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgIGZpZWxkOiBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLFxuICAgICAgICAgICAgZGF0YVR5cGU6ICd0cmFuZ1RoYWlWNScsXG4gICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAndHJhbmdUaGFpVjUnLFxuICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtbixcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcbiAgICAgICAgICAgIGxhYmVsOiAnVHLhuqFuZyB0aMOhaScsXG4gICAgICAgICAgICB3aWR0aDogJzEyMHB4JyxcbiAgICAgICAgICAgIHRleHRBbGlnbjogVGV4dEFsaWduLkNlbnRlcixcbiAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcbiAgICAgICAgICAgIGZpZWxkVHJlZTogJ3BhcmVudElkJyxcbiAgICAgICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgICAgICBpbmNsdWRlU2VsZWN0OiBmYWxzZSxcbiAgICAgICAgICAgIGFsbG93RmlsdGVyOiB0aGlzLnNldHRpbmcuYWxsb3dGaWx0ZXJXb3JrZmxvd0NvbHVtblxuICAgICAgICB9KTtcbiAgICAgICAgLy8gTuG6v3UgY2jGsGEgY8OzIHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYgdGjDrCBiw6puIGNydWQtbGlzdCBz4bq9IGFkZCBj4buZdCBuw6B5IHNhdVxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZikge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZi51bnNoaWZ0KG5ldyBSZWZGaWVsZCh7XG4gICAgICAgICAgICAgICAgLi4uY29sUGFyZW50XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB7XG4gICAgICAgICAgICAuLi5jb2xQYXJlbnQsXG4gICAgICAgICAgICByYXdDb2x1bW46IGNvbFBhcmVudCxcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcbiAgICAgICAgICAgIGRhdGFUeXBlOiBjb2xQYXJlbnQuZGF0YVR5cGVSZWZGaWVsZCxcbiAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGNvbFBhcmVudC5maWVsZCxcbiAgICAgICAgICAgIGFsbG93RmlsdGVyOiBjb2xQYXJlbnQuYWxsb3dGaWx0ZXIsXG4gICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW5cbiAgICAgICAgfTtcbiAgICAgICAgY29sUGFyZW50LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xQYXJlbnQsIGNoaWxkcmVuKTtcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sUGFyZW50LCBjaGlsZHJlbl0pO1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5idWlsZEZpbHRlckNvbHVtbihbY29sUGFyZW50XSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1c2VyQ3VycmVudCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICAgIGlmICh1c2VyQ3VycmVudC51c2VyTmFtZSA9PSAnYWRtaW4nKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xGb3JBZG1pbiA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ19fdmlld0hpc3RvcnknLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnX192aWV3SGlzdG9yeScsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwcHgnLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogVGV4dEFsaWduLkNlbnRlcixcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVNlbGVjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0hpc3RvcnlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xGb3JBZG1pbik7XG4gICAgICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sRm9yQWRtaW5dKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xGb3JBZG1pbl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RGF0YVNvdXJjZVRyYW5nVGhhaVdvcmtmbG93KCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgLy8gI3JlZ2lvbiBjcnVkXG4gICAgcHJpdmF0ZSBsb2FkSXRlbUZyb21RdWVyeVBhcmFtKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkRGV0YWlsRnJvbVF1ZXJ5UGFyYW0gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmxvYWREZXRhaWxGcm9tUXVlcnlQYXJhbSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgbGV0IGlkSW5RdWVyeVN0cmluZyA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcGlkID0gbnVsbDsgLy8gcGVybWlzc2lvbiBJZCDEkcaw4bujYyBuZ8aw4budaSBraMOhYyBzaGFyZVxuICAgICAgICAgICAgaWYgKHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90XG4gICAgICAgICAgICAgICAgJiYgdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlkSW5RdWVyeVN0cmluZyA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmlkIHx8IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmVudGl0eUtleTtcbiAgICAgICAgICAgICAgICBwaWQgPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5waWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRGV0YWlsUGlkKHBpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpZEluUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgZGV0YWlsIGRhdGFcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0RGV0YWlsV2l0aFBlcm1pc3Npb24oaWRJblF1ZXJ5U3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHTDrG0gdGjhuqV5IGLhuqNuIGdoaSBj4bqnbiB4ZW0gY2hpIHRp4bq/dCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyZXMuZGF0YS5iYXNlUGVybWlzc2lvbiAmIFBlcm1pc3Npb25CYXNlLkVESVQpID09IFBlcm1pc3Npb25CYXNlLkVESVRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5SRUFEKSA9PSBQZXJtaXNzaW9uQmFzZS5SRUFEXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0KHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQuG6oW4ga2jDtG5nIGPDsyBxdXnhu4FuIHhlbSBi4bqjbiBnaGknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UubG9nRXJyb3IoJ2Vycm9yIG9uIGdldCBkZXRhaWwgZnJvbSBxdWVyeXN0cmluZycsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY+G6p24geGVtIGNoaSB0aeG6v3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWREZXRhaWxQaWQocGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldERldGFpbEJ5UGlkKHBpZClcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlcywgJycsIGYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcmVzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgYuG6o24gZ2hpIGPhuqduIHhlbSBjaGkgdGnhur90Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5FRElUKSA9PSBQZXJtaXNzaW9uQmFzZS5FRElUXG4gICAgICAgICAgICAgICAgICAgIHx8IChyZXMuZGF0YS5iYXNlUGVybWlzc2lvbiAmIFBlcm1pc3Npb25CYXNlLlJFQUQpID09IFBlcm1pc3Npb25CYXNlLlJFQURcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEucGlkID0gcGlkO1xuICAgICAgICAgICAgICAgICAgICByZXMuZGF0YS5iYXNlUGVybWlzc2lvbkJ5UGlkID0gcmVzLmRhdGEuYmFzZVBlcm1pc3Npb247XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VkaXQocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdC4bqhbiBraMO0bmcgY8OzIHF1eeG7gW4geGVtIGLhuqNuIGdoaScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UubG9nRXJyb3IoJ2Vycm9yIG9uIGdldCBkZXRhaWwgZnJvbSBxdWVyeXN0cmluZycsIGVycik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgYuG6o24gZ2hpIGPhuqduIHhlbSBjaGkgdGnhur90Jyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBfYWRkKGV2dCkge1xuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVBZGQoKTtcbiAgICAgICAgaWYgKCFyZXN1bHRWYWxpZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkFERDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBvcHVwSGVhZGVyID0gYFRow6ptIG3hu5tpICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlQWRkKCk7XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlQWRkKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBiZWZvcmVBZGQoKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgX3ZpZXcocm93RGF0YSkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNob3dFZGl0TGlua09ubHlWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3T25seShyb3dEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VkaXQocm93RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfdmlld09ubHkocm93RGF0YSkge1xuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcbiAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVWaWV3KCk7XG4gICAgICAgIHRoaXMuc2V0dGluZy5wb3B1cEhlYWRlciA9IGBDaGkgdGnhur90ICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB0aGlzLmNsb25lRGF0YShyb3dEYXRhKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlWaWV3TW9kZWwocm93RGF0YSk7XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIGJlZm9yZVZpZXcoKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgbW9kaWZ5Vmlld01vZGVsKHJvd0RhdGE6IGFueSkge1xuICAgIH1cblxuICAgIGFzeW5jIF9jb3B5TGlua011bHRpcGxlKCkge1xuICAgICAgICBjb25zdCBwYXRocyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICBwYXRocy5wdXNoKGF3YWl0IHRoaXMuZ2V0Q29weVBhdGgodGhpcy5zZXR0aW5nLCBpdGVtKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5jb3B5QnlTdG9yYWdlKHBhdGhzLmpvaW4oJ1xcclxcbicpKTtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCfEkMOjIHNhbyBjaMOpcCBjw6FjIGxpw6puIGvhur90IMSRw6MgY2jhu41uJyk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2NvcHlMaW5rKHJvd0RhdGE6IGFueSkge1xuICAgICAgICBjb25zdCBwYXRoID0gYXdhaXQgdGhpcy5nZXRDb3B5UGF0aCh0aGlzLnNldHRpbmcsIHJvd0RhdGEpO1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmNvcHlCeVN0b3JhZ2UocGF0aCk7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJDDoyBzYW8gY2jDqXAgbGnDqm4ga+G6v3QnKTtcbiAgICB9XG5cbiAgICBhc3luYyBfZWRpdChyb3dEYXRhLCBzY29wZURhdGFFZGl0OiBhbnkgPSB7fSkge1xuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVFZGl0KCk7XG4gICAgICAgIGlmICghcmVzdWx0VmFsaWRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGFzaFNob3cgPSByb3dEYXRhW0tleUZsYXNoU2hvd107XG4gICAgICAgIGRlbGV0ZSByb3dEYXRhW0tleUZsYXNoU2hvd107XG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlRWRpdCgpO1xuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBvcHVwSGVhZGVyID0gYENoaSB0aeG6v3QgJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZX1gO1xuICAgICAgICB0aGlzLnNldHRpbmcubWFza0NsYXNzID0gZmxhc2hTaG93ID8gJ2hpZGUnIDogbnVsbDtcbiAgICAgICAgdGhpcy5zY29wZURhdGFFZGl0ID0gc2NvcGVEYXRhRWRpdDtcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHRoaXMuY2xvbmVEYXRhKHJvd0RhdGEpO1xuICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeUVkaXRNb2RlbCh0aGlzLmZvcm1Nb2RlbC5kYXRhLCByb3dEYXRhKTtcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YVtLZXlGbGFzaFNob3ddID0gZmxhc2hTaG93O1xuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZUVkaXQoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIGJlZm9yZUVkaXQoKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgbW9kaWZ5RWRpdE1vZGVsKG1vZGVsRWRpdDogYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb25lRGF0YShyb3dEYXRhKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwaWQ6IHJvd0RhdGEucGlkLFxuICAgICAgICAgICAgYmFzZVBlcm1pc3Npb25CeVBpZDogcm93RGF0YS5iYXNlUGVybWlzc2lvbkJ5UGlkLFxuICAgICAgICAgICAgaWQ6IHJvd0RhdGFbdGhpcy5zZXR0aW5nLmVudGl0eUtleV0sXG4gICAgICAgICAgICBiYXNlUGVybWlzc2lvbjogcm93RGF0YS5iYXNlUGVybWlzc2lvblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldFByb21pc2VEZWxldGVJdGVtKHJvd0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGUocm93RGF0YS5pZCwgdGhpcy5kZWxldGVQbHVzVXJsKTtcbiAgICB9XG5cbiAgICBfZGVsZXRlKHJvd0RhdGEpIHtcbiAgICAgICAgaWYgKHJvd0RhdGEuX19kaXNhYmxlRGVsZXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKCkudGhlbihycyA9PiB7XG4gICAgICAgICAgICBpZiAoIXJzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZURlbGV0ZUl0ZW0ocm93RGF0YSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZm9yZVJlbG9hZEFmdGVyRGVsZXRlKFtyb3dEYXRhLmlkXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93VmVyc2lvbkJ1dHRvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5DT01NT04uUkVMT0FEX0RBVEFfVkVSU0lPTiwge30sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZURhdGFFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0UHJvbWlzZURlbGV0ZUl0ZW1zKGl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW1zLm1hcCh4ID0+IHguaWQpLmpvaW4oJywnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGVNYW55KGlkcywgdGhpcy5kZWxldGVNYW55UGx1c1VybCk7XG4gICAgfVxuXG4gICAgX2RlbGV0ZU11bHRpcGxlKGl0ZW1zKSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlQ29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIHjDs2EgYuG6o24gZ2hpIMSRw6MgY2jhu41uIChWw6AgY8OhYyBi4bqjbiBnaGkgY29uIHTGsMahbmcg4bupbmcpPycpLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgaWYgKCFycykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VEZWxldGVJdGVtcyhpdGVtcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZm9yZVJlbG9hZEFmdGVyRGVsZXRlKGl0ZW1zLm1hcChxID0+IHEuaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYmVmb3JlUmVsb2FkQWZ0ZXJEZWxldGUoaWRzOiBzdHJpbmdbXSkge1xuICAgIH1cblxuICAgIG9uQmVmb3JlQ2FuY2VsKCkge1xuICAgIH1cblxuICAgIF9oYW5kbGVTYXZlZCgpIHtcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICB9XG5cbiAgICBfaGFuZGxlQ2FuY2VsKCRldmVudCkge1xuICAgICAgICB0aGlzLm9uQmVmb3JlQ2FuY2VsKCk7XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3BhY2VkLWNvbW1lbnRcbiAgICAvLyNlbmRyZWdpb25cblxuICAgIGRlZXBDbG9uZShkYXRhKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICB9XG59XG4iXX0=
|