@villedemontreal/angular-ui 15.1.0 → 15.2.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.
@@ -12,25 +12,34 @@ export class BaoBreadcrumbComponent {
12
12
  this.renderer = renderer;
13
13
  }
14
14
  ngAfterViewInit() {
15
- this.setLastLinkAttribute();
15
+ this.createLiElement();
16
16
  }
17
17
  onContentChange() {
18
18
  this.setLastLinkAttribute();
19
19
  }
20
+ createLiElement() {
21
+ const children = Array.from(this.staticContainer.nativeElement.children);
22
+ this.setLastLinkAttribute();
23
+ children.forEach(c => {
24
+ const liElement = this.renderer.createElement('li');
25
+ this.renderer.appendChild(liElement, c);
26
+ this.renderer.appendChild(this.staticContainer.nativeElement, liElement);
27
+ });
28
+ }
20
29
  setLastLinkAttribute() {
21
30
  const children = Array.from(this.staticContainer.nativeElement.children);
22
31
  this.renderer.setAttribute(children[children.length - 1], Object.keys(LAST_NODE_ATTRIBUTE)[0], Object.values(LAST_NODE_ATTRIBUTE)[0]);
23
32
  }
24
33
  }
25
34
  BaoBreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: BaoBreadcrumbComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
26
- BaoBreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: BaoBreadcrumbComponent, selector: "bao-breadcrumb", host: { classAttribute: "bao-breadcrumb" }, viewQueries: [{ propertyName: "staticContainer", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<nav\n #container\n class=\"bao-breadcrumb-nav\"\n aria-label=\"Breadcrumb\"\n (cdkObserveContent)=\"onContentChange()\"\n>\n <ng-content></ng-content>\n</nav>\n", styles: [".bao-breadcrumb-nav{display:inline-flex;flex-direction:row;flex-wrap:wrap}.bao-breadcrumb-nav>a{font-weight:700;font-size:.75rem;line-height:1rem;display:inline-flex;align-items:end;text-decoration:none;text-transform:uppercase;color:#637381;margin-bottom:.5rem;margin-right:.25rem;border-bottom:none;background-color:#fff0}.bao-breadcrumb-nav>a:hover{color:#097d6c}.bao-breadcrumb-nav>a:last-child{margin-right:0}.bao-breadcrumb-nav>a:last-child:after{content:none}.bao-breadcrumb-nav>a:after{display:inline-block;content:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ADB5BD' fill-rule='evenodd'><path d='M12.586 12L9.293 8.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L12.586 12z'/></svg>\");height:1rem;width:1rem;margin-left:.25rem;color:#637381;background-color:#fff0;cursor:default;flex-shrink:0}\n"], dependencies: [{ kind: "directive", type: i1.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }], encapsulation: i0.ViewEncapsulation.None });
35
+ BaoBreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: BaoBreadcrumbComponent, selector: "bao-breadcrumb", host: { classAttribute: "bao-breadcrumb" }, viewQueries: [{ propertyName: "staticContainer", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<nav class=\"bao-breadcrumb-nav\" aria-label=\"Breadcrumb\">\n <ol #container (cdkObserveContent)=\"onContentChange()\">\n <ng-content></ng-content>\n </ol>\n</nav>\n", styles: [".bao-breadcrumb-nav{display:inline-flex;flex-direction:row;flex-wrap:wrap}.bao-breadcrumb-nav>ol{list-style:none;padding-left:0;margin-bottom:0}.bao-breadcrumb-nav>ol>li{line-height:1rem;display:inline-flex;margin-bottom:0;margin-right:.25rem}.bao-breadcrumb-nav>ol>li:last-child{margin-right:0}.bao-breadcrumb-nav>ol>li:last-child:after{content:none}.bao-breadcrumb-nav>ol>li:after{display:inline-block;content:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ADB5BD' fill-rule='evenodd'><path d='M12.586 12L9.293 8.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L12.586 12z'/></svg>\");height:1rem;width:1rem;margin-left:.25rem;color:#637381;background-color:#fff0;cursor:default;flex-shrink:0}.bao-breadcrumb-nav>ol>li>a{font-weight:700;font-size:.75rem;line-height:1rem;align-items:end;text-decoration:none;text-transform:uppercase;color:#637381;border-bottom:none;background-color:#fff0}.bao-breadcrumb-nav>ol>li>a:hover{color:#097d6c}\n"], dependencies: [{ kind: "directive", type: i1.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }], encapsulation: i0.ViewEncapsulation.None });
27
36
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: BaoBreadcrumbComponent, decorators: [{
28
37
  type: Component,
29
38
  args: [{ selector: 'bao-breadcrumb', encapsulation: ViewEncapsulation.None, host: {
30
39
  class: 'bao-breadcrumb'
31
- }, template: "<nav\n #container\n class=\"bao-breadcrumb-nav\"\n aria-label=\"Breadcrumb\"\n (cdkObserveContent)=\"onContentChange()\"\n>\n <ng-content></ng-content>\n</nav>\n", styles: [".bao-breadcrumb-nav{display:inline-flex;flex-direction:row;flex-wrap:wrap}.bao-breadcrumb-nav>a{font-weight:700;font-size:.75rem;line-height:1rem;display:inline-flex;align-items:end;text-decoration:none;text-transform:uppercase;color:#637381;margin-bottom:.5rem;margin-right:.25rem;border-bottom:none;background-color:#fff0}.bao-breadcrumb-nav>a:hover{color:#097d6c}.bao-breadcrumb-nav>a:last-child{margin-right:0}.bao-breadcrumb-nav>a:last-child:after{content:none}.bao-breadcrumb-nav>a:after{display:inline-block;content:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ADB5BD' fill-rule='evenodd'><path d='M12.586 12L9.293 8.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L12.586 12z'/></svg>\");height:1rem;width:1rem;margin-left:.25rem;color:#637381;background-color:#fff0;cursor:default;flex-shrink:0}\n"] }]
40
+ }, template: "<nav class=\"bao-breadcrumb-nav\" aria-label=\"Breadcrumb\">\n <ol #container (cdkObserveContent)=\"onContentChange()\">\n <ng-content></ng-content>\n </ol>\n</nav>\n", styles: [".bao-breadcrumb-nav{display:inline-flex;flex-direction:row;flex-wrap:wrap}.bao-breadcrumb-nav>ol{list-style:none;padding-left:0;margin-bottom:0}.bao-breadcrumb-nav>ol>li{line-height:1rem;display:inline-flex;margin-bottom:0;margin-right:.25rem}.bao-breadcrumb-nav>ol>li:last-child{margin-right:0}.bao-breadcrumb-nav>ol>li:last-child:after{content:none}.bao-breadcrumb-nav>ol>li:after{display:inline-block;content:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ADB5BD' fill-rule='evenodd'><path d='M12.586 12L9.293 8.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L12.586 12z'/></svg>\");height:1rem;width:1rem;margin-left:.25rem;color:#637381;background-color:#fff0;cursor:default;flex-shrink:0}.bao-breadcrumb-nav>ol>li>a{font-weight:700;font-size:.75rem;line-height:1rem;align-items:end;text-decoration:none;text-transform:uppercase;color:#637381;border-bottom:none;background-color:#fff0}.bao-breadcrumb-nav>ol>li>a:hover{color:#097d6c}\n"] }]
32
41
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { staticContainer: [{
33
42
  type: ViewChild,
34
43
  args: ['container', { static: false }]
35
44
  }] } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE9BQU8sRUFFTCxTQUFTLEVBR1QsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQzs7O0FBRXZCLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFXdkQsTUFBTSxPQUFPLHNCQUFzQjtJQUlqQyxZQUFvQixRQUFtQjtRQUFuQixhQUFRLEdBQVIsUUFBUSxDQUFXO0lBQUcsQ0FBQztJQUVwQyxlQUFlO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FDeEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQzs7bUhBckJVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLGdOQ3pCbkMsd0tBUUE7MkZEaUJhLHNCQUFzQjtrQkFUbEMsU0FBUzsrQkFDRSxnQkFBZ0IsaUJBR1gsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUsZ0JBQWdCO3FCQUN4QjtnR0FJTyxlQUFlO3NCQUR0QixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIzIFZpbGxlIGRlIE1vbnRyZWFsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcHJvamVjdCByb290IGZvciBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi9cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgUmVuZGVyZXIyLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5jb25zdCBMQVNUX05PREVfQVRUUklCVVRFID0geyAnYXJpYS1jdXJyZW50JzogJ3BhZ2UnIH07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Jhby1icmVhZGNydW1iJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9icmVhZGNydW1iLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2Jhby1icmVhZGNydW1iJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIEJhb0JyZWFkY3J1bWJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgc3RhdGljQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuc2V0TGFzdExpbmtBdHRyaWJ1dGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNvbnRlbnRDaGFuZ2UoKSB7XG4gICAgdGhpcy5zZXRMYXN0TGlua0F0dHJpYnV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRMYXN0TGlua0F0dHJpYnV0ZSgpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IEFycmF5LmZyb20odGhpcy5zdGF0aWNDb250YWluZXIubmF0aXZlRWxlbWVudC5jaGlsZHJlbik7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXSxcbiAgICAgIE9iamVjdC5rZXlzKExBU1RfTk9ERV9BVFRSSUJVVEUpWzBdLFxuICAgICAgT2JqZWN0LnZhbHVlcyhMQVNUX05PREVfQVRUUklCVVRFKVswXVxuICAgICk7XG4gIH1cbn1cbiIsIjxuYXZcbiAgI2NvbnRhaW5lclxuICBjbGFzcz1cImJhby1icmVhZGNydW1iLW5hdlwiXG4gIGFyaWEtbGFiZWw9XCJCcmVhZGNydW1iXCJcbiAgKGNka09ic2VydmVDb250ZW50KT1cIm9uQ29udGVudENoYW5nZSgpXCJcbj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uYXY+XG4iXX0=
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE9BQU8sRUFFTCxTQUFTLEVBR1QsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQzs7O0FBRXZCLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFXdkQsTUFBTSxPQUFPLHNCQUFzQjtJQUdqQyxZQUFvQixRQUFtQjtRQUFuQixhQUFRLEdBQVIsUUFBUSxDQUFXO0lBQUcsQ0FBQztJQUNwQyxlQUFlO1FBQ3BCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ00sZUFBZTtRQUNwQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU8sZUFBZTtRQUNyQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNPLG9CQUFvQjtRQUMxQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUN4QixRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNuQyxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RDLENBQUM7SUFDSixDQUFDOzttSEEzQlUsc0JBQXNCO3VHQUF0QixzQkFBc0IsZ05DekJuQyw2S0FLQTsyRkRvQmEsc0JBQXNCO2tCQVRsQyxTQUFTOytCQUNFLGdCQUFnQixpQkFHWCxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLEtBQUssRUFBRSxnQkFBZ0I7cUJBQ3hCO2dHQUlPLGVBQWU7c0JBRHRCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmNvbnN0IExBU1RfTk9ERV9BVFRSSUJVVEUgPSB7ICdhcmlhLWN1cnJlbnQnOiAncGFnZScgfTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFvLWJyZWFkY3J1bWInLFxuICB0ZW1wbGF0ZVVybDogJy4vYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2JyZWFkY3J1bWIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnYmFvLWJyZWFkY3J1bWInXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQmFvQnJlYWRjcnVtYkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHJpdmF0ZSBzdGF0aWNDb250YWluZXI6IEVsZW1lbnRSZWY7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNyZWF0ZUxpRWxlbWVudCgpO1xuICB9XG4gIHB1YmxpYyBvbkNvbnRlbnRDaGFuZ2UoKSB7XG4gICAgdGhpcy5zZXRMYXN0TGlua0F0dHJpYnV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVMaUVsZW1lbnQoKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKHRoaXMuc3RhdGljQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4pO1xuICAgIHRoaXMuc2V0TGFzdExpbmtBdHRyaWJ1dGUoKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xuICAgICAgY29uc3QgbGlFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChsaUVsZW1lbnQsIGMpO1xuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLnN0YXRpY0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCBsaUVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgc2V0TGFzdExpbmtBdHRyaWJ1dGUoKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKHRoaXMuc3RhdGljQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4pO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKFxuICAgICAgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0sXG4gICAgICBPYmplY3Qua2V5cyhMQVNUX05PREVfQVRUUklCVVRFKVswXSxcbiAgICAgIE9iamVjdC52YWx1ZXMoTEFTVF9OT0RFX0FUVFJJQlVURSlbMF1cbiAgICApO1xuICB9XG59XG4iLCI8bmF2IGNsYXNzPVwiYmFvLWJyZWFkY3J1bWItbmF2XCIgYXJpYS1sYWJlbD1cIkJyZWFkY3J1bWJcIj5cbiAgPG9sICNjb250YWluZXIgKGNka09ic2VydmVDb250ZW50KT1cIm9uQ29udGVudENoYW5nZSgpXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L29sPlxuPC9uYXY+XG4iXX0=
@@ -420,11 +420,18 @@ export class BaoDropdownMenuTrigger {
420
420
  overlayY: 'bottom'
421
421
  },
422
422
  {
423
- // top-right of the overlay is connected to bottom-left of the origin;
424
- originX: 'start',
423
+ // top-right of the overlay is connected to bottom-right of the origin;
424
+ originX: 'end',
425
425
  originY: 'bottom',
426
426
  overlayX: 'end',
427
427
  overlayY: 'top'
428
+ },
429
+ {
430
+ // bottom-right of the overlay is connected to top-right of the origin;
431
+ originX: 'end',
432
+ originY: 'top',
433
+ overlayX: 'end',
434
+ overlayY: 'bottom'
428
435
  }
429
436
  ]),
