@radix-ng/primitives 0.23.0 → 0.24.0

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.
@@ -31,12 +31,17 @@ export class RdxPopoverAnchorDirective {
31
31
  this.popoverRoot = popoverRoot;
32
32
  }
33
33
  emitOutsideClick() {
34
+ if (!this.popoverRoot?.isOpen() ||
35
+ this.popoverRoot?.popoverContentDirective().onOverlayOutsideClickDisabled()) {
36
+ return;
37
+ }
34
38
  const clickEvent = new MouseEvent('click', {
35
39
  view: this.document.defaultView,
36
40
  bubbles: true,
37
- cancelable: true
41
+ cancelable: true,
42
+ relatedTarget: this.elementRef.nativeElement
38
43
  });
39
- this.document.body.dispatchEvent(clickEvent);
44
+ this.popoverRoot?.popoverTriggerDirective().elementRef.nativeElement.dispatchEvent(clickEvent);
40
45
  }
41
46
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverAnchorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
42
47
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: RdxPopoverAnchorDirective, isStandalone: true, selector: "[rdxPopoverAnchor]", host: { attributes: { "type": "button" }, listeners: { "click": "click()" }, properties: { "attr.id": "name()", "attr.aria-haspopup": "\"dialog\"" } }, providers: [
@@ -67,4 +72,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
67
72
  ]
68
73
  }]
