@tsi-developpement/tsi-shared-ui 1.8.10 → 1.8.11

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.
@@ -49,7 +49,7 @@ export class TsiSearchComboComponent extends TsiInputBase {
49
49
  return this._bind;
50
50
  }
51
51
  set bind(value) {
52
- if (this._bind === value || !this._bind && !value)
52
+ if (this._bind === value)
53
53
  return;
54
54
  if (isNullOrEmpty(value)) {
55
55
  this._bind = null;
@@ -987,4 +987,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
987
987
  }], showUpdateButton: [{
988
988
  type: Input
989
989
  }] } });
990
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLXNlYXJjaC1jb21iby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy90c2ktc2VhcmNoLWNvbWJvL3RzaS1zZWFyY2gtY29tYm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvdHNpLXNlYXJjaC1jb21iby90c2ktc2VhcmNoLWNvbWJvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNILE9BQU8sRUFBRSxjQUFjLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU1wRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDekYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBTS9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRbkQsTUFBTSxP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UTtzQkFBaEIsS0FBSztnQkFJSyxVQUFVO3NCQUFuQixNQUFNO2dCQUNzQixnQkFBZ0I7c0JBQTVDLE1BQU07dUJBQUMsbUJBQW1CO2dCQUNqQixJQUFJO3NCQUFiLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBUUcsZUFBZTtzQkFBeEIsTUFBTTtnQkF1RkUsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBydGxNb2RlS2V5cyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0cy9sb2NhbHMuY29uc3QnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRfTW9kZXMsIEdyaWRTZWxlY3Rpb25Nb2RlLCBNb2RhbFNpemVFbnVtLCBUb29sdGlwUG9zaXRpb24gfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IENvbWJvU3RhdHVzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgU3RhdHVzTWV0YWRhdGFSZXNwb25zZSwgU3RhdHVzT3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3N0YXR1cy9jb2xvci1zdGF0dXMnO1xyXG5pbXBvcnQgeyBFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb24vZW50aXR5LWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZGFsL3RzaS1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lJbnB1dEJhc2UgfSBmcm9tICcuLi8uLi8uLi90c2ktYmFzZS90c2ktaW5wdXQtYmFzZS90c2ktaW5wdXQtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBHdWlkIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWhlbHBlcnMvZ3VpZC5oZWxwZXInO1xyXG5pbXBvcnQgeyBUeXBlUmVnaXN0cnlIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi90c2ktaGVscGVycy90eXBlLXJlZ2lzdHJ5LmhlbHBlcic7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0IH0gZnJvbSAncHJpbWVuZy9tdWx0aXNlbGVjdCc7XHJcbmltcG9ydCB7IFNlbGVjdEl0ZW1Hcm91cCB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMnO1xyXG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IERyb3Bkb3duRXh0ZXJuYWxTZWxlY3Rpb25PdXRwdXQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZHJvcGRvd24vZHJvcGRvd24tZXh0ZXJuYWwtc2VsZWN0aW9uLW91dHB1dCc7XHJcbmltcG9ydCB7IEJpbmRNb2RlIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMvYmluZC1tb2RlJztcclxuaW1wb3J0IHsgaXNOdWxsT3JFbXB0eSB9IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IERyb3Bkb3duQ2hhbmdlRXZlbnQgfSBmcm9tICdwcmltZW5nL2Ryb3Bkb3duJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnVHNpLVNlYXJjaC1Db21ibycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1zZWFyY2gtY29tYm8uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1zZWFyY2gtY29tYm8uY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaVNlYXJjaENvbWJvQ29tcG9uZW50IGV4dGVuZHMgVHNpSW5wdXRCYXNlPGFueT4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8vI3JlZ2lvbiBsb2NhbCB2YXJzXHJcbiAgcHJpdmF0ZSBfZGF0YXNvdXJjZTogYW55W10gPSBbXTtcclxuICBwcml2YXRlIF9pc0lucHV0RGF0YXNvdXJjZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3JlbG9hZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2dvdHRlbkRhdGFzb3VyY2U6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSBfYmluZD86IGFueTtcclxuICBwcml2YXRlIF9jdXJyZW50Um93SXRlbT86IGFueTtcclxuICBwdWJsaWMgZGF0YUxvYWRlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmZXJlbmNlPzogRHluYW1pY0RpYWxvZ1JlZiB8IHVuZGVmaW5lZDtcclxuICBpc0FyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzRmlsdGVyaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gKiBHcm91cGVkIGRhdGFzb3VyY2UgZm9yIHRoZSBNdWx0aVNlbGVjdCBjb21wb25lbnQuXHJcbiAqIFR3byBncm91cHMsIHdoZXJlIGVhY2ggZ3JvdXAgY29udGFpbnMgYSBsYWJlbCwgYSB2YWx1ZSwgYW5kIGFuIGFycmF5IG9mIGl0ZW1zLlxyXG4gKiBcclxuICogU3RydWN0dXJlOlxyXG4gKiBbXHJcbiAqICAgeyBsYWJlbDogJ1NlbGVjdGVkIGl0ZW1zJywgdmFsdWU6ICdzZWxlY3RlZC1pdGVtcycsIGl0ZW1zOiBbLi4uXSB9LFxyXG4gKiAgIHsgbGFiZWw6ICdBdmFpbGFibGUgaXRlbXMnLCB2YWx1ZTogJ2F2YWlsYWJsZS1pdGVtcycsIGl0ZW1zOiBbLi4uXSB9XHJcbiAqIF1cclxuICovXHJcbiAgcHJvdGVjdGVkIGdyb3VwcGVkRGF0YVNvdXJjZTogU2VsZWN0SXRlbUdyb3VwW10gPSBbXTtcclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsYWJlbE9mRWxlbWVudE5vdEZvdW5kVGV4dEtleTogc3RyaW5nID0gJ3NoYXJlZFVpLWxhYmVsT2ZFbGVtZW50Tm90Rm91bmQnO1xyXG4gIHByaXZhdGUgbGFiZWxPZkVsZW1lbnROb3RGb3VuZFRleHQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJywgWyckZXZlbnQnXSlcclxuICBvbkVudGVyS2V5KGV2ZW50OiBhbnkpIHtcclxuICAgIC8vIEhhbmRsZSB0aGUgZW50ZXIga2V5IGV2ZW50IGhlcmVcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbnB1dHNcclxuICBASW5wdXQoKSBlbGVtZW50U291cmNlVXJsPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxpc3RTb3VyY2VVcmw/OiBzdHJpbmcgfCAoKGl0ZW06IGFueSkgPT4gc3RyaW5nKTtcclxuICBASW5wdXQoKSBsaXN0U291cmNlUGFyYW1zOiBLZXlWYWx1ZTxzdHJpbmcsIGFueT5bXSA9IFtdO1xyXG4gIEBJbnB1dChcImlkLWZpZWxkXCIpIGlkRmllbGQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KFwibGFiZWwtZmllbGRcIikgbGFiZWxGaWVsZDogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NsZWFyOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSByZWxvYWREYXRhU291cmNlOiBPYnNlcnZhYmxlPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgaXNGaWx0ZXJlZD86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWxlY3RlZExhYmVsPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1heFdpZHRoOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBidXNpbmVzc0NsYXNzOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQElucHV0KCkgY29tYm9UeXBlPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN0YXR1c01ldGFkYXRhPzogU3RhdHVzTWV0YWRhdGFSZXNwb25zZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgY3VycmVudFJvd0l0ZW0oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Um93SXRlbTtcclxuICB9XHJcblxyXG4gIHNldCBjdXJyZW50Um93SXRlbSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLl9jdXJyZW50Um93SXRlbSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZ2V0IGRhdGFzb3VyY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YXNvdXJjZTtcclxuICB9XHJcblxyXG4gIHNldCBkYXRhc291cmNlKGRhdGFzb3VyY2U6IGFueVtdKSB7XHJcbiAgICB0aGlzLl9nb3R0ZW5EYXRhc291cmNlID0gZGF0YXNvdXJjZTtcclxuXHJcbiAgICBpZiAodGhpcy5fZ290dGVuRGF0YXNvdXJjZSkge1xyXG4gICAgICB0aGlzLl9tYXBHb3R0ZW5EYXRhU291cmNlVG9Mb2NhbERhdGFzb3VyY2UoKVxyXG4gICAgICB0aGlzLl9pc0lucHV0RGF0YXNvdXJjZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoXCJiaW5kXCIpIGdldCBiaW5kKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JpbmQ7XHJcbiAgfVxyXG5cclxuICBzZXQgYmluZCh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5fYmluZCA9PT0gdmFsdWUgfHwgIXRoaXMuX2JpbmQgJiYgIXZhbHVlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKGlzTnVsbE9yRW1wdHkodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuX2JpbmQgPSBudWxsO1xyXG4gICAgICB0aGlzLmlucHV0RmllbGQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX2JpbmQgPSB2YWx1ZTtcclxuICAgICAgdGhpcy5pbnB1dEZpZWxkID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuX29uQmluZFNldCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICAvKipcclxuICogTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbSBsYWJlbHMgdG8gZGlzcGxheSBkaXJlY3RseSBpbiB0aGUgTXVsdGlTZWxlY3QgaW5wdXQgZmllbGQuXHJcbiAqIElmIHRoZSB1c2VyIHNlbGVjdHMgbW9yZSB0aGFuIHRoaXMgbnVtYmVyLCB0aGUgY29tcG9uZW50IGNhbiBzaG93IGEgXCIrTlwiIG1lc3NhZ2UgaW5zdGVhZC5cclxuICogQHR5cGUge251bWJlcn1cclxuICogQGRlZmF1bHQgMVxyXG4gKi9cclxuICBASW5wdXQoKSBtYXhTZWxlY3RlZExhYmVsczogbnVtYmVyID0gMTtcclxuICBcclxuICAvKipcclxuICogTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgdG8gZGlzcGxheSBpbnNpZGUgdGhlIHRvb2x0aXAuXHJcbiAqIElmIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgZXhjZWVkcyB0aGlzIGxpbWl0LCB0aGUgdG9vbHRpcCBjYW4gZGlzcGxheSBhIFwiK04gbW9yZVwiIG1lc3NhZ2UuXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBkZWZhdWx0IDEwXHJcbiAqL1xyXG4gIEBJbnB1dCgpIHRvb2x0aXBNYXhEaXNwbGF5ZWRJdGVtczogbnVtYmVyID0gMTA7XHJcblxyXG4gIC8qKlxyXG4gKiBJbnB1dCB0byBjb25maWd1cmUgYmluZGluZyBtb2RlLlxyXG4gKlxyXG4gKiBAZGVwcmVjYXRlZCDimqDvuI8gKipGZWF0dXJlIHBsYW5uZWQqKiDigJMgY3VycmVudGx5IG5vdCB1c2VkLlxyXG4gKiBJbnRlbmRlZCBmb3IgZnV0dXJlIGVuaGFuY2VtZW50cyB0byBhbGxvdyBiaW5kaW5nIGVpdGhlciB0aGUgZnVsbCBvYmplY3Qgb3IganVzdCB0aGUga2V5LlxyXG4gKi9cclxuIEBJbnB1dCgpIGJpbmRNb2RlOiBCaW5kTW9kZSA9IEJpbmRNb2RlLkRlZmF1bHQ7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXRzXHJcbiAgQE91dHB1dCgpIGJpbmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dChcImRhdGFzb3VyY2UtbG9hZGVkXCIpIGRhdGFTb3VyY2VMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbWJvU3RhdHVzTW9kZWw+KCk7XHJcbiAgQE91dHB1dCgpIGlzTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxDb21ib1N0YXR1c01vZGVsPigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZExhYmVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIG9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIG9uU2VhcmNoQnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLlxyXG4gKlxyXG4gKiBAZGVwcmVjYXRlZCDimqDvuI8gVGVtcG9yYXJ5IGZlYXR1cmUgZm9yIGEgc3BlY2lmaWMgdXNlIGNhc2UuXHJcbiAqIEN1cnJlbnRseSBvbmx5IHVzZWQgaW4gW3NvbWUgc2NlbmFyaW9dLiBXaWxsIGJlIHJlbW92ZWQgb3IgcmVwbGFjZWQgaW4gZnV0dXJlIHVwZGF0ZXMuXHJcbiAqL1xyXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBjdG9yXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2U6IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHNpTW9kYWxTZXJ2aWNlOiBUc2lNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2h0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIF9sb2NhbGl6ZTogTG9jYWxpemVQaXBlLFxyXG4gICAgcHJvdGVjdGVkIF9jZFJlZj86IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICkge1xyXG4gICAgc3VwZXIoX2NkUmVmKTtcclxuICAgIHRoaXMubGFiZWxPZkVsZW1lbnROb3RGb3VuZFRleHQgPSB0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0odGhpcy5sYWJlbE9mRWxlbWVudE5vdEZvdW5kVGV4dEtleSkgPz8gJ1VOS05PV04gISc7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gaGFuZGxlIGxpZmVjeWNsZSBob29rc1xyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgIHRoaXMuX3JlbG9hZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGdldCBpc1N0YXR1c0NvbWJvKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tYm9UeXBlID09PSAnc3RhdHVzJztcclxuICB9XHJcblxyXG4gIGxpZ2h0ZW5Db2xvcihoZXg6IHN0cmluZyB8IHVuZGVmaW5lZCwgcGVyY2VudDogbnVtYmVyID0gNzApOiBzdHJpbmcge1xyXG4gICAgaWYgKCFoZXgpIHJldHVybiAnJztcclxuICAgIGhleCA9IGhleC5yZXBsYWNlKC9eIy8sICcnKTtcclxuXHJcbiAgICBsZXQgciA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMCwgMiksIDE2KTtcclxuICAgIGxldCBnID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygyLCA0KSwgMTYpO1xyXG4gICAgbGV0IGIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDQsIDYpLCAxNik7XHJcblxyXG4gICAgciA9IE1hdGgubWluKDI1NSwgTWF0aC5mbG9vcihyICsgKDI1NSAtIHIpICogcGVyY2VudCAvIDEwMCkpO1xyXG4gICAgZyA9IE1hdGgubWluKDI1NSwgTWF0aC5mbG9vcihnICsgKDI1NSAtIGcpICogcGVyY2VudCAvIDEwMCkpO1xyXG4gICAgYiA9IE1hdGgubWluKDI1NSwgTWF0aC5mbG9vcihiICsgKDI1NSAtIGIpICogcGVyY2VudCAvIDEwMCkpO1xyXG5cclxuICAgIGNvbnN0IG5ld0hleCA9XHJcbiAgICAgICcjJyArXHJcbiAgICAgIFtyLCBnLCBiXVxyXG4gICAgICAgIC5tYXAoeCA9PiB4LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKVxyXG4gICAgICAgIC5qb2luKCcnKTtcclxuXHJcbiAgICByZXR1cm4gbmV3SGV4O1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVhZGFibGVUZXh0Q29sb3IoaGV4OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFoZXgpIHJldHVybiAnYmxhY2snO1xyXG5cclxuICAgIGhleCA9IGhleC5yZXBsYWNlKC9eIy8sICcnKTtcclxuICAgIGNvbnN0IHIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDAsIDIpLCAxNik7XHJcbiAgICBjb25zdCBnID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygyLCA0KSwgMTYpO1xyXG4gICAgY29uc3QgYiA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoNCwgNiksIDE2KTtcclxuXHJcbiAgICBjb25zdCBicmlnaHRuZXNzID0gKHIgKiAyOTkgKyBnICogNTg3ICsgYiAqIDExNCkgLyAxMDAwO1xyXG5cclxuICAgIHJldHVybiBicmlnaHRuZXNzID4gMjMwID8gJ2JsYWNrJyA6IGAjJHtoZXh9YDtcclxuICB9XHJcblxyXG4gIGdldFN0YXR1c09wdGlvbih2YWx1ZTogc3RyaW5nKTogU3RhdHVzT3B0aW9uIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXR1c01ldGFkYXRhPy5vcHRpb25zLmZpbmQobyA9PiBvLnRyYW5zbGF0ZWRMYWJlbCA9PT0gdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgIHRoaXMuY2hlY2tJZkFkdmFuY2VkU2VhcmNoQ29tcG9uZW50RXhpc3RzKCk7XHJcbiAgICBhd2FpdCB0aGlzLmNoZWNrSWZGb3JtTmFtZUV4aXN0cygpO1xyXG4gICAgdGhpcy5faW5pdFBhcmFtZXRlcnNXaXRoRGVmYXVsdHMoKTtcclxuICAgIHRoaXMuX2luaXRSZWxvYWREYXRhU291cmNlU3Vic2NyaXB0aW9uKCk7XHJcbiAgICBhd2FpdCB0aGlzLl9pbml0aWFsTG9hZERhdGEoKTtcclxuICAgIFxyXG4gICAgbGV0IGxhbmd1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHJ0bE1vZGVLZXlzLnJ0bE1vZGVFbmFibGVkKTtcclxuICAgIFxyXG4gICAgaWYgKGxhbmd1ZSAmJiBKU09OLnBhcnNlKGxhbmd1ZSkpIHtcclxuICAgICAgdGhpcy5pc0FyID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNBciA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tYXhXaWR0aCA9IHRoaXMubWF4V2lkdGggKyAncmVtJztcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dBZGRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dDb25zdWx0QnV0dG9uPzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93VXBkYXRlQnV0dG9uPzogYm9vbGVhbjtcclxuICBzaG93QWR2YW5jZWRTZWFyY2hCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIGNoZWNrSWZBZHZhbmNlZFNlYXJjaENvbXBvbmVudEV4aXN0cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuc2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcblxyXG4gICAgICBuZXh0OiAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dBZHZhbmNlZFNlYXJjaEJ1dHRvbiA9ICEhZW50aXR5Py5hZHZhbmNlZFNlYXJjaENvbXBvbmVudDtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5zaG93QWR2YW5jZWRTZWFyY2hCdXR0b24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmRm9ybU5hbWVFeGlzdHMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgICBpZiAodGhpcy5zaG93QWRkQnV0dG9uID09PSB1bmRlZmluZWQpIHRoaXMuc2hvd0FkZEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dDb25zdWx0QnV0dG9uID09PSB1bmRlZmluZWQpIHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zaG93VXBkYXRlQnV0dG9uID09PSB1bmRlZmluZWQpIHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBoYXNGb3JtID0gISFlbnRpdHk/LmZvcm1OYW1lO1xyXG5cclxuICAgICAgICAgIGlmICghaGFzRm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dBZGRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93VXBkYXRlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPSB0aGlzLnNob3dBZGRCdXR0b247XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9IHRoaXMuc2hvd0FkZEJ1dHRvbjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnNob3dBZGRCdXR0b24gPT09IHVuZGVmaW5lZCkgdGhpcy5zaG93QWRkQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLnNob3dDb25zdWx0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93VXBkYXRlQnV0dG9uID09PSB1bmRlZmluZWQpIHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb3BlbkFkdmFuY2VkU2VhcmNoQ29tcG9uZW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5XCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uID0gISFlbnRpdHk/LmFkdmFuY2VkU2VhcmNoQ29tcG9uZW50O1xyXG4gICAgICAgICAgaWYgKCFlbnRpdHkgfHwgIWVudGl0eS5hZHZhbmNlZFNlYXJjaENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X2Zvcm1fbmFtZV9uZlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgaXNBZHZhbmNlZFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgICAgICBzZWxlY3Rpb25Nb2RlOiB0aGlzLm11bHRpcGxlID8gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGUgOiBHcmlkU2VsZWN0aW9uTW9kZS5TaW5nbGUsXHJcbiAgICAgICAgICAgICAgbW9kZTogQ29tcG9uZW50X01vZGVzLkNPTlNVTFQsXHJcbiAgICAgICAgICAgICAgY3VzdG9tRGF0YTogZW50aXR5LFxyXG4gICAgICAgICAgICAgIHNlbGVjdEtleU9ubHk6IHRoaXMubXVsdGlwbGUgPyBmYWxzZSA6IHRydWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlPy5vcGVuKFR5cGVSZWdpc3RyeUhlbHBlci5nZXRUeXBlKGVudGl0eS5hZHZhbmNlZFNlYXJjaENvbXBvbmVudCksIGNvbmYpO1xyXG5cclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZT8ub25DbG9zZS5zdWJzY3JpYmUoKHNlbGVjdGlvbjogYW55KSA9PiB0aGlzLmhhbmRsZUV4dGVybmFsU2VsZWN0aW9uKHNlbGVjdGlvbikpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgIHRoaXMuc2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5TZWFyY2hEaWFsb2coKSB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X25hbWVFbnRpdHlcIik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgaXNBZHZhbmNlZFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgICAgICBzZWxlY3Rpb25Nb2RlOiB0aGlzLm11bHRpcGxlID8gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGUgOiBHcmlkU2VsZWN0aW9uTW9kZS5TaW5nbGUsXHJcbiAgICAgICAgICAgICAgbW9kZTogQ29tcG9uZW50X01vZGVzLkNPTlNVTFQsXHJcbiAgICAgICAgICAgICAgY3VzdG9tRGF0YTogZW50aXR5LFxyXG4gICAgICAgICAgICAgIHNlbGVjdEtleU9ubHk6IHRoaXMubXVsdGlwbGUgPyBmYWxzZSA6IHRydWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgaWYgKCFlbnRpdHkgfHwgIWVudGl0eS5saXN0Q29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2UgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2U/Lm9wZW4oVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUoZW50aXR5Lmxpc3RDb21wb25lbnQpLCBjb25mKTtcclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZT8ub25DbG9zZS5zdWJzY3JpYmUoKHNlbGVjdGlvbjogYW55KSA9PiB0aGlzLmhhbmRsZUV4dGVybmFsU2VsZWN0aW9uKHNlbGVjdGlvbikpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkRWxlbWVudCgpIHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfbmFtZUVudGl0eVwiKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eUluZm8odGhpcy5idXNpbmVzc0NsYXNzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHsgbW9kZTogQ29tcG9uZW50X01vZGVzLkNSRUFURSwgY3VzdG9tRGF0YTogZW50aXR5IH0sXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgaWYgKCFlbnRpdHkgfHwgIWVudGl0eS5mb3JtTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X2Zvcm1fbmFtZV9uZlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlPy5vcGVuKFR5cGVSZWdpc3RyeUhlbHBlci5nZXRUeXBlKGVudGl0eS5mb3JtTmFtZSksIGNvbmYpO1xyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlPy5vbkNsb3NlLnN1YnNjcmliZSgoc2F2ZWRFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHNhdmVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2F2ZWRFbGVtZW50ID09PSAnb2JqZWN0JyAmJiBzYXZlZEVsZW1lbnQgIT09IG51bGwgJiYgJ3VpZCcgaW4gc2F2ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRWYWx1ZUNoYW5nZWQoc2F2ZWRFbGVtZW50Py51aWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc2F2ZWRFbGVtZW50ID09PSAnc3RyaW5nJyAmJiBHdWlkLmlzVmFsaWQoc2F2ZWRFbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kVmFsdWVDaGFuZ2VkKHNhdmVkRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc0RhdGFzb3VyY2VFbXB0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFMb2FkZWQgJiYgKCF0aGlzLmRhdGFzb3VyY2UgfHwgdGhpcy5kYXRhc291cmNlLmxlbmd0aCA9PT0gMCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFzTG9hZEVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICB1cGRhdGVFbGVtZW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5XCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmJpbmQpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwiQXVjdW4gw6lsw6ltZW50IHPDqWxlY3Rpb25uw6kgcG91ciBsYSBtaXNlIMOgIGpvdXIuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogYXN5bmMgKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCFlbnRpdHkgfHwgIWVudGl0eS5mb3JtTmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9mb3JtX25hbWVfbmZcIik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtb2RlOiBDb21wb25lbnRfTW9kZXMuRURJVCxcclxuICAgICAgICAgICAgY3VzdG9tRGF0YTogZW50aXR5LFxyXG4gICAgICAgICAgICBpZDogdGhpcy5iaW5kXHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgd2lkdGg6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLndpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLk1lZGl1bS5oZWlnaHQsXHJcbiAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2UgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2U/Lm9wZW4oVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUoZW50aXR5LmZvcm1OYW1lKSwgY29uZik7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZT8ub25DbG9zZS5zdWJzY3JpYmUoKHVwZGF0ZWRFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICh1cGRhdGVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHVwZGF0ZWRFbGVtZW50ID09PSAnb2JqZWN0JyAmJiB1cGRhdGVkRWxlbWVudCAhPT0gbnVsbCAmJiAndWlkJyBpbiB1cGRhdGVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kVmFsdWVDaGFuZ2VkKHVwZGF0ZWRFbGVtZW50Py51aWQpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB1cGRhdGVkRWxlbWVudCA9PT0gJ3N0cmluZycgJiYgR3VpZC5pc1ZhbGlkKHVwZGF0ZWRFbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kVmFsdWVDaGFuZ2VkKHVwZGF0ZWRFbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjb25zdWx0RWxlbWVudCgpIHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfbmFtZUVudGl0eVwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5iaW5kKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcIkF1Y3VuIMOpbMOpbWVudCBzw6lsZWN0aW9ubsOpIHBvdXIgbGEgY29uc3VsdGF0aW9uLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IGFzeW5jIChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghZW50aXR5IHx8ICFlbnRpdHkuZm9ybU5hbWUpIHtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mXCIpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgbW9kZTogQ29tcG9uZW50X01vZGVzLkNPTlNVTFQsXHJcbiAgICAgICAgICAgIGN1c3RvbURhdGE6IGVudGl0eSxcclxuICAgICAgICAgICAgaWQ6IHRoaXMuYmluZFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgd2lkdGg6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLndpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLk1lZGl1bS5oZWlnaHQsXHJcbiAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2UgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2U/Lm9wZW4oXHJcbiAgICAgICAgICBUeXBlUmVnaXN0cnlIZWxwZXIuZ2V0VHlwZShlbnRpdHkuZm9ybU5hbWUpLFxyXG4gICAgICAgICAgY29uZlxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZT8ub25DbG9zZS5zdWJzY3JpYmUoKF8pID0+IHtcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyZXVyIGxvcnMgZGUgbGEgcsOpY3Vww6lyYXRpb24gZGVzIGluZm9zIGQnZW50aXTDqSA6XCIsIGVycik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZSBldmVudHNcclxuICBoYW5kbGVDaGFuZ2VFdmVudChkcm9wZG93bkNoYW5nZUV2ZW50OiBEcm9wZG93bkNoYW5nZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmJpbmRWYWx1ZUNoYW5nZWQoZHJvcGRvd25DaGFuZ2VFdmVudC52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJpbmRWYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5iaW5kID0gbmV3VmFsdWU7XHJcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlXHJcbiAgICB0aGlzLmJpbmRDaGFuZ2UuZW1pdCh0aGlzLmJpbmQpO1xyXG4gICAgdGhpcy5faGFuZGxlU2VsZWN0ZWRFbGVtZW50c0xhYmVsQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hWYWx1ZUNoYW5nZWQoc2VhcmNoVmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaXNGaWx0ZXJlZCAmJiAhdGhpcy5faXNJbnB1dERhdGFzb3VyY2UpIHtcclxuICAgICAgICB0aGlzLmlzRmlsdGVyaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9sb2FkU2VydmVyU2lkZVBhZ2VkRGF0YVNvdXJjZShzZWFyY2hWYWx1ZS5maWx0ZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25PcGVuKCkge1xyXG4gICAgdGhpcy5pc0ZpbHRlcmluZyA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzRmlsdGVyZWQgfHwgdHlwZW9mIHRoaXMubGlzdFNvdXJjZVVybCA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgdGhpcy5fbG9hZERhdGFTb3VyY2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc05vUmVzdWx0QWZ0ZXJGaWx0ZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmRhdGFMb2FkZWQgJiZcclxuICAgICAgdGhpcy5kYXRhc291cmNlLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgICB0aGlzLmlzRmlsdGVyaW5nICYmXHJcbiAgICAgICF0aGlzLmhhc0xvYWRFcnJvclxyXG4gICAgKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcml2YXRlIF9sb2FkRGF0YVNvdXJjZSgpIHtcclxuICAgIGlmICghdGhpcy5faXNJbnB1dERhdGFzb3VyY2UpIHtcclxuICAgICAgaWYgKHRoaXMuaXNGaWx0ZXJlZCkge1xyXG4gICAgICAgIHRoaXMuX2xvYWRTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fbG9hZE5vdFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2UoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2Uoa2V5d29yZDogc3RyaW5nID0gXCJcIikge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5faW5pdExpc3REYXRhU291cmNlRW5kcG9pbnQoKTtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWREYXRhKHVybCwgdGhpcy5fZ2VuZXJhdGVIdHRwUGFyYW1zKGtleXdvcmQpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWROb3RTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKCkge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5faW5pdExpc3REYXRhU291cmNlRW5kcG9pbnQoKTtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWREYXRhKHVybCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWREYXRhKHVybDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5tdWx0aXBsZSlcclxuICAgIHtcclxuICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5oYXNMb2FkRXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9odHRwQ2xpZW50LmdldCh1cmwsIHBhcmFtcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2dvdHRlbkRhdGFzb3VyY2UgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuX21hcEdvdHRlbkRhdGFTb3VyY2VUb0xvY2FsRGF0YXNvdXJjZSgpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgZGF0YXNvdXJjZScsIGVycm9yKTtcclxuICAgICAgICB0aGlzLmhhc0xvYWRFcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBcGlFcnJvcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFMb2FkZWQgJiYgdGhpcy5oYXNMb2FkRXJyb3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9lbnN1cmVTZWxlY3RlZE9wdGlvbkV4aXN0cygpIHtcclxuICAgIC8vIG5vIF9lbnN1cmVTZWxlY3RlZE9wdGlvbkV4aXN0cyBmb3IgbXVsdGktc2VsZWN0XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLmJpbmQgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuZGF0YXNvdXJjZS5zb21lKHggPT4geC5pZCA9PSB0aGlzLmJpbmQpO1xyXG5cclxuICAgIGlmICghZXhpc3RzKVxyXG4gICAge1xyXG4gICAgICBhd2FpdCB0aGlzLl9sb2FkQmluZEVsZW1lbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaW5kU2VsZWN0ZWRPcHRpb24gPSB0aGlzLmRhdGFzb3VyY2UuZmluZCgoaTogYW55KSA9PiBpLmlkID09IHRoaXMuYmluZCk7ICAgIFxyXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChmaW5kU2VsZWN0ZWRPcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbG9hZEJpbmRFbGVtZW50KCkge1xyXG4gICAgLy8gbm8gX2xvYWRCaW5kRWxlbWVudCBmb3IgbXVsdGktc2VsZWN0XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkgcmV0dXJuO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmlzRWxlbWVudFNvdXJjZVVybFZhbGlkKCkgfHwgIXRoaXMuYmluZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZGF0YTogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5faHR0cENsaWVudC5nZXQodGhpcy5faW5pdEVsZW1lbnRFbmRwb2ludCgpKSk7XHJcblxyXG4gICAgICBpZiAoIWRhdGEpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHtcclxuICAgICAgICBpZDogZGF0YVt0aGlzLmlkRmllbGRdLFxyXG4gICAgICAgIGxhYmVsOiBkYXRhW3RoaXMubGFiZWxGaWVsZF1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5kYXRhc291cmNlLnNvbWUoeCA9PiB4LmlkID09PSBvcHRpb24uaWQpKSB7XHJcbiAgICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IFsuLi50aGlzLmRhdGFzb3VyY2UsIG9wdGlvbl07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZS5lbWl0KG9wdGlvbi5sYWJlbCk7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZUxvYWRlZC5lbWl0KCk7XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgc2VsZWN0ZWQgZWxlbWVudCcsIGVycm9yKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb21wYXJlRnVuY3Rpb24oKTogKGE6IGFueSwgYjogYW55KSA9PiBudW1iZXIge1xyXG4gICAgcmV0dXJuIChhLCBiKSA9PiB7XHJcbiAgICAgIGlmIChhLmxhYmVsID4gYi5sYWJlbCkgeyByZXR1cm4gMTsgfVxyXG4gICAgICBpZiAoYS5sYWJlbCA8IGIubGFiZWwpIHsgcmV0dXJuIC0xOyB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNMaXN0U291cmNlVXJsVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMubGlzdFNvdXJjZVVybCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ2xpc3RTb3VyY2VVcmwgdXJsIG5vdCBwcm92aWRlZCcpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNFbGVtZW50U291cmNlVXJsVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZWxlbWVudFNvdXJjZVVybCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ2VsZW1lbnRTb3VyY2VVcmwgbm90IGRlZmluZWQnKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdFBhcmFtZXRlcnNXaXRoRGVmYXVsdHMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pZEZpZWxkID09IHVuZGVmaW5lZCB8fCB0aGlzLmlkRmllbGQgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy5pZEZpZWxkID0gXCJpZFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmxhYmVsRmllbGQgPT0gdW5kZWZpbmVkIHx8IHRoaXMubGFiZWxGaWVsZCA9PT0gXCJcIikge1xyXG4gICAgICB0aGlzLmxhYmVsRmllbGQgPSBcImxpYmVsbGVcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRFbGVtZW50RW5kcG9pbnQoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmJpbmQpIHtcclxuICAgICAgcmV0dXJuIGVuY29kZVVSSShgJHt0aGlzLmVsZW1lbnRTb3VyY2VVcmx9LyR7dGhpcy5iaW5kfWApO1xyXG4gICAgfVxyXG4gICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ25vIGJpbmQgaW5wdXQgd2FzIHByb3ZpZGVkLCBjYW5ub3QgY3JlYXRlIGJpbmRFbGVtZW50VXJsJylcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRMaXN0RGF0YVNvdXJjZUVuZHBvaW50KCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLmxpc3RTb3VyY2VVcmwpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdMaXN0IHNvdXJjZSBVUkwgbm90IHByb3ZpZGVkJyk7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgdGhpcy5saXN0U291cmNlVXJsID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgcmV0dXJuIGVuY29kZVVSSShgJHt0aGlzLmxpc3RTb3VyY2VVcmx9YCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHRoaXMubGlzdFNvdXJjZVVybCA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgbGV0IHRlbXBVcmwgPSB0aGlzLmxpc3RTb3VyY2VVcmwodGhpcy5jdXJyZW50Um93SXRlbSlcclxuICAgICAgcmV0dXJuIGVuY29kZVVSSShgJHt0ZW1wVXJsfWApXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9pbml0aWFsTG9hZERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5faXNJbnB1dERhdGFzb3VyY2UpIHtcclxuICAgICAgdGhpcy5fbWFwR290dGVuRGF0YVNvdXJjZVRvTG9jYWxEYXRhc291cmNlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNGaWx0ZXJlZCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2xvYWRCaW5kRWxlbWVudCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2xvYWROb3RTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX29uQmluZFNldCgpIHtcclxuICAgIGlmICh0aGlzLl9pc0lucHV0RGF0YXNvdXJjZSkge1xyXG4gICAgICBpZih0aGlzLm11bHRpcGxlKSByZXR1cm47XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuZGF0YXNvdXJjZS5maW5kKChpOiBhbnkpID0+IGkuaWQgPT0gdGhpcy5iaW5kKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgYXdhaXQgdGhpcy5fZW5zdXJlU2VsZWN0ZWRPcHRpb25FeGlzdHMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZEFsbERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5pc0ZpbHRlcmVkKSB7XHJcbiAgICAgIHRoaXMuX2xvYWRTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fbG9hZE5vdFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRSZWxvYWREYXRhU291cmNlU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMucmVsb2FkRGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLl9yZWxvYWRTdWJzY3JpcHRpb24gPSB0aGlzLnJlbG9hZERhdGFTb3VyY2Uuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgKGRhdGEpID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhICE9IHVuZGVmaW5lZCAmJiBkYXRhICE9IG51bGwgJiYgZGF0YSAhPSAnJykge1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdFNvdXJjZVVybCA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkQWxsRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IGRhdGFcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlICBfbWFwR290dGVuRGF0YVNvdXJjZVRvTG9jYWxEYXRhc291cmNlKCk6IHZvaWQge1xyXG4gICAgXHJcbiAgICBsZXQgdGVtcEFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLl9nb3R0ZW5EYXRhc291cmNlKSkge1xyXG5cclxuICAgICAgdGhpcy5fZ290dGVuRGF0YXNvdXJjZS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgaWQ6IGVsZW1lbnRbdGhpcy5pZEZpZWxkXSxcclxuICAgICAgICAgIGxhYmVsOiBlbGVtZW50W3RoaXMubGFiZWxGaWVsZF1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0ZW1wQXJyYXkucHVzaChvYmopO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLl9kYXRhc291cmNlID0gdGVtcEFycmF5O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSB0aGlzLl9kaXN0aW5jdEJ5SWQoWy4uLnRoaXMuZGF0YXNvdXJjZSwgLi4udGVtcEFycmF5XSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydCkge1xyXG4gICAgICB0aGlzLl9kYXRhc291cmNlLnNvcnQodGhpcy5fY29tcGFyZUZ1bmN0aW9uKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2VMb2FkZWQuZW1pdCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5faXNJbnB1dERhdGFzb3VyY2UpIHsgXHJcbiAgICAgIHRoaXMuX2Vuc3VyZVNlbGVjdGVkT3B0aW9uRXhpc3RzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5jYWxjdWxhdGVHcm91cHBlZERhdGFTb3VyY2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dlbmVyYXRlSHR0cFBhcmFtcyhrZXl3b3JkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBhbnkge1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCd2YWx1ZScsIGtleXdvcmQgPz8gJycpO1xyXG5cclxuICAgIGlmKCF0aGlzLmxpc3RTb3VyY2VQYXJhbXMgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5saXN0U291cmNlUGFyYW1zKSB8fCB0aGlzLmxpc3RTb3VyY2VQYXJhbXMubGVuZ3RoIDwgMSlcclxuICAgIHtcclxuICAgICAgcmV0dXJuIHsgcGFyYW1zOiBwYXJhbXMgfTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxpc3RTb3VyY2VQYXJhbXMuZmlsdGVyKChwOiBLZXlWYWx1ZTxzdHJpbmcsIGFueT4pID0+IHAudmFsdWUgIT0gbnVsbCAmJiBwLnZhbHVlICE9IHVuZGVmaW5lZClcclxuICAgIC5mb3JFYWNoKChwOiBLZXlWYWx1ZTxzdHJpbmcsIGFueT4pID0+IHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZChwLmtleSwgcC52YWx1ZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4geyBwYXJhbXM6IHBhcmFtcyB9O1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hDb21ib0NsaWNrKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25DbGljay5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBFdmVudCBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBNdWx0aVNlbGVjdCBtb2RlbCBjaGFuZ2VzLlxyXG4gKiBVcGRhdGVzIHRoZSBib3VuZCB2YWx1ZSBhbmQgcmVjYWxjdWxhdGVzIHRoZSBncm91cGVkIGRhdGFzb3VyY2UgZm9yIHByb3BlciByZW5kZXJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBuZXdWYWx1ZSAtIFRoZSBuZXcgdmFsdWUgZW1pdHRlZCBieSB0aGUgTXVsdGlTZWxlY3QgY29tcG9uZW50LlxyXG4gKi9cclxuICBvbk11bHRpU2VsZWN0TW9kZWxDaGFuZ2UobmV3VmFsdWU6IG9iamVjdCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuYmluZFZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5jYWxjdWxhdGVHcm91cHBlZERhdGFTb3VyY2UoKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAqIFJldHVybnMgYSBkaXN0aW5jdCBhcnJheSBvZiBpdGVtcyBiYXNlZCBvbiB0aGVpciBgaWRgIHByb3BlcnR5LlxyXG4gKiBVc2VmdWwgdG8gcmVtb3ZlIGR1cGxpY2F0ZXMgZnJvbSB0aGUgZGF0YXNvdXJjZSBvciBzZWxlY3RlZCBpdGVtcyBsaXN0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheSAtIEFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBhbiBgaWRgIHByb3BlcnR5LlxyXG4gKiBAcmV0dXJucyB7YW55W119IEFycmF5IG9mIHVuaXF1ZSBpdGVtcyBieSBgaWRgLlxyXG4gKi9cclxuICBwcml2YXRlIF9kaXN0aW5jdEJ5SWQoYXJyYXk6IGFueVtdKTogYW55W11cclxuICB7XHJcbiAgICBpZiAoIWFycmF5KSByZXR1cm4gW107XHJcblxyXG4gICAgY29uc3QgZGlzdGluY3QgPSBBcnJheS5mcm9tKFxyXG4gICAgICBuZXcgTWFwKGFycmF5Lm1hcChpdGVtID0+IFtpdGVtLmlkLCBpdGVtXSkpLnZhbHVlcygpXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBkaXN0aW5jdDtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAqIFRyYWNrQnkgZnVuY3Rpb24gZm9yIEFuZ3VsYXIgbmdGb3IgbG9vcHMuXHJcbiAqIEhlbHBzIEFuZ3VsYXIgZWZmaWNpZW50bHkgdHJhY2sgbGlzdCBpdGVtcyBieSBhIHVuaXF1ZSBpZGVudGlmaWVyLCBhdm9pZGluZyB1bm5lY2Vzc2FyeSByZS1yZW5kZXJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIEluZGV4IG9mIHRoZSBpdGVtIGluIHRoZSBhcnJheS5cclxuICogQHBhcmFtIHthbnl9IGl0ZW0gLSBJdGVtIG9iamVjdCBjb250YWluaW5nIGFuIGBpZGAuXHJcbiAqIEByZXR1cm5zIHthbnl9IFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgaXRlbSAoaXRlbS5pZCkuXHJcbiAqL1xyXG4gIHRyYWNrQnlJZChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIGl0ZW0uaWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUmV0dXJucyB0aGUgdG9wIE4gc2VsZWN0ZWQgb3B0aW9ucyB0byBkaXNwbGF5IGluIHRoZSB0b29sdGlwLlxyXG4gKiBMaW1pdHMgdGhlIG51bWJlciBvZiBpdGVtcyBzaG93biB0byBgdG9vbHRpcE1heERpc3BsYXllZEl0ZW1zYCBmb3IgcmVhZGFiaWxpdHkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7TXVsdGlTZWxlY3R9IG11bHRpU2VsZWN0IC0gUmVmZXJlbmNlIHRvIHRoZSBQcmltZU5HIE11bHRpU2VsZWN0IGNvbXBvbmVudC5cclxuICogQHJldHVybnMge2FueVtdfSBBcnJheSBvZiBzZWxlY3RlZCBpdGVtcywgbGltaXRlZCB0byBgdG9vbHRpcE1heERpc3BsYXllZEl0ZW1zYC5cclxuICovXHJcbiAgZ2V0VG9wU2VsZWN0ZWRPcHRpb25zKG11bHRpU2VsZWN0OiBNdWx0aVNlbGVjdCk6IGFueVtdIHtcclxuICAgIGlmKCFtdWx0aVNlbGVjdCB8fCAhQXJyYXkuaXNBcnJheShtdWx0aVNlbGVjdC5zZWxlY3RlZE9wdGlvbnMpIHx8IG11bHRpU2VsZWN0LnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPCAxKSByZXR1cm4gW107XHJcbiAgXHJcbiAgICByZXR1cm4gbXVsdGlTZWxlY3Quc2VsZWN0ZWRPcHRpb25zLnNsaWNlKDAsIHRoaXMudG9vbHRpcE1heERpc3BsYXllZEl0ZW1zKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGdyb3VwZWQgZGF0YXNvdXJjZSBmb3IgdGhlIE11bHRpU2VsZWN0IGRyb3Bkb3duLlxyXG4gKiBDcmVhdGVzIHR3byBncm91cHM6XHJcbiAqIDEuIFwiU2VsZWN0ZWQgaXRlbXNcIiDigJQgaXRlbXMgY3VycmVudGx5IHNlbGVjdGVkIGJ5IHRoZSB1c2VyLlxyXG4gKiAyLiBcIkF2YWlsYWJsZSBpdGVtc1wiIOKAlCBpdGVtcyBub3Qgc2VsZWN0ZWQgeWV0LlxyXG4gKlxyXG4gKiBUaGUgZ3JvdXBlZCBkYXRhc291cmNlIGFsbG93czpcclxuICogLSBTZWxlY3RlZCBpdGVtcyB0byBiZSBwaW5uZWQgb24gdG9wIGZvciBlYXN5IG1hbmFnZW1lbnQuXHJcbiAqIC0gQXZhaWxhYmxlIGl0ZW1zIHRvIHJlbWFpbiBpbiB0aGVpciBvcmlnaW5hbCBvcmRlci5cclxuICogLSBNdWx0aS1sYW5ndWFnZSBzdXBwb3J0IHVzaW5nIHRoZSBgX2xvY2FsaXplYCBzZXJ2aWNlLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBVcGRhdGVzIGB0aGlzLmdyb3VwcGVkRGF0YVNvdXJjZWAgd2l0aCB0aGUgbGF0ZXN0IGdyb3VwZWQgc3RydWN0dXJlLlxyXG4gKi9cclxuICBwcml2YXRlIGNhbGN1bGF0ZUdyb3VwcGVkRGF0YVNvdXJjZSgpOiB2b2lkIHtcclxuICAgIGxldCBncm91cHMgOiBTZWxlY3RJdGVtR3JvdXBbXSA9IFtdO1xyXG5cclxuICAgIGxldCBpc0JpbmRWYWxpZEFycmF5IDogYm9vbGVhbiA9IHRoaXMuYmluZCAmJiBBcnJheS5pc0FycmF5KHRoaXMuYmluZCkgJiYgdGhpcy5iaW5kLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBzZWxlY3RlZElkcyA9IG5ldyBTZXQoaXNCaW5kVmFsaWRBcnJheSA/IHRoaXMuYmluZCA6IFtdKTtcclxuXHJcbiAgICAvLyBTZWxlY3RlZCBpdGVtc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZGF0YXNvdXJjZS5maWx0ZXIoaXRlbSA9PiBzZWxlY3RlZElkcy5oYXMoaXRlbS5pZCkpO1xyXG4gICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBncm91cHMucHVzaCh7XHJcbiAgICAgICAgbGFiZWw6IHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybSgnc2hhcmVkX2NvbXBvbmVudF9tdWx0aXNlbGVjdF9zZWxlY3RlZF9ncm91cCcpLFxyXG4gICAgICAgIHZhbHVlOiAnc2VsZWN0ZWQtaXRlbXMnLFxyXG4gICAgICAgIGl0ZW1zOiBzZWxlY3RlZEl0ZW1zXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEF2YWlsYWJsZSAobm90IHNlbGVjdGVkKSBpdGVtc1xyXG4gICAgY29uc3QgYXZhaWxhYmxlSXRlbXMgPSB0aGlzLmRhdGFzb3VyY2UuZmlsdGVyKGl0ZW0gPT4gIXNlbGVjdGVkSWRzLmhhcyhpdGVtLmlkKSk7XHJcbiAgICBpZiAoYXZhaWxhYmxlSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBncm91cHMucHVzaChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsYWJlbDogdGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKCdzaGFyZWRfY29tcG9uZW50X211bHRpc2VsZWN0X2F2YWlsYWJsZV9ncm91cCcpLFxyXG4gICAgICAgICAgdmFsdWU6ICdhdmFpbGFibGUtaXRlbXMnLFxyXG4gICAgICAgICAgaXRlbXM6IGF2YWlsYWJsZUl0ZW1zXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ncm91cHBlZERhdGFTb3VyY2UgPSBncm91cHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbGVtZW50J3MgY29udGVudCBvdmVyZmxvd3MgaXRzIHZpc2libGUgd2lkdGguXHJcbiAqIFVzZWQgdG8gY29uZGl0aW9uYWxseSBlbmFibGUgdG9vbHRpcCBvbmx5IHdoZW4gZWxsaXBzaXMgaXMgYXBwbGllZC5cclxuICovXHJcbiAgaXNUZXh0T3ZlcmZsb3dpbmcoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgIGlmICghZWxlbWVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIGVsZW1lbnQuc2Nyb2xsV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICogQ29tcHV0ZXMgYW5kIGVtaXRzIHRoZSBsYWJlbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZWxlbWVudChzKS5cclxuICpcclxuICogVGhpcyBtZXRob2QgaW5zcGVjdHMgdGhlIGN1cnJlbnQgYGJpbmRgIHZhbHVlIGFuZCB0aGUgYGRhdGFzb3VyY2VgIHRvIGRldGVybWluZVxyXG4gKiB0aGUgbGFiZWwocykgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQocykuIFRoZSBiZWhhdmlvciBkaWZmZXJzIGRlcGVuZGluZyBvbiB3aGV0aGVyXHJcbiAqIHRoZSBjb21wb25lbnQgaXMgaW4gc2luZ2xlIG9yIG11bHRpcGxlIHNlbGVjdGlvbiBtb2RlOlxyXG4gKlxyXG4gKiAtICoqTXVsdGlwbGUgc2VsZWN0aW9uIChgbXVsdGlwbGUgPSB0cnVlYCkqKlxyXG4gKiAgIC0gSWYgZXhhY3RseSBvbmUgZWxlbWVudCBpcyBzZWxlY3RlZCwgaXRzIGxhYmVsIGlzIGVtaXR0ZWQuXHJcbiAqICAgLSBJZiBtdWx0aXBsZSBlbGVtZW50cyBhcmUgc2VsZWN0ZWQsIHRoZWlyIGxhYmVscyBhcmUgZm9ybWF0dGVkIGFzIGEgc3RyaW5nXHJcbiAqICAgICBhcnJheSByZXByZXNlbnRhdGlvbjogYFtcIkxhYmVsMVwiLCBcIkxhYmVsMlwiLCAuLi5dYC5cclxuICpcclxuICogLSAqKlNpbmdsZSBzZWxlY3Rpb24gKGBtdWx0aXBsZSA9IGZhbHNlYCkqKlxyXG4gKiAgIC0gVGhlIGxhYmVsIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IGlzIGVtaXR0ZWQgaWYgaXQgZXhpc3RzIGluIHRoZSBkYXRhc291cmNlLlxyXG4gKlxyXG4gKiBJZiBhIHZhbGlkIGxhYmVsIGlzIHJlc29sdmVkLCB0aGUgbWV0aG9kIGVtaXRzIHRoZSByZXN1bHQgdGhyb3VnaFxyXG4gKiB0aGUgYHNlbGVjdGVkTGFiZWxDaGFuZ2VgIGV2ZW50IGVtaXR0ZXIuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIC0gYGJpbmRgIHJlcHJlc2VudHMgdGhlIHNlbGVjdGVkIGlkIChzaW5nbGUgbW9kZSkgb3IgYW4gYXJyYXkgb2YgaWRzIChtdWx0aXBsZSBtb2RlKS5cclxuICogLSBgZGF0YXNvdXJjZWAgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBlbGVtZW50cyB3aXRoIGF0IGxlYXN0IGBpZGAgYW5kIGBsYWJlbGAgcHJvcGVydGllcy5cclxuICpcclxuICogQHByaXZhdGVcclxuICovXHJcbiAgcHJpdmF0ZSBfaGFuZGxlU2VsZWN0ZWRFbGVtZW50c0xhYmVsQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgbGV0IHNlbGVjdGlvbkxhYmVsOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHRoaXMuYmluZCkpIHtcclxuICAgICAgbGV0IHNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLmRhdGFzb3VyY2UuZmlsdGVyKGUgPT4gdGhpcy5iaW5kLmluY2x1ZGVzKGUuaWQpKTtcclxuXHJcbiAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PSAxKVxyXG4gICAgICB7XHJcbiAgICAgICAgc2VsZWN0aW9uTGFiZWwgPSBzZWxlY3RlZEVsZW1lbnRzWzBdLmxhYmVsO1xyXG4gICAgICB9ICAgICAgXHJcbiAgICAgIGVsc2UgaWYgKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID4gMSlcclxuICAgICAge1xyXG4gICAgICAgIHNlbGVjdGlvbkxhYmVsID0gYFske3NlbGVjdGVkRWxlbWVudHMubWFwKGUgPT4gYFwiJHtlLmxhYmVsfVwiYCkuam9pbignLCAnKX1dYDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBzZWxlY3RlZEVsZW1lbnQ6IGFueSA9IHRoaXMuZGF0YXNvdXJjZS5maW5kKGUgPT4gZS5pZCA9PSB0aGlzLmJpbmQpO1xyXG5cclxuICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCkge1xyXG4gICAgICAgIHNlbGVjdGlvbkxhYmVsID0gc2VsZWN0ZWRFbGVtZW50LmxhYmVsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkxhYmVsKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZS5lbWl0KHNlbGVjdGlvbkxhYmVsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc3RpbmN0KHZhbHVlczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQodmFsdWVzKV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUV4dGVybmFsU2VsZWN0aW9uKGRyb3Bkb3duRXh0ZXJuYWxTZWxlY3Rpb25PdXRwdXQ6IERyb3Bkb3duRXh0ZXJuYWxTZWxlY3Rpb25PdXRwdXQpOiB2b2lkIHtcclxuICAgIGlmICghZHJvcGRvd25FeHRlcm5hbFNlbGVjdGlvbk91dHB1dCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBzZWxlY3Rpb24gPSBkcm9wZG93bkV4dGVybmFsU2VsZWN0aW9uT3V0cHV0Lml0ZW1zO1xyXG4gICAgbGV0IHNlbGVjdGlvbktleSA9IGRyb3Bkb3duRXh0ZXJuYWxTZWxlY3Rpb25PdXRwdXQuaXRlbUtleVByb3BlcnR5TmFtZTtcclxuXHJcbiAgICAvLyBIYW5kbGUgbXVsdGlwbGUgbW9kZSBzZWxlY3Rpb25cclxuICAgIGlmICh0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkoc2VsZWN0aW9uKSAmJiBzZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgbGV0IG5ld0l0ZW1zOiBhbnlbXSA9IHNlbGVjdGlvblxyXG4gICAgICAgIC5maWx0ZXIoaSA9PiAhdGhpcy5kYXRhc291cmNlLnNvbWUocyA9PiBzLmlkID09IGlbc2VsZWN0aW9uS2V5XSkpO1xyXG5cclxuICAgICAgaWYgKG5ld0l0ZW1zICYmIG5ld0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyBmb3JtYXQgc2VsZWN0ZWQgaXRlbXNcclxuICAgICAgICBsZXQgbGFiZWxQcm9wTmFtZSA9IHRoaXMuZ2V0QmVzdExhYmVsUHJvcGVydHlOYW1lKHNlbGVjdGlvblswXSk7XHJcbiAgICAgICAgbGV0IHRlbXBBcnJheTogYW55W10gPSBuZXdJdGVtcy5tYXAoKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IGVsZW1lbnRbc2VsZWN0aW9uS2V5XSxcclxuICAgICAgICAgICAgbGFiZWw6IChsYWJlbFByb3BOYW1lIGluIGVsZW1lbnQpID8gZWxlbWVudFtsYWJlbFByb3BOYW1lXSA6IHRoaXMubGFiZWxPZkVsZW1lbnROb3RGb3VuZFRleHRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gYXBlbmQgc2VsZWN0ZWQgaXRlbXMgdG8gRGF0YXNvdXJjZVxyXG4gICAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSB0aGlzLl9kaXN0aW5jdEJ5SWQoWy4uLnRoaXMuZGF0YXNvdXJjZSwgLi4udGVtcEFycmF5XSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNvcnQpIHtcclxuICAgICAgICAgIHRoaXMuX2RhdGFzb3VyY2Uuc29ydCh0aGlzLl9jb21wYXJlRnVuY3Rpb24oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbmV3U2VsZWN0ZWRJdGVtc0lkczogYW55W10gPSBzZWxlY3Rpb24ubWFwKGkgPT4gaVtzZWxlY3Rpb25LZXldKTtcclxuICAgICAgbGV0IHNlbGVjdGVkSXRlbXNJZHM6IGFueVtdID0gdGhpcy5kaXN0aW5jdChbLi4uKHRoaXMuYmluZCA/IHRoaXMuYmluZCA6IFtdKSwgLi4ubmV3U2VsZWN0ZWRJdGVtc0lkc10pO1xyXG4gICAgICB0aGlzLm9uTXVsdGlTZWxlY3RNb2RlbENoYW5nZShzZWxlY3RlZEl0ZW1zSWRzKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBIYW5kbGUgc2lnbmxlIG1vZGUgc2VsZWN0aW9uXHJcbiAgICAgIHRoaXMuYmluZFZhbHVlQ2hhbmdlZChzZWxlY3Rpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBsYWJlbFByb3BlcnR5TmFtZVJvb3RTZWdtZW50OiBzdHJpbmcgPSAnbGliZWxsZSc7XHJcbiAgLyoqXHJcbiAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IHByb3BlcnR5IChhbHBoYWJldGljYWxseSkgXHJcbiAqIHdob3NlIG5hbWUgY29udGFpbnMgJ2xhYmVsJyAoY2FzZS1pbnNlbnNpdGl2ZSkgZnJvbSBhIGdpdmVuIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iaiAtIFRoZSBzb3VyY2Ugb2JqZWN0IChjYW4gYmUgb2YgdHlwZSBhbnkpXHJcbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgcHJvcGVydHksIG9yIHVuZGVmaW5lZCBpZiBub25lIGZvdW5kXHJcbiAqL1xyXG4gIHByaXZhdGUgZ2V0Rmlyc3RMYWJlbFByb3BlcnR5TmFtZShvYmo6IGFueSk6IGFueSB7XHJcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopXHJcbiAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMubGFiZWxQcm9wZXJ0eU5hbWVSb290U2VnbWVudCkpXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpXHJcbiAgICAgIC5tYXAoa2V5ID0+IG9ialtrZXldKVswXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmVzdExhYmVsUHJvcGVydHlOYW1lKG9iamVjdDogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmxhYmVsRmllbGQ7XHJcblxyXG4gICAgLy8gVE9ETywgQEhhc3Nlbiwgw6AgcmV2b2lyIHBsdXMgdGFyZC5cclxuICAgIGxldCBiZXN0TGFiZWxQcm9wZXJ0eU5hbWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIGlmICh0aGlzLmxhYmVsRmllbGQgaW4gb2JqZWN0KSBiZXN0TGFiZWxQcm9wZXJ0eU5hbWUgPSB0aGlzLmxhYmVsRmllbGQ7XHJcbiAgICBlbHNlIGlmICh0aGlzLmxhYmVsUHJvcGVydHlOYW1lUm9vdFNlZ21lbnQgaW4gb2JqZWN0KSBiZXN0TGFiZWxQcm9wZXJ0eU5hbWUgPSB0aGlzLmxhYmVsUHJvcGVydHlOYW1lUm9vdFNlZ21lbnQ7XHJcbiAgICBlbHNlIGJlc3RMYWJlbFByb3BlcnR5TmFtZSA9IHRoaXMuZ2V0Rmlyc3RMYWJlbFByb3BlcnR5TmFtZShvYmplY3QpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKGBbTGFiZWxGaWVsZCA6ICR7dGhpcy5sYWJlbEZpZWxkfV0gVlMgW0Jlc3RMYWJlbFByb3BlcnR5TmFtZSA6ICR7YmVzdExhYmVsUHJvcGVydHlOYW1lfV1gKTtcclxuICAgIHJldHVybiBiZXN0TGFiZWxQcm9wZXJ0eU5hbWU7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG59IiwiPGRpdiAqbmdJZj1cIiFtdWx0aXBsZTsgZWxzZSBtdWx0aVNlbGVjdFwiIGNsYXNzPVwiZmxleFwiPlxyXG4gIDxwLWRyb3Bkb3duIFxyXG4gICAgW29wdGlvbnNdPVwiZGF0YXNvdXJjZVwiXHJcbiAgICBbbmdNb2RlbF09XCJiaW5kXCJcclxuICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxyXG4gICAgb3B0aW9uVmFsdWU9XCJpZFwiXHJcbiAgICBbbG9hZGluZ109XCIhZGF0YUxvYWRlZFwiXHJcbiAgICBmaWx0ZXJCeT1cImxhYmVsXCIgXHJcbiAgICBbZmlsdGVyXT1cInRydWVcIiBcclxuICAgIFthdXRvRGlzcGxheUZpcnN0XT1cImZhbHNlXCJcclxuICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcclxuICAgIFtzaG93Q2xlYXJdPVwic2hvd0NsZWFyXCIgXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgKG9uQ2hhbmdlKT1cImhhbmRsZUNoYW5nZUV2ZW50KCRldmVudClcIlxyXG4gICAgKG9uU2hvdyk9XCJvbk9wZW4oKVwiIChvbkZpbHRlcik9XCJzZWFyY2hWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiIChvbkNsaWNrKT1cIm9uU2VhcmNoQ29tYm9DbGljaygkZXZlbnQpXCJcclxuICAgIFtzdHlsZV09XCJ7J21heC13aWR0aCc6IG1heFdpZHRoLCAnd2lkdGgnOicxMDAlJywgJ2hlaWdodCc6ICcxLjdyZW0nfVwiXHJcbiAgICBbbmdDbGFzc109XCJpc0FyID8gJ3AtZHJvcGRvd24tY2xlYXItaWNvbkFSJzogJ3AtZHJvcGRvd24tY2xlYXItaWNvbkZSJ1wiXHJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJcIiBcclxuICAgIGNsYXNzPVwie3tteVN0eWxlQ2xhc3N9fVwiIFxyXG4gICAgc3R5bGVDbGFzcz1cInt7bXlTdHlsZUNsYXNzfX0gYm9yZGVyLXJhZGl1cy03IHt7dmFsaWRhdGlvblN0YXR1c0Nzc0NsYXNzfX1cIiBcclxuICAgIGFwcGVuZFRvPVwiYm9keVwiPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWhlYWRlciBmbGV4IGdhcC0xIHB0LTIgcHgtMlwiPlxyXG4gICAgICAgIDxUc2ktQnV0dG9uICpuZ0lmPVwic2hvd1NlYXJjaEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktc2VhcmNoXCIgdG9vbHRpcFRleHQ9XCJzaGFyZWRVaS1zZWFyY2hDb21iby1hY3Rpb24tc2VhcmNoXCJcclxuICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLkJvdHRvbVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1wcmltYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIiAoY2xpY2spPVwib3BlblNlYXJjaERpYWxvZygpXCI+XHJcbiAgICAgICAgPC9Uc2ktQnV0dG9uPlxyXG5cclxuICAgICAgICA8VHNpLUJ1dHRvbiAqbmdJZj1cInNob3dBZHZhbmNlZFNlYXJjaEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktc29ydC1hbW91bnQtZG93blwiIHRvb2x0aXBUZXh0PVwic2hhcmVkVWktc2VhcmNoQ29tYm8tYWN0aW9uLWFkdmFuY2VkU2VhcmNoXCJcclxuICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLkJvdHRvbVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkFkdmFuY2VkU2VhcmNoQ29tcG9uZW50KClcIj5cclxuICAgICAgICA8L1RzaS1CdXR0b24+XHJcblxyXG4gICAgICAgIDxUc2ktQnV0dG9uICpuZ0lmPVwic2hvd0FkZEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktcGx1c1wiIHRvb2x0aXBUZXh0PVwic2hhcmVkVWktc2VhcmNoQ29tYm8tYWN0aW9uLWFkZFwiXHJcbiAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Cb3R0b21cIiBzdHlsZUNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCIgKGNsaWNrKT1cImFkZEVsZW1lbnQoKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93VXBkYXRlQnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1wZW5jaWxcIiB0b29sdGlwVGV4dD1cInNoYXJlZFVpLXNlYXJjaENvbWJvLWFjdGlvbi1lZGl0XCJcclxuICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLkJvdHRvbVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1wcmltYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIiAoY2xpY2spPVwidXBkYXRlRWxlbWVudCgpXCI+XHJcbiAgICAgICAgPC9Uc2ktQnV0dG9uPlxyXG5cclxuICAgICAgICA8VHNpLUJ1dHRvbiAqbmdJZj1cInNob3dDb25zdWx0QnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1leWVcIiB0b29sdGlwVGV4dD1cInNoYXJlZFVpLXNlYXJjaENvbWJvLWFjdGlvbi1jb25zdWx0XCJcclxuICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLkJvdHRvbVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1wcmltYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIiAoY2xpY2spPVwiY29uc3VsdEVsZW1lbnQoKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIFxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eVwiPlxyXG4gICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHktMyBnYXAtMlwiPlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0FwaUVycm9yOyBlbHNlIGFwaUVycm9yXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc0RhdGFzb3VyY2VFbXB0eSAmJiAhaXNGaWx0ZXJpbmdcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5mby1jaXJjbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgJ3NlYXJjaF9jb21ib19ub19lbGVtZW50JyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAqbmdJZj1cImlzTm9SZXN1bHRBZnRlckZpbHRlclwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWdyYXktNTAwXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZVwiPjwvaT5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyAnc2VhcmNoX2NvbWJvX25vX3Jlc3VsdCcgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNhcGlFcnJvcj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZSB0ZXh0LW9yYW5nZS01MDBcIj48L2k+XHJcbiAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgIHt7ICdzZWFyY2hfY29tYm9fbG9hZF9lcnJvcicgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInNlbGVjdGVkSXRlbVwiIGxldC1zZWxlY3RlZE9wdGlvbj5cclxuICAgICAgPGRpdiBwVG9vbHRpcD1cInt7c2VsZWN0ZWRPcHRpb24ubGFiZWx9fVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHRvb2x0aXBTdHlsZUNsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTdGF0dXNDb21ibyAmJiBzdGF0dXNNZXRhZGF0YTsgZWxzZSBub3JtYWxTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkT3B0aW9uICYmIGdldFN0YXR1c09wdGlvbihzZWxlY3RlZE9wdGlvbi5sYWJlbCkgYXMgb3B0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb250LWJvbGQgc3RhdHVzLWJhZGdlXCJcclxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJsaWdodGVuQ29sb3Iob3B0LmNvbG9ySGV4KVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImdldFJlYWRhYmxlVGV4dENvbG9yKG9wdC5jb2xvckhleClcIj5cclxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZE9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxTZWxlY3RlZD5cclxuICAgICAgICAgIDxzcGFuPnt7IHNlbGVjdGVkT3B0aW9uLmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgbGV0LXRhcmdldCBwVGVtcGxhdGU9XCJpdGVtXCI+XHJcbiAgICAgIDxkaXYgcFRvb2x0aXA9XCJ7e3RhcmdldC5sYWJlbH19XCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgdG9vbHRpcFN0eWxlQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTdGF0dXNDb21ibyAmJiBzdGF0dXNNZXRhZGF0YTsgZWxzZSBub3JtYWxPcHRpb25cIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRTdGF0dXNPcHRpb24odGFyZ2V0LmxhYmVsKSBhcyBvcHRcIj5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJsaWdodGVuQ29sb3Iob3B0LmNvbG9ySGV4KVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZ2V0UmVhZGFibGVUZXh0Q29sb3Iob3B0LmNvbG9ySGV4KVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUucGFkZGluZy10b3BdPVwiJzAuMXJlbSdcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmctYm90dG9tXT1cIicwLjFyZW0nXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7dGFyZ2V0LmxhYmVsfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsT3B0aW9uPlxyXG4gICAgICAgICAgPHNwYW4+e3t0YXJnZXQubGFiZWx9fTwvc3Bhbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDwvcC1kcm9wZG93bj5cclxuXHJcbiAgPCEtLSBCdWJibGUgSW5mbyAtLT5cclxuICA8VHNpLUJ1YmJsZS1JbmZvIFtpbmZvVGV4dF09XCJpbmZvVGV4dFwiPjwvVHNpLUJ1YmJsZS1JbmZvPlxyXG5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI211bHRpU2VsZWN0PlxyXG4gIDxwLW11bHRpU2VsZWN0XHJcbiAgICAjbXVsdGlTZWxlY3RFbGVtZW50XHJcbiAgICBbb3B0aW9uc109XCJncm91cHBlZERhdGFTb3VyY2VcIlxyXG4gICAgW2dyb3VwXT1cInRydWVcIiBcclxuICAgIFtuZ01vZGVsXT1cImJpbmRcIlxyXG4gICAgW29wdGlvbkxhYmVsXT1cIidsYWJlbCdcIlxyXG4gICAgW29wdGlvblZhbHVlXT1cIidpZCdcIlxyXG4gICAgW2xvYWRpbmddPVwiIWRhdGFMb2FkZWRcIlxyXG4gICAgW2ZpbHRlckJ5XT1cIidsYWJlbCdcIlxyXG4gICAgW2ZpbHRlcl09XCJ0cnVlXCJcclxuICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcclxuICAgIFtzaG93Q2xlYXJdPVwic2hvd0NsZWFyXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICBbc2VsZWN0ZWRJdGVtc0xhYmVsXT1cIidzaGFyZWRfY29tcG9uZW50X211bHRpc2VsZWN0X3NlbGVjdGVkX2l0ZW1zX2NvdW50JyB8IGxvY2FsaXplXCJcclxuICAgIFttYXhTZWxlY3RlZExhYmVsc109XCJtYXhTZWxlY3RlZExhYmVsc1wiXHJcbiAgICBbc2hvd1RvZ2dsZUFsbF09XCJmYWxzZVwiXHJcbiAgICBbc3R5bGVdPVwieydtYXgtd2lkdGgnOiBtYXhXaWR0aCwgJ3dpZHRoJzonMTAwJScsICdoZWlnaHQnOiAnMS43cmVtJ31cIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyXCJcclxuICAgIFtuZ0NsYXNzXT1cImlzQXIgPyAncC1kcm9wZG93bi1jbGVhci1pY29uQVInOiAncC1kcm9wZG93bi1jbGVhci1pY29uRlInXCJcclxuICAgIGNsYXNzPVwie3tteVN0eWxlQ2xhc3N9fVwiIFxyXG4gICAgc3R5bGVDbGFzcz1cInt7bXlTdHlsZUNsYXNzfX0gYm9yZGVyLXJhZGl1cy03IHt7dmFsaWRhdGlvblN0YXR1c0Nzc0NsYXNzfX1cIlxyXG4gICAgcGFuZWxTdHlsZUNsYXNzPVwidHNpLW11bHRpc2VsZWN0LXBhbmVsXCJcclxuICAgIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJvbk11bHRpU2VsZWN0TW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAob25QYW5lbFNob3cpPVwib25PcGVuKClcIlxyXG4gICAgKG9uRmlsdGVyKT1cInNlYXJjaFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgIChvbkNsaWNrKT1cIm9uU2VhcmNoQ29tYm9DbGljaygkZXZlbnQpXCJcclxuICAgIFtwVG9vbHRpcF09XCJtdWx0aVNlbGVjdEVsZW1lbnQ/LnNlbGVjdGVkT3B0aW9ucz8ubGVuZ3RoID8gbXVsdGlTZWxlY3RUb29sdGlwQ29udGVudCA6IHVuZGVmaW5lZFwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpdGVtXCIgbGV0LW9wdGlvbj5cclxuICAgICAgPGRpdiAjbGFiZWxSZWYgY2xhc3M9XCJ0c2ktbXVsdGlzZWxlY3Qtb3B0aW9uLWxhYmVsXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgdG9vbHRpcEFwcGVuZFRvPVwiYm9keVwiIFtwVG9vbHRpcF09XCJpc1RleHRPdmVyZmxvd2luZyhsYWJlbFJlZikgPyBvcHRpb24ubGFiZWwgOiBudWxsXCI+XHJcbiAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWhlYWRlciBmbGV4IGdhcC0xIHAtMVwiPlxyXG4gICAgICAgIDxUc2ktQnV0dG9uICpuZ0lmPVwic2hvd1NlYXJjaEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktc2VhcmNoXCIgdG9vbHRpcFRleHQ9XCJzaGFyZWRVaS1tdWx0aXNlbGVjdC1hY3Rpb24tc2VhcmNoXCJcclxuICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLkJvdHRvbVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1wcmltYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWFyY2hEaWFsb2coKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93QWR2YW5jZWRTZWFyY2hCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNvcnQtYW1vdW50LWRvd25cIiB0b29sdGlwVGV4dD1cInNoYXJlZFVpLW11bHRpc2VsZWN0LWFjdGlvbi1hZHZhbmNlZFNlYXJjaFwiXHJcbiAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uQm90dG9tXCIgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbkFkdmFuY2VkU2VhcmNoQ29tcG9uZW50KClcIj5cclxuICAgICAgICA8L1RzaS1CdXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtbXVsdGlTZWxlY3Q+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjbXVsdGlTZWxlY3RUb29sdGlwQ29udGVudD5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTJcIj5cclxuICAgICAgPCEtLSBJZiB0aGVyZSBhcmUgc2VsZWN0ZWQgaXRlbXMgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aVNlbGVjdEVsZW1lbnQ/LnNlbGVjdGVkT3B0aW9ucz8ubGVuZ3RoOyBlbHNlIG5vSXRlbXNcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWItMVwiPlxyXG4gICAgICAgICAge3sgJ3NoYXJlZF9jb21wb25lbnRfbXVsdGlzZWxlY3Rfc2VsZWN0ZWRfaXRlbXNfdGl0bGUnIHwgbG9jYWxpemUgfX1cclxuICAgICAgICAgICh7eyBtdWx0aVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCB9fSlcclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPHVsIGNsYXNzPVwibS0wIHBsLTNcIj5cclxuICAgICAgICAgIDwhLS0gU2hvdyBvbmx5IGZpcnN0IDEwIGl0ZW1zIC0tPlxyXG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZ2V0VG9wU2VsZWN0ZWRPcHRpb25zKG11bHRpU2VsZWN0RWxlbWVudClcIj5cclxuICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgIDwhLS0gU2hvdyBtZXNzYWdlIGlmIG1vcmUgdGhhbiAxMCAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlTZWxlY3RFbGVtZW50LnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAxMFwiIGNsYXNzPVwidGV4dC1zbSBtdC0xIHRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgIHt7IG11bHRpU2VsZWN0RWxlbWVudC5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMTAgfX1cclxuICAgICAgICAgIHt7ICdzaGFyZWRfY29tcG9uZW50X211bHRpc2VsZWN0X3NlbGVjdGVkX2l0ZW1zX21vcmVfbWVzc2FnZScgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8IS0tIElmIG5vIGl0ZW1zIHNlbGVjdGVkIC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI25vSXRlbXM+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIHRleHQtNTAwXCI+XHJcbiAgICAgICAgICB7eyAnc2hhcmVkX2NvbXBvbmVudF9tdWx0aXNlbGVjdF9zZWxlY3RlZF9pdGVtc19lbXB0eScgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
990
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLXNlYXJjaC1jb21iby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy90c2ktc2VhcmNoLWNvbWJvL3RzaS1zZWFyY2gtY29tYm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvdHNpLXNlYXJjaC1jb21iby90c2ktc2VhcmNoLWNvbWJvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNILE9BQU8sRUFBRSxjQUFjLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU1wRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDekYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBTS9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRbkQsTUFBTSxP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Q3NCLGdCQUFnQjtzQkFBNUMsTUFBTTt1QkFBQyxtQkFBbUI7Z0JBQ2pCLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFRRyxlQUFlO3NCQUF4QixNQUFNO2dCQXVGRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHJ0bE1vZGVLZXlzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzL2xvY2Fscy5jb25zdCc7XHJcbmltcG9ydCB7IENvbXBvbmVudF9Nb2RlcywgR3JpZFNlbGVjdGlvbk1vZGUsIE1vZGFsU2l6ZUVudW0sIFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgQ29tYm9TdGF0dXNNb2RlbCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlLCBTdGF0dXNPcHRpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc3RhdHVzL2NvbG9yLXN0YXR1cyc7XHJcbmltcG9ydCB7IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29uZmlndXJhdGlvbi9lbnRpdHktY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kYWwvdHNpLW1vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaUlucHV0QmFzZSB9IGZyb20gJy4uLy4uLy4uL3RzaS1iYXNlL3RzaS1pbnB1dC1iYXNlL3RzaS1pbnB1dC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEd1aWQgfSBmcm9tICcuLi8uLi8uLi90c2ktaGVscGVycy9ndWlkLmhlbHBlcic7XHJcbmltcG9ydCB7IFR5cGVSZWdpc3RyeUhlbHBlciB9IGZyb20gJy4uLy4uLy4uL3RzaS1oZWxwZXJzL3R5cGUtcmVnaXN0cnkuaGVscGVyJztcclxuaW1wb3J0IHsgTXVsdGlTZWxlY3QgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcclxuaW1wb3J0IHsgU2VsZWN0SXRlbUdyb3VwIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcyc7XHJcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRHJvcGRvd25FeHRlcm5hbFNlbGVjdGlvbk91dHB1dCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9kcm9wZG93bi9kcm9wZG93bi1leHRlcm5hbC1zZWxlY3Rpb24tb3V0cHV0JztcclxuaW1wb3J0IHsgQmluZE1vZGUgfSBmcm9tICcuLi8uLi8uLi9lbnVtcy9iaW5kLW1vZGUnO1xyXG5pbXBvcnQgeyBpc051bGxPckVtcHR5IH0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgRHJvcGRvd25DaGFuZ2VFdmVudCB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdUc2ktU2VhcmNoLUNvbWJvJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHNpLXNlYXJjaC1jb21iby5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHNpLXNlYXJjaC1jb21iby5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHNpU2VhcmNoQ29tYm9Db21wb25lbnQgZXh0ZW5kcyBUc2lJbnB1dEJhc2U8YW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgLy8jcmVnaW9uIGxvY2FsIHZhcnNcclxuICBwcml2YXRlIF9kYXRhc291cmNlOiBhbnlbXSA9IFtdO1xyXG4gIHByaXZhdGUgX2lzSW5wdXREYXRhc291cmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcmVsb2FkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfZ290dGVuRGF0YXNvdXJjZTogYW55W10gPSBbXTtcclxuICBwcml2YXRlIF9iaW5kPzogYW55O1xyXG4gIHByaXZhdGUgX2N1cnJlbnRSb3dJdGVtPzogYW55O1xyXG4gIHB1YmxpYyBkYXRhTG9hZGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIF9kaWFsb2dSZWZlcmVuY2U/OiBEeW5hbWljRGlhbG9nUmVmIHwgdW5kZWZpbmVkO1xyXG4gIGlzQXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAqIEdyb3VwZWQgZGF0YXNvdXJjZSBmb3IgdGhlIE11bHRpU2VsZWN0IGNvbXBvbmVudC5cclxuICogVHdvIGdyb3Vwcywgd2hlcmUgZWFjaCBncm91cCBjb250YWlucyBhIGxhYmVsLCBhIHZhbHVlLCBhbmQgYW4gYXJyYXkgb2YgaXRlbXMuXHJcbiAqIFxyXG4gKiBTdHJ1Y3R1cmU6XHJcbiAqIFtcclxuICogICB7IGxhYmVsOiAnU2VsZWN0ZWQgaXRlbXMnLCB2YWx1ZTogJ3NlbGVjdGVkLWl0ZW1zJywgaXRlbXM6IFsuLi5dIH0sXHJcbiAqICAgeyBsYWJlbDogJ0F2YWlsYWJsZSBpdGVtcycsIHZhbHVlOiAnYXZhaWxhYmxlLWl0ZW1zJywgaXRlbXM6IFsuLi5dIH1cclxuICogXVxyXG4gKi9cclxuICBwcm90ZWN0ZWQgZ3JvdXBwZWREYXRhU291cmNlOiBTZWxlY3RJdGVtR3JvdXBbXSA9IFtdO1xyXG4gIHRvb2x0aXBQb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbjtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxhYmVsT2ZFbGVtZW50Tm90Rm91bmRUZXh0S2V5OiBzdHJpbmcgPSAnc2hhcmVkVWktbGFiZWxPZkVsZW1lbnROb3RGb3VuZCc7XHJcbiAgcHJpdmF0ZSBsYWJlbE9mRWxlbWVudE5vdEZvdW5kVGV4dDogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxyXG4gIG9uRW50ZXJLZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgLy8gSGFuZGxlIHRoZSBlbnRlciBrZXkgZXZlbnQgaGVyZVxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElucHV0c1xyXG4gIEBJbnB1dCgpIGVsZW1lbnRTb3VyY2VVcmw/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbGlzdFNvdXJjZVVybD86IHN0cmluZyB8ICgoaXRlbTogYW55KSA9PiBzdHJpbmcpO1xyXG4gIEBJbnB1dCgpIGxpc3RTb3VyY2VQYXJhbXM6IEtleVZhbHVlPHN0cmluZywgYW55PltdID0gW107XHJcbiAgQElucHV0KFwiaWQtZmllbGRcIikgaWRGaWVsZDogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoXCJsYWJlbC1maWVsZFwiKSBsYWJlbEZpZWxkOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc29ydDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBzaG93Q2xlYXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHJlbG9hZERhdGFTb3VyY2U6IE9ic2VydmFibGU8YW55PiB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBpc0ZpbHRlcmVkPzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkTGFiZWw/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbWF4V2lkdGg6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGJ1c2luZXNzQ2xhc3M6IHN0cmluZyA9ICcnO1xyXG5cclxuICBASW5wdXQoKSBjb21ib1R5cGU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3RhdHVzTWV0YWRhdGE/OiBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBjdXJyZW50Um93SXRlbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSb3dJdGVtO1xyXG4gIH1cclxuXHJcbiAgc2V0IGN1cnJlbnRSb3dJdGVtKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuX2N1cnJlbnRSb3dJdGVtID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBnZXQgZGF0YXNvdXJjZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhc291cmNlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRhdGFzb3VyY2UoZGF0YXNvdXJjZTogYW55W10pIHtcclxuICAgIHRoaXMuX2dvdHRlbkRhdGFzb3VyY2UgPSBkYXRhc291cmNlO1xyXG5cclxuICAgIGlmICh0aGlzLl9nb3R0ZW5EYXRhc291cmNlKSB7XHJcbiAgICAgIHRoaXMuX21hcEdvdHRlbkRhdGFTb3VyY2VUb0xvY2FsRGF0YXNvdXJjZSgpXHJcbiAgICAgIHRoaXMuX2lzSW5wdXREYXRhc291cmNlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dChcImJpbmRcIikgZ2V0IGJpbmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmluZDtcclxuICB9XHJcblxyXG4gIHNldCBiaW5kKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLl9iaW5kID09PSB2YWx1ZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChpc051bGxPckVtcHR5KHZhbHVlKSkge1xyXG4gICAgICB0aGlzLl9iaW5kID0gbnVsbDtcclxuICAgICAgdGhpcy5pbnB1dEZpZWxkID0gbnVsbDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9iaW5kID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuaW5wdXRGaWVsZCA9IHZhbHVlO1xyXG4gICAgICB0aGlzLl9vbkJpbmRTZXQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAqIE1heGltdW0gbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW0gbGFiZWxzIHRvIGRpc3BsYXkgZGlyZWN0bHkgaW4gdGhlIE11bHRpU2VsZWN0IGlucHV0IGZpZWxkLlxyXG4gKiBJZiB0aGUgdXNlciBzZWxlY3RzIG1vcmUgdGhhbiB0aGlzIG51bWJlciwgdGhlIGNvbXBvbmVudCBjYW4gc2hvdyBhIFwiK05cIiBtZXNzYWdlIGluc3RlYWQuXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBkZWZhdWx0IDFcclxuICovXHJcbiAgQElucHV0KCkgbWF4U2VsZWN0ZWRMYWJlbHM6IG51bWJlciA9IDE7XHJcbiAgXHJcbiAgLyoqXHJcbiAqIE1heGltdW0gbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zIHRvIGRpc3BsYXkgaW5zaWRlIHRoZSB0b29sdGlwLlxyXG4gKiBJZiB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zIGV4Y2VlZHMgdGhpcyBsaW1pdCwgdGhlIHRvb2x0aXAgY2FuIGRpc3BsYXkgYSBcIitOIG1vcmVcIiBtZXNzYWdlLlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKiBAZGVmYXVsdCAxMFxyXG4gKi9cclxuICBASW5wdXQoKSB0b29sdGlwTWF4RGlzcGxheWVkSXRlbXM6IG51bWJlciA9IDEwO1xyXG5cclxuICAvKipcclxuICogSW5wdXQgdG8gY29uZmlndXJlIGJpbmRpbmcgbW9kZS5cclxuICpcclxuICogQGRlcHJlY2F0ZWQg4pqg77iPICoqRmVhdHVyZSBwbGFubmVkKiog4oCTIGN1cnJlbnRseSBub3QgdXNlZC5cclxuICogSW50ZW5kZWQgZm9yIGZ1dHVyZSBlbmhhbmNlbWVudHMgdG8gYWxsb3cgYmluZGluZyBlaXRoZXIgdGhlIGZ1bGwgb2JqZWN0IG9yIGp1c3QgdGhlIGtleS5cclxuICovXHJcbiBASW5wdXQoKSBiaW5kTW9kZTogQmluZE1vZGUgPSBCaW5kTW9kZS5EZWZhdWx0O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gT3V0cHV0c1xyXG4gIEBPdXRwdXQoKSBiaW5kQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoXCJkYXRhc291cmNlLWxvYWRlZFwiKSBkYXRhU291cmNlTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBpbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxDb21ib1N0YXR1c01vZGVsPigpO1xyXG4gIEBPdXRwdXQoKSBpc0xvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tYm9TdGF0dXNNb2RlbD4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRMYWJlbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBvblNlYXJjaEJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAvKipcclxuICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy5cclxuICpcclxuICogQGRlcHJlY2F0ZWQg4pqg77iPIFRlbXBvcmFyeSBmZWF0dXJlIGZvciBhIHNwZWNpZmljIHVzZSBjYXNlLlxyXG4gKiBDdXJyZW50bHkgb25seSB1c2VkIGluIFtzb21lIHNjZW5hcmlvXS4gV2lsbCBiZSByZW1vdmVkIG9yIHJlcGxhY2VkIGluIGZ1dHVyZSB1cGRhdGVzLlxyXG4gKi9cclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gY3RvclxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RzaU1vZGFsU2VydmljZTogVHNpTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBfbG9jYWxpemU6IExvY2FsaXplUGlwZSxcclxuICAgIHByb3RlY3RlZCBfY2RSZWY/OiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICApIHtcclxuICAgIHN1cGVyKF9jZFJlZik7XHJcbiAgICB0aGlzLmxhYmVsT2ZFbGVtZW50Tm90Rm91bmRUZXh0ID0gdGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKHRoaXMubGFiZWxPZkVsZW1lbnROb3RGb3VuZFRleHRLZXkpID8/ICdVTktOT1dOICEnO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZSBsaWZlY3ljbGUgaG9va3NcclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB0aGlzLl9yZWxvYWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNTdGF0dXNDb21ibygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbWJvVHlwZSA9PT0gJ3N0YXR1cyc7XHJcbiAgfVxyXG5cclxuICBsaWdodGVuQ29sb3IoaGV4OiBzdHJpbmcgfCB1bmRlZmluZWQsIHBlcmNlbnQ6IG51bWJlciA9IDcwKTogc3RyaW5nIHtcclxuICAgIGlmICghaGV4KSByZXR1cm4gJyc7XHJcbiAgICBoZXggPSBoZXgucmVwbGFjZSgvXiMvLCAnJyk7XHJcblxyXG4gICAgbGV0IHIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDAsIDIpLCAxNik7XHJcbiAgICBsZXQgZyA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGxldCBiID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZyg0LCA2KSwgMTYpO1xyXG5cclxuICAgIHIgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IociArICgyNTUgLSByKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuICAgIGcgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IoZyArICgyNTUgLSBnKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuICAgIGIgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IoYiArICgyNTUgLSBiKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuXHJcbiAgICBjb25zdCBuZXdIZXggPVxyXG4gICAgICAnIycgK1xyXG4gICAgICBbciwgZywgYl1cclxuICAgICAgICAubWFwKHggPT4geC50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSlcclxuICAgICAgICAuam9pbignJyk7XHJcblxyXG4gICAgcmV0dXJuIG5ld0hleDtcclxuICB9XHJcblxyXG4gIGdldFJlYWRhYmxlVGV4dENvbG9yKGhleDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIGlmICghaGV4KSByZXR1cm4gJ2JsYWNrJztcclxuXHJcbiAgICBoZXggPSBoZXgucmVwbGFjZSgvXiMvLCAnJyk7XHJcbiAgICBjb25zdCByID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygwLCAyKSwgMTYpO1xyXG4gICAgY29uc3QgZyA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGNvbnN0IGIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDQsIDYpLCAxNik7XHJcblxyXG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IChyICogMjk5ICsgZyAqIDU4NyArIGIgKiAxMTQpIC8gMTAwMDtcclxuXHJcbiAgICByZXR1cm4gYnJpZ2h0bmVzcyA+IDIzMCA/ICdibGFjaycgOiBgIyR7aGV4fWA7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0dXNPcHRpb24odmFsdWU6IHN0cmluZyk6IFN0YXR1c09wdGlvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNNZXRhZGF0YT8ub3B0aW9ucy5maW5kKG8gPT4gby50cmFuc2xhdGVkTGFiZWwgPT09IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICB0aGlzLmNoZWNrSWZBZHZhbmNlZFNlYXJjaENvbXBvbmVudEV4aXN0cygpO1xyXG4gICAgYXdhaXQgdGhpcy5jaGVja0lmRm9ybU5hbWVFeGlzdHMoKTtcclxuICAgIHRoaXMuX2luaXRQYXJhbWV0ZXJzV2l0aERlZmF1bHRzKCk7XHJcbiAgICB0aGlzLl9pbml0UmVsb2FkRGF0YVNvdXJjZVN1YnNjcmlwdGlvbigpO1xyXG4gICAgYXdhaXQgdGhpcy5faW5pdGlhbExvYWREYXRhKCk7XHJcbiAgICBcclxuICAgIGxldCBsYW5ndWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShydGxNb2RlS2V5cy5ydGxNb2RlRW5hYmxlZCk7XHJcbiAgICBcclxuICAgIGlmIChsYW5ndWUgJiYgSlNPTi5wYXJzZShsYW5ndWUpKSB7XHJcbiAgICAgIHRoaXMuaXNBciA9IHRydWVcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmlzQXIgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWF4V2lkdGggPSB0aGlzLm1heFdpZHRoICsgJ3JlbSc7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuICBASW5wdXQoKSBzaG93U2VhcmNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93QWRkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Q29uc3VsdEJ1dHRvbj86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd1VwZGF0ZUJ1dHRvbj86IGJvb2xlYW47XHJcbiAgc2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICBjaGVja0lmQWR2YW5jZWRTZWFyY2hDb21wb25lbnRFeGlzdHMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLnNob3dBZHZhbmNlZFNlYXJjaEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eUluZm8odGhpcy5idXNpbmVzc0NsYXNzKS5zdWJzY3JpYmUoe1xyXG5cclxuICAgICAgbmV4dDogKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93QWR2YW5jZWRTZWFyY2hCdXR0b24gPSAhIWVudGl0eT8uYWR2YW5jZWRTZWFyY2hDb21wb25lbnQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHRoaXMuc2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJZkZvcm1OYW1lRXhpc3RzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0FkZEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLnNob3dBZGRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLnNob3dDb25zdWx0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLnNob3dVcGRhdGVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eUluZm8odGhpcy5idXNpbmVzc0NsYXNzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaGFzRm9ybSA9ICEhZW50aXR5Py5mb3JtTmFtZTtcclxuXHJcbiAgICAgICAgICBpZiAoIWhhc0Zvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93QWRkQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDb25zdWx0QnV0dG9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDb25zdWx0QnV0dG9uID0gdGhpcy5zaG93QWRkQnV0dG9uO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnNob3dVcGRhdGVCdXR0b24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dVcGRhdGVCdXR0b24gPSB0aGlzLnNob3dBZGRCdXR0b247XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93QWRkQnV0dG9uID09PSB1bmRlZmluZWQpIHRoaXMuc2hvd0FkZEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPT09IHVuZGVmaW5lZCkgdGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLnNob3dVcGRhdGVCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIG9wZW5BZHZhbmNlZFNlYXJjaENvbXBvbmVudCgpIHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfbmFtZUVudGl0eVwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dBZHZhbmNlZFNlYXJjaEJ1dHRvbiA9ICEhZW50aXR5Py5hZHZhbmNlZFNlYXJjaENvbXBvbmVudDtcclxuICAgICAgICAgIGlmICghZW50aXR5IHx8ICFlbnRpdHkuYWR2YW5jZWRTZWFyY2hDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9mb3JtX25hbWVfbmZcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgIGlzQWR2YW5jZWRTZWFyY2g6IHRydWUsXHJcbiAgICAgICAgICAgICAgc2VsZWN0aW9uTW9kZTogdGhpcy5tdWx0aXBsZSA/IEdyaWRTZWxlY3Rpb25Nb2RlLk11bHRpcGxlIDogR3JpZFNlbGVjdGlvbk1vZGUuU2luZ2xlLFxyXG4gICAgICAgICAgICAgIG1vZGU6IENvbXBvbmVudF9Nb2Rlcy5DT05TVUxULFxyXG4gICAgICAgICAgICAgIGN1c3RvbURhdGE6IGVudGl0eSxcclxuICAgICAgICAgICAgICBzZWxlY3RLZXlPbmx5OiB0aGlzLm11bHRpcGxlID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICAgICAgd2lkdGg6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLndpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLmhlaWdodCxcclxuICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZSA9IHRoaXMuX3RzaU1vZGFsU2VydmljZT8ub3BlbihUeXBlUmVnaXN0cnlIZWxwZXIuZ2V0VHlwZShlbnRpdHkuYWR2YW5jZWRTZWFyY2hDb21wb25lbnQpLCBjb25mKTtcclxuXHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2U/Lm9uQ2xvc2Uuc3Vic2NyaWJlKChzZWxlY3Rpb246IGFueSkgPT4gdGhpcy5oYW5kbGVFeHRlcm5hbFNlbGVjdGlvbihzZWxlY3Rpb24pKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICB0aGlzLnNob3dBZHZhbmNlZFNlYXJjaEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuU2VhcmNoRGlhbG9nKCkge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5XCIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgIGlzQWR2YW5jZWRTZWFyY2g6IHRydWUsXHJcbiAgICAgICAgICAgICAgc2VsZWN0aW9uTW9kZTogdGhpcy5tdWx0aXBsZSA/IEdyaWRTZWxlY3Rpb25Nb2RlLk11bHRpcGxlIDogR3JpZFNlbGVjdGlvbk1vZGUuU2luZ2xlLFxyXG4gICAgICAgICAgICAgIG1vZGU6IENvbXBvbmVudF9Nb2Rlcy5DT05TVUxULFxyXG4gICAgICAgICAgICAgIGN1c3RvbURhdGE6IGVudGl0eSxcclxuICAgICAgICAgICAgICBzZWxlY3RLZXlPbmx5OiB0aGlzLm11bHRpcGxlID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICAgICAgd2lkdGg6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLndpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLmhlaWdodCxcclxuICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGlmICghZW50aXR5IHx8ICFlbnRpdHkubGlzdENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X2Zvcm1fbmFtZV9uZlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlPy5vcGVuKFR5cGVSZWdpc3RyeUhlbHBlci5nZXRUeXBlKGVudGl0eS5saXN0Q29tcG9uZW50KSwgY29uZik7XHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2U/Lm9uQ2xvc2Uuc3Vic2NyaWJlKChzZWxlY3Rpb246IGFueSkgPT4gdGhpcy5oYW5kbGVFeHRlcm5hbFNlbGVjdGlvbihzZWxlY3Rpb24pKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEVsZW1lbnQoKSB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X25hbWVFbnRpdHlcIik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB7IG1vZGU6IENvbXBvbmVudF9Nb2Rlcy5DUkVBVEUsIGN1c3RvbURhdGE6IGVudGl0eSB9LFxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICAgICAgd2lkdGg6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLndpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLmhlaWdodCxcclxuICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGlmICghZW50aXR5IHx8ICFlbnRpdHkuZm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9mb3JtX25hbWVfbmZcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZSA9IHRoaXMuX3RzaU1vZGFsU2VydmljZT8ub3BlbihUeXBlUmVnaXN0cnlIZWxwZXIuZ2V0VHlwZShlbnRpdHkuZm9ybU5hbWUpLCBjb25mKTtcclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZT8ub25DbG9zZS5zdWJzY3JpYmUoKHNhdmVkRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzYXZlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIHNhdmVkRWxlbWVudCA9PT0gJ29iamVjdCcgJiYgc2F2ZWRFbGVtZW50ICE9PSBudWxsICYmICd1aWQnIGluIHNhdmVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kVmFsdWVDaGFuZ2VkKHNhdmVkRWxlbWVudD8udWlkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHNhdmVkRWxlbWVudCA9PT0gJ3N0cmluZycgJiYgR3VpZC5pc1ZhbGlkKHNhdmVkRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmluZFZhbHVlQ2hhbmdlZChzYXZlZEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNEYXRhc291cmNlRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhTG9hZGVkICYmICghdGhpcy5kYXRhc291cmNlIHx8IHRoaXMuZGF0YXNvdXJjZS5sZW5ndGggPT09IDApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc0xvYWRFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgdXBkYXRlRWxlbWVudCgpIHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfbmFtZUVudGl0eVwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5iaW5kKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcIkF1Y3VuIMOpbMOpbWVudCBzw6lsZWN0aW9ubsOpIHBvdXIgbGEgbWlzZSDDoCBqb3VyLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IGFzeW5jIChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghZW50aXR5IHx8ICFlbnRpdHkuZm9ybU5hbWUpIHtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mXCIpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgbW9kZTogQ29tcG9uZW50X01vZGVzLkVESVQsXHJcbiAgICAgICAgICAgIGN1c3RvbURhdGE6IGVudGl0eSxcclxuICAgICAgICAgICAgaWQ6IHRoaXMuYmluZFxyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLk1lZGl1bS53aWR0aCxcclxuICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlPy5vcGVuKFR5cGVSZWdpc3RyeUhlbHBlci5nZXRUeXBlKGVudGl0eS5mb3JtTmFtZSksIGNvbmYpO1xyXG5cclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2U/Lm9uQ2xvc2Uuc3Vic2NyaWJlKCh1cGRhdGVkRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAodXBkYXRlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVkRWxlbWVudCA9PT0gJ29iamVjdCcgJiYgdXBkYXRlZEVsZW1lbnQgIT09IG51bGwgJiYgJ3VpZCcgaW4gdXBkYXRlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmluZFZhbHVlQ2hhbmdlZCh1cGRhdGVkRWxlbWVudD8udWlkKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdXBkYXRlZEVsZW1lbnQgPT09ICdzdHJpbmcnICYmIEd1aWQuaXNWYWxpZCh1cGRhdGVkRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmluZFZhbHVlQ2hhbmdlZCh1cGRhdGVkRWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29uc3VsdEVsZW1lbnQoKSB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X25hbWVFbnRpdHlcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYmluZCkge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJBdWN1biDDqWzDqW1lbnQgc8OpbGVjdGlvbm7DqSBwb3VyIGxhIGNvbnN1bHRhdGlvbi5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eUluZm8odGhpcy5idXNpbmVzc0NsYXNzKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiBhc3luYyAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIWVudGl0eSB8fCAhZW50aXR5LmZvcm1OYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X2Zvcm1fbmFtZV9uZlwiKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIG1vZGU6IENvbXBvbmVudF9Nb2Rlcy5DT05TVUxULFxyXG4gICAgICAgICAgICBjdXN0b21EYXRhOiBlbnRpdHksXHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmJpbmRcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLk1lZGl1bS53aWR0aCxcclxuICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlPy5vcGVuKFxyXG4gICAgICAgICAgVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUoZW50aXR5LmZvcm1OYW1lKSxcclxuICAgICAgICAgIGNvbmZcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2U/Lm9uQ2xvc2Uuc3Vic2NyaWJlKChfKSA9PiB7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycmV1ciBsb3JzIGRlIGxhIHLDqWN1cMOpcmF0aW9uIGRlcyBpbmZvcyBkJ2VudGl0w6kgOlwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgZXZlbnRzXHJcbiAgaGFuZGxlQ2hhbmdlRXZlbnQoZHJvcGRvd25DaGFuZ2VFdmVudDogRHJvcGRvd25DaGFuZ2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5iaW5kVmFsdWVDaGFuZ2VkKGRyb3Bkb3duQ2hhbmdlRXZlbnQudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiaW5kVmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuYmluZCA9IG5ld1ZhbHVlO1xyXG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxyXG4gICAgdGhpcy5iaW5kQ2hhbmdlLmVtaXQodGhpcy5iaW5kKTtcclxuICAgIHRoaXMuX2hhbmRsZVNlbGVjdGVkRWxlbWVudHNMYWJlbENoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoVmFsdWVDaGFuZ2VkKHNlYXJjaFZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmlzRmlsdGVyZWQgJiYgIXRoaXMuX2lzSW5wdXREYXRhc291cmNlKSB7XHJcbiAgICAgICAgdGhpcy5pc0ZpbHRlcmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fbG9hZFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2Uoc2VhcmNoVmFsdWUuZmlsdGVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uT3BlbigpIHtcclxuICAgIHRoaXMuaXNGaWx0ZXJpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0ZpbHRlcmVkIHx8IHR5cGVvZiB0aGlzLmxpc3RTb3VyY2VVcmwgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIHRoaXMuX2xvYWREYXRhU291cmNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNOb1Jlc3VsdEFmdGVyRmlsdGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5kYXRhTG9hZGVkICYmXHJcbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5sZW5ndGggPT09IDAgJiZcclxuICAgICAgdGhpcy5pc0ZpbHRlcmluZyAmJlxyXG4gICAgICAhdGhpcy5oYXNMb2FkRXJyb3JcclxuICAgICk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJpdmF0ZSBfbG9hZERhdGFTb3VyY2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuX2lzSW5wdXREYXRhc291cmNlKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzRmlsdGVyZWQpIHtcclxuICAgICAgICB0aGlzLl9sb2FkU2VydmVyU2lkZVBhZ2VkRGF0YVNvdXJjZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2xvYWROb3RTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWRTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKGtleXdvcmQ6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuX2luaXRMaXN0RGF0YVNvdXJjZUVuZHBvaW50KCk7XHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2FkRGF0YSh1cmwsIHRoaXMuX2dlbmVyYXRlSHR0cFBhcmFtcyhrZXl3b3JkKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2FkTm90U2VydmVyU2lkZVBhZ2VkRGF0YVNvdXJjZSgpIHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuX2luaXRMaXN0RGF0YVNvdXJjZUVuZHBvaW50KCk7XHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2FkRGF0YSh1cmwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkRGF0YSh1cmw6IHN0cmluZywgcGFyYW1zPzogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpXHJcbiAgICB7XHJcbiAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGFMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaGFzTG9hZEVycm9yID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5faHR0cENsaWVudC5nZXQodXJsLCBwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLl9nb3R0ZW5EYXRhc291cmNlID0gZGF0YTtcclxuICAgICAgICB0aGlzLl9tYXBHb3R0ZW5EYXRhU291cmNlVG9Mb2NhbERhdGFzb3VyY2UoKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGRhdGFzb3VyY2UnLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5oYXNMb2FkRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQXBpRXJyb3IoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhTG9hZGVkICYmIHRoaXMuaGFzTG9hZEVycm9yO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZW5zdXJlU2VsZWN0ZWRPcHRpb25FeGlzdHMoKSB7XHJcbiAgICAvLyBubyBfZW5zdXJlU2VsZWN0ZWRPcHRpb25FeGlzdHMgZm9yIG11bHRpLXNlbGVjdFxyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHJldHVybjtcclxuXHJcbiAgICBpZiAodGhpcy5iaW5kID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzLmRhdGFzb3VyY2Uuc29tZSh4ID0+IHguaWQgPT0gdGhpcy5iaW5kKTtcclxuXHJcbiAgICBpZiAoIWV4aXN0cylcclxuICAgIHtcclxuICAgICAgYXdhaXQgdGhpcy5fbG9hZEJpbmRFbGVtZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmluZFNlbGVjdGVkT3B0aW9uID0gdGhpcy5kYXRhc291cmNlLmZpbmQoKGk6IGFueSkgPT4gaS5pZCA9PSB0aGlzLmJpbmQpOyAgICBcclxuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoZmluZFNlbGVjdGVkT3B0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2xvYWRCaW5kRWxlbWVudCgpIHtcclxuICAgIC8vIG5vIF9sb2FkQmluZEVsZW1lbnQgZm9yIG11bHRpLXNlbGVjdFxyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHJldHVybjtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5pc0VsZW1lbnRTb3VyY2VVcmxWYWxpZCgpIHx8ICF0aGlzLmJpbmQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGRhdGE6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2h0dHBDbGllbnQuZ2V0KHRoaXMuX2luaXRFbGVtZW50RW5kcG9pbnQoKSkpO1xyXG5cclxuICAgICAgaWYgKCFkYXRhKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBvcHRpb24gPSB7XHJcbiAgICAgICAgaWQ6IGRhdGFbdGhpcy5pZEZpZWxkXSxcclxuICAgICAgICBsYWJlbDogZGF0YVt0aGlzLmxhYmVsRmllbGRdXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZGF0YXNvdXJjZS5zb21lKHggPT4geC5pZCA9PT0gb3B0aW9uLmlkKSkge1xyXG4gICAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSBbLi4udGhpcy5kYXRhc291cmNlLCBvcHRpb25dO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2UuZW1pdChvcHRpb24ubGFiZWwpO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2VMb2FkZWQuZW1pdCgpO1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHNlbGVjdGVkIGVsZW1lbnQnLCBlcnJvcik7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcGFyZUZ1bmN0aW9uKCk6IChhOiBhbnksIGI6IGFueSkgPT4gbnVtYmVyIHtcclxuICAgIHJldHVybiAoYSwgYikgPT4ge1xyXG4gICAgICBpZiAoYS5sYWJlbCA+IGIubGFiZWwpIHsgcmV0dXJuIDE7IH1cclxuICAgICAgaWYgKGEubGFiZWwgPCBiLmxhYmVsKSB7IHJldHVybiAtMTsgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTGlzdFNvdXJjZVVybFZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmxpc3RTb3VyY2VVcmwpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdsaXN0U291cmNlVXJsIHVybCBub3QgcHJvdmlkZWQnKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRWxlbWVudFNvdXJjZVVybFZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmVsZW1lbnRTb3VyY2VVcmwpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdlbGVtZW50U291cmNlVXJsIG5vdCBkZWZpbmVkJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRQYXJhbWV0ZXJzV2l0aERlZmF1bHRzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaWRGaWVsZCA9PSB1bmRlZmluZWQgfHwgdGhpcy5pZEZpZWxkID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuaWRGaWVsZCA9IFwiaWRcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5sYWJlbEZpZWxkID09IHVuZGVmaW5lZCB8fCB0aGlzLmxhYmVsRmllbGQgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy5sYWJlbEZpZWxkID0gXCJsaWJlbGxlXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0RWxlbWVudEVuZHBvaW50KCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5iaW5kKSB7XHJcbiAgICAgIHJldHVybiBlbmNvZGVVUkkoYCR7dGhpcy5lbGVtZW50U291cmNlVXJsfS8ke3RoaXMuYmluZH1gKTtcclxuICAgIH1cclxuICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCdubyBiaW5kIGlucHV0IHdhcyBwcm92aWRlZCwgY2Fubm90IGNyZWF0ZSBiaW5kRWxlbWVudFVybCcpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0TGlzdERhdGFTb3VyY2VFbmRwb2ludCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5saXN0U291cmNlVXJsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTGlzdCBzb3VyY2UgVVJMIG5vdCBwcm92aWRlZCcpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRoaXMubGlzdFNvdXJjZVVybCA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIHJldHVybiBlbmNvZGVVUkkoYCR7dGhpcy5saXN0U291cmNlVXJsfWApO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmxpc3RTb3VyY2VVcmwgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGxldCB0ZW1wVXJsID0gdGhpcy5saXN0U291cmNlVXJsKHRoaXMuY3VycmVudFJvd0l0ZW0pXHJcbiAgICAgIHJldHVybiBlbmNvZGVVUkkoYCR7dGVtcFVybH1gKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaW5pdGlhbExvYWREYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuX2lzSW5wdXREYXRhc291cmNlKSB7XHJcbiAgICAgIHRoaXMuX21hcEdvdHRlbkRhdGFTb3VyY2VUb0xvY2FsRGF0YXNvdXJjZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzRmlsdGVyZWQpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9sb2FkQmluZEVsZW1lbnQoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9sb2FkTm90U2VydmVyU2lkZVBhZ2VkRGF0YVNvdXJjZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9vbkJpbmRTZXQoKSB7XHJcbiAgICBpZiAodGhpcy5faXNJbnB1dERhdGFzb3VyY2UpIHtcclxuICAgICAgaWYodGhpcy5tdWx0aXBsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLmRhdGFzb3VyY2UuZmluZCgoaTogYW55KSA9PiBpLmlkID09IHRoaXMuYmluZCkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGF3YWl0IHRoaXMuX2Vuc3VyZVNlbGVjdGVkT3B0aW9uRXhpc3RzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRBbGxEYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuaXNGaWx0ZXJlZCkge1xyXG4gICAgICB0aGlzLl9sb2FkU2VydmVyU2lkZVBhZ2VkRGF0YVNvdXJjZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xvYWROb3RTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0UmVsb2FkRGF0YVNvdXJjZVN1YnNjcmlwdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnJlbG9hZERhdGFTb3VyY2UpIHtcclxuICAgICAgdGhpcy5fcmVsb2FkU3Vic2NyaXB0aW9uID0gdGhpcy5yZWxvYWREYXRhU291cmNlLnN1YnNjcmliZShcclxuICAgICAgICAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIChkYXRhKSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSAhPSB1bmRlZmluZWQgJiYgZGF0YSAhPSBudWxsICYmIGRhdGEgIT0gJycpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RTb3VyY2VVcmwgPSBkYXRhO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZEFsbERhdGEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UgPSBkYXRhXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSAgX21hcEdvdHRlbkRhdGFTb3VyY2VUb0xvY2FsRGF0YXNvdXJjZSgpOiB2b2lkIHtcclxuICAgIFxyXG4gICAgbGV0IHRlbXBBcnJheTogYW55W10gPSBbXTtcclxuICAgIFxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5fZ290dGVuRGF0YXNvdXJjZSkpIHtcclxuXHJcbiAgICAgIHRoaXMuX2dvdHRlbkRhdGFzb3VyY2UuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICAgIGlkOiBlbGVtZW50W3RoaXMuaWRGaWVsZF0sXHJcbiAgICAgICAgICBsYWJlbDogZWxlbWVudFt0aGlzLmxhYmVsRmllbGRdXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGVtcEFycmF5LnB1c2gob2JqKTtcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IHRlbXBBcnJheTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9kYXRhc291cmNlID0gdGhpcy5fZGlzdGluY3RCeUlkKFsuLi50aGlzLmRhdGFzb3VyY2UsIC4uLnRlbXBBcnJheV0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNvcnQpIHtcclxuICAgICAgdGhpcy5fZGF0YXNvdXJjZS5zb3J0KHRoaXMuX2NvbXBhcmVGdW5jdGlvbigpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5kYXRhU291cmNlTG9hZGVkLmVtaXQoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2lzSW5wdXREYXRhc291cmNlKSB7IFxyXG4gICAgICB0aGlzLl9lbnN1cmVTZWxlY3RlZE9wdGlvbkV4aXN0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlR3JvdXBwZWREYXRhU291cmNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZW5lcmF0ZUh0dHBQYXJhbXMoa2V5d29yZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogYW55IHtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgndmFsdWUnLCBrZXl3b3JkID8/ICcnKTtcclxuXHJcbiAgICBpZighdGhpcy5saXN0U291cmNlUGFyYW1zIHx8ICFBcnJheS5pc0FycmF5KHRoaXMubGlzdFNvdXJjZVBhcmFtcykgfHwgdGhpcy5saXN0U291cmNlUGFyYW1zLmxlbmd0aCA8IDEpXHJcbiAgICB7XHJcbiAgICAgIHJldHVybiB7IHBhcmFtczogcGFyYW1zIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5saXN0U291cmNlUGFyYW1zLmZpbHRlcigocDogS2V5VmFsdWU8c3RyaW5nLCBhbnk+KSA9PiBwLnZhbHVlICE9IG51bGwgJiYgcC52YWx1ZSAhPSB1bmRlZmluZWQpXHJcbiAgICAuZm9yRWFjaCgocDogS2V5VmFsdWU8c3RyaW5nLCBhbnk+KSA9PiB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQocC5rZXksIHAudmFsdWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHsgcGFyYW1zOiBwYXJhbXMgfTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoQ29tYm9DbGljayhldmVudDogYW55KSB7XHJcbiAgICB0aGlzLm9uQ2xpY2suZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogRXZlbnQgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgTXVsdGlTZWxlY3QgbW9kZWwgY2hhbmdlcy5cclxuICogVXBkYXRlcyB0aGUgYm91bmQgdmFsdWUgYW5kIHJlY2FsY3VsYXRlcyB0aGUgZ3JvdXBlZCBkYXRhc291cmNlIGZvciBwcm9wZXIgcmVuZGVyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gbmV3VmFsdWUgLSBUaGUgbmV3IHZhbHVlIGVtaXR0ZWQgYnkgdGhlIE11bHRpU2VsZWN0IGNvbXBvbmVudC5cclxuICovXHJcbiAgb25NdWx0aVNlbGVjdE1vZGVsQ2hhbmdlKG5ld1ZhbHVlOiBvYmplY3QpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmJpbmRWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xyXG5cclxuICAgIHRoaXMuY2FsY3VsYXRlR3JvdXBwZWREYXRhU291cmNlKCk7XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gKiBSZXR1cm5zIGEgZGlzdGluY3QgYXJyYXkgb2YgaXRlbXMgYmFzZWQgb24gdGhlaXIgYGlkYCBwcm9wZXJ0eS5cclxuICogVXNlZnVsIHRvIHJlbW92ZSBkdXBsaWNhdGVzIGZyb20gdGhlIGRhdGFzb3VyY2Ugb3Igc2VsZWN0ZWQgaXRlbXMgbGlzdC5cclxuICpcclxuICogQHBhcmFtIHthbnlbXX0gYXJyYXkgLSBBcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgYW4gYGlkYCBwcm9wZXJ0eS5cclxuICogQHJldHVybnMge2FueVtdfSBBcnJheSBvZiB1bmlxdWUgaXRlbXMgYnkgYGlkYC5cclxuICovXHJcbiAgcHJpdmF0ZSBfZGlzdGluY3RCeUlkKGFycmF5OiBhbnlbXSk6IGFueVtdXHJcbiAge1xyXG4gICAgaWYgKCFhcnJheSkgcmV0dXJuIFtdO1xyXG5cclxuICAgIGNvbnN0IGRpc3RpbmN0ID0gQXJyYXkuZnJvbShcclxuICAgICAgbmV3IE1hcChhcnJheS5tYXAoaXRlbSA9PiBbaXRlbS5pZCwgaXRlbV0pKS52YWx1ZXMoKVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gZGlzdGluY3Q7XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gKiBUcmFja0J5IGZ1bmN0aW9uIGZvciBBbmd1bGFyIG5nRm9yIGxvb3BzLlxyXG4gKiBIZWxwcyBBbmd1bGFyIGVmZmljaWVudGx5IHRyYWNrIGxpc3QgaXRlbXMgYnkgYSB1bmlxdWUgaWRlbnRpZmllciwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmUtcmVuZGVyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBJbmRleCBvZiB0aGUgaXRlbSBpbiB0aGUgYXJyYXkuXHJcbiAqIEBwYXJhbSB7YW55fSBpdGVtIC0gSXRlbSBvYmplY3QgY29udGFpbmluZyBhbiBgaWRgLlxyXG4gKiBAcmV0dXJucyB7YW55fSBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGl0ZW0gKGl0ZW0uaWQpLlxyXG4gKi9cclxuICB0cmFja0J5SWQoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KTogYW55IHtcclxuICAgIHJldHVybiBpdGVtLmlkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFJldHVybnMgdGhlIHRvcCBOIHNlbGVjdGVkIG9wdGlvbnMgdG8gZGlzcGxheSBpbiB0aGUgdG9vbHRpcC5cclxuICogTGltaXRzIHRoZSBudW1iZXIgb2YgaXRlbXMgc2hvd24gdG8gYHRvb2x0aXBNYXhEaXNwbGF5ZWRJdGVtc2AgZm9yIHJlYWRhYmlsaXR5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge011bHRpU2VsZWN0fSBtdWx0aVNlbGVjdCAtIFJlZmVyZW5jZSB0byB0aGUgUHJpbWVORyBNdWx0aVNlbGVjdCBjb21wb25lbnQuXHJcbiAqIEByZXR1cm5zIHthbnlbXX0gQXJyYXkgb2Ygc2VsZWN0ZWQgaXRlbXMsIGxpbWl0ZWQgdG8gYHRvb2x0aXBNYXhEaXNwbGF5ZWRJdGVtc2AuXHJcbiAqL1xyXG4gIGdldFRvcFNlbGVjdGVkT3B0aW9ucyhtdWx0aVNlbGVjdDogTXVsdGlTZWxlY3QpOiBhbnlbXSB7XHJcbiAgICBpZighbXVsdGlTZWxlY3QgfHwgIUFycmF5LmlzQXJyYXkobXVsdGlTZWxlY3Quc2VsZWN0ZWRPcHRpb25zKSB8fCBtdWx0aVNlbGVjdC5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoIDwgMSkgcmV0dXJuIFtdO1xyXG4gIFxyXG4gICAgcmV0dXJuIG11bHRpU2VsZWN0LnNlbGVjdGVkT3B0aW9ucy5zbGljZSgwLCB0aGlzLnRvb2x0aXBNYXhEaXNwbGF5ZWRJdGVtcyk7XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBncm91cGVkIGRhdGFzb3VyY2UgZm9yIHRoZSBNdWx0aVNlbGVjdCBkcm9wZG93bi5cclxuICogQ3JlYXRlcyB0d28gZ3JvdXBzOlxyXG4gKiAxLiBcIlNlbGVjdGVkIGl0ZW1zXCIg4oCUIGl0ZW1zIGN1cnJlbnRseSBzZWxlY3RlZCBieSB0aGUgdXNlci5cclxuICogMi4gXCJBdmFpbGFibGUgaXRlbXNcIiDigJQgaXRlbXMgbm90IHNlbGVjdGVkIHlldC5cclxuICpcclxuICogVGhlIGdyb3VwZWQgZGF0YXNvdXJjZSBhbGxvd3M6XHJcbiAqIC0gU2VsZWN0ZWQgaXRlbXMgdG8gYmUgcGlubmVkIG9uIHRvcCBmb3IgZWFzeSBtYW5hZ2VtZW50LlxyXG4gKiAtIEF2YWlsYWJsZSBpdGVtcyB0byByZW1haW4gaW4gdGhlaXIgb3JpZ2luYWwgb3JkZXIuXHJcbiAqIC0gTXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydCB1c2luZyB0aGUgYF9sb2NhbGl6ZWAgc2VydmljZS5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVXBkYXRlcyBgdGhpcy5ncm91cHBlZERhdGFTb3VyY2VgIHdpdGggdGhlIGxhdGVzdCBncm91cGVkIHN0cnVjdHVyZS5cclxuICovXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVHcm91cHBlZERhdGFTb3VyY2UoKTogdm9pZCB7XHJcbiAgICBsZXQgZ3JvdXBzIDogU2VsZWN0SXRlbUdyb3VwW10gPSBbXTtcclxuXHJcbiAgICBsZXQgaXNCaW5kVmFsaWRBcnJheSA6IGJvb2xlYW4gPSB0aGlzLmJpbmQgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmJpbmQpICYmIHRoaXMuYmluZC5sZW5ndGggPiAwO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBuZXcgU2V0KGlzQmluZFZhbGlkQXJyYXkgPyB0aGlzLmJpbmQgOiBbXSk7XHJcblxyXG4gICAgLy8gU2VsZWN0ZWQgaXRlbXNcclxuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmRhdGFzb3VyY2UuZmlsdGVyKGl0ZW0gPT4gc2VsZWN0ZWRJZHMuaGFzKGl0ZW0uaWQpKTtcclxuICAgIGlmIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZ3JvdXBzLnB1c2goe1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NoYXJlZF9jb21wb25lbnRfbXVsdGlzZWxlY3Rfc2VsZWN0ZWRfZ3JvdXAnKSxcclxuICAgICAgICB2YWx1ZTogJ3NlbGVjdGVkLWl0ZW1zJyxcclxuICAgICAgICBpdGVtczogc2VsZWN0ZWRJdGVtc1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBdmFpbGFibGUgKG5vdCBzZWxlY3RlZCkgaXRlbXNcclxuICAgIGNvbnN0IGF2YWlsYWJsZUl0ZW1zID0gdGhpcy5kYXRhc291cmNlLmZpbHRlcihpdGVtID0+ICFzZWxlY3RlZElkcy5oYXMoaXRlbS5pZCkpO1xyXG4gICAgaWYgKGF2YWlsYWJsZUl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZ3JvdXBzLnB1c2goXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGFiZWw6IHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybSgnc2hhcmVkX2NvbXBvbmVudF9tdWx0aXNlbGVjdF9hdmFpbGFibGVfZ3JvdXAnKSxcclxuICAgICAgICAgIHZhbHVlOiAnYXZhaWxhYmxlLWl0ZW1zJyxcclxuICAgICAgICAgIGl0ZW1zOiBhdmFpbGFibGVJdGVtc1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ3JvdXBwZWREYXRhU291cmNlID0gZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCdzIGNvbnRlbnQgb3ZlcmZsb3dzIGl0cyB2aXNpYmxlIHdpZHRoLlxyXG4gKiBVc2VkIHRvIGNvbmRpdGlvbmFsbHkgZW5hYmxlIHRvb2x0aXAgb25seSB3aGVuIGVsbGlwc2lzIGlzIGFwcGxpZWQuXHJcbiAqL1xyXG4gIGlzVGV4dE92ZXJmbG93aW5nKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWVsZW1lbnQpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aDtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAqIENvbXB1dGVzIGFuZCBlbWl0cyB0aGUgbGFiZWwgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGVsZW1lbnQocykuXHJcbiAqXHJcbiAqIFRoaXMgbWV0aG9kIGluc3BlY3RzIHRoZSBjdXJyZW50IGBiaW5kYCB2YWx1ZSBhbmQgdGhlIGBkYXRhc291cmNlYCB0byBkZXRlcm1pbmVcclxuICogdGhlIGxhYmVsKHMpIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50KHMpLiBUaGUgYmVoYXZpb3IgZGlmZmVycyBkZXBlbmRpbmcgb24gd2hldGhlclxyXG4gKiB0aGUgY29tcG9uZW50IGlzIGluIHNpbmdsZSBvciBtdWx0aXBsZSBzZWxlY3Rpb24gbW9kZTpcclxuICpcclxuICogLSAqKk11bHRpcGxlIHNlbGVjdGlvbiAoYG11bHRpcGxlID0gdHJ1ZWApKipcclxuICogICAtIElmIGV4YWN0bHkgb25lIGVsZW1lbnQgaXMgc2VsZWN0ZWQsIGl0cyBsYWJlbCBpcyBlbWl0dGVkLlxyXG4gKiAgIC0gSWYgbXVsdGlwbGUgZWxlbWVudHMgYXJlIHNlbGVjdGVkLCB0aGVpciBsYWJlbHMgYXJlIGZvcm1hdHRlZCBhcyBhIHN0cmluZ1xyXG4gKiAgICAgYXJyYXkgcmVwcmVzZW50YXRpb246IGBbXCJMYWJlbDFcIiwgXCJMYWJlbDJcIiwgLi4uXWAuXHJcbiAqXHJcbiAqIC0gKipTaW5nbGUgc2VsZWN0aW9uIChgbXVsdGlwbGUgPSBmYWxzZWApKipcclxuICogICAtIFRoZSBsYWJlbCBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpcyBlbWl0dGVkIGlmIGl0IGV4aXN0cyBpbiB0aGUgZGF0YXNvdXJjZS5cclxuICpcclxuICogSWYgYSB2YWxpZCBsYWJlbCBpcyByZXNvbHZlZCwgdGhlIG1ldGhvZCBlbWl0cyB0aGUgcmVzdWx0IHRocm91Z2hcclxuICogdGhlIGBzZWxlY3RlZExhYmVsQ2hhbmdlYCBldmVudCBlbWl0dGVyLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiAtIGBiaW5kYCByZXByZXNlbnRzIHRoZSBzZWxlY3RlZCBpZCAoc2luZ2xlIG1vZGUpIG9yIGFuIGFycmF5IG9mIGlkcyAobXVsdGlwbGUgbW9kZSkuXHJcbiAqIC0gYGRhdGFzb3VyY2VgIGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gZWxlbWVudHMgd2l0aCBhdCBsZWFzdCBgaWRgIGFuZCBgbGFiZWxgIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG4gIHByaXZhdGUgX2hhbmRsZVNlbGVjdGVkRWxlbWVudHNMYWJlbENoYW5nZSgpOiB2b2lkIHtcclxuICAgIGxldCBzZWxlY3Rpb25MYWJlbDogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmJpbmQpKSB7XHJcbiAgICAgIGxldCBzZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5kYXRhc291cmNlLmZpbHRlcihlID0+IHRoaXMuYmluZC5pbmNsdWRlcyhlLmlkKSk7XHJcblxyXG4gICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT0gMSlcclxuICAgICAge1xyXG4gICAgICAgIHNlbGVjdGlvbkxhYmVsID0gc2VsZWN0ZWRFbGVtZW50c1swXS5sYWJlbDtcclxuICAgICAgfSAgICAgIFxyXG4gICAgICBlbHNlIGlmIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDEpXHJcbiAgICAgIHtcclxuICAgICAgICBzZWxlY3Rpb25MYWJlbCA9IGBbJHtzZWxlY3RlZEVsZW1lbnRzLm1hcChlID0+IGBcIiR7ZS5sYWJlbH1cImApLmpvaW4oJywgJyl9XWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgc2VsZWN0ZWRFbGVtZW50OiBhbnkgPSB0aGlzLmRhdGFzb3VyY2UuZmluZChlID0+IGUuaWQgPT0gdGhpcy5iaW5kKTtcclxuXHJcbiAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQpIHtcclxuICAgICAgICBzZWxlY3Rpb25MYWJlbCA9IHNlbGVjdGVkRWxlbWVudC5sYWJlbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWxlY3Rpb25MYWJlbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2UuZW1pdChzZWxlY3Rpb25MYWJlbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXN0aW5jdCh2YWx1ZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KHZhbHVlcyldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVFeHRlcm5hbFNlbGVjdGlvbihkcm9wZG93bkV4dGVybmFsU2VsZWN0aW9uT3V0cHV0OiBEcm9wZG93bkV4dGVybmFsU2VsZWN0aW9uT3V0cHV0KTogdm9pZCB7XHJcbiAgICBpZiAoIWRyb3Bkb3duRXh0ZXJuYWxTZWxlY3Rpb25PdXRwdXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgc2VsZWN0aW9uID0gZHJvcGRvd25FeHRlcm5hbFNlbGVjdGlvbk91dHB1dC5pdGVtcztcclxuICAgIGxldCBzZWxlY3Rpb25LZXkgPSBkcm9wZG93bkV4dGVybmFsU2VsZWN0aW9uT3V0cHV0Lml0ZW1LZXlQcm9wZXJ0eU5hbWU7XHJcblxyXG4gICAgLy8gSGFuZGxlIG11bHRpcGxlIG1vZGUgc2VsZWN0aW9uXHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHNlbGVjdGlvbikgJiYgc2VsZWN0aW9uLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgIGxldCBuZXdJdGVtczogYW55W10gPSBzZWxlY3Rpb25cclxuICAgICAgICAuZmlsdGVyKGkgPT4gIXRoaXMuZGF0YXNvdXJjZS5zb21lKHMgPT4gcy5pZCA9PSBpW3NlbGVjdGlvbktleV0pKTtcclxuXHJcbiAgICAgIGlmIChuZXdJdGVtcyAmJiBuZXdJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gZm9ybWF0IHNlbGVjdGVkIGl0ZW1zXHJcbiAgICAgICAgbGV0IGxhYmVsUHJvcE5hbWUgPSB0aGlzLmdldEJlc3RMYWJlbFByb3BlcnR5TmFtZShzZWxlY3Rpb25bMF0pO1xyXG4gICAgICAgIGxldCB0ZW1wQXJyYXk6IGFueVtdID0gbmV3SXRlbXMubWFwKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiBlbGVtZW50W3NlbGVjdGlvbktleV0sXHJcbiAgICAgICAgICAgIGxhYmVsOiAobGFiZWxQcm9wTmFtZSBpbiBlbGVtZW50KSA/IGVsZW1lbnRbbGFiZWxQcm9wTmFtZV0gOiB0aGlzLmxhYmVsT2ZFbGVtZW50Tm90Rm91bmRUZXh0XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGFwZW5kIHNlbGVjdGVkIGl0ZW1zIHRvIERhdGFzb3VyY2VcclxuICAgICAgICB0aGlzLl9kYXRhc291cmNlID0gdGhpcy5fZGlzdGluY3RCeUlkKFsuLi50aGlzLmRhdGFzb3VyY2UsIC4uLnRlbXBBcnJheV0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zb3J0KSB7XHJcbiAgICAgICAgICB0aGlzLl9kYXRhc291cmNlLnNvcnQodGhpcy5fY29tcGFyZUZ1bmN0aW9uKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IG5ld1NlbGVjdGVkSXRlbXNJZHM6IGFueVtdID0gc2VsZWN0aW9uLm1hcChpID0+IGlbc2VsZWN0aW9uS2V5XSk7XHJcbiAgICAgIGxldCBzZWxlY3RlZEl0ZW1zSWRzOiBhbnlbXSA9IHRoaXMuZGlzdGluY3QoWy4uLih0aGlzLmJpbmQgPyB0aGlzLmJpbmQgOiBbXSksIC4uLm5ld1NlbGVjdGVkSXRlbXNJZHNdKTtcclxuICAgICAgdGhpcy5vbk11bHRpU2VsZWN0TW9kZWxDaGFuZ2Uoc2VsZWN0ZWRJdGVtc0lkcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gSGFuZGxlIHNpZ25sZSBtb2RlIHNlbGVjdGlvblxyXG4gICAgICB0aGlzLmJpbmRWYWx1ZUNoYW5nZWQoc2VsZWN0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGFiZWxQcm9wZXJ0eU5hbWVSb290U2VnbWVudDogc3RyaW5nID0gJ2xpYmVsbGUnO1xyXG4gIC8qKlxyXG4gKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBwcm9wZXJ0eSAoYWxwaGFiZXRpY2FsbHkpIFxyXG4gKiB3aG9zZSBuYW1lIGNvbnRhaW5zICdsYWJlbCcgKGNhc2UtaW5zZW5zaXRpdmUpIGZyb20gYSBnaXZlbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmogLSBUaGUgc291cmNlIG9iamVjdCAoY2FuIGJlIG9mIHR5cGUgYW55KVxyXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIHByb3BlcnR5LCBvciB1bmRlZmluZWQgaWYgbm9uZSBmb3VuZFxyXG4gKi9cclxuICBwcml2YXRlIGdldEZpcnN0TGFiZWxQcm9wZXJ0eU5hbWUob2JqOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxyXG4gICAgICAuZmlsdGVyKGtleSA9PiBrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmxhYmVsUHJvcGVydHlOYW1lUm9vdFNlZ21lbnQpKVxyXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKVxyXG4gICAgICAubWFwKGtleSA9PiBvYmpba2V5XSlbMF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJlc3RMYWJlbFByb3BlcnR5TmFtZShvYmplY3Q6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5sYWJlbEZpZWxkO1xyXG5cclxuICAgIC8vIFRPRE8sIEBIYXNzZW4sIMOgIHJldm9pciBwbHVzIHRhcmQuXHJcbiAgICBsZXQgYmVzdExhYmVsUHJvcGVydHlOYW1lOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBpZiAodGhpcy5sYWJlbEZpZWxkIGluIG9iamVjdCkgYmVzdExhYmVsUHJvcGVydHlOYW1lID0gdGhpcy5sYWJlbEZpZWxkO1xyXG4gICAgZWxzZSBpZiAodGhpcy5sYWJlbFByb3BlcnR5TmFtZVJvb3RTZWdtZW50IGluIG9iamVjdCkgYmVzdExhYmVsUHJvcGVydHlOYW1lID0gdGhpcy5sYWJlbFByb3BlcnR5TmFtZVJvb3RTZWdtZW50O1xyXG4gICAgZWxzZSBiZXN0TGFiZWxQcm9wZXJ0eU5hbWUgPSB0aGlzLmdldEZpcnN0TGFiZWxQcm9wZXJ0eU5hbWUob2JqZWN0KTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhgW0xhYmVsRmllbGQgOiAke3RoaXMubGFiZWxGaWVsZH1dIFZTIFtCZXN0TGFiZWxQcm9wZXJ0eU5hbWUgOiAke2Jlc3RMYWJlbFByb3BlcnR5TmFtZX1dYCk7XHJcbiAgICByZXR1cm4gYmVzdExhYmVsUHJvcGVydHlOYW1lO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufSIsIjxkaXYgKm5nSWY9XCIhbXVsdGlwbGU7IGVsc2UgbXVsdGlTZWxlY3RcIiBjbGFzcz1cImZsZXhcIj5cclxuICA8cC1kcm9wZG93biBcclxuICAgIFtvcHRpb25zXT1cImRhdGFzb3VyY2VcIlxyXG4gICAgW25nTW9kZWxdPVwiYmluZFwiXHJcbiAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcclxuICAgIG9wdGlvblZhbHVlPVwiaWRcIlxyXG4gICAgW2xvYWRpbmddPVwiIWRhdGFMb2FkZWRcIlxyXG4gICAgZmlsdGVyQnk9XCJsYWJlbFwiIFxyXG4gICAgW2ZpbHRlcl09XCJ0cnVlXCIgXHJcbiAgICBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmYWxzZVwiXHJcbiAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXHJcbiAgICBbc2hvd0NsZWFyXT1cInNob3dDbGVhclwiIFxyXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgIChvbkNoYW5nZSk9XCJoYW5kbGVDaGFuZ2VFdmVudCgkZXZlbnQpXCJcclxuICAgIChvblNob3cpPVwib25PcGVuKClcIiAob25GaWx0ZXIpPVwic2VhcmNoVmFsdWVDaGFuZ2VkKCRldmVudClcIiAob25DbGljayk9XCJvblNlYXJjaENvbWJvQ2xpY2soJGV2ZW50KVwiXHJcbiAgICBbc3R5bGVdPVwieydtYXgtd2lkdGgnOiBtYXhXaWR0aCwgJ3dpZHRoJzonMTAwJScsICdoZWlnaHQnOiAnMS43cmVtJ31cIlxyXG4gICAgW25nQ2xhc3NdPVwiaXNBciA/ICdwLWRyb3Bkb3duLWNsZWFyLWljb25BUic6ICdwLWRyb3Bkb3duLWNsZWFyLWljb25GUidcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyXCIgXHJcbiAgICBjbGFzcz1cInt7bXlTdHlsZUNsYXNzfX1cIiBcclxuICAgIHN0eWxlQ2xhc3M9XCJ7e215U3R5bGVDbGFzc319IGJvcmRlci1yYWRpdXMtNyB7e3ZhbGlkYXRpb25TdGF0dXNDc3NDbGFzc319XCIgXHJcbiAgICBhcHBlbmRUbz1cImJvZHlcIj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1oZWFkZXIgZmxleCBnYXAtMSBwdC0yIHB4LTJcIj5cclxuICAgICAgICA8VHNpLUJ1dHRvbiAqbmdJZj1cInNob3dTZWFyY2hCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNlYXJjaFwiIHRvb2x0aXBUZXh0PVwic2hhcmVkVWktc2VhcmNoQ29tYm8tYWN0aW9uLXNlYXJjaFwiXHJcbiAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Cb3R0b21cIiBzdHlsZUNsYXNzPVwicC1idXR0b24tcHJpbWFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCIgKGNsaWNrKT1cIm9wZW5TZWFyY2hEaWFsb2coKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93QWR2YW5jZWRTZWFyY2hCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNvcnQtYW1vdW50LWRvd25cIiB0b29sdGlwVGV4dD1cInNoYXJlZFVpLXNlYXJjaENvbWJvLWFjdGlvbi1hZHZhbmNlZFNlYXJjaFwiXHJcbiAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Cb3R0b21cIiBzdHlsZUNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5BZHZhbmNlZFNlYXJjaENvbXBvbmVudCgpXCI+XHJcbiAgICAgICAgPC9Uc2ktQnV0dG9uPlxyXG5cclxuICAgICAgICA8VHNpLUJ1dHRvbiAqbmdJZj1cInNob3dBZGRCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXBsdXNcIiB0b29sdGlwVGV4dD1cInNoYXJlZFVpLXNlYXJjaENvbWJvLWFjdGlvbi1hZGRcIlxyXG4gICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uQm90dG9tXCIgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiIChjbGljayk9XCJhZGRFbGVtZW50KClcIj5cclxuICAgICAgICA8L1RzaS1CdXR0b24+XHJcblxyXG4gICAgICAgIDxUc2ktQnV0dG9uICpuZ0lmPVwic2hvd1VwZGF0ZUJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktcGVuY2lsXCIgdG9vbHRpcFRleHQ9XCJzaGFyZWRVaS1zZWFyY2hDb21iby1hY3Rpb24tZWRpdFwiXHJcbiAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Cb3R0b21cIiBzdHlsZUNsYXNzPVwicC1idXR0b24tcHJpbWFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCIgKGNsaWNrKT1cInVwZGF0ZUVsZW1lbnQoKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93Q29uc3VsdEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktZXllXCIgdG9vbHRpcFRleHQ9XCJzaGFyZWRVaS1zZWFyY2hDb21iby1hY3Rpb24tY29uc3VsdFwiXHJcbiAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Cb3R0b21cIiBzdHlsZUNsYXNzPVwicC1idXR0b24tcHJpbWFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCIgKGNsaWNrKT1cImNvbnN1bHRFbGVtZW50KClcIj5cclxuICAgICAgICA8L1RzaS1CdXR0b24+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICBcclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHlcIj5cclxuICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTMgZ2FwLTJcIj5cclxuICAgICAgICBcclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNBcGlFcnJvcjsgZWxzZSBhcGlFcnJvclwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNEYXRhc291cmNlRW1wdHkgJiYgIWlzRmlsdGVyaW5nXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7ICdzZWFyY2hfY29tYm9fbm9fZWxlbWVudCcgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc05vUmVzdWx0QWZ0ZXJGaWx0ZXJcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5mby1jaXJjbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgJ3NlYXJjaF9jb21ib19ub19yZXN1bHQnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYXBpRXJyb3I+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUgdGV4dC1vcmFuZ2UtNTAwXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICB7eyAnc2VhcmNoX2NvbWJvX2xvYWRfZXJyb3InIHwgbG9jYWxpemUgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1cIiBsZXQtc2VsZWN0ZWRPcHRpb24+XHJcbiAgICAgIDxkaXYgcFRvb2x0aXA9XCJ7e3NlbGVjdGVkT3B0aW9uLmxhYmVsfX1cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiB0b29sdGlwU3R5bGVDbGFzcz1cImN1c3RvbS10b29sdGlwXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU3RhdHVzQ29tYm8gJiYgc3RhdHVzTWV0YWRhdGE7IGVsc2Ugbm9ybWFsU2VsZWN0ZWRcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZE9wdGlvbiAmJiBnZXRTdGF0dXNPcHRpb24oc2VsZWN0ZWRPcHRpb24ubGFiZWwpIGFzIG9wdFwiPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwibGlnaHRlbkNvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJnZXRSZWFkYWJsZVRleHRDb2xvcihvcHQuY29sb3JIZXgpXCI+XHJcbiAgICAgICAgICAgICAge3sgc2VsZWN0ZWRPcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsU2VsZWN0ZWQ+XHJcbiAgICAgICAgICA8c3Bhbj57eyBzZWxlY3RlZE9wdGlvbi5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIGxldC10YXJnZXQgcFRlbXBsYXRlPVwiaXRlbVwiPlxyXG4gICAgICA8ZGl2IHBUb29sdGlwPVwie3t0YXJnZXQubGFiZWx9fVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHRvb2x0aXBTdHlsZUNsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU3RhdHVzQ29tYm8gJiYgc3RhdHVzTWV0YWRhdGE7IGVsc2Ugbm9ybWFsT3B0aW9uXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0U3RhdHVzT3B0aW9uKHRhcmdldC5sYWJlbCkgYXMgb3B0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtYm9sZCBzdGF0dXMtYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwibGlnaHRlbkNvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImdldFJlYWRhYmxlVGV4dENvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmctdG9wXT1cIicwLjFyZW0nXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nLWJvdHRvbV09XCInMC4xcmVtJ1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7e3RhcmdldC5sYWJlbH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbE9wdGlvbj5cclxuICAgICAgICAgIDxzcGFuPnt7dGFyZ2V0LmxhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8L3AtZHJvcGRvd24+XHJcblxyXG4gIDwhLS0gQnViYmxlIEluZm8gLS0+XHJcbiAgPFRzaS1CdWJibGUtSW5mbyBbaW5mb1RleHRdPVwiaW5mb1RleHRcIj48L1RzaS1CdWJibGUtSW5mbz5cclxuXHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNtdWx0aVNlbGVjdD5cclxuICA8cC1tdWx0aVNlbGVjdFxyXG4gICAgI211bHRpU2VsZWN0RWxlbWVudFxyXG4gICAgW29wdGlvbnNdPVwiZ3JvdXBwZWREYXRhU291cmNlXCJcclxuICAgIFtncm91cF09XCJ0cnVlXCIgXHJcbiAgICBbbmdNb2RlbF09XCJiaW5kXCJcclxuICAgIFtvcHRpb25MYWJlbF09XCInbGFiZWwnXCJcclxuICAgIFtvcHRpb25WYWx1ZV09XCInaWQnXCJcclxuICAgIFtsb2FkaW5nXT1cIiFkYXRhTG9hZGVkXCJcclxuICAgIFtmaWx0ZXJCeV09XCInbGFiZWwnXCJcclxuICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXHJcbiAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXHJcbiAgICBbc2hvd0NsZWFyXT1cInNob3dDbGVhclwiXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgW3NlbGVjdGVkSXRlbXNMYWJlbF09XCInc2hhcmVkX2NvbXBvbmVudF9tdWx0aXNlbGVjdF9zZWxlY3RlZF9pdGVtc19jb3VudCcgfCBsb2NhbGl6ZVwiXHJcbiAgICBbbWF4U2VsZWN0ZWRMYWJlbHNdPVwibWF4U2VsZWN0ZWRMYWJlbHNcIlxyXG4gICAgW3Nob3dUb2dnbGVBbGxdPVwiZmFsc2VcIlxyXG4gICAgW3N0eWxlXT1cInsnbWF4LXdpZHRoJzogbWF4V2lkdGgsICd3aWR0aCc6JzEwMCUnLCAnaGVpZ2h0JzogJzEuN3JlbSd9XCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZUhvbGRlclwiXHJcbiAgICBbbmdDbGFzc109XCJpc0FyID8gJ3AtZHJvcGRvd24tY2xlYXItaWNvbkFSJzogJ3AtZHJvcGRvd24tY2xlYXItaWNvbkZSJ1wiXHJcbiAgICBjbGFzcz1cInt7bXlTdHlsZUNsYXNzfX1cIiBcclxuICAgIHN0eWxlQ2xhc3M9XCJ7e215U3R5bGVDbGFzc319IGJvcmRlci1yYWRpdXMtNyB7e3ZhbGlkYXRpb25TdGF0dXNDc3NDbGFzc319XCJcclxuICAgIHBhbmVsU3R5bGVDbGFzcz1cInRzaS1tdWx0aXNlbGVjdC1wYW5lbFwiXHJcbiAgICBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25NdWx0aVNlbGVjdE1vZGVsQ2hhbmdlKCRldmVudClcIlxyXG4gICAgKG9uUGFuZWxTaG93KT1cIm9uT3BlbigpXCJcclxuICAgIChvbkZpbHRlcik9XCJzZWFyY2hWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAob25DbGljayk9XCJvblNlYXJjaENvbWJvQ2xpY2soJGV2ZW50KVwiXHJcbiAgICBbcFRvb2x0aXBdPVwibXVsdGlTZWxlY3RFbGVtZW50Py5zZWxlY3RlZE9wdGlvbnM/Lmxlbmd0aCA/IG11bHRpU2VsZWN0VG9vbHRpcENvbnRlbnQgOiB1bmRlZmluZWRcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaXRlbVwiIGxldC1vcHRpb24+XHJcbiAgICAgIDxkaXYgI2xhYmVsUmVmIGNsYXNzPVwidHNpLW11bHRpc2VsZWN0LW9wdGlvbi1sYWJlbFwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIHRvb2x0aXBBcHBlbmRUbz1cImJvZHlcIiBbcFRvb2x0aXBdPVwiaXNUZXh0T3ZlcmZsb3dpbmcobGFiZWxSZWYpID8gb3B0aW9uLmxhYmVsIDogbnVsbFwiPlxyXG4gICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1oZWFkZXIgZmxleCBnYXAtMSBwLTFcIj5cclxuICAgICAgICA8VHNpLUJ1dHRvbiAqbmdJZj1cInNob3dTZWFyY2hCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNlYXJjaFwiIHRvb2x0aXBUZXh0PVwic2hhcmVkVWktbXVsdGlzZWxlY3QtYWN0aW9uLXNlYXJjaFwiXHJcbiAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Cb3R0b21cIiBzdHlsZUNsYXNzPVwicC1idXR0b24tcHJpbWFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuU2VhcmNoRGlhbG9nKClcIj5cclxuICAgICAgICA8L1RzaS1CdXR0b24+XHJcblxyXG4gICAgICAgIDxUc2ktQnV0dG9uICpuZ0lmPVwic2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1zb3J0LWFtb3VudC1kb3duXCIgdG9vbHRpcFRleHQ9XCJzaGFyZWRVaS1tdWx0aXNlbGVjdC1hY3Rpb24tYWR2YW5jZWRTZWFyY2hcIlxyXG4gICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLkJvdHRvbVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5BZHZhbmNlZFNlYXJjaENvbXBvbmVudCgpXCI+XHJcbiAgICAgICAgPC9Uc2ktQnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLW11bHRpU2VsZWN0PlxyXG5cclxuICA8bmctdGVtcGxhdGUgI211bHRpU2VsZWN0VG9vbHRpcENvbnRlbnQ+XHJcbiAgICA8ZGl2IGNsYXNzPVwicC0yXCI+XHJcbiAgICAgIDwhLS0gSWYgdGhlcmUgYXJlIHNlbGVjdGVkIGl0ZW1zIC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibXVsdGlTZWxlY3RFbGVtZW50Py5zZWxlY3RlZE9wdGlvbnM/Lmxlbmd0aDsgZWxzZSBub0l0ZW1zXCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1iLTFcIj5cclxuICAgICAgICAgIHt7ICdzaGFyZWRfY29tcG9uZW50X211bHRpc2VsZWN0X3NlbGVjdGVkX2l0ZW1zX3RpdGxlJyB8IGxvY2FsaXplIH19XHJcbiAgICAgICAgICAoe3sgbXVsdGlTZWxlY3RFbGVtZW50LnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggfX0pXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDx1bCBjbGFzcz1cIm0tMCBwbC0zXCI+XHJcbiAgICAgICAgICA8IS0tIFNob3cgb25seSBmaXJzdCAxMCBpdGVtcyAtLT5cclxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdldFRvcFNlbGVjdGVkT3B0aW9ucyhtdWx0aVNlbGVjdEVsZW1lbnQpXCI+XHJcbiAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICA8IS0tIFNob3cgbWVzc2FnZSBpZiBtb3JlIHRoYW4gMTAgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIm11bHRpU2VsZWN0RWxlbWVudC5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMTBcIiBjbGFzcz1cInRleHQtc20gbXQtMSB0ZXh0LWdyYXktNTAwXCI+XHJcbiAgICAgICAgICB7eyBtdWx0aVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAtIDEwIH19XHJcbiAgICAgICAgICB7eyAnc2hhcmVkX2NvbXBvbmVudF9tdWx0aXNlbGVjdF9zZWxlY3RlZF9pdGVtc19tb3JlX21lc3NhZ2UnIHwgbG9jYWxpemUgfX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPCEtLSBJZiBubyBpdGVtcyBzZWxlY3RlZCAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlICNub0l0ZW1zPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSB0ZXh0LTUwMFwiPlxyXG4gICAgICAgICAge3sgJ3NoYXJlZF9jb21wb25lbnRfbXVsdGlzZWxlY3Rfc2VsZWN0ZWRfaXRlbXNfZW1wdHknIHwgbG9jYWxpemUgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -5198,7 +5198,7 @@ class TsiSearchComboComponent extends TsiInputBase {
5198
5198
  return this._bind;
5199
5199
  }
5200
5200
  set bind(value) {
5201
- if (this._bind === value || !this._bind && !value)
5201
+ if (this._bind === value)
5202
5202
  return;
5203
5203
  if (isNullOrEmpty(value)) {
5204
5204
  this._bind = null;