@fundamental-ngx/core 0.46.2-rc.20 → 0.46.2-rc.22

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.
@@ -90,18 +90,19 @@ export class TokenComponent {
90
90
  }
91
91
  }
92
92
  /** @hidden */
93
- _setTotalCount(count) {
94
- this.totalCount = count;
93
+ _setTotalCount(count, itemPosition) {
94
+ this._totalCount = count;
95
+ this._itemPosition = itemPosition;
95
96
  this._cdRef.markForCheck();
96
97
  }
97
98
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: TokenComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ContentDensityObserver }], target: i0.ɵɵFactoryTarget.Component }); }
98
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: TokenComponent, isStandalone: true, selector: "fd-token", inputs: { disabled: "disabled", selected: "selected", readOnly: "readOnly" }, outputs: { onCloseClick: "onCloseClick", onRemove: "onRemove", onTokenClick: "onTokenClick", onTokenKeydown: "onTokenKeydown", elementFocused: "elementFocused" }, host: { properties: { "style.max-width.%": "100" } }, providers: [contentDensityObserverProviders()], viewQueries: [{ propertyName: "tokenWrapperElement", first: true, predicate: ["tokenWrapperElement"], descendants: true }, { propertyName: "_content", first: true, predicate: ["content"], descendants: true }, { propertyName: "_viewContainer", first: true, predicate: ["viewContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<span\n #tokenWrapperElement\n class=\"fd-token\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"'coreToken.ariaRoleDescription' | fdTranslate\"\n (click)=\"tokenClickHandler($event)\"\n (keydown)=\"tokenKeydownHandler($event)\"\n [attr.aria-setsize]=\"totalCount\"\n [class.fd-token__disabled]=\"disabled\"\n [class.fd-token--selected]=\"selected\"\n [class.fd-token--readonly]=\"readOnly\"\n [attr.aria-selected]=\"selected\"\n>\n <span class=\"fd-token__text no-text-select\">\n <ng-container #viewContainer></ng-container>\n </span>\n <span\n (click)=\"closeClickHandler($event)\"\n role=\"button\"\n [attr.aria-label]=\"'coreToken.deleteButtonLabel' | fdTranslate\"\n *ngIf=\"!readOnly\"\n class=\"fd-token__close\"\n ></span>\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.31.0\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-token{--fdToken_Background_Color:var(--sapButton_TokenBackground);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--sapButton_TokenBorderColor);--fdToken_Padding_Inline:.3125rem 0;--fdToken_Height:1.625rem;--fdToken_Min_Width:3.625rem;--fdToken_Close_Color:var(--sapContent_IconColor);--fdToken_Close_Padding:.25rem .5rem;--fdToken_Close_Width:1.75rem;-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;align-items:center;background-color:var(--fdToken_Background_Color);border:0;border:var(--fdToken_Border);border-radius:var(--fdToken_Border_Radius);box-sizing:border-box;color:var(--sapTextColor);color:var(--fdToken_Text_Color);cursor:default;display:flex;flex-shrink:0;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdToken_Height);justify-content:center;line-height:var(--sapContent_LineHeight);line-height:1.5rem;margin:0;max-width:100%;min-width:var(--fdToken_Min_Width);padding:0;padding-inline:var(--fdToken_Padding_Inline);text-align:center;text-overflow:clip;white-space:nowrap}.fd-token:after,.fd-token:before{box-sizing:inherit;font-size:inherit}.fd-token__text{max-width:100%;min-width:auto;overflow:hidden;text-overflow:ellipsis;text-shadow:var(--fdToken_Text_Shadow);width:100%}.fd-token__close{-webkit-box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background-color:transparent;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--fdToken_Close_Color);cursor:pointer;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontSmallSize);font-weight:400;forced-color-adjust:none;height:var(--fdToken_Height);justify-content:center;line-height:var(--sapContent_LineHeight);line-height:1.25rem;margin:0;min-width:var(--fdToken_Close_Width);padding:0;padding:var(--fdToken_Close_Padding);width:var(--fdToken_Close_Width)}.fd-token__close:after,.fd-token__close:before{box-sizing:inherit;font-size:inherit}.fd-token__close:before{content:\"\\e03e\";font-family:SAP-icons;text-align:center;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none}.fd-token__close.is-focus,.fd-token__close:focus{box-shadow:none;outline:none;z-index:5}.fd-token.is-hover,.fd-token:hover{--fdToken_Background_Color:var(--fdToken_Background_Color_Hover);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Hover)}.fd-token.is-focus,.fd-token:focus{--fdToken_Border_Radius:var(--fdToken_Focus_Border_Radius);outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token[class*=-compact],.fd-token[class*=-condensed],[class*=-compact] .fd-token:not([class*=-cozy]),[class*=-condensed] .fd-token:not([class*=-cozy]){--fdToken_Padding_Inline:.25rem 0;--fdToken_Height:1.25rem;--fdToken_Close_Padding:.125rem .25rem;--fdToken_Close_Width:1.25rem;line-height:1.125rem;min-width:3rem}.fd-token[class*=-compact].is-focus,.fd-token[class*=-compact]:focus,.fd-token[class*=-condensed].is-focus,.fd-token[class*=-condensed]:focus,[class*=-compact] .fd-token:not([class*=-cozy]).is-focus,[class*=-compact] .fd-token:not([class*=-cozy]):focus,[class*=-condensed] .fd-token:not([class*=-cozy]).is-focus,[class*=-condensed] .fd-token:not([class*=-cozy]):focus{--fdToken_Border_Radius:var(--fdToken_Focus_Border_Radius);outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-offset:var(--fdToken_Outline_Offset_Compact);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token--disabled{cursor:not-allowed}.fd-token--readonly{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Padding_Inline:var(--fdToken_ReadOnly_Padding_Inline);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--readonly[class*=-compact],.fd-token--readonly[class*=-condensed],[class*=-compact] .fd-token--readonly:not([class*=-cozy]),[class*=-condensed] .fd-token--readonly:not([class*=-cozy]){--fdToken_Padding_Inline:.25rem}.fd-token--readonly.is-hover,.fd-token--readonly:hover{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--selected{--fdToken_Text_Color:var(--sapButton_Selected_TextColor);--fdToken_Background_Color:var(--sapButton_Selected_Background);--fdToken_Border:var(--fdToken_Selected_Border);--fdToken_Padding_Inline:.3125rem 0;background:var(--fdToken_Selected_Border_BottomStyle);font-family:var(--fdToken_Selected_Font_Family);position:relative}.fd-token--selected.fd-token--readonly{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Padding_Inline:var(--fdToken_ReadOnly_Padding_Inline);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--selected.fd-token--readonly[class*=-compact],.fd-token--selected.fd-token--readonly[class*=-condensed],[class*=-compact] .fd-token--selected.fd-token--readonly:not([class*=-cozy]),[class*=-condensed] .fd-token--selected.fd-token--readonly:not([class*=-cozy]){--fdToken_Padding_Inline:.25rem}.fd-token--selected.fd-token--readonly.is-hover,.fd-token--selected.fd-token--readonly:hover{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--selected .fd-token__close{--fdToken_Close_Color:var(--sapButton_Selected_TextColor)}.fd-token--selected.is-hover,.fd-token--selected:hover{--fdToken_Border:var(--fdToken_Selected_Border);background-color:var(--sapButton_Selected_Hover_Background)}.fd-token--selected.is-focus,.fd-token--selected:focus{--fdToken_Border_Radius:var(--fdToken_Focus_Border_Radius);--fdToken_Border:var(--fdToken_Selected_Border);outline-color:var(--sapContent_FocusColor);outline-color:var(--fdToken_Border_Color_Selected_Focus);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}fd-token{display:inline-flex}.fd-token__disabled:after{cursor:not-allowed}.no-text-select{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
99
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: TokenComponent, isStandalone: true, selector: "fd-token", inputs: { disabled: "disabled", selected: "selected", readOnly: "readOnly" }, outputs: { onCloseClick: "onCloseClick", onRemove: "onRemove", onTokenClick: "onTokenClick", onTokenKeydown: "onTokenKeydown", elementFocused: "elementFocused" }, host: { properties: { "style.max-width.%": "100" } }, providers: [contentDensityObserverProviders()], viewQueries: [{ propertyName: "tokenWrapperElement", first: true, predicate: ["tokenWrapperElement"], descendants: true }, { propertyName: "_content", first: true, predicate: ["content"], descendants: true }, { propertyName: "_viewContainer", first: true, predicate: ["viewContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<span\n #tokenWrapperElement\n class=\"fd-token\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"'coreToken.ariaRoleDescription' | fdTranslate\"\n (click)=\"tokenClickHandler($event)\"\n (keydown)=\"tokenKeydownHandler($event)\"\n [attr.aria-setsize]=\"_totalCount\"\n [attr.aria-posinset]=\"_itemPosition\"\n [class.fd-token__disabled]=\"disabled\"\n [class.fd-token--selected]=\"selected\"\n [class.fd-token--readonly]=\"readOnly\"\n [attr.aria-selected]=\"selected\"\n>\n <span class=\"fd-token__text no-text-select\">\n <ng-container #viewContainer></ng-container>\n </span>\n <span\n (click)=\"closeClickHandler($event)\"\n role=\"button\"\n [attr.aria-label]=\"'coreToken.deleteButtonLabel' | fdTranslate\"\n *ngIf=\"!readOnly\"\n class=\"fd-token__close\"\n ></span>\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.31.0\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-token{--fdToken_Background_Color:var(--sapButton_TokenBackground);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--sapButton_TokenBorderColor);--fdToken_Padding_Inline:.3125rem 0;--fdToken_Height:1.625rem;--fdToken_Min_Width:3.625rem;--fdToken_Close_Color:var(--sapContent_IconColor);--fdToken_Close_Padding:.25rem .5rem;--fdToken_Close_Width:1.75rem;-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;align-items:center;background-color:var(--fdToken_Background_Color);border:0;border:var(--fdToken_Border);border-radius:var(--fdToken_Border_Radius);box-sizing:border-box;color:var(--sapTextColor);color:var(--fdToken_Text_Color);cursor:default;display:flex;flex-shrink:0;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdToken_Height);justify-content:center;line-height:var(--sapContent_LineHeight);line-height:1.5rem;margin:0;max-width:100%;min-width:var(--fdToken_Min_Width);padding:0;padding-inline:var(--fdToken_Padding_Inline);text-align:center;text-overflow:clip;white-space:nowrap}.fd-token:after,.fd-token:before{box-sizing:inherit;font-size:inherit}.fd-token__text{max-width:100%;min-width:auto;overflow:hidden;text-overflow:ellipsis;text-shadow:var(--fdToken_Text_Shadow);width:100%}.fd-token__close{-webkit-box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background-color:transparent;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--fdToken_Close_Color);cursor:pointer;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontSmallSize);font-weight:400;forced-color-adjust:none;height:var(--fdToken_Height);justify-content:center;line-height:var(--sapContent_LineHeight);line-height:1.25rem;margin:0;min-width:var(--fdToken_Close_Width);padding:0;padding:var(--fdToken_Close_Padding);width:var(--fdToken_Close_Width)}.fd-token__close:after,.fd-token__close:before{box-sizing:inherit;font-size:inherit}.fd-token__close:before{content:\"\\e03e\";font-family:SAP-icons;text-align:center;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none}.fd-token__close.is-focus,.fd-token__close:focus{box-shadow:none;outline:none;z-index:5}.fd-token.is-hover,.fd-token:hover{--fdToken_Background_Color:var(--fdToken_Background_Color_Hover);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Hover)}.fd-token.is-focus,.fd-token:focus{--fdToken_Border_Radius:var(--fdToken_Focus_Border_Radius);outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token[class*=-compact],.fd-token[class*=-condensed],[class*=-compact] .fd-token:not([class*=-cozy]),[class*=-condensed] .fd-token:not([class*=-cozy]){--fdToken_Padding_Inline:.25rem 0;--fdToken_Height:1.25rem;--fdToken_Close_Padding:.125rem .25rem;--fdToken_Close_Width:1.25rem;line-height:1.125rem;min-width:3rem}.fd-token[class*=-compact].is-focus,.fd-token[class*=-compact]:focus,.fd-token[class*=-condensed].is-focus,.fd-token[class*=-condensed]:focus,[class*=-compact] .fd-token:not([class*=-cozy]).is-focus,[class*=-compact] .fd-token:not([class*=-cozy]):focus,[class*=-condensed] .fd-token:not([class*=-cozy]).is-focus,[class*=-condensed] .fd-token:not([class*=-cozy]):focus{--fdToken_Border_Radius:var(--fdToken_Focus_Border_Radius);outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-offset:var(--fdToken_Outline_Offset_Compact);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token--disabled{cursor:not-allowed}.fd-token--readonly{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Padding_Inline:var(--fdToken_ReadOnly_Padding_Inline);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--readonly[class*=-compact],.fd-token--readonly[class*=-condensed],[class*=-compact] .fd-token--readonly:not([class*=-cozy]),[class*=-condensed] .fd-token--readonly:not([class*=-cozy]){--fdToken_Padding_Inline:.25rem}.fd-token--readonly.is-hover,.fd-token--readonly:hover{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--selected{--fdToken_Text_Color:var(--sapButton_Selected_TextColor);--fdToken_Background_Color:var(--sapButton_Selected_Background);--fdToken_Border:var(--fdToken_Selected_Border);--fdToken_Padding_Inline:.3125rem 0;background:var(--fdToken_Selected_Border_BottomStyle);font-family:var(--fdToken_Selected_Font_Family);position:relative}.fd-token--selected.fd-token--readonly{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Padding_Inline:var(--fdToken_ReadOnly_Padding_Inline);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--selected.fd-token--readonly[class*=-compact],.fd-token--selected.fd-token--readonly[class*=-condensed],[class*=-compact] .fd-token--selected.fd-token--readonly:not([class*=-cozy]),[class*=-condensed] .fd-token--selected.fd-token--readonly:not([class*=-cozy]){--fdToken_Padding_Inline:.25rem}.fd-token--selected.fd-token--readonly.is-hover,.fd-token--selected.fd-token--readonly:hover{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--selected .fd-token__close{--fdToken_Close_Color:var(--sapButton_Selected_TextColor)}.fd-token--selected.is-hover,.fd-token--selected:hover{--fdToken_Border:var(--fdToken_Selected_Border);background-color:var(--sapButton_Selected_Hover_Background)}.fd-token--selected.is-focus,.fd-token--selected:focus{--fdToken_Border_Radius:var(--fdToken_Focus_Border_Radius);--fdToken_Border:var(--fdToken_Selected_Border);outline-color:var(--sapContent_FocusColor);outline-color:var(--fdToken_Border_Color_Selected_Focus);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}fd-token{display:inline-flex}.fd-token__disabled:after{cursor:not-allowed}.no-text-select{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
99
100
  }
100
101
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: TokenComponent, decorators: [{
101
102
  type: Component,
102
103
  args: [{ selector: 'fd-token', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [contentDensityObserverProviders()], host: {
103
104
  '[style.max-width.%]': '100'
104
- }, standalone: true, imports: [NgIf, FdTranslatePipe], template: "<span\n #tokenWrapperElement\n class=\"fd-token\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"'coreToken.ariaRoleDescription' | fdTranslate\"\n (click)=\"tokenClickHandler($event)\"\n (keydown)=\"tokenKeydownHandler($event)\"\n [attr.aria-setsize]=\"totalCount\"\n [class.fd-token__disabled]=\"disabled\"\n [class.fd-token--selected]=\"selected\"\n [class.fd-token--readonly]=\"readOnly\"\n [attr.aria-selected]=\"selected\"\n>\n <span class=\"fd-token__text no-text-select\">\n <ng-container #viewContainer></ng-container>\n </span>\n <span\n (click)=\"closeClickHandler($event)\"\n role=\"button\"\n [attr.aria-label]=\"'coreToken.deleteButtonLabel' | fdTranslate\"\n *ngIf=\"!readOnly\"\n class=\"fd-token__close\"\n ></span>\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.31.0\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-token{--fdToken_Background_Color:var(--sapButton_TokenBackground);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--sapButton_TokenBorderColor);--fdToken_Padding_Inline:.3125rem 0;--fdToken_Height:1.625rem;--fdToken_Min_Width:3.625rem;--fdToken_Close_Color:var(--sapContent_IconColor);--fdToken_Close_Padding:.25rem .5rem;--fdToken_Close_Width:1.75rem;-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;align-items:center;background-color:var(--fdToken_Background_Color);border:0;border:var(--fdToken_Border);border-radius:var(--fdToken_Border_Radius);box-sizing:border-box;color:var(--sapTextColor);color:var(--fdToken_Text_Color);cursor:default;display:flex;flex-shrink:0;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdToken_Height);justify-content:center;line-height:var(--sapContent_LineHeight);line-height:1.5rem;margin:0;max-width:100%;min-width:var(--fdToken_Min_Width);padding:0;padding-inline:var(--fdToken_Padding_Inline);text-align:center;text-overflow:clip;white-space:nowrap}.fd-token:after,.fd-token:before{box-sizing:inherit;font-size:inherit}.fd-token__text{max-width:100%;min-width:auto;overflow:hidden;text-overflow:ellipsis;text-shadow:var(--fdToken_Text_Shadow);width:100%}.fd-token__close{-webkit-box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background-color:transparent;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--fdToken_Close_Color);cursor:pointer;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontSmallSize);font-weight:400;forced-color-adjust:none;height:var(--fdToken_Height);justify-content:center;line-height:var(--sapContent_LineHeight);line-height:1.25rem;margin:0;min-width:var(--fdToken_Close_Width);padding:0;padding:var(--fdToken_Close_Padding);width:var(--fdToken_Close_Width)}.fd-token__close:after,.fd-token__close:before{box-sizing:inherit;font-size:inherit}.fd-token__close:before{content:\"\\e03e\";font-family:SAP-icons;text-align:center;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none}.fd-token__close.is-focus,.fd-token__close:focus{box-shadow:none;outline:none;z-index:5}.fd-token.is-hover,.fd-token:hover{--fdToken_Background_Color:var(--fdToken_Background_Color_Hover);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Hover)}.fd-token.is-focus,.fd-token:focus{--fdToken_Border_Radius:var(--fdToken_Focus_Border_Radius);outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token[class*=-compact],.fd-token[class*=-condensed],[class*=-compact] .fd-token:not([class*=-cozy]),[class*=-condensed] .fd-token:not([class*=-cozy]){--fdToken_Padding_Inline:.25rem 0;--fdToken_Height:1.25rem;--fdToken_Close_Padding:.125rem .25rem;--fdToken_Close_Width:1.25rem;line-height:1.125rem;min-width:3rem}.fd-token[class*=-compact].is-focus,.fd-token[class*=-compact]:focus,.fd-token[class*=-condensed].is-focus,.fd-token[class*=-condensed]:focus,[class*=-compact] .fd-token:not([class*=-cozy]).is-focus,[class*=-compact] .fd-token:not([class*=-cozy]):focus,[class*=-condensed] .fd-token:not([class*=-cozy]).is-focus,[class*=-condensed] .fd-token:not([class*=-cozy]):focus{--fdToken_Border_Radius:var(--fdToken_Focus_Border_Radius);outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-offset:var(--fdToken_Outline_Offset_Compact);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token--disabled{cursor:not-allowed}.fd-token--readonly{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Padding_Inline:var(--fdToken_ReadOnly_Padding_Inline);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--readonly[class*=-compact],.fd-token--readonly[class*=-condensed],[class*=-compact] .fd-token--readonly:not([class*=-cozy]),[class*=-condensed] .fd-token--readonly:not([class*=-cozy]){--fdToken_Padding_Inline:.25rem}.fd-token--readonly.is-hover,.fd-token--readonly:hover{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--selected{--fdToken_Text_Color:var(--sapButton_Selected_TextColor);--fdToken_Background_Color:var(--sapButton_Selected_Background);--fdToken_Border:var(--fdToken_Selected_Border);--fdToken_Padding_Inline:.3125rem 0;background:var(--fdToken_Selected_Border_BottomStyle);font-family:var(--fdToken_Selected_Font_Family);position:relative}.fd-token--selected.fd-token--readonly{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Padding_Inline:var(--fdToken_ReadOnly_Padding_Inline);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--selected.fd-token--readonly[class*=-compact],.fd-token--selected.fd-token--readonly[class*=-condensed],[class*=-compact] .fd-token--selected.fd-token--readonly:not([class*=-cozy]),[class*=-condensed] .fd-token--selected.fd-token--readonly:not([class*=-cozy]){--fdToken_Padding_Inline:.25rem}.fd-token--selected.fd-token--readonly.is-hover,.fd-token--selected.fd-token--readonly:hover{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--selected .fd-token__close{--fdToken_Close_Color:var(--sapButton_Selected_TextColor)}.fd-token--selected.is-hover,.fd-token--selected:hover{--fdToken_Border:var(--fdToken_Selected_Border);background-color:var(--sapButton_Selected_Hover_Background)}.fd-token--selected.is-focus,.fd-token--selected:focus{--fdToken_Border_Radius:var(--fdToken_Focus_Border_Radius);--fdToken_Border:var(--fdToken_Selected_Border);outline-color:var(--sapContent_FocusColor);outline-color:var(--fdToken_Border_Color_Selected_Focus);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}fd-token{display:inline-flex}.fd-token__disabled:after{cursor:not-allowed}.no-text-select{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}\n"] }]
105
+ }, standalone: true, imports: [NgIf, FdTranslatePipe], template: "<span\n #tokenWrapperElement\n class=\"fd-token\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"'coreToken.ariaRoleDescription' | fdTranslate\"\n (click)=\"tokenClickHandler($event)\"\n (keydown)=\"tokenKeydownHandler($event)\"\n [attr.aria-setsize]=\"_totalCount\"\n [attr.aria-posinset]=\"_itemPosition\"\n [class.fd-token__disabled]=\"disabled\"\n [class.fd-token--selected]=\"selected\"\n [class.fd-token--readonly]=\"readOnly\"\n [attr.aria-selected]=\"selected\"\n>\n <span class=\"fd-token__text no-text-select\">\n <ng-container #viewContainer></ng-container>\n </span>\n <span\n (click)=\"closeClickHandler($event)\"\n role=\"button\"\n [attr.aria-label]=\"'coreToken.deleteButtonLabel' | fdTranslate\"\n *ngIf=\"!readOnly\"\n class=\"fd-token__close\"\n ></span>\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.31.0\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-token{--fdToken_Background_Color:var(--sapButton_TokenBackground);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--sapButton_TokenBorderColor);--fdToken_Padding_Inline:.3125rem 0;--fdToken_Height:1.625rem;--fdToken_Min_Width:3.625rem;--fdToken_Close_Color:var(--sapContent_IconColor);--fdToken_Close_Padding:.25rem .5rem;--fdToken_Close_Width:1.75rem;-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;align-items:center;background-color:var(--fdToken_Background_Color);border:0;border:var(--fdToken_Border);border-radius:var(--fdToken_Border_Radius);box-sizing:border-box;color:var(--sapTextColor);color:var(--fdToken_Text_Color);cursor:default;display:flex;flex-shrink:0;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdToken_Height);justify-content:center;line-height:var(--sapContent_LineHeight);line-height:1.5rem;margin:0;max-width:100%;min-width:var(--fdToken_Min_Width);padding:0;padding-inline:var(--fdToken_Padding_Inline);text-align:center;text-overflow:clip;white-space:nowrap}.fd-token:after,.fd-token:before{box-sizing:inherit;font-size:inherit}.fd-token__text{max-width:100%;min-width:auto;overflow:hidden;text-overflow:ellipsis;text-shadow:var(--fdToken_Text_Shadow);width:100%}.fd-token__close{-webkit-box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background-color:transparent;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--fdToken_Close_Color);cursor:pointer;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontSmallSize);font-weight:400;forced-color-adjust:none;height:var(--fdToken_Height);justify-content:center;line-height:var(--sapContent_LineHeight);line-height:1.25rem;margin:0;min-width:var(--fdToken_Close_Width);padding:0;padding:var(--fdToken_Close_Padding);width:var(--fdToken_Close_Width)}.fd-token__close:after,.fd-token__close:before{box-sizing:inherit;font-size:inherit}.fd-token__close:before{content:\"\\e03e\";font-family:SAP-icons;text-align:center;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none}.fd-token__close.is-focus,.fd-token__close:focus{box-shadow:none;outline:none;z-index:5}.fd-token.is-hover,.fd-token:hover{--fdToken_Background_Color:var(--fdToken_Background_Color_Hover);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Hover)}.fd-token.is-focus,.fd-token:focus{--fdToken_Border_Radius:var(--fdToken_Focus_Border_Radius);outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token[class*=-compact],.fd-token[class*=-condensed],[class*=-compact] .fd-token:not([class*=-cozy]),[class*=-condensed] .fd-token:not([class*=-cozy]){--fdToken_Padding_Inline:.25rem 0;--fdToken_Height:1.25rem;--fdToken_Close_Padding:.125rem .25rem;--fdToken_Close_Width:1.25rem;line-height:1.125rem;min-width:3rem}.fd-token[class*=-compact].is-focus,.fd-token[class*=-compact]:focus,.fd-token[class*=-condensed].is-focus,.fd-token[class*=-condensed]:focus,[class*=-compact] .fd-token:not([class*=-cozy]).is-focus,[class*=-compact] .fd-token:not([class*=-cozy]):focus,[class*=-condensed] .fd-token:not([class*=-cozy]).is-focus,[class*=-condensed] .fd-token:not([class*=-cozy]):focus{--fdToken_Border_Radius:var(--fdToken_Focus_Border_Radius);outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-offset:var(--fdToken_Outline_Offset_Compact);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token--disabled{cursor:not-allowed}.fd-token--readonly{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Padding_Inline:var(--fdToken_ReadOnly_Padding_Inline);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--readonly[class*=-compact],.fd-token--readonly[class*=-condensed],[class*=-compact] .fd-token--readonly:not([class*=-cozy]),[class*=-condensed] .fd-token--readonly:not([class*=-cozy]){--fdToken_Padding_Inline:.25rem}.fd-token--readonly.is-hover,.fd-token--readonly:hover{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--selected{--fdToken_Text_Color:var(--sapButton_Selected_TextColor);--fdToken_Background_Color:var(--sapButton_Selected_Background);--fdToken_Border:var(--fdToken_Selected_Border);--fdToken_Padding_Inline:.3125rem 0;background:var(--fdToken_Selected_Border_BottomStyle);font-family:var(--fdToken_Selected_Font_Family);position:relative}.fd-token--selected.fd-token--readonly{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Padding_Inline:var(--fdToken_ReadOnly_Padding_Inline);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--selected.fd-token--readonly[class*=-compact],.fd-token--selected.fd-token--readonly[class*=-condensed],[class*=-compact] .fd-token--selected.fd-token--readonly:not([class*=-cozy]),[class*=-condensed] .fd-token--selected.fd-token--readonly:not([class*=-cozy]){--fdToken_Padding_Inline:.25rem}.fd-token--selected.fd-token--readonly.is-hover,.fd-token--selected.fd-token--readonly:hover{--fdToken_Text_Color:var(--sapContent_LabelColor);--fdToken_Border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);background-color:var(--fdToken_Background_Color_Read_Only)}.fd-token--selected .fd-token__close{--fdToken_Close_Color:var(--sapButton_Selected_TextColor)}.fd-token--selected.is-hover,.fd-token--selected:hover{--fdToken_Border:var(--fdToken_Selected_Border);background-color:var(--sapButton_Selected_Hover_Background)}.fd-token--selected.is-focus,.fd-token--selected:focus{--fdToken_Border_Radius:var(--fdToken_Focus_Border_Radius);--fdToken_Border:var(--fdToken_Selected_Border);outline-color:var(--sapContent_FocusColor);outline-color:var(--fdToken_Border_Color_Selected_Focus);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}fd-token{display:inline-flex}.fd-token__disabled:after{cursor:not-allowed}.no-text-select{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}\n"] }]
105
106
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ContentDensityObserver }]; }, propDecorators: { disabled: [{
106
107
  type: Input
107
108
  }], tokenWrapperElement: [{
@@ -132,4 +133,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
132
133
  }], elementFocused: [{
133
134
  type: Output
134
135
  }] } });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdG9rZW4vdG9rZW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdG9rZW4vdG9rZW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFFL0M7OztHQUdHO0FBY0gsTUFBTSxPQUFPLGNBQWM7SUFpQnZCLHFDQUFxQztJQUNyQyxJQUNJLFFBQVEsQ0FBQyxHQUFZO1FBQ3JCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUM5QjtRQUNELElBQUksQ0FBQyxT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QUNkLGNBQWMsQ0FBQyxLQUFhO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0IsQ0FBQzs4R0EvSFEsY0FBYztrR0FBZCxjQUFjLDhWQVBaLENBQUMsK0JBQStCLEVBQUUsQ0FBQyx5VEFxQlYsZ0JBQWdCLDZCQ3hEeEQsKzVCQTZCQSw4d05EV2MsSUFBSSx3RkFBRSxlQUFlOzsyRkFFdEIsY0FBYztrQkFiMUIsU0FBUzsrQkFDSSxVQUFVLGlCQUdMLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQywrQkFBK0IsRUFBRSxDQUFDLFFBQ3hDO3dCQUNGLHFCQUFxQixFQUFFLEtBQUs7cUJBQy9CLGNBQ1csSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQztzS0FLaEMsUUFBUTtzQkFEUCxLQUFLO2dCQUtOLG1CQUFtQjtzQkFEbEIsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBS3ZCLFFBQVE7c0JBRGhCLFNBQVM7dUJBQUMsU0FBUztnQkFLWCxjQUFjO3NCQUR0QixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFLbEQsUUFBUTtzQkFEWCxLQUFLO2dCQWFOLFFBQVE7c0JBRFAsS0FBSztnQkFNRyxZQUFZO3NCQUZwQixNQUFNO2dCQU9FLFFBQVE7c0JBRmhCLE1BQU07O1FBTVAsK0RBQStEO1FBQy9ELFlBQVk7c0JBRlgsTUFBTTs7UUFNUCwrREFBK0Q7UUFDL0QsY0FBYztzQkFGYixNQUFNO2dCQVFQLGNBQWM7c0JBRGIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVOVEVSLCBTUEFDRSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEtleVV0aWwgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGZFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBBIHRva2VuIGlzIHVzZWQgdG8gcmVwcmVzZW50IGNvbnRleHR1YWxpemluZyBpbmZvcm1hdGlvbi5cbiAqIFRoZXkgY2FuIGJlIHVzZWZ1bCB0byBzaG93IGFwcGxpZWQgZmlsdGVycywgc2VsZWN0ZWQgdmFsdWVzIGZvciBmb3JtIGZpZWxkcyBvciBvYmplY3QgbWV0YWRhdGEuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtdG9rZW4nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90b2tlbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdG9rZW4uY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKV0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW3N0eWxlLm1heC13aWR0aC4lXSc6ICcxMDAnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBGZFRyYW5zbGF0ZVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIFRva2VuQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKiogV2hldGhlciB0aGUgdG9rZW4gaXMgZGlzYWJsZWQuICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0b2tlbldyYXBwZXJFbGVtZW50JylcbiAgICB0b2tlbldyYXBwZXJFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdjb250ZW50JylcbiAgICByZWFkb25seSBfY29udGVudDogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndmlld0NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICAgIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHRva2VuIGlzIHNlbGVjdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWQgIT09IHZhbCkge1xuICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB2YWw7XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgfVxuICAgIC8qKiBXaGV0aGVyIHRoZSB0b2tlbiBpcyByZWFkLW9ubHkuICovXG4gICAgQElucHV0KClcbiAgICByZWFkT25seSA9IGZhbHNlO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgKngqIGljb24gaXMgY2xpY2tlZC4gU3BlY2lmaWNhbGx5LCBhbnkgcHNldWRvLWVsZW1lbnQuICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgcmVhZG9ubHkgb25DbG9zZUNsaWNrOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRva2VuIHNob3VsZCBiZSByZW1vdmVkICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgcmVhZG9ubHkgb25SZW1vdmU6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSB0b2tlbiBpcyBjbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIG9uVG9rZW5DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSB0aGVyZSdzIGEga2V5ZG93biByZWdpc3RlcmVkIG9uIHRoZSB0b2tlbi4gKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBvblRva2VuS2V5ZG93biA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0b2tlbiBlbGVtZW50IHJlY2VpdmVkIG9yIGxvc3QgZm9jdXMuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZWxlbWVudEZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRvdGFsQ291bnQ6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHJlYWRvbmx5IF9jb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyXG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX2NvbnRlbnQpO1xuXG4gICAgICAgIGZyb21FdmVudCh0aGlzLnRva2VuV3JhcHBlckVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2ZvY3VzJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudEZvY3VzZWQuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudCh0aGlzLnRva2VuV3JhcHBlckVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2JsdXInKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Rm9jdXNlZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsb3NlQ2xpY2tIYW5kbGVyKGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNsb3NlQ2xpY2suZW1pdChldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRva2VuQ2xpY2tIYW5kbGVyKGV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub2tlbkNsaWNrLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdG9rZW5LZXlkb3duSGFuZGxlcihldmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG9rZW5LZXlkb3duLmVtaXQoZXZlbnQpO1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKSkge1xuICAgICAgICAgICAgdGhpcy5vblRva2VuQ2xpY2suZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXRUb3RhbENvdW50KGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gY291bnQ7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbn1cbiIsIjxzcGFuXG4gICAgI3Rva2VuV3JhcHBlckVsZW1lbnRcbiAgICBjbGFzcz1cImZkLXRva2VuXCJcbiAgICByb2xlPVwib3B0aW9uXCJcbiAgICB0YWJpbmRleD1cIjBcIlxuICAgIFthdHRyLmFyaWEtcm9sZWRlc2NyaXB0aW9uXT1cIidjb3JlVG9rZW4uYXJpYVJvbGVEZXNjcmlwdGlvbicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cInRva2VuQ2xpY2tIYW5kbGVyKCRldmVudClcIlxuICAgIChrZXlkb3duKT1cInRva2VuS2V5ZG93bkhhbmRsZXIoJGV2ZW50KVwiXG4gICAgW2F0dHIuYXJpYS1zZXRzaXplXT1cInRvdGFsQ291bnRcIlxuICAgIFtjbGFzcy5mZC10b2tlbl9fZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtjbGFzcy5mZC10b2tlbi0tc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICAgIFtjbGFzcy5mZC10b2tlbi0tcmVhZG9ubHldPVwicmVhZE9ubHlcIlxuICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuPlxuICAgIDxzcGFuIGNsYXNzPVwiZmQtdG9rZW5fX3RleHQgbm8tdGV4dC1zZWxlY3RcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjdmlld0NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cImNsb3NlQ2xpY2tIYW5kbGVyKCRldmVudClcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInY29yZVRva2VuLmRlbGV0ZUJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgKm5nSWY9XCIhcmVhZE9ubHlcIlxuICAgICAgICBjbGFzcz1cImZkLXRva2VuX19jbG9zZVwiXG4gICAgPjwvc3Bhbj5cbjwvc3Bhbj5cblxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdG9rZW4vdG9rZW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdG9rZW4vdG9rZW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFFL0M7OztHQUdHO0FBY0gsTUFBTSxPQUFPLGNBQWM7SUFpQnZCLHFDQUFxQztJQUNyQyxJQUNJLFFBQVEsQ0FBQyxHQUFZO1FBQ3JCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUM5QjtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQThDRCxjQUFjO0lBQ2QsWUFDVyxVQUFzQixFQUNyQixNQUF5QixFQUN4Qix1QkFBK0M7UUFGakQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN4Qiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXdCO1FBN0U1RCxxQ0FBcUM7UUFFckMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQTBCakIsc0NBQXNDO1FBRXRDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsOEVBQThFO1FBR3JFLGlCQUFZLEdBQTZCLElBQUksWUFBWSxFQUFjLENBQUM7UUFFakYsMkNBQTJDO1FBR2xDLGFBQVEsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVqRSx1Q0FBdUM7UUFHdkMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBRTlDLGdFQUFnRTtRQUdoRSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRW5EOztXQUVHO1FBRUgsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBUTdDLGNBQWM7UUFDTixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTFCLGNBQWM7UUFDTixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUMsY0FBYztRQUNHLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBTy9DLENBQUM7SUFFSixjQUFjO0lBQ2QsZUFBZTtRQUNYLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXRELFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQzthQUNyRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVQLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQzthQUNwRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxjQUFjO0lBQ2QsV0FBVztRQUNQLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELGNBQWM7SUFDZCxpQkFBaUIsQ0FBQyxLQUFNO1FBQ3BCLElBQUksS0FBSyxFQUFFO1lBQ1AsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNqQztTQUNKO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxpQkFBaUIsQ0FBQyxLQUFLO1FBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxjQUFjO0lBQ2QsbUJBQW1CLENBQUMsS0FBSztRQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLGNBQWMsQ0FBQyxLQUFhLEVBQUUsWUFBb0I7UUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMvQixDQUFDOzhHQW5JUSxjQUFjO2tHQUFkLGNBQWMsOFZBUFosQ0FBQywrQkFBK0IsRUFBRSxDQUFDLHlUQXFCVixnQkFBZ0IsNkJDeER4RCw0OEJBOEJBLDh3TkRVYyxJQUFJLHdGQUFFLGVBQWU7OzJGQUV0QixjQUFjO2tCQWIxQixTQUFTOytCQUNJLFVBQVUsaUJBR0wsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLCtCQUErQixFQUFFLENBQUMsUUFDeEM7d0JBQ0YscUJBQXFCLEVBQUUsS0FBSztxQkFDL0IsY0FDVyxJQUFJLFdBQ1AsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDO3NLQUtoQyxRQUFRO3NCQURQLEtBQUs7Z0JBS04sbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQjtnQkFLdkIsUUFBUTtzQkFEaEIsU0FBUzt1QkFBQyxTQUFTO2dCQUtYLGNBQWM7c0JBRHRCLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUtsRCxRQUFRO3NCQURYLEtBQUs7Z0JBYU4sUUFBUTtzQkFEUCxLQUFLO2dCQU1HLFlBQVk7c0JBRnBCLE1BQU07Z0JBT0UsUUFBUTtzQkFGaEIsTUFBTTs7UUFNUCwrREFBK0Q7UUFDL0QsWUFBWTtzQkFGWCxNQUFNOztRQU1QLCtEQUErRDtRQUMvRCxjQUFjO3NCQUZiLE1BQU07Z0JBUVAsY0FBYztzQkFEYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5URVIsIFNQQUNFIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgS2V5VXRpbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEEgdG9rZW4gaXMgdXNlZCB0byByZXByZXNlbnQgY29udGV4dHVhbGl6aW5nIGluZm9ybWF0aW9uLlxuICogVGhleSBjYW4gYmUgdXNlZnVsIHRvIHNob3cgYXBwbGllZCBmaWx0ZXJzLCBzZWxlY3RlZCB2YWx1ZXMgZm9yIGZvcm0gZmllbGRzIG9yIG9iamVjdCBtZXRhZGF0YS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC10b2tlbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Rva2VuLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90b2tlbi5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbc3R5bGUubWF4LXdpZHRoLiVdJzogJzEwMCdcbiAgICB9LFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIEZkVHJhbnNsYXRlUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgVG9rZW5Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBXaGV0aGVyIHRoZSB0b2tlbiBpcyBkaXNhYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3Rva2VuV3JhcHBlckVsZW1lbnQnKVxuICAgIHRva2VuV3JhcHBlckVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRlbnQnKVxuICAgIHJlYWRvbmx5IF9jb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd2aWV3Q29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gICAgcmVhZG9ubHkgX3ZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICAvKiogV2hldGhlciB0aGUgdG9rZW4gaXMgc2VsZWN0ZWQuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0ZWQodmFsOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZCAhPT0gdmFsKSB7XG4gICAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHZhbDtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgICB9XG4gICAgLyoqIFdoZXRoZXIgdGhlIHRva2VuIGlzIHJlYWQtb25seS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSAqeCogaWNvbiBpcyBjbGlja2VkLiBTcGVjaWZpY2FsbHksIGFueSBwc2V1ZG8tZWxlbWVudC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICByZWFkb25seSBvbkNsb3NlQ2xpY2s6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdG9rZW4gc2hvdWxkIGJlIHJlbW92ZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICByZWFkb25seSBvblJlbW92ZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhIHRva2VuIGlzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgb25Ub2tlbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhIHRoZXJlJ3MgYSBrZXlkb3duIHJlZ2lzdGVyZWQgb24gdGhlIHRva2VuLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIG9uVG9rZW5LZXlkb3duID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRva2VuIGVsZW1lbnQgcmVjZWl2ZWQgb3IgbG9zdCBmb2N1cy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBlbGVtZW50Rm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RvdGFsQ291bnQ6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2l0ZW1Qb3NpdGlvbjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcmVhZG9ubHkgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXJcbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fY29udGVudCk7XG5cbiAgICAgICAgZnJvbUV2ZW50KHRoaXMudG9rZW5XcmFwcGVyRWxlbWVudC5uYXRpdmVFbGVtZW50LCAnZm9jdXMnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Rm9jdXNlZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50KHRoaXMudG9rZW5XcmFwcGVyRWxlbWVudC5uYXRpdmVFbGVtZW50LCAnYmx1cicpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRGb2N1c2VkLmVtaXQoZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2xvc2VDbGlja0hhbmRsZXIoZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2VDbGljay5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdG9rZW5DbGlja0hhbmRsZXIoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRva2VuQ2xpY2suZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0b2tlbktleWRvd25IYW5kbGVyKGV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub2tlbktleWRvd24uZW1pdChldmVudCk7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG9rZW5DbGljay5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldFRvdGFsQ291bnQoY291bnQ6IG51bWJlciwgaXRlbVBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdG90YWxDb3VudCA9IGNvdW50O1xuICAgICAgICB0aGlzLl9pdGVtUG9zaXRpb24gPSBpdGVtUG9zaXRpb247XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbn1cbiIsIjxzcGFuXG4gICAgI3Rva2VuV3JhcHBlckVsZW1lbnRcbiAgICBjbGFzcz1cImZkLXRva2VuXCJcbiAgICByb2xlPVwib3B0aW9uXCJcbiAgICB0YWJpbmRleD1cIjBcIlxuICAgIFthdHRyLmFyaWEtcm9sZWRlc2NyaXB0aW9uXT1cIidjb3JlVG9rZW4uYXJpYVJvbGVEZXNjcmlwdGlvbicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cInRva2VuQ2xpY2tIYW5kbGVyKCRldmVudClcIlxuICAgIChrZXlkb3duKT1cInRva2VuS2V5ZG93bkhhbmRsZXIoJGV2ZW50KVwiXG4gICAgW2F0dHIuYXJpYS1zZXRzaXplXT1cIl90b3RhbENvdW50XCJcbiAgICBbYXR0ci5hcmlhLXBvc2luc2V0XT1cIl9pdGVtUG9zaXRpb25cIlxuICAgIFtjbGFzcy5mZC10b2tlbl9fZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtjbGFzcy5mZC10b2tlbi0tc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICAgIFtjbGFzcy5mZC10b2tlbi0tcmVhZG9ubHldPVwicmVhZE9ubHlcIlxuICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuPlxuICAgIDxzcGFuIGNsYXNzPVwiZmQtdG9rZW5fX3RleHQgbm8tdGV4dC1zZWxlY3RcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjdmlld0NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cImNsb3NlQ2xpY2tIYW5kbGVyKCRldmVudClcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInY29yZVRva2VuLmRlbGV0ZUJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgKm5nSWY9XCIhcmVhZE9ubHlcIlxuICAgICAgICBjbGFzcz1cImZkLXRva2VuX19jbG9zZVwiXG4gICAgPjwvc3Bhbj5cbjwvc3Bhbj5cblxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -458,7 +458,7 @@ export class TokenizerComponent {
458
458
  }