69
74
  }] });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1hbmNob3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9wb3BvdmVyL3NyYy9wb3BvdmVyLWFuY2hvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFvQjFELE1BQU0sT0FBTyx5QkFBeUI7SUFsQnRDO1FBbUJJOzs7O2FBSUs7UUFDSyxnQkFBVyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELGNBQWM7UUFDTCxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLGNBQWM7UUFDTCxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELGNBQWM7UUFDTCxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXJDLGNBQWM7UUFDTCxTQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLCtCQUErQixJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztLQW9Cakc7SUFsQkcsY0FBYztJQUNkLEtBQUs7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsY0FBYztJQUNkLGNBQWMsQ0FBQyxXQUFvQztRQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNuQyxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRTtZQUN2QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXO1lBQy9CLE9BQU8sRUFBRSxJQUFJO1lBQ2IsVUFBVSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7K0dBbENRLHlCQUF5QjttR0FBekIseUJBQXlCLHlOQVB2QjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxxQkFBcUI7Z0JBQzlCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUM7YUFDM0Q7U0FDSjs7NEZBRVEseUJBQXlCO2tCQWxCckMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsY0FBYyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2xDLElBQUksRUFBRTt3QkFDRixJQUFJLEVBQUUsUUFBUTt3QkFDZCxXQUFXLEVBQUUsUUFBUTt3QkFDckIsc0JBQXNCLEVBQUUsVUFBVTt3QkFDbEMsU0FBUyxFQUFFLFNBQVM7cUJBQ3ZCO29CQUNELFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUscUJBQXFCOzRCQUM5QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwwQkFBMEIsQ0FBQzt5QkFDM0Q7cUJBQ0o7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtPdmVybGF5T3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgY29tcHV0ZWQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgZm9yd2FyZFJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZHhQb3BvdmVyQW5jaG9yVG9rZW4gfSBmcm9tICcuL3BvcG92ZXItYW5jaG9yLnRva2VuJztcbmltcG9ydCB7IFJkeFBvcG92ZXJSb290RGlyZWN0aXZlIH0gZnJvbSAnLi9wb3BvdmVyLXJvb3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IGluamVjdFBvcG92ZXJSb290IH0gZnJvbSAnLi9wb3BvdmVyLXJvb3QuaW5qZWN0JztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmR4UG9wb3ZlckFuY2hvcl0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgZXhwb3J0QXM6ICdyZHhQb3BvdmVyQW5jaG9yJyxcbiAgICBob3N0RGlyZWN0aXZlczogW0Nka092ZXJsYXlPcmlnaW5dLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICdbYXR0ci5pZF0nOiAnbmFtZSgpJyxcbiAgICAgICAgJ1thdHRyLmFyaWEtaGFzcG9wdXBdJzogJ1wiZGlhbG9nXCInLFxuICAgICAgICAnKGNsaWNrKSc6ICdjbGljaygpJ1xuICAgIH0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFJkeFBvcG92ZXJBbmNob3JUb2tlbixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJkeFBvcG92ZXJBbmNob3JEaXJlY3RpdmUpXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFJkeFBvcG92ZXJBbmNob3JEaXJlY3RpdmUge1xuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBJZiBvdXRzaWRlIHRoZSByb290IHRoZW4gbnVsbCwgb3RoZXJ3aXNlIHRoZSByb290IGRpcmVjdGl2ZSAtIHdpdGggb3B0aW9uYWwgYHRydWVgIHBhc3NlZCBpbiBhcyB0aGUgZmlyc3QgcGFyYW0uXG4gICAgICogSWYgb3V0c2lkZSB0aGUgcm9vdCBhbmQgbm9uLW51bGwgdmFsdWUgdGhhdCBtZWFucyB0aGUgaHRtbCBzdHJ1Y3R1cmUgaXMgd3JvbmcgLSBwb3BvdmVyIGluc2lkZSBwb3BvdmVyLlxuICAgICAqICovXG4gICAgcHJvdGVjdGVkIHBvcG92ZXJSb290ID0gaW5qZWN0UG9wb3ZlclJvb3QodHJ1ZSk7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgb3ZlcmxheU9yaWdpbiA9IGluamVjdChDZGtPdmVybGF5T3JpZ2luKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgbmFtZSA9IGNvbXB1dGVkKCgpID0+IGByZHgtcG9wb3Zlci1leHRlcm5hbC1hbmNob3ItJHt0aGlzLnBvcG92ZXJSb290Py51bmlxdWVJZCgpfWApO1xuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBjbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbWl0T3V0c2lkZUNsaWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBzZXRQb3BvdmVyUm9vdChwb3BvdmVyUm9vdDogUmR4UG9wb3ZlclJvb3REaXJlY3RpdmUpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyUm9vdCA9IHBvcG92ZXJSb290O1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdE91dHNpZGVDbGljaygpIHtcbiAgICAgICAgY29uc3QgY2xpY2tFdmVudCA9IG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICAgIHZpZXc6IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXcsXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY2xpY2tFdmVudCk7XG4gICAgfVxufVxuIl19
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1hbmNob3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9wb3BvdmVyL3NyYy9wb3BvdmVyLWFuY2hvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFvQjFELE1BQU0sT0FBTyx5QkFBeUI7SUFsQnRDO1FBbUJJOzs7O2FBSUs7UUFDSyxnQkFBVyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELGNBQWM7UUFDTCxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLGNBQWM7UUFDTCxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELGNBQWM7UUFDTCxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXJDLGNBQWM7UUFDTCxTQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLCtCQUErQixJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztLQTJCakc7SUF6QkcsY0FBYztJQUNkLEtBQUs7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsY0FBYztJQUNkLGNBQWMsQ0FBQyxXQUFvQztRQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNuQyxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3BCLElBQ0ksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRTtZQUMzQixJQUFJLENBQUMsV0FBVyxFQUFFLHVCQUF1QixFQUFFLENBQUMsNkJBQTZCLEVBQUUsRUFDN0UsQ0FBQztZQUNDLE9BQU87UUFDWCxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFO1lBQ3ZDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVc7WUFDL0IsT0FBTyxFQUFFLElBQUk7WUFDYixVQUFVLEVBQUUsSUFBSTtZQUNoQixhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhO1NBQy9DLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRyxDQUFDOytHQXpDUSx5QkFBeUI7bUdBQXpCLHlCQUF5Qix5TkFQdkI7WUFDUDtnQkFDSSxPQUFPLEVBQUUscUJBQXFCO2dCQUM5QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHlCQUF5QixDQUFDO2FBQzNEO1NBQ0o7OzRGQUVRLHlCQUF5QjtrQkFsQnJDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLGNBQWMsRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUNsQyxJQUFJLEVBQUU7d0JBQ0YsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsV0FBVyxFQUFFLFFBQVE7d0JBQ3JCLHNCQUFzQixFQUFFLFVBQVU7d0JBQ2xDLFNBQVMsRUFBRSxTQUFTO3FCQUN2QjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUM7eUJBQzNEO3FCQUNKO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrT3ZlcmxheU9yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGNvbXB1dGVkLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGZvcndhcmRSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmR4UG9wb3ZlckFuY2hvclRva2VuIH0gZnJvbSAnLi9wb3BvdmVyLWFuY2hvci50b2tlbic7XG5pbXBvcnQgeyBSZHhQb3BvdmVyUm9vdERpcmVjdGl2ZSB9IGZyb20gJy4vcG9wb3Zlci1yb290LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBpbmplY3RQb3BvdmVyUm9vdCB9IGZyb20gJy4vcG9wb3Zlci1yb290LmluamVjdCc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3JkeFBvcG92ZXJBbmNob3JdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGV4cG9ydEFzOiAncmR4UG9wb3ZlckFuY2hvcicsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtDZGtPdmVybGF5T3JpZ2luXSxcbiAgICBob3N0OiB7XG4gICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAnW2F0dHIuaWRdJzogJ25hbWUoKScsXG4gICAgICAgICdbYXR0ci5hcmlhLWhhc3BvcHVwXSc6ICdcImRpYWxvZ1wiJyxcbiAgICAgICAgJyhjbGljayknOiAnY2xpY2soKSdcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBSZHhQb3BvdmVyQW5jaG9yVG9rZW4sXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSZHhQb3BvdmVyQW5jaG9yRGlyZWN0aXZlKVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBSZHhQb3BvdmVyQW5jaG9yRGlyZWN0aXZlIHtcbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICogSWYgb3V0c2lkZSB0aGUgcm9vdCB0aGVuIG51bGwsIG90aGVyd2lzZSB0aGUgcm9vdCBkaXJlY3RpdmUgLSB3aXRoIG9wdGlvbmFsIGB0cnVlYCBwYXNzZWQgaW4gYXMgdGhlIGZpcnN0IHBhcmFtLlxuICAgICAqIElmIG91dHNpZGUgdGhlIHJvb3QgYW5kIG5vbi1udWxsIHZhbHVlIHRoYXQgbWVhbnMgdGhlIGh0bWwgc3RydWN0dXJlIGlzIHdyb25nIC0gcG9wb3ZlciBpbnNpZGUgcG9wb3Zlci5cbiAgICAgKiAqL1xuICAgIHByb3RlY3RlZCBwb3BvdmVyUm9vdCA9IGluamVjdFBvcG92ZXJSb290KHRydWUpO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IG92ZXJsYXlPcmlnaW4gPSBpbmplY3QoQ2RrT3ZlcmxheU9yaWdpbik7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IG5hbWUgPSBjb21wdXRlZCgoKSA9PiBgcmR4LXBvcG92ZXItZXh0ZXJuYWwtYW5jaG9yLSR7dGhpcy5wb3BvdmVyUm9vdD8udW5pcXVlSWQoKX1gKTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgY2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW1pdE91dHNpZGVDbGljaygpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgc2V0UG9wb3ZlclJvb3QocG9wb3ZlclJvb3Q6IFJkeFBvcG92ZXJSb290RGlyZWN0aXZlKSB7XG4gICAgICAgIHRoaXMucG9wb3ZlclJvb3QgPSBwb3BvdmVyUm9vdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRPdXRzaWRlQ2xpY2soKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLnBvcG92ZXJSb290Py5pc09wZW4oKSB8fFxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyUm9vdD8ucG9wb3ZlckNvbnRlbnREaXJlY3RpdmUoKS5vbk92ZXJsYXlPdXRzaWRlQ2xpY2tEaXNhYmxlZCgpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsaWNrRXZlbnQgPSBuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7XG4gICAgICAgICAgICB2aWV3OiB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wb3BvdmVyUm9vdD8ucG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUoKS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChjbGlja0V2ZW50KTtcbiAgICB9XG59XG4iXX0=
@@ -46,15 +46,21 @@ export class RdxPopoverContentDirective {
46
46
  * @description Whether to add some alternate positions of the content.
47
47
  * @default false
48
48
  */
49
- this.disableAlternatePositions = input(false);
49
+ this.alternatePositionsDisabled = input(false);
50
+ /** @description Whether to prevent `onOverlayEscapeKeyDown` handler from calling. */
51
+ this.onOverlayEscapeKeyDownDisabled = input(false);
52
+ /** @description Whether to prevent `onOverlayOutsideClick` handler from calling. */
53
+ this.onOverlayOutsideClickDisabled = input(false);
50
54
  /**
51
- * @description Event handler called when the escape key is down. It can be prevented by calling event.preventDefault.
55
+ * @description Event handler called when the escape key is down.
56
+ * It can be prevented by setting `onOverlayEscapeKeyDownDisabled` input to `true`.
52
57
  */
53
- this.onEscapeKeyDown = output();
58
+ this.onOverlayEscapeKeyDown = output();
54
59
  /**
55
- * @description Event handler called when a pointer event occurs outside the bounds of the component. It can be prevented by calling event.preventDefault.
60
+ * @description Event handler called when a pointer event occurs outside the bounds of the component.
61
+ * It can be prevented by setting `onOverlayOutsideClickDisabled` input to `true`.
56
62
  */
57
- this.onOutsideClick = output();
63
+ this.onOverlayOutsideClick = output();
58
64
  /**
59
65
  * @description Event handler called after the overlay is open
60
66
  */
@@ -71,6 +77,7 @@ export class RdxPopoverContentDirective {
71
77
  /** @ignore */
72
78
  ngOnInit() {
73
79
  this.setScrollStrategy();
80
+ this.setHasBackdrop();
74
81
  this.setDisableClose();
75
82
  this.onAttach();
76
83
  this.onDetach();
@@ -103,9 +110,10 @@ export class RdxPopoverContentDirective {
103
110
  connectKeydownEscape() {
104
111
  this.connectedOverlay.overlayKeydown
105
112
  .asObservable()
106
- .pipe(filter((event) => event.key === 'Escape'), tap((event) => {
107
- this.onEscapeKeyDown.emit(event);
108
- }), filter((event) => !event.defaultPrevented && !this.popoverRoot.firstDefaultOpen()), tap(() => {
113
+ .pipe(filter(() => !this.onOverlayEscapeKeyDownDisabled() &&
114
+ !this.popoverRoot.rdxCdkEventService?.primitivePreventedFromCdkEvent(this.popoverRoot, 'cdkOverlayEscapeKeyDown')), filter((event) => event.key === 'Escape'), tap((event) => {
115
+ this.onOverlayEscapeKeyDown.emit(event);
116
+ }), filter(() => !this.popoverRoot.firstDefaultOpen()), tap(() => {
109
117
  this.popoverRoot.handleClose();
110
118
  }), takeUntilDestroyed(this.destroyRef))
111
119
  .subscribe();
@@ -114,7 +122,8 @@ export class RdxPopoverContentDirective {
114
122
  connectOutsideClick() {
115
123
  this.connectedOverlay.overlayOutsideClick
116
124
  .asObservable()
117
- .pipe(
125
+ .pipe(filter(() => !this.onOverlayOutsideClickDisabled() &&
126
+ !this.popoverRoot.rdxCdkEventService?.primitivePreventedFromCdkEvent(this.popoverRoot, 'cdkOverlayOutsideClick')),
118
127
  /**
119
128
  * Handle the situation when an anchor is added and the anchor becomes the origin of the overlay
120
129
  * hence the trigger will be considered the outside element
@@ -125,8 +134,8 @@ export class RdxPopoverContentDirective {
125
134
  .popoverTriggerDirective()
126
135
  .elementRef.nativeElement.contains(event.target));
127
136
  }), tap((event) => {
128
- this.onOutsideClick.emit(event);
129
- }), filter((event) => !event.defaultPrevented && !this.popoverRoot.firstDefaultOpen()), tap(() => {
137
+ this.onOverlayOutsideClick.emit(event);
138
+ }), filter(() => !this.popoverRoot.firstDefaultOpen()), tap(() => {
130
139
  this.popoverRoot.handleClose();
131
140
  }), takeUntilDestroyed(this.destroyRef))
132
141
  .subscribe();
@@ -162,6 +171,12 @@ export class RdxPopoverContentDirective {
162
171
  this.fireOverlayNgOnChanges('scrollStrategy', this.connectedOverlay.scrollStrategy, prevScrollStrategy);
163
172
  }
164
173
  /** @ignore */
174
+ setHasBackdrop() {
175
+ const prevHasBackdrop = this.connectedOverlay.hasBackdrop;
176
+ this.connectedOverlay.hasBackdrop = false;
177
+ this.fireOverlayNgOnChanges('hasBackdrop', this.connectedOverlay.hasBackdrop, prevHasBackdrop);
178
+ }
179
+ /** @ignore */
165
180
  setDisableClose() {
166
181
  const prevDisableClose = this.connectedOverlay.disableClose;
167
182
  this.connectedOverlay.disableClose = true;
@@ -194,7 +209,7 @@ export class RdxPopoverContentDirective {
194
209
  alignOffset: offsets.alignOffset
195
210
  });
196
211
  const positions = [basePosition];
197
- if (!this.disableAlternatePositions()) {
212
+ if (!this.alternatePositionsDisabled()) {
198
213
  /**
199
214
  * Alternate positions for better user experience along the X/Y axis (e.g. vertical/horizontal scrolling)
200
215
  */
@@ -227,7 +242,7 @@ export class RdxPopoverContentDirective {
227
242
  onPositionChangeEffect() {
228
243
  effect(() => {
229
244
  const positions = this.positions();
230
- this.disableAlternatePositions();
245
+ this.alternatePositionsDisabled();
231
246
  untracked(() => {
232
247
  this.setPositions(positions);
233
248
  });
@@ -240,7 +255,7 @@ export class RdxPopoverContentDirective {
240
255
  });
241
256
  }
242
257
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
243
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxPopoverContentDirective, isStandalone: true, selector: "[rdxPopoverContent]", inputs: { side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, sideOffset: { classPropertyName: "sideOffset", publicName: "sideOffset", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, alignOffset: { classPropertyName: "alignOffset", publicName: "alignOffset", isSignal: true, isRequired: false, transformFunction: null }, disableAlternatePositions: { classPropertyName: "disableAlternatePositions", publicName: "disableAlternatePositions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onEscapeKeyDown: "onEscapeKeyDown", onOutsideClick: "onOutsideClick", onOpen: "onOpen", onClosed: "onClosed" }, hostDirectives: [{ directive: i1.CdkConnectedOverlay }], ngImport: i0 }); }
258
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxPopoverContentDirective, isStandalone: true, selector: "[rdxPopoverContent]", inputs: { side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, sideOffset: { classPropertyName: "sideOffset", publicName: "sideOffset", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, alignOffset: { classPropertyName: "alignOffset", publicName: "alignOffset", isSignal: true, isRequired: false, transformFunction: null }, alternatePositionsDisabled: { classPropertyName: "alternatePositionsDisabled", publicName: "alternatePositionsDisabled", isSignal: true, isRequired: false, transformFunction: null }, onOverlayEscapeKeyDownDisabled: { classPropertyName: "onOverlayEscapeKeyDownDisabled", publicName: "onOverlayEscapeKeyDownDisabled", isSignal: true, isRequired: false, transformFunction: null }, onOverlayOutsideClickDisabled: { classPropertyName: "onOverlayOutsideClickDisabled", publicName: "onOverlayOutsideClickDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onOverlayEscapeKeyDown: "onOverlayEscapeKeyDown", onOverlayOutsideClick: "onOverlayOutsideClick", onOpen: "onOpen", onClosed: "onClosed" }, hostDirectives: [{ directive: i1.CdkConnectedOverlay }], ngImport: i0 }); }
244
259
  }
245
260
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverContentDirective, decorators: [{
246
261
  type: Directive,
@@ -252,4 +267,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
252
267
  ]
253
268
  }]
254
269
  }], ctorParameters: () => [] });
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb250ZW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvcG9wb3Zlci9zcmMvcG9wb3Zlci1jb250ZW50LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEUsT0FBTyxFQUNILFFBQVEsRUFDUixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixZQUFZLEVBQ1osV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSwyQkFBMkIsRUFBRSxjQUFjLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDdkgsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQVN2RixNQUFNLE9BQU8sMEJBQTBCO0lBZ0VuQztRQS9EQSxjQUFjO1FBQ0csZ0JBQVcsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBQ25ELGNBQWM7UUFDRyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxjQUFjO1FBQ0csWUFBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxjQUFjO1FBQ0csZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FB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LFlBQVksQ0FBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQztTQUN0RSxDQUFDLENBQUM7SUFDUCxDQUFDOytHQTdSUSwwQkFBMEI7bUdBQTFCLDBCQUEwQjs7NEZBQTFCLDBCQUEwQjtrQkFQdEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsY0FBYyxFQUFFO3dCQUNaLG1CQUFtQjtxQkFDdEI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtDb25uZWN0ZWRPdmVybGF5LCBPdmVybGF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgICBjb21wdXRlZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIE9uSW5pdCxcbiAgICBvdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIHVudHJhY2tlZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpbmplY3RQb3BvdmVyUm9vdCB9IGZyb20gJy4vcG9wb3Zlci1yb290LmluamVjdCc7XG5pbXBvcnQgeyBERUZBVUxUUyB9IGZyb20gJy4vcG9wb3Zlci5jb25zdGFudHMnO1xuaW1wb3J0IHsgUmR4UG9wb3ZlckFsaWduLCBSZHhQb3BvdmVyQXR0YWNoRGV0YWNoRXZlbnQsIFJkeFBvcG92ZXJTaWRlLCBSZHhTaWRlQW5kQWxpZ25PZmZzZXRzIH0gZnJvbSAnLi9wb3BvdmVyLnR5cGVzJztcbmltcG9ydCB7IGdldEFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zLCBnZXRDb250ZW50UG9zaXRpb24gfSBmcm9tICcuL3BvcG92ZXIudXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tyZHhQb3BvdmVyQ29udGVudF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAgQ2RrQ29ubmVjdGVkT3ZlcmxheVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgUmR4UG9wb3ZlckNvbnRlbnREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3BvdmVyUm9vdCA9IGluamVjdFBvcG92ZXJSb290KCk7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGVkT3ZlcmxheSA9IGluamVjdChDZGtDb25uZWN0ZWRPdmVybGF5KTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgbmFtZSA9IGNvbXB1dGVkKCgpID0+IGByZHgtcG9wb3Zlci10cmlnZ2VyLSR7dGhpcy5wb3BvdmVyUm9vdC51bmlxdWVJZCgpfWApO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBwcmVmZXJyZWQgc2lkZSBvZiB0aGUgdHJpZ2dlciB0byByZW5kZXIgYWdhaW5zdCB3aGVuIG9wZW4uIFdpbGwgYmUgcmV2ZXJzZWQgd2hlbiBjb2xsaXNpb25zIG9jY3VyIGFuZCBhdm9pZENvbGxpc2lvbnMgaXMgZW5hYmxlZC5cbiAgICAgKiBAZGVmYXVsdCB0b3BcbiAgICAgKi9cbiAgICByZWFkb25seSBzaWRlID0gaW5wdXQ8UmR4UG9wb3ZlclNpZGU+KFJkeFBvcG92ZXJTaWRlLlRvcCk7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBkaXN0YW5jZSBpbiBwaXhlbHMgZnJvbSB0aGUgdHJpZ2dlci5cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBzaWRlT2Zmc2V0ID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPih2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgcHJlZmVycmVkIGFsaWdubWVudCBhZ2FpbnN0IHRoZSB0cmlnZ2VyLiBNYXkgY2hhbmdlIHdoZW4gY29sbGlzaW9ucyBvY2N1ci5cbiAgICAgKiBAZGVmYXVsdCBjZW50ZXJcbiAgICAgKi9cbiAgICByZWFkb25seSBhbGlnbiA9IGlucHV0PFJkeFBvcG92ZXJBbGlnbj4oUmR4UG9wb3ZlckFsaWduLkNlbnRlcik7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFuIG9mZnNldCBpbiBwaXhlbHMgZnJvbSB0aGUgXCJzdGFydFwiIG9yIFwiZW5kXCIgYWxpZ25tZW50IG9wdGlvbnMuXG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICovXG4gICAgcmVhZG9ubHkgYWxpZ25PZmZzZXQgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KHZvaWQgMCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byBhZGQgc29tZSBhbHRlcm5hdGUgcG9zaXRpb25zIG9mIHRoZSBjb250ZW50LlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGlzYWJsZUFsdGVybmF0ZVBvc2l0aW9ucyA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBlc2NhcGUga2V5IGlzIGRvd24uIEl0IGNhbiBiZSBwcmV2ZW50ZWQgYnkgY2FsbGluZyBldmVudC5wcmV2ZW50RGVmYXVsdC5cbiAgICAgKi9cbiAgICByZWFkb25seSBvbkVzY2FwZUtleURvd24gPSBvdXRwdXQ8S2V5Ym9hcmRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCBoYW5kbGVyIGNhbGxlZCB3aGVuIGEgcG9pbnRlciBldmVudCBvY2N1cnMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBjb21wb25lbnQuIEl0IGNhbiBiZSBwcmV2ZW50ZWQgYnkgY2FsbGluZyBldmVudC5wcmV2ZW50RGVmYXVsdC5cbiAgICAgKi9cbiAgICByZWFkb25seSBvbk91dHNpZGVDbGljayA9IG91dHB1dDxNb3VzZUV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGhhbmRsZXIgY2FsbGVkIGFmdGVyIHRoZSBvdmVybGF5IGlzIG9wZW5cbiAgICAgKi9cbiAgICByZWFkb25seSBvbk9wZW4gPSBvdXRwdXQ8dm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgaGFuZGxlciBjYWxsZWQgYWZ0ZXIgdGhlIG92ZXJsYXkgaXMgY2xvc2VkXG4gICAgICovXG4gICAgcmVhZG9ubHkgb25DbG9zZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICAgIC8qKiBAaW5nb3JlICovXG4gICAgcmVhZG9ubHkgcG9zaXRpb25zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlUG9zaXRpb25zKCkpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMub25PcmlnaW5DaGFuZ2VFZmZlY3QoKTtcbiAgICAgICAgdGhpcy5vblBvc2l0aW9uQ2hhbmdlRWZmZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRTY3JvbGxTdHJhdGVneSgpO1xuICAgICAgICB0aGlzLnNldERpc2FibGVDbG9zZSgpO1xuICAgICAgICB0aGlzLm9uQXR0YWNoKCk7XG4gICAgICAgIHRoaXMub25EZXRhY2goKTtcbiAgICAgICAgdGhpcy5jb25uZWN0S2V5ZG93bkVzY2FwZSgpO1xuICAgICAgICB0aGlzLmNvbm5lY3RPdXRzaWRlQ2xpY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG9wZW4oKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3RlZE92ZXJsYXkub3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXZPcGVuID0gdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9wZW47XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5maXJlT3ZlcmxheU5nT25DaGFuZ2VzKCdvcGVuJywgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9wZW4sIHByZXZPcGVuKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAoIXRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldk9wZW4gPSB0aGlzLmNvbm5lY3RlZE92ZXJsYXkub3BlbjtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maXJlT3ZlcmxheU5nT25DaGFuZ2VzKCdvcGVuJywgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9wZW4sIHByZXZPcGVuKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHBvc2l0aW9uQ2hhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9uQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBjb25uZWN0S2V5ZG93bkVzY2FwZSgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlLZXlkb3duXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpLFxuICAgICAgICAgICAgICAgIHRhcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVzY2FwZUtleURvd24uZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgIXRoaXMucG9wb3ZlclJvb3QuZmlyc3REZWZhdWx0T3BlbigpKSxcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LmhhbmRsZUNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgY29ubmVjdE91dHNpZGVDbGljaygpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlPdXRzaWRlQ2xpY2tcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSGFuZGxlIHRoZSBzaXR1YXRpb24gd2hlbiBhbiBhbmNob3IgaXMgYWRkZWQgYW5kIHRoZSBhbmNob3IgYmVjb21lcyB0aGUgb3JpZ2luIG9mIHRoZSBvdmVybGF5XG4gICAgICAgICAgICAgICAgICogaGVuY2UgIHRoZSB0cmlnZ2VyIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUgb3V0c2lkZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMucG9wb3ZlclJvb3QucG9wb3ZlckFuY2hvckRpcmVjdGl2ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5wb3BvdmVyUm9vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wb3BvdmVyVHJpZ2dlckRpcmVjdGl2ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgRWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25PdXRzaWRlQ2xpY2suZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgIXRoaXMucG9wb3ZlclJvb3QuZmlyc3REZWZhdWx0T3BlbigpKSxcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LmhhbmRsZUNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgb25BdHRhY2goKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5hdHRhY2hcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIGB0aGlzLm9uT3Blbi5lbWl0KCk7YCBpcyBiZWluZyBkZWxlZ2F0ZWQgdG8gdGhlIHJvb3QgZGlyZWN0aXZlIGR1ZSB0byB0aGUgb3BlbmluZyBhbmltYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJvb3QuYXR0YWNoRGV0YWNoRXZlbnQuc2V0KFJkeFBvcG92ZXJBdHRhY2hEZXRhY2hFdmVudC5BVFRBQ0gpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9uRGV0YWNoKCkge1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkuZGV0YWNoXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBgdGhpcy5vbkNsb3NlZC5lbWl0KCk7YCBpcyBiZWluZyBkZWxlZ2F0ZWQgdG8gdGhlIHJvb3QgZGlyZWN0aXZlIGR1ZSB0byB0aGUgY2xvc2luZyBhbmltYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJvb3QuYXR0YWNoRGV0YWNoRXZlbnQuc2V0KFJkeFBvcG92ZXJBdHRhY2hEZXRhY2hFdmVudC5ERVRBQ0gpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHNldFNjcm9sbFN0cmF0ZWd5KCkge1xuICAgICAgICBjb25zdCBwcmV2U2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLmNvbm5lY3RlZE92ZXJsYXkuc2Nyb2xsU3RyYXRlZ3k7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5zY3JvbGxTdHJhdGVneSA9IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5maXJlT3ZlcmxheU5nT25DaGFuZ2VzKCdzY3JvbGxTdHJhdGVneScsIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5zY3JvbGxTdHJhdGVneSwgcHJldlNjcm9sbFN0cmF0ZWd5KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgc2V0RGlzYWJsZUNsb3NlKCkge1xuICAgICAgICBjb25zdCBwcmV2RGlzYWJsZUNsb3NlID0gdGhpcy5jb25uZWN0ZWRPdmVybGF5LmRpc2FibGVDbG9zZTtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5LmRpc2FibGVDbG9zZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZmlyZU92ZXJsYXlOZ09uQ2hhbmdlcygnZGlzYWJsZUNsb3NlJywgdGhpcy5jb25uZWN0ZWRPdmVybGF5LmRpc2FibGVDbG9zZSwgcHJldkRpc2FibGVDbG9zZSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHNldE9yaWdpbihvcmlnaW46IENka0Nvbm5lY3RlZE92ZXJsYXlbJ29yaWdpbiddKSB7XG4gICAgICAgIGNvbnN0IHByZXZPcmlnaW4gPSB0aGlzLmNvbm5lY3RlZE92ZXJsYXkub3JpZ2luO1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkub3JpZ2luID0gb3JpZ2luO1xuICAgICAgICB0aGlzLmZpcmVPdmVybGF5TmdPbkNoYW5nZXMoJ29yaWdpbicsIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcmlnaW4sIHByZXZPcmlnaW4pO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBzZXRQb3NpdGlvbnMocG9zaXRpb25zOiBDZGtDb25uZWN0ZWRPdmVybGF5Wydwb3NpdGlvbnMnXSkge1xuICAgICAgICBjb25zdCBwcmV2UG9zaXRpb25zID0gdGhpcy5jb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9ucztcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9ucyA9IHBvc2l0aW9ucztcbiAgICAgICAgdGhpcy5maXJlT3ZlcmxheU5nT25DaGFuZ2VzKCdwb3NpdGlvbnMnLCB0aGlzLmNvbm5lY3RlZE92ZXJsYXkucG9zaXRpb25zLCBwcmV2UG9zaXRpb25zKTtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlSZWY/LnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIGNvbXB1dGVQb3NpdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGdyZWF0ZXN0RGltZW5zaW9uRnJvbVRoZUFycm93ID0gTWF0aC5tYXgoXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LnBvcG92ZXJBcnJvd0RpcmVjdGl2ZSgpPy53aWR0aCgpID8/IDAsXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LnBvcG92ZXJBcnJvd0RpcmVjdGl2ZSgpPy5oZWlnaHQoKSA/PyAwXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG9mZnNldHM6IFJkeFNpZGVBbmRBbGlnbk9mZnNldHMgPSB7XG4gICAgICAgICAgICBzaWRlT2Zmc2V0OiB0aGlzLnNpZGVPZmZzZXQoKSA/PyAoZ3JlYXRlc3REaW1lbnNpb25Gcm9tVGhlQXJyb3cgfHwgREVGQVVMVFMub2Zmc2V0cy5zaWRlKSxcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0OiB0aGlzLmFsaWduT2Zmc2V0KCkgPz8gREVGQVVMVFMub2Zmc2V0cy5hbGlnblxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBiYXNlUG9zaXRpb24gPSBnZXRDb250ZW50UG9zaXRpb24oe1xuICAgICAgICAgICAgc2lkZTogdGhpcy5zaWRlKCksXG4gICAgICAgICAgICBhbGlnbjogdGhpcy5hbGlnbigpLFxuICAgICAgICAgICAgc2lkZU9mZnNldDogb2Zmc2V0cy5zaWRlT2Zmc2V0LFxuICAgICAgICAgICAgYWxpZ25PZmZzZXQ6IG9mZnNldHMuYWxpZ25PZmZzZXRcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtiYXNlUG9zaXRpb25dO1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZUFsdGVybmF0ZVBvc2l0aW9ucygpKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFsdGVybmF0ZSBwb3NpdGlvbnMgZm9yIGJldHRlciB1c2VyIGV4cGVyaWVuY2UgYWxvbmcgdGhlIFgvWSBheGlzIChlLmcuIHZlcnRpY2FsL2hvcml6b250YWwgc2Nyb2xsaW5nKVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBhbGxQb3NzaWJsZUNvbm5lY3RlZFBvc2l0aW9ucyA9IGdldEFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zKCk7XG4gICAgICAgICAgICBhbGxQb3NzaWJsZUNvbm5lY3RlZFBvc2l0aW9ucy5mb3JFYWNoKChfLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWRlQW5kQWxpZ25BcnJheSA9IGtleS5zcGxpdCgnfCcpO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKHNpZGVBbmRBbGlnbkFycmF5WzBdIGFzIFJkeFBvcG92ZXJTaWRlKSAhPT0gdGhpcy5zaWRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHNpZGVBbmRBbGlnbkFycmF5WzFdIGFzIFJkeFBvcG92ZXJBbGlnbikgIT09IHRoaXMuYWxpZ24oKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbnRlbnRQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZTogc2lkZUFuZEFsaWduQXJyYXlbMF0gYXMgUmR4UG9wb3ZlclNpZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ246IHNpZGVBbmRBbGlnbkFycmF5WzFdIGFzIFJkeFBvcG92ZXJBbGlnbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlT2Zmc2V0OiBvZmZzZXRzLnNpZGVPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25PZmZzZXQ6IG9mZnNldHMuYWxpZ25PZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvc2l0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uT3JpZ2luQ2hhbmdlRWZmZWN0KCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gKHRoaXMucG9wb3ZlclJvb3QucG9wb3ZlckFuY2hvckRpcmVjdGl2ZSgpID8/IHRoaXMucG9wb3ZlclJvb3QucG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUoKSlcbiAgICAgICAgICAgICAgICAub3ZlcmxheU9yaWdpbjtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcmlnaW4ob3JpZ2luKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgb25Qb3NpdGlvbkNoYW5nZUVmZmVjdCgpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVBbHRlcm5hdGVQb3NpdGlvbnMoKTtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbnMocG9zaXRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgZmlyZU92ZXJsYXlOZ09uQ2hhbmdlczxLIGV4dGVuZHMga2V5b2YgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgViBleHRlbmRzIENka0Nvbm5lY3RlZE92ZXJsYXlbS10+KFxuICAgICAgICBpbnB1dDogSyxcbiAgICAgICAgY3VycmVudFZhbHVlOiBWLFxuICAgICAgICBwcmV2aW91c1ZhbHVlOiBWLFxuICAgICAgICBmaXJzdENoYW5nZSA9IGZhbHNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5uZ09uQ2hhbmdlcyh7XG4gICAgICAgICAgICBbaW5wdXRdOiBuZXcgU2ltcGxlQ2hhbmdlKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSwgZmlyc3RDaGFuZ2UpXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb250ZW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvcG9wb3Zlci9zcmMvcG9wb3Zlci1jb250ZW50LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEUsT0FBTyxFQUNILFFBQVEsRUFDUixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixZQUFZLEVBQ1osV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSwyQkFBMkIsRUFBRSxjQUFjLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDdkgsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQVN2RixNQUFNLE9BQU8sMEJBQTBCO0lBc0VuQztRQXJFQSxjQUFjO1FBQ0csZ0JBQVcsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBQ25ELGNBQWM7UUFDRyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxjQUFjO1FBQ0csWUFBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxjQUFjO1FBQ0csZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FB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QyxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2lCQUNuRyxhQUFhLENBQUM7WUFDbkIsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztJQUNOLHNCQUFzQjtRQUMxQixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2xDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWM7SUFDTixzQkFBc0IsQ0FDMUIsS0FBUSxFQUNSLFlBQWUsRUFDZixhQUFnQixFQUNoQixXQUFXLEdBQUcsS0FBSztRQUVuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDO1lBQzlCLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxZQUFZLENBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7U0FDdEUsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0EzVFEsMEJBQTBCO21HQUExQiwwQkFBMEI7OzRGQUExQiwwQkFBMEI7a0JBUHRDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLGNBQWMsRUFBRTt3QkFDWixtQkFBbUI7cUJBQ3RCO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7XG4gICAgY29tcHV0ZWQsXG4gICAgRGVzdHJveVJlZixcbiAgICBEaXJlY3RpdmUsXG4gICAgZWZmZWN0LFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBPbkluaXQsXG4gICAgb3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZSxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICB1bnRyYWNrZWRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaW5qZWN0UG9wb3ZlclJvb3QgfSBmcm9tICcuL3BvcG92ZXItcm9vdC5pbmplY3QnO1xuaW1wb3J0IHsgREVGQVVMVFMgfSBmcm9tICcuL3BvcG92ZXIuY29uc3RhbnRzJztcbmltcG9ydCB7IFJkeFBvcG92ZXJBbGlnbiwgUmR4UG9wb3ZlckF0dGFjaERldGFjaEV2ZW50LCBSZHhQb3BvdmVyU2lkZSwgUmR4U2lkZUFuZEFsaWduT2Zmc2V0cyB9IGZyb20gJy4vcG9wb3Zlci50eXBlcyc7XG5pbXBvcnQgeyBnZXRBbGxQb3NzaWJsZUNvbm5lY3RlZFBvc2l0aW9ucywgZ2V0Q29udGVudFBvc2l0aW9uIH0gZnJvbSAnLi9wb3BvdmVyLnV0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmR4UG9wb3ZlckNvbnRlbnRdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgICAgIENka0Nvbm5lY3RlZE92ZXJsYXlcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFJkeFBvcG92ZXJDb250ZW50RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9wb3ZlclJvb3QgPSBpbmplY3RQb3BvdmVyUm9vdCgpO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZik7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbm5lY3RlZE92ZXJsYXkgPSBpbmplY3QoQ2RrQ29ubmVjdGVkT3ZlcmxheSk7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IG5hbWUgPSBjb21wdXRlZCgoKSA9PiBgcmR4LXBvcG92ZXItdHJpZ2dlci0ke3RoaXMucG9wb3ZlclJvb3QudW5pcXVlSWQoKX1gKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgcHJlZmVycmVkIHNpZGUgb2YgdGhlIHRyaWdnZXIgdG8gcmVuZGVyIGFnYWluc3Qgd2hlbiBvcGVuLiBXaWxsIGJlIHJldmVyc2VkIHdoZW4gY29sbGlzaW9ucyBvY2N1ciBhbmQgYXZvaWRDb2xsaXNpb25zIGlzIGVuYWJsZWQuXG4gICAgICogQGRlZmF1bHQgdG9wXG4gICAgICovXG4gICAgcmVhZG9ubHkgc2lkZSA9IGlucHV0PFJkeFBvcG92ZXJTaWRlPihSZHhQb3BvdmVyU2lkZS5Ub3ApO1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgZGlzdGFuY2UgaW4gcGl4ZWxzIGZyb20gdGhlIHRyaWdnZXIuXG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICovXG4gICAgcmVhZG9ubHkgc2lkZU9mZnNldCA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4odm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHByZWZlcnJlZCBhbGlnbm1lbnQgYWdhaW5zdCB0aGUgdHJpZ2dlci4gTWF5IGNoYW5nZSB3aGVuIGNvbGxpc2lvbnMgb2NjdXIuXG4gICAgICogQGRlZmF1bHQgY2VudGVyXG4gICAgICovXG4gICAgcmVhZG9ubHkgYWxpZ24gPSBpbnB1dDxSZHhQb3BvdmVyQWxpZ24+KFJkeFBvcG92ZXJBbGlnbi5DZW50ZXIpO1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBbiBvZmZzZXQgaW4gcGl4ZWxzIGZyb20gdGhlIFwic3RhcnRcIiBvciBcImVuZFwiIGFsaWdubWVudCBvcHRpb25zLlxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGFsaWduT2Zmc2V0ID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPih2b2lkIDApO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdG8gYWRkIHNvbWUgYWx0ZXJuYXRlIHBvc2l0aW9ucyBvZiB0aGUgY29udGVudC5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGFsdGVybmF0ZVBvc2l0aW9uc0Rpc2FibGVkID0gaW5wdXQoZmFsc2UpO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBXaGV0aGVyIHRvIHByZXZlbnQgYG9uT3ZlcmxheUVzY2FwZUtleURvd25gIGhhbmRsZXIgZnJvbSBjYWxsaW5nLiAqL1xuICAgIHJlYWRvbmx5IG9uT3ZlcmxheUVzY2FwZUtleURvd25EaXNhYmxlZCA9IGlucHV0KGZhbHNlKTtcbiAgICAvKiogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdG8gcHJldmVudCBgb25PdmVybGF5T3V0c2lkZUNsaWNrYCBoYW5kbGVyIGZyb20gY2FsbGluZy4gKi9cbiAgICByZWFkb25seSBvbk92ZXJsYXlPdXRzaWRlQ2xpY2tEaXNhYmxlZCA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBlc2NhcGUga2V5IGlzIGRvd24uXG4gICAgICogSXQgY2FuIGJlIHByZXZlbnRlZCBieSBzZXR0aW5nIGBvbk92ZXJsYXlFc2NhcGVLZXlEb3duRGlzYWJsZWRgIGlucHV0IHRvIGB0cnVlYC5cbiAgICAgKi9cbiAgICByZWFkb25seSBvbk92ZXJsYXlFc2NhcGVLZXlEb3duID0gb3V0cHV0PEtleWJvYXJkRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGhhbmRsZXIgY2FsbGVkIHdoZW4gYSBwb2ludGVyIGV2ZW50IG9jY3VycyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBJdCBjYW4gYmUgcHJldmVudGVkIGJ5IHNldHRpbmcgYG9uT3ZlcmxheU91dHNpZGVDbGlja0Rpc2FibGVkYCBpbnB1dCB0byBgdHJ1ZWAuXG4gICAgICovXG4gICAgcmVhZG9ubHkgb25PdmVybGF5T3V0c2lkZUNsaWNrID0gb3V0cHV0PE1vdXNlRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgaGFuZGxlciBjYWxsZWQgYWZ0ZXIgdGhlIG92ZXJsYXkgaXMgb3BlblxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9uT3BlbiA9IG91dHB1dDx2b2lkPigpO1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCBoYW5kbGVyIGNhbGxlZCBhZnRlciB0aGUgb3ZlcmxheSBpcyBjbG9zZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBvbkNsb3NlZCA9IG91dHB1dDx2b2lkPigpO1xuXG4gICAgLyoqIEBpbmdvcmUgKi9cbiAgICByZWFkb25seSBwb3NpdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbXB1dGVQb3NpdGlvbnMoKSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5vbk9yaWdpbkNoYW5nZUVmZmVjdCgpO1xuICAgICAgICB0aGlzLm9uUG9zaXRpb25DaGFuZ2VFZmZlY3QoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNldFNjcm9sbFN0cmF0ZWd5KCk7XG4gICAgICAgIHRoaXMuc2V0SGFzQmFja2Ryb3AoKTtcbiAgICAgICAgdGhpcy5zZXREaXNhYmxlQ2xvc2UoKTtcbiAgICAgICAgdGhpcy5vbkF0dGFjaCgpO1xuICAgICAgICB0aGlzLm9uRGV0YWNoKCk7XG4gICAgICAgIHRoaXMuY29ubmVjdEtleWRvd25Fc2NhcGUoKTtcbiAgICAgICAgdGhpcy5jb25uZWN0T3V0c2lkZUNsaWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBvcGVuKCkge1xuICAgICAgICBpZiAodGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2T3BlbiA9IHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcGVuO1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkub3BlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuZmlyZU92ZXJsYXlOZ09uQ2hhbmdlcygnb3BlbicsIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcGVuLCBwcmV2T3Blbik7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbm5lY3RlZE92ZXJsYXkub3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXZPcGVuID0gdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9wZW47XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlyZU92ZXJsYXlOZ09uQ2hhbmdlcygnb3BlbicsIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcGVuLCBwcmV2T3Blbik7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwb3NpdGlvbkNoYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5wb3NpdGlvbkNoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgY29ubmVjdEtleWRvd25Fc2NhcGUoKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vdmVybGF5S2V5ZG93blxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5vbk92ZXJsYXlFc2NhcGVLZXlEb3duRGlzYWJsZWQoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMucG9wb3ZlclJvb3QucmR4Q2RrRXZlbnRTZXJ2aWNlPy5wcmltaXRpdmVQcmV2ZW50ZWRGcm9tQ2RrRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyUm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2RrT3ZlcmxheUVzY2FwZUtleURvd24nXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudC5rZXkgPT09ICdFc2NhcGUnKSxcbiAgICAgICAgICAgICAgICB0YXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25PdmVybGF5RXNjYXBlS2V5RG93bi5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMucG9wb3ZlclJvb3QuZmlyc3REZWZhdWx0T3BlbigpKSxcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LmhhbmRsZUNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgY29ubmVjdE91dHNpZGVDbGljaygpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlPdXRzaWRlQ2xpY2tcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMub25PdmVybGF5T3V0c2lkZUNsaWNrRGlzYWJsZWQoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMucG9wb3ZlclJvb3QucmR4Q2RrRXZlbnRTZXJ2aWNlPy5wcmltaXRpdmVQcmV2ZW50ZWRGcm9tQ2RrRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyUm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2RrT3ZlcmxheU91dHNpZGVDbGljaydcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIEhhbmRsZSB0aGUgc2l0dWF0aW9uIHdoZW4gYW4gYW5jaG9yIGlzIGFkZGVkIGFuZCB0aGUgYW5jaG9yIGJlY29tZXMgdGhlIG9yaWdpbiBvZiB0aGUgb3ZlcmxheVxuICAgICAgICAgICAgICAgICAqIGhlbmNlICB0aGUgdHJpZ2dlciB3aWxsIGJlIGNvbnNpZGVyZWQgdGhlIG91dHNpZGUgZWxlbWVudFxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLnBvcG92ZXJSb290LnBvcG92ZXJBbmNob3JEaXJlY3RpdmUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMucG9wb3ZlclJvb3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uT3ZlcmxheU91dHNpZGVDbGljay5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMucG9wb3ZlclJvb3QuZmlyc3REZWZhdWx0T3BlbigpKSxcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LmhhbmRsZUNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgb25BdHRhY2goKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5hdHRhY2hcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIGB0aGlzLm9uT3Blbi5lbWl0KCk7YCBpcyBiZWluZyBkZWxlZ2F0ZWQgdG8gdGhlIHJvb3QgZGlyZWN0aXZlIGR1ZSB0byB0aGUgb3BlbmluZyBhbmltYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJvb3QuYXR0YWNoRGV0YWNoRXZlbnQuc2V0KFJkeFBvcG92ZXJBdHRhY2hEZXRhY2hFdmVudC5BVFRBQ0gpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9uRGV0YWNoKCkge1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkuZGV0YWNoXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBgdGhpcy5vbkNsb3NlZC5lbWl0KCk7YCBpcyBiZWluZyBkZWxlZ2F0ZWQgdG8gdGhlIHJvb3QgZGlyZWN0aXZlIGR1ZSB0byB0aGUgY2xvc2luZyBhbmltYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJvb3QuYXR0YWNoRGV0YWNoRXZlbnQuc2V0KFJkeFBvcG92ZXJBdHRhY2hEZXRhY2hFdmVudC5ERVRBQ0gpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHNldFNjcm9sbFN0cmF0ZWd5KCkge1xuICAgICAgICBjb25zdCBwcmV2U2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLmNvbm5lY3RlZE92ZXJsYXkuc2Nyb2xsU3RyYXRlZ3k7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5zY3JvbGxTdHJhdGVneSA9IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5maXJlT3ZlcmxheU5nT25DaGFuZ2VzKCdzY3JvbGxTdHJhdGVneScsIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5zY3JvbGxTdHJhdGVneSwgcHJldlNjcm9sbFN0cmF0ZWd5KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgc2V0SGFzQmFja2Ryb3AoKSB7XG4gICAgICAgIGNvbnN0IHByZXZIYXNCYWNrZHJvcCA9IHRoaXMuY29ubmVjdGVkT3ZlcmxheS5oYXNCYWNrZHJvcDtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lmhhc0JhY2tkcm9wID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlyZU92ZXJsYXlOZ09uQ2hhbmdlcygnaGFzQmFja2Ryb3AnLCB0aGlzLmNvbm5lY3RlZE92ZXJsYXkuaGFzQmFja2Ryb3AsIHByZXZIYXNCYWNrZHJvcCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHNldERpc2FibGVDbG9zZSgpIHtcbiAgICAgICAgY29uc3QgcHJldkRpc2FibGVDbG9zZSA9IHRoaXMuY29ubmVjdGVkT3ZlcmxheS5kaXNhYmxlQ2xvc2U7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpcmVPdmVybGF5TmdPbkNoYW5nZXMoJ2Rpc2FibGVDbG9zZScsIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5kaXNhYmxlQ2xvc2UsIHByZXZEaXNhYmxlQ2xvc2UpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBzZXRPcmlnaW4ob3JpZ2luOiBDZGtDb25uZWN0ZWRPdmVybGF5WydvcmlnaW4nXSkge1xuICAgICAgICBjb25zdCBwcmV2T3JpZ2luID0gdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9yaWdpbjtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9yaWdpbiA9IG9yaWdpbjtcbiAgICAgICAgdGhpcy5maXJlT3ZlcmxheU5nT25DaGFuZ2VzKCdvcmlnaW4nLCB0aGlzLmNvbm5lY3RlZE92ZXJsYXkub3JpZ2luLCBwcmV2T3JpZ2luKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgc2V0UG9zaXRpb25zKHBvc2l0aW9uczogQ2RrQ29ubmVjdGVkT3ZlcmxheVsncG9zaXRpb25zJ10pIHtcbiAgICAgICAgY29uc3QgcHJldlBvc2l0aW9ucyA9IHRoaXMuY29ubmVjdGVkT3ZlcmxheS5wb3NpdGlvbnM7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5wb3NpdGlvbnMgPSBwb3NpdGlvbnM7XG4gICAgICAgIHRoaXMuZmlyZU92ZXJsYXlOZ09uQ2hhbmdlcygncG9zaXRpb25zJywgdGhpcy5jb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9ucywgcHJldlBvc2l0aW9ucyk7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vdmVybGF5UmVmPy51cGRhdGVQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBjb21wdXRlUG9zaXRpb25zKCkge1xuICAgICAgICBjb25zdCBncmVhdGVzdERpbWVuc2lvbkZyb21UaGVBcnJvdyA9IE1hdGgubWF4KFxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyUm9vdC5wb3BvdmVyQXJyb3dEaXJlY3RpdmUoKT8ud2lkdGgoKSA/PyAwLFxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyUm9vdC5wb3BvdmVyQXJyb3dEaXJlY3RpdmUoKT8uaGVpZ2h0KCkgPz8gMFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBvZmZzZXRzOiBSZHhTaWRlQW5kQWxpZ25PZmZzZXRzID0ge1xuICAgICAgICAgICAgc2lkZU9mZnNldDogdGhpcy5zaWRlT2Zmc2V0KCkgPz8gKGdyZWF0ZXN0RGltZW5zaW9uRnJvbVRoZUFycm93IHx8IERFRkFVTFRTLm9mZnNldHMuc2lkZSksXG4gICAgICAgICAgICBhbGlnbk9mZnNldDogdGhpcy5hbGlnbk9mZnNldCgpID8/IERFRkFVTFRTLm9mZnNldHMuYWxpZ25cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYmFzZVBvc2l0aW9uID0gZ2V0Q29udGVudFBvc2l0aW9uKHtcbiAgICAgICAgICAgIHNpZGU6IHRoaXMuc2lkZSgpLFxuICAgICAgICAgICAgYWxpZ246IHRoaXMuYWxpZ24oKSxcbiAgICAgICAgICAgIHNpZGVPZmZzZXQ6IG9mZnNldHMuc2lkZU9mZnNldCxcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0OiBvZmZzZXRzLmFsaWduT2Zmc2V0XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBbYmFzZVBvc2l0aW9uXTtcbiAgICAgICAgaWYgKCF0aGlzLmFsdGVybmF0ZVBvc2l0aW9uc0Rpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQWx0ZXJuYXRlIHBvc2l0aW9ucyBmb3IgYmV0dGVyIHVzZXIgZXhwZXJpZW5jZSBhbG9uZyB0aGUgWC9ZIGF4aXMgKGUuZy4gdmVydGljYWwvaG9yaXpvbnRhbCBzY3JvbGxpbmcpXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zID0gZ2V0QWxsUG9zc2libGVDb25uZWN0ZWRQb3NpdGlvbnMoKTtcbiAgICAgICAgICAgIGFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zLmZvckVhY2goKF8sIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpZGVBbmRBbGlnbkFycmF5ID0ga2V5LnNwbGl0KCd8Jyk7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAoc2lkZUFuZEFsaWduQXJyYXlbMF0gYXMgUmR4UG9wb3ZlclNpZGUpICE9PSB0aGlzLnNpZGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAoc2lkZUFuZEFsaWduQXJyYXlbMV0gYXMgUmR4UG9wb3ZlckFsaWduKSAhPT0gdGhpcy5hbGlnbigpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29udGVudFBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlOiBzaWRlQW5kQWxpZ25BcnJheVswXSBhcyBSZHhQb3BvdmVyU2lkZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbjogc2lkZUFuZEFsaWduQXJyYXlbMV0gYXMgUmR4UG9wb3ZlckFsaWduLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVPZmZzZXQ6IG9mZnNldHMuc2lkZU9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbk9mZnNldDogb2Zmc2V0cy5hbGlnbk9mZnNldFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9zaXRpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25PcmlnaW5DaGFuZ2VFZmZlY3QoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW4gPSAodGhpcy5wb3BvdmVyUm9vdC5wb3BvdmVyQW5jaG9yRGlyZWN0aXZlKCkgPz8gdGhpcy5wb3BvdmVyUm9vdC5wb3BvdmVyVHJpZ2dlckRpcmVjdGl2ZSgpKVxuICAgICAgICAgICAgICAgIC5vdmVybGF5T3JpZ2luO1xuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE9yaWdpbihvcmlnaW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBvblBvc2l0aW9uQ2hhbmdlRWZmZWN0KCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuYWx0ZXJuYXRlUG9zaXRpb25zRGlzYWJsZWQoKTtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbnMocG9zaXRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgZmlyZU92ZXJsYXlOZ09uQ2hhbmdlczxLIGV4dGVuZHMga2V5b2YgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgViBleHRlbmRzIENka0Nvbm5lY3RlZE92ZXJsYXlbS10+KFxuICAgICAgICBpbnB1dDogSyxcbiAgICAgICAgY3VycmVudFZhbHVlOiBWLFxuICAgICAgICBwcmV2aW91c1ZhbHVlOiBWLFxuICAgICAgICBmaXJzdENoYW5nZSA9IGZhbHNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5uZ09uQ2hhbmdlcyh7XG4gICAgICAgICAgICBbaW5wdXRdOiBuZXcgU2ltcGxlQ2hhbmdlKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSwgZmlyc3RDaGFuZ2UpXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -6,6 +6,7 @@ import { RdxPopoverContentAttributesToken } from './popover-content-attributes.t
6
6
  import { RdxPopoverContentDirective } from './popover-content.directive';
7
7
  import { RdxPopoverTriggerDirective } from './popover-trigger.directive';
8
8
  import { RdxPopoverAnimationStatus, RdxPopoverAttachDetachEvent, RdxPopoverState } from './popover.types';
9
+ import { injectRdxCdkEventService } from './utils/cdk-event.service';
9
10
  import * as i0 from "@angular/core";
10
11
  let nextId = 0;
11
12
  export class RdxPopoverRootDirective {
@@ -66,6 +67,8 @@ export class RdxPopoverRootDirective {
66
67
  /** @ignore */
67
68
  this.viewContainerRef = inject(ViewContainerRef);
68
69
  /** @ignore */
70
+ this.rdxCdkEventService = injectRdxCdkEventService();
71
+ /** @ignore */
69
72
  this.destroyRef = inject(DestroyRef);
70
73
  /** @ignore */
71
74
  this.state = signal(RdxPopoverState.CLOSED);
@@ -86,6 +89,8 @@ export class RdxPopoverRootDirective {
86
89
  });
87
90
  });
88
91
  };
92
+ this.rdxCdkEventService?.registerPrimitive(this);
93
+ this.destroyRef.onDestroy(() => this.rdxCdkEventService?.deregisterPrimitive(this));
89
94
  this.onStateChangeEffect();
90
95
  this.onCssAnimationStatusChangeChangeEffect();
91
96
  this.onOpenChangeEffect();
@@ -312,4 +317,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
312
317
  exportAs: 'rdxPopoverRoot'
313
318
  }]
314
319
  }], ctorParameters: () => [] });
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1yb290LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvcG9wb3Zlci9zcmMvcG9wb3Zlci1yb290LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0gsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsWUFBWSxFQUNaLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUUxRyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFPZixNQUFNLE9BQU8sdUJBQXVCO0lBMkVoQztRQTFFQSxjQUFjO1FBQ0wsYUFBUSxHQUFHLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLGNBQWM7UUFDTCxTQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXRFOzs7V0FHRztRQUNNLFdBQU0s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ZW50IjpbImltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIGFmdGVyTmV4dFJlbmRlcixcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGNvbXB1dGVkLFxuICAgIGNvbnRlbnRDaGlsZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIHNpZ25hbCxcbiAgICB1bnRyYWNrZWQsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJkeFBvcG92ZXJBbmNob3JEaXJlY3RpdmUgfSBmcm9tICcuL3BvcG92ZXItYW5jaG9yLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSZHhQb3BvdmVyQW5jaG9yVG9rZW4gfSBmcm9tICcuL3BvcG92ZXItYW5jaG9yLnRva2VuJztcbmltcG9ydCB7IFJkeFBvcG92ZXJBcnJvd1Rva2VuIH0gZnJvbSAnLi9wb3BvdmVyLWFycm93LnRva2VuJztcbmltcG9ydCB7IFJkeFBvcG92ZXJDbG9zZVRva2VuIH0gZnJvbSAnLi9wb3BvdmVyLWNsb3NlLnRva2VuJztcbmltcG9ydCB7IFJkeFBvcG92ZXJDb250ZW50QXR0cmlidXRlc1Rva2VuIH0gZnJvbSAnLi9wb3BvdmVyLWNvbnRlbnQtYXR0cmlidXRlcy50b2tlbic7XG5pbXBvcnQgeyBSZHhQb3BvdmVyQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJy4vcG9wb3Zlci1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSZHhQb3BvdmVyVHJpZ2dlckRpcmVjdGl2ZSB9IGZyb20gJy4vcG9wb3Zlci10cmlnZ2VyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSZHhQb3BvdmVyQW5pbWF0aW9uU3RhdHVzLCBSZHhQb3BvdmVyQXR0YWNoRGV0YWNoRXZlbnQsIFJkeFBvcG92ZXJTdGF0ZSB9IGZyb20gJy4vcG9wb3Zlci50eXBlcyc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tyZHhQb3BvdmVyUm9vdF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgZXhwb3J0QXM6ICdyZHhQb3BvdmVyUm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUmR4UG9wb3ZlclJvb3REaXJlY3RpdmUge1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgdW5pcXVlSWQgPSBzaWduYWwoKytuZXh0SWQpO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgbmFtZSA9IGNvbXB1dGVkKCgpID0+IGByZHgtcG9wb3Zlci1yb290LSR7dGhpcy51bmlxdWVJZCgpfWApO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBhbmNob3IgZGlyZWN0aXZlIHRoYXQgY29tZXMgZm9ybSBvdXRzaWRlIHRoZSBwb3BvdmVyIHJvb3RcbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBhbmNob3IgPSBpbnB1dDxSZHhQb3BvdmVyQW5jaG9yRGlyZWN0aXZlIHwgdW5kZWZpbmVkPih2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgb3BlbiBzdGF0ZSBvZiB0aGUgcG9wb3ZlciB3aGVuIGl0IGlzIGluaXRpYWxseSByZW5kZXJlZC4gVXNlIHdoZW4geW91IGRvIG5vdCBuZWVkIHRvIGNvbnRyb2wgaXRzIG9wZW4gc3RhdGUuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICByZWFkb25seSBkZWZhdWx0T3BlbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbnRyb2xsZWQgc3RhdGUgb2YgdGhlIHBvcG92ZXIuIGBvcGVuYCBpbnB1dCB0YWtlIHByZWNlZGVuY2Ugb2YgYGRlZmF1bHRPcGVuYCBpbnB1dC5cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBvcGVuID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byBjb250cm9sIHRoZSBzdGF0ZSBvZiB0aGUgcG9wb3ZlciBmcm9tIGV4dGVybmFsLiBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCBgb3BlbmAgaW5wdXQuXG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXh0ZXJuYWxDb250cm9sID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byB0YWtlIGludG8gYWNjb3VudCBDU1Mgb3BlbmluZy9jbG9zaW5nIGFuaW1hdGlvbnMuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICByZWFkb25seSBjc3NBbmltYXRpb24gPSBpbnB1dDxib29sZWFuLCBCb29sZWFuSW5wdXQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byB0YWtlIGludG8gYWNjb3VudCBDU1Mgb3BlbmluZyBhbmltYXRpb25zLiBgY3NzQW5pbWF0aW9uYCBpbnB1dCBtdXN0IGJlIHNldCB0byAndHJ1ZSdcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNzc09wZW5pbmdBbmltYXRpb24gPSBpbnB1dDxib29sZWFuLCBCb29sZWFuSW5wdXQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byB0YWtlIGludG8gYWNjb3VudCBDU1MgY2xvc2luZyBhbmltYXRpb25zLiBgY3NzQW5pbWF0aW9uYCBpbnB1dCBtdXN0IGJlIHNldCB0byAndHJ1ZSdcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNzc0Nsb3NpbmdBbmltYXRpb24gPSBpbnB1dDxib29sZWFuLCBCb29sZWFuSW5wdXQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgY3NzQW5pbWF0aW9uU3RhdHVzID0gc2lnbmFsPFJkeFBvcG92ZXJBbmltYXRpb25TdGF0dXMgfCBudWxsPihudWxsKTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgcG9wb3ZlckNvbnRlbnREaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoUmR4UG9wb3ZlckNvbnRlbnREaXJlY3RpdmUpO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgcG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoUmR4UG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUpO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgcG9wb3ZlckFycm93RGlyZWN0aXZlID0gY29udGVudENoaWxkKFJkeFBvcG92ZXJBcnJvd1Rva2VuKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IHBvcG92ZXJDbG9zZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChSZHhQb3BvdmVyQ2xvc2VUb2tlbik7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBwb3BvdmVyQ29udGVudEF0dHJpYnV0ZXNDb21wb25lbnQgPSBjb250ZW50Q2hpbGQoUmR4UG9wb3ZlckNvbnRlbnRBdHRyaWJ1dGVzVG9rZW4pO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbnRlcm5hbFBvcG92ZXJBbmNob3JEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQoUmR4UG9wb3ZlckFuY2hvclRva2VuKTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IHN0YXRlID0gc2lnbmFsKFJkeFBvcG92ZXJTdGF0ZS5DTE9TRUQpO1xuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBhdHRhY2hEZXRhY2hFdmVudCA9IHNpZ25hbChSZHhQb3BvdmVyQXR0YWNoRGV0YWNoRXZlbnQuREVUQUNIKTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBpc0ZpcnN0RGVmYXVsdE9wZW4gPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBwb3BvdmVyQW5jaG9yRGlyZWN0aXZlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pbnRlcm5hbFBvcG92ZXJBbmNob3JEaXJlY3RpdmUoKSA/PyB0aGlzLmFuY2hvcigpKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm9uU3RhdGVDaGFuZ2VFZmZlY3QoKTtcbiAgICAgICAgdGhpcy5vbkNzc0FuaW1hdGlvblN0YXR1c0NoYW5nZUNoYW5nZUVmZmVjdCgpO1xuICAgICAgICB0aGlzLm9uT3BlbkNoYW5nZUVmZmVjdCgpO1xuICAgICAgICB0aGlzLm9uSXNGaXJzdERlZmF1bHRPcGVuQ2hhbmdlRWZmZWN0KCk7XG4gICAgICAgIHRoaXMub25BbmNob3JDaGFuZ2VFZmZlY3QoKTtcbiAgICAgICAgdGhpcy5lbWl0T3Blbk9yQ2xvc2VkRXZlbnRFZmZlY3QoKTtcbiAgICAgICAgYWZ0ZXJOZXh0UmVuZGVyKHtcbiAgICAgICAgICAgIHdyaXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdE9wZW4oKSAmJiAhdGhpcy5vcGVuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0ZpcnN0RGVmYXVsdE9wZW4uc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBnZXRBbmltYXRpb25QYXJhbXNTbmFwc2hvdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNzc0FuaW1hdGlvbjogdGhpcy5jc3NBbmltYXRpb24oKSxcbiAgICAgICAgICAgIGNzc09wZW5pbmdBbmltYXRpb246IHRoaXMuY3NzT3BlbmluZ0FuaW1hdGlvbigpLFxuICAgICAgICAgICAgY3NzQ2xvc2luZ0FuaW1hdGlvbjogdGhpcy5jc3NDbG9zaW5nQW5pbWF0aW9uKCksXG4gICAgICAgICAgICBjc3NBbmltYXRpb25TdGF0dXM6IHRoaXMuY3NzQW5pbWF0aW9uU3RhdHVzKCksXG4gICAgICAgICAgICBhdHRhY2hEZXRhY2hFdmVudDogdGhpcy5hdHRhY2hEZXRhY2hFdmVudCgpLFxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUoKSxcbiAgICAgICAgICAgIGNhbkVtaXRPbk9wZW5Pck9uQ2xvc2VkOiB0aGlzLmNhbkVtaXRPbk9wZW5Pck9uQ2xvc2VkKClcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIGNvbnRyb2xsZWRFeHRlcm5hbGx5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leHRlcm5hbENvbnRyb2w7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBmaXJzdERlZmF1bHRPcGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZpcnN0RGVmYXVsdE9wZW4oKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIGhhbmRsZU9wZW4oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmV4dGVybmFsQ29udHJvbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTdGF0ZShSZHhQb3BvdmVyU3RhdGUuT1BFTik7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBoYW5kbGVDbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGaXJzdERlZmF1bHRPcGVuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNGaXJzdERlZmF1bHRPcGVuLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZXh0ZXJuYWxDb250cm9sKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFN0YXRlKFJkeFBvcG92ZXJTdGF0ZS5DTE9TRUQpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgaGFuZGxlVG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5leHRlcm5hbENvbnRyb2woKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNPcGVuKCkgPyB0aGlzLmhhbmRsZUNsb3NlKCkgOiB0aGlzLmhhbmRsZU9wZW4oKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIGlzT3BlbihzdGF0ZT86IFJkeFBvcG92ZXJTdGF0ZSkge1xuICAgICAgICByZXR1cm4gKHN0YXRlID8/IHRoaXMuc3RhdGUoKSkgPT09IFJkeFBvcG92ZXJTdGF0ZS5PUEVOO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBzZXRTdGF0ZShzdGF0ZSA9IFJkeFBvcG92ZXJTdGF0ZS5DTE9TRUQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHN0YXRlID09PSB0aGlzLnN0YXRlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlLnNldChzdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9wZW5Db250ZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBvcG92ZXJDb250ZW50RGlyZWN0aXZlKCkub3BlbigpO1xuICAgICAgICBpZiAoIXRoaXMuY3NzQW5pbWF0aW9uKCkgfHwgIXRoaXMuY3NzT3BlbmluZ0FuaW1hdGlvbigpKSB7XG4gICAgICAgICAgICB0aGlzLmNzc0FuaW1hdGlvblN0YXR1cy5zZXQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgY2xvc2VDb250ZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBvcG92ZXJDb250ZW50RGlyZWN0aXZlKCkuY2xvc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLmNzc0FuaW1hdGlvbigpIHx8ICF0aGlzLmNzc0Nsb3NpbmdBbmltYXRpb24oKSkge1xuICAgICAgICAgICAgdGhpcy5jc3NBbmltYXRpb25TdGF0dXMuc2V0KG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIGVtaXRPbk9wZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbnRlbnREaXJlY3RpdmUoKS5vbk9wZW4uZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBlbWl0T25DbG9zZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbnRlbnREaXJlY3RpdmUoKS5vbkNsb3NlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIGlmT3Blbk9yQ2xvc2VXaXRob3V0QW5pbWF0aW9ucyhzdGF0ZTogUmR4UG9wb3ZlclN0YXRlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhdGhpcy5wb3BvdmVyQ29udGVudEF0dHJpYnV0ZXNDb21wb25lbnQoKSB8fFxuICAgICAgICAgICAgIXRoaXMuY3NzQW5pbWF0aW9uKCkgfHxcbiAgICAgICAgICAgICh0aGlzLmNzc0FuaW1hdGlvbigpICYmICF0aGlzLmNzc0Nsb3NpbmdBbmltYXRpb24oKSAmJiBzdGF0ZSA9PT0gUmR4UG9wb3ZlclN0YXRlLkNMT1NFRCkgfHxcbiAgICAgICAgICAgICh0aGlzLmNzc0FuaW1hdGlvbigpICYmICF0aGlzLmNzc09wZW5pbmdBbmltYXRpb24oKSAmJiBzdGF0ZSA9PT0gUmR4UG9wb3ZlclN0YXRlLk9QRU4pIHx8XG4gICAgICAgICAgICAvLyAhdGhpcy5jc3NBbmltYXRpb25TdGF0dXMoKSB8fFxuICAgICAgICAgICAgKHRoaXMuY3NzT3BlbmluZ0FuaW1hdGlvbigpICYmXG4gICAgICAgICAgICAgICAgc3RhdGUgPT09IFJkeFBvcG92ZXJTdGF0ZS5PUEVOICYmXG4gICAgICAgICAgICAgICAgW1JkeFBvcG92ZXJBbmltYXRpb25TdGF0dXMuT1BFTl9TVEFSVEVEXS5pbmNsdWRlcyh0aGlzLmNzc0FuaW1hdGlvblN0YXR1cygpISkpIHx8XG4gICAgICAgICAgICAodGhpcy5jc3NDbG9zaW5nQW5pbWF0aW9uKCkgJiZcbiAgICAgICAgICAgICAgICBzdGF0ZSA9PT0gUmR4UG9wb3ZlclN0YXRlLkNMT1NFRCAmJlxuICAgICAgICAgICAgICAgIFtSZHhQb3BvdmVyQW5pbWF0aW9uU3RhdHVzLkNMT1NFRF9TVEFSVEVEXS5pbmNsdWRlcyh0aGlzLmNzc0FuaW1hdGlvblN0YXR1cygpISkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIGlmT3Blbk9yQ2xvc2VXaXRoQW5pbWF0aW9ucyhjc3NBbmltYXRpb25TdGF0dXM6IFJkeFBvcG92ZXJBbmltYXRpb25TdGF0dXMgfCBudWxsKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJDb250ZW50QXR0cmlidXRlc0NvbXBvbmVudCgpICYmXG4gICAgICAgICAgICB0aGlzLmNzc0FuaW1hdGlvbigpICYmXG4gICAgICAgICAgICBjc3NBbmltYXRpb25TdGF0dXMgJiZcbiAgICAgICAgICAgICgodGhpcy5jc3NPcGVuaW5nQW5pbWF0aW9uKCkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlKCkgPT09IFJkeFBvcG92ZXJTdGF0ZS5PUEVOICYmXG4gICAgICAgICAgICAgICAgW1JkeFBvcG92ZXJBbmltYXRpb25TdGF0dXMuT1BFTl9FTkRFRF0uaW5jbHVkZXMoY3NzQW5pbWF0aW9uU3RhdHVzKSkgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5jc3NDbG9zaW5nQW5pbWF0aW9uKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSgpID09PSBSZHhQb3BvdmVyU3RhdGUuQ0xPU0VEICYmXG4gICAgICAgICAgICAgICAgICAgIFtSZHhQb3BvdmVyQW5pbWF0aW9uU3RhdHVzLkNMT1NFRF9FTkRFRF0uaW5jbHVkZXMoY3NzQW5pbWF0aW9uU3RhdHVzKSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9wZW5PckNsb3NlKHN0YXRlOiBSZHhQb3BvdmVyU3RhdGUpIHtcbiAgICAgICAgY29uc3QgaXNPcGVuID0gdGhpcy5pc09wZW4oc3RhdGUpO1xuICAgICAgICBpc09wZW4gPyB0aGlzLm9wZW5Db250ZW50KCkgOiB0aGlzLmNsb3NlQ29udGVudCgpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBlbWl0T25PcGVuT3JPbkNsb3NlZChzdGF0ZTogUmR4UG9wb3ZlclN0YXRlKSB7XG4gICAgICAgIHRoaXMuaXNPcGVuKHN0YXRlKVxuICAgICAgICAgICAgPyB0aGlzLmF0dGFjaERldGFjaEV2ZW50KCkgPT09IFJkeFBvcG92ZXJBdHRhY2hEZXRhY2hFdmVudC5BVFRBQ0ggJiYgdGhpcy5lbWl0T25PcGVuKClcbiAgICAgICAgICAgIDogdGhpcy5hdHRhY2hEZXRhY2hFdmVudCgpID09PSBSZHhQb3BvdmVyQXR0YWNoRGV0YWNoRXZlbnQuREVUQUNIICYmIHRoaXMuZW1pdE9uQ2xvc2VkKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIGNhbkVtaXRPbk9wZW5Pck9uQ2xvc2VkKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgIXRoaXMuY3NzQW5pbWF0aW9uKCkgfHxcbiAgICAgICAgICAgICghdGhpcy5jc3NPcGVuaW5nQW5pbWF0aW9uKCkgJiYgdGhpcy5zdGF0ZSgpID09PSBSZHhQb3BvdmVyU3RhdGUuT1BFTikgfHxcbiAgICAgICAgICAgICh0aGlzLmNzc09wZW5pbmdBbmltYXRpb24oKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUoKSA9PT0gUmR4UG9wb3ZlclN0YXRlLk9QRU4gJiZcbiAgICAgICAgICAgICAgICB0aGlzLmNzc0FuaW1hdGlvblN0YXR1cygpID09PSBSZHhQb3BvdmVyQW5pbWF0aW9uU3RhdHVzLk9QRU5fRU5ERUQpIHx8XG4gICAgICAgICAgICAoIXRoaXMuY3NzQ2xvc2luZ0FuaW1hdGlvbigpICYmIHRoaXMuc3RhdGUoKSA9PT0gUmR4UG9wb3ZlclN0YXRlLkNMT1NFRCkgfHxcbiAgICAgICAgICAgICh0aGlzLmNzc0Nsb3NpbmdBbmltYXRpb24oKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUoKSA9PT0gUmR4UG9wb3ZlclN0YXRlLkNMT1NFRCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3NzQW5pbWF0aW9uU3RhdHVzKCkgPT09IFJkeFBvcG92ZXJBbmltYXRpb25TdGF0dXMuQ0xPU0VEX0VOREVEKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBvblN0YXRlQ2hhbmdlRWZmZWN0KCkge1xuICAgICAgICBsZXQgaXNGaXJzdCA9IHRydWU7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGUoKTtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNGaXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pZk9wZW5PckNsb3NlV2l0aG91dEFuaW1hdGlvbnMoc3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuT3JDbG9zZShzdGF0ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBvbkNzc0FuaW1hdGlvblN0YXR1c0NoYW5nZUNoYW5nZUVmZmVjdCgpIHtcbiAgICAgICAgbGV0IGlzRmlyc3QgPSB0cnVlO1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3NzQW5pbWF0aW9uU3RhdHVzID0gdGhpcy5jc3NBbmltYXRpb25TdGF0dXMoKTtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNGaXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pZk9wZW5PckNsb3NlV2l0aEFuaW1hdGlvbnMoY3NzQW5pbWF0aW9uU3RhdHVzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMub3Blbk9yQ2xvc2UodGhpcy5zdGF0ZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgZW1pdE9wZW5PckNsb3NlZEV2ZW50RWZmZWN0KCkge1xuICAgICAgICBsZXQgaXNGaXJzdCA9IHRydWU7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaERldGFjaEV2ZW50KCk7XG4gICAgICAgICAgICB0aGlzLmNzc0FuaW1hdGlvblN0YXR1cygpO1xuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNGaXJzdCkge1xuICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY2FuRW1pdE9wZW5DbG9zZSA9IHVudHJhY2tlZCgoKSA9PiB0aGlzLmNhbkVtaXRPbk9wZW5Pck9uQ2xvc2VkKCkpO1xuICAgICAgICAgICAgICAgIGlmICghY2FuRW1pdE9wZW5DbG9zZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdE9uT3Blbk9yT25DbG9zZWQodGhpcy5zdGF0ZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgb25PcGVuQ2hhbmdlRWZmZWN0KCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3BlbiA9IHRoaXMub3BlbigpO1xuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKG9wZW4gPyBSZHhQb3BvdmVyU3RhdGUuT1BFTiA6IFJkeFBvcG92ZXJTdGF0ZS5DTE9TRUQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBvbklzRmlyc3REZWZhdWx0T3BlbkNoYW5nZUVmZmVjdCgpIHtcbiAgICAgICAgY29uc3QgZWZmZWN0UmVmID0gZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRPcGVuID0gdGhpcy5kZWZhdWx0T3BlbigpO1xuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWRlZmF1bHRPcGVuIHx8IHRoaXMub3BlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVmZmVjdFJlZi5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVPcGVuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9uQW5jaG9yQ2hhbmdlRWZmZWN0ID0gKCkgPT4ge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gdGhpcy5hbmNob3IoKTtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFuY2hvcikge1xuICAgICAgICAgICAgICAgICAgICBhbmNob3Iuc2V0UG9wb3ZlclJvb3QodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG59XG4iXX0=
320
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1yb290LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvcG9wb3Zlci9zcmMvcG9wb3Zlci1yb290LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0gsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsWUFBWSxFQUNaLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUVyRSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFPZixNQUFNLE9BQU8sdUJBQXVCO0lBNkVoQztRQTVFQSxjQUFjO1FBQ0wsYUFBUSxHQUFHLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLGNBQWM7UUFDTCxTQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixJQUFJLENBQUMsUUFB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QUFDO0lBQ1AsQ0FBQzsrR0FsVVEsdUJBQXVCO21HQUF2Qix1QkFBdUIsOG1DQThDeUIsMEJBQTBCLDBHQUUxQiwwQkFBMEIsd0dBRXJDLG9CQUFvQix3R0FFcEIsb0JBQW9CLG9IQUVSLGdDQUFnQyxpSEFFM0IscUJBQXFCOzs0RkF4RDNFLHVCQUF1QjtrQkFMbkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGdCQUFnQjtpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBhZnRlck5leHRSZW5kZXIsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBjb21wdXRlZCxcbiAgICBjb250ZW50Q2hpbGQsXG4gICAgRGVzdHJveVJlZixcbiAgICBEaXJlY3RpdmUsXG4gICAgZWZmZWN0LFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBzaWduYWwsXG4gICAgdW50cmFja2VkLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZHhQb3BvdmVyQW5jaG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9wb3BvdmVyLWFuY2hvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmR4UG9wb3ZlckFuY2hvclRva2VuIH0gZnJvbSAnLi9wb3BvdmVyLWFuY2hvci50b2tlbic7XG5pbXBvcnQgeyBSZHhQb3BvdmVyQXJyb3dUb2tlbiB9IGZyb20gJy4vcG9wb3Zlci1hcnJvdy50b2tlbic7XG5pbXBvcnQgeyBSZHhQb3BvdmVyQ2xvc2VUb2tlbiB9IGZyb20gJy4vcG9wb3Zlci1jbG9zZS50b2tlbic7XG5pbXBvcnQgeyBSZHhQb3BvdmVyQ29udGVudEF0dHJpYnV0ZXNUb2tlbiB9IGZyb20gJy4vcG9wb3Zlci1jb250ZW50LWF0dHJpYnV0ZXMudG9rZW4nO1xuaW1wb3J0IHsgUmR4UG9wb3ZlckNvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuL3BvcG92ZXItY29udGVudC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmR4UG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUgfSBmcm9tICcuL3BvcG92ZXItdHJpZ2dlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmR4UG9wb3ZlckFuaW1hdGlvblN0YXR1cywgUmR4UG9wb3ZlckF0dGFjaERldGFjaEV2ZW50LCBSZHhQb3BvdmVyU3RhdGUgfSBmcm9tICcuL3BvcG92ZXIudHlwZXMnO1xuaW1wb3J0IHsgaW5qZWN0UmR4Q2RrRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi91dGlscy9jZGstZXZlbnQuc2VydmljZSc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tyZHhQb3BvdmVyUm9vdF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgZXhwb3J0QXM6ICdyZHhQb3BvdmVyUm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUmR4UG9wb3ZlclJvb3REaXJlY3RpdmUge1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgdW5pcXVlSWQgPSBzaWduYWwoKytuZXh0SWQpO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgbmFtZSA9IGNvbXB1dGVkKCgpID0+IGByZHgtcG9wb3Zlci1yb290LSR7dGhpcy51bmlxdWVJZCgpfWApO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBhbmNob3IgZGlyZWN0aXZlIHRoYXQgY29tZXMgZm9ybSBvdXRzaWRlIHRoZSBwb3BvdmVyIHJvb3RcbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBhbmNob3IgPSBpbnB1dDxSZHhQb3BvdmVyQW5jaG9yRGlyZWN0aXZlIHwgdW5kZWZpbmVkPih2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgb3BlbiBzdGF0ZSBvZiB0aGUgcG9wb3ZlciB3aGVuIGl0IGlzIGluaXRpYWxseSByZW5kZXJlZC4gVXNlIHdoZW4geW91IGRvIG5vdCBuZWVkIHRvIGNvbnRyb2wgaXRzIG9wZW4gc3RhdGUuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICByZWFkb25seSBkZWZhdWx0T3BlbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbnRyb2xsZWQgc3RhdGUgb2YgdGhlIHBvcG92ZXIuIGBvcGVuYCBpbnB1dCB0YWtlIHByZWNlZGVuY2Ugb2YgYGRlZmF1bHRPcGVuYCBpbnB1dC5cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBvcGVuID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byBjb250cm9sIHRoZSBzdGF0ZSBvZiB0aGUgcG9wb3ZlciBmcm9tIGV4dGVybmFsLiBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCBgb3BlbmAgaW5wdXQuXG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXh0ZXJuYWxDb250cm9sID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byB0YWtlIGludG8gYWNjb3VudCBDU1Mgb3BlbmluZy9jbG9zaW5nIGFuaW1hdGlvbnMuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICByZWFkb25seSBjc3NBbmltYXRpb24gPSBpbnB1dDxib29sZWFuLCBCb29sZWFuSW5wdXQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byB0YWtlIGludG8gYWNjb3VudCBDU1Mgb3BlbmluZyBhbmltYXRpb25zLiBgY3NzQW5pbWF0aW9uYCBpbnB1dCBtdXN0IGJlIHNldCB0byAndHJ1ZSdcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNzc09wZW5pbmdBbmltYXRpb24gPSBpbnB1dDxib29sZWFuLCBCb29sZWFuSW5wdXQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byB0YWtlIGludG8gYWNjb3VudCBDU1MgY2xvc2luZyBhbmltYXRpb25zLiBgY3NzQW5pbWF0aW9uYCBpbnB1dCBtdXN0IGJlIHNldCB0byAndHJ1ZSdcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNzc0Nsb3NpbmdBbmltYXRpb24gPSBpbnB1dDxib29sZWFuLCBCb29sZWFuSW5wdXQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgY3NzQW5pbWF0aW9uU3RhdHVzID0gc2lnbmFsPFJkeFBvcG92ZXJBbmltYXRpb25TdGF0dXMgfCBudWxsPihudWxsKTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgcG9wb3ZlckNvbnRlbnREaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoUmR4UG9wb3ZlckNvbnRlbnREaXJlY3RpdmUpO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgcG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoUmR4UG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUpO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgcG9wb3ZlckFycm93RGlyZWN0aXZlID0gY29udGVudENoaWxkKFJkeFBvcG92ZXJBcnJvd1Rva2VuKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IHBvcG92ZXJDbG9zZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChSZHhQb3BvdmVyQ2xvc2VUb2tlbik7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBwb3BvdmVyQ29udGVudEF0dHJpYnV0ZXNDb21wb25lbnQgPSBjb250ZW50Q2hpbGQoUmR4UG9wb3ZlckNvbnRlbnRBdHRyaWJ1dGVzVG9rZW4pO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbnRlcm5hbFBvcG92ZXJBbmNob3JEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQoUmR4UG9wb3ZlckFuY2hvclRva2VuKTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IHJkeENka0V2ZW50U2VydmljZSA9IGluamVjdFJkeENka0V2ZW50U2VydmljZSgpO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgc3RhdGUgPSBzaWduYWwoUmR4UG9wb3ZlclN0YXRlLkNMT1NFRCk7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IGF0dGFjaERldGFjaEV2ZW50ID0gc2lnbmFsKFJkeFBvcG92ZXJBdHRhY2hEZXRhY2hFdmVudC5ERVRBQ0gpO1xuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzRmlyc3REZWZhdWx0T3BlbiA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IHBvcG92ZXJBbmNob3JEaXJlY3RpdmUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmludGVybmFsUG9wb3ZlckFuY2hvckRpcmVjdGl2ZSgpID8/IHRoaXMuYW5jaG9yKCkpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucmR4Q2RrRXZlbnRTZXJ2aWNlPy5yZWdpc3RlclByaW1pdGl2ZSh0aGlzKTtcbiAgICAgICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB0aGlzLnJkeENka0V2ZW50U2VydmljZT8uZGVyZWdpc3RlclByaW1pdGl2ZSh0aGlzKSk7XG4gICAgICAgIHRoaXMub25TdGF0ZUNoYW5nZUVmZmVjdCgpO1xuICAgICAgICB0aGlzLm9uQ3NzQW5pbWF0aW9uU3RhdHVzQ2hhbmdlQ2hhbmdlRWZmZWN0KCk7XG4gICAgICAgIHRoaXMub25PcGVuQ2hhbmdlRWZmZWN0KCk7XG4gICAgICAgIHRoaXMub25Jc0ZpcnN0RGVmYXVsdE9wZW5DaGFuZ2VFZmZlY3QoKTtcbiAgICAgICAgdGhpcy5vbkFuY2hvckNoYW5nZUVmZmVjdCgpO1xuICAgICAgICB0aGlzLmVtaXRPcGVuT3JDbG9zZWRFdmVudEVmZmVjdCgpO1xuICAgICAgICBhZnRlck5leHRSZW5kZXIoe1xuICAgICAgICAgICAgd3JpdGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0T3BlbigpICYmICF0aGlzLm9wZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRmlyc3REZWZhdWx0T3Blbi5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIGdldEFuaW1hdGlvblBhcmFtc1NuYXBzaG90KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3NzQW5pbWF0aW9uOiB0aGlzLmNzc0FuaW1hdGlvbigpLFxuICAgICAgICAgICAgY3NzT3BlbmluZ0FuaW1hdGlvbjogdGhpcy5jc3NPcGVuaW5nQW5pbWF0aW9uKCksXG4gICAgICAgICAgICBjc3NDbG9zaW5nQW5pbWF0aW9uOiB0aGlzLmNzc0Nsb3NpbmdBbmltYXRpb24oKSxcbiAgICAgICAgICAgIGNzc0FuaW1hdGlvblN0YXR1czogdGhpcy5jc3NBbmltYXRpb25TdGF0dXMoKSxcbiAgICAgICAgICAgIGF0dGFjaERldGFjaEV2ZW50OiB0aGlzLmF0dGFjaERldGFjaEV2ZW50KCksXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSgpLFxuICAgICAgICAgICAgY2FuRW1pdE9uT3Blbk9yT25DbG9zZWQ6IHRoaXMuY2FuRW1pdE9uT3Blbk9yT25DbG9zZWQoKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgY29udHJvbGxlZEV4dGVybmFsbHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4dGVybmFsQ29udHJvbDtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIGZpcnN0RGVmYXVsdE9wZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRmlyc3REZWZhdWx0T3BlbigpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgaGFuZGxlT3BlbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZXh0ZXJuYWxDb250cm9sKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFN0YXRlKFJkeFBvcG92ZXJTdGF0ZS5PUEVOKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIGhhbmRsZUNsb3NlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0ZpcnN0RGVmYXVsdE9wZW4oKSkge1xuICAgICAgICAgICAgdGhpcy5pc0ZpcnN0RGVmYXVsdE9wZW4uc2V0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leHRlcm5hbENvbnRyb2woKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoUmR4UG9wb3ZlclN0YXRlLkNMT1NFRCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBoYW5kbGVUb2dnbGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmV4dGVybmFsQ29udHJvbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc09wZW4oKSA/IHRoaXMuaGFuZGxlQ2xvc2UoKSA6IHRoaXMuaGFuZGxlT3BlbigpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgaXNPcGVuKHN0YXRlPzogUmR4UG9wb3ZlclN0YXRlKSB7XG4gICAgICAgIHJldHVybiAoc3RhdGUgPz8gdGhpcy5zdGF0ZSgpKSA9PT0gUmR4UG9wb3ZlclN0YXRlLk9QRU47XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHNldFN0YXRlKHN0YXRlID0gUmR4UG9wb3ZlclN0YXRlLkNMT1NFRCk6IHZvaWQge1xuICAgICAgICBpZiAoc3RhdGUgPT09IHRoaXMuc3RhdGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUuc2V0KHN0YXRlKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgb3BlbkNvbnRlbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbnRlbnREaXJlY3RpdmUoKS5vcGVuKCk7XG4gICAgICAgIGlmICghdGhpcy5jc3NBbmltYXRpb24oKSB8fCAhdGhpcy5jc3NPcGVuaW5nQW5pbWF0aW9uKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3NzQW5pbWF0aW9uU3RhdHVzLnNldChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBjbG9zZUNvbnRlbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbnRlbnREaXJlY3RpdmUoKS5jbG9zZSgpO1xuICAgICAgICBpZiAoIXRoaXMuY3NzQW5pbWF0aW9uKCkgfHwgIXRoaXMuY3NzQ2xvc2luZ0FuaW1hdGlvbigpKSB7XG4gICAgICAgICAgICB0aGlzLmNzc0FuaW1hdGlvblN0YXR1cy5zZXQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgZW1pdE9uT3BlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29udGVudERpcmVjdGl2ZSgpLm9uT3Blbi5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIGVtaXRPbkNsb3NlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29udGVudERpcmVjdGl2ZSgpLm9uQ2xvc2VkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgaWZPcGVuT3JDbG9zZVdpdGhvdXRBbmltYXRpb25zKHN0YXRlOiBSZHhQb3BvdmVyU3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICF0aGlzLnBvcG92ZXJDb250ZW50QXR0cmlidXRlc0NvbXBvbmVudCgpIHx8XG4gICAgICAgICAgICAhdGhpcy5jc3NBbmltYXRpb24oKSB8fFxuICAgICAgICAgICAgKHRoaXMuY3NzQW5pbWF0aW9uKCkgJiYgIXRoaXMuY3NzQ2xvc2luZ0FuaW1hdGlvbigpICYmIHN0YXRlID09PSBSZHhQb3BvdmVyU3RhdGUuQ0xPU0VEKSB8fFxuICAgICAgICAgICAgKHRoaXMuY3NzQW5pbWF0aW9uKCkgJiYgIXRoaXMuY3NzT3BlbmluZ0FuaW1hdGlvbigpICYmIHN0YXRlID09PSBSZHhQb3BvdmVyU3RhdGUuT1BFTikgfHxcbiAgICAgICAgICAgIC8vICF0aGlzLmNzc0FuaW1hdGlvblN0YXR1cygpIHx8XG4gICAgICAgICAgICAodGhpcy5jc3NPcGVuaW5nQW5pbWF0aW9uKCkgJiZcbiAgICAgICAgICAgICAgICBzdGF0ZSA9PT0gUmR4UG9wb3ZlclN0YXRlLk9QRU4gJiZcbiAgICAgICAgICAgICAgICBbUmR4UG9wb3ZlckFuaW1hdGlvblN0YXR1cy5PUEVOX1NUQVJURURdLmluY2x1ZGVzKHRoaXMuY3NzQW5pbWF0aW9uU3RhdHVzKCkhKSkgfHxcbiAgICAgICAgICAgICh0aGlzLmNzc0Nsb3NpbmdBbmltYXRpb24oKSAmJlxuICAgICAgICAgICAgICAgIHN0YXRlID09PSBSZHhQb3BvdmVyU3RhdGUuQ0xPU0VEICYmXG4gICAgICAgICAgICAgICAgW1JkeFBvcG92ZXJBbmltYXRpb25TdGF0dXMuQ0xPU0VEX1NUQVJURURdLmluY2x1ZGVzKHRoaXMuY3NzQW5pbWF0aW9uU3RhdHVzKCkhKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgaWZPcGVuT3JDbG9zZVdpdGhBbmltYXRpb25zKGNzc0FuaW1hdGlvblN0YXR1czogUmR4UG9wb3ZlckFuaW1hdGlvblN0YXR1cyB8IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMucG9wb3ZlckNvbnRlbnRBdHRyaWJ1dGVzQ29tcG9uZW50KCkgJiZcbiAgICAgICAgICAgIHRoaXMuY3NzQW5pbWF0aW9uKCkgJiZcbiAgICAgICAgICAgIGNzc0FuaW1hdGlvblN0YXR1cyAmJlxuICAgICAgICAgICAgKCh0aGlzLmNzc09wZW5pbmdBbmltYXRpb24oKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUoKSA9PT0gUmR4UG9wb3ZlclN0YXRlLk9QRU4gJiZcbiAgICAgICAgICAgICAgICBbUmR4UG9wb3ZlckFuaW1hdGlvblN0YXR1cy5PUEVOX0VOREVEXS5pbmNsdWRlcyhjc3NBbmltYXRpb25TdGF0dXMpKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLmNzc0Nsb3NpbmdBbmltYXRpb24oKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlKCkgPT09IFJkeFBvcG92ZXJTdGF0ZS5DTE9TRUQgJiZcbiAgICAgICAgICAgICAgICAgICAgW1JkeFBvcG92ZXJBbmltYXRpb25TdGF0dXMuQ0xPU0VEX0VOREVEXS5pbmNsdWRlcyhjc3NBbmltYXRpb25TdGF0dXMpKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgb3Blbk9yQ2xvc2Uoc3RhdGU6IFJkeFBvcG92ZXJTdGF0ZSkge1xuICAgICAgICBjb25zdCBpc09wZW4gPSB0aGlzLmlzT3BlbihzdGF0ZSk7XG4gICAgICAgIGlzT3BlbiA/IHRoaXMub3BlbkNvbnRlbnQoKSA6IHRoaXMuY2xvc2VDb250ZW50KCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIGVtaXRPbk9wZW5Pck9uQ2xvc2VkKHN0YXRlOiBSZHhQb3BvdmVyU3RhdGUpIHtcbiAgICAgICAgdGhpcy5pc09wZW4oc3RhdGUpXG4gICAgICAgICAgICA/IHRoaXMuYXR0YWNoRGV0YWNoRXZlbnQoKSA9PT0gUmR4UG9wb3ZlckF0dGFjaERldGFjaEV2ZW50LkFUVEFDSCAmJiB0aGlzLmVtaXRPbk9wZW4oKVxuICAgICAgICAgICAgOiB0aGlzLmF0dGFjaERldGFjaEV2ZW50KCkgPT09IFJkeFBvcG92ZXJBdHRhY2hEZXRhY2hFdmVudC5ERVRBQ0ggJiYgdGhpcy5lbWl0T25DbG9zZWQoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgY2FuRW1pdE9uT3Blbk9yT25DbG9zZWQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhdGhpcy5jc3NBbmltYXRpb24oKSB8fFxuICAgICAgICAgICAgKCF0aGlzLmNzc09wZW5pbmdBbmltYXRpb24oKSAmJiB0aGlzLnN0YXRlKCkgPT09IFJkeFBvcG92ZXJTdGF0ZS5PUEVOKSB8fFxuICAgICAgICAgICAgKHRoaXMuY3NzT3BlbmluZ0FuaW1hdGlvbigpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSgpID09PSBSZHhQb3BvdmVyU3RhdGUuT1BFTiAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3NzQW5pbWF0aW9uU3RhdHVzKCkgPT09IFJkeFBvcG92ZXJBbmltYXRpb25TdGF0dXMuT1BFTl9FTkRFRCkgfHxcbiAgICAgICAgICAgICghdGhpcy5jc3NDbG9zaW5nQW5pbWF0aW9uKCkgJiYgdGhpcy5zdGF0ZSgpID09PSBSZHhQb3BvdmVyU3RhdGUuQ0xPU0VEKSB8fFxuICAgICAgICAgICAgKHRoaXMuY3NzQ2xvc2luZ0FuaW1hdGlvbigpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSgpID09PSBSZHhQb3BvdmVyU3RhdGUuQ0xPU0VEICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jc3NBbmltYXRpb25TdGF0dXMoKSA9PT0gUmR4UG9wb3ZlckFuaW1hdGlvblN0YXR1cy5DTE9TRURfRU5ERUQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9uU3RhdGVDaGFuZ2VFZmZlY3QoKSB7XG4gICAgICAgIGxldCBpc0ZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZSgpO1xuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNGaXJzdCkge1xuICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlmT3Blbk9yQ2xvc2VXaXRob3V0QW5pbWF0aW9ucyhzdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5PckNsb3NlKHN0YXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9uQ3NzQW5pbWF0aW9uU3RhdHVzQ2hhbmdlQ2hhbmdlRWZmZWN0KCkge1xuICAgICAgICBsZXQgaXNGaXJzdCA9IHRydWU7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjc3NBbmltYXRpb25TdGF0dXMgPSB0aGlzLmNzc0FuaW1hdGlvblN0YXR1cygpO1xuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNGaXJzdCkge1xuICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlmT3Blbk9yQ2xvc2VXaXRoQW5pbWF0aW9ucyhjc3NBbmltYXRpb25TdGF0dXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuT3JDbG9zZSh0aGlzLnN0YXRlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBlbWl0T3Blbk9yQ2xvc2VkRXZlbnRFZmZlY3QoKSB7XG4gICAgICAgIGxldCBpc0ZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNoRGV0YWNoRXZlbnQoKTtcbiAgICAgICAgICAgIHRoaXMuY3NzQW5pbWF0aW9uU3RhdHVzKCk7XG4gICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc0ZpcnN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlzRmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjYW5FbWl0T3BlbkNsb3NlID0gdW50cmFja2VkKCgpID0+IHRoaXMuY2FuRW1pdE9uT3Blbk9yT25DbG9zZWQoKSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5FbWl0T3BlbkNsb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0T25PcGVuT3JPbkNsb3NlZCh0aGlzLnN0YXRlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBvbk9wZW5DaGFuZ2VFZmZlY3QoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcGVuID0gdGhpcy5vcGVuKCk7XG4gICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUob3BlbiA/IFJkeFBvcG92ZXJTdGF0ZS5PUEVOIDogUmR4UG9wb3ZlclN0YXRlLkNMT1NFRCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9uSXNGaXJzdERlZmF1bHRPcGVuQ2hhbmdlRWZmZWN0KCkge1xuICAgICAgICBjb25zdCBlZmZlY3RSZWYgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdE9wZW4gPSB0aGlzLmRlZmF1bHRPcGVuKCk7XG4gICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZGVmYXVsdE9wZW4gfHwgdGhpcy5vcGVuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZWZmZWN0UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU9wZW4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgb25BbmNob3JDaGFuZ2VFZmZlY3QgPSAoKSA9PiB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSB0aGlzLmFuY2hvcigpO1xuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGFuY2hvci5zZXRQb3BvdmVyUm9vdCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbiJdfQ==