@sunbird-cb/cbp-ai 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/esm2022/lib/ai-cbp-routing.module.mjs +5 -1
  2. package/esm2022/lib/ai-cbp.module.mjs +10 -5
  3. package/esm2022/lib/components/approval-request-form/approval-request-form.component.mjs +2 -2
  4. package/esm2022/lib/components/dashboard/dashboard.component.mjs +3 -3
  5. package/esm2022/lib/components/designation-approval-request-form/designation-approval-request-form.component.mjs +392 -0
  6. package/esm2022/lib/components/review-request/review-request.component.mjs +7 -1
  7. package/esm2022/lib/components/role-mapping-generation/role-mapping-generation.component.mjs +3 -4
  8. package/esm2022/lib/components/role-mapping-list/role-mapping-list.component.mjs +45 -20
  9. package/esm2022/lib/components/view-final-cbp-plan/view-final-cbp-plan.component.mjs +2 -1
  10. package/esm2022/lib/modules/shared/services/init.service.mjs +2 -2
  11. package/esm2022/lib/modules/shared/services/shared.service.mjs +12 -2
  12. package/esm2022/lib/modules/upload-document-page/upload-document-page.component.mjs +3 -1
  13. package/esm2022/lib/resolver/init-resolver.sevice.mjs +20 -0
  14. package/esm2022/public-api.mjs +19 -1
  15. package/fesm2022/sunbird-cb-cbp-ai.mjs +476 -33
  16. package/fesm2022/sunbird-cb-cbp-ai.mjs.map +1 -1
  17. package/lib/ai-cbp-routing.module.d.ts.map +1 -1
  18. package/lib/ai-cbp.module.d.ts +37 -36
  19. package/lib/ai-cbp.module.d.ts.map +1 -1
  20. package/lib/components/designation-approval-request-form/designation-approval-request-form.component.d.ts +47 -0
  21. package/lib/components/designation-approval-request-form/designation-approval-request-form.component.d.ts.map +1 -0
  22. package/lib/components/review-request/review-request.component.d.ts +2 -0
  23. package/lib/components/review-request/review-request.component.d.ts.map +1 -1
  24. package/lib/components/role-mapping-generation/role-mapping-generation.component.d.ts.map +1 -1
  25. package/lib/components/role-mapping-list/role-mapping-list.component.d.ts +5 -2
  26. package/lib/components/role-mapping-list/role-mapping-list.component.d.ts.map +1 -1
  27. package/lib/components/view-final-cbp-plan/view-final-cbp-plan.component.d.ts +1 -0
  28. package/lib/components/view-final-cbp-plan/view-final-cbp-plan.component.d.ts.map +1 -1
  29. package/lib/modules/shared/services/init.service.d.ts +1 -1
  30. package/lib/modules/shared/services/init.service.d.ts.map +1 -1
  31. package/lib/modules/shared/services/shared.service.d.ts +1 -0
  32. package/lib/modules/shared/services/shared.service.d.ts.map +1 -1
  33. package/lib/modules/upload-document-page/upload-document-page.component.d.ts +1 -0
  34. package/lib/modules/upload-document-page/upload-document-page.component.d.ts.map +1 -1
  35. package/lib/resolver/init-resolver.sevice.d.ts +11 -0
  36. package/lib/resolver/init-resolver.sevice.d.ts.map +1 -0
  37. package/package.json +1 -1
  38. package/public-api.d.ts +18 -0
  39. package/public-api.d.ts.map +1 -1
  40. package/sunbird-cb-cbp-ai-0.1.4.tgz +0 -0
  41. package/sunbird-cb-cbp-ai-0.1.2.tgz +0 -0
@@ -6,7 +6,7 @@ export class InitService {
6
6
  this.http = http;
7
7
  }
8
8
  async init() {
9
- await this.setConfiDetails();
9
+ return await this.setConfiDetails();
10
10
  }
11
11
  async setConfiDetails(configDetails = null) {
12
12
  if (configDetails) {
@@ -38,4 +38,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
38
38
  providedIn: 'root',
39
39
  }]
40
40
  }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL2luaXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBOzs7QUFVbEQsTUFBTSxPQUFPLFdBQVc7SUFLdEIsWUFDVSxJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO0lBRzFCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO0lBQzlCLENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZSxDQUFDLGdCQUFxQixJQUFJO1FBQ3JELElBQUksYUFBYSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1lBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQTtTQUN2QzthQUFNO1lBQ0wsSUFBSTtnQkFFRixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ3RCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQTtpQkFDMUI7Z0JBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBTSxzQ0FBc0MsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFBO2dCQUM3RixJQUFJLFFBQVEsRUFBRTtvQkFDWixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQTtvQkFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFBO2lCQUNsQzthQUNGO1lBQ0QsT0FBTSxDQUFDLEVBQUU7Z0JBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO2FBQ2xEO1NBQ0Y7SUFDSCxDQUFDOytHQW5DVSxXQUFXO21IQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9CQVNFX0hSRUYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG4vLyBpbXBvcnQgeyByZXRyeSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG4vKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBJbml0U2VydmljZSB7XG5cbiAgYmFzZVVybDogc3RyaW5nXG4gIGNvbmZpZ0RldGFpbHM6IGFueVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgKSB7XG5cbiAgfVxuXG4gIGFzeW5jIGluaXQoKSB7XG4gICAgYXdhaXQgdGhpcy5zZXRDb25maURldGFpbHMoKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRDb25maURldGFpbHMoY29uZmlnRGV0YWlsczogYW55ID0gbnVsbCk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKGNvbmZpZ0RldGFpbHMpIHtcbiAgICAgIHRoaXMuY29uZmlnRGV0YWlscyA9IGNvbmZpZ0RldGFpbHNcbiAgICAgIHRoaXMuYmFzZVVybCA9IGNvbmZpZ0RldGFpbHMucG9ydGFsVVJMXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnRGV0YWlscykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cC5nZXQ8YW55PignYXNzZXRzL2pzb25maWxlcy9jb25maWd1cmF0aW9ucy5qc29uJykudG9Qcm9taXNlKClcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5jb25maWdEZXRhaWxzID0gcmVzcG9uc2VcbiAgICAgICAgICB0aGlzLmJhc2VVcmwgPSByZXNwb25zZS5wb3J0YWxVUkxcbiAgICAgICAgfVxuICAgICAgfSBcbiAgICAgIGNhdGNoKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmV0Y2ggY29uZmlndXJhdGlvbnMnKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL2luaXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBOzs7QUFVbEQsTUFBTSxPQUFPLFdBQVc7SUFLdEIsWUFDVSxJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO0lBRzFCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNWLE9BQU8sTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7SUFDckMsQ0FBQztJQUVTLEtBQUssQ0FBQyxlQUFlLENBQUMsZ0JBQXFCLElBQUk7UUFDckQsSUFBSSxhQUFhLEVBQUU7WUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7WUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFBO1NBQ3ZDO2FBQU07WUFDTCxJQUFJO2dCQUVGLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtvQkFDdEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFBO2lCQUMxQjtnQkFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFNLHNDQUFzQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUE7Z0JBQzdGLElBQUksUUFBUSxFQUFFO29CQUNaLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFBO29CQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUE7aUJBQ2xDO2FBQ0Y7WUFDRCxPQUFNLENBQUMsRUFBRTtnQkFDUCxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUE7YUFDbEQ7U0FDRjtJQUNILENBQUM7K0dBbkNVLFdBQVc7bUhBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0JBU0VfSFJFRiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbi8vIGltcG9ydCB7IHJldHJ5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbi8qIHRzbGludDpkaXNhYmxlICovXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEluaXRTZXJ2aWNlIHtcblxuICBiYXNlVXJsOiBzdHJpbmdcbiAgY29uZmlnRGV0YWlsczogYW55XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICApIHtcblxuICB9XG5cbiAgYXN5bmMgaW5pdCgpOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gYXdhaXQgdGhpcy5zZXRDb25maURldGFpbHMoKVxufVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0Q29uZmlEZXRhaWxzKGNvbmZpZ0RldGFpbHM6IGFueSA9IG51bGwpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmIChjb25maWdEZXRhaWxzKSB7XG4gICAgICB0aGlzLmNvbmZpZ0RldGFpbHMgPSBjb25maWdEZXRhaWxzXG4gICAgICB0aGlzLmJhc2VVcmwgPSBjb25maWdEZXRhaWxzLnBvcnRhbFVSTFxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ0RldGFpbHMpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25maWdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHAuZ2V0PGFueT4oJ2Fzc2V0cy9qc29uZmlsZXMvY29uZmlndXJhdGlvbnMuanNvbicpLnRvUHJvbWlzZSgpXG4gICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgIHRoaXMuY29uZmlnRGV0YWlscyA9IHJlc3BvbnNlXG4gICAgICAgICAgdGhpcy5iYXNlVXJsID0gcmVzcG9uc2UucG9ydGFsVVJMXG4gICAgICAgIH1cbiAgICAgIH0gXG4gICAgICBjYXRjaChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZldGNoIGNvbmZpZ3VyYXRpb25zJylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -60,6 +60,7 @@ const API_END_POINTS = {
60
60
  SAVE_APPROVAL_REQUEST: 'cbp-tpc-ai/api/v1/approval-requests/send',
61
61
  VIEW_APPROVAL_REQUEST: 'cbp-tpc-ai/api/v1/approval-requests',
62
62
  REVOKE_APPROVAL_REQUEST: 'cbp-tpc-ai/api/v1/approval-requests',
63
+ SAVE_DESIGNATION_APPROVAL_REQUEST: 'cbp-tpc-ai/api/v1/designation-approval/create',
63
64
  };
64
65
  // @Directive()
65
66
  export class SharedService {
@@ -75,6 +76,7 @@ export class SharedService {
75
76
  this.checkRoleMappingFormValidation = new Subject();
76
77
  this.updateDesignationHierarchySubject = new Subject();
77
78
  if (initSvc && this.initSvc.baseUrl && this.initSvc.configDetails) {
79
+ console.log('this.initSvc', this.initSvc);
78
80
  this.baseUrl = this.initSvc.baseUrl;
79
81
  this.configDetails = this.initSvc.configDetails;
80
82
  }
@@ -264,6 +266,7 @@ export class SharedService {
264
266
  this.headers = new HttpHeaders({
265
267
  'Authorization': `Bearer ${storageData?.access_token}`
266
268
  });
269
+ console.log('this.baseUrl', this.baseUrl);
267
270
  const headers = this.headers;
268
271
  return this.http.get(`${this.baseUrl}${API_END_POINTS.GET_STATE_CENTER}/?sub_org_type=${sub_org_type}`, { headers })
269
272
  .pipe(map((response) => {
@@ -419,7 +422,7 @@ export class SharedService {
419
422
  };
420
423
  console.log('getIGOTSuggestedCourses final request:', JSON.stringify(req, null, 2));
421
424
  const headers = this.headers;
422
- return this.http.post(`https://portal.igotkarmayogi.gov.in/api/content/v1/search`, req, { headers })
425
+ return this.http.post(`${this.baseUrl}${API_END_POINTS.SUGGESTED_COURSE_LIST}`, req, { headers })
423
426
  .pipe(map((response) => {
424
427
  return response;
425
428
  }));
@@ -854,6 +857,13 @@ export class SharedService {
854
857
  return response;
855
858
  }));
856
859
  }
860
+ saveDesignationApprovalRequest(reqBody) {
861
+ const headers = this.headers;
862
+ return this.http.post(`${this.baseUrl}${API_END_POINTS.SAVE_DESIGNATION_APPROVAL_REQUEST}`, reqBody, { headers })
863
+ .pipe(map((response) => {
864
+ return response;
865
+ }));
866
+ }
857
867
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SharedService, deps: [{ token: i1.HttpClient }, { token: i2.InitService }], target: i0.ɵɵFactoryTarget.Injectable }); }
858
868
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SharedService, providedIn: 'root' }); }
859
869
  }
@@ -866,4 +876,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
866
876
  type: HostListener,
867
877
  args: ['window:resize', ['$event']]
868
878
  }] } });
869
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxZQUFZO0FBQ1osT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUErQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBOzs7O0FBRXBDLCtFQUErRTtBQUUvRSxNQUFNLGNBQWMsR0FBRztJQUNyQixhQUFhLEVBQUUsMEJBQTBCO0lBQ3pDLG9CQUFvQixFQUFFLDBCQUEwQjtJQUNoRCxxQkFBcUIsRUFBRSwwQkFBMEI7SUFDakQsa0JBQWtCLEVBQUUsd0JBQXdCO0lBQzVDLGFBQWEsRUFBRSw2QkFBNkI7SUFDNUMsYUFBYSxFQUFFLDBCQUEwQjtJQUN6QyxnQkFBZ0IsRUFBRSxnQ0FBZ0M7SUFDbEQsZ0JBQWdCLEVBQUUseUNBQXlDO0lBQzNELG1CQUFtQixFQUFFLHVDQUF1QztJQUM1RCxjQUFjLEVBQUUsMkNBQTJDO0lBQzNELGdDQUFnQyxFQUFFLDZDQUE2QztJQUMvRSwyQ0FBMkMsRUFBRSw2Q0FBNkM7SUFDMUYsbUJBQW1CLEVBQUUsZ0NBQWdDO0lBQ3JELHNCQUFzQixFQUFFLG9CQUFvQjtJQUM1QyxZQUFZLEVBQUUsaUNBQWlDO0lBQy9DLFdBQVcsRUFBRSw0QkFBNEI7SUFDekMsY0FBYyxFQUFFLDRCQUE0QjtJQUM1QyxxQkFBcUIsRUFBRSwwQkFBMEI7SUFDakQsNEJBQTRCLEVBQUUsMkNBQTJDO0lBQ3pFLHFCQUFx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LENBQUE7SUFDUCxDQUFDOytHQWo1QlUsYUFBYTttSEFBYixhQUFhLGNBSFosTUFBTTs7NEZBR1AsYUFBYTtrQkFKekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7MkhBYUMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuLy9JbmplY3RhYmxlXG5pbXBvcnQgeyBIb3N0TGlzdGVuZXIsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBJbml0U2VydmljZSB9IGZyb20gJy4vaW5pdC5zZXJ2aWNlJztcbi8vIGltcG9ydCBjb25maWd1cmF0aW9uIGZyb20gJy4uLy4uLy4uLy4uL2Fzc2V0cy9qc29uZmlsZXMvY29uZmlndXJhdGlvbnMuanNvbidcblxuY29uc3QgQVBJX0VORF9QT0lOVFMgPSB7XG4gIEZFVENIX0NPVVJTRVM6ICdhcGkvdjEvY291cnNlL3YyL2V4cGxvcmUnLFxuICBGRVRDSF9QT1NUQUxfQ09VUlNFUzogJ2FwaS92MS9jb250ZW50L3YxL3NlYXJjaCcsXG4gIEZFVENIX1JBSUxXQVlfQ09VUlNFUzogJ2FwaS92MS9jb250ZW50L3YxL3NlYXJjaCcsXG4gIEZFVENIX0hBTExfT0ZfRkFNRTogJ2FwaS92MS9oYWxsb2ZmYW1lL3JlYWQnLFxuICBOTFdfRk9STV9SRUFEOiAnYXBpcy92MS9zdGF0aWMvZm9ybS92MS9yZWFkJyxcbiAgRkVUQ0hfVEVOREVSUzogJ2FwaS92MS9jb250ZW50L3YxL3NlYXJjaCcsXG4gIEdFVF9TVEFURV9DRU5URVI6ICdjYnAtdHBjLWFpL2FwaS92MS9zdGF0ZS1jZW50ZXInLFxuICBHRVRfUk9MRV9NQVBQSU5HOiAnY2JwLXRwYy1haS9hcGkvdjMvcm9sZS1tYXBwaW5nL2dlbmVyYXRlJyxcbiAgREVMRVRFX1JPTEVfTUFQUElORzogJ2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZy9kZWxldGUnLFxuICBHRVRfREVQQVJUTUVOVDogJ2NicC10cGMtYWkvYXBpL3YxL2RlcGFydG1lbnQvc3RhdGUtY2VudGVyJyxcbiAgR0VUX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVI6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcvc3RhdGUtY2VudGVyJyxcbiAgR0VUX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVJfREVQQVJUTUVOVDogJ2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZy9zdGF0ZS1jZW50ZXInLFxuICBVUERBVEVfUk9MRV9NQVBQSU5HOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nJyxcbiAgR0VUX1JFQ09NTUVOREVEX0NPVVJTRTogJ2NicC10cGMtYWkvYXBpL3YxLycsXG4gIFNBVkVfQ09VUlNFUzogJ2NicC10cGMtYWkvYXBpL3YxL2NicC1wbGFuL3NhdmUnLFxuICBHRVRfQ09VUlNFUzogJ2NicC10cGMtYWkvYXBpL3YxL2NicC1wbGFuJyxcbiAgVVBEQVRFX0NPVVJTRVM6ICdjYnAtdHBjLWFpL2FwaS92MS9jYnAtcGxhbicsXG4gIElHT1RfU1VHR0VTVEVEX0NPVVJTRTogJ2FwaS92MS9jb250ZW50L3YxL3NlYXJjaCcsXG4gIFNBVkVfQ09VUlNFX1NVR0dFU1RFRF9DT1VSU0U6ICdjYnAtdHBjLWFpL2FwaS92MS9jb3Vyc2Uvc3VnZ2VzdGlvbnMvc2F2ZScsXG4gIFNVR0dFU1RFRF9DT1VSU0VfTElTVDogJ2NicC10cGMtYWkvYXBpL3YxL2NvdXJzZS9zdWdnZXN0aW9ucycsXG4gIEFERF9ERVNJR05BVElPTjogJ2NicC10cGMtYWkvYXBpL3YyL3JvbGUtbWFwcGluZy9hZGQtZGVzaWduYXRpb24nLFxuICBMT0dJTjogJ2NicC10cGMtYWkvYXBpL3YxL2F1dGgvbG9naW4nLFxuICBMT0dPVVQ6ICdjYnAtdHBjLWFpL2FwaS92MS9hdXRoL2xvZ291dCcsXG4gIERFTEVURV9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nJyxcbiAgQUREX1VTRVJfQ09VUlNFUzogJ2NicC10cGMtYWkvYXBpL3YxL3VzZXItYWRkZWQtY291cnNlcycsXG4gIEdFVF9VU0VSX0NPVVJTRVM6ICdjYnAtdHBjLWFpL2FwaS92MS91c2VyLWFkZGVkLWNvdXJzZXMvcm9sZS1tYXBwaW5nJyxcbiAgR0VUX1VTRVJfU0VMRUNURURfQ09VUlNFUzogJ2NicC10cGMtYWkvYXBpL3YxL2NicC1wbGFuJyxcbiAgVVBMT0FEX0RPQ1VNRU5UOiAnY2JwLXRwYy1haS9hcGkvdjEvZmlsZXMnLFxuICBHRVRfRE9DVU1FTlRTOiAnY2JwLXRwYy1haS9hcGkvdjEvZmlsZXMnLFxuICBERUxFVEVfRklMRTogJ2NicC10cGMtYWkvYXBpL3YxL2ZpbGVzJyxcbiAgVFJJR0dFUl9GSUxFX1NVTU1BUlk6ICdjYnAtdHBjLWFpL2FwaS92MS9maWxlcycsXG4gIERPV05MT0FEX0ZJTEU6ICdjYnAtdHBjLWFpL2FwaS92MS9maWxlcycsXG4gIERFTEVURV9TVU1NQVJZOiAnY2JwLXRwYy1haS9hcGkvdjEvZmlsZXMnLFxuICBHRVRfVVNFUl9QUk9GSUxFOiAnY2JwLXRwYy1haS9hcGkvdjEvdXNlcnMvbWUnLFxuICBHRVRfVVNFUl9SRUNPTU1FTkVEX0NPVVJTRVM6ICdjYnAtdHBjLWFpL2FwaS92MS9jb3Vyc2UtcmVjb21tZW5kYXRpb25zJyxcbiAgRE9XTkxPQURfUERGOiAnY2JwLXRwYy1haS9hcGkvdjEvcmVwb3J0cy9jYnAtcGxhbi9kb3dubG9hZCcsXG4gIERPV05MT0FEX1BERl9BQ0JQOiAnY2JwLXRwYy1haS9hcGkvdjEvcmVwb3J0cy9hY2JwLXBsYW4vZG93bmxvYWQnLFxuICBDRU5URVJfQkFTRURfTUlOSVNUUlk6ICdjYnAtdHBjLWFpL2FwaS92MS9kZXBhcnRtZW50L3N0YXRlLWNlbnRlcicsXG4gIERPV05MT0FEX0NPVVJTRV9SRUNPTU1FTkRBVElPTjogJ2NicC10cGMtYWkvYXBpL3YxL3JlcG9ydHMvY291cnNlLXJlY29tbWVuZGF0aW9ucy9kb3dubG9hZCcsXG4gIERFTEVURV9DT1VSU0VfUkVDT01NRU5EQVRJT046ICdjYnAtdHBjLWFpL2FwaS92MS9jYnAtcGxhbicsXG4gIFVQREFURV9ERVNJR05BVElPTl9ISUVSQVJDSFk6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcvcmVvcmRlcicsXG4gIFNFQVJDSF9QVUJMSUNfREVTSUdOQVRJT046ICdhcGlzL3B1YmxpYy92OC9kZXNpZ25hdGlvbi9zZWFyY2gnLFxuICBEQVNIQk9BUkRfQURNSU46ICdjYnAtdHBjLWFpL2FwaS92MS9kYXNoYm9hcmQvY2JwLWRhc2hib2FyZC1tZXRyaWNzJyxcbiAgR0FQX0FOQUxZU0lTX0FETUlOOiAnY2JwLXRwYy1haS9hcGkvdjEvZGFzaGJvYXJkL2dhcC1hbmFseXNpcycsXG4gIERBU0hCT0FSRF9QVUJMSUM6ICdjYnAtdHBjLWFpL2FwaS92MS9kYXNoYm9hcmQvbXktZGFzaGJvYXJkLW1ldHJpY3MnLFxuICBHQVBfQU5BTFlTSVNfUFVCTElDOiAnY2JwLXRwYy1haS9hcGkvdjEvZGFzaGJvYXJkL215LWdhcC1hbmFseXNpcycsXG4gIE1BVENIRURfUk9MRV9NQVBQSU5HOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nL21hdGNoLWRlc2lnbmF0aW9ucycsXG4gIEdFVF9BUFBST1ZBTF9SRVFVRVNUUzogJ2NicC10cGMtYWkvYXBpL3YxL2FwcHJvdmFsLXJlcXVlc3RzL2xpc3QnLFxuICBTRUFSQ0hfUFVCTElDX01ETzogJ2NicC10cGMtYWkvYXBpL3YxL2FwcHJvdmFsLXJlcXVlc3RzL21kby1hZG1pbnMnLFxuICBTQVZFX0FQUFJPVkFMX1JFUVVFU1Q6J2NicC10cGMtYWkvYXBpL3YxL2FwcHJvdmFsLXJlcXVlc3RzL3NlbmQnLFxuICBWSUVXX0FQUFJPVkFMX1JFUVVFU1Q6ICdjYnAtdHBjLWFpL2FwaS92MS9hcHByb3ZhbC1yZXF1ZXN0cycsXG4gIFJFVk9LRV9BUFBST1ZBTF9SRVFVRVNUOiAnY2JwLXRwYy1haS9hcGkvdjEvYXBwcm92YWwtcmVxdWVzdHMnLFxuXG59XG5cblxuXG4vLyBARGlyZWN0aXZlKClcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuXG5leHBvcnQgY2xhc3MgU2hhcmVkU2VydmljZSB7XG4gIGNicFBsYW5GaW5hbE9iajogYW55ID0ge31cbiAgYmFzZVVybDogc3RyaW5nXG4gIGNvbmZpZ0RldGFpbHM6IGFueVxuICBzY3JlZW5XaWR0aDogbnVtYmVyO1xuICBoZWFkZXJzOiBhbnlcbiAgc3VtbWFyeVRyaWdnZXJFeGVjdXRlZCA9IG5ldyBTdWJqZWN0KClcbiAgbG9naW5TdWNjZXNzID0gbmV3IFN1YmplY3QoKVxuICBjaGVja1JvbGVNYXBwaW5nRm9ybVZhbGlkYXRpb24gPSBuZXcgU3ViamVjdCgpXG4gIHVwZGF0ZURlc2lnbmF0aW9uSGllcmFyY2h5U3ViamVjdCA9IG5ldyBTdWJqZWN0KClcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIG9uUmVzaXplKGV2ZW50KSB7XG4gICAgdGhpcy5zY3JlZW5XaWR0aCA9IGV2ZW50LnRhcmdldC5pbm5lcldpZHRoO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgaW5pdFN2YzogSW5pdFNlcnZpY2UsXG4gICkge1xuICAgIGlmIChpbml0U3ZjICYmIHRoaXMuaW5pdFN2Yy5iYXNlVXJsICYmIHRoaXMuaW5pdFN2Yy5jb25maWdEZXRhaWxzKSB7XG4gICAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmluaXRTdmMuYmFzZVVybFxuICAgICAgdGhpcy5jb25maWdEZXRhaWxzID0gdGhpcy5pbml0U3ZjLmNvbmZpZ0RldGFpbHNcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRDb25maURldGFpbHMoKVxuICAgIH1cbiAgICB0aGlzLnNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgY29uc3Qgc3RvcmFnZURhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luRGF0YScpKVxuICAgIGNvbnNvbGUubG9nKCdzdG9yYWdlRGF0YS0tJywgc3RvcmFnZURhdGEpXG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3N0b3JhZ2VEYXRhPy5hY2Nlc3NfdG9rZW59YFxuICAgIH0pO1xuICB9XG5cbiAgc2V0Q29uZmlEZXRhaWxzKGNvbmZpZ0RldGFpbHM6IGFueSA9IG51bGwpIHtcbiAgICBpZiAoY29uZmlnRGV0YWlscykge1xuICAgICAgdGhpcy5jb25maWdEZXRhaWxzID0gY29uZmlnRGV0YWlsc1xuICAgICAgdGhpcy5iYXNlVXJsID0gY29uZmlnRGV0YWlscy5wb3J0YWxVUkxcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZXRDb25maWdEZXRhaWxzKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnRGV0YWlscyA9IHJlc3BvbnNlXG4gICAgICAgIHRoaXMuYmFzZVVybCA9IHJlc3BvbnNlLnBvcnRhbFVSTFxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgZ2V0Q29uZmlnKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZ0RldGFpbHMpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZ0RldGFpbHM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldENvbmZpZ0RldGFpbHMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oJ2Fzc2V0cy9qc29uZmlsZXMvY29uZmlndXJhdGlvbnMuanNvbicpO1xuICB9XG5cblxuXG4gIGdldGNvdXJzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5GRVRDSF9DT1VSU0VTfWApXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0ZUZlYXR1cmVDb3Vyc2VzKHJlc3BvbnNlLnJlc3VsdC5jb250ZW50KVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRQb3N0YWxjb3Vyc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfUE9TVEFMX0NPVVJTRVN9YClcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRlRmVhdHVyZUNvdXJzZXMocmVzcG9uc2UucmVzdWx0LmNvbnRlbnQpXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFJhaWx3YXljb3Vyc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfUkFJTFdBWV9DT1VSU0VTfWApXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0ZUZlYXR1cmVDb3Vyc2VzKHJlc3BvbnNlLnJlc3VsdC5jb250ZW50KVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRIYWxsT2ZGYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkZFVENIX0hBTExfT0ZfRkFNRX1gLCBudWxsKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBmb3JtYXRlRmVhdHVyZUNvdXJzZXMoZmVhdHVyZUNvdXJzZXM6IGFueSkge1xuICAgIGNvbnN0IGZvcm1hdGVkRmVhdHVyZUNvdXJzZXMgPSBbXTtcbiAgICBjb25zdCBmb3JtYXRlZE5ld3Nyb29tID0gW107XG4gICAgY29uc3QgZm9ybWF0ZWRQaG90b2dhbGxhcnkgPSBbXTtcbiAgICBjb25zdCBmb3JtYXRlZFRlc3RpbW9uaWFsID0gW107XG4gICAgaWYgKGZlYXR1cmVDb3Vyc2VzKSB7XG4gICAgICBmZWF0dXJlQ291cnNlcy5mb3JFYWNoKGNvdXJzZSA9PiB7XG4gICAgICAgIGlmIChjb3Vyc2UucHJpbWFyeUNhdGVnb3J5ID09PSAnQ291cnNlJykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdGVkQ291cnNlID0ge1xuICAgICAgICAgICAgcG9zdGVySW1hZ2U6IGNvdXJzZS5wb3N0ZXJJbWFnZSxcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbjogY291cnNlLm9yZ2FuaXNhdGlvblswXSA/IGNvdXJzZS5vcmdhbmlzYXRpb25bMF0gOiAnS2FybWF5b2dpIEJoYXJhdCcsXG4gICAgICAgICAgICBuYW1lOiBjb3Vyc2UubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjb3Vyc2UuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBjb3Vyc2UuaWRlbnRpZmllcixcbiAgICAgICAgICAgIGFsdDogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBjcmVhdG9yTG9nbzogY291cnNlLmNyZWF0b3JMb2dvIHx8ICcnLFxuICAgICAgICAgICAgZHVyYXRpb246IHRoaXMudGltZUNvbnZlcnQoY291cnNlLmR1cmF0aW9uKSxcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybWF0ZWRGZWF0dXJlQ291cnNlcy5wdXNoKGZvcm1hdGVkQ291cnNlKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvdXJzZS5yZXNvdXJjZUNhdGVnb3J5ID09PSAnTmV3c3Jvb20nKSB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ZWRDb3Vyc2UgPSB7XG4gICAgICAgICAgICBwb3N0ZXJJbWFnZTogY291cnNlLnBvc3RlckltYWdlLFxuICAgICAgICAgICAgbmFtZTogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY291cnNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogY291cnNlLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBhbHQ6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgY2xvdWRTdG9yYWdlS2V5OiBgJHt0aGlzLmJhc2VVcmx9YXNzZXRzL3B1YmxpYy8ke2NvdXJzZS5jbG91ZFN0b3JhZ2VLZXl9YFxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtYXRlZE5ld3Nyb29tLnB1c2goZm9ybWF0ZWRDb3Vyc2UpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY291cnNlLnJlc291cmNlQ2F0ZWdvcnkgPT09ICdQaG90byBHYWxsZXJ5Jykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdGVkQ291cnNlID0ge1xuICAgICAgICAgICAgbmFtZTogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY291cnNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogY291cnNlLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBhbHQ6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgY2xvdWRTdG9yYWdlS2V5OiBgJHt0aGlzLmJhc2VVcmx9YXNzZXRzL3B1YmxpYy8ke2NvdXJzZS5jbG91ZFN0b3JhZ2VLZXl9YFxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtYXRlZFBob3RvZ2FsbGFyeS5wdXNoKGZvcm1hdGVkQ291cnNlKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvdXJzZS5yZXNvdXJjZUNhdGVnb3J5ID09PSAnVGVzdGltb25pYWxzJykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdGVkQ291cnNlID0ge1xuICAgICAgICAgICAgbmFtZTogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY291cnNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogY291cnNlLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBhbHQ6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgY2xvdWRTdG9yYWdlS2V5OiBgJHt0aGlzLmJhc2VVcmx9YXNzZXRzL3B1YmxpYy8ke2NvdXJzZS5jbG91ZFN0b3JhZ2VLZXl9YCxcbiAgICAgICAgICAgIG1pbWVUeXBlOiBjb3Vyc2UubWltZVR5cGUsXG4gICAgICAgICAgICBwb3N0ZXJJbWFnZTogY291cnNlLnBvc3RlckltYWdlLFxuICAgICAgICAgICAgYXJ0aWZhY3RVcmw6IGNvdXJzZS5hcnRpZmFjdFVybCxcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybWF0ZWRUZXN0aW1vbmlhbC5wdXNoKGZvcm1hdGVkQ291cnNlKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgY291cnNlOiBmb3JtYXRlZEZlYXR1cmVDb3Vyc2VzLCBuZXdzcm9vbTogZm9ybWF0ZWROZXdzcm9vbSwgZ2FsbGFyeTogZm9ybWF0ZWRQaG90b2dhbGxhcnksIHRlc3RpbW9uaWxzOiBmb3JtYXRlZFRlc3RpbW9uaWFsIH1cbiAgfVxuXG4gIHRpbWVDb252ZXJ0KGR1cmF0aW9uOiBudW1iZXIpIHtcbiAgICBpZiAoZHVyYXRpb24pIHtcbiAgICAgIHZhciBudW0gPSBkdXJhdGlvbjtcbiAgICAgIHZhciBob3VycyA9IChudW0gLyAzNjAwKTtcbiAgICAgIHZhciByaG91cnMgPSBNYXRoLmZsb29yKGhvdXJzKTtcbiAgICAgIHZhciBtaW51dGVzID0gKGhvdXJzIC0gcmhvdXJzKSAqIDYwO1xuICAgICAgdmFyIHJtaW51dGVzID0gTWF0aC5yb3VuZChtaW51dGVzKTtcbiAgICAgIGlmIChybWludXRlcyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmhvdXJzICsgXCJoXCI7XG4gICAgICB9IGVsc2UgaWYgKHJob3VycyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcm1pbnV0ZXMgKyBcIm1cIlxuICAgICAgfVxuICAgICAgcmV0dXJuIHJob3VycyArIFwiaCBcIiArIHJtaW51dGVzICsgXCJtXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIGdldENsaWVudExpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoJy4vYXNzZXRzL2pzb25maWxlcy9jbGllbnQtbGlzdC5qc29uJyk7XG4gIH1cblxuICBnZXRUZW5kZXJzKCkge1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IFtcInRlbmRlclwiXSxcbiAgICAgICAgICBzdGF0dXM6IHsgXCIhPVwiOiBcIlJldGlyZWRcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhY2V0czogW1wibWltZVR5cGVcIl0sXG4gICAgICAgIHNvcnRCeTogeyBjcmVhdGVkT246IFwiRGVzY1wiIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfVEVOREVSU31gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXROb3RpZmljYXRpb25zKCkge1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IFtcIm5vdGlmaWNhdGlvblwiXSxcbiAgICAgICAgICBzdGF0dXM6IHsgXCIhPVwiOiBcIlJldGlyZWRcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhY2V0czogW1wibWltZVR5cGVcIl0sXG4gICAgICAgIHNvcnRCeTogeyBjcmVhdGVkT246IFwiZGVzY1wiIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfVEVOREVSU31gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cbiAgZ2V0Rm9ybVJlYWREYXRhKHJlcTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuTkxXX0ZPUk1fUkVBRH1gLCByZXEpXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG5cbiAgZ2V0TWluaXN0cnlEYXRhKG1pbmlzdHJ5VHlwZSkge1xuICAgIGxldCBzdWJfb3JnX3R5cGUgPSAnJ1xuICAgIGlmIChtaW5pc3RyeVR5cGUgPT0gJ21pbmlzdHJ5Jykge1xuICAgICAgc3ViX29yZ190eXBlID0gJ21pbmlzdHJ5J1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWJfb3JnX3R5cGUgPSAnc3RhdGUnXG4gICAgfVxuICAgIGNvbnN0IHN0b3JhZ2VEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dpbkRhdGEnKSlcbiAgICBjb25zb2xlLmxvZygnc3RvcmFnZURhdGEtLScsIHN0b3JhZ2VEYXRhKVxuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtzdG9yYWdlRGF0YT8uYWNjZXNzX3Rva2VufWBcbiAgICB9KTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfU1RBVEVfQ0VOVEVSfS8/c3ViX29yZ190eXBlPSR7c3ViX29yZ190eXBlfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZW5lcmF0ZVJvbGVNYXBwaW5nKHJlcUJvZHksIGZpbGVzPzogRmlsZSB8IEZpbGVbXSkge1xuICAgIGNvbnNvbGUubG9nKCdyZXFCb2R5LS0nLCByZXFCb2R5KTtcbiAgICBjb25zb2xlLmxvZygnZmlsZXMtLS0nLCBmaWxlcylcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgLy8gQWRkIHJlcXVpcmVkIGZpZWxkc1xuICAgIGlmIChyZXFCb2R5LnN0YXRlX2NlbnRlcl9pZCkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdzdGF0ZV9jZW50ZXJfaWQnLCByZXFCb2R5LnN0YXRlX2NlbnRlcl9pZCk7XG4gICAgfVxuXG4gICAgaWYgKHJlcUJvZHkuc3RhdGVfY2VudGVyX25hbWUpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnc3RhdGVfY2VudGVyX25hbWUnLCByZXFCb2R5LnN0YXRlX2NlbnRlcl9uYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocmVxQm9keS5kZXBhcnRtZW50X2lkKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2RlcGFydG1lbnRfaWQnLCByZXFCb2R5LmRlcGFydG1lbnRfaWQpO1xuICAgIH1cblxuICAgIGlmIChyZXFCb2R5LmRlcGFydG1lbnRfbmFtZSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdkZXBhcnRtZW50X25hbWUnLCByZXFCb2R5LmRlcGFydG1lbnRfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHJlcUJvZHkuaW5zdHJ1Y3Rpb24pIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnaW5zdHJ1Y3Rpb24nLCByZXFCb2R5Lmluc3RydWN0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYnBEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonKSB8fCAne30nKTtcbiAgICBjb25zdCBvcmdUeXBlID1cbiAgICAgIGNicERhdGE/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgfHxcbiAgICAgIGNicERhdGE/Lm9yZ190eXBlIHx8XG4gICAgICAnJztcbiAgICBpZiAob3JnVHlwZSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdvcmdfdHlwZScsIG9yZ1R5cGUpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBvciBzaW5nbGUgZmlsZVxuICAgIGlmIChmaWxlcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsZXMpKSB7XG4gICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnLCBmaWxlLCBmaWxlLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNpbmdsZSBmaWxlXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnYWRkaXRpb25hbF9kb2N1bWVudCcsIGZpbGVzLCBmaWxlcy5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWJ1ZyBGb3JtRGF0YSBjb250ZW50XG4gICAgY29uc29sZS5sb2coXCJGb3JtRGF0YSBjb250ZW50czpcIik7XG4gICAgZm9ybURhdGEuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgJHtrZXl9OiBGSUxFIC0+ICR7dmFsdWUubmFtZX0gKCR7dmFsdWUuc2l6ZX0gYnl0ZXMpYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgJHtrZXl9OiAke3ZhbHVlfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVycztcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9ST0xFX01BUFBJTkd9YCwgZm9ybURhdGEsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0pKTtcbiAgfVxuXG5cblxuICBnZXREZXBhcnRtZW50TGlzdChtaW5pc3RyeUlkKSB7XG4gICAgY29uc3Qgc3RvcmFnZURhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luRGF0YScpKVxuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtzdG9yYWdlRGF0YT8uYWNjZXNzX3Rva2VufWBcbiAgICB9KTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfREVQQVJUTUVOVH0vJHttaW5pc3RyeUlkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRSb2xlTWFwcGluZ0J5U3RhdGVDZW50ZXIoc3RhdGVfY2VudGVyX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVJ9LyR7c3RhdGVfY2VudGVyX2lkfT9sb2FkX2NicF9wbGFucz10cnVlYCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFJvbGVNYXBwaW5nQnlTdGF0ZUNlbnRlckFuZERlcGFydG1lbnQoc3RhdGVfY2VudGVyX2lkLCBkZXBhcnRtZW50X2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVJ9LyR7c3RhdGVfY2VudGVyX2lkfS9kZXBhcnRtZW50LyR7ZGVwYXJ0bWVudF9pZH0/bG9hZF9jYnBfcGxhbnM9dHJ1ZWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICB1cGRhdGVSb2xlTWFwcGluZyhyb2xlX21hcHBpbmdfaWQsIHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5VUERBVEVfUk9MRV9NQVBQSU5HfS8ke3JvbGVfbWFwcGluZ19pZH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZGVsZXRlUm9sZU1hcHBpbmcocm9sZV9tYXBwaW5nX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuVVBEQVRFX1JPTEVfTUFQUElOR30vJHtyb2xlX21hcHBpbmdfaWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFJlY29tbWVuZGVkQ291cnNlKHJvbGVfbWFwcGluZ19pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICBsZXQgcmVxQm9keSA9IHtcbiAgICAgIHJvbGVfbWFwcGluZ19pZDogcm9sZV9tYXBwaW5nX2lkXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9SRUNPTU1FTkRFRF9DT1VSU0V9L2NvdXJzZS1yZWNvbW1lbmRhdGlvbnMvZ2VuZXJhdGVgLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZGVsZXRlQ291cnNlUmVjb21tZW5kYXRpb25zKHJvbGVNYXBJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1JFQ09NTUVOREVEX0NPVVJTRX0vY291cnNlLXJlY29tbWVuZGF0aW9ucy9yb2xlLW1hcHBpbmcvJHtyb2xlTWFwSWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHNhdmVDb3Vyc2UocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TQVZFX0NPVVJTRVN9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuICB1cGRhdGVDb3Vyc2UocmVxQm9keSwgY2JwX3BsYW5faWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5VUERBVEVfQ09VUlNFU30vJHtjYnBfcGxhbl9pZH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0Q291cnNlKHJvbGVfbWFwcGluZ19pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9DT1VSU0VTfT9yb2xlX21hcHBpbmdfaWQ9JHtyb2xlX21hcHBpbmdfaWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldElHT1RTdWdnZXN0ZWRDb3Vyc2VzKHJlcUJvZHkpIHtcbiAgICAvLyBVc2UgdGhlIHJlcUJvZHkgcGFyYW1ldGVyIHBhc3NlZCBmcm9tIHRoZSBjb21wb25lbnRcbiAgICAvLyBJZiBubyByZXFCb2R5IGlzIHByb3ZpZGVkLCB1c2UgZGVmYXVsdCBzdHJ1Y3R1cmVcbiAgICBsZXQgcmVxID0gcmVxQm9keSB8fCB7XG4gICAgICBcInJlcXVlc3RcIjoge1xuICAgICAgICBcImZpbHRlcnNcIjoge1xuICAgICAgICAgIFwicHJpbWFyeUNhdGVnb3J5XCI6IFtcIkNvdXJzZVwiXSxcbiAgICAgICAgICBcInN0YXR1c1wiOiBbXCJMaXZlXCJdLFxuICAgICAgICAgIFwiY291cnNlQ2F0ZWdvcnlcIjogW1wiQ291cnNlXCJdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmllbGRzXCI6IFtcInBvc3RlckltYWdlXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJuYW1lXCJdLFxuICAgICAgICBcImxpbWl0XCI6IDEyLFxuICAgICAgICBcIm9mZnNldFwiOiAwXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnNvbGUubG9nKCdnZXRJR09UU3VnZ2VzdGVkQ291cnNlcyBmaW5hbCByZXF1ZXN0OicsIEpTT04uc3RyaW5naWZ5KHJlcSwgbnVsbCwgMikpO1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGBodHRwczovL3BvcnRhbC5pZ290a2FybWF5b2dpLmdvdi5pbi9hcGkvY29udGVudC92MS9zZWFyY2hgLCByZXEsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRTdWdnZXN0ZWRDb3Vyc2VzKHJvbGVfbWFwcGluZ19pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNVR0dFU1RFRF9DT1VSU0VfTElTVH0vJHtyb2xlX21hcHBpbmdfaWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHNhdmVTdWdnZXN0ZWRDb3Vyc2UocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TQVZFX0NPVVJTRV9TVUdHRVNURURfQ09VUlNFfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBhZGREZXNpZ25hdGlvbihyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkFERF9ERVNJR05BVElPTn1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgcGVyZm9ybUxvZ2luKHJlcUJvZHkpIHtcbiAgICBjb25zdCBib2R5ID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgLnNldCgndXNlcm5hbWUnLCByZXFCb2R5LnVzZXJuYW1lKVxuICAgICAgLnNldCgncGFzc3dvcmQnLCByZXFCb2R5LnBhc3N3b3JkKTtcbiAgICBjb25zb2xlLmxvZygnaW4gbG9naW4gdWF0JylcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5MT0dJTn1gLCBib2R5LnRvU3RyaW5nKCksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBsb2dvdXQoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkxPR09VVH1gLCAnJywgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHNldENCUFBsYW5Mb2NhbFN0b3JhZ2UoKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuY2JwUGxhbkZpbmFsT2JqKSlcbiAgfVxuXG4gIGdldENCUFBsYW5Mb2NhbFN0b3JhZ2UoKSB7XG4gICAgbGV0IGNicFBsYW5GaW5hbE9iaiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicpKVxuICAgIHJldHVybiBjYnBQbGFuRmluYWxPYmpcbiAgfVxuXG4gIGNoZWNrSWZMb2dpbigpIHtcbiAgICBsZXQgZmxhZyA9IGZhbHNlXG4gICAgbGV0IGxvZ2luRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dpbkRhdGEnKVxuICAgIGlmIChsb2dpbkRhdGEgJiYgSlNPTi5wYXJzZShsb2dpbkRhdGEpWydhY2Nlc3NfdG9rZW4nXSkge1xuICAgICAgZmxhZyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhZyA9IGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBmbGFnXG4gIH1cblxuICBkZWxldGVSb2xlTWFwcGluZ0J5U3RhdGVBbmREZXBhcnRtZW50KHN0YXRlX2NlbnRlcl9pZCwgZGVwYXJ0bWVudF9pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICBsZXQgdXJsID0gJydcbiAgICBpZiAoZGVwYXJ0bWVudF9pZCAmJiBkZXBhcnRtZW50X2lkICE9PSAnbnVsbCcgJiYgZGVwYXJ0bWVudF9pZCAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVwYXJ0bWVudF9pZCAhPT0gdW5kZWZpbmVkICYmIGRlcGFydG1lbnRfaWQgIT09IG51bGwpIHtcbiAgICAgIHVybCA9IGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRFTEVURV9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSfT9zdGF0ZV9jZW50ZXJfaWQ9JHtzdGF0ZV9jZW50ZXJfaWR9JmRlcGFydG1lbnRfaWQ9JHtkZXBhcnRtZW50X2lkfWBcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsID0gYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREVMRVRFX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVJ9P3N0YXRlX2NlbnRlcl9pZD0ke3N0YXRlX2NlbnRlcl9pZH1gXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55Pih1cmwsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBhZGRVc2VyQ291cnNlKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuQUREX1VTRVJfQ09VUlNFU31gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0VXNlckNvdXJzZShyb2xlX21hcHBpbmdfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfVVNFUl9DT1VSU0VTfS8ke3JvbGVfbWFwcGluZ19pZH1gLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0Q29tcGV0ZW5jeUpzb24oKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfS90cmFpbmluZy1wbGEtYWkvYXNzZXRzL2pzb25maWxlcy9jb21wZXRlbmNpZXMuanNvbmAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gICAgLy8gdGhpcy5odHRwLmdldDxhbnlbXT4oJy9hc3NldHMvanNvbmZpbGVzL2NvbXBldGVuY2llcy5qc29uJylcbiAgfVxuXG4gIGNvbnZlcnQoc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoIXNlY29uZHMgfHwgc2Vjb25kcyA8PSAwKSB7XG4gICAgICByZXR1cm4gJ04vQSc7XG4gICAgfVxuXG4gICAgY29uc3QgdG90YWxTZWNvbmRzID0gTWF0aC5mbG9vcihzZWNvbmRzKTtcbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IodG90YWxTZWNvbmRzIC8gMzYwMCk7XG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKHRvdGFsU2Vjb25kcyAlIDM2MDApIC8gNjApO1xuICAgIGNvbnN0IHJlbWFpbmluZ1NlY29uZHMgPSB0b3RhbFNlY29uZHMgJSA2MDtcblxuICAgIGlmIChob3VycyA+IDApIHtcbiAgICAgIC8vIEZvciBkdXJhdGlvbnMgd2l0aCBob3Vycywgc2hvdyBob3VycyBhbmQgbWludXRlcyAoZS5nLiwgXCIzaCAxMG1cIilcbiAgICAgIGlmIChtaW51dGVzID4gMCkge1xuICAgICAgICByZXR1cm4gYCR7aG91cnN9aCAke21pbnV0ZXN9bWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYCR7aG91cnN9aGA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtaW51dGVzID4gMCkge1xuICAgICAgLy8gRm9yIGR1cmF0aW9ucyB1bmRlciBhbiBob3VyLCBzaG93IG1pbnV0ZXMgYW5kIHNlY29uZHMgKGUuZy4sIFwiNThtIDNzXCIpXG4gICAgICBpZiAocmVtYWluaW5nU2Vjb25kcyA+IDApIHtcbiAgICAgICAgcmV0dXJuIGAke21pbnV0ZXN9bSAke3JlbWFpbmluZ1NlY29uZHN9c2A7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYCR7bWludXRlc31tYDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIGR1cmF0aW9ucyB1bmRlciBhIG1pbnV0ZSwgc2hvdyBzZWNvbmRzIG9ubHlcbiAgICAgIHJldHVybiBgJHtyZW1haW5pbmdTZWNvbmRzfXNgO1xuICAgIH1cbiAgfVxuXG4gIGdldFVzZXJQcm9maWxlKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9VU0VSX1BST0ZJTEV9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFVzZXJSZWNvbW1lbmRhdGlvbkNvdXJzZShyb2xlX21hcHBpbmdfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfVVNFUl9TRUxFQ1RFRF9DT1VSU0VTfT9yb2xlX21hcHBpbmdfaWQ9JHtyb2xlX21hcHBpbmdfaWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGRvd25sb2FkUGRmKHN0YXRlX2NlbnRlcl9pZDogc3RyaW5nLCBjb250ZXh0OiBzdHJpbmcsIGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbmRwb2ludCA9XG4gICAgICBjb250ZXh0ID09PSAnYWNicCdcbiAgICAgICAgPyBBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9QREZfQUNCUFxuICAgICAgICA6IEFQSV9FTkRfUE9JTlRTLkRPV05MT0FEX1BERjtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9JHtlbmRwb2ludH0/c3RhdGVfY2VudGVyX2lkPSR7c3RhdGVfY2VudGVyX2lkfSombGFuZ3VhZ2U9JHtsYW5ndWFnZX1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgIH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgICAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LWRpc3Bvc2l0aW9uJyk7XG4gICAgICBjb25zb2xlLmxvZygnY29udGVudERpc3Bvc2l0aW9uJywgcmVzLmhlYWRlcnMpXG4gICAgICBsZXQgZmlsZW5hbWUgPSBgQ0JQX1JlcG9ydF8ke3N0YXRlX2NlbnRlcl9pZH0ucGRmYDtcblxuICAgICAgaWYgKGNvbnRlbnREaXNwb3NpdGlvbikge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbnRlbnREaXNwb3NpdGlvbi5tYXRjaCgvZmlsZW5hbWU9XCI/KFteXCJdKylcIj8vKTtcbiAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XG4gICAgICAgICAgZmlsZW5hbWUgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgYSBibG9iIFVSTCBhbmQgZG93bmxvYWRcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcmVzLmJvZHldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xuICAgICAgY29uc3QgZG93bmxvYWRVcmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGEuaHJlZiA9IGRvd25sb2FkVXJsO1xuICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgYS5jbGljaygpO1xuXG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGRvd25sb2FkVXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRvd25sb2FkUGRmRm9yRGVwYXJ0bWVudChzdGF0ZV9jZW50ZXJfaWQsIGRlcGFydG1lbnRfaWQ6IHN0cmluZywgY29udGV4dDogc3RyaW5nLCBsYW5ndWFnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZW5kcG9pbnQgPVxuICAgICAgY29udGV4dCA9PT0gJ2FjYnAnXG4gICAgICAgID8gQVBJX0VORF9QT0lOVFMuRE9XTkxPQURfUERGX0FDQlBcbiAgICAgICAgOiBBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9QREY7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfSR7ZW5kcG9pbnR9P3N0YXRlX2NlbnRlcl9pZD0ke3N0YXRlX2NlbnRlcl9pZH0mZGVwYXJ0bWVudF9pZD0ke2RlcGFydG1lbnRfaWR9Jmxhbmd1YWdlPSR7bGFuZ3VhZ2V9YDtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcbiAgICB9KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cbiAgICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpO1xuICAgICAgY29uc29sZS5sb2coJ2NvbnRlbnREaXNwb3NpdGlvbicsIHJlcy5oZWFkZXJzKVxuICAgICAgbGV0IGZpbGVuYW1lID0gYENCUF9SZXBvcnRfJHtzdGF0ZV9jZW50ZXJfaWR9XyR7ZGVwYXJ0bWVudF9pZH0ucGRmYDtcblxuICAgICAgaWYgKGNvbnRlbnREaXNwb3NpdGlvbikge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbnRlbnREaXNwb3NpdGlvbi5tYXRjaCgvZmlsZW5hbWU9XCI/KFteXCJdKylcIj8vKTtcbiAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XG4gICAgICAgICAgZmlsZW5hbWUgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgYSBibG9iIFVSTCBhbmQgZG93bmxvYWRcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcmVzLmJvZHldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xuICAgICAgY29uc3QgZG93bmxvYWRVcmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGEuaHJlZiA9IGRvd25sb2FkVXJsO1xuICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgYS5jbGljaygpO1xuXG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGRvd25sb2FkVXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENlbnRlckJhc2VkRGVwYXJ0bWVudChzdGF0ZV9jZW50ZXJfaWQpIHtcbiAgICAvLyBsZXQgcmVxQm9keSA9IHsgXCJyZXF1ZXN0XCI6IHsgXCJmaWx0ZXJzXCI6IHsgXCJzdGF0dXNcIjogMSwgXCJtaW5pc3RyeU9yU3RhdGVUeXBlXCI6IFwibWluaXN0cnlcIiwgXCJtaW5pc3RyeU9yU3RhdGVJZFwiOiBzdGF0ZV9jZW50ZXJfaWR9LCBcInNvcnRfYnlcIjogeyBcImNyZWF0ZWREYXRlXCI6IFwiZGVzY1wiIH0sIFwibGltaXRcIjogOTk5OSwgXCJvZmZzZXRcIjogMCwgXCJmaWVsZHNcIjogW1wiaWRlbnRpZmllclwiLCBcIm9yZ05hbWVcIiwgXCJkZXNjcmlwdGlvblwiLCBcInBhcmVudE9yZ05hbWVcIiwgXCJtaW5pc3RyeU9yU3RhdGVJZFwiLCBcIm1pbmlzdHJ5T3JTdGF0ZVR5cGVcIiwgXCJtaW5pc3RyeU9yU3RhdGVOYW1lXCIsIFwic2JPcmdTdWJUeXBlXCJdIH0gfVxuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkNFTlRFUl9CQVNFRF9NSU5JU1RSWX0vJHtzdGF0ZV9jZW50ZXJfaWR9P2xpbWl0PTk5OTkmb2Zmc2V0PTAmc3ViX29yZ190eXBlPW1pbmlzdHJ5YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG5cbiAgZG93bmxvYWRQZGZGb3JDb3Vyc2VSZWNvbW1lbmRhdGlvbihzdGF0ZV9jZW50ZXJfaWQpIHtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRPV05MT0FEX0NPVVJTRV9SRUNPTU1FTkRBVElPTn0/cm9sZV9tYXBwaW5nX2lkPSR7c3RhdGVfY2VudGVyX2lkfWA7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgfSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuXG4gICAgICBjb25zdCBjb250ZW50RGlzcG9zaXRpb24gPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcbiAgICAgIGxldCBmaWxlbmFtZSA9IGBDT1VSU0VfUkVDT01NRU5EQVRJT05fUmVwb3J0XyR7c3RhdGVfY2VudGVyX2lkfS5wZGZgO1xuXG4gICAgICBpZiAoY29udGVudERpc3Bvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gY29udGVudERpc3Bvc2l0aW9uLm1hdGNoKC9maWxlbmFtZT1cIj8oW15cIl0rKVwiPy8pO1xuICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMV0pIHtcbiAgICAgICAgICBmaWxlbmFtZSA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBhIGJsb2IgVVJMIGFuZCBkb3dubG9hZFxuICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtyZXMuYm9keV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XG4gICAgICBjb25zdCBkb3dubG9hZFVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgYS5ocmVmID0gZG93bmxvYWRVcmw7XG4gICAgICBhLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgICBhLmNsaWNrKCk7XG5cbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoZG93bmxvYWRVcmwpO1xuICAgIH0pO1xuICB9XG5cbiAgdXBsb2FkRG9jdW1lbnQocmVxQm9keSwgZmlsZT86IEZpbGUpIHtcbiAgICBjb25zdCBzdG9yYWdlRGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9naW5EYXRhJykpXG4gICAgLy8gIGNvbnNvbGUubG9nKCdzdG9yYWdlRGF0YS0tJywgc3RvcmFnZURhdGEpXG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3N0b3JhZ2VEYXRhPy5hY2Nlc3NfdG9rZW59YFxuICAgIH0pO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcblxuICAgIC8vIEFkZCByZXF1aXJlZCBmaWVsZHNcbiAgICAvLyBpZiAocmVxQm9keS5zdGF0ZV9jZW50ZXJfaWQpIHtcbiAgICAvLyAgIGZvcm1EYXRhLmFwcGVuZCgnc3RhdGVfY2VudGVyX2lkJywgcmVxQm9keS5zdGF0ZV9jZW50ZXJfaWQpO1xuICAgIC8vIH1cblxuICAgIC8vIGlmIChyZXFCb2R5LmRlcGFydG1lbnRfaWQpIHtcbiAgICAvLyAgIGZvcm1EYXRhLmFwcGVuZCgnZGVwYXJ0bWVudF9pZCcsIHJlcUJvZHkuZGVwYXJ0bWVudF9pZCk7XG4gICAgLy8gfVxuXG5cblxuICAgIC8vIGlmKHJlcUJvZHkuZG9jdW1lbnROYW1lKSB7XG4gICAgLy8gICBmb3JtRGF0YS5hcHBlbmQoJ2RvY3VtZW50X25hbWUnLCByZXFCb2R5LmRvY3VtZW50TmFtZSk7XG4gICAgLy8gfVxuICAgIC8vIEFkZCBmaWxlIGlmIHByb3ZpZGVkXG4gICAgLy8gaWYgKGZpbGUpIHtcbiAgICAvLyAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xuICAgIC8vIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5VUExPQURfRE9DVU1FTlR9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFVwbG9hZGVkRG9jdW1lbnRzKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzO1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gICAgT2JqZWN0LmVudHJpZXMocmVxQm9keSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KGtleSwgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9ET0NVTUVOVFN9YCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIHBhcmFtc1xuICAgIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlRmlsZShmaWxlSWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ERUxFVEVfRklMRX0vJHtmaWxlSWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHRyaWdnZXJGaWxlU3VtbWFyeShmaWxlSWQpIHtcbiAgICBjb25zdCBzdG9yYWdlRGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9naW5EYXRhJykpXG4gICAgLy8gY29uc29sZS5sb2coJ3N0b3JhZ2VEYXRhLS0nLCBzdG9yYWdlRGF0YSlcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7c3RvcmFnZURhdGE/LmFjY2Vzc190b2tlbn1gXG4gICAgfSk7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRFTEVURV9GSUxFfS8ke2ZpbGVJZH0vc3VtbWFyeWAsIHt9LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZG93bmxvYWRGaWxlKGZpbGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCbG9iPiB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVycztcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRPV05MT0FEX0ZJTEV9LyR7ZmlsZUlkfS9kb3dubG9hZGAsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlU3VtbWFyeShmaWxlSWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ERUxFVEVfU1VNTUFSWX0vJHtmaWxlSWR9L3N1bW1hcnlgLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZGVsZXRlUmVjb21tZW5kZWRDb3Vyc2Uocm9sZU1hcHBpbmdJZDogc3RyaW5nLCBjb3Vyc2VJZGVudGlmaWVyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihcbiAgICAgIGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRFTEVURV9DT1VSU0VfUkVDT01NRU5EQVRJT059LyR7cm9sZU1hcHBpbmdJZH0vY291cnNlLyR7Y291cnNlSWRlbnRpZmllcn1gLFxuICAgICAgeyBoZWFkZXJzIH1cbiAgICApO1xuICB9XG5cbiAgZ2V0Q2JwUGxhbnNXaXRoU2VsZWN0ZWRDb3Vyc2VzKCk6IGFueVtdIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmNicFBsYW5GaW5hbE9iajtcblxuICAgIHJldHVybiBzb3VyY2U/LnJvbGVfbWFwcGluZ19nZW5lcmF0aW9uXG4gICAgICA/LmZsYXRNYXAoKHJvbGU6IGFueSkgPT4gcm9sZS5jYnBfcGxhbnMgfHwgW10pXG4gICAgICA/LmZpbHRlcihcbiAgICAgICAgKHBsYW46IGFueSkgPT5cbiAgICAgICAgICBBcnJheS5pc0FycmF5KHBsYW4uc2VsZWN0ZWRfY291cnNlcykgJiZcbiAgICAgICAgICBwbGFuLnNlbGVjdGVkX2NvdXJzZXMubGVuZ3RoID4gMFxuICAgICAgKSB8fCBbXTtcbiAgfVxuXG4gIGdldEFkZGl0aW9uYWxQYXJhbWV0ZXJmb3JTdWdnZXN0ZWRDb3Vyc2VzKGlkZW50aWZpZXJzKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIGxldCByZXFCb2R5ID0ge1xuICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgXCJmaWx0ZXJzXCI6IHtcbiAgICAgICAgICBcImlkZW50aWZpZXJcIjogaWRlbnRpZmllcnMsXG5cblxuICAgICAgICAgIFwic3RhdHVzXCI6IFtcbiAgICAgICAgICAgIFwiTGl2ZVwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZpZWxkc1wiOiBbXG4gICAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgICAgXCJsYW5ndWFnZVwiLFxuICAgICAgICAgIFwiaWRlbnRpZmllclwiLFxuICAgICAgICAgIFwiYXZnUmF0aW5nXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJsaW1pdFwiOiAxMDAwLFxuICAgICAgICBcIm9mZnNldFwiOiAwLFxuICAgICAgICBcInNvcnRfYnlcIjoge31cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU1VHR0VTVEVEX0NPVVJTRV9MSVNUfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICB1cGRhdGVEZXNpZ25hdGlvbkhpZXJhcmNoeShyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuVVBEQVRFX0RFU0lHTkFUSU9OX0hJRVJBUkNIWX1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgc2VhcmNoUHVibGljRGVzaWduYXRpb24ocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TRUFSQ0hfUFVCTElDX0RFU0lHTkFUSU9OfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXREYXNoYm9hcmRBZG1pbihyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRBU0hCT0FSRF9BRE1JTn1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0RGFzaGJvYXJkR2FwQW5hbHlzaXNBZG1pbihyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdBUF9BTkFMWVNJU19BRE1JTn1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0RGFzaGJvYXJkUHVibGljKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREFTSEJPQVJEX1BVQkxJQ31gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0RGFzaGJvYXJkR2FwQW5hbHlzaXNQdWJsaWMocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HQVBfQU5BTFlTSVNfUFVCTElDfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICAgZ2V0TWF0Y2hlZFJvbGVNYXBwaW5nKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuTUFUQ0hFRF9ST0xFX01BUFBJTkd9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldEFwcHJvdmFsUmVxdWVzdHMocmVxQm9keSkge1xuICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfQVBQUk9WQUxfUkVRVUVTVFN9YCwgIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzYXZlQXBwcm92YWxSZXF1ZXN0KHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0FWRV9BUFBST1ZBTF9SRVFVRVNUfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICAgc2VhcmNoUHVibGljbWRvKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0VBUkNIX1BVQkxJQ19NRE99YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHZpZXdBcHByb3ZhbFJlcXVlc3RzKHJlcXVlc3RfaWQpIHtcbiAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuVklFV19BUFBST1ZBTF9SRVFVRVNUfS8ke3JlcXVlc3RfaWR9YCwgIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICByZXZva2VBcHByb3ZhbFJlcXVlc3QocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5SRVZPS0VfQVBQUk9WQUxfUkVRVUVTVH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbn1cblxuIl19
879
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxZQUFZO0FBQ1osT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUErQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBOzs7O0FBRXBDLCtFQUErRTtBQUUvRSxNQUFNLGNBQWMsR0FBRztJQUNyQixhQUFhLEVBQUUsMEJBQTBCO0lBQ3pDLG9CQUFvQixFQUFFLDBCQUEwQjtJQUNoRCxxQkFBcUIsRUFBRSwwQkFBMEI7SUFDakQsa0JBQWtCLEVBQUUsd0JBQXdCO0lBQzVDLGFBQWEsRUFBRSw2QkFBNkI7SUFDNUMsYUFBYSxFQUFFLDBCQUEwQjtJQUN6QyxnQkFBZ0IsRUFBRSxnQ0FBZ0M7SUFDbEQsZ0JBQWdCLEVBQUUseUNBQXlDO0lBQzNELG1CQUFtQixFQUFFLHVDQUF1QztJQUM1RCxjQUFjLEVBQUUsMkNBQTJDO0lBQzNELGdDQUFnQyxFQUFFLDZDQUE2QztJQUMvRSwyQ0FBMkMsRUFBRSw2Q0FBNkM7SUFDMUYsbUJBQW1CLEVBQUUsZ0NBQWdDO0lBQ3JELHNCQUFzQixFQUFFLG9CQUFvQjtJQUM1QyxZQUFZLEVBQUUsaUNBQWlDO0lBQy9DLFdBQVcsRUFBRSw0QkFBNEI7SUFDekMsY0FBYyxFQUFFLDRCQUE0QjtJQUM1QyxxQkFBcUIsRUFBRSwwQkFBMEI7SUFDakQsNEJBQTRCLEVBQUUsMkNBQTJDO0lBQ3pFLHFCQUFx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QUksQ0FBQyxJQUFJLENBQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDO2FBQ3pHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUMxQixPQUFPLFFBQVEsQ0FBQTtRQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ1AsQ0FBQztJQUVBLDhCQUE4QixDQUFDLE9BQU87UUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUM1QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsaUNBQWlDLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUNuSCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDMUIsT0FBTyxRQUFRLENBQUE7UUFDakIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNQLENBQUM7K0dBMzVCVSxhQUFhO21IQUFiLGFBQWEsY0FIWixNQUFNOzs0RkFHUCxhQUFhO2tCQUp6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjsySEFhQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG4vL0luamVjdGFibGVcbmltcG9ydCB7IEhvc3RMaXN0ZW5lciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IEluaXRTZXJ2aWNlIH0gZnJvbSAnLi9pbml0LnNlcnZpY2UnO1xuLy8gaW1wb3J0IGNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vLi4vLi4vLi4vYXNzZXRzL2pzb25maWxlcy9jb25maWd1cmF0aW9ucy5qc29uJ1xuXG5jb25zdCBBUElfRU5EX1BPSU5UUyA9IHtcbiAgRkVUQ0hfQ09VUlNFUzogJ2FwaS92MS9jb3Vyc2UvdjIvZXhwbG9yZScsXG4gIEZFVENIX1BPU1RBTF9DT1VSU0VTOiAnYXBpL3YxL2NvbnRlbnQvdjEvc2VhcmNoJyxcbiAgRkVUQ0hfUkFJTFdBWV9DT1VSU0VTOiAnYXBpL3YxL2NvbnRlbnQvdjEvc2VhcmNoJyxcbiAgRkVUQ0hfSEFMTF9PRl9GQU1FOiAnYXBpL3YxL2hhbGxvZmZhbWUvcmVhZCcsXG4gIE5MV19GT1JNX1JFQUQ6ICdhcGlzL3YxL3N0YXRpYy9mb3JtL3YxL3JlYWQnLFxuICBGRVRDSF9URU5ERVJTOiAnYXBpL3YxL2NvbnRlbnQvdjEvc2VhcmNoJyxcbiAgR0VUX1NUQVRFX0NFTlRFUjogJ2NicC10cGMtYWkvYXBpL3YxL3N0YXRlLWNlbnRlcicsXG4gIEdFVF9ST0xFX01BUFBJTkc6ICdjYnAtdHBjLWFpL2FwaS92My9yb2xlLW1hcHBpbmcvZ2VuZXJhdGUnLFxuICBERUxFVEVfUk9MRV9NQVBQSU5HOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nL2RlbGV0ZScsXG4gIEdFVF9ERVBBUlRNRU5UOiAnY2JwLXRwYy1haS9hcGkvdjEvZGVwYXJ0bWVudC9zdGF0ZS1jZW50ZXInLFxuICBHRVRfUk9MRV9NQVBQSU5HX0JZX1NUQVRFX0NFTlRFUjogJ2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZy9zdGF0ZS1jZW50ZXInLFxuICBHRVRfUk9MRV9NQVBQSU5HX0JZX1NUQVRFX0NFTlRFUl9ERVBBUlRNRU5UOiAnY2JwLXRwYy1haS9hcGkvdjEvcm9sZS1tYXBwaW5nL3N0YXRlLWNlbnRlcicsXG4gIFVQREFURV9ST0xFX01BUFBJTkc6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcnLFxuICBHRVRfUkVDT01NRU5ERURfQ09VUlNFOiAnY2JwLXRwYy1haS9hcGkvdjEvJyxcbiAgU0FWRV9DT1VSU0VTOiAnY2JwLXRwYy1haS9hcGkvdjEvY2JwLXBsYW4vc2F2ZScsXG4gIEdFVF9DT1VSU0VTOiAnY2JwLXRwYy1haS9hcGkvdjEvY2JwLXBsYW4nLFxuICBVUERBVEVfQ09VUlNFUzogJ2NicC10cGMtYWkvYXBpL3YxL2NicC1wbGFuJyxcbiAgSUdPVF9TVUdHRVNURURfQ09VUlNFOiAnYXBpL3YxL2NvbnRlbnQvdjEvc2VhcmNoJyxcbiAgU0FWRV9DT1VSU0VfU1VHR0VTVEVEX0NPVVJTRTogJ2NicC10cGMtYWkvYXBpL3YxL2NvdXJzZS9zdWdnZXN0aW9ucy9zYXZlJyxcbiAgU1VHR0VTVEVEX0NPVVJTRV9MSVNUOiAnY2JwLXRwYy1haS9hcGkvdjEvY291cnNlL3N1Z2dlc3Rpb25zJyxcbiAgQUREX0RFU0lHTkFUSU9OOiAnY2JwLXRwYy1haS9hcGkvdjIvcm9sZS1tYXBwaW5nL2FkZC1kZXNpZ25hdGlvbicsXG4gIExPR0lOOiAnY2JwLXRwYy1haS9hcGkvdjEvYXV0aC9sb2dpbicsXG4gIExPR09VVDogJ2NicC10cGMtYWkvYXBpL3YxL2F1dGgvbG9nb3V0JyxcbiAgREVMRVRFX1JPTEVfTUFQUElOR19CWV9TVEFURV9DRU5URVI6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcnLFxuICBBRERfVVNFUl9DT1VSU0VTOiAnY2JwLXRwYy1haS9hcGkvdjEvdXNlci1hZGRlZC1jb3Vyc2VzJyxcbiAgR0VUX1VTRVJfQ09VUlNFUzogJ2NicC10cGMtYWkvYXBpL3YxL3VzZXItYWRkZWQtY291cnNlcy9yb2xlLW1hcHBpbmcnLFxuICBHRVRfVVNFUl9TRUxFQ1RFRF9DT1VSU0VTOiAnY2JwLXRwYy1haS9hcGkvdjEvY2JwLXBsYW4nLFxuICBVUExPQURfRE9DVU1FTlQ6ICdjYnAtdHBjLWFpL2FwaS92MS9maWxlcycsXG4gIEdFVF9ET0NVTUVOVFM6ICdjYnAtdHBjLWFpL2FwaS92MS9maWxlcycsXG4gIERFTEVURV9GSUxFOiAnY2JwLXRwYy1haS9hcGkvdjEvZmlsZXMnLFxuICBUUklHR0VSX0ZJTEVfU1VNTUFSWTogJ2NicC10cGMtYWkvYXBpL3YxL2ZpbGVzJyxcbiAgRE9XTkxPQURfRklMRTogJ2NicC10cGMtYWkvYXBpL3YxL2ZpbGVzJyxcbiAgREVMRVRFX1NVTU1BUlk6ICdjYnAtdHBjLWFpL2FwaS92MS9maWxlcycsXG4gIEdFVF9VU0VSX1BST0ZJTEU6ICdjYnAtdHBjLWFpL2FwaS92MS91c2Vycy9tZScsXG4gIEdFVF9VU0VSX1JFQ09NTUVORURfQ09VUlNFUzogJ2NicC10cGMtYWkvYXBpL3YxL2NvdXJzZS1yZWNvbW1lbmRhdGlvbnMnLFxuICBET1dOTE9BRF9QREY6ICdjYnAtdHBjLWFpL2FwaS92MS9yZXBvcnRzL2NicC1wbGFuL2Rvd25sb2FkJyxcbiAgRE9XTkxPQURfUERGX0FDQlA6ICdjYnAtdHBjLWFpL2FwaS92MS9yZXBvcnRzL2FjYnAtcGxhbi9kb3dubG9hZCcsXG4gIENFTlRFUl9CQVNFRF9NSU5JU1RSWTogJ2NicC10cGMtYWkvYXBpL3YxL2RlcGFydG1lbnQvc3RhdGUtY2VudGVyJyxcbiAgRE9XTkxPQURfQ09VUlNFX1JFQ09NTUVOREFUSU9OOiAnY2JwLXRwYy1haS9hcGkvdjEvcmVwb3J0cy9jb3Vyc2UtcmVjb21tZW5kYXRpb25zL2Rvd25sb2FkJyxcbiAgREVMRVRFX0NPVVJTRV9SRUNPTU1FTkRBVElPTjogJ2NicC10cGMtYWkvYXBpL3YxL2NicC1wbGFuJyxcbiAgVVBEQVRFX0RFU0lHTkFUSU9OX0hJRVJBUkNIWTogJ2NicC10cGMtYWkvYXBpL3YxL3JvbGUtbWFwcGluZy9yZW9yZGVyJyxcbiAgU0VBUkNIX1BVQkxJQ19ERVNJR05BVElPTjogJ2FwaXMvcHVibGljL3Y4L2Rlc2lnbmF0aW9uL3NlYXJjaCcsXG4gIERBU0hCT0FSRF9BRE1JTjogJ2NicC10cGMtYWkvYXBpL3YxL2Rhc2hib2FyZC9jYnAtZGFzaGJvYXJkLW1ldHJpY3MnLFxuICBHQVBfQU5BTFlTSVNfQURNSU46ICdjYnAtdHBjLWFpL2FwaS92MS9kYXNoYm9hcmQvZ2FwLWFuYWx5c2lzJyxcbiAgREFTSEJPQVJEX1BVQkxJQzogJ2NicC10cGMtYWkvYXBpL3YxL2Rhc2hib2FyZC9teS1kYXNoYm9hcmQtbWV0cmljcycsXG4gIEdBUF9BTkFMWVNJU19QVUJMSUM6ICdjYnAtdHBjLWFpL2FwaS92MS9kYXNoYm9hcmQvbXktZ2FwLWFuYWx5c2lzJyxcbiAgTUFUQ0hFRF9ST0xFX01BUFBJTkc6ICdjYnAtdHBjLWFpL2FwaS92MS9yb2xlLW1hcHBpbmcvbWF0Y2gtZGVzaWduYXRpb25zJyxcbiAgR0VUX0FQUFJPVkFMX1JFUVVFU1RTOiAnY2JwLXRwYy1haS9hcGkvdjEvYXBwcm92YWwtcmVxdWVzdHMvbGlzdCcsXG4gIFNFQVJDSF9QVUJMSUNfTURPOiAnY2JwLXRwYy1haS9hcGkvdjEvYXBwcm92YWwtcmVxdWVzdHMvbWRvLWFkbWlucycsXG4gIFNBVkVfQVBQUk9WQUxfUkVRVUVTVDonY2JwLXRwYy1haS9hcGkvdjEvYXBwcm92YWwtcmVxdWVzdHMvc2VuZCcsXG4gIFZJRVdfQVBQUk9WQUxfUkVRVUVTVDogJ2NicC10cGMtYWkvYXBpL3YxL2FwcHJvdmFsLXJlcXVlc3RzJyxcbiAgUkVWT0tFX0FQUFJPVkFMX1JFUVVFU1Q6ICdjYnAtdHBjLWFpL2FwaS92MS9hcHByb3ZhbC1yZXF1ZXN0cycsXG4gIFNBVkVfREVTSUdOQVRJT05fQVBQUk9WQUxfUkVRVUVTVDogJ2NicC10cGMtYWkvYXBpL3YxL2Rlc2lnbmF0aW9uLWFwcHJvdmFsL2NyZWF0ZScsXG5cbn1cblxuXG5cbi8vIEBEaXJlY3RpdmUoKVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5cbmV4cG9ydCBjbGFzcyBTaGFyZWRTZXJ2aWNlIHtcbiAgY2JwUGxhbkZpbmFsT2JqOiBhbnkgPSB7fVxuICBiYXNlVXJsOiBzdHJpbmdcbiAgY29uZmlnRGV0YWlsczogYW55XG4gIHNjcmVlbldpZHRoOiBudW1iZXI7XG4gIGhlYWRlcnM6IGFueVxuICBzdW1tYXJ5VHJpZ2dlckV4ZWN1dGVkID0gbmV3IFN1YmplY3QoKVxuICBsb2dpblN1Y2Nlc3MgPSBuZXcgU3ViamVjdCgpXG4gIGNoZWNrUm9sZU1hcHBpbmdGb3JtVmFsaWRhdGlvbiA9IG5ldyBTdWJqZWN0KClcbiAgdXBkYXRlRGVzaWduYXRpb25IaWVyYXJjaHlTdWJqZWN0ID0gbmV3IFN1YmplY3QoKVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgb25SZXNpemUoZXZlbnQpIHtcbiAgICB0aGlzLnNjcmVlbldpZHRoID0gZXZlbnQudGFyZ2V0LmlubmVyV2lkdGg7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBpbml0U3ZjOiBJbml0U2VydmljZSxcbiAgKSB7XG4gICAgaWYgKGluaXRTdmMgJiYgdGhpcy5pbml0U3ZjLmJhc2VVcmwgJiYgdGhpcy5pbml0U3ZjLmNvbmZpZ0RldGFpbHMpIHtcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmluaXRTdmMnLCB0aGlzLmluaXRTdmMpXG4gICAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmluaXRTdmMuYmFzZVVybFxuICAgICAgdGhpcy5jb25maWdEZXRhaWxzID0gdGhpcy5pbml0U3ZjLmNvbmZpZ0RldGFpbHNcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRDb25maURldGFpbHMoKVxuICAgIH1cbiAgICB0aGlzLnNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgY29uc3Qgc3RvcmFnZURhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luRGF0YScpKVxuICAgIGNvbnNvbGUubG9nKCdzdG9yYWdlRGF0YS0tJywgc3RvcmFnZURhdGEpXG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3N0b3JhZ2VEYXRhPy5hY2Nlc3NfdG9rZW59YFxuICAgIH0pO1xuICB9XG5cbiAgc2V0Q29uZmlEZXRhaWxzKGNvbmZpZ0RldGFpbHM6IGFueSA9IG51bGwpIHtcbiAgICBpZiAoY29uZmlnRGV0YWlscykge1xuICAgICAgdGhpcy5jb25maWdEZXRhaWxzID0gY29uZmlnRGV0YWlsc1xuICAgICAgdGhpcy5iYXNlVXJsID0gY29uZmlnRGV0YWlscy5wb3J0YWxVUkxcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZXRDb25maWdEZXRhaWxzKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnRGV0YWlscyA9IHJlc3BvbnNlXG4gICAgICAgIHRoaXMuYmFzZVVybCA9IHJlc3BvbnNlLnBvcnRhbFVSTFxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgZ2V0Q29uZmlnKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZ0RldGFpbHMpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZ0RldGFpbHM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldENvbmZpZ0RldGFpbHMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oJ2Fzc2V0cy9qc29uZmlsZXMvY29uZmlndXJhdGlvbnMuanNvbicpO1xuICB9XG5cblxuXG4gIGdldGNvdXJzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5GRVRDSF9DT1VSU0VTfWApXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0ZUZlYXR1cmVDb3Vyc2VzKHJlc3BvbnNlLnJlc3VsdC5jb250ZW50KVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRQb3N0YWxjb3Vyc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfUE9TVEFMX0NPVVJTRVN9YClcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRlRmVhdHVyZUNvdXJzZXMocmVzcG9uc2UucmVzdWx0LmNvbnRlbnQpXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFJhaWx3YXljb3Vyc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfUkFJTFdBWV9DT1VSU0VTfWApXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0ZUZlYXR1cmVDb3Vyc2VzKHJlc3BvbnNlLnJlc3VsdC5jb250ZW50KVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRIYWxsT2ZGYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkZFVENIX0hBTExfT0ZfRkFNRX1gLCBudWxsKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBmb3JtYXRlRmVhdHVyZUNvdXJzZXMoZmVhdHVyZUNvdXJzZXM6IGFueSkge1xuICAgIGNvbnN0IGZvcm1hdGVkRmVhdHVyZUNvdXJzZXMgPSBbXTtcbiAgICBjb25zdCBmb3JtYXRlZE5ld3Nyb29tID0gW107XG4gICAgY29uc3QgZm9ybWF0ZWRQaG90b2dhbGxhcnkgPSBbXTtcbiAgICBjb25zdCBmb3JtYXRlZFRlc3RpbW9uaWFsID0gW107XG4gICAgaWYgKGZlYXR1cmVDb3Vyc2VzKSB7XG4gICAgICBmZWF0dXJlQ291cnNlcy5mb3JFYWNoKGNvdXJzZSA9PiB7XG4gICAgICAgIGlmIChjb3Vyc2UucHJpbWFyeUNhdGVnb3J5ID09PSAnQ291cnNlJykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdGVkQ291cnNlID0ge1xuICAgICAgICAgICAgcG9zdGVySW1hZ2U6IGNvdXJzZS5wb3N0ZXJJbWFnZSxcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbjogY291cnNlLm9yZ2FuaXNhdGlvblswXSA/IGNvdXJzZS5vcmdhbmlzYXRpb25bMF0gOiAnS2FybWF5b2dpIEJoYXJhdCcsXG4gICAgICAgICAgICBuYW1lOiBjb3Vyc2UubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjb3Vyc2UuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBjb3Vyc2UuaWRlbnRpZmllcixcbiAgICAgICAgICAgIGFsdDogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBjcmVhdG9yTG9nbzogY291cnNlLmNyZWF0b3JMb2dvIHx8ICcnLFxuICAgICAgICAgICAgZHVyYXRpb246IHRoaXMudGltZUNvbnZlcnQoY291cnNlLmR1cmF0aW9uKSxcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybWF0ZWRGZWF0dXJlQ291cnNlcy5wdXNoKGZvcm1hdGVkQ291cnNlKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvdXJzZS5yZXNvdXJjZUNhdGVnb3J5ID09PSAnTmV3c3Jvb20nKSB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ZWRDb3Vyc2UgPSB7XG4gICAgICAgICAgICBwb3N0ZXJJbWFnZTogY291cnNlLnBvc3RlckltYWdlLFxuICAgICAgICAgICAgbmFtZTogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY291cnNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogY291cnNlLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBhbHQ6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgY2xvdWRTdG9yYWdlS2V5OiBgJHt0aGlzLmJhc2VVcmx9YXNzZXRzL3B1YmxpYy8ke2NvdXJzZS5jbG91ZFN0b3JhZ2VLZXl9YFxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtYXRlZE5ld3Nyb29tLnB1c2goZm9ybWF0ZWRDb3Vyc2UpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY291cnNlLnJlc291cmNlQ2F0ZWdvcnkgPT09ICdQaG90byBHYWxsZXJ5Jykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdGVkQ291cnNlID0ge1xuICAgICAgICAgICAgbmFtZTogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY291cnNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogY291cnNlLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBhbHQ6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgY2xvdWRTdG9yYWdlS2V5OiBgJHt0aGlzLmJhc2VVcmx9YXNzZXRzL3B1YmxpYy8ke2NvdXJzZS5jbG91ZFN0b3JhZ2VLZXl9YFxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtYXRlZFBob3RvZ2FsbGFyeS5wdXNoKGZvcm1hdGVkQ291cnNlKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvdXJzZS5yZXNvdXJjZUNhdGVnb3J5ID09PSAnVGVzdGltb25pYWxzJykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdGVkQ291cnNlID0ge1xuICAgICAgICAgICAgbmFtZTogY291cnNlLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY291cnNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogY291cnNlLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBhbHQ6IGNvdXJzZS5uYW1lLFxuICAgICAgICAgICAgY2xvdWRTdG9yYWdlS2V5OiBgJHt0aGlzLmJhc2VVcmx9YXNzZXRzL3B1YmxpYy8ke2NvdXJzZS5jbG91ZFN0b3JhZ2VLZXl9YCxcbiAgICAgICAgICAgIG1pbWVUeXBlOiBjb3Vyc2UubWltZVR5cGUsXG4gICAgICAgICAgICBwb3N0ZXJJbWFnZTogY291cnNlLnBvc3RlckltYWdlLFxuICAgICAgICAgICAgYXJ0aWZhY3RVcmw6IGNvdXJzZS5hcnRpZmFjdFVybCxcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybWF0ZWRUZXN0aW1vbmlhbC5wdXNoKGZvcm1hdGVkQ291cnNlKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgY291cnNlOiBmb3JtYXRlZEZlYXR1cmVDb3Vyc2VzLCBuZXdzcm9vbTogZm9ybWF0ZWROZXdzcm9vbSwgZ2FsbGFyeTogZm9ybWF0ZWRQaG90b2dhbGxhcnksIHRlc3RpbW9uaWxzOiBmb3JtYXRlZFRlc3RpbW9uaWFsIH1cbiAgfVxuXG4gIHRpbWVDb252ZXJ0KGR1cmF0aW9uOiBudW1iZXIpIHtcbiAgICBpZiAoZHVyYXRpb24pIHtcbiAgICAgIHZhciBudW0gPSBkdXJhdGlvbjtcbiAgICAgIHZhciBob3VycyA9IChudW0gLyAzNjAwKTtcbiAgICAgIHZhciByaG91cnMgPSBNYXRoLmZsb29yKGhvdXJzKTtcbiAgICAgIHZhciBtaW51dGVzID0gKGhvdXJzIC0gcmhvdXJzKSAqIDYwO1xuICAgICAgdmFyIHJtaW51dGVzID0gTWF0aC5yb3VuZChtaW51dGVzKTtcbiAgICAgIGlmIChybWludXRlcyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmhvdXJzICsgXCJoXCI7XG4gICAgICB9IGVsc2UgaWYgKHJob3VycyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcm1pbnV0ZXMgKyBcIm1cIlxuICAgICAgfVxuICAgICAgcmV0dXJuIHJob3VycyArIFwiaCBcIiArIHJtaW51dGVzICsgXCJtXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIGdldENsaWVudExpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoJy4vYXNzZXRzL2pzb25maWxlcy9jbGllbnQtbGlzdC5qc29uJyk7XG4gIH1cblxuICBnZXRUZW5kZXJzKCkge1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IFtcInRlbmRlclwiXSxcbiAgICAgICAgICBzdGF0dXM6IHsgXCIhPVwiOiBcIlJldGlyZWRcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhY2V0czogW1wibWltZVR5cGVcIl0sXG4gICAgICAgIHNvcnRCeTogeyBjcmVhdGVkT246IFwiRGVzY1wiIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfVEVOREVSU31gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXROb3RpZmljYXRpb25zKCkge1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IFtcIm5vdGlmaWNhdGlvblwiXSxcbiAgICAgICAgICBzdGF0dXM6IHsgXCIhPVwiOiBcIlJldGlyZWRcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhY2V0czogW1wibWltZVR5cGVcIl0sXG4gICAgICAgIHNvcnRCeTogeyBjcmVhdGVkT246IFwiZGVzY1wiIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfVEVOREVSU31gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cbiAgZ2V0Rm9ybVJlYWREYXRhKHJlcTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuTkxXX0ZPUk1fUkVBRH1gLCByZXEpXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG5cbiAgZ2V0TWluaXN0cnlEYXRhKG1pbmlzdHJ5VHlwZSkge1xuICAgIGxldCBzdWJfb3JnX3R5cGUgPSAnJ1xuICAgIGlmIChtaW5pc3RyeVR5cGUgPT0gJ21pbmlzdHJ5Jykge1xuICAgICAgc3ViX29yZ190eXBlID0gJ21pbmlzdHJ5J1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWJfb3JnX3R5cGUgPSAnc3RhdGUnXG4gICAgfVxuICAgIGNvbnN0IHN0b3JhZ2VEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dpbkRhdGEnKSlcbiAgICBjb25zb2xlLmxvZygnc3RvcmFnZURhdGEtLScsIHN0b3JhZ2VEYXRhKVxuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtzdG9yYWdlRGF0YT8uYWNjZXNzX3Rva2VufWBcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZygndGhpcy5iYXNlVXJsJyx0aGlzLmJhc2VVcmwpXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1NUQVRFX0NFTlRFUn0vP3N1Yl9vcmdfdHlwZT0ke3N1Yl9vcmdfdHlwZX1gLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2VuZXJhdGVSb2xlTWFwcGluZyhyZXFCb2R5LCBmaWxlcz86IEZpbGUgfCBGaWxlW10pIHtcbiAgICBjb25zb2xlLmxvZygncmVxQm9keS0tJywgcmVxQm9keSk7XG4gICAgY29uc29sZS5sb2coJ2ZpbGVzLS0tJywgZmlsZXMpXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIC8vIEFkZCByZXF1aXJlZCBmaWVsZHNcbiAgICBpZiAocmVxQm9keS5zdGF0ZV9jZW50ZXJfaWQpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnc3RhdGVfY2VudGVyX2lkJywgcmVxQm9keS5zdGF0ZV9jZW50ZXJfaWQpO1xuICAgIH1cblxuICAgIGlmIChyZXFCb2R5LnN0YXRlX2NlbnRlcl9uYW1lKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9uYW1lJywgcmVxQm9keS5zdGF0ZV9jZW50ZXJfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHJlcUJvZHkuZGVwYXJ0bWVudF9pZCkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdkZXBhcnRtZW50X2lkJywgcmVxQm9keS5kZXBhcnRtZW50X2lkKTtcbiAgICB9XG5cbiAgICBpZiAocmVxQm9keS5kZXBhcnRtZW50X25hbWUpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVwYXJ0bWVudF9uYW1lJywgcmVxQm9keS5kZXBhcnRtZW50X25hbWUpO1xuICAgIH1cblxuICAgIGlmIChyZXFCb2R5Lmluc3RydWN0aW9uKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2luc3RydWN0aW9uJywgcmVxQm9keS5pbnN0cnVjdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgY2JwRGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJykgfHwgJ3t9Jyk7XG4gICAgY29uc3Qgb3JnVHlwZSA9XG4gICAgICBjYnBEYXRhPy5taW5pc3RyeT8uc2JPcmdUeXBlIHx8XG4gICAgICBjYnBEYXRhPy5vcmdfdHlwZSB8fFxuICAgICAgJyc7XG4gICAgaWYgKG9yZ1R5cGUpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnb3JnX3R5cGUnLCBvcmdUeXBlKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgbXVsdGlwbGUgb3Igc2luZ2xlIGZpbGVcbiAgICBpZiAoZmlsZXMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbGVzKSkge1xuICAgICAgICBmaWxlcy5mb3JFYWNoKChmaWxlOiBGaWxlKSA9PiB7XG4gICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdhZGRpdGlvbmFsX2RvY3VtZW50JywgZmlsZSwgZmlsZS5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaW5nbGUgZmlsZVxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnLCBmaWxlcywgZmlsZXMubmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVidWcgRm9ybURhdGEgY29udGVudFxuICAgIGNvbnNvbGUubG9nKFwiRm9ybURhdGEgY29udGVudHM6XCIpO1xuICAgIGZvcm1EYXRhLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7a2V5fTogRklMRSAtPiAke3ZhbHVlLm5hbWV9ICgke3ZhbHVlLnNpemV9IGJ5dGVzKWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7a2V5fTogJHt2YWx1ZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnM7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfUk9MRV9NQVBQSU5HfWAsIGZvcm1EYXRhLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9KSk7XG4gIH1cblxuXG5cbiAgZ2V0RGVwYXJ0bWVudExpc3QobWluaXN0cnlJZCkge1xuICAgIGNvbnN0IHN0b3JhZ2VEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dpbkRhdGEnKSlcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7c3RvcmFnZURhdGE/LmFjY2Vzc190b2tlbn1gXG4gICAgfSk7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX0RFUEFSVE1FTlR9LyR7bWluaXN0cnlJZH1gLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0Um9sZU1hcHBpbmdCeVN0YXRlQ2VudGVyKHN0YXRlX2NlbnRlcl9pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSfS8ke3N0YXRlX2NlbnRlcl9pZH0/bG9hZF9jYnBfcGxhbnM9dHJ1ZWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRSb2xlTWFwcGluZ0J5U3RhdGVDZW50ZXJBbmREZXBhcnRtZW50KHN0YXRlX2NlbnRlcl9pZCwgZGVwYXJ0bWVudF9pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSfS8ke3N0YXRlX2NlbnRlcl9pZH0vZGVwYXJ0bWVudC8ke2RlcGFydG1lbnRfaWR9P2xvYWRfY2JwX3BsYW5zPXRydWVgLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgdXBkYXRlUm9sZU1hcHBpbmcocm9sZV9tYXBwaW5nX2lkLCByZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuVVBEQVRFX1JPTEVfTUFQUElOR30vJHtyb2xlX21hcHBpbmdfaWR9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGRlbGV0ZVJvbGVNYXBwaW5nKHJvbGVfbWFwcGluZ19pZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlVQREFURV9ST0xFX01BUFBJTkd9LyR7cm9sZV9tYXBwaW5nX2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRSZWNvbW1lbmRlZENvdXJzZShyb2xlX21hcHBpbmdfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgbGV0IHJlcUJvZHkgPSB7XG4gICAgICByb2xlX21hcHBpbmdfaWQ6IHJvbGVfbWFwcGluZ19pZFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfUkVDT01NRU5ERURfQ09VUlNFfS9jb3Vyc2UtcmVjb21tZW5kYXRpb25zL2dlbmVyYXRlYCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGRlbGV0ZUNvdXJzZVJlY29tbWVuZGF0aW9ucyhyb2xlTWFwSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkdFVF9SRUNPTU1FTkRFRF9DT1VSU0V9L2NvdXJzZS1yZWNvbW1lbmRhdGlvbnMvcm9sZS1tYXBwaW5nLyR7cm9sZU1hcElkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzYXZlQ291cnNlKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0FWRV9DT1VSU0VTfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cbiAgdXBkYXRlQ291cnNlKHJlcUJvZHksIGNicF9wbGFuX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuVVBEQVRFX0NPVVJTRVN9LyR7Y2JwX3BsYW5faWR9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldENvdXJzZShyb2xlX21hcHBpbmdfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfQ09VUlNFU30/cm9sZV9tYXBwaW5nX2lkPSR7cm9sZV9tYXBwaW5nX2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRJR09UU3VnZ2VzdGVkQ291cnNlcyhyZXFCb2R5KSB7XG4gICAgLy8gVXNlIHRoZSByZXFCb2R5IHBhcmFtZXRlciBwYXNzZWQgZnJvbSB0aGUgY29tcG9uZW50XG4gICAgLy8gSWYgbm8gcmVxQm9keSBpcyBwcm92aWRlZCwgdXNlIGRlZmF1bHQgc3RydWN0dXJlXG4gICAgbGV0IHJlcSA9IHJlcUJvZHkgfHwge1xuICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgXCJmaWx0ZXJzXCI6IHtcbiAgICAgICAgICBcInByaW1hcnlDYXRlZ29yeVwiOiBbXCJDb3Vyc2VcIl0sXG4gICAgICAgICAgXCJzdGF0dXNcIjogW1wiTGl2ZVwiXSxcbiAgICAgICAgICBcImNvdXJzZUNhdGVnb3J5XCI6IFtcIkNvdXJzZVwiXVxuICAgICAgICB9LFxuICAgICAgICBcImZpZWxkc1wiOiBbXCJwb3N0ZXJJbWFnZVwiLCBcImRlc2NyaXB0aW9uXCIsIFwibmFtZVwiXSxcbiAgICAgICAgXCJsaW1pdFwiOiAxMixcbiAgICAgICAgXCJvZmZzZXRcIjogMFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZygnZ2V0SUdPVFN1Z2dlc3RlZENvdXJzZXMgZmluYWwgcmVxdWVzdDonLCBKU09OLnN0cmluZ2lmeShyZXEsIG51bGwsIDIpKTtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TVUdHRVNURURfQ09VUlNFX0xJU1R9YCwgcmVxLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0U3VnZ2VzdGVkQ291cnNlcyhyb2xlX21hcHBpbmdfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TVUdHRVNURURfQ09VUlNFX0xJU1R9LyR7cm9sZV9tYXBwaW5nX2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzYXZlU3VnZ2VzdGVkQ291cnNlKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0FWRV9DT1VSU0VfU1VHR0VTVEVEX0NPVVJTRX1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgYWRkRGVzaWduYXRpb24ocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5BRERfREVTSUdOQVRJT059YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHBlcmZvcm1Mb2dpbihyZXFCb2R5KSB7XG4gICAgY29uc3QgYm9keSA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAgIC5zZXQoJ3VzZXJuYW1lJywgcmVxQm9keS51c2VybmFtZSlcbiAgICAgIC5zZXQoJ3Bhc3N3b3JkJywgcmVxQm9keS5wYXNzd29yZCk7XG4gICAgY29uc29sZS5sb2coJ2luIGxvZ2luIHVhdCcpXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuTE9HSU59YCwgYm9keS50b1N0cmluZygpLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgbG9nb3V0KCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5MT0dPVVR9YCwgJycsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBzZXRDQlBQbGFuTG9jYWxTdG9yYWdlKCkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonLCBKU09OLnN0cmluZ2lmeSh0aGlzLmNicFBsYW5GaW5hbE9iaikpXG4gIH1cblxuICBnZXRDQlBQbGFuTG9jYWxTdG9yYWdlKCkge1xuICAgIGxldCBjYnBQbGFuRmluYWxPYmogPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonKSlcbiAgICByZXR1cm4gY2JwUGxhbkZpbmFsT2JqXG4gIH1cblxuICBjaGVja0lmTG9naW4oKSB7XG4gICAgbGV0IGZsYWcgPSBmYWxzZVxuICAgIGxldCBsb2dpbkRhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9naW5EYXRhJylcbiAgICBpZiAobG9naW5EYXRhICYmIEpTT04ucGFyc2UobG9naW5EYXRhKVsnYWNjZXNzX3Rva2VuJ10pIHtcbiAgICAgIGZsYWcgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYWcgPSBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gZmxhZ1xuICB9XG5cbiAgZGVsZXRlUm9sZU1hcHBpbmdCeVN0YXRlQW5kRGVwYXJ0bWVudChzdGF0ZV9jZW50ZXJfaWQsIGRlcGFydG1lbnRfaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgbGV0IHVybCA9ICcnXG4gICAgaWYgKGRlcGFydG1lbnRfaWQgJiYgZGVwYXJ0bWVudF9pZCAhPT0gJ251bGwnICYmIGRlcGFydG1lbnRfaWQgIT09ICd1bmRlZmluZWQnICYmIGRlcGFydG1lbnRfaWQgIT09IHVuZGVmaW5lZCAmJiBkZXBhcnRtZW50X2lkICE9PSBudWxsKSB7XG4gICAgICB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ERUxFVEVfUk9MRV9NQVBQSU5HX0JZX1NUQVRFX0NFTlRFUn0/c3RhdGVfY2VudGVyX2lkPSR7c3RhdGVfY2VudGVyX2lkfSZkZXBhcnRtZW50X2lkPSR7ZGVwYXJ0bWVudF9pZH1gXG4gICAgfSBlbHNlIHtcbiAgICAgIHVybCA9IGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRFTEVURV9ST0xFX01BUFBJTkdfQllfU1RBVEVfQ0VOVEVSfT9zdGF0ZV9jZW50ZXJfaWQ9JHtzdGF0ZV9jZW50ZXJfaWR9YFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4odXJsLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgYWRkVXNlckNvdXJzZShyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkFERF9VU0VSX0NPVVJTRVN9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldFVzZXJDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1VTRVJfQ09VUlNFU30vJHtyb2xlX21hcHBpbmdfaWR9YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldENvbXBldGVuY3lKc29uKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0vdHJhaW5pbmctcGxhLWFpL2Fzc2V0cy9qc29uZmlsZXMvY29tcGV0ZW5jaWVzLmpzb25gLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICAgIC8vIHRoaXMuaHR0cC5nZXQ8YW55W10+KCcvYXNzZXRzL2pzb25maWxlcy9jb21wZXRlbmNpZXMuanNvbicpXG4gIH1cblxuICBjb252ZXJ0KHNlY29uZHM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKCFzZWNvbmRzIHx8IHNlY29uZHMgPD0gMCkge1xuICAgICAgcmV0dXJuICdOL0EnO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdGFsU2Vjb25kcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyk7XG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAvIDYwKTtcbiAgICBjb25zdCByZW1haW5pbmdTZWNvbmRzID0gdG90YWxTZWNvbmRzICUgNjA7XG5cbiAgICBpZiAoaG91cnMgPiAwKSB7XG4gICAgICAvLyBGb3IgZHVyYXRpb25zIHdpdGggaG91cnMsIHNob3cgaG91cnMgYW5kIG1pbnV0ZXMgKGUuZy4sIFwiM2ggMTBtXCIpXG4gICAgICBpZiAobWludXRlcyA+IDApIHtcbiAgICAgICAgcmV0dXJuIGAke2hvdXJzfWggJHttaW51dGVzfW1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGAke2hvdXJzfWhgO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWludXRlcyA+IDApIHtcbiAgICAgIC8vIEZvciBkdXJhdGlvbnMgdW5kZXIgYW4gaG91ciwgc2hvdyBtaW51dGVzIGFuZCBzZWNvbmRzIChlLmcuLCBcIjU4bSAzc1wiKVxuICAgICAgaWYgKHJlbWFpbmluZ1NlY29uZHMgPiAwKSB7XG4gICAgICAgIHJldHVybiBgJHttaW51dGVzfW0gJHtyZW1haW5pbmdTZWNvbmRzfXNgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGAke21pbnV0ZXN9bWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBkdXJhdGlvbnMgdW5kZXIgYSBtaW51dGUsIHNob3cgc2Vjb25kcyBvbmx5XG4gICAgICByZXR1cm4gYCR7cmVtYWluaW5nU2Vjb25kc31zYDtcbiAgICB9XG4gIH1cblxuICBnZXRVc2VyUHJvZmlsZSgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfVVNFUl9QUk9GSUxFfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRVc2VyUmVjb21tZW5kYXRpb25Db3Vyc2Uocm9sZV9tYXBwaW5nX2lkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX1VTRVJfU0VMRUNURURfQ09VUlNFU30/cm9sZV9tYXBwaW5nX2lkPSR7cm9sZV9tYXBwaW5nX2lkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBkb3dubG9hZFBkZihzdGF0ZV9jZW50ZXJfaWQ6IHN0cmluZywgY29udGV4dDogc3RyaW5nLCBsYW5ndWFnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZW5kcG9pbnQgPVxuICAgICAgY29udGV4dCA9PT0gJ2FjYnAnXG4gICAgICAgID8gQVBJX0VORF9QT0lOVFMuRE9XTkxPQURfUERGX0FDQlBcbiAgICAgICAgOiBBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9QREY7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfSR7ZW5kcG9pbnR9P3N0YXRlX2NlbnRlcl9pZD0ke3N0YXRlX2NlbnRlcl9pZH0qJmxhbmd1YWdlPSR7bGFuZ3VhZ2V9YDtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcbiAgICB9KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cbiAgICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpO1xuICAgICAgY29uc29sZS5sb2coJ2NvbnRlbnREaXNwb3NpdGlvbicsIHJlcy5oZWFkZXJzKVxuICAgICAgbGV0IGZpbGVuYW1lID0gYENCUF9SZXBvcnRfJHtzdGF0ZV9jZW50ZXJfaWR9LnBkZmA7XG5cbiAgICAgIGlmIChjb250ZW50RGlzcG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjb250ZW50RGlzcG9zaXRpb24ubWF0Y2goL2ZpbGVuYW1lPVwiPyhbXlwiXSspXCI/Lyk7XG4gICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xuICAgICAgICAgIGZpbGVuYW1lID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIGEgYmxvYiBVUkwgYW5kIGRvd25sb2FkXG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlcy5ib2R5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KTtcbiAgICAgIGNvbnN0IGRvd25sb2FkVXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBhLmhyZWYgPSBkb3dubG9hZFVybDtcbiAgICAgIGEuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgIGEuY2xpY2soKTtcblxuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChkb3dubG9hZFVybCk7XG4gICAgfSk7XG4gIH1cblxuICBkb3dubG9hZFBkZkZvckRlcGFydG1lbnQoc3RhdGVfY2VudGVyX2lkLCBkZXBhcnRtZW50X2lkOiBzdHJpbmcsIGNvbnRleHQ6IHN0cmluZywgbGFuZ3VhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IGVuZHBvaW50ID1cbiAgICAgIGNvbnRleHQgPT09ICdhY2JwJ1xuICAgICAgICA/IEFQSV9FTkRfUE9JTlRTLkRPV05MT0FEX1BERl9BQ0JQXG4gICAgICAgIDogQVBJX0VORF9QT0lOVFMuRE9XTkxPQURfUERGO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYmFzZVVybH0ke2VuZHBvaW50fT9zdGF0ZV9jZW50ZXJfaWQ9JHtzdGF0ZV9jZW50ZXJfaWR9JmRlcGFydG1lbnRfaWQ9JHtkZXBhcnRtZW50X2lkfSZsYW5ndWFnZT0ke2xhbmd1YWdlfWA7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgfSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuXG4gICAgICBjb25zdCBjb250ZW50RGlzcG9zaXRpb24gPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcbiAgICAgIGNvbnNvbGUubG9nKCdjb250ZW50RGlzcG9zaXRpb24nLCByZXMuaGVhZGVycylcbiAgICAgIGxldCBmaWxlbmFtZSA9IGBDQlBfUmVwb3J0XyR7c3RhdGVfY2VudGVyX2lkfV8ke2RlcGFydG1lbnRfaWR9LnBkZmA7XG5cbiAgICAgIGlmIChjb250ZW50RGlzcG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjb250ZW50RGlzcG9zaXRpb24ubWF0Y2goL2ZpbGVuYW1lPVwiPyhbXlwiXSspXCI/Lyk7XG4gICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xuICAgICAgICAgIGZpbGVuYW1lID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIGEgYmxvYiBVUkwgYW5kIGRvd25sb2FkXG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlcy5ib2R5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KTtcbiAgICAgIGNvbnN0IGRvd25sb2FkVXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBhLmhyZWYgPSBkb3dubG9hZFVybDtcbiAgICAgIGEuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgIGEuY2xpY2soKTtcblxuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChkb3dubG9hZFVybCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDZW50ZXJCYXNlZERlcGFydG1lbnQoc3RhdGVfY2VudGVyX2lkKSB7XG4gICAgLy8gbGV0IHJlcUJvZHkgPSB7IFwicmVxdWVzdFwiOiB7IFwiZmlsdGVyc1wiOiB7IFwic3RhdHVzXCI6IDEsIFwibWluaXN0cnlPclN0YXRlVHlwZVwiOiBcIm1pbmlzdHJ5XCIsIFwibWluaXN0cnlPclN0YXRlSWRcIjogc3RhdGVfY2VudGVyX2lkfSwgXCJzb3J0X2J5XCI6IHsgXCJjcmVhdGVkRGF0ZVwiOiBcImRlc2NcIiB9LCBcImxpbWl0XCI6IDk5OTksIFwib2Zmc2V0XCI6IDAsIFwiZmllbGRzXCI6IFtcImlkZW50aWZpZXJcIiwgXCJvcmdOYW1lXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJwYXJlbnRPcmdOYW1lXCIsIFwibWluaXN0cnlPclN0YXRlSWRcIiwgXCJtaW5pc3RyeU9yU3RhdGVUeXBlXCIsIFwibWluaXN0cnlPclN0YXRlTmFtZVwiLCBcInNiT3JnU3ViVHlwZVwiXSB9IH1cbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5DRU5URVJfQkFTRURfTUlOSVNUUll9LyR7c3RhdGVfY2VudGVyX2lkfT9saW1pdD05OTk5Jm9mZnNldD0wJnN1Yl9vcmdfdHlwZT1taW5pc3RyeWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuXG4gIGRvd25sb2FkUGRmRm9yQ291cnNlUmVjb21tZW5kYXRpb24oc3RhdGVfY2VudGVyX2lkKSB7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9DT1VSU0VfUkVDT01NRU5EQVRJT059P3JvbGVfbWFwcGluZ19pZD0ke3N0YXRlX2NlbnRlcl9pZH1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgIH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgICAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LWRpc3Bvc2l0aW9uJyk7XG4gICAgICBsZXQgZmlsZW5hbWUgPSBgQ09VUlNFX1JFQ09NTUVOREFUSU9OX1JlcG9ydF8ke3N0YXRlX2NlbnRlcl9pZH0ucGRmYDtcblxuICAgICAgaWYgKGNvbnRlbnREaXNwb3NpdGlvbikge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbnRlbnREaXNwb3NpdGlvbi5tYXRjaCgvZmlsZW5hbWU9XCI/KFteXCJdKylcIj8vKTtcbiAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XG4gICAgICAgICAgZmlsZW5hbWUgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgYSBibG9iIFVSTCBhbmQgZG93bmxvYWRcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcmVzLmJvZHldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xuICAgICAgY29uc3QgZG93bmxvYWRVcmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGEuaHJlZiA9IGRvd25sb2FkVXJsO1xuICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgYS5jbGljaygpO1xuXG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGRvd25sb2FkVXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwbG9hZERvY3VtZW50KHJlcUJvZHksIGZpbGU/OiBGaWxlKSB7XG4gICAgY29uc3Qgc3RvcmFnZURhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luRGF0YScpKVxuICAgIC8vICBjb25zb2xlLmxvZygnc3RvcmFnZURhdGEtLScsIHN0b3JhZ2VEYXRhKVxuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtzdG9yYWdlRGF0YT8uYWNjZXNzX3Rva2VufWBcbiAgICB9KTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG5cbiAgICAvLyBBZGQgcmVxdWlyZWQgZmllbGRzXG4gICAgLy8gaWYgKHJlcUJvZHkuc3RhdGVfY2VudGVyX2lkKSB7XG4gICAgLy8gICBmb3JtRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9pZCcsIHJlcUJvZHkuc3RhdGVfY2VudGVyX2lkKTtcbiAgICAvLyB9XG5cbiAgICAvLyBpZiAocmVxQm9keS5kZXBhcnRtZW50X2lkKSB7XG4gICAgLy8gICBmb3JtRGF0YS5hcHBlbmQoJ2RlcGFydG1lbnRfaWQnLCByZXFCb2R5LmRlcGFydG1lbnRfaWQpO1xuICAgIC8vIH1cblxuXG5cbiAgICAvLyBpZihyZXFCb2R5LmRvY3VtZW50TmFtZSkge1xuICAgIC8vICAgZm9ybURhdGEuYXBwZW5kKCdkb2N1bWVudF9uYW1lJywgcmVxQm9keS5kb2N1bWVudE5hbWUpO1xuICAgIC8vIH1cbiAgICAvLyBBZGQgZmlsZSBpZiBwcm92aWRlZFxuICAgIC8vIGlmIChmaWxlKSB7XG4gICAgLy8gICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcbiAgICAvLyB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuVVBMT0FEX0RPQ1VNRU5UfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRVcGxvYWRlZERvY3VtZW50cyhyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVycztcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHJlcUJvZHkpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldChrZXksIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HRVRfRE9DVU1FTlRTfWAsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBwYXJhbXNcbiAgICB9KS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUZpbGUoZmlsZUlkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREVMRVRFX0ZJTEV9LyR7ZmlsZUlkfWAsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICB0cmlnZ2VyRmlsZVN1bW1hcnkoZmlsZUlkKSB7XG4gICAgY29uc3Qgc3RvcmFnZURhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luRGF0YScpKVxuICAgIC8vIGNvbnNvbGUubG9nKCdzdG9yYWdlRGF0YS0tJywgc3RvcmFnZURhdGEpXG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3N0b3JhZ2VEYXRhPy5hY2Nlc3NfdG9rZW59YFxuICAgIH0pO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ERUxFVEVfRklMRX0vJHtmaWxlSWR9L3N1bW1hcnlgLCB7fSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGRvd25sb2FkRmlsZShmaWxlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QmxvYj4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnM7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ET1dOTE9BRF9GSUxFfS8ke2ZpbGVJZH0vZG93bmxvYWRgLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZVN1bW1hcnkoZmlsZUlkKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuREVMRVRFX1NVTU1BUll9LyR7ZmlsZUlkfS9zdW1tYXJ5YCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGRlbGV0ZVJlY29tbWVuZGVkQ291cnNlKHJvbGVNYXBwaW5nSWQ6IHN0cmluZywgY291cnNlSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVycztcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oXG4gICAgICBgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5ERUxFVEVfQ09VUlNFX1JFQ09NTUVOREFUSU9OfS8ke3JvbGVNYXBwaW5nSWR9L2NvdXJzZS8ke2NvdXJzZUlkZW50aWZpZXJ9YCxcbiAgICAgIHsgaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuXG4gIGdldENicFBsYW5zV2l0aFNlbGVjdGVkQ291cnNlcygpOiBhbnlbXSB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5jYnBQbGFuRmluYWxPYmo7XG5cbiAgICByZXR1cm4gc291cmNlPy5yb2xlX21hcHBpbmdfZ2VuZXJhdGlvblxuICAgICAgPy5mbGF0TWFwKChyb2xlOiBhbnkpID0+IHJvbGUuY2JwX3BsYW5zIHx8IFtdKVxuICAgICAgPy5maWx0ZXIoXG4gICAgICAgIChwbGFuOiBhbnkpID0+XG4gICAgICAgICAgQXJyYXkuaXNBcnJheShwbGFuLnNlbGVjdGVkX2NvdXJzZXMpICYmXG4gICAgICAgICAgcGxhbi5zZWxlY3RlZF9jb3Vyc2VzLmxlbmd0aCA+IDBcbiAgICAgICkgfHwgW107XG4gIH1cblxuICBnZXRBZGRpdGlvbmFsUGFyYW1ldGVyZm9yU3VnZ2VzdGVkQ291cnNlcyhpZGVudGlmaWVycykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICBsZXQgcmVxQm9keSA9IHtcbiAgICAgIFwicmVxdWVzdFwiOiB7XG4gICAgICAgIFwiZmlsdGVyc1wiOiB7XG4gICAgICAgICAgXCJpZGVudGlmaWVyXCI6IGlkZW50aWZpZXJzLFxuXG5cbiAgICAgICAgICBcInN0YXR1c1wiOiBbXG4gICAgICAgICAgICBcIkxpdmVcIlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWVsZHNcIjogW1xuICAgICAgICAgIFwibmFtZVwiLFxuICAgICAgICAgIFwibGFuZ3VhZ2VcIixcbiAgICAgICAgICBcImlkZW50aWZpZXJcIixcbiAgICAgICAgICBcImF2Z1JhdGluZ1wiXG4gICAgICAgIF0sXG4gICAgICAgIFwibGltaXRcIjogMTAwMCxcbiAgICAgICAgXCJvZmZzZXRcIjogMCxcbiAgICAgICAgXCJzb3J0X2J5XCI6IHt9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNVR0dFU1RFRF9DT1VSU0VfTElTVH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgdXBkYXRlRGVzaWduYXRpb25IaWVyYXJjaHkocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlVQREFURV9ERVNJR05BVElPTl9ISUVSQVJDSFl9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIHNlYXJjaFB1YmxpY0Rlc2lnbmF0aW9uKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuU0VBUkNIX1BVQkxJQ19ERVNJR05BVElPTn1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgZ2V0RGFzaGJvYXJkQWRtaW4ocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5EQVNIQk9BUkRfQURNSU59YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldERhc2hib2FyZEdhcEFuYWx5c2lzQWRtaW4ocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5HQVBfQU5BTFlTSVNfQURNSU59YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldERhc2hib2FyZFB1YmxpYyhyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLkRBU0hCT0FSRF9QVUJMSUN9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gIGdldERhc2hib2FyZEdhcEFuYWx5c2lzUHVibGljKHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0FQX0FOQUxZU0lTX1BVQkxJQ31gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgIGdldE1hdGNoZWRSb2xlTWFwcGluZyhyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLk1BVENIRURfUk9MRV9NQVBQSU5HfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICBnZXRBcHByb3ZhbFJlcXVlc3RzKHJlcUJvZHkpIHtcbiAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuR0VUX0FQUFJPVkFMX1JFUVVFU1RTfWAsICB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgc2F2ZUFwcHJvdmFsUmVxdWVzdChyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNBVkVfQVBQUk9WQUxfUkVRVUVTVH1gLCByZXFCb2R5LCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgIHNlYXJjaFB1YmxpY21kbyhyZXFCb2R5KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlNFQVJDSF9QVUJMSUNfTURPfWAsIHJlcUJvZHksIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSkpXG4gIH1cblxuICB2aWV3QXBwcm92YWxSZXF1ZXN0cyhyZXF1ZXN0X2lkKSB7XG4gICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYmFzZVVybH0ke0FQSV9FTkRfUE9JTlRTLlZJRVdfQVBQUk9WQUxfUkVRVUVTVH0vJHtyZXF1ZXN0X2lkfWAsICB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH0pKVxuICB9XG5cbiAgcmV2b2tlQXBwcm92YWxSZXF1ZXN0KHJlcUJvZHkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfSR7QVBJX0VORF9QT0lOVFMuUkVWT0tFX0FQUFJPVkFMX1JFUVVFU1R9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG4gICBzYXZlRGVzaWduYXRpb25BcHByb3ZhbFJlcXVlc3QocmVxQm9keSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmJhc2VVcmx9JHtBUElfRU5EX1BPSU5UUy5TQVZFX0RFU0lHTkFUSU9OX0FQUFJPVkFMX1JFUVVFU1R9YCwgcmVxQm9keSwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KSlcbiAgfVxuXG59XG5cbiJdfQ==