@sunbird-cb/cbp-ai 0.1.82 → 0.1.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/add-designation/add-designation.component.mjs +10 -3
- package/esm2022/lib/components/approval-requests/approval-requests.component.mjs +3 -2
- package/esm2022/lib/components/designation-approval-request-form/designation-approval-request-form.component.mjs +3 -3
- package/esm2022/lib/components/edit-cbp-plan/edit-cbp-plan.component.mjs +86 -48
- package/esm2022/lib/components/publish-request-form/publish-approve-request-form.component.mjs +23 -5
- package/esm2022/lib/components/review-request/review-request.component.mjs +5 -3
- package/esm2022/lib/components/role-mapping-list/role-mapping-list.component.mjs +2 -1
- package/esm2022/lib/components/suggest-more-courses/suggest-more-courses.component.mjs +2 -2
- package/esm2022/lib/components/view-course-recommendation/view-course-recommendation.component.mjs +3 -2
- package/fesm2022/sunbird-cb-cbp-ai.mjs +129 -61
- package/fesm2022/sunbird-cb-cbp-ai.mjs.map +1 -1
- package/lib/components/add-designation/add-designation.component.d.ts.map +1 -1
- package/lib/components/approval-requests/approval-requests.component.d.ts.map +1 -1
- package/lib/components/edit-cbp-plan/edit-cbp-plan.component.d.ts +1 -0
- package/lib/components/edit-cbp-plan/edit-cbp-plan.component.d.ts.map +1 -1
- package/lib/components/publish-request-form/publish-approve-request-form.component.d.ts +4 -2
- package/lib/components/publish-request-form/publish-approve-request-form.component.d.ts.map +1 -1
- package/lib/components/review-request/review-request.component.d.ts +1 -1
- package/lib/components/review-request/review-request.component.d.ts.map +1 -1
- package/lib/components/role-mapping-list/role-mapping-list.component.d.ts.map +1 -1
- package/lib/components/view-course-recommendation/view-course-recommendation.component.d.ts +1 -0
- package/lib/components/view-course-recommendation/view-course-recommendation.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/sunbird-cb-cbp-ai-0.1.84.tgz +0 -0
- package/sunbird-cb-cbp-ai-0.1.82.tgz +0 -0
package/esm2022/lib/components/view-course-recommendation/view-course-recommendation.component.mjs
CHANGED
|
@@ -36,6 +36,7 @@ export class ViewCourseRecommendationComponent {
|
|
|
36
36
|
ngOnInit() {
|
|
37
37
|
this.loading = true;
|
|
38
38
|
console.log('this.data--', this.data);
|
|
39
|
+
this.requestId = this.data.requestId;
|
|
39
40
|
this.cbpPlanData = this.sharedService.cbpPlanFinalObj;
|
|
40
41
|
if (this.data?.cbp_plan_data && this.data.cbp_plan_data.length) {
|
|
41
42
|
this.reviewRequestPlanData = this.data?.cbp_plan_data[0];
|
|
@@ -402,7 +403,7 @@ export class ViewCourseRecommendationComponent {
|
|
|
402
403
|
return;
|
|
403
404
|
}
|
|
404
405
|
this.loading = true;
|
|
405
|
-
let requestId = this.
|
|
406
|
+
let requestId = this.requestId;
|
|
406
407
|
this.sharedService
|
|
407
408
|
.deleteRecommendedCourse(roleMappingId, courseIdentifier, requestId)
|
|
408
409
|
.subscribe({
|
|
@@ -547,4 +548,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
547
548
|
type: ViewChild,
|
|
548
549
|
args: ['pdfContent', { static: false }]
|
|
549
550
|
}] } });
|
|
550
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvdmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24vdmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvdmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24vdmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBMkIsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQXFCLFNBQVMsRUFBYyxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BHLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDRFQUE0RSxDQUFDO0FBQ25JLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ25HLE9BQU8sUUFBUSxNQUFNLGFBQWEsQ0FBQztBQUNuQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUduSCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7Ozs7Ozs7OztBQU9yRyxNQUFNLE9BQU8saUNBQWlDO0lBTzVDLFlBQW1CLFNBQTBELEVBQzNDLElBQVMsRUFBUyxhQUE0QixFQUFVLE1BQWlCLEVBQVUsUUFBcUIsRUFDakksS0FBcUIsRUFBVSxHQUFzQjtRQUYzQyxjQUFTLEdBQVQsU0FBUyxDQUFpRDtRQUMzQyxTQUFJLEdBQUosSUFBSSxDQUFLO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFB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QixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUNoRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtZQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO1NBQ3pCO0lBQ1QsQ0FBQzsrR0F4bUJVLGlDQUFpQyw4Q0FRbEMsZUFBZTttR0FSZCxpQ0FBaUMsZ0xDakI5QywyK2dCQXVTTTs7NEZEdFJPLGlDQUFpQztrQkFMN0MsU0FBUzsrQkFDRSxnQ0FBZ0M7OzBCQVl2QyxNQUFNOzJCQUFDLGVBQWU7dUxBUG1CLFVBQVU7c0JBQXJELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUFycmF5LCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IEdlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi9nZW5lcmF0ZS1jb3Vyc2UtcmVjb21tZW5kYXRpb24vZ2VuZXJhdGUtY291cnNlLXJlY29tbWVuZGF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZGRQZXJzb25hbGlzYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi9hZGQtcGVyc29uYWxpc2F0aW9uL2FkZC1wZXJzb25hbGlzYXRpb24uY29tcG9uZW50JztcbmltcG9ydCBodG1sMnBkZiBmcm9tICdodG1sMnBkZi5qcyc7XG5pbXBvcnQgeyBEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vZGVsZXRlLXJvbGUtbWFwcGluZy1wb3B1cC9kZWxldGUtcm9sZS1tYXBwaW5nLXBvcHVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3VnZ2VzdE1vcmVDb3Vyc2VzQ29tcG9uZW50IH0gZnJvbSAnLi4vc3VnZ2VzdC1tb3JlLWNvdXJzZXMvc3VnZ2VzdC1tb3JlLWNvdXJzZXMuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXZpZXctY291cnNlLXJlY29tbWVuZGF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXctY291cnNlLXJlY29tbWVuZGF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBWaWV3Q291cnNlUmVjb21tZW5kYXRpb25Db21wb25lbnQge1xuICBAVmlld0NoaWxkKCdwZGZDb250ZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBkZkNvbnRlbnQhOiBFbGVtZW50UmVmO1xuICBwbGFuRGF0YTogYW55XG4gIGxvYWRpbmcgPSBmYWxzZVxuICByZWNvbW1lbmRlZF9jb3Vyc2VfaWQgPSAnJ1xuICBjYnBQbGFuRGF0YTogYW55XG4gIHN1Z2dlc3RlZENvdXJzZXM6IGFueSA9IFtdXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxWaWV3Q291cnNlUmVjb21tZW5kYXRpb25Db21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LCBwdWJsaWMgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSwgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHVibGljIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5wbGFuRGF0YSA9IGRhdGFcbiAgfVxuICBzZWFyY2hUZXh0ID0gJydcbiAgZmlsdGVyZENvdXJzZXM6IGFueVxuICBzZWxlY3RGaWx0ZXJDb3Vyc2VzOiBhbnkgPSBbXVxuICBjb21wZXRlbmNpZXNDb3VudCA9IHsgdG90YWw6IDAsIHB1YmxpY19jb3Vyc2VzOiAwLCBpZ290OiAwIH1cbiAgZXhwYW5kZWRDb21wZXRlbmNpZXM6IGFueSA9IHt9OyAvLyBUcmFjayBleHBhbmRlZCBzdGF0ZSBmb3IgZWFjaCBjb3Vyc2UgYW5kIGNvbXBldGVuY3kgdHlwZVxuICBpc1BERkRvd25sb2FkID0gZmFsc2VcbiAgcG9ydGFsRGF0YTogYW55XG4gIGFjdGl2ZVJvd0VsZW1lbnQ6IGFueVxuICByZXF1ZXN0RGF0YTogYW55XG4gIHJldmlld1JlcXVlc3RQbGFuRGF0YTogYW55XG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICBjb25zb2xlLmxvZygndGhpcy5kYXRhLS0nLCB0aGlzLmRhdGEpXG4gICAgdGhpcy5jYnBQbGFuRGF0YSA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpcbiAgICBpZiAodGhpcy5kYXRhPy5jYnBfcGxhbl9kYXRhICYmIHRoaXMuZGF0YS5jYnBfcGxhbl9kYXRhLmxlbmd0aCkge1xuICAgICAgdGhpcy5yZXZpZXdSZXF1ZXN0UGxhbkRhdGEgPSB0aGlzLmRhdGE/LmNicF9wbGFuX2RhdGFbMF1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnY2JwUGxhbkRhdGEtLScsIHRoaXMuY2JwUGxhbkRhdGEpXG5cblxuXG4gICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJlY29tbWVuZGVkQ291cnNlKHRoaXMucGxhbkRhdGEuaWQpLnN1YnNjcmliZSgocmVzKT0+e1xuICAgIC8vICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAvLyAgIGNvbnNvbGUubG9nKCdyZXMnLCByZXMpXG4gICAgLy8gICB0aGlzLnJlY29tbWVuZGVkX2NvdXJzZV9pZCA9IHJlcy5pZFxuICAgIC8vICAgbGV0IGFsbENvdXJzZXMgPSBbXVxuICAgIC8vICAgaWYocmVzICYmIHJlcy5maWx0ZXJlZF9jb3Vyc2VzICYmIHJlcy5maWx0ZXJlZF9jb3Vyc2VzLmxlbmd0aCkge1xuICAgIC8vICAgICByZXMuZmlsdGVyZWRfY291cnNlcy5mb3JFYWNoKChpdGVtKT0+e1xuICAgIC8vICAgICAgIGlmKGl0ZW0/LnJlbGV2YW5jeSA+IDg1KSB7XG4gICAgLy8gICAgICAgICBhbGxDb3Vyc2VzLnB1c2goaXRlbSlcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICAgIH0pXG4gICAgLy8gICB9XG4gICAgLy8gICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gYWxsQ291cnNlc1xuICAgIC8vICAgY29uc29sZS5sb2coJ3RoaXMuZmlsdGVyZENvdXJzZXMnLCB0aGlzLmZpbHRlcmRDb3Vyc2VzKVxuICAgIC8vICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKClcbiAgICAvLyAgIHRoaXMuZ2V0VXNlckNvdXJzZSgpXG4gICAgLy8gfSlcblxuICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3JlcXVlc3RfaWQnKTtcbiAgICAgIGxldCByZXM6IGFueVxuICAgICAgaWYgKHRoaXMucGxhbkRhdGE/LmNicF9wbGFuX2RhdGEgJiYgdGhpcy5wbGFuRGF0YT8uY2JwX3BsYW5fZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgcmVzID0gdGhpcy5wbGFuRGF0YT8uY2JwX3BsYW5fZGF0YVswXVxuICAgICAgICB0aGlzLnJlY29tbWVuZGVkX2NvdXJzZV9pZCA9IHJlcy5pZFxuICAgICAgICBsZXQgYWxsQ291cnNlcyA9IFtdXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLnNlbGVjdGVkX2NvdXJzZXMgJiYgcmVzLnNlbGVjdGVkX2NvdXJzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzLnNlbGVjdGVkX2NvdXJzZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgLy8gaWYoaXRlbT8ucmVsZXZhbmN5ID49IDg1KSB7XG4gICAgICAgICAgICBhbGxDb3Vyc2VzLnB1c2goaXRlbSlcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSBhbGxDb3Vyc2VzXG4gICAgICAgIGxldCBpZGVudGlmaWVyc0FyciA9IFtdXG4gICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmZpbHRlcmRDb3Vyc2VzJywgdGhpcy5maWx0ZXJkQ291cnNlcylcbiAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZGVudGlmaWVyc0Fyci5wdXNoKGl0ZW0/LmlkZW50aWZpZXIpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZVxuICAgICAgICAgIC5nZXRBZGRpdGlvbmFsUGFyYW1ldGVyZm9yU3VnZ2VzdGVkQ291cnNlcyhpZGVudGlmaWVyc0FycilcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuXG4gICAgICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8uY29udGVudD8ubGVuZ3RoKSB7XG5cbiAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZENvdXJzZXMgPSB0aGlzLmZpbHRlcmRDb3Vyc2VzLm1hcChjb3Vyc2UgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IHJlc3BvbnNlLnJlc3VsdC5jb250ZW50LmZpbmQoXG4gICAgICAgICAgICAgICAgICBpdGVtID0+IGl0ZW0uaWRlbnRpZmllciA9PT0gY291cnNlLmlkZW50aWZpZXJcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY291cnNlLFxuICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZTogbWF0Y2hlZC5sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICAgICAgYXZnUmF0aW5nOiBtYXRjaGVkLmF2Z1JhdGluZyxcbiAgICAgICAgICAgICAgICAgICAgY291cnNlOiBtYXRjaGVkLm5hbWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY291cnNlXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IHVwZGF0ZWRDb3Vyc2VzXG5cbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKClcblxuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5maWx0ZXJkQ291cnNlcyBmcm9tIG1kbycsIHRoaXMuZmlsdGVyZENvdXJzZXMpXG4gICAgICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuXG5cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGlkID0gdGhpcy5wbGFuRGF0YS5zb3VyY2Vfcm9sZV9tYXBwaW5nX2lkID8gdGhpcy5wbGFuRGF0YS5zb3VyY2Vfcm9sZV9tYXBwaW5nX2lkIDogdGhpcy5wbGFuRGF0YS5pZFxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFVzZXJSZWNvbW1lbmRhdGlvbkNvdXJzZShpZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgY29uc29sZS5sb2coJ3JlcycsIHJlcylcbiAgICAgICAgICB0aGlzLnJlY29tbWVuZGVkX2NvdXJzZV9pZCA9IHJlcy5pZFxuICAgICAgICAgIGxldCBhbGxDb3Vyc2VzID0gW11cbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5zZWxlY3RlZF9jb3Vyc2VzICYmIHJlcy5zZWxlY3RlZF9jb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzLnNlbGVjdGVkX2NvdXJzZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAvLyBpZihpdGVtPy5yZWxldmFuY3kgPj0gODUpIHtcbiAgICAgICAgICAgICAgYWxsQ291cnNlcy5wdXNoKGl0ZW0pXG4gICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSBhbGxDb3Vyc2VzXG4gICAgICAgICAgbGV0IGlkZW50aWZpZXJzQXJyID0gW11cbiAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5maWx0ZXJkQ291cnNlcycsIHRoaXMuZmlsdGVyZENvdXJzZXMpXG4gICAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlkZW50aWZpZXJzQXJyLnB1c2goaXRlbT8uaWRlbnRpZmllcilcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRBZGRpdGlvbmFsUGFyYW1ldGVyZm9yU3VnZ2VzdGVkQ291cnNlcyhpZGVudGlmaWVyc0Fycikuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdCAmJiByZXNwb25zZS5yZXN1bHQuY29udGVudCAmJiByZXNwb25zZS5yZXN1bHQuY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZS5yZXN1bHQuY29udGVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5maWx0ZXJkQ291cnNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyZENvdXJzZXNbal1bJ2lkZW50aWZpZXInXSA9PT0gcmVzcG9uc2UucmVzdWx0LmNvbnRlbnRbaV1bJ2lkZW50aWZpZXInXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzW2pdWydsYW5ndWFnZSddID0gcmVzcG9uc2UucmVzdWx0LmNvbnRlbnRbaV1bJ2xhbmd1YWdlJ11cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlc1tqXVsnYXZnUmF0aW5nJ10gPSByZXNwb25zZS5yZXN1bHQuY29udGVudFtpXVsnYXZnUmF0aW5nJ11cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlc1tqXVsnY291cnNlJ10gPSByZXNwb25zZS5yZXN1bHQuY29udGVudFtpXVsnbmFtZSddXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpXG4gICAgICAgICAgLy8gdGhpcy5nZXRTdWdnZXN0ZWRDb3Vyc2UoKVxuICAgICAgICAgIC8vIHRoaXMuZ2V0VXNlckNvdXJzZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cblxuICB9XG5cbiAgdXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpIHtcbiAgICAvLyBjb25zdCBjb21wcyA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWU7XG4gICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudCA9IHsgdG90YWw6IDAsIHB1YmxpY19jb3Vyc2VzOiAwLCBpZ290OiAwIH07XG4gICAgdGhpcy5maWx0ZXJkQ291cnNlcy5mb3JFYWNoKGMgPT4ge1xuICAgICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudC50b3RhbCsrO1xuICAgICAgaWYgKGMuaXNfcHVibGljKSB0aGlzLmNvbXBldGVuY2llc0NvdW50LnB1YmxpY19jb3Vyc2VzKys7XG4gICAgICBpZiAoIWMuaXNfcHVibGljKSB0aGlzLmNvbXBldGVuY2llc0NvdW50Lmlnb3QrKztcbiAgICB9KTtcbiAgfVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIGlmKHRoaXMuc2hhcmVkU2VydmljZS5mcm9tTWRvUG9ydGFsKSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCdzYXZlZCcpXG4gICAgfVxuICAgIFxuICB9XG5cbiAgYWRkTW9yZUNvdXJzZXMoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICBjb25zb2xlLmxvZygnR2VuZXJhdGUgQ291cnNlIFJlY29tbWVuZGF0aW9uIGNsaWNrZWQnLCB0aGlzLnBsYW5EYXRhKTtcblxuICAgIGNvbnNvbGUubG9nKCdFZGl0IFJvbGUgTWFwcGluZyBjbGlja2VkJywgdGhpcy5wbGFuRGF0YSk7XG4gICAgLy8gTmF2aWdhdGUgb3Igb3BlbiBtb2RhbFxuICAgIGNvbnNvbGUubG9nKCdWaWV3IENCUCBQbGFuIGNsaWNrZWQnLCB0aGlzLnBsYW5EYXRhKTtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEdlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb25Db21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMTAwMHB4JyxcbiAgICAgIGRhdGE6IHRoaXMucGxhbkRhdGEsXG4gICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICBtaW5IZWlnaHQ6ICc0MDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcbiAgICAgICAgLy8gUmVmcmVzaCBkYXRhIG9yIHNob3cgYSB0b2FzdCBoZXJlXG5cblxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkUGVyc29uaWxpc2F0aW9uKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgY29uc29sZS5sb2coJ0dlbmVyYXRlIENvdXJzZSBSZWNvbW1lbmRhdGlvbiBjbGlja2VkJywgdGhpcy5wbGFuRGF0YSk7XG5cbiAgICBjb25zb2xlLmxvZygnRWRpdCBSb2xlIE1hcHBpbmcgY2xpY2tlZCcsIHRoaXMucGxhbkRhdGEpO1xuICAgIC8vIE5hdmlnYXRlIG9yIG9wZW4gbW9kYWxcbiAgICBjb25zb2xlLmxvZygnVmlldyBDQlAgUGxhbiBjbGlja2VkJywgdGhpcy5wbGFuRGF0YSk7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBZGRQZXJzb25hbGlzYXRpb25Db21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMTAwMHB4JyxcbiAgICAgIGRhdGE6IHRoaXMucGxhbkRhdGEsXG4gICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICBtaW5IZWlnaHQ6ICc0MDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcbiAgICAgICAgLy8gUmVmcmVzaCBkYXRhIG9yIHNob3cgYSB0b2FzdCBoZXJlXG5cblxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3VnZ2VzdGVkQ291cnNlKCkge1xuICAgIGxldCByb2xlX21hcHBpbmdfaWQgPSB0aGlzLnBsYW5EYXRhLmlkXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRTdWdnZXN0ZWRDb3Vyc2VzKHJvbGVfbWFwcGluZ19pZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICBjb25zb2xlLmxvZygnZ2V0U3VnZ2VzdGVkQ291cnNlcyByZXMnLCByZXMpXG5cbiAgICAgICAgLy8gU3RvcmUgc3VnZ2VzdGVkIGNvdXJzZXMgc2VwYXJhdGVseVxuICAgICAgICB0aGlzLnN1Z2dlc3RlZENvdXJzZXMgPSBbLi4ucmVzXTtcblxuICAgICAgICAvLyBBZGQgc3VnZ2VzdGVkIGNvdXJzZXMgdG8gZmlsdGVyZWQgY291cnNlc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMucHVzaChyZXNbaV0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgY29tcGV0ZW5jeSBjb3VudHMgYWZ0ZXIgYWRkaW5nIHN1Z2dlc3RlZCBjb3Vyc2VzXG4gICAgICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpXG5cbiAgICAgICAgY29uc29sZS5sb2coJ2ZpbHRlcmRDb3Vyc2VzIGFmdGVyIGFkZGluZyBzdWdnZXN0ZWQgY291cnNlczonLCB0aGlzLmZpbHRlcmRDb3Vyc2VzKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdnZXRTdWdnZXN0ZWRDb3Vyc2UgZXJyb3InLCBlcnJvcilcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1VuYXV0aG9yaXplZCBhY2Nlc3MgLSB1c2VyIHdpbGwgYmUgcmVkaXJlY3RlZCB0byBsb2dpbicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHN1Z2dlc3RlZCBjb3Vyc2VzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0VXNlckNvdXJzZSgpIHtcbiAgICBsZXQgcm9sZV9tYXBwaW5nX2lkID0gdGhpcy5wbGFuRGF0YS5pZFxuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0VXNlckNvdXJzZShyb2xlX21hcHBpbmdfaWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcblxuICAgICAgICAvLyBQcm9jZXNzIHVzZXItYWRkZWQgY291cnNlcyB0byBlbnN1cmUgcHJvcGVyIHN0cnVjdHVyZVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMucHVzaChyZXNbaV0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgY29tcGV0ZW5jeSBjb3VudHMgYWZ0ZXIgYWRkaW5nIHVzZXIgY291cnNlc1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCdmaWx0ZXJkQ291cnNlcyBhZnRlciBhZGRpbmcgdXNlciBjb3Vyc2VzOicsIHRoaXMuZmlsdGVyZENvdXJzZXMpO1xuICAgICAgICAvL3RoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnJvcilcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCBoZXJlXG4gICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgIC8vdGhpcy5nZXRcbiAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfVxuXG5cbiAgICB9KVxuICB9XG5cbiAgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKHR5cGU6IHN0cmluZywgaW5kZXgpOiBhbnlbXSB7XG4gICAgY29uc3QgY291cnNlID0gdGhpcy5maWx0ZXJkQ291cnNlc1tpbmRleF07XG4gICAgaWYgKCFjb3Vyc2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBObyBjb3Vyc2UgZm91bmQgYXQgaW5kZXggJHtpbmRleH1gKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgZGlmZmVyZW50IGNvbXBldGVuY3kgcHJvcGVydHkgbmFtZXNcbiAgICAvLyBBSSBSZWNvbW1lbmRlZCAmIFB1YmxpYyBjb3Vyc2VzIHVzZSAnY29tcGV0ZW5jaWVzJ1xuICAgIC8vIE1hbnVhbGx5IFN1Z2dlc3RlZCAtIGlHT1QgY291cnNlcyB1c2UgJ2NvbXBldGVuY2llc192NidcbiAgICAvLyBVc2VyIEFkZGVkIGNvdXJzZXMgdXNlICdjb21wZXRlbmNpZXMnXG4gICAgbGV0IGNvbXBldGVuY2llcyA9IFtdO1xuICAgIGlmIChjb3Vyc2UuY29tcGV0ZW5jaWVzICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llcykpIHtcbiAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXM7XG4gICAgICBjb25zb2xlLmxvZyhgQ291cnNlICR7aW5kZXh9ICgke2NvdXJzZS5jb3Vyc2VfdHlwZSB8fCBjb3Vyc2UubmFtZSB8fCAnVW5rbm93bid9KSB1c2luZyAnY29tcGV0ZW5jaWVzJyBwcm9wZXJ0eTpgLCBjb21wZXRlbmNpZXMpO1xuICAgIH0gZWxzZSBpZiAoY291cnNlLmNvbXBldGVuY2llc192NiAmJiBBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXNfdjYpKSB7XG4gICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2O1xuICAgICAgY29uc29sZS5sb2coYENvdXJzZSAke2luZGV4fSAoJHtjb3Vyc2UuY291cnNlX3R5cGUgfHwgY291cnNlLm5hbWUgfHwgJ1Vua25vd24nfSkgdXNpbmcgJ2NvbXBldGVuY2llc192NicgcHJvcGVydHk6YCwgY29tcGV0ZW5jaWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYENvdXJzZSAke2luZGV4fSAoJHtjb3Vyc2UuY291cnNlX3R5cGUgfHwgY291cnNlLm5hbWUgfHwgJ1Vua25vd24nfSkgaGFzIG5vIHZhbGlkIGNvbXBldGVuY2llcyBwcm9wZXJ0eTpgLCB7XG4gICAgICAgIGhhc0NvbXBldGVuY2llczogISFjb3Vyc2UuY29tcGV0ZW5jaWVzLFxuICAgICAgICBjb21wZXRlbmNpZXNUeXBlOiB0eXBlb2YgY291cnNlLmNvbXBldGVuY2llcyxcbiAgICAgICAgaGFzQ29tcGV0ZW5jaWVzVjY6ICEhY291cnNlLmNvbXBldGVuY2llc192NixcbiAgICAgICAgY29tcGV0ZW5jaWVzVjZUeXBlOiB0eXBlb2YgY291cnNlLmNvbXBldGVuY2llc192NixcbiAgICAgICAgY291cnNlS2V5czogT2JqZWN0LmtleXMoY291cnNlKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBldGVuY2llcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKGBObyBjb21wZXRlbmNpZXMgZm91bmQgZm9yIGNvdXJzZSAke2luZGV4fSBhbmQgdHlwZSAke3R5cGV9YCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIGZvciBjb21wYXJpc29uIChjYXNlLWluc2Vuc2l0aXZlICsgaGFuZGxlIHNwZWxsaW5nIHZhcmlhdGlvbnMpXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgY29uc3QgbWF0Y2hlZENvbXBldGVuY2llcyA9IGNvbXBldGVuY2llcy5maWx0ZXIoYyA9PiB7XG4gICAgICBpZiAoIWMgfHwgIWMuY29tcGV0ZW5jeUFyZWFOYW1lKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJbnZhbGlkIGNvbXBldGVuY3kgc3RydWN0dXJlIGluIGNvdXJzZSAke2luZGV4fTpgLCBjKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21wZXRlbmN5QXJlYSA9IGMuY29tcGV0ZW5jeUFyZWFOYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgICAvLyBIYW5kbGUgYm90aCBcImJlaGF2aW9yYWxcIiBhbmQgXCJiZWhhdmlvdXJhbFwiIHNwZWxsaW5nc1xuICAgICAgaWYgKG5vcm1hbGl6ZWRUeXBlID09PSAnYmVoYXZpb3VyYWwnIHx8IG5vcm1hbGl6ZWRUeXBlID09PSAnYmVoYXZpb3JhbCcpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBldGVuY3lBcmVhID09PSAnYmVoYXZpb3JhbCcgfHwgY29tcGV0ZW5jeUFyZWEgPT09ICdiZWhhdmlvdXJhbCc7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBvdGhlciB0eXBlcywgZG8gY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uXG4gICAgICByZXR1cm4gY29tcGV0ZW5jeUFyZWEgPT09IG5vcm1hbGl6ZWRUeXBlO1xuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coYEZvdW5kICR7bWF0Y2hlZENvbXBldGVuY2llcy5sZW5ndGh9IGNvbXBldGVuY2llcyBvZiB0eXBlICR7dHlwZX0gZm9yIGNvdXJzZSAke2luZGV4fTpgLCBtYXRjaGVkQ29tcGV0ZW5jaWVzKTtcbiAgICByZXR1cm4gbWF0Y2hlZENvbXBldGVuY2llcztcbiAgfVxuXG4gIGdldERpc3BsYXllZENvbXBldGVuY2llcyh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBhbnlbXSB7XG4gICAgY29uc3QgY29tcGV0ZW5jaWVzID0gdGhpcy5nZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZSwgaW5kZXgpO1xuICAgIGNvbnN0IGtleSA9IGAke2luZGV4fS0ke3R5cGV9YDtcblxuICAgIGlmICh0aGlzLmV4cGFuZGVkQ29tcGV0ZW5jaWVzW2tleV0pIHtcbiAgICAgIHJldHVybiBjb21wZXRlbmNpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBldGVuY2llcy5zbGljZSgwLCAyKTtcbiAgfVxuXG4gIHRvZ2dsZUNvbXBldGVuY2llcyh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBgJHtpbmRleH0tJHt0eXBlfWA7XG4gICAgdGhpcy5leHBhbmRlZENvbXBldGVuY2llc1trZXldID0gIXRoaXMuZXhwYW5kZWRDb21wZXRlbmNpZXNba2V5XTtcbiAgfVxuXG4gIGlzRXhwYW5kZWQodHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gYCR7aW5kZXh9LSR7dHlwZX1gO1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQ29tcGV0ZW5jaWVzW2tleV0gfHwgZmFsc2U7XG4gIH1cblxuICBoYXNNb3JlVGhhblR3byh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZSwgaW5kZXgpLmxlbmd0aCA+IDI7XG4gIH1cblxuICBnZXRSZW1haW5pbmdDb3VudCh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsQ291bnQgPSB0aGlzLmdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlLCBpbmRleCkubGVuZ3RoO1xuICAgIHJldHVybiB0b3RhbENvdW50IC0gMjtcbiAgfVxuXG4gIGRvd25sb2FkUERGKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICB0aGlzLmlzUERGRG93bmxvYWQgPSB0cnVlXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGRmQ29udGVudC5uYXRpdmVFbGVtZW50O1xuXG4gICAgLy8gV2FpdCBmb3IgaW1hZ2VzIHRvIGxvYWRcbiAgICBjb25zdCBpbWFnZXMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpO1xuICAgIGNvbnN0IHByb21pc2VzID0gQXJyYXkuZnJvbShpbWFnZXMpLm1hcCgoaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoaW1nLmNvbXBsZXRlKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBpbWcub25sb2FkID0gcmVzb2x2ZSk7XG4gICAgfSk7XG5cbiAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBtYXJnaW46IDAuNSxcbiAgICAgICAgZmlsZW5hbWU6ICdSZWNvbW1lbmRlZCBDb3VyZXNlcy5wZGYnLFxuICAgICAgICBpbWFnZTogeyB0eXBlOiAnanBlZycsIHF1YWxpdHk6IDAuOTggfSxcbiAgICAgICAgaHRtbDJjYW52YXM6IHtcbiAgICAgICAgICBzY2FsZTogMixcbiAgICAgICAgICB1c2VDT1JTOiB0cnVlLFxuICAgICAgICAgIHNjcm9sbFk6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIGpzUERGOiB7XG4gICAgICAgICAgdW5pdDogJ2luJyxcbiAgICAgICAgICBmb3JtYXQ6ICdhNCcsXG4gICAgICAgICAgb3JpZW50YXRpb246ICdwb3J0cmFpdCdcbiAgICAgICAgfSxcbiAgICAgICAgcGFnZWJyZWFrOiB7XG4gICAgICAgICAgbW9kZTogWydjc3MnLCAnbGVnYWN5JywgJ2F2b2lkLWFsbCddXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGh0bWwycGRmKCkuZnJvbShlbGVtZW50KS5zZXQob3B0aW9ucykuc2F2ZSgpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNQREZEb3dubG9hZCA9IGZhbHNlXG4gICAgICB9LCAzMDAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRvd25sb2FkUGRmRnJvbUJFKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICAvLyAgdGhpcy5zaGFyZWRTZXJ2aWNlLmRvd25sb2FkUGRmKHRoaXMuc2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5LmlkZW50aWZpZXIpXG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZG93bmxvYWRQZGZGb3JDb3Vyc2VSZWNvbW1lbmRhdGlvbih0aGlzLmRhdGE/LmlkKVxuXG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgfSwgNTAwMClcbiAgfVxuXG4gIGNvbmZpcm1EZWxldGVDb3Vyc2UoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3Qgcm9sZU1hcHBpbmdJZCA9IHRoaXMucmVjb21tZW5kZWRfY291cnNlX2lkO1xuICAgIGNvbnN0IGNvdXJzZUlkZW50aWZpZXIgPVxuICAgICAgaXRlbT8uY291cnNlX2lkZW50aWZpZXIgfHwgaXRlbT8uaWQgfHwgaXRlbT8uaWRlbnRpZmllcjtcblxuICAgIGlmICghcm9sZU1hcHBpbmdJZCB8fCAhY291cnNlSWRlbnRpZmllcikge1xuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdVbmFibGUgdG8gZGVsZXRlIGNvdXJzZScsICdYJywge1xuICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgbGV0IHJlcXVlc3RJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdyZXF1ZXN0X2lkJylcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZVxuICAgICAgLmRlbGV0ZVJlY29tbWVuZGVkQ291cnNlKHJvbGVNYXBwaW5nSWQsIGNvdXJzZUlkZW50aWZpZXIsIHJlcXVlc3RJZClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgLy8gUmVtb3ZlIGZyb20gVUlcbiAgICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgICAvLyBVcGRhdGUgY291bnRzXG4gICAgICAgICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKCk7XG5cbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ291cnNlIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5JywgJ1gnLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcbiAgICAgICAgICAgIGVycm9yPy5lcnJvcj8uZGV0YWlsIHx8ICdGYWlsZWQgdG8gZGVsZXRlIGNvdXJzZScsXG4gICAgICAgICAgICAnWCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICB9XG5cbiAgZGVsZXRlQ2FyZChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERlbGV0ZVJvbGVNYXBwaW5nUG9wdXBDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNjAwcHgnLFxuICAgICAgZGF0YToge1xuICAgICAgICBwbGFuSWQ6IHRoaXMucGxhbkRhdGE/LmlkLCAgIC8vIHJvbGUgbWFwcGluZyBpZFxuICAgICAgICBjb3Vyc2U6IGl0ZW0sICAgICAgICAgICAgICAgIC8vIGNvdXJzZSBvYmplY3RcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBmcm9tOiAndmlld0NvdXJzZScgICAgICAgICAgICAgICAgIC8vIGluZGV4IGZvciBVSSByZW1vdmFsXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLFxuICAgICAgbWluSGVpZ2h0OiAnMzAwcHgnLFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICB0aGlzLmNvbmZpcm1EZWxldGVDb3Vyc2UoaXRlbSwgaW5kZXgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVkaXJlY3RUb0NvdXJlKGl0ZW0pIHtcbiAgICBpZiAoaXRlbT8ucHVibGljX2xpbmspIHtcbiAgICAgIHdpbmRvdy5vcGVuKGl0ZW0/LnB1YmxpY19saW5rLCAnX2JsYW5rJylcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHVybCA9IGBodHRwczovL3BvcnRhbC5pZ290a2FybWF5b2dpLmdvdi5pbi9hcHAvdG9jLyR7aXRlbT8uaWRlbnRpZmllcn0vb3ZlcnZpZXc/YFxuICAgICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJylcbiAgICB9XG4gIH1cblxuICBzdWdnZXN0TW9yZUNvdXJzZXMoKSB7XG4gICAgLy8gdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICAgIGNvbnNvbGUubG9nKCdjYnBfcGxhbl9pZC0tLScsIHRoaXMuY2JwUGxhbkRhdGEpXG4gICAgY29uc3QgZGlhbG9nUmVmTmV3ID0gdGhpcy5kaWFsb2cub3BlbihTdWdnZXN0TW9yZUNvdXJzZXNDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnOTUwcHgnLFxuICAgICAgZGF0YTogeyBjYnBfcGxhbl9pZDogdGhpcy5yZXZpZXdSZXF1ZXN0UGxhbkRhdGE/LmlkLCByZWNvbW1lbmRlZF9jb3Vyc2VfaWQ6IHRoaXMucmVjb21tZW5kZWRfY291cnNlX2lkLCByb2xlX21hcHBpbmdfaWQ6IHRoaXMucGxhbkRhdGEuaWQsIGZyb21NZG9Qb3J0YWw6IHRoaXMuc2hhcmVkU2VydmljZS5mcm9tTWRvUG9ydGFsIH0sXG4gICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICBtaW5IZWlnaHQ6ICc0MDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZk5ldy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcbiAgICAgICAgLy8gUmVmcmVzaCBkYXRhIG9yIHNob3cgYSB0b2FzdCBoZXJlXG4gICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgICAgXG4gICAgICAgICAgdGhpcy5jYWxsQ291cnNlRm9yTURPKClcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZ2V0U3VnZ2VzdGVkQ291cnNlKClcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgICAgXG4gICAgICAgICAgdGhpcy5jYWxsQ291cnNlRm9yTURPKClcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZ2V0U3VnZ2VzdGVkQ291cnNlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2FsbENvdXJzZUZvck1ETygpIHtcbiAgICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3JlcXVlc3RfaWQnKTtcbiAgICAgICAgICBsZXQgcmVzOiBhbnlcbiAgICAgICAgICBpZiAodGhpcy5wbGFuRGF0YT8uY2JwX3BsYW5fZGF0YSAmJiB0aGlzLnBsYW5EYXRhPy5jYnBfcGxhbl9kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzID0gdGhpcy5wbGFuRGF0YT8uY2JwX3BsYW5fZGF0YVswXVxuICAgICAgICAgICAgdGhpcy5yZWNvbW1lbmRlZF9jb3Vyc2VfaWQgPSByZXMuaWRcbiAgICAgICAgICAgIGxldCBhbGxDb3Vyc2VzID0gW11cbiAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLnNlbGVjdGVkX2NvdXJzZXMgJiYgcmVzLnNlbGVjdGVkX2NvdXJzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlcy5zZWxlY3RlZF9jb3Vyc2VzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAvLyBpZihpdGVtPy5yZWxldmFuY3kgPj0gODUpIHtcbiAgICAgICAgICAgICAgICBhbGxDb3Vyc2VzLnB1c2goaXRlbSlcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gYWxsQ291cnNlc1xuICAgICAgICAgICAgbGV0IGlkZW50aWZpZXJzQXJyID0gW11cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmZpbHRlcmRDb3Vyc2VzJywgdGhpcy5maWx0ZXJkQ291cnNlcylcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIGlkZW50aWZpZXJzQXJyLnB1c2goaXRlbT8uaWRlbnRpZmllcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlXG4gICAgICAgICAgICAgIC5nZXRBZGRpdGlvbmFsUGFyYW1ldGVyZm9yU3VnZ2VzdGVkQ291cnNlcyhpZGVudGlmaWVyc0FycilcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcblxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8ucmVzdWx0Py5jb250ZW50Py5sZW5ndGgpIHtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZENvdXJzZXMgPSB0aGlzLmZpbHRlcmRDb3Vyc2VzLm1hcChjb3Vyc2UgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSByZXNwb25zZS5yZXN1bHQuY29udGVudC5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5pZGVudGlmaWVyID09PSBjb3Vyc2UuaWRlbnRpZmllclxuICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY291cnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IG1hdGNoZWQubGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmdSYXRpbmc6IG1hdGNoZWQuYXZnUmF0aW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlOiBtYXRjaGVkLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY291cnNlXG4gICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gdXBkYXRlZENvdXJzZXNcblxuICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKClcblxuICAgICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuZmlsdGVyZENvdXJzZXMgZnJvbSBtZG8nLCB0aGlzLmZpbHRlcmRDb3Vyc2VzKVxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKClcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICAgICAgICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInZpZXctY2JwLXBsYW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIj5WaWV3IENvdXJzZSBSZWNvbW1lbmRhdGlvbjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAtY29tcGFjdFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hhcmVkU2VydmljZS5mcm9tTWRvUG9ydGFsICYmIGRhdGE/LnJlcXVlc3RTdGF0dXM/LnRvTG93ZXJDYXNlKCkgPT0gJ3BlbmRpbmcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiQWRkIE1vcmUgQ291cnNlIEZyb20gaUdPVFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1Z2dlc3RNb3JlQ291cnNlcygpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jb250YWluZXIgbXQtMlwiICNwZGZDb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWluaXN0cnktaGVhZGluZyBtdC0yXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjYnBQbGFuRGF0YT8uZGVwYXJ0bWVudF9uYW1lXCI+e3tjYnBQbGFuRGF0YT8ubWluaXN0cnk/Lm9yZ05hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY2JwUGxhbkRhdGE/LmRlcGFydG1lbnRfbmFtZVwiPnt7Y2JwUGxhbkRhdGE/LmRlcGFydG1lbnRfbmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIShzaGFyZWRTZXJ2aWNlLmZyb21NZG9Qb3J0YWwpXCI+IC8gPC9zcGFuPlxuICAgICAgICAgICAgICAgIHt7cGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWNvbnRhaW5lciBtdC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0c2lkZS1sYXllci10b3RhbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgVG90YWwgQ291cnNlc1xuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICB7e2NvbXBldGVuY2llc0NvdW50Py50b3RhbH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLXRvdGFsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICBpR09UIFBsYXRmb3JtIENvdXJzZXNcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8uaWdvdH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLXRvdGFsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICBQdWJsaWMgQ291cnNlc1xuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICB7e2NvbXBldGVuY2llc0NvdW50Py5wdWJsaWNfY291cnNlc319XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktNFwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWxpc3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1saXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJkQ291cnNlcztsZXQgaT1pbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrZWQtY291cnNlLWNvbnRhaW5lclwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLXBpbGwtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2NvdXJzZS5zdmdcIj48L3NwYW4+Jm5ic3A7PHNwYW4+Q291cnNlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFJIFJlY29tbWVuZGVkPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0/LnJhdGlvbmFsZSAmJiAhaXRlbT8uaXNfcHVibGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1ncmVlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyZWVuLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BSSBSZWNvbW1lbmRlZCAtIGlHT1QgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/LnBsYXRmb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4+UGxhdGZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSB7e2l0ZW0/LnBsYXRmb3JtfX08L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5vcmdhbmlzYXRpb24/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlByb3ZpZGVyIC0ge3tpdGVtPy5vcmdhbmlzYXRpb25bMF19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5yYXRpb25hbGUgJiYgaXRlbT8uaXNfcHVibGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1wdWJsaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1wdWJsaWMtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFJIFJlY29tbWVuZGVkIC0gUHVibGljIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5wbGF0Zm9ybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbaHJlZl09XCJpdGVtPy5wdWJsaWNfbGlua1wiIHRhcmdldD1cIl9ibGFua1wiPjxzcGFuPlBsYXRmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0ge3tpdGVtPy5wbGF0Zm9ybX19PC9zcGFuPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UgbXQtMlwiICpuZ0lmPVwiaXRlbT8ub3JnYW5pc2F0aW9uPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Qcm92aWRlciAtIHt7aXRlbT8ub3JnYW5pc2F0aW9uWzBdfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWl0ZW0/LnJhdGlvbmFsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtZ3JheVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyYXktdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPk1hbnVhbGx5IFN1Z2dlc3RlZCAtIGlHT1QgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/LnBsYXRmb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4+UGxhdGZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSB7e2l0ZW0/LnBsYXRmb3JtfX08L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5vcmdhbmlzYXRpb24/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlByb3ZpZGVyIC0ge3tpdGVtPy5vcmdhbmlzYXRpb25bMF19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtdGl0bGUgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0/LmNvdXJzZSAmJiAoIXNoYXJlZFNlcnZpY2U/LmZyb21NZG9Qb3J0YWwpXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9Db3VyZShpdGVtKVwiPnt7aXRlbT8uY291cnNlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbT8ubmFtZSAmJiAoc2hhcmVkU2VydmljZT8uZnJvbU1kb1BvcnRhbClcIiAoY2xpY2spPVwicmVkaXJlY3RUb0NvdXJlKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbT8ubmFtZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtZGVzYyBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNQREZEb3dubG9hZCB8fCBzaGFyZWRTZXJ2aWNlPy5mcm9tTWRvUG9ydGFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e2l0ZW0/LnJhdGlvbmFsZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0JlaGF2aW91cmFsJyxpKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZ1wiPkJlaGF2aW9yYWwgQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjb21wZXRlbmN5LWxpc3QgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImJlaGF2aW91cmFsLXBpbGxcIiAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXREaXNwbGF5ZWRDb21wZXRlbmNpZXMoJ0JlaGF2aW91cmFsJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dFwiPiB7eyBjb21wLmNvbXBldGVuY3lUaGVtZU5hbWUgfX0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXAuY29tcGV0ZW5jeVN1YlRoZW1lTmFtZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJoYXNNb3JlVGhhblR3bygnQmVoYXZpb3VyYWwnLGkpXCIgY2xhc3M9XCJzaG93LW1vcmUtY29tcGV0ZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3ctbW9yZS1saW5rIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb21wZXRlbmNpZXMoJ0JlaGF2aW91cmFsJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNFeHBhbmRlZCgnQmVoYXZpb3VyYWwnLGkpID8gJ1Nob3cgTGVzcycgOiAnKycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmVtYWluaW5nQ291bnQoJ0JlaGF2aW91cmFsJyxpKSArICcgTW9yZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImdldENvbXBldGVuY2llc0J5VHlwZSgnRnVuY3Rpb25hbCcsaSk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmdcIj5GdW5jdGlvbmFsIENvbXBldGVuY2llczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29tcGV0ZW5jeS1saXN0IG10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJmdW5jdGlvbmFsLXBpbGxcIiAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXREaXNwbGF5ZWRDb21wZXRlbmNpZXMoJ0Z1bmN0aW9uYWwnLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0XCI+IHt7IGNvbXAuY29tcGV0ZW5jeVRoZW1lTmFtZSB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC5jb21wZXRlbmN5U3ViVGhlbWVOYW1lIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhhc01vcmVUaGFuVHdvKCdGdW5jdGlvbmFsJyxpKVwiIGNsYXNzPVwic2hvdy1tb3JlLWNvbXBldGVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzaG93LW1vcmUtbGluayBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29tcGV0ZW5jaWVzKCdGdW5jdGlvbmFsJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNFeHBhbmRlZCgnRnVuY3Rpb25hbCcsaSkgPyAnU2hvdyBMZXNzJyA6ICcrJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZW1haW5pbmdDb3VudCgnRnVuY3Rpb25hbCcsaSkgKyAnIE1vcmUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0RvbWFpbicsaSk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmdcIj5Eb21haW4gQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjb21wZXRlbmN5LWxpc3QgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImRvbWFpbi1waWxsXCIgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0RGlzcGxheWVkQ29tcGV0ZW5jaWVzKCdEb21haW4nLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0XCI+IHt7IGNvbXAuY29tcGV0ZW5jeVRoZW1lTmFtZSB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC5jb21wZXRlbmN5U3ViVGhlbWVOYW1lIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhhc01vcmVUaGFuVHdvKCdEb21haW4nLGkpXCIgY2xhc3M9XCJzaG93LW1vcmUtY29tcGV0ZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3ctbW9yZS1saW5rIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInRvZ2dsZUNvbXBldGVuY2llcygnRG9tYWluJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNFeHBhbmRlZCgnRG9tYWluJyxpKSA/ICdTaG93IExlc3MnIDogJysnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlbWFpbmluZ0NvdW50KCdEb21haW4nLGkpICsgJyBNb3JlJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGV2YW5jeS1jb250YWluZXJcIiAqbmdJZj1cIml0ZW0/LnJlbGV2YW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmFuY3lcIj5SZWxldmFuY3k8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGFzaFwiPi08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVyY2VudGFnZVwiICpuZ0lmPVwiaXRlbT8ucmVsZXZhbmN5XCI+e3tpdGVtPy5yZWxldmFuY3l9fSU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVyY2VudGFnZVwiICpuZ0lmPVwiIWl0ZW0/LnJlbGV2YW5jeVwiPk4vQTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlLWJ1dHRvblwiICpuZ0lmPVwiIShkYXRhPy5mcm9tUmVxdWVzdFBhZ2UpIHx8IChzaGFyZWRTZXJ2aWNlPy5mcm9tTWRvUG9ydGFsICYmIGRhdGE/LnJlcXVlc3RTdGF0dXM/LnRvTG93ZXJDYXNlKCkgPT09ICdwZW5kaW5nJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0VG9vbHRpcD1cIkRlbGV0ZSBDb3Vyc2VcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYW5nZXIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZGVsZXRlQ2FyZChpdGVtLCBpKVwiPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmNpZXMtbWF0Y2hlZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jaWVzLW1hdGNoZWRcIj5Db21wZXRlbmNpZXMgTWF0Y2hlZDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXNoXCI+LTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlXCI+ODAlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvdXJzZS1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtcGlsbC10ZXh0XCI+Q291cnNlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgUmVjb21tZW5kZWQ8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5NYXRlcm5hbCwgSW5mYW50IEFuZCBZb3VuZyBDaGlsZCBOdXRyaXRpb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1kZXNjXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+VGhpcyBDb3Vyc2UgZGlyZWN0bHkgYWRkcmVzc2VzIGEgcHJpbWFyeSByZXNwb25zaWJpbGl0eSBvZiBBbmdhbndhbmRpIENhcmUgdGFrZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwcm92aWRlIGFuZCBlZHVjYXRlIG9uIG51dHJpdGlvbiBmb3IgbW90aGVyIGFuZCB5b3VuZyBjaGlsZHJlbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGV2YW5jeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5XCI+UmVsZXZhbmN5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnRhZ2VcIj45MCU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmNpZXMtbWF0Y2hlZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jaWVzLW1hdGNoZWRcIj5Db21wZXRlbmNpZXMgTWF0Y2hlZDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXNoXCI+LTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlXCI+ODAlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInBvcHVwLWZvb3RlclwiICpuZ0lmPVwiZmlsdGVyZENvdXJzZXM/Lmxlbmd0aFwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIShkYXRhPy5mcm9tUmVxdWVzdFBhZ2UpXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiRG93bmxvYWRcIiAoY2xpY2spPVwiZG93bmxvYWRQZGZGcm9tQkUoKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIDxkaXY+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiQWRkIFBlcnNvbmFsaXNhdGlvblwiIChjbGljayk9XCJhZGRQZXJzb25pbGlzYXRpb24oKVwiLz5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8IS0tIDxkaXY+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiQWRkIE1vcmUgQ291cnNlc1wiIChjbGljayk9XCJhZGRNb3JlQ291cnNlcygpXCIvPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJvdmVybGF5LWxvYWRlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbjwvZGl2PiJdfQ==
|
|
551
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvdmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24vdmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvdmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24vdmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBMkIsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQXFCLFNBQVMsRUFBYyxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BHLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDRFQUE0RSxDQUFDO0FBQ25JLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ25HLE9BQU8sUUFBUSxNQUFNLGFBQWEsQ0FBQztBQUNuQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUduSCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7Ozs7Ozs7OztBQU9yRyxNQUFNLE9BQU8saUNBQWlDO0lBTzVDLFlBQW1CLFNBQTBELEVBQzNDLElBQVMsRUFBUyxhQUE0QixFQUFVLE1BQWlCLEVBQVUsUUFBcUIsRUFDakksS0FBcUIsRUFBVSxHQUFzQjtRQUYzQyxjQUFTLEdBQVQsU0FBUyxDQUFpRDtRQUMzQyxTQUFJLEdBQUosSUFBSSxDQUFLO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFB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LENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQ2hFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO1lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7U0FDekI7SUFDVCxDQUFDOytHQTFtQlUsaUNBQWlDLDhDQVFsQyxlQUFlO21HQVJkLGlDQUFpQyxnTENqQjlDLDIrZ0JBdVNNOzs0RkR0Uk8saUNBQWlDO2tCQUw3QyxTQUFTOytCQUNFLGdDQUFnQzs7MEJBWXZDLE1BQU07MkJBQUMsZUFBZTt1TEFQbUIsVUFBVTtzQkFBckQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQXJyYXksIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgR2VuZXJhdGVDb3Vyc2VSZWNvbW1lbmRhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2dlbmVyYXRlLWNvdXJzZS1yZWNvbW1lbmRhdGlvbi9nZW5lcmF0ZS1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEFkZFBlcnNvbmFsaXNhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2FkZC1wZXJzb25hbGlzYXRpb24vYWRkLXBlcnNvbmFsaXNhdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IGh0bWwycGRmIGZyb20gJ2h0bWwycGRmLmpzJztcbmltcG9ydCB7IERlbGV0ZVJvbGVNYXBwaW5nUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9kZWxldGUtcm9sZS1tYXBwaW5nLXBvcHVwL2RlbGV0ZS1yb2xlLW1hcHBpbmctcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWdnZXN0TW9yZUNvdXJzZXNDb21wb25lbnQgfSBmcm9tICcuLi9zdWdnZXN0LW1vcmUtY291cnNlcy9zdWdnZXN0LW1vcmUtY291cnNlcy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92aWV3LWNvdXJzZS1yZWNvbW1lbmRhdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFZpZXdDb3Vyc2VSZWNvbW1lbmRhdGlvbkNvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ3BkZkNvbnRlbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgcGRmQ29udGVudCE6IEVsZW1lbnRSZWY7XG4gIHBsYW5EYXRhOiBhbnlcbiAgbG9hZGluZyA9IGZhbHNlXG4gIHJlY29tbWVuZGVkX2NvdXJzZV9pZCA9ICcnXG4gIGNicFBsYW5EYXRhOiBhbnlcbiAgc3VnZ2VzdGVkQ291cnNlczogYW55ID0gW11cbiAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFZpZXdDb3Vyc2VSZWNvbW1lbmRhdGlvbkNvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksIHB1YmxpYyBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLCBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLCBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLnBsYW5EYXRhID0gZGF0YVxuICB9XG4gIHNlYXJjaFRleHQgPSAnJ1xuICBmaWx0ZXJkQ291cnNlczogYW55XG4gIHNlbGVjdEZpbHRlckNvdXJzZXM6IGFueSA9IFtdXG4gIGNvbXBldGVuY2llc0NvdW50ID0geyB0b3RhbDogMCwgcHVibGljX2NvdXJzZXM6IDAsIGlnb3Q6IDAgfVxuICBleHBhbmRlZENvbXBldGVuY2llczogYW55ID0ge307IC8vIFRyYWNrIGV4cGFuZGVkIHN0YXRlIGZvciBlYWNoIGNvdXJzZSBhbmQgY29tcGV0ZW5jeSB0eXBlXG4gIGlzUERGRG93bmxvYWQgPSBmYWxzZVxuICBwb3J0YWxEYXRhOiBhbnlcbiAgYWN0aXZlUm93RWxlbWVudDogYW55XG4gIHJlcXVlc3REYXRhOiBhbnlcbiAgcmV2aWV3UmVxdWVzdFBsYW5EYXRhOiBhbnlcbiAgcmVxdWVzdElkOmFueVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgY29uc29sZS5sb2coJ3RoaXMuZGF0YS0tJywgdGhpcy5kYXRhKVxuICAgIHRoaXMucmVxdWVzdElkID0gdGhpcy5kYXRhLnJlcXVlc3RJZFxuICAgIHRoaXMuY2JwUGxhbkRhdGEgPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqXG4gICAgaWYgKHRoaXMuZGF0YT8uY2JwX3BsYW5fZGF0YSAmJiB0aGlzLmRhdGEuY2JwX3BsYW5fZGF0YS5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmV2aWV3UmVxdWVzdFBsYW5EYXRhID0gdGhpcy5kYXRhPy5jYnBfcGxhbl9kYXRhWzBdXG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ2NicFBsYW5EYXRhLS0nLCB0aGlzLmNicFBsYW5EYXRhKVxuXG5cblxuICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5nZXRSZWNvbW1lbmRlZENvdXJzZSh0aGlzLnBsYW5EYXRhLmlkKS5zdWJzY3JpYmUoKHJlcyk9PntcbiAgICAvLyAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgLy8gICBjb25zb2xlLmxvZygncmVzJywgcmVzKVxuICAgIC8vICAgdGhpcy5yZWNvbW1lbmRlZF9jb3Vyc2VfaWQgPSByZXMuaWRcbiAgICAvLyAgIGxldCBhbGxDb3Vyc2VzID0gW11cbiAgICAvLyAgIGlmKHJlcyAmJiByZXMuZmlsdGVyZWRfY291cnNlcyAmJiByZXMuZmlsdGVyZWRfY291cnNlcy5sZW5ndGgpIHtcbiAgICAvLyAgICAgcmVzLmZpbHRlcmVkX2NvdXJzZXMuZm9yRWFjaCgoaXRlbSk9PntcbiAgICAvLyAgICAgICBpZihpdGVtPy5yZWxldmFuY3kgPiA4NSkge1xuICAgIC8vICAgICAgICAgYWxsQ291cnNlcy5wdXNoKGl0ZW0pXG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9KVxuICAgIC8vICAgfVxuICAgIC8vICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IGFsbENvdXJzZXNcbiAgICAvLyAgIGNvbnNvbGUubG9nKCd0aGlzLmZpbHRlcmRDb3Vyc2VzJywgdGhpcy5maWx0ZXJkQ291cnNlcylcbiAgICAvLyAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpXG4gICAgLy8gICB0aGlzLmdldFVzZXJDb3Vyc2UoKVxuICAgIC8vIH0pXG5cbiAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmZyb21NZG9Qb3J0YWwpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdyZXF1ZXN0X2lkJyk7XG4gICAgICBsZXQgcmVzOiBhbnlcbiAgICAgIGlmICh0aGlzLnBsYW5EYXRhPy5jYnBfcGxhbl9kYXRhICYmIHRoaXMucGxhbkRhdGE/LmNicF9wbGFuX2RhdGEubGVuZ3RoKSB7XG4gICAgICAgIHJlcyA9IHRoaXMucGxhbkRhdGE/LmNicF9wbGFuX2RhdGFbMF1cbiAgICAgICAgdGhpcy5yZWNvbW1lbmRlZF9jb3Vyc2VfaWQgPSByZXMuaWRcbiAgICAgICAgbGV0IGFsbENvdXJzZXMgPSBbXVxuICAgICAgICBpZiAocmVzICYmIHJlcy5zZWxlY3RlZF9jb3Vyc2VzICYmIHJlcy5zZWxlY3RlZF9jb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgIHJlcy5zZWxlY3RlZF9jb3Vyc2VzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIC8vIGlmKGl0ZW0/LnJlbGV2YW5jeSA+PSA4NSkge1xuICAgICAgICAgICAgYWxsQ291cnNlcy5wdXNoKGl0ZW0pXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gYWxsQ291cnNlc1xuICAgICAgICBsZXQgaWRlbnRpZmllcnNBcnIgPSBbXVxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5maWx0ZXJkQ291cnNlcycsIHRoaXMuZmlsdGVyZENvdXJzZXMpXG4gICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWRlbnRpZmllcnNBcnIucHVzaChpdGVtPy5pZGVudGlmaWVyKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2VcbiAgICAgICAgICAuZ2V0QWRkaXRpb25hbFBhcmFtZXRlcmZvclN1Z2dlc3RlZENvdXJzZXMoaWRlbnRpZmllcnNBcnIpXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcblxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LmNvbnRlbnQ/Lmxlbmd0aCkge1xuXG4gICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRDb3Vyc2VzID0gdGhpcy5maWx0ZXJkQ291cnNlcy5tYXAoY291cnNlID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSByZXNwb25zZS5yZXN1bHQuY29udGVudC5maW5kKFxuICAgICAgICAgICAgICAgICAgaXRlbSA9PiBpdGVtLmlkZW50aWZpZXIgPT09IGNvdXJzZS5pZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNvdXJzZSxcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IG1hdGNoZWQubGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgIGF2Z1JhdGluZzogbWF0Y2hlZC5hdmdSYXRpbmcsXG4gICAgICAgICAgICAgICAgICAgIGNvdXJzZTogbWF0Y2hlZC5uYW1lXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdXJzZVxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB1cGRhdGVkQ291cnNlc1xuXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpXG5cbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuZmlsdGVyZENvdXJzZXMgZnJvbSBtZG8nLCB0aGlzLmZpbHRlcmRDb3Vyc2VzKVxuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cblxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpZCA9IHRoaXMucGxhbkRhdGEuc291cmNlX3JvbGVfbWFwcGluZ19pZCA/IHRoaXMucGxhbkRhdGEuc291cmNlX3JvbGVfbWFwcGluZ19pZCA6IHRoaXMucGxhbkRhdGEuaWRcbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRVc2VyUmVjb21tZW5kYXRpb25Db3Vyc2UoaWQpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIGNvbnNvbGUubG9nKCdyZXMnLCByZXMpXG4gICAgICAgICAgdGhpcy5yZWNvbW1lbmRlZF9jb3Vyc2VfaWQgPSByZXMuaWRcbiAgICAgICAgICBsZXQgYWxsQ291cnNlcyA9IFtdXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuc2VsZWN0ZWRfY291cnNlcyAmJiByZXMuc2VsZWN0ZWRfY291cnNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlcy5zZWxlY3RlZF9jb3Vyc2VzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgLy8gaWYoaXRlbT8ucmVsZXZhbmN5ID49IDg1KSB7XG4gICAgICAgICAgICAgIGFsbENvdXJzZXMucHVzaChpdGVtKVxuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gYWxsQ291cnNlc1xuICAgICAgICAgIGxldCBpZGVudGlmaWVyc0FyciA9IFtdXG4gICAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuZmlsdGVyZENvdXJzZXMnLCB0aGlzLmZpbHRlcmRDb3Vyc2VzKVxuICAgICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZGVudGlmaWVyc0Fyci5wdXNoKGl0ZW0/LmlkZW50aWZpZXIpXG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0QWRkaXRpb25hbFBhcmFtZXRlcmZvclN1Z2dlc3RlZENvdXJzZXMoaWRlbnRpZmllcnNBcnIpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHQgJiYgcmVzcG9uc2UucmVzdWx0LmNvbnRlbnQgJiYgcmVzcG9uc2UucmVzdWx0LmNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzcG9uc2UucmVzdWx0LmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuZmlsdGVyZENvdXJzZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcmRDb3Vyc2VzW2pdWydpZGVudGlmaWVyJ10gPT09IHJlc3BvbnNlLnJlc3VsdC5jb250ZW50W2ldWydpZGVudGlmaWVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlc1tqXVsnbGFuZ3VhZ2UnXSA9IHJlc3BvbnNlLnJlc3VsdC5jb250ZW50W2ldWydsYW5ndWFnZSddXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXNbal1bJ2F2Z1JhdGluZyddID0gcmVzcG9uc2UucmVzdWx0LmNvbnRlbnRbaV1bJ2F2Z1JhdGluZyddXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXNbal1bJ2NvdXJzZSddID0gcmVzcG9uc2UucmVzdWx0LmNvbnRlbnRbaV1bJ25hbWUnXVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKVxuICAgICAgICAgIC8vIHRoaXMuZ2V0U3VnZ2VzdGVkQ291cnNlKClcbiAgICAgICAgICAvLyB0aGlzLmdldFVzZXJDb3Vyc2UoKVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5kZXRhaWwsICdYJywge1xuICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG5cbiAgfVxuXG4gIHVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKSB7XG4gICAgLy8gY29uc3QgY29tcHMgPSB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlO1xuICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQgPSB7IHRvdGFsOiAwLCBwdWJsaWNfY291cnNlczogMCwgaWdvdDogMCB9O1xuICAgIHRoaXMuZmlsdGVyZENvdXJzZXMuZm9yRWFjaChjID0+IHtcbiAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQudG90YWwrKztcbiAgICAgIGlmIChjLmlzX3B1YmxpYykgdGhpcy5jb21wZXRlbmNpZXNDb3VudC5wdWJsaWNfY291cnNlcysrO1xuICAgICAgaWYgKCFjLmlzX3B1YmxpYykgdGhpcy5jb21wZXRlbmNpZXNDb3VudC5pZ290Kys7XG4gICAgfSk7XG4gIH1cblxuICBjbG9zZURpYWxvZygpIHtcbiAgICBpZih0aGlzLnNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAgIH1cbiAgICBcbiAgfVxuXG4gIGFkZE1vcmVDb3Vyc2VzKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgY29uc29sZS5sb2coJ0dlbmVyYXRlIENvdXJzZSBSZWNvbW1lbmRhdGlvbiBjbGlja2VkJywgdGhpcy5wbGFuRGF0YSk7XG5cbiAgICBjb25zb2xlLmxvZygnRWRpdCBSb2xlIE1hcHBpbmcgY2xpY2tlZCcsIHRoaXMucGxhbkRhdGEpO1xuICAgIC8vIE5hdmlnYXRlIG9yIG9wZW4gbW9kYWxcbiAgICBjb25zb2xlLmxvZygnVmlldyBDQlAgUGxhbiBjbGlja2VkJywgdGhpcy5wbGFuRGF0YSk7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihHZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9uQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzEwMDBweCcsXG4gICAgICBkYXRhOiB0aGlzLnBsYW5EYXRhLFxuICAgICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLFxuICAgICAgbWluSGVpZ2h0OiAnNDAwcHgnLCAgICAgICAgICAvLyBTZXQgbWluaW11bSBoZWlnaHRcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlIC8vIE9wdGlvbmFsOiBwcmV2ZW50IGNsb3Npbmcgd2l0aCBvdXRzaWRlIGNsaWNrXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZXMgc2F2ZWQhJyk7XG4gICAgICAgIC8vIFJlZnJlc2ggZGF0YSBvciBzaG93IGEgdG9hc3QgaGVyZVxuXG5cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZFBlcnNvbmlsaXNhdGlvbigpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgIGNvbnNvbGUubG9nKCdHZW5lcmF0ZSBDb3Vyc2UgUmVjb21tZW5kYXRpb24gY2xpY2tlZCcsIHRoaXMucGxhbkRhdGEpO1xuXG4gICAgY29uc29sZS5sb2coJ0VkaXQgUm9sZSBNYXBwaW5nIGNsaWNrZWQnLCB0aGlzLnBsYW5EYXRhKTtcbiAgICAvLyBOYXZpZ2F0ZSBvciBvcGVuIG1vZGFsXG4gICAgY29uc29sZS5sb2coJ1ZpZXcgQ0JQIFBsYW4gY2xpY2tlZCcsIHRoaXMucGxhbkRhdGEpO1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWRkUGVyc29uYWxpc2F0aW9uQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzEwMDBweCcsXG4gICAgICBkYXRhOiB0aGlzLnBsYW5EYXRhLFxuICAgICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLFxuICAgICAgbWluSGVpZ2h0OiAnNDAwcHgnLCAgICAgICAgICAvLyBTZXQgbWluaW11bSBoZWlnaHRcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlIC8vIE9wdGlvbmFsOiBwcmV2ZW50IGNsb3Npbmcgd2l0aCBvdXRzaWRlIGNsaWNrXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZXMgc2F2ZWQhJyk7XG4gICAgICAgIC8vIFJlZnJlc2ggZGF0YSBvciBzaG93IGEgdG9hc3QgaGVyZVxuXG5cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFN1Z2dlc3RlZENvdXJzZSgpIHtcbiAgICBsZXQgcm9sZV9tYXBwaW5nX2lkID0gdGhpcy5wbGFuRGF0YS5pZFxuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0U3VnZ2VzdGVkQ291cnNlcyhyb2xlX21hcHBpbmdfaWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgY29uc29sZS5sb2coJ2dldFN1Z2dlc3RlZENvdXJzZXMgcmVzJywgcmVzKVxuXG4gICAgICAgIC8vIFN0b3JlIHN1Z2dlc3RlZCBjb3Vyc2VzIHNlcGFyYXRlbHlcbiAgICAgICAgdGhpcy5zdWdnZXN0ZWRDb3Vyc2VzID0gWy4uLnJlc107XG5cbiAgICAgICAgLy8gQWRkIHN1Z2dlc3RlZCBjb3Vyc2VzIHRvIGZpbHRlcmVkIGNvdXJzZXNcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzLnB1c2gocmVzW2ldKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIGNvbXBldGVuY3kgY291bnRzIGFmdGVyIGFkZGluZyBzdWdnZXN0ZWQgY291cnNlc1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCdmaWx0ZXJkQ291cnNlcyBhZnRlciBhZGRpbmcgc3VnZ2VzdGVkIGNvdXJzZXM6JywgdGhpcy5maWx0ZXJkQ291cnNlcyk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZ2V0U3VnZ2VzdGVkQ291cnNlIGVycm9yJywgZXJyb3IpXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdVbmF1dGhvcml6ZWQgYWNjZXNzIC0gdXNlciB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gbG9naW4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBzdWdnZXN0ZWQgY291cnNlcycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldFVzZXJDb3Vyc2UoKSB7XG4gICAgbGV0IHJvbGVfbWFwcGluZ19pZCA9IHRoaXMucGxhbkRhdGEuaWRcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFVzZXJDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAvLyBTdWNjZXNzIGhhbmRsaW5nXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG5cbiAgICAgICAgLy8gUHJvY2VzcyB1c2VyLWFkZGVkIGNvdXJzZXMgdG8gZW5zdXJlIHByb3BlciBzdHJ1Y3R1cmVcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzLnB1c2gocmVzW2ldKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIGNvbXBldGVuY3kgY291bnRzIGFmdGVyIGFkZGluZyB1c2VyIGNvdXJzZXNcbiAgICAgICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKClcblxuICAgICAgICBjb25zb2xlLmxvZygnZmlsdGVyZENvdXJzZXMgYWZ0ZXIgYWRkaW5nIHVzZXIgY291cnNlczonLCB0aGlzLmZpbHRlcmRDb3Vyc2VzKTtcbiAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIC8vIEhhbmRsZSA0MDkgQ29uZmxpY3QgaGVyZVxuICAgICAgICAvLyBhbGVydCgnQ29uZmxpY3QgZGV0ZWN0ZWQ6IFRoZSByZXNvdXJjZSBhbHJlYWR5IGV4aXN0cyBvciBhY3Rpb24gY29uZmxpY3RzLicpO1xuICAgICAgICAvL3RoaXMuZ2V0XG4gICAgICAgIC8vIE9yIHlvdSBjYW4gc2V0IGEgVUkgZXJyb3IgbWVzc2FnZSB2YXJpYWJsZVxuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIC8vdGhpcy5hbHJlYWR5QXZhaWxhYmxlUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgIH1cblxuXG4gICAgfSlcbiAgfVxuXG4gIGdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlOiBzdHJpbmcsIGluZGV4KTogYW55W10ge1xuICAgIGNvbnN0IGNvdXJzZSA9IHRoaXMuZmlsdGVyZENvdXJzZXNbaW5kZXhdO1xuICAgIGlmICghY291cnNlKSB7XG4gICAgICBjb25zb2xlLmxvZyhgTm8gY291cnNlIGZvdW5kIGF0IGluZGV4ICR7aW5kZXh9YCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgLy8gQUkgUmVjb21tZW5kZWQgJiBQdWJsaWMgY291cnNlcyB1c2UgJ2NvbXBldGVuY2llcydcbiAgICAvLyBNYW51YWxseSBTdWdnZXN0ZWQgLSBpR09UIGNvdXJzZXMgdXNlICdjb21wZXRlbmNpZXNfdjYnXG4gICAgLy8gVXNlciBBZGRlZCBjb3Vyc2VzIHVzZSAnY29tcGV0ZW5jaWVzJ1xuICAgIGxldCBjb21wZXRlbmNpZXMgPSBbXTtcbiAgICBpZiAoY291cnNlLmNvbXBldGVuY2llcyAmJiBBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXMpKSB7XG4gICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzO1xuICAgICAgY29uc29sZS5sb2coYENvdXJzZSAke2luZGV4fSAoJHtjb3Vyc2UuY291cnNlX3R5cGUgfHwgY291cnNlLm5hbWUgfHwgJ1Vua25vd24nfSkgdXNpbmcgJ2NvbXBldGVuY2llcycgcHJvcGVydHk6YCwgY29tcGV0ZW5jaWVzKTtcbiAgICB9IGVsc2UgaWYgKGNvdXJzZS5jb21wZXRlbmNpZXNfdjYgJiYgQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2KSkge1xuICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llc192NjtcbiAgICAgIGNvbnNvbGUubG9nKGBDb3Vyc2UgJHtpbmRleH0gKCR7Y291cnNlLmNvdXJzZV90eXBlIHx8IGNvdXJzZS5uYW1lIHx8ICdVbmtub3duJ30pIHVzaW5nICdjb21wZXRlbmNpZXNfdjYnIHByb3BlcnR5OmAsIGNvbXBldGVuY2llcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGBDb3Vyc2UgJHtpbmRleH0gKCR7Y291cnNlLmNvdXJzZV90eXBlIHx8IGNvdXJzZS5uYW1lIHx8ICdVbmtub3duJ30pIGhhcyBubyB2YWxpZCBjb21wZXRlbmNpZXMgcHJvcGVydHk6YCwge1xuICAgICAgICBoYXNDb21wZXRlbmNpZXM6ICEhY291cnNlLmNvbXBldGVuY2llcyxcbiAgICAgICAgY29tcGV0ZW5jaWVzVHlwZTogdHlwZW9mIGNvdXJzZS5jb21wZXRlbmNpZXMsXG4gICAgICAgIGhhc0NvbXBldGVuY2llc1Y2OiAhIWNvdXJzZS5jb21wZXRlbmNpZXNfdjYsXG4gICAgICAgIGNvbXBldGVuY2llc1Y2VHlwZTogdHlwZW9mIGNvdXJzZS5jb21wZXRlbmNpZXNfdjYsXG4gICAgICAgIGNvdXJzZUtleXM6IE9iamVjdC5rZXlzKGNvdXJzZSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjb21wZXRlbmNpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmxvZyhgTm8gY29tcGV0ZW5jaWVzIGZvdW5kIGZvciBjb3Vyc2UgJHtpbmRleH0gYW5kIHR5cGUgJHt0eXBlfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSBmb3IgY29tcGFyaXNvbiAoY2FzZS1pbnNlbnNpdGl2ZSArIGhhbmRsZSBzcGVsbGluZyB2YXJpYXRpb25zKVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgIGNvbnN0IG1hdGNoZWRDb21wZXRlbmNpZXMgPSBjb21wZXRlbmNpZXMuZmlsdGVyKGMgPT4ge1xuICAgICAgaWYgKCFjIHx8ICFjLmNvbXBldGVuY3lBcmVhTmFtZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgSW52YWxpZCBjb21wZXRlbmN5IHN0cnVjdHVyZSBpbiBjb3Vyc2UgJHtpbmRleH06YCwgYyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tcGV0ZW5jeUFyZWEgPSBjLmNvbXBldGVuY3lBcmVhTmFtZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgLy8gSGFuZGxlIGJvdGggXCJiZWhhdmlvcmFsXCIgYW5kIFwiYmVoYXZpb3VyYWxcIiBzcGVsbGluZ3NcbiAgICAgIGlmIChub3JtYWxpemVkVHlwZSA9PT0gJ2JlaGF2aW91cmFsJyB8fCBub3JtYWxpemVkVHlwZSA9PT0gJ2JlaGF2aW9yYWwnKSB7XG4gICAgICAgIHJldHVybiBjb21wZXRlbmN5QXJlYSA9PT0gJ2JlaGF2aW9yYWwnIHx8IGNvbXBldGVuY3lBcmVhID09PSAnYmVoYXZpb3VyYWwnO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3Igb3RoZXIgdHlwZXMsIGRvIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvblxuICAgICAgcmV0dXJuIGNvbXBldGVuY3lBcmVhID09PSBub3JtYWxpemVkVHlwZTtcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKGBGb3VuZCAke21hdGNoZWRDb21wZXRlbmNpZXMubGVuZ3RofSBjb21wZXRlbmNpZXMgb2YgdHlwZSAke3R5cGV9IGZvciBjb3Vyc2UgJHtpbmRleH06YCwgbWF0Y2hlZENvbXBldGVuY2llcyk7XG4gICAgcmV0dXJuIG1hdGNoZWRDb21wZXRlbmNpZXM7XG4gIH1cblxuICBnZXREaXNwbGF5ZWRDb21wZXRlbmNpZXModHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogYW55W10ge1xuICAgIGNvbnN0IGNvbXBldGVuY2llcyA9IHRoaXMuZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKHR5cGUsIGluZGV4KTtcbiAgICBjb25zdCBrZXkgPSBgJHtpbmRleH0tJHt0eXBlfWA7XG5cbiAgICBpZiAodGhpcy5leHBhbmRlZENvbXBldGVuY2llc1trZXldKSB7XG4gICAgICByZXR1cm4gY29tcGV0ZW5jaWVzO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wZXRlbmNpZXMuc2xpY2UoMCwgMik7XG4gIH1cblxuICB0b2dnbGVDb21wZXRlbmNpZXModHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gYCR7aW5kZXh9LSR7dHlwZX1gO1xuICAgIHRoaXMuZXhwYW5kZWRDb21wZXRlbmNpZXNba2V5XSA9ICF0aGlzLmV4cGFuZGVkQ29tcGV0ZW5jaWVzW2tleV07XG4gIH1cblxuICBpc0V4cGFuZGVkKHR5cGU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IGAke2luZGV4fS0ke3R5cGV9YDtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZENvbXBldGVuY2llc1trZXldIHx8IGZhbHNlO1xuICB9XG5cbiAgaGFzTW9yZVRoYW5Ud28odHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKHR5cGUsIGluZGV4KS5sZW5ndGggPiAyO1xuICB9XG5cbiAgZ2V0UmVtYWluaW5nQ291bnQodHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy5nZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZSwgaW5kZXgpLmxlbmd0aDtcbiAgICByZXR1cm4gdG90YWxDb3VudCAtIDI7XG4gIH1cblxuICBkb3dubG9hZFBERigpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgdGhpcy5pc1BERkRvd25sb2FkID0gdHJ1ZVxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBkZkNvbnRlbnQubmF0aXZlRWxlbWVudDtcblxuICAgIC8vIFdhaXQgZm9yIGltYWdlcyB0byBsb2FkXG4gICAgY29uc3QgaW1hZ2VzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbWcnKTtcbiAgICBjb25zdCBwcm9taXNlcyA9IEFycmF5LmZyb20oaW1hZ2VzKS5tYXAoKGltZzogSFRNTEltYWdlRWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGltZy5jb21wbGV0ZSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gaW1nLm9ubG9hZCA9IHJlc29sdmUpO1xuICAgIH0pO1xuXG4gICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgbWFyZ2luOiAwLjUsXG4gICAgICAgIGZpbGVuYW1lOiAnUmVjb21tZW5kZWQgQ291cmVzZXMucGRmJyxcbiAgICAgICAgaW1hZ2U6IHsgdHlwZTogJ2pwZWcnLCBxdWFsaXR5OiAwLjk4IH0sXG4gICAgICAgIGh0bWwyY2FudmFzOiB7XG4gICAgICAgICAgc2NhbGU6IDIsXG4gICAgICAgICAgdXNlQ09SUzogdHJ1ZSxcbiAgICAgICAgICBzY3JvbGxZOiAwLFxuICAgICAgICB9LFxuICAgICAgICBqc1BERjoge1xuICAgICAgICAgIHVuaXQ6ICdpbicsXG4gICAgICAgICAgZm9ybWF0OiAnYTQnLFxuICAgICAgICAgIG9yaWVudGF0aW9uOiAncG9ydHJhaXQnXG4gICAgICAgIH0sXG4gICAgICAgIHBhZ2VicmVhazoge1xuICAgICAgICAgIG1vZGU6IFsnY3NzJywgJ2xlZ2FjeScsICdhdm9pZC1hbGwnXVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBodG1sMnBkZigpLmZyb20oZWxlbWVudCkuc2V0KG9wdGlvbnMpLnNhdmUoKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUERGRG93bmxvYWQgPSBmYWxzZVxuICAgICAgfSwgMzAwMCk7XG4gICAgfSk7XG4gIH1cblxuICBkb3dubG9hZFBkZkZyb21CRSgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgLy8gIHRoaXMuc2hhcmVkU2VydmljZS5kb3dubG9hZFBkZih0aGlzLnNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5pZGVudGlmaWVyKVxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmRvd25sb2FkUGRmRm9yQ291cnNlUmVjb21tZW5kYXRpb24odGhpcy5kYXRhPy5pZClcblxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgIH0sIDUwMDApXG4gIH1cblxuICBjb25maXJtRGVsZXRlQ291cnNlKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHJvbGVNYXBwaW5nSWQgPSB0aGlzLnJlY29tbWVuZGVkX2NvdXJzZV9pZDtcbiAgICBjb25zdCBjb3Vyc2VJZGVudGlmaWVyID1cbiAgICAgIGl0ZW0/LmNvdXJzZV9pZGVudGlmaWVyIHx8IGl0ZW0/LmlkIHx8IGl0ZW0/LmlkZW50aWZpZXI7XG5cbiAgICBpZiAoIXJvbGVNYXBwaW5nSWQgfHwgIWNvdXJzZUlkZW50aWZpZXIpIHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignVW5hYmxlIHRvIGRlbGV0ZSBjb3Vyc2UnLCAnWCcsIHtcbiAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgIGxldCByZXF1ZXN0SWQgPSB0aGlzLnJlcXVlc3RJZFxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVjb21tZW5kZWRDb3Vyc2Uocm9sZU1hcHBpbmdJZCwgY291cnNlSWRlbnRpZmllciwgcmVxdWVzdElkKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBSZW1vdmUgZnJvbSBVSVxuICAgICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICAgIC8vIFVwZGF0ZSBjb3VudHNcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKTtcblxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDb3Vyc2UgZGVsZXRlZCBzdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgICAgICAgZXJyb3I/LmVycm9yPy5kZXRhaWwgfHwgJ0ZhaWxlZCB0byBkZWxldGUgY291cnNlJyxcbiAgICAgICAgICAgICdYJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gIH1cblxuICBkZWxldGVDYXJkKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRGVsZXRlUm9sZU1hcHBpbmdQb3B1cENvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc2MDBweCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHBsYW5JZDogdGhpcy5wbGFuRGF0YT8uaWQsICAgLy8gcm9sZSBtYXBwaW5nIGlkXG4gICAgICAgIGNvdXJzZTogaXRlbSwgICAgICAgICAgICAgICAgLy8gY291cnNlIG9iamVjdFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGZyb206ICd2aWV3Q291cnNlJyAgICAgICAgICAgICAgICAgLy8gaW5kZXggZm9yIFVJIHJlbW92YWxcbiAgICAgIH0sXG4gICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICBtaW5IZWlnaHQ6ICczMDBweCcsXG4gICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgIHRoaXMuY29uZmlybURlbGV0ZUNvdXJzZShpdGVtLCBpbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZWRpcmVjdFRvQ291cmUoaXRlbSkge1xuICAgIGlmIChpdGVtPy5wdWJsaWNfbGluaykge1xuICAgICAgd2luZG93Lm9wZW4oaXRlbT8ucHVibGljX2xpbmssICdfYmxhbmsnKVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdXJsID0gYGh0dHBzOi8vcG9ydGFsLmlnb3RrYXJtYXlvZ2kuZ292LmluL2FwcC90b2MvJHtpdGVtPy5pZGVudGlmaWVyfS9vdmVydmlldz9gXG4gICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKVxuICAgIH1cbiAgfVxuXG4gIHN1Z2dlc3RNb3JlQ291cnNlcygpIHtcbiAgICAvLyB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgY29uc29sZS5sb2coJ2NicF9wbGFuX2lkLS0tJywgdGhpcy5jYnBQbGFuRGF0YSlcbiAgICBjb25zdCBkaWFsb2dSZWZOZXcgPSB0aGlzLmRpYWxvZy5vcGVuKFN1Z2dlc3RNb3JlQ291cnNlc0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc5NTBweCcsXG4gICAgICBkYXRhOiB7IGNicF9wbGFuX2lkOiB0aGlzLnJldmlld1JlcXVlc3RQbGFuRGF0YT8uaWQsIHJlY29tbWVuZGVkX2NvdXJzZV9pZDogdGhpcy5yZWNvbW1lbmRlZF9jb3Vyc2VfaWQsIHJvbGVfbWFwcGluZ19pZDogdGhpcy5wbGFuRGF0YS5pZCwgZnJvbU1kb1BvcnRhbDogdGhpcy5zaGFyZWRTZXJ2aWNlLmZyb21NZG9Qb3J0YWwgfSxcbiAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgIG1pbkhlaWdodDogJzQwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICBtYXhIZWlnaHQ6ICc5MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmTmV3LmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDaGFuZ2VzIHNhdmVkIScpO1xuICAgICAgICAvLyBSZWZyZXNoIGRhdGEgb3Igc2hvdyBhIHRvYXN0IGhlcmVcbiAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5mcm9tTWRvUG9ydGFsKSB7XG4gICAgICAgICBcbiAgICAgICAgICB0aGlzLmNhbGxDb3Vyc2VGb3JNRE8oKVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5nZXRTdWdnZXN0ZWRDb3Vyc2UoKVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5mcm9tTWRvUG9ydGFsKSB7XG4gICAgICAgICBcbiAgICAgICAgICB0aGlzLmNhbGxDb3Vyc2VGb3JNRE8oKVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5nZXRTdWdnZXN0ZWRDb3Vyc2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjYWxsQ291cnNlRm9yTURPKCkge1xuICAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncmVxdWVzdF9pZCcpO1xuICAgICAgICAgIGxldCByZXM6IGFueVxuICAgICAgICAgIGlmICh0aGlzLnBsYW5EYXRhPy5jYnBfcGxhbl9kYXRhICYmIHRoaXMucGxhbkRhdGE/LmNicF9wbGFuX2RhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXMgPSB0aGlzLnBsYW5EYXRhPy5jYnBfcGxhbl9kYXRhWzBdXG4gICAgICAgICAgICB0aGlzLnJlY29tbWVuZGVkX2NvdXJzZV9pZCA9IHJlcy5pZFxuICAgICAgICAgICAgbGV0IGFsbENvdXJzZXMgPSBbXVxuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuc2VsZWN0ZWRfY291cnNlcyAmJiByZXMuc2VsZWN0ZWRfY291cnNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzLnNlbGVjdGVkX2NvdXJzZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGlmKGl0ZW0/LnJlbGV2YW5jeSA+PSA4NSkge1xuICAgICAgICAgICAgICAgIGFsbENvdXJzZXMucHVzaChpdGVtKVxuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSBhbGxDb3Vyc2VzXG4gICAgICAgICAgICBsZXQgaWRlbnRpZmllcnNBcnIgPSBbXVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuZmlsdGVyZENvdXJzZXMnLCB0aGlzLmZpbHRlcmRDb3Vyc2VzKVxuICAgICAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgaWRlbnRpZmllcnNBcnIucHVzaChpdGVtPy5pZGVudGlmaWVyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldEFkZGl0aW9uYWxQYXJhbWV0ZXJmb3JTdWdnZXN0ZWRDb3Vyc2VzKGlkZW50aWZpZXJzQXJyKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LmNvbnRlbnQ/Lmxlbmd0aCkge1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkQ291cnNlcyA9IHRoaXMuZmlsdGVyZENvdXJzZXMubWFwKGNvdXJzZSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IHJlc3BvbnNlLnJlc3VsdC5jb250ZW50LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSA9PiBpdGVtLmlkZW50aWZpZXIgPT09IGNvdXJzZS5pZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb3Vyc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZTogbWF0Y2hlZC5sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2Z1JhdGluZzogbWF0Y2hlZC5hdmdSYXRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2U6IG1hdGNoZWQubmFtZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3Vyc2VcbiAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB1cGRhdGVkQ291cnNlc1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKVxuXG4gICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5maWx0ZXJkQ291cnNlcyBmcm9tIG1kbycsIHRoaXMuZmlsdGVyZENvdXJzZXMpXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKVxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidmlldy1jYnAtcGxhblwiPlxuICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiPlZpZXcgQ291cnNlIFJlY29tbWVuZGF0aW9uPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cC1jb21wYWN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaGFyZWRTZXJ2aWNlLmZyb21NZG9Qb3J0YWwgJiYgZGF0YT8ucmVxdWVzdFN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PSAncGVuZGluZydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJBZGQgTW9yZSBDb3Vyc2UgRnJvbSBpR09UXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3VnZ2VzdE1vcmVDb3Vyc2VzKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRhaW5lciBtdC0yXCIgI3BkZkNvbnRlbnQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pc3RyeS1oZWFkaW5nIG10LTJcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNicFBsYW5EYXRhPy5kZXBhcnRtZW50X25hbWVcIj57e2NicFBsYW5EYXRhPy5taW5pc3RyeT8ub3JnTmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjYnBQbGFuRGF0YT8uZGVwYXJ0bWVudF9uYW1lXCI+e3tjYnBQbGFuRGF0YT8uZGVwYXJ0bWVudF9uYW1lfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhKHNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbClcIj4gLyA8L3NwYW4+XG4gICAgICAgICAgICAgICAge3twbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktY29udGFpbmVyIG10LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLXRvdGFsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICBUb3RhbCBDb3Vyc2VzXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LnRvdGFsfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItdG90YWxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgICAgIGlHT1QgUGxhdGZvcm0gQ291cnNlc1xuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICB7e2NvbXBldGVuY2llc0NvdW50Py5pZ290fX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItdG90YWxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgICAgIFB1YmxpYyBDb3Vyc2VzXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LnB1YmxpY19jb3Vyc2VzfX1cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS00XCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtbGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWxpc3QtaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmRDb3Vyc2VzO2xldCBpPWluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tlZC1jb3Vyc2UtY29udGFpbmVyXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLXBpbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtcGlsbC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvY291cnNlLnN2Z1wiPjwvc3Bhbj4mbmJzcDs8c3Bhbj5Db3Vyc2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgUmVjb21tZW5kZWQ8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbT8ucmF0aW9uYWxlICYmICFpdGVtPy5pc19wdWJsaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtZ3JlZW4tdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFJIFJlY29tbWVuZGVkIC0gaUdPVCA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UgbXQtMlwiICpuZ0lmPVwiaXRlbT8ucGxhdGZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW2hyZWZdPVwiaXRlbT8ucHVibGljX2xpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIj48c3Bhbj5QbGF0Zm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHt7aXRlbT8ucGxhdGZvcm19fTwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/Lm9yZ2FuaXNhdGlvbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UHJvdmlkZXIgLSB7e2l0ZW0/Lm9yZ2FuaXNhdGlvblswXX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0/LnJhdGlvbmFsZSAmJiBpdGVtPy5pc19wdWJsaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXB1YmxpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXB1YmxpYy10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgUmVjb21tZW5kZWQgLSBQdWJsaWMgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/LnBsYXRmb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4+UGxhdGZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSB7e2l0ZW0/LnBsYXRmb3JtfX08L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5vcmdhbmlzYXRpb24/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlByb3ZpZGVyIC0ge3tpdGVtPy5vcmdhbmlzYXRpb25bMF19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbT8ucmF0aW9uYWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1ncmF5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtZ3JheS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+TWFudWFsbHkgU3VnZ2VzdGVkIC0gaUdPVCA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UgbXQtMlwiICpuZ0lmPVwiaXRlbT8ucGxhdGZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW2hyZWZdPVwiaXRlbT8ucHVibGljX2xpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIj48c3Bhbj5QbGF0Zm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHt7aXRlbT8ucGxhdGZvcm19fTwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/Lm9yZ2FuaXNhdGlvbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UHJvdmlkZXIgLSB7e2l0ZW0/Lm9yZ2FuaXNhdGlvblswXX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS10aXRsZSBtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbT8uY291cnNlICYmICghc2hhcmVkU2VydmljZT8uZnJvbU1kb1BvcnRhbClcIiAoY2xpY2spPVwicmVkaXJlY3RUb0NvdXJlKGl0ZW0pXCI+e3tpdGVtPy5jb3Vyc2V9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5uYW1lICYmIChzaGFyZWRTZXJ2aWNlPy5mcm9tTWRvUG9ydGFsKVwiIChjbGljayk9XCJyZWRpcmVjdFRvQ291cmUoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtPy5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1kZXNjIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1BERkRvd25sb2FkIHx8IHNoYXJlZFNlcnZpY2U/LmZyb21NZG9Qb3J0YWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7aXRlbT8ucmF0aW9uYWxlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj1cImdldENvbXBldGVuY2llc0J5VHlwZSgnQmVoYXZpb3VyYWwnLGkpPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nXCI+QmVoYXZpb3JhbCBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNvbXBldGVuY3ktbGlzdCBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiYmVoYXZpb3VyYWwtcGlsbFwiICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldERpc3BsYXllZENvbXBldGVuY2llcygnQmVoYXZpb3VyYWwnLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0XCI+IHt7IGNvbXAuY29tcGV0ZW5jeVRoZW1lTmFtZSB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC5jb21wZXRlbmN5U3ViVGhlbWVOYW1lIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhhc01vcmVUaGFuVHdvKCdCZWhhdmlvdXJhbCcsaSlcIiBjbGFzcz1cInNob3ctbW9yZS1jb21wZXRlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2hvdy1tb3JlLWxpbmsgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbXBldGVuY2llcygnQmVoYXZpb3VyYWwnLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpc0V4cGFuZGVkKCdCZWhhdmlvdXJhbCcsaSkgPyAnU2hvdyBMZXNzJyA6ICcrJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZW1haW5pbmdDb3VudCgnQmVoYXZpb3VyYWwnLGkpICsgJyBNb3JlJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdGdW5jdGlvbmFsJyxpKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZ1wiPkZ1bmN0aW9uYWwgQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjb21wZXRlbmN5LWxpc3QgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImZ1bmN0aW9uYWwtcGlsbFwiICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldERpc3BsYXllZENvbXBldGVuY2llcygnRnVuY3Rpb25hbCcsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHRcIj4ge3sgY29tcC5jb21wZXRlbmN5VGhlbWVOYW1lIH19IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLmNvbXBldGVuY3lTdWJUaGVtZU5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiaGFzTW9yZVRoYW5Ud28oJ0Z1bmN0aW9uYWwnLGkpXCIgY2xhc3M9XCJzaG93LW1vcmUtY29tcGV0ZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3ctbW9yZS1saW5rIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb21wZXRlbmNpZXMoJ0Z1bmN0aW9uYWwnLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpc0V4cGFuZGVkKCdGdW5jdGlvbmFsJyxpKSA/ICdTaG93IExlc3MnIDogJysnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlbWFpbmluZ0NvdW50KCdGdW5jdGlvbmFsJyxpKSArICcgTW9yZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImdldENvbXBldGVuY2llc0J5VHlwZSgnRG9tYWluJyxpKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZ1wiPkRvbWFpbiBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNvbXBldGVuY3ktbGlzdCBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZG9tYWluLXBpbGxcIiAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXREaXNwbGF5ZWRDb21wZXRlbmNpZXMoJ0RvbWFpbicsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHRcIj4ge3sgY29tcC5jb21wZXRlbmN5VGhlbWVOYW1lIH19IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLmNvbXBldGVuY3lTdWJUaGVtZU5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiaGFzTW9yZVRoYW5Ud28oJ0RvbWFpbicsaSlcIiBjbGFzcz1cInNob3ctbW9yZS1jb21wZXRlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2hvdy1tb3JlLWxpbmsgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwidG9nZ2xlQ29tcGV0ZW5jaWVzKCdEb21haW4nLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpc0V4cGFuZGVkKCdEb21haW4nLGkpID8gJ1Nob3cgTGVzcycgOiAnKycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmVtYWluaW5nQ291bnQoJ0RvbWFpbicsaSkgKyAnIE1vcmUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5LWNvbnRhaW5lclwiICpuZ0lmPVwiaXRlbT8ucmVsZXZhbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGV2YW5jeVwiPlJlbGV2YW5jeTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXNoXCI+LTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlXCIgKm5nSWY9XCJpdGVtPy5yZWxldmFuY3lcIj57e2l0ZW0/LnJlbGV2YW5jeX19JTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlXCIgKm5nSWY9XCIhaXRlbT8ucmVsZXZhbmN5XCI+Ti9BPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxldGUtYnV0dG9uXCIgKm5nSWY9XCIhKGRhdGE/LmZyb21SZXF1ZXN0UGFnZSkgfHwgKHNoYXJlZFNlcnZpY2U/LmZyb21NZG9Qb3J0YWwgJiYgZGF0YT8ucmVxdWVzdFN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PT0gJ3BlbmRpbmcnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRUb29sdGlwPVwiRGVsZXRlIENvdXJzZVwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlciBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJkZWxldGVDYXJkKGl0ZW0sIGkpXCI+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY2llcy1tYXRjaGVkLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmNpZXMtbWF0Y2hlZFwiPkNvbXBldGVuY2llcyBNYXRjaGVkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnRhZ2VcIj44MCU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY291cnNlLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLXBpbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1waWxsLXRleHRcIj5Db3Vyc2U8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BSSBSZWNvbW1lbmRlZDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pk1hdGVybmFsLCBJbmZhbnQgQW5kIFlvdW5nIENoaWxkIE51dHJpdGlvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWRlc2NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5UaGlzIENvdXJzZSBkaXJlY3RseSBhZGRyZXNzZXMgYSBwcmltYXJ5IHJlc3BvbnNpYmlsaXR5IG9mIEFuZ2Fud2FuZGkgQ2FyZSB0YWtlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHByb3ZpZGUgYW5kIGVkdWNhdGUgb24gbnV0cml0aW9uIGZvciBtb3RoZXIgYW5kIHlvdW5nIGNoaWxkcmVuPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmFuY3lcIj5SZWxldmFuY3k8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGFzaFwiPi08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVyY2VudGFnZVwiPjkwJTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY2llcy1tYXRjaGVkLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmNpZXMtbWF0Y2hlZFwiPkNvbXBldGVuY2llcyBNYXRjaGVkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnRhZ2VcIj44MCU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZm9vdGVyXCIgKm5nSWY9XCJmaWx0ZXJkQ291cnNlcz8ubGVuZ3RoXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhKGRhdGE/LmZyb21SZXF1ZXN0UGFnZSlcIj5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJEb3dubG9hZFwiIChjbGljayk9XCJkb3dubG9hZFBkZkZyb21CRSgpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gPGRpdj5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJBZGQgUGVyc29uYWxpc2F0aW9uXCIgKGNsaWNrKT1cImFkZFBlcnNvbmlsaXNhdGlvbigpXCIvPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwhLS0gPGRpdj5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJBZGQgTW9yZSBDb3Vyc2VzXCIgKGNsaWNrKT1cImFkZE1vcmVDb3Vyc2VzKClcIi8+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuPC9kaXY+Il19
|