mmhglobal-dynamicform 2.41.1 → 2.41.3

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.
@@ -124,7 +124,7 @@ export class ZgridComponent extends DataListingFieldBase {
124
124
  }
125
125
  };
126
126
  this.environment = this.zcoreService.getEnvironment();
127
- this.oauthUrl = `${this.environment.e1OauthUrl}/`;
127
+ this.oauthUrl = this.zcoreService.getOauthUrl();
128
128
  this.allResults = this.allResults.bind(this);
129
129
  this.refreshData = this.refreshData.bind(this);
130
130
  this.clearData = this.clearData.bind(this);
@@ -1209,4 +1209,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
1209
1209
  type: ViewChild,
1210
1210
  args: [ElementContainerDirective, { static: true }]
1211
1211
  }] } });
1212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3JELE9BQU8sRUFBeUIsT0FBTyxFQUFtQixNQUFNLDRCQUE0QixDQUFDO0FBRTdGLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUVwRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUdyRixPQUFPLEVBRUcsTUFBTSxFQUFjLGdCQUFnQixFQUM4QixTQUFTLEVBRW5GLGVBQWUsRUFDaEIsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QnpCLE1BQU0sT0FBTyxjQUFlLFNBQVEsb0JBQW9CO0lBdUR0RCxZQUNTLGdCQUFtQyxFQUNuQyxrQkFBc0MsRUFDckMsY0FBOEIsRUFDOUIsTUFBYyxFQUNkLFdBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLGNBQXFDLEVBQ3JDLFdBQXdCLEVBQ3hCLEdBQXNCLEVBQ3RCLFdBQXlCLEVBQ3pCLG1CQUF3QyxFQUN4QyxrQkFBc0MsRUFDdEMsV0FBd0IsRUFDeEIsWUFBMEI7UUFFbEMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFqQmpCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7UUFDbkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUNyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUNyQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYztRQUN6Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFwRXBDLFVBQUssR0FBUSxJQUFJLENBQUM7UUFDbEIsYUFBUSxHQUFXLElBQUksQ0FBQztRQUd4QixpQkFBWSxHQUFhLEVBQUUsQ0FBQztRQUM1QixnQkFBVyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDeEIsMkJBQXNCLEdBQUcsRUFBRSxDQUFDO1FBSXJCLGFBQVEsR0FBUSxLQUFLLENBQUM7UUFDdEIsZ0JBQVcsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzNCLG1CQUFjLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUM5QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUV4QixrQ0FBNkIsR0FBRyxLQUFLLENBQUM7UUFFckMsNkJBQXdCLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLGlDQUE0QixHQUFZLEtBQUssQ0FBQztRQUM5Qyx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsb0JBQWUsR0FBc0IsRUFBRSxDQUFDO1FBRy9DLFdBQU0sR0FBdUI7WUFDM0IsT0FBTyxFQUFFLElBQUk7WUFDYixNQUFNLEVBQUUsQ0FBQztZQUNULFFBQVEsRUFBRSxFQUFFO1lBQ1osY0FBYyxFQUFFLEVBQUU7WUFDbEIsU0FBUyxFQUFFLEVBQUU7WUFDYixlQUFlLEVBQUUsRUFBRTtZQUNuQixVQUFVLEVBQUUsRUFBRTtZQUNkLFlBQVksRUFBRSxFQUFFO1lBQ2hCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPLEVBQUUsRUFBRTtZQUNYLFNBQVMsRUFBRSxDQUFDO1NBQ2IsQ0FBQztRQUVGLGdCQUFXLEdBQWlCLElBQUksT0FBTyxFQUFPLENBQUM7UUFRL0MsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBQ3ZDLFVBQUssR0FBWSxJQUFJLENBQUM7UUE2ZGYsb0JBQWUsR0FBRyxDQUFDLE9BQWdCLEVBQU8sRUFBRTtZQUNqRCxpRkFBaUY7WUFDakYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXpELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlDLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUhBQXVILENBQUMsQ0FBQzthQUN4STtZQUVELDJDQUEyQztZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO2FBQzlCO1lBRUQscUVBQXFFO1lBQ3JFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFNUMsNEJBQTRCO1lBQzVCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFBO1FBdUNNLFlBQU8sR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQzlCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRTtvQkFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO29CQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRTt3QkFDakQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7cUJBQy9CO2lCQUNGO3FCQUNJO29CQUNILElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRzt3QkFDckIsSUFBSSxFQUFFLEtBQUs7d0JBQ1gsS0FBSyxFQUFFLEtBQUssQ0FBQyxVQUFVO3FCQUN4QixDQUFBO2lCQUNGO2dCQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2FBQ2hDO2lCQUNJO2dCQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztnQkFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEI7UUFDSCxDQUFDLENBQUE7UUFsaEJDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFFL0UsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFFdkMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLGVBQWUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUV4QyxJQUFJLGVBQWUsRUFBRTtZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO2dCQUMxQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDaEI7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUN2RTtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsNkRBQTZEO0lBQ3RELGVBQWUsQ0FBQyxLQUEyQjtRQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFVO1FBQzFCLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRTtZQUNuQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO1lBQ25CLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxNQUFNLENBQUMsVUFBZTtRQUMzQixJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDcEMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELFlBQVk7SUFFTCxhQUFhLENBQUMsQ0FBTTtRQUN6QixNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUU3Qix5REFBeUQ7UUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekIsSUFBSSxHQUFHLENBQUMsZUFBZSxFQUFFO2dCQUN2QixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ25IO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbEMsT0FBTztTQUNSO1FBRUQsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUN6Qix5RUFBeUU7Z0JBQ3pFLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUNoQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQzlCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFOzRCQUM5QixHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzt5QkFDdEI7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFDSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO2dCQUM1QixnRUFBZ0U7Z0JBQ2hFLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUNoQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQzlCLElBQUksS0FBSyxLQUFLLEdBQUcsQ0FBQyxRQUFRLEVBQUU7NEJBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQzt5QkFDOUI7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHNCQUFzQjtJQUNmLGNBQWM7UUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUc7Z0JBQ3hCLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLO2dCQUM3QyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRO2FBQ3RGLENBQUM7WUFDRixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sVUFBVSxDQUFDLFVBQWtCLEVBQUUsT0FBaUM7UUFDckUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxVQUFrQixFQUFFLE9BQWlDO1FBQ3RFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVPLDZCQUE2QixDQUFDLFVBQW9DO1FBQ3hFLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEMsTUFBTSxRQUFRLEdBQVksTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN4QyxPQUFPO2dCQUNMLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNsQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLGNBQWMsRUFBRSxDQUFDLFFBQVE7Z0JBQ3pCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxJQUFJLEtBQUs7Z0JBQzFDLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZSxJQUFJLEtBQUs7Z0JBQ2hELEtBQUssRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDbkMsZUFBZSxFQUFFLEtBQUs7Z0JBQ3RCLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixhQUFhLEVBQUUsSUFBSTtnQkFDbkIsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLFFBQVE7YUFDbEMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sbUJBQW1CLENBQUMsV0FBMkI7UUFDckQsTUFBTSxhQUFhLEdBQW9CLGdCQUFnQixDQUFDLGFBQWEsQ0FDbkUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQ3RCLElBQUksQ0FBQyxLQUFLLENBQ1gsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFWixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDO1NBQ25FO1FBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUN2QixHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLDJCQUEyQixDQUFDLENBQUM7YUFDL0U7aUJBQ0k7Z0JBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO2dCQUVqQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUM7b0JBQzlCLFdBQVcsRUFBRSxXQUFXO29CQUN4QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLG9CQUFvQjtvQkFDdkQscUJBQXFCLEVBQUUscUJBQXFCO29CQUM1QyxjQUFjLEVBQUUsSUFBSSxDQUFDLElBQUk7aUJBQzFCLENBQUMsQ0FBQztnQkFFSCxJQUFJLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3BDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7b0JBQ3JDLE1BQU0sMEJBQTBCLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzFJLEtBQUssTUFBTSxLQUFLLElBQUksMEJBQTBCLEVBQUU7d0JBQzlDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQzdDO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsT0FBTyxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLG9CQUF5QixFQUFFLEtBQVU7UUFDL0MsSUFBSSxvQkFBb0IsSUFBSSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN2RCxPQUFPLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUM5RjtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELFlBQVk7SUFFWiwrQkFBK0I7SUFDL0IsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQiwyQkFBMkI7SUFDM0Isc0RBQXNEO0lBQy9DLGdCQUFnQixDQUFDLEtBQXFCO1FBQzNDLHNCQUFzQjtRQUN0QixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hFLE9BQU87U0FDUjtRQUVELE1BQU0sZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3ZILE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFakcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDeEI7UUFFRCxJQUFJLENBQUMsZ0NBQWdDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDbkYsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ2pGLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN4STthQUNGO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3hDLHdEQUF3RDtnQkFFeEQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDekIsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUNsRixJQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVUsRUFBRTt3QkFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNqRCxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ2pCO29CQUNELE9BQU87aUJBQ1I7cUJBQ0k7b0JBQ0gsNkRBQTZEO29CQUM3RCw2Q0FBNkM7b0JBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUNuRTtnQkFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNoQztTQUNGO0lBQ0gsQ0FBQztJQUVNLG9CQUFvQixDQUFDLElBQVM7UUFDbkMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO2FBQU0sSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO1lBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNwRSx5RkFBeUY7WUFFekYsMkNBQTJDO1lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7YUFDOUI7WUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxFQUFFLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztpQkFDdEQ7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVNLFlBQVksQ0FBQyxLQUFVLEVBQUUsV0FBZ0IsRUFBRSxPQUFZLEVBQUUsUUFBZ0I7UUFDOUUsNkRBQTZEO1FBQzdELE1BQU0sQ0FBQyxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxFQUFFO1lBQ0wsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDdEIsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLO2dCQUN6QixPQUFPLEVBQUUsT0FBTztnQkFDaEIsSUFBSSxFQUFFLFFBQVE7YUFDVSxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRU8sU0FBUyxDQUFDLFFBQWE7UUFDN0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUMxQixvQkFBb0I7WUFDcEIsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7Z0JBQzlCLElBQUksRUFBRSxRQUFRO2dCQUNkLGFBQWEsRUFBRSxTQUFTO2FBQ0EsQ0FBQyxDQUFDO1NBQzdCO2FBQ0ksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCO2FBQ0k7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQzlDLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYztnQkFDL0IsMkJBQTJCO2FBQzVCLENBQUMsQ0FBQztZQUVILCtCQUErQjtZQUMvQix3RUFBd0U7WUFDeEUsbUNBQW1DO1lBQ25DLEtBQUs7U0FDTjtJQUNILENBQUM7SUFFTSxVQUFVLENBQUMsS0FBVSxFQUFFLFVBQWUsRUFBRSxPQUFZLEVBQUUsUUFBZ0I7UUFDM0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU8sZUFBZSxDQUFDLFFBQWEsRUFBRSxTQUFjO1FBQ25ELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxZQUFZO0lBRVosMEJBQTBCO0lBQ25CLFFBQVEsQ0FBQyxRQUFhLEVBQUUsR0FBUTtRQUNyQyxJQUFJLE9BQU8sR0FBRyxXQUFXLENBQUM7UUFDMUIsSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtZQUM5RixPQUFPLElBQUksZUFBZSxDQUFDO1NBQzVCO1FBRUQsSUFBSSxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxRQUFRLENBQUMsRUFBRTtZQUNsQyxPQUFPLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDO1NBQ2pEO1FBRUQsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFO1lBQ2IsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDO1NBQzVCO1FBRUQsSUFBSSxHQUFHLENBQUMsY0FBYyxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQztTQUNqQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxTQUFTLENBQUMsR0FBUSxFQUFFLGFBQW1CO1FBQzVDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLEdBQUcsQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQ25DLE1BQU0sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQzdDO2FBQU07WUFDTCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUM5QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFWCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN4QixFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzthQUMxQjtZQUVELElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDWixNQUFNLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7YUFDMUI7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxVQUFVO1FBQ2YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQWMsQ0FBQztRQUN4QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQXFCLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQXNCLENBQUM7UUFFbEQsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDO1FBRXhLLHFEQUFxRDtRQUNyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDbEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBRTdCLE1BQU0sYUFBYSxHQUFHLHNGQUFzRixDQUFDO1FBRTdHLG1EQUFtRDtRQUNuRCxNQUFNLHlCQUF5QixHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDakQsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0QixNQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7Z0JBQzVCLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO29CQUN6QixJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQy9CLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDM0IsdUVBQXVFO3dCQUN2RSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFOzRCQUMxRCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ2hDO3FCQUNGO2lCQUNGO2dCQUNELE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQzFFLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ2hCLHVDQUF1QztZQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV2RCxzQ0FBc0M7WUFDdEMsTUFBTSxNQUFNLEdBQW9CO2dCQUM5QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSTthQUNyQyxDQUFDO1lBRUYsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTSxXQUFXLENBQUMsS0FBNEIsRUFBRSxLQUFhLEVBQUUsRUFBTztRQUNyRSxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFELE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksV0FBVyxFQUFFO1lBQ2YsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBVSxDQUFDO1lBQ2pELElBQUksWUFBWSxFQUFFO2dCQUNoQixZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDeEI7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsR0FBRyxXQUFXLENBQUMsQ0FBQzthQUMxRDtTQUNGO2FBQU07WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTSxTQUFTO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU0sWUFBWSxDQUFDLElBQVksRUFBRSxRQUFnQixHQUFHO1FBQ25ELDZDQUE2QztRQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFO1lBQ3ZCLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsMEJBQTBCLENBQUM7U0FDM0Q7UUFDRCxPQUFPLElBQUksQ0FBQyxDQUFDLGdEQUFnRDtJQUMvRCxDQUFDO0lBc0JNLGlCQUFpQjtRQUN0QixzRkFBc0Y7UUFDdEYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRS9FLHdDQUF3QztRQUN4QyxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRU0sY0FBYztRQUNuQiw0REFBNEQ7UUFDNUQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLGlEQUFpRDtZQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzFCO2FBQU07WUFDTCxzREFBc0Q7WUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1NBQzlCO1FBRUQsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxPQUFPO1FBQ1osSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUM3QjthQUNJO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckssQ0FBQztJQXdCTSxhQUFhLENBQUMsVUFBa0IsRUFBRSxjQUFzQjtRQUM3RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2pDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUMvQixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO2dCQUMzQixHQUFHLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQzthQUM1QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFhLEVBQUUsSUFBYztRQUMxQyx3Q0FBd0M7UUFDeEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLEtBQUssQ0FBQztRQUNiLHNFQUFzRTtJQUN4RSxDQUFDO0lBQ0QsWUFBWTtJQUVaLG9CQUFvQjtJQUNaLDRCQUE0QjtRQUNsQyx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksS0FBSyxDQUFDO1FBRW5FLDZGQUE2RjtRQUM3RixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDMUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDeEI7UUFFRCxpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNyRSxVQUFVLEVBQUUsSUFBSTtZQUNoQixXQUFXLEVBQUUsQ0FBQztZQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDaEMsQ0FBQztRQUVGLG9GQUFvRjtRQUNwRixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzNCLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUU7Z0JBQ2hELE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksa0ZBQWtGLENBQUMsQ0FBQzthQUMvSDtpQkFDSTtnQkFDSCxJQUFJLENBQUMsa0JBQWtCLEdBQUc7b0JBQ3hCLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLO29CQUM3QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVU7aUJBQ2pGLENBQUM7YUFDSDtTQUNGO1FBRUQsbUZBQW1GO1FBQ25GLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVPLCtCQUErQjtRQUNyQyxxRUFBcUU7UUFDckUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDakM7UUFFRCwrQ0FBK0M7UUFDL0MsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3ZDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUNsQiw2REFBNkQ7WUFDN0QsSUFBSSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUM7WUFFM0Isd0VBQXdFO1lBQ3hFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1lBRTlDLDZFQUE2RTtZQUM3RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRTtnQkFDakQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7YUFDL0I7WUFFRCxtQ0FBbUM7WUFDbkMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFFL0IsMkRBQTJEO1lBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYix3REFBd0Q7WUFDeEQsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ2pDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2Y7WUFFRCxpRUFBaUU7WUFDakUsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztZQUNyQyxPQUFPLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBVTtRQUNoQyxNQUFNLGNBQWMsR0FBRyxHQUFHLEVBQUU7WUFDMUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pHLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzRSxNQUFNLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVGLE1BQU0sYUFBYSxHQUFrQixFQUFFLG9CQUFvQixFQUFFLENBQUM7WUFFOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUc7Z0JBQ3ZCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO2dCQUN6QixvQkFBb0I7YUFDckIsQ0FBQztZQUVGLElBQUksY0FBYyxLQUFLLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDbEQsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7YUFDNUQ7WUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFFM0QsTUFBTSxnQkFBZ0IsR0FBcUI7Z0JBQ3pDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO2dCQUM1QyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQzFFLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRO2dCQUN6QyxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVk7Z0JBQ2pDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQztnQkFDeEMsZ0JBQWdCLEVBQUUsU0FBUzthQUM1QixDQUFDO1lBRUYsSUFBSSxrQkFBa0IsSUFBSSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9DLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7YUFDN0M7WUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUV4RSxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUM7UUFHRix1Q0FBdUM7UUFDdkMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWtDLENBQUMsQ0FBQyxxQkFBcUI7UUFDckYsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLHlCQUF5QjtRQUM1RSxNQUFNLFlBQVksR0FBRyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUU1RixvRkFBb0Y7UUFDcEYsK0NBQStDO1FBRS9DLG9FQUFvRTtRQUNwRSxNQUFNLFdBQVcsR0FBRztZQUNsQixJQUFJLEVBQUUsYUFBYTtZQUNuQixNQUFNLEVBQUUsS0FBSztZQUNiLElBQUksRUFBRSxZQUFZO1lBQ2xCLFdBQVcsRUFBRSxlQUFlLENBQUMsTUFBTTtTQUNYLENBQUM7UUFFM0IsbUZBQW1GO1FBQ25GLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBRztZQUNoQyxZQUFZLEVBQUUsV0FBVztZQUN6QixXQUFXLEVBQUUsZUFBZSxDQUFDLE1BQU07U0FDcEMsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNwQix3QkFBd0IsRUFDeEIsc0hBQXNILEVBQ3RIO2dCQUNFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFpQjtnQkFDcEQsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQWlCO2FBQ3BELEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FDYixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDbEIsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO29CQUNuQixjQUFjLEVBQUUsQ0FBQztpQkFDbEI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQ0k7WUFDSCxjQUFjLEVBQUUsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxLQUFVO1FBQ25DLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFrQyxDQUFDLENBQUMscUJBQXFCO1FBQ3JGLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyx5QkFBeUI7UUFFNUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGlIQUFpSCxFQUN2SjtZQUNFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFpQjtZQUNwRCxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBaUI7U0FDcEQsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlCLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRTtnQkFDbkIsdUNBQXVDO2dCQUN2QyxNQUFNLFlBQVksR0FBRyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztnQkFFNUYsb0ZBQW9GO2dCQUNwRiwrQ0FBK0M7Z0JBRS9DLG9FQUFvRTtnQkFDcEUsTUFBTSxXQUFXLEdBQUc7b0JBQ2xCLElBQUksRUFBRSxhQUFhO29CQUNuQixNQUFNLEVBQUUsS0FBSztvQkFDYixJQUFJLEVBQUUsWUFBWTtvQkFDbEIsV0FBVyxFQUFFLGVBQWUsQ0FBQyxNQUFNO2lCQUNYLENBQUM7Z0JBRTNCLG1GQUFtRjtnQkFDbkYsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHO29CQUNoQyxZQUFZLEVBQUUsV0FBVztvQkFDekIsV0FBVyxFQUFFLGVBQWUsQ0FBQyxNQUFNO2lCQUNwQyxDQUFDO2dCQUVGLDBEQUEwRDtnQkFDMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBRXpFLCtCQUErQjtnQkFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDM0IsSUFBSSxHQUFHLENBQUMsbUJBQW1CLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxtQkFBbUIsS0FBSyxJQUFJLEVBQUU7d0JBQzdFLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixDQUFDO3dCQUNyQyxPQUFPLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztxQkFDaEM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsc0NBQXNDO2dCQUN0QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUN4QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO2dCQUVILDRFQUE0RTtnQkFDNUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7b0JBQ3pGLElBQUksVUFBVSxFQUFFO3dCQUNkLHFDQUFxQzt3QkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFFckUsMENBQTBDO3dCQUMxQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQzt3QkFFeEMsc0RBQXNEO3dCQUN0RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUV2RSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztxQkFDbkc7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFlBQVksQ0FBQyxLQUFhO1FBQy9CLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQ2xDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRW5DLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDdEIsSUFBSSxFQUFFLHlCQUF5QjtnQkFDL0IsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7Z0JBQ3RDLElBQUksRUFBRSxFQUFFO2FBQ2dCLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDckUsSUFBSSxDQUFDLE9BQU8sR0FBRztnQkFDYixRQUFRLEVBQUUsS0FBSztnQkFDZixPQUFPLEVBQUUsSUFBSTtnQkFDYixVQUFVLEVBQUUsS0FBSztnQkFDakIsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCO2dCQUM5QyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUI7Z0JBQ3BDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsVUFBVTthQUN6RSxDQUFBO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDNUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7WUFDbkksSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3RCLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ3hCLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQzNGLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7SUFFTyxnQ0FBZ0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUU7WUFDeEMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEtBQUssQ0FBQztZQUUxQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoRSxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsWUFBWSxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMseUJBQXlCLEVBQUU7Z0JBQzdGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNGLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUVqRSxJQUFJLGlCQUFpQixFQUFFO29CQUNyQixJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDO2lCQUMxQzthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBQ0QsWUFBWTtJQUVaLHFDQUFxQztJQUM5QixvQkFBb0IsQ0FBQyxLQUFhO1FBQ3ZDLCtEQUErRDtRQUMvRCxNQUFNLHNCQUFzQixHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLHlCQUF5QixDQUFDO1FBQzFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLEVBQUU7WUFDdkMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDZjtRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxLQUFhO1FBQ3pDLCtEQUErRDtRQUMvRCxNQUFNLHdCQUF3QixHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLDJCQUEyQixDQUFDO1FBQzlFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLEVBQUU7WUFDekMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDZjtRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTSx1QkFBdUIsQ0FBQyxRQUFhLEVBQUUsUUFBYTtRQUN6RCwrREFBK0Q7UUFDL0QsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSw0QkFBNEIsQ0FBQztRQUMvRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO1lBQ3pDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2Y7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNELFlBQVk7SUFFWixxQkFBcUI7SUFDYixrQkFBa0IsQ0FBQyxRQUFvQjtRQUM3QyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDckIsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUMvQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQzdCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLElBQUksRUFBRSxDQUFDO1lBQ2hFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzNCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ25CLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDakIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDbkIsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDdkUsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDekUsTUFBTSxVQUFVLEdBQWtCLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUM3RyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQzNELENBQUMsQ0FBQyxDQUFDO29CQUNILE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUV2QyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDWCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztxQkFDbkY7eUJBQ0k7d0JBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDO3FCQUMxQjtvQkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO2dCQUNuRCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEtBQUssQ0FBQztZQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU0sY0FBYyxDQUFDLEtBQVU7UUFDOUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVNLGFBQWEsQ0FBQyxJQUFTLEVBQUUsUUFBZ0I7UUFDOUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNsRSxJQUFJLElBQUksQ0FBQyw2QkFBNkIsRUFBRTtZQUN0QyxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkY7UUFDRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNoQixLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUU7WUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7WUFDOUQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDckY7SUFDSCxDQUFDO0lBRU0seUJBQXlCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRU8sbUJBQW1CLENBQUMsUUFBUTtRQUNsQyxPQUFPLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVNLHlCQUF5QixDQUFDLFdBQW1CLEVBQUUsUUFBYSxFQUFFLFFBQWdCO1FBQ25GLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBYyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEUsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QjthQUNJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ2pDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxZQUFZO0lBRVosZUFBZTtJQUNmLHNIQUFzSDtJQUMvRyxxQkFBcUI7UUFDMUIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxRSxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUUsSUFBSSxVQUFVLEdBQUcsWUFBWSxFQUFFO1lBQzdCLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxrREFBa0QsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRXRILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLG1CQUFtQixHQUFHLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLHNDQUFzQztTQUM3STtJQUNILENBQUM7SUFDRCxZQUFZO0lBRVoseUJBQXlCO0lBQ2xCLFlBQVksQ0FBQyxLQUFVO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFzQjtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFTSxVQUFVLENBQUMsSUFBc0I7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRU0sc0JBQXNCLENBQUMsS0FBVSxFQUFFLFFBQWEsRUFBRSxNQUFXO1FBQ2xFLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsWUFBWTtJQUVaLHlCQUF5QjtJQUNsQixVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUU7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFFbEIsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFekIsNERBQTREO1FBQzVELE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QixNQUFNLFVBQVUsR0FBa0IsRUFBRSxDQUFDO1lBQ3JDLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRTtnQkFDbEIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3JDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxhQUFhLEVBQUU7b0JBQzlCLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsK0NBQStDLENBQUMsQ0FBQztpQkFDbkY7cUJBQ0k7b0JBQ0gsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2lCQUN4RTthQUNGO1lBQ0QsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3hCLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1lBRUQsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUvQyxrQkFBa0I7UUFDbEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTtRQUN2RCxzQ0FBc0M7UUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFNUMsNkJBQTZCO1FBQzdCLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtZQUNuQiwrQkFBK0I7WUFDL0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6QyxJQUFJLFNBQVMsRUFBRTtnQkFDYix5Q0FBeUM7Z0JBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFFdEQsc0NBQXNDO2dCQUN0QyxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQy9DLE9BQU87b0JBQ0wsZ0VBQWdFO29CQUNoRSxDQUFDLEtBQUs7d0JBQ04sUUFBUSxLQUFLLFNBQVM7d0JBQ3RCLDJEQUEyRDt3QkFDM0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLGtCQUFrQjt3QkFDdEMscURBQXFEO3dCQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQzFELENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBRUgsaUZBQWlGO2dCQUNqRixJQUFJLFdBQVcsRUFBRTtvQkFDZixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDbkcsT0FBTztpQkFDUjthQUNGO1lBRUQsOEVBQThFO1lBQzlFLElBQUksS0FBSyxFQUFFO2dCQUNULGlDQUFpQztnQkFDakMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN4QztpQkFBTTtnQkFDTCwwQ0FBMEM7Z0JBQzFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7YUFDOUM7WUFFRCxnREFBZ0Q7WUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRU0sYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtRQUN2Qyw2QkFBNkI7UUFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU0sV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7UUFDL0Msb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpCLHNGQUFzRjtRQUN0RixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekIsTUFBTSxVQUFVLEdBQWtCLEVBQUUsQ0FBQztZQUNyQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2xCLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO29CQUM5QixVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLCtDQUErQyxDQUFDLENBQUM7aUJBQ25GO3FCQUNJO29CQUNILFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0NBQW9DLENBQUMsQ0FBQztpQkFDeEU7YUFDRjtZQUNELElBQUksR0FBRyxDQUFDLGdCQUFnQixFQUFFO2dCQUN4QixVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQzthQUMzRDtZQUVELGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztRQUVILHdDQUF3QztRQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRS9DLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztRQUMvQixNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLGFBQWEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7UUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDekUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFdkIsOEJBQThCO1FBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEIsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYztRQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBUyxFQUFFLElBQVcsRUFBRSxHQUFXO1FBQ3RELEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDaEMsT0FBTyxHQUFHLENBQUM7YUFDWjtTQUNGO1FBRUQsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUM7SUFDRCxZQUFZO0lBRVoscUJBQXFCO0lBQ2Isa0JBQWtCO1FBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyRDtJQUNILENBQUM7SUFFTSxNQUFNO1FBQ1gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUUvQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDekMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNyQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ3hDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUI7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUN0QixJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO2dCQUM5QixJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFO2FBQ1IsQ0FBQyxDQUFDO1NBQzdCO2FBQ0k7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQzFDLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssRUFBRTtvQkFDL0IsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLElBQUksZ0JBQWdCLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQ3RMLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQzt3QkFDNUIsR0FBRyxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUs7d0JBQ25DLEdBQUcsRUFBRSxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDO3dCQUM3QyxLQUFLLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUs7cUJBQ25DLENBQUMsQ0FBQTtpQkFDSDtZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVNLFVBQVU7UUFDZixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDM0M7SUFDSCxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQWE7UUFDbkMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQWlCLENBQUM7UUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMxQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sY0FBYztRQUNuQixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxLQUFhO1FBQ2hELFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNsQixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLEVBQUU7b0JBQ3RDLE9BQU8sVUFBVSxDQUFDO2lCQUNuQjtnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkO2dCQUNFLE9BQU8sR0FBRyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBQ0QsWUFBWTtJQUVaLHNDQUFzQztJQUN0QyxJQUFXLFlBQVksQ0FBQyxRQUFnQjtRQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxZQUFZLENBQUMsS0FBWTtRQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQyxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxNQUF5QjtRQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUNELFlBQVk7SUFFWiw4QkFBOEI7SUFDdkIsWUFBWSxDQUFDLEtBQXdCO1FBQzFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVPLHVCQUF1QixDQUFDLEtBQXdCO1FBQ3RELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFO1lBQzVCLE9BQU87U0FDUjtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLDRCQUE0QixDQUFDLEtBQXdCLEVBQUUsVUFBZTtRQUM1RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRCxPQUFPLGlCQUFpQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDO0lBQ2hFLENBQUM7SUFFTyxlQUFlLENBQUMsV0FBbUI7UUFDekMsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxXQUFXLENBQUMsUUFBYTtRQUMvQixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVPLDJCQUEyQixDQUFDLEtBQXdCO1FBQzFELE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVuRixJQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVUsRUFBRTtZQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakQsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFSyxjQUFjLENBQUMsS0FBMEI7UUFDN0MsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JGLElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqRCxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztJQUFBLENBQUM7OzJHQXQyQ1MsY0FBYzsrRkFBZCxjQUFjLG1HQUNkLHlCQUF5QixxRkM5RHRDLDhwaENBMm9CQSx1OW9DRDlrQmEsY0FBYyw2bUhBTGI7UUFDViw0QkFBNEI7S0FDN0I7MkZBR1UsY0FBYztrQkFUMUIsU0FBUzsrQkFDRSxXQUFXLGNBR1Q7d0JBQ1YsNEJBQTRCO3FCQUM3Qjt3aEJBSXVELGdCQUFnQjtzQkFBdkUsU0FBUzt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZGVsYXkgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRXhjZWxFeHBvcnREYXRhIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZXhjZWwtZXhwb3J0JztcclxuaW1wb3J0IHsgRGV0YWlsQ29sbGFwc2VFdmVudCwgRGV0YWlsRXhwYW5kRXZlbnQsIEdyaWRJdGVtLCBTZWxlY3RhYmxlU2V0dGluZ3MsIFxyXG4gIEdyaWREYXRhUmVzdWx0LCBEYXRhU3RhdGVDaGFuZ2VFdmVudCwgUGFnZUNoYW5nZUV2ZW50LCBDZWxsQ2xpY2tFdmVudCwgR3JpZENvbXBvbmVudCwgUm93QXJncyAgICBcclxufSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkJztcclxuaW1wb3J0IHsgU29ydERlc2NyaXB0b3IsIFN0YXRlLCBwcm9jZXNzLCBHcm91cERlc2NyaXB0b3IgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tZGF0YS1xdWVyeSc7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IERhdGFMaXN0aW5nRmllbGRCYXNlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9kYXRhbGlzdGluZ2ZpZWxkYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IGhpZGVBbmRTaG93VmVydGljYWxBbmltYXRpb24gfSBmcm9tICcuLi9hbmltYXRpb25zL2NvbXBvbmVudC1hbmltYXRpb25zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29uc3RhbnQgfSBmcm9tICcuLi9jb25zdGFudHMvY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBNYWluU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21haW4uc2VydmljZSc7XHJcbmltcG9ydCB7IEVsZW1lbnRDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2VsZW1lbnRjb250YWluZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgWkdyaWRCaW5kaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi96Z3JpZC5iaW5kaW5nLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFpHcmlkU2VydmljZSB9IGZyb20gJy4vemdyaWQuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgV2ViQXBpU2VydmljZSwgVG9hc3RTZXJ2aWNlLFxyXG4gIFpGaWVsZCwgWkdyb3VwLCBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIFpDb3JlU2VydmljZSwgU3RvcmFnZVNlc3Npb25TZXJ2aWNlLCBGb250QXdlU29tZVNlcnZpY2UsXHJcbiAgWkdyaWRQb3N0QXBpUGFyYW1zLCBaR3JpZFNldHRpbmdzLCBaR3JpZEN1c3RvbUNvbHVtbiwgUmVzb3VyY2VBcGlTZXJ2aWNlLCBTdGF0ZVR5cGUsIFN0YXRlU2V0dGluZ0luZm8sIEF1dGhTZXJ2aWNlLCBTdGF0ZVNldHRpbmdTZXJ2aWNlLFxyXG4gIEFsZXJ0QnV0dG9uLCBBbGVydFNlcnZpY2UsXHJcbiAgVHJpZ2dlckZyb21UeXBlXHJcbn0gZnJvbSAnbW1oZ2xvYmFsLXpjb3JlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgWkdyaWQge1xyXG4gIHBhcmFtczogWkdyaWRQb3N0QXBpUGFyYW1zO1xyXG4gIHN0YXRlOiBTdGF0ZTtcclxuICBjb2x1bW5zOiBhbnlbXTtcclxuICBwYWdpbmF0aW9uQXBpUG9zdFVybDogc3RyaW5nO1xyXG4gIGRhdGE6IFpGaWVsZDtcclxuICBncm91cDogWkdyb3VwO1xyXG4gIHpncmlkOiBaR3JpZEJpbmRpbmdEaXJlY3RpdmU7XHJcbiAgaW5saW5lRWRpdGVkRm9ybUdyb3VwczogRm9ybUdyb3VwO1xyXG4gIGdldEdyaWREYXRhOiAoKSA9PiBhbnlbXTtcclxuICBnZXREYXRhOiAoKSA9PiB2b2lkO1xyXG4gIGNsZWFyRGF0YTogKCkgPT4gdm9pZDtcclxuICBzZXREYXRhOiAoZGF0YTogYW55KSA9PiB2b2lkO1xyXG4gIHNldENvbHVtbnM6IChjb2x1bW5GaWVsZHNOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikgPT4gdm9pZDtcclxuICAkc2V0Q29sdW1uczogKGNvbHVtbkZpZWxkc05hbWU6IHN0cmluZywgY29sdW1uczogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSA9PiBPYnNlcnZhYmxlPGFueT47XHJcbiAgZ2V0Rm9ybUNvbnRyb2xEYXRhKCk6IGFueVtdO1xyXG59XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtemdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96Z3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vemdyaWQuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICBoaWRlQW5kU2hvd1ZlcnRpY2FsQW5pbWF0aW9uXHJcbiAgXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFpncmlkQ29tcG9uZW50IGV4dGVuZHMgRGF0YUxpc3RpbmdGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZChFbGVtZW50Q29udGFpbmVyRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBlbGVtZW50Q29udGFpbmVyITogRWxlbWVudENvbnRhaW5lckRpcmVjdGl2ZTtcclxuXHJcbiAgemdyaWQ6IGFueSA9IG51bGw7XHJcbiAgb2F1dGhVcmw6IHN0cmluZyA9IG51bGw7XHJcbiAgZ3JpZERhdGE6IEdyaWREYXRhUmVzdWx0O1xyXG4gIHNlbGVjdGFibGVTZXR0aW5nczogU2VsZWN0YWJsZVNldHRpbmdzO1xyXG4gIHJvd1NlbGVjdGlvbjogc3RyaW5nW10gPSBbXTtcclxuICBteVNlbGVjdGlvbiA9IG5ldyBNYXAoKTtcclxuICBpbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0ge307XHJcbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwOyAvLyBmb3Iga2VuZG8gZ3JpZCBidWlsdC1pblxyXG4gIHB1YmxpYyBwcmV2aW91c05leHQ6IGJvb2xlYW47XHJcbiAgcHVibGljIGdyaWRCdG47XHJcbiAgcHVibGljIHBhZ2VhYmxlOiBhbnkgPSBmYWxzZTtcclxuICBwdWJsaWMgZmlsdGVyR3JvdXAgPSBuZXcgWkdyb3VwKCk7XHJcbiAgcHVibGljIGFkdmZpbHRlckdyb3VwID0gbmV3IFpHcm91cCgpO1xyXG4gIHB1YmxpYyBpc1Nob3dBZHZGaWx0ZXIgPSBmYWxzZTtcclxuICBwdWJsaWMgZ3JpZFRpdGxlOiBhbnk7XHJcbiAgcHVibGljIGlzSW5saW5lRWRpdElucHV0RmllbGRMb2FkaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSB0ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3VwcztcclxuICBwcml2YXRlIGlzQ29sdW1uSGVhZGVyVHJhbnNsYXRlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93UmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGNoZWNrYm94Q29sdW1uUGlubmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGdyb3VwRGVzY3JpcHRvcjogR3JvdXBEZXNjcmlwdG9yW10gPSBbXTtcclxuXHJcbiAgXHJcbiAgcGFyYW1zOiBaR3JpZFBvc3RBcGlQYXJhbXMgPSB7XHJcbiAgICByZWZlcklkOiBudWxsLFxyXG4gICAgcGFnZU5vOiAwLFxyXG4gICAgcGFnZVNpemU6IDIwLFxyXG4gICAgc29ydENvbHVtbk5hbWU6ICcnLFxyXG4gICAgc29ydE9yZGVyOiAnJyxcclxuICAgIHNvcnRDb2x1bW5OYW1lczogW10sXHJcbiAgICBzb3J0T3JkZXJzOiBbXSxcclxuICAgIGZpbHRlclBhcmFtczogW10sXHJcbiAgICBwYXJhbWV0ZXJzOiAnJyxcclxuICAgIGZpbHRlcnM6ICcnLFxyXG4gICAgY29sdW1uczogJycsXHJcbiAgICBncmFudFR5cGU6IDRcclxuICB9O1xyXG5cclxuICBncmlkU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICBjb2x1bW5zOiBhbnlbXTtcclxuICBnZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZDogYW55W107XHJcbiAgZWRpdGFibGVDb2x1bW5zOiBhbnlbXTtcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwYWdlU2l6ZXM6IGJvb2xlYW4gfCBhbnlbXTtcclxuICBncmlkU3RvcmFnZUtleTogc3RyaW5nO1xyXG4gIGdyaWREZWZhdWx0U3RhdGVFeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzTmV3OiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIGVkaXRlZFJvd0luZGV4OiBudW1iZXI7XHJcbiAgcHVibGljIGdyaWRTZXR0aW5nOiBaR3JpZFNldHRpbmdzO1xyXG4gIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY29tcG9uZW50U2VydmljZTogWkNvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZm9udEF3ZVNvbWVTZXJ2aWNlOiBGb250QXdlU29tZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHpjb3JlU2VydmljZTogWkNvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtYWluU2VydmljZTogTWFpblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBaR3JpZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0YXRlU2V0dGluZ1NlcnZpY2U6IFN0YXRlU2V0dGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLnpjb3JlU2VydmljZS5nZXRFbnZpcm9ubWVudCgpO1xyXG4gICAgdGhpcy5vYXV0aFVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuZTFPYXV0aFVybH0vYDtcclxuICAgIHRoaXMuYWxsUmVzdWx0cyA9IHRoaXMuYWxsUmVzdWx0cy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5yZWZyZXNoRGF0YSA9IHRoaXMucmVmcmVzaERhdGEuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuY2xlYXJEYXRhID0gdGhpcy5jbGVhckRhdGEuYmluZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIuc2V0dXBJbm5lckZpZWxkKCk7XHJcbiAgICB0aGlzLnNldHVwRmlsdGVyRmVhdHVyZSgpO1xyXG4gICAgdGhpcy5zZXR1cEdyaWRCdXR0b25zKCk7XHJcbiAgICB0aGlzLnNldHVwR3JpZENvbXBvbmVudEF0dHJpYnV0ZXMoKTtcclxuICAgIHRoaXMuZ3JpZFNldHRpbmcgPSB7IGdyaWRTdGF0ZTogdGhpcy5ncmlkU2VydmljZS5zZXR1cEdyaWRTZXR0aW5nKHRoaXMuZGF0YSkgfTtcclxuXHJcbiAgICB0aGlzLnNldHVwU3Vic2NyaXB0aW9uRm9yR3JpZFN1YmplY3QoKTtcclxuXHJcbiAgICBzdXBlci50cmFuc2xhdGVUb29sQmFySXRlbXMoKS5waXBlKHRhcCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JpZENhbGxiYWNrKHRoaXMuZ3JvdXApO1xyXG4gICAgfSkpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgY29uc3QgaXNCYWNrTmF2aWdhdGVkID0gKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ25hdmlnYXRlZFJlbG9hZEdyaWQnKSA9PT0gJ3RydWUnKTtcclxuICAgIHRoaXMuc2hvd0hpZGVSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24oKTtcclxuXHJcbiAgICBpZiAoaXNCYWNrTmF2aWdhdGVkKSB7XHJcbiAgICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldCgnbmF2aWdhdGVkUmVsb2FkR3JpZCcsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEdyaWQgU3RhdGUgKHBhZ2luYXRpb24sIHNvcnRhYmxlLCBmaWx0ZXIsIG9yZGVyaW5nKVxyXG4gIHB1YmxpYyBkYXRhU3RhdGVDaGFuZ2Uoc3RhdGU6IERhdGFTdGF0ZUNoYW5nZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICB0aGlzLnpncmlkLmRhdGFTdGF0ZUNoYW5nZShzdGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmlsdGVyYWJsZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNvcnRhYmxlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9ja2VkKGNvbFNldHRpbmc6IGFueSkge1xyXG4gICAgaWYgKGNvbFNldHRpbmdbJ3Bpbm5lZExlZnQnXSA9PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHVibGljIG9uRXhjZWxFeHBvcnQoZTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBjb2xSZXF1aXJlZEZvcm1hdCA9IFtdO1xyXG5cclxuICAgIC8vIENvbGxlY3QgY29sdW1ucyB0aGF0IGhhdmUgYSBzcGVjaWZpYyBFeGNlbCBjZWxsIGZvcm1hdFxyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgaWYgKGNvbC5FeGNlbENlbGxGb3JtYXQpIHtcclxuICAgICAgICBjb2xSZXF1aXJlZEZvcm1hdC5wdXNoKHsgY29sTmFtZTogY29sLkRpc3BsYXlOYW1lID8/IGNvbC5OYW1lLCBjZWxsRm9ybWF0OiBjb2wuRXhjZWxDZWxsRm9ybWF0LCBjb2xJbmRleDogbnVsbCB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGNvbFJlcXVpcmVkRm9ybWF0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZS53b3JrYm9vay5zaGVldHNbMF0ucm93cy5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIGlmIChyb3cudHlwZSA9PT0gJ2hlYWRlcicpIHtcclxuICAgICAgICAvLyBDaGVjayBoZWFkZXIgY2VsbHMgdG8gZmluZCBtYXRjaGluZyBjb2x1bW4gbmFtZXMgYW5kIHN0b3JlIHRoZWlyIGluZGV4XHJcbiAgICAgICAgcm93LmNlbGxzLmZvckVhY2goKGNlbGwsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICBjb2xSZXF1aXJlZEZvcm1hdC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjZWxsLnZhbHVlID09PSBjb2wuY29sTmFtZSkge1xyXG4gICAgICAgICAgICAgIGNvbC5jb2xJbmRleCA9IGluZGV4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChyb3cudHlwZSA9PT0gJ2RhdGEnKSB7XHJcbiAgICAgICAgLy8gQXBwbHkgdGhlIGZvcm1hdCB0byBjZWxscyBpbiBkYXRhIHJvd3MgaWYgdGhlaXIgaW5kZXggbWF0Y2hlc1xyXG4gICAgICAgIHJvdy5jZWxscy5mb3JFYWNoKChjZWxsLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgY29sUmVxdWlyZWRGb3JtYXQuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IGNvbC5jb2xJbmRleCkge1xyXG4gICAgICAgICAgICAgIGNlbGwuZm9ybWF0ID0gY29sLmNlbGxGb3JtYXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIENvbHVtbnNcclxuICBwdWJsaWMgaXNTZWxlY3RPcHRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5zZWxlY3RhYmxlU2V0dGluZ3MgPSB7XHJcbiAgICAgICAgY2hlY2tib3hPbmx5OiB0aGlzLmRhdGEuQ2hlY2tib3hPbmx5ID8/IGZhbHNlLFxyXG4gICAgICAgIG1vZGU6ICh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucz8udG9Mb3dlckNhc2UoKSA9PT0gJ211bHRpcGxlJykgPyAnbXVsdGlwbGUnIDogJ3NpbmdsZSdcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q29sdW1ucyhjb2x1bW5OYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikge1xyXG4gICAgdGhpcy5ncm91cFtjb2x1bW5OYW1lXSA9IHRoaXMud3JhcENvbHVtbk5hbWVzSW5GaWVsZEVsZW1lbnQoY29sdW1ucyk7XHJcbiAgICB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyAkc2V0Q29sdW1ucyhjb2x1bW5OYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0aGlzLmdyb3VwW2NvbHVtbk5hbWVdID0gdGhpcy53cmFwQ29sdW1uTmFtZXNJbkZpZWxkRWxlbWVudChjb2x1bW5zKTtcclxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd3JhcENvbHVtbk5hbWVzSW5GaWVsZEVsZW1lbnQoY29sdW1uTGlzdDogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSB7XHJcbiAgICByZXR1cm4gb2YoY29sdW1uTGlzdC5tYXAoY29sdW1uID0+IHtcclxuICAgICAgY29uc3QgaXNIaWRkZW46IGJvb2xlYW4gPSBjb2x1bW4uSGlkZGVuO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIE5hbWU6IGNvbHVtbi5OYW1lLFxyXG4gICAgICAgIFZhbHVlOiBjb2x1bW4uQ29kZSxcclxuICAgICAgICBUeXBlOiBjb2x1bW4uVHlwZSxcclxuICAgICAgICBncmlkQ29sVmlzaWJsZTogIWlzSGlkZGVuLFxyXG4gICAgICAgIEVuYWJsZUhpZGluZzogY29sdW1uLkVuYWJsZUhpZGluZyB8fCBmYWxzZSxcclxuICAgICAgICBFbmFibGVHcmlkVmFsdWU6IGNvbHVtbi5FbmFibGVHcmlkVmFsdWUgfHwgZmFsc2UsXHJcbiAgICAgICAgd2lkdGg6IDEwMCArIGNvbHVtbi5OYW1lLmxlbmd0aCAqIDQsXHJcbiAgICAgICAgZW5hYmxlRmlsdGVyaW5nOiBmYWxzZSxcclxuICAgICAgICBlbmFibGVTb3J0aW5nOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZVBpbm5pbmc6IHRydWUsXHJcbiAgICAgICAgRGl2Q2xhc3M6ICdjb2wteHMtMTIgY29sLXNtLTYnLFxyXG4gICAgICAgIElzRWRpdGFibGVJbkdyaWQ6IGNvbHVtbi5FZGl0YWJsZVxyXG4gICAgICB9O1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUdyaWRDb2x1bW5zKGdyaWRTZXR0aW5nPzogWkdyaWRTZXR0aW5ncyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBjb2x1bW5GaWVsZHMkOiBPYnNlcnZhYmxlPGFueT4gPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoXHJcbiAgICAgIHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMsXHJcbiAgICAgIHRoaXMuZ3JvdXBcclxuICAgICkgfHwgb2YoW10pO1xyXG5cclxuICAgIGlmICghdGhpcy5kYXRhLkNvbHVtbkZpZWxkcykge1xyXG4gICAgICBjb25zb2xlLndhcm4oYEludmFsaWQvRW1wdHkgZ3JpZCgke3RoaXMuZGF0YS5OYW1lfSkgY29sdW1uRmllbGRgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWNvbHVtbkZpZWxkcyQpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0ZhaWwgdG8gZ2VuZXJhdGUgZ3JpZCBjb2x1bW4gZmllbGRzLicpO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEuQ29sdW1uRmllbGRzKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5ncm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbkZpZWxkcyQucGlwZShcclxuICAgICAgdGFwKGNvbHVtbkZpZWxkID0+IHtcclxuICAgICAgICBpZiAoIWNvbHVtbkZpZWxkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQvRW1wdHkgZ3JpZCgke3RoaXMuZGF0YS5OYW1lfSkgZGF0YSB0byBnZW5lcmF0ZSBjb2x1bW5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICAgIGNvbnN0IGdlbmVyYXRlSGlkZGVuQ29sdW1ucyA9IFtdO1xyXG5cclxuICAgICAgICAgIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JpZENvbHVtbnMoe1xyXG4gICAgICAgICAgICBjb2x1bW5GaWVsZDogY29sdW1uRmllbGQsXHJcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcclxuICAgICAgICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGNvbHVtbkNvbmZpZ3VyYXRpb25zOiBncmlkU2V0dGluZz8uY29sdW1uQ29uZmlndXJhdGlvbnMsXHJcbiAgICAgICAgICAgIGdlbmVyYXRlSGlkZGVuQ29sdW1uczogZ2VuZXJhdGVIaWRkZW5Db2x1bW5zLFxyXG4gICAgICAgICAgICBncmlkQXR0cmlidXRlczogdGhpcy5kYXRhXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoZ2VuZXJhdGVIaWRkZW5Db2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCA9IGdlbmVyYXRlSGlkZGVuQ29sdW1ucy5tYXAoZmllbGQgPT4gKHsgZmllbGQ6IGZpZWxkLCBWaXNpYmxlOiB0cnVlLCBJc1JlcXVpcmVkOiBmYWxzZSwgVmFsdWU6IGZpZWxkIH0pKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBnZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQucHVzaChmaWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5jb2x1bW5zKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRJY29uTmFtZShncmlkQ2VsbFJlcGxhY2VWYWx1ZTogYW55LCB2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoZ3JpZENlbGxSZXBsYWNlVmFsdWUgJiYgZ3JpZENlbGxSZXBsYWNlVmFsdWVbdmFsdWVdKSB7XHJcbiAgICAgIHJldHVybiBaQ29tcG9uZW50SGVscGVyLmdldEZvbnRBd2Vzb21lKGdyaWRDZWxsUmVwbGFjZVZhbHVlW3ZhbHVlXSwgdGhpcy5mb250QXdlU29tZVNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPbmNlbGwgY2xpY2sgaGFuZGxpbmdcclxuICAvLyAxLiBpbkNlbGwgRWRpdFxyXG4gIC8vIDIuIE9uSXRlbUNsaWNrXHJcbiAgLy8gMy4gTmF2aWdhdGUgdG8gRm9ybSBQYWdlXHJcbiAgLy8gNC4gU2hvdyBGb3JtIFBhZ2UgaW4gdGhlIHNhbWUgcGFnZSAoREVDIGFuZCBEcmF3ZXIpXHJcbiAgcHVibGljIGNlbGxDbGlja0hhbmRsZXIoZXZlbnQ6IENlbGxDbGlja0V2ZW50KSB7XHJcbiAgICAvLyBSaWdodCBjbGljayBoYW5kbGVyXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NvbnRleHRtZW51Jykge1xyXG4gICAgICB0aGlzLmRhdGFJdGVtQ29udGV4dE1lbnUuc2hvd0NvbnRleHRNZW51TWFudWFsbHkoZXZlbnQsIGV2ZW50LmRhdGFJdGVtKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRpc2FibGVBbGxDb2x1bW5DZWxsQ2xpY2tIYW5kbGVyID0gdGhpcy5kYXRhLkRpc2FibGVDZWxsQ2xpY2tIYW5kbGVyID8gdGhpcy5kYXRhLkRpc2FibGVDZWxsQ2xpY2tIYW5kbGVyIDogZmFsc2U7XHJcbiAgICBjb25zdCBpc0NvbW1hbmRDb2x1bW4gPSBldmVudC5jb2x1bW4uY29uc3RydWN0b3IubmFtZSA9PSAnQ29tbWFuZENvbHVtbkNvbXBvbmVudCcgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMudG9vbHRpcERpcikge1xyXG4gICAgICB0aGlzLnRvb2x0aXBEaXIuaGlkZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZGlzYWJsZUFsbENvbHVtbkNlbGxDbGlja0hhbmRsZXIgJiYgIWlzQ29tbWFuZENvbHVtbikge1xyXG4gICAgICBjb25zdCBpbkNlbGxFZGl0YWJsZSA9IHRoaXMuZGF0YS5JbkNlbGxFZGl0YWJsZSA/IHRoaXMuZGF0YS5JbkNlbGxFZGl0YWJsZSA6IGZhbHNlO1xyXG4gICAgICBpZiAoaW5DZWxsRWRpdGFibGUpIHtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIocyA9PiBzLmlzRWRpdGFibGVJbkRhdGFJdGVtID09PSB0cnVlKTtcclxuICAgICAgICBpZiAoISF0aGlzLmVkaXRhYmxlQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMubWFwKHMgPT4gZXZlbnQuc2VuZGVyLmVkaXRDZWxsKGV2ZW50LnJvd0luZGV4LCBldmVudC5jb2x1bW5JbmRleCwgdGhpcy5jcmVhdGVGb3JtR3JvdXAoZXZlbnQuZGF0YUl0ZW0sIHMuZmllbGQpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjZWxsQ2xpY2sgZXZlbnQ6ICcsIGV2ZW50KTtcclxuICAgICAgICAvL3RoaXMuY2FjaGVTZXJ2aWNlLnNldCgnbGFzdENsaWNrZWRHcmlkUmVjb3JkJywgZXZlbnQpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kYXRhLk9uSXRlbUNsaWNrKSB7XHJcbiAgICAgICAgICBjb25zdCBmdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5Pbkl0ZW1DbGljayk7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgICAgICBjYWxsRnVuYyhldmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8gc3RvcmUgY2xpY2tlZCBpZCBhbmQgYWN0aW9uIGFzIGVkaXQgdG8gdGhlIHNlc3Npb24gc3RvcmFnZVxyXG4gICAgICAgICAgLy8gT25JdGVtQ2xpY2ssIHByb2plY3QgaGF2ZSB0byBzZXQgdGhlbXNlbGYuXHJcbiAgICAgICAgICB0aGlzLm1haW5TZXJ2aWNlLnNldE5hdmlnYXRpb25QYXJhbXMoW2V2ZW50LmRhdGFJdGVtLklkLCAnZWRpdCddKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZWRpdE1vZGVsKGV2ZW50LmRhdGFJdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRDZWxsQ2xvc2VIYW5kbGVyKGFyZ3M6IGFueSkge1xyXG4gICAgY29uc3QgeyBmb3JtR3JvdXAsIGRhdGFJdGVtIH0gPSBhcmdzO1xyXG4gICAgaWYgKCFmb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgYXJncy5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuZGlydHkpIHtcclxuICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHMgPT4gcy5pc0VkaXRhYmxlSW5EYXRhSXRlbSA9PT0gdHJ1ZSk7XHJcbiAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zLm1hcChzID0+XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhSXRlbSwgeyBbcy5maWVsZF06IGZvcm1Hcm91cC52YWx1ZVtzLmZpZWxkXSB9KSk7XHJcbiAgICAgIC8vIHRoaXMubXlTZWxlY3Rpb24ubWFwKHMgPT4gKHMuSWQgPT09IGRhdGFJdGVtLklkKSA/IE9iamVjdC5hc3NpZ24ocywgZGF0YUl0ZW0pIDogbnVsbCk7XHJcblxyXG4gICAgICAvLyBJbml0aWFsaXplIG15U2VsZWN0aW9uIGlmIGl0J3MgdW5kZWZpbmVkXHJcbiAgICAgIGlmICghdGhpcy5teVNlbGVjdGlvbikge1xyXG4gICAgICAgIHRoaXMubXlTZWxlY3Rpb24gPSBuZXcgTWFwKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubXlTZWxlY3Rpb24uZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgIGlmICh2YWx1ZS5JZCA9PT0gZGF0YUl0ZW0uSWQpIHtcclxuICAgICAgICAgIHRoaXMubXlTZWxlY3Rpb24uc2V0KGtleSwgeyAuLi52YWx1ZSwgLi4uZGF0YUl0ZW0gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbk5hdmlnYXRlVG8oZXZlbnQ6IGFueSwgY2xpY2tBY3Rpb246IGFueSwgcm93RGF0YTogYW55LCBjZWxsRGF0YTogc3RyaW5nKSB7XHJcbiAgICAvLyBjb25zdCBuID0gY29sU2V0dGluZy5uYXZpZ2F0ZVRvLnJlcGxhY2UoJy86aWQnLCBjZWxsRGF0YSk7XHJcbiAgICBjb25zdCBuID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIGNsaWNrQWN0aW9uLkNsaWNrKTtcclxuICAgIGlmIChuKSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogJ3pncmlkLW9uTmF2aWdhdGVUbycsXHJcbiAgICAgICAgdGFyZ2V0OiBjbGlja0FjdGlvbi5DbGljayxcclxuICAgICAgICByb3dEYXRhOiByb3dEYXRhLFxyXG4gICAgICAgIGRhdGE6IGNlbGxEYXRhXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZWRpdE1vZGVsKGRhdGFJdGVtOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuRWRpdENsaWNrVVJMKSB7XHJcbiAgICAgIC8vIEVkaXQgaW5jZWxsIGZpZWxkXHJcbiAgICAgIGNvbnN0IGNvbEZpZWxkcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuQ29sdW1uRmllbGRzLCB0aGlzLmdyb3VwKTtcclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6ICd6Z3JpZC1jZWxsQ2xpY2snLFxyXG4gICAgICAgIHRhcmdldDogdGhpcy5kYXRhLkVkaXRDbGlja1VSTCxcclxuICAgICAgICBkYXRhOiBkYXRhSXRlbSxcclxuICAgICAgICBjb2x1bW5GaWVsZHMkOiBjb2xGaWVsZHNcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5kYXRhWydDb250YWluZXJGb3JtJ10pIHtcclxuICAgICAgdGhpcy5zaG93Rm9ybVBhZ2UuZW1pdCh0cnVlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ncm91cC5lZGl0TW9kZWxVUkxdLCB7XHJcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICAvL3NraXBMb2NhdGlvbkNoYW5nZTogZmFsc2VcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLy8vIFdoZW4gY2xpY2tlZCByb3V0ZSB0byBwYWdlXHJcbiAgICAgIC8vdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZ3JvdXAuZWRpdE1vZGVsVVJMLCBkYXRhSXRlbS5JZCwgJ2VkaXQnXSwge1xyXG4gICAgICAvLyAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZVxyXG4gICAgICAvL30pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQnRuQ2xpY2soZXZlbnQ6IGFueSwgY29sU2V0dGluZzogYW55LCByb3dEYXRhOiBhbnksIGNlbGxEYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMub25OYXZpZ2F0ZVRvKGV2ZW50LCBjb2xTZXR0aW5nLCByb3dEYXRhLCBjZWxsRGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZvcm1Hcm91cChkYXRhSXRlbTogYW55LCBmaWVsZE5hbWU6IGFueSk6IEZvcm1Hcm91cCB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIFtmaWVsZE5hbWVdOiBkYXRhSXRlbVtmaWVsZE5hbWVdXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBIZWxwZXIgZnVuY3Rpb25zXHJcbiAgcHVibGljIGdldENsYXNzKGRhdGFJdGVtOiBhbnksIGNvbDogYW55KSB7XHJcbiAgICBsZXQgbmdDbGFzcyA9ICdncmlkQ2VsbCAnO1xyXG4gICAgaWYgKGNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeScgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJykge1xyXG4gICAgICBuZ0NsYXNzICs9ICdyaWdodEFsaWduZWQgJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YUl0ZW1bYCR7Y29sLmZpZWxkfV9DbGFzc2BdKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gYCR7ZGF0YUl0ZW1bYCR7Y29sLmZpZWxkfV9DbGFzc2BdfSBgO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wuQ2xhc3MpIHtcclxuICAgICAgbmdDbGFzcyArPSBgJHtjb2wuQ2xhc3N9IGA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbC5Qb3BPdmVyQ29udGVudCkge1xyXG4gICAgICBuZ0NsYXNzICs9ICcgd2l0aFBvcG92ZXJJbkdyaWQnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZ0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1hdChjb2w6IGFueSwgZGVmYXVsdEZvcm1hdD86IGFueSkge1xyXG4gICAgbGV0IGZvcm1hdCA9ICcnO1xyXG4gICAgaWYgKGNvbC5Gb3JtYXRPcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgZm9ybWF0ID0gZGVmYXVsdEZvcm1hdCA/IGRlZmF1bHRGb3JtYXQgOiAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGZvcm1hdEFyciA9IGNvbC5Gb3JtYXRPcHRpb25zLnNwbGl0KCcuJylcclxuICAgICAgbGV0IGRwID0gMDtcclxuXHJcbiAgICAgIGlmIChmb3JtYXRBcnIubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGRwID0gZm9ybWF0QXJyWzFdLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRwICE9PSAwKSB7XHJcbiAgICAgICAgZm9ybWF0ID0gYDEuJHtkcH0tJHtkcH1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFsbFJlc3VsdHMoKTogT2JzZXJ2YWJsZTxFeGNlbEV4cG9ydERhdGE+IHtcclxuICAgIGNvbnN0IGdyaWRDb250cm9sID0gdGhpcy56Z3JpZCBhcyBaR3JpZDtcclxuICAgIGNvbnN0IGdyaWRDb21wb25lbnQgPSB0aGlzLnpncmlkLmdyaWQgYXMgR3JpZENvbXBvbmVudDtcclxuICAgIGNvbnN0IGRhdGEgPSBncmlkQ29tcG9uZW50LmRhdGEgYXMgR3JpZERhdGFSZXN1bHQ7XHJcblxyXG4gICAgY29uc3QgcmVzb3VyY2VVUkxGb3JHZW5lcmF0ZURhdGEgPSB0aGlzLmRhdGEuRXhwb3J0RGF0YVJlc291cmNlVVJMID8gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKHRoaXMuZGF0YS5FeHBvcnREYXRhUmVzb3VyY2VVUkwpIDogZ3JpZENvbnRyb2wucGFnaW5hdGlvbkFwaVBvc3RVcmw7XHJcblxyXG4gICAgLy8gTmVlZCB0byBjbG9uZSwgaWYgbm90IHdpbGwgYWZmZWN0IHRoZSBncmlkIHBhcmFtcy5cclxuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGFyYW1zKTtcclxuICAgIHBhcmFtcy5wYWdlTm8gPSAwO1xyXG4gICAgcGFyYW1zLnBhZ2VTaXplID0gZGF0YS50b3RhbDtcclxuXHJcbiAgICBjb25zdCBkYXRlVGltZVJlZ2V4ID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfSg/OltUXFxzXVxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkezEsN30pPyg/Olp8W1xcK1xcLV1cXGR7Mn06XFxkezJ9KT8pPyQvO1xyXG5cclxuICAgIC8vIEZ1bmN0aW9uIHRvIGNvbnZlcnQgZGF0ZSBzdHJpbmdzIHRvIERhdGUgb2JqZWN0c1xyXG4gICAgY29uc3QgY29udmVydERhdGVTdHJpbmdzVG9EYXRlcyA9IChpdGVtczogYW55W10pID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+IHtcclxuICAgICAgICBjb25zdCBuZXdJdGVtID0geyAuLi5pdGVtIH07XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmV3SXRlbSkge1xyXG4gICAgICAgICAgaWYgKG5ld0l0ZW0uaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5ld0l0ZW1ba2V5XTtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nIGFuZCBtYXRjaGVzIHRoZSBkYXRlVGltZVJlZ2V4IHBhdHRlcm5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgZGF0ZVRpbWVSZWdleC50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgIG5ld0l0ZW1ba2V5XSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3SXRlbTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHJlc291cmNlVVJMRm9yR2VuZXJhdGVEYXRhLCBwYXJhbXMpLnBpcGUoXHJcbiAgICAgIG1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gQ29udmVydCBkYXRlIHN0cmluZ3MgdG8gRGF0ZSBvYmplY3RzXHJcbiAgICAgICAgZGF0YS5kYXRhU2V0ID0gY29udmVydERhdGVTdHJpbmdzVG9EYXRlcyhkYXRhLmRhdGFTZXQpO1xyXG5cclxuICAgICAgICAvLyBQcmVwYXJlIHRoZSByZXN1bHQgZm9yIEV4Y2VsIGV4cG9ydFxyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogRXhjZWxFeHBvcnREYXRhID0ge1xyXG4gICAgICAgICAgZGF0YTogcHJvY2VzcyhkYXRhLmRhdGFTZXQsIHt9KS5kYXRhXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVmcmVzaEdyaWQoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCwgZ3JvdXA6IFpHcm91cCwgbWU6IGFueSkge1xyXG4gICAgY29uc3QgX2dyaWRPcHRpb25TZWdtZW50ID0gZXZlbnQudGFyZ2V0LnRyaW0oKS5zcGxpdCgnLicpO1xyXG4gICAgY29uc3QgX2dyaWRPcHRpb24gPSBfZ3JpZE9wdGlvblNlZ21lbnRbMV07XHJcbiAgICBpZiAoX2dyaWRPcHRpb24pIHtcclxuICAgICAgY29uc3QgemdyaWRDb250cm9sID0gZ3JvdXBbX2dyaWRPcHRpb25dIGFzIFpHcmlkO1xyXG4gICAgICBpZiAoemdyaWRDb250cm9sKSB7XHJcbiAgICAgICAgemdyaWRDb250cm9sLmdldERhdGEoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnVW5hYmxlIHRvIGZpbmQgZ3JpZCB2YWx1ZTogJyArIF9ncmlkT3B0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ0ludmFsaWQgcmVmcmVzaEdyaWQgZXZlbnQ6ICcsIGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoRGF0YSgpIHtcclxuICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyRGF0YSgpIHtcclxuICAgIHRoaXMuemdyaWQuY2xlYXJEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJ1bmNhdGVUZXh0KHRleHQ6IHN0cmluZywgbGltaXQ6IG51bWJlciA9IDIwMCk6IHN0cmluZyB7XHJcbiAgICAvLyBDaGVjayBpZiB0aGUgdGV4dCBpcyBsb25nZXIgdGhhbiB0aGUgbGltaXRcclxuICAgIGlmICh0ZXh0Lmxlbmd0aCA+IGxpbWl0KSB7XHJcbiAgICAgIHJldHVybiBgJHt0ZXh0LnN1YnN0cigwLCBsaW1pdCl9Li4uIChDbGljayB0byB2aWV3IG1vcmUpYDtcclxuICAgIH1cclxuICAgIHJldHVybiB0ZXh0OyAvLyBSZXR1cm4gdGhlIGZ1bGwgdGV4dCBpZiBpdCdzIHdpdGhpbiB0aGUgbGltaXRcclxuICB9XHJcblxyXG4gIHB1YmxpYyByb3dTZWxlY3Rpb25LZXkgPSAoY29udGV4dDogUm93QXJncyk6IGFueSA9PiB7XHJcbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBrZXkgdXNpbmcgZWl0aGVyIHRoaXMuZGF0YS5VbmlxdWVLZXkgb3IgY29udGV4dC5kYXRhSXRlbS5JZC5cclxuICAgIGNvbnN0IGtleSA9ICh0aGlzLmRhdGEuVW5pcXVlS2V5ID8/IGNvbnRleHQuZGF0YUl0ZW0uSWQpO1xyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuVW5pcXVlS2V5ICYmIGNvbnRleHQuZGF0YUl0ZW0uSWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignQSB1bmlxdWUgY29sdW1uIGZpZWxkIGlzIHJlcXVpcmVkLiBFbnN1cmUgZWl0aGVyIHRoZSBJZCBjb2x1bW4gaXMgcHJlc2VudCBvciB0aGUgVW5pcXVlS2V5IHByb3BlcnR5IGlzIHNldCBmb3IgemdyaWQuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBteVNlbGVjdGlvbiBpZiBpdCdzIHVuZGVmaW5lZFxyXG4gICAgaWYgKCF0aGlzLm15U2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMubXlTZWxlY3Rpb24gPSBuZXcgTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3RvcmUgdGhlIGRhdGEgaXRlbSBpbiB0aGUgbXlTZWxlY3Rpb24gbWFwIHdpdGggdGhlIGdlbmVyYXRlZCBrZXkuXHJcbiAgICB0aGlzLm15U2VsZWN0aW9uLnNldChrZXksIGNvbnRleHQuZGF0YUl0ZW0pO1xyXG5cclxuICAgIC8vIFJldHVybiB0aGUgZ2VuZXJhdGVkIGtleS5cclxuICAgIHJldHVybiBrZXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRWYWx1ZXMoKTogYW55IHtcclxuICAgIC8vIE1hcCBlYWNoIGtleSBpbiByb3dTZWxlY3Rpb24gdG8gaXRzIGNvcnJlc3BvbmRpbmcgZGF0YSBpdGVtIGluIHRoZSBteVNlbGVjdGlvbiBtYXAuXHJcbiAgICBjb25zdCBzZWxlY3RlZFJlY29yZCA9IHRoaXMucm93U2VsZWN0aW9uLm1hcChrZXkgPT4gdGhpcy5teVNlbGVjdGlvbi5nZXQoa2V5KSk7XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSBhcnJheSBvZiBzZWxlY3RlZCByZWNvcmRzLlxyXG4gICAgcmV0dXJuIHNlbGVjdGVkUmVjb3JkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgLy8gQ2hlY2sgaWYgbXlTZWxlY3Rpb24gaXMgZGVmaW5lZCBiZWZvcmUgdHJ5aW5nIHRvIGNsZWFyIGl0XHJcbiAgICBpZiAodGhpcy5teVNlbGVjdGlvbikge1xyXG4gICAgICAvLyBDbGVhciB0aGUgbWFwIHRoYXQgc3RvcmVzIHNlbGVjdGVkIGRhdGEgaXRlbXMuXHJcbiAgICAgIHRoaXMubXlTZWxlY3Rpb24uY2xlYXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE9wdGlvbmFsbHksIHlvdSBjYW4gaW5pdGlhbGl6ZSBpdCBpZiBpdCdzIHVuZGVmaW5lZFxyXG4gICAgICB0aGlzLm15U2VsZWN0aW9uID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENsZWFyIHRoZSBhcnJheSB0aGF0IHRyYWNrcyBzZWxlY3RlZCBrZXlzLlxyXG4gICAgdGhpcy5yb3dTZWxlY3Rpb24gPSBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuemdyaWQpIHtcclxuICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0ge307XHJcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcclxuICAgICAgdGhpcy56Z3JpZC5nZXREYXRhQmluZGluZygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybigndGhpcy56Z3JpZCBpcyB1bmRlZmluZWQuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0R3JpZERhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pc1VzZUxvY2FsRGF0YSgpID8gKHRoaXMuemdyaWQuZGF0YSB8fCB0aGlzLnpncmlkLm9yaWdpbmFsRGF0YSkgOiAodGhpcy56Z3JpZC5ncmlkLmRhdGEgJiYgdGhpcy56Z3JpZC5ncmlkLmRhdGEuZGF0YSA/IHRoaXMuemdyaWQuZ3JpZC5kYXRhLmRhdGEgOiBbXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGF0YSA9IChnRGF0YTogYW55KSA9PiB7XHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICBpZiAodGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgICAgdGhpcy56Z3JpZC5kYXRhID0gZ0RhdGE7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuRGlzYWJsZUF1dG9BcHBlbmRHcmlkRGF0ZUZpbHRlckNvbCkge1xyXG4gICAgICAgICAgdGhpcy5zZXREYXRlQ29sRm9yRmlsdGVyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuemdyaWQuZ3JpZC5kYXRhID0ge1xyXG4gICAgICAgICAgZGF0YTogZ0RhdGEsXHJcbiAgICAgICAgICB0b3RhbDogZ0RhdGEudG90YWxDb3VudFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldHVwR3JpZFdpdGhJbmxpbmVFZGl0KCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ3pncmlkIGlzIG51bGwgZm9yIHNldERhdGEuJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0SGVhZGVyVGV4dChjb2x1bW5OYW1lOiBzdHJpbmcsIG5ld0hlYWRlclRpdGxlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGdyaWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG4gICAgZ3JpZENvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGNvbC5OYW1lID09PSBjb2x1bW5OYW1lKSB7XHJcbiAgICAgICAgY29sLnRpdGxlID0gbmV3SGVhZGVyVGl0bGU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYWNrQnkoaW5kZXg6IG51bWJlciwgaXRlbTogR3JpZEl0ZW0pOiBhbnkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhpdGVtLmRhdGFbJ0lkJ10gfHwgaW5kZXgpO1xyXG4gICAgcmV0dXJuIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1VzZUxvY2FsRGF0YSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmRhdGEuRGF0YVNvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvL3JldHVybiBaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KHRoaXMuZGF0YS5SZXNvdXJjZVVSTCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gZ3JpZCBzZXR1cFxyXG4gIHByaXZhdGUgc2V0dXBHcmlkQ29tcG9uZW50QXR0cmlidXRlcygpIHtcclxuICAgIC8vIEdyaWQgZGVmYXVsdCBzZXR0aW5nXHJcbiAgICB0aGlzLmdyaWRUaXRsZSA9IHRoaXMuZGF0YS5UaXRsZTtcclxuICAgIHRoaXMuY29sdW1ucyA9IFtdO1xyXG4gICAgdGhpcy5wYWdlU2l6ZXMgPSBbNSwgMTAsIDIwLCA1MCwgMTAwLCAyMDAsIDUwMF07XHJcbiAgICB0aGlzLnByZXZpb3VzTmV4dCA9IHRoaXMuZGF0YVsnRW5hYmxlUHJldmlvdXNOZXh0QnV0dG9uJ10gfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gW01vYmlsZV0gRGlzYWJsZSBwYWdlIHNpemVzIGlmIFBhZ2VTaXplcyBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZSBvciBvbiBhIG1vYmlsZSBzY3JlZW4uXHJcbiAgICBpZiAodGhpcy5kYXRhLlBhZ2VTaXplcyA9PT0gZmFsc2UgfHwgdGhpcy5pc01vYmlsZVNjcmVlbigpKSB7XHJcbiAgICAgIHRoaXMucGFnZVNpemVzID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29uZmlndXJlIHBhZ2luYXRpb24gc2V0dGluZ3MuXHJcbiAgICB0aGlzLnBhZ2VhYmxlID0gdGhpcy5kYXRhLnBhZ2VBYmxlICE9IHVuZGVmaW5lZCA/IHRoaXMuZGF0YS5wYWdlQWJsZSA6IHtcclxuICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcclxuICAgICAgYnV0dG9uQ291bnQ6IDMsXHJcbiAgICAgIHBhZ2VTaXplczogdGhpcy5wYWdlU2l6ZXMsXHJcbiAgICAgIHByZXZpb3VzTmV4dDogdGhpcy5wcmV2aW91c05leHQsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIENvbmZpZ3VyZSBncmlkIHNlbGVjdGlvbiBvcHRpb25zIGlmIHNldCBTZWxlY3RPcHRpb25zIGluIGZpZWxkIGVsZW1lbnQgYXR0cmlidXRlLlxyXG4gICAgaWYgKHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgRXJyb3I6IGdyaWQoJHt0aGlzLmRhdGEuTmFtZX0pLCB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyBzaG91bGQgYmUgYSBzdHJpbmcgd2l0aCB2YWx1ZSAnc2luZ2xlJyBvciAnbXVsdGlwbGUnLmApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZVNldHRpbmdzID0ge1xyXG4gICAgICAgICAgY2hlY2tib3hPbmx5OiB0aGlzLmRhdGEuQ2hlY2tib3hPbmx5ID8/IGZhbHNlLFxyXG4gICAgICAgICAgbW9kZTogdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMudG9Mb3dlckNhc2UoKSA9PT0gJ3NpbmdsZScgPyAnc2luZ2xlJyA6ICdtdWx0aXBsZSdcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQmluZCBjb21wb25lbnQgdG8gZ3JvdXAgdXNpbmcgdGhlIHByb3ZpZGVkIFZhbHVlIHNldCBpbiBmaWVsZCBlbGVtZW50IGF0dHJpYnV0ZS5cclxuICAgIGlmICh0aGlzLmRhdGEuVmFsdWUuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgdGhpcy5ncm91cFt0aGlzLmRhdGEuVmFsdWUuc2xpY2UoNildID0gdGhpcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBTdWJzY3JpcHRpb25Gb3JHcmlkU3ViamVjdCgpIHtcclxuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYW55IGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMgdG8gYXZvaWQgbWVtb3J5IGxlYWtzLlxyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRnJvbSBoZXJlIHdpbGwgY2FsbCB6Z3JpZC5iaW5kaW5nLmRpcmVjdGl2ZS5cclxuICAgIC8vIFN1YnNjcmliZSB0byBnZXQgZnJvbSBkaXJlY3RpdmUgYW5kIHNldCB0byBjb21wb25lbnRcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5ncmlkU3ViamVjdC5waXBlKFxyXG4gICAgICB0YXAoZ3JpZERpcmVjdGl2ZSA9PiB7XHJcbiAgICAgICAgLy8gU2V0IHRoZSB6Z3JpZCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgZW1pdHRlZCBncmlkRGlyZWN0aXZlLlxyXG4gICAgICAgIHRoaXMuemdyaWQgPSBncmlkRGlyZWN0aXZlO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbHVtbnMgcHJvcGVydHkgd2l0aCB0aGUgZ3JpZCBjb2x1bW5zIGZyb20gZ3JpZERpcmVjdGl2ZS5cclxuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmNvbHVtbnM7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIGF1dG9tYXRpYyBhcHBlbmRpbmcgb2YgYSBncmlkIGRhdGUgZmlsdGVyIGNvbHVtbiBpcyBub3QgZGlzYWJsZWQuXHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuRGlzYWJsZUF1dG9BcHBlbmRHcmlkRGF0ZUZpbHRlckNvbCkge1xyXG4gICAgICAgICAgdGhpcy5zZXREYXRlQ29sRm9yRmlsdGVyaW5nKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZXQgdXAgZ3JpZCB3aXRoIGlubGluZSBlZGl0aW5nLlxyXG4gICAgICAgIHRoaXMuc2V0dXBHcmlkV2l0aElubGluZUVkaXQoKTtcclxuXHJcbiAgICAgICAgLy8gU2V0IHVwIGEgcG9wb3ZlciBmZWF0dXJlIGJhc2VkIG9uIGNvbHVtbnMgYW5kIGdyaWQgZGF0YS5cclxuICAgICAgICB0aGlzLnNldHVwUG9wb3ZlckZlYXR1cmUodGhpcy5jb2x1bW5zLCB0aGlzLmdldEdyaWREYXRhKCkpO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAvLyBDaGVjayBpZiBjb2x1bW4gaGVhZGVycyBoYXZlIGFscmVhZHkgYmVlbiB0cmFuc2xhdGVkLlxyXG4gICAgICAgIGlmICh0aGlzLmlzQ29sdW1uSGVhZGVyVHJhbnNsYXRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1hcmsgY29sdW1uIGhlYWRlcnMgYXMgdHJhbnNsYXRlZCBhbmQgcGVyZm9ybSB0aGUgdHJhbnNsYXRpb24uXHJcbiAgICAgICAgdGhpcy5pc0NvbHVtbkhlYWRlclRyYW5zbGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5jb2x1bW5zKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcChfID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrYm94Q29sdW1uUGlubmVkID0gdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnNQaW5uZWQ7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmVHcmlkU2V0dGluZ3MoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2F2ZUdyaWRDb25maWcgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGdyaWRTdGF0ZUxvZ2ljID0gdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkU3RhdGVMb2dpYyh0aGlzLmRhdGEpO1xyXG4gICAgICBjb25zdCBjYWNoZU5hbWUgPSB0aGlzLnN0YXRlU2V0dGluZ1NlcnZpY2UuZ2V0U3RvcmFnZUNhY2hlS2V5KFN0YXRlVHlwZS5zYXZlZFNldHRpbmcsIHRoaXMuZGF0YSk7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzQ2FjaGVkRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0U3RhdGVDYWNoZUJ5TmFtZShjYWNoZU5hbWUpO1xyXG4gICAgICBjb25zdCBjb2x1bW5Db25maWd1cmF0aW9ucyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JpZENvbHVtbnNDb25maWcodGhpcy56Z3JpZC5ncmlkLmNvbHVtbnMpO1xyXG4gICAgICBjb25zdCBzZXR0aW5nQ29uZmlnOiBaR3JpZFNldHRpbmdzID0geyBjb2x1bW5Db25maWd1cmF0aW9ucyB9O1xyXG4gIFxyXG4gICAgICB0aGlzLnpncmlkLmdyaWRTZXR0aW5nID0ge1xyXG4gICAgICAgIC4uLnRoaXMuemdyaWQuZ3JpZFNldHRpbmcsXHJcbiAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbnNcclxuICAgICAgfTtcclxuICBcclxuICAgICAgaWYgKGdyaWRTdGF0ZUxvZ2ljID09PSBTdGF0ZVR5cGUuY2FjaGVkRGF0YVNldHRpbmcpIHtcclxuICAgICAgICBzZXR0aW5nQ29uZmlnLmdyaWRTdGF0ZSA9IHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0U3RhdGVUb0NhY2hlKGNhY2hlTmFtZSwgc2V0dGluZ0NvbmZpZyk7XHJcbiAgXHJcbiAgICAgIGNvbnN0IHN0YXRlU2V0dGluZ0luZm86IFN0YXRlU2V0dGluZ0luZm8gPSB7XHJcbiAgICAgICAgcHJvamVjdENvZGU6IHRoaXMuZW52aXJvbm1lbnQucHJvamVjdENvZGVzWzBdLFxyXG4gICAgICAgIGZpZWxkRWxlbWVudE5hbWU6IHRoaXMuZGF0YS5GaWVsZEVsZW1lbnROYW1lLFxyXG4gICAgICAgIGNvbXBvbmVudFVuaXF1ZUtleTogdGhpcy5kYXRhLkNhY2hlSW5mby5OYW1lID8/IHRoaXMuZGF0YS5GaWVsZEVsZW1lbnROYW1lLFxyXG4gICAgICAgIHVzZXJJZDogdGhpcy5hdXRoU2VydmljZS5lMVRva2VuLnVzZXJOYW1lLFxyXG4gICAgICAgIHN0YXRlVHlwZTogU3RhdGVUeXBlLnNhdmVkU2V0dGluZyxcclxuICAgICAgICBzdGF0ZURhdGE6IEpTT04uc3RyaW5naWZ5KHNldHRpbmdDb25maWcpLFxyXG4gICAgICAgIHN0b3JhZ2VDYWNoZU5hbWU6IGNhY2hlTmFtZVxyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICBpZiAocHJldmlvdXNDYWNoZWREYXRhICYmIHByZXZpb3VzQ2FjaGVkRGF0YS5pZCkge1xyXG4gICAgICAgIHN0YXRlU2V0dGluZ0luZm8uaWQgPSBwcmV2aW91c0NhY2hlZERhdGEuaWQ7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgdGhpcy5zdGF0ZVNldHRpbmdTZXJ2aWNlLnNhdmVTdGF0ZVNldHRpbmcoc3RhdGVTZXR0aW5nSW5mbykuc3Vic2NyaWJlKCk7XHJcbiAgXHJcbiAgICAgIHRoaXMuc2hvd0hpZGVSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24oKTtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdygnR3JpZCBzZXR0aW5ncyBoYXZlIGJlZW4gc2F2ZWQuJywgJ3RvcCcsIHRydWUsIDIwMDAsICdzdWNjZXNzJyk7XHJcbiAgICB9O1xyXG4gIFxyXG4gICBcclxuICAgIC8vIENhbGwgYSBtZXRob2QgdG8gdXBkYXRlIHRoZSBldmVudCBJRFxyXG4gICAgY29uc3QgYnV0dG9uRWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7IC8vIEdldCBidXR0b24gZWxlbWVudFxyXG4gICAgY29uc3QgYnV0dG9uVGV4dCA9IGJ1dHRvbkVsZW1lbnQuaW5uZXJUZXh0LnRyaW0oKTsgLy8gR2V0IGJ1dHRvbiBuYW1lICh0ZXh0KVxyXG4gICAgY29uc3QgY2xvbmVkQnV0dG9uID0geyBldmVudElkOiBaQ29tcG9uZW50SGVscGVyLmdlbmVyYXRlVGltZVN0YW1wSWQoKSwgTGFiZWw6IGJ1dHRvblRleHQgfTsgXHJcbiAgIFxyXG4gICAgLy8gU2V0IHRoZSBEaXNtaXNzVHlwZSBwcm9wZXJ0eSBvZiB0aGUgZ3JvdXAgdG8gdGhlIGRpc21pc3NUeXBlIHByb3BlcnR5IG9mIHRoZSBpdGVtXHJcbiAgICAvL3RoaXMuZ3JvdXBbJ0Rpc21pc3NUeXBlJ10gPSBpdGVtLmRpc21pc3NUeXBlO1xyXG5cclxuICAgIC8vIENyZWF0ZSBhbiBvdXRwdXQgZXZlbnQgb2JqZWN0IHdpdGggZGV0YWlscyBhYm91dCB0aGUgYnV0dG9uIGNsaWNrXHJcbiAgICBjb25zdCBvdXRwdXRFdmVudCA9IHtcclxuICAgICAgdHlwZTogJ2J1dHRvbkNsaWNrJyxcclxuICAgICAgdGFyZ2V0OiBldmVudCxcclxuICAgICAgZGF0YTogY2xvbmVkQnV0dG9uLFxyXG4gICAgICB0cmlnZ2VyRnJvbTogVHJpZ2dlckZyb21UeXBlLmJ1dHRvblxyXG4gICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQ7XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBidXR0b25FdmVudERldGFpbCBwcm9wZXJ0eSBvZiB0aGUgZ3JvdXAgd2l0aCB0aGUgb3V0cHV0IGV2ZW50IGRldGFpbHNcclxuICAgIHRoaXMuZ3JvdXBbJ2J1dHRvbkV2ZW50RGV0YWlsJ10gPSB7XHJcbiAgICAgIGJ1dHRvbkRldGFpbDogb3V0cHV0RXZlbnQsXHJcbiAgICAgIHRyaWdnZXJGcm9tOiBUcmlnZ2VyRnJvbVR5cGUuYnV0dG9uXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24pIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvdyhcclxuICAgICAgICAnT3ZlcndyaXRlIENvbmZpcm1hdGlvbicsXHJcbiAgICAgICAgJ1lvdSBoYXZlIGFscmVhZHkgc2F2ZWQgZ3JpZCBzZXR0aW5ncy4gU2F2aW5nIGFnYWluIHdpbGwgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBzZXR0aW5ncy48YnIvPkRvIHlvdSB3YW50IHRvIHByb2NlZWQ/JyxcclxuICAgICAgICBbXHJcbiAgICAgICAgICB7IHRleHQ6ICdObycsIGNzc0NsYXNzOiAnc2Vjb25kYXJ5JyB9IGFzIEFsZXJ0QnV0dG9uLFxyXG4gICAgICAgICAgeyB0ZXh0OiAnWWVzJywgY3NzQ2xhc3M6ICdwcmltYXJ5JyB9IGFzIEFsZXJ0QnV0dG9uXHJcbiAgICAgICAgXSwgWydjb2wtNCddXHJcbiAgICAgICkuc3Vic2NyaWJlKHJlcGx5ID0+IHtcclxuICAgICAgICBpZiAocmVwbHkgPT09ICdZZXMnKSB7XHJcbiAgICAgICAgICBzYXZlR3JpZENvbmZpZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc2F2ZUdyaWRDb25maWcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXN0b3JlR3JpZFNldHRpbmdzKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGJ1dHRvbkVsZW1lbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxCdXR0b25FbGVtZW50OyAvLyBHZXQgYnV0dG9uIGVsZW1lbnRcclxuICAgIGNvbnN0IGJ1dHRvblRleHQgPSBidXR0b25FbGVtZW50LmlubmVyVGV4dC50cmltKCk7IC8vIEdldCBidXR0b24gbmFtZSAodGV4dClcclxuXHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93KCdDb25maXJtIFJlc2V0JywgJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXNldCB0aGUgY29sdW1uIHNldHRpbmdzIHRvIHRoZWlyIGRlZmF1bHQgc2V0dGluZ3M/PGJyLz5UaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lLicsXHJcbiAgICAgIFtcclxuICAgICAgICB7IHRleHQ6ICdObycsIGNzc0NsYXNzOiAnc2Vjb25kYXJ5JyB9IGFzIEFsZXJ0QnV0dG9uLFxyXG4gICAgICAgIHsgdGV4dDogJ1llcycsIGNzc0NsYXNzOiAncHJpbWFyeScgfSBhcyBBbGVydEJ1dHRvblxyXG4gICAgICBdLCBbJ2NvbC00J10pLnN1YnNjcmliZShyZXBseSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGx5ID09PSAnWWVzJykge1xyXG4gICAgICAgICAgLy8gQ2FsbCBhIG1ldGhvZCB0byB1cGRhdGUgdGhlIGV2ZW50IElEXHJcbiAgICAgICAgICBjb25zdCBjbG9uZWRCdXR0b24gPSB7IGV2ZW50SWQ6IFpDb21wb25lbnRIZWxwZXIuZ2VuZXJhdGVUaW1lU3RhbXBJZCgpLCBMYWJlbDogYnV0dG9uVGV4dCB9OyBcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gU2V0IHRoZSBEaXNtaXNzVHlwZSBwcm9wZXJ0eSBvZiB0aGUgZ3JvdXAgdG8gdGhlIGRpc21pc3NUeXBlIHByb3BlcnR5IG9mIHRoZSBpdGVtXHJcbiAgICAgICAgICAvL3RoaXMuZ3JvdXBbJ0Rpc21pc3NUeXBlJ10gPSBpdGVtLmRpc21pc3NUeXBlO1xyXG5cclxuICAgICAgICAgIC8vIENyZWF0ZSBhbiBvdXRwdXQgZXZlbnQgb2JqZWN0IHdpdGggZGV0YWlscyBhYm91dCB0aGUgYnV0dG9uIGNsaWNrXHJcbiAgICAgICAgICBjb25zdCBvdXRwdXRFdmVudCA9IHtcclxuICAgICAgICAgICAgdHlwZTogJ2J1dHRvbkNsaWNrJyxcclxuICAgICAgICAgICAgdGFyZ2V0OiBldmVudCxcclxuICAgICAgICAgICAgZGF0YTogY2xvbmVkQnV0dG9uLFxyXG4gICAgICAgICAgICB0cmlnZ2VyRnJvbTogVHJpZ2dlckZyb21UeXBlLmJ1dHRvblxyXG4gICAgICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQ7XHJcblxyXG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSBidXR0b25FdmVudERldGFpbCBwcm9wZXJ0eSBvZiB0aGUgZ3JvdXAgd2l0aCB0aGUgb3V0cHV0IGV2ZW50IGRldGFpbHNcclxuICAgICAgICAgIHRoaXMuZ3JvdXBbJ2J1dHRvbkV2ZW50RGV0YWlsJ10gPSB7XHJcbiAgICAgICAgICAgIGJ1dHRvbkRldGFpbDogb3V0cHV0RXZlbnQsXHJcbiAgICAgICAgICAgIHRyaWdnZXJGcm9tOiBUcmlnZ2VyRnJvbVR5cGUuYnV0dG9uXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIC8vIEVuc3VyZSBjb2x1bW5zIGFyZSBzb3J0ZWQgYmFzZWQgb24gdGhlaXIgb3JpZ2luYWwgb3JkZXJcclxuICAgICAgICAgIHRoaXMuY29sdW1ucy5zb3J0KChhLCBiKSA9PiBhLm9yaWdpbmFsT3JkZXJJbmRleCAtIGIub3JpZ2luYWxPcmRlckluZGV4KTtcclxuICBcclxuICAgICAgICAgIC8vcmVzdG9yZSBvcmlnaW5hbCBoaWRkZW4gdmFsdWVcclxuICAgICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbC5vcmlnaW5hbEhpZGRlblZhbHVlICE9PSB1bmRlZmluZWQgJiYgY29sLm9yaWdpbmFsSGlkZGVuVmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICBjb2wuaGlkZGVuID0gY29sLm9yaWdpbmFsSGlkZGVuVmFsdWU7XHJcbiAgICAgICAgICAgICAgZGVsZXRlIGNvbC5vcmlnaW5hbEhpZGRlblZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBHZW5lcmF0ZSBncmlkIGNvbHVtbnMgYW5kIGxvYWQgZGF0YVxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUdyaWRDb2x1bW5zKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgIFxyXG4gICAgICAgICAgLy8gQ2FsbCB0aGUgZ3JpZFNlcnZpY2UuZ2V0U3RhdGVDYWNoZSBhbmQgaGFuZGxlIHRoZSByZXN1bHQgdmlhIHN1YnNjcmlwdGlvblxyXG4gICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5nZXRTdGF0ZUNhY2hlKFN0YXRlVHlwZS5zYXZlZFNldHRpbmcsIHRoaXMuZGF0YSkuc3Vic2NyaWJlKChjYWNoZWREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjYWNoZWREYXRhKSB7XHJcbiAgICAgICAgICAgICAgLy8gQ2FjaGUgZm91bmQsIHByb2NlZWQgd2l0aCBkZWxldGlvblxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuZGVsZXRlU3RhdGVDYWNoZShTdGF0ZVR5cGUuc2F2ZWRTZXR0aW5nLCB0aGlzLmRhdGEpO1xyXG4gIFxyXG4gICAgICAgICAgICAgIC8vIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIHRoZSByZXN0b3JlIGJ1dHRvblxyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0hpZGVSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24oKTtcclxuICBcclxuICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIHN0YXRlIHNldHRpbmcgYmFzZWQgb24gdGhlIGNhY2hlIGRhdGEgSURcclxuICAgICAgICAgICAgICB0aGlzLnN0YXRlU2V0dGluZ1NlcnZpY2UuZGVsZXRlU3RhdGVTZXR0aW5nKGNhY2hlZERhdGEuaWQpLnN1YnNjcmliZSgpO1xyXG4gIFxyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ0dyaWQgc2V0dGluZ3MgaGF2ZSBiZWVuIHJlc2V0IHRvIGRlZmF1bHQuJywgJ3RvcCcsIHRydWUsIDIwMDAsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JpZENhbGxiYWNrKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmICh0aGlzLmRhdGFbJ0FmdGVybG9hZENhbGxiYWNrJ10pIHtcclxuICAgICAgY29uc3QgbWUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzKTtcclxuXHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiAnemdyaWQtQWZ0ZXJsb2FkQ2FsbGJhY2snLFxyXG4gICAgICAgIHRhcmdldDogdGhpcy5kYXRhWydBZnRlcmxvYWRDYWxsYmFjayddLFxyXG4gICAgICAgIGRhdGE6IG1lXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBHcmlkQnV0dG9ucygpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiB8fCB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSkge1xyXG4gICAgICB0aGlzLmdyaWRCdG4gPSB7XHJcbiAgICAgICAgUmVhZE9ubHk6IGZhbHNlLFxyXG4gICAgICAgIFZpc2libGU6IHRydWUsXHJcbiAgICAgICAgSXNSZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgV29ya2Zsb3dDb2RlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRixcclxuICAgICAgICBWYWx1ZTogdGhpcy5kYXRhLkdyaWRCdXR0b25GaWVsZE5hbWUsXHJcbiAgICAgICAgVHlwZTogdGhpcy5kYXRhLkdyaWRCdXR0b25GaWVsZE5hbWVfV0YgPyAnendvcmtmbG93YnV0dG9ucycgOiAnemJ1dHRvbnMnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0ZUNvbEZvckZpbHRlcmluZygpIHtcclxuICAgIGNvbnN0IGdyaWREYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgaWYgKHRoaXMuaXNVc2VMb2NhbERhdGEoKSAmJiBncmlkRGF0YSAmJiBncmlkRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGRhdGVDb2wgPSBPYmplY3Qua2V5cyhncmlkRGF0YVswXSkuZmlsdGVyKHggPT4geC5pbmNsdWRlcygnRGF0ZScpICYmICF4LmVuZHNXaXRoKENvbXBvbmVudENvbnN0YW50LkdyaWRDb2xEYXRlRmlsdGVyU3VmZml4KSk7XHJcbiAgICAgIGlmIChkYXRlQ29sICYmIGRhdGVDb2wubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGdyaWREYXRhLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICBkYXRlQ29sLmZvckVhY2goY29sTmFtZSA9PiB7XHJcbiAgICAgICAgICAgIGRhdGFbYCR7Y29sTmFtZX0ke0NvbXBvbmVudENvbnN0YW50LkdyaWRDb2xEYXRlRmlsdGVyU3VmZml4fWBdID0gbmV3IERhdGUoZGF0YVtjb2xOYW1lXSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93SGlkZVJlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbigpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuQ2FjaGVJbmZvPy5FbmFibGVTYXZlU3RhdGUpIHtcclxuICAgICAgdGhpcy5zaG93UmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uID0gZmFsc2U7XHJcblxyXG4gICAgICBjb25zdCBzdGF0ZVR5cGUgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTdGF0ZUxvZ2ljKHRoaXMuZGF0YSk7XHJcbiAgICAgIGlmIChzdGF0ZVR5cGUgPT09IFN0YXRlVHlwZS5zYXZlZFNldHRpbmcgfHwgc3RhdGVUeXBlID09PSBTdGF0ZVR5cGUuc2F2ZWRBbmRDYWNoZWREYXRhU2V0dGluZykge1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdDYWNoZU5hbWUgPSB0aGlzLnN0YXRlU2V0dGluZ1NlcnZpY2UuZ2V0U3RvcmFnZUNhY2hlS2V5KHN0YXRlVHlwZSwgdGhpcy5kYXRhKTtcclxuICAgICAgICBjb25zdCBzZXR0aW5nQ2FjaGVWYWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHNldHRpbmdDYWNoZU5hbWUpO1xyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ0NhY2hlVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd1Jlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gR3JpZCBjb25maWd1cmF0aW9uIGZ1bmN0aW9uXHJcbiAgcHVibGljIGdyaWRDdXN0b21BZGRDb21tYW5kKGdyb3VwOiBaR3JvdXApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgLy8gZGVjbGFyZSBidXR0b24gb25jbGljayBldmVudCBuYW1lIGJhc2Ugb24gZ3JpZCBuYW1lICsgcHJlZml4XHJcbiAgICBjb25zdCBncmlkQWRkQnV0dG9uRXZlbnROYW1lID0gYCR7dGhpcy5kYXRhLk5hbWV9X0N1c3RvbUFkZEJ1dHRvbk9uQ2xpY2tgO1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwW2dyaWRBZGRCdXR0b25FdmVudE5hbWVdKSB7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBbZ3JpZEFkZEJ1dHRvbkV2ZW50TmFtZV0oZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdyaWRDdXN0b21SZXNldENvbW1hbmQoZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBkZWNsYXJlIGJ1dHRvbiBvbmNsaWNrIGV2ZW50IG5hbWUgYmFzZSBvbiBncmlkIG5hbWUgKyBwcmVmaXhcclxuICAgIGNvbnN0IGdyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZSA9IGAke3RoaXMuZGF0YS5OYW1lfV9DdXN0b21SZXNldEJ1dHRvbk9uQ2xpY2tgO1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0pIHtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFtncmlkUmVzZXRCdXR0b25FdmVudE5hbWVdKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBncmlkQ3VzdG9tUmVtb3ZlQ29tbWFuZChkYXRhSXRlbTogYW55LCByb3dJbmRleDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIC8vIGRlY2xhcmUgYnV0dG9uIG9uY2xpY2sgZXZlbnQgbmFtZSBiYXNlIG9uIGdyaWQgbmFtZSArIHByZWZpeFxyXG4gICAgY29uc3QgZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lID0gYCR7dGhpcy5kYXRhLk5hbWV9X0N1c3RvbVJlbW92ZUJ1dHRvbk9uQ2xpY2tgO1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0pIHtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFtncmlkUmVzZXRCdXR0b25FdmVudE5hbWVdKGRhdGFJdGVtLCByb3dJbmRleCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSW5saW5lIEVkaXRcclxuICBwcml2YXRlIGNyZWF0ZUZvcm1Db250cm9scyhncmlkQ29sczogQXJyYXk8YW55Pikge1xyXG4gICAgbGV0IGNvdW50ZXJJbmRleCA9IDA7XHJcbiAgICAvLyBUbyBmb3JjZSBlbGVtZW50IHRvIHJlYmluZCBkYXRhXHJcbiAgICB0aGlzLmlzSW5saW5lRWRpdElucHV0RmllbGRMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuemdyaWQuZ3JpZC5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIG9mKFtdKS5waXBlKGRlbGF5KDApLCB0YXAoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgfHwge307XHJcbiAgICAgIGNvbnN0IGdyaWREYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShncmlkRGF0YSkpIHtcclxuICAgICAgICBncmlkRGF0YS5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaXRlbXMgPSB7fTtcclxuICAgICAgICAgIGdyaWRDb2xzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IFpDb21wb25lbnRIZWxwZXIuaXNWaXNpYmxlRm9ybUNvbnRyb2wodGhpcywgYy5maWVsZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzUmVxdWlyZWQgPSBaQ29tcG9uZW50SGVscGVyLmlzUmVxdWlyZWRGb3JtQ29udHJvbCh0aGlzLCBjLmZpZWxkKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0VmFsaWRhdG9ycyhjLmZpZWxkLCBpc1Zpc2libGUsIGlzUmVxdWlyZWQsIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgICBpdGVtc1tjLmZpZWxkXSA9IG5ldyBGb3JtQ29udHJvbChkW2MuZmllbGRdLCB2YWxpZGF0b3JzKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChpdGVtcyk7XHJcblxyXG4gICAgICAgICAgaWYgKGRbJ0lkJ10pIHtcclxuICAgICAgICAgICAgaXRlbXNbJ0lkJ10gPSBpdGVtc1snSWQnXSB8fCBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogZFsnSWQnXSwgZGlzYWJsZWQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRbJ0lkJ10gPSBjb3VudGVySW5kZXgrKztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1tkWydJZCddXSA9IGZvcm1Hcm91cDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzSW5saW5lRWRpdElucHV0RmllbGRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuemdyaWQuZ3JpZC5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHM7XHJcbiAgICB9KSkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRmllbGQodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKHggPT4geC5WYWx1ZSA9PT0gdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElubGluZUZvcm0oZGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyKSB7XHJcbiAgICB2YXIga2V5ID0gKGRhdGFbJ0lkJ10gfHwgZGF0YVsnSWQnXSA9PSAwKSA/IGRhdGFbJ0lkJ10gOiByb3dJbmRleDtcclxuICAgIGlmICh0aGlzLmlzSW5saW5lRWRpdElucHV0RmllbGRMb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRlbXBJbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2tleV0gfHwgdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3Vwc1swXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHNba2V5XTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtQ29udHJvbERhdGEoKTogYW55W10ge1xyXG4gICAgY29uc3QgZGF0YSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcykpIHtcclxuICAgICAgZGF0YS5wdXNoKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1trXT8udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwR3JpZFdpdGhJbmxpbmVFZGl0KCkge1xyXG4gICAgaWYgKHRoaXMuaGFzSW5saW5lRWRpdENvbHVtbih0aGlzLmNvbHVtbnMpKSB7XHJcbiAgICAgIHRoaXMudGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHM7XHJcbiAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHt9O1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scyh0aGlzLmNvbHVtbnMuY29uY2F0KHRoaXMuZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQgfHwgW10pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0lubGluZUZvcm1Hcm91cEhhc1ZhbHVlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyAmJiBPYmplY3Qua2V5cyh0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMpLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc0lubGluZUVkaXRDb2x1bW4oZ3JpZENvbHMpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBncmlkQ29scyAmJiBncmlkQ29scy5zb21lKGMgPT4gYy5pc0VkaXRhYmxlSW5HcmlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDZWxsU3R5bGVGb3JJbmxpbmVFZGl0KGNvbHVtbkZpZWxkOiBaRmllbGQsIGRhdGFJdGVtOiBhbnksIHJvd0luZGV4OiBudW1iZXIpOiBhbnkge1xyXG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZ2V0SW5saW5lRm9ybShkYXRhSXRlbSwgcm93SW5kZXgpIGFzIEZvcm1Hcm91cDtcclxuICAgIGlmICghZm9ybSkge1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdHlsZSA9IGNvbHVtbkZpZWxkW2BTdHlsZTEwYF07XHJcbiAgICBjb25zdCBmdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHN0eWxlKTtcclxuICAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgIHJldHVybiBjYWxsRnVuYyhmb3JtLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBmdW5jID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBFdmVudFxyXG4gIC8vIFNvdXJjZTogaHR0cHM6Ly93d3cudGVsZXJpay5jb20vZm9ydW1zL2tlbmRvLWFuZ3VsYXItZ3JpZC1ibGFuay1zcGFjZS1pbi10aGUtZW5kLXdoZW4teW91LXJlc2l6ZShyZWR1Y2UpLWFueS1jb2x1bW5cclxuICBwdWJsaWMgYWRqdXN0V2lkdGhVcG9uUmVzaXplKCkge1xyXG4gICAgY29uc3QgdGFibGVXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5rLWdyaWQtdGFibGUnKVtgb2Zmc2V0V2lkdGhgXTtcclxuICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5rLWdyaWQtY29udGVudCcpW2BvZmZzZXRXaWR0aGBdO1xyXG4gICAgaWYgKHRhYmxlV2lkdGggPCBjb250ZW50V2lkdGgpIHtcclxuICAgICAgY29uc3QgY3VycmVudExhc3RDb2xXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5rLWdyaWQtY29udGVudCAuay1ncmlkLXRhYmxlIHRyIHRkOmxhc3Qtb2YtdHlwZScpW2BvZmZzZXRXaWR0aGBdO1xyXG5cclxuICAgICAgdGhpcy5jb2x1bW5zW3RoaXMuY29sdW1ucy5sZW5ndGggLSAxXS53aWR0aCA9IGN1cnJlbnRMYXN0Q29sV2lkdGggKyAoY29udGVudFdpZHRoIC0gdGFibGVXaWR0aCkgLSAxMDsgLy8gYWNjb3VudCBmb3IgdGhlIHZlcnRpY2FsIHNjcm9sbGJhcjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkNoYW5nZSBFdmVudHNcclxuICBwdWJsaWMgZmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuZ3JpZFNldHRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnpncmlkLmdyaWRTZXR0aW5nKTtcclxuICAgICAgdGhpcy56Z3JpZC5maWx0ZXJDaGFuZ2UoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2VDaGFuZ2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgdGhpcy5ncmlkU2V0dGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcpO1xyXG4gICAgICB0aGlzLnpncmlkLnBhZ2VDaGFuZ2UoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNvcnRDaGFuZ2Uoc29ydDogU29ydERlc2NyaXB0b3JbXSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgdGhpcy5ncmlkU2V0dGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcpO1xyXG4gICAgICB0aGlzLnpncmlkLnNvcnRDaGFuZ2Uoc29ydCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5DZWxsQ2hlY2tCb3hPbkNoYW5nZShldmVudDogYW55LCByb3dJbmRleDogYW55LCBjb2x1bW46IGFueSkge1xyXG4gICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQuZGV0YWlsLmNoZWNrZWQ7XHJcbiAgICBjb25zdCBnRGF0YSA9IHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgIGdEYXRhW3Jvd0luZGV4XVtjb2x1bW4uVmFsdWVdID0gaXNDaGVja2VkO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBjb21tYW5kIGhhbmRsZXJcclxuICBwdWJsaWMgYWRkSGFuZGxlcih7IHNlbmRlciB9KSB7XHJcbiAgICB0aGlzLmlzTmV3ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBjbG9zZSBhbnkgZXhpc3RpbmcgZWRpdG9yXHJcbiAgICB0aGlzLmNsb3NlRWRpdG9yKHNlbmRlcik7XHJcblxyXG4gICAgLy8gbG9vcCBhbGwgY29sdW1uIHRvIGdldCB2YWxpZGF0aW9uIGFuZCBjcmVhdGUgZm9ybSBjb250cm9sXHJcbiAgICBjb25zdCBjb2xGb3JtQ29udHJvbCA9IHt9O1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgICBpZiAoY29sLklzUmVxdWlyZWQpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgaWYgKGNvbC5UeXBlID09PSAnenRleHRlZGl0b3InKSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goWkNvbXBvbmVudEhlbHBlci5yZXF1aXJlZFZhbGlkYXRvcl9FeGNsdWRlV2hpdGVTcGFjZXNBbmRIVE1MVGFncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfRXhjbHVkZVdoaXRlU3BhY2VzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihjb2wuVmFsaWRhdG9yUGF0dGVybikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb2xGb3JtQ29udHJvbFtjb2wuVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKG51bGwsIHZhbGlkYXRvcnMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gc2V0IGZvcm0gY29udHJvbCBvYmplY3QgdG8gZm9ybSBncm91cFxyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGNvbEZvcm1Db250cm9sKTtcclxuXHJcbiAgICAvLyBhZGQgdG8gZ3JpZCByb3dcclxuICAgIHNlbmRlci5hZGRSb3codGhpcy5mb3JtR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmVIYW5kbGVyKHsgc2VuZGVyLCByb3dJbmRleCwgZm9ybUdyb3VwLCBpc05ldyB9KTogdm9pZCB7XHJcbiAgICAvLyBHZXQgdGhlIGV4aXN0aW5nIGRhdGEgZnJvbSB0aGUgZ3JpZFxyXG4gICAgY29uc3QgZ3JpZEV4aXN0aW5nRGF0YSA9IHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgZm9ybSBpcyB2YWxpZFxyXG4gICAgaWYgKGZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICAvLyBDaGVjayBmb3IgYSB1bmlxdWUga2V5IGZpZWxkXHJcbiAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZGF0YVsnVW5pcXVlS2V5J107XHJcbiAgICAgIGlmICh1bmlxdWVLZXkpIHtcclxuICAgICAgICAvLyBHZXQgdGhlIHVuaXF1ZSBrZXkgdmFsdWUgZnJvbSB0aGUgZm9ybVxyXG4gICAgICAgIGNvbnN0IGZvcm1VbmlxdWVLZXlWYWx1ZSA9IGZvcm1Hcm91cC52YWx1ZVt1bmlxdWVLZXldO1xyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSB2YWx1ZVxyXG4gICAgICAgIGNvbnN0IGlzRHVwbGljYXRlID0gZ3JpZEV4aXN0aW5nRGF0YS5zb21lKGRhdGEgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgLy8gSWYgZWRpdGluZyBhbiBleGlzdGluZyByb3csIHNraXAgdGhlIGN1cnJlbnQgcm93IGJlaW5nIGVkaXRlZFxyXG4gICAgICAgICAgICAhaXNOZXcgJiZcclxuICAgICAgICAgICAgcm93SW5kZXggIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgdW5pcXVlIGtleSB2YWx1ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgZ3JpZFxyXG4gICAgICAgICAgICBkYXRhW3VuaXF1ZUtleV0gPT09IGZvcm1VbmlxdWVLZXlWYWx1ZSAmJlxyXG4gICAgICAgICAgICAvLyBTa2lwIGNoZWNraW5nIGFnYWluc3QgdGhlIGN1cnJlbnQgcm93IGJlaW5nIGVkaXRlZFxyXG4gICAgICAgICAgICBkYXRhW3VuaXF1ZUtleV0gIT09IGdyaWRFeGlzdGluZ0RhdGFbcm93SW5kZXhdW3VuaXF1ZUtleV1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgZHVwbGljYXRlIHZhbHVlLCBzaG93IGFuIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiB3aXRob3V0IHNhdmluZ1xyXG4gICAgICAgIGlmIChpc0R1cGxpY2F0ZSkge1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdygnRXJyb3Igb2NjdXI6IER1cGxpY2F0ZWQgdW5pcXVlIGZpZWxkIGVudHJ5LicsICd0b3AnLCB0cnVlLCAzMDAwLCAnZGFuZ2VyJyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiB0aGUgdW5pcXVlIGtleSB2YWx1ZSBpcyB2YWxpZCBhbmQgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZXMsIHNhdmUgdGhlIGRhdGFcclxuICAgICAgaWYgKGlzTmV3KSB7XHJcbiAgICAgICAgLy8gQWRkIGEgbmV3IHJvdyB0byB0aGUgZ3JpZCBkYXRhXHJcbiAgICAgICAgZ3JpZEV4aXN0aW5nRGF0YS5wdXNoKGZvcm1Hcm91cC52YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gVXBkYXRlIGFuIGV4aXN0aW5nIHJvdyBpbiB0aGUgZ3JpZCBkYXRhXHJcbiAgICAgICAgZ3JpZEV4aXN0aW5nRGF0YVtyb3dJbmRleF0gPSBmb3JtR3JvdXAudmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFVwZGF0ZSB0aGUgZ3JpZCBkYXRhIGFuZCBjbG9zZSB0aGUgcm93IGVkaXRvclxyXG4gICAgICB0aGlzLnNldERhdGEoZ3JpZEV4aXN0aW5nRGF0YSk7XHJcbiAgICAgIHNlbmRlci5jbG9zZVJvdyhyb3dJbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsSGFuZGxlcih7IHNlbmRlciwgcm93SW5kZXggfSkge1xyXG4gICAgLy8gY2FuY2VsIGFueSBleGlzdGluZyBlZGl0b3JcclxuICAgIHNlbmRlci5jbG9zZVJvdyhyb3dJbmRleCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdEhhbmRsZXIoeyBzZW5kZXIsIHJvd0luZGV4LCBkYXRhSXRlbSB9KSB7XHJcbiAgICAvLyBTZXQgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHJvdyBiZWluZyBlZGl0ZWQgaXMgbm90IGEgbmV3IHJvd1xyXG4gICAgdGhpcy5pc05ldyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIENsb3NlIGFueSBleGlzdGluZyBlZGl0b3JcclxuICAgIHRoaXMuY2xvc2VFZGl0b3Ioc2VuZGVyKTtcclxuXHJcbiAgICAvLyBsb29wIGFsbCBjb2x1bW4gdG8gZ2V0IHZhbGlkYXRpb24gYW5kIGNyZWF0ZSBmb3JtIGNvbnRyb2wsIGFwcGVuZCBjdXJyZW50IHJvdyB2YWx1ZVxyXG4gICAgY29uc3QgY29sRm9ybUNvbnRyb2wgPSB7fTtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuICAgICAgaWYgKGNvbC5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgIGlmIChjb2wuVHlwZSA9PT0gJ3p0ZXh0ZWRpdG9yJykge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfRXhjbHVkZVdoaXRlU3BhY2VzQW5kSFRNTFRhZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChaQ29tcG9uZW50SGVscGVyLnJlcXVpcmVkVmFsaWRhdG9yX0V4Y2x1ZGVXaGl0ZVNwYWNlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2wuVmFsaWRhdG9yUGF0dGVybikge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oY29sLlZhbGlkYXRvclBhdHRlcm4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29sRm9ybUNvbnRyb2xbY29sLlZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChkYXRhSXRlbVtjb2wuVmFsdWVdLCB2YWxpZGF0b3JzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHNldCBmb3JtIGNvbnRyb2wgb2JqZWN0IHRvIGZvcm0gZ3JvdXBcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChjb2xGb3JtQ29udHJvbCk7XHJcblxyXG4gICAgLy8gU2V0IHRoZSBmb3JtIGdyb3VwIG9uIHRoZSByb3cgYmVpbmcgZWRpdGVkXHJcbiAgICB0aGlzLmVkaXRlZFJvd0luZGV4ID0gcm93SW5kZXg7XHJcbiAgICBzZW5kZXIuZWRpdFJvdyhyb3dJbmRleCwgdGhpcy5mb3JtR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUhhbmRsZXIoeyBzZW5kZXIsIGRhdGFJdGVtIH0pIHtcclxuICAgIGNvbnN0IGdEYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEl0ZW1JbmRleChkYXRhSXRlbSwgZ0RhdGEsIHRoaXMuZGF0YVsnVW5pcXVlS2V5J10pO1xyXG4gICAgZ0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIGRhdGEgaW4gdGhlIGdyaWRcclxuICAgIHRoaXMuc2V0RGF0YShnRGF0YSk7XHJcblxyXG4gICAgc2VuZGVyLmNhbmNlbENlbGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvc2VFZGl0b3IoZ3JpZCwgcm93SW5kZXggPSB0aGlzLmVkaXRlZFJvd0luZGV4KSB7XHJcbiAgICBncmlkLmNsb3NlUm93KHJvd0luZGV4KTtcclxuICAgIHRoaXMuZWRpdGVkUm93SW5kZXggPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXRlbUluZGV4KGl0ZW06IGFueSwgZGF0YTogYW55W10sIGtleTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGRhdGEubGVuZ3RoOyBpZHgrKykge1xyXG4gICAgICBpZiAoZGF0YVtpZHhdW2tleV0gPT09IGl0ZW1ba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBpZHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gR3JpZCBGaWx0ZXJcclxuICBwcml2YXRlIHNldHVwRmlsdGVyRmVhdHVyZSgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuR3JpZEZpbHRlckJhckZpZWxkKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyR3JvdXAgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkKSB7XHJcbiAgICAgIHRoaXMuYWR2ZmlsdGVyR3JvdXAgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2goKSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5maWx0ZXJHcm91cC5mb3JtO1xyXG4gICAgY29uc3QgY29udHJvbHMgPSBmb3JtLmNvbnRyb2xzO1xyXG5cclxuICAgIGlmICh0aGlzLmlzU2hvd0FkdkZpbHRlcikge1xyXG4gICAgICBjb25zdCBhZHZmb3JtID0gdGhpcy5hZHZmaWx0ZXJHcm91cC5mb3JtO1xyXG4gICAgICBjb25zdCBhZHZjb250cm9scyA9IGFkdmZvcm0uY29udHJvbHM7XHJcbiAgICAgIGZvciAoY29uc3QgYyBvZiBPYmplY3Qua2V5cyhhZHZjb250cm9scykpIHtcclxuICAgICAgICBjb250cm9sc1tjXSA9IGFkdmNvbnRyb2xzW2NdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YS5GaWx0ZXJTZWFyY2gpIHtcclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6ICd6Z3JpZC1maWx0ZXJzZWFyY2gnLFxyXG4gICAgICAgIHRhcmdldDogdGhpcy5kYXRhLkZpbHRlclNlYXJjaCxcclxuICAgICAgICBkYXRhOiB7IGZvcm1jb250cm9sczogY29udHJvbHMgfSxcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcyA9IFtdO1xyXG4gICAgICBPYmplY3Qua2V5cyhjb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBaQ29tcG9uZW50SGVscGVyLmdldEZpZWxkRnJvbUZpZWxkc0J5VmFsdWUodGhpcy5maWx0ZXJHcm91cC5maWVsZHMsIGNvbnRyb2xOYW1lKSB8fCBaQ29tcG9uZW50SGVscGVyLmdldEZpZWxkRnJvbUZpZWxkc0J5VmFsdWUodGhpcy5hZHZmaWx0ZXJHcm91cC5maWVsZHMsIGNvbnRyb2xOYW1lKTtcclxuICAgICAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcy5wdXNoKHtcclxuICAgICAgICAgICAga2V5OiBmaWVsZC5WYWx1ZUV4cHIgfHwgZmllbGQuVmFsdWUsXHJcbiAgICAgICAgICAgIG9wczogdGhpcy5tYXBGaWx0ZXJPcGVyYXRvckJ5RmllbGRUeXBlKGZpZWxkKSxcclxuICAgICAgICAgICAgdmFsdWU6IGNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxFZGl0KCkge1xyXG4gICAgdGhpcy5jbGVhckZpbHRlckRhdGEodGhpcy5maWx0ZXJHcm91cCk7XHJcbiAgICBpZiAodGhpcy5kYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZCkge1xyXG4gICAgICB0aGlzLmNsZWFyRmlsdGVyRGF0YSh0aGlzLmFkdmZpbHRlckdyb3VwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJGaWx0ZXJEYXRhKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGNvbnN0IGZvcm0gPSBncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgIGNvbnN0IGNvbnRyb2xzID0gZm9ybS5jb250cm9scztcclxuICAgIE9iamVjdC5rZXlzKGNvbnRyb2xzKS5mb3JFYWNoKGNvbnRyb2xOYW1lID0+IHtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKGNvbnRyb2xOYW1lLCBudWxsLCBncm91cCwgdHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZHZhbmNlZFNlYXJjaCgpIHtcclxuICAgIHRoaXMuaXNTaG93QWR2RmlsdGVyID0gIXRoaXMuaXNTaG93QWR2RmlsdGVyO1xyXG4gICAgaWYgKCF0aGlzLmlzU2hvd0FkdkZpbHRlcikge1xyXG4gICAgICB0aGlzLmNsZWFyRmlsdGVyRGF0YSh0aGlzLmFkdmZpbHRlckdyb3VwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFwRmlsdGVyT3BlcmF0b3JCeUZpZWxkVHlwZShmaWVsZDogWkZpZWxkKSB7XHJcbiAgICBzd2l0Y2ggKGZpZWxkLlR5cGUpIHtcclxuICAgICAgY2FzZSAnbnVtYmVyJzpcclxuICAgICAgY2FzZSAnbnVtZXJpYyc6XHJcbiAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICBjYXNlICdlbWFpbCc6XHJcbiAgICAgIGNhc2UgJ3Bhc3N3b3JkJzpcclxuICAgICAgY2FzZSAndGVsJzpcclxuICAgICAgY2FzZSAndGV4dCc6XHJcbiAgICAgIGNhc2UgJ3VybCc6XHJcbiAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcclxuICAgICAgY2FzZSAndGV4dGFyZWEnOlxyXG4gICAgICAgIGlmICghZmllbGRbJ0ZpbHRlckNvbnRhaW5zVXNpbmdFcXVhbCddKSB7XHJcbiAgICAgICAgICByZXR1cm4gJ2NvbnRhaW5zJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICc9PSc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICc9JztcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBncmlkIGNvbW1vbiBzZXR0aW5nIGZ1bmN0aW9uXHJcbiAgcHVibGljIHNldCBzZXRHcmlkVGl0bGUobmV3VGl0bGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5ncmlkVGl0bGUgPSBuZXdUaXRsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2V0R3JpZFN0YXRlKHN0YXRlOiBTdGF0ZSkge1xyXG4gICAgdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUgPSBzdGF0ZTtcclxuICAgIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlID0gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0R3JpZFRvRmlyc3RQYWdlKCkge1xyXG4gICAgdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUuc2tpcCA9IDA7XHJcbiAgICB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5za2lwID0gMDtcclxuICB9XHJcbiAgXHJcbiAgcHVibGljIGdyb3VwQ2hhbmdlKGdyb3VwczogR3JvdXBEZXNjcmlwdG9yW10pOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGRldGFpbCBncmlkIGZ1bmN0aW9uXHJcbiAgcHVibGljIGRldGFpbEV4cGFuZChldmVudDogRGV0YWlsRXhwYW5kRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlRGV0YWlsR3JpZFNlc3Npb24oZXZlbnQpO1xyXG4gICAgdGhpcy5leGVjdXRlRGV0YWlsRXhwYW5kQ2FsbGJhY2soZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVEZXRhaWxHcmlkU2Vzc2lvbihldmVudDogRGV0YWlsRXhwYW5kRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRldGFpbEdyaWQgPSB0aGlzLmRhdGE/LkRldGFpbEdyaWQ7XHJcbiAgICBpZiAoIWRldGFpbEdyaWQ/LlJlc291cmNlVVJMKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZXNzaW9uS2V5ID0gdGhpcy5nZW5lcmF0ZURldGFpbEdyaWRTZXNzaW9uS2V5KGV2ZW50LCBkZXRhaWxHcmlkKTtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KCdkZXRhaWxHcmlkU2Vzc2lvbktleScsIHNlc3Npb25LZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZURldGFpbEdyaWRTZXNzaW9uS2V5KGV2ZW50OiBEZXRhaWxFeHBhbmRFdmVudCwgZGV0YWlsR3JpZDogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGdyaWROYW1lID0gdGhpcy5leHRyYWN0R3JpZE5hbWUoZGV0YWlsR3JpZC5SZXNvdXJjZVVSTCk7XHJcbiAgICBjb25zdCByZWNvcmRJZCA9IHRoaXMuZ2V0UmVjb3JkSWQoZXZlbnQuZGF0YUl0ZW0pO1xyXG4gICAgcmV0dXJuIGAjI0RldGFpbEdyaWQjIyR7dGhpcy5ncm91cFtncmlkTmFtZV19IyMke3JlY29yZElkfSMjYDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdEdyaWROYW1lKHJlc291cmNlVVJMOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHJlc291cmNlVVJMLnNwbGl0KFwiLlwiKVsxXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmVjb3JkSWQoZGF0YUl0ZW06IGFueSk6IHN0cmluZyB8IG51bWJlciB7XHJcbiAgICByZXR1cm4gZGF0YUl0ZW1bdGhpcy5kYXRhLlVuaXF1ZUtleV0gPz8gZGF0YUl0ZW0uSWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4ZWN1dGVEZXRhaWxFeHBhbmRDYWxsYmFjayhldmVudDogRGV0YWlsRXhwYW5kRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLkRldGFpbEV4cGFuZCk7XHJcbiAgICBcclxuICAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgIGNhbGxGdW5jKGV2ZW50LCB0aGlzLmdldEdyaWREYXRhKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiBwdWJsaWMgZGV0YWlsQ29sbGFwc2UoZXZlbnQ6IERldGFpbENvbGxhcHNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLkRldGFpbENvbGxhcHNlKTtcclxuICAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgIGNhbGxGdW5jKGV2ZW50LCB0aGlzLmdldEdyaWREYXRhKCkpO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImdyaWQtY29udGFpbmVyIGUxdGFnLXN0eWxlXCIgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCI+XHJcbiAgPCEtLSBUb29sdGlwIFRlbXBsYXRlIC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LWFuY2hvcj5cclxuICAgIDxzcGFuPnt7IHRydW5jYXRlVGV4dChhbmNob3IubmF0aXZlRWxlbWVudC5pbm5lclRleHQpIH19PC9zcGFuPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDwhLS0gUG9wb3ZlciBDb21wb25lbnQgLS0+XHJcbiAgPGtlbmRvLXBvcG92ZXIgI2dyaWRQb3BPdmVyIFtwb3NpdGlvbl09XCJkYXRhLlBvcE92ZXJQb3NpdGlvbiB8fCAnYm90dG9tJ1wiIFt0ZW1wbGF0ZURhdGFdPVwiZ2V0Q29udGV4dERhdGEuYmluZCh0aGlzKVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIGtlbmRvUG9wb3ZlckJvZHlUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cclxuICAgICAgPGRpdiBbc3R5bGVdPVwiZGF0YS5Cb2R5U3R5bGVcIlxyXG4gICAgICAgICAgIGNsYXNzPVwicG9wb3ZlcmJvZHlcIlxyXG4gICAgICAgICAgICpuZ0lmPVwiZGF0YSAmJiBkYXRhLkJvZHlcIlxyXG4gICAgICAgICAgIFtpbm5lckhUTUxdPVwiZGF0YS5Cb2R5IHwgaHRtbFNhbml0aXplXCJcclxuICAgICAgICAgICBbbmdDbGFzc109XCJkYXRhLkJvZHlDbGFzc1wiXHJcbiAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiY2xvc2VQb3BPdmVyLmNhbGwodGhpcywgJGV2ZW50KVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby1wb3BvdmVyPlxyXG5cclxuICA8IS0tIE1haW4gR3JpZCBDb250YWluZXIgLS0+XHJcbiAgPGRpdiBrZW5kb1Rvb2x0aXBcclxuICAgICAgIHNob3dPbj1cIm5vbmVcIlxyXG4gICAgICAgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0ZW1wbGF0ZVwiXHJcbiAgICAgICBmaWx0ZXI9XCIuay1ncmlkIHRkXCJcclxuICAgICAgIChtb3VzZW92ZXIpPVwic2hvd1Rvb2x0aXAoJGV2ZW50KVwiXHJcbiAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIlxyXG4gICAgICAgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIj5cclxuXHJcbiAgICA8ZGl2IGtlbmRvUG9wb3ZlckNvbnRhaW5lclxyXG4gICAgICAgICBbcG9wb3Zlcl09XCJncmlkUG9wT3ZlclwiXHJcbiAgICAgICAgIGZpbHRlcj1cImRpdi5ncmlkQ2VsbC53aXRoUG9wb3ZlckluR3JpZFwiXHJcbiAgICAgICAgIHNob3dPbj1cIm5vbmVcIlxyXG4gICAgICAgICBrZW5kb1BvcG92ZXJDb250YWluZXJcclxuICAgICAgICAgI3BvcG92ZXJjb250YWluZXI9XCJrZW5kb1BvcG92ZXJDb250YWluZXJcIj5cclxuXHJcbiAgICAgIDwhLS0gS2VuZG8gR3JpZCAtLT5cclxuICAgICAgPGtlbmRvLWdyaWQgW3pncmlkYmluZGluZ109XCJ7XHJcbiAgICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgICAgZ3JvdXA6IGdyb3VwLFxyXG4gICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXHJcbiAgICAgICAgICBncmlkU3ViamVjdDogZ3JpZFN1YmplY3QsXHJcbiAgICAgICAgICBncmlkU2V0dGluZzogZ3JpZFNldHRpbmdcclxuICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVza3RvcC1ncmlkIGUxdGFnLXN0eWxlMlwiXHJcbiAgICAgICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cImRhdGEuc2Nyb2xsQWJsZSA9PT0gZmFsc2UgPyAnbm9uZScgOiAnc2Nyb2xsYWJsZSdcIlxyXG4gICAgICAgICAgICAgICAgICBbcGFnZWFibGVdPVwicGFnZWFibGVcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZW4tcGFnZXJdPVwiIXBhZ2VhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cImdyaWRTZXR0aW5nLmdyaWRTdGF0ZS50YWtlXCJcclxuICAgICAgICAgICAgICAgICAgW3NraXBdPVwiZ3JpZFNldHRpbmcuZ3JpZFN0YXRlLnNraXBcIlxyXG4gICAgICAgICAgICAgICAgICBbc29ydF09XCJncmlkU2V0dGluZy5ncmlkU3RhdGUuc29ydFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJ7YWxsb3dVbnNvcnQ6IHRydWUsIG1vZGU6ICdtdWx0aXBsZSd9XCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJncmlkU2V0dGluZy5ncmlkU3RhdGUuZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZGF0YS5lbmFibGVGaWx0ZXJpbmcgIT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgW3Jlc2l6YWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Jlb3JkZXJhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbY29sdW1uTWVudV09XCJkYXRhLkRpc2FibGVHcmlkQ29sdW1uTWVudSA/IGZhbHNlIDogeyBmaWx0ZXI6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiISghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiXHJcbiAgICAgICAgICAgICAgICAgIChjZWxsQ2xpY2spPVwiY2VsbENsaWNrSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbG9zZSk9XCJlZGl0Q2VsbENsb3NlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGRhdGFTdGF0ZUNoYW5nZSk9XCJkYXRhU3RhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cInNvcnRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiZmlsdGVyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBba2VuZG9HcmlkU2VsZWN0QnldPVwicm93U2VsZWN0aW9uS2V5XCJcclxuICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZEtleXMpXT1cInJvd1NlbGVjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMlwiXHJcbiAgICAgICAgICAgICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlcIlxyXG4gICAgICAgICAgICAgICAgICAoY2FuY2VsKT1cImNhbmNlbEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzYXZlKT1cInNhdmVIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChlZGl0KT1cImVkaXRIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoYWRkKT1cImFkZEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChjb2x1bW5SZXNpemUpPVwiYWRqdXN0V2lkdGhVcG9uUmVzaXplKClcIlxyXG4gICAgICAgICAgICAgICAgICAoZXhjZWxFeHBvcnQpPVwib25FeGNlbEV4cG9ydCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW3Jvd0NsYXNzXT1cInJvd0NhbGxiYWNrLmJpbmQodGhpcylcIlxyXG4gICAgICAgICAgICAgICAgICAoZGV0YWlsRXhwYW5kKT1cImRldGFpbEV4cGFuZCgkZXZlbnQpXCIgXHJcbiAgICAgICAgICAgICAgICAgIChkZXRhaWxDb2xsYXBzZSk9XCJkZXRhaWxDb2xsYXBzZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGdyb3VwKT1cImdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5ncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgIFtncm91cGFibGVdPVwiZGF0YS5Hcm91cFNldHRpbmc/LkVuYWJsZUdyb3VwaW5nXCJcclxuICAgICAgICAgICAgICAgICAgKGdyb3VwQ2hhbmdlKT1cImdyb3VwQ2hhbmdlKCRldmVudClcIj5cclxuXHJcbiAgICAgICAgPCEtLSBUb29sYmFyIFRlbXBsYXRlIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRUb29sYmFyVGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkFsbG93UmVmcmVzaEJ1dHRvbiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuQWxsb3dFeHBvcnQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLkNhY2hlSW5mbz8uRW5hYmxlU2F2ZVN0YXRlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5UaXRsZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuRW5hYmxlR3JpZENvbW1hbmQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLkVuYWJsZUN1c3RvbUFkZENvbW1hbmQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLkVuYWJsZUN1c3RvbVJlc2V0Q29tbWFuZFwiPlxyXG5cclxuICAgICAgICAgIDwhLS0gTGVmdCBUb29sYmFyIEl0ZW1zIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItbGVmdC1pdGVtXCIgKm5nSWY9XCJncmlkVGl0bGUgfHwgZGF0YS5BbGxvd1JlZnJlc2hCdXR0b24gfHwgZGF0YS5BbGxvd0V4cG9ydFwiPlxyXG4gICAgICAgICAgICA8a2VuZG8tbGFiZWwgY2xhc3M9XCJncmlkVGl0bGVcIiAqbmdJZj1cImdyaWRUaXRsZVwiPnt7IGdyaWRUaXRsZSB9fTwva2VuZG8tbGFiZWw+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIHRpdGxlPVwiUmVmcmVzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsZWZ0LWJ1dHRvbnMgcmVmcmVzaC1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGtlbmRvQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlZnJlc2hEYXRhKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5BbGxvd1JlZnJlc2hCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWdyaWQtYnV0dG9uIGstaS1yZWZyZXNoLXNtXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWxlZnQtaXRlbS1zZWNvbmQtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuQWxsb3dFeHBvcnRcIlxyXG4gICAgICAgICAgICAgICAgIFtjbGFzcy53aXRoLWdyaWQtdGl0bGVdPVwiZ3JpZFRpdGxlIHx8IGRhdGEuQWxsb3dSZWZyZXNoQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGVmdC1idXR0b25zIGV4cG9ydC1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAga2VuZG9HcmlkRXhjZWxDb21tYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuQWxsb3dFeHBvcnRcIj5cclxuICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJkb3dubG9hZFwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXhwb3J0LXRvLWV4Y2VsLWJ1dHRvbi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdEb3dubG9hZCBhcyBFeGNlbCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBSaWdodCBUb29sYmFyIEl0ZW1zIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItcmlnaHQtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JpZEJ0biB8fFxyXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLkNhY2hlSW5mbz8uRW5hYmxlU2F2ZVN0YXRlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgIGdyaWREZWZhdWx0U3RhdGVFeGlzdCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLkVuYWJsZUdyaWRDb21tYW5kIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEuRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLkVuYWJsZUN1c3RvbVJlc2V0Q29tbWFuZFwiPlxyXG5cclxuICAgICAgICAgICAgPGFwcC16d29ya2Zsb3didXR0b25zICpuZ0lmPVwiZ3JpZEJ0biAmJiBncmlkQnRuLlR5cGUgPT09ICd6d29ya2Zsb3didXR0b25zJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJncmlkQnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCI+XHJcbiAgICAgICAgICAgIDwvYXBwLXp3b3JrZmxvd2J1dHRvbnM+XHJcblxyXG4gICAgICAgICAgICA8YXBwLXpidXR0b25zICpuZ0lmPVwiZ3JpZEJ0biAmJiBncmlkQnRuLlR5cGUgPT09ICd6YnV0dG9ucydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImdyaWRCdG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiPlxyXG4gICAgICAgICAgICA8L2FwcC16YnV0dG9ucz5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAga2VuZG9CdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZUdyaWRTZXR0aW5ncygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuQ2FjaGVJbmZvPy5FbmFibGVTYXZlU3RhdGVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1zdGFyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIHt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdTYXZlIFNldHRpbmdzJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGtlbmRvQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc3RvcmVHcmlkU2V0dGluZ3MoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93UmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktc3Rhci1vdXRsaW5lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIHt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdSZXNldCB0byBEZWZhdWx0JykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGtlbmRvR3JpZEFkZENvbW1hbmRcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuRW5hYmxlR3JpZENvbW1hbmRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1hZGRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAge3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoZGF0YS5BZGRDb21tYW5kQnV0dG9uTmFtZSA/IGRhdGEuQWRkQ29tbWFuZEJ1dHRvbk5hbWUgOiAnQWRkJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGtlbmRvQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdyaWRDdXN0b21BZGRDb21tYW5kKGdyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkVuYWJsZUN1c3RvbUFkZENvbW1hbmRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1hZGRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAge3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoZGF0YS5BZGRDb21tYW5kQnV0dG9uTmFtZSA/IGRhdGEuQWRkQ29tbWFuZEJ1dHRvbk5hbWUgOiAnQWRkJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGtlbmRvQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdyaWRDdXN0b21SZXNldENvbW1hbmQoZ3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktdHJhc2hcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAge3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoZGF0YS5SZXNldENvbW1hbmRCdXR0b25OYW1lID8gZGF0YS5SZXNldENvbW1hbmRCdXR0b25OYW1lIDogJ1Jlc2V0JykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIEZpbHRlciBDb250YWluZXIgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiZGF0YS5HcmlkRmlsdGVyQmFyRmllbGRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vcm1hbC1maWx0ZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgPGFwcC16Zm9ybSBjbGFzcz1cImZpbHRlci1maWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cImZpbHRlckdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZE5hbWVdPVwiZGF0YS5HcmlkRmlsdGVyQmFyRmllbGRcIj5cclxuICAgICAgICAgICAgICA8L2FwcC16Zm9ybT5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1idXR0b25zXCIgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJkZWZhdWx0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9uZz1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWFyY2goKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwic2VhcmNoXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1sYWJlbCBpb24tdGV4dC1jYXBpdGFsaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ1NlYXJjaCcpIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwiZGVmYXVsdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJvbmc9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsRWRpdCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5Jc1Nob3dHcmlkQ2FuY2VsRmlsdGVyQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJ0aW1lc1wiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwic29saWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cImRlZmF1bHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb25nPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpc1Nob3dBZHZGaWx0ZXIgPyAndG9nZ2xlT24nIDogJ3RvZ2dsZU9mZidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkdmFuY2VkU2VhcmNoKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwic2xpZGVycy1oXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQWR2YW5jZWQgRmlsdGVyIC0tPlxyXG4gICAgICAgICAgICA8YXBwLXpmb3JtICpuZ0lmPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG8tcHJlbG9hZC10aGUtZmllbGRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiYWR2ZmlsdGVyR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZE5hbWVdPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPlxyXG4gICAgICAgICAgICA8L2FwcC16Zm9ybT5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHYtZmlsdGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiaXNTaG93QWR2RmlsdGVyXCIgW0BoaWRlQW5kU2hvd0FuaW1hdGlvbl0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdi1maWx0ZXItc2VwZXJhdG9yXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnQWR2YW5jZWQgU2VhcmNoJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxhcHAtemZvcm0gY2xhc3M9XCJhZHZmaWx0ZXItZmllbGRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJhZHZmaWx0ZXJHcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGROYW1lXT1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgPC9hcHAtemZvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPCEtLSBDaGVja2JveCBDb2x1bW4gLS0+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY2hlY2tib3gtY29sdW1uICpuZ0lmPVwiISFkYXRhLlNlbGVjdE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiNDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93U2VsZWN0QWxsPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9ja2VkXT1cImNoZWNrYm94Q29sdW1uUGlubmVkXCI+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNoZWNrYm94LWNvbHVtbj5cclxuXHJcbiAgICAgICAgPCEtLSBEeW5hbWljIENvbHVtbnMgLS0+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIFtzdHlsZV09XCJnZXRHcmlkQ29sdW1uU3R5bGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZTF0YWctc3R5bGUzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sLnRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cImNvbC53aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5SZXNpemFibGVXaWR0aF09XCJjb2wubWluUmVzaXphYmxlV2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImNvbC5maWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJmaWx0ZXJhYmxlKGNvbC5lbmFibGVGaWx0ZXJpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInNvcnRhYmxlKGNvbC5lbmFibGVTb3J0aW5nKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXJTdHlsZV09XCJnZXRHcmlkSGVhZGVyU3R5bGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckNsYXNzPVwiZTF0YWctc3R5bGU0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvb3RlclN0eWxlXT1cImdldEdyaWRGb290ZXJTdHlsZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9vdGVyQ2xhc3M9XCJlMXRhZy1zdHlsZTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImNvbC5oaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImNvbC5mb3JtYXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sLkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvY2tlZF09XCJsb2NrZWQoY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcj1cIm51bWVyaWNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uTWVudV09XCIhY29sLmRpc2FibGVDb2x1bW5NZW51XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luY2x1ZGVJbkNob29zZXJdPVwiY29sLmluY2x1ZGVJbkNob29zZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZWRpdG9yXT1cImNvbC5lZGl0b3JUeXBlXCI+XHJcblxyXG4gICAgICAgICAgPCEtLSBGaWx0ZXIgVGVtcGxhdGVzIC0tPlxyXG4gICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8IS0tIE51bWVyaWMgRmlsdGVyIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJjb2wuZmllbGRUeXBlID09PSAnbnVtYmVyJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wuZmllbGRUeXBlID09PSAnY3VycmVuY3knIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5maWVsZFR5cGUgPT09ICd6bnVtZXJpYydcIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcj1cImVxXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIERhdGUgRmlsdGVyIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJjb2wuZmllbGRUeXBlID09ICd6ZGF0ZScgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sLmZpZWxkVHlwZSA9PT0gJ3p0aW1lJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wuZmllbGRUeXBlID09PSAnemRhdGV0aW1lJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wuZmllbGRUeXBlID09PSAnenVpZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSBEYXRlIFJhbmdlIEZpbHRlciAtLT5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmZpbHRlckJ5RGF0ZVJhbmdlID09PSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiIG9wZXJhdG9yPVwibHRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkYXRlLXJhbmdlLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRlLXJhbmdlLWZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8L2RhdGUtcmFuZ2UtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFJlZ3VsYXIgRGF0ZSBGaWx0ZXIgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5maWx0ZXJCeURhdGVSYW5nZSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWRhdGUtZmlsdGVyLWNlbGwgW3Nob3dPcGVyYXRvcnNdPVwiZGF0YS5Jc1Nob3dHcmlkRmlsdGVyT3BlcmF0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I9XCJsdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtZGF0ZS1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBCb29sZWFuIEZpbHRlciAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiY29sLmZpZWxkVHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1ib29sZWFuLWZpbHRlci1jZWxsIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcj1cImVxXCI+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtYm9vbGVhbi1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRGVmYXVsdCBTdHJpbmcgRmlsdGVyIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLXN0cmluZy1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcj1cImNvbnRhaW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItY29udGFpbnMtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItY29udGFpbnMtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1zdGFydHN3aXRoLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLXN0YXJ0c3dpdGgtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZW5kc3dpdGgtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZW5kc3dpdGgtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLXN0cmluZy1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gR3JpZCBFZGl0IFRlbXBsYXRlIC0tPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEVkaXRUZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5FbmFibGVHcmlkQ29tbWFuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbGV0LWRhdGFJdGVtPVwiZGF0YUl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGxldC1jb2x1bW49XCJjb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGxldC1mb3JtR3JvdXA9XCJmb3JtR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGxldC1pc05ldz1cImlzTmV3XCI+XHJcbiAgICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIj5cclxuICAgICAgICAgICAgICA8IS0tIE51bWJlciBFZGl0b3IgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1udW1lcmljdGV4dGJveCAjY2VsbEFuY2hvciBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpXCI+PC9rZW5kby1udW1lcmljdGV4dGJveD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1wb3B1cCBbYW5jaG9yXT1cImNlbGxBbmNob3IubnVtZXJpY0lucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICEoaXNOZXcgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ2xhc3M9XCJrLXdpZGdldCBrLXRvb2x0aXAgay10b29sdGlwLXZhbGlkYXRpb24gay1pbnZhbGlkLW1zZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDJweDsgb3BhY2l0eTogMC41O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktd2FybmluZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmVycm9ycz8ucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wuTmFtZSB9fSByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgc3R5bGU9XCJwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLWxlZnQ6IDNweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5lcnJvcnM/LnBhdHRlcm5cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA/IGNvbC5WYWxpZGF0b3JNZXNzYWdlIDogXCJQbGVhc2UgY2hlY2sgdGhlIGlucHV0IHZhbHVlLlwiIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1wb3B1cD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBEZWZhdWx0IFRleHQgRWRpdG9yIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby10ZXh0Ym94ICNjZWxsQW5jaG9yIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZClcIj48L2tlbmRvLXRleHRib3g+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tcG9wdXAgW2FuY2hvcl09XCJjZWxsQW5jaG9yLmlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICEoaXNOZXcgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ2xhc3M9XCJrLXdpZGdldCBrLXRvb2x0aXAgay10b29sdGlwLXZhbGlkYXRpb24gay1pbnZhbGlkLW1zZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDJweDsgb3BhY2l0eTogMC41O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktd2FybmluZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmVycm9ycz8ucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wuTmFtZSB9fSByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgc3R5bGU9XCJwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLWxlZnQ6IDNweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5lcnJvcnM/LnBhdHRlcm5cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA/IGNvbC5WYWxpZGF0b3JNZXNzYWdlIDogXCJQbGVhc2UgY2hlY2sgdGhlIGlucHV0IHZhbHVlLlwiIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1wb3B1cD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgIDwhLS0gQ2VsbCBUZW1wbGF0ZXMgLS0+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbSBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiPlxyXG4gICAgICAgICAgICA8IS0tIFJlZ3VsYXIgQ2VsbCBEaXNwbGF5IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiAxcHggMDtcIlxyXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbC5jbGlja2FibGVJY29ucyAmJiBjb2wuaXNFZGl0YWJsZUluR3JpZCAhPT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENsYXNzKGRhdGFJdGVtLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKGNvbCwgZGF0YUl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWlkXT1cImRhdGFJdGVtLklkXCJcclxuICAgICAgICAgICAgICAgICBbYXR0ci5jb2x1bW4tbmFtZV09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNob3dQb3BPdmVyKGNvbCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiY2xvc2VQb3BPdmVyKCRldmVudClcIj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBEYXRlIENlbGwgLS0+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFRpbWUgQ2VsbCAtLT5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p0aW1lJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnSEg6bW0nIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFNob3J0IERhdGUgQ2VsbCAtLT5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pzaG9ydGRhdGUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdNTU0geXl5eScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRGF0ZVRpbWUgQ2VsbCAtLT5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRldGltZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFVJIERhdGVUaW1lIENlbGwgLS0+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dWlkYXRldGltZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIE51bWJlciBDZWxsIC0tPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBudW1iZXIgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gQ3VycmVuY3kgQ2VsbCAtLT5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBudW1iZXI6IGdldEZvcm1hdChjb2wsICcxLjItMicpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIE51bWVyaWMgQ2VsbCAtLT5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pudW1lcmljJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBudW1iZXI6IGdldEZvcm1hdChjb2wpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFVSTCBDZWxsIC0tPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndXJsJ1wiIHN0eWxlPVwiY29sb3I6IGJsdWU7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIERlZmF1bHQgQ2VsbCAtLT5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBJY29uIERpc3BsYXkgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZSAmJiBnZXRJY29uTmFtZShjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWUsIGRhdGFJdGVtW2NvbC5maWVsZF0pICE9PSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJnZXRJY29uTmFtZShjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWUsIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUZXh0IERpc3BsYXkgd2l0aCBDb25kaXRpb25hbCBTdHlsaW5nIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWVcIiBbbmdTd2l0Y2hdPVwiY2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT10cnVlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsU3R5bGVDb25kaXRpb25EZWZhdWx0XCIgW3N0eWxlXT1cInNldENlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj57eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBJbmxpbmUgRWRpdGFibGUgQ2VsbCAtLT5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogNXB4IDA7XCJcclxuICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5pc0VkaXRhYmxlSW5HcmlkID09PSB0cnVlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0lubGluZUZvcm1Hcm91cEhhc1ZhbHVlKCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICFpc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgIWNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU1XCJcclxuICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDbGFzcyhkYXRhSXRlbSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJlMXRhZy1zdHlsZTVcIlxyXG4gICAgICAgICAgICAgICAgIFtzdHlsZV09XCJnZXRDZWxsU3R5bGVGb3JJbmxpbmVFZGl0KGNvbCwgZGF0YUl0ZW0sIHJvd0luZGV4KVwiPlxyXG4gICAgICAgICAgICAgIDxhcHAtemlucHV0LWNvbnRhaW5lciBbZGF0YV09XCJnZXRJbmxpbmVGaWVsZChjb2wuZmllbGQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cImdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZ2V0SW5saW5lRm9ybShkYXRhSXRlbSwgcm93SW5kZXgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRhaW5lckZpZWxkXT1cImNvbnRhaW5lckZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlMXRhZy1zdHlsZTZcIj5cclxuICAgICAgICAgICAgICA8L2FwcC16aW5wdXQtY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQ2xpY2thYmxlIEljb25zIC0tPlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7XCIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sLmNsaWNrYWJsZUljb25zXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiaWNvbi5DbGFzcyA/IGljb24uQ2xhc3MgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhIWljb24gJiYgKCEhZGF0YUl0ZW0uV0ZTX1N0YXR1c0NvZGUgJiYgISFpY29uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRhdGFJdGVtLldGU19TdGF0dXNDb2RlICE9PSBpY29uLldGU19TdGF0dXNDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZGlzYWJsZWRCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkJ0bkNsaWNrKCRldmVudCwgaWNvbiwgZGF0YUl0ZW0sIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICB7e2ljb24uTmFtZSB8fCBkYXRhSXRlbVtjb2wuZmllbGRdfX1cclxuICAgICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImljb24uSWNvblwiIHN0eWxlPVwicGFkZGluZzogNHB4IDZweDtcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzYWJsZWRCdXR0b24+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICA8IS0tIEZvb3RlciBUZW1wbGF0ZSAtLT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGb290ZXJUZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgIGxldC1jb2x1bW5cclxuICAgICAgICAgICAgICAgICAgICAgICBsZXQtY29sdW1uSW5kZXg9XCJjb2x1bW5JbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkVuYWJsZUFnZ3JlZ2F0ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIlxyXG4gICAgICAgICAgICAgICAgIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRUeXBlXCJcclxuICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTdcIlxyXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiZTF0YWctc3R5bGU3XCI+XHJcbiAgICAgICAgICAgICAge3tjb2wuYWdncmVnYXRlVHlwZX19XHJcblxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnZGQvTU0veXl5eScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnSEg6bW0nIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pzaG9ydGRhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnTU1NIHl5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdkZC9NTS95eXl5IGhoOm1tOnNzIGFhJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdkZC9NTS95eXl5IGhoOm1tOnNzIGFhJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBudW1iZXIgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBudW1iZXI6IGdldEZvcm1hdChjb2wsICcxLjIuMicpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid1cmwnXCIgc3R5bGU9XCJjb2xvcjogYmx1ZTsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cclxuXHJcbiAgICAgICAgPCEtLSBDb21tYW5kIENvbHVtbiAtLT5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbiAqbmdJZj1cImRhdGEuRW5hYmxlR3JpZENvbW1hbmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTgwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uTWVudV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImUxdGFnLXN0eWxlOFwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtaXNOZXc9XCJpc05ld1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZFNhdmVDb21tYW5kPlxyXG4gICAgICAgICAgICAgIHt7IGlzTmV3ID8gJ1NhdmUnIDogJ1VwZGF0ZScgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkQ2FuY2VsQ29tbWFuZCBbcHJpbWFyeV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAge3sgaXNOZXcgPyAnRGlzY2FyZCBjaGFuZ2VzJyA6ICdDYW5jZWwnIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZEVkaXRDb21tYW5kPlxyXG4gICAgICAgICAgICAgIHt7IFwiRWRpdFwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZFJlbW92ZUNvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgXCJSZW1vdmVcIiB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uPlxyXG5cclxuICAgICAgICA8IS0tIEN1c3RvbSBSZW1vdmUgQ29tbWFuZCBDb2x1bW4gLS0+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4gKm5nSWY9XCJkYXRhLkVuYWJsZUN1c3RvbVJlbW92ZUNvbW1hbmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTgwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uTWVudV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImUxdGFnLXN0eWxlOFwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtaXNOZXc9XCJpc05ld1wiIGxldC1kYXRhSXRlbSBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGtlbmRvQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdyaWRDdXN0b21SZW1vdmVDb21tYW5kKGRhdGFJdGVtLCByb3dJbmRleClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5FbmFibGVDdXN0b21SZW1vdmVDb21tYW5kXCI+XHJcbiAgICAgICAgICAgICAge3sgXCJSZW1vdmVcIiB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uPlxyXG5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1leGNlbCBmaWxlTmFtZT1cIkV4cG9ydC54bHN4XCIgW2ZldGNoRGF0YV09XCJhbGxSZXN1bHRzXCI+PC9rZW5kby1ncmlkLWV4Y2VsPlxyXG5cclxuICAgICAgICA8IS0tZGV0YWlsIGdyaWQtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRGV0YWlsVGVtcGxhdGUgKm5nSWY9XCJkYXRhLkRldGFpbEdyaWQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogZGF0YS5EZXRhaWxHcmlkLlZpc2libGVcIj5cclxuICAgICAgICAgIDxhcHAtemdyaWQgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuY29udGFpbmVyU3R5bGUuc3R5bGU0XCIgY2xhc3M9XCJlMXRhZy1jb250YWluZXItc3R5bGU0XCIgXHJcbiAgICAgICAgICAgIFtkYXRhXT1cImRhdGEuRGV0YWlsR3JpZFwiIFtncm91cF09XCJncm91cFwiIFtmb3JtXT1cImZvcm1cIiBbY29udGFpbmVyRmllbGRdPVwiY29udGFpbmVyRmllbGRcIiBcclxuICAgICAgICAgICAgW2NvbXBvbmVudFByb3BlcnRpZXNdPVwiY29tcG9uZW50UHJvcGVydGllc1wiPlxyXG4gICAgICAgICAgPC9hcHAtemdyaWQ+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwva2VuZG8tZ3JpZD5cclxuXHJcbiAgICAgIDxhcHAtY29udGV4dC1tZW51IFtkYXRhXT1cImRhdGFcIiBbZ3JvdXBdPVwiZ3JvdXBcIiBbZm9ybV09XCJmb3JtXCIgI2RhdGFpdGVtY29udGV4dG1lbnU+PC9hcHAtY29udGV4dC1tZW51PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gZm9yIERFQyBhdXRvIHNjcm9sbGluZyAtLT5cclxuICA8ZGl2IGlkPVwiZW5kLW9mLWdyaWRcIj48L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
1212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3JELE9BQU8sRUFBeUIsT0FBTyxFQUFtQixNQUFNLDRCQUE0QixDQUFDO0FBRTdGLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUVwRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUdyRixPQUFPLEVBRUcsTUFBTSxFQUFjLGdCQUFnQixFQUM4QixTQUFTLEVBRW5GLGVBQWUsRUFDaEIsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QnpCLE1BQU0sT0FBTyxjQUFlLFNB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LGNBQWM7a0JBVDFCLFNBQVM7K0JBQ0UsV0FBVyxjQUdUO3dCQUNWLDRCQUE0QjtxQkFDN0I7d2hCQUl1RCxnQkFBZ0I7c0JBQXZFLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRlbGF5IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRhcCwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEV4Y2VsRXhwb3J0RGF0YSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWV4Y2VsLWV4cG9ydCc7XHJcbmltcG9ydCB7IERldGFpbENvbGxhcHNlRXZlbnQsIERldGFpbEV4cGFuZEV2ZW50LCBHcmlkSXRlbSwgU2VsZWN0YWJsZVNldHRpbmdzLCBcclxuICBHcmlkRGF0YVJlc3VsdCwgRGF0YVN0YXRlQ2hhbmdlRXZlbnQsIFBhZ2VDaGFuZ2VFdmVudCwgQ2VsbENsaWNrRXZlbnQsIEdyaWRDb21wb25lbnQsIFJvd0FyZ3MgICAgXHJcbn0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZ3JpZCc7XHJcbmltcG9ydCB7IFNvcnREZXNjcmlwdG9yLCBTdGF0ZSwgcHJvY2VzcywgR3JvdXBEZXNjcmlwdG9yIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWRhdGEtcXVlcnknO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBEYXRhTGlzdGluZ0ZpZWxkQmFzZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZGF0YWxpc3RpbmdmaWVsZGJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBoaWRlQW5kU2hvd1ZlcnRpY2FsQW5pbWF0aW9uIH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9jb21wb25lbnQtYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnN0YW50IH0gZnJvbSAnLi4vY29uc3RhbnRzL2NvbnN0YW50JztcclxuaW1wb3J0IHsgTWFpblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWluLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbGVtZW50Q29udGFpbmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9lbGVtZW50Y29udGFpbmVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFpHcmlkQmluZGluZ0RpcmVjdGl2ZSB9IGZyb20gJy4vemdyaWQuYmluZGluZy5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBaR3JpZFNlcnZpY2UgfSBmcm9tICcuL3pncmlkLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFdlYkFwaVNlcnZpY2UsIFRvYXN0U2VydmljZSxcclxuICBaRmllbGQsIFpHcm91cCwgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LCBaQ29yZVNlcnZpY2UsIFN0b3JhZ2VTZXNzaW9uU2VydmljZSwgRm9udEF3ZVNvbWVTZXJ2aWNlLFxyXG4gIFpHcmlkUG9zdEFwaVBhcmFtcywgWkdyaWRTZXR0aW5ncywgWkdyaWRDdXN0b21Db2x1bW4sIFJlc291cmNlQXBpU2VydmljZSwgU3RhdGVUeXBlLCBTdGF0ZVNldHRpbmdJbmZvLCBBdXRoU2VydmljZSwgU3RhdGVTZXR0aW5nU2VydmljZSxcclxuICBBbGVydEJ1dHRvbiwgQWxlcnRTZXJ2aWNlLFxyXG4gIFRyaWdnZXJGcm9tVHlwZVxyXG59IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFpHcmlkIHtcclxuICBwYXJhbXM6IFpHcmlkUG9zdEFwaVBhcmFtcztcclxuICBzdGF0ZTogU3RhdGU7XHJcbiAgY29sdW1uczogYW55W107XHJcbiAgcGFnaW5hdGlvbkFwaVBvc3RVcmw6IHN0cmluZztcclxuICBkYXRhOiBaRmllbGQ7XHJcbiAgZ3JvdXA6IFpHcm91cDtcclxuICB6Z3JpZDogWkdyaWRCaW5kaW5nRGlyZWN0aXZlO1xyXG4gIGlubGluZUVkaXRlZEZvcm1Hcm91cHM6IEZvcm1Hcm91cDtcclxuICBnZXRHcmlkRGF0YTogKCkgPT4gYW55W107XHJcbiAgZ2V0RGF0YTogKCkgPT4gdm9pZDtcclxuICBjbGVhckRhdGE6ICgpID0+IHZvaWQ7XHJcbiAgc2V0RGF0YTogKGRhdGE6IGFueSkgPT4gdm9pZDtcclxuICBzZXRDb2x1bW5zOiAoY29sdW1uRmllbGRzTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pID0+IHZvaWQ7XHJcbiAgJHNldENvbHVtbnM6IChjb2x1bW5GaWVsZHNOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikgPT4gT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIGdldEZvcm1Db250cm9sRGF0YSgpOiBhbnlbXTtcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXpncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vemdyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3pncmlkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgaGlkZUFuZFNob3dWZXJ0aWNhbEFuaW1hdGlvblxyXG4gIF1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBaZ3JpZENvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0aW5nRmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoRWxlbWVudENvbnRhaW5lckRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZWxlbWVudENvbnRhaW5lciE6IEVsZW1lbnRDb250YWluZXJEaXJlY3RpdmU7XHJcblxyXG4gIHpncmlkOiBhbnkgPSBudWxsO1xyXG4gIG9hdXRoVXJsOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdyaWREYXRhOiBHcmlkRGF0YVJlc3VsdDtcclxuICBzZWxlY3RhYmxlU2V0dGluZ3M6IFNlbGVjdGFibGVTZXR0aW5ncztcclxuICByb3dTZWxlY3Rpb246IHN0cmluZ1tdID0gW107XHJcbiAgbXlTZWxlY3Rpb24gPSBuZXcgTWFwKCk7XHJcbiAgaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHt9O1xyXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDsgLy8gZm9yIGtlbmRvIGdyaWQgYnVpbHQtaW5cclxuICBwdWJsaWMgcHJldmlvdXNOZXh0OiBib29sZWFuO1xyXG4gIHB1YmxpYyBncmlkQnRuO1xyXG4gIHB1YmxpYyBwYWdlYWJsZTogYW55ID0gZmFsc2U7XHJcbiAgcHVibGljIGZpbHRlckdyb3VwID0gbmV3IFpHcm91cCgpO1xyXG4gIHB1YmxpYyBhZHZmaWx0ZXJHcm91cCA9IG5ldyBaR3JvdXAoKTtcclxuICBwdWJsaWMgaXNTaG93QWR2RmlsdGVyID0gZmFsc2U7XHJcbiAgcHVibGljIGdyaWRUaXRsZTogYW55O1xyXG4gIHB1YmxpYyBpc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgdGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHM7XHJcbiAgcHJpdmF0ZSBpc0NvbHVtbkhlYWRlclRyYW5zbGF0ZWQgPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1Jlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjaGVja2JveENvbHVtblBpbm5lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBncm91cERlc2NyaXB0b3I6IEdyb3VwRGVzY3JpcHRvcltdID0gW107XHJcblxyXG4gIFxyXG4gIHBhcmFtczogWkdyaWRQb3N0QXBpUGFyYW1zID0ge1xyXG4gICAgcmVmZXJJZDogbnVsbCxcclxuICAgIHBhZ2VObzogMCxcclxuICAgIHBhZ2VTaXplOiAyMCxcclxuICAgIHNvcnRDb2x1bW5OYW1lOiAnJyxcclxuICAgIHNvcnRPcmRlcjogJycsXHJcbiAgICBzb3J0Q29sdW1uTmFtZXM6IFtdLFxyXG4gICAgc29ydE9yZGVyczogW10sXHJcbiAgICBmaWx0ZXJQYXJhbXM6IFtdLFxyXG4gICAgcGFyYW1ldGVyczogJycsXHJcbiAgICBmaWx0ZXJzOiAnJyxcclxuICAgIGNvbHVtbnM6ICcnLFxyXG4gICAgZ3JhbnRUeXBlOiA0XHJcbiAgfTtcclxuXHJcbiAgZ3JpZFN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgY29sdW1uczogYW55W107XHJcbiAgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQ6IGFueVtdO1xyXG4gIGVkaXRhYmxlQ29sdW1uczogYW55W107XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcGFnZVNpemVzOiBib29sZWFuIHwgYW55W107XHJcbiAgZ3JpZFN0b3JhZ2VLZXk6IHN0cmluZztcclxuICBncmlkRGVmYXVsdFN0YXRlRXhpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc05ldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBlZGl0ZWRSb3dJbmRleDogbnVtYmVyO1xyXG4gIHB1YmxpYyBncmlkU2V0dGluZzogWkdyaWRTZXR0aW5ncztcclxuICBwcml2YXRlIGVudmlyb25tZW50OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGZvbnRBd2VTb21lU2VydmljZTogRm9udEF3ZVNvbWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHdlYkFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB6Y29yZVNlcnZpY2U6IFpDb3JlU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbWFpblNlcnZpY2U6IE1haW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogWkdyaWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdGF0ZVNldHRpbmdTZXJ2aWNlOiBTdGF0ZVNldHRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNvdXJjZUFwaVNlcnZpY2U6IFJlc291cmNlQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoY29tcG9uZW50U2VydmljZSk7XHJcbiAgICB0aGlzLmVudmlyb25tZW50ID0gdGhpcy56Y29yZVNlcnZpY2UuZ2V0RW52aXJvbm1lbnQoKTtcclxuICAgIHRoaXMub2F1dGhVcmwgPSB0aGlzLnpjb3JlU2VydmljZS5nZXRPYXV0aFVybCgpO1xyXG4gICAgdGhpcy5hbGxSZXN1bHRzID0gdGhpcy5hbGxSZXN1bHRzLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLnJlZnJlc2hEYXRhID0gdGhpcy5yZWZyZXNoRGF0YS5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5jbGVhckRhdGEgPSB0aGlzLmNsZWFyRGF0YS5iaW5kKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5zZXR1cElubmVyRmllbGQoKTtcclxuICAgIHRoaXMuc2V0dXBGaWx0ZXJGZWF0dXJlKCk7XHJcbiAgICB0aGlzLnNldHVwR3JpZEJ1dHRvbnMoKTtcclxuICAgIHRoaXMuc2V0dXBHcmlkQ29tcG9uZW50QXR0cmlidXRlcygpO1xyXG4gICAgdGhpcy5ncmlkU2V0dGluZyA9IHsgZ3JpZFN0YXRlOiB0aGlzLmdyaWRTZXJ2aWNlLnNldHVwR3JpZFNldHRpbmcodGhpcy5kYXRhKSB9O1xyXG5cclxuICAgIHRoaXMuc2V0dXBTdWJzY3JpcHRpb25Gb3JHcmlkU3ViamVjdCgpO1xyXG5cclxuICAgIHN1cGVyLnRyYW5zbGF0ZVRvb2xCYXJJdGVtcygpLnBpcGUodGFwKCgpID0+IHtcclxuICAgICAgdGhpcy5ncmlkQ2FsbGJhY2sodGhpcy5ncm91cCk7XHJcbiAgICB9KSkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFNlcnZpY2UuZGVjcmVtZW50Q29tcG9uZW50Q291bnRlckZvckZpZWxkKHRoaXMuZGF0YSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XHJcbiAgICBjb25zdCBpc0JhY2tOYXZpZ2F0ZWQgPSAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnbmF2aWdhdGVkUmVsb2FkR3JpZCcpID09PSAndHJ1ZScpO1xyXG4gICAgdGhpcy5zaG93SGlkZVJlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbigpO1xyXG5cclxuICAgIGlmIChpc0JhY2tOYXZpZ2F0ZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KCduYXZpZ2F0ZWRSZWxvYWRHcmlkJywgSlNPTi5zdHJpbmdpZnkoZmFsc2UpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gR3JpZCBTdGF0ZSAocGFnaW5hdGlvbiwgc29ydGFibGUsIGZpbHRlciwgb3JkZXJpbmcpXHJcbiAgcHVibGljIGRhdGFTdGF0ZUNoYW5nZShzdGF0ZTogRGF0YVN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuemdyaWQuZGF0YVN0YXRlQ2hhbmdlKHN0YXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJhYmxlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydGFibGUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2NrZWQoY29sU2V0dGluZzogYW55KSB7XHJcbiAgICBpZiAoY29sU2V0dGluZ1sncGlubmVkTGVmdCddID09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwdWJsaWMgb25FeGNlbEV4cG9ydChlOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbFJlcXVpcmVkRm9ybWF0ID0gW107XHJcblxyXG4gICAgLy8gQ29sbGVjdCBjb2x1bW5zIHRoYXQgaGF2ZSBhIHNwZWNpZmljIEV4Y2VsIGNlbGwgZm9ybWF0XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBpZiAoY29sLkV4Y2VsQ2VsbEZvcm1hdCkge1xyXG4gICAgICAgIGNvbFJlcXVpcmVkRm9ybWF0LnB1c2goeyBjb2xOYW1lOiBjb2wuRGlzcGxheU5hbWUgPz8gY29sLk5hbWUsIGNlbGxGb3JtYXQ6IGNvbC5FeGNlbENlbGxGb3JtYXQsIGNvbEluZGV4OiBudWxsIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoY29sUmVxdWlyZWRGb3JtYXQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBlLndvcmtib29rLnNoZWV0c1swXS5yb3dzLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgaWYgKHJvdy50eXBlID09PSAnaGVhZGVyJykge1xyXG4gICAgICAgIC8vIENoZWNrIGhlYWRlciBjZWxscyB0byBmaW5kIG1hdGNoaW5nIGNvbHVtbiBuYW1lcyBhbmQgc3RvcmUgdGhlaXIgaW5kZXhcclxuICAgICAgICByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIGNvbFJlcXVpcmVkRm9ybWF0LmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgaWYgKGNlbGwudmFsdWUgPT09IGNvbC5jb2xOYW1lKSB7XHJcbiAgICAgICAgICAgICAgY29sLmNvbEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHJvdy50eXBlID09PSAnZGF0YScpIHtcclxuICAgICAgICAvLyBBcHBseSB0aGUgZm9ybWF0IHRvIGNlbGxzIGluIGRhdGEgcm93cyBpZiB0aGVpciBpbmRleCBtYXRjaGVzXHJcbiAgICAgICAgcm93LmNlbGxzLmZvckVhY2goKGNlbGwsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICBjb2xSZXF1aXJlZEZvcm1hdC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gY29sLmNvbEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgY2VsbC5mb3JtYXQgPSBjb2wuY2VsbEZvcm1hdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEdyaWQgQ29sdW1uc1xyXG4gIHB1YmxpYyBpc1NlbGVjdE9wdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucykge1xyXG4gICAgICB0aGlzLnNlbGVjdGFibGVTZXR0aW5ncyA9IHtcclxuICAgICAgICBjaGVja2JveE9ubHk6IHRoaXMuZGF0YS5DaGVja2JveE9ubHkgPz8gZmFsc2UsXHJcbiAgICAgICAgbW9kZTogKHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zPy50b0xvd2VyQ2FzZSgpID09PSAnbXVsdGlwbGUnKSA/ICdtdWx0aXBsZScgOiAnc2luZ2xlJ1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDb2x1bW5zKGNvbHVtbk5hbWU6IHN0cmluZywgY29sdW1uczogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSB7XHJcbiAgICB0aGlzLmdyb3VwW2NvbHVtbk5hbWVdID0gdGhpcy53cmFwQ29sdW1uTmFtZXNJbkZpZWxkRWxlbWVudChjb2x1bW5zKTtcclxuICAgIHRoaXMuZ2VuZXJhdGVHcmlkQ29sdW1ucygpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljICRzZXRDb2x1bW5zKGNvbHVtbk5hbWU6IHN0cmluZywgY29sdW1uczogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuZ3JvdXBbY29sdW1uTmFtZV0gPSB0aGlzLndyYXBDb2x1bW5OYW1lc0luRmllbGRFbGVtZW50KGNvbHVtbnMpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVHcmlkQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3cmFwQ29sdW1uTmFtZXNJbkZpZWxkRWxlbWVudChjb2x1bW5MaXN0OiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pIHtcclxuICAgIHJldHVybiBvZihjb2x1bW5MaXN0Lm1hcChjb2x1bW4gPT4ge1xyXG4gICAgICBjb25zdCBpc0hpZGRlbjogYm9vbGVhbiA9IGNvbHVtbi5IaWRkZW47XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgTmFtZTogY29sdW1uLk5hbWUsXHJcbiAgICAgICAgVmFsdWU6IGNvbHVtbi5Db2RlLFxyXG4gICAgICAgIFR5cGU6IGNvbHVtbi5UeXBlLFxyXG4gICAgICAgIGdyaWRDb2xWaXNpYmxlOiAhaXNIaWRkZW4sXHJcbiAgICAgICAgRW5hYmxlSGlkaW5nOiBjb2x1bW4uRW5hYmxlSGlkaW5nIHx8IGZhbHNlLFxyXG4gICAgICAgIEVuYWJsZUdyaWRWYWx1ZTogY29sdW1uLkVuYWJsZUdyaWRWYWx1ZSB8fCBmYWxzZSxcclxuICAgICAgICB3aWR0aDogMTAwICsgY29sdW1uLk5hbWUubGVuZ3RoICogNCxcclxuICAgICAgICBlbmFibGVGaWx0ZXJpbmc6IGZhbHNlLFxyXG4gICAgICAgIGVuYWJsZVNvcnRpbmc6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlUGlubmluZzogdHJ1ZSxcclxuICAgICAgICBEaXZDbGFzczogJ2NvbC14cy0xMiBjb2wtc20tNicsXHJcbiAgICAgICAgSXNFZGl0YWJsZUluR3JpZDogY29sdW1uLkVkaXRhYmxlXHJcbiAgICAgIH07XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlR3JpZENvbHVtbnMoZ3JpZFNldHRpbmc/OiBaR3JpZFNldHRpbmdzKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGNvbHVtbkZpZWxkcyQ6IE9ic2VydmFibGU8YW55PiA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgdGhpcy5kYXRhLkNvbHVtbkZpZWxkcyxcclxuICAgICAgdGhpcy5ncm91cFxyXG4gICAgKSB8fCBvZihbXSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRhdGEuQ29sdW1uRmllbGRzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZC9FbXB0eSBncmlkKCR7dGhpcy5kYXRhLk5hbWV9KSBjb2x1bW5GaWVsZGApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29sdW1uRmllbGRzJCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnRmFpbCB0byBnZW5lcmF0ZSBncmlkIGNvbHVtbiBmaWVsZHMuJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMpO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sdW1uRmllbGRzJC5waXBlKFxyXG4gICAgICB0YXAoY29sdW1uRmllbGQgPT4ge1xyXG4gICAgICAgIGlmICghY29sdW1uRmllbGQpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZC9FbXB0eSBncmlkKCR7dGhpcy5kYXRhLk5hbWV9KSBkYXRhIHRvIGdlbmVyYXRlIGNvbHVtbmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY29sdW1ucyA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zID0gW107XHJcblxyXG4gICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5nZXRHcmlkQ29sdW1ucyh7XHJcbiAgICAgICAgICAgIGNvbHVtbkZpZWxkOiBjb2x1bW5GaWVsZCxcclxuICAgICAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLFxyXG4gICAgICAgICAgICBncm91cDogdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbnM6IGdyaWRTZXR0aW5nPy5jb2x1bW5Db25maWd1cmF0aW9ucyxcclxuICAgICAgICAgICAgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zOiBnZW5lcmF0ZUhpZGRlbkNvbHVtbnMsXHJcbiAgICAgICAgICAgIGdyaWRBdHRyaWJ1dGVzOiB0aGlzLmRhdGFcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmIChnZW5lcmF0ZUhpZGRlbkNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlSGlkZGVuQ29sdW1uc0ZpZWxkID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRlSGlkZGVuQ29sdW1uc0ZpZWxkID0gZ2VuZXJhdGVIaWRkZW5Db2x1bW5zLm1hcChmaWVsZCA9PiAoeyBmaWVsZDogZmllbGQsIFZpc2libGU6IHRydWUsIElzUmVxdWlyZWQ6IGZhbHNlLCBWYWx1ZTogZmllbGQgfSkpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGdlbmVyYXRlSGlkZGVuQ29sdW1uc0ZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZC5wdXNoKGZpZWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnRyYW5zbGF0ZUNvbHVtbkhlYWRlcih0aGlzLmNvbHVtbnMpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldEljb25OYW1lKGdyaWRDZWxsUmVwbGFjZVZhbHVlOiBhbnksIHZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChncmlkQ2VsbFJlcGxhY2VWYWx1ZSAmJiBncmlkQ2VsbFJlcGxhY2VWYWx1ZVt2YWx1ZV0pIHtcclxuICAgICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuZ2V0Rm9udEF3ZXNvbWUoZ3JpZENlbGxSZXBsYWNlVmFsdWVbdmFsdWVdLCB0aGlzLmZvbnRBd2VTb21lU2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE9uY2VsbCBjbGljayBoYW5kbGluZ1xyXG4gIC8vIDEuIGluQ2VsbCBFZGl0XHJcbiAgLy8gMi4gT25JdGVtQ2xpY2tcclxuICAvLyAzLiBOYXZpZ2F0ZSB0byBGb3JtIFBhZ2VcclxuICAvLyA0LiBTaG93IEZvcm0gUGFnZSBpbiB0aGUgc2FtZSBwYWdlIChERUMgYW5kIERyYXdlcilcclxuICBwdWJsaWMgY2VsbENsaWNrSGFuZGxlcihldmVudDogQ2VsbENsaWNrRXZlbnQpIHtcclxuICAgIC8vIFJpZ2h0IGNsaWNrIGhhbmRsZXJcclxuICAgIGlmIChldmVudC50eXBlID09PSAnY29udGV4dG1lbnUnKSB7XHJcbiAgICAgIHRoaXMuZGF0YUl0ZW1Db250ZXh0TWVudS5zaG93Q29udGV4dE1lbnVNYW51YWxseShldmVudCwgZXZlbnQuZGF0YUl0ZW0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGlzYWJsZUFsbENvbHVtbkNlbGxDbGlja0hhbmRsZXIgPSB0aGlzLmRhdGEuRGlzYWJsZUNlbGxDbGlja0hhbmRsZXIgPyB0aGlzLmRhdGEuRGlzYWJsZUNlbGxDbGlja0hhbmRsZXIgOiBmYWxzZTtcclxuICAgIGNvbnN0IGlzQ29tbWFuZENvbHVtbiA9IGV2ZW50LmNvbHVtbi5jb25zdHJ1Y3Rvci5uYW1lID09ICdDb21tYW5kQ29sdW1uQ29tcG9uZW50JyA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy50b29sdGlwRGlyKSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcERpci5oaWRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFkaXNhYmxlQWxsQ29sdW1uQ2VsbENsaWNrSGFuZGxlciAmJiAhaXNDb21tYW5kQ29sdW1uKSB7XHJcbiAgICAgIGNvbnN0IGluQ2VsbEVkaXRhYmxlID0gdGhpcy5kYXRhLkluQ2VsbEVkaXRhYmxlID8gdGhpcy5kYXRhLkluQ2VsbEVkaXRhYmxlIDogZmFsc2U7XHJcbiAgICAgIGlmIChpbkNlbGxFZGl0YWJsZSkge1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihzID0+IHMuaXNFZGl0YWJsZUluRGF0YUl0ZW0gPT09IHRydWUpO1xyXG4gICAgICAgIGlmICghIXRoaXMuZWRpdGFibGVDb2x1bW5zKSB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRhYmxlQ29sdW1ucy5tYXAocyA9PiBldmVudC5zZW5kZXIuZWRpdENlbGwoZXZlbnQucm93SW5kZXgsIGV2ZW50LmNvbHVtbkluZGV4LCB0aGlzLmNyZWF0ZUZvcm1Hcm91cChldmVudC5kYXRhSXRlbSwgcy5maWVsZCkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2NlbGxDbGljayBldmVudDogJywgZXZlbnQpO1xyXG4gICAgICAgIC8vdGhpcy5jYWNoZVNlcnZpY2Uuc2V0KCdsYXN0Q2xpY2tlZEdyaWRSZWNvcmQnLCBldmVudCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuT25JdGVtQ2xpY2spIHtcclxuICAgICAgICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uSXRlbUNsaWNrKTtcclxuICAgICAgICAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgICAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAvLyBzdG9yZSBjbGlja2VkIGlkIGFuZCBhY3Rpb24gYXMgZWRpdCB0byB0aGUgc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgICAgICAvLyBPbkl0ZW1DbGljaywgcHJvamVjdCBoYXZlIHRvIHNldCB0aGVtc2VsZi5cclxuICAgICAgICAgIHRoaXMubWFpblNlcnZpY2Uuc2V0TmF2aWdhdGlvblBhcmFtcyhbZXZlbnQuZGF0YUl0ZW0uSWQsICdlZGl0J10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZWwoZXZlbnQuZGF0YUl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdENlbGxDbG9zZUhhbmRsZXIoYXJnczogYW55KSB7XHJcbiAgICBjb25zdCB7IGZvcm1Hcm91cCwgZGF0YUl0ZW0gfSA9IGFyZ3M7XHJcbiAgICBpZiAoIWZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICBhcmdzLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5kaXJ0eSkge1xyXG4gICAgICB0aGlzLmVkaXRhYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIocyA9PiBzLmlzRWRpdGFibGVJbkRhdGFJdGVtID09PSB0cnVlKTtcclxuICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMubWFwKHMgPT5cclxuICAgICAgICBPYmplY3QuYXNzaWduKGRhdGFJdGVtLCB7IFtzLmZpZWxkXTogZm9ybUdyb3VwLnZhbHVlW3MuZmllbGRdIH0pKTtcclxuICAgICAgLy8gdGhpcy5teVNlbGVjdGlvbi5tYXAocyA9PiAocy5JZCA9PT0gZGF0YUl0ZW0uSWQpID8gT2JqZWN0LmFzc2lnbihzLCBkYXRhSXRlbSkgOiBudWxsKTtcclxuXHJcbiAgICAgIC8vIEluaXRpYWxpemUgbXlTZWxlY3Rpb24gaWYgaXQncyB1bmRlZmluZWRcclxuICAgICAgaWYgKCF0aGlzLm15U2VsZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5teVNlbGVjdGlvbiA9IG5ldyBNYXAoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5teVNlbGVjdGlvbi5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlLklkID09PSBkYXRhSXRlbS5JZCkge1xyXG4gICAgICAgICAgdGhpcy5teVNlbGVjdGlvbi5zZXQoa2V5LCB7IC4uLnZhbHVlLCAuLi5kYXRhSXRlbSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uTmF2aWdhdGVUbyhldmVudDogYW55LCBjbGlja0FjdGlvbjogYW55LCByb3dEYXRhOiBhbnksIGNlbGxEYXRhOiBzdHJpbmcpIHtcclxuICAgIC8vIGNvbnN0IG4gPSBjb2xTZXR0aW5nLm5hdmlnYXRlVG8ucmVwbGFjZSgnLzppZCcsIGNlbGxEYXRhKTtcclxuICAgIGNvbnN0IG4gPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgY2xpY2tBY3Rpb24uQ2xpY2spO1xyXG4gICAgaWYgKG4pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiAnemdyaWQtb25OYXZpZ2F0ZVRvJyxcclxuICAgICAgICB0YXJnZXQ6IGNsaWNrQWN0aW9uLkNsaWNrLFxyXG4gICAgICAgIHJvd0RhdGE6IHJvd0RhdGEsXHJcbiAgICAgICAgZGF0YTogY2VsbERhdGFcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlZGl0TW9kZWwoZGF0YUl0ZW06IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwpIHtcclxuICAgICAgLy8gRWRpdCBpbmNlbGwgZmllbGRcclxuICAgICAgY29uc3QgY29sRmllbGRzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMsIHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogJ3pncmlkLWNlbGxDbGljaycsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuRWRpdENsaWNrVVJMLFxyXG4gICAgICAgIGRhdGE6IGRhdGFJdGVtLFxyXG4gICAgICAgIGNvbHVtbkZpZWxkcyQ6IGNvbEZpZWxkc1xyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmRhdGFbJ0NvbnRhaW5lckZvcm0nXSkge1xyXG4gICAgICB0aGlzLnNob3dGb3JtUGFnZS5lbWl0KHRydWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmdyb3VwLmVkaXRNb2RlbFVSTF0sIHtcclxuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIC8vc2tpcExvY2F0aW9uQ2hhbmdlOiBmYWxzZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vLy8gV2hlbiBjbGlja2VkIHJvdXRlIHRvIHBhZ2VcclxuICAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ncm91cC5lZGl0TW9kZWxVUkwsIGRhdGFJdGVtLklkLCAnZWRpdCddLCB7XHJcbiAgICAgIC8vICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlXHJcbiAgICAgIC8vfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25CdG5DbGljayhldmVudDogYW55LCBjb2xTZXR0aW5nOiBhbnksIHJvd0RhdGE6IGFueSwgY2VsbERhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5vbk5hdmlnYXRlVG8oZXZlbnQsIGNvbFNldHRpbmcsIHJvd0RhdGEsIGNlbGxEYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwKGRhdGFJdGVtOiBhbnksIGZpZWxkTmFtZTogYW55KTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgW2ZpZWxkTmFtZV06IGRhdGFJdGVtW2ZpZWxkTmFtZV1cclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEhlbHBlciBmdW5jdGlvbnNcclxuICBwdWJsaWMgZ2V0Q2xhc3MoZGF0YUl0ZW06IGFueSwgY29sOiBhbnkpIHtcclxuICAgIGxldCBuZ0NsYXNzID0gJ2dyaWRDZWxsICc7XHJcbiAgICBpZiAoY29sLmZpZWxkVHlwZSA9PT0gJ251bWJlcicgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ2N1cnJlbmN5JyB8fCBjb2wuZmllbGRUeXBlID09PSAnem51bWVyaWMnKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gJ3JpZ2h0QWxpZ25lZCAnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhSXRlbVtgJHtjb2wuZmllbGR9X0NsYXNzYF0pIHtcclxuICAgICAgbmdDbGFzcyArPSBgJHtkYXRhSXRlbVtgJHtjb2wuZmllbGR9X0NsYXNzYF19IGA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbC5DbGFzcykge1xyXG4gICAgICBuZ0NsYXNzICs9IGAke2NvbC5DbGFzc30gYDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sLlBvcE92ZXJDb250ZW50KSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gJyB3aXRoUG9wb3ZlckluR3JpZCc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5nQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9ybWF0KGNvbDogYW55LCBkZWZhdWx0Rm9ybWF0PzogYW55KSB7XHJcbiAgICBsZXQgZm9ybWF0ID0gJyc7XHJcbiAgICBpZiAoY29sLkZvcm1hdE9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBmb3JtYXQgPSBkZWZhdWx0Rm9ybWF0ID8gZGVmYXVsdEZvcm1hdCA6ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZm9ybWF0QXJyID0gY29sLkZvcm1hdE9wdGlvbnMuc3BsaXQoJy4nKVxyXG4gICAgICBsZXQgZHAgPSAwO1xyXG5cclxuICAgICAgaWYgKGZvcm1hdEFyci5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgZHAgPSBmb3JtYXRBcnJbMV0ubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZHAgIT09IDApIHtcclxuICAgICAgICBmb3JtYXQgPSBgMS4ke2RwfS0ke2RwfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWxsUmVzdWx0cygpOiBPYnNlcnZhYmxlPEV4Y2VsRXhwb3J0RGF0YT4ge1xyXG4gICAgY29uc3QgZ3JpZENvbnRyb2wgPSB0aGlzLnpncmlkIGFzIFpHcmlkO1xyXG4gICAgY29uc3QgZ3JpZENvbXBvbmVudCA9IHRoaXMuemdyaWQuZ3JpZCBhcyBHcmlkQ29tcG9uZW50O1xyXG4gICAgY29uc3QgZGF0YSA9IGdyaWRDb21wb25lbnQuZGF0YSBhcyBHcmlkRGF0YVJlc3VsdDtcclxuXHJcbiAgICBjb25zdCByZXNvdXJjZVVSTEZvckdlbmVyYXRlRGF0YSA9IHRoaXMuZGF0YS5FeHBvcnREYXRhUmVzb3VyY2VVUkwgPyB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwodGhpcy5kYXRhLkV4cG9ydERhdGFSZXNvdXJjZVVSTCkgOiBncmlkQ29udHJvbC5wYWdpbmF0aW9uQXBpUG9zdFVybDtcclxuXHJcbiAgICAvLyBOZWVkIHRvIGNsb25lLCBpZiBub3Qgd2lsbCBhZmZlY3QgdGhlIGdyaWQgcGFyYW1zLlxyXG4gICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wYXJhbXMpO1xyXG4gICAgcGFyYW1zLnBhZ2VObyA9IDA7XHJcbiAgICBwYXJhbXMucGFnZVNpemUgPSBkYXRhLnRvdGFsO1xyXG5cclxuICAgIGNvbnN0IGRhdGVUaW1lUmVnZXggPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9KD86W1RcXHNdXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGR7MSw3fSk/KD86WnxbXFwrXFwtXVxcZHsyfTpcXGR7Mn0pPyk/JC87XHJcblxyXG4gICAgLy8gRnVuY3Rpb24gdG8gY29udmVydCBkYXRlIHN0cmluZ3MgdG8gRGF0ZSBvYmplY3RzXHJcbiAgICBjb25zdCBjb252ZXJ0RGF0ZVN0cmluZ3NUb0RhdGVzID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7IC4uLml0ZW0gfTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBuZXdJdGVtKSB7XHJcbiAgICAgICAgICBpZiAobmV3SXRlbS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmV3SXRlbVtrZXldO1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcgYW5kIG1hdGNoZXMgdGhlIGRhdGVUaW1lUmVnZXggcGF0dGVyblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBkYXRlVGltZVJlZ2V4LnRlc3QodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgbmV3SXRlbVtrZXldID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdJdGVtO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwUG9zdCQocmVzb3VyY2VVUkxGb3JHZW5lcmF0ZURhdGEsIHBhcmFtcykucGlwZShcclxuICAgICAgbWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBDb252ZXJ0IGRhdGUgc3RyaW5ncyB0byBEYXRlIG9iamVjdHNcclxuICAgICAgICBkYXRhLmRhdGFTZXQgPSBjb252ZXJ0RGF0ZVN0cmluZ3NUb0RhdGVzKGRhdGEuZGF0YVNldCk7XHJcblxyXG4gICAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3VsdCBmb3IgRXhjZWwgZXhwb3J0XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBFeGNlbEV4cG9ydERhdGEgPSB7XHJcbiAgICAgICAgICBkYXRhOiBwcm9jZXNzKGRhdGEuZGF0YVNldCwge30pLmRhdGFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoR3JpZChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBjb25zdCBfZ3JpZE9wdGlvblNlZ21lbnQgPSBldmVudC50YXJnZXQudHJpbSgpLnNwbGl0KCcuJyk7XHJcbiAgICBjb25zdCBfZ3JpZE9wdGlvbiA9IF9ncmlkT3B0aW9uU2VnbWVudFsxXTtcclxuICAgIGlmIChfZ3JpZE9wdGlvbikge1xyXG4gICAgICBjb25zdCB6Z3JpZENvbnRyb2wgPSBncm91cFtfZ3JpZE9wdGlvbl0gYXMgWkdyaWQ7XHJcbiAgICAgIGlmICh6Z3JpZENvbnRyb2wpIHtcclxuICAgICAgICB6Z3JpZENvbnRyb2wuZ2V0RGF0YSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdVbmFibGUgdG8gZmluZCBncmlkIHZhbHVlOiAnICsgX2dyaWRPcHRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnSW52YWxpZCByZWZyZXNoR3JpZCBldmVudDogJywgZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZnJlc2hEYXRhKCkge1xyXG4gICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJEYXRhKCkge1xyXG4gICAgdGhpcy56Z3JpZC5jbGVhckRhdGEoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0cnVuY2F0ZVRleHQodGV4dDogc3RyaW5nLCBsaW1pdDogbnVtYmVyID0gMjAwKTogc3RyaW5nIHtcclxuICAgIC8vIENoZWNrIGlmIHRoZSB0ZXh0IGlzIGxvbmdlciB0aGFuIHRoZSBsaW1pdFxyXG4gICAgaWYgKHRleHQubGVuZ3RoID4gbGltaXQpIHtcclxuICAgICAgcmV0dXJuIGAke3RleHQuc3Vic3RyKDAsIGxpbWl0KX0uLi4gKENsaWNrIHRvIHZpZXcgbW9yZSlgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHQ7IC8vIFJldHVybiB0aGUgZnVsbCB0ZXh0IGlmIGl0J3Mgd2l0aGluIHRoZSBsaW1pdFxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJvd1NlbGVjdGlvbktleSA9IChjb250ZXh0OiBSb3dBcmdzKTogYW55ID0+IHtcclxuICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGtleSB1c2luZyBlaXRoZXIgdGhpcy5kYXRhLlVuaXF1ZUtleSBvciBjb250ZXh0LmRhdGFJdGVtLklkLlxyXG4gICAgY29uc3Qga2V5ID0gKHRoaXMuZGF0YS5VbmlxdWVLZXkgPz8gY29udGV4dC5kYXRhSXRlbS5JZCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YS5VbmlxdWVLZXkgJiYgY29udGV4dC5kYXRhSXRlbS5JZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdBIHVuaXF1ZSBjb2x1bW4gZmllbGQgaXMgcmVxdWlyZWQuIEVuc3VyZSBlaXRoZXIgdGhlIElkIGNvbHVtbiBpcyBwcmVzZW50IG9yIHRoZSBVbmlxdWVLZXkgcHJvcGVydHkgaXMgc2V0IGZvciB6Z3JpZC4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplIG15U2VsZWN0aW9uIGlmIGl0J3MgdW5kZWZpbmVkXHJcbiAgICBpZiAoIXRoaXMubXlTZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5teVNlbGVjdGlvbiA9IG5ldyBNYXAoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdG9yZSB0aGUgZGF0YSBpdGVtIGluIHRoZSBteVNlbGVjdGlvbiBtYXAgd2l0aCB0aGUgZ2VuZXJhdGVkIGtleS5cclxuICAgIHRoaXMubXlTZWxlY3Rpb24uc2V0KGtleSwgY29udGV4dC5kYXRhSXRlbSk7XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSBnZW5lcmF0ZWQga2V5LlxyXG4gICAgcmV0dXJuIGtleTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFZhbHVlcygpOiBhbnkge1xyXG4gICAgLy8gTWFwIGVhY2gga2V5IGluIHJvd1NlbGVjdGlvbiB0byBpdHMgY29ycmVzcG9uZGluZyBkYXRhIGl0ZW0gaW4gdGhlIG15U2VsZWN0aW9uIG1hcC5cclxuICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkID0gdGhpcy5yb3dTZWxlY3Rpb24ubWFwKGtleSA9PiB0aGlzLm15U2VsZWN0aW9uLmdldChrZXkpKTtcclxuXHJcbiAgICAvLyBSZXR1cm4gdGhlIGFycmF5IG9mIHNlbGVjdGVkIHJlY29yZHMuXHJcbiAgICByZXR1cm4gc2VsZWN0ZWRSZWNvcmQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgICAvLyBDaGVjayBpZiBteVNlbGVjdGlvbiBpcyBkZWZpbmVkIGJlZm9yZSB0cnlpbmcgdG8gY2xlYXIgaXRcclxuICAgIGlmICh0aGlzLm15U2VsZWN0aW9uKSB7XHJcbiAgICAgIC8vIENsZWFyIHRoZSBtYXAgdGhhdCBzdG9yZXMgc2VsZWN0ZWQgZGF0YSBpdGVtcy5cclxuICAgICAgdGhpcy5teVNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gT3B0aW9uYWxseSwgeW91IGNhbiBpbml0aWFsaXplIGl0IGlmIGl0J3MgdW5kZWZpbmVkXHJcbiAgICAgIHRoaXMubXlTZWxlY3Rpb24gPSBuZXcgTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2xlYXIgdGhlIGFycmF5IHRoYXQgdHJhY2tzIHNlbGVjdGVkIGtleXMuXHJcbiAgICB0aGlzLnJvd1NlbGVjdGlvbiA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB7fTtcclxuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xyXG4gICAgICB0aGlzLnpncmlkLmdldERhdGFCaW5kaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCd0aGlzLnpncmlkIGlzIHVuZGVmaW5lZC4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRHcmlkRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmlzVXNlTG9jYWxEYXRhKCkgPyAodGhpcy56Z3JpZC5kYXRhIHx8IHRoaXMuemdyaWQub3JpZ2luYWxEYXRhKSA6ICh0aGlzLnpncmlkLmdyaWQuZGF0YSAmJiB0aGlzLnpncmlkLmdyaWQuZGF0YS5kYXRhID8gdGhpcy56Z3JpZC5ncmlkLmRhdGEuZGF0YSA6IFtdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREYXRhID0gKGdEYXRhOiBhbnkpID0+IHtcclxuICAgIGlmICh0aGlzLnpncmlkKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgICB0aGlzLnpncmlkLmRhdGEgPSBnRGF0YTtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5EaXNhYmxlQXV0b0FwcGVuZEdyaWREYXRlRmlsdGVyQ29sKSB7XHJcbiAgICAgICAgICB0aGlzLnNldERhdGVDb2xGb3JGaWx0ZXJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy56Z3JpZC5ncmlkLmRhdGEgPSB7XHJcbiAgICAgICAgICBkYXRhOiBnRGF0YSxcclxuICAgICAgICAgIHRvdGFsOiBnRGF0YS50b3RhbENvdW50XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0dXBHcmlkV2l0aElubGluZUVkaXQoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnemdyaWQgaXMgbnVsbCBmb3Igc2V0RGF0YS4nKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRIZWFkZXJUZXh0KGNvbHVtbk5hbWU6IHN0cmluZywgbmV3SGVhZGVyVGl0bGU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZ3JpZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcbiAgICBncmlkQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoY29sLk5hbWUgPT09IGNvbHVtbk5hbWUpIHtcclxuICAgICAgICBjb2wudGl0bGUgPSBuZXdIZWFkZXJUaXRsZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBHcmlkSXRlbSk6IGFueSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKGl0ZW0uZGF0YVsnSWQnXSB8fCBpbmRleCk7XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVXNlTG9jYWxEYXRhKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5EYXRhU291cmNlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkodGhpcy5kYXRhLlJlc291cmNlVVJMKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBncmlkIHNldHVwXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRDb21wb25lbnRBdHRyaWJ1dGVzKCkge1xyXG4gICAgLy8gR3JpZCBkZWZhdWx0IHNldHRpbmdcclxuICAgIHRoaXMuZ3JpZFRpdGxlID0gdGhpcy5kYXRhLlRpdGxlO1xyXG4gICAgdGhpcy5jb2x1bW5zID0gW107XHJcbiAgICB0aGlzLnBhZ2VTaXplcyA9IFs1LCAxMCwgMjAsIDUwLCAxMDAsIDIwMCwgNTAwXTtcclxuICAgIHRoaXMucHJldmlvdXNOZXh0ID0gdGhpcy5kYXRhWydFbmFibGVQcmV2aW91c05leHRCdXR0b24nXSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBbTW9iaWxlXSBEaXNhYmxlIHBhZ2Ugc2l6ZXMgaWYgUGFnZVNpemVzIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlIG9yIG9uIGEgbW9iaWxlIHNjcmVlbi5cclxuICAgIGlmICh0aGlzLmRhdGEuUGFnZVNpemVzID09PSBmYWxzZSB8fCB0aGlzLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgICAgdGhpcy5wYWdlU2l6ZXMgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDb25maWd1cmUgcGFnaW5hdGlvbiBzZXR0aW5ncy5cclxuICAgIHRoaXMucGFnZWFibGUgPSB0aGlzLmRhdGEucGFnZUFibGUgIT0gdW5kZWZpbmVkID8gdGhpcy5kYXRhLnBhZ2VBYmxlIDoge1xyXG4gICAgICByZXNwb25zaXZlOiB0cnVlLFxyXG4gICAgICBidXR0b25Db3VudDogMyxcclxuICAgICAgcGFnZVNpemVzOiB0aGlzLnBhZ2VTaXplcyxcclxuICAgICAgcHJldmlvdXNOZXh0OiB0aGlzLnByZXZpb3VzTmV4dCxcclxuICAgIH07XHJcblxyXG4gICAgLy8gQ29uZmlndXJlIGdyaWQgc2VsZWN0aW9uIG9wdGlvbnMgaWYgc2V0IFNlbGVjdE9wdGlvbnMgaW4gZmllbGQgZWxlbWVudCBhdHRyaWJ1dGUuXHJcbiAgICBpZiAodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGBFcnJvcjogZ3JpZCgke3RoaXMuZGF0YS5OYW1lfSksIHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zIHNob3VsZCBiZSBhIHN0cmluZyB3aXRoIHZhbHVlICdzaW5nbGUnIG9yICdtdWx0aXBsZScuYCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlU2V0dGluZ3MgPSB7XHJcbiAgICAgICAgICBjaGVja2JveE9ubHk6IHRoaXMuZGF0YS5DaGVja2JveE9ubHkgPz8gZmFsc2UsXHJcbiAgICAgICAgICBtb2RlOiB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucy50b0xvd2VyQ2FzZSgpID09PSAnc2luZ2xlJyA/ICdzaW5nbGUnIDogJ211bHRpcGxlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBCaW5kIGNvbXBvbmVudCB0byBncm91cCB1c2luZyB0aGUgcHJvdmlkZWQgVmFsdWUgc2V0IGluIGZpZWxkIGVsZW1lbnQgYXR0cmlidXRlLlxyXG4gICAgaWYgKHRoaXMuZGF0YS5WYWx1ZS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICB0aGlzLmdyb3VwW3RoaXMuZGF0YS5WYWx1ZS5zbGljZSg2KV0gPSB0aGlzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFN1YnNjcmlwdGlvbkZvckdyaWRTdWJqZWN0KCkge1xyXG4gICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbnkgZXhpc3Rpbmcgc3Vic2NyaXB0aW9ucyB0byBhdm9pZCBtZW1vcnkgbGVha3MuXHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGcm9tIGhlcmUgd2lsbCBjYWxsIHpncmlkLmJpbmRpbmcuZGlyZWN0aXZlLlxyXG4gICAgLy8gU3Vic2NyaWJlIHRvIGdldCBmcm9tIGRpcmVjdGl2ZSBhbmQgc2V0IHRvIGNvbXBvbmVudFxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmdyaWRTdWJqZWN0LnBpcGUoXHJcbiAgICAgIHRhcChncmlkRGlyZWN0aXZlID0+IHtcclxuICAgICAgICAvLyBTZXQgdGhlIHpncmlkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBlbWl0dGVkIGdyaWREaXJlY3RpdmUuXHJcbiAgICAgICAgdGhpcy56Z3JpZCA9IGdyaWREaXJlY3RpdmU7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgY29sdW1ucyBwcm9wZXJ0eSB3aXRoIHRoZSBncmlkIGNvbHVtbnMgZnJvbSBncmlkRGlyZWN0aXZlLlxyXG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuY29sdW1ucztcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgYXV0b21hdGljIGFwcGVuZGluZyBvZiBhIGdyaWQgZGF0ZSBmaWx0ZXIgY29sdW1uIGlzIG5vdCBkaXNhYmxlZC5cclxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5EaXNhYmxlQXV0b0FwcGVuZEdyaWREYXRlRmlsdGVyQ29sKSB7XHJcbiAgICAgICAgICB0aGlzLnNldERhdGVDb2xGb3JGaWx0ZXJpbmcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNldCB1cCBncmlkIHdpdGggaW5saW5lIGVkaXRpbmcuXHJcbiAgICAgICAgdGhpcy5zZXR1cEdyaWRXaXRoSW5saW5lRWRpdCgpO1xyXG5cclxuICAgICAgICAvLyBTZXQgdXAgYSBwb3BvdmVyIGZlYXR1cmUgYmFzZWQgb24gY29sdW1ucyBhbmQgZ3JpZCBkYXRhLlxyXG4gICAgICAgIHRoaXMuc2V0dXBQb3BvdmVyRmVhdHVyZSh0aGlzLmNvbHVtbnMsIHRoaXMuZ2V0R3JpZERhdGEoKSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIGNvbHVtbiBoZWFkZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zbGF0ZWQuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb2x1bW5IZWFkZXJUcmFuc2xhdGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTWFyayBjb2x1bW4gaGVhZGVycyBhcyB0cmFuc2xhdGVkIGFuZCBwZXJmb3JtIHRoZSB0cmFuc2xhdGlvbi5cclxuICAgICAgICB0aGlzLmlzQ29sdW1uSGVhZGVyVHJhbnNsYXRlZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnRyYW5zbGF0ZUNvbHVtbkhlYWRlcih0aGlzLmNvbHVtbnMpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKF8gPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tib3hDb2x1bW5QaW5uZWQgPSB0aGlzLmRhdGEuU2VsZWN0T3B0aW9uc1Bpbm5lZDtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUdyaWRTZXR0aW5ncyhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBzYXZlR3JpZENvbmZpZyA9ICgpID0+IHtcclxuICAgICAgY29uc3QgZ3JpZFN0YXRlTG9naWMgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTdGF0ZUxvZ2ljKHRoaXMuZGF0YSk7XHJcbiAgICAgIGNvbnN0IGNhY2hlTmFtZSA9IHRoaXMuc3RhdGVTZXR0aW5nU2VydmljZS5nZXRTdG9yYWdlQ2FjaGVLZXkoU3RhdGVUeXBlLnNhdmVkU2V0dGluZywgdGhpcy5kYXRhKTtcclxuICAgICAgY29uc3QgcHJldmlvdXNDYWNoZWREYXRhID0gdGhpcy5ncmlkU2VydmljZS5nZXRTdGF0ZUNhY2hlQnlOYW1lKGNhY2hlTmFtZSk7XHJcbiAgICAgIGNvbnN0IGNvbHVtbkNvbmZpZ3VyYXRpb25zID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcmlkQ29sdW1uc0NvbmZpZyh0aGlzLnpncmlkLmdyaWQuY29sdW1ucyk7XHJcbiAgICAgIGNvbnN0IHNldHRpbmdDb25maWc6IFpHcmlkU2V0dGluZ3MgPSB7IGNvbHVtbkNvbmZpZ3VyYXRpb25zIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcgPSB7XHJcbiAgICAgICAgLi4udGhpcy56Z3JpZC5ncmlkU2V0dGluZyxcclxuICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uc1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICBpZiAoZ3JpZFN0YXRlTG9naWMgPT09IFN0YXRlVHlwZS5jYWNoZWREYXRhU2V0dGluZykge1xyXG4gICAgICAgIHNldHRpbmdDb25maWcuZ3JpZFN0YXRlID0gdGhpcy56Z3JpZC5ncmlkU2V0dGluZy5ncmlkU3RhdGU7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgdGhpcy5ncmlkU2VydmljZS5zZXRTdGF0ZVRvQ2FjaGUoY2FjaGVOYW1lLCBzZXR0aW5nQ29uZmlnKTtcclxuICBcclxuICAgICAgY29uc3Qgc3RhdGVTZXR0aW5nSW5mbzogU3RhdGVTZXR0aW5nSW5mbyA9IHtcclxuICAgICAgICBwcm9qZWN0Q29kZTogdGhpcy5lbnZpcm9ubWVudC5wcm9qZWN0Q29kZXNbMF0sXHJcbiAgICAgICAgZmllbGRFbGVtZW50TmFtZTogdGhpcy5kYXRhLkZpZWxkRWxlbWVudE5hbWUsXHJcbiAgICAgICAgY29tcG9uZW50VW5pcXVlS2V5OiB0aGlzLmRhdGEuQ2FjaGVJbmZvLk5hbWUgPz8gdGhpcy5kYXRhLkZpZWxkRWxlbWVudE5hbWUsXHJcbiAgICAgICAgdXNlcklkOiB0aGlzLmF1dGhTZXJ2aWNlLmUxVG9rZW4udXNlck5hbWUsXHJcbiAgICAgICAgc3RhdGVUeXBlOiBTdGF0ZVR5cGUuc2F2ZWRTZXR0aW5nLFxyXG4gICAgICAgIHN0YXRlRGF0YTogSlNPTi5zdHJpbmdpZnkoc2V0dGluZ0NvbmZpZyksXHJcbiAgICAgICAgc3RvcmFnZUNhY2hlTmFtZTogY2FjaGVOYW1lXHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIGlmIChwcmV2aW91c0NhY2hlZERhdGEgJiYgcHJldmlvdXNDYWNoZWREYXRhLmlkKSB7XHJcbiAgICAgICAgc3RhdGVTZXR0aW5nSW5mby5pZCA9IHByZXZpb3VzQ2FjaGVkRGF0YS5pZDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICB0aGlzLnN0YXRlU2V0dGluZ1NlcnZpY2Uuc2F2ZVN0YXRlU2V0dGluZyhzdGF0ZVNldHRpbmdJbmZvKS5zdWJzY3JpYmUoKTtcclxuICBcclxuICAgICAgdGhpcy5zaG93SGlkZVJlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbigpO1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KCdHcmlkIHNldHRpbmdzIGhhdmUgYmVlbiBzYXZlZC4nLCAndG9wJywgdHJ1ZSwgMjAwMCwgJ3N1Y2Nlc3MnKTtcclxuICAgIH07XHJcbiAgXHJcbiAgIFxyXG4gICAgLy8gQ2FsbCBhIG1ldGhvZCB0byB1cGRhdGUgdGhlIGV2ZW50IElEXHJcbiAgICBjb25zdCBidXR0b25FbGVtZW50ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MQnV0dG9uRWxlbWVudDsgLy8gR2V0IGJ1dHRvbiBlbGVtZW50XHJcbiAgICBjb25zdCBidXR0b25UZXh0ID0gYnV0dG9uRWxlbWVudC5pbm5lclRleHQudHJpbSgpOyAvLyBHZXQgYnV0dG9uIG5hbWUgKHRleHQpXHJcbiAgICBjb25zdCBjbG9uZWRCdXR0b24gPSB7IGV2ZW50SWQ6IFpDb21wb25lbnRIZWxwZXIuZ2VuZXJhdGVUaW1lU3RhbXBJZCgpLCBMYWJlbDogYnV0dG9uVGV4dCB9OyBcclxuICAgXHJcbiAgICAvLyBTZXQgdGhlIERpc21pc3NUeXBlIHByb3BlcnR5IG9mIHRoZSBncm91cCB0byB0aGUgZGlzbWlzc1R5cGUgcHJvcGVydHkgb2YgdGhlIGl0ZW1cclxuICAgIC8vdGhpcy5ncm91cFsnRGlzbWlzc1R5cGUnXSA9IGl0ZW0uZGlzbWlzc1R5cGU7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGFuIG91dHB1dCBldmVudCBvYmplY3Qgd2l0aCBkZXRhaWxzIGFib3V0IHRoZSBidXR0b24gY2xpY2tcclxuICAgIGNvbnN0IG91dHB1dEV2ZW50ID0ge1xyXG4gICAgICB0eXBlOiAnYnV0dG9uQ2xpY2snLFxyXG4gICAgICB0YXJnZXQ6IGV2ZW50LFxyXG4gICAgICBkYXRhOiBjbG9uZWRCdXR0b24sXHJcbiAgICAgIHRyaWdnZXJGcm9tOiBUcmlnZ2VyRnJvbVR5cGUuYnV0dG9uXHJcbiAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudDtcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIGJ1dHRvbkV2ZW50RGV0YWlsIHByb3BlcnR5IG9mIHRoZSBncm91cCB3aXRoIHRoZSBvdXRwdXQgZXZlbnQgZGV0YWlsc1xyXG4gICAgdGhpcy5ncm91cFsnYnV0dG9uRXZlbnREZXRhaWwnXSA9IHtcclxuICAgICAgYnV0dG9uRGV0YWlsOiBvdXRwdXRFdmVudCxcclxuICAgICAgdHJpZ2dlckZyb206IFRyaWdnZXJGcm9tVHlwZS5idXR0b25cclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd1Jlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbikge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93KFxyXG4gICAgICAgICdPdmVyd3JpdGUgQ29uZmlybWF0aW9uJyxcclxuICAgICAgICAnWW91IGhhdmUgYWxyZWFkeSBzYXZlZCBncmlkIHNldHRpbmdzLiBTYXZpbmcgYWdhaW4gd2lsbCBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIHNldHRpbmdzLjxici8+RG8geW91IHdhbnQgdG8gcHJvY2VlZD8nLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIHsgdGV4dDogJ05vJywgY3NzQ2xhc3M6ICdzZWNvbmRhcnknIH0gYXMgQWxlcnRCdXR0b24sXHJcbiAgICAgICAgICB7IHRleHQ6ICdZZXMnLCBjc3NDbGFzczogJ3ByaW1hcnknIH0gYXMgQWxlcnRCdXR0b25cclxuICAgICAgICBdLCBbJ2NvbC00J11cclxuICAgICAgKS5zdWJzY3JpYmUocmVwbHkgPT4ge1xyXG4gICAgICAgIGlmIChyZXBseSA9PT0gJ1llcycpIHtcclxuICAgICAgICAgIHNhdmVHcmlkQ29uZmlnKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzYXZlR3JpZENvbmZpZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc3RvcmVHcmlkU2V0dGluZ3MoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgYnV0dG9uRWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7IC8vIEdldCBidXR0b24gZWxlbWVudFxyXG4gICAgY29uc3QgYnV0dG9uVGV4dCA9IGJ1dHRvbkVsZW1lbnQuaW5uZXJUZXh0LnRyaW0oKTsgLy8gR2V0IGJ1dHRvbiBuYW1lICh0ZXh0KVxyXG5cclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3coJ0NvbmZpcm0gUmVzZXQnLCAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlc2V0IHRoZSBjb2x1bW4gc2V0dGluZ3MgdG8gdGhlaXIgZGVmYXVsdCBzZXR0aW5ncz88YnIvPlRoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUuJyxcclxuICAgICAgW1xyXG4gICAgICAgIHsgdGV4dDogJ05vJywgY3NzQ2xhc3M6ICdzZWNvbmRhcnknIH0gYXMgQWxlcnRCdXR0b24sXHJcbiAgICAgICAgeyB0ZXh0OiAnWWVzJywgY3NzQ2xhc3M6ICdwcmltYXJ5JyB9IGFzIEFsZXJ0QnV0dG9uXHJcbiAgICAgIF0sIFsnY29sLTQnXSkuc3Vic2NyaWJlKHJlcGx5ID0+IHtcclxuICAgICAgICBpZiAocmVwbHkgPT09ICdZZXMnKSB7XHJcbiAgICAgICAgICAvLyBDYWxsIGEgbWV0aG9kIHRvIHVwZGF0ZSB0aGUgZXZlbnQgSURcclxuICAgICAgICAgIGNvbnN0IGNsb25lZEJ1dHRvbiA9IHsgZXZlbnRJZDogWkNvbXBvbmVudEhlbHBlci5nZW5lcmF0ZVRpbWVTdGFtcElkKCksIExhYmVsOiBidXR0b25UZXh0IH07IFxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBTZXQgdGhlIERpc21pc3NUeXBlIHByb3BlcnR5IG9mIHRoZSBncm91cCB0byB0aGUgZGlzbWlzc1R5cGUgcHJvcGVydHkgb2YgdGhlIGl0ZW1cclxuICAgICAgICAgIC8vdGhpcy5ncm91cFsnRGlzbWlzc1R5cGUnXSA9IGl0ZW0uZGlzbWlzc1R5cGU7XHJcblxyXG4gICAgICAgICAgLy8gQ3JlYXRlIGFuIG91dHB1dCBldmVudCBvYmplY3Qgd2l0aCBkZXRhaWxzIGFib3V0IHRoZSBidXR0b24gY2xpY2tcclxuICAgICAgICAgIGNvbnN0IG91dHB1dEV2ZW50ID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAnYnV0dG9uQ2xpY2snLFxyXG4gICAgICAgICAgICB0YXJnZXQ6IGV2ZW50LFxyXG4gICAgICAgICAgICBkYXRhOiBjbG9uZWRCdXR0b24sXHJcbiAgICAgICAgICAgIHRyaWdnZXJGcm9tOiBUcmlnZ2VyRnJvbVR5cGUuYnV0dG9uXHJcbiAgICAgICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudDtcclxuXHJcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIGJ1dHRvbkV2ZW50RGV0YWlsIHByb3BlcnR5IG9mIHRoZSBncm91cCB3aXRoIHRoZSBvdXRwdXQgZXZlbnQgZGV0YWlsc1xyXG4gICAgICAgICAgdGhpcy5ncm91cFsnYnV0dG9uRXZlbnREZXRhaWwnXSA9IHtcclxuICAgICAgICAgICAgYnV0dG9uRGV0YWlsOiBvdXRwdXRFdmVudCxcclxuICAgICAgICAgICAgdHJpZ2dlckZyb206IFRyaWdnZXJGcm9tVHlwZS5idXR0b25cclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgLy8gRW5zdXJlIGNvbHVtbnMgYXJlIHNvcnRlZCBiYXNlZCBvbiB0aGVpciBvcmlnaW5hbCBvcmRlclxyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zLnNvcnQoKGEsIGIpID0+IGEub3JpZ2luYWxPcmRlckluZGV4IC0gYi5vcmlnaW5hbE9yZGVySW5kZXgpO1xyXG4gIFxyXG4gICAgICAgICAgLy9yZXN0b3JlIG9yaWdpbmFsIGhpZGRlbiB2YWx1ZVxyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29sLm9yaWdpbmFsSGlkZGVuVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBjb2wub3JpZ2luYWxIaWRkZW5WYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGNvbC5oaWRkZW4gPSBjb2wub3JpZ2luYWxIaWRkZW5WYWx1ZTtcclxuICAgICAgICAgICAgICBkZWxldGUgY29sLm9yaWdpbmFsSGlkZGVuVmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIEdlbmVyYXRlIGdyaWQgY29sdW1ucyBhbmQgbG9hZCBkYXRhXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgXHJcbiAgICAgICAgICAvLyBDYWxsIHRoZSBncmlkU2VydmljZS5nZXRTdGF0ZUNhY2hlIGFuZCBoYW5kbGUgdGhlIHJlc3VsdCB2aWEgc3Vic2NyaXB0aW9uXHJcbiAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLmdldFN0YXRlQ2FjaGUoU3RhdGVUeXBlLnNhdmVkU2V0dGluZywgdGhpcy5kYXRhKS5zdWJzY3JpYmUoKGNhY2hlZERhdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNhY2hlZERhdGEpIHtcclxuICAgICAgICAgICAgICAvLyBDYWNoZSBmb3VuZCwgcHJvY2VlZCB3aXRoIGRlbGV0aW9uXHJcbiAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5kZWxldGVTdGF0ZUNhY2hlKFN0YXRlVHlwZS5zYXZlZFNldHRpbmcsIHRoaXMuZGF0YSk7XHJcbiAgXHJcbiAgICAgICAgICAgICAgLy8gVG9nZ2xlIHZpc2liaWxpdHkgb2YgdGhlIHJlc3RvcmUgYnV0dG9uXHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93SGlkZVJlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbigpO1xyXG4gIFxyXG4gICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgc3RhdGUgc2V0dGluZyBiYXNlZCBvbiB0aGUgY2FjaGUgZGF0YSBJRFxyXG4gICAgICAgICAgICAgIHRoaXMuc3RhdGVTZXR0aW5nU2VydmljZS5kZWxldGVTdGF0ZVNldHRpbmcoY2FjaGVkRGF0YS5pZCkuc3Vic2NyaWJlKCk7XHJcbiAgXHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdygnR3JpZCBzZXR0aW5ncyBoYXZlIGJlZW4gcmVzZXQgdG8gZGVmYXVsdC4nLCAndG9wJywgdHJ1ZSwgMjAwMCwgJ3N1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBncmlkQ2FsbGJhY2soZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YVsnQWZ0ZXJsb2FkQ2FsbGJhY2snXSkge1xyXG4gICAgICBjb25zdCBtZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMpO1xyXG5cclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6ICd6Z3JpZC1BZnRlcmxvYWRDYWxsYmFjaycsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGFbJ0FmdGVybG9hZENhbGxiYWNrJ10sXHJcbiAgICAgICAgZGF0YTogbWVcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRCdXR0b25zKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGIHx8IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEJ0biA9IHtcclxuICAgICAgICBSZWFkT25seTogZmFsc2UsXHJcbiAgICAgICAgVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICBXb3JrZmxvd0NvZGU6IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGLFxyXG4gICAgICAgIFZhbHVlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSxcclxuICAgICAgICBUeXBlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiA/ICd6d29ya2Zsb3didXR0b25zJyA6ICd6YnV0dG9ucydcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREYXRlQ29sRm9yRmlsdGVyaW5nKCkge1xyXG4gICAgY29uc3QgZ3JpZERhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICBpZiAodGhpcy5pc1VzZUxvY2FsRGF0YSgpICYmIGdyaWREYXRhICYmIGdyaWREYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZGF0ZUNvbCA9IE9iamVjdC5rZXlzKGdyaWREYXRhWzBdKS5maWx0ZXIoeCA9PiB4LmluY2x1ZGVzKCdEYXRlJykgJiYgIXguZW5kc1dpdGgoQ29tcG9uZW50Q29uc3RhbnQuR3JpZENvbERhdGVGaWx0ZXJTdWZmaXgpKTtcclxuICAgICAgaWYgKGRhdGVDb2wgJiYgZGF0ZUNvbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZ3JpZERhdGEuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgIGRhdGVDb2wuZm9yRWFjaChjb2xOYW1lID0+IHtcclxuICAgICAgICAgICAgZGF0YVtgJHtjb2xOYW1lfSR7Q29tcG9uZW50Q29uc3RhbnQuR3JpZENvbERhdGVGaWx0ZXJTdWZmaXh9YF0gPSBuZXcgRGF0ZShkYXRhW2NvbE5hbWVdKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3dIaWRlUmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5DYWNoZUluZm8/LkVuYWJsZVNhdmVTdGF0ZSkge1xyXG4gICAgICB0aGlzLnNob3dSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXRlVHlwZSA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFN0YXRlTG9naWModGhpcy5kYXRhKTtcclxuICAgICAgaWYgKHN0YXRlVHlwZSA9PT0gU3RhdGVUeXBlLnNhdmVkU2V0dGluZyB8fCBzdGF0ZVR5cGUgPT09IFN0YXRlVHlwZS5zYXZlZEFuZENhY2hlZERhdGFTZXR0aW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ0NhY2hlTmFtZSA9IHRoaXMuc3RhdGVTZXR0aW5nU2VydmljZS5nZXRTdG9yYWdlQ2FjaGVLZXkoc3RhdGVUeXBlLCB0aGlzLmRhdGEpO1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdDYWNoZVZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oc2V0dGluZ0NhY2hlTmFtZSk7XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nQ2FjaGVWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5zaG93UmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25cclxuICBwdWJsaWMgZ3JpZEN1c3RvbUFkZENvbW1hbmQoZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBkZWNsYXJlIGJ1dHRvbiBvbmNsaWNrIGV2ZW50IG5hbWUgYmFzZSBvbiBncmlkIG5hbWUgKyBwcmVmaXhcclxuICAgIGNvbnN0IGdyaWRBZGRCdXR0b25FdmVudE5hbWUgPSBgJHt0aGlzLmRhdGEuTmFtZX1fQ3VzdG9tQWRkQnV0dG9uT25DbGlja2A7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZEFkZEJ1dHRvbkV2ZW50TmFtZV0pIHtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFtncmlkQWRkQnV0dG9uRXZlbnROYW1lXShncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JpZEN1c3RvbVJlc2V0Q29tbWFuZChncm91cDogWkdyb3VwKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIC8vIGRlY2xhcmUgYnV0dG9uIG9uY2xpY2sgZXZlbnQgbmFtZSBiYXNlIG9uIGdyaWQgbmFtZSArIHByZWZpeFxyXG4gICAgY29uc3QgZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lID0gYCR7dGhpcy5kYXRhLk5hbWV9X0N1c3RvbVJlc2V0QnV0dG9uT25DbGlja2A7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lXSkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0oZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdyaWRDdXN0b21SZW1vdmVDb21tYW5kKGRhdGFJdGVtOiBhbnksIHJvd0luZGV4OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgLy8gZGVjbGFyZSBidXR0b24gb25jbGljayBldmVudCBuYW1lIGJhc2Ugb24gZ3JpZCBuYW1lICsgcHJlZml4XHJcbiAgICBjb25zdCBncmlkUmVzZXRCdXR0b25FdmVudE5hbWUgPSBgJHt0aGlzLmRhdGEuTmFtZX1fQ3VzdG9tUmVtb3ZlQnV0dG9uT25DbGlja2A7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lXSkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0oZGF0YUl0ZW0sIHJvd0luZGV4KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbmxpbmUgRWRpdFxyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUNvbnRyb2xzKGdyaWRDb2xzOiBBcnJheTxhbnk+KSB7XHJcbiAgICBsZXQgY291bnRlckluZGV4ID0gMDtcclxuICAgIC8vIFRvIGZvcmNlIGVsZW1lbnQgdG8gcmViaW5kIGRhdGFcclxuICAgIHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy56Z3JpZC5ncmlkLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgb2YoW10pLnBpcGUoZGVsYXkoMCksIHRhcCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyB8fCB7fTtcclxuICAgICAgY29uc3QgZ3JpZERhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGdyaWREYXRhKSkge1xyXG4gICAgICAgIGdyaWREYXRhLmZvckVhY2goZCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IHt9O1xyXG4gICAgICAgICAgZ3JpZENvbHMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5pc1Zpc2libGVGb3JtQ29udHJvbCh0aGlzLCBjLmZpZWxkKTtcclxuICAgICAgICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IFpDb21wb25lbnRIZWxwZXIuaXNSZXF1aXJlZEZvcm1Db250cm9sKHRoaXMsIGMuZmllbGQpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gWkNvbXBvbmVudEhlbHBlci5nZXRWYWxpZGF0b3JzKGMuZmllbGQsIGlzVmlzaWJsZSwgaXNSZXF1aXJlZCwgdGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgIGl0ZW1zW2MuZmllbGRdID0gbmV3IEZvcm1Db250cm9sKGRbYy5maWVsZF0sIHZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGl0ZW1zKTtcclxuXHJcbiAgICAgICAgICBpZiAoZFsnSWQnXSkge1xyXG4gICAgICAgICAgICBpdGVtc1snSWQnXSA9IGl0ZW1zWydJZCddIHx8IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiBkWydJZCddLCBkaXNhYmxlZDogZmFsc2UgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZFsnSWQnXSA9IGNvdW50ZXJJbmRleCsrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2RbJ0lkJ11dID0gZm9ybUdyb3VwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy56Z3JpZC5ncmlkLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcztcclxuICAgIH0pKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbmxpbmVGaWVsZCh2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoeCA9PiB4LlZhbHVlID09PSB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRm9ybShkYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIpIHtcclxuICAgIHZhciBrZXkgPSAoZGF0YVsnSWQnXSB8fCBkYXRhWydJZCddID09IDApID8gZGF0YVsnSWQnXSA6IHJvd0luZGV4O1xyXG4gICAgaWYgKHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHNba2V5XSB8fCB0aGlzLnRlbXBJbmxpbmVFZGl0ZWRGb3JtR3JvdXBzWzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1trZXldO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1Db250cm9sRGF0YSgpOiBhbnlbXSB7XHJcbiAgICBjb25zdCBkYXRhID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzKSkge1xyXG4gICAgICBkYXRhLnB1c2godGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2tdPy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBHcmlkV2l0aElubGluZUVkaXQoKSB7XHJcbiAgICBpZiAodGhpcy5oYXNJbmxpbmVFZGl0Q29sdW1uKHRoaXMuY29sdW1ucykpIHtcclxuICAgICAgdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcztcclxuICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0ge307XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHRoaXMuY29sdW1ucy5jb25jYXQodGhpcy5nZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCB8fCBbXSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzSW5saW5lRm9ybUdyb3VwSGFzVmFsdWUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzICYmIE9iamVjdC5rZXlzKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcykubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzSW5saW5lRWRpdENvbHVtbihncmlkQ29scyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGdyaWRDb2xzICYmIGdyaWRDb2xzLnNvbWUoYyA9PiBjLmlzRWRpdGFibGVJbkdyaWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENlbGxTdHlsZUZvcklubGluZUVkaXQoY29sdW1uRmllbGQ6IFpGaWVsZCwgZGF0YUl0ZW06IGFueSwgcm93SW5kZXg6IG51bWJlcik6IGFueSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRJbmxpbmVGb3JtKGRhdGFJdGVtLCByb3dJbmRleCkgYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFmb3JtKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0eWxlID0gY29sdW1uRmllbGRbYFN0eWxlMTBgXTtcclxuICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgc3R5bGUpO1xyXG4gICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKGZvcm0udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGZ1bmMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEV2ZW50XHJcbiAgLy8gU291cmNlOiBodHRwczovL3d3dy50ZWxlcmlrLmNvbS9mb3J1bXMva2VuZG8tYW5ndWxhci1ncmlkLWJsYW5rLXNwYWNlLWluLXRoZS1lbmQtd2hlbi15b3UtcmVzaXplKHJlZHVjZSktYW55LWNvbHVtblxyXG4gIHB1YmxpYyBhZGp1c3RXaWR0aFVwb25SZXNpemUoKSB7XHJcbiAgICBjb25zdCB0YWJsZVdpZHRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmstZ3JpZC10YWJsZScpW2BvZmZzZXRXaWR0aGBdO1xyXG4gICAgY29uc3QgY29udGVudFdpZHRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmstZ3JpZC1jb250ZW50JylbYG9mZnNldFdpZHRoYF07XHJcbiAgICBpZiAodGFibGVXaWR0aCA8IGNvbnRlbnRXaWR0aCkge1xyXG4gICAgICBjb25zdCBjdXJyZW50TGFzdENvbFdpZHRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmstZ3JpZC1jb250ZW50IC5rLWdyaWQtdGFibGUgdHIgdGQ6bGFzdC1vZi10eXBlJylbYG9mZnNldFdpZHRoYF07XHJcblxyXG4gICAgICB0aGlzLmNvbHVtbnNbdGhpcy5jb2x1bW5zLmxlbmd0aCAtIDFdLndpZHRoID0gY3VycmVudExhc3RDb2xXaWR0aCArIChjb250ZW50V2lkdGggLSB0YWJsZVdpZHRoKSAtIDEwOyAvLyBhY2NvdW50IGZvciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIG9uQ2hhbmdlIEV2ZW50c1xyXG4gIHB1YmxpYyBmaWx0ZXJDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgdGhpcy5ncmlkU2V0dGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcpO1xyXG4gICAgICB0aGlzLnpncmlkLmZpbHRlckNoYW5nZShldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGFnZUNoYW5nZShldmVudDogUGFnZUNoYW5nZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICB0aGlzLmdyaWRTZXR0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy56Z3JpZC5ncmlkU2V0dGluZyk7XHJcbiAgICAgIHRoaXMuemdyaWQucGFnZUNoYW5nZShldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydENoYW5nZShzb3J0OiBTb3J0RGVzY3JpcHRvcltdKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICB0aGlzLmdyaWRTZXR0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy56Z3JpZC5ncmlkU2V0dGluZyk7XHJcbiAgICAgIHRoaXMuemdyaWQuc29ydENoYW5nZShzb3J0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbkNlbGxDaGVja0JveE9uQ2hhbmdlKGV2ZW50OiBhbnksIHJvd0luZGV4OiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICBjb25zdCBpc0NoZWNrZWQgPSBldmVudC5kZXRhaWwuY2hlY2tlZDtcclxuICAgIGNvbnN0IGdEYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgZ0RhdGFbcm93SW5kZXhdW2NvbHVtbi5WYWx1ZV0gPSBpc0NoZWNrZWQ7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGNvbW1hbmQgaGFuZGxlclxyXG4gIHB1YmxpYyBhZGRIYW5kbGVyKHsgc2VuZGVyIH0pIHtcclxuICAgIHRoaXMuaXNOZXcgPSB0cnVlO1xyXG5cclxuICAgIC8vIGNsb3NlIGFueSBleGlzdGluZyBlZGl0b3JcclxuICAgIHRoaXMuY2xvc2VFZGl0b3Ioc2VuZGVyKTtcclxuXHJcbiAgICAvLyBsb29wIGFsbCBjb2x1bW4gdG8gZ2V0IHZhbGlkYXRpb24gYW5kIGNyZWF0ZSBmb3JtIGNvbnRyb2xcclxuICAgIGNvbnN0IGNvbEZvcm1Db250cm9sID0ge307XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcbiAgICAgIGlmIChjb2wuSXNSZXF1aXJlZCkge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICBpZiAoY29sLlR5cGUgPT09ICd6dGV4dGVkaXRvcicpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChaQ29tcG9uZW50SGVscGVyLnJlcXVpcmVkVmFsaWRhdG9yX0V4Y2x1ZGVXaGl0ZVNwYWNlc0FuZEhUTUxUYWdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goWkNvbXBvbmVudEhlbHBlci5yZXF1aXJlZFZhbGlkYXRvcl9FeGNsdWRlV2hpdGVTcGFjZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sLlZhbGlkYXRvclBhdHRlcm4pIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbEZvcm1Db250cm9sW2NvbC5WYWx1ZV0gPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgdmFsaWRhdG9ycyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBzZXQgZm9ybSBjb250cm9sIG9iamVjdCB0byBmb3JtIGdyb3VwXHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoY29sRm9ybUNvbnRyb2wpO1xyXG5cclxuICAgIC8vIGFkZCB0byBncmlkIHJvd1xyXG4gICAgc2VuZGVyLmFkZFJvdyh0aGlzLmZvcm1Hcm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUhhbmRsZXIoeyBzZW5kZXIsIHJvd0luZGV4LCBmb3JtR3JvdXAsIGlzTmV3IH0pOiB2b2lkIHtcclxuICAgIC8vIEdldCB0aGUgZXhpc3RpbmcgZGF0YSBmcm9tIHRoZSBncmlkXHJcbiAgICBjb25zdCBncmlkRXhpc3RpbmdEYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZSBmb3JtIGlzIHZhbGlkXHJcbiAgICBpZiAoZm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAgIC8vIENoZWNrIGZvciBhIHVuaXF1ZSBrZXkgZmllbGRcclxuICAgICAgY29uc3QgdW5pcXVlS2V5ID0gdGhpcy5kYXRhWydVbmlxdWVLZXknXTtcclxuICAgICAgaWYgKHVuaXF1ZUtleSkge1xyXG4gICAgICAgIC8vIEdldCB0aGUgdW5pcXVlIGtleSB2YWx1ZSBmcm9tIHRoZSBmb3JtXHJcbiAgICAgICAgY29uc3QgZm9ybVVuaXF1ZUtleVZhbHVlID0gZm9ybUdyb3VwLnZhbHVlW3VuaXF1ZUtleV07XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlIHZhbHVlXHJcbiAgICAgICAgY29uc3QgaXNEdXBsaWNhdGUgPSBncmlkRXhpc3RpbmdEYXRhLnNvbWUoZGF0YSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAvLyBJZiBlZGl0aW5nIGFuIGV4aXN0aW5nIHJvdywgc2tpcCB0aGUgY3VycmVudCByb3cgYmVpbmcgZWRpdGVkXHJcbiAgICAgICAgICAgICFpc05ldyAmJlxyXG4gICAgICAgICAgICByb3dJbmRleCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB1bmlxdWUga2V5IHZhbHVlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBncmlkXHJcbiAgICAgICAgICAgIGRhdGFbdW5pcXVlS2V5XSA9PT0gZm9ybVVuaXF1ZUtleVZhbHVlICYmXHJcbiAgICAgICAgICAgIC8vIFNraXAgY2hlY2tpbmcgYWdhaW5zdCB0aGUgY3VycmVudCByb3cgYmVpbmcgZWRpdGVkXHJcbiAgICAgICAgICAgIGRhdGFbdW5pcXVlS2V5XSAhPT0gZ3JpZEV4aXN0aW5nRGF0YVtyb3dJbmRleF1bdW5pcXVlS2V5XVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBkdXBsaWNhdGUgdmFsdWUsIHNob3cgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIHdpdGhvdXQgc2F2aW5nXHJcbiAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KCdFcnJvciBvY2N1cjogRHVwbGljYXRlZCB1bmlxdWUgZmllbGQgZW50cnkuJywgJ3RvcCcsIHRydWUsIDMwMDAsICdkYW5nZXInKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIElmIHRoZSB1bmlxdWUga2V5IHZhbHVlIGlzIHZhbGlkIGFuZCB0aGVyZSBhcmUgbm8gZHVwbGljYXRlcywgc2F2ZSB0aGUgZGF0YVxyXG4gICAgICBpZiAoaXNOZXcpIHtcclxuICAgICAgICAvLyBBZGQgYSBuZXcgcm93IHRvIHRoZSBncmlkIGRhdGFcclxuICAgICAgICBncmlkRXhpc3RpbmdEYXRhLnB1c2goZm9ybUdyb3VwLnZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBVcGRhdGUgYW4gZXhpc3Rpbmcgcm93IGluIHRoZSBncmlkIGRhdGFcclxuICAgICAgICBncmlkRXhpc3RpbmdEYXRhW3Jvd0luZGV4XSA9IGZvcm1Hcm91cC52YWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXBkYXRlIHRoZSBncmlkIGRhdGEgYW5kIGNsb3NlIHRoZSByb3cgZWRpdG9yXHJcbiAgICAgIHRoaXMuc2V0RGF0YShncmlkRXhpc3RpbmdEYXRhKTtcclxuICAgICAgc2VuZGVyLmNsb3NlUm93KHJvd0luZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxIYW5kbGVyKHsgc2VuZGVyLCByb3dJbmRleCB9KSB7XHJcbiAgICAvLyBjYW5jZWwgYW55IGV4aXN0aW5nIGVkaXRvclxyXG4gICAgc2VuZGVyLmNsb3NlUm93KHJvd0luZGV4KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0SGFuZGxlcih7IHNlbmRlciwgcm93SW5kZXgsIGRhdGFJdGVtIH0pIHtcclxuICAgIC8vIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcm93IGJlaW5nIGVkaXRlZCBpcyBub3QgYSBuZXcgcm93XHJcbiAgICB0aGlzLmlzTmV3ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gQ2xvc2UgYW55IGV4aXN0aW5nIGVkaXRvclxyXG4gICAgdGhpcy5jbG9zZUVkaXRvcihzZW5kZXIpO1xyXG5cclxuICAgIC8vIGxvb3AgYWxsIGNvbHVtbiB0byBnZXQgdmFsaWRhdGlvbiBhbmQgY3JlYXRlIGZvcm0gY29udHJvbCwgYXBwZW5kIGN1cnJlbnQgcm93IHZhbHVlXHJcbiAgICBjb25zdCBjb2xGb3JtQ29udHJvbCA9IHt9O1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgICBpZiAoY29sLklzUmVxdWlyZWQpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgaWYgKGNvbC5UeXBlID09PSAnenRleHRlZGl0b3InKSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goWkNvbXBvbmVudEhlbHBlci5yZXF1aXJlZFZhbGlkYXRvcl9FeGNsdWRlV2hpdGVTcGFjZXNBbmRIVE1MVGFncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfRXhjbHVkZVdoaXRlU3BhY2VzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihjb2wuVmFsaWRhdG9yUGF0dGVybikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb2xGb3JtQ29udHJvbFtjb2wuVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKGRhdGFJdGVtW2NvbC5WYWx1ZV0sIHZhbGlkYXRvcnMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gc2V0IGZvcm0gY29udHJvbCBvYmplY3QgdG8gZm9ybSBncm91cFxyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGNvbEZvcm1Db250cm9sKTtcclxuXHJcbiAgICAvLyBTZXQgdGhlIGZvcm0gZ3JvdXAgb24gdGhlIHJvdyBiZWluZyBlZGl0ZWRcclxuICAgIHRoaXMuZWRpdGVkUm93SW5kZXggPSByb3dJbmRleDtcclxuICAgIHNlbmRlci5lZGl0Um93KHJvd0luZGV4LCB0aGlzLmZvcm1Hcm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlSGFuZGxlcih7IHNlbmRlciwgZGF0YUl0ZW0gfSkge1xyXG4gICAgY29uc3QgZ0RhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0SXRlbUluZGV4KGRhdGFJdGVtLCBnRGF0YSwgdGhpcy5kYXRhWydVbmlxdWVLZXknXSk7XHJcbiAgICBnRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0YSBpbiB0aGUgZ3JpZFxyXG4gICAgdGhpcy5zZXREYXRhKGdEYXRhKTtcclxuXHJcbiAgICBzZW5kZXIuY2FuY2VsQ2VsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZUVkaXRvcihncmlkLCByb3dJbmRleCA9IHRoaXMuZWRpdGVkUm93SW5kZXgpIHtcclxuICAgIGdyaWQuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gICAgdGhpcy5lZGl0ZWRSb3dJbmRleCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJdGVtSW5kZXgoaXRlbTogYW55LCBkYXRhOiBhbnlbXSwga2V5OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZGF0YS5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgIGlmIChkYXRhW2lkeF1ba2V5XSA9PT0gaXRlbVtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkeDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIEZpbHRlclxyXG4gIHByaXZhdGUgc2V0dXBGaWx0ZXJGZWF0dXJlKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkRmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJHcm91cCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5hZHZmaWx0ZXJHcm91cCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlYXJjaCgpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZpbHRlckdyb3VwLmZvcm07XHJcbiAgICBjb25zdCBjb250cm9scyA9IGZvcm0uY29udHJvbHM7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTaG93QWR2RmlsdGVyKSB7XHJcbiAgICAgIGNvbnN0IGFkdmZvcm0gPSB0aGlzLmFkdmZpbHRlckdyb3VwLmZvcm07XHJcbiAgICAgIGNvbnN0IGFkdmNvbnRyb2xzID0gYWR2Zm9ybS5jb250cm9scztcclxuICAgICAgZm9yIChjb25zdCBjIG9mIE9iamVjdC5rZXlzKGFkdmNvbnRyb2xzKSkge1xyXG4gICAgICAgIGNvbnRyb2xzW2NdID0gYWR2Y29udHJvbHNbY107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLkZpbHRlclNlYXJjaCkge1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogJ3pncmlkLWZpbHRlcnNlYXJjaCcsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuRmlsdGVyU2VhcmNoLFxyXG4gICAgICAgIGRhdGE6IHsgZm9ybWNvbnRyb2xzOiBjb250cm9scyB9LFxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zID0gW107XHJcbiAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2xzKS5mb3JFYWNoKGNvbnRyb2xOYW1lID0+IHtcclxuICAgICAgICBpZiAoY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlKSB7XHJcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0RmllbGRGcm9tRmllbGRzQnlWYWx1ZSh0aGlzLmZpbHRlckdyb3VwLmZpZWxkcywgY29udHJvbE5hbWUpIHx8IFpDb21wb25lbnRIZWxwZXIuZ2V0RmllbGRGcm9tRmllbGRzQnlWYWx1ZSh0aGlzLmFkdmZpbHRlckdyb3VwLmZpZWxkcywgY29udHJvbE5hbWUpO1xyXG4gICAgICAgICAgdGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zLnB1c2goe1xyXG4gICAgICAgICAgICBrZXk6IGZpZWxkLlZhbHVlRXhwciB8fCBmaWVsZC5WYWx1ZSxcclxuICAgICAgICAgICAgb3BzOiB0aGlzLm1hcEZpbHRlck9wZXJhdG9yQnlGaWVsZFR5cGUoZmllbGQpLFxyXG4gICAgICAgICAgICB2YWx1ZTogY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEVkaXQoKSB7XHJcbiAgICB0aGlzLmNsZWFyRmlsdGVyRGF0YSh0aGlzLmZpbHRlckdyb3VwKTtcclxuICAgIGlmICh0aGlzLmRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJGaWx0ZXJEYXRhKHRoaXMuYWR2ZmlsdGVyR3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhckZpbHRlckRhdGEoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgY29uc3QgZm9ybSA9IGdyb3VwLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgY29uc3QgY29udHJvbHMgPSBmb3JtLmNvbnRyb2xzO1xyXG4gICAgT2JqZWN0LmtleXMoY29udHJvbHMpLmZvckVhY2goY29udHJvbE5hbWUgPT4ge1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoY29udHJvbE5hbWUsIG51bGwsIGdyb3VwLCB0cnVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkdmFuY2VkU2VhcmNoKCkge1xyXG4gICAgdGhpcy5pc1Nob3dBZHZGaWx0ZXIgPSAhdGhpcy5pc1Nob3dBZHZGaWx0ZXI7XHJcbiAgICBpZiAoIXRoaXMuaXNTaG93QWR2RmlsdGVyKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJGaWx0ZXJEYXRhKHRoaXMuYWR2ZmlsdGVyR3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXBGaWx0ZXJPcGVyYXRvckJ5RmllbGRUeXBlKGZpZWxkOiBaRmllbGQpIHtcclxuICAgIHN3aXRjaCAoZmllbGQuVHlwZSkge1xyXG4gICAgICBjYXNlICdudW1iZXInOlxyXG4gICAgICBjYXNlICdudW1lcmljJzpcclxuICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgIGNhc2UgJ2VtYWlsJzpcclxuICAgICAgY2FzZSAncGFzc3dvcmQnOlxyXG4gICAgICBjYXNlICd0ZWwnOlxyXG4gICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgY2FzZSAndXJsJzpcclxuICAgICAgY2FzZSAnY3VycmVuY3knOlxyXG4gICAgICBjYXNlICd0ZXh0YXJlYSc6XHJcbiAgICAgICAgaWYgKCFmaWVsZFsnRmlsdGVyQ29udGFpbnNVc2luZ0VxdWFsJ10pIHtcclxuICAgICAgICAgIHJldHVybiAnY29udGFpbnMnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJz09JztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJz0nO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGdyaWQgY29tbW9uIHNldHRpbmcgZnVuY3Rpb25cclxuICBwdWJsaWMgc2V0IHNldEdyaWRUaXRsZShuZXdUaXRsZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmdyaWRUaXRsZSA9IG5ld1RpdGxlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzZXRHcmlkU3RhdGUoc3RhdGU6IFN0YXRlKSB7XHJcbiAgICB0aGlzLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZSA9IHN0YXRlO1xyXG4gICAgdGhpcy56Z3JpZC5ncmlkU2V0dGluZy5ncmlkU3RhdGUgPSBzdGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRHcmlkVG9GaXJzdFBhZ2UoKSB7XHJcbiAgICB0aGlzLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5za2lwID0gMDtcclxuICAgIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlLnNraXAgPSAwO1xyXG4gIH1cclxuICBcclxuICBwdWJsaWMgZ3JvdXBDaGFuZ2UoZ3JvdXBzOiBHcm91cERlc2NyaXB0b3JbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gZGV0YWlsIGdyaWQgZnVuY3Rpb25cclxuICBwdWJsaWMgZGV0YWlsRXhwYW5kKGV2ZW50OiBEZXRhaWxFeHBhbmRFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVEZXRhaWxHcmlkU2Vzc2lvbihldmVudCk7XHJcbiAgICB0aGlzLmV4ZWN1dGVEZXRhaWxFeHBhbmRDYWxsYmFjayhldmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZURldGFpbEdyaWRTZXNzaW9uKGV2ZW50OiBEZXRhaWxFeHBhbmRFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGV0YWlsR3JpZCA9IHRoaXMuZGF0YT8uRGV0YWlsR3JpZDtcclxuICAgIGlmICghZGV0YWlsR3JpZD8uUmVzb3VyY2VVUkwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlc3Npb25LZXkgPSB0aGlzLmdlbmVyYXRlRGV0YWlsR3JpZFNlc3Npb25LZXkoZXZlbnQsIGRldGFpbEdyaWQpO1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2RldGFpbEdyaWRTZXNzaW9uS2V5Jywgc2Vzc2lvbktleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlRGV0YWlsR3JpZFNlc3Npb25LZXkoZXZlbnQ6IERldGFpbEV4cGFuZEV2ZW50LCBkZXRhaWxHcmlkOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZ3JpZE5hbWUgPSB0aGlzLmV4dHJhY3RHcmlkTmFtZShkZXRhaWxHcmlkLlJlc291cmNlVVJMKTtcclxuICAgIGNvbnN0IHJlY29yZElkID0gdGhpcy5nZXRSZWNvcmRJZChldmVudC5kYXRhSXRlbSk7XHJcbiAgICByZXR1cm4gYCMjRGV0YWlsR3JpZCMjJHt0aGlzLmdyb3VwW2dyaWROYW1lXX0jIyR7cmVjb3JkSWR9IyNgO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0R3JpZE5hbWUocmVzb3VyY2VVUkw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcmVzb3VyY2VVUkwuc3BsaXQoXCIuXCIpWzFdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSZWNvcmRJZChkYXRhSXRlbTogYW55KTogc3RyaW5nIHwgbnVtYmVyIHtcclxuICAgIHJldHVybiBkYXRhSXRlbVt0aGlzLmRhdGEuVW5pcXVlS2V5XSA/PyBkYXRhSXRlbS5JZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhlY3V0ZURldGFpbEV4cGFuZENhbGxiYWNrKGV2ZW50OiBEZXRhaWxFeHBhbmRFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuRGV0YWlsRXhwYW5kKTtcclxuICAgIFxyXG4gICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgY2FsbEZ1bmMoZXZlbnQsIHRoaXMuZ2V0R3JpZERhdGEoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuIHB1YmxpYyBkZXRhaWxDb2xsYXBzZShldmVudDogRGV0YWlsQ29sbGFwc2VFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuRGV0YWlsQ29sbGFwc2UpO1xyXG4gICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgY2FsbEZ1bmMoZXZlbnQsIHRoaXMuZ2V0R3JpZERhdGEoKSk7XHJcbiAgICB9XHJcbiAgfTtcclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZ3JpZC1jb250YWluZXIgZTF0YWctc3R5bGVcIiBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGVcIj5cclxuICA8IS0tIFRvb2x0aXAgVGVtcGxhdGUgLS0+XHJcbiAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtYW5jaG9yPlxyXG4gICAgPHNwYW4+e3sgdHJ1bmNhdGVUZXh0KGFuY2hvci5uYXRpdmVFbGVtZW50LmlubmVyVGV4dCkgfX08L3NwYW4+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPCEtLSBQb3BvdmVyIENvbXBvbmVudCAtLT5cclxuICA8a2VuZG8tcG9wb3ZlciAjZ3JpZFBvcE92ZXIgW3Bvc2l0aW9uXT1cImRhdGEuUG9wT3ZlclBvc2l0aW9uIHx8ICdib3R0b20nXCIgW3RlbXBsYXRlRGF0YV09XCJnZXRDb250ZXh0RGF0YS5iaW5kKHRoaXMpXCI+XHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9Qb3BvdmVyQm9keVRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxyXG4gICAgICA8ZGl2IFtzdHlsZV09XCJkYXRhLkJvZHlTdHlsZVwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJwb3BvdmVyYm9keVwiXHJcbiAgICAgICAgICAgKm5nSWY9XCJkYXRhICYmIGRhdGEuQm9keVwiXHJcbiAgICAgICAgICAgW2lubmVySFRNTF09XCJkYXRhLkJvZHkgfCBodG1sU2FuaXRpemVcIlxyXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cImRhdGEuQm9keUNsYXNzXCJcclxuICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJjbG9zZVBvcE92ZXIuY2FsbCh0aGlzLCAkZXZlbnQpXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2tlbmRvLXBvcG92ZXI+XHJcblxyXG4gIDwhLS0gTWFpbiBHcmlkIENvbnRhaW5lciAtLT5cclxuICA8ZGl2IGtlbmRvVG9vbHRpcFxyXG4gICAgICAgc2hvd09uPVwibm9uZVwiXHJcbiAgICAgICBbdG9vbHRpcFRlbXBsYXRlXT1cInRlbXBsYXRlXCJcclxuICAgICAgIGZpbHRlcj1cIi5rLWdyaWQgdGRcIlxyXG4gICAgICAgKG1vdXNlb3Zlcik9XCJzaG93VG9vbHRpcCgkZXZlbnQpXCJcclxuICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiXHJcbiAgICAgICBjbGFzcz1cImUxdGFnLXN0eWxlMVwiPlxyXG5cclxuICAgIDxkaXYga2VuZG9Qb3BvdmVyQ29udGFpbmVyXHJcbiAgICAgICAgIFtwb3BvdmVyXT1cImdyaWRQb3BPdmVyXCJcclxuICAgICAgICAgZmlsdGVyPVwiZGl2LmdyaWRDZWxsLndpdGhQb3BvdmVySW5HcmlkXCJcclxuICAgICAgICAgc2hvd09uPVwibm9uZVwiXHJcbiAgICAgICAgIGtlbmRvUG9wb3ZlckNvbnRhaW5lclxyXG4gICAgICAgICAjcG9wb3ZlcmNvbnRhaW5lcj1cImtlbmRvUG9wb3ZlckNvbnRhaW5lclwiPlxyXG5cclxuICAgICAgPCEtLSBLZW5kbyBHcmlkIC0tPlxyXG4gICAgICA8a2VuZG8tZ3JpZCBbemdyaWRiaW5kaW5nXT1cIntcclxuICAgICAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgICAgICBncm91cDogZ3JvdXAsXHJcbiAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgICAgICAgIGdyaWRTdWJqZWN0OiBncmlkU3ViamVjdCxcclxuICAgICAgICAgIGdyaWRTZXR0aW5nOiBncmlkU2V0dGluZ1xyXG4gICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkZXNrdG9wLWdyaWQgZTF0YWctc3R5bGUyXCJcclxuICAgICAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwiZGF0YS5zY3JvbGxBYmxlID09PSBmYWxzZSA/ICdub25lJyA6ICdzY3JvbGxhYmxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwYWdlYWJsZV09XCJwYWdlYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5oaWRlbi1wYWdlcl09XCIhcGFnZWFibGVcIlxyXG4gICAgICAgICAgICAgICAgICBbcGFnZVNpemVdPVwiZ3JpZFNldHRpbmcuZ3JpZFN0YXRlLnRha2VcIlxyXG4gICAgICAgICAgICAgICAgICBbc2tpcF09XCJncmlkU2V0dGluZy5ncmlkU3RhdGUuc2tpcFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzb3J0XT1cImdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5zb3J0XCJcclxuICAgICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInthbGxvd1Vuc29ydDogdHJ1ZSwgbW9kZTogJ211bHRpcGxlJ31cIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5maWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJkYXRhLmVuYWJsZUZpbHRlcmluZyAhPT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICBbcmVzaXphYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbcmVvcmRlcmFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51XT1cImRhdGEuRGlzYWJsZUdyaWRDb2x1bW5NZW51ID8gZmFsc2UgOiB7IGZpbHRlcjogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIhKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbGljayk9XCJjZWxsQ2xpY2tIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoY2VsbENsb3NlKT1cImVkaXRDZWxsQ2xvc2VIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoZGF0YVN0YXRlQ2hhbmdlKT1cImRhdGFTdGF0ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwicGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNvcnRDaGFuZ2UpPVwic29ydENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJmaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtrZW5kb0dyaWRTZWxlY3RCeV09XCJyb3dTZWxlY3Rpb25LZXlcIlxyXG4gICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkS2V5cyldPVwicm93U2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCJcclxuICAgICAgICAgICAgICAgICAgW3RyYWNrQnldPVwidHJhY2tCeVwiXHJcbiAgICAgICAgICAgICAgICAgIChjYW5jZWwpPVwiY2FuY2VsSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNhdmUpPVwic2F2ZUhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGVkaXQpPVwiZWRpdEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChhZGQpPVwiYWRkSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGNvbHVtblJlc2l6ZSk9XCJhZGp1c3RXaWR0aFVwb25SZXNpemUoKVwiXHJcbiAgICAgICAgICAgICAgICAgIChleGNlbEV4cG9ydCk9XCJvbkV4Y2VsRXhwb3J0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbcm93Q2xhc3NdPVwicm93Q2FsbGJhY2suYmluZCh0aGlzKVwiXHJcbiAgICAgICAgICAgICAgICAgIChkZXRhaWxFeHBhbmQpPVwiZGV0YWlsRXhwYW5kKCRldmVudClcIiBcclxuICAgICAgICAgICAgICAgICAgKGRldGFpbENvbGxhcHNlKT1cImRldGFpbENvbGxhcHNlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoZ3JvdXApPVwiZ3JpZFNldHRpbmcuZ3JpZFN0YXRlLmdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgW2dyb3VwYWJsZV09XCJkYXRhLkdyb3VwU2V0dGluZz8uRW5hYmxlR3JvdXBpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAoZ3JvdXBDaGFuZ2UpPVwiZ3JvdXBDaGFuZ2UoJGV2ZW50KVwiPlxyXG5cclxuICAgICAgICA8IS0tIFRvb2xiYXIgVGVtcGxhdGUgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZFRvb2xiYXJUZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuQWxsb3dSZWZyZXNoQnV0dG9uIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5BbGxvd0V4cG9ydCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuQ2FjaGVJbmZvPy5FbmFibGVTYXZlU3RhdGUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLlRpdGxlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5FbmFibGVHcmlkQ29tbWFuZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI+XHJcblxyXG4gICAgICAgICAgPCEtLSBMZWZ0IFRvb2xiYXIgSXRlbXMgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1sZWZ0LWl0ZW1cIiAqbmdJZj1cImdyaWRUaXRsZSB8fCBkYXRhLkFsbG93UmVmcmVzaEJ1dHRvbiB8fCBkYXRhLkFsbG93RXhwb3J0XCI+XHJcbiAgICAgICAgICAgIDxrZW5kby1sYWJlbCBjbGFzcz1cImdyaWRUaXRsZVwiICpuZ0lmPVwiZ3JpZFRpdGxlXCI+e3sgZ3JpZFRpdGxlIH19PC9rZW5kby1sYWJlbD5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gdGl0bGU9XCJSZWZyZXNoXCJcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxlZnQtYnV0dG9ucyByZWZyZXNoLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAga2VuZG9CdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVmcmVzaERhdGEoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkFsbG93UmVmcmVzaEJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstZ3JpZC1idXR0b24gay1pLXJlZnJlc2gtc21cIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItbGVmdC1pdGVtLXNlY29uZC1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5BbGxvd0V4cG9ydFwiXHJcbiAgICAgICAgICAgICAgICAgW2NsYXNzLndpdGgtZ3JpZC10aXRsZV09XCJncmlkVGl0bGUgfHwgZGF0YS5BbGxvd1JlZnJlc2hCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsZWZ0LWJ1dHRvbnMgZXhwb3J0LWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBrZW5kb0dyaWRFeGNlbENvbW1hbmRcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5BbGxvd0V4cG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImRvd25sb2FkXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJleHBvcnQtdG8tZXhjZWwtYnV0dG9uLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAge3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ0Rvd25sb2FkIGFzIEV4Y2VsJykgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIFJpZ2h0IFRvb2xiYXIgSXRlbXMgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1yaWdodC1pdGVtXCJcclxuICAgICAgICAgICAgICAgKm5nSWY9XCJncmlkQnRuIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEuQ2FjaGVJbmZvPy5FbmFibGVTYXZlU3RhdGUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgZ3JpZERlZmF1bHRTdGF0ZUV4aXN0IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEuRW5hYmxlR3JpZENvbW1hbmQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgZGF0YS5FbmFibGVDdXN0b21BZGRDb21tYW5kIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEuRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI+XHJcblxyXG4gICAgICAgICAgICA8YXBwLXp3b3JrZmxvd2J1dHRvbnMgKm5nSWY9XCJncmlkQnRuICYmIGdyaWRCdG4uVHlwZSA9PT0gJ3p3b3JrZmxvd2J1dHRvbnMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImdyaWRCdG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cImdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIj5cclxuICAgICAgICAgICAgPC9hcHAtendvcmtmbG93YnV0dG9ucz5cclxuXHJcbiAgICAgICAgICAgIDxhcHAtemJ1dHRvbnMgKm5nSWY9XCJncmlkQnRuICYmIGdyaWRCdG4uVHlwZSA9PT0gJ3pidXR0b25zJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZ3JpZEJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cImdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCI+XHJcbiAgICAgICAgICAgIDwvYXBwLXpidXR0b25zPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBrZW5kb0J1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlR3JpZFNldHRpbmdzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5DYWNoZUluZm8/LkVuYWJsZVNhdmVTdGF0ZVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaWNvbi13aXRoLXRleHQgay1pLXN0YXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAge3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ1NhdmUgU2V0dGluZ3MnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAga2VuZG9CdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzdG9yZUdyaWRTZXR0aW5ncygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dSZXN0b3JlR3JpZFNldHRpbmdCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1zdGFyLW91dGxpbmVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAge3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ1Jlc2V0IHRvIERlZmF1bHQnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAga2VuZG9HcmlkQWRkQ29tbWFuZFxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5FbmFibGVHcmlkQ29tbWFuZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaWNvbi13aXRoLXRleHQgay1pLWFkZFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICB7eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZShkYXRhLkFkZENvbW1hbmRCdXR0b25OYW1lID8gZGF0YS5BZGRDb21tYW5kQnV0dG9uTmFtZSA6ICdBZGQnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAga2VuZG9CdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ3JpZEN1c3RvbUFkZENvbW1hbmQoZ3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaWNvbi13aXRoLXRleHQgay1pLWFkZFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICB7eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZShkYXRhLkFkZENvbW1hbmRCdXR0b25OYW1lID8gZGF0YS5BZGRDb21tYW5kQnV0dG9uTmFtZSA6ICdBZGQnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAga2VuZG9CdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ3JpZEN1c3RvbVJlc2V0Q29tbWFuZChncm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5FbmFibGVDdXN0b21SZXNldENvbW1hbmRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS10cmFzaFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICB7eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZShkYXRhLlJlc2V0Q29tbWFuZEJ1dHRvbk5hbWUgPyBkYXRhLlJlc2V0Q29tbWFuZEJ1dHRvbk5hbWUgOiAnUmVzZXQnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gRmlsdGVyIENvbnRhaW5lciAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyXCIgKm5nSWY9XCJkYXRhLkdyaWRGaWx0ZXJCYXJGaWVsZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9ybWFsLWZpbHRlci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8YXBwLXpmb3JtIGNsYXNzPVwiZmlsdGVyLWZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiZmlsdGVyR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkTmFtZV09XCJkYXRhLkdyaWRGaWx0ZXJCYXJGaWVsZFwiPlxyXG4gICAgICAgICAgICAgIDwvYXBwLXpmb3JtPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWJ1dHRvbnNcIiBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwic29saWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cImRlZmF1bHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb25nPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJzZWFyY2hcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWxhYmVsIGlvbi10ZXh0LWNhcGl0YWxpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnU2VhcmNoJykgfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJkZWZhdWx0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9uZz1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxFZGl0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLklzU2hvd0dyaWRDYW5jZWxGaWx0ZXJCdXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInRpbWVzXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwiZGVmYXVsdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJvbmc9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImlzU2hvd0FkdkZpbHRlciA/ICd0b2dnbGVPbicgOiAndG9nZ2xlT2ZmJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWR2YW5jZWRTZWFyY2goKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJzbGlkZXJzLWhcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBBZHZhbmNlZCBGaWx0ZXIgLS0+XHJcbiAgICAgICAgICAgIDxhcHAtemZvcm0gKm5nSWY9XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0by1wcmVsb2FkLXRoZS1maWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJhZHZmaWx0ZXJHcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkTmFtZV09XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+XHJcbiAgICAgICAgICAgIDwvYXBwLXpmb3JtPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdi1maWx0ZXItY29udGFpbmVyXCIgKm5nSWY9XCJpc1Nob3dBZHZGaWx0ZXJcIiBbQGhpZGVBbmRTaG93QW5pbWF0aW9uXT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2LWZpbHRlci1zZXBlcmF0b3JcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdBZHZhbmNlZCBTZWFyY2gnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGFwcC16Zm9ybSBjbGFzcz1cImFkdmZpbHRlci1maWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cImFkdmZpbHRlckdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZE5hbWVdPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIj5cclxuICAgICAgICAgICAgICA8L2FwcC16Zm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8IS0tIENoZWNrYm94IENvbHVtbiAtLT5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4gKm5nSWY9XCIhIWRhdGEuU2VsZWN0T3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCI0MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dTZWxlY3RBbGw9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbk1lbnVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2NrZWRdPVwiY2hlY2tib3hDb2x1bW5QaW5uZWRcIj5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY2hlY2tib3gtY29sdW1uPlxyXG5cclxuICAgICAgICA8IS0tIER5bmFtaWMgQ29sdW1ucyAtLT5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gW3N0eWxlXT1cImdldEdyaWRDb2x1bW5TdHlsZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlMXRhZy1zdHlsZTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2wudGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiY29sLndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pblJlc2l6YWJsZVdpZHRoXT1cImNvbC5taW5SZXNpemFibGVXaWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiY29sLmZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cImZpbHRlcmFibGUoY29sLmVuYWJsZUZpbHRlcmluZylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwic29ydGFibGUoY29sLmVuYWJsZVNvcnRpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlYWRlclN0eWxlXT1cImdldEdyaWRIZWFkZXJTdHlsZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ2xhc3M9XCJlMXRhZy1zdHlsZTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9vdGVyU3R5bGVdPVwiZ2V0R3JpZEZvb3RlclN0eWxlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmb290ZXJDbGFzcz1cImUxdGFnLXN0eWxlOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiY29sLmhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiY29sLmZvcm1hdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2wuQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9ja2VkXT1cImxvY2tlZChjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yPVwibnVtZXJpY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51XT1cIiFjb2wuZGlzYWJsZUNvbHVtbk1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5jbHVkZUluQ2hvb3Nlcl09XCJjb2wuaW5jbHVkZUluQ2hvb3NlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlZGl0b3JdPVwiY29sLmVkaXRvclR5cGVcIj5cclxuXHJcbiAgICAgICAgICA8IS0tIEZpbHRlciBUZW1wbGF0ZXMgLS0+XHJcbiAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDwhLS0gTnVtZXJpYyBGaWx0ZXIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeScgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1udW1lcmljLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yPVwiZXFcIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRGF0ZSBGaWx0ZXIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT0gJ3pkYXRlJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wuZmllbGRUeXBlID09PSAnenRpbWUnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5maWVsZFR5cGUgPT09ICd6ZGF0ZXRpbWUnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5maWVsZFR5cGUgPT09ICd6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICA8IS0tIERhdGUgUmFuZ2UgRmlsdGVyIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuZmlsdGVyQnlEYXRlUmFuZ2UgPT09IHRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCIgb3BlcmF0b3I9XCJsdGVcIj5cclxuICAgICAgICAgICAgICAgICAgPGRhdGUtcmFuZ2UtZmlsdGVyLWNlbGwgW3Nob3dPcGVyYXRvcnNdPVwiZGF0YS5Jc1Nob3dHcmlkRmlsdGVyT3BlcmF0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGUtcmFuZ2UtZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGF0ZS1yYW5nZS1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gUmVndWxhciBEYXRlIEZpbHRlciAtLT5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmZpbHRlckJ5RGF0ZVJhbmdlID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtZGF0ZS1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcj1cImx0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEJvb2xlYW4gRmlsdGVyIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJjb2wuZmllbGRUeXBlID09PSAnY2hlY2tib3gnXCI+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWJvb2xlYW4tZmlsdGVyLWNlbGwgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yPVwiZXFcIj5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1ib29sZWFuLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBEZWZhdWx0IFN0cmluZyBGaWx0ZXIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yPVwiY29udGFpbnNcIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1jb250YWlucy1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1jb250YWlucy1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLXN0YXJ0c3dpdGgtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItc3RhcnRzd2l0aC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lbmRzd2l0aC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lbmRzd2l0aC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBHcmlkIEVkaXQgVGVtcGxhdGUgLS0+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRWRpdFRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkVuYWJsZUdyaWRDb21tYW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBsZXQtZGF0YUl0ZW09XCJkYXRhSXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbGV0LWNvbHVtbj1cImNvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbGV0LWZvcm1Hcm91cD1cImZvcm1Hcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbGV0LWlzTmV3PVwiaXNOZXdcIj5cclxuICAgICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gTnVtYmVyIEVkaXRvciAtLT5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLW51bWVyaWN0ZXh0Ym94ICNjZWxsQW5jaG9yIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZClcIj48L2tlbmRvLW51bWVyaWN0ZXh0Ym94PlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXBvcHVwIFthbmNob3JdPVwiY2VsbEFuY2hvci5udW1lcmljSW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIShpc05ldyAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBDbGFzcz1cImstd2lkZ2V0IGstdG9vbHRpcCBrLXRvb2x0aXAtdmFsaWRhdGlvbiBrLWludmFsaWQtbXNnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4OyBvcGFjaXR5OiAwLjU7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS13YXJuaW5nXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIWZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5OYW1lIH19IHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmVycm9ycz8ucGF0dGVyblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5WYWxpZGF0b3JNZXNzYWdlID8gY29sLlZhbGlkYXRvck1lc3NhZ2UgOiBcIlBsZWFzZSBjaGVjayB0aGUgaW5wdXQgdmFsdWUuXCIgfX1cclxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLXBvcHVwPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIERlZmF1bHQgVGV4dCBFZGl0b3IgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXRleHRib3ggI2NlbGxBbmNob3IgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKVwiPjwva2VuZG8tdGV4dGJveD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1wb3B1cCBbYW5jaG9yXT1cImNlbGxBbmNob3IuaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIShpc05ldyAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBDbGFzcz1cImstd2lkZ2V0IGstdG9vbHRpcCBrLXRvb2x0aXAtdmFsaWRhdGlvbiBrLWludmFsaWQtbXNnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4OyBvcGFjaXR5OiAwLjU7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS13YXJuaW5nXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIWZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5OYW1lIH19IHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmVycm9ycz8ucGF0dGVyblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5WYWxpZGF0b3JNZXNzYWdlID8gY29sLlZhbGlkYXRvck1lc3NhZ2UgOiBcIlBsZWFzZSBjaGVjayB0aGUgaW5wdXQgdmFsdWUuXCIgfX1cclxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLXBvcHVwPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgPCEtLSBDZWxsIFRlbXBsYXRlcyAtLT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgIDwhLS0gUmVndWxhciBDZWxsIERpc3BsYXkgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDFweCAwO1wiXHJcbiAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sLmNsaWNrYWJsZUljb25zICYmIGNvbC5pc0VkaXRhYmxlSW5HcmlkICE9PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2xhc3MoZGF0YUl0ZW0sIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgIFtzdHlsZV09XCJnZXRDZWxsU3R5bGUoY29sLCBkYXRhSXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtaWRdPVwiZGF0YUl0ZW0uSWRcIlxyXG4gICAgICAgICAgICAgICAgIFthdHRyLmNvbHVtbi1uYW1lXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2hvd1BvcE92ZXIoY29sLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJjbG9zZVBvcE92ZXIoJGV2ZW50KVwiPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIERhdGUgQ2VsbCAtLT5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRlJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnZGQvTU0veXl5eScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVGltZSBDZWxsIC0tPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenRpbWUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdISDptbScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gU2hvcnQgRGF0ZSBDZWxsIC0tPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenNob3J0ZGF0ZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ01NTSB5eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBEYXRlVGltZSBDZWxsIC0tPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGV0aW1lJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVUkgRGF0ZVRpbWUgQ2VsbCAtLT5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p1aWRhdGV0aW1lJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gTnVtYmVyIENlbGwgLS0+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlciB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBDdXJyZW5jeSBDZWxsIC0tPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCwgJzEuMi0yJykgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gTnVtZXJpYyBDZWxsIC0tPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInem51bWVyaWMnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVVJMIENlbGwgLS0+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid1cmwnXCIgc3R5bGU9XCJjb2xvcjogYmx1ZTsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRGVmYXVsdCBDZWxsIC0tPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEljb24gRGlzcGxheSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDVweCAwO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlICYmIGdldEljb25OYW1lKGNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZSwgZGF0YUl0ZW1bY29sLmZpZWxkXSkgIT09ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImdldEljb25OYW1lKGNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZSwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRleHQgRGlzcGxheSB3aXRoIENvbmRpdGlvbmFsIFN0eWxpbmcgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZVwiIFtuZ1N3aXRjaF09XCJjZWxsU3R5bGVDb25kaXRpb24oY29sLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPXRydWU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGxTdHlsZUNvbmRpdGlvbkRlZmF1bHRcIiBbc3R5bGVdPVwic2V0Q2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj57eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPnt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIElubGluZSBFZGl0YWJsZSBDZWxsIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIlxyXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmlzRWRpdGFibGVJbkdyaWQgPT09IHRydWUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGlzSW5saW5lRm9ybUdyb3VwSGFzVmFsdWUoKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgIWlzSW5saW5lRWRpdElucHV0RmllbGRMb2FkaW5nICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAhY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlXCJcclxuICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTVcIlxyXG4gICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENsYXNzKGRhdGFJdGVtLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICBjbGFzcz1cImUxdGFnLXN0eWxlNVwiXHJcbiAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImdldENlbGxTdHlsZUZvcklubGluZUVkaXQoY29sLCBkYXRhSXRlbSwgcm93SW5kZXgpXCI+XHJcbiAgICAgICAgICAgICAgPGFwcC16aW5wdXQtY29udGFpbmVyIFtkYXRhXT1cImdldElubGluZUZpZWxkKGNvbC5maWVsZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJnZXRJbmxpbmVGb3JtKGRhdGFJdGVtLCByb3dJbmRleClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udGFpbmVyRmllbGRdPVwiY29udGFpbmVyRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImUxdGFnLXN0eWxlNlwiPlxyXG4gICAgICAgICAgICAgIDwvYXBwLXppbnB1dC1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDbGlja2FibGUgSWNvbnMgLS0+XHJcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXRvcDogMTBweDtcIiAqbmdGb3I9XCJsZXQgaWNvbiBvZiBjb2wuY2xpY2thYmxlSWNvbnNcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJpY29uLkNsYXNzID8gaWNvbi5DbGFzcyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiEhaWNvbiAmJiAoISFkYXRhSXRlbS5XRlNfU3RhdHVzQ29kZSAmJiAhIWljb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGF0YUl0ZW0uV0ZTX1N0YXR1c0NvZGUgIT09IGljb24uV0ZTX1N0YXR1c0NvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBkaXNhYmxlZEJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQnRuQ2xpY2soJGV2ZW50LCBpY29uLCBkYXRhSXRlbSwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgIHt7aWNvbi5OYW1lIHx8IGRhdGFJdGVtW2NvbC5maWVsZF19fVxyXG4gICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiaWNvbi5JY29uXCIgc3R5bGU9XCJwYWRkaW5nOiA0cHggNnB4O1wiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNhYmxlZEJ1dHRvbj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgIDwhLS0gRm9vdGVyIFRlbXBsYXRlIC0tPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZvb3RlclRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbGV0LWNvbHVtblxyXG4gICAgICAgICAgICAgICAgICAgICAgIGxldC1jb2x1bW5JbmRleD1cImNvbHVtbkluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuRW5hYmxlQWdncmVnYXRlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDVweCAwO1wiXHJcbiAgICAgICAgICAgICAgICAgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlN1wiXHJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJlMXRhZy1zdHlsZTdcIj5cclxuICAgICAgICAgICAgICB7e2NvbC5hZ2dyZWdhdGVUeXBlfX1cclxuXHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdISDptbScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenNob3J0ZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdNTU0geXl5eScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p1aWRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IG51bWJlciB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCwgJzEuMi4yJykgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInem51bWVyaWMnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBudW1iZXI6IGdldEZvcm1hdChjb2wpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3VybCdcIiBzdHlsZT1cImNvbG9yOiBibHVlOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxyXG5cclxuICAgICAgICA8IS0tIENvbW1hbmQgQ29sdW1uIC0tPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uICpuZ0lmPVwiZGF0YS5FbmFibGVHcmlkQ29tbWFuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxODBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZTF0YWctc3R5bGU4XCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1pc05ldz1cImlzTmV3XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkU2F2ZUNvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgaXNOZXcgPyAnU2F2ZScgOiAnVXBkYXRlJyB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRDYW5jZWxDb21tYW5kIFtwcmltYXJ5XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICB7eyBpc05ldyA/ICdEaXNjYXJkIGNoYW5nZXMnIDogJ0NhbmNlbCcgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkRWRpdENvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgXCJFZGl0XCIgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkUmVtb3ZlQ29tbWFuZD5cclxuICAgICAgICAgICAgICB7eyBcIlJlbW92ZVwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XHJcblxyXG4gICAgICAgIDwhLS0gQ3VzdG9tIFJlbW92ZSBDb21tYW5kIENvbHVtbiAtLT5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbiAqbmdJZj1cImRhdGEuRW5hYmxlQ3VzdG9tUmVtb3ZlQ29tbWFuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxODBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZTF0YWctc3R5bGU4XCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1pc05ldz1cImlzTmV3XCIgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAga2VuZG9CdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ3JpZEN1c3RvbVJlbW92ZUNvbW1hbmQoZGF0YUl0ZW0sIHJvd0luZGV4KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkVuYWJsZUN1c3RvbVJlbW92ZUNvbW1hbmRcIj5cclxuICAgICAgICAgICAgICB7eyBcIlJlbW92ZVwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XHJcblxyXG4gICAgICAgIDxrZW5kby1ncmlkLWV4Y2VsIGZpbGVOYW1lPVwiRXhwb3J0Lnhsc3hcIiBbZmV0Y2hEYXRhXT1cImFsbFJlc3VsdHNcIj48L2tlbmRvLWdyaWQtZXhjZWw+XHJcblxyXG4gICAgICAgIDwhLS1kZXRhaWwgZ3JpZC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWREZXRhaWxUZW1wbGF0ZSAqbmdJZj1cImRhdGEuRGV0YWlsR3JpZCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBkYXRhLkRldGFpbEdyaWQuVmlzaWJsZVwiPlxyXG4gICAgICAgICAgPGFwcC16Z3JpZCBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5jb250YWluZXJTdHlsZS5zdHlsZTRcIiBjbGFzcz1cImUxdGFnLWNvbnRhaW5lci1zdHlsZTRcIiBcclxuICAgICAgICAgICAgW2RhdGFdPVwiZGF0YS5EZXRhaWxHcmlkXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiIFtjb250YWluZXJGaWVsZF09XCJjb250YWluZXJGaWVsZFwiIFxyXG4gICAgICAgICAgICBbY29tcG9uZW50UHJvcGVydGllc109XCJjb21wb25lbnRQcm9wZXJ0aWVzXCI+XHJcbiAgICAgICAgICA8L2FwcC16Z3JpZD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPC9rZW5kby1ncmlkPlxyXG5cclxuICAgICAgPGFwcC1jb250ZXh0LW1lbnUgW2RhdGFdPVwiZGF0YVwiIFtncm91cF09XCJncm91cFwiIFtmb3JtXT1cImZvcm1cIiAjZGF0YWl0ZW1jb250ZXh0bWVudT48L2FwcC1jb250ZXh0LW1lbnU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBmb3IgREVDIGF1dG8gc2Nyb2xsaW5nIC0tPlxyXG4gIDxkaXYgaWQ9XCJlbmQtb2YtZ3JpZFwiPjwvZGl2PlxyXG48L2Rpdj5cclxuIl19