430
437
  backdropClass: 'bao-overlay-transparent-backdrop',
@@ -542,4 +549,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImpor
542
549
  host: { class: 'bao-dropdown-menu-divider' }
543
550
  }]
544
551
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; } });
545
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvZHJvcGRvd24tbWVudS9kcm9wZG93bi1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9kcm9wZG93bi1tZW51L2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFHTCxhQUFhLEVBRWQsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBSU4sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQzs7O0FBR3ZCOztHQUVHO0FBQ0gsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFRN0IsTUFBTSxPQUFPLG1CQUFtQjtJQVc5QixZQUNVLFFBQW1CLEVBQ25CLFVBQW1DLEVBQ25DLE9BQWlDO1FBRmpDLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7UUFiM0M7O1dBRUc7UUFDYSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpDOztXQUVHO1FBQ2MsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBTS9DLENBQUM7SUFFSixJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7SUFHRCxhQUFhO1FBQ1gsSUFBSSxRQUFRLENBQUMsYUFBYSxJQUFJ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UUFDZixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdEUsQ0FBQzs7bUhBWlUsc0JBQXNCO3VHQUF0QixzQkFBc0IscUpBSnZCLFFBQVE7MkZBSVAsc0JBQXNCO2tCQUxsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxRQUFRO29CQUNsQixRQUFRLEVBQUUsd0RBQXdEO29CQUNsRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7aUJBQzdDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMyBWaWxsZSBkZSBNb250cmVhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIFNlZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICovXG5cbmltcG9ydCB7XG4gIENvbm5lY3RlZFBvc2l0aW9uLFxuICBPdmVybGF5LFxuICBPdmVybGF5Q29uZmlnLFxuICBPdmVybGF5UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IERvbVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogVW5pcXVlIElEIGZvciBlYWNoIGRyb3Bkb3duIG1lbnVcbiAqL1xubGV0IGRyb3Bkb3duTWVudVVuaXF1ZUlkID0gMDtcbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2Jhby1kcm9wZG93bi1tZW51LWl0ZW0sIFtiYW8tZHJvcGRvd24tbWVudS1pdGVtXScsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2Jhby1kcm9wZG93bi1tZW51LWl0ZW0nLFxuICAgICdbY2xhc3MuYmFvLWRyb3Bkb3duLW1lbnUtaXRlbS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQ9PT10cnVlJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIEJhb0Ryb3Bkb3duTWVudUl0ZW0gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICAvKipcbiAgICogSXMgdGhlIGxpc3QgaXRlbSBkaXNhYmxlZFxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gbWVudSBpdGVtIGlzIGNsaWNrZWRcbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgaXRlbUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBfcGFyZW50OiBCYW9Ecm9wZG93bk1lbnVDb21wb25lbnRcbiAgKSB7fVxuXG4gIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAuc3BhY2UnKVxuICBzcGFjZUtleUV2ZW50KCkge1xuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IHRoaXMubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudC50YXJnZXQnXSlcbiAgb25DbGljayhlbDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmF0dHJpYnV0ZXNbJ2hyZWYnXSkge1xuICAgICAgdGhpcy5fcGFyZW50LnNldE5hdmlnYXRpb25BdHRyaWJ1dGUodGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gICAgLy8gUHJldmVudCBkb3VibGUtY2xpY2sgb24gY2hlY2tib3ggaW5wdXQgdGhhdCB1bmRvZXMgdGhlIHRvZ2dsZVxuICAgIGlmICghZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdiYW8tY2hlY2tib3gtY29udGVudC1jb250YWluZXInKSkge1xuICAgICAgdGhpcy5wcm9wYWdhdGVDbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXl1cC5lbnRlcicpXG4gIGVudGVyS2V5RXZlbnQoKSB7XG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gdGhpcy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmF0dHJpYnV0ZXNbJ2hyZWYnXSkge1xuICAgICAgICB0aGlzLl9wYXJlbnQuc2V0TmF2aWdhdGlvbkF0dHJpYnV0ZSh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9wYWdhdGVDbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRDb250ZW50RGl2KCk7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLm5hdGl2ZUVsZW1lbnQsICd0YWJJbmRleCcsICcwJyk7XG4gICAgfVxuICAgIHRoaXMuYWRkUGFkZGluZ0NsYXNzKCk7XG4gICAgLy8gUmVtb3ZlIGlucHV0IGVsZW1lbnQgaW5zaWRlIGl0ZW0gZnJvbSBrZXlib2FyZCBuYXZpZ2F0aW9uIHNlcXVlbmNlXG4gICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2hhcy1lbGVtZW50LWxlZnQnKSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5pdGVtKDApLmZpcnN0RWxlbWVudENoaWxkLFxuICAgICAgICAndGFiSW5kZXgnLFxuICAgICAgICAnLTEnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2Rpc2FibGVkJ10gJiYgY2hhbmdlc1snZGlzYWJsZWQnXS5jdXJyZW50VmFsdWUgPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kaXNhYmxlSXRlbSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZWdyb3VwcyBsYWJlbCBhbmQgZGVzY3JpcHRpb24gaW4gYSBuZXcgZGl2IHRvIGhlbHAgd2l0aCBsYXlvdXQgKi9cbiAgcHJpdmF0ZSBhZGRDb250ZW50RGl2KCk6IHZvaWQge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4pO1xuICAgIGNvbnN0IGxhYmVsSW5kZXggPSBjaGlsZHJlbi5maW5kSW5kZXgoXG4gICAgICBjID0+IGMubG9jYWxOYW1lID09PSAnYmFvLWRyb3Bkb3duLW1lbnUtaXRlbS1sYWJlbCdcbiAgICApO1xuICAgIGNvbnN0IGxhYmVsRWxlbWVudCA9IGNoaWxkcmVuW2xhYmVsSW5kZXhdO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5uYXRpdmVFbGVtZW50LCBjaGlsZHJlbltsYWJlbEluZGV4XSk7XG4gICAgY29uc3QgY29udGVudERpdiA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhjb250ZW50RGl2LCAnYmFvLWRyb3Bkb3duLW1lbnUtaXRlbS1jb250ZW50Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLm5hdGl2ZUVsZW1lbnQsIGNvbnRlbnREaXYpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoY29udGVudERpdiwgbGFiZWxFbGVtZW50KTtcbiAgICBjb25zdCBkZXNjcmlwdGlvbkluZGV4ID0gY2hpbGRyZW4uZmluZEluZGV4KFxuICAgICAgYyA9PiBjLmxvY2FsTmFtZSA9PT0gJ2Jhby1kcm9wZG93bi1tZW51LWl0ZW0tZGVzY3JpcHRpb24nXG4gICAgKTtcbiAgICBpZiAoZGVzY3JpcHRpb25JbmRleCA+IDApIHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uRWxlbWVudCA9IGNoaWxkcmVuW2Rlc2NyaXB0aW9uSW5kZXhdO1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLm5hdGl2ZUVsZW1lbnQsIGNoaWxkcmVuW2Rlc2NyaXB0aW9uSW5kZXhdKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoY29udGVudERpdiwgZGVzY3JpcHRpb25FbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZFBhZGRpbmdDbGFzcygpOiB2b2lkIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IEFycmF5LmZyb20odGhpcy5uYXRpdmVFbGVtZW50LmNoaWxkcmVuKTtcbiAgICAvLyBNZW51IGl0ZW0gaGFzIGV4dHJhIGVsZW1lbnQgbmV4dCB0byBsYWJlbFxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBPbmx5IHRvZ2dsZSBlbGVtZW50IGNhbiBiZSBvbiB0aGUgcmlnaHRcbiAgICAgIGlmIChjaGlsZHJlbi5maW5kSW5kZXgoYyA9PiBjLmxvY2FsTmFtZSA9PT0gJ2Jhby10b2dnbGUnKSA+IDApIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsICdoYXMtZWxlbWVudC1yaWdodCcpO1xuICAgICAgfVxuICAgICAgLy8gSWNvbiwgY2hlY2tib3gsIHJhZGlvIGJ1dHRvbiBvciBhdmF0YXIgbXVzdCBiZSBvbiB0aGUgbGVmdFxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnaGFzLWVsZW1lbnQtbGVmdCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZUl0ZW0oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMubmF0aXZlRWxlbWVudCwgJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5uYXRpdmVFbGVtZW50LCAndGFiSW5kZXgnLCAnLTEnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgcHJvcGFnYXRlcyBhIGNsaWNrIGV2ZW50IHRvIG1lbnUgaXRlbSBjaGlsZHJlbiB3aXRoIGlucHV0cyAoY2hlY2tib3gsIHJhZGlvIGJ1dHRvbikuXG4gICAqIEl0IGVtaXRzIGV2ZW50IHRvIGNsb3NlIG1lbnUgaWYgaXRlbSBkb2VzIG5vdCBjb250YWluIGFuIGlucHV0LlxuICAgKi9cbiAgcHJpdmF0ZSBwcm9wYWdhdGVDbGljaygpOiB2b2lkIHtcbiAgICBsZXQgY2xvc2VNZW51ID0gdHJ1ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4uaXRlbShpKS5maXJzdEVsZW1lbnRDaGlsZC5sb2NhbE5hbWUgPT1cbiAgICAgICAgJ2lucHV0J1xuICAgICAgKSB7XG4gICAgICAgIChcbiAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4uaXRlbShpKS5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudFxuICAgICAgICApLmNsaWNrKCk7XG4gICAgICAgIGNsb3NlTWVudSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2xvc2VNZW51KSB7XG4gICAgICB0aGlzLml0ZW1DbGlja2VkLmVtaXQoKTtcbiAgICB9XG4gIH1cbn1cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Jhby1kcm9wZG93bi1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi1tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdiYW8tZHJvcGRvd24tbWVudS1jb250YWluZXInLFxuICAgICdbY2xhc3MuYmFvLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BdJzogJ2lzT3Blbj09PWZhbHNlJyxcbiAgICAnW2NsYXNzLmJhby1kcm9wZG93bi1tZW51LWNsb3NlZF0nOiAnaXNPcGVuPT09ZmFsc2UnLFxuICAgICdbYXR0ci5hcmlhLWV4cGFuZGVkXSc6ICdpc09wZW4nXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQmFvRHJvcGRvd25NZW51Q29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdFxue1xuICAvKipcbiAgICogRmlyZWQgd2hlbiB0aGUgZHJvcGRvd24tbWVudSBjaGFuZ2VzIGl0cyAnaXNPcGVuJyB2YWx1ZVxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBpc09wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVkIHdoZW4gbWVudSBpcyBjbG9zZWQgYnkga2V5IGV2ZW50IHRyaWdnZXJlZCBmcm9tIG1lbnUgaXRlbVxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBpc0Nsb3NlZEJ5S2V5RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIENvbnRlbnQgb2YgbWVudSB0byBiZSBsb2FkZWQgaW5zaWRlIE92ZXJsYXlcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ21lbnVDb250ZW50JykgX21lbnVDb250ZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAvKipcbiAgICogQWxsIGxpc3QgaXRlbXMgaW5zaWRlIG1lbnVcbiAgICovXG4gIEBDb250ZW50Q2hpbGRyZW4oQmFvRHJvcGRvd25NZW51SXRlbSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBfbGlzdEl0ZW1zOiBRdWVyeUxpc3Q8QmFvRHJvcGRvd25NZW51SXRlbT47XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBkcm9wZG93biBtZW51XG4gICAqL1xuICByZWFkb25seSBtZW51SWQgPSBgYmFvLWRyb3Bkb3duLW1lbnUtJHsrK2Ryb3Bkb3duTWVudVVuaXF1ZUlkfWA7XG5cbiAgLyoqXG4gICAqIElzIHRoZSBkcm9wd2Rvd24gbWVudSBjdXJyZW50bHkgb3BlblxuICAgKi9cbiAgcHJpdmF0ZSBfaXNPcGVuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byBwb3J0YWwgd2hpY2ggaXMgYXR0YWNoZWQgdG8gT3ZlcmxheVxuICAgKi9cbiAgcHJpdmF0ZSBfbWVudVBvcnRhbDogRG9tUG9ydGFsO1xuXG4gIC8qKlxuICAgKiBJbmRleCBvZiBjdXJyZW50bHkgYWN0aXZlIGxpc3QgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBfYWN0aXZlSXRlbUluZGV4OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICkge31cblxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc09wZW47XG4gIH1cbiAgZ2V0IGFjdGl2ZUl0ZW1JbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVJdGVtSW5kZXg7XG4gIH1cbiAgZ2V0IG1lbnVQb3J0YWwoKTogRG9tUG9ydGFsIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudVBvcnRhbDtcbiAgfVxuICBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICB9XG4gIHNldCBpc09wZW4oaXNPcGVuOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNPcGVuID0gaXNPcGVuO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KGlzT3Blbik7XG4gIH1cbiAgc2V0IGFjdGl2ZUl0ZW1JbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAuYXJyb3d1cCcpXG4gIHVwS2V5RXZlbnQoKSB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGlzTmFOKHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCkgPyAwIDogdGhpcy5fYWN0aXZlSXRlbUluZGV4O1xuICAgICAgY29uc3QgbmV4dEluZGV4ID0gdGhpcy5nZXROZXh0QWN0aXZhYmxlSXRlbUluZGV4KGluZGV4LCBmYWxzZSk7XG4gICAgICB0aGlzLmZvY3VzTmV4dEl0ZW0obmV4dEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAuYXJyb3dkb3duJylcbiAgZG93bktleUV2ZW50KCkge1xuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgY29uc3QgaW5kZXggPSBpc05hTih0aGlzLl9hY3RpdmVJdGVtSW5kZXgpID8gMCA6IHRoaXMuX2FjdGl2ZUl0ZW1JbmRleDtcbiAgICAgIGNvbnN0IG5leHRJbmRleCA9IHRoaXMuZ2V0TmV4dEFjdGl2YWJsZUl0ZW1JbmRleChpbmRleCwgdHJ1ZSk7XG4gICAgICB0aGlzLmZvY3VzTmV4dEl0ZW0obmV4dEluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKiogUHJldmVudHMgZm9jdXMgdG8gYmUgbG9zdCB3aGVuIFRBQiBoYXMgcmVhY2hlZCBlbmQgb2YgbWVudSAgKi9cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24udGFiJylcbiAgdGFiS2V5RXZlbnQoKSB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5fbGlzdEl0ZW1zLmxhc3QubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLmlzQ2xvc2VkQnlLZXlFdmVudC5lbWl0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFByZXZlbnRzIGZvY3VzIHRvIGJlIGxvc3Qgd2hlbiBTSElGVCArIFRBQiBoYXMgcmVhY2hlZCBiZWdpbm5pbmcgb2YgbWVudSAgKi9cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24uc2hpZnQudGFiJylcbiAgc2hpZnRUYWJLZXlFdmVudCgpIHtcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLl9saXN0SXRlbXMuZmlyc3QubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLmlzQ2xvc2VkQnlLZXlFdmVudC5lbWl0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdpZCcsIHRoaXMubWVudUlkKTtcbiAgICB0aGlzLl9tZW51UG9ydGFsID0gbmV3IERvbVBvcnRhbCh0aGlzLl9tZW51Q29udGVudCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RJdGVtcy5mb3JFYWNoKFxuICAgICAgKGl0ZW06IEJhb0Ryb3Bkb3duTWVudUl0ZW0pOiBTdWJzY3JpcHRpb24gPT5cbiAgICAgICAgaXRlbS5pdGVtQ2xpY2tlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5pc0Nsb3NlZEJ5S2V5RXZlbnQuZW1pdCgpKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZm9jdXNGaXJzdEl0ZW0oKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4ID0gMDtcbiAgICB0aGlzLl9saXN0SXRlbXMuZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gIH1cblxuICAvKiogTW92ZSB0aGUgYXJpYS1jdXJyZW50IGF0dHJpYnV0ZSB0byBuZXcgYWN0aXZlIHBhZ2UgKi9cbiAgcHVibGljIHNldE5hdmlnYXRpb25BdHRyaWJ1dGUoYWN0aXZlUGFnZUVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXNBY3RpdmVQYWdlID0gdGhpcy5fbGlzdEl0ZW1zLmZpbmQoXG4gICAgICAoaXRlbTogQmFvRHJvcGRvd25NZW51SXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5uYXRpdmVFbGVtZW50LmF0dHJpYnV0ZXNbJ2FyaWEtY3VycmVudCddID09PSAncGFnZSc7XG4gICAgICB9XG4gICAgKTtcbiAgICBpZiAocHJldmlvdXNBY3RpdmVQYWdlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShcbiAgICAgICAgcHJldmlvdXNBY3RpdmVQYWdlLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdhcmlhLWN1cnJlbnQnXG4gICAgICApO1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhcbiAgICAgICAgcHJldmlvdXNBY3RpdmVQYWdlLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdhY3RpdmUtbGluaydcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGFjdGl2ZVBhZ2VFbGVtZW50LCAnYXJpYS1jdXJyZW50JywgJ3BhZ2UnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGFjdGl2ZVBhZ2VFbGVtZW50LCAnYWN0aXZlLWxpbmsnKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNOZXh0SXRlbShuZXh0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IG5leHRJbmRleDtcbiAgICB0aGlzLl9saXN0SXRlbXMuZ2V0KG5leHRJbmRleCkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBuZXh0IGFjdGl2YWJsZSB0YWIgaW5kZXggd2hlbiBuYXZpZ2F0aW5nIHdpdGggdXAgYW5kIGRvd24gYXJyb3cgb3IgVEFCIGtleXNcbiAgICogQHBhcmFtIGN1cnJlbnRJbmRleCBMaXN0IGl0ZW0gaW5kZXggd2hpY2ggY3VycmVudGx5IGhhcyBmb2N1c1xuICAgKiBAcGFyYW0gaXNEb3duIFdoZXRoZXIgdGhlIG5hdmlnYXRpb24gaXMgZ29pbmcgaW4gdGhlIGRvd24gZGlyZWN0aW9uIG9yIG5vdFxuICAgKiBAcGFyYW0gaXNCYWNrd2FyZCBJZiByZWN1cnNpdmUgZnVuY3Rpb24gaXMgZ29pbmcgYmFja3dhcmQgbG9va2luZyBmb3IgbGFzdCBhY3RpdmFibGUgaXRlbSBpbiBsaXN0XG4gICAqIEByZXR1cm5zIEluZGV4IG9mIHRoZSBuZXh0IGl0ZW0gdGhhdCB3aWxsIHJlY2VpdmUgZm9jdXNcbiAgICovXG4gIHByaXZhdGUgZ2V0TmV4dEFjdGl2YWJsZUl0ZW1JbmRleChcbiAgICBjdXJyZW50SW5kZXg6IG51bWJlcixcbiAgICBpc0Rvd246IGJvb2xlYW4sXG4gICAgaXNCYWNrd2FyZCA9IGZhbHNlXG4gICk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLl9saXN0SXRlbXMuZ2V0KGN1cnJlbnRJbmRleCkuZGlzYWJsZWQpIHtcbiAgICAgIGlmICghdGhpcy5jYW5Nb3ZlKGN1cnJlbnRJbmRleCwgaXNEb3duKSkge1xuICAgICAgICByZXR1cm4gY3VycmVudEluZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuY2FuTW92ZShjdXJyZW50SW5kZXgsIGlzRG93bikpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNJbmRleCA9IGlzRG93biA/IGN1cnJlbnRJbmRleCAtIDEgOiBjdXJyZW50SW5kZXggKyAxO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXROZXh0QWN0aXZhYmxlSXRlbUluZGV4KHByZXZpb3VzSW5kZXgsIGlzRG93biwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5leHRJbmRleCA9IGlzRG93biA/IGN1cnJlbnRJbmRleCArIDEgOiBjdXJyZW50SW5kZXggLSAxO1xuICAgIGlmICh0aGlzLl9saXN0SXRlbXMuZ2V0KG5leHRJbmRleCkuZGlzYWJsZWQpIHtcbiAgICAgIGlmIChpc0JhY2t3YXJkKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXROZXh0QWN0aXZhYmxlSXRlbUluZGV4KG5leHRJbmRleCwgaXNEb3duKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRJbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBpZiBmb2N1cyBoYXMgcmVhY2hlZCBlbmQgb3IgYmVnaW5uaW5nIG9mIGxpc3RcbiAgICogQHBhcmFtIGN1cnJlbnRJbmRleCBMaXN0IGl0ZW0gaW5kZXggd2hpY2ggY3VycmVudGx5IGhhcyBmb2N1c1xuICAgKiBAcGFyYW0gaXNEb3duIFdoZXRoZXIgdGhlIG5hdmlnYXRpb24gaXMgZ29pbmcgaW4gdGhlIGRvd24gZGlyZWN0aW9uIG9yIG5vdFxuICAgKiBAcmV0dXJucyBDYW4gZm9jdXMgbW92ZSB0byBuZXh0IGl0ZW0gb3Igbm90XG4gICAqL1xuICBwcml2YXRlIGNhbk1vdmUoY3VycmVudEluZGV4OiBudW1iZXIsIGlzRG93bjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKFxuICAgICAgKGN1cnJlbnRJbmRleCA9PSAwICYmICFpc0Rvd24pIHx8XG4gICAgICAoY3VycmVudEluZGV4ID09IHRoaXMuX2xpc3RJdGVtcy5sZW5ndGggLSAxICYmIGlzRG93bilcbiAgICApO1xuICB9XG59XG4vKipcbiAqIERpcmVjdGl2ZSB0byBiZSBhcHBsaWVkIG9uIGVsZW1lbnQgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIG9wZW5pbmcgYW5kIGNsb3Npbmcgb2YgbWVudS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOlxuICAgICdiYW8tZHJvcGRvd24tbWVudS10cmlnZ2VyLCBbYmFvLWRyb3Bkb3duLW1lbnUtdHJpZ2dlcl0sIFtiYW9Ecm9wZG93bk1lbnVUcmlnZ2VyRm9yXScsXG4gIGhvc3Q6IHsgY2xhc3M6ICdiYW8tZHJvcGRvd24tbWVudS10cmlnZ2VyJyB9XG59KVxuZXhwb3J0IGNsYXNzIEJhb0Ryb3Bkb3duTWVudVRyaWdnZXIgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoJ2Jhb0Ryb3Bkb3duTWVudVRyaWdnZXJGb3InKSBtZW51OiBCYW9Ecm9wZG93bk1lbnVDb21wb25lbnQgfCBudWxsO1xuICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2lzTWVudU9wZW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXlcbiAgKSB7fVxuXG4gIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAuZXNjYXBlJylcbiAgZXNjYXBlS2V5RXZlbnQoKSB7XG4gICAgaWYgKHRoaXMuX2lzTWVudU9wZW4pIHtcbiAgICAgIHRoaXMuY2xvc2VNZW51KCk7XG4gICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICAvKiogRW50ZXIga2V5IGV2ZW50IHRyaWdnZXJzIGNsaWNrIGV2ZW50IHdoaWNoIG9wZW5zIG1lbnUsXG4gICAqICB0aGVuIGZvY3VzIGlzIHB1dCBvbiBmaXJzdCBpdGVtIGluIHRoZSBtZW51ICovXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXl1cC5lbnRlcicsIFsnJGV2ZW50J10pXG4gIGVudGVyS2V5RXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5faXNNZW51T3BlbiAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5tZW51LmZvY3VzRmlyc3RJdGVtKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICBvbkNsaWNrKCkge1xuICAgIHRoaXMudG9nZ2xlTWVudSgpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdyb2xlJywgJ2J1dHRvbicpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKFxuICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LFxuICAgICAgJ2FyaWEtY29udHJvbHMnLFxuICAgICAgYGJhby1kcm9wZG93bi1tZW51LSR7ZHJvcGRvd25NZW51VW5pcXVlSWR9YFxuICAgICk7XG4gICAgdGhpcy5tZW51LmlzQ2xvc2VkQnlLZXlFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZU1lbnUoKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTWVudU9wZW4gPyB0aGlzLmNsb3NlTWVudSgpIDogdGhpcy5vcGVuTWVudSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZU1lbnUoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNZW51T3BlbiA9IGZhbHNlO1xuICAgIHRoaXMubWVudS5jbG9zZSgpO1xuICAgIGlmICh0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3Blbk1lbnUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1lbnUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMuY3JlYXRlT3ZlcmxheSgpO1xuICAgIG92ZXJsYXlSZWYuYXR0YWNoKHRoaXMubWVudS5tZW51UG9ydGFsKTtcbiAgICB0aGlzLl9pc01lbnVPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLm1lbnUub3BlbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPdmVybGF5KCk6IE92ZXJsYXlSZWYge1xuICAgIGlmICghdGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRPdmVybGF5Q29uZmlnKCk7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZShjb25maWcpO1xuICAgIH1cbiAgICB0aGlzLl9vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVJlZjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3ZlcmxheUNvbmZpZygpOiBPdmVybGF5Q29uZmlnIHtcbiAgICByZXR1cm4gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5vdmVybGF5XG4gICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuZWxlbWVudFJlZilcbiAgICAgICAgLndpdGhMb2NrZWRQb3NpdGlvbigpXG4gICAgICAgIC53aXRoR3Jvd0FmdGVyT3BlbigpXG4gICAgICAgIC53aXRoUG9zaXRpb25zKFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyB0b3AtbGVmdCBvZiB0aGUgb3ZlcmxheSBpcyBjb25uZWN0ZWQgdG8gYm90dG9tLWxlZnQgb2YgdGhlIG9yaWdpbjtcbiAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgICAgICAgfSBhcyBDb25uZWN0ZWRQb3NpdGlvbixcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBib3R0b20tbGVmdCBvZiB0aGUgb3ZlcmxheSBpcyBjb25uZWN0ZWQgdG8gdG9wLWxlZnQgb2YgdGhlIG9yaWdpbjtcbiAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nXG4gICAgICAgICAgfSBhcyBDb25uZWN0ZWRQb3NpdGlvbixcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyB0b3AtcmlnaHQgb2YgdGhlIG92ZXJsYXkgaXMgY29ubmVjdGVkIHRvIGJvdHRvbS1sZWZ0IG9mIHRoZSBvcmlnaW47XG4gICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICAgICAgICB9IGFzIENvbm5lY3RlZFBvc2l0aW9uXG4gICAgICAgIF0pLFxuICAgICAgYmFja2Ryb3BDbGFzczogJ2Jhby1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJyxcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKClcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBTZWN0aW9ucyBvZiBsaXN0IGl0ZW1zIGluIG1lbnUuIEFwcGx5IHByb3BlciBzdHlsaW5nIHRvIHNlY3Rpb24ncyB0aXRsZSBpZiB0aGVyZSBpcyBvbmUuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2Jhby1kcm9wZG93bi1tZW51LXNlY3Rpb24sIFtiYW8tZHJvcGRvd24tbWVudS1zZWN0aW9uXScsXG4gIGhvc3Q6IHsgY2xhc3M6ICdiYW8tZHJvcGRvd24tbWVudS1zZWN0aW9uJyB9XG59KVxuZXhwb3J0IGNsYXNzIEJhb0Ryb3Bkb3duTWVudVNlY3Rpb24gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGROb2Rlcyk7XG4gICAgY29uc3QgdGV4dEluZGV4ID0gY2hpbGRyZW4uZmluZEluZGV4KFxuICAgICAgKGM6IENoaWxkTm9kZSkgPT4gYy5ub2RlTmFtZSA9PT0gJyN0ZXh0J1xuICAgICk7XG4gICAgaWYgKHRleHRJbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmluc2VydFRpdGxlKGNoaWxkcmVuLCB0ZXh0SW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0VGl0bGUoY2hpbGRyZW46IENoaWxkTm9kZVtdLCB0eHRJZHg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHRpdGxlRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnaDUnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgdGl0bGVFbGVtZW50LFxuICAgICAgJ3RleHRDb250ZW50JyxcbiAgICAgIGNoaWxkcmVuW3R4dElkeF0ubm9kZVZhbHVlXG4gICAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMubmF0aXZlRWxlbWVudCwgY2hpbGRyZW5bdHh0SWR4XSk7XG4gICAgY29uc3QgbGlzdEluZGV4ID0gY2hpbGRyZW4uZmluZEluZGV4KChjOiBDaGlsZE5vZGUpID0+IGMubm9kZU5hbWUgPT09ICdVTCcpO1xuICAgIHRoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKFxuICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LFxuICAgICAgdGl0bGVFbGVtZW50LFxuICAgICAgY2hpbGRyZW5bbGlzdEluZGV4XVxuICAgICk7XG4gIH1cbn1cbi8qKlxuICogTGFiZWwgb2YgYSBsaXN0IGl0ZW0sIGFkZCBjc3MgY2xhc3MgdG8gYXBwbHkgcHJvcGVyIHN0eWxpbmcuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2Jhby1kcm9wZG93bi1tZW51LWl0ZW0tbGFiZWwsIFtiYW8tZHJvcGRvd24tbWVudS1pdGVtLWxhYmVsXScsXG4gIGhvc3Q6IHsgY2xhc3M6ICdiYW8tZHJvcGRvd24tbWVudS1pdGVtLWxhYmVsJyB9XG59KVxuZXhwb3J0IGNsYXNzIEJhb0Ryb3Bkb3duTWVudUl0ZW1MYWJlbCB7fVxuLyoqXG4gKiBEZXNjcmlwdGlvbiBvZiBhIGxpc3QgaXRlbSwgYWRkIGNzcyBjbGFzcyB0byBhcHBseSBwcm9wZXIgc3R5bGluZy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOlxuICAgICdiYW8tZHJvcGRvd24tbWVudS1pdGVtLWRlc2NyaXB0aW9uLCBbYmFvLWRyb3Bkb3duLW1lbnUtaXRlbS1kZXNjcmlwdGlvbl0nLFxuICBob3N0OiB7IGNsYXNzOiAnYmFvLWRyb3Bkb3duLW1lbnUtaXRlbS1kZXNjcmlwdGlvbicgfVxufSlcbmV4cG9ydCBjbGFzcyBCYW9Ecm9wZG93bk1lbnVJdGVtRGVzY3JpcHRpb24ge31cbi8qKlxuICogRGl2aWRlciB0byBzZXBhcmF0ZSBzZWN0aW9ucy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlOiBgPGhyIC8+YCxcbiAgc2VsZWN0b3I6ICdiYW8tZHJvcGRvd24tbWVudS1kaXZpZGVyLCBbYmFvLWRyb3Bkb3duLW1lbnUtZGl2aWRlcl0nLFxuICBob3N0OiB7IGNsYXNzOiAnYmFvLWRyb3Bkb3duLW1lbnUtZGl2aWRlcicgfVxufSlcbmV4cG9ydCBjbGFzcyBCYW9Ecm9wZG93bk1lbnVEaXZpZGVyIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICkge31cblxuICBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdyb2xlJywgJ3NlcGFyYXRvcicpO1xuICB9XG59XG4iLCI8ZGl2ICNtZW51Q29udGVudCBjbGFzcz1cImJhby1kcm9wZG93bi1tZW51XCIgdGFiaW5kZXg9XCItMVwiPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
552
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvZHJvcGRvd24tbWVudS9kcm9wZG93bi1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9kcm9wZG93bi1tZW51L2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFHTCxhQUFhLEVBRWQsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBSU4sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQzs7O0FBR3ZCOztHQUVHO0FBQ0gsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFRN0IsTUFBTSxPQUFPLG1CQUFtQjtJQVc5QixZQUNVLFFBQW1CLEVBQ25CLFVBQW1DLEVBQ25DLE9BQWlDO1FBRmpDLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7UUFiM0M7O1dBRUc7UUFDYSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpDOztXQUVHO1FBQ2MsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBTS9DLENBQUM7SUFFSixJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7SUFHRCxhQUFhO1FBQ1gsSUFBSSxRQUFRLENBQUMsYUFBYSxJQUFJ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QjtJQUNqQyxZQUNVLFFBQW1CLEVBQ25CLFVBQW1DO1FBRG5DLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7SUFDMUMsQ0FBQztJQUVKLElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7SUFDdkMsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN0RSxDQUFDOzttSEFaVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixxSkFKdkIsUUFBUTsyRkFJUCxzQkFBc0I7a0JBTGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLFFBQVEsRUFBRSx3REFBd0Q7b0JBQ2xFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSwyQkFBMkIsRUFBRTtpQkFDN0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIzIFZpbGxlIGRlIE1vbnRyZWFsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcHJvamVjdCByb290IGZvciBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi9cblxuaW1wb3J0IHtcbiAgQ29ubmVjdGVkUG9zaXRpb24sXG4gIE92ZXJsYXksXG4gIE92ZXJsYXlDb25maWcsXG4gIE92ZXJsYXlSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgRG9tUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBVbmlxdWUgSUQgZm9yIGVhY2ggZHJvcGRvd24gbWVudVxuICovXG5sZXQgZHJvcGRvd25NZW51VW5pcXVlSWQgPSAwO1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnYmFvLWRyb3Bkb3duLW1lbnUtaXRlbSwgW2Jhby1kcm9wZG93bi1tZW51LWl0ZW1dJyxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnYmFvLWRyb3Bkb3duLW1lbnUtaXRlbScsXG4gICAgJ1tjbGFzcy5iYW8tZHJvcGRvd24tbWVudS1pdGVtLWRpc2FibGVkXSc6ICdkaXNhYmxlZD09PXRydWUnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQmFvRHJvcGRvd25NZW51SXRlbSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBJcyB0aGUgbGlzdCBpdGVtIGRpc2FibGVkXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbiBtZW51IGl0ZW0gaXMgY2xpY2tlZFxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIF9wYXJlbnQ6IEJhb0Ryb3Bkb3duTWVudUNvbXBvbmVudFxuICApIHt9XG5cbiAgZ2V0IG5hdGl2ZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXl1cC5zcGFjZScpXG4gIHNwYWNlS2V5RXZlbnQoKSB7XG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gdGhpcy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50LnRhcmdldCddKVxuICBvbkNsaWNrKGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlc1snaHJlZiddKSB7XG4gICAgICB0aGlzLl9wYXJlbnQuc2V0TmF2aWdhdGlvbkF0dHJpYnV0ZSh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgICAvLyBQcmV2ZW50IGRvdWJsZS1jbGljayBvbiBjaGVja2JveCBpbnB1dCB0aGF0IHVuZG9lcyB0aGUgdG9nZ2xlXG4gICAgaWYgKCFlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2Jhby1jaGVja2JveC1jb250ZW50LWNvbnRhaW5lcicpKSB7XG4gICAgICB0aGlzLnByb3BhZ2F0ZUNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXVwLmVudGVyJylcbiAgZW50ZXJLZXlFdmVudCgpIHtcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSB0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlc1snaHJlZiddKSB7XG4gICAgICAgIHRoaXMuX3BhcmVudC5zZXROYXZpZ2F0aW9uQXR0cmlidXRlKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgICB0aGlzLnByb3BhZ2F0ZUNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZENvbnRlbnREaXYoKTtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMubmF0aXZlRWxlbWVudCwgJ3RhYkluZGV4JywgJzAnKTtcbiAgICB9XG4gICAgdGhpcy5hZGRQYWRkaW5nQ2xhc3MoKTtcbiAgICAvLyBSZW1vdmUgaW5wdXQgZWxlbWVudCBpbnNpZGUgaXRlbSBmcm9tIGtleWJvYXJkIG5hdmlnYXRpb24gc2VxdWVuY2VcbiAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnaGFzLWVsZW1lbnQtbGVmdCcpKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLml0ZW0oMCkuZmlyc3RFbGVtZW50Q2hpbGQsXG4gICAgICAgICd0YWJJbmRleCcsXG4gICAgICAgICctMSdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGlzYWJsZWQnXSAmJiBjaGFuZ2VzWydkaXNhYmxlZCddLmN1cnJlbnRWYWx1ZSA9PSB0cnVlKSB7XG4gICAgICB0aGlzLmRpc2FibGVJdGVtKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlZ3JvdXBzIGxhYmVsIGFuZCBkZXNjcmlwdGlvbiBpbiBhIG5ldyBkaXYgdG8gaGVscCB3aXRoIGxheW91dCAqL1xuICBwcml2YXRlIGFkZENvbnRlbnREaXYoKTogdm9pZCB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbik7XG4gICAgY29uc3QgbGFiZWxJbmRleCA9IGNoaWxkcmVuLmZpbmRJbmRleChcbiAgICAgIGMgPT4gYy5sb2NhbE5hbWUgPT09ICdiYW8tZHJvcGRvd24tbWVudS1pdGVtLWxhYmVsJ1xuICAgICk7XG4gICAgY29uc3QgbGFiZWxFbGVtZW50ID0gY2hpbGRyZW5bbGFiZWxJbmRleF07XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLm5hdGl2ZUVsZW1lbnQsIGNoaWxkcmVuW2xhYmVsSW5kZXhdKTtcbiAgICBjb25zdCBjb250ZW50RGl2ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGNvbnRlbnREaXYsICdiYW8tZHJvcGRvd24tbWVudS1pdGVtLWNvbnRlbnQnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMubmF0aXZlRWxlbWVudCwgY29udGVudERpdik7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChjb250ZW50RGl2LCBsYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uSW5kZXggPSBjaGlsZHJlbi5maW5kSW5kZXgoXG4gICAgICBjID0+IGMubG9jYWxOYW1lID09PSAnYmFvLWRyb3Bkb3duLW1lbnUtaXRlbS1kZXNjcmlwdGlvbidcbiAgICApO1xuICAgIGlmIChkZXNjcmlwdGlvbkluZGV4ID4gMCkge1xuICAgICAgY29uc3QgZGVzY3JpcHRpb25FbGVtZW50ID0gY2hpbGRyZW5bZGVzY3JpcHRpb25JbmRleF07XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMubmF0aXZlRWxlbWVudCwgY2hpbGRyZW5bZGVzY3JpcHRpb25JbmRleF0pO1xuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChjb250ZW50RGl2LCBkZXNjcmlwdGlvbkVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkUGFkZGluZ0NsYXNzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4pO1xuICAgIC8vIE1lbnUgaXRlbSBoYXMgZXh0cmEgZWxlbWVudCBuZXh0IHRvIGxhYmVsXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIE9ubHkgdG9nZ2xlIGVsZW1lbnQgY2FuIGJlIG9uIHRoZSByaWdodFxuICAgICAgaWYgKGNoaWxkcmVuLmZpbmRJbmRleChjID0+IGMubG9jYWxOYW1lID09PSAnYmFvLXRvZ2dsZScpID4gMCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgJ2hhcy1lbGVtZW50LXJpZ2h0Jyk7XG4gICAgICB9XG4gICAgICAvLyBJY29uLCBjaGVja2JveCwgcmFkaW8gYnV0dG9uIG9yIGF2YXRhciBtdXN0IGJlIG9uIHRoZSBsZWZ0XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsICdoYXMtZWxlbWVudC1sZWZ0Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlSXRlbSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5uYXRpdmVFbGVtZW50LCAnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLm5hdGl2ZUVsZW1lbnQsICd0YWJJbmRleCcsICctMScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBwcm9wYWdhdGVzIGEgY2xpY2sgZXZlbnQgdG8gbWVudSBpdGVtIGNoaWxkcmVuIHdpdGggaW5wdXRzIChjaGVja2JveCwgcmFkaW8gYnV0dG9uKS5cbiAgICogSXQgZW1pdHMgZXZlbnQgdG8gY2xvc2UgbWVudSBpZiBpdGVtIGRvZXMgbm90IGNvbnRhaW4gYW4gaW5wdXQuXG4gICAqL1xuICBwcml2YXRlIHByb3BhZ2F0ZUNsaWNrKCk6IHZvaWQge1xuICAgIGxldCBjbG9zZU1lbnUgPSB0cnVlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5pdGVtKGkpLmZpcnN0RWxlbWVudENoaWxkLmxvY2FsTmFtZSA9PVxuICAgICAgICAnaW5wdXQnXG4gICAgICApIHtcbiAgICAgICAgKFxuICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5pdGVtKGkpLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50XG4gICAgICAgICkuY2xpY2soKTtcbiAgICAgICAgY2xvc2VNZW51ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjbG9zZU1lbnUpIHtcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxufVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFvLWRyb3Bkb3duLW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24tbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2Jhby1kcm9wZG93bi1tZW51LWNvbnRhaW5lcicsXG4gICAgJ1tjbGFzcy5iYW8tb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcF0nOiAnaXNPcGVuPT09ZmFsc2UnLFxuICAgICdbY2xhc3MuYmFvLWRyb3Bkb3duLW1lbnUtY2xvc2VkXSc6ICdpc09wZW49PT1mYWxzZScsXG4gICAgJ1thdHRyLmFyaWEtZXhwYW5kZWRdJzogJ2lzT3BlbidcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBCYW9Ecm9wZG93bk1lbnVDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0XG57XG4gIC8qKlxuICAgKiBGaXJlZCB3aGVuIHRoZSBkcm9wZG93bi1tZW51IGNoYW5nZXMgaXRzICdpc09wZW4nIHZhbHVlXG4gICAqL1xuICBAT3V0cHV0KCkgcHVibGljIGlzT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogRmlyZWQgd2hlbiBtZW51IGlzIGNsb3NlZCBieSBrZXkgZXZlbnQgdHJpZ2dlcmVkIGZyb20gbWVudSBpdGVtXG4gICAqL1xuICBAT3V0cHV0KCkgcHVibGljIGlzQ2xvc2VkQnlLZXlFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogQ29udGVudCBvZiBtZW51IHRvIGJlIGxvYWRlZCBpbnNpZGUgT3ZlcmxheVxuICAgKi9cbiAgQFZpZXdDaGlsZCgnbWVudUNvbnRlbnQnKSBfbWVudUNvbnRlbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIC8qKlxuICAgKiBBbGwgbGlzdCBpdGVtcyBpbnNpZGUgbWVudVxuICAgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihCYW9Ecm9wZG93bk1lbnVJdGVtLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIF9saXN0SXRlbXM6IFF1ZXJ5TGlzdDxCYW9Ecm9wZG93bk1lbnVJdGVtPjtcblxuICAvKipcbiAgICogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGRyb3Bkb3duIG1lbnVcbiAgICovXG4gIHJlYWRvbmx5IG1lbnVJZCA9IGBiYW8tZHJvcGRvd24tbWVudS0keysrZHJvcGRvd25NZW51VW5pcXVlSWR9YDtcblxuICAvKipcbiAgICogSXMgdGhlIGRyb3B3ZG93biBtZW51IGN1cnJlbnRseSBvcGVuXG4gICAqL1xuICBwcml2YXRlIF9pc09wZW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHBvcnRhbCB3aGljaCBpcyBhdHRhY2hlZCB0byBPdmVybGF5XG4gICAqL1xuICBwcml2YXRlIF9tZW51UG9ydGFsOiBEb21Qb3J0YWw7XG5cbiAgLyoqXG4gICAqIEluZGV4IG9mIGN1cnJlbnRseSBhY3RpdmUgbGlzdCBpdGVtXG4gICAqL1xuICBwcml2YXRlIF9hY3RpdmVJdGVtSW5kZXg6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgKSB7fVxuXG4gIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzT3BlbjtcbiAgfVxuICBnZXQgYWN0aXZlSXRlbUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleDtcbiAgfVxuICBnZXQgbWVudVBvcnRhbCgpOiBEb21Qb3J0YWwge1xuICAgIHJldHVybiB0aGlzLl9tZW51UG9ydGFsO1xuICB9XG4gIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cbiAgc2V0IGlzT3Blbihpc09wZW46IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc09wZW4gPSBpc09wZW47XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQoaXNPcGVuKTtcbiAgfVxuICBzZXQgYWN0aXZlSXRlbUluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXl1cC5hcnJvd3VwJylcbiAgdXBLZXlFdmVudCgpIHtcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gaXNOYU4odGhpcy5fYWN0aXZlSXRlbUluZGV4KSA/IDAgOiB0aGlzLl9hY3RpdmVJdGVtSW5kZXg7XG4gICAgICBjb25zdCBuZXh0SW5kZXggPSB0aGlzLmdldE5leHRBY3RpdmFibGVJdGVtSW5kZXgoaW5kZXgsIGZhbHNlKTtcbiAgICAgIHRoaXMuZm9jdXNOZXh0SXRlbShuZXh0SW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXl1cC5hcnJvd2Rvd24nKVxuICBkb3duS2V5RXZlbnQoKSB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGlzTmFOKHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCkgPyAwIDogdGhpcy5fYWN0aXZlSXRlbUluZGV4O1xuICAgICAgY29uc3QgbmV4dEluZGV4ID0gdGhpcy5nZXROZXh0QWN0aXZhYmxlSXRlbUluZGV4KGluZGV4LCB0cnVlKTtcbiAgICAgIHRoaXMuZm9jdXNOZXh0SXRlbShuZXh0SW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBQcmV2ZW50cyBmb2N1cyB0byBiZSBsb3N0IHdoZW4gVEFCIGhhcyByZWFjaGVkIGVuZCBvZiBtZW51ICAqL1xuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bi50YWInKVxuICB0YWJLZXlFdmVudCgpIHtcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLl9saXN0SXRlbXMubGFzdC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuaXNDbG9zZWRCeUtleUV2ZW50LmVtaXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogUHJldmVudHMgZm9jdXMgdG8gYmUgbG9zdCB3aGVuIFNISUZUICsgVEFCIGhhcyByZWFjaGVkIGJlZ2lubmluZyBvZiBtZW51ICAqL1xuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bi5zaGlmdC50YWInKVxuICBzaGlmdFRhYktleUV2ZW50KCkge1xuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuX2xpc3RJdGVtcy5maXJzdC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuaXNDbG9zZWRCeUtleUV2ZW50LmVtaXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMubmF0aXZlRWxlbWVudCwgJ2lkJywgdGhpcy5tZW51SWQpO1xuICAgIHRoaXMuX21lbnVQb3J0YWwgPSBuZXcgRG9tUG9ydGFsKHRoaXMuX21lbnVDb250ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdEl0ZW1zLmZvckVhY2goXG4gICAgICAoaXRlbTogQmFvRHJvcGRvd25NZW51SXRlbSk6IFN1YnNjcmlwdGlvbiA9PlxuICAgICAgICBpdGVtLml0ZW1DbGlja2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmlzQ2xvc2VkQnlLZXlFdmVudC5lbWl0KCkpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1c0ZpcnN0SXRlbSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSAwO1xuICAgIHRoaXMuX2xpc3RJdGVtcy5maXJzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIC8qKiBNb3ZlIHRoZSBhcmlhLWN1cnJlbnQgYXR0cmlidXRlIHRvIG5ldyBhY3RpdmUgcGFnZSAqL1xuICBwdWJsaWMgc2V0TmF2aWdhdGlvbkF0dHJpYnV0ZShhY3RpdmVQYWdlRWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2aW91c0FjdGl2ZVBhZ2UgPSB0aGlzLl9saXN0SXRlbXMuZmluZChcbiAgICAgIChpdGVtOiBCYW9Ecm9wZG93bk1lbnVJdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlc1snYXJpYS1jdXJyZW50J10gPT09ICdwYWdlJztcbiAgICAgIH1cbiAgICApO1xuICAgIGlmIChwcmV2aW91c0FjdGl2ZVBhZ2UpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKFxuICAgICAgICBwcmV2aW91c0FjdGl2ZVBhZ2UubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2FyaWEtY3VycmVudCdcbiAgICAgICk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxuICAgICAgICBwcmV2aW91c0FjdGl2ZVBhZ2UubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2FjdGl2ZS1saW5rJ1xuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoYWN0aXZlUGFnZUVsZW1lbnQsICdhcmlhLWN1cnJlbnQnLCAncGFnZScpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYWN0aXZlUGFnZUVsZW1lbnQsICdhY3RpdmUtbGluaycpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c05leHRJdGVtKG5leHRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4ID0gbmV4dEluZGV4O1xuICAgIHRoaXMuX2xpc3RJdGVtcy5nZXQobmV4dEluZGV4KS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIG5leHQgYWN0aXZhYmxlIHRhYiBpbmRleCB3aGVuIG5hdmlnYXRpbmcgd2l0aCB1cCBhbmQgZG93biBhcnJvdyBvciBUQUIga2V5c1xuICAgKiBAcGFyYW0gY3VycmVudEluZGV4IExpc3QgaXRlbSBpbmRleCB3aGljaCBjdXJyZW50bHkgaGFzIGZvY3VzXG4gICAqIEBwYXJhbSBpc0Rvd24gV2hldGhlciB0aGUgbmF2aWdhdGlvbiBpcyBnb2luZyBpbiB0aGUgZG93biBkaXJlY3Rpb24gb3Igbm90XG4gICAqIEBwYXJhbSBpc0JhY2t3YXJkIElmIHJlY3Vyc2l2ZSBmdW5jdGlvbiBpcyBnb2luZyBiYWNrd2FyZCBsb29raW5nIGZvciBsYXN0IGFjdGl2YWJsZSBpdGVtIGluIGxpc3RcbiAgICogQHJldHVybnMgSW5kZXggb2YgdGhlIG5leHQgaXRlbSB0aGF0IHdpbGwgcmVjZWl2ZSBmb2N1c1xuICAgKi9cbiAgcHJpdmF0ZSBnZXROZXh0QWN0aXZhYmxlSXRlbUluZGV4KFxuICAgIGN1cnJlbnRJbmRleDogbnVtYmVyLFxuICAgIGlzRG93bjogYm9vbGVhbixcbiAgICBpc0JhY2t3YXJkID0gZmFsc2VcbiAgKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RJdGVtcy5nZXQoY3VycmVudEluZGV4KS5kaXNhYmxlZCkge1xuICAgICAgaWYgKCF0aGlzLmNhbk1vdmUoY3VycmVudEluZGV4LCBpc0Rvd24pKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5jYW5Nb3ZlKGN1cnJlbnRJbmRleCwgaXNEb3duKSkge1xuICAgICAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gaXNEb3duID8gY3VycmVudEluZGV4IC0gMSA6IGN1cnJlbnRJbmRleCArIDE7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE5leHRBY3RpdmFibGVJdGVtSW5kZXgocHJldmlvdXNJbmRleCwgaXNEb3duLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV4dEluZGV4ID0gaXNEb3duID8gY3VycmVudEluZGV4ICsgMSA6IGN1cnJlbnRJbmRleCAtIDE7XG4gICAgaWYgKHRoaXMuX2xpc3RJdGVtcy5nZXQobmV4dEluZGV4KS5kaXNhYmxlZCkge1xuICAgICAgaWYgKGlzQmFja3dhcmQpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldE5leHRBY3RpdmFibGVJdGVtSW5kZXgobmV4dEluZGV4LCBpc0Rvd24pO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dEluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGlmIGZvY3VzIGhhcyByZWFjaGVkIGVuZCBvciBiZWdpbm5pbmcgb2YgbGlzdFxuICAgKiBAcGFyYW0gY3VycmVudEluZGV4IExpc3QgaXRlbSBpbmRleCB3aGljaCBjdXJyZW50bHkgaGFzIGZvY3VzXG4gICAqIEBwYXJhbSBpc0Rvd24gV2hldGhlciB0aGUgbmF2aWdhdGlvbiBpcyBnb2luZyBpbiB0aGUgZG93biBkaXJlY3Rpb24gb3Igbm90XG4gICAqIEByZXR1cm5zIENhbiBmb2N1cyBtb3ZlIHRvIG5leHQgaXRlbSBvciBub3RcbiAgICovXG4gIHByaXZhdGUgY2FuTW92ZShjdXJyZW50SW5kZXg6IG51bWJlciwgaXNEb3duOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEoXG4gICAgICAoY3VycmVudEluZGV4ID09IDAgJiYgIWlzRG93bikgfHxcbiAgICAgIChjdXJyZW50SW5kZXggPT0gdGhpcy5fbGlzdEl0ZW1zLmxlbmd0aCAtIDEgJiYgaXNEb3duKVxuICAgICk7XG4gIH1cbn1cbi8qKlxuICogRGlyZWN0aXZlIHRvIGJlIGFwcGxpZWQgb24gZWxlbWVudCB0aGF0IHdpbGwgdHJpZ2dlciB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyBvZiBtZW51LlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6XG4gICAgJ2Jhby1kcm9wZG93bi1tZW51LXRyaWdnZXIsIFtiYW8tZHJvcGRvd24tbWVudS10cmlnZ2VyXSwgW2Jhb0Ryb3Bkb3duTWVudVRyaWdnZXJGb3JdJyxcbiAgaG9zdDogeyBjbGFzczogJ2Jhby1kcm9wZG93bi1tZW51LXRyaWdnZXInIH1cbn0pXG5leHBvcnQgY2xhc3MgQmFvRHJvcGRvd25NZW51VHJpZ2dlciBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgnYmFvRHJvcGRvd25NZW51VHJpZ2dlckZvcicpIG1lbnU6IEJhb0Ryb3Bkb3duTWVudUNvbXBvbmVudCB8IG51bGw7XG4gIHByaXZhdGUgX292ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfaXNNZW51T3BlbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheVxuICApIHt9XG5cbiAgZ2V0IG5hdGl2ZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXl1cC5lc2NhcGUnKVxuICBlc2NhcGVLZXlFdmVudCgpIHtcbiAgICBpZiAodGhpcy5faXNNZW51T3Blbikge1xuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBFbnRlciBrZXkgZXZlbnQgdHJpZ2dlcnMgY2xpY2sgZXZlbnQgd2hpY2ggb3BlbnMgbWVudSxcbiAgICogIHRoZW4gZm9jdXMgaXMgcHV0IG9uIGZpcnN0IGl0ZW0gaW4gdGhlIG1lbnUgKi9cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXVwLmVudGVyJywgWyckZXZlbnQnXSlcbiAgZW50ZXJLZXlFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLl9pc01lbnVPcGVuICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMubmF0aXZlRWxlbWVudCkge1xuICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLm1lbnUuZm9jdXNGaXJzdEl0ZW0oKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIG9uQ2xpY2soKSB7XG4gICAgdGhpcy50b2dnbGVNZW51KCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMubmF0aXZlRWxlbWVudCwgJ3JvbGUnLCAnYnV0dG9uJyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnYXJpYS1jb250cm9scycsXG4gICAgICBgYmFvLWRyb3Bkb3duLW1lbnUtJHtkcm9wZG93bk1lbnVVbmlxdWVJZH1gXG4gICAgKTtcbiAgICB0aGlzLm1lbnUuaXNDbG9zZWRCeUtleUV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlTWVudSgpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5faXNNZW51T3BlbiA/IHRoaXMuY2xvc2VNZW51KCkgOiB0aGlzLm9wZW5NZW51KCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlTWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc01lbnVPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5tZW51LmNsb3NlKCk7XG4gICAgaWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuTWVudSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubWVudSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvdmVybGF5UmVmID0gdGhpcy5jcmVhdGVPdmVybGF5KCk7XG4gICAgb3ZlcmxheVJlZi5hdHRhY2godGhpcy5tZW51Lm1lbnVQb3J0YWwpO1xuICAgIHRoaXMuX2lzTWVudU9wZW4gPSB0cnVlO1xuICAgIHRoaXMubWVudS5vcGVuKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU92ZXJsYXkoKTogT3ZlcmxheVJlZiB7XG4gICAgaWYgKCF0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldE92ZXJsYXlDb25maWcoKTtcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKGNvbmZpZyk7XG4gICAgfVxuICAgIHRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9vdmVybGF5UmVmO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPdmVybGF5Q29uZmlnKCk6IE92ZXJsYXlDb25maWcge1xuICAgIHJldHVybiBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLm92ZXJsYXlcbiAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5lbGVtZW50UmVmKVxuICAgICAgICAud2l0aExvY2tlZFBvc2l0aW9uKClcbiAgICAgICAgLndpdGhHcm93QWZ0ZXJPcGVuKClcbiAgICAgICAgLndpdGhQb3NpdGlvbnMoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRvcC1sZWZ0IG9mIHRoZSBvdmVybGF5IGlzIGNvbm5lY3RlZCB0byBib3R0b20tbGVmdCBvZiB0aGUgb3JpZ2luO1xuICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICAgICAgICB9IGFzIENvbm5lY3RlZFBvc2l0aW9uLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJvdHRvbS1sZWZ0IG9mIHRoZSBvdmVybGF5IGlzIGNvbm5lY3RlZCB0byB0b3AtbGVmdCBvZiB0aGUgb3JpZ2luO1xuICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbSdcbiAgICAgICAgICB9IGFzIENvbm5lY3RlZFBvc2l0aW9uLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRvcC1yaWdodCBvZiB0aGUgb3ZlcmxheSBpcyBjb25uZWN0ZWQgdG8gYm90dG9tLXJpZ2h0IG9mIHRoZSBvcmlnaW47XG4gICAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgICAgICAgfSBhcyBDb25uZWN0ZWRQb3NpdGlvbixcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBib3R0b20tcmlnaHQgb2YgdGhlIG92ZXJsYXkgaXMgY29ubmVjdGVkIHRvIHRvcC1yaWdodCBvZiB0aGUgb3JpZ2luO1xuICAgICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xuICAgICAgICAgIH0gYXMgQ29ubmVjdGVkUG9zaXRpb25cbiAgICAgICAgXSksXG4gICAgICBiYWNrZHJvcENsYXNzOiAnYmFvLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnLFxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKVxuICAgIH0pO1xuICB9XG59XG4vKipcbiAqIFNlY3Rpb25zIG9mIGxpc3QgaXRlbXMgaW4gbWVudS4gQXBwbHkgcHJvcGVyIHN0eWxpbmcgdG8gc2VjdGlvbidzIHRpdGxlIGlmIHRoZXJlIGlzIG9uZS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnYmFvLWRyb3Bkb3duLW1lbnUtc2VjdGlvbiwgW2Jhby1kcm9wZG93bi1tZW51LXNlY3Rpb25dJyxcbiAgaG9zdDogeyBjbGFzczogJ2Jhby1kcm9wZG93bi1tZW51LXNlY3Rpb24nIH1cbn0pXG5leHBvcnQgY2xhc3MgQmFvRHJvcGRvd25NZW51U2VjdGlvbiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICApIHt9XG5cbiAgZ2V0IG5hdGl2ZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzKTtcbiAgICBjb25zdCB0ZXh0SW5kZXggPSBjaGlsZHJlbi5maW5kSW5kZXgoXG4gICAgICAoYzogQ2hpbGROb2RlKSA9PiBjLm5vZGVOYW1lID09PSAnI3RleHQnXG4gICAgKTtcbiAgICBpZiAodGV4dEluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuaW5zZXJ0VGl0bGUoY2hpbGRyZW4sIHRleHRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnRUaXRsZShjaGlsZHJlbjogQ2hpbGROb2RlW10sIHR4dElkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdGl0bGVFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdoNScpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICB0aXRsZUVsZW1lbnQsXG4gICAgICAndGV4dENvbnRlbnQnLFxuICAgICAgY2hpbGRyZW5bdHh0SWR4XS5ub2RlVmFsdWVcbiAgICApO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5uYXRpdmVFbGVtZW50LCBjaGlsZHJlblt0eHRJZHhdKTtcbiAgICBjb25zdCBsaXN0SW5kZXggPSBjaGlsZHJlbi5maW5kSW5kZXgoKGM6IENoaWxkTm9kZSkgPT4gYy5ub2RlTmFtZSA9PT0gJ1VMJyk7XG4gICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUoXG4gICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB0aXRsZUVsZW1lbnQsXG4gICAgICBjaGlsZHJlbltsaXN0SW5kZXhdXG4gICAgKTtcbiAgfVxufVxuLyoqXG4gKiBMYWJlbCBvZiBhIGxpc3QgaXRlbSwgYWRkIGNzcyBjbGFzcyB0byBhcHBseSBwcm9wZXIgc3R5bGluZy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnYmFvLWRyb3Bkb3duLW1lbnUtaXRlbS1sYWJlbCwgW2Jhby1kcm9wZG93bi1tZW51LWl0ZW0tbGFiZWxdJyxcbiAgaG9zdDogeyBjbGFzczogJ2Jhby1kcm9wZG93bi1tZW51LWl0ZW0tbGFiZWwnIH1cbn0pXG5leHBvcnQgY2xhc3MgQmFvRHJvcGRvd25NZW51SXRlbUxhYmVsIHt9XG4vKipcbiAqIERlc2NyaXB0aW9uIG9mIGEgbGlzdCBpdGVtLCBhZGQgY3NzIGNsYXNzIHRvIGFwcGx5IHByb3BlciBzdHlsaW5nLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6XG4gICAgJ2Jhby1kcm9wZG93bi1tZW51LWl0ZW0tZGVzY3JpcHRpb24sIFtiYW8tZHJvcGRvd24tbWVudS1pdGVtLWRlc2NyaXB0aW9uXScsXG4gIGhvc3Q6IHsgY2xhc3M6ICdiYW8tZHJvcGRvd24tbWVudS1pdGVtLWRlc2NyaXB0aW9uJyB9XG59KVxuZXhwb3J0IGNsYXNzIEJhb0Ryb3Bkb3duTWVudUl0ZW1EZXNjcmlwdGlvbiB7fVxuLyoqXG4gKiBEaXZpZGVyIHRvIHNlcGFyYXRlIHNlY3Rpb25zLlxuICovXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6IGA8aHIgLz5gLFxuICBzZWxlY3RvcjogJ2Jhby1kcm9wZG93bi1tZW51LWRpdmlkZXIsIFtiYW8tZHJvcGRvd24tbWVudS1kaXZpZGVyXScsXG4gIGhvc3Q6IHsgY2xhc3M6ICdiYW8tZHJvcGRvd24tbWVudS1kaXZpZGVyJyB9XG59KVxuZXhwb3J0IGNsYXNzIEJhb0Ryb3Bkb3duTWVudURpdmlkZXIgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgKSB7fVxuXG4gIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMubmF0aXZlRWxlbWVudCwgJ3JvbGUnLCAnc2VwYXJhdG9yJyk7XG4gIH1cbn1cbiIsIjxkaXYgI21lbnVDb250ZW50IGNsYXNzPVwiYmFvLWRyb3Bkb3duLW1lbnVcIiB0YWJpbmRleD1cIi0xXCI+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19
@@ -709,23 +709,32 @@ class BaoBreadcrumbComponent {
709
709
  this.renderer = renderer;
710
710
  }