459
459
  this.handleTokenClickSubscriptions();
460
460
  this.previousTokenCount = this.tokenList.length;
461
- this.tokenList.forEach((token) => token._setTotalCount(this.tokenList.length));
461
+ this.tokenList.forEach((token, index) => token._setTotalCount(this.tokenList.length, index + 1));
462
462
  this._cdRef.markForCheck();
463
463
  }
464
464
  /** @hidden */
@@ -718,4 +718,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
718
718
  type: HostListener,
719
719
  args: ['keydown', ['$event']]
720
720
  }] } });
721
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3Rva2VuL3Rva2VuaXplci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90b2tlbi90b2tlbml6ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCxDQUFDLEVBQ0QsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsS0FBSyxFQUNMLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRixPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFSCxPQUFPLEVBRVAsVUFBVSxFQUNWLGFBQWEsRUFDYixnQkFBZ0IsRUFDbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxF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a0I7c0JBRGpCLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtHLGdCQUFnQjtzQkFEeEIsTUFBTTtnQkF5SlAsc0JBQXNCLE1BZ0R0QixPQUFPO3NCQUROLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBLFxuICAgIEJBQ0tTUEFDRSxcbiAgICBERUxFVEUsXG4gICAgRE9XTl9BUlJPVyxcbiAgICBFTlRFUixcbiAgICBMRUZUX0FSUk9XLFxuICAgIFJJR0hUX0FSUk9XLFxuICAgIFNQQUNFLFxuICAgIFVQX0FSUk9XXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIERPQ1VNRU5ULCBOZ0ZvciwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ3NzQ2xhc3NCdWlsZGVyLFxuICAgIEtleVV0aWwsXG4gICAgTnVsbGFibGUsXG4gICAgUnRsU2VydmljZSxcbiAgICBhcHBseUNzc0NsYXNzLFxuICAgIHJlc2l6ZU9ic2VydmFibGVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCB7IElucHV0R3JvdXBNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaW5wdXQtZ3JvdXAnO1xuaW1wb3J0IHsgTGlzdE1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9saXN0JztcbmltcG9ydCB7IFBvcG92ZXJCb2R5Q29tcG9uZW50LCBQb3BvdmVyQ29tcG9uZW50LCBQb3BvdmVyQ29udHJvbENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50LCBtZXJnZSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUb2tlbkNvbXBvbmVudCB9IGZyb20gJy4vdG9rZW4uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC10b2tlbml6ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90b2tlbml6ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3Rva2VuaXplci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgSW5wdXRHcm91cE1vZHVsZSxcbiAgICAgICAgQnV0dG9uTW9kdWxlLFxuICAgICAgICBQb3BvdmVyQ29tcG9uZW50LFxuICAgICAgICBQb3BvdmVyQ29udHJvbENvbXBvbmVudCxcbiAgICAgICAgUG9wb3ZlckJvZHlDb21wb25lbnQsXG4gICAgICAgIExpc3RNb2R1bGUsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVG9rZW5pemVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDc3NDbGFzc0J1aWxkZXIsIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICAvKiogdXNlcidzIGN1c3RvbSBjbGFzc2VzICovXG4gICAgQElucHV0KClcbiAgICBjbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIERpc2FibGVzIHBvc3NpYmlsaXR5IHRvIHJlbW92ZSB0b2tlbnMgYnkga2V5Ym9hcmQgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVLZXlib2FyZERlbGV0aW9uID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBUb2tlbkNvbXBvbmVudCkpXG4gICAgdG9rZW5MaXN0OiBRdWVyeUxpc3Q8VG9rZW5Db21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gRm9ybUNvbnRyb2xDb21wb25lbnQpLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBpbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndG9rZW5pemVySW5uZXInKVxuICAgIHRva2VuaXplcklubmVyRWw6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdtb3JlRWxlbWVudFNwYW4nKVxuICAgIG1vcmVFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cEFkZE9uJykgc2V0IGNvbnRlbnQoY29udGVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgICAgICAgdGhpcy5pbnB1dEdyb3VwQWRkb25FbCA9IGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKCd2aWV3Q29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gICAgcmVhZG9ubHkgX3ZpZXdDb250YWluZXI6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9oaWRkZW5Ub2tlbnMoKTogVG9rZW5Db21wb25lbnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogT2JzZXJ2YWJsZSBzdGF0ZSBvZiB0aGUgY29tcGFjdCBtb2RlLlxuICAgICAqL1xuICAgIGdldCBfY29tcGFjdCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50RGVuc2l0eU9ic2VydmVyLmlzQ29tcGFjdCQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENvbXBvbmVudCBpcyBpbiBjb21wYWN0IG1vZGUsIGRldGVybWluZWQgYnkgdGhlIGNvbnN1bWVyXG4gICAgICovXG4gICAgZ2V0IF9jb21wYWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvbXBhY3Q7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBpbnB1dEdyb3VwQWRkb25FbDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHVzZSBjb3p5IHZpc3VhbHMgYnV0IGNvbXBhY3QgY29sbGFwc2luZyBiZWhhdmlvci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbXBhY3RDb2xsYXBzZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG9rZW5pemVyIHNob3VsZCBoYXZlIGZha2UgZm9jdXMgaW5kaWNhdG9yLCB3aGVuIGlucHV0IGlzIGZvY3VzZWQgaW5zaWRlKi9cbiAgICBASW5wdXQoKVxuICAgIHRva2VuaXplckZvY3VzYWJsZSA9IHRydWU7XG5cbiAgICAvKiogVGhlIHZhbHVlIGZvciB0aGUgdG9rZW5pemVyIGlucHV0ICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dFZhbHVlOiBzdHJpbmc7XG5cbiAgICAvKiogSWNvbiBvZiB0aGUgYnV0dG9uIG9uIHRoZSByaWdodCBvZiB0aGUgaW5wdXQgZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBnbHlwaDogc3RyaW5nO1xuXG4gICAgLyoqIFdvcmQgdG8gdXNlIGZvciB3aGVuIHRoZXJlIGFyZSBleHRyYSB0b2tlbnMuICovXG4gICAgQElucHV0KClcbiAgICBtb3JlVGVybSA9ICdtb3JlJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KClcbiAgICBvcGVuOiBib29sZWFuO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2VhcmNoIHRlcm0gY2hhbmdlcy4gVXNlICokZXZlbnQqIHRvIGFjY2VzcyB0aGUgbmV3IHRlcm0uICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgbW9yZUNsaWNrZWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJldmlvdXNFbGVtZW50V2lkdGg6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW9yZVRva2Vuc0xlZnQ6IEFycmF5PFRva2VuQ29tcG9uZW50PiA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBtb3JlVG9rZW5zUmlnaHQ6IEFycmF5PFRva2VuQ29tcG9uZW50PiA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcmV2aW91c1Rva2VuQ291bnQ6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhpZGRlbkNvenlUb2tlbkNvdW50ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuIFVzZWQgdG8gYWRkIGZvY3VzIHRvIHRva2VuaXplciBlbGVtZW50ICovXG4gICAgX3Rva2VuaXplckhhc0ZvY3VzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93T3ZlcmZsb3dQb3BvdmVyID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Nob3dNb3JlRWxlbWVudCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG9rZW5zQ29udGFpbmVyV2lkdGggPSAnYXV0byc7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFZhcmlhYmxlIHdoaWNoIHdpbGwga2VlcCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHRva2VuIHByZXNzZWQgaW4gdGhlIHRva2VuaXplclxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogVmFyaWFibGUgd2hpY2ggd2lsbCBrZWVwIHRoZSBpbmRleCBvZiB0aGUgbGFzdCB0b2tlbiBwcmVzc2VkIGluIHRoZSB0b2tlbml6ZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIF9sYXN0RWxlbWVudEluU2VsZWN0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogRmxhZyB3aGljaCB3aWxsIHNheSBpZiB0aGUgbGFzdCBrZXlib2FyZCBhbmQgY2xpY2sgb3BlcmF0aW9uIHRoZXkgdXNlZCB3YXMgdXNpbmcgY29udHJvbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2N0cmxQcmV2aW91czogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogRmxhZyB3aGljaCB3aWxsIHNheSBpZiB0aGV5IGhlbGQgc2hpZnQgYW5kIGNsaWNrZWQgaGlnaGxpZ2h0aW5nIGVsZW1lbnRzIGJlZm9yZSBvclxuICAgICAqL1xuICAgIHByaXZhdGUgX2RpcmVjdGlvblNoaWZ0SXNSaWdodDogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudExpc3RlbmVyczogKCgpID0+IHZvaWQpW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9yY2VBbGxUb2tlbnNUb0Rpc3BsYXkgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9rZW5FbGVtZW50Rm9jdXNlZCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbnB1dEVsZW1lbnRGb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Rva2VuRWxlbWVudEZvY3VzZWRTdWI6IE51bGxhYmxlPFN1YnNjcmlwdGlvbj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcnRsU2VydmljZTogUnRsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnQ6IERvY3VtZW50XG4gICAgKSB7XG4gICAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzLnB1c2goXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhlLnRhcmdldCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbnB1dD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRLZXlkb3duRXZlbnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdhdGNoIGZvciBjaGFuZ2VzIHRvIHRoZSB0b2tlbkxpc3QgYW5kIGF0dGVtcHQgdG8gZXhwYW5kL2NvbGxhcHNlIHRva2VucyBhcyBuZWVkZWRcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0VG9rZW5zKCk7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLm9uQ2xvc2VDbGljay5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRUb2tlbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLmVsZW1lbnRGb2N1c2VkLnN1YnNjcmliZSgoaXNGb2N1c2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2tlbkVsZW1lbnRGb2N1c2VkLm5leHQoaXNGb2N1c2VkKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5fY29tcGFjdCAmJiAhdGhpcy5jb21wYWN0Q29sbGFwc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGlzdGVuRWxlbWVudEV2ZW50cygpO1xuICAgICAgICB0aGlzLnByZXZpb3VzRWxlbWVudFdpZHRoID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uUmVzaXplKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2tlbkxpc3RDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl90b2tlbkVsZW1lbnRGb2N1c2VkU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5mb3JFYWNoKChlKSA9PiBlKCkpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUNsaWNrcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogQ3NzQ2xhc3NCdWlsZGVyIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICAgICAqIGZ1bmN0aW9uIG11c3QgcmV0dXJuIHNpbmdsZSBzdHJpbmdcbiAgICAgKiBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igb3JkZXIgd2hpY2ggY3NzIGNsYXNzZXMgYXJlIGFwcGxpZWRcbiAgICAgKi9cbiAgICBAYXBwbHlDc3NDbGFzc1xuICAgIGJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gW3RoaXMuY2xhc3NdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlVG9rZW5DbGlja1N1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQ2xpY2tzKCk7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRva2VuLnRva2VuV3JhcHBlckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0b2tlbi50b2tlbldyYXBwZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2xpY2tTdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdG9rZW4ub25Ub2tlbkNsaWNrLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNDb250cm9sS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3RybFNlbGVjdGVkKHRva2VuLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWV2ZW50LnNoaWZ0S2V5IHx8IHRoaXMuX2N0cmxQcmV2aW91cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmFzaWNTZWxlY3RlZCh0b2tlbiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rmlyc3RBbmRMYXN0RWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hpZnRTZWxlY3RlZChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2xpY2tTdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdG9rZW4ub25Ub2tlbktleWRvd24uc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBmb2N1c1Rva2VuRWxlbWVudChuZXdJbmRleDogbnVtYmVyKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB0b2tlbkxpc3RBcnJheTogVG9rZW5Db21wb25lbnRbXSA9IHRoaXMudG9rZW5MaXN0LnRvQXJyYXkoKTtcbiAgICAgICAgaWYgKHRva2VuTGlzdEFycmF5W25ld0luZGV4XSkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0b2tlbkxpc3RBcnJheVtuZXdJbmRleF0udG9rZW5XcmFwcGVyRWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgLy8gZWxlbWVudCBuZWVkcyB0YWJpbmRleCBpbiBvcmRlciB0byBiZSBmb2N1c2VkXG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyEuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbGVtZW50VG9Gb2N1cztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIGtleURvd24oa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBLZXlVdGlsLmlzS2V5Q29kZShrZXlib2FyZEV2ZW50LCBbREVMRVRFLCBCQUNLU1BBQ0VdKSAmJlxuICAgICAgICAgICAgKCF0aGlzLl9pc0lucHV0Rm9jdXNlZCgpIHx8IHRoaXMuX3Rva2Vuc1NlbGVjdGVkKCkpICYmXG4gICAgICAgICAgICAhdGhpcy5kaXNhYmxlS2V5Ym9hcmREZWxldGlvblxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLl9nZXRBY3RpdmVUb2tlbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWRUb2tlbkluZGV4ID0gdGhpcy5fZ2V0Rm9jdXNlZFRva2VuSW5kZXgoKTtcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gZWxlbWVudC5vbkNsb3NlQ2xpY2suZW1pdCgpKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoa2V5Ym9hcmRFdmVudCwgREVMRVRFKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c0lucHV0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c1Rva2VuRWxlbWVudChmb2N1c2VkVG9rZW5JbmRleCAtIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIEtleVV0aWwuaXNLZXlDb2RlKGtleWJvYXJkRXZlbnQsIEJBQ0tTUEFDRSkgJiZcbiAgICAgICAgICAgIHRoaXMuX2lzSW5wdXRGb2N1c2VkKCkgJiZcbiAgICAgICAgICAgICF0aGlzLl9nZXRJbnB1dFZhbHVlKCkgJiZcbiAgICAgICAgICAgICF0aGlzLmRpc2FibGVLZXlib2FyZERlbGV0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1Rva2VuRWxlbWVudCh0aGlzLnRva2VuTGlzdC5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnRSZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRUb2tlbnMoKTtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNFbGVtZW50V2lkdGggPSBlbGVtZW50V2lkdGg7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2NvbXBhY3QgJiYgIXRoaXMuY29tcGFjdENvbGxhcHNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQ296eVRva2VuQ291bnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgZnJvbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IG5ld0luZGV4OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJ0bCA9IHRoaXMuX3J0bFNlcnZpY2UgJiYgdGhpcy5fcnRsU2VydmljZS5ydGwgPyB0aGlzLl9ydGxTZXJ2aWNlLnJ0bC5nZXRWYWx1ZSgpIDogZmFsc2U7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgU1BBQ0UpICYmICF0aGlzLl9pc0lucHV0Rm9jdXNlZCgpKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5MaXN0LmZpbmQoKF8sIGluZGV4KSA9PiBpbmRleCA9PT0gZnJvbUluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHNoYWRvd2VkVG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2hhZG93ZWRUb2tlbiAhPT0gdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgc2hhZG93ZWRUb2tlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG9rZW4gJiYgKHRva2VuLnNlbGVjdGVkID0gIXRva2VuLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNJbnB1dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2dvQmFja1JlcXVlc3RlZChldmVudCwgcnRsKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycm93TGVmdChmcm9tSW5kZXgpO1xuICAgICAgICAgICAgbmV3SW5kZXggPSBmcm9tSW5kZXggLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2dvRm9yd2FyZFJlcXVlc3RlZChldmVudCwgcnRsKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycm93UmlnaHQoZnJvbUluZGV4KTtcbiAgICAgICAgICAgIG5ld0luZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgQSkgJiYgIXRoaXMuX2dldElucHV0VmFsdWUoKSAmJiB0aGlzLl9pc0NvbnRyb2xLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+ICh0b2tlbi5zZWxlY3RlZCA9IHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3SW5kZXggPT09IHRoaXMudG9rZW5MaXN0Lmxlbmd0aCAmJiB0aGlzLl9nb0ZvcndhcmRSZXF1ZXN0ZWQoZXZlbnQsIHJ0bCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzSW5wdXQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChuZXdJbmRleCEgPiB0aGlzLnRva2VuTGlzdC5sZW5ndGggLSB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGggJiYgdGhpcy5faXNJbnB1dEZvY3VzZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1Rva2VuRWxlbWVudChuZXdJbmRleCEgLSB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKG5ld0luZGV4IHx8IG5ld0luZGV4ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVG9rZW5FbGVtZW50KG5ld0luZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0Q29tYmluZWRUb2tlbldpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIGxldCB0b3RhbFRva2VuV2lkdGggPSB0aGlzLl9nZXRUb2tlbnNBcmVhV2lkdGhXaXRob3V0VG9rZW5zKCk7XG4gICAgICAgIC8vIGdldCB0aGUgd2lkdGggb2YgZWFjaCB0b2tlblxuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgdG90YWxUb2tlbldpZHRoID0gdG90YWxUb2tlbldpZHRoICsgdG9rZW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdG90YWxUb2tlbldpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDaGVjayB3aGV0aGVyIHVzZXIgaW50ZW5kcyB0byBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyB0b2tlblxuICAgICAqKi9cbiAgICBwcml2YXRlIF9nb0JhY2tSZXF1ZXN0ZWQoJGV2ZW50OiBLZXlib2FyZEV2ZW50LCBydGw6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgYmFja0tleXMgPSBydGwgPyBbUklHSFRfQVJST1csIERPV05fQVJST1ddIDogW0xFRlRfQVJST1csIFVQX0FSUk9XXTtcbiAgICAgICAgcmV0dXJuIEtleVV0aWwuaXNLZXlDb2RlKCRldmVudCwgYmFja0tleXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDaGVjayB3aGV0aGVyIHVzZXIgaW50ZW5kcyB0byBnbyBmb3J3YXJkIHRvIHRoZSBuZXh0IHRva2VuXG4gICAgICoqL1xuICAgIHByaXZhdGUgX2dvRm9yd2FyZFJlcXVlc3RlZCgkZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHJ0bDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmb3J3YXJkS2V5cyA9IHJ0bCA/IFtMRUZUX0FSUk9XLCBVUF9BUlJPV10gOiBbUklHSFRfQVJST1csIERPV05fQVJST1ddO1xuICAgICAgICByZXR1cm4gS2V5VXRpbC5pc0tleUNvZGUoJGV2ZW50LCBmb3J3YXJkS2V5cyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRUb2tlbnNBcmVhV2lkdGhXaXRob3V0VG9rZW5zKCk6IG51bWJlciB7XG4gICAgICAgIGxldCB0b3RhbFRva2VuV2lkdGggPSAwO1xuICAgICAgICAvLyBhZGQgaW5wdXQgd2lkdGhcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRvdGFsVG9rZW5XaWR0aCA9IHRvdGFsVG9rZW5XaWR0aCArIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgdGhlIHdpZHRoIG9mIHRoZSBcIl9fX18gbW9yZVwiIGVsZW1lbnRcbiAgICAgICAgaWYgKHRoaXMubW9yZVRva2Vuc0xlZnQubGVuZ3RoID4gMCAmJiB0aGlzLm1vcmVFbGVtZW50ICYmIHRoaXMubW9yZUVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdG90YWxUb2tlbldpZHRoID0gdG90YWxUb2tlbldpZHRoICsgdGhpcy5tb3JlRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFkZCB0aGUgaW5wdXQgZ3JvdXAgYWRkb25cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRHcm91cEFkZG9uRWwgJiYgdGhpcy5pbnB1dEdyb3VwQWRkb25FbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0b3RhbFRva2VuV2lkdGggPSB0b3RhbFRva2VuV2lkdGggKyB0aGlzLmlucHV0R3JvdXBBZGRvbkVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG90YWxUb2tlbldpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW9yZUNsaWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9yZUNsaWNrZWRFdmVudC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZXMgYWxsIHNlbGVjdGVkIHRva2VucyAqL1xuICAgIHJlbW92ZVNlbGVjdGVkVG9rZW5zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5fZ2V0QWN0aXZlVG9rZW5zKCk7XG4gICAgICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gZWxlbWVudC5vblJlbW92ZS5lbWl0KCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlQXJyb3dMZWZ0KGZyb21JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIGlmIHRoZSBsZWZ0bW9zdCB2aXNpYmxlIHRva2VuIGlzIHNlbGVjdGVkLCBhbmQgdGhlcmUgYXJlIG1vcmVUb2tlbnNMZWZ0LCBuZWVkIHRvIGRpc3BsYXkgYSBtb3JlVG9rZW5MZWZ0XG4gICAgICAgIGlmIChmcm9tSW5kZXggPT09IHRoaXMubW9yZVRva2Vuc0xlZnQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBwb3BwZWRUb2tlbiA9IHRoaXMubW9yZVRva2Vuc0xlZnQucG9wKCk7XG4gICAgICAgICAgICBpZiAocG9wcGVkVG9rZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlRWxlbWVudFZpc2libGUocG9wcGVkVG9rZW4uZWxlbWVudFJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhbmQgdGhlbiBoaWRlIGFueSB0b2tlbnMgZnJvbSB0aGUgcmlnaHQgdGhhdCBubyBsb25nZXIgZml0XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZVRva2VucygncmlnaHQnKTtcblxuICAgICAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2hvd0FsbFRva2VucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9yY2VBbGxUb2tlbnNUb0Rpc3BsYXkgPSB0cnVlO1xuICAgICAgICB0aGlzLl9pbnB1dEVsZW1lbnRGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VFbGVtZW50VmlzaWJsZSh0b2tlbi5lbGVtZW50UmVmKTtcbiAgICAgICAgICAgIHRva2VuLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0b2tlbi5fY29udGVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl90b2tlbnNDb250YWluZXJXaWR0aCA9ICdhdXRvJztcbiAgICAgICAgdGhpcy5fc2hvd01vcmVFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hpZGVUb2tlbnMoKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50Rm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgdG9rZW5Gb2N1c2VkID0gdGhpcy5fZ2V0Rm9jdXNlZFRva2VuSW5kZXgoKSA+IC0xO1xuXG4gICAgICAgICAgICBpZiAodG9rZW5Gb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2FpdEZvckZvY3VzVG9EaXNhcHBlYXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9mb3JjZUFsbFRva2Vuc1RvRGlzcGxheSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRUb2tlbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF93YWl0Rm9yRm9jdXNUb0Rpc2FwcGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdG9rZW5FbGVtZW50Rm9jdXNlZFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgLy8gNSBtcyBkZWxheSBmb3Igb3RoZXIgdG9rZW4gdG8gcmVjZWl2ZSBmb2N1cywgY2hlY2sgaWYgX3Nob3dBbGxUb2tlbnMgd2FzIGNhbGxlZCBhZ2FpblxuICAgICAgICB0aGlzLl90b2tlbkVsZW1lbnRGb2N1c2VkU3ViID0gdGhpcy5fdG9rZW5FbGVtZW50Rm9jdXNlZFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoaXNGb2N1c2VkKSA9PiBpc0ZvY3VzZWQgJiYgIXRoaXMuX2lucHV0RWxlbWVudEZvY3VzZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWRlVG9rZW5zKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUFycm93UmlnaHQoZnJvbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZyb21JbmRleCA9PT0gdGhpcy50b2tlbkxpc3QubGVuZ3RoIC0gdGhpcy5tb3JlVG9rZW5zUmlnaHQubGVuZ3RoIC0gMSAmJiB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvcHBlZFRva2VuID0gdGhpcy5tb3JlVG9rZW5zUmlnaHQucG9wKCk7XG4gICAgICAgICAgICBpZiAocG9wcGVkVG9rZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlRWxlbWVudFZpc2libGUocG9wcGVkVG9rZW4uZWxlbWVudFJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhbmQgdGhlbiBoaWRlIGFueSB0b2tlbnMgZnJvbSB0aGUgbGVmdCB0aGF0IG5vIGxvbmdlciBmaXRcbiAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlVG9rZW5zKCdsZWZ0Jyk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29sbGFwc2VUb2tlbnMoc2lkZT86IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZm9yY2VBbGxUb2tlbnNUb0Rpc3BsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2NvbXBhY3QgJiYgIXRoaXMuY29tcGFjdENvbGxhcHNlKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRIaWRkZW5Db3p5VG9rZW5Db3VudCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5mb3JFYWNoKCh2aWV3Q29udGFpbmVyKSA9PiB2aWV3Q29udGFpbmVyLmNsZWFyKCkpO1xuXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gdGhpcy5fZ2V0VG9rZW5zQXJlYVdpZHRoV2l0aG91dFRva2VucygpO1xuXG4gICAgICAgIGlmICh0aGlzLnRva2VuTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuV2lkdGggPSB0aGlzLnRva2VuTGlzdC5nZXQoMCk/LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3Rva2Vuc0NvbnRhaW5lcldpZHRoID0gYXZhaWxhYmxlV2lkdGggPCB0b2tlbldpZHRoID8gYGNhbGMoMTAwJSAtICR7YXZhaWxhYmxlV2lkdGh9cHgpYCA6ICdhdXRvJztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3Rva2Vuc0NvbnRhaW5lcldpZHRoID0gJ2F1dG8nO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hlY2tNb3JlRWxlbWVudFZpc2liaWxpdHkoKTtcblxuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRva2VuLl9jb250ZW50KSk7XG5cbiAgICAgICAgbGV0IGVsZW1lbnRXaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICBsZXQgY29tYmluZWRUb2tlbldpZHRoID0gdGhpcy5nZXRDb21iaW5lZFRva2VuV2lkdGgoKTsgLy8gdGhlIGNvbWJpbmVkIHdpZHRoIG9mIGFsbCB0b2tlbnMsIHRoZSBcIl9fX18gbW9yZVwiIHRleHQsIGFuZCB0aGUgaW5wdXRcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAvKlxuICAgICAgICAgV2hlbiByZXNpemluZywgd2Ugd2FudCB0byBjb2xsYXBzZSB0aGUgdG9rZW5zIG9uIHRoZSBsZWZ0IGZpcnN0LiBIb3dldmVyLCB3aGVuIHRoZSB1c2VyIGlzIG5hdmlnYXRpbmcgdGhyb3VnaFxuICAgICAgICAgYSBncm91cCBvZiBvdmVyZmxvd2luZyB0b2tlbnMgdXNpbmcgdGhlIGFycm93IGxlZnQga2V5LCB3ZSBtYXkgbmVlZCB0byBoaWRlIHRva2VucyBvbiB0aGUgcmlnaHQuIFNvIGlmIHRoaXNcbiAgICAgICAgIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZCB3aXRoIHRoZSBwYXJhbSAncmlnaHQnIGl0IHdpbGwgY29sbGFwc2UgdG9rZW5zIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGxpc3QgcmF0aGVyXG4gICAgICAgICB0aGFuIHRoZSAoZGVmYXVsdCkgbGVmdCBzaWRlLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHNpZGUgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIGkgPSB0aGlzLnRva2VuTGlzdC5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjb21iaW5lZFRva2VuV2lkdGggPiBlbGVtZW50V2lkdGggJiYgKHNpZGUgPT09ICdyaWdodCcgPyBpID49IDAgOiBpIDwgdGhpcy50b2tlbkxpc3QubGVuZ3RoKSkge1xuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSB0b2tlbnMgYW5kIGhpZGUgdGhlbSB1bnRpbCB0aGUgY29tYmluZWRUb2tlbldpZHRoIGZpdHMgaW4gdGhlIGVsZW1lbnRXaWR0aFxuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2VuTGlzdC5nZXQoaSk7XG4gICAgICAgICAgICBjb25zdCBtb3JlVG9rZW5zID0gc2lkZSA9PT0gJ3JpZ2h0JyA/IHRoaXMubW9yZVRva2Vuc1JpZ2h0IDogdGhpcy5tb3JlVG9rZW5zTGVmdDtcblxuICAgICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vcmVUb2tlbnMuaW5kZXhPZih0b2tlbikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vcmVUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRva2VuLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZ2V0IHRoZSBuZXcgZWxlbWVudFdpZHRoIGFuZCBjb21iaW5lZFRva2VuV2lkdGggYXMgdGhlc2Ugd2lsbCBoYXZlIGNoYW5nZWQgYWZ0ZXIgc2V0dGluZyBhIHRva2VuIGRpc3BsYXkgdG8gJ25vbmUnXG4gICAgICAgICAgICBlbGVtZW50V2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrTW9yZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgICAgICAgICBjb21iaW5lZFRva2VuV2lkdGggPSB0aGlzLmdldENvbWJpbmVkVG9rZW5XaWR0aCgpO1xuICAgICAgICAgICAgc2lkZSA9PT0gJ3JpZ2h0JyA/IGktLSA6IGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3dPdmVyZmxvd1BvcG92ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2hpZGRlblRva2Vucy5mb3JFYWNoKChoaWRkZW5Ub2tlbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBoaWRkZW5Ub2tlbi5fdmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuZ2V0KGluZGV4KT8uY3JlYXRlRW1iZWRkZWRWaWV3KGhpZGRlblRva2VuLl9jb250ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNldFRva2VucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3JlVG9rZW5zTGVmdCA9IFtdO1xuICAgICAgICB0aGlzLm1vcmVUb2tlbnNSaWdodCA9IFtdO1xuICAgICAgICBpZiAodGhpcy5fY29tcGFjdCB8fCB0aGlzLmNvbXBhY3RDb2xsYXBzZSB8fCB0aGlzLl9mb3JjZUFsbFRva2Vuc1RvRGlzcGxheSkge1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlRWxlbWVudFZpc2libGUodG9rZW4uZWxlbWVudFJlZik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VUb2tlbnMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVUb2tlbkNsaWNrU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB0aGlzLnByZXZpb3VzVG9rZW5Db3VudCA9IHRoaXMudG9rZW5MaXN0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLl9zZXRUb3RhbENvdW50KHRoaXMudG9rZW5MaXN0Lmxlbmd0aCkpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50TGVmdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIHRoaXMuaGlkZGVuQ296eVRva2VuQ291bnQgPSAwO1xuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRva2VuLnRva2VuV3JhcHBlckVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICB0b2tlbi50b2tlbldyYXBwZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgPCBlbGVtZW50TGVmdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRkZW5Db3p5VG9rZW5Db3VudCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jaGVja01vcmVFbGVtZW50VmlzaWJpbGl0eSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ296eVRva2VuQ291bnQoKTogdm9pZCB7XG4gICAgICAgIC8vIGJlY2F1c2UganVzdGlmeS1jb250ZW50IGJyZWFrcyBzY3JvbGxiYXIsIGl0IGNhbm5vdCBiZSB1c2VkIG9uIGNvenkgc2NyZWVucywgc28gdXNlIEpTIHRvIHNjcm9sbCB0byB0aGUgZW5kXG4gICAgICAgIHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgdGhpcy5fZ2V0SGlkZGVuQ296eVRva2VuQ291bnQoKTtcbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuQ296eVRva2VuQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGRvIHRoaXMgYWdhaW4gaW4gY2FzZSBcIl9fX18gbW9yZVwiIHRleHQgd2FzIGFkZGVkXG4gICAgICAgICAgICB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICB0aGlzLl9nZXRIaWRkZW5Db3p5VG9rZW5Db3VudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tYWtlRWxlbWVudFZpc2libGUoZWxlbWVudFJlZjogRWxlbWVudFJlZik6IHZvaWQge1xuICAgICAgICBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuICAgICAgICBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlQ2xpY2tzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnMgJiYgdGhpcy50b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbnB1dEtleWRvd25FdmVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMucHVzaChcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsICdrZXlkb3duJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlEb3duKGV2ZW50LCB0aGlzLnRva2VuTGlzdC5sZW5ndGgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBNZXRob2Qgd2hpY2ggaGFuZGxlcyB3aGF0IGhhcHBlbnMgdG8gdG9rZW4gd2hlbiBpdCBpcyBjbGlja2VkIGFuZCBubyBrZXkgaXMgYmVpbmcgaGVsZCBkb3duLiovXG4gICAgcHJpdmF0ZSBfYmFzaWNTZWxlY3RlZCh0b2tlbiwgaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgoc2hhZG93ZWRUb2tlbikgPT4ge1xuICAgICAgICAgICAgaWYgKHNoYWRvd2VkVG9rZW4gIT09IHRva2VuKSB7XG4gICAgICAgICAgICAgICAgc2hhZG93ZWRUb2tlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICB0b2tlbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2N0cmxQcmV2aW91cyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJlc3RhcnQgZmlyc3QgYW5kIGxhc3QgZWxlbWVudHMgZm9yIHNoaWZ0IHNlbGVjdGlvbi4qL1xuICAgIHByaXZhdGUgcmVzZXRGaXJzdEFuZExhc3RFbGVtZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNldCA9ICF0aGlzLnRva2VuTGlzdC5zb21lKCh0b2tlbikgPT4gdG9rZW4uc2VsZWN0ZWQpO1xuICAgICAgICBpZiAocmVzZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTWV0aG9kIHdoaWNoIGhhbmRsZXMgd2hhdCBoYXBwZW5zIHRvIHRva2VuIHdoZW4gaXQgaXMgY2xpY2tlZCBhbmQgdGhlIHNoaWZ0IGtleSBpcyBiZWluZyBoZWxkIGRvd24uKi9cbiAgICBwcml2YXRlIF9zaGlmdFNlbGVjdGVkKGluZGV4KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gJiYgIXRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uICYmIGluZGV4IDwgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiAmJiBpbmRleCA+IHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbiwgaW5kZXhPZlRva2VuKSA9PiB7XG4gICAgICAgICAgICB0b2tlbi5zZWxlY3RlZCA9XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGluZGV4T2ZUb2tlbiA+PSB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiAmJlxuICAgICAgICAgICAgICAgIGluZGV4T2ZUb2tlbiA8PSB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fY3RybFByZXZpb3VzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTWV0aG9kIHdoaWNoIGhhbmRsZXMgd2hhdCBoYXBwZW5zIHRvIHRva2VuIHdoZW4gaXQgaXMgY2xpY2tlZCBhbmQgdGhlIGNvbnRyb2wgb3IgbWV0YSBrZXkgaXMgYmVpbmcgaGVsZCBkb3duLiovXG4gICAgcHJpdmF0ZSBfY3RybFNlbGVjdGVkKHRva2VuLCBpbmRleCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRva2VuLnNlbGVjdGVkO1xuICAgICAgICB0b2tlbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgdG9rZW4uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKGVsZW1lbnQsIGluZGV4T2ZUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXhPZlRva2VuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4T2ZUb2tlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uISAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiEgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N0cmxQcmV2aW91cyA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEdldCBzZWxlY3RlZCBhbmQgZm9jdXNlZCB0b2tlbnMgKi9cbiAgICBwcml2YXRlIF9nZXRBY3RpdmVUb2tlbnMoKTogVG9rZW5Db21wb25lbnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uc2VsZWN0ZWQgfHwgdGhpcy5faXNUb2tlbkZvY3VzZWQoaXRlbSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0Rm9jdXNlZFRva2VuSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5MaXN0LnRvQXJyYXkoKS5maW5kSW5kZXgoKHRva2VuKSA9PiB0aGlzLl9pc1Rva2VuRm9jdXNlZCh0b2tlbikpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNUb2tlbkZvY3VzZWQodG9rZW46IFRva2VuQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0b2tlbi50b2tlbldyYXBwZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQgPT09IHRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc0lucHV0Rm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Rva2Vuc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbkxpc3Quc29tZSgodCkgPT4gdC5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c0lucHV0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzQ29udHJvbEtleShrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4ga2V5Ym9hcmRFdmVudC5jdHJsS2V5IHx8IGtleWJvYXJkRXZlbnQubWV0YUtleTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlbkVsZW1lbnRFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgZnJvbUV2ZW50PEV2ZW50Pih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2ZvY3VzJywgeyBjYXB0dXJlOiB0cnVlIH0pLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gKGV2ZW50Wyd0YXJnZXQnXSBhcyBhbnkpPy50YWdOYW1lID09PSAnSU5QVVQnICYmIHRoaXMudG9rZW5pemVyRm9jdXNhYmxlKSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdHJ1ZSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBmcm9tRXZlbnQ8RXZlbnQ+KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnYmx1cicsIHsgY2FwdHVyZTogdHJ1ZSB9KS5waXBlKG1hcCgoKSA9PiBmYWxzZSkpXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIGRlYm91bmNlVGltZSBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gZmlsdGVyIHN1YnNlcXVlbnQgZm9jdXMtYmx1ciBldmVudHMsIHRoYXQgaGFwcGVuIHNpbXVsdGFuZW91c2x5XG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZvY3VzZWQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl90b2tlbml6ZXJIYXNGb2N1cyA9IGZvY3VzZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBMaXN0ZW4gd2luZG93IHJlc2l6ZSBhbmQgZGlzdHJpYnV0ZSBjYXJkcyBvbiBjb2x1bW4gY2hhbmdlICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25SZXNpemUoKTtcbiAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgzMCksIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vblJlc2l6ZSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoZWNrTW9yZUVsZW1lbnRWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzaG93TW9yZUVsZW1lbnQgPVxuICAgICAgICAgICAgKHRoaXMubW9yZVRva2Vuc0xlZnQubGVuZ3RoID4gMCB8fCB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGggPiAwIHx8IHRoaXMuaGlkZGVuQ296eVRva2VuQ291bnQgPiAwKSAmJlxuICAgICAgICAgICAgIXRoaXMub3BlbiAmJlxuICAgICAgICAgICAgIXRoaXMuX3Rva2VuaXplckhhc0ZvY3VzO1xuXG4gICAgICAgIGlmIChzaG93TW9yZUVsZW1lbnQgPT09IHRoaXMuX3Nob3dNb3JlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2hvd01vcmVFbGVtZW50ID0gc2hvd01vcmVFbGVtZW50O1xuXG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJmZC10b2tlbml6ZXIgZmQtdG9rZW5pemVyLS1zY3JvbGxhYmxlXCJcbiAgICBbY2xhc3MuaXMtZm9jdXNdPVwiX3Rva2VuaXplckhhc0ZvY3VzXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidjb3JlVG9rZW5pemVyLnRva2VuaXplckxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtdG9rZW5pemVyX19pbm5lclwiICN0b2tlbml6ZXJJbm5lcj5cbiAgICAgICAgPGRpdiByb2xlPVwibGlzdGJveFwiIFtzdHlsZS53aWR0aF09XCJfdG9rZW5zQ29udGFpbmVyV2lkdGhcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkLXRva2VuXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dPdmVyZmxvd1BvcG92ZXIgJiYgKChfY29tcGFjdCQgfCBhc3luYykgfHwgY29tcGFjdENvbGxhcHNlKTsgZWxzZSBtb3JlRWxlbWVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRva2Vuc092ZXJmbG93XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmZC1mb3JtLWNvbnRyb2xdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIGZkLWlucHV0LWdyb3VwLWFkZG9uICpuZ0lmPVwiZ2x5cGhcIiAjaW5wdXRHcm91cEFkZE9uIFtidXR0b25dPVwidHJ1ZVwiIHBsYWNlbWVudD1cImFmdGVyXCI+XG4gICAgICAgIDxidXR0b24gZmQtYnV0dG9uIGNsYXNzPVwiZmQtdG9rZW5pemVyLWFkZG9uXCIgZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBbZ2x5cGhdPVwiZ2x5cGhcIiB0eXBlPVwiYnV0dG9uXCI+PC9idXR0b24+XG4gICAgPC9zcGFuPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdG9rZW5zT3ZlcmZsb3c+XG4gICAgPGZkLXBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tLXN0YXJ0XCIgdGl0bGU9XCJcIiBbbm9BcnJvd109XCJmYWxzZVwiIFtmb2N1c1RyYXBwZWRdPVwidHJ1ZVwiIFtmb2N1c0F1dG9DYXB0dXJlXT1cInRydWVcIj5cbiAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb3JlRWxlbWVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cblxuICAgICAgICA8ZmQtcG9wb3Zlci1ib2R5PlxuICAgICAgICAgICAgPHVsIGZkLWxpc3QgY2xhc3M9XCJmZC10b2tlbml6ZXJfX292ZXJmbG93LWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8bGkgZmQtbGlzdC1pdGVtIGNsYXNzPVwiZmQtdG9rZW5pemVyX19vdmVyZmxvdy1saXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgdG9rZW4gb2YgX2hpZGRlblRva2Vuc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICN2aWV3Q29udGFpbmVyPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiF0b2tlbi5yZWFkT25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXRva2VuX19jbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvcmVUb2tlbi5kZWxldGVCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9rZW4uY2xvc2VDbGlja0hhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9yZUVsZW1lbnQ+XG4gICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cIm1vcmVDbGlja2VkKClcIlxuICAgICAgICAqbmdJZj1cIl9zaG93TW9yZUVsZW1lbnQgJiYgX2hpZGRlblRva2Vucy5sZW5ndGggPiAwXCJcbiAgICAgICAgI21vcmVFbGVtZW50U3BhblxuICAgICAgICBjbGFzcz1cImZkLXRva2VuaXplci1tb3JlXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihfY29tcGFjdCQgfCBhc3luYykgfHwgY29tcGFjdENvbGxhcHNlXCI+XG4gICAgICAgICAgICB7eyAnY29yZVRva2VuaXplci5tb3JlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IGNvdW50OiBtb3JlVG9rZW5zTGVmdC5sZW5ndGggKyBtb3JlVG9rZW5zUmlnaHQubGVuZ3RoIH0gfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoX2NvbXBhY3QkIHwgYXN5bmMpID09PSBmYWxzZSAmJiAhY29tcGFjdENvbGxhcHNlXCI+XG4gICAgICAgICAgICB7eyAnY29yZVRva2VuaXplci5tb3JlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IGNvdW50OiBoaWRkZW5Db3p5VG9rZW5Db3VudCB9IH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
721
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3Rva2VuL3Rva2VuaXplci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90b2tlbi90b2tlbml6ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCxDQUFDLEVBQ0QsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsS0FBSyxFQUNMLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRixPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFSCxPQUFPLEVBRVAsVUFBVSxFQUNWLGFBQWEsRUFDYixnQkFBZ0IsRUFDbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxF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QnpELGVBQWU7c0JBRGQsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtHLGdCQUFnQjtzQkFEeEIsTUFBTTtnQkF5SlAsc0JBQXNCLE1BZ0R0QixPQUFPO3NCQUROLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBLFxuICAgIEJBQ0tTUEFDRSxcbiAgICBERUxFVEUsXG4gICAgRE9XTl9BUlJPVyxcbiAgICBFTlRFUixcbiAgICBMRUZUX0FSUk9XLFxuICAgIFJJR0hUX0FSUk9XLFxuICAgIFNQQUNFLFxuICAgIFVQX0FSUk9XXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIERPQ1VNRU5ULCBOZ0ZvciwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ3NzQ2xhc3NCdWlsZGVyLFxuICAgIEtleVV0aWwsXG4gICAgTnVsbGFibGUsXG4gICAgUnRsU2VydmljZSxcbiAgICBhcHBseUNzc0NsYXNzLFxuICAgIHJlc2l6ZU9ic2VydmFibGVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCB7IElucHV0R3JvdXBNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaW5wdXQtZ3JvdXAnO1xuaW1wb3J0IHsgTGlzdE1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9saXN0JztcbmltcG9ydCB7IFBvcG92ZXJCb2R5Q29tcG9uZW50LCBQb3BvdmVyQ29tcG9uZW50LCBQb3BvdmVyQ29udHJvbENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50LCBtZXJnZSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUb2tlbkNvbXBvbmVudCB9IGZyb20gJy4vdG9rZW4uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC10b2tlbml6ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90b2tlbml6ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3Rva2VuaXplci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgSW5wdXRHcm91cE1vZHVsZSxcbiAgICAgICAgQnV0dG9uTW9kdWxlLFxuICAgICAgICBQb3BvdmVyQ29tcG9uZW50LFxuICAgICAgICBQb3BvdmVyQ29udHJvbENvbXBvbmVudCxcbiAgICAgICAgUG9wb3ZlckJvZHlDb21wb25lbnQsXG4gICAgICAgIExpc3RNb2R1bGUsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVG9rZW5pemVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDc3NDbGFzc0J1aWxkZXIsIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICAvKiogdXNlcidzIGN1c3RvbSBjbGFzc2VzICovXG4gICAgQElucHV0KClcbiAgICBjbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIERpc2FibGVzIHBvc3NpYmlsaXR5IHRvIHJlbW92ZSB0b2tlbnMgYnkga2V5Ym9hcmQgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVLZXlib2FyZERlbGV0aW9uID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBUb2tlbkNvbXBvbmVudCkpXG4gICAgdG9rZW5MaXN0OiBRdWVyeUxpc3Q8VG9rZW5Db21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gRm9ybUNvbnRyb2xDb21wb25lbnQpLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBpbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndG9rZW5pemVySW5uZXInKVxuICAgIHRva2VuaXplcklubmVyRWw6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdtb3JlRWxlbWVudFNwYW4nKVxuICAgIG1vcmVFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cEFkZE9uJykgc2V0IGNvbnRlbnQoY29udGVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgICAgICAgdGhpcy5pbnB1dEdyb3VwQWRkb25FbCA9IGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKCd2aWV3Q29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gICAgcmVhZG9ubHkgX3ZpZXdDb250YWluZXI6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9oaWRkZW5Ub2tlbnMoKTogVG9rZW5Db21wb25lbnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogT2JzZXJ2YWJsZSBzdGF0ZSBvZiB0aGUgY29tcGFjdCBtb2RlLlxuICAgICAqL1xuICAgIGdldCBfY29tcGFjdCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50RGVuc2l0eU9ic2VydmVyLmlzQ29tcGFjdCQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENvbXBvbmVudCBpcyBpbiBjb21wYWN0IG1vZGUsIGRldGVybWluZWQgYnkgdGhlIGNvbnN1bWVyXG4gICAgICovXG4gICAgZ2V0IF9jb21wYWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvbXBhY3Q7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBpbnB1dEdyb3VwQWRkb25FbDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHVzZSBjb3p5IHZpc3VhbHMgYnV0IGNvbXBhY3QgY29sbGFwc2luZyBiZWhhdmlvci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbXBhY3RDb2xsYXBzZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG9rZW5pemVyIHNob3VsZCBoYXZlIGZha2UgZm9jdXMgaW5kaWNhdG9yLCB3aGVuIGlucHV0IGlzIGZvY3VzZWQgaW5zaWRlKi9cbiAgICBASW5wdXQoKVxuICAgIHRva2VuaXplckZvY3VzYWJsZSA9IHRydWU7XG5cbiAgICAvKiogVGhlIHZhbHVlIGZvciB0aGUgdG9rZW5pemVyIGlucHV0ICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dFZhbHVlOiBzdHJpbmc7XG5cbiAgICAvKiogSWNvbiBvZiB0aGUgYnV0dG9uIG9uIHRoZSByaWdodCBvZiB0aGUgaW5wdXQgZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBnbHlwaDogc3RyaW5nO1xuXG4gICAgLyoqIFdvcmQgdG8gdXNlIGZvciB3aGVuIHRoZXJlIGFyZSBleHRyYSB0b2tlbnMuICovXG4gICAgQElucHV0KClcbiAgICBtb3JlVGVybSA9ICdtb3JlJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KClcbiAgICBvcGVuOiBib29sZWFuO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2VhcmNoIHRlcm0gY2hhbmdlcy4gVXNlICokZXZlbnQqIHRvIGFjY2VzcyB0aGUgbmV3IHRlcm0uICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgbW9yZUNsaWNrZWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJldmlvdXNFbGVtZW50V2lkdGg6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW9yZVRva2Vuc0xlZnQ6IEFycmF5PFRva2VuQ29tcG9uZW50PiA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBtb3JlVG9rZW5zUmlnaHQ6IEFycmF5PFRva2VuQ29tcG9uZW50PiA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcmV2aW91c1Rva2VuQ291bnQ6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhpZGRlbkNvenlUb2tlbkNvdW50ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuIFVzZWQgdG8gYWRkIGZvY3VzIHRvIHRva2VuaXplciBlbGVtZW50ICovXG4gICAgX3Rva2VuaXplckhhc0ZvY3VzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93T3ZlcmZsb3dQb3BvdmVyID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Nob3dNb3JlRWxlbWVudCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG9rZW5zQ29udGFpbmVyV2lkdGggPSAnYXV0byc7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFZhcmlhYmxlIHdoaWNoIHdpbGwga2VlcCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHRva2VuIHByZXNzZWQgaW4gdGhlIHRva2VuaXplclxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogVmFyaWFibGUgd2hpY2ggd2lsbCBrZWVwIHRoZSBpbmRleCBvZiB0aGUgbGFzdCB0b2tlbiBwcmVzc2VkIGluIHRoZSB0b2tlbml6ZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIF9sYXN0RWxlbWVudEluU2VsZWN0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogRmxhZyB3aGljaCB3aWxsIHNheSBpZiB0aGUgbGFzdCBrZXlib2FyZCBhbmQgY2xpY2sgb3BlcmF0aW9uIHRoZXkgdXNlZCB3YXMgdXNpbmcgY29udHJvbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2N0cmxQcmV2aW91czogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogRmxhZyB3aGljaCB3aWxsIHNheSBpZiB0aGV5IGhlbGQgc2hpZnQgYW5kIGNsaWNrZWQgaGlnaGxpZ2h0aW5nIGVsZW1lbnRzIGJlZm9yZSBvclxuICAgICAqL1xuICAgIHByaXZhdGUgX2RpcmVjdGlvblNoaWZ0SXNSaWdodDogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudExpc3RlbmVyczogKCgpID0+IHZvaWQpW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9yY2VBbGxUb2tlbnNUb0Rpc3BsYXkgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9rZW5FbGVtZW50Rm9jdXNlZCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbnB1dEVsZW1lbnRGb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Rva2VuRWxlbWVudEZvY3VzZWRTdWI6IE51bGxhYmxlPFN1YnNjcmlwdGlvbj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcnRsU2VydmljZTogUnRsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnQ6IERvY3VtZW50XG4gICAgKSB7XG4gICAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzLnB1c2goXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhlLnRhcmdldCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbnB1dD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRLZXlkb3duRXZlbnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdhdGNoIGZvciBjaGFuZ2VzIHRvIHRoZSB0b2tlbkxpc3QgYW5kIGF0dGVtcHQgdG8gZXhwYW5kL2NvbGxhcHNlIHRva2VucyBhcyBuZWVkZWRcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0VG9rZW5zKCk7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLm9uQ2xvc2VDbGljay5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRUb2tlbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLmVsZW1lbnRGb2N1c2VkLnN1YnNjcmliZSgoaXNGb2N1c2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2tlbkVsZW1lbnRGb2N1c2VkLm5leHQoaXNGb2N1c2VkKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5fY29tcGFjdCAmJiAhdGhpcy5jb21wYWN0Q29sbGFwc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGlzdGVuRWxlbWVudEV2ZW50cygpO1xuICAgICAgICB0aGlzLnByZXZpb3VzRWxlbWVudFdpZHRoID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uUmVzaXplKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2tlbkxpc3RDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl90b2tlbkVsZW1lbnRGb2N1c2VkU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5mb3JFYWNoKChlKSA9PiBlKCkpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUNsaWNrcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogQ3NzQ2xhc3NCdWlsZGVyIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICAgICAqIGZ1bmN0aW9uIG11c3QgcmV0dXJuIHNpbmdsZSBzdHJpbmdcbiAgICAgKiBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igb3JkZXIgd2hpY2ggY3NzIGNsYXNzZXMgYXJlIGFwcGxpZWRcbiAgICAgKi9cbiAgICBAYXBwbHlDc3NDbGFzc1xuICAgIGJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gW3RoaXMuY2xhc3NdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlVG9rZW5DbGlja1N1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQ2xpY2tzKCk7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRva2VuLnRva2VuV3JhcHBlckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0b2tlbi50b2tlbldyYXBwZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2xpY2tTdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdG9rZW4ub25Ub2tlbkNsaWNrLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNDb250cm9sS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3RybFNlbGVjdGVkKHRva2VuLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWV2ZW50LnNoaWZ0S2V5IHx8IHRoaXMuX2N0cmxQcmV2aW91cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmFzaWNTZWxlY3RlZCh0b2tlbiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rmlyc3RBbmRMYXN0RWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hpZnRTZWxlY3RlZChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2xpY2tTdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdG9rZW4ub25Ub2tlbktleWRvd24uc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBmb2N1c1Rva2VuRWxlbWVudChuZXdJbmRleDogbnVtYmVyKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB0b2tlbkxpc3RBcnJheTogVG9rZW5Db21wb25lbnRbXSA9IHRoaXMudG9rZW5MaXN0LnRvQXJyYXkoKTtcbiAgICAgICAgaWYgKHRva2VuTGlzdEFycmF5W25ld0luZGV4XSkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0b2tlbkxpc3RBcnJheVtuZXdJbmRleF0udG9rZW5XcmFwcGVyRWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgLy8gZWxlbWVudCBuZWVkcyB0YWJpbmRleCBpbiBvcmRlciB0byBiZSBmb2N1c2VkXG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyEuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbGVtZW50VG9Gb2N1cztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIGtleURvd24oa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBLZXlVdGlsLmlzS2V5Q29kZShrZXlib2FyZEV2ZW50LCBbREVMRVRFLCBCQUNLU1BBQ0VdKSAmJlxuICAgICAgICAgICAgKCF0aGlzLl9pc0lucHV0Rm9jdXNlZCgpIHx8IHRoaXMuX3Rva2Vuc1NlbGVjdGVkKCkpICYmXG4gICAgICAgICAgICAhdGhpcy5kaXNhYmxlS2V5Ym9hcmREZWxldGlvblxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLl9nZXRBY3RpdmVUb2tlbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWRUb2tlbkluZGV4ID0gdGhpcy5fZ2V0Rm9jdXNlZFRva2VuSW5kZXgoKTtcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gZWxlbWVudC5vbkNsb3NlQ2xpY2suZW1pdCgpKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoa2V5Ym9hcmRFdmVudCwgREVMRVRFKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c0lucHV0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c1Rva2VuRWxlbWVudChmb2N1c2VkVG9rZW5JbmRleCAtIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIEtleVV0aWwuaXNLZXlDb2RlKGtleWJvYXJkRXZlbnQsIEJBQ0tTUEFDRSkgJiZcbiAgICAgICAgICAgIHRoaXMuX2lzSW5wdXRGb2N1c2VkKCkgJiZcbiAgICAgICAgICAgICF0aGlzLl9nZXRJbnB1dFZhbHVlKCkgJiZcbiAgICAgICAgICAgICF0aGlzLmRpc2FibGVLZXlib2FyZERlbGV0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1Rva2VuRWxlbWVudCh0aGlzLnRva2VuTGlzdC5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnRSZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRUb2tlbnMoKTtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNFbGVtZW50V2lkdGggPSBlbGVtZW50V2lkdGg7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2NvbXBhY3QgJiYgIXRoaXMuY29tcGFjdENvbGxhcHNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQ296eVRva2VuQ291bnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgZnJvbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IG5ld0luZGV4OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJ0bCA9IHRoaXMuX3J0bFNlcnZpY2UgJiYgdGhpcy5fcnRsU2VydmljZS5ydGwgPyB0aGlzLl9ydGxTZXJ2aWNlLnJ0bC5nZXRWYWx1ZSgpIDogZmFsc2U7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgU1BBQ0UpICYmICF0aGlzLl9pc0lucHV0Rm9jdXNlZCgpKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5MaXN0LmZpbmQoKF8sIGluZGV4KSA9PiBpbmRleCA9PT0gZnJvbUluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHNoYWRvd2VkVG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2hhZG93ZWRUb2tlbiAhPT0gdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgc2hhZG93ZWRUb2tlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG9rZW4gJiYgKHRva2VuLnNlbGVjdGVkID0gIXRva2VuLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNJbnB1dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2dvQmFja1JlcXVlc3RlZChldmVudCwgcnRsKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycm93TGVmdChmcm9tSW5kZXgpO1xuICAgICAgICAgICAgbmV3SW5kZXggPSBmcm9tSW5kZXggLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2dvRm9yd2FyZFJlcXVlc3RlZChldmVudCwgcnRsKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycm93UmlnaHQoZnJvbUluZGV4KTtcbiAgICAgICAgICAgIG5ld0luZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgQSkgJiYgIXRoaXMuX2dldElucHV0VmFsdWUoKSAmJiB0aGlzLl9pc0NvbnRyb2xLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+ICh0b2tlbi5zZWxlY3RlZCA9IHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3SW5kZXggPT09IHRoaXMudG9rZW5MaXN0Lmxlbmd0aCAmJiB0aGlzLl9nb0ZvcndhcmRSZXF1ZXN0ZWQoZXZlbnQsIHJ0bCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzSW5wdXQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChuZXdJbmRleCEgPiB0aGlzLnRva2VuTGlzdC5sZW5ndGggLSB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGggJiYgdGhpcy5faXNJbnB1dEZvY3VzZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1Rva2VuRWxlbWVudChuZXdJbmRleCEgLSB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKG5ld0luZGV4IHx8IG5ld0luZGV4ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVG9rZW5FbGVtZW50KG5ld0luZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0Q29tYmluZWRUb2tlbldpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIGxldCB0b3RhbFRva2VuV2lkdGggPSB0aGlzLl9nZXRUb2tlbnNBcmVhV2lkdGhXaXRob3V0VG9rZW5zKCk7XG4gICAgICAgIC8vIGdldCB0aGUgd2lkdGggb2YgZWFjaCB0b2tlblxuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgdG90YWxUb2tlbldpZHRoID0gdG90YWxUb2tlbldpZHRoICsgdG9rZW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdG90YWxUb2tlbldpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDaGVjayB3aGV0aGVyIHVzZXIgaW50ZW5kcyB0byBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyB0b2tlblxuICAgICAqKi9cbiAgICBwcml2YXRlIF9nb0JhY2tSZXF1ZXN0ZWQoJGV2ZW50OiBLZXlib2FyZEV2ZW50LCBydGw6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgYmFja0tleXMgPSBydGwgPyBbUklHSFRfQVJST1csIERPV05fQVJST1ddIDogW0xFRlRfQVJST1csIFVQX0FSUk9XXTtcbiAgICAgICAgcmV0dXJuIEtleVV0aWwuaXNLZXlDb2RlKCRldmVudCwgYmFja0tleXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDaGVjayB3aGV0aGVyIHVzZXIgaW50ZW5kcyB0byBnbyBmb3J3YXJkIHRvIHRoZSBuZXh0IHRva2VuXG4gICAgICoqL1xuICAgIHByaXZhdGUgX2dvRm9yd2FyZFJlcXVlc3RlZCgkZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHJ0bDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmb3J3YXJkS2V5cyA9IHJ0bCA/IFtMRUZUX0FSUk9XLCBVUF9BUlJPV10gOiBbUklHSFRfQVJST1csIERPV05fQVJST1ddO1xuICAgICAgICByZXR1cm4gS2V5VXRpbC5pc0tleUNvZGUoJGV2ZW50LCBmb3J3YXJkS2V5cyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRUb2tlbnNBcmVhV2lkdGhXaXRob3V0VG9rZW5zKCk6IG51bWJlciB7XG4gICAgICAgIGxldCB0b3RhbFRva2VuV2lkdGggPSAwO1xuICAgICAgICAvLyBhZGQgaW5wdXQgd2lkdGhcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRvdGFsVG9rZW5XaWR0aCA9IHRvdGFsVG9rZW5XaWR0aCArIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgdGhlIHdpZHRoIG9mIHRoZSBcIl9fX18gbW9yZVwiIGVsZW1lbnRcbiAgICAgICAgaWYgKHRoaXMubW9yZVRva2Vuc0xlZnQubGVuZ3RoID4gMCAmJiB0aGlzLm1vcmVFbGVtZW50ICYmIHRoaXMubW9yZUVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdG90YWxUb2tlbldpZHRoID0gdG90YWxUb2tlbldpZHRoICsgdGhpcy5tb3JlRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFkZCB0aGUgaW5wdXQgZ3JvdXAgYWRkb25cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRHcm91cEFkZG9uRWwgJiYgdGhpcy5pbnB1dEdyb3VwQWRkb25FbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0b3RhbFRva2VuV2lkdGggPSB0b3RhbFRva2VuV2lkdGggKyB0aGlzLmlucHV0R3JvdXBBZGRvbkVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG90YWxUb2tlbldpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW9yZUNsaWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9yZUNsaWNrZWRFdmVudC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZXMgYWxsIHNlbGVjdGVkIHRva2VucyAqL1xuICAgIHJlbW92ZVNlbGVjdGVkVG9rZW5zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5fZ2V0QWN0aXZlVG9rZW5zKCk7XG4gICAgICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gZWxlbWVudC5vblJlbW92ZS5lbWl0KCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlQXJyb3dMZWZ0KGZyb21JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIGlmIHRoZSBsZWZ0bW9zdCB2aXNpYmxlIHRva2VuIGlzIHNlbGVjdGVkLCBhbmQgdGhlcmUgYXJlIG1vcmVUb2tlbnNMZWZ0LCBuZWVkIHRvIGRpc3BsYXkgYSBtb3JlVG9rZW5MZWZ0XG4gICAgICAgIGlmIChmcm9tSW5kZXggPT09IHRoaXMubW9yZVRva2Vuc0xlZnQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBwb3BwZWRUb2tlbiA9IHRoaXMubW9yZVRva2Vuc0xlZnQucG9wKCk7XG4gICAgICAgICAgICBpZiAocG9wcGVkVG9rZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlRWxlbWVudFZpc2libGUocG9wcGVkVG9rZW4uZWxlbWVudFJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhbmQgdGhlbiBoaWRlIGFueSB0b2tlbnMgZnJvbSB0aGUgcmlnaHQgdGhhdCBubyBsb25nZXIgZml0XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZVRva2VucygncmlnaHQnKTtcblxuICAgICAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2hvd0FsbFRva2VucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9yY2VBbGxUb2tlbnNUb0Rpc3BsYXkgPSB0cnVlO1xuICAgICAgICB0aGlzLl9pbnB1dEVsZW1lbnRGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VFbGVtZW50VmlzaWJsZSh0b2tlbi5lbGVtZW50UmVmKTtcbiAgICAgICAgICAgIHRva2VuLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0b2tlbi5fY29udGVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl90b2tlbnNDb250YWluZXJXaWR0aCA9ICdhdXRvJztcbiAgICAgICAgdGhpcy5fc2hvd01vcmVFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hpZGVUb2tlbnMoKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50Rm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgdG9rZW5Gb2N1c2VkID0gdGhpcy5fZ2V0Rm9jdXNlZFRva2VuSW5kZXgoKSA+IC0xO1xuXG4gICAgICAgICAgICBpZiAodG9rZW5Gb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2FpdEZvckZvY3VzVG9EaXNhcHBlYXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9mb3JjZUFsbFRva2Vuc1RvRGlzcGxheSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRUb2tlbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF93YWl0Rm9yRm9jdXNUb0Rpc2FwcGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdG9rZW5FbGVtZW50Rm9jdXNlZFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgLy8gNSBtcyBkZWxheSBmb3Igb3RoZXIgdG9rZW4gdG8gcmVjZWl2ZSBmb2N1cywgY2hlY2sgaWYgX3Nob3dBbGxUb2tlbnMgd2FzIGNhbGxlZCBhZ2FpblxuICAgICAgICB0aGlzLl90b2tlbkVsZW1lbnRGb2N1c2VkU3ViID0gdGhpcy5fdG9rZW5FbGVtZW50Rm9jdXNlZFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoaXNGb2N1c2VkKSA9PiBpc0ZvY3VzZWQgJiYgIXRoaXMuX2lucHV0RWxlbWVudEZvY3VzZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWRlVG9rZW5zKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUFycm93UmlnaHQoZnJvbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZyb21JbmRleCA9PT0gdGhpcy50b2tlbkxpc3QubGVuZ3RoIC0gdGhpcy5tb3JlVG9rZW5zUmlnaHQubGVuZ3RoIC0gMSAmJiB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvcHBlZFRva2VuID0gdGhpcy5tb3JlVG9rZW5zUmlnaHQucG9wKCk7XG4gICAgICAgICAgICBpZiAocG9wcGVkVG9rZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlRWxlbWVudFZpc2libGUocG9wcGVkVG9rZW4uZWxlbWVudFJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhbmQgdGhlbiBoaWRlIGFueSB0b2tlbnMgZnJvbSB0aGUgbGVmdCB0aGF0IG5vIGxvbmdlciBmaXRcbiAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlVG9rZW5zKCdsZWZ0Jyk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29sbGFwc2VUb2tlbnMoc2lkZT86IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZm9yY2VBbGxUb2tlbnNUb0Rpc3BsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2NvbXBhY3QgJiYgIXRoaXMuY29tcGFjdENvbGxhcHNlKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRIaWRkZW5Db3p5VG9rZW5Db3VudCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5mb3JFYWNoKCh2aWV3Q29udGFpbmVyKSA9PiB2aWV3Q29udGFpbmVyLmNsZWFyKCkpO1xuXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gdGhpcy5fZ2V0VG9rZW5zQXJlYVdpZHRoV2l0aG91dFRva2VucygpO1xuXG4gICAgICAgIGlmICh0aGlzLnRva2VuTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuV2lkdGggPSB0aGlzLnRva2VuTGlzdC5nZXQoMCk/LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3Rva2Vuc0NvbnRhaW5lcldpZHRoID0gYXZhaWxhYmxlV2lkdGggPCB0b2tlbldpZHRoID8gYGNhbGMoMTAwJSAtICR7YXZhaWxhYmxlV2lkdGh9cHgpYCA6ICdhdXRvJztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3Rva2Vuc0NvbnRhaW5lcldpZHRoID0gJ2F1dG8nO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hlY2tNb3JlRWxlbWVudFZpc2liaWxpdHkoKTtcblxuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRva2VuLl9jb250ZW50KSk7XG5cbiAgICAgICAgbGV0IGVsZW1lbnRXaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICBsZXQgY29tYmluZWRUb2tlbldpZHRoID0gdGhpcy5nZXRDb21iaW5lZFRva2VuV2lkdGgoKTsgLy8gdGhlIGNvbWJpbmVkIHdpZHRoIG9mIGFsbCB0b2tlbnMsIHRoZSBcIl9fX18gbW9yZVwiIHRleHQsIGFuZCB0aGUgaW5wdXRcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAvKlxuICAgICAgICAgV2hlbiByZXNpemluZywgd2Ugd2FudCB0byBjb2xsYXBzZSB0aGUgdG9rZW5zIG9uIHRoZSBsZWZ0IGZpcnN0LiBIb3dldmVyLCB3aGVuIHRoZSB1c2VyIGlzIG5hdmlnYXRpbmcgdGhyb3VnaFxuICAgICAgICAgYSBncm91cCBvZiBvdmVyZmxvd2luZyB0b2tlbnMgdXNpbmcgdGhlIGFycm93IGxlZnQga2V5LCB3ZSBtYXkgbmVlZCB0byBoaWRlIHRva2VucyBvbiB0aGUgcmlnaHQuIFNvIGlmIHRoaXNcbiAgICAgICAgIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZCB3aXRoIHRoZSBwYXJhbSAncmlnaHQnIGl0IHdpbGwgY29sbGFwc2UgdG9rZW5zIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGxpc3QgcmF0aGVyXG4gICAgICAgICB0aGFuIHRoZSAoZGVmYXVsdCkgbGVmdCBzaWRlLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHNpZGUgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIGkgPSB0aGlzLnRva2VuTGlzdC5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjb21iaW5lZFRva2VuV2lkdGggPiBlbGVtZW50V2lkdGggJiYgKHNpZGUgPT09ICdyaWdodCcgPyBpID49IDAgOiBpIDwgdGhpcy50b2tlbkxpc3QubGVuZ3RoKSkge1xuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSB0b2tlbnMgYW5kIGhpZGUgdGhlbSB1bnRpbCB0aGUgY29tYmluZWRUb2tlbldpZHRoIGZpdHMgaW4gdGhlIGVsZW1lbnRXaWR0aFxuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2VuTGlzdC5nZXQoaSk7XG4gICAgICAgICAgICBjb25zdCBtb3JlVG9rZW5zID0gc2lkZSA9PT0gJ3JpZ2h0JyA/IHRoaXMubW9yZVRva2Vuc1JpZ2h0IDogdGhpcy5tb3JlVG9rZW5zTGVmdDtcblxuICAgICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vcmVUb2tlbnMuaW5kZXhPZih0b2tlbikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vcmVUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRva2VuLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZ2V0IHRoZSBuZXcgZWxlbWVudFdpZHRoIGFuZCBjb21iaW5lZFRva2VuV2lkdGggYXMgdGhlc2Ugd2lsbCBoYXZlIGNoYW5nZWQgYWZ0ZXIgc2V0dGluZyBhIHRva2VuIGRpc3BsYXkgdG8gJ25vbmUnXG4gICAgICAgICAgICBlbGVtZW50V2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrTW9yZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgICAgICAgICBjb21iaW5lZFRva2VuV2lkdGggPSB0aGlzLmdldENvbWJpbmVkVG9rZW5XaWR0aCgpO1xuICAgICAgICAgICAgc2lkZSA9PT0gJ3JpZ2h0JyA/IGktLSA6IGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3dPdmVyZmxvd1BvcG92ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2hpZGRlblRva2Vucy5mb3JFYWNoKChoaWRkZW5Ub2tlbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBoaWRkZW5Ub2tlbi5fdmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuZ2V0KGluZGV4KT8uY3JlYXRlRW1iZWRkZWRWaWV3KGhpZGRlblRva2VuLl9jb250ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNldFRva2VucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3JlVG9rZW5zTGVmdCA9IFtdO1xuICAgICAgICB0aGlzLm1vcmVUb2tlbnNSaWdodCA9IFtdO1xuICAgICAgICBpZiAodGhpcy5fY29tcGFjdCB8fCB0aGlzLmNvbXBhY3RDb2xsYXBzZSB8fCB0aGlzLl9mb3JjZUFsbFRva2Vuc1RvRGlzcGxheSkge1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlRWxlbWVudFZpc2libGUodG9rZW4uZWxlbWVudFJlZik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VUb2tlbnMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVUb2tlbkNsaWNrU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB0aGlzLnByZXZpb3VzVG9rZW5Db3VudCA9IHRoaXMudG9rZW5MaXN0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4sIGluZGV4KSA9PiB0b2tlbi5fc2V0VG90YWxDb3VudCh0aGlzLnRva2VuTGlzdC5sZW5ndGgsIGluZGV4ICsgMSkpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50TGVmdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIHRoaXMuaGlkZGVuQ296eVRva2VuQ291bnQgPSAwO1xuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRva2VuLnRva2VuV3JhcHBlckVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICB0b2tlbi50b2tlbldyYXBwZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgPCBlbGVtZW50TGVmdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRkZW5Db3p5VG9rZW5Db3VudCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jaGVja01vcmVFbGVtZW50VmlzaWJpbGl0eSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ296eVRva2VuQ291bnQoKTogdm9pZCB7XG4gICAgICAgIC8vIGJlY2F1c2UganVzdGlmeS1jb250ZW50IGJyZWFrcyBzY3JvbGxiYXIsIGl0IGNhbm5vdCBiZSB1c2VkIG9uIGNvenkgc2NyZWVucywgc28gdXNlIEpTIHRvIHNjcm9sbCB0byB0aGUgZW5kXG4gICAgICAgIHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgdGhpcy5fZ2V0SGlkZGVuQ296eVRva2VuQ291bnQoKTtcbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuQ296eVRva2VuQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGRvIHRoaXMgYWdhaW4gaW4gY2FzZSBcIl9fX18gbW9yZVwiIHRleHQgd2FzIGFkZGVkXG4gICAgICAgICAgICB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICB0aGlzLl9nZXRIaWRkZW5Db3p5VG9rZW5Db3VudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tYWtlRWxlbWVudFZpc2libGUoZWxlbWVudFJlZjogRWxlbWVudFJlZik6IHZvaWQge1xuICAgICAgICBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuICAgICAgICBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlQ2xpY2tzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnMgJiYgdGhpcy50b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbnB1dEtleWRvd25FdmVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMucHVzaChcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsICdrZXlkb3duJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlEb3duKGV2ZW50LCB0aGlzLnRva2VuTGlzdC5sZW5ndGgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBNZXRob2Qgd2hpY2ggaGFuZGxlcyB3aGF0IGhhcHBlbnMgdG8gdG9rZW4gd2hlbiBpdCBpcyBjbGlja2VkIGFuZCBubyBrZXkgaXMgYmVpbmcgaGVsZCBkb3duLiovXG4gICAgcHJpdmF0ZSBfYmFzaWNTZWxlY3RlZCh0b2tlbiwgaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgoc2hhZG93ZWRUb2tlbikgPT4ge1xuICAgICAgICAgICAgaWYgKHNoYWRvd2VkVG9rZW4gIT09IHRva2VuKSB7XG4gICAgICAgICAgICAgICAgc2hhZG93ZWRUb2tlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICB0b2tlbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2N0cmxQcmV2aW91cyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJlc3RhcnQgZmlyc3QgYW5kIGxhc3QgZWxlbWVudHMgZm9yIHNoaWZ0IHNlbGVjdGlvbi4qL1xuICAgIHByaXZhdGUgcmVzZXRGaXJzdEFuZExhc3RFbGVtZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNldCA9ICF0aGlzLnRva2VuTGlzdC5zb21lKCh0b2tlbikgPT4gdG9rZW4uc2VsZWN0ZWQpO1xuICAgICAgICBpZiAocmVzZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTWV0aG9kIHdoaWNoIGhhbmRsZXMgd2hhdCBoYXBwZW5zIHRvIHRva2VuIHdoZW4gaXQgaXMgY2xpY2tlZCBhbmQgdGhlIHNoaWZ0IGtleSBpcyBiZWluZyBoZWxkIGRvd24uKi9cbiAgICBwcml2YXRlIF9zaGlmdFNlbGVjdGVkKGluZGV4KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gJiYgIXRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uICYmIGluZGV4IDwgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiAmJiBpbmRleCA+IHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbiwgaW5kZXhPZlRva2VuKSA9PiB7XG4gICAgICAgICAgICB0b2tlbi5zZWxlY3RlZCA9XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGluZGV4T2ZUb2tlbiA+PSB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiAmJlxuICAgICAgICAgICAgICAgIGluZGV4T2ZUb2tlbiA8PSB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fY3RybFByZXZpb3VzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTWV0aG9kIHdoaWNoIGhhbmRsZXMgd2hhdCBoYXBwZW5zIHRvIHRva2VuIHdoZW4gaXQgaXMgY2xpY2tlZCBhbmQgdGhlIGNvbnRyb2wgb3IgbWV0YSBrZXkgaXMgYmVpbmcgaGVsZCBkb3duLiovXG4gICAgcHJpdmF0ZSBfY3RybFNlbGVjdGVkKHRva2VuLCBpbmRleCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRva2VuLnNlbGVjdGVkO1xuICAgICAgICB0b2tlbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgdG9rZW4uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKGVsZW1lbnQsIGluZGV4T2ZUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXhPZlRva2VuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4T2ZUb2tlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uISAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiEgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N0cmxQcmV2aW91cyA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEdldCBzZWxlY3RlZCBhbmQgZm9jdXNlZCB0b2tlbnMgKi9cbiAgICBwcml2YXRlIF9nZXRBY3RpdmVUb2tlbnMoKTogVG9rZW5Db21wb25lbnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uc2VsZWN0ZWQgfHwgdGhpcy5faXNUb2tlbkZvY3VzZWQoaXRlbSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0Rm9jdXNlZFRva2VuSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5MaXN0LnRvQXJyYXkoKS5maW5kSW5kZXgoKHRva2VuKSA9PiB0aGlzLl9pc1Rva2VuRm9jdXNlZCh0b2tlbikpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNUb2tlbkZvY3VzZWQodG9rZW46IFRva2VuQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0b2tlbi50b2tlbldyYXBwZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQgPT09IHRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc0lucHV0Rm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Rva2Vuc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbkxpc3Quc29tZSgodCkgPT4gdC5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c0lucHV0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzQ29udHJvbEtleShrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4ga2V5Ym9hcmRFdmVudC5jdHJsS2V5IHx8IGtleWJvYXJkRXZlbnQubWV0YUtleTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlbkVsZW1lbnRFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgZnJvbUV2ZW50PEV2ZW50Pih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2ZvY3VzJywgeyBjYXB0dXJlOiB0cnVlIH0pLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gKGV2ZW50Wyd0YXJnZXQnXSBhcyBhbnkpPy50YWdOYW1lID09PSAnSU5QVVQnICYmIHRoaXMudG9rZW5pemVyRm9jdXNhYmxlKSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdHJ1ZSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBmcm9tRXZlbnQ8RXZlbnQ+KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnYmx1cicsIHsgY2FwdHVyZTogdHJ1ZSB9KS5waXBlKG1hcCgoKSA9PiBmYWxzZSkpXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIGRlYm91bmNlVGltZSBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gZmlsdGVyIHN1YnNlcXVlbnQgZm9jdXMtYmx1ciBldmVudHMsIHRoYXQgaGFwcGVuIHNpbXVsdGFuZW91c2x5XG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZvY3VzZWQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl90b2tlbml6ZXJIYXNGb2N1cyA9IGZvY3VzZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBMaXN0ZW4gd2luZG93IHJlc2l6ZSBhbmQgZGlzdHJpYnV0ZSBjYXJkcyBvbiBjb2x1bW4gY2hhbmdlICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25SZXNpemUoKTtcbiAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgzMCksIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vblJlc2l6ZSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoZWNrTW9yZUVsZW1lbnRWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzaG93TW9yZUVsZW1lbnQgPVxuICAgICAgICAgICAgKHRoaXMubW9yZVRva2Vuc0xlZnQubGVuZ3RoID4gMCB8fCB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGggPiAwIHx8IHRoaXMuaGlkZGVuQ296eVRva2VuQ291bnQgPiAwKSAmJlxuICAgICAgICAgICAgIXRoaXMub3BlbiAmJlxuICAgICAgICAgICAgIXRoaXMuX3Rva2VuaXplckhhc0ZvY3VzO1xuXG4gICAgICAgIGlmIChzaG93TW9yZUVsZW1lbnQgPT09IHRoaXMuX3Nob3dNb3JlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2hvd01vcmVFbGVtZW50ID0gc2hvd01vcmVFbGVtZW50O1xuXG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJmZC10b2tlbml6ZXIgZmQtdG9rZW5pemVyLS1zY3JvbGxhYmxlXCJcbiAgICBbY2xhc3MuaXMtZm9jdXNdPVwiX3Rva2VuaXplckhhc0ZvY3VzXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidjb3JlVG9rZW5pemVyLnRva2VuaXplckxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtdG9rZW5pemVyX19pbm5lclwiICN0b2tlbml6ZXJJbm5lcj5cbiAgICAgICAgPGRpdiByb2xlPVwibGlzdGJveFwiIFtzdHlsZS53aWR0aF09XCJfdG9rZW5zQ29udGFpbmVyV2lkdGhcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkLXRva2VuXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dPdmVyZmxvd1BvcG92ZXIgJiYgKChfY29tcGFjdCQgfCBhc3luYykgfHwgY29tcGFjdENvbGxhcHNlKTsgZWxzZSBtb3JlRWxlbWVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRva2Vuc092ZXJmbG93XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmZC1mb3JtLWNvbnRyb2xdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIGZkLWlucHV0LWdyb3VwLWFkZG9uICpuZ0lmPVwiZ2x5cGhcIiAjaW5wdXRHcm91cEFkZE9uIFtidXR0b25dPVwidHJ1ZVwiIHBsYWNlbWVudD1cImFmdGVyXCI+XG4gICAgICAgIDxidXR0b24gZmQtYnV0dG9uIGNsYXNzPVwiZmQtdG9rZW5pemVyLWFkZG9uXCIgZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBbZ2x5cGhdPVwiZ2x5cGhcIiB0eXBlPVwiYnV0dG9uXCI+PC9idXR0b24+XG4gICAgPC9zcGFuPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdG9rZW5zT3ZlcmZsb3c+XG4gICAgPGZkLXBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tLXN0YXJ0XCIgdGl0bGU9XCJcIiBbbm9BcnJvd109XCJmYWxzZVwiIFtmb2N1c1RyYXBwZWRdPVwidHJ1ZVwiIFtmb2N1c0F1dG9DYXB0dXJlXT1cInRydWVcIj5cbiAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb3JlRWxlbWVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cblxuICAgICAgICA8ZmQtcG9wb3Zlci1ib2R5PlxuICAgICAgICAgICAgPHVsIGZkLWxpc3QgY2xhc3M9XCJmZC10b2tlbml6ZXJfX292ZXJmbG93LWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8bGkgZmQtbGlzdC1pdGVtIGNsYXNzPVwiZmQtdG9rZW5pemVyX19vdmVyZmxvdy1saXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgdG9rZW4gb2YgX2hpZGRlblRva2Vuc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICN2aWV3Q29udGFpbmVyPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiF0b2tlbi5yZWFkT25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXRva2VuX19jbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvcmVUb2tlbi5kZWxldGVCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9rZW4uY2xvc2VDbGlja0hhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9yZUVsZW1lbnQ+XG4gICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cIm1vcmVDbGlja2VkKClcIlxuICAgICAgICAqbmdJZj1cIl9zaG93TW9yZUVsZW1lbnQgJiYgX2hpZGRlblRva2Vucy5sZW5ndGggPiAwXCJcbiAgICAgICAgI21vcmVFbGVtZW50U3BhblxuICAgICAgICBjbGFzcz1cImZkLXRva2VuaXplci1tb3JlXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihfY29tcGFjdCQgfCBhc3luYykgfHwgY29tcGFjdENvbGxhcHNlXCI+XG4gICAgICAgICAgICB7eyAnY29yZVRva2VuaXplci5tb3JlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IGNvdW50OiBtb3JlVG9rZW5zTGVmdC5sZW5ndGggKyBtb3JlVG9rZW5zUmlnaHQubGVuZ3RoIH0gfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoX2NvbXBhY3QkIHwgYXN5bmMpID09PSBmYWxzZSAmJiAhY29tcGFjdENvbGxhcHNlXCI+XG4gICAgICAgICAgICB7eyAnY29yZVRva2VuaXplci5tb3JlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IGNvdW50OiBoaWRkZW5Db3p5VG9rZW5Db3VudCB9IH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=