igniteui-angular 17.0.9 → 17.0.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.
@@ -435,7 +435,7 @@ export class IgxStepComponent extends ToggleAnimationPlayer {
435
435
  changeVerticalActiveStep() {
436
436
  this.stepperService.expand(this);
437
437
  if (!this.animationSettings.closeAnimation) {
438
- this.stepperService.previousActiveStep.openAnimationPlayer?.finish();
438
+ this.stepperService.previousActiveStep?.openAnimationPlayer?.finish();
439
439
  }
440
440
  if (!this.animationSettings.openAnimation) {
441
441
  this.stepperService.activeStep.closeAnimationPlayer?.finish();
@@ -530,4 +530,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
530
530
  type: HostListener,
531
531
  args: ['keydown', ['$event']]
532
532
  }] } });
533
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvc3RlcHBlci9zdGVwL3N0ZXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3N0ZXBwZXIvc3RlcC9zdGVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUF5QixNQUFNLDhCQUE4QixDQUFDO0FBRXpHLE9BQU8sRUFBRSxxQkFBcUIsRUFBMkIsTUFBTSxrREFBa0QsQ0FBQztBQUNsSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUdoRyxPQUFPLEVBQXVCLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZJLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBRWxFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQjs7Ozs7Ozs7Ozs7Ozs7Ozs7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c0JBRDdCLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUt2QyxnQkFBZ0I7c0JBRHRCLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUt0QixTQUFTO3NCQURmLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHlCQUF5QixDQUFDO2dCQUtsRCxPQUFPO3NCQURiLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQW1JaEQsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU87Z0JBV2QsTUFBTTtzQkFEWixZQUFZO3VCQUFDLE1BQU07Z0JBUWIsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEaXJlY3Rpb24sIEhvcml6b250YWxBbmltYXRpb25UeXBlLCBJZ3hTbGlkZUNvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jYXJvdXNlbC9jYXJvdXNlbC1iYXNlJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgVG9nZ2xlQW5pbWF0aW9uUGxheWVyLCBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB9IGZyb20gJy4uLy4uL2V4cGFuc2lvbi1wYW5lbC90b2dnbGUtYW5pbWF0aW9uLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hBbmd1bGFyQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FuaW1hdGlvbi9hbmd1bGFyLWFuaW1hdGlvbi1zZXJ2aWNlJztcbmltcG9ydCB7IEFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbmltYXRpb24vYW5pbWF0aW9uJztcbmltcG9ydCB7IElneERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlyZWN0aW9uL2RpcmVjdGlvbmFsaXR5JztcbmltcG9ydCB7IElneFN0ZXAsIElneFN0ZXBwZXIsIElneFN0ZXBwZXJPcmllbnRhdGlvbiwgSWd4U3RlcFR5cGUsIElHWF9TVEVQUEVSX0NPTVBPTkVOVCwgSUdYX1NURVBfQ09NUE9ORU5UIH0gZnJvbSAnLi4vc3RlcHBlci5jb21tb24nO1xuaW1wb3J0IHsgSWd4U3RlcENvbnRlbnREaXJlY3RpdmUsIElneFN0ZXBJbmRpY2F0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi9zdGVwcGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hTdGVwcGVyU2VydmljZSB9IGZyb20gJy4uL3N0ZXBwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hSaXBwbGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3JpcHBsZS9yaXBwbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5nSWYsIE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbi8qKlxuICogVGhlIElneFN0ZXBDb21wb25lbnQgaXMgdXNlZCB3aXRoaW4gdGhlIGBpZ3gtc3RlcHBlcmAgZWxlbWVudCBhbmQgaXQgaG9sZHMgdGhlIGNvbnRlbnQgb2YgZWFjaCBzdGVwLlxuICogSXQgYWxzbyBzdXBwb3J0cyBjdXN0b20gaW5kaWNhdG9ycywgdGl0bGUgYW5kIHN1YnRpdGxlLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4U3RlcHBlck1vZHVsZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyBzdGVwXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqICA8aWd4LXN0ZXBwZXI+XG4gKiAgLi4uXG4gKiAgICA8aWd4LXN0ZXAgW2FjdGl2ZV09XCJ0cnVlXCIgW2NvbXBsZXRlZF09XCJ0cnVlXCI+XG4gKiAgICAgIC4uLlxuICogICAgPC9pZ3gtc3RlcD5cbiAqICAuLi5cbiAqICA8L2lneC1zdGVwcGVyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXN0ZXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnc3RlcC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogSUdYX1NURVBfQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogSWd4U3RlcENvbXBvbmVudCB9XG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBOZ0NsYXNzLCBJZ3hSaXBwbGVEaXJlY3RpdmUsIE5nVGVtcGxhdGVPdXRsZXRdXG59KVxuZXhwb3J0IGNsYXNzIElneFN0ZXBDb21wb25lbnQgZXh0ZW5kcyBUb2dnbGVBbmltYXRpb25QbGF5ZXIgaW1wbGVtZW50cyBJZ3hTdGVwLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElneFNsaWRlQ29tcG9uZW50QmFzZSB7XG5cbiAgICAvKipcbiAgICAgKiBHZXQvU2V0IHRoZSBgaWRgIG9mIHRoZSBzdGVwIGNvbXBvbmVudC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBcImlneC1zdGVwLTBcImA7XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc3RlcCBpZD1cIm15LWZpcnN0LXN0ZXBcIj48L2lneC1zdGVwPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBzdGVwSWQgPSB0aGlzLnN0ZXAuaWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtc3RlcC0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogR2V0L1NldCB3aGV0aGVyIHRoZSBzdGVwIGlzIGludGVyYWN0YWJsZS5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXN0ZXBwZXI+XG4gICAgICogLi4uXG4gICAgICogICAgIDxpZ3gtc3RlcCBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvaWd4LXN0ZXA+XG4gICAgICogLi4uXG4gICAgICogPC9pZ3gtc3RlcHBlcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnN0ZXBwZXIuc3RlcHNbMV0uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuc3RlcHBlci5saW5lYXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2UuY2FsY3VsYXRlTGluZWFyRGlzYWJsZWRTdGVwcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldC9TZXQgd2hldGhlciB0aGUgc3RlcCBpcyBjb21wbGV0ZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFdoZW4gc2V0IHRvIGB0cnVlYCB0aGUgZm9sbG93aW5nIHNlcGFyYXRvciBpcyBzdHlsZWQgYHNvbGlkYC5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXN0ZXBwZXI+XG4gICAgICogLi4uXG4gICAgICogICAgIDxpZ3gtc3RlcCBbY29tcGxldGVkXT1cInRydWVcIj48L2lneC1zdGVwPlxuICAgICAqIC4uLlxuICAgICAqIDwvaWd4LXN0ZXBwZXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5zdGVwcGVyLnN0ZXBzWzFdLmNvbXBsZXRlZCA9IHRydWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtc3RlcHBlcl9fc3RlcC0tY29tcGxldGVkJylcbiAgICBwdWJsaWMgY29tcGxldGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBHZXQvU2V0IHdoZXRoZXIgdGhlIHN0ZXAgaXMgdmFsaWQuXG4gICAgICpgYGBodG1sXG4gICAgICogPGlneC1zdGVwIFtpc1ZhbGlkXT1cImZvcm0uZm9ybS52YWxpZFwiPlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8ZGl2IGlneFN0ZXBDb250ZW50PlxuICAgICAqICAgICAgICAgIDxmb3JtICNmb3JtPVwibmdGb3JtXCI+XG4gICAgICogICAgICAgICAgICAgIC4uLlxuICAgICAqICAgICAgICAgIDwvZm9ybT5cbiAgICAgKiAgICAgIDwvZGl2PlxuICAgICAqIDwvaWd4LXN0ZXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIGdldCBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBpc1ZhbGlkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLnN0ZXBwZXIubGluZWFyICYmIHRoaXMuaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zdGVwcGVyU2VydmljZS5jYWxjdWxhdGVMaW5lYXJEaXNhYmxlZFN0ZXBzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQvU2V0IHdoZXRoZXIgdGhlIHN0ZXAgaXMgb3B0aW9uYWwuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIE9wdGlvbmFsIHN0ZXBzIHZhbGlkaXR5IGRvZXMgbm90IGFmZmVjdCB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aGVuIHRoZSBzdGVwcGVyIGlzIGluIGxpbmVhciBtb2RlIGkuZS5cbiAgICAgKiBpZiBvcHRpb25hbCBzdGVwIGlzIGludmFsaWQgdGhlIHVzZXIgY291bGQgc3RpbGwgbW92ZSB0byB0aGUgbmV4dCBzdGVwLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc3RlcCBbb3B0aW9uYWxdPVwidHJ1ZVwiPjwvaWd4LXN0ZXA+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuc3RlcHBlci5zdGVwc1sxXS5vcHRpb25hbCA9IHRydWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIG9wdGlvbmFsID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBHZXQvU2V0IHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIHN0ZXBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXN0ZXAgW2FjdGl2ZV09XCJ0cnVlXCI+PC9pZ3gtc3RlcD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnN0ZXBwZXIuc3RlcHNbMV0uYWN0aXZlID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZTogYm9vbGVhblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJylcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2V0IGFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2UuZXhwYW5kVGhyb3VnaEFwaSh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2UuY29sbGFwc2UodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHBlclNlcnZpY2UuYWN0aXZlU3RlcCA9PT0gdGhpcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFiSW5kZXg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICoqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgcm9sZSA9ICd0YWInO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY29udHJvbHMnKVxuICAgIHB1YmxpYyBnZXQgY29udGVudElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnQ/LmlkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXN0ZXBwZXJfX3N0ZXAnKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1zdGVwcGVyX19zdGVwLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGdldCBnZW5lcmFsRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8IHRoaXMubGluZWFyRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHVibGljIGdldCB0aXRsZVBvc2l0aW9uVG9wKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnN0ZXBwZXIuc3RlcFR5cGUgIT09IElneFN0ZXBUeXBlLkZ1bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAnaWd4LXN0ZXBwZXJfX3N0ZXAtLXNpbXBsZSc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYGlneC1zdGVwcGVyX19zdGVwLS0ke3RoaXMudGl0bGVQb3NpdGlvbn1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgc3RlcCdzIGBhY3RpdmVgIHByb3BlcnR5IGNoYW5nZXMuIENhbiBiZSB1c2VkIGZvciB0d28td2F5IGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zdGVwIFsoYWN0aXZlKV09XCJ0aGlzLmlzQWN0aXZlXCI+XG4gICAgICogPC9pZ3gtc3RlcD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBzdGVwOiBJZ3hTdGVwQ29tcG9uZW50ID0gdGhpcy5zdGVwcGVyLnN0ZXBbMF07XG4gICAgICogc3RlcC5hY3RpdmVDaGFuZ2Uuc3Vic2NyaWJlKChlOiBib29sZWFuKSA9PiBjb25zb2xlLmxvZyhcIlN0ZXAgYWN0aXZlIHN0YXRlIGNoYW5nZSB0byBcIiwgZSkpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGFjdGl2ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRlbnRUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoJ2N1c3RvbUluZGljYXRvcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGN1c3RvbUluZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZCgnY29udGVudENvbnRhaW5lcicpXG4gICAgcHVibGljIGNvbnRlbnRDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gSWd4U3RlcEluZGljYXRvckRpcmVjdGl2ZSkpXG4gICAgcHVibGljIGluZGljYXRvcjogSWd4U3RlcEluZGljYXRvckRpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hTdGVwQ29udGVudERpcmVjdGl2ZSkpXG4gICAgcHVibGljIGNvbnRlbnQ6IElneFN0ZXBDb250ZW50RGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzdGVwIGluZGV4IGluc2lkZSBvZiB0aGUgc3RlcHBlci5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBzdGVwID0gdGhpcy5zdGVwcGVyLnN0ZXBzWzFdO1xuICAgICAqIGNvbnN0IHN0ZXBJbmRleDogbnVtYmVyID0gc3RlcC5pbmRleDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmRleDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGluZGljYXRvclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUgJiYgdGhpcy5zdGVwcGVyLmFjdGl2ZUluZGljYXRvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGVwcGVyLmFjdGl2ZUluZGljYXRvclRlbXBsYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQgJiYgdGhpcy5zdGVwcGVyLmludmFsaWRJbmRpY2F0b3JUZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHBlci5pbnZhbGlkSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb21wbGV0ZWQgJiYgdGhpcy5zdGVwcGVyLmNvbXBsZXRlZEluZGljYXRvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGVwcGVyLmNvbXBsZXRlZEluZGljYXRvclRlbXBsYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5kaWNhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21JbmRpY2F0b3JUZW1wbGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZGlyZWN0aW9uKCk6IERpcmVjdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBwZXJTZXJ2aWNlLnByZXZpb3VzQWN0aXZlU3RlcFxuICAgICAgICAgICAgJiYgdGhpcy5zdGVwcGVyU2VydmljZS5wcmV2aW91c0FjdGl2ZVN0ZXAuaW5kZXggPiB0aGlzLmluZGV4XG4gICAgICAgICAgICA/IERpcmVjdGlvbi5QUkVWXG4gICAgICAgICAgICA6IERpcmVjdGlvbi5ORVhUO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaXNBY2Nlc3NpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMubGluZWFyRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBpc0hvcml6b250YWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBwZXIub3JpZW50YXRpb24gPT09IElneFN0ZXBwZXJPcmllbnRhdGlvbi5Ib3Jpem9udGFsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaXNUaXRsZVZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBwZXIuc3RlcFR5cGUgIT09IElneFN0ZXBUeXBlLkluZGljYXRvcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGlzSW5kaWNhdG9yVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHBlci5zdGVwVHlwZSAhPT0gSWd4U3RlcFR5cGUuVGl0bGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCB0aXRsZVBvc2l0aW9uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBwZXIudGl0bGVQb3NpdGlvbiA/IHRoaXMuc3RlcHBlci50aXRsZVBvc2l0aW9uIDogdGhpcy5zdGVwcGVyLl9kZWZhdWx0VGl0bGVQb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGxpbmVhckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGVwcGVyU2VydmljZS5saW5lYXJEaXNhYmxlZFN0ZXBzLmhhcyh0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbGxhcHNpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBwZXJTZXJ2aWNlLmNvbGxhcHNpbmdTdGVwcy5oYXModGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBhbmltYXRpb25TZXR0aW5ncygpOiBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBwZXIudmVydGljYWxBbmltYXRpb25TZXR0aW5ncztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbnRlbnRDbGFzc2VzKCk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgJ2lneC1zdGVwcGVyX19ib2R5LWNvbnRlbnQnOiB0cnVlLCAnaWd4LXN0ZXBwZXJfX2JvZHktY29udGVudC0tYWN0aXZlJzogdGhpcy5hY3RpdmUgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnaWd4LXN0ZXBwZXJfX3N0ZXAtY29udGVudCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHN0ZXBIZWFkZXJDbGFzc2VzKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWd4LXN0ZXBwZXJfX3N0ZXAtLW9wdGlvbmFsJzogdGhpcy5vcHRpb25hbCxcbiAgICAgICAgICAgICdpZ3gtc3RlcHBlcl9fc3RlcC1oZWFkZXItLWN1cnJlbnQnOiB0aGlzLmFjdGl2ZSxcbiAgICAgICAgICAgICdpZ3gtc3RlcHBlcl9fc3RlcC1oZWFkZXItLWludmFsaWQnOiAhdGhpcy5pc1ZhbGlkXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5zdGVwcGVyU2VydmljZS52aXNpdGVkU3RlcHMuaGFzKHRoaXMpICYmICF0aGlzLmFjdGl2ZSAmJiB0aGlzLmlzQWNjZXNzaWJsZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHByZXZpb3VzOiBib29sZWFuO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBfaW5kZXg6IG51bWJlcjtcbiAgICBwcml2YXRlIF90YWJJbmRleCA9IC0xO1xuICAgIHByaXZhdGUgX3ZhbGlkID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9mb2N1c2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElHWF9TVEVQUEVSX0NPTVBPTkVOVCkgcHVibGljIHN0ZXBwZXI6IElneFN0ZXBwZXIsXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIHByb3RlY3RlZCBzdGVwcGVyU2VydmljZTogSWd4U3RlcHBlclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSWd4QW5ndWxhckFuaW1hdGlvblNlcnZpY2UpIGFuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgZGlyOiBJZ3hEaXJlY3Rpb25hbGl0eVxuICAgICkge1xuICAgICAgICBzdXBlcihhbmltYXRpb25TZXJ2aWNlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gICAgcHVibGljIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0ZXBwZXJTZXJ2aWNlLmZvY3VzZWRTdGVwID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuc3RlcHBlclNlcnZpY2UuZm9jdXNlZFN0ZXAgIT09IHRoaXMuc3RlcHBlclNlcnZpY2UuYWN0aXZlU3RlcCkge1xuICAgICAgICAgICAgdGhpcy5zdGVwcGVyU2VydmljZS5hY3RpdmVTdGVwLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgICBwdWJsaWMgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2UuYWN0aXZlU3RlcC50YWJJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mb2N1c2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuICAgICAgICBpZiAodGhpcy5zdGVwcGVyLm9yaWVudGF0aW9uID09PSBJZ3hTdGVwcGVyT3JpZW50YXRpb24uSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQVJST1dfVVAgfHwga2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19ET1dOKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghKHRoaXMucGxhdGZvcm0uaXNOYXZpZ2F0aW9uS2V5KGtleSkgfHwgdGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuaGFuZGxlTmF2aWdhdGlvbihrZXkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub3BlbkFuaW1hdGlvbkRvbmUucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGVwcGVyU2VydmljZS5hY3RpdmVTdGVwID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RlcHBlci5hY3RpdmVTdGVwQ2hhbmdlZC5lbWl0KHsgb3duZXI6IHRoaXMuc3RlcHBlciwgaW5kZXg6IHRoaXMuaW5kZXggfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNsb3NlQW5pbWF0aW9uRG9uZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2UuY29sbGFwc2UodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG9uUG9pbnRlckRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VIb3Jpem9udGFsQWN0aXZlU3RlcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VWZXJ0aWNhbEFjdGl2ZVN0ZXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVOYXZpZ2F0aW9uKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkhPTUU6XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyLnN0ZXBzLmZpbHRlcihzID0+IHMuaXNBY2Nlc3NpYmxlKVswXT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5FTkQ6XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyLnN0ZXBzLmZpbHRlcihzID0+IHMuaXNBY2Nlc3NpYmxlKS5wb3AoKT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19VUDpcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzU3RlcD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19MRUZUOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpci5ydGwgJiYgdGhpcy5zdGVwcGVyLm9yaWVudGF0aW9uID09PSBJZ3hTdGVwcGVyT3JpZW50YXRpb24uSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRTdGVwPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c1N0ZXA/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX0RPV046XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0U3RlcD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19SSUdIVDpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXIucnRsICYmIHRoaXMuc3RlcHBlci5vcmllbnRhdGlvbiA9PT0gSWd4U3RlcHBlck9yaWVudGF0aW9uLkhvcml6b250YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c1N0ZXA/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRTdGVwPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuRU5URVI6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlSG9yaXpvbnRhbEFjdGl2ZVN0ZXAoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVZlcnRpY2FsQWN0aXZlU3RlcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGNoYW5nZUhvcml6b250YWxBY3RpdmVTdGVwKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdGVwcGVyLmFuaW1hdGlvblR5cGUgPT09IEhvcml6b250YWxBbmltYXRpb25UeXBlLm5vbmUgJiYgdGhpcy5zdGVwcGVyU2VydmljZS5hY3RpdmVTdGVwICE9PSB0aGlzKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzQ2FuY2VsZWQgPSB0aGlzLnN0ZXBwZXJTZXJ2aWNlLmVtaXRBY3RpdmF0aW5nRXZlbnQodGhpcyk7XG4gICAgICAgICAgICBpZiAoYXJnc0NhbmNlbGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnN0ZXBwZXIuYWN0aXZlU3RlcENoYW5nZWQuZW1pdCh7IG93bmVyOiB0aGlzLnN0ZXBwZXIsIGluZGV4OiB0aGlzLmluZGV4IH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2UuZXhwYW5kKHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5zdGVwcGVyLmFuaW1hdGlvblR5cGUgPT09IEhvcml6b250YWxBbmltYXRpb25UeXBlLmZhZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0ZXBwZXJTZXJ2aWNlLmNvbGxhcHNpbmdTdGVwcy5oYXModGhpcy5zdGVwcGVyU2VydmljZS5wcmV2aW91c0FjdGl2ZVN0ZXApKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyU2VydmljZS5wcmV2aW91c0FjdGl2ZVN0ZXAuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBuZXh0U3RlcCgpOiBJZ3hTdGVwQ29tcG9uZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGZvY3VzZWRTdGVwID0gdGhpcy5zdGVwcGVyU2VydmljZS5mb2N1c2VkU3RlcDtcbiAgICAgICAgaWYgKGZvY3VzZWRTdGVwKSB7XG4gICAgICAgICAgICBpZiAoZm9jdXNlZFN0ZXAuaW5kZXggPT09IHRoaXMuc3RlcHBlci5zdGVwcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHBlci5zdGVwcy5maW5kKHMgPT4gcy5pc0FjY2Vzc2libGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXh0QWNjZXNzaWJsZSA9IHRoaXMuc3RlcHBlci5zdGVwcy5maW5kKChzLCBpKSA9PiBpID4gZm9jdXNlZFN0ZXAuaW5kZXggJiYgcy5pc0FjY2Vzc2libGUpO1xuICAgICAgICAgICAgcmV0dXJuIG5leHRBY2Nlc3NpYmxlID8gbmV4dEFjY2Vzc2libGUgOiB0aGlzLnN0ZXBwZXIuc3RlcHMuZmluZChzID0+IHMuaXNBY2Nlc3NpYmxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHByZXZpb3VzU3RlcCgpOiBJZ3hTdGVwQ29tcG9uZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGZvY3VzZWRTdGVwID0gdGhpcy5zdGVwcGVyU2VydmljZS5mb2N1c2VkU3RlcDtcbiAgICAgICAgaWYgKGZvY3VzZWRTdGVwKSB7XG4gICAgICAgICAgICBpZiAoZm9jdXNlZFN0ZXAuaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGVwcGVyLnN0ZXBzLmZpbHRlcihzID0+IHMuaXNBY2Nlc3NpYmxlKS5wb3AoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHByZXZTdGVwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZvY3VzZWRTdGVwLmluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5zdGVwcGVyLnN0ZXBzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChzdGVwLmlzQWNjZXNzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2U3RlcCA9IHN0ZXA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHByZXZTdGVwID8gcHJldlN0ZXAgOiB0aGlzLnN0ZXBwZXIuc3RlcHMuZmlsdGVyKHMgPT4gcy5pc0FjY2Vzc2libGUpLnBvcCgpO1xuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZVZlcnRpY2FsQWN0aXZlU3RlcCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdGVwcGVyU2VydmljZS5leHBhbmQodGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFuaW1hdGlvblNldHRpbmdzLmNsb3NlQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXBwZXJTZXJ2aWNlLnByZXZpb3VzQWN0aXZlU3RlcC5vcGVuQW5pbWF0aW9uUGxheWVyPy5maW5pc2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5hbmltYXRpb25TZXR0aW5ncy5vcGVuQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXBwZXJTZXJ2aWNlLmFjdGl2ZVN0ZXAuY2xvc2VBbmltYXRpb25QbGF5ZXI/LmZpbmlzaCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNkZWZhdWx0VGl0bGU+XG4gICAgPG5nLWNvbnRlbnQgKm5nSWY9XCJpc1RpdGxlVmlzaWJsZVwiIHNlbGVjdD1cIltpZ3hTdGVwVGl0bGVdXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiaXNUaXRsZVZpc2libGVcIiBzZWxlY3Q9XCJbaWd4U3RlcFN1YnRpdGxlXVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29udGVudFRlbXBsYXRlPlxuICAgIDxkaXYgW25nQ2xhc3NdPVwiY29udGVudENsYXNzZXNcIiAjY29udGVudENvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCJhY3RpdmUgfHwgY29sbGFwc2luZ1wiIHNlbGVjdD1cIltpZ3hTdGVwQ29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRJbmRpY2F0b3I+XG4gICAgPHNwYW4+e3sgaW5kZXggKyAxIH19PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjdXN0b21JbmRpY2F0b3I+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lneFN0ZXBJbmRpY2F0b3JdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cImlneC1zdGVwcGVyX19zdGVwLWhlYWRlclwiIGlneFJpcHBsZSBbbmdDbGFzc109XCJzdGVwSGVhZGVyQ2xhc3Nlc1wiIChrZXlkb3duKT1cImhhbmRsZUtleWRvd24oJGV2ZW50KVwiXG4gICAgKGNsaWNrKT1cIm9uUG9pbnRlckRvd24oJGV2ZW50KVwiPlxuXG4gICAgPGRpdiAqbmdJZj1cImlzSW5kaWNhdG9yVmlzaWJsZVwiIGNsYXNzPVwiaWd4LXN0ZXBwZXJfX3N0ZXAtaW5kaWNhdG9yXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbmRpY2F0b3JUZW1wbGF0ZSA/IGluZGljYXRvclRlbXBsYXRlIDogZGVmYXVsdEluZGljYXRvclwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImlneC1zdGVwcGVyX19zdGVwLXRpdGxlLXdyYXBwZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRlZmF1bHRUaXRsZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNIb3Jpem9udGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cImlneC1zdGVwcGVyX19zdGVwLWNvbnRlbnQtd3JhcHBlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
533
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvc3RlcHBlci9zdGVwL3N0ZXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3N0ZXBwZXIvc3RlcC9zdGVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUF5QixNQUFNLDhCQUE4QixDQUFDO0FBRXpHLE9BQU8sRUFBRSxxQkFBcUIsRUFBMkIsTUFBTSxrREFBa0QsQ0FBQztBQUNsSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUdoRyxPQUFPLEVBQXVCLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZJLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBRWxFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQjs7Ozs7Ozs7Ozs7Ozs7Ozs7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c0JBRDdCLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUt2QyxnQkFBZ0I7c0JBRHRCLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUt0QixTQUFTO3NCQURmLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHlCQUF5QixDQUFDO2dCQUtsRCxPQUFPO3NCQURiLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQW1JaEQsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU87Z0JBV2QsTUFBTTtzQkFEWixZQUFZO3VCQUFDLE1BQU07Z0JBUWIsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEaXJlY3Rpb24sIEhvcml6b250YWxBbmltYXRpb25UeXBlLCBJZ3hTbGlkZUNvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jYXJvdXNlbC9jYXJvdXNlbC1iYXNlJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgVG9nZ2xlQW5pbWF0aW9uUGxheWVyLCBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB9IGZyb20gJy4uLy4uL2V4cGFuc2lvbi1wYW5lbC90b2dnbGUtYW5pbWF0aW9uLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hBbmd1bGFyQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FuaW1hdGlvbi9hbmd1bGFyLWFuaW1hdGlvbi1zZXJ2aWNlJztcbmltcG9ydCB7IEFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbmltYXRpb24vYW5pbWF0aW9uJztcbmltcG9ydCB7IElneERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlyZWN0aW9uL2RpcmVjdGlvbmFsaXR5JztcbmltcG9ydCB7IElneFN0ZXAsIElneFN0ZXBwZXIsIElneFN0ZXBwZXJPcmllbnRhdGlvbiwgSWd4U3RlcFR5cGUsIElHWF9TVEVQUEVSX0NPTVBPTkVOVCwgSUdYX1NURVBfQ09NUE9ORU5UIH0gZnJvbSAnLi4vc3RlcHBlci5jb21tb24nO1xuaW1wb3J0IHsgSWd4U3RlcENvbnRlbnREaXJlY3RpdmUsIElneFN0ZXBJbmRpY2F0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi9zdGVwcGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hTdGVwcGVyU2VydmljZSB9IGZyb20gJy4uL3N0ZXBwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hSaXBwbGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3JpcHBsZS9yaXBwbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5nSWYsIE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbi8qKlxuICogVGhlIElneFN0ZXBDb21wb25lbnQgaXMgdXNlZCB3aXRoaW4gdGhlIGBpZ3gtc3RlcHBlcmAgZWxlbWVudCBhbmQgaXQgaG9sZHMgdGhlIGNvbnRlbnQgb2YgZWFjaCBzdGVwLlxuICogSXQgYWxzbyBzdXBwb3J0cyBjdXN0b20gaW5kaWNhdG9ycywgdGl0bGUgYW5kIHN1YnRpdGxlLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4U3RlcHBlck1vZHVsZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyBzdGVwXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqICA8aWd4LXN0ZXBwZXI+XG4gKiAgLi4uXG4gKiAgICA8aWd4LXN0ZXAgW2FjdGl2ZV09XCJ0cnVlXCIgW2NvbXBsZXRlZF09XCJ0cnVlXCI+XG4gKiAgICAgIC4uLlxuICogICAgPC9pZ3gtc3RlcD5cbiAqICAuLi5cbiAqICA8L2lneC1zdGVwcGVyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXN0ZXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnc3RlcC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogSUdYX1NURVBfQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogSWd4U3RlcENvbXBvbmVudCB9XG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBOZ0NsYXNzLCBJZ3hSaXBwbGVEaXJlY3RpdmUsIE5nVGVtcGxhdGVPdXRsZXRdXG59KVxuZXhwb3J0IGNsYXNzIElneFN0ZXBDb21wb25lbnQgZXh0ZW5kcyBUb2dnbGVBbmltYXRpb25QbGF5ZXIgaW1wbGVtZW50cyBJZ3hTdGVwLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElneFNsaWRlQ29tcG9uZW50QmFzZSB7XG5cbiAgICAvKipcbiAgICAgKiBHZXQvU2V0IHRoZSBgaWRgIG9mIHRoZSBzdGVwIGNvbXBvbmVudC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBcImlneC1zdGVwLTBcImA7XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc3RlcCBpZD1cIm15LWZpcnN0LXN0ZXBcIj48L2lneC1zdGVwPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBzdGVwSWQgPSB0aGlzLnN0ZXAuaWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtc3RlcC0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogR2V0L1NldCB3aGV0aGVyIHRoZSBzdGVwIGlzIGludGVyYWN0YWJsZS5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXN0ZXBwZXI+XG4gICAgICogLi4uXG4gICAgICogICAgIDxpZ3gtc3RlcCBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvaWd4LXN0ZXA+XG4gICAgICogLi4uXG4gICAgICogPC9pZ3gtc3RlcHBlcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnN0ZXBwZXIuc3RlcHNbMV0uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuc3RlcHBlci5saW5lYXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2UuY2FsY3VsYXRlTGluZWFyRGlzYWJsZWRTdGVwcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldC9TZXQgd2hldGhlciB0aGUgc3RlcCBpcyBjb21wbGV0ZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFdoZW4gc2V0IHRvIGB0cnVlYCB0aGUgZm9sbG93aW5nIHNlcGFyYXRvciBpcyBzdHlsZWQgYHNvbGlkYC5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXN0ZXBwZXI+XG4gICAgICogLi4uXG4gICAgICogICAgIDxpZ3gtc3RlcCBbY29tcGxldGVkXT1cInRydWVcIj48L2lneC1zdGVwPlxuICAgICAqIC4uLlxuICAgICAqIDwvaWd4LXN0ZXBwZXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5zdGVwcGVyLnN0ZXBzWzFdLmNvbXBsZXRlZCA9IHRydWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtc3RlcHBlcl9fc3RlcC0tY29tcGxldGVkJylcbiAgICBwdWJsaWMgY29tcGxldGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBHZXQvU2V0IHdoZXRoZXIgdGhlIHN0ZXAgaXMgdmFsaWQuXG4gICAgICpgYGBodG1sXG4gICAgICogPGlneC1zdGVwIFtpc1ZhbGlkXT1cImZvcm0uZm9ybS52YWxpZFwiPlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8ZGl2IGlneFN0ZXBDb250ZW50PlxuICAgICAqICAgICAgICAgIDxmb3JtICNmb3JtPVwibmdGb3JtXCI+XG4gICAgICogICAgICAgICAgICAgIC4uLlxuICAgICAqICAgICAgICAgIDwvZm9ybT5cbiAgICAgKiAgICAgIDwvZGl2PlxuICAgICAqIDwvaWd4LXN0ZXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIGdldCBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBpc1ZhbGlkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLnN0ZXBwZXIubGluZWFyICYmIHRoaXMuaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zdGVwcGVyU2VydmljZS5jYWxjdWxhdGVMaW5lYXJEaXNhYmxlZFN0ZXBzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQvU2V0IHdoZXRoZXIgdGhlIHN0ZXAgaXMgb3B0aW9uYWwuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIE9wdGlvbmFsIHN0ZXBzIHZhbGlkaXR5IGRvZXMgbm90IGFmZmVjdCB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aGVuIHRoZSBzdGVwcGVyIGlzIGluIGxpbmVhciBtb2RlIGkuZS5cbiAgICAgKiBpZiBvcHRpb25hbCBzdGVwIGlzIGludmFsaWQgdGhlIHVzZXIgY291bGQgc3RpbGwgbW92ZSB0byB0aGUgbmV4dCBzdGVwLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc3RlcCBbb3B0aW9uYWxdPVwidHJ1ZVwiPjwvaWd4LXN0ZXA+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuc3RlcHBlci5zdGVwc1sxXS5vcHRpb25hbCA9IHRydWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIG9wdGlvbmFsID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBHZXQvU2V0IHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIHN0ZXBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXN0ZXAgW2FjdGl2ZV09XCJ0cnVlXCI+PC9pZ3gtc3RlcD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnN0ZXBwZXIuc3RlcHNbMV0uYWN0aXZlID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZTogYm9vbGVhblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJylcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2V0IGFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2UuZXhwYW5kVGhyb3VnaEFwaSh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2UuY29sbGFwc2UodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHBlclNlcnZpY2UuYWN0aXZlU3RlcCA9PT0gdGhpcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFiSW5kZXg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICoqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgcm9sZSA9ICd0YWInO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY29udHJvbHMnKVxuICAgIHB1YmxpYyBnZXQgY29udGVudElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnQ/LmlkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXN0ZXBwZXJfX3N0ZXAnKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1zdGVwcGVyX19zdGVwLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGdldCBnZW5lcmFsRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8IHRoaXMubGluZWFyRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHVibGljIGdldCB0aXRsZVBvc2l0aW9uVG9wKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnN0ZXBwZXIuc3RlcFR5cGUgIT09IElneFN0ZXBUeXBlLkZ1bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAnaWd4LXN0ZXBwZXJfX3N0ZXAtLXNpbXBsZSc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYGlneC1zdGVwcGVyX19zdGVwLS0ke3RoaXMudGl0bGVQb3NpdGlvbn1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgc3RlcCdzIGBhY3RpdmVgIHByb3BlcnR5IGNoYW5nZXMuIENhbiBiZSB1c2VkIGZvciB0d28td2F5IGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zdGVwIFsoYWN0aXZlKV09XCJ0aGlzLmlzQWN0aXZlXCI+XG4gICAgICogPC9pZ3gtc3RlcD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBzdGVwOiBJZ3hTdGVwQ29tcG9uZW50ID0gdGhpcy5zdGVwcGVyLnN0ZXBbMF07XG4gICAgICogc3RlcC5hY3RpdmVDaGFuZ2Uuc3Vic2NyaWJlKChlOiBib29sZWFuKSA9PiBjb25zb2xlLmxvZyhcIlN0ZXAgYWN0aXZlIHN0YXRlIGNoYW5nZSB0byBcIiwgZSkpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGFjdGl2ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRlbnRUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoJ2N1c3RvbUluZGljYXRvcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGN1c3RvbUluZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZCgnY29udGVudENvbnRhaW5lcicpXG4gICAgcHVibGljIGNvbnRlbnRDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gSWd4U3RlcEluZGljYXRvckRpcmVjdGl2ZSkpXG4gICAgcHVibGljIGluZGljYXRvcjogSWd4U3RlcEluZGljYXRvckRpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hTdGVwQ29udGVudERpcmVjdGl2ZSkpXG4gICAgcHVibGljIGNvbnRlbnQ6IElneFN0ZXBDb250ZW50RGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzdGVwIGluZGV4IGluc2lkZSBvZiB0aGUgc3RlcHBlci5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBzdGVwID0gdGhpcy5zdGVwcGVyLnN0ZXBzWzFdO1xuICAgICAqIGNvbnN0IHN0ZXBJbmRleDogbnVtYmVyID0gc3RlcC5pbmRleDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmRleDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGluZGljYXRvclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUgJiYgdGhpcy5zdGVwcGVyLmFjdGl2ZUluZGljYXRvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGVwcGVyLmFjdGl2ZUluZGljYXRvclRlbXBsYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQgJiYgdGhpcy5zdGVwcGVyLmludmFsaWRJbmRpY2F0b3JUZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHBlci5pbnZhbGlkSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb21wbGV0ZWQgJiYgdGhpcy5zdGVwcGVyLmNvbXBsZXRlZEluZGljYXRvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGVwcGVyLmNvbXBsZXRlZEluZGljYXRvclRlbXBsYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5kaWNhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21JbmRpY2F0b3JUZW1wbGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZGlyZWN0aW9uKCk6IERpcmVjdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBwZXJTZXJ2aWNlLnByZXZpb3VzQWN0aXZlU3RlcFxuICAgICAgICAgICAgJiYgdGhpcy5zdGVwcGVyU2VydmljZS5wcmV2aW91c0FjdGl2ZVN0ZXAuaW5kZXggPiB0aGlzLmluZGV4XG4gICAgICAgICAgICA/IERpcmVjdGlvbi5QUkVWXG4gICAgICAgICAgICA6IERpcmVjdGlvbi5ORVhUO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaXNBY2Nlc3NpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMubGluZWFyRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBpc0hvcml6b250YWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBwZXIub3JpZW50YXRpb24gPT09IElneFN0ZXBwZXJPcmllbnRhdGlvbi5Ib3Jpem9udGFsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaXNUaXRsZVZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBwZXIuc3RlcFR5cGUgIT09IElneFN0ZXBUeXBlLkluZGljYXRvcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGlzSW5kaWNhdG9yVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHBlci5zdGVwVHlwZSAhPT0gSWd4U3RlcFR5cGUuVGl0bGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCB0aXRsZVBvc2l0aW9uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBwZXIudGl0bGVQb3NpdGlvbiA/IHRoaXMuc3RlcHBlci50aXRsZVBvc2l0aW9uIDogdGhpcy5zdGVwcGVyLl9kZWZhdWx0VGl0bGVQb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGxpbmVhckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGVwcGVyU2VydmljZS5saW5lYXJEaXNhYmxlZFN0ZXBzLmhhcyh0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbGxhcHNpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBwZXJTZXJ2aWNlLmNvbGxhcHNpbmdTdGVwcy5oYXModGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBhbmltYXRpb25TZXR0aW5ncygpOiBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBwZXIudmVydGljYWxBbmltYXRpb25TZXR0aW5ncztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbnRlbnRDbGFzc2VzKCk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgJ2lneC1zdGVwcGVyX19ib2R5LWNvbnRlbnQnOiB0cnVlLCAnaWd4LXN0ZXBwZXJfX2JvZHktY29udGVudC0tYWN0aXZlJzogdGhpcy5hY3RpdmUgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnaWd4LXN0ZXBwZXJfX3N0ZXAtY29udGVudCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHN0ZXBIZWFkZXJDbGFzc2VzKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWd4LXN0ZXBwZXJfX3N0ZXAtLW9wdGlvbmFsJzogdGhpcy5vcHRpb25hbCxcbiAgICAgICAgICAgICdpZ3gtc3RlcHBlcl9fc3RlcC1oZWFkZXItLWN1cnJlbnQnOiB0aGlzLmFjdGl2ZSxcbiAgICAgICAgICAgICdpZ3gtc3RlcHBlcl9fc3RlcC1oZWFkZXItLWludmFsaWQnOiAhdGhpcy5pc1ZhbGlkXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5zdGVwcGVyU2VydmljZS52aXNpdGVkU3RlcHMuaGFzKHRoaXMpICYmICF0aGlzLmFjdGl2ZSAmJiB0aGlzLmlzQWNjZXNzaWJsZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHByZXZpb3VzOiBib29sZWFuO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBfaW5kZXg6IG51bWJlcjtcbiAgICBwcml2YXRlIF90YWJJbmRleCA9IC0xO1xuICAgIHByaXZhdGUgX3ZhbGlkID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9mb2N1c2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElHWF9TVEVQUEVSX0NPTVBPTkVOVCkgcHVibGljIHN0ZXBwZXI6IElneFN0ZXBwZXIsXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIHByb3RlY3RlZCBzdGVwcGVyU2VydmljZTogSWd4U3RlcHBlclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSWd4QW5ndWxhckFuaW1hdGlvblNlcnZpY2UpIGFuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgZGlyOiBJZ3hEaXJlY3Rpb25hbGl0eVxuICAgICkge1xuICAgICAgICBzdXBlcihhbmltYXRpb25TZXJ2aWNlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gICAgcHVibGljIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0ZXBwZXJTZXJ2aWNlLmZvY3VzZWRTdGVwID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuc3RlcHBlclNlcnZpY2UuZm9jdXNlZFN0ZXAgIT09IHRoaXMuc3RlcHBlclNlcnZpY2UuYWN0aXZlU3RlcCkge1xuICAgICAgICAgICAgdGhpcy5zdGVwcGVyU2VydmljZS5hY3RpdmVTdGVwLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgICBwdWJsaWMgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2UuYWN0aXZlU3RlcC50YWJJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mb2N1c2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuICAgICAgICBpZiAodGhpcy5zdGVwcGVyLm9yaWVudGF0aW9uID09PSBJZ3hTdGVwcGVyT3JpZW50YXRpb24uSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQVJST1dfVVAgfHwga2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19ET1dOKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghKHRoaXMucGxhdGZvcm0uaXNOYXZpZ2F0aW9uS2V5KGtleSkgfHwgdGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuaGFuZGxlTmF2aWdhdGlvbihrZXkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub3BlbkFuaW1hdGlvbkRvbmUucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGVwcGVyU2VydmljZS5hY3RpdmVTdGVwID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RlcHBlci5hY3RpdmVTdGVwQ2hhbmdlZC5lbWl0KHsgb3duZXI6IHRoaXMuc3RlcHBlciwgaW5kZXg6IHRoaXMuaW5kZXggfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNsb3NlQW5pbWF0aW9uRG9uZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2UuY29sbGFwc2UodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG9uUG9pbnRlckRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VIb3Jpem9udGFsQWN0aXZlU3RlcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VWZXJ0aWNhbEFjdGl2ZVN0ZXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVOYXZpZ2F0aW9uKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkhPTUU6XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyLnN0ZXBzLmZpbHRlcihzID0+IHMuaXNBY2Nlc3NpYmxlKVswXT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5FTkQ6XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyLnN0ZXBzLmZpbHRlcihzID0+IHMuaXNBY2Nlc3NpYmxlKS5wb3AoKT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19VUDpcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzU3RlcD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19MRUZUOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpci5ydGwgJiYgdGhpcy5zdGVwcGVyLm9yaWVudGF0aW9uID09PSBJZ3hTdGVwcGVyT3JpZW50YXRpb24uSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRTdGVwPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c1N0ZXA/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX0RPV046XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0U3RlcD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19SSUdIVDpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXIucnRsICYmIHRoaXMuc3RlcHBlci5vcmllbnRhdGlvbiA9PT0gSWd4U3RlcHBlck9yaWVudGF0aW9uLkhvcml6b250YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c1N0ZXA/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRTdGVwPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuRU5URVI6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlSG9yaXpvbnRhbEFjdGl2ZVN0ZXAoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVZlcnRpY2FsQWN0aXZlU3RlcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGNoYW5nZUhvcml6b250YWxBY3RpdmVTdGVwKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdGVwcGVyLmFuaW1hdGlvblR5cGUgPT09IEhvcml6b250YWxBbmltYXRpb25UeXBlLm5vbmUgJiYgdGhpcy5zdGVwcGVyU2VydmljZS5hY3RpdmVTdGVwICE9PSB0aGlzKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzQ2FuY2VsZWQgPSB0aGlzLnN0ZXBwZXJTZXJ2aWNlLmVtaXRBY3RpdmF0aW5nRXZlbnQodGhpcyk7XG4gICAgICAgICAgICBpZiAoYXJnc0NhbmNlbGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnN0ZXBwZXIuYWN0aXZlU3RlcENoYW5nZWQuZW1pdCh7IG93bmVyOiB0aGlzLnN0ZXBwZXIsIGluZGV4OiB0aGlzLmluZGV4IH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2UuZXhwYW5kKHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5zdGVwcGVyLmFuaW1hdGlvblR5cGUgPT09IEhvcml6b250YWxBbmltYXRpb25UeXBlLmZhZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0ZXBwZXJTZXJ2aWNlLmNvbGxhcHNpbmdTdGVwcy5oYXModGhpcy5zdGVwcGVyU2VydmljZS5wcmV2aW91c0FjdGl2ZVN0ZXApKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyU2VydmljZS5wcmV2aW91c0FjdGl2ZVN0ZXAuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBuZXh0U3RlcCgpOiBJZ3hTdGVwQ29tcG9uZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGZvY3VzZWRTdGVwID0gdGhpcy5zdGVwcGVyU2VydmljZS5mb2N1c2VkU3RlcDtcbiAgICAgICAgaWYgKGZvY3VzZWRTdGVwKSB7XG4gICAgICAgICAgICBpZiAoZm9jdXNlZFN0ZXAuaW5kZXggPT09IHRoaXMuc3RlcHBlci5zdGVwcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHBlci5zdGVwcy5maW5kKHMgPT4gcy5pc0FjY2Vzc2libGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXh0QWNjZXNzaWJsZSA9IHRoaXMuc3RlcHBlci5zdGVwcy5maW5kKChzLCBpKSA9PiBpID4gZm9jdXNlZFN0ZXAuaW5kZXggJiYgcy5pc0FjY2Vzc2libGUpO1xuICAgICAgICAgICAgcmV0dXJuIG5leHRBY2Nlc3NpYmxlID8gbmV4dEFjY2Vzc2libGUgOiB0aGlzLnN0ZXBwZXIuc3RlcHMuZmluZChzID0+IHMuaXNBY2Nlc3NpYmxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHByZXZpb3VzU3RlcCgpOiBJZ3hTdGVwQ29tcG9uZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGZvY3VzZWRTdGVwID0gdGhpcy5zdGVwcGVyU2VydmljZS5mb2N1c2VkU3RlcDtcbiAgICAgICAgaWYgKGZvY3VzZWRTdGVwKSB7XG4gICAgICAgICAgICBpZiAoZm9jdXNlZFN0ZXAuaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGVwcGVyLnN0ZXBzLmZpbHRlcihzID0+IHMuaXNBY2Nlc3NpYmxlKS5wb3AoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHByZXZTdGVwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZvY3VzZWRTdGVwLmluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5zdGVwcGVyLnN0ZXBzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChzdGVwLmlzQWNjZXNzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2U3RlcCA9IHN0ZXA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHByZXZTdGVwID8gcHJldlN0ZXAgOiB0aGlzLnN0ZXBwZXIuc3RlcHMuZmlsdGVyKHMgPT4gcy5pc0FjY2Vzc2libGUpLnBvcCgpO1xuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZVZlcnRpY2FsQWN0aXZlU3RlcCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdGVwcGVyU2VydmljZS5leHBhbmQodGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFuaW1hdGlvblNldHRpbmdzLmNsb3NlQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXBwZXJTZXJ2aWNlLnByZXZpb3VzQWN0aXZlU3RlcD8ub3BlbkFuaW1hdGlvblBsYXllcj8uZmluaXNoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYW5pbWF0aW9uU2V0dGluZ3Mub3BlbkFuaW1hdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdGVwcGVyU2VydmljZS5hY3RpdmVTdGVwLmNsb3NlQW5pbWF0aW9uUGxheWVyPy5maW5pc2goKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRpdGxlPlxuICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiaXNUaXRsZVZpc2libGVcIiBzZWxlY3Q9XCJbaWd4U3RlcFRpdGxlXVwiPjwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCAqbmdJZj1cImlzVGl0bGVWaXNpYmxlXCIgc2VsZWN0PVwiW2lneFN0ZXBTdWJ0aXRsZV1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbnRlbnRUZW1wbGF0ZT5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cImNvbnRlbnRDbGFzc2VzXCIgI2NvbnRlbnRDb250YWluZXI+XG4gICAgICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiYWN0aXZlIHx8IGNvbGxhcHNpbmdcIiBzZWxlY3Q9XCJbaWd4U3RlcENvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5kaWNhdG9yPlxuICAgIDxzcGFuPnt7IGluZGV4ICsgMSB9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tSW5kaWNhdG9yPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpZ3hTdGVwSW5kaWNhdG9yXVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtc3RlcHBlcl9fc3RlcC1oZWFkZXJcIiBpZ3hSaXBwbGUgW25nQ2xhc3NdPVwic3RlcEhlYWRlckNsYXNzZXNcIiAoa2V5ZG93bik9XCJoYW5kbGVLZXlkb3duKCRldmVudClcIlxuICAgIChjbGljayk9XCJvblBvaW50ZXJEb3duKCRldmVudClcIj5cblxuICAgIDxkaXYgKm5nSWY9XCJpc0luZGljYXRvclZpc2libGVcIiBjbGFzcz1cImlneC1zdGVwcGVyX19zdGVwLWluZGljYXRvclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5kaWNhdG9yVGVtcGxhdGUgPyBpbmRpY2F0b3JUZW1wbGF0ZSA6IGRlZmF1bHRJbmRpY2F0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtc3RlcHBlcl9fc3RlcC10aXRsZS13cmFwcGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZhdWx0VGl0bGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWlzSG9yaXpvbnRhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtc3RlcHBlcl9fc3RlcC1jb250ZW50LXdyYXBwZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=