tnx-shared 5.1.192 → 5.1.196
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tnx-shared.umd.js +73 -61
- 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/public-function.d.ts +0 -6
- package/classes/public-function.d.ts.map +1 -1
- package/components/common-app-component/app-topbar-v1/app-topbar-v1.component.d.ts +4 -1
- package/components/common-app-component/app-topbar-v1/app-topbar-v1.component.d.ts.map +1 -1
- package/components/common-app-component/app-topbar-v2/app-topbar-v2.component.d.ts +4 -1
- package/components/common-app-component/app-topbar-v2/app-topbar-v2.component.d.ts.map +1 -1
- package/components/common-app-component/app.topbar.component.d.ts +4 -1
- package/components/common-app-component/app.topbar.component.d.ts.map +1 -1
- package/components/common-app-component/common-app-component.d.ts +3 -1
- package/components/common-app-component/common-app-component.d.ts.map +1 -1
- package/esm2015/classes/public-function.js +1 -7
- package/esm2015/components/chat/chat-box/chat-box.component.js +1 -1
- package/esm2015/components/chat/chat-send-message-box/chat-send-message-box.component.js +1 -1
- package/esm2015/components/common-app-component/app-topbar-v1/app-topbar-v1.component.js +9 -5
- package/esm2015/components/common-app-component/app-topbar-v2/app-topbar-v2.component.js +9 -5
- package/esm2015/components/common-app-component/app.topbar.component.js +9 -5
- package/esm2015/components/common-app-component/common-app-component.js +9 -3
- package/esm2015/components/service-file-upload/service-file-upload.component.js +2 -2
- package/esm2015/public-api.js +2 -1
- package/esm2015/services/base.service.js +4 -1
- package/esm2015/services/common.service.js +1 -1
- package/esm2015/services/customize-ui.service.js +37 -0
- package/esm2015/tnx-shared.js +1 -2
- package/fesm2015/tnx-shared.js +70 -60
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +1 -0
- package/public-api.d.ts.map +1 -1
- package/services/base.service.d.ts +1 -0
- package/services/base.service.d.ts.map +1 -1
- package/services/common.service.d.ts.map +1 -1
- package/services/customize-ui.service.d.ts +14 -0
- package/services/customize-ui.service.d.ts.map +1 -0
- package/services/customize-ui.service.ngfactory.d.ts.map +1 -0
- package/tnx-shared.d.ts +0 -1
- package/tnx-shared.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -680,5 +680,8 @@ export class BaseService {
|
|
|
680
680
|
updateMaPhanCapBase() {
|
|
681
681
|
return this.defaultPost(`${this.serviceUri}/UpdateMaPhanCapBase`, {});
|
|
682
682
|
}
|
|
683
|
+
getTreeDataBase() {
|
|
684
|
+
return this.defaultPost(`${this.serviceUri}/GetTreeDataBase`, {});
|
|
685
|
+
}
|
|
683
686
|
}
|
|
684
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL2Jhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQyxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRixPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUduRCxNQUFNLFVBQVUsR0FBRyxpRkFBaUYsQ0FBQztBQUNyRyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFFaEMsTUFBTSxPQUFnQixXQUFXO0lBcUI3QixZQUNJLElBQWdCLEVBQ2hCLFFBQWtCLEVBQ2xCLFVBQWtCO1FBbkJ0QixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsZUFBVSxHQUFHLFNBQVMsQ0FBQztRQUN2QixjQUFTLEdBQUcsZ0JBQWdCLENBQUM7UUFDN0IseUJBQW9CLEdBQUcs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Q0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLEVBQVU7UUFDdkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUscUJBQXFCLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQixDQUFDLEVBQVU7UUFDN0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsMkJBQTJCLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxtQkFBbUI7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxzQkFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgcmV0cnksIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEcm9wZG93bk9wdGlvbnMsIE9wZXJhdG9yIH0gZnJvbSAnLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZS1saW5rLWJ5LXBlcm1pc3Npb24vbW9kZWxzL3NoYXJlLWxpbmstYnktcGVybWlzc2lvbic7XHJcbmltcG9ydCB7IEZpbHRlciwgR3JpZEluZm8sIFNvcnQgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgZ2V0U3RyaW5nRGF0ZVZOIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuL3NpZ25hbHIuc2VydmljZSc7XHJcblxyXG5cclxuY29uc3QgRVhDRUxfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcclxuY29uc3QgRVhDRUxfRVhURU5TSU9OID0gJy54bHN4JztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlU2VydmljZSB7XHJcbiAgICBfaHR0cDogSHR0cENsaWVudDtcclxuICAgIF9pbmplY3RvcjogSW5qZWN0b3I7XHJcbiAgICBfc2lnbmFsclNlcnZpY2VQcml2YXRlOiBTaWduYWxSU2VydmljZTtcclxuXHJcbiAgICBzZXJ2aWNlVXJpID0gJyc7XHJcbiAgICBlbmRQb2ludCA9ICcnO1xyXG4gICAgc2VydmljZUNvZGUgPSAnJztcclxuICAgIGVudGl0eU5hbWUgPSAnJztcclxuICAgIG9iamVjdE5hbWUgPSAnJztcclxuICAgIHVzZVdvcmtmbG93ID0gZmFsc2U7XHJcbiAgICBhcGlHZXREYXRhID0gJ0dldERhdGEnO1xyXG4gICAgYXBpR2V0QWxsID0gJ0dldEFsbEJ5RmlsdGVyJztcclxuICAgIGFwaUdldERldGFpbEJ5RmlsdGVyID0gJ0dldEJ5RmlsdGVyJztcclxuXHJcbiAgICByZWFkb25seSBSRVRSWV9DT1VOVDogbnVtYmVyID0gMDtcclxuICAgIHJlYWRvbmx5IFJFUExBWV9DT1VOVDogbnVtYmVyID0gMTtcclxuICAgIHJlYWRvbmx5IExJTUlUX0RFRkFVTFQ6IG51bWJlciA9IDEwMDA7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHNlcnZpY2VVcmk6IHN0cmluZ1xyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5faHR0cCA9IGh0dHA7XHJcbiAgICAgICAgdGhpcy5faW5qZWN0b3IgPSBpbmplY3RvcjtcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgPSBzZXJ2aWNlVXJpO1xyXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2VQcml2YXRlID0gaW5qZWN0b3IuZ2V0KFNpZ25hbFJTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRDdXJyZW50U2VydmljZVVyaShrZXk6IHN0cmluZykge1xyXG4gICAgfVxyXG5cclxuICAgIGdldEtleVdvcmtmbG93U2V0dGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5lbnRpdHlOYW1lfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVTaWduYWxSKGNhbGxCYWNrKSB7XHJcbiAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcclxuICAgICAgICAvLyBC4bqvdCDEkeG6p3UgY2jhuqF5XHJcbiAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2VQcml2YXRlLnN0YXJ0KCdDb21tb25IdWInLCB0b3BpYywgKG1lc3NhZ2UpID0+IHtcclxuICAgICAgICAgICAgLy8gdW5zdWJzY3JpYmUgY8OhYyB0b3BpYyDEkcOjIGzhuq9uZyBuZ2hlIHRyxrDhu5tjIMSRw7NcclxuICAgICAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2VQcml2YXRlLnVuU3Vic2NyaWJlVmlld0NvZGUoJ0NvbW1vbkh1YicsIHRvcGljKTtcclxuICAgICAgICAgICAgY2FsbEJhY2sobWVzc2FnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRvcGljO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdW5TdWJzY3JpYmVTaWduYWxSKGtleSkge1xyXG4gICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlUHJpdmF0ZS51blN1YnNjcmliZVZpZXdDb2RlKCdDb21tb25IdWInLCBrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHRHZXRTaWduYWxSKGFwaVVybCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0b3BpYyA9IHRoaXMuc3Vic2NyaWJlU2lnbmFsUihmID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJzID0gSlNPTi5wYXJzZShmKTtcclxuICAgICAgICAgICAgICAgIGlmIChycy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gPT0gLTEgbMOgIHRyxrDhu51uZyBo4bujcCBzZXQga2V5IGLhu4sgbOG7l2lcclxuICAgICAgICAgICAgICAgICAgICBpZiAocnMuZGF0YSAhPSAnLTEnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FjaGVSZXNwb25zZShycy5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFwaVVybC5pbmRleE9mKCc/JykgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGFwaVVybCArPSBgP2A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhcGlVcmwgKz0gYCZgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFwaVVybCArPSBgX2tleVNpZ25hbHI9JHt0b3BpY31gO1xyXG4gICAgICAgICAgICB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXHJcbiAgICAgICAgICAgICAgICApLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5TdWJzY3JpYmVTaWduYWxSKHRvcGljKTtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHRQb3N0U2lnbmFsUihhcGlVcmwsIGRhdGE6IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0b3BpYyA9IHRoaXMuc3Vic2NyaWJlU2lnbmFsUihmID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJzID0gSlNPTi5wYXJzZShmKTtcclxuICAgICAgICAgICAgICAgIGlmIChycy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gPT0gLTEgbMOgIHRyxrDhu51uZyBo4bujcCBzZXQga2V5IGLhu4sgbOG7l2lcclxuICAgICAgICAgICAgICAgICAgICBpZiAocnMuZGF0YSAhPSAnLTEnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FjaGVSZXNwb25zZShycy5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UocmVzLmRhdGEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChhcGlVcmwuaW5kZXhPZignPycpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBhcGlVcmwgKz0gYD9gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXBpVXJsICs9IGAmYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhcGlVcmwgKz0gYF9rZXlTaWduYWxyPSR7dG9waWN9YDtcclxuICAgICAgICAgICAgdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEpXHJcbiAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICAgICAgICAgICkudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51blN1YnNjcmliZVNpZ25hbFIodG9waWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2FjaGVSZXNwb25zZShrZXk6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vQmFzZUdldENhY2hlSW5mby8ke2tleX1gLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdEdyaWRJbmZvKHVybDogc3RyaW5nLCBncmlkSW5mbzogR3JpZEluZm8pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgaWYgKCFncmlkSW5mbykgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oKTtcclxuICAgICAgICBpZiAoZ3JpZEluZm8uZmllbGRzICYmIGdyaWRJbmZvLmZpZWxkcy5zdGFydHNXaXRoKCcsJykpIHtcclxuICAgICAgICAgICAgZ3JpZEluZm8uZmllbGRzID0gZ3JpZEluZm8uZmllbGRzLnN1YnN0cmluZygxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3VybH1gLCBncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QnlHcmlkUmVxdWVzdChncmlkSW5mbzogR3JpZEluZm8sIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGxldCBhcGlVcmwgPSB0aGlzLmFwaUdldERhdGE7XHJcbiAgICAgICAgaWYgKHBsdXNVcmwgIT0gbnVsbCAmJiBwbHVzVXJsICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGFwaVVybCArPSAnLycgKyBwbHVzVXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QnlHcmlkUmVxdWVzdFdpdGhCb2R5T2xkKGdyaWRJbmZvOiBHcmlkSW5mbywgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IGFwaVVybCA9IHRoaXMuYXBpR2V0RGF0YTtcclxuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcclxuICAgICAgICAgICAgYXBpVXJsICs9ICcvJyArIHBsdXNVcmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29udmVydFZhbHVlRmlsdGVyVG9PbGRCYXNlKGdyaWRJbmZvLmZpbHRlcnMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RHcmlkSW5mbyhhcGlVcmwsIGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBiYXNlR2V0VHJlZURhdGEoZ3JpZEluZm86IEdyaWRJbmZvLCBwbHVzVXJsOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBsZXQgYXBpVXJsID0gJ0dldFRyZWVEYXRhJztcclxuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcclxuICAgICAgICAgICAgYXBpVXJsICs9ICcvJyArIHBsdXNVcmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RHcmlkSW5mbyhhcGlVcmwsIGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnZlcnRWYWx1ZUZpbHRlclRvT2xkQmFzZShmaWx0ZXJzOiBGaWx0ZXJbXSkge1xyXG4gICAgICAgIGZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyLmZpbHRlcnMgJiYgZmlsdGVyLmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb252ZXJ0VmFsdWVGaWx0ZXJUb09sZEJhc2UoZmlsdGVyLmZpbHRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBKU09OLnBhcnNlKGZpbHRlci52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0clZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBMw6AgdmFsdWUga2nhu4N1IGRhdGVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyVmFsdWUuaW5kZXhPZignLScpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IGdldFN0cmluZ0RhdGVWTihkYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IHN0clZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2jhu4kgZMO5bmcgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIG114buRbiBn4butaSByZXF1ZXN0IMSR4bq/biBjdXN0b20gcm91dGUgR2V0RGF0YS97cGx1c1VybH1cclxuICAgICAqL1xyXG4gICAgZ2V0RGF0YUN1c3RvbVJvdXRlKHBsdXNVcmw6IHN0cmluZywgZmlsdGVycz86IEZpbHRlcltdLCBmaWVsZHM6IHN0cmluZyA9ICcnLCBzb3J0czogU29ydFtdID0gW10sIHBhZ2VTaXplOiBudW1iZXIgPSAxLCBwYWdlOiBudW1iZXIgPSAxKSB7XHJcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oe1xyXG4gICAgICAgICAgICBmaWVsZHMsXHJcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlLFxyXG4gICAgICAgICAgICAgICAgcGFnZVNpemVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc29ydHMsXHJcbiAgICAgICAgICAgIGZpbHRlcnM6IGZpbHRlcnMgPyBmaWx0ZXJzIDogW11cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCBwbHVzVXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGwoZmlsdGVycz86IEZpbHRlcltdLCBmaWVsZHM6IHN0cmluZyA9ICcnLCBzb3J0czogU29ydFtdID0gW10sIHBsdXNVcmw6IHN0cmluZyA9ICcnKSB7XHJcbiAgICAgICAgbGV0IGFwaVVybCA9IHRoaXMuYXBpR2V0QWxsO1xyXG4gICAgICAgIGlmIChwbHVzVXJsICE9IG51bGwgJiYgcGx1c1VybCAhPSAnJykge1xyXG4gICAgICAgICAgICBhcGlVcmwgKz0gYC8ke3BsdXNVcmx9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oe1xyXG4gICAgICAgICAgICBmaWVsZHMsXHJcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IDk5OVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0cyxcclxuICAgICAgICAgICAgZmlsdGVyczogZmlsdGVycyA/IGZpbHRlcnMgOiBbXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RHcmlkSW5mbyhhcGlVcmwsIGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGxCeUdyaWRJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbywgcGx1c1VybDogc3RyaW5nID0gJycpIHtcclxuICAgICAgICBsZXQgYXBpVXJsID0gdGhpcy5hcGlHZXRBbGw7XHJcbiAgICAgICAgaWYgKHBsdXNVcmwgIT0gbnVsbCAmJiBwbHVzVXJsICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGFwaVVybCArPSBgLyR7cGx1c1VybH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tFeGlzdEJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdKSB7XHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaGVja0V4aXN0YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChhcGlVcmwsIGZpbHRlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrRHVwbGljYXRlZEJ5RmllbGQoZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSwgaWQ6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXHJcbiAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoaWQpXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2hlY2tFeGlzdEJ5RmlsdGVyKGZpbHRlcnMpO1xyXG4gICAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlR3JpZEluZm9Ecm9wZG93bihmaWx0ZXJzOiBGaWx0ZXJbXSwgb3B0aW9uczogRHJvcGRvd25PcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSB7XHJcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IG9wdGlvbnMucGFnZVNpemVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsdGVycyxcclxuICAgICAgICAgICAgc29ydHM6IFtdLFxyXG4gICAgICAgICAgICBmaWVsZHM6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHN0ckZpZWxkID0gYCR7b3B0aW9ucy52YWx1ZUZpZWxkfSR7b3B0aW9ucy5kaXNwbGF5RmllbGQgPT0gb3B0aW9ucy52YWx1ZUZpZWxkID8gJycgOiAnLCcgKyBvcHRpb25zLmRpc3BsYXlGaWVsZH0ke29wdGlvbnMuZmllbGRQbHVzfWA7XHJcbiAgICAgICAgZ3JpZEluZm8uZmllbGRzID0gdGhpcy5fY29tbW9uU2VydmljZS5hZGREaXN0aW5jdChzdHJGaWVsZC5zcGxpdCgnLCcpLCBbXSkudG9TdHJpbmcoKTtcclxuICAgICAgICBpZiAob3B0aW9ucy5zb3J0cyAhPSBudWxsICYmIG9wdGlvbnMuc29ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBncmlkSW5mby5zb3J0cyA9IFsuLi5vcHRpb25zLnNvcnRzXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuc29ydEZpZWxkICE9IG51bGwgJiYgb3B0aW9ucy5zb3J0RmllbGQgIT0gJycpIHtcclxuXHJcbiAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzLnB1c2goeyBmaWVsZDogb3B0aW9ucy5zb3J0RmllbGQsIGRpcjogb3B0aW9ucy5zb3J0RGlyIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZ3JpZEluZm87XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zOiBEcm9wZG93bk9wdGlvbnMpIHtcclxuICAgICAgICBpZiAob3B0aW9ucy5maWVsZFBsdXMubGVuZ3RoID4gMCAmJiAhb3B0aW9ucy5maWVsZFBsdXMuc3RhcnRzV2l0aCgnLCcpKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmllbGRQbHVzID0gJywnICsgb3B0aW9ucy5maWVsZFBsdXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRpb25zLnNvcnRGaWVsZCA9PSAnJykge1xyXG4gICAgICAgICAgICBvcHRpb25zLnNvcnRGaWVsZCA9IG9wdGlvbnMuZGlzcGxheUZpZWxkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldERlZmF1bHRPcHRpb25zVHJlZShvcHRpb25zOiBEcm9wZG93bk9wdGlvbnMsIGZpZWxkUGFyZW50OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAob3B0aW9ucy5maWVsZFBsdXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBvcHRpb25zLmZpZWxkUGx1cyArPSAnLCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wdGlvbnMuZmllbGRQbHVzICs9IGZpZWxkUGFyZW50O1xyXG4gICAgICAgIGlmIChvcHRpb25zLmZpZWxkUGx1cy5sZW5ndGggPiAwICYmICFvcHRpb25zLmZpZWxkUGx1cy5zdGFydHNXaXRoKCcsJykpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5maWVsZFBsdXMgPSAnLCcgKyBvcHRpb25zLmZpZWxkUGx1cztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGF0YURyb3Bkb3duKG9wdGlvbnM/OiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgb3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QnlHcmlkUmVxdWVzdCh0aGlzLmdlbmVyYXRlR3JpZEluZm9Ecm9wZG93bihbXSwgb3B0aW9ucyksIG9wdGlvbnMucGx1c1VybClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGFEcm9wZG93bkJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdLCBvcHRpb25zPzogRHJvcGRvd25PcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIG9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBncmlkSW5mbyA9IHRoaXMuZ2VuZXJhdGVHcmlkSW5mb0Ryb3Bkb3duKGZpbHRlcnMsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pc1NlcnZlckxvYWQpIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvLnBhZ2VJbmZvLnBhZ2VTaXplID0gMTU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm8sIG9wdGlvbnMucGx1c1VybClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxCeUdyaWRJbmZvKGdyaWRJbmZvLCBvcHRpb25zLnBsdXNVcmwpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VHJlZURhdGEocmF3RGF0YSwgZmllbGRQYXJlbnQ6IHN0cmluZywgdmFsdWVQYXJlbnRSb290OiBudW1iZXIsIG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucykge1xyXG4gICAgICAgIGlmIChyYXdEYXRhID09IG51bGwpIHJldHVybiBbXTtcclxuICAgICAgICBjb25zdCBmdW5jRGVRdXkgPSAocmVzdWx0LCBkYXRhcywgcHJlZml4LCBsZXZlbCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtUGFyZW50ID0gcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFzW2ldW2ZpZWxkUGFyZW50XSA9PSBpdGVtUGFyZW50W29wdGlvbnMuZmllbGRQYXJlbnRUcmVlSXRlbV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhc1tpXS5fcHJlZml4ID0gYCR7cHJlZml4fSBgO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzW2ldLl9pbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNbaV0uX2xldmVsID0gbGV2ZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZGF0YXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNEZVF1eShyZXN1bHQsIGRhdGFzLCBwcmVmaXggKyAnLS0tJywgbGV2ZWwgKyAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChyYXdEYXRhW2ldW2ZpZWxkUGFyZW50XSA9PSB2YWx1ZVBhcmVudFJvb3QpIHtcclxuICAgICAgICAgICAgICAgIHJhd0RhdGFbaV0uX3ByZWZpeCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgcmF3RGF0YVtpXS5faW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgcmF3RGF0YVtpXS5fbGV2ZWwgPSAxO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocmF3RGF0YVtpXSk7XHJcbiAgICAgICAgICAgICAgICBmdW5jRGVRdXkocmVzdWx0LCByYXdEYXRhLCAnfC0tLScsIDIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJlZURhdGFEcm9wZG93bihmaWVsZFBhcmVudDogc3RyaW5nLCB2YWx1ZVBhcmVudFJvb3Q6IG51bWJlciA9IC0xLCBvcHRpb25zPzogRHJvcGRvd25PcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIG9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0T3B0aW9uc1RyZWUob3B0aW9ucywgZmllbGRQYXJlbnQpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QnlHcmlkUmVxdWVzdCh0aGlzLmdlbmVyYXRlR3JpZEluZm9Ecm9wZG93bihbXSwgb3B0aW9ucykpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5nZXRUcmVlRGF0YShyZXMuZGF0YSwgZmllbGRQYXJlbnQsIHZhbHVlUGFyZW50Um9vdCwgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmVlRGF0YURyb3Bkb3duQnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10sIGZpZWxkUGFyZW50OiBzdHJpbmcsIHZhbHVlUGFyZW50Um9vdDogbnVtYmVyID0gLTEsIG9wdGlvbnM/OiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgb3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRPcHRpb25zVHJlZShvcHRpb25zLCBmaWVsZFBhcmVudCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZ3JpZEluZm8gPSB0aGlzLmdlbmVyYXRlR3JpZEluZm9Ecm9wZG93bihmaWx0ZXJzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaXNTZXJ2ZXJMb2FkKSB7XHJcbiAgICAgICAgICAgICAgICBncmlkSW5mby5wYWdlSW5mby5wYWdlU2l6ZSA9IDE1O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCBvcHRpb25zLnBsdXNVcmwpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmdldFRyZWVEYXRhKHJlcy5kYXRhLCBmaWVsZFBhcmVudCwgdmFsdWVQYXJlbnRSb290LCBvcHRpb25zKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQnlHcmlkSW5mbyhncmlkSW5mbywgb3B0aW9ucy5wbHVzVXJsKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5nZXRUcmVlRGF0YShyZXMuZGF0YSwgZmllbGRQYXJlbnQsIHZhbHVlUGFyZW50Um9vdCwgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZXRhaWwoaWQ6IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGV0YWlsV2l0aFBlcm1pc3Npb24oaWQ6IGFueSwgcGlkOiBzdHJpbmcgPSBudWxsKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGlmIChwaWQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBwaWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWRFbXB0eSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0RldGFpbFdpdGhQZXJtaXNzaW9uLyR7aWR9P3BpZD0ke3BpZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZXRhaWxCeVBpZChwaWQ6IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0RldGFpbFdpdGhCeVBpZC8ke3BpZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCeUluc3RhbmNlSWQoaW5zdGFuY2VJZDogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QnlJbnN0YWNlSWQvJHtpbnN0YW5jZUlkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERldGFpbEJ5Q29kZShjb2RlOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRCeUNvZGUvJHtjb2RlfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERldGFpbEJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdID0gW10sIHNvcnRzOiBTb3J0W10gPSBbXSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7dGhpcy5hcGlHZXREZXRhaWxCeUZpbHRlcn1gO1xyXG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0ge1xyXG4gICAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiAxXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpbHRlcnMsXHJcbiAgICAgICAgICAgIHNvcnRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMYXN0RGV0YWlsQnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10gPSBbXSwgc29ydHM6IFNvcnRbXSA9IFtdKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0TGFzdEJ5RmlsdGVyYDtcclxuICAgICAgICBjb25zdCBncmlkSW5mbyA9IHtcclxuICAgICAgICAgICAgcGFnZUluZm86IHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IDEsXHJcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmaWx0ZXJzLFxyXG4gICAgICAgICAgICBzb3J0c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0V29ya2Zsb3dTZXR0aW5nQnlDb2RlKHdvcmtmbG93Q29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dTZXR0aW5nID0gKGF3YWl0IHRoaXMuZ2V0RGV0YWlsQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdjb2RlJywgT3BlcmF0b3IuZXF1YWwsIHdvcmtmbG93Q29kZSlcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICkpLmRhdGE7XHJcbiAgICAgICAgaWYgKHdvcmtmbG93U2V0dGluZyA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCBqc29uU2NoZW1hID0gPGFueT53b3JrZmxvd1NldHRpbmdbJ2RhdGEnXTtcclxuICAgICAgICB3b3JrZmxvd1NldHRpbmcuZGF0YSA9IEpTT04ucGFyc2UoanNvblNjaGVtYSk7XHJcbiAgICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lRGF0YSA9IHdvcmtmbG93U2V0dGluZy5kYXRhO1xyXG4gICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgIHN0YXRlTWFjaGluZURhdGEubWFjaGluZXMuZm9yRWFjaChtYWNoaW5lID0+IHtcclxuICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0gPSBbXTtcclxuICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5jb25uZWN0aW9ucy5mb3JFYWNoKGNvbm4gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbm4uc291cmNlID09IG1hY2hpbmUuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnNbbWFjaGluZS5jb2RlXS5wdXNoKGNvbm4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gd29ya2Zsb3dTZXR0aW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbEFzeW5jKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEFzeW5jYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdChpdGVtOiBhbnksIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVyaSA9IHBsdXNVcmwgPyBgJHt0aGlzLnNlcnZpY2VVcml9JHtwbHVzVXJsfWAgOiB0aGlzLnNlcnZpY2VVcmk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHVyaSwgaXRlbSlcclxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1dChpZDogc3RyaW5nLCBpdGVtOiBhbnksIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHBsdXNVcmwgPyBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9JHtwbHVzVXJsfWAgOiBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXRlbSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlKGlkOiBudW1iZXIpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke2lkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0Pih1cmwpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHVybCkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZU1hbnkobHN0SWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0RlbGV0ZU1hbnlBc3luYy8ke2xzdElkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0Pih1cmwpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHRHZXQoYXBpVXJsKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJZ25vcmVDbGllbnRDYWNoZShhcGlVcmwpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tY2FjaGUnIH0pLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBvcHRpb25zKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWZhdWx0UG9zdChhcGlVcmwsIGRhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWZhdWx0UHV0KGFwaVVybCwgZGF0YSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXHJcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVmYXVsdERlbGV0ZShhcGlVcmwpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxyXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVudGl0eU1ldGFkYXRhKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEVudGl0eU1ldGFkYXRhYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybClcclxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlRW50aXR5TWV0YWRhdGEoZGF0YSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1NhdmVFbnRpdHlNZXRhZGF0YWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKVxyXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZU1ldGFkYXRhU3RhdHVzKGlkOiBudW1iZXIsIG1ldGFkYXRhVHlwZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9jaGFuZ2VNZXRhZGF0YVN0YXR1cz9pZD0ke2lkfSZtZXRhZGF0YVN0YXR1c1R5cGU9JHttZXRhZGF0YVR5cGV9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIHt9KS5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUFuZENoYW5nZU1ldGFkYXRhU3RhdHVzKGlkOiBudW1iZXIsIG1ldGFkYXRhVHlwZTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L3NhdmVBbmRDaGFuZ2VNZXRhZGF0YVN0YXR1cz9pZD0ke2lkfSZtZXRhZGF0YVN0YXR1c1R5cGU9JHttZXRhZGF0YVR5cGV9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEpLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFbnRpdHlQZXJtaXNzaW9uKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEVudGl0eVBlcm1pc3Npb25gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxyXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVFbnRpdHlQZXJtaXNzaW9uKGRhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9TYXZlRW50aXR5UGVybWlzc2lvbmA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKVxyXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUVudGl0eVBlcm1pc3Npb24oaWQ6IHN0cmluZywgaXRlbTogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRFbnRpdHlQZXJtaXNzaW9uLyR7aWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXRlbSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlRW50aXR5UGVybWlzc2lvbihpZDogbnVtYmVyKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRGVsZXRlRW50aXR5UGVybWlzc2lvbi8ke2lkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0Pih1cmwpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFdmSGlzdG9yeUJ5RW50aXR5SXRlbShpZDogbnVtYmVyKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0V2ZIaXN0b3J5QnlFbnRpdHlJdGVtLyR7aWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGljU3RhdHVzTmhvbVRyYW5nVGhhaShzdGF0dXNlczogc3RyaW5nW10pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREaWNTdGF0dXNOaG9tVHJhbmdUaGFpYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIHtcclxuICAgICAgICAgICAgbGlzdFN0cmluZ1ZhbHVlOiBzdGF0dXNlc1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlUHJvY2Vzc1dvcmtmbG93KGlkOiBudW1iZXIsIGFjdGlvbkNvZGU6IHN0cmluZywgZGF0YTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9WYWxpZGF0ZVByb2Nlc3NXRi8ke2lkfS8ke2FjdGlvbkNvZGV9YCwgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvY2Vzc1dvcmtmbG93KGlkOiBudW1iZXIsIGFjdGlvbkNvZGU6IHN0cmluZywgZGF0YTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9Qcm9jZXNzV29ya2Zsb3cvJHtpZH0vJHthY3Rpb25Db2RlfWAsIGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXJJblByb2Nlc3NGb3JtKHdvcmtmbG93Q29kZTogc3RyaW5nLCBzdGF0ZUNvZGU6IHN0cmluZywgYWN0aW9uQ29kZTogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0VXNlckluUHJvY2Vzc0Zvcm1CYXNlLyR7d29ya2Zsb3dDb2RlfS8ke3N0YXRlQ29kZX0vJHthY3Rpb25Db2RlfS8ke2l0ZW1JZH1gLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSwgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgY29tbW9uU2VydmljZSA9IGluamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcclxuICAgICAgICByZXR1cm4gY29tbW9uU2VydmljZS5oYW5kbGVFcnJvcihlcnJvciwgaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzYXZlQXNFeGNlbEZpbGUoYnVmZmVyOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkYXRhOiBCbG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcclxuICAgICAgICAgICAgdHlwZTogRVhDRUxfVFlQRVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgZmlsZU5hbWUgKyAnXycgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIEVYQ0VMX0VYVEVOU0lPTik7XHJcbiAgICB9XHJcblxyXG4gICAgcHV0V2l0aFBsdXNVcmwoaWQ6IHN0cmluZywgaXRlbTogYW55LCBwbHVzVXJsOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke2lkfS8ke3BsdXNVcmx9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXRlbSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0QnlGaWVsZChmaWVsZDogc3RyaW5nLCBhcnJWYWx1ZSwgZ2V0RmllbGRzID0gJycsIHNvcnRGaWVsZCA9IG51bGwsIHNvcnREaXIgPSBudWxsKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICAgIGFyclZhbHVlID0gKGFyclZhbHVlIHx8IFtdKS5maWx0ZXIoKHZhbCwgaW5kLCBhcnIpID0+ICh2YWwgPT09IDAgfHwgdmFsKSAmJiBhcnIuaW5kZXhPZih2YWwpID09PSBpbmQpO1xyXG5cclxuICAgICAgICBpZiAoIWFyclZhbHVlIHx8ICFhcnJWYWx1ZS5sZW5ndGgpIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgYXJyRmlsdGVyID0gW25ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmluLFxyXG4gICAgICAgICAgICB2YWx1ZTogYXJyVmFsdWUudG9TdHJpbmcoKVxyXG4gICAgICAgIH0pXTtcclxuXHJcbiAgICAgICAgY29uc3QgYXJyU29ydCA9IFtdO1xyXG4gICAgICAgIGlmIChzb3J0RmllbGQpIHtcclxuICAgICAgICAgICAgYXJyU29ydC5wdXNoKG5ldyBTb3J0KHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiBzb3J0RmllbGQsXHJcbiAgICAgICAgICAgICAgICBkaXI6IHNvcnREaXIgfCAxXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFyclJlc3VsdCA9IChhd2FpdCB0aGlzLmdldEFsbChhcnJGaWx0ZXIsIGdldEZpZWxkcywgYXJyU29ydCkpLmRhdGE7XHJcbiAgICAgICAgcmV0dXJuIChhcnJSZXN1bHQgfHwgW10pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEJ5RmllbGRUb0RpYyhmaWVsZDogc3RyaW5nLCBhcnJWYWx1ZSwgZ2V0RmllbGRzLCBrZXlGaWVsZCA9IG51bGwsIHZhbHVlRmllbGQgPSBudWxsKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBhcnJSZXN1bHQgPSBhd2FpdCB0aGlzLmdldEJ5RmllbGQoZmllbGQsIGFyclZhbHVlLCBnZXRGaWVsZHMpO1xyXG4gICAgICAgIGNvbnN0IHJzRGljID0ge307XHJcbiAgICAgICAgaWYgKCFhcnJSZXN1bHQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByc0RpYztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChrZXlGaWVsZCkge1xyXG4gICAgICAgICAgICBrZXlGaWVsZCA9IGZpZWxkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlRmllbGQpIHtcclxuICAgICAgICAgICAgYXJyUmVzdWx0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICByc0RpY1tpdGVtW2tleUZpZWxkXV0gPSBpdGVtW3ZhbHVlRmllbGRdO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFyclJlc3VsdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgcnNEaWNbaXRlbVtrZXlGaWVsZF1dID0gaXRlbTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcnNEaWM7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RmlsdGVyKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IGFueSwgdmFsdWVJc0ZpZWxkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcclxuICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKSxcclxuICAgICAgICAgICAgdmFsdWVJc0ZpZWxkXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RmlsdGVyVjQoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBmaWVsZCwgb3BlcmF0b3IsXHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RGF0YVRyaW5oS3koaXRlbTogYW55LCByb3dEYXRhPzogYW55KTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnRUb1BkZihpZDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0V4cG9ydFRvUGRmLyR7aWR9YCwge1xyXG4gICAgICAgICAgICBzdHJpbmdWYWx1ZTogY29udGVudFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0V29ya2Zsb3coaWQ6IHN0cmluZywgd29ya2Zsb3dDb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1N0YXJ0V29ya2Zsb3dCYXNlLyR7d29ya2Zsb3dDb2RlfS8ke2lkfWAsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBY3Rpb25BbGxvdyhpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRBY3Rpb25BbGxvdy8ke2lkfWAsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBY3Rpb25BbGxvd0luU3RhcnQod29ya2Zsb3dDb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldEFjdGlvbkFsbG93SW5TdGFydC8ke3dvcmtmbG93Q29kZX1gLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlU3RhdGUoaXRlbVdvcmtmbG93SGlzdG9yeTogYW55KSB7XHJcbiAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd0hpc3RvcnkpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZGVwYXJ0bWVudElkcykge1xyXG4gICAgICAgICAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5kb25WaUlkcyA9IGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZGVwYXJ0bWVudElkcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeS5kZXBhcnRtZW50Vmlld0lkcykge1xyXG4gICAgICAgICAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5kb25WaVZpZXdJZHMgPSBpdGVtV29ya2Zsb3dIaXN0b3J5LmRlcGFydG1lbnRWaWV3SWRzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vQ2hhbmdlU3RhdGVCYXNlYCwgaXRlbVdvcmtmbG93SGlzdG9yeSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hvWUtpZW4oaXRlbVdvcmtmbG93SGlzdG9yeTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaG9ZS2llbkJhc2VgLCBpdGVtV29ya2Zsb3dIaXN0b3J5KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQZXJtaXNzaW9uU2hhcmVkQnlJdGVtSWRzKGlkczogc3RyaW5nW10pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBlcm1pc3Npb25TaGFyZWRCeUl0ZW1JZHNgLCB7XHJcbiAgICAgICAgICAgIGxpc3RHdWlkVmFsdWU6IGlkc1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNoYXJlZEtleShkYXRhOiBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0U2hhcmVkS2V5SXRlbUJhc2VgLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVMaW5rU2hhcmluZyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZWxldGVMaW5rU2hhcmluZ2AsIHtcclxuICAgICAgICAgICAgbGlzdEd1aWRWYWx1ZTogaWRzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcm9sbGJhY2socm93RGF0YSwgbHN0T2JqZWN0TmFtZTogc3RyaW5nW10pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1JvbGxiYWNrQmFzZS8ke3Jvd0RhdGEuX193b3JrZmxvd0NvZGV9LyR7cm93RGF0YS5pZH1gLCB7XHJcbiAgICAgICAgICAgIExpc3RTdHJpbmdWYWx1ZTogbHN0T2JqZWN0TmFtZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJvbGxiYWNrQnlIaXN0b3J5KGl0ZW1JZDogc3RyaW5nLCBpZEhpc3Rvcnk6IHN0cmluZywgbHN0T2JqZWN0TmFtZTogc3RyaW5nW10pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1JvbGxiYWNrQmFzZUJ5SGlzdG9yeS8ke2l0ZW1JZH0vJHtpZEhpc3Rvcnl9YCwge1xyXG4gICAgICAgICAgICBMaXN0U3RyaW5nVmFsdWU6IGxzdE9iamVjdE5hbWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvbGxiYWNrIHF1eSB0csOsbmggduG7gSB0cuG6oW5nIHRow6FpIHRyxrDhu5tjXHJcbiAgICAgKiBAcGFyYW0gaWQgaWQgY+G7p2EgYuG6o24gZ2hpXHJcbiAgICAgKi9cclxuICAgIHJvbGxiYWNrV29ya2Zsb3coaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vUm9sbGJhY2tXb3JrZmxvdy8ke2lkfWAsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0cuG6oW5nIHRow6FpIHdvcmtmbG93IGNvcmUgc2FuZyDEkcOjIGR1eeG7h3QgcXV54bq/dCDEkeG7i25oXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZURhRHV5ZXRRdXlldERpbmgoaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlRGFEdXlldFF1eWV0RGluaC8ke2lkfWAsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVNYVBoYW5DYXBCYXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlTWFQaGFuQ2FwQmFzZWAsIHt9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
687
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL2Jhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQyxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRixPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUduRCxNQUFNLFVBQVUsR0FBRyxpRkFBaUYsQ0FBQztBQUNyRyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFFaEMsTUFBTSxPQUFnQixXQUFXO0lBcUI3QixZQUNJLElBQWdCLEVBQ2hCLFFBQWtCLEVBQ2xCLFVBQWtCO1FBbkJ0QixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsZUFBVSxHQUFHLFNBQVMsQ0FBQztRQUN2QixjQUFTLEdBQUcsZ0JBQWdCLENBQUM7UUFDN0IseUJBQW9CLEdBQUcs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Q0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLEVBQVU7UUFDdkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUscUJBQXFCLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQixDQUFDLEVBQVU7UUFDN0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsMkJBQTJCLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxtQkFBbUI7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxzQkFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsZUFBZTtRQUNYLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCByZXRyeSwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9ucywgT3BlcmF0b3IgfSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgTW9kZWxTaGFyZUxpbmtCeVBlcm1pc3Npb24gfSBmcm9tICcuLi9jb21wb25lbnRzL3NoYXJlLWxpbmstYnktcGVybWlzc2lvbi9tb2RlbHMvc2hhcmUtbGluay1ieS1wZXJtaXNzaW9uJztcclxuaW1wb3J0IHsgRmlsdGVyLCBHcmlkSW5mbywgU29ydCB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBnZXRTdHJpbmdEYXRlVk4gfSBmcm9tICcuLi91dGlscy9kYXRlJztcclxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4vY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaWduYWxSU2VydmljZSB9IGZyb20gJy4vc2lnbmFsci5zZXJ2aWNlJztcclxuXHJcblxyXG5jb25zdCBFWENFTF9UWVBFID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xyXG5jb25zdCBFWENFTF9FWFRFTlNJT04gPSAnLnhsc3gnO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VTZXJ2aWNlIHtcclxuICAgIF9odHRwOiBIdHRwQ2xpZW50O1xyXG4gICAgX2luamVjdG9yOiBJbmplY3RvcjtcclxuICAgIF9zaWduYWxyU2VydmljZVByaXZhdGU6IFNpZ25hbFJTZXJ2aWNlO1xyXG5cclxuICAgIHNlcnZpY2VVcmkgPSAnJztcclxuICAgIGVuZFBvaW50ID0gJyc7XHJcbiAgICBzZXJ2aWNlQ29kZSA9ICcnO1xyXG4gICAgZW50aXR5TmFtZSA9ICcnO1xyXG4gICAgb2JqZWN0TmFtZSA9ICcnO1xyXG4gICAgdXNlV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgIGFwaUdldERhdGEgPSAnR2V0RGF0YSc7XHJcbiAgICBhcGlHZXRBbGwgPSAnR2V0QWxsQnlGaWx0ZXInO1xyXG4gICAgYXBpR2V0RGV0YWlsQnlGaWx0ZXIgPSAnR2V0QnlGaWx0ZXInO1xyXG5cclxuICAgIHJlYWRvbmx5IFJFVFJZX0NPVU5UOiBudW1iZXIgPSAwO1xyXG4gICAgcmVhZG9ubHkgUkVQTEFZX0NPVU5UOiBudW1iZXIgPSAxO1xyXG4gICAgcmVhZG9ubHkgTElNSVRfREVGQVVMVDogbnVtYmVyID0gMTAwMDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgc2VydmljZVVyaTogc3RyaW5nXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLl9odHRwID0gaHR0cDtcclxuICAgICAgICB0aGlzLl9pbmplY3RvciA9IGluamVjdG9yO1xyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSA9IHNlcnZpY2VVcmk7XHJcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZSA9IGluamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZVByaXZhdGUgPSBpbmplY3Rvci5nZXQoU2lnbmFsUlNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEN1cnJlbnRTZXJ2aWNlVXJpKGtleTogc3RyaW5nKSB7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0S2V5V29ya2Zsb3dTZXR0aW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmVudGl0eU5hbWV9YDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN1YnNjcmliZVNpZ25hbFIoY2FsbEJhY2spIHtcclxuICAgICAgICBjb25zdCB0b3BpYyA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xyXG4gICAgICAgIC8vIELhuq90IMSR4bqndSBjaOG6oXlcclxuICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZVByaXZhdGUuc3RhcnQoJ0NvbW1vbkh1YicsIHRvcGljLCAobWVzc2FnZSkgPT4ge1xyXG4gICAgICAgICAgICAvLyB1bnN1YnNjcmliZSBjw6FjIHRvcGljIMSRw6MgbOG6r25nIG5naGUgdHLGsOG7m2MgxJHDs1xyXG4gICAgICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZVByaXZhdGUudW5TdWJzY3JpYmVWaWV3Q29kZSgnQ29tbW9uSHViJywgdG9waWMpO1xyXG4gICAgICAgICAgICBjYWxsQmFjayhtZXNzYWdlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdG9waWM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1blN1YnNjcmliZVNpZ25hbFIoa2V5KSB7XHJcbiAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2VQcml2YXRlLnVuU3Vic2NyaWJlVmlld0NvZGUoJ0NvbW1vbkh1YicsIGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVmYXVsdEdldFNpZ25hbFIoYXBpVXJsKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvcGljID0gdGhpcy5zdWJzY3JpYmVTaWduYWxSKGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcnMgPSBKU09OLnBhcnNlKGYpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyA9PSAtMSBsw6AgdHLGsOG7nW5nIGjhu6NwIHNldCBrZXkgYuG7iyBs4buXaVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5kYXRhICE9ICctMScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDYWNoZVJlc3BvbnNlKHJzLmRhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXBpVXJsLmluZGV4T2YoJz8nKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgYXBpVXJsICs9IGA/YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFwaVVybCArPSBgJmA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXBpVXJsICs9IGBfa2V5U2lnbmFscj0ke3RvcGljfWA7XHJcbiAgICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXHJcbiAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICAgICAgICAgICkudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51blN1YnNjcmliZVNpZ25hbFIodG9waWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVmYXVsdFBvc3RTaWduYWxSKGFwaVVybCwgZGF0YTogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvcGljID0gdGhpcy5zdWJzY3JpYmVTaWduYWxSKGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcnMgPSBKU09OLnBhcnNlKGYpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyA9PSAtMSBsw6AgdHLGsOG7nW5nIGjhu6NwIHNldCBrZXkgYuG7iyBs4buXaVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5kYXRhICE9ICctMScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDYWNoZVJlc3BvbnNlKHJzLmRhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShyZXMuZGF0YSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGFwaVVybC5pbmRleE9mKCc/JykgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGFwaVVybCArPSBgP2A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhcGlVcmwgKz0gYCZgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFwaVVybCArPSBgX2tleVNpZ25hbHI9JHt0b3BpY31gO1xyXG4gICAgICAgICAgICB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSlcclxuICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxyXG4gICAgICAgICAgICAgICAgKS50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuU3Vic2NyaWJlU2lnbmFsUih0b3BpYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDYWNoZVJlc3BvbnNlKGtleTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9CYXNlR2V0Q2FjaGVJbmZvLyR7a2V5fWAsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBwb3N0R3JpZEluZm8odXJsOiBzdHJpbmcsIGdyaWRJbmZvOiBHcmlkSW5mbyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBpZiAoIWdyaWRJbmZvKSBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbygpO1xyXG4gICAgICAgIGlmIChncmlkSW5mby5maWVsZHMgJiYgZ3JpZEluZm8uZmllbGRzLnN0YXJ0c1dpdGgoJywnKSkge1xyXG4gICAgICAgICAgICBncmlkSW5mby5maWVsZHMgPSBncmlkSW5mby5maWVsZHMuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9LyR7dXJsfWAsIGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvOiBHcmlkSW5mbywgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IGFwaVVybCA9IHRoaXMuYXBpR2V0RGF0YTtcclxuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcclxuICAgICAgICAgICAgYXBpVXJsICs9ICcvJyArIHBsdXNVcmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RHcmlkSW5mbyhhcGlVcmwsIGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCeUdyaWRSZXF1ZXN0V2l0aEJvZHlPbGQoZ3JpZEluZm86IEdyaWRJbmZvLCBwbHVzVXJsOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBsZXQgYXBpVXJsID0gdGhpcy5hcGlHZXREYXRhO1xyXG4gICAgICAgIGlmIChwbHVzVXJsICE9IG51bGwgJiYgcGx1c1VybCAhPSAnJykge1xyXG4gICAgICAgICAgICBhcGlVcmwgKz0gJy8nICsgcGx1c1VybDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb252ZXJ0VmFsdWVGaWx0ZXJUb09sZEJhc2UoZ3JpZEluZm8uZmlsdGVycyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEdyaWRJbmZvKGFwaVVybCwgZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGJhc2VHZXRUcmVlRGF0YShncmlkSW5mbzogR3JpZEluZm8sIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGxldCBhcGlVcmwgPSAnR2V0VHJlZURhdGEnO1xyXG4gICAgICAgIGlmIChwbHVzVXJsICE9IG51bGwgJiYgcGx1c1VybCAhPSAnJykge1xyXG4gICAgICAgICAgICBhcGlVcmwgKz0gJy8nICsgcGx1c1VybDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEdyaWRJbmZvKGFwaVVybCwgZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29udmVydFZhbHVlRmlsdGVyVG9PbGRCYXNlKGZpbHRlcnM6IEZpbHRlcltdKSB7XHJcbiAgICAgICAgZmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIuZmlsdGVycyAmJiBmaWx0ZXIuZmlsdGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnZlcnRWYWx1ZUZpbHRlclRvT2xkQmFzZShmaWx0ZXIuZmlsdGVycyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IEpTT04ucGFyc2UoZmlsdGVyLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyVmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEzDoCB2YWx1ZSBraeG7g3UgZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJWYWx1ZS5pbmRleE9mKCctJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlID0gZ2V0U3RyaW5nRGF0ZVZOKGRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlID0gc3RyVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaOG7iSBkw7luZyB0cm9uZyB0csaw4budbmcgaOG7o3AgbXXhu5FuIGfhu61pIHJlcXVlc3QgxJHhur9uIGN1c3RvbSByb3V0ZSBHZXREYXRhL3twbHVzVXJsfVxyXG4gICAgICovXHJcbiAgICBnZXREYXRhQ3VzdG9tUm91dGUocGx1c1VybDogc3RyaW5nLCBmaWx0ZXJzPzogRmlsdGVyW10sIGZpZWxkczogc3RyaW5nID0gJycsIHNvcnRzOiBTb3J0W10gPSBbXSwgcGFnZVNpemU6IG51bWJlciA9IDEsIHBhZ2U6IG51bWJlciA9IDEpIHtcclxuICAgICAgICBjb25zdCBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XHJcbiAgICAgICAgICAgIGZpZWxkcyxcclxuICAgICAgICAgICAgcGFnZUluZm86IHtcclxuICAgICAgICAgICAgICAgIHBhZ2UsXHJcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0cyxcclxuICAgICAgICAgICAgZmlsdGVyczogZmlsdGVycyA/IGZpbHRlcnMgOiBbXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm8sIHBsdXNVcmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbChmaWx0ZXJzPzogRmlsdGVyW10sIGZpZWxkczogc3RyaW5nID0gJycsIHNvcnRzOiBTb3J0W10gPSBbXSwgcGx1c1VybDogc3RyaW5nID0gJycpIHtcclxuICAgICAgICBsZXQgYXBpVXJsID0gdGhpcy5hcGlHZXRBbGw7XHJcbiAgICAgICAgaWYgKHBsdXNVcmwgIT0gbnVsbCAmJiBwbHVzVXJsICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGFwaVVybCArPSBgLyR7cGx1c1VybH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XHJcbiAgICAgICAgICAgIGZpZWxkcyxcclxuICAgICAgICAgICAgcGFnZUluZm86IHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IDEsXHJcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogOTk5XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnRzLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiBmaWx0ZXJzID8gZmlsdGVycyA6IFtdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEdyaWRJbmZvKGFwaVVybCwgZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbEJ5R3JpZEluZm8oZ3JpZEluZm86IEdyaWRJbmZvLCBwbHVzVXJsOiBzdHJpbmcgPSAnJykge1xyXG4gICAgICAgIGxldCBhcGlVcmwgPSB0aGlzLmFwaUdldEFsbDtcclxuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcclxuICAgICAgICAgICAgYXBpVXJsICs9IGAvJHtwbHVzVXJsfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RHcmlkSW5mbyhhcGlVcmwsIGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0V4aXN0QnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10pIHtcclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NoZWNrRXhpc3RgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGFwaVVybCwgZmlsdGVycyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tEdXBsaWNhdGVkQnlGaWVsZChmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55LCBpZDogYW55KSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IFtcclxuICAgICAgICAgICAgbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcclxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5lcXVhbCxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShpZClcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmFsdWUpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jaGVja0V4aXN0QnlGaWx0ZXIoZmlsdGVycyk7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQuc3VjY2VzcykgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2VuZXJhdGVHcmlkSW5mb0Ryb3Bkb3duKGZpbHRlcnM6IEZpbHRlcltdLCBvcHRpb25zOiBEcm9wZG93bk9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBncmlkSW5mbyA9IHtcclxuICAgICAgICAgICAgcGFnZUluZm86IHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IDEsXHJcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogb3B0aW9ucy5wYWdlU2l6ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmaWx0ZXJzLFxyXG4gICAgICAgICAgICBzb3J0czogW10sXHJcbiAgICAgICAgICAgIGZpZWxkczogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc3RyRmllbGQgPSBgJHtvcHRpb25zLnZhbHVlRmllbGR9JHtvcHRpb25zLmRpc3BsYXlGaWVsZCA9PSBvcHRpb25zLnZhbHVlRmllbGQgPyAnJyA6ICcsJyArIG9wdGlvbnMuZGlzcGxheUZpZWxkfSR7b3B0aW9ucy5maWVsZFBsdXN9YDtcclxuICAgICAgICBncmlkSW5mby5maWVsZHMgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmFkZERpc3RpbmN0KHN0ckZpZWxkLnNwbGl0KCcsJyksIFtdKS50b1N0cmluZygpO1xyXG4gICAgICAgIGlmIChvcHRpb25zLnNvcnRzICE9IG51bGwgJiYgb3B0aW9ucy5zb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzID0gWy4uLm9wdGlvbnMuc29ydHNdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0aW9ucy5zb3J0RmllbGQgIT0gbnVsbCAmJiBvcHRpb25zLnNvcnRGaWVsZCAhPSAnJykge1xyXG5cclxuICAgICAgICAgICAgZ3JpZEluZm8uc29ydHMucHVzaCh7IGZpZWxkOiBvcHRpb25zLnNvcnRGaWVsZCwgZGlyOiBvcHRpb25zLnNvcnREaXIgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBncmlkSW5mbztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucykge1xyXG4gICAgICAgIGlmIChvcHRpb25zLmZpZWxkUGx1cy5sZW5ndGggPiAwICYmICFvcHRpb25zLmZpZWxkUGx1cy5zdGFydHNXaXRoKCcsJykpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5maWVsZFBsdXMgPSAnLCcgKyBvcHRpb25zLmZpZWxkUGx1cztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuc29ydEZpZWxkID09ICcnKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuc29ydEZpZWxkID0gb3B0aW9ucy5kaXNwbGF5RmllbGQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0RGVmYXVsdE9wdGlvbnNUcmVlKG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucywgZmllbGRQYXJlbnQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChvcHRpb25zLmZpZWxkUGx1cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuZmllbGRQbHVzICs9ICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgb3B0aW9ucy5maWVsZFBsdXMgKz0gZmllbGRQYXJlbnQ7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZmllbGRQbHVzLmxlbmd0aCA+IDAgJiYgIW9wdGlvbnMuZmllbGRQbHVzLnN0YXJ0c1dpdGgoJywnKSkge1xyXG4gICAgICAgICAgICBvcHRpb25zLmZpZWxkUGx1cyA9ICcsJyArIG9wdGlvbnMuZmllbGRQbHVzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhRHJvcGRvd24ob3B0aW9ucz86IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSBvcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZXRCeUdyaWRSZXF1ZXN0KHRoaXMuZ2VuZXJhdGVHcmlkSW5mb0Ryb3Bkb3duKFtdLCBvcHRpb25zKSwgb3B0aW9ucy5wbHVzVXJsKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10sIG9wdGlvbnM/OiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgb3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyaWRJbmZvID0gdGhpcy5nZW5lcmF0ZUdyaWRJbmZvRHJvcGRvd24oZmlsdGVycywgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmlzU2VydmVyTG9hZCkge1xyXG4gICAgICAgICAgICAgICAgZ3JpZEluZm8ucGFnZUluZm8ucGFnZVNpemUgPSAxNTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QnlHcmlkUmVxdWVzdChncmlkSW5mbywgb3B0aW9ucy5wbHVzVXJsKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbEJ5R3JpZEluZm8oZ3JpZEluZm8sIG9wdGlvbnMucGx1c1VybClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRUcmVlRGF0YShyYXdEYXRhLCBmaWVsZFBhcmVudDogc3RyaW5nLCB2YWx1ZVBhcmVudFJvb3Q6IG51bWJlciwgb3B0aW9uczogRHJvcGRvd25PcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHJhd0RhdGEgPT0gbnVsbCkgcmV0dXJuIFtdO1xyXG4gICAgICAgIGNvbnN0IGZ1bmNEZVF1eSA9IChyZXN1bHQsIGRhdGFzLCBwcmVmaXgsIGxldmVsKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1QYXJlbnQgPSByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YXNbaV1bZmllbGRQYXJlbnRdID09IGl0ZW1QYXJlbnRbb3B0aW9ucy5maWVsZFBhcmVudFRyZWVJdGVtXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzW2ldLl9wcmVmaXggPSBgJHtwcmVmaXh9IGA7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNbaV0uX2luZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhc1tpXS5fbGV2ZWwgPSBsZXZlbDtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChkYXRhc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY0RlUXV5KHJlc3VsdCwgZGF0YXMsIHByZWZpeCArICctLS0nLCBsZXZlbCArIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhd0RhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHJhd0RhdGFbaV1bZmllbGRQYXJlbnRdID09IHZhbHVlUGFyZW50Um9vdCkge1xyXG4gICAgICAgICAgICAgICAgcmF3RGF0YVtpXS5fcHJlZml4ID0gJyc7XHJcbiAgICAgICAgICAgICAgICByYXdEYXRhW2ldLl9pbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICByYXdEYXRhW2ldLl9sZXZlbCA9IDE7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChyYXdEYXRhW2ldKTtcclxuICAgICAgICAgICAgICAgIGZ1bmNEZVF1eShyZXN1bHQsIHJhd0RhdGEsICd8LS0tJywgMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmVlRGF0YURyb3Bkb3duKGZpZWxkUGFyZW50OiBzdHJpbmcsIHZhbHVlUGFyZW50Um9vdDogbnVtYmVyID0gLTEsIG9wdGlvbnM/OiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgb3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRPcHRpb25zVHJlZShvcHRpb25zLCBmaWVsZFBhcmVudCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZXRCeUdyaWRSZXF1ZXN0KHRoaXMuZ2VuZXJhdGVHcmlkSW5mb0Ryb3Bkb3duKFtdLCBvcHRpb25zKSlcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmdldFRyZWVEYXRhKHJlcy5kYXRhLCBmaWVsZFBhcmVudCwgdmFsdWVQYXJlbnRSb290LCBvcHRpb25zKSk7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyZWVEYXRhRHJvcGRvd25CeUZpbHRlcihmaWx0ZXJzOiBGaWx0ZXJbXSwgZmllbGRQYXJlbnQ6IHN0cmluZywgdmFsdWVQYXJlbnRSb290OiBudW1iZXIgPSAtMSwgb3B0aW9ucz86IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSBvcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdE9wdGlvbnNUcmVlKG9wdGlvbnMsIGZpZWxkUGFyZW50KTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBncmlkSW5mbyA9IHRoaXMuZ2VuZXJhdGVHcmlkSW5mb0Ryb3Bkb3duKGZpbHRlcnMsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pc1NlcnZlckxvYWQpIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvLnBhZ2VJbmZvLnBhZ2VTaXplID0gMTU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm8sIG9wdGlvbnMucGx1c1VybClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuZ2V0VHJlZURhdGEocmVzLmRhdGEsIGZpZWxkUGFyZW50LCB2YWx1ZVBhcmVudFJvb3QsIG9wdGlvbnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxCeUdyaWRJbmZvKGdyaWRJbmZvLCBvcHRpb25zLnBsdXNVcmwpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmdldFRyZWVEYXRhKHJlcy5kYXRhLCBmaWVsZFBhcmVudCwgdmFsdWVQYXJlbnRSb290LCBvcHRpb25zKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERldGFpbChpZDogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vJHtpZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZXRhaWxXaXRoUGVybWlzc2lvbihpZDogYW55LCBwaWQ6IHN0cmluZyA9IG51bGwpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgaWYgKHBpZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHBpZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRGV0YWlsV2l0aFBlcm1pc3Npb24vJHtpZH0/cGlkPSR7cGlkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERldGFpbEJ5UGlkKHBpZDogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRGV0YWlsV2l0aEJ5UGlkLyR7cGlkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJ5SW5zdGFuY2VJZChpbnN0YW5jZUlkOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRCeUluc3RhY2VJZC8ke2luc3RhbmNlSWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGV0YWlsQnlDb2RlKGNvZGU6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEJ5Q29kZS8ke2NvZGV9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGV0YWlsQnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10gPSBbXSwgc29ydHM6IFNvcnRbXSA9IFtdKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vJHt0aGlzLmFwaUdldERldGFpbEJ5RmlsdGVyfWA7XHJcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSB7XHJcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IDFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsdGVycyxcclxuICAgICAgICAgICAgc29ydHNcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhc3REZXRhaWxCeUZpbHRlcihmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdLCBzb3J0czogU29ydFtdID0gW10pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRMYXN0QnlGaWx0ZXJgO1xyXG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0ge1xyXG4gICAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiAxXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpbHRlcnMsXHJcbiAgICAgICAgICAgIHNvcnRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRXb3JrZmxvd1NldHRpbmdCeUNvZGUod29ya2Zsb3dDb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB3b3JrZmxvd1NldHRpbmcgPSAoYXdhaXQgdGhpcy5nZXREZXRhaWxCeUZpbHRlcihcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2NvZGUnLCBPcGVyYXRvci5lcXVhbCwgd29ya2Zsb3dDb2RlKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgKSkuZGF0YTtcclxuICAgICAgICBpZiAod29ya2Zsb3dTZXR0aW5nID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IGpzb25TY2hlbWEgPSA8YW55PndvcmtmbG93U2V0dGluZ1snZGF0YSddO1xyXG4gICAgICAgIHdvcmtmbG93U2V0dGluZy5kYXRhID0gSlNPTi5wYXJzZShqc29uU2NoZW1hKTtcclxuICAgICAgICBjb25zdCBzdGF0ZU1hY2hpbmVEYXRhID0gd29ya2Zsb3dTZXR0aW5nLmRhdGE7XHJcbiAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zID0ge307XHJcbiAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5tYWNoaW5lcy5mb3JFYWNoKG1hY2hpbmUgPT4ge1xyXG4gICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnNbbWFjaGluZS5jb2RlXSA9IFtdO1xyXG4gICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmNvbm5lY3Rpb25zLmZvckVhY2goY29ubiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29ubi5zb3VyY2UgPT0gbWFjaGluZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdLnB1c2goY29ubik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB3b3JrZmxvd1NldHRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsQXN5bmMoKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QXN5bmNgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwb3N0KGl0ZW06IGFueSwgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJpID0gcGx1c1VybCA/IGAke3RoaXMuc2VydmljZVVyaX0ke3BsdXNVcmx9YCA6IHRoaXMuc2VydmljZVVyaTtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxyXG4gICAgICAgICAgICAucG9zdDxSZXNwb25zZVJlc3VsdD4odXJpLCBpdGVtKVxyXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHV0KGlkOiBzdHJpbmcsIGl0ZW06IGFueSwgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gcGx1c1VybCA/IGAke3RoaXMuc2VydmljZVVyaX0vJHtpZH0ke3BsdXNVcmx9YCA6IGAke3RoaXMuc2VydmljZVVyaX0vJHtpZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnB1dDxSZXNwb25zZVJlc3VsdD4odXJsLCBpdGVtKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUoaWQ6IG51bWJlcik6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHVybCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQnlJZChpZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vJHtpZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZTxSZXNwb25zZVJlc3VsdD4odXJsKS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxyXG4gICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlTWFueShsc3RJZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRGVsZXRlTWFueUFzeW5jLyR7bHN0SWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHVybCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVmYXVsdEdldChhcGlVcmwpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxyXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldElnbm9yZUNsaWVudENhY2hlKGFwaVVybCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZScgfSksXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIG9wdGlvbnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxyXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHRQb3N0KGFwaVVybCwgZGF0YSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxyXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHRQdXQoYXBpVXJsLCBkYXRhKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnB1dDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWZhdWx0RGVsZXRlKGFwaVVybCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXHJcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RW50aXR5TWV0YWRhdGEoKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RW50aXR5TWV0YWRhdGFgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxyXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVFbnRpdHlNZXRhZGF0YShkYXRhKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vU2F2ZUVudGl0eU1ldGFkYXRhYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEpXHJcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlTWV0YWRhdGFTdGF0dXMoaWQ6IG51bWJlciwgbWV0YWRhdGFUeXBlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L2NoYW5nZU1ldGFkYXRhU3RhdHVzP2lkPSR7aWR9Jm1ldGFkYXRhU3RhdHVzVHlwZT0ke21ldGFkYXRhVHlwZX1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwge30pLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQW5kQ2hhbmdlTWV0YWRhdGFTdGF0dXMoaWQ6IG51bWJlciwgbWV0YWRhdGFUeXBlOiBzdHJpbmcsIGRhdGE6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vc2F2ZUFuZENoYW5nZU1ldGFkYXRhU3RhdHVzP2lkPSR7aWR9Jm1ldGFkYXRhU3RhdHVzVHlwZT0ke21ldGFkYXRhVHlwZX1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSkucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVudGl0eVBlcm1pc3Npb24oKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RW50aXR5UGVybWlzc2lvbmA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXHJcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUVudGl0eVBlcm1pc3Npb24oZGF0YSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1NhdmVFbnRpdHlQZXJtaXNzaW9uYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEpXHJcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlRW50aXR5UGVybWlzc2lvbihpZDogc3RyaW5nLCBpdGVtOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdEVudGl0eVBlcm1pc3Npb24vJHtpZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnB1dDxSZXNwb25zZVJlc3VsdD4odXJsLCBpdGVtKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVFbnRpdHlQZXJtaXNzaW9uKGlkOiBudW1iZXIpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZWxldGVFbnRpdHlQZXJtaXNzaW9uLyR7aWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHVybCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0V2ZIaXN0b3J5QnlFbnRpdHlJdGVtKGlkOiBudW1iZXIpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRXZkhpc3RvcnlCeUVudGl0eUl0ZW0vJHtpZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4odXJsKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaWNTdGF0dXNOaG9tVHJhbmdUaGFpKHN0YXR1c2VzOiBzdHJpbmdbXSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldERpY1N0YXR1c05ob21UcmFuZ1RoYWlgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwge1xyXG4gICAgICAgICAgICBsaXN0U3RyaW5nVmFsdWU6IHN0YXR1c2VzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGVQcm9jZXNzV29ya2Zsb3coaWQ6IG51bWJlciwgYWN0aW9uQ29kZTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1ZhbGlkYXRlUHJvY2Vzc1dGLyR7aWR9LyR7YWN0aW9uQ29kZX1gLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9jZXNzV29ya2Zsb3coaWQ6IG51bWJlciwgYWN0aW9uQ29kZTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1Byb2Nlc3NXb3JrZmxvdy8ke2lkfS8ke2FjdGlvbkNvZGV9YCwgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlckluUHJvY2Vzc0Zvcm0od29ya2Zsb3dDb2RlOiBzdHJpbmcsIHN0YXRlQ29kZTogc3RyaW5nLCBhY3Rpb25Db2RlOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRVc2VySW5Qcm9jZXNzRm9ybUJhc2UvJHt3b3JrZmxvd0NvZGV9LyR7c3RhdGVDb2RlfS8ke2FjdGlvbkNvZGV9LyR7aXRlbUlkfWAsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvcihlcnJvcjogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBjb21tb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xyXG4gICAgICAgIHJldHVybiBjb21tb25TZXJ2aWNlLmhhbmRsZUVycm9yKGVycm9yLCBpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNhdmVBc0V4Y2VsRmlsZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xyXG4gICAgICAgICAgICB0eXBlOiBFWENFTF9UWVBFXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhkYXRhLCBmaWxlTmFtZSArICdfJyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgRVhDRUxfRVhURU5TSU9OKTtcclxuICAgIH1cclxuXHJcbiAgICBwdXRXaXRoUGx1c1VybChpZDogc3RyaW5nLCBpdGVtOiBhbnksIHBsdXNVcmw6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9LyR7cGx1c1VybH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnB1dDxSZXNwb25zZVJlc3VsdD4odXJsLCBpdGVtKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRCeUZpZWxkKGZpZWxkOiBzdHJpbmcsIGFyclZhbHVlLCBnZXRGaWVsZHMgPSAnJywgc29ydEZpZWxkID0gbnVsbCwgc29ydERpciA9IG51bGwpOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgYXJyVmFsdWUgPSAoYXJyVmFsdWUgfHwgW10pLmZpbHRlcigodmFsLCBpbmQsIGFycikgPT4gKHZhbCA9PT0gMCB8fCB2YWwpICYmIGFyci5pbmRleE9mKHZhbCkgPT09IGluZCk7XHJcblxyXG4gICAgICAgIGlmICghYXJyVmFsdWUgfHwgIWFyclZhbHVlLmxlbmd0aCkgcmV0dXJuIFtdO1xyXG5cclxuICAgICAgICBjb25zdCBhcnJGaWx0ZXIgPSBbbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuaW4sXHJcbiAgICAgICAgICAgIHZhbHVlOiBhcnJWYWx1ZS50b1N0cmluZygpXHJcbiAgICAgICAgfSldO1xyXG5cclxuICAgICAgICBjb25zdCBhcnJTb3J0ID0gW107XHJcbiAgICAgICAgaWYgKHNvcnRGaWVsZCkge1xyXG4gICAgICAgICAgICBhcnJTb3J0LnB1c2gobmV3IFNvcnQoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6IHNvcnRGaWVsZCxcclxuICAgICAgICAgICAgICAgIGRpcjogc29ydERpciB8IDFcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXJyUmVzdWx0ID0gKGF3YWl0IHRoaXMuZ2V0QWxsKGFyckZpbHRlciwgZ2V0RmllbGRzLCBhcnJTb3J0KSkuZGF0YTtcclxuICAgICAgICByZXR1cm4gKGFyclJlc3VsdCB8fCBbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0QnlGaWVsZFRvRGljKGZpZWxkOiBzdHJpbmcsIGFyclZhbHVlLCBnZXRGaWVsZHMsIGtleUZpZWxkID0gbnVsbCwgdmFsdWVGaWVsZCA9IG51bGwpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IGFyclJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0QnlGaWVsZChmaWVsZCwgYXJyVmFsdWUsIGdldEZpZWxkcyk7XHJcbiAgICAgICAgY29uc3QgcnNEaWMgPSB7fTtcclxuICAgICAgICBpZiAoIWFyclJlc3VsdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJzRGljO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGtleUZpZWxkKSB7XHJcbiAgICAgICAgICAgIGtleUZpZWxkID0gZmllbGQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWVGaWVsZCkge1xyXG4gICAgICAgICAgICBhcnJSZXN1bHQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHJzRGljW2l0ZW1ba2V5RmllbGRdXSA9IGl0ZW1bdmFsdWVGaWVsZF07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYXJyUmVzdWx0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICByc0RpY1tpdGVtW2tleUZpZWxkXV0gPSBpdGVtO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByc0RpYztcclxuICAgIH1cclxuXHJcbiAgICBuZXdGaWx0ZXIoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogYW55LCB2YWx1ZUlzRmllbGQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxyXG4gICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmFsdWUpLFxyXG4gICAgICAgICAgICB2YWx1ZUlzRmllbGRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdGaWx0ZXJWNChmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcclxuICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREYXRhVHJpbmhLeShpdGVtOiBhbnksIHJvd0RhdGE/OiBhbnkpOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydFRvUGRmKGlkOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vRXhwb3J0VG9QZGYvJHtpZH1gLCB7XHJcbiAgICAgICAgICAgIHN0cmluZ1ZhbHVlOiBjb250ZW50XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRXb3JrZmxvdyhpZDogc3RyaW5nLCB3b3JrZmxvd0NvZGU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vU3RhcnRXb3JrZmxvd0Jhc2UvJHt3b3JrZmxvd0NvZGV9LyR7aWR9YCwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFjdGlvbkFsbG93KGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldEFjdGlvbkFsbG93LyR7aWR9YCwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFjdGlvbkFsbG93SW5TdGFydCh3b3JrZmxvd0NvZGU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0QWN0aW9uQWxsb3dJblN0YXJ0LyR7d29ya2Zsb3dDb2RlfWAsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VTdGF0ZShpdGVtV29ya2Zsb3dIaXN0b3J5OiBhbnkpIHtcclxuICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeS5kZXBhcnRtZW50SWRzKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5LmRvblZpSWRzID0gaXRlbVdvcmtmbG93SGlzdG9yeS5kZXBhcnRtZW50SWRzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpdGVtV29ya2Zsb3dIaXN0b3J5LmRlcGFydG1lbnRWaWV3SWRzKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5LmRvblZpVmlld0lkcyA9IGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZGVwYXJ0bWVudFZpZXdJZHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaGFuZ2VTdGF0ZUJhc2VgLCBpdGVtV29ya2Zsb3dIaXN0b3J5KTtcclxuICAgIH1cclxuXHJcbiAgICBjaG9ZS2llbihpdGVtV29ya2Zsb3dIaXN0b3J5OiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0Nob1lLaWVuQmFzZWAsIGl0ZW1Xb3JrZmxvd0hpc3RvcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBlcm1pc3Npb25TaGFyZWRCeUl0ZW1JZHMoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0UGVybWlzc2lvblNoYXJlZEJ5SXRlbUlkc2AsIHtcclxuICAgICAgICAgICAgbGlzdEd1aWRWYWx1ZTogaWRzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2hhcmVkS2V5KGRhdGE6IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRTaGFyZWRLZXlJdGVtQmFzZWAsIGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUxpbmtTaGFyaW5nKGlkczogc3RyaW5nW10pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0RlbGV0ZUxpbmtTaGFyaW5nYCwge1xyXG4gICAgICAgICAgICBsaXN0R3VpZFZhbHVlOiBpZHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByb2xsYmFjayhyb3dEYXRhLCBsc3RPYmplY3ROYW1lOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vUm9sbGJhY2tCYXNlLyR7cm93RGF0YS5fX3dvcmtmbG93Q29kZX0vJHtyb3dEYXRhLmlkfWAsIHtcclxuICAgICAgICAgICAgTGlzdFN0cmluZ1ZhbHVlOiBsc3RPYmplY3ROYW1lXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcm9sbGJhY2tCeUhpc3RvcnkoaXRlbUlkOiBzdHJpbmcsIGlkSGlzdG9yeTogc3RyaW5nLCBsc3RPYmplY3ROYW1lOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vUm9sbGJhY2tCYXNlQnlIaXN0b3J5LyR7aXRlbUlkfS8ke2lkSGlzdG9yeX1gLCB7XHJcbiAgICAgICAgICAgIExpc3RTdHJpbmdWYWx1ZTogbHN0T2JqZWN0TmFtZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm9sbGJhY2sgcXV5IHRyw6xuaCB24buBIHRy4bqhbmcgdGjDoWkgdHLGsOG7m2NcclxuICAgICAqIEBwYXJhbSBpZCBpZCBj4bunYSBi4bqjbiBnaGlcclxuICAgICAqL1xyXG4gICAgcm9sbGJhY2tXb3JrZmxvdyhpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9Sb2xsYmFja1dvcmtmbG93LyR7aWR9YCwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRy4bqhbmcgdGjDoWkgd29ya2Zsb3cgY29yZSBzYW5nIMSRw6MgZHV54buHdCBxdXnhur90IMSR4buLbmhcclxuICAgICAqL1xyXG4gICAgdXBkYXRlRGFEdXlldFF1eWV0RGluaChpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVEYUR1eWV0UXV5ZXREaW5oLyR7aWR9YCwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZU1hUGhhbkNhcEJhc2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVNYVBoYW5DYXBCYXNlYCwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyZWVEYXRhQmFzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldFRyZWVEYXRhQmFzZWAsIHt9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|