mmhglobal-dynamicform 2.14.0 → 2.14.2

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.
@@ -270,18 +270,26 @@ export class ZGridBindingDirective extends DataBindingDirective {
270
270
  */
271
271
  getFilterParams() {
272
272
  const filterParams = this.field['FilterParams'];
273
- // Check if 'filterParams' is defined and starts with "group.".
274
- if (filterParams && filterParams.startsWith("group.")) {
275
- this.params.filterParams = ZComponentHelper.getGroupValue(filterParams, this.grp);
276
- }
277
- else {
278
- // If 'filterParams' is not defined or doesn't start with "group.", use it directly.
279
- this.params.filterParams = filterParams;
280
- }
281
273
  // Initialize filter parameters if undefined.
282
274
  if (!this.params.filterParams) {
283
275
  this.params.filterParams = [];
284
276
  }
277
+ if (filterParams) {
278
+ if (filterParams.startsWith("group.")) {
279
+ // If 'filterParams' starts with "group.", extend the existing array.
280
+ this.params.filterParams = [
281
+ ...this.params.filterParams,
282
+ ...ZComponentHelper.getGroupValue(filterParams, this.grp)
283
+ ];
284
+ }
285
+ else {
286
+ // If 'filterParams' does not start with "group.", use it directly.
287
+ this.params.filterParams = [
288
+ ...this.params.filterParams,
289
+ filterParams
290
+ ];
291
+ }
292
+ }
285
293
  // Check if there are column filters in the grid state and append to filterparam
286
294
  if (this.gridSetting.gridState?.filter?.filters) {
287
295
  this.gridSetting.gridState.filter?.filters?.forEach((filter) => {
@@ -807,4 +815,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
807
815
  }] }, { type: i1.WebApiService }, { type: i1.ToastService }, { type: i1.OfflineDatabaseService }, { type: i1.SignalrService }, { type: i2.ZGridService }]; }, propDecorators: { zgridbinding: [{
808
816
  type: Input
809
817
  }] } });