711
711
  ngAfterViewInit() {
712
- this.setLastLinkAttribute();
712
+ this.createLiElement();
713
713
  }
714
714
  onContentChange() {
715
715
  this.setLastLinkAttribute();
716
716
  }
717
+ createLiElement() {
718
+ const children = Array.from(this.staticContainer.nativeElement.children);
719
+ this.setLastLinkAttribute();
720
+ children.forEach(c => {
721
+ const liElement = this.renderer.createElement('li');
722
+ this.renderer.appendChild(liElement, c);
723
+ this.renderer.appendChild(this.staticContainer.nativeElement, liElement);
724
+ });
725
+ }
717
726
  setLastLinkAttribute() {
718
727
  const children = Array.from(this.staticContainer.nativeElement.children);
719
728
  this.renderer.setAttribute(children[children.length - 1], Object.keys(LAST_NODE_ATTRIBUTE)[0], Object.values(LAST_NODE_ATTRIBUTE)[0]);
720
729
  }
721
730
  }
722
731
  BaoBreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: BaoBreadcrumbComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
723
- BaoBreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: BaoBreadcrumbComponent, selector: "bao-breadcrumb", host: { classAttribute: "bao-breadcrumb" }, viewQueries: [{ propertyName: "staticContainer", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<nav\n #container\n class=\"bao-breadcrumb-nav\"\n aria-label=\"Breadcrumb\"\n (cdkObserveContent)=\"onContentChange()\"\n>\n <ng-content></ng-content>\n</nav>\n", styles: [".bao-breadcrumb-nav{display:inline-flex;flex-direction:row;flex-wrap:wrap}.bao-breadcrumb-nav>a{font-weight:700;font-size:.75rem;line-height:1rem;display:inline-flex;align-items:end;text-decoration:none;text-transform:uppercase;color:#637381;margin-bottom:.5rem;margin-right:.25rem;border-bottom:none;background-color:#fff0}.bao-breadcrumb-nav>a:hover{color:#097d6c}.bao-breadcrumb-nav>a:last-child{margin-right:0}.bao-breadcrumb-nav>a:last-child:after{content:none}.bao-breadcrumb-nav>a:after{display:inline-block;content:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ADB5BD' fill-rule='evenodd'><path d='M12.586 12L9.293 8.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L12.586 12z'/></svg>\");height:1rem;width:1rem;margin-left:.25rem;color:#637381;background-color:#fff0;cursor:default;flex-shrink:0}\n"], dependencies: [{ kind: "directive", type: i1$2.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }], encapsulation: i0.ViewEncapsulation.None });
732
+ BaoBreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: BaoBreadcrumbComponent, selector: "bao-breadcrumb", host: { classAttribute: "bao-breadcrumb" }, viewQueries: [{ propertyName: "staticContainer", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<nav class=\"bao-breadcrumb-nav\" aria-label=\"Breadcrumb\">\n <ol #container (cdkObserveContent)=\"onContentChange()\">\n <ng-content></ng-content>\n </ol>\n</nav>\n", styles: [".bao-breadcrumb-nav{display:inline-flex;flex-direction:row;flex-wrap:wrap}.bao-breadcrumb-nav>ol{list-style:none;padding-left:0;margin-bottom:0}.bao-breadcrumb-nav>ol>li{line-height:1rem;display:inline-flex;margin-bottom:0;margin-right:.25rem}.bao-breadcrumb-nav>ol>li:last-child{margin-right:0}.bao-breadcrumb-nav>ol>li:last-child:after{content:none}.bao-breadcrumb-nav>ol>li:after{display:inline-block;content:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ADB5BD' fill-rule='evenodd'><path d='M12.586 12L9.293 8.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L12.586 12z'/></svg>\");height:1rem;width:1rem;margin-left:.25rem;color:#637381;background-color:#fff0;cursor:default;flex-shrink:0}.bao-breadcrumb-nav>ol>li>a{font-weight:700;font-size:.75rem;line-height:1rem;align-items:end;text-decoration:none;text-transform:uppercase;color:#637381;border-bottom:none;background-color:#fff0}.bao-breadcrumb-nav>ol>li>a:hover{color:#097d6c}\n"], dependencies: [{ kind: "directive", type: i1$2.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }], encapsulation: i0.ViewEncapsulation.None });
724
733
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: BaoBreadcrumbComponent, decorators: [{
725
734
  type: Component,
726
735
  args: [{ selector: 'bao-breadcrumb', encapsulation: ViewEncapsulation.None, host: {
727
736
  class: 'bao-breadcrumb'
728
- }, template: "<nav\n #container\n class=\"bao-breadcrumb-nav\"\n aria-label=\"Breadcrumb\"\n (cdkObserveContent)=\"onContentChange()\"\n>\n <ng-content></ng-content>\n</nav>\n", styles: [".bao-breadcrumb-nav{display:inline-flex;flex-direction:row;flex-wrap:wrap}.bao-breadcrumb-nav>a{font-weight:700;font-size:.75rem;line-height:1rem;display:inline-flex;align-items:end;text-decoration:none;text-transform:uppercase;color:#637381;margin-bottom:.5rem;margin-right:.25rem;border-bottom:none;background-color:#fff0}.bao-breadcrumb-nav>a:hover{color:#097d6c}.bao-breadcrumb-nav>a:last-child{margin-right:0}.bao-breadcrumb-nav>a:last-child:after{content:none}.bao-breadcrumb-nav>a:after{display:inline-block;content:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ADB5BD' fill-rule='evenodd'><path d='M12.586 12L9.293 8.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L12.586 12z'/></svg>\");height:1rem;width:1rem;margin-left:.25rem;color:#637381;background-color:#fff0;cursor:default;flex-shrink:0}\n"] }]
737
+ }, template: "<nav class=\"bao-breadcrumb-nav\" aria-label=\"Breadcrumb\">\n <ol #container (cdkObserveContent)=\"onContentChange()\">\n <ng-content></ng-content>\n </ol>\n</nav>\n", styles: [".bao-breadcrumb-nav{display:inline-flex;flex-direction:row;flex-wrap:wrap}.bao-breadcrumb-nav>ol{list-style:none;padding-left:0;margin-bottom:0}.bao-breadcrumb-nav>ol>li{line-height:1rem;display:inline-flex;margin-bottom:0;margin-right:.25rem}.bao-breadcrumb-nav>ol>li:last-child{margin-right:0}.bao-breadcrumb-nav>ol>li:last-child:after{content:none}.bao-breadcrumb-nav>ol>li:after{display:inline-block;content:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ADB5BD' fill-rule='evenodd'><path d='M12.586 12L9.293 8.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L12.586 12z'/></svg>\");height:1rem;width:1rem;margin-left:.25rem;color:#637381;background-color:#fff0;cursor:default;flex-shrink:0}.bao-breadcrumb-nav>ol>li>a{font-weight:700;font-size:.75rem;line-height:1rem;align-items:end;text-decoration:none;text-transform:uppercase;color:#637381;border-bottom:none;background-color:#fff0}.bao-breadcrumb-nav>ol>li>a:hover{color:#097d6c}\n"] }]
729
738
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { staticContainer: [{
730
739
  type: ViewChild,
731
740
  args: ['container', { static: false }]
@@ -4311,11 +4320,18 @@ class BaoDropdownMenuTrigger {
4311
4320
  overlayY: 'bottom'
4312
4321
  },
4313
4322
  {
4314
- // top-right of the overlay is connected to bottom-left of the origin;
4315
- originX: 'start',
4323
+ // top-right of the overlay is connected to bottom-right of the origin;
4324
+ originX: 'end',
4316
4325
  originY: 'bottom',
4317
4326
  overlayX: 'end',
4318
4327
  overlayY: 'top'
4328
+ },
4329
+ {
4330
+ // bottom-right of the overlay is connected to top-right of the origin;
4331
+ originX: 'end',
4332
+ originY: 'top',
4333
+ overlayX: 'end',
4334
+ overlayY: 'bottom'
4319
4335
  }
4320
4336
  ]),
4321
4337
  backdropClass: 'bao-overlay-transparent-backdrop',