810
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQuYmluZGluZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96Z3JpZC96Z3JpZC5iaW5kaW5nLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1RSw2QkFBNkI7QUFFN0IsOEJBQThCO0FBQzlCLE9BQU8sRUFBdUIsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUF5QyxNQUFNLDhCQUE4QixDQUFDO0FBRzFILDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBQ3BGLHlEQUF5RDtBQUN6RCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQzZELFVBQVUsRUFDeEYsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQU16QixNQUFNLE9BQU8scUJBQXNCLFNBQVEsb0JBQW9CO0lBd0Q3RCxZQUN5QixJQUFJLEVBQUUseUZBQXlGO0lBQzlHLGFBQTRCLEVBQzVCLFlBQTBCO0lBQ2xDLG1DQUFtQztJQUMzQixzQkFBOEMsRUFDOUMsY0FBOEIsRUFDOUIsV0FBeUI7UUFFakMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBUEosa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFFMUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWM7UUE5RDNCLGdCQUFXLEdBQUc7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QUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtZQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFDckQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakI7UUFDRCxPQUFPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUdELHFDQUFxQztJQUNyQyxnQ0FBZ0M7SUFDaEMseUJBQXlCO0lBQ3pCLCtEQUErRDtJQUMvRCxpREFBaUQ7SUFDakQsc0NBQXNDO0lBRS9CLFVBQVUsQ0FBQyxPQUFjO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztRQUN2QyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7O2tIQWw2QlUscUJBQXFCLGtCQXlEdEIsYUFBYTtzR0F6RFoscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBSGpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtpQkFDM0I7OzBCQTBESSxNQUFNOzJCQUFDLGFBQWE7Z01BbERkLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgT25Jbml0LCBPbkRlc3Ryb3ksIElucHV0LCBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBEYXRhQmluZGluZ0RpcmVjdGl2ZSwgR3JpZENvbXBvbmVudCwgRGF0YVN0YXRlQ2hhbmdlRXZlbnQsIFBhZ2VDaGFuZ2VFdmVudCB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkXCI7XHJcbmltcG9ydCB7IFNvcnREZXNjcmlwdG9yLCBGaWx0ZXJEZXNjcmlwdG9yLCB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tZGF0YS1xdWVyeVwiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBHcmlkU2V0dGluZ1R5cGUsIEdyaWRTdGF0ZUxvZ2ljVHlwZSwgWkdyaWRTZXJ2aWNlIH0gZnJvbSBcIi4vemdyaWQuc2VydmljZVwiO1xyXG4vL2ltcG9ydCB7IE1haW5TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL21haW4uc2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG4gIFpDb21wb25lbnRIZWxwZXIsIFpGaWVsZCwgWkdyaWRQb3N0QXBpUGFyYW1zLFxyXG4gIFdlYkFwaVNlcnZpY2UsIFpHcm91cCwgVG9hc3RTZXJ2aWNlLCBPZmZsaW5lRGF0YWJhc2VTZXJ2aWNlLCBTaWduYWxyU2VydmljZSwgQWN0aW9uVHlwZSwgWkdyaWRDb2x1bW5Db25maWdzLCBaR3JpZFNldHRpbmdzXHJcbn0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiBcIlt6Z3JpZGJpbmRpbmddXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBaR3JpZEJpbmRpbmdEaXJlY3RpdmUgZXh0ZW5kcyBEYXRhQmluZGluZ0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGNoYW5nZUV2ZW50ID0ge1xyXG4gICAgcGFnZUNoYW5nZWQ6IGZhbHNlLFxyXG4gICAgZmlsdGVyQ2hhbmdlZDogZmFsc2UsXHJcbiAgICBzb3J0Q2hhbmdlZDogZmFsc2VcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHpncmlkYmluZGluZzoge1xyXG4gICAgZGF0YTogWkZpZWxkO1xyXG4gICAgZ3JvdXA6IFpHcm91cDtcclxuICAgIHBhcmFtczogWkdyaWRQb3N0QXBpUGFyYW1zO1xyXG4gICAgZ3JpZFN1YmplY3Q6IFN1YmplY3Q8YW55PjtcclxuICAgIGdyaWRTZXR0aW5nOiBaR3JpZFNldHRpbmdzO1xyXG4gIH07XHJcblxyXG4gIC8vc3RhdGU6IFN0YXRlID0ge1xyXG4gIC8vICBza2lwOiAwLFxyXG4gIC8vICB0YWtlOiAxMCxcclxuICAvL307XHJcblxyXG4gIC8vZ3JpZENvbHVtbnM6IGFueVtdID0gW107XHJcblxyXG4gIC8vdXNhYmxlQ29sdW1uczogYW55W10gPSBbXTtcclxuXHJcbiAgcmVzb3VyY2VVUkwgPSBudWxsO1xyXG5cclxuICBwYWdpbmF0aW9uQXBpUG9zdFVybCA9IG51bGw7XHJcblxyXG4gIGRhdGFTb3VyY2UgPSBudWxsO1xyXG5cclxuICBnZXQgZ3JpZFNldHRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy56Z3JpZGJpbmRpbmcuZ3JpZFNldHRpbmc7XHJcbiAgfVxyXG4gIHNldCBncmlkU2V0dGluZyh2YWx1ZSkge1xyXG4gICAgdGhpcy56Z3JpZGJpbmRpbmcuZ3JpZFNldHRpbmcgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGZpZWxkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuemdyaWRiaW5kaW5nLmRhdGE7XHJcbiAgfVxyXG5cclxuICBnZXQgZ3JwKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuemdyaWRiaW5kaW5nLmdyb3VwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdyaWRTdWJqZWN0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuemdyaWRiaW5kaW5nLmdyaWRTdWJqZWN0O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhcmFtcygpOiBaR3JpZFBvc3RBcGlQYXJhbXMge1xyXG4gICAgcmV0dXJuIHRoaXMuemdyaWRiaW5kaW5nLnBhcmFtcztcclxuICB9XHJcblxyXG4gIGdldCBnZXREYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KEdyaWRDb21wb25lbnQpIGdyaWQsIC8vIEluamVjdGluZyBHcmlkQ29tcG9uZW50IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgc2NvcGUgYW5kIGNvbnRleHQgb2YgdGhlIEdyaWRDb21wb25lbnQuXHJcbiAgICBwcml2YXRlIHdlYmFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgLy9wcml2YXRlIG1haW5TZXJ2aWNlOiBNYWluU2VydmljZSxcclxuICAgIHByaXZhdGUgb2ZmbGluZURhdGFiYXNlU2VydmljZTogT2ZmbGluZURhdGFiYXNlU2VydmljZSxcclxuICAgIHByaXZhdGUgc2lnbmFsclNlcnZpY2U6IFNpZ25hbHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogWkdyaWRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihncmlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgdGhpcy5ncmlkLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMuZmllbGQuUGFnZVNpemUgfHwgMjA7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSB0aGlzLmZpZWxkLkRhdGFTb3VyY2UgPz8gbnVsbDtcclxuXHJcbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLnJlc291cmNlVVJMID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKFxyXG4gICAgICAgIHRoaXMuZmllbGQuUmVzb3VyY2VVUkwsXHJcbiAgICAgICAgdGhpcy5ncnBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5yZXNvdXJjZVVSTCkge1xyXG4gICAgICAgIHRoaXMuZ3JpZC5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuemdyaWRiaW5kaW5nLmRhdGEuTmFtZSAhPT0gXCJBY3Rpdml0eUxvZ0dyaWRcIikge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBcIk5vIGluaXRpYWxpc2UgZm9yIEZpZWxkLlJlc291cmNlVVJMOiBcIixcclxuICAgICAgICAgICAgdGhpcy5maWVsZC5SZXNvdXJjZVVSTFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNldFJlc291cmNlVXJsKHRoaXMucmVzb3VyY2VVUkwpO1xyXG5cclxuICAgICAgdGhpcy5zZXRGaWx0ZXJQYXJhbXNCeVBhcmVudFJlZklkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZmllbGQuRGlzYWJsZUdlbmVyYXRlQ29sdW1uQnlGb3JtKSB7XHJcbiAgICAgIGNvbnN0IGNvbHVtbkZpZWxkcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmZpZWxkLkNvbHVtbkZpZWxkcywgdGhpcy5ncnApO1xyXG5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1uRmllbGRzKSkge1xyXG4gICAgICAgIHRoaXMuc2V0Q29sdW1ucyhjb2x1bW5GaWVsZHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5maWVsZFsnU2tpcExvYWRSZXNvdXJjZVVSTERhdGEnXSkge1xyXG4gICAgICAgIHRoaXMuZ3JpZC5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ncmlkU3ViamVjdC5uZXh0KHRoaXMpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YUJpbmRpbmcoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVHcmlkQ29sdW1ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVDYWNoZURhdGFDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFJlc291cmNlVXJsKHJlc291cmNlVXJsOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGFycmF5ID0gcmVzb3VyY2VVcmwuc3BsaXQoXCIvYXBpL1wiKTtcclxuICAgIGlmICghIWFycmF5WzFdKSB7XHJcbiAgICAgIGFycmF5WzFdID0gXCJQYWdlXCIgKyBhcnJheVsxXTtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uQXBpUG9zdFVybCA9IGFycmF5LmpvaW4oXCIvYXBpL1wiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGFyciA9IHRoaXMucmVzb3VyY2VVUkwuc3BsaXQoXCIvXCIpO1xyXG4gICAgICBhcnJbYXJyLmxlbmd0aCAtIDJdID0gXCJQYWdlXCIgKyBhcnJbYXJyLmxlbmd0aCAtIDJdO1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25BcGlQb3N0VXJsID0gYXJyLmpvaW4oXCIvXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGaWx0ZXJQYXJhbXNCeVBhcmVudFJlZklkKCkge1xyXG4gICAgLy8gVXNlIGZpZWxkIG93biByZWZlcmVuY2VJZCBpZiBhdmFpbGFibGVcclxuICAgIGNvbnN0IHJlZklkID0gdGhpcy5nZXRGaWVsZFJlZmVyZW5jZUlkKCkgfHwgdGhpcy5ncnAucmVmZXJlbmNlSWQ7XHJcbiAgICBjb25zdCByZWZGaWVsZCA9IHRoaXMuZmllbGQuUmVmZXJlbmNlRmllbGQgfHwgdGhpcy5ncnAucGFyZW50UmVmZXJlbmNlRmllbGQ7XHJcbiAgICBpZiAocmVmSWQgJiYgcmVmRmllbGQpIHtcclxuICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSB7XHJcbiAgICAgICAga2V5OiByZWZGaWVsZCxcclxuICAgICAgICBvcHM6IFwiPVwiLFxyXG4gICAgICAgIHZhbHVlOiByZWZJZCxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcy5wdXNoKGZpbHRlclZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmllbGRSZWZlcmVuY2VJZCgpIHtcclxuICAgIGxldCBmaWVsZFJlZmVyZW5jZUlkID0gbnVsbDtcclxuICAgIGlmICh0aGlzLmZpZWxkLlJlZmVyZW5jZUlkKSB7XHJcbiAgICAgIGZpZWxkUmVmZXJlbmNlSWQgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoXHJcbiAgICAgICAgdGhpcy5maWVsZC5SZWZlcmVuY2VJZCxcclxuICAgICAgICB0aGlzLmdycFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpZWxkUmVmZXJlbmNlSWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2VuZXJhdGVHcmlkQ29sdW1ucygpIHtcclxuICAgIGNvbnN0IGNvbHVtbkZpZWxkcyQ6IE9ic2VydmFibGU8YW55PiA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgdGhpcy5maWVsZC5Db2x1bW5GaWVsZHMsXHJcbiAgICAgIHRoaXMuZ3JwXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChjb2x1bW5GaWVsZHMkKSB7XHJcbiAgICAgIGNvbHVtbkZpZWxkcyQucGlwZShcclxuICAgICAgICB0YXAoKGRhdGEpID0+IHtcclxuICAgICAgICAgIGxldCBjb2x1bW5zQ29uZmlnID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAvLyBOb3RlOiBPYnRhaW5pbmcgdGhlIGdyaWQgc3RhdGUgaXMgZHVyaW5nIGluaXRpYWxpemF0aW9uOyBpZiBub3QsIGl0IHdpbGwgcHJldmVudCB0aGUgZ3JpZCBmcm9tIGxvYWRpbmcuXHJcbiAgICAgICAgICBjb25zdCBzZXR0aW5nQ2FjaGVOYW1lID0gdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkU3RhdGVDYWNoZVN0b3JhZ2VLZXkoR3JpZFNldHRpbmdUeXBlLlNhdmVkU2V0dGluZywgdGhpcy5maWVsZCk7XHJcbiAgICAgICAgICBjb25zdCBzZXR0aW5nQ2FjaGVWYWx1ZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oc2V0dGluZ0NhY2hlTmFtZSk7XHJcbiAgICAgICAgICBpZiAoc2V0dGluZ0NhY2hlVmFsdWUpIHtcclxuICAgICAgICAgICAgY29sdW1uc0NvbmZpZyA9IChKU09OLnBhcnNlKHNldHRpbmdDYWNoZVZhbHVlKSBhcyBaR3JpZFNldHRpbmdzKS5jb2x1bW5Db25maWd1cmF0aW9ucztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmdyaWRTZXR0aW5nID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLmdyaWRTZXR0aW5nLCAvLyBQcmVzZXJ2ZSBleGlzdGluZyBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgIGNvbHVtbkZpZWxkOiBkYXRhLFxyXG4gICAgICAgICAgICBncm91cDogdGhpcy56Z3JpZGJpbmRpbmcuZ3JvdXAsXHJcbiAgICAgICAgICAgIGNvbHVtbkNvbmZpZ3VyYXRpb25zOiBjb2x1bW5zQ29uZmlnXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5nZXRHcmlkQ29sdW1ucyh0aGlzLmdyaWRTZXR0aW5nKTtcclxuICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyUGFyYW1zQ29sdW1ucygpO1xyXG4gICAgICAgICAgdGhpcy5nZXRGaWx0ZXIoKTtcclxuICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyUGFyYW1zKCk7XHJcbiAgICAgICAgICB0aGlzLmdldFNvcnRpbmcoKTtcclxuICAgICAgICAgIHRoaXMuZ2V0R3JhbnRUeXBlKCk7XHJcbiAgICAgICAgICB0aGlzLnNldEhpZGRlbkNvbHVtbih0aGlzLmdyaWRTZXR0aW5nLmNvbHVtbkNvbmZpZ3VyYXRpb25zKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnBhcmFtcy5yZWZlcklkID0gdGhpcy5nZXRGaWVsZFJlZmVyZW5jZUlkKCkgfHwgdGhpcy5ncnAucmVmZXJlbmNlSWQgfHwgbnVsbDtcclxuICAgICAgICB9KVxyXG4gICAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmllbGRbJ1NraXBMb2FkUmVzb3VyY2VVUkxEYXRhJ10pIHtcclxuICAgICAgICAgIHRoaXMuZ3JpZC5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmdyaWRTdWJqZWN0Lm5leHQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5nZXREYXRhQmluZGluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCdGYWlsIHRvIGdlbmVyYXRlIGdyaWQgY29sdW1uIGZpZWxkcy4nKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5maWVsZC5Db2x1bW5GaWVsZHMpO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmdycCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0U2tpcExvYWRSZXNvdXJjZVVSTERhdGEoc2V0dGluZ1ZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmZpZWxkWydTa2lwTG9hZFJlc291cmNlVVJMRGF0YSddID0gIXNldHRpbmdWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgdGl0bGUgb2YgYSBjb2x1bW4gaW4gdGhlIGdyaWQgc2V0dGluZyBiYXNlZCBvbiBpdHMgdmFsdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sVmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIGNvbHVtbiB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbE5hbWUgLSBUaGUgbmV3IHRpdGxlIGZvciB0aGUgY29sdW1uLlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRDb2x1bW5OYW1lKGNvbFZhbHVlOiBzdHJpbmcsIGNvbE5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgLy8gRmluZCB0aGUgY29sdW1uIHdpdGggdGhlIG1hdGNoaW5nIGNvbFZhbHVlLlxyXG4gICAgY29uc3QgY29sdW1uVG9VcGRhdGUgPSB0aGlzLmdyaWRTZXR0aW5nLmNvbHVtbnMuZmluZChmaWVsZCA9PiBmaWVsZC5WYWx1ZSA9PT0gY29sVmFsdWUpO1xyXG5cclxuICAgIC8vIElmIHRoZSBjb2x1bW4gaXMgZm91bmQsIHVwZGF0ZSBpdHMgdGl0bGUgcHJvcGVydHkgd2l0aCBjb2xOYW1lLlxyXG4gICAgaWYgKGNvbHVtblRvVXBkYXRlKSB7XHJcbiAgICAgIGNvbHVtblRvVXBkYXRlLnRpdGxlID0gY29sTmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgdmlzaWJpbGl0eSBvZiBhIGNvbHVtbiBpbiB0aGUgZ3JpZCBiYXNlZCBvbiBpdHMgdmFsdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sVmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIGNvbHVtbiB0byBzZXQgdmlzaWJpbGl0eSBmb3IuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBpc1Zpc2libGUgLSBXaGV0aGVyIHRoZSBjb2x1bW4gc2hvdWxkIGJlIHZpc2libGUgKHRydWUpIG9yIGhpZGRlbiAoZmFsc2UpLlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRDb2x1bW5WaXNpYmxlKGNvbFZhbHVlOiBzdHJpbmcsIGlzVmlzaWJsZTogYm9vbGVhbikge1xyXG4gICAgLy8gRmluZCB0aGUgY29sdW1uIHdpdGggdGhlIG1hdGNoaW5nIGNvbFZhbHVlLlxyXG4gICAgY29uc3QgY29sdW1uVG9VcGRhdGUgPSB0aGlzLmdyaWRTZXR0aW5nLmNvbHVtbnMuZmluZChmaWVsZCA9PiBmaWVsZC5WYWx1ZSA9PT0gY29sVmFsdWUpO1xyXG5cclxuICAgIC8vIElmIHRoZSBjb2x1bW4gaXMgZm91bmQsIHVwZGF0ZSBpdHMgJ2hpZGRlbicgcHJvcGVydHkgYmFzZWQgb24gJ2lzVmlzaWJsZScuXHJcbiAgICBpZiAoY29sdW1uVG9VcGRhdGUpIHtcclxuICAgICAgY29sdW1uVG9VcGRhdGUuaGlkZGVuID0gIWlzVmlzaWJsZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGZpbHRlciBwYXJhbWV0ZXJzIGZvciBjb2x1bW5zIGFuZCBzZXQgdGhlbSBpbiB0aGUgJ3BhcmFtcycgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRGaWx0ZXJQYXJhbXNDb2x1bW5zKCkge1xyXG4gICAgLy8gQ3JlYXRlIGFuIGFycmF5IHRvIHN0b3JlIGNvbHVtbiBmaWVsZHMuXHJcbiAgICBjb25zdCBjb2xGaWVsZHM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGdyaWQgY29sdW1ucyB0byBidWlsZCBjb2x1bW4gZmllbGQgc3RyaW5ncy5cclxuICAgIHRoaXMuZ3JpZFNldHRpbmcuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgaWYgKGNvbHVtbi52YWx1ZUV4cHIpIHtcclxuICAgICAgICAvLyBJZiAndmFsdWVFeHByJyBleGlzdHMsIHVzZSBpdCBhcyBhbiBhbGlhcyBmb3IgdGhlIGZpZWxkLlxyXG4gICAgICAgIGNvbEZpZWxkcy5wdXNoKGNvbHVtbi52YWx1ZUV4cHIgKyBcIiBhcyBcIiArIGNvbHVtbi5maWVsZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29sRmllbGRzLnB1c2goY29sdW1uLmZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgJ0lkJyBpcyBpbiB0aGUgY29sdW1uIGZpZWxkczsgaWYgbm90LCBhZGQgaXQuXHJcbiAgICBpZiAoY29sRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKGNvbEZpZWxkcy5pbmRleE9mKFwiSWRcIikgPT09IC0xKSB7XHJcbiAgICAgICAgY29sRmllbGRzLnB1c2goXCJJZFwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBhbiBhcnJheSB0byB0ZW1wb3JhcmlseSBzdG9yZSB0aGUgZ2VuZXJhdGVkIGNvbHVtbiBmaWVsZHMuXHJcbiAgICBjb25zdCB0bXBHcmlkQ29sdW1uOiBhbnlbXSA9IFtdO1xyXG4gICAgdG1wR3JpZENvbHVtbi5wdXNoKGNvbEZpZWxkcy5qb2luKFwiLFwiKSk7XHJcblxyXG4gICAgLy8gSWYgdGhlcmUgYXJlIGdlbmVyYXRlSGlkZGVuQ29sdW1ucyBpbiB0aGUgc2V0dGluZywgYWRkIHRoZW0gdG8gdGhlIGFycmF5LlxyXG4gICAgaWYgKHRoaXMuZ3JpZFNldHRpbmcuZ2VuZXJhdGVIaWRkZW5Db2x1bW5zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRtcEdyaWRDb2x1bW4ucHVzaCh0aGlzLmdyaWRTZXR0aW5nLmdlbmVyYXRlSGlkZGVuQ29sdW1ucy5qb2luKFwiLFwiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2V0IHRoZSAncGFyYW1zLmNvbHVtbnMnIHByb3BlcnR5IHdpdGggdGhlIGNvbmNhdGVuYXRlZCBjb2x1bW4gZmllbGRzLlxyXG4gICAgdGhpcy5wYXJhbXMuY29sdW1ucyA9IHRtcEdyaWRDb2x1bW4uam9pbihcIixcIik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlICdwYXJhbXMuZmlsdGVycycgcHJvcGVydHkgYmFzZWQgb24gdGhlICdmaWVsZC5GaWx0ZXJzJyBwcm9wZXJ0eS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0RmlsdGVyKCkge1xyXG4gICAgaWYgKHRoaXMucGFyYW1zLmZpbHRlcnMgJiYgdGhpcy5maWVsZC5GaWx0ZXJzKSB7XHJcbiAgICAgIC8vIENvbWJpbmUgJ3BhcmFtcy5maWx0ZXJzJyBhbmQgJ2ZpZWxkLkZpbHRlcnMnIHVzaW5nICcmJicgaWYgYm90aCBleGlzdC4gXHJcbiAgICAgIHRoaXMucGFyYW1zLmZpbHRlcnMgPSBgJHt0aGlzLnBhcmFtcy5maWx0ZXJzfSAmJiAke3RoaXMuZmllbGQuRmlsdGVyc31gO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoIXRoaXMucGFyYW1zLmZpbHRlcnMgJiYgdGhpcy5maWVsZC5GaWx0ZXJzKSB7XHJcbiAgICAgIC8vIFVzZSAnZmllbGQuRmlsdGVycycgZGlyZWN0bHkgaWYgJ3BhcmFtcy5maWx0ZXJzJyBkb2Vzbid0IGV4aXN0LlxyXG4gICAgICB0aGlzLnBhcmFtcy5maWx0ZXJzID0gdGhpcy5maWVsZC5GaWx0ZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmICdmaWVsZC5GaWx0ZXJzJyBjb250YWlucyByZWZlcmVuY2VzIHRvICdncm91cC4nIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBhY3R1YWwgdmFsdWVzLlxyXG4gICAgaWYgKHRoaXMuZmllbGQuRmlsdGVycyAmJiB0aGlzLmZpZWxkLkZpbHRlcnMuc3BsaXQoXCIgXCIpLnNvbWUoKGVsZW1lbnQpID0+IGVsZW1lbnQudHJpbSgpLnN0YXJ0c1dpdGgoXCJncm91cC5cIikpKSB7XHJcbiAgICAgIGNvbnN0IGZpbHRlcktleVZhbFBhaXJzID0gdGhpcy5maWVsZC5GaWx0ZXJzLnNwbGl0KFwiIFwiKTtcclxuICAgICAgY29uc3QgZ3JwVmFsdWVzID0gZmlsdGVyS2V5VmFsUGFpcnMuZmlsdGVyKChlbGVtZW50KSA9PiBlbGVtZW50LnRyaW0oKS5zdGFydHNXaXRoKFwiZ3JvdXAuXCIpKTtcclxuXHJcbiAgICAgIGdycFZhbHVlcy5mb3JFYWNoKCh2YWwpID0+IHtcclxuICAgICAgICBjb25zdCBhY3R1YWxWYWwgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodmFsLCB0aGlzLmdycCk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuZmlsdGVycyA9IHRoaXMucGFyYW1zLmZpbHRlcnMucmVwbGFjZSh2YWwsIGFjdHVhbFZhbCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBmaWx0ZXIgcGFyYW1ldGVycyBpbiB0aGUgJ3BhcmFtcy5maWx0ZXJQYXJhbXMnIHByb3BlcnR5IGJhc2VkIG9uICdmaWVsZFsnRmlsdGVyUGFyYW1zJ10nLiBmaWx0ZXJQYXJhbXMgPT09IHVzZWQgZm9yIHRoZSBpbnB1dCBpbiB0aGUgY29sdW1uIGZpbHRlciBhdCB0aGUgVUkuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cclxuICBwcml2YXRlIGdldEZpbHRlclBhcmFtcygpIHtcclxuICAgIGNvbnN0IGZpbHRlclBhcmFtcyA9IHRoaXMuZmllbGRbJ0ZpbHRlclBhcmFtcyddO1xyXG4gICAgLy8gQ2hlY2sgaWYgJ2ZpbHRlclBhcmFtcycgaXMgZGVmaW5lZCBhbmQgc3RhcnRzIHdpdGggXCJncm91cC5cIi5cclxuICAgIGlmIChmaWx0ZXJQYXJhbXMgJiYgZmlsdGVyUGFyYW1zLnN0YXJ0c1dpdGgoXCJncm91cC5cIikpIHtcclxuICAgICAgdGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGZpbHRlclBhcmFtcywgdGhpcy5ncnApO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIElmICdmaWx0ZXJQYXJhbXMnIGlzIG5vdCBkZWZpbmVkIG9yIGRvZXNuJ3Qgc3RhcnQgd2l0aCBcImdyb3VwLlwiLCB1c2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcyA9IGZpbHRlclBhcmFtcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplIGZpbHRlciBwYXJhbWV0ZXJzIGlmIHVuZGVmaW5lZC5cclxuICAgIGlmICghdGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBjb2x1bW4gZmlsdGVycyBpbiB0aGUgZ3JpZCBzdGF0ZSBhbmQgYXBwZW5kIHRvIGZpbHRlcnBhcmFtIFxyXG4gICAgaWYgKHRoaXMuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlPy5maWx0ZXI/LmZpbHRlcnMpIHtcclxuICAgICAgdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUuZmlsdGVyPy5maWx0ZXJzPy5mb3JFYWNoKChmaWx0ZXI6IEZpbHRlckRlc2NyaXB0b3IpID0+IHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJQYXJhbSA9IHtcclxuICAgICAgICAgIGtleTogZmlsdGVyLmZpZWxkIGFzIHN0cmluZyxcclxuICAgICAgICAgIG9wczogdGhpcy5tYXBGaWx0ZXJPcGVyYXRvcihmaWx0ZXIub3BlcmF0b3IpLFxyXG4gICAgICAgICAgdmFsdWU6IGZpbHRlci52YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiBmaWx0ZXIudmFsdWUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBDaGVjayBpZiBhIGZpbHRlciBwYXJhbWV0ZXIgd2l0aCB0aGUgc2FtZSBrZXkgYWxyZWFkeSBleGlzdHMuXHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdQYXJhbSA9IHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcy5maW5kKChwYXJhbSkgPT4gcGFyYW0ua2V5ID09PSBmaWx0ZXJQYXJhbS5rZXkpO1xyXG4gICAgICAgIGlmIChleGlzdGluZ1BhcmFtKSB7XHJcbiAgICAgICAgICAvLyBJZiBhIGZpbHRlciBwYXJhbWV0ZXIgd2l0aCB0aGUgc2FtZSBrZXkgZXhpc3RzLCB1cGRhdGUgaXRzIHZhbHVlLlxyXG4gICAgICAgICAgZXhpc3RpbmdQYXJhbS52YWx1ZSA9IGZpbHRlclBhcmFtLnZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBJZiBubyBmaWx0ZXIgcGFyYW1ldGVyIHdpdGggdGhlIHNhbWUga2V5LCBhZGQgaXQgdG8gdGhlIGZpbHRlciBwYXJhbWV0ZXJzLlxyXG4gICAgICAgICAgdGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zLnB1c2goZmlsdGVyUGFyYW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIHNvcnRpbmcgb3JkZXIgaW4gdGhlICdwYXJhbXMuc29ydE9yZGVyJyBwcm9wZXJ0eSBiYXNlZCBvbiAnZmllbGQuU29ydE9yZGVyJy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0U29ydGluZygpIHtcclxuICAgIGNvbnN0IHNvcnRPcmRlciA9IHRoaXMuZmllbGQuU29ydE9yZGVyO1xyXG5cclxuICAgIC8vIENoZWNrIGlmICdzb3J0T3JkZXInIGlzIGRlZmluZWQgYW5kIHN0YXJ0cyB3aXRoIFwiZ3JvdXAuXCIuXHJcbiAgICBpZiAoc29ydE9yZGVyICYmIHNvcnRPcmRlci5zdGFydHNXaXRoKFwiZ3JvdXAuXCIpKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLnNvcnRPcmRlciA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShzb3J0T3JkZXIsIHRoaXMuZ3JwKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBJZiAnc29ydE9yZGVyJyBpcyBub3QgZGVmaW5lZCBvciBkb2Vzbid0IHN0YXJ0IHdpdGggXCJncm91cC5cIiwgdXNlIGl0IGRpcmVjdGx5LlxyXG4gICAgICB0aGlzLnBhcmFtcy5zb3J0T3JkZXIgPSBzb3J0T3JkZXI7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEluaXRpYWxpemUgc29ydCBwYXJhbWV0ZXJzIGlmIHVuZGVmaW5lZC5cclxuICAgIGlmICghdGhpcy5wYXJhbXMuc29ydE9yZGVycykge1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3J0T3JkZXJzID0gW107XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucGFyYW1zLnNvcnRDb2x1bW5OYW1lcykge1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3J0Q29sdW1uTmFtZXMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUuc29ydCkge1xyXG4gICAgICB0aGlzLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5zb3J0LmZvckVhY2goKGRlc2NyaXB0b3IpID0+IHtcclxuICAgICAgICBpZiAoZGVzY3JpcHRvci5kaXIpIHtcclxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5ncmlkU2V0dGluZy5jb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLmZpZWxkID09PSBkZXNjcmlwdG9yLmZpZWxkKTtcclxuICAgICAgICAgIGNvbnN0IHNvcnRDb2x1bW5OYW1lID0gZmllbGQudmFsdWVFeHByICE9PSB1bmRlZmluZWQgPyBmaWVsZC52YWx1ZUV4cHIgOiBkZXNjcmlwdG9yLmZpZWxkO1xyXG5cclxuICAgICAgICAgIC8vIENoZWNrIGlmIGEgc29ydCBjb2x1bW4gd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLlxyXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdTb3J0Q29sdW1uSW5kZXggPSB0aGlzLnBhcmFtcy5zb3J0Q29sdW1uTmFtZXMuZmluZEluZGV4KChuYW1lKSA9PiBuYW1lID09PSBzb3J0Q29sdW1uTmFtZSk7XHJcblxyXG4gICAgICAgICAgaWYgKGV4aXN0aW5nU29ydENvbHVtbkluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAvLyBJZiBhIHNvcnQgY29sdW1uIHdpdGggdGhlIHNhbWUgbmFtZSBleGlzdHMsIHVwZGF0ZSBpdHMgc29ydCBvcmRlci5cclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMuc29ydE9yZGVyc1tleGlzdGluZ1NvcnRDb2x1bW5JbmRleF0gPSBkZXNjcmlwdG9yLmRpcjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIElmIG5vIHNvcnQgY29sdW1uIHdpdGggdGhlIHNhbWUgbmFtZSwgYWRkIGl0IHRvIHRoZSBzb3J0IGNvbHVtbnMgYW5kIHNvcnQgb3JkZXJzLlxyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5zb3J0Q29sdW1uTmFtZXMucHVzaChzb3J0Q29sdW1uTmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnNvcnRPcmRlcnMucHVzaChkZXNjcmlwdG9yLmRpcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgZ3JhbnQgdHlwZSBpbiB0aGUgJ3BhcmFtcy5ncmFudFR5cGUnIHByb3BlcnR5IGJhc2VkIG9uICdmaWVsZC5HcmFudFR5cGUnLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRHcmFudFR5cGUoKSB7XHJcbiAgICBjb25zdCBncmFudFR5cGUgPSB0aGlzLmZpZWxkLkdyYW50VHlwZTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiAnZ3JhbnRUeXBlJyBpcyBkZWZpbmVkLlxyXG4gICAgaWYgKGdyYW50VHlwZSkge1xyXG4gICAgICB0aGlzLnBhcmFtcy5ncmFudFR5cGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoZ3JhbnRUeXBlLnRvU3RyaW5nKCksIHRoaXMuZ3JwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgJ2hpZGRlbicgcHJvcGVydHkgZm9yIGNvbHVtbnMgaW4gJ2dyaWRTZXR0aW5nJyBiYXNlZCBvbiAnY29sdW1uQ29uZmlncycuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1pHcmlkQ29sdW1uQ29uZmlnc1tdfSBjb2x1bW5Db25maWdzIC0gVGhlIGNvbHVtbiBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0SGlkZGVuQ29sdW1uKGNvbHVtbkNvbmZpZ3M6IFpHcmlkQ29sdW1uQ29uZmlnc1tdKSB7XHJcbiAgICBpZiAodGhpcy5ncmlkU2V0dGluZy5jb2x1bW5zICYmIGNvbHVtbkNvbmZpZ3MpIHtcclxuICAgICAgLy8gRmlsdGVyIG91dCBoaWRkZW4gY29sdW1ucyBpbiAnY29sdW1uQ29uZmlncycuXHJcbiAgICAgIGNvbnN0IGhpZGRlbkNvbHVtbnMgPSBjb2x1bW5Db25maWdzLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmhpZGRlbiA9PT0gdHJ1ZSk7XHJcblxyXG4gICAgICAvLyBJdGVyYXRlIHRocm91Z2ggaGlkZGVuIGNvbHVtbnMgYW5kIHVwZGF0ZSAnZ3JpZFNldHRpbmcnIGFjY29yZGluZ2x5LlxyXG4gICAgICBoaWRkZW5Db2x1bW5zLmZvckVhY2goaGlkZGVuQ29sdW1uID0+IHtcclxuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdyaWRTZXR0aW5nLmNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGhpZGRlbkNvbHVtbi5maWVsZCk7XHJcbiAgICAgICAgaWYgKGNvbHVtbikge1xyXG4gICAgICAgICAgY29sdW1uLmhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIGRhdGEgZm9yIGRhdGEgYmluZGluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2tpcFVzZUNhY2hlIC0gV2hldGhlciB0byBza2lwIHVzaW5nIGNhY2hlIGZvciBkYXRhIHJldHJpZXZhbC5cclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0RGF0YUJpbmRpbmcoc2tpcFVzZUNhY2hlPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5ncmlkLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgY2FjaGVJbmZvID0gdGhpcy56Z3JpZGJpbmRpbmcuZGF0YS5DYWNoZUluZm87XHJcblxyXG4gICAgaWYgKCFjYWNoZUluZm8gfHwgc2tpcFVzZUNhY2hlKSB7XHJcbiAgICAgIHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjYWNoZUluZm8pIHtcclxuICAgICAgY29uc3QgZ3JpZFN0YXRlTG9naWMgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTdGF0ZUxvZ2ljKHRoaXMuZmllbGQpO1xyXG4gICAgICBpZiAoZ3JpZFN0YXRlTG9naWMgPT09IEdyaWRTdGF0ZUxvZ2ljVHlwZS5TZXR0aW5nT25seSkge1xyXG4gICAgICAgIHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuY2hhbmdlRXZlbnQucGFnZUNoYW5nZWQgJiYgIXRoaXMuY2hhbmdlRXZlbnQuc29ydENoYW5nZWQgJiYgIXRoaXMuY2hhbmdlRXZlbnQuZmlsdGVyQ2hhbmdlZCkge1xyXG4gICAgICBjb25zdCBjdXJyZW50RGF0YUNhY2hlSW5mbyA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2VuZXJhdGVDYWNoZUluZm8odGhpcy56Z3JpZGJpbmRpbmcuZGF0YSk7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMub2ZmbGluZURhdGFiYXNlU2VydmljZS5nZXRJdGVtQnlLZXkoY3VycmVudERhdGFDYWNoZUluZm8sIGN1cnJlbnREYXRhQ2FjaGVJbmZvLm9mZmxpbmVEYXRhYmFzZUtleSk7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUdldERhdGFCaW5kaW5nQ29tcGxldGUocmVzdWx0LmRhdGEsIHRydWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIGdyaWQgZGF0YS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0R3JpZERhdGEoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbkFwaVBvc3RVcmwpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ0dyaWQgcGFnaW5hdGlvbiBBUEkgVVJMIGlzIHVuZGVmaW5lZC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHN0YXRlU2tpcCA9IHRoaXMuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlID8gdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUuc2tpcCA6IHRoaXMuc3RhdGUuc2tpcDtcclxuICAgICAgY29uc3Qgc3RhdGVUYWtlID0gdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUgPyB0aGlzLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZS50YWtlIDogdGhpcy5zdGF0ZS50YWtlO1xyXG5cclxuICAgICAgdGhpcy5wYXJhbXMucGFnZU5vID0gdGhpcy5nZXRQYWdlTm8oc3RhdGVTa2lwLCBzdGF0ZVRha2UpO1xyXG4gICAgICB0aGlzLnBhcmFtcy5wYWdlU2l6ZSA9IHN0YXRlVGFrZTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZpZWxkLkV4dGVybmFsUGFnaW5hdGlvbikge1xyXG4gICAgICAgIC8vIEZvciBQT1NUIG1ldGhvZCBQYWdlIFdlYkFQSSBcclxuICAgICAgICB0aGlzLndlYmFwaVNlcnZpY2VcclxuICAgICAgICAgIC5wb3N0QXBpKHRoaXMucGFnaW5hdGlvbkFwaVBvc3RVcmwsIHRoaXMucGFyYW1zLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCB0cnVlKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXNwKSA9PiB0aGlzLmhhbmRsZUdldERhdGFCaW5kaW5nQ29tcGxldGUocmVzcCksXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyhcIkVycm9yIG9jY3VyIGluIGxvYWRpbmcgdGhlIGRhdGFcIiwgXCJtaWRkbGVcIiwgZmFsc2UsIDE1MDAsIFwiZGFuZ2VyXCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZ3JpZC5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIEZvciBHRVQgbWV0aG9kXHJcbiAgICAgICAgdGhpcy53ZWJhcGlTZXJ2aWNlXHJcbiAgICAgICAgICAuZ2V0QXBpKHRoaXMucmVzb3VyY2VVUkwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIHRydWUpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHRvdGFsQ291bnQgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3AuZGF0YVNldCkge1xyXG4gICAgICAgICAgICAgIGRhdGEgPSByZXNwLmRhdGFTZXQ7XHJcbiAgICAgICAgICAgICAgdG90YWxDb3VudCA9IHJlc3AudG90YWxDb3VudDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBkYXRhID0gcmVzcDtcclxuICAgICAgICAgICAgICB0b3RhbENvdW50ID0gcmVzcC5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlR2V0RGF0YUJpbmRpbmdDb21wbGV0ZSh7IGRhdGFTZXQ6IGRhdGEsIHRvdGFsQ291bnQ6IHRvdGFsQ291bnQgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IGRhdGFTZXQgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoXHJcbiAgICAgICAgdGhpcy5maWVsZC5EYXRhU291cmNlLFxyXG4gICAgICAgIHRoaXMuZ3JwXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmRhdGEgPSBkYXRhU2V0O1xyXG4gICAgICB0aGlzLmdyaWQubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmdyaWRTdWJqZWN0Lm5leHQodGhpcyk7XHJcbiAgICAgIHRoaXMubm90aWZ5RGF0YUNoYW5nZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVHZXREYXRhQmluZGluZ0NvbXBsZXRlKGRhdGE6IGFueSwgc2tpcENhY2hlRGF0YT86IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuYWdncmVnYXRlSGFuZGxpbmcoZGF0YS5kYXRhU2V0KTtcclxuICAgIHRoaXMuZ3JpZC5kYXRhID0geyBkYXRhOiBkYXRhLmRhdGFTZXQsIHRvdGFsOiBkYXRhLnRvdGFsQ291bnQgfTtcclxuICAgIGlmICghc2tpcENhY2hlRGF0YSkge1xyXG4gICAgICBjb25zdCBncmlkU3RhdGVMb2dpYyA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFN0YXRlTG9naWModGhpcy5maWVsZCk7XHJcbiAgICAgIGlmIChncmlkU3RhdGVMb2dpYyA9PT0gR3JpZFN0YXRlTG9naWNUeXBlLkRhdGFDYWNoZU9ubHkgfHwgZ3JpZFN0YXRlTG9naWMgPT09IEdyaWRTdGF0ZUxvZ2ljVHlwZS5TZXR0aW5nQW5kRGF0YUNhY2hlKSB7XHJcbiAgICAgICAgdGhpcy5jYWNoZUdyaWREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVDYWNoZURhdGFDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZ3JpZC5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmFmdGVyRGF0YUJpbmRlZChkYXRhKTtcclxuICAgIHRoaXMuZ3JpZFN1YmplY3QubmV4dCh0aGlzKTtcclxuICAgIHRoaXMubm90aWZ5RGF0YUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldENoYW5nZUV2ZW50RmxhZygpIHtcclxuICAgIHRoaXMuY2hhbmdlRXZlbnQgPSB7XHJcbiAgICAgIHBhZ2VDaGFuZ2VkOiBmYWxzZSxcclxuICAgICAgZmlsdGVyQ2hhbmdlZDogZmFsc2UsXHJcbiAgICAgIHNvcnRDaGFuZ2VkOiBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjYWNoZUdyaWREYXRhKCkge1xyXG4gICAgY29uc3QgbWUgPSB0aGlzO1xyXG4gICAgY29uc3QgZ3JpZFN0YXRlID0gdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGU7XHJcbiAgICBjb25zdCBncmlkRGF0YSA9IHRoaXMuZ3JpZD8uZGF0YSB8fCBudWxsO1xyXG5cclxuICAgIGlmICghZ3JpZERhdGFbJ2RhdGEnXSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2FjaGVJbmZvID0gdGhpcy56Z3JpZGJpbmRpbmcuZGF0YS5DYWNoZUluZm87XHJcblxyXG4gICAgaWYgKGNhY2hlSW5mbyAmJiAhY2FjaGVJbmZvLkRpc2FibGVDYWNoZURhdGEpIHtcclxuICAgICAgLy8ga2VlcCBvcmlnaW5hbERhdGEgXHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YUNhY2hlSW5mbyA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2VuZXJhdGVDYWNoZUluZm8odGhpcy56Z3JpZGJpbmRpbmcuZGF0YSk7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMub2ZmbGluZURhdGFiYXNlU2VydmljZS5nZXRJdGVtQnlLZXkob3JpZ2luYWxEYXRhQ2FjaGVJbmZvLCBvcmlnaW5hbERhdGFDYWNoZUluZm8ub2ZmbGluZURhdGFiYXNlS2V5KTtcclxuICAgICAgbGV0IHVwZGF0ZWREYXRhID0gWy4uLmdyaWREYXRhWydkYXRhJ11dO1xyXG4gICAgICBsZXQgc2tpcExpc3QgPSBbZ3JpZFN0YXRlLnNraXBdO1xyXG4gICAgICBsZXQgY3VycmVudEdyaWRTa2lwID0gZ3JpZFN0YXRlLnNraXA7XHJcblxyXG4gICAgICBpZiAob3JpZ2luYWxEYXRhQ2FjaGVJbmZvLmFwcGVuZFBhZ2luYXRpb25EYXRhKSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiAhcmVzdWx0LnNraXBMaXN0LmluY2x1ZGVzKGN1cnJlbnRHcmlkU2tpcCkpIHtcclxuICAgICAgICAgIHVwZGF0ZWREYXRhID0gWy4uLnJlc3VsdC5kYXRhLmRhdGFTZXQsIC4uLmdyaWREYXRhWydkYXRhJ11dO1xyXG4gICAgICAgICAgc2tpcExpc3QgPSBbLi4ucmVzdWx0LnNraXBMaXN0LCAuLi5za2lwTGlzdF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjYWNoZUdyaWREYXRhID0ge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGRhdGFTZXQ6IHVwZGF0ZWREYXRhLFxyXG4gICAgICAgICAgdG90YWxDb3VudDogZ3JpZERhdGFbJ3RvdGFsJ11cclxuICAgICAgICB9LFxyXG4gICAgICAgIGdyaWRTdGF0ZTogZ3JpZFN0YXRlLFxyXG4gICAgICAgIHNraXBMaXN0OiBza2lwTGlzdCxcclxuICAgICAgICBjYWNoZUR1cmF0aW9uOiBjYWNoZUluZm8uQ2FjaGVEdXJhdGlvblxyXG4gICAgICB9XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLm9mZmxpbmVEYXRhYmFzZVNlcnZpY2UuYWRkSXRlbShvcmlnaW5hbERhdGFDYWNoZUluZm8sIGNhY2hlR3JpZERhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9cIkZlYXR1cmVEZXZlbG9wbWVudHxDb21wZXRlbmN5XCIgXHJcbiAgcHJpdmF0ZSBhc3luYyBzdWJzY3JpYmVDYWNoZURhdGFDaGFuZ2VzKCkge1xyXG4gICAgY29uc3QgY2FjaGVJbmZvID0gdGhpcy56Z3JpZGJpbmRpbmcuZGF0YS5DYWNoZUluZm87XHJcblxyXG4gICAgaWYgKGNhY2hlSW5mbyAmJiAhY2FjaGVJbmZvLkRpc2FibGVDYWNoZURhdGEpIHtcclxuICAgICAgLy8gY2Fubm90IHVzZSBtYWluIHNlcnZpY2UgaGVyZS4gd2lsbCBnZXQgY2lyY3VsYXIgZXJyb3Igd2hlbiBidWlsZCBsaWJcclxuICAgICAgLy90aGlzLm1haW5TZXJ2aWNlLmpvaW5Qcm9qZWN0U2lnbmFsUigpO1xyXG5cclxuICAgICAgY29uc3QgY2FsbEJhY2tGdW5jdGlvbiA9IGAke2NhY2hlSW5mby5OYW1lfV9oYW5kbGVSZWNlaXZlZE1lc3NhZ2VgO1xyXG5cclxuICAgICAgLy8gY3JlYXRlIGFuZCBiaW5kIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJhY2sgZm9yIHRoZSBncmlkIGluIHRoZSBncm91cCB0cmlnZ2VyIGJ5IHNpZ25hbFIuXHJcbiAgICAgIGlmICghdGhpcy5ncnAuc2lnbmFsUkNhbGxiYWNrSGFuZGxlcikge1xyXG4gICAgICAgIHRoaXMuZ3JwLnNpZ25hbFJDYWxsYmFja0hhbmRsZXIgPSB7fTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdycC5zaWduYWxSQ2FsbGJhY2tIYW5kbGVyW2NhbGxCYWNrRnVuY3Rpb25dID0gdGhpcy5oYW5kbGVSZWNlaXZlZE1lc3NhZ2UuYmluZCh0aGlzKTtcclxuXHJcbiAgICAgIGNvbnN0IGdlbmVyYXRlZENhY2hlSW5mbyA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2VuZXJhdGVDYWNoZUluZm8odGhpcy56Z3JpZGJpbmRpbmcuZGF0YSk7XHJcbiAgICAgIGlmIChnZW5lcmF0ZWRDYWNoZUluZm8uZGVmaW5lZERhdGFiYXNlICYmIGdlbmVyYXRlZENhY2hlSW5mby5kZWZpbmVkVGFibGUpIHtcclxuICAgICAgICBnZW5lcmF0ZWRDYWNoZUluZm8uZGVmaW5lZERhdGFiYXNlLmZvckVhY2goZGIgPT4ge1xyXG4gICAgICAgICAgZ2VuZXJhdGVkQ2FjaGVJbmZvLmRlZmluZWRUYWJsZS5mb3JFYWNoKHRhYmxlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZXZlbnROYW1lID0gYCR7ZGJ9fCR7dGFibGV9YDtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYExpc3RlbmluZyB0byBldmVudCBuYW1lOiAke2V2ZW50TmFtZX1gKTtcclxuICAgICAgICAgICAgdGhpcy5zaWduYWxyU2VydmljZS5zdWJzY3JpYmVUb0V2ZW50KHRoaXMuZ3JwLCBgJHtldmVudE5hbWV9YCwgYGdyb3VwLnNpZ25hbFJDYWxsYmFja0hhbmRsZXIuJHtjYWxsQmFja0Z1bmN0aW9ufWApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGhhbmRsZVJlY2VpdmVkTWVzc2FnZShncm91cDogWkdyb3VwLCByZXN1bHQ6IGFueSwgZXZlbnROYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnNvbGUubG9nKGBUaGUgU2lnbmFsciB0cmlnZ2VyIGhhcyBiZWVuIGRldGVjdGVkLiBOb3csIHByb2NlZWQgdG8gdXBkYXRlIHRoZSBjYWNoZSBhbmQgZ3JpZCBkYXRhLmApO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlZFJlc3VsdCA9IEpTT04ucGFyc2UocmVzdWx0KTtcclxuICAgIGNvbnN0IGFjdGlvblR5cGUgPSByZXNwb25zZWRSZXN1bHQuQWN0aW9uO1xyXG4gICAgY29uc3QgcmVzcG9uc2VkUmVzdWx0SWQgPSByZXNwb25zZWRSZXN1bHRbJ0lkJ107XHJcbiAgICBjb25zdCB0ZW1wUGFyYW1zID0gWkNvbXBvbmVudEhlbHBlci5kZWVwQ2xvbmUodGhpcy5wYXJhbXMpO1xyXG4gICAgY29uc3QgY3VycmVudERhdGFDYWNoZUluZm8gPSB0aGlzLmdyaWRTZXJ2aWNlLmdlbmVyYXRlQ2FjaGVJbmZvKHRoaXMuemdyaWRiaW5kaW5nLmRhdGEpO1xyXG4gICAgY29uc3QgY3VycmVudERhdGEgPSBhd2FpdCB0aGlzLm9mZmxpbmVEYXRhYmFzZVNlcnZpY2UuZ2V0SXRlbUJ5S2V5KGN1cnJlbnREYXRhQ2FjaGVJbmZvLCBjdXJyZW50RGF0YUNhY2hlSW5mby5vZmZsaW5lRGF0YWJhc2VLZXkpO1xyXG5cclxuICAgIGlmIChjdXJyZW50RGF0YSkge1xyXG4gICAgICB0ZW1wUGFyYW1zLmZpbHRlcnMgPSBgSWQ9JHtyZXNwb25zZWRSZXN1bHRJZH1gO1xyXG5cclxuICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFjdGlvblR5cGUuRGVsZXRlKSB7XHJcbiAgICAgICAgY3VycmVudERhdGEuZGF0YS5kYXRhU2V0ID0gY3VycmVudERhdGEuZGF0YS5kYXRhU2V0LmZpbHRlcihpdGVtID0+IGl0ZW0uSWQgIT09IHBhcnNlSW50KHJlc3BvbnNlZFJlc3VsdElkKSk7XHJcblxyXG4gICAgICAgIHRoaXMuaGFuZGxlR2V0RGF0YUJpbmRpbmdDb21wbGV0ZShjdXJyZW50RGF0YS5kYXRhLCB0cnVlKTtcclxuICAgICAgICBhd2FpdCB0aGlzLm9mZmxpbmVEYXRhYmFzZVNlcnZpY2UudXBkYXRlSXRlbShjdXJyZW50RGF0YUNhY2hlSW5mbywgY3VycmVudERhdGEpO1xyXG5cclxuICAgICAgICB0aGlzLmhhbmRsZUdldERhdGFCaW5kaW5nQ29tcGxldGUoY3VycmVudERhdGEuZGF0YSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKGBJdGVtIHVwZGF0ZWQ6ICR7Y3VycmVudERhdGF9YCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy53ZWJhcGlTZXJ2aWNlLnBvc3RBcGkodGhpcy5wYWdpbmF0aW9uQXBpUG9zdFVybCwgdGVtcFBhcmFtcywgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgdHJ1ZSkuc3Vic2NyaWJlKGFzeW5jIHJlc3AgPT4ge1xyXG5cclxuICAgICAgICAgIGNvbnN0IGRhdGFiYXNlUmVjb3JkID0gcmVzcC5kYXRhU2V0WzBdO1xyXG5cclxuICAgICAgICAgIGlmIChkYXRhYmFzZVJlY29yZCkge1xyXG4gICAgICAgICAgICBpZiAoYWN0aW9uVHlwZSA9PT0gQWN0aW9uVHlwZS5VcGRhdGUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbmRleFRvVXBkYXRlID0gY3VycmVudERhdGEuZGF0YS5kYXRhU2V0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0uSWQgPT09IGRhdGFiYXNlUmVjb3JkLklkKTtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXhUb1VwZGF0ZSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCB0aGUgdXBkYXRlZCBuYW1lXHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkSXRlbSA9IHsgLi4uY3VycmVudERhdGEuZGF0YS5kYXRhU2V0W2luZGV4VG9VcGRhdGVdLCAuLi5kYXRhYmFzZVJlY29yZCB9O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIG9sZCBpdGVtIHdpdGggdGhlIHVwZGF0ZWQgb25lXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0YS5kYXRhLmRhdGFTZXRbaW5kZXhUb1VwZGF0ZV0gPSB1cGRhdGVkSXRlbTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUdldERhdGFCaW5kaW5nQ29tcGxldGUoY3VycmVudERhdGEuZGF0YSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vZmZsaW5lRGF0YWJhc2VTZXJ2aWNlLnVwZGF0ZUl0ZW0oY3VycmVudERhdGFDYWNoZUluZm8sIGN1cnJlbnREYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgSXRlbSB1cGRhdGVkOiAke2N1cnJlbnREYXRhfWApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkl0ZW0gbm90IGZvdW5kIHdpdGggSUQ6XCIsIGRhdGFiYXNlUmVjb3JkLklkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uVHlwZSA9PT0gQWN0aW9uVHlwZS5BZGQgJiYgY3VycmVudERhdGEuZ3JpZFN0YXRlLnNraXAgPCAyMCkge1xyXG4gICAgICAgICAgICAgIGN1cnJlbnREYXRhLmRhdGEuZGF0YVNldC51bnNoaWZ0KGRhdGFiYXNlUmVjb3JkKTtcclxuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUdldERhdGFCaW5kaW5nQ29tcGxldGUoY3VycmVudERhdGEuZGF0YSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vZmZsaW5lRGF0YWJhc2VTZXJ2aWNlLnVwZGF0ZUl0ZW0oY3VycmVudERhdGFDYWNoZUluZm8sIGN1cnJlbnREYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVHZXREYXRhQmluZGluZ0NvbXBsZXRlKGN1cnJlbnREYXRhLmRhdGEsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgSXRlbSB1cGRhdGVkOiAke2N1cnJlbnREYXRhfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVW5hYmxlIHRvIGdldCBkYXRhLCByZWZyZXNoIHRoZSB3aG9sZSBncmlkIGRhdGEgZnJvbSBBUElcclxuICAgICAgICAgICAgdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gVW5hYmxlIHRvIGdldCBmcm9tIGluZGV4ZWREQiBzdHJhaWdodCBnZXQgZnJvbSBBUElcclxuICAgICAgdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZnRlckRhdGFCaW5kZWQoZGF0YSkge1xyXG4gICAgLy8gYWxsb3cgdG8gY2FsbCBiYWNrIHByb2plY3QgcGFnZSBhZnRlciBkYXRhIGJpbmRlZC5cclxuICAgIGxldCBiaW5kZWRWYWx1ZSA9IHRoaXMuemdyaWRiaW5kaW5nLmRhdGFbJ0FmdGVyRGF0YUJpbmRlZCddO1xyXG4gICAgaWYgKGJpbmRlZFZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IG1lID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcyk7XHJcbiAgICAgIGxldCBjYWxsRnVuYztcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gYmluZGVkVmFsdWUubWF0Y2goL1xcYlxcKC4qL2dpKTtcclxuICAgICAgICBpZiAocGFyYW1zKSB7XHJcbiAgICAgICAgICBiaW5kZWRWYWx1ZSA9IGJpbmRlZFZhbHVlLnJlcGxhY2UocGFyYW1zWzBdLCBcIlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmluZGVkVmFsdWUgPSBiaW5kZWRWYWx1ZS5yZXBsYWNlKCdtb2RhbEdyb3VwLicsICdncm91cC4nKTtcclxuICAgICAgICBjYWxsRnVuYyA9IGV2YWwoJ21lLnpncmlkYmluZGluZy4nICsgYmluZGVkVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiRXJyb3Igd2hlbiBnZXRHcm91cFZhbHVlOiBcIixcclxuICAgICAgICAgIGV2ZW50LnRhcmdldCxcclxuICAgICAgICAgIFwiID4gRXJyb3I6IFwiLFxyXG4gICAgICAgICAgZXJyb3JcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBjb25zdCBuZXdGdW5jID0gY2FsbEZ1bmMuYmluZChtZSk7XHJcbiAgICAgICAgbmV3RnVuYyhldmVudCwgbWUuemdyaWRiaW5kaW5nLmRhdGEsIGRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJEYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncmlkLmRhdGEgPSB7IGRhdGE6IFtdLCB0b3RhbDogMCB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIGNvbHVtbiBhZ2dyZWdhdGlvbiBmb3IgdGhlIGdpdmVuIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueVtdfSBkYXRhIC0gVGhlIGRhdGEgdG8gYWdncmVnYXRlLlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWdncmVnYXRlSGFuZGxpbmcoZGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBhZ2dyZWdhdGVDb2x1bW5zID0gdGhpcy5ncmlkU2V0dGluZy5jb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLmFnZ3JlZ2F0ZVR5cGUpO1xyXG5cclxuICAgIGFnZ3JlZ2F0ZUNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IGNvbC5maWVsZDtcclxuICAgICAgY29uc3QgYWdncmVnYXRlVHlwZSA9IGNvbC5hZ2dyZWdhdGVUeXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICBsZXQgX2FnZ3JlZ2F0ZVZhbHVlID0gbnVsbDtcclxuICAgICAgc3dpdGNoIChhZ2dyZWdhdGVUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBcInRvdGFsXCI6XHJcbiAgICAgICAgY2FzZSBcInN1bVwiOlxyXG4gICAgICAgICAgX2FnZ3JlZ2F0ZVZhbHVlID0gZGF0YS5yZWR1Y2UoKHRvdGFsLCBuZXh0KSA9PiB0b3RhbCArIG5leHRbZmllbGRdLCAwKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJhdmVyYWdlXCI6XHJcbiAgICAgICAgICBfYWdncmVnYXRlVmFsdWUgPSBkYXRhLnJlZHVjZSgodG90YWwsIG5leHQpID0+IHRvdGFsICsgbmV4dFtmaWVsZF0sIDApIC8gZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiY291bnRcIjpcclxuICAgICAgICAgIF9hZ2dyZWdhdGVWYWx1ZSA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm1heFwiOlxyXG4gICAgICAgICAgX2FnZ3JlZ2F0ZVZhbHVlID0gZGF0YS5yZWR1Y2UoKHAsIGMpID0+IHBbZmllbGRdID4gY1tmaWVsZF0gPyBwIDogYylbZmllbGRdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm1pblwiOlxyXG4gICAgICAgICAgX2FnZ3JlZ2F0ZVZhbHVlID0gZGF0YS5yZWR1Y2UoKHAsIGMpID0+IHBbZmllbGRdIDwgY1tmaWVsZF0gPyBwIDogYylbZmllbGRdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbC5hZ2dyZWdhdGVWYWx1ZSA9IF9hZ2dyZWdhdGVWYWx1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgYWdncmVnYXRlIHZhbHVlcyBmb3IgY29sdW1ucyB3aXRoIGFnZ3JlZ2F0ZSB0eXBlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWdncmVnYXRlUmVzZXRWYWx1ZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFnZ3JlZ2F0ZUNvbHVtbnMgPSB0aGlzLmdyaWRTZXR0aW5nLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuYWdncmVnYXRlVHlwZSk7XHJcbiAgICBhZ2dyZWdhdGVDb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgY29sLmFnZ3JlZ2F0ZVZhbHVlID0gMDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIHBhZ2UgY2hhbmdlIGV2ZW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtQYWdlQ2hhbmdlRXZlbnR9IGV2ZW50IC0gVGhlIHBhZ2UgY2hhbmdlIGV2ZW50LlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBwYWdlQ2hhbmdlKGV2ZW50OiBQYWdlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMucGFyYW1zLnBhZ2VObyA9IHRoaXMuZ2V0UGFnZU5vKGV2ZW50LnNraXAsIHRoaXMucGFyYW1zLnBhZ2VTaXplKTtcclxuICAgIHRoaXMuc3RhdGUuc2tpcCA9IGV2ZW50LnNraXA7XHJcbiAgICB0aGlzLmNoYW5nZUV2ZW50LnBhZ2VDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIHRoaXMuZ2V0RGF0YUJpbmRpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBzb3J0IGNoYW5nZSBldmVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7U29ydERlc2NyaXB0b3JbXX0gc29ydCAtIFRoZSBzb3J0IGRlc2NyaXB0b3IgYXJyYXkuXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgcHVibGljIHNvcnRDaGFuZ2Uoc29ydDogU29ydERlc2NyaXB0b3JbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0ID0gc29ydDtcclxuICAgIHRoaXMucGFyYW1zLnNvcnRDb2x1bW5OYW1lcyA9IFtdO1xyXG4gICAgdGhpcy5wYXJhbXMuc29ydE9yZGVycyA9IFtdO1xyXG5cclxuICAgIHNvcnQuZm9yRWFjaCgoZGVzY3JpcHRvcjogU29ydERlc2NyaXB0b3IpID0+IHtcclxuICAgICAgaWYgKGRlc2NyaXB0b3IuZGlyKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc29ydE9yZGVycy5wdXNoKGRlc2NyaXB0b3IuZGlyKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdyaWRTZXR0aW5nLmNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wuZmllbGQgPT09IGRlc2NyaXB0b3IuZmllbGQpO1xyXG4gICAgICAgIGNvbnN0IHNvcnRDb2x1bW5OYW1lID0gZmllbGQudmFsdWVFeHByICE9PSB1bmRlZmluZWQgPyBmaWVsZC52YWx1ZUV4cHIgOiBkZXNjcmlwdG9yLmZpZWxkO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmFtcy5zb3J0Q29sdW1uTmFtZXMucHVzaChzb3J0Q29sdW1uTmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jaGFuZ2VFdmVudC5zb3J0Q2hhbmdlZCA9IHRydWU7XHJcbiAgICB0aGlzLmdldERhdGFCaW5kaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgZmlsdGVyIGNoYW5nZSBldmVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSBldmVudCAtIFRoZSBmaWx0ZXIgY2hhbmdlIGV2ZW50LlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBmaWx0ZXJDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wYXJhbXMucGFnZU5vID0gMDtcclxuICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcyA9IFtdO1xyXG4gICAgdGhpcy5zZXRGaWx0ZXJQYXJhbXNCeVBhcmVudFJlZklkKCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coZXZlbnQpO1xyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBldmVudC5maWx0ZXJzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ3JpZFNldHRpbmcuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGl0ZW0uZmllbGQpO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS52YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiBpdGVtLnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy56Z3JpZGJpbmRpbmcuZGF0YVsnRmlsdGVyV2l0aG91dEJyYWNrZXQnXSA/IGAke2ZpZWxkLnZhbHVlRXhwcn1gIDogYCgke2ZpZWxkLnZhbHVlRXhwcn0pYDtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0uZmlsdGVycykge1xyXG4gICAgICAgICAgaXRlbS5maWx0ZXJzLmZvckVhY2goKGZpbHRlcjogRmlsdGVyRGVzY3JpcHRvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJQYXJhbSA9IHtcclxuICAgICAgICAgICAgICBrZXk6IGZpbHRlci5maWVsZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgb3BzOiB0aGlzLm1hcEZpbHRlck9wZXJhdG9yKGZpbHRlci5vcGVyYXRvciksXHJcbiAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlci52YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiBmaWx0ZXIudmFsdWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcy5wdXNoKGZpbHRlclBhcmFtKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlclBhcmFtID0ge1xyXG4gICAgICAgICAgICBrZXk6IGZpZWxkLnZhbHVlRXhwciAhPT0gdW5kZWZpbmVkID8gZmlsdGVyVmFsdWUgOiBpdGVtLmZpZWxkLFxyXG4gICAgICAgICAgICBvcHM6IHRoaXMubWFwRmlsdGVyT3BlcmF0b3IoaXRlbS5vcGVyYXRvciksXHJcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLnBhcmFtcy5maWx0ZXJQYXJhbXMucHVzaChmaWx0ZXJQYXJhbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZUV2ZW50LmZpbHRlckNoYW5nZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5nZXREYXRhQmluZGluZygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRhdGFTdGF0ZUNoYW5nZShzdGF0ZTogRGF0YVN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JpZC5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlID0gc3RhdGU7XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZVJlc2V0VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcCBmaWx0ZXIgb3BlcmF0b3IgdG8gaXRzIGNvcnJlc3BvbmRpbmcgdmFsdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3IgLSBUaGUgZmlsdGVyIG9wZXJhdG9yLlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIG1hcHBlZCBmaWx0ZXIgb3BlcmF0b3IgdmFsdWUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtYXBGaWx0ZXJPcGVyYXRvcihvcGVyYXRvcjogYW55KSB7XHJcbiAgICBjb25zdCBvcGVyYXRvck1hcHBpbmdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgICBcImVxXCI6IFwiZXFcIixcclxuICAgICAgXCJuZXFcIjogXCJuZXFcIixcclxuICAgICAgXCJsdFwiOiBcImx0XCIsXHJcbiAgICAgIFwibHRlXCI6IFwibHRlXCIsXHJcbiAgICAgIFwiZ3RcIjogXCJndFwiLFxyXG4gICAgICBcImd0ZVwiOiBcImd0ZVwiLFxyXG4gICAgICBcInN0YXJ0c3dpdGhcIjogXCJzdGFydHN3aXRoXCIsXHJcbiAgICAgIFwiZW5kc3dpdGhcIjogXCJlbmRzd2l0aFwiLFxyXG4gICAgICBcImlzbnVsbFwiOiBcImlzbnVsbFwiLFxyXG4gICAgICBcImlzbm90bnVsbFwiOiBcImlzbm90bnVsbFwiLFxyXG4gICAgfTtcclxuICAgIC8vIEhhbmRsZSBzcGVjaWFsIGNhc2UgZm9yIFwiY29udGFpbnNcIlxyXG4gICAgaWYgKG9wZXJhdG9yID09PSBcImNvbnRhaW5zXCIgJiYgIXRoaXMuZmllbGRbJ0ZpbHRlckNvbnRhaW5zVXNpbmdFcXVhbCddKSB7XHJcbiAgICAgIHJldHVybiBcImNvbnRhaW5zXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSBtYXBwZWQgb3BlcmF0b3Igb3IgZGVmYXVsdCB0byBcIj09XCJcclxuICAgIHJldHVybiBvcGVyYXRvck1hcHBpbmdzW29wZXJhdG9yXSB8fCBcIj09XCI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhZ2VObyhzdGF0ZVNraXA6IG51bWJlciwgc3RhdGVUYWtlOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBzdGF0ZVNraXAgLyBzdGF0ZVRha2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYmVmb3JlR3JpZEdldERhdGEoZ3JvdXA6IFpHcm91cCwgbWU6IGFueSkge1xyXG4gICAgY29uc29sZS53YXJuKFwiYmVmb3JlRGF0YUJpbmRpbmcgdHJpZ2dlcmVkXCIpO1xyXG4gICAgaWYgKCFncm91cC5iZWZvcmVHcmlkR2V0RGF0YSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJncm91cC5iZWZvcmVEYXRhQmluZGluZyBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVHcmlkR2V0RGF0YShncm91cCwgbWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIGNvbHVtbkZpZWxkID0gZGF0YTogQXJyYXk8WkZpZWxkPixcclxuICAvLyBjb2x1bW5zID0gZ3JpZENvbHVtbnM6IGFueVtdLFxyXG4gIC8vIGdyb3VwID0gZ3JvdXA6IFpHcm91cCxcclxuICAvLyBjb2x1bW5Db25maWd1cmF0aW9ucyA9IGdyaWRTZXR0aW5ncz86IFpHcmlkQ29sdW1uU2V0dGluZ3NbXSxcclxuICAvLyBnZW5lcmF0ZUhpZGRlbkNvbHVtbnMgPSB1c2FibGVDb2x1bW5zPzogYW55W10sXHJcbiAgLy8gZ3JpZEF0dHJpYnV0ZXMgPSBncmlkRmllbGQ/OiBaRmllbGRcclxuXHJcbiAgcHVibGljIHNldENvbHVtbnMoY29sdW1uczogYW55W10pIHtcclxuICAgIHRoaXMuZ3JpZFNldHRpbmcuY29sdW1uRmllbGQgPSBjb2x1bW5zO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5nZXRHcmlkQ29sdW1ucyh0aGlzLmdyaWRTZXR0aW5nKTtcclxuICB9XHJcbn1cclxuIl19
818
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQuYmluZGluZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96Z3JpZC96Z3JpZC5iaW5kaW5nLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1RSw2QkFBNkI7QUFFN0IsOEJBQThCO0FBQzlCLE9BQU8sRUFBdUIsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUF5QyxNQUFNLDhCQUE4QixDQUFDO0FBRzFILDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBQ3BGLHlEQUF5RDtBQUN6RCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQzZELFVBQVUsRUFDeEYsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQU16QixNQUFNLE9BQU8scUJBQXNCLFNBQVEsb0JBQW9CO0lBd0Q3RCxZQUN5QixJQUFJLEVBQUUseUZBQXlGO0lBQzlHLGFBQTRCLEVBQzVCLFlBQTBCO0lBQ2xDLG1DQUFtQztJQUMzQixzQkFBOEMsRUFDOUMsY0FBOEIsRUFDOUIsV0FBeUI7UUFFakMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBUEosa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFFMUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWM7UUE5RDNCLGdCQUFXLEdBQUc7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RCxPQUFPLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEtBQWEsRUFBRSxFQUFPO1FBQzdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFO1lBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUNyRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQjtRQUNELE9BQU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBR0QscUNBQXFDO0lBQ3JDLGdDQUFnQztJQUNoQyx5QkFBeUI7SUFDekIsK0RBQStEO0lBQy9ELGlEQUFpRDtJQUNqRCxzQ0FBc0M7SUFFL0IsVUFBVSxDQUFDLE9BQWM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1FBQ3ZDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7a0hBMzZCVSxxQkFBcUIsa0JBeUR0QixhQUFhO3NHQXpEWixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFIakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUMzQjs7MEJBMERJLE1BQU07MkJBQUMsYUFBYTtnTUFsRGQsWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIEluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IERhdGFCaW5kaW5nRGlyZWN0aXZlLCBHcmlkQ29tcG9uZW50LCBEYXRhU3RhdGVDaGFuZ2VFdmVudCwgUGFnZUNoYW5nZUV2ZW50IH0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWdyaWRcIjtcclxuaW1wb3J0IHsgU29ydERlc2NyaXB0b3IsIEZpbHRlckRlc2NyaXB0b3IsIH0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1kYXRhLXF1ZXJ5XCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IEdyaWRTZXR0aW5nVHlwZSwgR3JpZFN0YXRlTG9naWNUeXBlLCBaR3JpZFNlcnZpY2UgfSBmcm9tIFwiLi96Z3JpZC5zZXJ2aWNlXCI7XHJcbi8vaW1wb3J0IHsgTWFpblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvbWFpbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcbiAgWkNvbXBvbmVudEhlbHBlciwgWkZpZWxkLCBaR3JpZFBvc3RBcGlQYXJhbXMsXHJcbiAgV2ViQXBpU2VydmljZSwgWkdyb3VwLCBUb2FzdFNlcnZpY2UsIE9mZmxpbmVEYXRhYmFzZVNlcnZpY2UsIFNpZ25hbHJTZXJ2aWNlLCBBY3Rpb25UeXBlLCBaR3JpZENvbHVtbkNvbmZpZ3MsIFpHcmlkU2V0dGluZ3NcclxufSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcblxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6IFwiW3pncmlkYmluZGluZ11cIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFpHcmlkQmluZGluZ0RpcmVjdGl2ZSBleHRlbmRzIERhdGFCaW5kaW5nRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgY2hhbmdlRXZlbnQgPSB7XHJcbiAgICBwYWdlQ2hhbmdlZDogZmFsc2UsXHJcbiAgICBmaWx0ZXJDaGFuZ2VkOiBmYWxzZSxcclxuICAgIHNvcnRDaGFuZ2VkOiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgemdyaWRiaW5kaW5nOiB7XHJcbiAgICBkYXRhOiBaRmllbGQ7XHJcbiAgICBncm91cDogWkdyb3VwO1xyXG4gICAgcGFyYW1zOiBaR3JpZFBvc3RBcGlQYXJhbXM7XHJcbiAgICBncmlkU3ViamVjdDogU3ViamVjdDxhbnk+O1xyXG4gICAgZ3JpZFNldHRpbmc6IFpHcmlkU2V0dGluZ3M7XHJcbiAgfTtcclxuXHJcbiAgLy9zdGF0ZTogU3RhdGUgPSB7XHJcbiAgLy8gIHNraXA6IDAsXHJcbiAgLy8gIHRha2U6IDEwLFxyXG4gIC8vfTtcclxuXHJcbiAgLy9ncmlkQ29sdW1uczogYW55W10gPSBbXTtcclxuXHJcbiAgLy91c2FibGVDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG5cclxuICByZXNvdXJjZVVSTCA9IG51bGw7XHJcblxyXG4gIHBhZ2luYXRpb25BcGlQb3N0VXJsID0gbnVsbDtcclxuXHJcbiAgZGF0YVNvdXJjZSA9IG51bGw7XHJcblxyXG4gIGdldCBncmlkU2V0dGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLnpncmlkYmluZGluZy5ncmlkU2V0dGluZztcclxuICB9XHJcbiAgc2V0IGdyaWRTZXR0aW5nKHZhbHVlKSB7XHJcbiAgICB0aGlzLnpncmlkYmluZGluZy5ncmlkU2V0dGluZyA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgZmllbGQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy56Z3JpZGJpbmRpbmcuZGF0YTtcclxuICB9XHJcblxyXG4gIGdldCBncnAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy56Z3JpZGJpbmRpbmcuZ3JvdXA7XHJcbiAgfVxyXG5cclxuICBnZXQgZ3JpZFN1YmplY3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy56Z3JpZGJpbmRpbmcuZ3JpZFN1YmplY3Q7XHJcbiAgfVxyXG5cclxuICBnZXQgcGFyYW1zKCk6IFpHcmlkUG9zdEFwaVBhcmFtcyB7XHJcbiAgICByZXR1cm4gdGhpcy56Z3JpZGJpbmRpbmcucGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldERhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ncmlkLmRhdGE7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoR3JpZENvbXBvbmVudCkgZ3JpZCwgLy8gSW5qZWN0aW5nIEdyaWRDb21wb25lbnQgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBzY29wZSBhbmQgY29udGV4dCBvZiB0aGUgR3JpZENvbXBvbmVudC5cclxuICAgIHByaXZhdGUgd2ViYXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICAvL3ByaXZhdGUgbWFpblNlcnZpY2U6IE1haW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBvZmZsaW5lRGF0YWJhc2VTZXJ2aWNlOiBPZmZsaW5lRGF0YWJhc2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzaWduYWxyU2VydmljZTogU2lnbmFsclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBaR3JpZFNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKGdyaWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICB0aGlzLmdyaWQubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5maWVsZC5QYWdlU2l6ZSB8fCAyMDtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuZmllbGQuRGF0YVNvdXJjZSA/PyBudWxsO1xyXG5cclxuICAgIGlmICghdGhpcy5kYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMucmVzb3VyY2VVUkwgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoXHJcbiAgICAgICAgdGhpcy5maWVsZC5SZXNvdXJjZVVSTCxcclxuICAgICAgICB0aGlzLmdycFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLnJlc291cmNlVVJMKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy56Z3JpZGJpbmRpbmcuZGF0YS5OYW1lICE9PSBcIkFjdGl2aXR5TG9nR3JpZFwiKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgIFwiTm8gaW5pdGlhbGlzZSBmb3IgRmllbGQuUmVzb3VyY2VVUkw6IFwiLFxyXG4gICAgICAgICAgICB0aGlzLmZpZWxkLlJlc291cmNlVVJMXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0UmVzb3VyY2VVcmwodGhpcy5yZXNvdXJjZVVSTCk7XHJcblxyXG4gICAgICB0aGlzLnNldEZpbHRlclBhcmFtc0J5UGFyZW50UmVmSWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5EaXNhYmxlR2VuZXJhdGVDb2x1bW5CeUZvcm0pIHtcclxuICAgICAgY29uc3QgY29sdW1uRmllbGRzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZmllbGQuQ29sdW1uRmllbGRzLCB0aGlzLmdycCk7XHJcblxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2x1bW5GaWVsZHMpKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDb2x1bW5zKGNvbHVtbkZpZWxkcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmZpZWxkWydTa2lwTG9hZFJlc291cmNlVVJMRGF0YSddKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdyaWRTdWJqZWN0Lm5leHQodGhpcyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhQmluZGluZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5nZW5lcmF0ZUdyaWRDb2x1bW5zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmliZUNhY2hlRGF0YUNoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UmVzb3VyY2VVcmwocmVzb3VyY2VVcmw6IHN0cmluZykge1xyXG4gICAgY29uc3QgYXJyYXkgPSByZXNvdXJjZVVybC5zcGxpdChcIi9hcGkvXCIpO1xyXG4gICAgaWYgKCEhYXJyYXlbMV0pIHtcclxuICAgICAgYXJyYXlbMV0gPSBcIlBhZ2VcIiArIGFycmF5WzFdO1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25BcGlQb3N0VXJsID0gYXJyYXkuam9pbihcIi9hcGkvXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgYXJyID0gdGhpcy5yZXNvdXJjZVVSTC5zcGxpdChcIi9cIik7XHJcbiAgICAgIGFyclthcnIubGVuZ3RoIC0gMl0gPSBcIlBhZ2VcIiArIGFyclthcnIubGVuZ3RoIC0gMl07XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbkFwaVBvc3RVcmwgPSBhcnIuam9pbihcIi9cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZpbHRlclBhcmFtc0J5UGFyZW50UmVmSWQoKSB7XHJcbiAgICAvLyBVc2UgZmllbGQgb3duIHJlZmVyZW5jZUlkIGlmIGF2YWlsYWJsZVxyXG4gICAgY29uc3QgcmVmSWQgPSB0aGlzLmdldEZpZWxkUmVmZXJlbmNlSWQoKSB8fCB0aGlzLmdycC5yZWZlcmVuY2VJZDtcclxuICAgIGNvbnN0IHJlZkZpZWxkID0gdGhpcy5maWVsZC5SZWZlcmVuY2VGaWVsZCB8fCB0aGlzLmdycC5wYXJlbnRSZWZlcmVuY2VGaWVsZDtcclxuICAgIGlmIChyZWZJZCAmJiByZWZGaWVsZCkge1xyXG4gICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHtcclxuICAgICAgICBrZXk6IHJlZkZpZWxkLFxyXG4gICAgICAgIG9wczogXCI9XCIsXHJcbiAgICAgICAgdmFsdWU6IHJlZklkLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zLnB1c2goZmlsdGVyVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWVsZFJlZmVyZW5jZUlkKCkge1xyXG4gICAgbGV0IGZpZWxkUmVmZXJlbmNlSWQgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuUmVmZXJlbmNlSWQpIHtcclxuICAgICAgZmllbGRSZWZlcmVuY2VJZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgICB0aGlzLmZpZWxkLlJlZmVyZW5jZUlkLFxyXG4gICAgICAgIHRoaXMuZ3JwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmllbGRSZWZlcmVuY2VJZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZW5lcmF0ZUdyaWRDb2x1bW5zKCkge1xyXG4gICAgY29uc3QgY29sdW1uRmllbGRzJDogT2JzZXJ2YWJsZTxhbnk+ID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKFxyXG4gICAgICB0aGlzLmZpZWxkLkNvbHVtbkZpZWxkcyxcclxuICAgICAgdGhpcy5ncnBcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGNvbHVtbkZpZWxkcyQpIHtcclxuICAgICAgY29sdW1uRmllbGRzJC5waXBlKFxyXG4gICAgICAgIHRhcCgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGNvbHVtbnNDb25maWcgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8vIE5vdGU6IE9idGFpbmluZyB0aGUgZ3JpZCBzdGF0ZSBpcyBkdXJpbmcgaW5pdGlhbGl6YXRpb247IGlmIG5vdCwgaXQgd2lsbCBwcmV2ZW50IHRoZSBncmlkIGZyb20gbG9hZGluZy5cclxuICAgICAgICAgIGNvbnN0IHNldHRpbmdDYWNoZU5hbWUgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTdGF0ZUNhY2hlU3RvcmFnZUtleShHcmlkU2V0dGluZ1R5cGUuU2F2ZWRTZXR0aW5nLCB0aGlzLmZpZWxkKTtcclxuICAgICAgICAgIGNvbnN0IHNldHRpbmdDYWNoZVZhbHVlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShzZXR0aW5nQ2FjaGVOYW1lKTtcclxuICAgICAgICAgIGlmIChzZXR0aW5nQ2FjaGVWYWx1ZSkge1xyXG4gICAgICAgICAgICBjb2x1bW5zQ29uZmlnID0gKEpTT04ucGFyc2Uoc2V0dGluZ0NhY2hlVmFsdWUpIGFzIFpHcmlkU2V0dGluZ3MpLmNvbHVtbkNvbmZpZ3VyYXRpb25zO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuZ3JpZFNldHRpbmcgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZ3JpZFNldHRpbmcsIC8vIFByZXNlcnZlIGV4aXN0aW5nIHByb3BlcnRpZXNcclxuICAgICAgICAgICAgY29sdW1uRmllbGQ6IGRhdGEsXHJcbiAgICAgICAgICAgIGdyb3VwOiB0aGlzLnpncmlkYmluZGluZy5ncm91cCxcclxuICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbnM6IGNvbHVtbnNDb25maWdcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBaQ29tcG9uZW50SGVscGVyLmdldEdyaWRDb2x1bW5zKHRoaXMuZ3JpZFNldHRpbmcpO1xyXG4gICAgICAgICAgdGhpcy5nZXRGaWx0ZXJQYXJhbXNDb2x1bW5zKCk7XHJcbiAgICAgICAgICB0aGlzLmdldEZpbHRlcigpO1xyXG4gICAgICAgICAgdGhpcy5nZXRGaWx0ZXJQYXJhbXMoKTtcclxuICAgICAgICAgIHRoaXMuZ2V0U29ydGluZygpO1xyXG4gICAgICAgICAgdGhpcy5nZXRHcmFudFR5cGUoKTtcclxuICAgICAgICAgIHRoaXMuc2V0SGlkZGVuQ29sdW1uKHRoaXMuZ3JpZFNldHRpbmcuY29sdW1uQ29uZmlndXJhdGlvbnMpO1xyXG5cclxuICAgICAgICAgIHRoaXMucGFyYW1zLnJlZmVySWQgPSB0aGlzLmdldEZpZWxkUmVmZXJlbmNlSWQoKSB8fCB0aGlzLmdycC5yZWZlcmVuY2VJZCB8fCBudWxsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5maWVsZFsnU2tpcExvYWRSZXNvdXJjZVVSTERhdGEnXSkge1xyXG4gICAgICAgICAgdGhpcy5ncmlkLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZ3JpZFN1YmplY3QubmV4dCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmdldERhdGFCaW5kaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0ZhaWwgdG8gZ2VuZXJhdGUgZ3JpZCBjb2x1bW4gZmllbGRzLicpO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmZpZWxkLkNvbHVtbkZpZWxkcyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ3JwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTa2lwTG9hZFJlc291cmNlVVJMRGF0YShzZXR0aW5nVmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZmllbGRbJ1NraXBMb2FkUmVzb3VyY2VVUkxEYXRhJ10gPSAhc2V0dGluZ1ZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSB0aXRsZSBvZiBhIGNvbHVtbiBpbiB0aGUgZ3JpZCBzZXR0aW5nIGJhc2VkIG9uIGl0cyB2YWx1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xWYWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgY29sdW1uIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sTmFtZSAtIFRoZSBuZXcgdGl0bGUgZm9yIHRoZSBjb2x1bW4uXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgcHVibGljIHNldENvbHVtbk5hbWUoY29sVmFsdWU6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBGaW5kIHRoZSBjb2x1bW4gd2l0aCB0aGUgbWF0Y2hpbmcgY29sVmFsdWUuXHJcbiAgICBjb25zdCBjb2x1bW5Ub1VwZGF0ZSA9IHRoaXMuZ3JpZFNldHRpbmcuY29sdW1ucy5maW5kKGZpZWxkID0+IGZpZWxkLlZhbHVlID09PSBjb2xWYWx1ZSk7XHJcblxyXG4gICAgLy8gSWYgdGhlIGNvbHVtbiBpcyBmb3VuZCwgdXBkYXRlIGl0cyB0aXRsZSBwcm9wZXJ0eSB3aXRoIGNvbE5hbWUuXHJcbiAgICBpZiAoY29sdW1uVG9VcGRhdGUpIHtcclxuICAgICAgY29sdW1uVG9VcGRhdGUudGl0bGUgPSBjb2xOYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSB2aXNpYmlsaXR5IG9mIGEgY29sdW1uIGluIHRoZSBncmlkIGJhc2VkIG9uIGl0cyB2YWx1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xWYWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgY29sdW1uIHRvIHNldCB2aXNpYmlsaXR5IGZvci5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzVmlzaWJsZSAtIFdoZXRoZXIgdGhlIGNvbHVtbiBzaG91bGQgYmUgdmlzaWJsZSAodHJ1ZSkgb3IgaGlkZGVuIChmYWxzZSkuXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgcHVibGljIHNldENvbHVtblZpc2libGUoY29sVmFsdWU6IHN0cmluZywgaXNWaXNpYmxlOiBib29sZWFuKSB7XHJcbiAgICAvLyBGaW5kIHRoZSBjb2x1bW4gd2l0aCB0aGUgbWF0Y2hpbmcgY29sVmFsdWUuXHJcbiAgICBjb25zdCBjb2x1bW5Ub1VwZGF0ZSA9IHRoaXMuZ3JpZFNldHRpbmcuY29sdW1ucy5maW5kKGZpZWxkID0+IGZpZWxkLlZhbHVlID09PSBjb2xWYWx1ZSk7XHJcblxyXG4gICAgLy8gSWYgdGhlIGNvbHVtbiBpcyBmb3VuZCwgdXBkYXRlIGl0cyAnaGlkZGVuJyBwcm9wZXJ0eSBiYXNlZCBvbiAnaXNWaXNpYmxlJy5cclxuICAgIGlmIChjb2x1bW5Ub1VwZGF0ZSkge1xyXG4gICAgICBjb2x1bW5Ub1VwZGF0ZS5oaWRkZW4gPSAhaXNWaXNpYmxlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgZmlsdGVyIHBhcmFtZXRlcnMgZm9yIGNvbHVtbnMgYW5kIHNldCB0aGVtIGluIHRoZSAncGFyYW1zJyBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cclxuICBwcml2YXRlIGdldEZpbHRlclBhcmFtc0NvbHVtbnMoKSB7XHJcbiAgICAvLyBDcmVhdGUgYW4gYXJyYXkgdG8gc3RvcmUgY29sdW1uIGZpZWxkcy5cclxuICAgIGNvbnN0IGNvbEZpZWxkczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG5cclxuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZ3JpZCBjb2x1bW5zIHRvIGJ1aWxkIGNvbHVtbiBmaWVsZCBzdHJpbmdzLlxyXG4gICAgdGhpcy5ncmlkU2V0dGluZy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICBpZiAoY29sdW1uLnZhbHVlRXhwcikge1xyXG4gICAgICAgIC8vIElmICd2YWx1ZUV4cHInIGV4aXN0cywgdXNlIGl0IGFzIGFuIGFsaWFzIGZvciB0aGUgZmllbGQuXHJcbiAgICAgICAgY29sRmllbGRzLnB1c2goY29sdW1uLnZhbHVlRXhwciArIFwiIGFzIFwiICsgY29sdW1uLmZpZWxkKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb2xGaWVsZHMucHVzaChjb2x1bW4uZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiAnSWQnIGlzIGluIHRoZSBjb2x1bW4gZmllbGRzOyBpZiBub3QsIGFkZCBpdC5cclxuICAgIGlmIChjb2xGaWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAoY29sRmllbGRzLmluZGV4T2YoXCJJZFwiKSA9PT0gLTEpIHtcclxuICAgICAgICBjb2xGaWVsZHMucHVzaChcIklkXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGFuIGFycmF5IHRvIHRlbXBvcmFyaWx5IHN0b3JlIHRoZSBnZW5lcmF0ZWQgY29sdW1uIGZpZWxkcy5cclxuICAgIGNvbnN0IHRtcEdyaWRDb2x1bW46IGFueVtdID0gW107XHJcbiAgICB0bXBHcmlkQ29sdW1uLnB1c2goY29sRmllbGRzLmpvaW4oXCIsXCIpKTtcclxuXHJcbiAgICAvLyBJZiB0aGVyZSBhcmUgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zIGluIHRoZSBzZXR0aW5nLCBhZGQgdGhlbSB0byB0aGUgYXJyYXkuXHJcbiAgICBpZiAodGhpcy5ncmlkU2V0dGluZy5nZW5lcmF0ZUhpZGRlbkNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdG1wR3JpZENvbHVtbi5wdXNoKHRoaXMuZ3JpZFNldHRpbmcuZ2VuZXJhdGVIaWRkZW5Db2x1bW5zLmpvaW4oXCIsXCIpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZXQgdGhlICdwYXJhbXMuY29sdW1ucycgcHJvcGVydHkgd2l0aCB0aGUgY29uY2F0ZW5hdGVkIGNvbHVtbiBmaWVsZHMuXHJcbiAgICB0aGlzLnBhcmFtcy5jb2x1bW5zID0gdG1wR3JpZENvbHVtbi5qb2luKFwiLFwiKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgJ3BhcmFtcy5maWx0ZXJzJyBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgJ2ZpZWxkLkZpbHRlcnMnIHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRGaWx0ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5wYXJhbXMuZmlsdGVycyAmJiB0aGlzLmZpZWxkLkZpbHRlcnMpIHtcclxuICAgICAgLy8gQ29tYmluZSAncGFyYW1zLmZpbHRlcnMnIGFuZCAnZmllbGQuRmlsdGVycycgdXNpbmcgJyYmJyBpZiBib3RoIGV4aXN0LiBcclxuICAgICAgdGhpcy5wYXJhbXMuZmlsdGVycyA9IGAke3RoaXMucGFyYW1zLmZpbHRlcnN9ICYmICR7dGhpcy5maWVsZC5GaWx0ZXJzfWA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghdGhpcy5wYXJhbXMuZmlsdGVycyAmJiB0aGlzLmZpZWxkLkZpbHRlcnMpIHtcclxuICAgICAgLy8gVXNlICdmaWVsZC5GaWx0ZXJzJyBkaXJlY3RseSBpZiAncGFyYW1zLmZpbHRlcnMnIGRvZXNuJ3QgZXhpc3QuXHJcbiAgICAgIHRoaXMucGFyYW1zLmZpbHRlcnMgPSB0aGlzLmZpZWxkLkZpbHRlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgJ2ZpZWxkLkZpbHRlcnMnIGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gJ2dyb3VwLicgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGFjdHVhbCB2YWx1ZXMuXHJcbiAgICBpZiAodGhpcy5maWVsZC5GaWx0ZXJzICYmIHRoaXMuZmllbGQuRmlsdGVycy5zcGxpdChcIiBcIikuc29tZSgoZWxlbWVudCkgPT4gZWxlbWVudC50cmltKCkuc3RhcnRzV2l0aChcImdyb3VwLlwiKSkpIHtcclxuICAgICAgY29uc3QgZmlsdGVyS2V5VmFsUGFpcnMgPSB0aGlzLmZpZWxkLkZpbHRlcnMuc3BsaXQoXCIgXCIpO1xyXG4gICAgICBjb25zdCBncnBWYWx1ZXMgPSBmaWx0ZXJLZXlWYWxQYWlycy5maWx0ZXIoKGVsZW1lbnQpID0+IGVsZW1lbnQudHJpbSgpLnN0YXJ0c1dpdGgoXCJncm91cC5cIikpO1xyXG5cclxuICAgICAgZ3JwVmFsdWVzLmZvckVhY2goKHZhbCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFjdHVhbFZhbCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh2YWwsIHRoaXMuZ3JwKTtcclxuICAgICAgICB0aGlzLnBhcmFtcy5maWx0ZXJzID0gdGhpcy5wYXJhbXMuZmlsdGVycy5yZXBsYWNlKHZhbCwgYWN0dWFsVmFsKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGZpbHRlciBwYXJhbWV0ZXJzIGluIHRoZSAncGFyYW1zLmZpbHRlclBhcmFtcycgcHJvcGVydHkgYmFzZWQgb24gJ2ZpZWxkWydGaWx0ZXJQYXJhbXMnXScuIGZpbHRlclBhcmFtcyA9PT0gdXNlZCBmb3IgdGhlIGlucHV0IGluIHRoZSBjb2x1bW4gZmlsdGVyIGF0IHRoZSBVSS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0RmlsdGVyUGFyYW1zKCkgeyBcclxuICAgIGNvbnN0IGZpbHRlclBhcmFtcyA9IHRoaXMuZmllbGRbJ0ZpbHRlclBhcmFtcyddO1xyXG5cclxuICAgIC8vIEluaXRpYWxpemUgZmlsdGVyIHBhcmFtZXRlcnMgaWYgdW5kZWZpbmVkLlxyXG4gICAgaWYgKCF0aGlzLnBhcmFtcy5maWx0ZXJQYXJhbXMpIHtcclxuICAgICAgdGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpbHRlclBhcmFtcykge1xyXG4gICAgICBpZiAoZmlsdGVyUGFyYW1zLnN0YXJ0c1dpdGgoXCJncm91cC5cIikpIHtcclxuICAgICAgICAvLyBJZiAnZmlsdGVyUGFyYW1zJyBzdGFydHMgd2l0aCBcImdyb3VwLlwiLCBleHRlbmQgdGhlIGV4aXN0aW5nIGFycmF5LlxyXG4gICAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcyA9IFtcclxuICAgICAgICAgIC4uLnRoaXMucGFyYW1zLmZpbHRlclBhcmFtcyxcclxuICAgICAgICAgIC4uLlpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShmaWx0ZXJQYXJhbXMsIHRoaXMuZ3JwKVxyXG4gICAgICAgIF07XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgLy8gSWYgJ2ZpbHRlclBhcmFtcycgZG9lcyBub3Qgc3RhcnQgd2l0aCBcImdyb3VwLlwiLCB1c2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgICAgdGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zID0gW1xyXG4gICAgICAgICAgLi4udGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zLFxyXG4gICAgICAgICAgZmlsdGVyUGFyYW1zXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBjb2x1bW4gZmlsdGVycyBpbiB0aGUgZ3JpZCBzdGF0ZSBhbmQgYXBwZW5kIHRvIGZpbHRlcnBhcmFtIFxyXG4gICAgaWYgKHRoaXMuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlPy5maWx0ZXI/LmZpbHRlcnMpIHtcclxuICAgICAgdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUuZmlsdGVyPy5maWx0ZXJzPy5mb3JFYWNoKChmaWx0ZXI6IEZpbHRlckRlc2NyaXB0b3IpID0+IHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJQYXJhbSA9IHtcclxuICAgICAgICAgIGtleTogZmlsdGVyLmZpZWxkIGFzIHN0cmluZyxcclxuICAgICAgICAgIG9wczogdGhpcy5tYXBGaWx0ZXJPcGVyYXRvcihmaWx0ZXIub3BlcmF0b3IpLFxyXG4gICAgICAgICAgdmFsdWU6IGZpbHRlci52YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiBmaWx0ZXIudmFsdWUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBDaGVjayBpZiBhIGZpbHRlciBwYXJhbWV0ZXIgd2l0aCB0aGUgc2FtZSBrZXkgYWxyZWFkeSBleGlzdHMuXHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdQYXJhbSA9IHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcy5maW5kKChwYXJhbSkgPT4gcGFyYW0ua2V5ID09PSBmaWx0ZXJQYXJhbS5rZXkpO1xyXG4gICAgICAgIGlmIChleGlzdGluZ1BhcmFtKSB7XHJcbiAgICAgICAgICAvLyBJZiBhIGZpbHRlciBwYXJhbWV0ZXIgd2l0aCB0aGUgc2FtZSBrZXkgZXhpc3RzLCB1cGRhdGUgaXRzIHZhbHVlLlxyXG4gICAgICAgICAgZXhpc3RpbmdQYXJhbS52YWx1ZSA9IGZpbHRlclBhcmFtLnZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBJZiBubyBmaWx0ZXIgcGFyYW1ldGVyIHdpdGggdGhlIHNhbWUga2V5LCBhZGQgaXQgdG8gdGhlIGZpbHRlciBwYXJhbWV0ZXJzLlxyXG4gICAgICAgICAgdGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zLnB1c2goZmlsdGVyUGFyYW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIHNvcnRpbmcgb3JkZXIgaW4gdGhlICdwYXJhbXMuc29ydE9yZGVyJyBwcm9wZXJ0eSBiYXNlZCBvbiAnZmllbGQuU29ydE9yZGVyJy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0U29ydGluZygpIHtcclxuICAgIGNvbnN0IHNvcnRPcmRlciA9IHRoaXMuZmllbGQuU29ydE9yZGVyO1xyXG5cclxuICAgIC8vIENoZWNrIGlmICdzb3J0T3JkZXInIGlzIGRlZmluZWQgYW5kIHN0YXJ0cyB3aXRoIFwiZ3JvdXAuXCIuXHJcbiAgICBpZiAoc29ydE9yZGVyICYmIHNvcnRPcmRlci5zdGFydHNXaXRoKFwiZ3JvdXAuXCIpKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLnNvcnRPcmRlciA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShzb3J0T3JkZXIsIHRoaXMuZ3JwKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBJZiAnc29ydE9yZGVyJyBpcyBub3QgZGVmaW5lZCBvciBkb2Vzbid0IHN0YXJ0IHdpdGggXCJncm91cC5cIiwgdXNlIGl0IGRpcmVjdGx5LlxyXG4gICAgICB0aGlzLnBhcmFtcy5zb3J0T3JkZXIgPSBzb3J0T3JkZXI7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEluaXRpYWxpemUgc29ydCBwYXJhbWV0ZXJzIGlmIHVuZGVmaW5lZC5cclxuICAgIGlmICghdGhpcy5wYXJhbXMuc29ydE9yZGVycykge1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3J0T3JkZXJzID0gW107XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucGFyYW1zLnNvcnRDb2x1bW5OYW1lcykge1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3J0Q29sdW1uTmFtZXMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUuc29ydCkge1xyXG4gICAgICB0aGlzLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5zb3J0LmZvckVhY2goKGRlc2NyaXB0b3IpID0+IHtcclxuICAgICAgICBpZiAoZGVzY3JpcHRvci5kaXIpIHtcclxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5ncmlkU2V0dGluZy5jb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLmZpZWxkID09PSBkZXNjcmlwdG9yLmZpZWxkKTtcclxuICAgICAgICAgIGNvbnN0IHNvcnRDb2x1bW5OYW1lID0gZmllbGQudmFsdWVFeHByICE9PSB1bmRlZmluZWQgPyBmaWVsZC52YWx1ZUV4cHIgOiBkZXNjcmlwdG9yLmZpZWxkO1xyXG5cclxuICAgICAgICAgIC8vIENoZWNrIGlmIGEgc29ydCBjb2x1bW4gd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLlxyXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdTb3J0Q29sdW1uSW5kZXggPSB0aGlzLnBhcmFtcy5zb3J0Q29sdW1uTmFtZXMuZmluZEluZGV4KChuYW1lKSA9PiBuYW1lID09PSBzb3J0Q29sdW1uTmFtZSk7XHJcblxyXG4gICAgICAgICAgaWYgKGV4aXN0aW5nU29ydENvbHVtbkluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAvLyBJZiBhIHNvcnQgY29sdW1uIHdpdGggdGhlIHNhbWUgbmFtZSBleGlzdHMsIHVwZGF0ZSBpdHMgc29ydCBvcmRlci5cclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMuc29ydE9yZGVyc1tleGlzdGluZ1NvcnRDb2x1bW5JbmRleF0gPSBkZXNjcmlwdG9yLmRpcjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIElmIG5vIHNvcnQgY29sdW1uIHdpdGggdGhlIHNhbWUgbmFtZSwgYWRkIGl0IHRvIHRoZSBzb3J0IGNvbHVtbnMgYW5kIHNvcnQgb3JkZXJzLlxyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5zb3J0Q29sdW1uTmFtZXMucHVzaChzb3J0Q29sdW1uTmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnNvcnRPcmRlcnMucHVzaChkZXNjcmlwdG9yLmRpcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgZ3JhbnQgdHlwZSBpbiB0aGUgJ3BhcmFtcy5ncmFudFR5cGUnIHByb3BlcnR5IGJhc2VkIG9uICdmaWVsZC5HcmFudFR5cGUnLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRHcmFudFR5cGUoKSB7XHJcbiAgICBjb25zdCBncmFudFR5cGUgPSB0aGlzLmZpZWxkLkdyYW50VHlwZTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiAnZ3JhbnRUeXBlJyBpcyBkZWZpbmVkLlxyXG4gICAgaWYgKGdyYW50VHlwZSkge1xyXG4gICAgICB0aGlzLnBhcmFtcy5ncmFudFR5cGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoZ3JhbnRUeXBlLnRvU3RyaW5nKCksIHRoaXMuZ3JwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgJ2hpZGRlbicgcHJvcGVydHkgZm9yIGNvbHVtbnMgaW4gJ2dyaWRTZXR0aW5nJyBiYXNlZCBvbiAnY29sdW1uQ29uZmlncycuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1pHcmlkQ29sdW1uQ29uZmlnc1tdfSBjb2x1bW5Db25maWdzIC0gVGhlIGNvbHVtbiBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0SGlkZGVuQ29sdW1uKGNvbHVtbkNvbmZpZ3M6IFpHcmlkQ29sdW1uQ29uZmlnc1tdKSB7XHJcbiAgICBpZiAodGhpcy5ncmlkU2V0dGluZy5jb2x1bW5zICYmIGNvbHVtbkNvbmZpZ3MpIHtcclxuICAgICAgLy8gRmlsdGVyIG91dCBoaWRkZW4gY29sdW1ucyBpbiAnY29sdW1uQ29uZmlncycuXHJcbiAgICAgIGNvbnN0IGhpZGRlbkNvbHVtbnMgPSBjb2x1bW5Db25maWdzLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmhpZGRlbiA9PT0gdHJ1ZSk7XHJcblxyXG4gICAgICAvLyBJdGVyYXRlIHRocm91Z2ggaGlkZGVuIGNvbHVtbnMgYW5kIHVwZGF0ZSAnZ3JpZFNldHRpbmcnIGFjY29yZGluZ2x5LlxyXG4gICAgICBoaWRkZW5Db2x1bW5zLmZvckVhY2goaGlkZGVuQ29sdW1uID0+IHtcclxuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdyaWRTZXR0aW5nLmNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGhpZGRlbkNvbHVtbi5maWVsZCk7XHJcbiAgICAgICAgaWYgKGNvbHVtbikge1xyXG4gICAgICAgICAgY29sdW1uLmhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIGRhdGEgZm9yIGRhdGEgYmluZGluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2tpcFVzZUNhY2hlIC0gV2hldGhlciB0byBza2lwIHVzaW5nIGNhY2hlIGZvciBkYXRhIHJldHJpZXZhbC5cclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0RGF0YUJpbmRpbmcoc2tpcFVzZUNhY2hlPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5ncmlkLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgY2FjaGVJbmZvID0gdGhpcy56Z3JpZGJpbmRpbmcuZGF0YS5DYWNoZUluZm87XHJcblxyXG4gICAgaWYgKCFjYWNoZUluZm8gfHwgc2tpcFVzZUNhY2hlKSB7XHJcbiAgICAgIHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjYWNoZUluZm8pIHtcclxuICAgICAgY29uc3QgZ3JpZFN0YXRlTG9naWMgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTdGF0ZUxvZ2ljKHRoaXMuZmllbGQpO1xyXG4gICAgICBpZiAoZ3JpZFN0YXRlTG9naWMgPT09IEdyaWRTdGF0ZUxvZ2ljVHlwZS5TZXR0aW5nT25seSkge1xyXG4gICAgICAgIHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuY2hhbmdlRXZlbnQucGFnZUNoYW5nZWQgJiYgIXRoaXMuY2hhbmdlRXZlbnQuc29ydENoYW5nZWQgJiYgIXRoaXMuY2hhbmdlRXZlbnQuZmlsdGVyQ2hhbmdlZCkge1xyXG4gICAgICBjb25zdCBjdXJyZW50RGF0YUNhY2hlSW5mbyA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2VuZXJhdGVDYWNoZUluZm8odGhpcy56Z3JpZGJpbmRpbmcuZGF0YSk7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMub2ZmbGluZURhdGFiYXNlU2VydmljZS5nZXRJdGVtQnlLZXkoY3VycmVudERhdGFDYWNoZUluZm8sIGN1cnJlbnREYXRhQ2FjaGVJbmZvLm9mZmxpbmVEYXRhYmFzZUtleSk7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUdldERhdGFCaW5kaW5nQ29tcGxldGUocmVzdWx0LmRhdGEsIHRydWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIGdyaWQgZGF0YS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0R3JpZERhdGEoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbkFwaVBvc3RVcmwpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ0dyaWQgcGFnaW5hdGlvbiBBUEkgVVJMIGlzIHVuZGVmaW5lZC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHN0YXRlU2tpcCA9IHRoaXMuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlID8gdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUuc2tpcCA6IHRoaXMuc3RhdGUuc2tpcDtcclxuICAgICAgY29uc3Qgc3RhdGVUYWtlID0gdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUgPyB0aGlzLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZS50YWtlIDogdGhpcy5zdGF0ZS50YWtlO1xyXG5cclxuICAgICAgdGhpcy5wYXJhbXMucGFnZU5vID0gdGhpcy5nZXRQYWdlTm8oc3RhdGVTa2lwLCBzdGF0ZVRha2UpO1xyXG4gICAgICB0aGlzLnBhcmFtcy5wYWdlU2l6ZSA9IHN0YXRlVGFrZTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZpZWxkLkV4dGVybmFsUGFnaW5hdGlvbikge1xyXG4gICAgICAgIC8vIEZvciBQT1NUIG1ldGhvZCBQYWdlIFdlYkFQSSBcclxuICAgICAgICB0aGlzLndlYmFwaVNlcnZpY2VcclxuICAgICAgICAgIC5wb3N0QXBpKHRoaXMucGFnaW5hdGlvbkFwaVBvc3RVcmwsIHRoaXMucGFyYW1zLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCB0cnVlKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXNwKSA9PiB0aGlzLmhhbmRsZUdldERhdGFCaW5kaW5nQ29tcGxldGUocmVzcCksXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyhcIkVycm9yIG9jY3VyIGluIGxvYWRpbmcgdGhlIGRhdGFcIiwgXCJtaWRkbGVcIiwgZmFsc2UsIDE1MDAsIFwiZGFuZ2VyXCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZ3JpZC5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIEZvciBHRVQgbWV0aG9kXHJcbiAgICAgICAgdGhpcy53ZWJhcGlTZXJ2aWNlXHJcbiAgICAgICAgICAuZ2V0QXBpKHRoaXMucmVzb3VyY2VVUkwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIHRydWUpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHRvdGFsQ291bnQgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3AuZGF0YVNldCkge1xyXG4gICAgICAgICAgICAgIGRhdGEgPSByZXNwLmRhdGFTZXQ7XHJcbiAgICAgICAgICAgICAgdG90YWxDb3VudCA9IHJlc3AudG90YWxDb3VudDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBkYXRhID0gcmVzcDtcclxuICAgICAgICAgICAgICB0b3RhbENvdW50ID0gcmVzcC5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlR2V0RGF0YUJpbmRpbmdDb21wbGV0ZSh7IGRhdGFTZXQ6IGRhdGEsIHRvdGFsQ291bnQ6IHRvdGFsQ291bnQgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IGRhdGFTZXQgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoXHJcbiAgICAgICAgdGhpcy5maWVsZC5EYXRhU291cmNlLFxyXG4gICAgICAgIHRoaXMuZ3JwXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmRhdGEgPSBkYXRhU2V0O1xyXG4gICAgICB0aGlzLmdyaWQubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmdyaWRTdWJqZWN0Lm5leHQodGhpcyk7XHJcbiAgICAgIHRoaXMubm90aWZ5RGF0YUNoYW5nZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVHZXREYXRhQmluZGluZ0NvbXBsZXRlKGRhdGE6IGFueSwgc2tpcENhY2hlRGF0YT86IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuYWdncmVnYXRlSGFuZGxpbmcoZGF0YS5kYXRhU2V0KTtcclxuICAgIHRoaXMuZ3JpZC5kYXRhID0geyBkYXRhOiBkYXRhLmRhdGFTZXQsIHRvdGFsOiBkYXRhLnRvdGFsQ291bnQgfTtcclxuICAgIGlmICghc2tpcENhY2hlRGF0YSkge1xyXG4gICAgICBjb25zdCBncmlkU3RhdGVMb2dpYyA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFN0YXRlTG9naWModGhpcy5maWVsZCk7XHJcbiAgICAgIGlmIChncmlkU3RhdGVMb2dpYyA9PT0gR3JpZFN0YXRlTG9naWNUeXBlLkRhdGFDYWNoZU9ubHkgfHwgZ3JpZFN0YXRlTG9naWMgPT09IEdyaWRTdGF0ZUxvZ2ljVHlwZS5TZXR0aW5nQW5kRGF0YUNhY2hlKSB7XHJcbiAgICAgICAgdGhpcy5jYWNoZUdyaWREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVDYWNoZURhdGFDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZ3JpZC5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmFmdGVyRGF0YUJpbmRlZChkYXRhKTtcclxuICAgIHRoaXMuZ3JpZFN1YmplY3QubmV4dCh0aGlzKTtcclxuICAgIHRoaXMubm90aWZ5RGF0YUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldENoYW5nZUV2ZW50RmxhZygpIHtcclxuICAgIHRoaXMuY2hhbmdlRXZlbnQgPSB7XHJcbiAgICAgIHBhZ2VDaGFuZ2VkOiBmYWxzZSxcclxuICAgICAgZmlsdGVyQ2hhbmdlZDogZmFsc2UsXHJcbiAgICAgIHNvcnRDaGFuZ2VkOiBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjYWNoZUdyaWREYXRhKCkge1xyXG4gICAgY29uc3QgbWUgPSB0aGlzO1xyXG4gICAgY29uc3QgZ3JpZFN0YXRlID0gdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGU7XHJcbiAgICBjb25zdCBncmlkRGF0YSA9IHRoaXMuZ3JpZD8uZGF0YSB8fCBudWxsO1xyXG5cclxuICAgIGlmICghZ3JpZERhdGFbJ2RhdGEnXSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2FjaGVJbmZvID0gdGhpcy56Z3JpZGJpbmRpbmcuZGF0YS5DYWNoZUluZm87XHJcblxyXG4gICAgaWYgKGNhY2hlSW5mbyAmJiAhY2FjaGVJbmZvLkRpc2FibGVDYWNoZURhdGEpIHtcclxuICAgICAgLy8ga2VlcCBvcmlnaW5hbERhdGEgXHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YUNhY2hlSW5mbyA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2VuZXJhdGVDYWNoZUluZm8odGhpcy56Z3JpZGJpbmRpbmcuZGF0YSk7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMub2ZmbGluZURhdGFiYXNlU2VydmljZS5nZXRJdGVtQnlLZXkob3JpZ2luYWxEYXRhQ2FjaGVJbmZvLCBvcmlnaW5hbERhdGFDYWNoZUluZm8ub2ZmbGluZURhdGFiYXNlS2V5KTtcclxuICAgICAgbGV0IHVwZGF0ZWREYXRhID0gWy4uLmdyaWREYXRhWydkYXRhJ11dO1xyXG4gICAgICBsZXQgc2tpcExpc3QgPSBbZ3JpZFN0YXRlLnNraXBdO1xyXG4gICAgICBsZXQgY3VycmVudEdyaWRTa2lwID0gZ3JpZFN0YXRlLnNraXA7XHJcblxyXG4gICAgICBpZiAob3JpZ2luYWxEYXRhQ2FjaGVJbmZvLmFwcGVuZFBhZ2luYXRpb25EYXRhKSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiAhcmVzdWx0LnNraXBMaXN0LmluY2x1ZGVzKGN1cnJlbnRHcmlkU2tpcCkpIHtcclxuICAgICAgICAgIHVwZGF0ZWREYXRhID0gWy4uLnJlc3VsdC5kYXRhLmRhdGFTZXQsIC4uLmdyaWREYXRhWydkYXRhJ11dO1xyXG4gICAgICAgICAgc2tpcExpc3QgPSBbLi4ucmVzdWx0LnNraXBMaXN0LCAuLi5za2lwTGlzdF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjYWNoZUdyaWREYXRhID0ge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGRhdGFTZXQ6IHVwZGF0ZWREYXRhLFxyXG4gICAgICAgICAgdG90YWxDb3VudDogZ3JpZERhdGFbJ3RvdGFsJ11cclxuICAgICAgICB9LFxyXG4gICAgICAgIGdyaWRTdGF0ZTogZ3JpZFN0YXRlLFxyXG4gICAgICAgIHNraXBMaXN0OiBza2lwTGlzdCxcclxuICAgICAgICBjYWNoZUR1cmF0aW9uOiBjYWNoZUluZm8uQ2FjaGVEdXJhdGlvblxyXG4gICAgICB9XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLm9mZmxpbmVEYXRhYmFzZVNlcnZpY2UuYWRkSXRlbShvcmlnaW5hbERhdGFDYWNoZUluZm8sIGNhY2hlR3JpZERhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9cIkZlYXR1cmVEZXZlbG9wbWVudHxDb21wZXRlbmN5XCIgXHJcbiAgcHJpdmF0ZSBhc3luYyBzdWJzY3JpYmVDYWNoZURhdGFDaGFuZ2VzKCkge1xyXG4gICAgY29uc3QgY2FjaGVJbmZvID0gdGhpcy56Z3JpZGJpbmRpbmcuZGF0YS5DYWNoZUluZm87XHJcblxyXG4gICAgaWYgKGNhY2hlSW5mbyAmJiAhY2FjaGVJbmZvLkRpc2FibGVDYWNoZURhdGEpIHtcclxuICAgICAgLy8gY2Fubm90IHVzZSBtYWluIHNlcnZpY2UgaGVyZS4gd2lsbCBnZXQgY2lyY3VsYXIgZXJyb3Igd2hlbiBidWlsZCBsaWJcclxuICAgICAgLy90aGlzLm1haW5TZXJ2aWNlLmpvaW5Qcm9qZWN0U2lnbmFsUigpO1xyXG5cclxuICAgICAgY29uc3QgY2FsbEJhY2tGdW5jdGlvbiA9IGAke2NhY2hlSW5mby5OYW1lfV9oYW5kbGVSZWNlaXZlZE1lc3NhZ2VgO1xyXG5cclxuICAgICAgLy8gY3JlYXRlIGFuZCBiaW5kIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJhY2sgZm9yIHRoZSBncmlkIGluIHRoZSBncm91cCB0cmlnZ2VyIGJ5IHNpZ25hbFIuXHJcbiAgICAgIGlmICghdGhpcy5ncnAuc2lnbmFsUkNhbGxiYWNrSGFuZGxlcikge1xyXG4gICAgICAgIHRoaXMuZ3JwLnNpZ25hbFJDYWxsYmFja0hhbmRsZXIgPSB7fTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdycC5zaWduYWxSQ2FsbGJhY2tIYW5kbGVyW2NhbGxCYWNrRnVuY3Rpb25dID0gdGhpcy5oYW5kbGVSZWNlaXZlZE1lc3NhZ2UuYmluZCh0aGlzKTtcclxuXHJcbiAgICAgIGNvbnN0IGdlbmVyYXRlZENhY2hlSW5mbyA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2VuZXJhdGVDYWNoZUluZm8odGhpcy56Z3JpZGJpbmRpbmcuZGF0YSk7XHJcbiAgICAgIGlmIChnZW5lcmF0ZWRDYWNoZUluZm8uZGVmaW5lZERhdGFiYXNlICYmIGdlbmVyYXRlZENhY2hlSW5mby5kZWZpbmVkVGFibGUpIHtcclxuICAgICAgICBnZW5lcmF0ZWRDYWNoZUluZm8uZGVmaW5lZERhdGFiYXNlLmZvckVhY2goZGIgPT4ge1xyXG4gICAgICAgICAgZ2VuZXJhdGVkQ2FjaGVJbmZvLmRlZmluZWRUYWJsZS5mb3JFYWNoKHRhYmxlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZXZlbnROYW1lID0gYCR7ZGJ9fCR7dGFibGV9YDtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYExpc3RlbmluZyB0byBldmVudCBuYW1lOiAke2V2ZW50TmFtZX1gKTtcclxuICAgICAgICAgICAgdGhpcy5zaWduYWxyU2VydmljZS5zdWJzY3JpYmVUb0V2ZW50KHRoaXMuZ3JwLCBgJHtldmVudE5hbWV9YCwgYGdyb3VwLnNpZ25hbFJDYWxsYmFja0hhbmRsZXIuJHtjYWxsQmFja0Z1bmN0aW9ufWApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGhhbmRsZVJlY2VpdmVkTWVzc2FnZShncm91cDogWkdyb3VwLCByZXN1bHQ6IGFueSwgZXZlbnROYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnNvbGUubG9nKGBUaGUgU2lnbmFsciB0cmlnZ2VyIGhhcyBiZWVuIGRldGVjdGVkLiBOb3csIHByb2NlZWQgdG8gdXBkYXRlIHRoZSBjYWNoZSBhbmQgZ3JpZCBkYXRhLmApO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlZFJlc3VsdCA9IEpTT04ucGFyc2UocmVzdWx0KTtcclxuICAgIGNvbnN0IGFjdGlvblR5cGUgPSByZXNwb25zZWRSZXN1bHQuQWN0aW9uO1xyXG4gICAgY29uc3QgcmVzcG9uc2VkUmVzdWx0SWQgPSByZXNwb25zZWRSZXN1bHRbJ0lkJ107XHJcbiAgICBjb25zdCB0ZW1wUGFyYW1zID0gWkNvbXBvbmVudEhlbHBlci5kZWVwQ2xvbmUodGhpcy5wYXJhbXMpO1xyXG4gICAgY29uc3QgY3VycmVudERhdGFDYWNoZUluZm8gPSB0aGlzLmdyaWRTZXJ2aWNlLmdlbmVyYXRlQ2FjaGVJbmZvKHRoaXMuemdyaWRiaW5kaW5nLmRhdGEpO1xyXG4gICAgY29uc3QgY3VycmVudERhdGEgPSBhd2FpdCB0aGlzLm9mZmxpbmVEYXRhYmFzZVNlcnZpY2UuZ2V0SXRlbUJ5S2V5KGN1cnJlbnREYXRhQ2FjaGVJbmZvLCBjdXJyZW50RGF0YUNhY2hlSW5mby5vZmZsaW5lRGF0YWJhc2VLZXkpO1xyXG5cclxuICAgIGlmIChjdXJyZW50RGF0YSkge1xyXG4gICAgICB0ZW1wUGFyYW1zLmZpbHRlcnMgPSBgSWQ9JHtyZXNwb25zZWRSZXN1bHRJZH1gO1xyXG5cclxuICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFjdGlvblR5cGUuRGVsZXRlKSB7XHJcbiAgICAgICAgY3VycmVudERhdGEuZGF0YS5kYXRhU2V0ID0gY3VycmVudERhdGEuZGF0YS5kYXRhU2V0LmZpbHRlcihpdGVtID0+IGl0ZW0uSWQgIT09IHBhcnNlSW50KHJlc3BvbnNlZFJlc3VsdElkKSk7XHJcblxyXG4gICAgICAgIHRoaXMuaGFuZGxlR2V0RGF0YUJpbmRpbmdDb21wbGV0ZShjdXJyZW50RGF0YS5kYXRhLCB0cnVlKTtcclxuICAgICAgICBhd2FpdCB0aGlzLm9mZmxpbmVEYXRhYmFzZVNlcnZpY2UudXBkYXRlSXRlbShjdXJyZW50RGF0YUNhY2hlSW5mbywgY3VycmVudERhdGEpO1xyXG5cclxuICAgICAgICB0aGlzLmhhbmRsZUdldERhdGFCaW5kaW5nQ29tcGxldGUoY3VycmVudERhdGEuZGF0YSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKGBJdGVtIHVwZGF0ZWQ6ICR7Y3VycmVudERhdGF9YCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy53ZWJhcGlTZXJ2aWNlLnBvc3RBcGkodGhpcy5wYWdpbmF0aW9uQXBpUG9zdFVybCwgdGVtcFBhcmFtcywgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgdHJ1ZSkuc3Vic2NyaWJlKGFzeW5jIHJlc3AgPT4ge1xyXG5cclxuICAgICAgICAgIGNvbnN0IGRhdGFiYXNlUmVjb3JkID0gcmVzcC5kYXRhU2V0WzBdO1xyXG5cclxuICAgICAgICAgIGlmIChkYXRhYmFzZVJlY29yZCkge1xyXG4gICAgICAgICAgICBpZiAoYWN0aW9uVHlwZSA9PT0gQWN0aW9uVHlwZS5VcGRhdGUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbmRleFRvVXBkYXRlID0gY3VycmVudERhdGEuZGF0YS5kYXRhU2V0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0uSWQgPT09IGRhdGFiYXNlUmVjb3JkLklkKTtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXhUb1VwZGF0ZSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCB0aGUgdXBkYXRlZCBuYW1lXHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkSXRlbSA9IHsgLi4uY3VycmVudERhdGEuZGF0YS5kYXRhU2V0W2luZGV4VG9VcGRhdGVdLCAuLi5kYXRhYmFzZVJlY29yZCB9O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIG9sZCBpdGVtIHdpdGggdGhlIHVwZGF0ZWQgb25lXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0YS5kYXRhLmRhdGFTZXRbaW5kZXhUb1VwZGF0ZV0gPSB1cGRhdGVkSXRlbTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUdldERhdGFCaW5kaW5nQ29tcGxldGUoY3VycmVudERhdGEuZGF0YSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vZmZsaW5lRGF0YWJhc2VTZXJ2aWNlLnVwZGF0ZUl0ZW0oY3VycmVudERhdGFDYWNoZUluZm8sIGN1cnJlbnREYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgSXRlbSB1cGRhdGVkOiAke2N1cnJlbnREYXRhfWApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkl0ZW0gbm90IGZvdW5kIHdpdGggSUQ6XCIsIGRhdGFiYXNlUmVjb3JkLklkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uVHlwZSA9PT0gQWN0aW9uVHlwZS5BZGQgJiYgY3VycmVudERhdGEuZ3JpZFN0YXRlLnNraXAgPCAyMCkge1xyXG4gICAgICAgICAgICAgIGN1cnJlbnREYXRhLmRhdGEuZGF0YVNldC51bnNoaWZ0KGRhdGFiYXNlUmVjb3JkKTtcclxuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUdldERhdGFCaW5kaW5nQ29tcGxldGUoY3VycmVudERhdGEuZGF0YSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vZmZsaW5lRGF0YWJhc2VTZXJ2aWNlLnVwZGF0ZUl0ZW0oY3VycmVudERhdGFDYWNoZUluZm8sIGN1cnJlbnREYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVHZXREYXRhQmluZGluZ0NvbXBsZXRlKGN1cnJlbnREYXRhLmRhdGEsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgSXRlbSB1cGRhdGVkOiAke2N1cnJlbnREYXRhfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVW5hYmxlIHRvIGdldCBkYXRhLCByZWZyZXNoIHRoZSB3aG9sZSBncmlkIGRhdGEgZnJvbSBBUElcclxuICAgICAgICAgICAgdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gVW5hYmxlIHRvIGdldCBmcm9tIGluZGV4ZWREQiBzdHJhaWdodCBnZXQgZnJvbSBBUElcclxuICAgICAgdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZnRlckRhdGFCaW5kZWQoZGF0YSkge1xyXG4gICAgLy8gYWxsb3cgdG8gY2FsbCBiYWNrIHByb2plY3QgcGFnZSBhZnRlciBkYXRhIGJpbmRlZC5cclxuICAgIGxldCBiaW5kZWRWYWx1ZSA9IHRoaXMuemdyaWRiaW5kaW5nLmRhdGFbJ0FmdGVyRGF0YUJpbmRlZCddO1xyXG4gICAgaWYgKGJpbmRlZFZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IG1lID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcyk7XHJcbiAgICAgIGxldCBjYWxsRnVuYztcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gYmluZGVkVmFsdWUubWF0Y2goL1xcYlxcKC4qL2dpKTtcclxuICAgICAgICBpZiAocGFyYW1zKSB7XHJcbiAgICAgICAgICBiaW5kZWRWYWx1ZSA9IGJpbmRlZFZhbHVlLnJlcGxhY2UocGFyYW1zWzBdLCBcIlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmluZGVkVmFsdWUgPSBiaW5kZWRWYWx1ZS5yZXBsYWNlKCdtb2RhbEdyb3VwLicsICdncm91cC4nKTtcclxuICAgICAgICBjYWxsRnVuYyA9IGV2YWwoJ21lLnpncmlkYmluZGluZy4nICsgYmluZGVkVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiRXJyb3Igd2hlbiBnZXRHcm91cFZhbHVlOiBcIixcclxuICAgICAgICAgIGV2ZW50LnRhcmdldCxcclxuICAgICAgICAgIFwiID4gRXJyb3I6IFwiLFxyXG4gICAgICAgICAgZXJyb3JcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBjb25zdCBuZXdGdW5jID0gY2FsbEZ1bmMuYmluZChtZSk7XHJcbiAgICAgICAgbmV3RnVuYyhldmVudCwgbWUuemdyaWRiaW5kaW5nLmRhdGEsIGRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJEYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncmlkLmRhdGEgPSB7IGRhdGE6IFtdLCB0b3RhbDogMCB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIGNvbHVtbiBhZ2dyZWdhdGlvbiBmb3IgdGhlIGdpdmVuIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueVtdfSBkYXRhIC0gVGhlIGRhdGEgdG8gYWdncmVnYXRlLlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWdncmVnYXRlSGFuZGxpbmcoZGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBhZ2dyZWdhdGVDb2x1bW5zID0gdGhpcy5ncmlkU2V0dGluZy5jb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLmFnZ3JlZ2F0ZVR5cGUpO1xyXG5cclxuICAgIGFnZ3JlZ2F0ZUNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IGNvbC5maWVsZDtcclxuICAgICAgY29uc3QgYWdncmVnYXRlVHlwZSA9IGNvbC5hZ2dyZWdhdGVUeXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICBsZXQgX2FnZ3JlZ2F0ZVZhbHVlID0gbnVsbDtcclxuICAgICAgc3dpdGNoIChhZ2dyZWdhdGVUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBcInRvdGFsXCI6XHJcbiAgICAgICAgY2FzZSBcInN1bVwiOlxyXG4gICAgICAgICAgX2FnZ3JlZ2F0ZVZhbHVlID0gZGF0YS5yZWR1Y2UoKHRvdGFsLCBuZXh0KSA9PiB0b3RhbCArIG5leHRbZmllbGRdLCAwKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJhdmVyYWdlXCI6XHJcbiAgICAgICAgICBfYWdncmVnYXRlVmFsdWUgPSBkYXRhLnJlZHVjZSgodG90YWwsIG5leHQpID0+IHRvdGFsICsgbmV4dFtmaWVsZF0sIDApIC8gZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiY291bnRcIjpcclxuICAgICAgICAgIF9hZ2dyZWdhdGVWYWx1ZSA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm1heFwiOlxyXG4gICAgICAgICAgX2FnZ3JlZ2F0ZVZhbHVlID0gZGF0YS5yZWR1Y2UoKHAsIGMpID0+IHBbZmllbGRdID4gY1tmaWVsZF0gPyBwIDogYylbZmllbGRdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm1pblwiOlxyXG4gICAgICAgICAgX2FnZ3JlZ2F0ZVZhbHVlID0gZGF0YS5yZWR1Y2UoKHAsIGMpID0+IHBbZmllbGRdIDwgY1tmaWVsZF0gPyBwIDogYylbZmllbGRdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbC5hZ2dyZWdhdGVWYWx1ZSA9IF9hZ2dyZWdhdGVWYWx1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgYWdncmVnYXRlIHZhbHVlcyBmb3IgY29sdW1ucyB3aXRoIGFnZ3JlZ2F0ZSB0eXBlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWdncmVnYXRlUmVzZXRWYWx1ZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFnZ3JlZ2F0ZUNvbHVtbnMgPSB0aGlzLmdyaWRTZXR0aW5nLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuYWdncmVnYXRlVHlwZSk7XHJcbiAgICBhZ2dyZWdhdGVDb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgY29sLmFnZ3JlZ2F0ZVZhbHVlID0gMDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIHBhZ2UgY2hhbmdlIGV2ZW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtQYWdlQ2hhbmdlRXZlbnR9IGV2ZW50IC0gVGhlIHBhZ2UgY2hhbmdlIGV2ZW50LlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBwYWdlQ2hhbmdlKGV2ZW50OiBQYWdlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMucGFyYW1zLnBhZ2VObyA9IHRoaXMuZ2V0UGFnZU5vKGV2ZW50LnNraXAsIHRoaXMucGFyYW1zLnBhZ2VTaXplKTtcclxuICAgIHRoaXMuc3RhdGUuc2tpcCA9IGV2ZW50LnNraXA7XHJcbiAgICB0aGlzLmNoYW5nZUV2ZW50LnBhZ2VDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIHRoaXMuZ2V0RGF0YUJpbmRpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBzb3J0IGNoYW5nZSBldmVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7U29ydERlc2NyaXB0b3JbXX0gc29ydCAtIFRoZSBzb3J0IGRlc2NyaXB0b3IgYXJyYXkuXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgcHVibGljIHNvcnRDaGFuZ2Uoc29ydDogU29ydERlc2NyaXB0b3JbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0ID0gc29ydDtcclxuICAgIHRoaXMucGFyYW1zLnNvcnRDb2x1bW5OYW1lcyA9IFtdO1xyXG4gICAgdGhpcy5wYXJhbXMuc29ydE9yZGVycyA9IFtdO1xyXG5cclxuICAgIHNvcnQuZm9yRWFjaCgoZGVzY3JpcHRvcjogU29ydERlc2NyaXB0b3IpID0+IHtcclxuICAgICAgaWYgKGRlc2NyaXB0b3IuZGlyKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc29ydE9yZGVycy5wdXNoKGRlc2NyaXB0b3IuZGlyKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdyaWRTZXR0aW5nLmNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wuZmllbGQgPT09IGRlc2NyaXB0b3IuZmllbGQpO1xyXG4gICAgICAgIGNvbnN0IHNvcnRDb2x1bW5OYW1lID0gZmllbGQudmFsdWVFeHByICE9PSB1bmRlZmluZWQgPyBmaWVsZC52YWx1ZUV4cHIgOiBkZXNjcmlwdG9yLmZpZWxkO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmFtcy5zb3J0Q29sdW1uTmFtZXMucHVzaChzb3J0Q29sdW1uTmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jaGFuZ2VFdmVudC5zb3J0Q2hhbmdlZCA9IHRydWU7XHJcbiAgICB0aGlzLmdldERhdGFCaW5kaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgZmlsdGVyIGNoYW5nZSBldmVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSBldmVudCAtIFRoZSBmaWx0ZXIgY2hhbmdlIGV2ZW50LlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBmaWx0ZXJDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wYXJhbXMucGFnZU5vID0gMDtcclxuICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcyA9IFtdO1xyXG4gICAgdGhpcy5zZXRGaWx0ZXJQYXJhbXNCeVBhcmVudFJlZklkKCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coZXZlbnQpO1xyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBldmVudC5maWx0ZXJzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ3JpZFNldHRpbmcuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGl0ZW0uZmllbGQpO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS52YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiBpdGVtLnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy56Z3JpZGJpbmRpbmcuZGF0YVsnRmlsdGVyV2l0aG91dEJyYWNrZXQnXSA/IGAke2ZpZWxkLnZhbHVlRXhwcn1gIDogYCgke2ZpZWxkLnZhbHVlRXhwcn0pYDtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0uZmlsdGVycykge1xyXG4gICAgICAgICAgaXRlbS5maWx0ZXJzLmZvckVhY2goKGZpbHRlcjogRmlsdGVyRGVzY3JpcHRvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJQYXJhbSA9IHtcclxuICAgICAgICAgICAgICBrZXk6IGZpbHRlci5maWVsZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgb3BzOiB0aGlzLm1hcEZpbHRlck9wZXJhdG9yKGZpbHRlci5vcGVyYXRvciksXHJcbiAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlci52YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiBmaWx0ZXIudmFsdWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcy5wdXNoKGZpbHRlclBhcmFtKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlclBhcmFtID0ge1xyXG4gICAgICAgICAgICBrZXk6IGZpZWxkLnZhbHVlRXhwciAhPT0gdW5kZWZpbmVkID8gZmlsdGVyVmFsdWUgOiBpdGVtLmZpZWxkLFxyXG4gICAgICAgICAgICBvcHM6IHRoaXMubWFwRmlsdGVyT3BlcmF0b3IoaXRlbS5vcGVyYXRvciksXHJcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLnBhcmFtcy5maWx0ZXJQYXJhbXMucHVzaChmaWx0ZXJQYXJhbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZUV2ZW50LmZpbHRlckNoYW5nZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5nZXREYXRhQmluZGluZygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRhdGFTdGF0ZUNoYW5nZShzdGF0ZTogRGF0YVN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JpZC5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlID0gc3RhdGU7XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZVJlc2V0VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcCBmaWx0ZXIgb3BlcmF0b3IgdG8gaXRzIGNvcnJlc3BvbmRpbmcgdmFsdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3IgLSBUaGUgZmlsdGVyIG9wZXJhdG9yLlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIG1hcHBlZCBmaWx0ZXIgb3BlcmF0b3IgdmFsdWUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtYXBGaWx0ZXJPcGVyYXRvcihvcGVyYXRvcjogYW55KSB7XHJcbiAgICBjb25zdCBvcGVyYXRvck1hcHBpbmdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgICBcImVxXCI6IFwiZXFcIixcclxuICAgICAgXCJuZXFcIjogXCJuZXFcIixcclxuICAgICAgXCJsdFwiOiBcImx0XCIsXHJcbiAgICAgIFwibHRlXCI6IFwibHRlXCIsXHJcbiAgICAgIFwiZ3RcIjogXCJndFwiLFxyXG4gICAgICBcImd0ZVwiOiBcImd0ZVwiLFxyXG4gICAgICBcInN0YXJ0c3dpdGhcIjogXCJzdGFydHN3aXRoXCIsXHJcbiAgICAgIFwiZW5kc3dpdGhcIjogXCJlbmRzd2l0aFwiLFxyXG4gICAgICBcImlzbnVsbFwiOiBcImlzbnVsbFwiLFxyXG4gICAgICBcImlzbm90bnVsbFwiOiBcImlzbm90bnVsbFwiLFxyXG4gICAgfTtcclxuICAgIC8vIEhhbmRsZSBzcGVjaWFsIGNhc2UgZm9yIFwiY29udGFpbnNcIlxyXG4gICAgaWYgKG9wZXJhdG9yID09PSBcImNvbnRhaW5zXCIgJiYgIXRoaXMuZmllbGRbJ0ZpbHRlckNvbnRhaW5zVXNpbmdFcXVhbCddKSB7XHJcbiAgICAgIHJldHVybiBcImNvbnRhaW5zXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSBtYXBwZWQgb3BlcmF0b3Igb3IgZGVmYXVsdCB0byBcIj09XCJcclxuICAgIHJldHVybiBvcGVyYXRvck1hcHBpbmdzW29wZXJhdG9yXSB8fCBcIj09XCI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhZ2VObyhzdGF0ZVNraXA6IG51bWJlciwgc3RhdGVUYWtlOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBzdGF0ZVNraXAgLyBzdGF0ZVRha2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYmVmb3JlR3JpZEdldERhdGEoZ3JvdXA6IFpHcm91cCwgbWU6IGFueSkge1xyXG4gICAgY29uc29sZS53YXJuKFwiYmVmb3JlRGF0YUJpbmRpbmcgdHJpZ2dlcmVkXCIpO1xyXG4gICAgaWYgKCFncm91cC5iZWZvcmVHcmlkR2V0RGF0YSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJncm91cC5iZWZvcmVEYXRhQmluZGluZyBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVHcmlkR2V0RGF0YShncm91cCwgbWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIGNvbHVtbkZpZWxkID0gZGF0YTogQXJyYXk8WkZpZWxkPixcclxuICAvLyBjb2x1bW5zID0gZ3JpZENvbHVtbnM6IGFueVtdLFxyXG4gIC8vIGdyb3VwID0gZ3JvdXA6IFpHcm91cCxcclxuICAvLyBjb2x1bW5Db25maWd1cmF0aW9ucyA9IGdyaWRTZXR0aW5ncz86IFpHcmlkQ29sdW1uU2V0dGluZ3NbXSxcclxuICAvLyBnZW5lcmF0ZUhpZGRlbkNvbHVtbnMgPSB1c2FibGVDb2x1bW5zPzogYW55W10sXHJcbiAgLy8gZ3JpZEF0dHJpYnV0ZXMgPSBncmlkRmllbGQ/OiBaRmllbGRcclxuXHJcbiAgcHVibGljIHNldENvbHVtbnMoY29sdW1uczogYW55W10pIHtcclxuICAgIHRoaXMuZ3JpZFNldHRpbmcuY29sdW1uRmllbGQgPSBjb2x1bW5zO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5nZXRHcmlkQ29sdW1ucyh0aGlzLmdyaWRTZXR0aW5nKTtcclxuICB9XHJcbn1cclxuIl19