@fundamental-ngx/core 0.43.11 → 0.43.13

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.
Files changed (39) hide show
  1. package/esm2020/busy-indicator/busy-indicator.component.mjs +2 -2
  2. package/esm2020/multi-combobox/multi-combobox.component.mjs +3 -3
  3. package/esm2020/multi-combobox/multi-combobox.module.mjs +8 -5
  4. package/esm2020/multi-input/multi-input.component.mjs +7 -4
  5. package/esm2020/multi-input/multi-input.module.mjs +8 -5
  6. package/esm2020/time/i18n/time-i18n.mjs +10 -4
  7. package/esm2020/time/time-column/time-column-config.mjs +1 -1
  8. package/esm2020/time/time-column/time-column.component.mjs +10 -6
  9. package/esm2020/time/time.component.mjs +8 -4
  10. package/esm2020/token/tokenizer.component.mjs +3 -3
  11. package/fesm2015/fundamental-ngx-core-busy-indicator.mjs +1 -1
  12. package/fesm2015/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
  13. package/fesm2015/fundamental-ngx-core-multi-combobox.mjs +9 -6
  14. package/fesm2015/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  15. package/fesm2015/fundamental-ngx-core-multi-input.mjs +13 -7
  16. package/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
  17. package/fesm2015/fundamental-ngx-core-time.mjs +25 -11
  18. package/fesm2015/fundamental-ngx-core-time.mjs.map +1 -1
  19. package/fesm2015/fundamental-ngx-core-token.mjs +2 -2
  20. package/fesm2015/fundamental-ngx-core-token.mjs.map +1 -1
  21. package/fesm2020/fundamental-ngx-core-busy-indicator.mjs +1 -1
  22. package/fesm2020/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
  23. package/fesm2020/fundamental-ngx-core-multi-combobox.mjs +9 -6
  24. package/fesm2020/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  25. package/fesm2020/fundamental-ngx-core-multi-input.mjs +13 -7
  26. package/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
  27. package/fesm2020/fundamental-ngx-core-time.mjs +25 -11
  28. package/fesm2020/fundamental-ngx-core-time.mjs.map +1 -1
  29. package/fesm2020/fundamental-ngx-core-token.mjs +2 -2
  30. package/fesm2020/fundamental-ngx-core-token.mjs.map +1 -1
  31. package/fundamental-ngx-core-v0.43.13.tgz +0 -0
  32. package/multi-combobox/multi-combobox.module.d.ts +1 -1
  33. package/multi-input/multi-input.component.d.ts +2 -0
  34. package/multi-input/multi-input.module.d.ts +1 -1
  35. package/package.json +3 -3
  36. package/schematics/add-dependencies/index.js +4 -4
  37. package/time/i18n/time-i18n.d.ts +6 -0
  38. package/time/time-column/time-column-config.d.ts +1 -0
  39. package/fundamental-ngx-core-v0.43.11.tgz +0 -0
@@ -651,7 +651,7 @@ export class TokenizerComponent {
651
651
  }
652
652
  }
653
653
  TokenizerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TokenizerComponent, deps: [{ token: i1.ContentDensityObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i2.RtlService, optional: true }, { token: i0.Renderer2 }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
654
- TokenizerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TokenizerComponent, selector: "fd-tokenizer", inputs: { class: "class", disableKeyboardDeletion: "disableKeyboardDeletion", compactCollapse: "compactCollapse", tokenizerFocusable: "tokenizerFocusable", inputValue: "inputValue", glyph: "glyph", moreTerm: "moreTerm", open: "open" }, outputs: { moreClickedEvent: "moreClickedEvent" }, host: { listeners: { "keydown": "keyDown($event)" } }, providers: [contentDensityObserverProviders()], queries: [{ propertyName: "input", first: true, predicate: i0.forwardRef(function () { return FormControlComponent; }), descendants: true, read: ElementRef }, { propertyName: "tokenList", predicate: i0.forwardRef(function () { return TokenComponent; }) }], viewQueries: [{ propertyName: "tokenizerInnerEl", first: true, predicate: ["tokenizerInner"], descendants: true }, { propertyName: "moreElement", first: true, predicate: ["moreElementSpan"], descendants: true }, { propertyName: "content", first: true, predicate: ["inputGroupAddOn"], descendants: true }, { propertyName: "_viewContainer", predicate: ["viewContainer"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"fd-tokenizer fd-tokenizer--scrollable\" [class.is-focus]=\"_tokenizerHasFocus\">\n <div class=\"fd-tokenizer__inner\" #tokenizerInner>\n <div role=\"listbox\" [style.width]=\"_tokensContainerWidth\">\n <ng-content select=\"fd-token\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showOverflowPopover && ((_compact$ | async) || compactCollapse); else moreElement\">\n <ng-container *ngTemplateOutlet=\"tokensOverflow\"></ng-container>\n </ng-container>\n\n <ng-content select=\"[fd-form-control]\"></ng-content>\n </div>\n <span fd-input-group-addon *ngIf=\"glyph\" #inputGroupAddOn [button]=\"true\" placement=\"after\">\n <button fd-button class=\"fd-tokenizer-addon\" fdType=\"transparent\" [glyph]=\"glyph\" type=\"button\"></button>\n </span>\n</div>\n\n<ng-template #tokensOverflow>\n <fd-popover placement=\"bottom-start\" title=\"\" [noArrow]=\"false\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"moreElement\"></ng-container>\n </fd-popover-control>\n\n <fd-popover-body>\n <ul fd-list class=\"fd-tokenizer__overflow-list\">\n <li fd-list-item class=\"fd-tokenizer__overflow-list-item\" *ngFor=\"let token of _hiddenTokens\">\n <ng-container #viewContainer></ng-container>\n\n <span\n *ngIf=\"!token.readOnly\"\n class=\"fd-token__close\"\n role=\"button\"\n [attr.aria-label]=\"token.deleteButtonLabel || ('coreToken.deleteButtonLabel' | fdTranslate)\"\n (click)=\"token.closeClickHandler($event)\"\n ></span>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #moreElement>\n <span\n (click)=\"moreClicked()\"\n *ngIf=\"_showMoreElement && _hiddenTokens.length > 0 && !_tokenizerHasFocus\"\n #moreElementSpan\n class=\"fd-tokenizer-more\"\n role=\"button\"\n tabindex=\"-1\"\n >\n <ng-container *ngIf=\"(_compact$ | async) || compactCollapse\">\n {{ 'coreTokenizer.moreLabel' | fdTranslate : { count: moreTokensLeft.length + moreTokensRight.length } }}\n </ng-container>\n <ng-container *ngIf=\"(_compact$ | async) === false && !compactCollapse\">\n {{ 'coreTokenizer.moreLabel' | fdTranslate : { count: hiddenCozyTokenCount } }}\n </ng-container>\n </span>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\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-tokenizer{-webkit-box-sizing:border-box;-webkit-box-shadow:none;-moz-appearance:none;-webkit-appearance:none;align-items:center;appearance:none;background:var(--sapField_BackgroundStyle, var(--sapField_BackgroundStyle));background-color:var(--sapField_Background, var(--sapField_Background));border:none;border-radius:var(--sapField_BorderCornerRadius);box-shadow:none;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapField_TextColor);cursor:text;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2.25rem;height:auto;line-height:var(--sapContent_LineHeight);margin:0;min-height:2.25rem;min-width:var(2.75rem, 2.75rem);outline:none;overflow:hidden;padding:0;text-overflow:ellipsis;text-shadow:var(--fdInput_Text_Shadow);white-space:nowrap;width:100%;z-index:1}.fd-tokenizer:after,.fd-tokenizer:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer::placeholder{color:var(--sapField_PlaceholderTextColor);font-style:var(--fdPlaceholder_Font_Style)}.fd-tokenizer[dir=rtl]::placeholder,[dir=rtl] .fd-tokenizer::placeholder{text-indent:.125rem}.fd-tokenizer::selection{background-color:var(--sapSelectedColor);color:var(--sapContent_ContrastTextColor)}.fd-tokenizer::-ms-clear{display:none}.fd-tokenizer.is-hover,.fd-tokenizer:hover{-webkit-box-shadow:var(--fdInput_Box_Shadow_Hover);background:var(--sapField_Hover_BackgroundStyle, var(--sapField_Hover_BackgroundStyle));background-color:var(--sapField_Hover_Background, var(--sapField_Hover_Background));border-color:var(--sapField_Hover_BorderColor);box-shadow:var(--fdInput_Box_Shadow_Hover)}.fd-tokenizer.is-focus,.fd-tokenizer:focus{background:var(--sapField_Focus_Background, var(--sapField_Focus_Background));outline-color:var(--fdInput_Outline_Color);outline-offset:var(--fdInput_Outline_Offset)}.fd-tokenizer.is-hover,.fd-tokenizer:hover{box-shadow:none}.fd-tokenizer__inner{-ms-overflow-style:none;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:end;-ms-flex-pack:end;align-items:center;display:flex;float:right;justify-content:flex-end;overflow:hidden;padding:var(--fdTokenizer_Inner_Padding, 0 .3125rem);scrollbar-width:none;white-space:nowrap;width:100%}.fd-tokenizer__inner::-webkit-scrollbar{display:none}.fd-tokenizer .fd-token{margin-right:.3125rem;max-width:calc(100% - 3.3125rem)}.fd-tokenizer .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer__indicator{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);cursor:pointer;display:inline-block;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-tokenizer__indicator:after,.fd-tokenizer__indicator:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer .fd-tokenizer__input{background:transparent}.fd-tokenizer .fd-tokenizer__input.fd-input{border:none;min-width:var(--fdTokenizer_Input_Width, 3rem);padding:0}.fd-tokenizer .fd-tokenizer__input:first-child{padding:0 .3125rem}.fd-tokenizer .fd-tokenizer__input:last-child{flex-basis:100%}.fd-tokenizer .fd-tokenizer__input.is-focus,.fd-tokenizer .fd-tokenizer__input:focus{border:none;outline:none;z-index:5}.fd-tokenizer .fd-tokenizer__input.is-focus,.fd-tokenizer .fd-tokenizer__input.is-hover,.fd-tokenizer .fd-tokenizer__input:focus,.fd-tokenizer .fd-tokenizer__input:hover{-webkit-box-shadow:none;background:none;background-color:var(transparent, transparent);box-shadow:none}.fd-tokenizer.is-focus,.fd-tokenizer:focus{-webkit-box-shadow:none;border:none;box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:-.0625rem;outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth);z-index:5}.fd-tokenizer[class*=-compact],.fd-tokenizer[class*=-condensed],[class*=-compact] .fd-tokenizer:not([class*=-cozy]),[class*=-condensed] .fd-tokenizer:not([class*=-cozy]){--fdTokenizer_Inner_Padding:0 .25rem;--fdInput_Field_Compact_Min_Width:2rem;height:1.625rem;min-height:1.625rem}.fd-tokenizer[class*=-compact] .fd-tokenizer__input:first-child,.fd-tokenizer[class*=-condensed] .fd-tokenizer__input:first-child,[class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-tokenizer__input:first-child,[class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-tokenizer__input:first-child{padding:0 .25rem}.fd-tokenizer[class*=-compact] .fd-token,.fd-tokenizer[class*=-condensed] .fd-token,[class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-token,[class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-token{margin-right:.25rem;max-width:calc(100% - 2.25rem)}.fd-tokenizer[class*=-compact] .fd-token[dir=rtl],.fd-tokenizer[class*=-condensed] .fd-token[dir=rtl],[class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-token[dir=rtl],[class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer[class*=-compact] .fd-token,[dir=rtl] .fd-tokenizer[class*=-condensed] .fd-token,[dir=rtl] [class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-token,[dir=rtl] [class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer--readonly{background-color:var(--sapField_ReadOnly_Background);overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__inner{overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true],.fd-tokenizer--readonly .fd-tokenizer__input[readonly]{-webkit-box-shadow:none;background:none;background-color:var(transparent, transparent);box-shadow:none}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly.is-focus,.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly:focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true]:focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly]:focus{-webkit-box-shadow:none;background:none;background-color:var(transparent, transparent);box-shadow:none;z-index:5}.fd-tokenizer--scrollable .fd-tokenizer__inner{justify-content:normal;overflow:scroll}.fd-tokenizer .fd-token{max-width:inherit!important}input.fd-input.fd-tokenizer__input{background-color:transparent;margin-right:1px;border:none;outline:none}.fd-tokenizer-more{padding-right:.5rem;color:var(--sapLinkColor);cursor:pointer}[dir=rtl] .fd-tokenizer-more,.fd-tokenizer-more[dir=rtl]{padding-left:.5rem;padding-right:0}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon{height:2.25rem}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon--compact{height:1.625rem}.fd-tokenizer__overflow-list-item{display:flex;justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.InputGroupAddOnDirective, selector: "[fdInputGroupAddon], [fd-input-group-addon]", inputs: ["class", "placement", "type", "state", "button"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i6.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i6.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i7.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i7.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
654
+ TokenizerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TokenizerComponent, selector: "fd-tokenizer", inputs: { class: "class", disableKeyboardDeletion: "disableKeyboardDeletion", compactCollapse: "compactCollapse", tokenizerFocusable: "tokenizerFocusable", inputValue: "inputValue", glyph: "glyph", moreTerm: "moreTerm", open: "open" }, outputs: { moreClickedEvent: "moreClickedEvent" }, host: { listeners: { "keydown": "keyDown($event)" } }, providers: [contentDensityObserverProviders()], queries: [{ propertyName: "input", first: true, predicate: i0.forwardRef(function () { return FormControlComponent; }), descendants: true, read: ElementRef }, { propertyName: "tokenList", predicate: i0.forwardRef(function () { return TokenComponent; }) }], viewQueries: [{ propertyName: "tokenizerInnerEl", first: true, predicate: ["tokenizerInner"], descendants: true }, { propertyName: "moreElement", first: true, predicate: ["moreElementSpan"], descendants: true }, { propertyName: "content", first: true, predicate: ["inputGroupAddOn"], descendants: true }, { propertyName: "_viewContainer", predicate: ["viewContainer"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"fd-tokenizer fd-tokenizer--scrollable\"\n [class.is-focus]=\"_tokenizerHasFocus\"\n [attr.aria-label]=\"'coreTokenizer.tokenizerLabel' | fdTranslate\"\n>\n <div class=\"fd-tokenizer__inner\" #tokenizerInner>\n <div role=\"listbox\" [style.width]=\"_tokensContainerWidth\">\n <ng-content select=\"fd-token\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showOverflowPopover && ((_compact$ | async) || compactCollapse); else moreElement\">\n <ng-container *ngTemplateOutlet=\"tokensOverflow\"></ng-container>\n </ng-container>\n\n <ng-content select=\"[fd-form-control]\"></ng-content>\n </div>\n <span fd-input-group-addon *ngIf=\"glyph\" #inputGroupAddOn [button]=\"true\" placement=\"after\">\n <button fd-button class=\"fd-tokenizer-addon\" fdType=\"transparent\" [glyph]=\"glyph\" type=\"button\"></button>\n </span>\n</div>\n\n<ng-template #tokensOverflow>\n <fd-popover placement=\"bottom-start\" title=\"\" [noArrow]=\"false\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"moreElement\"></ng-container>\n </fd-popover-control>\n\n <fd-popover-body>\n <ul fd-list class=\"fd-tokenizer__overflow-list\">\n <li fd-list-item class=\"fd-tokenizer__overflow-list-item\" *ngFor=\"let token of _hiddenTokens\">\n <ng-container #viewContainer></ng-container>\n\n <span\n *ngIf=\"!token.readOnly\"\n class=\"fd-token__close\"\n role=\"button\"\n [attr.aria-label]=\"token.deleteButtonLabel || ('coreToken.deleteButtonLabel' | fdTranslate)\"\n (click)=\"token.closeClickHandler($event)\"\n ></span>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #moreElement>\n <span\n (click)=\"moreClicked()\"\n *ngIf=\"_showMoreElement && _hiddenTokens.length > 0 && !_tokenizerHasFocus\"\n #moreElementSpan\n class=\"fd-tokenizer-more\"\n role=\"button\"\n tabindex=\"-1\"\n >\n <ng-container *ngIf=\"(_compact$ | async) || compactCollapse\">\n {{ 'coreTokenizer.moreLabel' | fdTranslate : { count: moreTokensLeft.length + moreTokensRight.length } }}\n </ng-container>\n <ng-container *ngIf=\"(_compact$ | async) === false && !compactCollapse\">\n {{ 'coreTokenizer.moreLabel' | fdTranslate : { count: hiddenCozyTokenCount } }}\n </ng-container>\n </span>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\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-tokenizer{-webkit-box-sizing:border-box;-webkit-box-shadow:none;-moz-appearance:none;-webkit-appearance:none;align-items:center;appearance:none;background:var(--sapField_BackgroundStyle, var(--sapField_BackgroundStyle));background-color:var(--sapField_Background, var(--sapField_Background));border:none;border-radius:var(--sapField_BorderCornerRadius);box-shadow:none;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapField_TextColor);cursor:text;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2.25rem;height:auto;line-height:var(--sapContent_LineHeight);margin:0;min-height:2.25rem;min-width:var(2.75rem, 2.75rem);outline:none;overflow:hidden;padding:0;text-overflow:ellipsis;text-shadow:var(--fdInput_Text_Shadow);white-space:nowrap;width:100%;z-index:1}.fd-tokenizer:after,.fd-tokenizer:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer::placeholder{color:var(--sapField_PlaceholderTextColor);font-style:var(--fdPlaceholder_Font_Style)}.fd-tokenizer[dir=rtl]::placeholder,[dir=rtl] .fd-tokenizer::placeholder{text-indent:.125rem}.fd-tokenizer::selection{background-color:var(--sapSelectedColor);color:var(--sapContent_ContrastTextColor)}.fd-tokenizer::-ms-clear{display:none}.fd-tokenizer.is-hover,.fd-tokenizer:hover{-webkit-box-shadow:var(--fdInput_Box_Shadow_Hover);background:var(--sapField_Hover_BackgroundStyle, var(--sapField_Hover_BackgroundStyle));background-color:var(--sapField_Hover_Background, var(--sapField_Hover_Background));border-color:var(--sapField_Hover_BorderColor);box-shadow:var(--fdInput_Box_Shadow_Hover)}.fd-tokenizer.is-focus,.fd-tokenizer:focus{background:var(--sapField_Focus_Background, var(--sapField_Focus_Background));outline-color:var(--fdInput_Outline_Color);outline-offset:var(--fdInput_Outline_Offset)}.fd-tokenizer.is-hover,.fd-tokenizer:hover{box-shadow:none}.fd-tokenizer__inner{-ms-overflow-style:none;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:end;-ms-flex-pack:end;align-items:center;display:flex;float:right;justify-content:flex-end;overflow:hidden;padding:var(--fdTokenizer_Inner_Padding, 0 .3125rem);scrollbar-width:none;white-space:nowrap;width:100%}.fd-tokenizer__inner::-webkit-scrollbar{display:none}.fd-tokenizer .fd-token{margin-right:.3125rem;max-width:calc(100% - 3.3125rem)}.fd-tokenizer .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer__indicator{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);cursor:pointer;display:inline-block;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-tokenizer__indicator:after,.fd-tokenizer__indicator:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer .fd-tokenizer__input{background:transparent}.fd-tokenizer .fd-tokenizer__input.fd-input{border:none;min-width:var(--fdTokenizer_Input_Width, 3rem);padding:0}.fd-tokenizer .fd-tokenizer__input:first-child{padding:0 .3125rem}.fd-tokenizer .fd-tokenizer__input:last-child{flex-basis:100%}.fd-tokenizer .fd-tokenizer__input.is-focus,.fd-tokenizer .fd-tokenizer__input:focus{border:none;outline:none;z-index:5}.fd-tokenizer .fd-tokenizer__input.is-focus,.fd-tokenizer .fd-tokenizer__input.is-hover,.fd-tokenizer .fd-tokenizer__input:focus,.fd-tokenizer .fd-tokenizer__input:hover{-webkit-box-shadow:none;background:none;background-color:var(transparent, transparent);box-shadow:none}.fd-tokenizer.is-focus,.fd-tokenizer:focus{-webkit-box-shadow:none;border:none;box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:-.0625rem;outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth);z-index:5}.fd-tokenizer[class*=-compact],.fd-tokenizer[class*=-condensed],[class*=-compact] .fd-tokenizer:not([class*=-cozy]),[class*=-condensed] .fd-tokenizer:not([class*=-cozy]){--fdTokenizer_Inner_Padding:0 .25rem;--fdInput_Field_Compact_Min_Width:2rem;height:1.625rem;min-height:1.625rem}.fd-tokenizer[class*=-compact] .fd-tokenizer__input:first-child,.fd-tokenizer[class*=-condensed] .fd-tokenizer__input:first-child,[class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-tokenizer__input:first-child,[class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-tokenizer__input:first-child{padding:0 .25rem}.fd-tokenizer[class*=-compact] .fd-token,.fd-tokenizer[class*=-condensed] .fd-token,[class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-token,[class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-token{margin-right:.25rem;max-width:calc(100% - 2.25rem)}.fd-tokenizer[class*=-compact] .fd-token[dir=rtl],.fd-tokenizer[class*=-condensed] .fd-token[dir=rtl],[class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-token[dir=rtl],[class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer[class*=-compact] .fd-token,[dir=rtl] .fd-tokenizer[class*=-condensed] .fd-token,[dir=rtl] [class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-token,[dir=rtl] [class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer--readonly{background-color:var(--sapField_ReadOnly_Background);overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__inner{overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true],.fd-tokenizer--readonly .fd-tokenizer__input[readonly]{-webkit-box-shadow:none;background:none;background-color:var(transparent, transparent);box-shadow:none}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly.is-focus,.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly:focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true]:focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly]:focus{-webkit-box-shadow:none;background:none;background-color:var(transparent, transparent);box-shadow:none;z-index:5}.fd-tokenizer--scrollable .fd-tokenizer__inner{justify-content:normal;overflow:scroll}.fd-tokenizer .fd-token{max-width:inherit!important}input.fd-input.fd-tokenizer__input{background-color:transparent;margin-right:1px;border:none;outline:none}.fd-tokenizer-more{padding-right:.5rem;color:var(--sapLinkColor);cursor:pointer}[dir=rtl] .fd-tokenizer-more,.fd-tokenizer-more[dir=rtl]{padding-left:.5rem;padding-right:0}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon{height:2.25rem}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon--compact{height:1.625rem}.fd-tokenizer__overflow-list-item{display:flex;justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.InputGroupAddOnDirective, selector: "[fdInputGroupAddon], [fd-input-group-addon]", inputs: ["class", "placement", "type", "state", "button"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i6.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i6.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i7.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i7.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
655
655
  __decorate([
656
656
  applyCssClass,
657
657
  __metadata("design:type", Function),
@@ -660,7 +660,7 @@ __decorate([
660
660
  ], TokenizerComponent.prototype, "buildComponentCssClass", null);
661
661
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TokenizerComponent, decorators: [{
662
662
  type: Component,
663
- args: [{ selector: 'fd-tokenizer', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [contentDensityObserverProviders()], template: "<div class=\"fd-tokenizer fd-tokenizer--scrollable\" [class.is-focus]=\"_tokenizerHasFocus\">\n <div class=\"fd-tokenizer__inner\" #tokenizerInner>\n <div role=\"listbox\" [style.width]=\"_tokensContainerWidth\">\n <ng-content select=\"fd-token\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showOverflowPopover && ((_compact$ | async) || compactCollapse); else moreElement\">\n <ng-container *ngTemplateOutlet=\"tokensOverflow\"></ng-container>\n </ng-container>\n\n <ng-content select=\"[fd-form-control]\"></ng-content>\n </div>\n <span fd-input-group-addon *ngIf=\"glyph\" #inputGroupAddOn [button]=\"true\" placement=\"after\">\n <button fd-button class=\"fd-tokenizer-addon\" fdType=\"transparent\" [glyph]=\"glyph\" type=\"button\"></button>\n </span>\n</div>\n\n<ng-template #tokensOverflow>\n <fd-popover placement=\"bottom-start\" title=\"\" [noArrow]=\"false\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"moreElement\"></ng-container>\n </fd-popover-control>\n\n <fd-popover-body>\n <ul fd-list class=\"fd-tokenizer__overflow-list\">\n <li fd-list-item class=\"fd-tokenizer__overflow-list-item\" *ngFor=\"let token of _hiddenTokens\">\n <ng-container #viewContainer></ng-container>\n\n <span\n *ngIf=\"!token.readOnly\"\n class=\"fd-token__close\"\n role=\"button\"\n [attr.aria-label]=\"token.deleteButtonLabel || ('coreToken.deleteButtonLabel' | fdTranslate)\"\n (click)=\"token.closeClickHandler($event)\"\n ></span>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #moreElement>\n <span\n (click)=\"moreClicked()\"\n *ngIf=\"_showMoreElement && _hiddenTokens.length > 0 && !_tokenizerHasFocus\"\n #moreElementSpan\n class=\"fd-tokenizer-more\"\n role=\"button\"\n tabindex=\"-1\"\n >\n <ng-container *ngIf=\"(_compact$ | async) || compactCollapse\">\n {{ 'coreTokenizer.moreLabel' | fdTranslate : { count: moreTokensLeft.length + moreTokensRight.length } }}\n </ng-container>\n <ng-container *ngIf=\"(_compact$ | async) === false && !compactCollapse\">\n {{ 'coreTokenizer.moreLabel' | fdTranslate : { count: hiddenCozyTokenCount } }}\n </ng-container>\n </span>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\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-tokenizer{-webkit-box-sizing:border-box;-webkit-box-shadow:none;-moz-appearance:none;-webkit-appearance:none;align-items:center;appearance:none;background:var(--sapField_BackgroundStyle, var(--sapField_BackgroundStyle));background-color:var(--sapField_Background, var(--sapField_Background));border:none;border-radius:var(--sapField_BorderCornerRadius);box-shadow:none;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapField_TextColor);cursor:text;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2.25rem;height:auto;line-height:var(--sapContent_LineHeight);margin:0;min-height:2.25rem;min-width:var(2.75rem, 2.75rem);outline:none;overflow:hidden;padding:0;text-overflow:ellipsis;text-shadow:var(--fdInput_Text_Shadow);white-space:nowrap;width:100%;z-index:1}.fd-tokenizer:after,.fd-tokenizer:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer::placeholder{color:var(--sapField_PlaceholderTextColor);font-style:var(--fdPlaceholder_Font_Style)}.fd-tokenizer[dir=rtl]::placeholder,[dir=rtl] .fd-tokenizer::placeholder{text-indent:.125rem}.fd-tokenizer::selection{background-color:var(--sapSelectedColor);color:var(--sapContent_ContrastTextColor)}.fd-tokenizer::-ms-clear{display:none}.fd-tokenizer.is-hover,.fd-tokenizer:hover{-webkit-box-shadow:var(--fdInput_Box_Shadow_Hover);background:var(--sapField_Hover_BackgroundStyle, var(--sapField_Hover_BackgroundStyle));background-color:var(--sapField_Hover_Background, var(--sapField_Hover_Background));border-color:var(--sapField_Hover_BorderColor);box-shadow:var(--fdInput_Box_Shadow_Hover)}.fd-tokenizer.is-focus,.fd-tokenizer:focus{background:var(--sapField_Focus_Background, var(--sapField_Focus_Background));outline-color:var(--fdInput_Outline_Color);outline-offset:var(--fdInput_Outline_Offset)}.fd-tokenizer.is-hover,.fd-tokenizer:hover{box-shadow:none}.fd-tokenizer__inner{-ms-overflow-style:none;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:end;-ms-flex-pack:end;align-items:center;display:flex;float:right;justify-content:flex-end;overflow:hidden;padding:var(--fdTokenizer_Inner_Padding, 0 .3125rem);scrollbar-width:none;white-space:nowrap;width:100%}.fd-tokenizer__inner::-webkit-scrollbar{display:none}.fd-tokenizer .fd-token{margin-right:.3125rem;max-width:calc(100% - 3.3125rem)}.fd-tokenizer .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer__indicator{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);cursor:pointer;display:inline-block;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-tokenizer__indicator:after,.fd-tokenizer__indicator:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer .fd-tokenizer__input{background:transparent}.fd-tokenizer .fd-tokenizer__input.fd-input{border:none;min-width:var(--fdTokenizer_Input_Width, 3rem);padding:0}.fd-tokenizer .fd-tokenizer__input:first-child{padding:0 .3125rem}.fd-tokenizer .fd-tokenizer__input:last-child{flex-basis:100%}.fd-tokenizer .fd-tokenizer__input.is-focus,.fd-tokenizer .fd-tokenizer__input:focus{border:none;outline:none;z-index:5}.fd-tokenizer .fd-tokenizer__input.is-focus,.fd-tokenizer .fd-tokenizer__input.is-hover,.fd-tokenizer .fd-tokenizer__input:focus,.fd-tokenizer .fd-tokenizer__input:hover{-webkit-box-shadow:none;background:none;background-color:var(transparent, transparent);box-shadow:none}.fd-tokenizer.is-focus,.fd-tokenizer:focus{-webkit-box-shadow:none;border:none;box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:-.0625rem;outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth);z-index:5}.fd-tokenizer[class*=-compact],.fd-tokenizer[class*=-condensed],[class*=-compact] .fd-tokenizer:not([class*=-cozy]),[class*=-condensed] .fd-tokenizer:not([class*=-cozy]){--fdTokenizer_Inner_Padding:0 .25rem;--fdInput_Field_Compact_Min_Width:2rem;height:1.625rem;min-height:1.625rem}.fd-tokenizer[class*=-compact] .fd-tokenizer__input:first-child,.fd-tokenizer[class*=-condensed] .fd-tokenizer__input:first-child,[class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-tokenizer__input:first-child,[class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-tokenizer__input:first-child{padding:0 .25rem}.fd-tokenizer[class*=-compact] .fd-token,.fd-tokenizer[class*=-condensed] .fd-token,[class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-token,[class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-token{margin-right:.25rem;max-width:calc(100% - 2.25rem)}.fd-tokenizer[class*=-compact] .fd-token[dir=rtl],.fd-tokenizer[class*=-condensed] .fd-token[dir=rtl],[class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-token[dir=rtl],[class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer[class*=-compact] .fd-token,[dir=rtl] .fd-tokenizer[class*=-condensed] .fd-token,[dir=rtl] [class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-token,[dir=rtl] [class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer--readonly{background-color:var(--sapField_ReadOnly_Background);overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__inner{overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true],.fd-tokenizer--readonly .fd-tokenizer__input[readonly]{-webkit-box-shadow:none;background:none;background-color:var(transparent, transparent);box-shadow:none}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly.is-focus,.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly:focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true]:focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly]:focus{-webkit-box-shadow:none;background:none;background-color:var(transparent, transparent);box-shadow:none;z-index:5}.fd-tokenizer--scrollable .fd-tokenizer__inner{justify-content:normal;overflow:scroll}.fd-tokenizer .fd-token{max-width:inherit!important}input.fd-input.fd-tokenizer__input{background-color:transparent;margin-right:1px;border:none;outline:none}.fd-tokenizer-more{padding-right:.5rem;color:var(--sapLinkColor);cursor:pointer}[dir=rtl] .fd-tokenizer-more,.fd-tokenizer-more[dir=rtl]{padding-left:.5rem;padding-right:0}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon{height:2.25rem}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon--compact{height:1.625rem}.fd-tokenizer__overflow-list-item{display:flex;justify-content:space-between}\n"] }]
663
+ args: [{ selector: 'fd-tokenizer', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [contentDensityObserverProviders()], template: "<div\n class=\"fd-tokenizer fd-tokenizer--scrollable\"\n [class.is-focus]=\"_tokenizerHasFocus\"\n [attr.aria-label]=\"'coreTokenizer.tokenizerLabel' | fdTranslate\"\n>\n <div class=\"fd-tokenizer__inner\" #tokenizerInner>\n <div role=\"listbox\" [style.width]=\"_tokensContainerWidth\">\n <ng-content select=\"fd-token\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showOverflowPopover && ((_compact$ | async) || compactCollapse); else moreElement\">\n <ng-container *ngTemplateOutlet=\"tokensOverflow\"></ng-container>\n </ng-container>\n\n <ng-content select=\"[fd-form-control]\"></ng-content>\n </div>\n <span fd-input-group-addon *ngIf=\"glyph\" #inputGroupAddOn [button]=\"true\" placement=\"after\">\n <button fd-button class=\"fd-tokenizer-addon\" fdType=\"transparent\" [glyph]=\"glyph\" type=\"button\"></button>\n </span>\n</div>\n\n<ng-template #tokensOverflow>\n <fd-popover placement=\"bottom-start\" title=\"\" [noArrow]=\"false\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"moreElement\"></ng-container>\n </fd-popover-control>\n\n <fd-popover-body>\n <ul fd-list class=\"fd-tokenizer__overflow-list\">\n <li fd-list-item class=\"fd-tokenizer__overflow-list-item\" *ngFor=\"let token of _hiddenTokens\">\n <ng-container #viewContainer></ng-container>\n\n <span\n *ngIf=\"!token.readOnly\"\n class=\"fd-token__close\"\n role=\"button\"\n [attr.aria-label]=\"token.deleteButtonLabel || ('coreToken.deleteButtonLabel' | fdTranslate)\"\n (click)=\"token.closeClickHandler($event)\"\n ></span>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #moreElement>\n <span\n (click)=\"moreClicked()\"\n *ngIf=\"_showMoreElement && _hiddenTokens.length > 0 && !_tokenizerHasFocus\"\n #moreElementSpan\n class=\"fd-tokenizer-more\"\n role=\"button\"\n tabindex=\"-1\"\n >\n <ng-container *ngIf=\"(_compact$ | async) || compactCollapse\">\n {{ 'coreTokenizer.moreLabel' | fdTranslate : { count: moreTokensLeft.length + moreTokensRight.length } }}\n </ng-container>\n <ng-container *ngIf=\"(_compact$ | async) === false && !compactCollapse\">\n {{ 'coreTokenizer.moreLabel' | fdTranslate : { count: hiddenCozyTokenCount } }}\n </ng-container>\n </span>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\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-tokenizer{-webkit-box-sizing:border-box;-webkit-box-shadow:none;-moz-appearance:none;-webkit-appearance:none;align-items:center;appearance:none;background:var(--sapField_BackgroundStyle, var(--sapField_BackgroundStyle));background-color:var(--sapField_Background, var(--sapField_Background));border:none;border-radius:var(--sapField_BorderCornerRadius);box-shadow:none;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapField_TextColor);cursor:text;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2.25rem;height:auto;line-height:var(--sapContent_LineHeight);margin:0;min-height:2.25rem;min-width:var(2.75rem, 2.75rem);outline:none;overflow:hidden;padding:0;text-overflow:ellipsis;text-shadow:var(--fdInput_Text_Shadow);white-space:nowrap;width:100%;z-index:1}.fd-tokenizer:after,.fd-tokenizer:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer::placeholder{color:var(--sapField_PlaceholderTextColor);font-style:var(--fdPlaceholder_Font_Style)}.fd-tokenizer[dir=rtl]::placeholder,[dir=rtl] .fd-tokenizer::placeholder{text-indent:.125rem}.fd-tokenizer::selection{background-color:var(--sapSelectedColor);color:var(--sapContent_ContrastTextColor)}.fd-tokenizer::-ms-clear{display:none}.fd-tokenizer.is-hover,.fd-tokenizer:hover{-webkit-box-shadow:var(--fdInput_Box_Shadow_Hover);background:var(--sapField_Hover_BackgroundStyle, var(--sapField_Hover_BackgroundStyle));background-color:var(--sapField_Hover_Background, var(--sapField_Hover_Background));border-color:var(--sapField_Hover_BorderColor);box-shadow:var(--fdInput_Box_Shadow_Hover)}.fd-tokenizer.is-focus,.fd-tokenizer:focus{background:var(--sapField_Focus_Background, var(--sapField_Focus_Background));outline-color:var(--fdInput_Outline_Color);outline-offset:var(--fdInput_Outline_Offset)}.fd-tokenizer.is-hover,.fd-tokenizer:hover{box-shadow:none}.fd-tokenizer__inner{-ms-overflow-style:none;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:end;-ms-flex-pack:end;align-items:center;display:flex;float:right;justify-content:flex-end;overflow:hidden;padding:var(--fdTokenizer_Inner_Padding, 0 .3125rem);scrollbar-width:none;white-space:nowrap;width:100%}.fd-tokenizer__inner::-webkit-scrollbar{display:none}.fd-tokenizer .fd-token{margin-right:.3125rem;max-width:calc(100% - 3.3125rem)}.fd-tokenizer .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer__indicator{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);cursor:pointer;display:inline-block;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-tokenizer__indicator:after,.fd-tokenizer__indicator:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer .fd-tokenizer__input{background:transparent}.fd-tokenizer .fd-tokenizer__input.fd-input{border:none;min-width:var(--fdTokenizer_Input_Width, 3rem);padding:0}.fd-tokenizer .fd-tokenizer__input:first-child{padding:0 .3125rem}.fd-tokenizer .fd-tokenizer__input:last-child{flex-basis:100%}.fd-tokenizer .fd-tokenizer__input.is-focus,.fd-tokenizer .fd-tokenizer__input:focus{border:none;outline:none;z-index:5}.fd-tokenizer .fd-tokenizer__input.is-focus,.fd-tokenizer .fd-tokenizer__input.is-hover,.fd-tokenizer .fd-tokenizer__input:focus,.fd-tokenizer .fd-tokenizer__input:hover{-webkit-box-shadow:none;background:none;background-color:var(transparent, transparent);box-shadow:none}.fd-tokenizer.is-focus,.fd-tokenizer:focus{-webkit-box-shadow:none;border:none;box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:-.0625rem;outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth);z-index:5}.fd-tokenizer[class*=-compact],.fd-tokenizer[class*=-condensed],[class*=-compact] .fd-tokenizer:not([class*=-cozy]),[class*=-condensed] .fd-tokenizer:not([class*=-cozy]){--fdTokenizer_Inner_Padding:0 .25rem;--fdInput_Field_Compact_Min_Width:2rem;height:1.625rem;min-height:1.625rem}.fd-tokenizer[class*=-compact] .fd-tokenizer__input:first-child,.fd-tokenizer[class*=-condensed] .fd-tokenizer__input:first-child,[class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-tokenizer__input:first-child,[class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-tokenizer__input:first-child{padding:0 .25rem}.fd-tokenizer[class*=-compact] .fd-token,.fd-tokenizer[class*=-condensed] .fd-token,[class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-token,[class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-token{margin-right:.25rem;max-width:calc(100% - 2.25rem)}.fd-tokenizer[class*=-compact] .fd-token[dir=rtl],.fd-tokenizer[class*=-condensed] .fd-token[dir=rtl],[class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-token[dir=rtl],[class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer[class*=-compact] .fd-token,[dir=rtl] .fd-tokenizer[class*=-condensed] .fd-token,[dir=rtl] [class*=-compact] .fd-tokenizer:not([class*=-cozy]) .fd-token,[dir=rtl] [class*=-condensed] .fd-tokenizer:not([class*=-cozy]) .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer--readonly{background-color:var(--sapField_ReadOnly_Background);overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__inner{overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true],.fd-tokenizer--readonly .fd-tokenizer__input[readonly]{-webkit-box-shadow:none;background:none;background-color:var(transparent, transparent);box-shadow:none}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly.is-focus,.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly:focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true]:focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly]:focus{-webkit-box-shadow:none;background:none;background-color:var(transparent, transparent);box-shadow:none;z-index:5}.fd-tokenizer--scrollable .fd-tokenizer__inner{justify-content:normal;overflow:scroll}.fd-tokenizer .fd-token{max-width:inherit!important}input.fd-input.fd-tokenizer__input{background-color:transparent;margin-right:1px;border:none;outline:none}.fd-tokenizer-more{padding-right:.5rem;color:var(--sapLinkColor);cursor:pointer}[dir=rtl] .fd-tokenizer-more,.fd-tokenizer-more[dir=rtl]{padding-left:.5rem;padding-right:0}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon{height:2.25rem}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon--compact{height:1.625rem}.fd-tokenizer__overflow-list-item{display:flex;justify-content:space-between}\n"] }]
664
664
  }], ctorParameters: function () { return [{ type: i1.ContentDensityObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i2.RtlService, decorators: [{
665
665
  type: Optional
666
666
  }] }, { type: i0.Renderer2 }, { type: Document, decorators: [{
@@ -706,4 +706,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
706
706
  type: HostListener,
707
707
  args: ['keydown', ['$event']]
708
708
  }] } });
709
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3Rva2VuL3Rva2VuaXplci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90b2tlbi90b2tlbml6ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCxDQUFDLEVBQ0QsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsS0FBSyxFQUNMLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFSCxPQUFPLEVBRVAsVUFBVSxFQUNWLGFBQWEsRUFDYixnQkFBZ0IsRUFDbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkcs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QUFROzswQkFFUixNQUFNOzJCQUFDLFFBQVE7NENBaktwQixLQUFLO3NCQURKLEtBQUs7Z0JBS04sdUJBQXVCO3NCQUR0QixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsZUFBZTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO2dCQUtqRCxLQUFLO3NCQURKLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUsxRSxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSzNCLFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSU0sT0FBTztzQkFBeEMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBTW5CLGNBQWM7c0JBRHRCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQTZCekQsZUFBZTtzQkFEZCxLQUFLO2dCQUtOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFLTixVQUFVO3NCQURULEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS0csZ0JBQWdCO3NCQUR4QixNQUFNO2dCQXlKUCxzQkFBc0IsTUFnRHRCLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEEsXG4gICAgQkFDS1NQQUNFLFxuICAgIERFTEVURSxcbiAgICBET1dOX0FSUk9XLFxuICAgIEVOVEVSLFxuICAgIExFRlRfQVJST1csXG4gICAgUklHSFRfQVJST1csXG4gICAgU1BBQ0UsXG4gICAgVVBfQVJST1dcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDc3NDbGFzc0J1aWxkZXIsXG4gICAgS2V5VXRpbCxcbiAgICBOdWxsYWJsZSxcbiAgICBSdGxTZXJ2aWNlLFxuICAgIGFwcGx5Q3NzQ2xhc3MsXG4gICAgcmVzaXplT2JzZXJ2YWJsZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQsIG1lcmdlLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRva2VuQ29tcG9uZW50IH0gZnJvbSAnLi90b2tlbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXRva2VuaXplcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Rva2VuaXplci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdG9rZW5pemVyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKCldXG59KVxuZXhwb3J0IGNsYXNzIFRva2VuaXplckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ3NzQ2xhc3NCdWlsZGVyLCBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqIHVzZXIncyBjdXN0b20gY2xhc3NlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBEaXNhYmxlcyBwb3NzaWJpbGl0eSB0byByZW1vdmUgdG9rZW5zIGJ5IGtleWJvYXJkICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlS2V5Ym9hcmREZWxldGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gVG9rZW5Db21wb25lbnQpKVxuICAgIHRva2VuTGlzdDogUXVlcnlMaXN0PFRva2VuQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IEZvcm1Db250cm9sQ29tcG9uZW50KSwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgaW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3Rva2VuaXplcklubmVyJylcbiAgICB0b2tlbml6ZXJJbm5lckVsOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnbW9yZUVsZW1lbnRTcGFuJylcbiAgICBtb3JlRWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0R3JvdXBBZGRPbicpIHNldCBjb250ZW50KGNvbnRlbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgICAgIHRoaXMuaW5wdXRHcm91cEFkZG9uRWwgPSBjb250ZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbigndmlld0NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICAgIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfaGlkZGVuVG9rZW5zKCk6IFRva2VuQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbkxpc3QuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE9ic2VydmFibGUgc3RhdGUgb2YgdGhlIGNvbXBhY3QgbW9kZS5cbiAgICAgKi9cbiAgICBnZXQgX2NvbXBhY3QkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvbXBhY3QkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDb21wb25lbnQgaXMgaW4gY29tcGFjdCBtb2RlLCBkZXRlcm1pbmVkIGJ5IHRoZSBjb25zdW1lclxuICAgICAqL1xuICAgIGdldCBfY29tcGFjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuaXNDb21wYWN0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaW5wdXRHcm91cEFkZG9uRWw6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciB0byB1c2UgY296eSB2aXN1YWxzIGJ1dCBjb21wYWN0IGNvbGxhcHNpbmcgYmVoYXZpb3IuICovXG4gICAgQElucHV0KClcbiAgICBjb21wYWN0Q29sbGFwc2UgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRva2VuaXplciBzaG91bGQgaGF2ZSBmYWtlIGZvY3VzIGluZGljYXRvciwgd2hlbiBpbnB1dCBpcyBmb2N1c2VkIGluc2lkZSovXG4gICAgQElucHV0KClcbiAgICB0b2tlbml6ZXJGb2N1c2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIFRoZSB2YWx1ZSBmb3IgdGhlIHRva2VuaXplciBpbnB1dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5wdXRWYWx1ZTogc3RyaW5nO1xuXG4gICAgLyoqIEljb24gb2YgdGhlIGJ1dHRvbiBvbiB0aGUgcmlnaHQgb2YgdGhlIGlucHV0IGZpZWxkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2x5cGg6IHN0cmluZztcblxuICAgIC8qKiBXb3JkIHRvIHVzZSBmb3Igd2hlbiB0aGVyZSBhcmUgZXh0cmEgdG9rZW5zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9yZVRlcm0gPSAnbW9yZSc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3BlbjogYm9vbGVhbjtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlYXJjaCB0ZXJtIGNoYW5nZXMuIFVzZSAqJGV2ZW50KiB0byBhY2Nlc3MgdGhlIG5ldyB0ZXJtLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG1vcmVDbGlja2VkRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByZXZpb3VzRWxlbWVudFdpZHRoOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG1vcmVUb2tlbnNMZWZ0OiBBcnJheTxUb2tlbkNvbXBvbmVudD4gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW9yZVRva2Vuc1JpZ2h0OiBBcnJheTxUb2tlbkNvbXBvbmVudD4gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJldmlvdXNUb2tlbkNvdW50OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdG9rZW5MaXN0Q2xpY2tTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoaWRkZW5Db3p5VG9rZW5Db3VudCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiBVc2VkIHRvIGFkZCBmb2N1cyB0byB0b2tlbml6ZXIgZWxlbWVudCAqL1xuICAgIF90b2tlbml6ZXJIYXNGb2N1cyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2hvd092ZXJmbG93UG9wb3ZlciA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93TW9yZUVsZW1lbnQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Rva2Vuc0NvbnRhaW5lcldpZHRoID0gJ2F1dG8nO1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBWYXJpYWJsZSB3aGljaCB3aWxsIGtlZXAgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB0b2tlbiBwcmVzc2VkIGluIHRoZSB0b2tlbml6ZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIF9maXJzdEVsZW1lbnRJblNlbGVjdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFZhcmlhYmxlIHdoaWNoIHdpbGwga2VlcCB0aGUgaW5kZXggb2YgdGhlIGxhc3QgdG9rZW4gcHJlc3NlZCBpbiB0aGUgdG9rZW5pemVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbGFzdEVsZW1lbnRJblNlbGVjdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEZsYWcgd2hpY2ggd2lsbCBzYXkgaWYgdGhlIGxhc3Qga2V5Ym9hcmQgYW5kIGNsaWNrIG9wZXJhdGlvbiB0aGV5IHVzZWQgd2FzIHVzaW5nIGNvbnRyb2xcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jdHJsUHJldmlvdXM6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEZsYWcgd2hpY2ggd2lsbCBzYXkgaWYgdGhleSBoZWxkIHNoaWZ0IGFuZCBjbGlja2VkIGhpZ2hsaWdodGluZyBlbGVtZW50cyBiZWZvcmUgb3JcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kaXJlY3Rpb25TaGlmdElzUmlnaHQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKSAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRMaXN0ZW5lcnM6ICgoKSA9PiB2b2lkKVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvcmNlQWxsVG9rZW5zVG9EaXNwbGF5ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Rva2VuRWxlbWVudEZvY3VzZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5wdXRFbGVtZW50Rm9jdXNlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b2tlbkVsZW1lbnRGb2N1c2VkU3ViOiBOdWxsYWJsZTxTdWJzY3JpcHRpb24+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcmVhZG9ubHkgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50OiBEb2N1bWVudFxuICAgICkge1xuICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0S2V5ZG93bkV2ZW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3YXRjaCBmb3IgY2hhbmdlcyB0byB0aGUgdG9rZW5MaXN0IGFuZCBhdHRlbXB0IHRvIGV4cGFuZC9jb2xsYXBzZSB0b2tlbnMgYXMgbmVlZGVkXG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmNoYW5nZXMucGlwZShzdGFydFdpdGgobnVsbCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLl9yZXNldFRva2VucygpO1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgICAgICAgICB0b2tlbi5vbkNsb3NlQ2xpY2suc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0VG9rZW5zKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgICAgICAgICB0b2tlbi5lbGVtZW50Rm9jdXNlZC5zdWJzY3JpYmUoKGlzRm9jdXNlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9rZW5FbGVtZW50Rm9jdXNlZC5uZXh0KGlzRm9jdXNlZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuX2NvbXBhY3QgJiYgIXRoaXMuY29tcGFjdENvbGxhcHNlKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVDb3p5VG9rZW5Db3VudCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xpc3RlbkVsZW1lbnRFdmVudHMoKTtcbiAgICAgICAgdGhpcy5wcmV2aW91c0VsZW1lbnRXaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB0aGlzLl9saXN0ZW5PblJlc2l6ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fdG9rZW5FbGVtZW50Rm9jdXNlZFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZSkgPT4gZSgpKTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVDbGlja3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIENzc0NsYXNzQnVpbGRlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBmdW5jdGlvbiBtdXN0IHJldHVybiBzaW5nbGUgc3RyaW5nXG4gICAgICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG9yZGVyIHdoaWNoIGNzcyBjbGFzc2VzIGFyZSBhcHBsaWVkXG4gICAgICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLmNsYXNzXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZVRva2VuQ2xpY2tTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUNsaWNrcygpO1xuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICh0b2tlbi50b2tlbldyYXBwZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdG9rZW4udG9rZW5XcmFwcGVyRWxlbWVudC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRva2VuLm9uVG9rZW5DbGljay5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9rZW5FbGVtZW50KGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzQ29udHJvbEtleShldmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N0cmxTZWxlY3RlZCh0b2tlbiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFldmVudC5zaGlmdEtleSB8fCB0aGlzLl9jdHJsUHJldmlvdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Jhc2ljU2VsZWN0ZWQodG9rZW4sIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEZpcnN0QW5kTGFzdEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoaWZ0U2VsZWN0ZWQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRva2VuLm9uVG9rZW5LZXlkb3duLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlEb3duKGV2ZW50LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZm9jdXNUb2tlbkVsZW1lbnQobmV3SW5kZXg6IG51bWJlcik6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdG9rZW5MaXN0QXJyYXk6IFRva2VuQ29tcG9uZW50W10gPSB0aGlzLnRva2VuTGlzdC50b0FycmF5KCk7XG4gICAgICAgIGlmICh0b2tlbkxpc3RBcnJheVtuZXdJbmRleF0pIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdG9rZW5MaXN0QXJyYXlbbmV3SW5kZXhdLnRva2VuV3JhcHBlckVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIC8vIGVsZW1lbnQgbmVlZHMgdGFiaW5kZXggaW4gb3JkZXIgdG8gYmUgZm9jdXNlZFxuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMhLmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWxlbWVudFRvRm9jdXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBrZXlEb3duKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgS2V5VXRpbC5pc0tleUNvZGUoa2V5Ym9hcmRFdmVudCwgW0RFTEVURSwgQkFDS1NQQUNFXSkgJiZcbiAgICAgICAgICAgICghdGhpcy5faXNJbnB1dEZvY3VzZWQoKSB8fCB0aGlzLl90b2tlbnNTZWxlY3RlZCgpKSAmJlxuICAgICAgICAgICAgIXRoaXMuZGlzYWJsZUtleWJvYXJkRGVsZXRpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5fZ2V0QWN0aXZlVG9rZW5zKCk7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkVG9rZW5JbmRleCA9IHRoaXMuX2dldEZvY3VzZWRUb2tlbkluZGV4KCk7XG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IGVsZW1lbnQub25DbG9zZUNsaWNrLmVtaXQoKSk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGtleWJvYXJkRXZlbnQsIERFTEVURSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNJbnB1dCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQoZm9jdXNlZFRva2VuSW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBLZXlVdGlsLmlzS2V5Q29kZShrZXlib2FyZEV2ZW50LCBCQUNLU1BBQ0UpICYmXG4gICAgICAgICAgICB0aGlzLl9pc0lucHV0Rm9jdXNlZCgpICYmXG4gICAgICAgICAgICAhdGhpcy5fZ2V0SW5wdXRWYWx1ZSgpICYmXG4gICAgICAgICAgICAhdGhpcy5kaXNhYmxlS2V5Ym9hcmREZWxldGlvblxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQodGhpcy50b2tlbkxpc3QubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uUmVzaXplKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50UmVmKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50V2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0VG9rZW5zKCk7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzRWxlbWVudFdpZHRoID0gZWxlbWVudFdpZHRoO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jb21wYWN0ICYmICF0aGlzLmNvbXBhY3RDb2xsYXBzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGZyb21JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGxldCBuZXdJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBydGwgPSB0aGlzLl9ydGxTZXJ2aWNlICYmIHRoaXMuX3J0bFNlcnZpY2UucnRsID8gdGhpcy5fcnRsU2VydmljZS5ydGwuZ2V0VmFsdWUoKSA6IGZhbHNlO1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSAmJiAhdGhpcy5faXNJbnB1dEZvY3VzZWQoKSkge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2VuTGlzdC5maW5kKChfLCBpbmRleCkgPT4gaW5kZXggPT09IGZyb21JbmRleCk7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKChzaGFkb3dlZFRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNoYWRvd2VkVG9rZW4gIT09IHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd2VkVG9rZW4uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRva2VuICYmICh0b2tlbi5zZWxlY3RlZCA9ICF0b2tlbi5zZWxlY3RlZCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzSW5wdXQoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9nb0JhY2tSZXF1ZXN0ZWQoZXZlbnQsIHJ0bCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBcnJvd0xlZnQoZnJvbUluZGV4KTtcbiAgICAgICAgICAgIG5ld0luZGV4ID0gZnJvbUluZGV4IC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9nb0ZvcndhcmRSZXF1ZXN0ZWQoZXZlbnQsIHJ0bCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBcnJvd1JpZ2h0KGZyb21JbmRleCk7XG4gICAgICAgICAgICBuZXdJbmRleCA9IGZyb21JbmRleCArIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEEpICYmICF0aGlzLl9nZXRJbnB1dFZhbHVlKCkgJiYgdGhpcy5faXNDb250cm9sS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiAodG9rZW4uc2VsZWN0ZWQgPSB0cnVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld0luZGV4ID09PSB0aGlzLnRva2VuTGlzdC5sZW5ndGggJiYgdGhpcy5fZ29Gb3J3YXJkUmVxdWVzdGVkKGV2ZW50LCBydGwpKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c0lucHV0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAobmV3SW5kZXghID4gdGhpcy50b2tlbkxpc3QubGVuZ3RoIC0gdGhpcy5tb3JlVG9rZW5zUmlnaHQubGVuZ3RoICYmIHRoaXMuX2lzSW5wdXRGb2N1c2VkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQobmV3SW5kZXghIC0gdGhpcy5tb3JlVG9rZW5zUmlnaHQubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChuZXdJbmRleCB8fCBuZXdJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1Rva2VuRWxlbWVudChuZXdJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldENvbWJpbmVkVG9rZW5XaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBsZXQgdG90YWxUb2tlbldpZHRoID0gdGhpcy5fZ2V0VG9rZW5zQXJlYVdpZHRoV2l0aG91dFRva2VucygpO1xuICAgICAgICAvLyBnZXQgdGhlIHdpZHRoIG9mIGVhY2ggdG9rZW5cbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgIHRvdGFsVG9rZW5XaWR0aCA9IHRvdGFsVG9rZW5XaWR0aCArIHRva2VuLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRvdGFsVG9rZW5XaWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayB3aGV0aGVyIHVzZXIgaW50ZW5kcyB0byBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyB0b2tlblxuICAgICAqKi9cbiAgICBwcml2YXRlIF9nb0JhY2tSZXF1ZXN0ZWQoJGV2ZW50OiBLZXlib2FyZEV2ZW50LCBydGw6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFydGwpIHtcbiAgICAgICAgICAgIHJldHVybiBLZXlVdGlsLmlzS2V5Q29kZSgkZXZlbnQsIExFRlRfQVJST1cpIHx8IEtleVV0aWwuaXNLZXlDb2RlKCRldmVudCwgVVBfQVJST1cpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBLZXlVdGlsLmlzS2V5Q29kZSgkZXZlbnQsIFJJR0hUX0FSUk9XKSB8fCBLZXlVdGlsLmlzS2V5Q29kZSgkZXZlbnQsIERPV05fQVJST1cpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIHdoZXRoZXIgdXNlciBpbnRlbmRzIHRvIGdvIGZvcndhcmQgdG8gdGhlIG5leHQgdG9rZW5cbiAgICAgKiovXG4gICAgcHJpdmF0ZSBfZ29Gb3J3YXJkUmVxdWVzdGVkKCRldmVudDogS2V5Ym9hcmRFdmVudCwgcnRsOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghcnRsKSB7XG4gICAgICAgICAgICByZXR1cm4gS2V5VXRpbC5pc0tleUNvZGUoJGV2ZW50LCBSSUdIVF9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoJGV2ZW50LCBET1dOX0FSUk9XKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gS2V5VXRpbC5pc0tleUNvZGUoJGV2ZW50LCBMRUZUX0FSUk9XKSB8fCBLZXlVdGlsLmlzS2V5Q29kZSgkZXZlbnQsIFVQX0FSUk9XKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFRva2Vuc0FyZWFXaWR0aFdpdGhvdXRUb2tlbnMoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHRvdGFsVG9rZW5XaWR0aCA9IDA7XG4gICAgICAgIC8vIGFkZCBpbnB1dCB3aWR0aFxuICAgICAgICBpZiAodGhpcy5pbnB1dD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdG90YWxUb2tlbldpZHRoID0gdG90YWxUb2tlbldpZHRoICsgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFkZCB0aGUgd2lkdGggb2YgdGhlIFwiX19fXyBtb3JlXCIgZWxlbWVudFxuICAgICAgICBpZiAodGhpcy5tb3JlVG9rZW5zTGVmdC5sZW5ndGggPiAwICYmIHRoaXMubW9yZUVsZW1lbnQgJiYgdGhpcy5tb3JlRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0b3RhbFRva2VuV2lkdGggPSB0b3RhbFRva2VuV2lkdGggKyB0aGlzLm1vcmVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkIHRoZSBpbnB1dCBncm91cCBhZGRvblxuICAgICAgICBpZiAodGhpcy5pbnB1dEdyb3VwQWRkb25FbCAmJiB0aGlzLmlucHV0R3JvdXBBZGRvbkVsLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRvdGFsVG9rZW5XaWR0aCA9IHRvdGFsVG9rZW5XaWR0aCArIHRoaXMuaW5wdXRHcm91cEFkZG9uRWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b3RhbFRva2VuV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBtb3JlQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3JlQ2xpY2tlZEV2ZW50LmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogUmVtb3ZlcyBhbGwgc2VsZWN0ZWQgdG9rZW5zICovXG4gICAgcmVtb3ZlU2VsZWN0ZWRUb2tlbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLl9nZXRBY3RpdmVUb2tlbnMoKTtcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiBlbGVtZW50Lm9uUmVtb3ZlLmVtaXQoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVBcnJvd0xlZnQoZnJvbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgdGhlIGxlZnRtb3N0IHZpc2libGUgdG9rZW4gaXMgc2VsZWN0ZWQsIGFuZCB0aGVyZSBhcmUgbW9yZVRva2Vuc0xlZnQsIG5lZWQgdG8gZGlzcGxheSBhIG1vcmVUb2tlbkxlZnRcbiAgICAgICAgaWYgKGZyb21JbmRleCA9PT0gdGhpcy5tb3JlVG9rZW5zTGVmdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvcHBlZFRva2VuID0gdGhpcy5tb3JlVG9rZW5zTGVmdC5wb3AoKTtcbiAgICAgICAgICAgIGlmIChwb3BwZWRUb2tlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX21ha2VFbGVtZW50VmlzaWJsZShwb3BwZWRUb2tlbi5lbGVtZW50UmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFuZCB0aGVuIGhpZGUgYW55IHRva2VucyBmcm9tIHRoZSByaWdodCB0aGF0IG5vIGxvbmdlciBmaXRcbiAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlVG9rZW5zKCdyaWdodCcpO1xuXG4gICAgICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93QWxsVG9rZW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JjZUFsbFRva2Vuc1RvRGlzcGxheSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2lucHV0RWxlbWVudEZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWFrZUVsZW1lbnRWaXNpYmxlKHRva2VuLmVsZW1lbnRSZWYpO1xuICAgICAgICAgICAgdG9rZW4uX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRva2VuLl9jb250ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Rva2Vuc0NvbnRhaW5lcldpZHRoID0gJ2F1dG8nO1xuICAgICAgICB0aGlzLl9zaG93TW9yZUVsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGlkZVRva2VucygpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dEVsZW1lbnRGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCB0b2tlbkZvY3VzZWQgPSB0aGlzLl9nZXRGb2N1c2VkVG9rZW5JbmRleCgpID4gLTE7XG5cbiAgICAgICAgICAgIGlmICh0b2tlbkZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93YWl0Rm9yRm9jdXNUb0Rpc2FwcGVhcigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2ZvcmNlQWxsVG9rZW5zVG9EaXNwbGF5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9yZXNldFRva2VucygpO1xuICAgICAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3dhaXRGb3JGb2N1c1RvRGlzYXBwZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90b2tlbkVsZW1lbnRGb2N1c2VkU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAvLyA1IG1zIGRlbGF5IGZvciBvdGhlciB0b2tlbiB0byByZWNlaXZlIGZvY3VzLCBjaGVjayBpZiBfc2hvd0FsbFRva2VucyB3YXMgY2FsbGVkIGFnYWluXG4gICAgICAgIHRoaXMuX3Rva2VuRWxlbWVudEZvY3VzZWRTdWIgPSB0aGlzLl90b2tlbkVsZW1lbnRGb2N1c2VkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChpc0ZvY3VzZWQpID0+IGlzRm9jdXNlZCAmJiAhdGhpcy5faW5wdXRFbGVtZW50Rm9jdXNlZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZGVUb2tlbnMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlQXJyb3dSaWdodChmcm9tSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoZnJvbUluZGV4ID09PSB0aGlzLnRva2VuTGlzdC5sZW5ndGggLSB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGggLSAxICYmIHRoaXMubW9yZVRva2Vuc1JpZ2h0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcG9wcGVkVG9rZW4gPSB0aGlzLm1vcmVUb2tlbnNSaWdodC5wb3AoKTtcbiAgICAgICAgICAgIGlmIChwb3BwZWRUb2tlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX21ha2VFbGVtZW50VmlzaWJsZShwb3BwZWRUb2tlbi5lbGVtZW50UmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFuZCB0aGVuIGhpZGUgYW55IHRva2VucyBmcm9tIHRoZSBsZWZ0IHRoYXQgbm8gbG9uZ2VyIGZpdFxuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VUb2tlbnMoJ2xlZnQnKTtcblxuICAgICAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb2xsYXBzZVRva2VucyhzaWRlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9mb3JjZUFsbFRva2Vuc1RvRGlzcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fY29tcGFjdCAmJiAhdGhpcy5jb21wYWN0Q29sbGFwc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyLmZvckVhY2goKHZpZXdDb250YWluZXIpID0+IHZpZXdDb250YWluZXIuY2xlYXIoKSk7XG5cbiAgICAgICAgY29uc3QgYXZhaWxhYmxlV2lkdGggPSB0aGlzLl9nZXRUb2tlbnNBcmVhV2lkdGhXaXRob3V0VG9rZW5zKCk7XG5cbiAgICAgICAgaWYgKHRoaXMudG9rZW5MaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgdG9rZW5XaWR0aCA9IHRoaXMudG9rZW5MaXN0LmdldCgwKT8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fdG9rZW5zQ29udGFpbmVyV2lkdGggPSBhdmFpbGFibGVXaWR0aCA8IHRva2VuV2lkdGggPyBgY2FsYygxMDAlIC0gJHthdmFpbGFibGVXaWR0aH1weClgIDogJ2F1dG8nO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdG9rZW5zQ29udGFpbmVyV2lkdGggPSAnYXV0byc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGVja01vcmVFbGVtZW50VmlzaWJpbGl0eSgpO1xuXG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB0b2tlbi5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodG9rZW4uX2NvbnRlbnQpKTtcblxuICAgICAgICBsZXQgZWxlbWVudFdpZHRoID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGxldCBjb21iaW5lZFRva2VuV2lkdGggPSB0aGlzLmdldENvbWJpbmVkVG9rZW5XaWR0aCgpOyAvLyB0aGUgY29tYmluZWQgd2lkdGggb2YgYWxsIHRva2VucywgdGhlIFwiX19fXyBtb3JlXCIgdGV4dCwgYW5kIHRoZSBpbnB1dFxuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIC8qXG4gICAgICAgICBXaGVuIHJlc2l6aW5nLCB3ZSB3YW50IHRvIGNvbGxhcHNlIHRoZSB0b2tlbnMgb24gdGhlIGxlZnQgZmlyc3QuIEhvd2V2ZXIsIHdoZW4gdGhlIHVzZXIgaXMgbmF2aWdhdGluZyB0aHJvdWdoXG4gICAgICAgICBhIGdyb3VwIG9mIG92ZXJmbG93aW5nIHRva2VucyB1c2luZyB0aGUgYXJyb3cgbGVmdCBrZXksIHdlIG1heSBuZWVkIHRvIGhpZGUgdG9rZW5zIG9uIHRoZSByaWdodC4gU28gaWYgdGhpc1xuICAgICAgICAgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkIHdpdGggdGhlIHBhcmFtICdyaWdodCcgaXQgd2lsbCBjb2xsYXBzZSB0b2tlbnMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgbGlzdCByYXRoZXJcbiAgICAgICAgIHRoYW4gdGhlIChkZWZhdWx0KSBsZWZ0IHNpZGUuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoc2lkZSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgaSA9IHRoaXMudG9rZW5MaXN0Lmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNvbWJpbmVkVG9rZW5XaWR0aCA+IGVsZW1lbnRXaWR0aCAmJiAoc2lkZSA9PT0gJ3JpZ2h0JyA/IGkgPj0gMCA6IGkgPCB0aGlzLnRva2VuTGlzdC5sZW5ndGgpKSB7XG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIHRva2VucyBhbmQgaGlkZSB0aGVtIHVudGlsIHRoZSBjb21iaW5lZFRva2VuV2lkdGggZml0cyBpbiB0aGUgZWxlbWVudFdpZHRoXG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5MaXN0LmdldChpKTtcbiAgICAgICAgICAgIGNvbnN0IG1vcmVUb2tlbnMgPSBzaWRlID09PSAncmlnaHQnID8gdGhpcy5tb3JlVG9rZW5zUmlnaHQgOiB0aGlzLm1vcmVUb2tlbnNMZWZ0O1xuXG4gICAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAobW9yZVRva2Vucy5pbmRleE9mKHRva2VuKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9yZVRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdG9rZW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBnZXQgdGhlIG5ldyBlbGVtZW50V2lkdGggYW5kIGNvbWJpbmVkVG9rZW5XaWR0aCBhcyB0aGVzZSB3aWxsIGhhdmUgY2hhbmdlZCBhZnRlciBzZXR0aW5nIGEgdG9rZW4gZGlzcGxheSB0byAnbm9uZSdcbiAgICAgICAgICAgIGVsZW1lbnRXaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fY2hlY2tNb3JlRWxlbWVudFZpc2liaWxpdHkoKTtcbiAgICAgICAgICAgIGNvbWJpbmVkVG9rZW5XaWR0aCA9IHRoaXMuZ2V0Q29tYmluZWRUb2tlbldpZHRoKCk7XG4gICAgICAgICAgICBzaWRlID09PSAncmlnaHQnID8gaS0tIDogaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBpZiAodGhpcy5fc2hvd092ZXJmbG93UG9wb3Zlcikge1xuICAgICAgICAgICAgdGhpcy5faGlkZGVuVG9rZW5zLmZvckVhY2goKGhpZGRlblRva2VuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGhpZGRlblRva2VuLl92aWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5nZXQoaW5kZXgpPy5jcmVhdGVFbWJlZGRlZFZpZXcoaGlkZGVuVG9rZW4uX2NvbnRlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2V0VG9rZW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vcmVUb2tlbnNMZWZ0ID0gW107XG4gICAgICAgIHRoaXMubW9yZVRva2Vuc1JpZ2h0ID0gW107XG4gICAgICAgIGlmICh0aGlzLl9jb21wYWN0IHx8IHRoaXMuY29tcGFjdENvbGxhcHNlIHx8IHRoaXMuX2ZvcmNlQWxsVG9rZW5zVG9EaXNwbGF5KSB7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX21ha2VFbGVtZW50VmlzaWJsZSh0b2tlbi5lbGVtZW50UmVmKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZVRva2VucygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZ2V0SGlkZGVuQ296eVRva2VuQ291bnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZVRva2VuQ2xpY2tTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIHRoaXMucHJldmlvdXNUb2tlbkNvdW50ID0gdGhpcy50b2tlbkxpc3QubGVuZ3RoO1xuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uX3NldFRvdGFsQ291bnQodGhpcy50b2tlbkxpc3QubGVuZ3RoKSk7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0SGlkZGVuQ296eVRva2VuQ291bnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRMZWZ0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgdGhpcy5oaWRkZW5Db3p5VG9rZW5Db3VudCA9IDA7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdG9rZW4udG9rZW5XcmFwcGVyRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgIHRva2VuLnRva2VuV3JhcHBlckVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCA8IGVsZW1lbnRMZWZ0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGRlbkNvenlUb2tlbkNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NoZWNrTW9yZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVDb3p5VG9rZW5Db3VudCgpOiB2b2lkIHtcbiAgICAgICAgLy8gYmVjYXVzZSBqdXN0aWZ5LWNvbnRlbnQgYnJlYWtzIHNjcm9sbGJhciwgaXQgY2Fubm90IGJlIHVzZWQgb24gY296eSBzY3JlZW5zLCBzbyB1c2UgSlMgdG8gc2Nyb2xsIHRvIHRoZSBlbmRcbiAgICAgICAgdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICB0aGlzLl9nZXRIaWRkZW5Db3p5VG9rZW5Db3VudCgpO1xuICAgICAgICBpZiAodGhpcy5oaWRkZW5Db3p5VG9rZW5Db3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gZG8gdGhpcyBhZ2FpbiBpbiBjYXNlIFwiX19fXyBtb3JlXCIgdGV4dCB3YXMgYWRkZWRcbiAgICAgICAgICAgIHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21ha2VFbGVtZW50VmlzaWJsZShlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICAgIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVDbGlja3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucyAmJiB0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2xpY2tTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lucHV0S2V5ZG93bkV2ZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIubGlzdGVuKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgJ2tleWRvd24nLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQsIHRoaXMudG9rZW5MaXN0Lmxlbmd0aCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE1ldGhvZCB3aGljaCBoYW5kbGVzIHdoYXQgaGFwcGVucyB0byB0b2tlbiB3aGVuIGl0IGlzIGNsaWNrZWQgYW5kIG5vIGtleSBpcyBiZWluZyBoZWxkIGRvd24uKi9cbiAgICBwcml2YXRlIF9iYXNpY1NlbGVjdGVkKHRva2VuLCBpbmRleCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKChzaGFkb3dlZFRva2VuKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2hhZG93ZWRUb2tlbiAhPT0gdG9rZW4pIHtcbiAgICAgICAgICAgICAgICBzaGFkb3dlZFRva2VuLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgIHRva2VuLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY3RybFByZXZpb3VzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmVzdGFydCBmaXJzdCBhbmQgbGFzdCBlbGVtZW50cyBmb3Igc2hpZnQgc2VsZWN0aW9uLiovXG4gICAgcHJpdmF0ZSByZXNldEZpcnN0QW5kTGFzdEVsZW1lbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc2V0ID0gIXRoaXMudG9rZW5MaXN0LnNvbWUoKHRva2VuKSA9PiB0b2tlbi5zZWxlY3RlZCk7XG4gICAgICAgIGlmIChyZXNldCkge1xuICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBNZXRob2Qgd2hpY2ggaGFuZGxlcyB3aGF0IGhhcHBlbnMgdG8gdG9rZW4gd2hlbiBpdCBpcyBjbGlja2VkIGFuZCB0aGUgc2hpZnQga2V5IGlzIGJlaW5nIGhlbGQgZG93bi4qL1xuICAgIHByaXZhdGUgX3NoaWZ0U2VsZWN0ZWQoaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiAmJiAhdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gJiYgaW5kZXggPCB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uICYmIGluZGV4ID4gdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuLCBpbmRleE9mVG9rZW4pID0+IHtcbiAgICAgICAgICAgIHRva2VuLnNlbGVjdGVkID1cbiAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgaW5kZXhPZlRva2VuID49IHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgaW5kZXhPZlRva2VuIDw9IHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb247XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9jdHJsUHJldmlvdXMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBNZXRob2Qgd2hpY2ggaGFuZGxlcyB3aGF0IGhhcHBlbnMgdG8gdG9rZW4gd2hlbiBpdCBpcyBjbGlja2VkIGFuZCB0aGUgY29udHJvbCBvciBtZXRhIGtleSBpcyBiZWluZyBoZWxkIGRvd24uKi9cbiAgICBwcml2YXRlIF9jdHJsU2VsZWN0ZWQodG9rZW4sIGluZGV4KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdG9rZW4uc2VsZWN0ZWQ7XG4gICAgICAgIHRva2VuLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0b2tlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXhPZlRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleE9mVG9rZW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXhPZlRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24hIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uISAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3RybFByZXZpb3VzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHNlbGVjdGVkIGFuZCBmb2N1c2VkIHRva2VucyAqL1xuICAgIHByaXZhdGUgX2dldEFjdGl2ZVRva2VucygpOiBUb2tlbkNvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5MaXN0LmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zZWxlY3RlZCB8fCB0aGlzLl9pc1Rva2VuRm9jdXNlZChpdGVtKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRGb2N1c2VkVG9rZW5JbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbkxpc3QudG9BcnJheSgpLmZpbmRJbmRleCgodG9rZW4pID0+IHRoaXMuX2lzVG9rZW5Gb2N1c2VkKHRva2VuKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc1Rva2VuRm9jdXNlZCh0b2tlbjogVG9rZW5Db21wb25lbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRva2VuLnRva2VuV3JhcHBlckVsZW1lbnQubmF0aXZlRWxlbWVudCA9PT0gdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzSW5wdXRGb2N1c2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9rZW5zU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC5zb21lKCh0KSA9PiB0LnNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldElucHV0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzSW5wdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNDb250cm9sS2V5KGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBrZXlib2FyZEV2ZW50LmN0cmxLZXkgfHwga2V5Ym9hcmRFdmVudC5tZXRhS2V5O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuRWxlbWVudEV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICBmcm9tRXZlbnQ8RXZlbnQ+KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZm9jdXMnLCB7IGNhcHR1cmU6IHRydWUgfSkucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiAoZXZlbnRbJ3RhcmdldCddIGFzIGFueSk/LnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgdGhpcy50b2tlbml6ZXJGb2N1c2FibGUpLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZyb21FdmVudDxFdmVudD4odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdibHVyJywgeyBjYXB0dXJlOiB0cnVlIH0pLnBpcGUobWFwKCgpID0+IGZhbHNlKSlcbiAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gZGVib3VuY2VUaW1lIGlzIG5lZWRlZCBpbiBvcmRlciB0byBmaWx0ZXIgc3Vic2VxdWVudCBmb2N1cy1ibHVyIGV2ZW50cywgdGhhdCBoYXBwZW4gc2ltdWx0YW5lb3VzbHlcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMTApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZm9jdXNlZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Rva2VuaXplckhhc0ZvY3VzID0gZm9jdXNlZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIExpc3RlbiB3aW5kb3cgcmVzaXplIGFuZCBkaXN0cmlidXRlIGNhcmRzIG9uIGNvbHVtbiBjaGFuZ2UgKi9cbiAgICBwcml2YXRlIF9saXN0ZW5PblJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblJlc2l6ZSgpO1xuICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uUmVzaXplKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2hlY2tNb3JlRWxlbWVudFZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNob3dNb3JlRWxlbWVudCA9XG4gICAgICAgICAgICAodGhpcy5tb3JlVG9rZW5zTGVmdC5sZW5ndGggPiAwIHx8IHRoaXMubW9yZVRva2Vuc1JpZ2h0Lmxlbmd0aCA+IDAgfHwgdGhpcy5oaWRkZW5Db3p5VG9rZW5Db3VudCA+IDApICYmXG4gICAgICAgICAgICAhdGhpcy5vcGVuICYmXG4gICAgICAgICAgICAhdGhpcy5fdG9rZW5pemVySGFzRm9jdXM7XG5cbiAgICAgICAgaWYgKHNob3dNb3JlRWxlbWVudCA9PT0gdGhpcy5fc2hvd01vcmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zaG93TW9yZUVsZW1lbnQgPSBzaG93TW9yZUVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmZC10b2tlbml6ZXIgZmQtdG9rZW5pemVyLS1zY3JvbGxhYmxlXCIgW2NsYXNzLmlzLWZvY3VzXT1cIl90b2tlbml6ZXJIYXNGb2N1c1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmZC10b2tlbml6ZXJfX2lubmVyXCIgI3Rva2VuaXplcklubmVyPlxuICAgICAgICA8ZGl2IHJvbGU9XCJsaXN0Ym94XCIgW3N0eWxlLndpZHRoXT1cIl90b2tlbnNDb250YWluZXJXaWR0aFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZmQtdG9rZW5cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd092ZXJmbG93UG9wb3ZlciAmJiAoKF9jb21wYWN0JCB8IGFzeW5jKSB8fCBjb21wYWN0Q29sbGFwc2UpOyBlbHNlIG1vcmVFbGVtZW50XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9rZW5zT3ZlcmZsb3dcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ZkLWZvcm0tY29udHJvbF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gZmQtaW5wdXQtZ3JvdXAtYWRkb24gKm5nSWY9XCJnbHlwaFwiICNpbnB1dEdyb3VwQWRkT24gW2J1dHRvbl09XCJ0cnVlXCIgcGxhY2VtZW50PVwiYWZ0ZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gY2xhc3M9XCJmZC10b2tlbml6ZXItYWRkb25cIiBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiIFtnbHlwaF09XCJnbHlwaFwiIHR5cGU9XCJidXR0b25cIj48L2J1dHRvbj5cbiAgICA8L3NwYW4+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0b2tlbnNPdmVyZmxvdz5cbiAgICA8ZmQtcG9wb3ZlciBwbGFjZW1lbnQ9XCJib3R0b20tc3RhcnRcIiB0aXRsZT1cIlwiIFtub0Fycm93XT1cImZhbHNlXCIgW2ZvY3VzVHJhcHBlZF09XCJ0cnVlXCIgW2ZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiPlxuICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vcmVFbGVtZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuXG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHk+XG4gICAgICAgICAgICA8dWwgZmQtbGlzdCBjbGFzcz1cImZkLXRva2VuaXplcl9fb3ZlcmZsb3ctbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0gY2xhc3M9XCJmZC10b2tlbml6ZXJfX292ZXJmbG93LWxpc3QtaXRlbVwiICpuZ0Zvcj1cImxldCB0b2tlbiBvZiBfaGlkZGVuVG9rZW5zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgI3ZpZXdDb250YWluZXI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXRva2VuLnJlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtdG9rZW5fX2Nsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0b2tlbi5kZWxldGVCdXR0b25MYWJlbCB8fCAoJ2NvcmVUb2tlbi5kZWxldGVCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRva2VuLmNsb3NlQ2xpY2tIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cbiAgICA8L2ZkLXBvcG92ZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vcmVFbGVtZW50PlxuICAgIDxzcGFuXG4gICAgICAgIChjbGljayk9XCJtb3JlQ2xpY2tlZCgpXCJcbiAgICAgICAgKm5nSWY9XCJfc2hvd01vcmVFbGVtZW50ICYmIF9oaWRkZW5Ub2tlbnMubGVuZ3RoID4gMCAmJiAhX3Rva2VuaXplckhhc0ZvY3VzXCJcbiAgICAgICAgI21vcmVFbGVtZW50U3BhblxuICAgICAgICBjbGFzcz1cImZkLXRva2VuaXplci1tb3JlXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihfY29tcGFjdCQgfCBhc3luYykgfHwgY29tcGFjdENvbGxhcHNlXCI+XG4gICAgICAgICAgICB7eyAnY29yZVRva2VuaXplci5tb3JlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IGNvdW50OiBtb3JlVG9rZW5zTGVmdC5sZW5ndGggKyBtb3JlVG9rZW5zUmlnaHQubGVuZ3RoIH0gfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoX2NvbXBhY3QkIHwgYXN5bmMpID09PSBmYWxzZSAmJiAhY29tcGFjdENvbGxhcHNlXCI+XG4gICAgICAgICAgICB7eyAnY29yZVRva2VuaXplci5tb3JlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IGNvdW50OiBoaWRkZW5Db3p5VG9rZW5Db3VudCB9IH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
709
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3Rva2VuL3Rva2VuaXplci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90b2tlbi90b2tlbml6ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCxDQUFDLEVBQ0QsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsS0FBSyxFQUNMLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFSCxPQUFPLEVBRVAsVUFBVSxFQUNWLGFBQWEsRUFDYixnQkFBZ0IsRUFDbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkcs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QUFROzswQkFFUixNQUFNOzJCQUFDLFFBQVE7NENBaktwQixLQUFLO3NCQURKLEtBQUs7Z0JBS04sdUJBQXVCO3NCQUR0QixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsZUFBZTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO2dCQUtqRCxLQUFLO3NCQURKLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUsxRSxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSzNCLFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSU0sT0FBTztzQkFBeEMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBTW5CLGNBQWM7c0JBRHRCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQTZCekQsZUFBZTtzQkFEZCxLQUFLO2dCQUtOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFLTixVQUFVO3NCQURULEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS0csZ0JBQWdCO3NCQUR4QixNQUFNO2dCQXlKUCxzQkFBc0IsTUFnRHRCLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEEsXG4gICAgQkFDS1NQQUNFLFxuICAgIERFTEVURSxcbiAgICBET1dOX0FSUk9XLFxuICAgIEVOVEVSLFxuICAgIExFRlRfQVJST1csXG4gICAgUklHSFRfQVJST1csXG4gICAgU1BBQ0UsXG4gICAgVVBfQVJST1dcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDc3NDbGFzc0J1aWxkZXIsXG4gICAgS2V5VXRpbCxcbiAgICBOdWxsYWJsZSxcbiAgICBSdGxTZXJ2aWNlLFxuICAgIGFwcGx5Q3NzQ2xhc3MsXG4gICAgcmVzaXplT2JzZXJ2YWJsZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQsIG1lcmdlLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRva2VuQ29tcG9uZW50IH0gZnJvbSAnLi90b2tlbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXRva2VuaXplcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Rva2VuaXplci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdG9rZW5pemVyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKCldXG59KVxuZXhwb3J0IGNsYXNzIFRva2VuaXplckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ3NzQ2xhc3NCdWlsZGVyLCBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqIHVzZXIncyBjdXN0b20gY2xhc3NlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBEaXNhYmxlcyBwb3NzaWJpbGl0eSB0byByZW1vdmUgdG9rZW5zIGJ5IGtleWJvYXJkICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlS2V5Ym9hcmREZWxldGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gVG9rZW5Db21wb25lbnQpKVxuICAgIHRva2VuTGlzdDogUXVlcnlMaXN0PFRva2VuQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IEZvcm1Db250cm9sQ29tcG9uZW50KSwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgaW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3Rva2VuaXplcklubmVyJylcbiAgICB0b2tlbml6ZXJJbm5lckVsOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnbW9yZUVsZW1lbnRTcGFuJylcbiAgICBtb3JlRWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0R3JvdXBBZGRPbicpIHNldCBjb250ZW50KGNvbnRlbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgICAgIHRoaXMuaW5wdXRHcm91cEFkZG9uRWwgPSBjb250ZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbigndmlld0NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICAgIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfaGlkZGVuVG9rZW5zKCk6IFRva2VuQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbkxpc3QuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE9ic2VydmFibGUgc3RhdGUgb2YgdGhlIGNvbXBhY3QgbW9kZS5cbiAgICAgKi9cbiAgICBnZXQgX2NvbXBhY3QkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvbXBhY3QkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDb21wb25lbnQgaXMgaW4gY29tcGFjdCBtb2RlLCBkZXRlcm1pbmVkIGJ5IHRoZSBjb25zdW1lclxuICAgICAqL1xuICAgIGdldCBfY29tcGFjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuaXNDb21wYWN0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaW5wdXRHcm91cEFkZG9uRWw6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciB0byB1c2UgY296eSB2aXN1YWxzIGJ1dCBjb21wYWN0IGNvbGxhcHNpbmcgYmVoYXZpb3IuICovXG4gICAgQElucHV0KClcbiAgICBjb21wYWN0Q29sbGFwc2UgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRva2VuaXplciBzaG91bGQgaGF2ZSBmYWtlIGZvY3VzIGluZGljYXRvciwgd2hlbiBpbnB1dCBpcyBmb2N1c2VkIGluc2lkZSovXG4gICAgQElucHV0KClcbiAgICB0b2tlbml6ZXJGb2N1c2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIFRoZSB2YWx1ZSBmb3IgdGhlIHRva2VuaXplciBpbnB1dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5wdXRWYWx1ZTogc3RyaW5nO1xuXG4gICAgLyoqIEljb24gb2YgdGhlIGJ1dHRvbiBvbiB0aGUgcmlnaHQgb2YgdGhlIGlucHV0IGZpZWxkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2x5cGg6IHN0cmluZztcblxuICAgIC8qKiBXb3JkIHRvIHVzZSBmb3Igd2hlbiB0aGVyZSBhcmUgZXh0cmEgdG9rZW5zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9yZVRlcm0gPSAnbW9yZSc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3BlbjogYm9vbGVhbjtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlYXJjaCB0ZXJtIGNoYW5nZXMuIFVzZSAqJGV2ZW50KiB0byBhY2Nlc3MgdGhlIG5ldyB0ZXJtLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG1vcmVDbGlja2VkRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByZXZpb3VzRWxlbWVudFdpZHRoOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG1vcmVUb2tlbnNMZWZ0OiBBcnJheTxUb2tlbkNvbXBvbmVudD4gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW9yZVRva2Vuc1JpZ2h0OiBBcnJheTxUb2tlbkNvbXBvbmVudD4gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJldmlvdXNUb2tlbkNvdW50OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdG9rZW5MaXN0Q2xpY2tTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoaWRkZW5Db3p5VG9rZW5Db3VudCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiBVc2VkIHRvIGFkZCBmb2N1cyB0byB0b2tlbml6ZXIgZWxlbWVudCAqL1xuICAgIF90b2tlbml6ZXJIYXNGb2N1cyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2hvd092ZXJmbG93UG9wb3ZlciA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93TW9yZUVsZW1lbnQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Rva2Vuc0NvbnRhaW5lcldpZHRoID0gJ2F1dG8nO1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBWYXJpYWJsZSB3aGljaCB3aWxsIGtlZXAgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB0b2tlbiBwcmVzc2VkIGluIHRoZSB0b2tlbml6ZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIF9maXJzdEVsZW1lbnRJblNlbGVjdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFZhcmlhYmxlIHdoaWNoIHdpbGwga2VlcCB0aGUgaW5kZXggb2YgdGhlIGxhc3QgdG9rZW4gcHJlc3NlZCBpbiB0aGUgdG9rZW5pemVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbGFzdEVsZW1lbnRJblNlbGVjdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEZsYWcgd2hpY2ggd2lsbCBzYXkgaWYgdGhlIGxhc3Qga2V5Ym9hcmQgYW5kIGNsaWNrIG9wZXJhdGlvbiB0aGV5IHVzZWQgd2FzIHVzaW5nIGNvbnRyb2xcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jdHJsUHJldmlvdXM6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEZsYWcgd2hpY2ggd2lsbCBzYXkgaWYgdGhleSBoZWxkIHNoaWZ0IGFuZCBjbGlja2VkIGhpZ2hsaWdodGluZyBlbGVtZW50cyBiZWZvcmUgb3JcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kaXJlY3Rpb25TaGlmdElzUmlnaHQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKSAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRMaXN0ZW5lcnM6ICgoKSA9PiB2b2lkKVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvcmNlQWxsVG9rZW5zVG9EaXNwbGF5ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Rva2VuRWxlbWVudEZvY3VzZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5wdXRFbGVtZW50Rm9jdXNlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b2tlbkVsZW1lbnRGb2N1c2VkU3ViOiBOdWxsYWJsZTxTdWJzY3JpcHRpb24+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcmVhZG9ubHkgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50OiBEb2N1bWVudFxuICAgICkge1xuICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0S2V5ZG93bkV2ZW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3YXRjaCBmb3IgY2hhbmdlcyB0byB0aGUgdG9rZW5MaXN0IGFuZCBhdHRlbXB0IHRvIGV4cGFuZC9jb2xsYXBzZSB0b2tlbnMgYXMgbmVlZGVkXG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmNoYW5nZXMucGlwZShzdGFydFdpdGgobnVsbCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLl9yZXNldFRva2VucygpO1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgICAgICAgICB0b2tlbi5vbkNsb3NlQ2xpY2suc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0VG9rZW5zKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgICAgICAgICB0b2tlbi5lbGVtZW50Rm9jdXNlZC5zdWJzY3JpYmUoKGlzRm9jdXNlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9rZW5FbGVtZW50Rm9jdXNlZC5uZXh0KGlzRm9jdXNlZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuX2NvbXBhY3QgJiYgIXRoaXMuY29tcGFjdENvbGxhcHNlKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVDb3p5VG9rZW5Db3VudCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xpc3RlbkVsZW1lbnRFdmVudHMoKTtcbiAgICAgICAgdGhpcy5wcmV2aW91c0VsZW1lbnRXaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB0aGlzLl9saXN0ZW5PblJlc2l6ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fdG9rZW5FbGVtZW50Rm9jdXNlZFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZSkgPT4gZSgpKTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVDbGlja3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIENzc0NsYXNzQnVpbGRlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBmdW5jdGlvbiBtdXN0IHJldHVybiBzaW5nbGUgc3RyaW5nXG4gICAgICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG9yZGVyIHdoaWNoIGNzcyBjbGFzc2VzIGFyZSBhcHBsaWVkXG4gICAgICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLmNsYXNzXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZVRva2VuQ2xpY2tTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUNsaWNrcygpO1xuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICh0b2tlbi50b2tlbldyYXBwZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdG9rZW4udG9rZW5XcmFwcGVyRWxlbWVudC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRva2VuLm9uVG9rZW5DbGljay5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9rZW5FbGVtZW50KGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzQ29udHJvbEtleShldmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N0cmxTZWxlY3RlZCh0b2tlbiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFldmVudC5zaGlmdEtleSB8fCB0aGlzLl9jdHJsUHJldmlvdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Jhc2ljU2VsZWN0ZWQodG9rZW4sIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEZpcnN0QW5kTGFzdEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoaWZ0U2VsZWN0ZWQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRva2VuLm9uVG9rZW5LZXlkb3duLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlEb3duKGV2ZW50LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZm9jdXNUb2tlbkVsZW1lbnQobmV3SW5kZXg6IG51bWJlcik6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdG9rZW5MaXN0QXJyYXk6IFRva2VuQ29tcG9uZW50W10gPSB0aGlzLnRva2VuTGlzdC50b0FycmF5KCk7XG4gICAgICAgIGlmICh0b2tlbkxpc3RBcnJheVtuZXdJbmRleF0pIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdG9rZW5MaXN0QXJyYXlbbmV3SW5kZXhdLnRva2VuV3JhcHBlckVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIC8vIGVsZW1lbnQgbmVlZHMgdGFiaW5kZXggaW4gb3JkZXIgdG8gYmUgZm9jdXNlZFxuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMhLmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWxlbWVudFRvRm9jdXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBrZXlEb3duKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgS2V5VXRpbC5pc0tleUNvZGUoa2V5Ym9hcmRFdmVudCwgW0RFTEVURSwgQkFDS1NQQUNFXSkgJiZcbiAgICAgICAgICAgICghdGhpcy5faXNJbnB1dEZvY3VzZWQoKSB8fCB0aGlzLl90b2tlbnNTZWxlY3RlZCgpKSAmJlxuICAgICAgICAgICAgIXRoaXMuZGlzYWJsZUtleWJvYXJkRGVsZXRpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5fZ2V0QWN0aXZlVG9rZW5zKCk7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkVG9rZW5JbmRleCA9IHRoaXMuX2dldEZvY3VzZWRUb2tlbkluZGV4KCk7XG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IGVsZW1lbnQub25DbG9zZUNsaWNrLmVtaXQoKSk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGtleWJvYXJkRXZlbnQsIERFTEVURSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNJbnB1dCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQoZm9jdXNlZFRva2VuSW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBLZXlVdGlsLmlzS2V5Q29kZShrZXlib2FyZEV2ZW50LCBCQUNLU1BBQ0UpICYmXG4gICAgICAgICAgICB0aGlzLl9pc0lucHV0Rm9jdXNlZCgpICYmXG4gICAgICAgICAgICAhdGhpcy5fZ2V0SW5wdXRWYWx1ZSgpICYmXG4gICAgICAgICAgICAhdGhpcy5kaXNhYmxlS2V5Ym9hcmREZWxldGlvblxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQodGhpcy50b2tlbkxpc3QubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uUmVzaXplKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50UmVmKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50V2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0VG9rZW5zKCk7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzRWxlbWVudFdpZHRoID0gZWxlbWVudFdpZHRoO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jb21wYWN0ICYmICF0aGlzLmNvbXBhY3RDb2xsYXBzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGZyb21JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGxldCBuZXdJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBydGwgPSB0aGlzLl9ydGxTZXJ2aWNlICYmIHRoaXMuX3J0bFNlcnZpY2UucnRsID8gdGhpcy5fcnRsU2VydmljZS5ydGwuZ2V0VmFsdWUoKSA6IGZhbHNlO1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSAmJiAhdGhpcy5faXNJbnB1dEZvY3VzZWQoKSkge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2VuTGlzdC5maW5kKChfLCBpbmRleCkgPT4gaW5kZXggPT09IGZyb21JbmRleCk7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKChzaGFkb3dlZFRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNoYWRvd2VkVG9rZW4gIT09IHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd2VkVG9rZW4uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRva2VuICYmICh0b2tlbi5zZWxlY3RlZCA9ICF0b2tlbi5zZWxlY3RlZCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzSW5wdXQoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9nb0JhY2tSZXF1ZXN0ZWQoZXZlbnQsIHJ0bCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBcnJvd0xlZnQoZnJvbUluZGV4KTtcbiAgICAgICAgICAgIG5ld0luZGV4ID0gZnJvbUluZGV4IC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9nb0ZvcndhcmRSZXF1ZXN0ZWQoZXZlbnQsIHJ0bCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBcnJvd1JpZ2h0KGZyb21JbmRleCk7XG4gICAgICAgICAgICBuZXdJbmRleCA9IGZyb21JbmRleCArIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEEpICYmICF0aGlzLl9nZXRJbnB1dFZhbHVlKCkgJiYgdGhpcy5faXNDb250cm9sS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiAodG9rZW4uc2VsZWN0ZWQgPSB0cnVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld0luZGV4ID09PSB0aGlzLnRva2VuTGlzdC5sZW5ndGggJiYgdGhpcy5fZ29Gb3J3YXJkUmVxdWVzdGVkKGV2ZW50LCBydGwpKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c0lucHV0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAobmV3SW5kZXghID4gdGhpcy50b2tlbkxpc3QubGVuZ3RoIC0gdGhpcy5tb3JlVG9rZW5zUmlnaHQubGVuZ3RoICYmIHRoaXMuX2lzSW5wdXRGb2N1c2VkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQobmV3SW5kZXghIC0gdGhpcy5tb3JlVG9rZW5zUmlnaHQubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChuZXdJbmRleCB8fCBuZXdJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1Rva2VuRWxlbWVudChuZXdJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldENvbWJpbmVkVG9rZW5XaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBsZXQgdG90YWxUb2tlbldpZHRoID0gdGhpcy5fZ2V0VG9rZW5zQXJlYVdpZHRoV2l0aG91dFRva2VucygpO1xuICAgICAgICAvLyBnZXQgdGhlIHdpZHRoIG9mIGVhY2ggdG9rZW5cbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgIHRvdGFsVG9rZW5XaWR0aCA9IHRvdGFsVG9rZW5XaWR0aCArIHRva2VuLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRvdGFsVG9rZW5XaWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayB3aGV0aGVyIHVzZXIgaW50ZW5kcyB0byBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyB0b2tlblxuICAgICAqKi9cbiAgICBwcml2YXRlIF9nb0JhY2tSZXF1ZXN0ZWQoJGV2ZW50OiBLZXlib2FyZEV2ZW50LCBydGw6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFydGwpIHtcbiAgICAgICAgICAgIHJldHVybiBLZXlVdGlsLmlzS2V5Q29kZSgkZXZlbnQsIExFRlRfQVJST1cpIHx8IEtleVV0aWwuaXNLZXlDb2RlKCRldmVudCwgVVBfQVJST1cpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBLZXlVdGlsLmlzS2V5Q29kZSgkZXZlbnQsIFJJR0hUX0FSUk9XKSB8fCBLZXlVdGlsLmlzS2V5Q29kZSgkZXZlbnQsIERPV05fQVJST1cpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIHdoZXRoZXIgdXNlciBpbnRlbmRzIHRvIGdvIGZvcndhcmQgdG8gdGhlIG5leHQgdG9rZW5cbiAgICAgKiovXG4gICAgcHJpdmF0ZSBfZ29Gb3J3YXJkUmVxdWVzdGVkKCRldmVudDogS2V5Ym9hcmRFdmVudCwgcnRsOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghcnRsKSB7XG4gICAgICAgICAgICByZXR1cm4gS2V5VXRpbC5pc0tleUNvZGUoJGV2ZW50LCBSSUdIVF9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoJGV2ZW50LCBET1dOX0FSUk9XKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gS2V5VXRpbC5pc0tleUNvZGUoJGV2ZW50LCBMRUZUX0FSUk9XKSB8fCBLZXlVdGlsLmlzS2V5Q29kZSgkZXZlbnQsIFVQX0FSUk9XKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFRva2Vuc0FyZWFXaWR0aFdpdGhvdXRUb2tlbnMoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHRvdGFsVG9rZW5XaWR0aCA9IDA7XG4gICAgICAgIC8vIGFkZCBpbnB1dCB3aWR0aFxuICAgICAgICBpZiAodGhpcy5pbnB1dD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdG90YWxUb2tlbldpZHRoID0gdG90YWxUb2tlbldpZHRoICsgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFkZCB0aGUgd2lkdGggb2YgdGhlIFwiX19fXyBtb3JlXCIgZWxlbWVudFxuICAgICAgICBpZiAodGhpcy5tb3JlVG9rZW5zTGVmdC5sZW5ndGggPiAwICYmIHRoaXMubW9yZUVsZW1lbnQgJiYgdGhpcy5tb3JlRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0b3RhbFRva2VuV2lkdGggPSB0b3RhbFRva2VuV2lkdGggKyB0aGlzLm1vcmVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkIHRoZSBpbnB1dCBncm91cCBhZGRvblxuICAgICAgICBpZiAodGhpcy5pbnB1dEdyb3VwQWRkb25FbCAmJiB0aGlzLmlucHV0R3JvdXBBZGRvbkVsLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRvdGFsVG9rZW5XaWR0aCA9IHRvdGFsVG9rZW5XaWR0aCArIHRoaXMuaW5wdXRHcm91cEFkZG9uRWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b3RhbFRva2VuV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBtb3JlQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3JlQ2xpY2tlZEV2ZW50LmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogUmVtb3ZlcyBhbGwgc2VsZWN0ZWQgdG9rZW5zICovXG4gICAgcmVtb3ZlU2VsZWN0ZWRUb2tlbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLl9nZXRBY3RpdmVUb2tlbnMoKTtcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiBlbGVtZW50Lm9uUmVtb3ZlLmVtaXQoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVBcnJvd0xlZnQoZnJvbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgdGhlIGxlZnRtb3N0IHZpc2libGUgdG9rZW4gaXMgc2VsZWN0ZWQsIGFuZCB0aGVyZSBhcmUgbW9yZVRva2Vuc0xlZnQsIG5lZWQgdG8gZGlzcGxheSBhIG1vcmVUb2tlbkxlZnRcbiAgICAgICAgaWYgKGZyb21JbmRleCA9PT0gdGhpcy5tb3JlVG9rZW5zTGVmdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvcHBlZFRva2VuID0gdGhpcy5tb3JlVG9rZW5zTGVmdC5wb3AoKTtcbiAgICAgICAgICAgIGlmIChwb3BwZWRUb2tlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX21ha2VFbGVtZW50VmlzaWJsZShwb3BwZWRUb2tlbi5lbGVtZW50UmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFuZCB0aGVuIGhpZGUgYW55IHRva2VucyBmcm9tIHRoZSByaWdodCB0aGF0IG5vIGxvbmdlciBmaXRcbiAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlVG9rZW5zKCdyaWdodCcpO1xuXG4gICAgICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93QWxsVG9rZW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JjZUFsbFRva2Vuc1RvRGlzcGxheSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2lucHV0RWxlbWVudEZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWFrZUVsZW1lbnRWaXNpYmxlKHRva2VuLmVsZW1lbnRSZWYpO1xuICAgICAgICAgICAgdG9rZW4uX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRva2VuLl9jb250ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Rva2Vuc0NvbnRhaW5lcldpZHRoID0gJ2F1dG8nO1xuICAgICAgICB0aGlzLl9zaG93TW9yZUVsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGlkZVRva2VucygpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dEVsZW1lbnRGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCB0b2tlbkZvY3VzZWQgPSB0aGlzLl9nZXRGb2N1c2VkVG9rZW5JbmRleCgpID4gLTE7XG5cbiAgICAgICAgICAgIGlmICh0b2tlbkZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93YWl0Rm9yRm9jdXNUb0Rpc2FwcGVhcigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2ZvcmNlQWxsVG9rZW5zVG9EaXNwbGF5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9yZXNldFRva2VucygpO1xuICAgICAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3dhaXRGb3JGb2N1c1RvRGlzYXBwZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90b2tlbkVsZW1lbnRGb2N1c2VkU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAvLyA1IG1zIGRlbGF5IGZvciBvdGhlciB0b2tlbiB0byByZWNlaXZlIGZvY3VzLCBjaGVjayBpZiBfc2hvd0FsbFRva2VucyB3YXMgY2FsbGVkIGFnYWluXG4gICAgICAgIHRoaXMuX3Rva2VuRWxlbWVudEZvY3VzZWRTdWIgPSB0aGlzLl90b2tlbkVsZW1lbnRGb2N1c2VkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChpc0ZvY3VzZWQpID0+IGlzRm9jdXNlZCAmJiAhdGhpcy5faW5wdXRFbGVtZW50Rm9jdXNlZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZGVUb2tlbnMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlQXJyb3dSaWdodChmcm9tSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoZnJvbUluZGV4ID09PSB0aGlzLnRva2VuTGlzdC5sZW5ndGggLSB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGggLSAxICYmIHRoaXMubW9yZVRva2Vuc1JpZ2h0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcG9wcGVkVG9rZW4gPSB0aGlzLm1vcmVUb2tlbnNSaWdodC5wb3AoKTtcbiAgICAgICAgICAgIGlmIChwb3BwZWRUb2tlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX21ha2VFbGVtZW50VmlzaWJsZShwb3BwZWRUb2tlbi5lbGVtZW50UmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFuZCB0aGVuIGhpZGUgYW55IHRva2VucyBmcm9tIHRoZSBsZWZ0IHRoYXQgbm8gbG9uZ2VyIGZpdFxuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VUb2tlbnMoJ2xlZnQnKTtcblxuICAgICAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb2xsYXBzZVRva2VucyhzaWRlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9mb3JjZUFsbFRva2Vuc1RvRGlzcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fY29tcGFjdCAmJiAhdGhpcy5jb21wYWN0Q29sbGFwc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyLmZvckVhY2goKHZpZXdDb250YWluZXIpID0+IHZpZXdDb250YWluZXIuY2xlYXIoKSk7XG5cbiAgICAgICAgY29uc3QgYXZhaWxhYmxlV2lkdGggPSB0aGlzLl9nZXRUb2tlbnNBcmVhV2lkdGhXaXRob3V0VG9rZW5zKCk7XG5cbiAgICAgICAgaWYgKHRoaXMudG9rZW5MaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgdG9rZW5XaWR0aCA9IHRoaXMudG9rZW5MaXN0LmdldCgwKT8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fdG9rZW5zQ29udGFpbmVyV2lkdGggPSBhdmFpbGFibGVXaWR0aCA8IHRva2VuV2lkdGggPyBgY2FsYygxMDAlIC0gJHthdmFpbGFibGVXaWR0aH1weClgIDogJ2F1dG8nO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdG9rZW5zQ29udGFpbmVyV2lkdGggPSAnYXV0byc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGVja01vcmVFbGVtZW50VmlzaWJpbGl0eSgpO1xuXG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB0b2tlbi5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodG9rZW4uX2NvbnRlbnQpKTtcblxuICAgICAgICBsZXQgZWxlbWVudFdpZHRoID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGxldCBjb21iaW5lZFRva2VuV2lkdGggPSB0aGlzLmdldENvbWJpbmVkVG9rZW5XaWR0aCgpOyAvLyB0aGUgY29tYmluZWQgd2lkdGggb2YgYWxsIHRva2VucywgdGhlIFwiX19fXyBtb3JlXCIgdGV4dCwgYW5kIHRoZSBpbnB1dFxuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIC8qXG4gICAgICAgICBXaGVuIHJlc2l6aW5nLCB3ZSB3YW50IHRvIGNvbGxhcHNlIHRoZSB0b2tlbnMgb24gdGhlIGxlZnQgZmlyc3QuIEhvd2V2ZXIsIHdoZW4gdGhlIHVzZXIgaXMgbmF2aWdhdGluZyB0aHJvdWdoXG4gICAgICAgICBhIGdyb3VwIG9mIG92ZXJmbG93aW5nIHRva2VucyB1c2luZyB0aGUgYXJyb3cgbGVmdCBrZXksIHdlIG1heSBuZWVkIHRvIGhpZGUgdG9rZW5zIG9uIHRoZSByaWdodC4gU28gaWYgdGhpc1xuICAgICAgICAgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkIHdpdGggdGhlIHBhcmFtICdyaWdodCcgaXQgd2lsbCBjb2xsYXBzZSB0b2tlbnMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgbGlzdCByYXRoZXJcbiAgICAgICAgIHRoYW4gdGhlIChkZWZhdWx0KSBsZWZ0IHNpZGUuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoc2lkZSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgaSA9IHRoaXMudG9rZW5MaXN0Lmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNvbWJpbmVkVG9rZW5XaWR0aCA+IGVsZW1lbnRXaWR0aCAmJiAoc2lkZSA9PT0gJ3JpZ2h0JyA/IGkgPj0gMCA6IGkgPCB0aGlzLnRva2VuTGlzdC5sZW5ndGgpKSB7XG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIHRva2VucyBhbmQgaGlkZSB0aGVtIHVudGlsIHRoZSBjb21iaW5lZFRva2VuV2lkdGggZml0cyBpbiB0aGUgZWxlbWVudFdpZHRoXG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5MaXN0LmdldChpKTtcbiAgICAgICAgICAgIGNvbnN0IG1vcmVUb2tlbnMgPSBzaWRlID09PSAncmlnaHQnID8gdGhpcy5tb3JlVG9rZW5zUmlnaHQgOiB0aGlzLm1vcmVUb2tlbnNMZWZ0O1xuXG4gICAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAobW9yZVRva2Vucy5pbmRleE9mKHRva2VuKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9yZVRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdG9rZW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBnZXQgdGhlIG5ldyBlbGVtZW50V2lkdGggYW5kIGNvbWJpbmVkVG9rZW5XaWR0aCBhcyB0aGVzZSB3aWxsIGhhdmUgY2hhbmdlZCBhZnRlciBzZXR0aW5nIGEgdG9rZW4gZGlzcGxheSB0byAnbm9uZSdcbiAgICAgICAgICAgIGVsZW1lbnRXaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fY2hlY2tNb3JlRWxlbWVudFZpc2liaWxpdHkoKTtcbiAgICAgICAgICAgIGNvbWJpbmVkVG9rZW5XaWR0aCA9IHRoaXMuZ2V0Q29tYmluZWRUb2tlbldpZHRoKCk7XG4gICAgICAgICAgICBzaWRlID09PSAncmlnaHQnID8gaS0tIDogaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBpZiAodGhpcy5fc2hvd092ZXJmbG93UG9wb3Zlcikge1xuICAgICAgICAgICAgdGhpcy5faGlkZGVuVG9rZW5zLmZvckVhY2goKGhpZGRlblRva2VuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGhpZGRlblRva2VuLl92aWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5nZXQoaW5kZXgpPy5jcmVhdGVFbWJlZGRlZFZpZXcoaGlkZGVuVG9rZW4uX2NvbnRlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2V0VG9rZW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vcmVUb2tlbnNMZWZ0ID0gW107XG4gICAgICAgIHRoaXMubW9yZVRva2Vuc1JpZ2h0ID0gW107XG4gICAgICAgIGlmICh0aGlzLl9jb21wYWN0IHx8IHRoaXMuY29tcGFjdENvbGxhcHNlIHx8IHRoaXMuX2ZvcmNlQWxsVG9rZW5zVG9EaXNwbGF5KSB7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX21ha2VFbGVtZW50VmlzaWJsZSh0b2tlbi5lbGVtZW50UmVmKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZVRva2VucygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZ2V0SGlkZGVuQ296eVRva2VuQ291bnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZVRva2VuQ2xpY2tTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIHRoaXMucHJldmlvdXNUb2tlbkNvdW50ID0gdGhpcy50b2tlbkxpc3QubGVuZ3RoO1xuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uX3NldFRvdGFsQ291bnQodGhpcy50b2tlbkxpc3QubGVuZ3RoKSk7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0SGlkZGVuQ296eVRva2VuQ291bnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRMZWZ0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgdGhpcy5oaWRkZW5Db3p5VG9rZW5Db3VudCA9IDA7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdG9rZW4udG9rZW5XcmFwcGVyRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgIHRva2VuLnRva2VuV3JhcHBlckVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCA8IGVsZW1lbnRMZWZ0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGRlbkNvenlUb2tlbkNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NoZWNrTW9yZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVDb3p5VG9rZW5Db3VudCgpOiB2b2lkIHtcbiAgICAgICAgLy8gYmVjYXVzZSBqdXN0aWZ5LWNvbnRlbnQgYnJlYWtzIHNjcm9sbGJhciwgaXQgY2Fubm90IGJlIHVzZWQgb24gY296eSBzY3JlZW5zLCBzbyB1c2UgSlMgdG8gc2Nyb2xsIHRvIHRoZSBlbmRcbiAgICAgICAgdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICB0aGlzLl9nZXRIaWRkZW5Db3p5VG9rZW5Db3VudCgpO1xuICAgICAgICBpZiAodGhpcy5oaWRkZW5Db3p5VG9rZW5Db3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gZG8gdGhpcyBhZ2FpbiBpbiBjYXNlIFwiX19fXyBtb3JlXCIgdGV4dCB3YXMgYWRkZWRcbiAgICAgICAgICAgIHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21ha2VFbGVtZW50VmlzaWJsZShlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICAgIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVDbGlja3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucyAmJiB0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2xpY2tTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lucHV0S2V5ZG93bkV2ZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIubGlzdGVuKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgJ2tleWRvd24nLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQsIHRoaXMudG9rZW5MaXN0Lmxlbmd0aCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE1ldGhvZCB3aGljaCBoYW5kbGVzIHdoYXQgaGFwcGVucyB0byB0b2tlbiB3aGVuIGl0IGlzIGNsaWNrZWQgYW5kIG5vIGtleSBpcyBiZWluZyBoZWxkIGRvd24uKi9cbiAgICBwcml2YXRlIF9iYXNpY1NlbGVjdGVkKHRva2VuLCBpbmRleCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKChzaGFkb3dlZFRva2VuKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2hhZG93ZWRUb2tlbiAhPT0gdG9rZW4pIHtcbiAgICAgICAgICAgICAgICBzaGFkb3dlZFRva2VuLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgIHRva2VuLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY3RybFByZXZpb3VzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmVzdGFydCBmaXJzdCBhbmQgbGFzdCBlbGVtZW50cyBmb3Igc2hpZnQgc2VsZWN0aW9uLiovXG4gICAgcHJpdmF0ZSByZXNldEZpcnN0QW5kTGFzdEVsZW1lbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc2V0ID0gIXRoaXMudG9rZW5MaXN0LnNvbWUoKHRva2VuKSA9PiB0b2tlbi5zZWxlY3RlZCk7XG4gICAgICAgIGlmIChyZXNldCkge1xuICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBNZXRob2Qgd2hpY2ggaGFuZGxlcyB3aGF0IGhhcHBlbnMgdG8gdG9rZW4gd2hlbiBpdCBpcyBjbGlja2VkIGFuZCB0aGUgc2hpZnQga2V5IGlzIGJlaW5nIGhlbGQgZG93bi4qL1xuICAgIHByaXZhdGUgX3NoaWZ0U2VsZWN0ZWQoaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiAmJiAhdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gJiYgaW5kZXggPCB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uICYmIGluZGV4ID4gdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuLCBpbmRleE9mVG9rZW4pID0+IHtcbiAgICAgICAgICAgIHRva2VuLnNlbGVjdGVkID1cbiAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgaW5kZXhPZlRva2VuID49IHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgaW5kZXhPZlRva2VuIDw9IHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb247XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9jdHJsUHJldmlvdXMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBNZXRob2Qgd2hpY2ggaGFuZGxlcyB3aGF0IGhhcHBlbnMgdG8gdG9rZW4gd2hlbiBpdCBpcyBjbGlja2VkIGFuZCB0aGUgY29udHJvbCBvciBtZXRhIGtleSBpcyBiZWluZyBoZWxkIGRvd24uKi9cbiAgICBwcml2YXRlIF9jdHJsU2VsZWN0ZWQodG9rZW4sIGluZGV4KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdG9rZW4uc2VsZWN0ZWQ7XG4gICAgICAgIHRva2VuLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0b2tlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXhPZlRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleE9mVG9rZW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXhPZlRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24hIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uISAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3RybFByZXZpb3VzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHNlbGVjdGVkIGFuZCBmb2N1c2VkIHRva2VucyAqL1xuICAgIHByaXZhdGUgX2dldEFjdGl2ZVRva2VucygpOiBUb2tlbkNvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5MaXN0LmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zZWxlY3RlZCB8fCB0aGlzLl9pc1Rva2VuRm9jdXNlZChpdGVtKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRGb2N1c2VkVG9rZW5JbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbkxpc3QudG9BcnJheSgpLmZpbmRJbmRleCgodG9rZW4pID0+IHRoaXMuX2lzVG9rZW5Gb2N1c2VkKHRva2VuKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc1Rva2VuRm9jdXNlZCh0b2tlbjogVG9rZW5Db21wb25lbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRva2VuLnRva2VuV3JhcHBlckVsZW1lbnQubmF0aXZlRWxlbWVudCA9PT0gdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzSW5wdXRGb2N1c2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9rZW5zU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC5zb21lKCh0KSA9PiB0LnNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldElucHV0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzSW5wdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNDb250cm9sS2V5KGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBrZXlib2FyZEV2ZW50LmN0cmxLZXkgfHwga2V5Ym9hcmRFdmVudC5tZXRhS2V5O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuRWxlbWVudEV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICBmcm9tRXZlbnQ8RXZlbnQ+KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZm9jdXMnLCB7IGNhcHR1cmU6IHRydWUgfSkucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiAoZXZlbnRbJ3RhcmdldCddIGFzIGFueSk/LnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgdGhpcy50b2tlbml6ZXJGb2N1c2FibGUpLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZyb21FdmVudDxFdmVudD4odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdibHVyJywgeyBjYXB0dXJlOiB0cnVlIH0pLnBpcGUobWFwKCgpID0+IGZhbHNlKSlcbiAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gZGVib3VuY2VUaW1lIGlzIG5lZWRlZCBpbiBvcmRlciB0byBmaWx0ZXIgc3Vic2VxdWVudCBmb2N1cy1ibHVyIGV2ZW50cywgdGhhdCBoYXBwZW4gc2ltdWx0YW5lb3VzbHlcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMTApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZm9jdXNlZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Rva2VuaXplckhhc0ZvY3VzID0gZm9jdXNlZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIExpc3RlbiB3aW5kb3cgcmVzaXplIGFuZCBkaXN0cmlidXRlIGNhcmRzIG9uIGNvbHVtbiBjaGFuZ2UgKi9cbiAgICBwcml2YXRlIF9saXN0ZW5PblJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblJlc2l6ZSgpO1xuICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uUmVzaXplKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2hlY2tNb3JlRWxlbWVudFZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNob3dNb3JlRWxlbWVudCA9XG4gICAgICAgICAgICAodGhpcy5tb3JlVG9rZW5zTGVmdC5sZW5ndGggPiAwIHx8IHRoaXMubW9yZVRva2Vuc1JpZ2h0Lmxlbmd0aCA+IDAgfHwgdGhpcy5oaWRkZW5Db3p5VG9rZW5Db3VudCA+IDApICYmXG4gICAgICAgICAgICAhdGhpcy5vcGVuICYmXG4gICAgICAgICAgICAhdGhpcy5fdG9rZW5pemVySGFzRm9jdXM7XG5cbiAgICAgICAgaWYgKHNob3dNb3JlRWxlbWVudCA9PT0gdGhpcy5fc2hvd01vcmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zaG93TW9yZUVsZW1lbnQgPSBzaG93TW9yZUVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImZkLXRva2VuaXplciBmZC10b2tlbml6ZXItLXNjcm9sbGFibGVcIlxuICAgIFtjbGFzcy5pcy1mb2N1c109XCJfdG9rZW5pemVySGFzRm9jdXNcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvcmVUb2tlbml6ZXIudG9rZW5pemVyTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuPlxuICAgIDxkaXYgY2xhc3M9XCJmZC10b2tlbml6ZXJfX2lubmVyXCIgI3Rva2VuaXplcklubmVyPlxuICAgICAgICA8ZGl2IHJvbGU9XCJsaXN0Ym94XCIgW3N0eWxlLndpZHRoXT1cIl90b2tlbnNDb250YWluZXJXaWR0aFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZmQtdG9rZW5cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd092ZXJmbG93UG9wb3ZlciAmJiAoKF9jb21wYWN0JCB8IGFzeW5jKSB8fCBjb21wYWN0Q29sbGFwc2UpOyBlbHNlIG1vcmVFbGVtZW50XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9rZW5zT3ZlcmZsb3dcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ZkLWZvcm0tY29udHJvbF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gZmQtaW5wdXQtZ3JvdXAtYWRkb24gKm5nSWY9XCJnbHlwaFwiICNpbnB1dEdyb3VwQWRkT24gW2J1dHRvbl09XCJ0cnVlXCIgcGxhY2VtZW50PVwiYWZ0ZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gY2xhc3M9XCJmZC10b2tlbml6ZXItYWRkb25cIiBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiIFtnbHlwaF09XCJnbHlwaFwiIHR5cGU9XCJidXR0b25cIj48L2J1dHRvbj5cbiAgICA8L3NwYW4+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0b2tlbnNPdmVyZmxvdz5cbiAgICA8ZmQtcG9wb3ZlciBwbGFjZW1lbnQ9XCJib3R0b20tc3RhcnRcIiB0aXRsZT1cIlwiIFtub0Fycm93XT1cImZhbHNlXCIgW2ZvY3VzVHJhcHBlZF09XCJ0cnVlXCIgW2ZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiPlxuICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vcmVFbGVtZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuXG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHk+XG4gICAgICAgICAgICA8dWwgZmQtbGlzdCBjbGFzcz1cImZkLXRva2VuaXplcl9fb3ZlcmZsb3ctbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0gY2xhc3M9XCJmZC10b2tlbml6ZXJfX292ZXJmbG93LWxpc3QtaXRlbVwiICpuZ0Zvcj1cImxldCB0b2tlbiBvZiBfaGlkZGVuVG9rZW5zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgI3ZpZXdDb250YWluZXI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXRva2VuLnJlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtdG9rZW5fX2Nsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0b2tlbi5kZWxldGVCdXR0b25MYWJlbCB8fCAoJ2NvcmVUb2tlbi5kZWxldGVCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRva2VuLmNsb3NlQ2xpY2tIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cbiAgICA8L2ZkLXBvcG92ZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vcmVFbGVtZW50PlxuICAgIDxzcGFuXG4gICAgICAgIChjbGljayk9XCJtb3JlQ2xpY2tlZCgpXCJcbiAgICAgICAgKm5nSWY9XCJfc2hvd01vcmVFbGVtZW50ICYmIF9oaWRkZW5Ub2tlbnMubGVuZ3RoID4gMCAmJiAhX3Rva2VuaXplckhhc0ZvY3VzXCJcbiAgICAgICAgI21vcmVFbGVtZW50U3BhblxuICAgICAgICBjbGFzcz1cImZkLXRva2VuaXplci1tb3JlXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihfY29tcGFjdCQgfCBhc3luYykgfHwgY29tcGFjdENvbGxhcHNlXCI+XG4gICAgICAgICAgICB7eyAnY29yZVRva2VuaXplci5tb3JlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IGNvdW50OiBtb3JlVG9rZW5zTGVmdC5sZW5ndGggKyBtb3JlVG9rZW5zUmlnaHQubGVuZ3RoIH0gfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoX2NvbXBhY3QkIHwgYXN5bmMpID09PSBmYWxzZSAmJiAhY29tcGFjdENvbGxhcHNlXCI+XG4gICAgICAgICAgICB7eyAnY29yZVRva2VuaXplci5tb3JlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IGNvdW50OiBoaWRkZW5Db3p5VG9rZW5Db3VudCB9IH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -16,7 +16,7 @@ class BusyIndicatorComponent {
16
16
  /** Whether to use loader as block element */
17
17
  this.block = false;
18
18
  /** Aria live attribute value. */
19
- this.ariaLive = 'polite';
19
+ this.ariaLive = null;
20
20
  }
21
21
  /** @hidden If focus escapes busy container focus element after wrapped content */
22
22
  hostFocusChangeHandler(event) {
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-busy-indicator.mjs","sources":["../../../../libs/core/src/lib/busy-indicator/tokens.ts","../../../../libs/core/src/lib/busy-indicator/busy-indicator.component.ts","../../../../libs/core/src/lib/busy-indicator/busy-indicator.component.html","../../../../libs/core/src/lib/busy-indicator/busy-indicator-extended/busy-indicator-extended.directive.ts","../../../../libs/core/src/lib/busy-indicator/busy-indicator.module.ts","../../../../libs/core/src/lib/busy-indicator/fundamental-ngx-core-busy-indicator.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const FD_BUSY_INDICATOR_COMPONENT = new InjectionToken('FdBusyIndicatorComponent');\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n Input,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { TAB } from '@angular/cdk/keycodes';\nimport { FD_BUSY_INDICATOR_COMPONENT } from './tokens';\n\nexport type BusyIndicatorSize = 's' | 'm' | 'l';\n\n@Component({\n selector: 'fd-busy-indicator',\n templateUrl: './busy-indicator.component.html',\n styleUrls: ['./busy-indicator.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FD_BUSY_INDICATOR_COMPONENT,\n useExisting: BusyIndicatorComponent\n }\n ],\n host: {\n '[attr.role]': \"loading ? 'progressbar' : 'presentation'\",\n '[attr.tabindex]': 'loading ? 0 : -1',\n '[attr.aria-busy]': 'loading',\n '[attr.aria-live]': 'ariaLive',\n '[attr.aria-label]': 'ariaLabel',\n '[attr.title]': 'title',\n '[class.fd-busy-indicator__container]': 'true',\n '[class.fd-busy-indicator__container--inline]': '!block'\n }\n})\nexport class BusyIndicatorComponent {\n /** Whether to display the loading indicator animation. */\n @Input()\n loading: boolean;\n\n /** The size of the loading indicator, default will be medium */\n @Input()\n size: BusyIndicatorSize = 'm';\n\n /** Whether to use loader as block element */\n @Input()\n block = false;\n\n /** Aria label attribute value. */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** title attribute value for tooltip. */\n @Input()\n title: string;\n\n /** add loading label value */\n @Input()\n label: string;\n\n /** Aria live attribute value. */\n @Input()\n ariaLive: Nullable<'assertive' | 'polite' | 'off'> = 'polite';\n\n /** @hidden */\n @ViewChild('fakeFocusElement')\n fakeFocusElement: ElementRef;\n\n /** @hidden */\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden If focus escapes busy container focus element after wrapped content */\n @HostListener('keydown', ['$event'])\n hostFocusChangeHandler(event: KeyboardEvent): void {\n if (this.loading && KeyUtil.isKeyCode(event, TAB) && !event.shiftKey) {\n this.fakeFocusElement.nativeElement.focus();\n }\n }\n\n /** @hidden If busy container is navigated as \"previous focusable element\",\n * focus busy indicator to prevent from focusing wrapped content */\n fakeElementFocusHandler(event: FocusEvent): void {\n if (this.loading && event.relatedTarget !== this._elementRef.nativeElement) {\n event.stopPropagation();\n this._elementRef.nativeElement.focus();\n }\n }\n}\n","<ng-content></ng-content>\n\n<ng-container *ngIf=\"loading\">\n <div\n #busyIndicator\n class=\"fd-busy-indicator\"\n [class.fd-busy-indicator--l]=\"size === 'l'\"\n [class.fd-busy-indicator--m]=\"size === 'm'\"\n [class.fd-busy-indicator--s]=\"size === 's'\"\n >\n <div class=\"fd-busy-indicator__circle\"></div>\n <div class=\"fd-busy-indicator__circle\"></div>\n <div class=\"fd-busy-indicator__circle\"></div>\n </div>\n\n <span *ngIf=\"label\" class=\"fd-busy-indicator-extended__label\">{{ label }}</span>\n\n <div class=\"fd-busy-indicator__overlay\"></div>\n\n <div #fakeFocusElement tabindex=\"0\" aria-hidden=\"true\" (focusin)=\"fakeElementFocusHandler($event)\"></div>\n</ng-container>\n","import { AfterContentInit, ContentChild, Directive, ElementRef } from '@angular/core';\nimport { BusyIndicatorComponent } from '../busy-indicator.component';\nimport { FD_BUSY_INDICATOR_COMPONENT } from '../tokens';\n\nconst messageToastClass = 'fd-message-toast';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-busy-indicator-extended]'\n})\nexport class BusyIndicatorExtendedDirective implements AfterContentInit {\n /** @hidden */\n @ContentChild(FD_BUSY_INDICATOR_COMPONENT)\n busyIndicator: BusyIndicatorComponent;\n\n /** @hidden */\n constructor(public readonly elementRef: ElementRef) {}\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._appendCssToParent();\n }\n\n /** @hidden */\n private _appendCssToParent(): void {\n const hasLabel = this.busyIndicator.label;\n if (!hasLabel) {\n return;\n }\n const classList = this.elementRef.nativeElement.parentElement?.classList;\n if (classList) {\n classList.add('fd-busy-indicator-extended');\n if (classList.contains(messageToastClass)) {\n classList.add('fd-busy-indicator-extended--message-toast');\n }\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BusyIndicatorComponent } from './busy-indicator.component';\nimport { BusyIndicatorExtendedDirective } from './busy-indicator-extended/busy-indicator-extended.directive';\n\n@NgModule({\n declarations: [BusyIndicatorComponent, BusyIndicatorExtendedDirective],\n exports: [BusyIndicatorComponent, BusyIndicatorExtendedDirective],\n imports: [CommonModule]\n})\nexport class BusyIndicatorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAEa,2BAA2B,GAAG,IAAI,cAAc,CAAC,0BAA0B;;MCqC3E,sBAAsB,CAAA;;AAkC/B,IAAA,WAAA,CAAoB,WAAuB,EAAA;AAAvB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;;AA3B3C,QAAA,IAAI,CAAA,IAAA,GAAsB,GAAG,CAAC;;AAI9B,QAAA,IAAK,CAAA,KAAA,GAAG,KAAK,CAAC;;AAgBd,QAAA,IAAQ,CAAA,QAAA,GAA6C,QAAQ,CAAC;KAOf;;AAI/C,IAAA,sBAAsB,CAAC,KAAoB,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AAClE,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAC/C,SAAA;KACJ;AAED;AACmE;AACnE,IAAA,uBAAuB,CAAC,KAAiB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;YACxE,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAC1C,SAAA;KACJ;;mHAnDQ,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAjBpB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,gCAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,0CAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,OAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,4CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACP,QAAA;AACI,YAAA,OAAO,EAAE,2BAA2B;AACpC,YAAA,WAAW,EAAE,sBAAsB;AACtC,SAAA;AACJ,KAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BL,uwBAqBA,EAAA,MAAA,EAAA,CAAA,65GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FDkBa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAvBlC,SAAS;+BACI,mBAAmB,EAAA,aAAA,EAGd,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,2BAA2B;AACpC,4BAAA,WAAW,EAAwB,sBAAA;AACtC,yBAAA;AACJ,qBAAA,EACK,IAAA,EAAA;AACF,wBAAA,aAAa,EAAE,0CAA0C;AACzD,wBAAA,iBAAiB,EAAE,kBAAkB;AACrC,wBAAA,kBAAkB,EAAE,SAAS;AAC7B,wBAAA,kBAAkB,EAAE,UAAU;AAC9B,wBAAA,mBAAmB,EAAE,WAAW;AAChC,wBAAA,cAAc,EAAE,OAAO;AACvB,wBAAA,sCAAsC,EAAE,MAAM;AAC9C,wBAAA,8CAA8C,EAAE,QAAQ;qBAC3D,EAAA,QAAA,EAAA,uwBAAA,EAAA,MAAA,EAAA,CAAA,65GAAA,CAAA,EAAA,CAAA;iGAKD,OAAO,EAAA,CAAA;sBADN,KAAK;gBAKN,IAAI,EAAA,CAAA;sBADH,KAAK;gBAKN,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAKN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAKN,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAKN,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAKN,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAKN,gBAAgB,EAAA,CAAA;sBADf,SAAS;uBAAC,kBAAkB,CAAA;gBAQ7B,sBAAsB,EAAA,CAAA;sBADrB,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAA;;;AExEvC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;MAMhC,8BAA8B,CAAA;;AAMvC,IAAA,WAAA,CAA4B,UAAsB,EAAA;AAAtB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;KAAI;;IAGtD,kBAAkB,GAAA;QACd,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC7B;;IAGO,kBAAkB,GAAA;;AACtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO;AACV,SAAA;AACD,QAAA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,CAAC;AACzE,QAAA,IAAI,SAAS,EAAE;AACX,YAAA,SAAS,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC5C,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;AACvC,gBAAA,SAAS,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;AAC9D,aAAA;AACJ,SAAA;KACJ;;2HA1BQ,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,8BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,+GAEzB,2BAA2B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAFhC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,8BAA8B;iBAC3C,CAAA;iGAIG,aAAa,EAAA,CAAA;sBADZ,YAAY;uBAAC,2BAA2B,CAAA;;;MCFhC,mBAAmB,CAAA;;gHAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;iHAAnB,mBAAmB,EAAA,YAAA,EAAA,CAJb,sBAAsB,EAAE,8BAA8B,aAE3D,YAAY,CAAA,EAAA,OAAA,EAAA,CADZ,sBAAsB,EAAE,8BAA8B,CAAA,EAAA,CAAA,CAAA;AAGvD,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAFlB,YAAY,CAAA,EAAA,CAAA,CAAA;2FAEb,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,CAAC,sBAAsB,EAAE,8BAA8B,CAAC;AACtE,oBAAA,OAAO,EAAE,CAAC,sBAAsB,EAAE,8BAA8B,CAAC;oBACjE,OAAO,EAAE,CAAC,YAAY,CAAC;iBAC1B,CAAA;;;ACTD;;AAEG;;;;"}
1
+ {"version":3,"file":"fundamental-ngx-core-busy-indicator.mjs","sources":["../../../../libs/core/src/lib/busy-indicator/tokens.ts","../../../../libs/core/src/lib/busy-indicator/busy-indicator.component.ts","../../../../libs/core/src/lib/busy-indicator/busy-indicator.component.html","../../../../libs/core/src/lib/busy-indicator/busy-indicator-extended/busy-indicator-extended.directive.ts","../../../../libs/core/src/lib/busy-indicator/busy-indicator.module.ts","../../../../libs/core/src/lib/busy-indicator/fundamental-ngx-core-busy-indicator.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const FD_BUSY_INDICATOR_COMPONENT = new InjectionToken('FdBusyIndicatorComponent');\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n Input,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { TAB } from '@angular/cdk/keycodes';\nimport { FD_BUSY_INDICATOR_COMPONENT } from './tokens';\n\nexport type BusyIndicatorSize = 's' | 'm' | 'l';\n\n@Component({\n selector: 'fd-busy-indicator',\n templateUrl: './busy-indicator.component.html',\n styleUrls: ['./busy-indicator.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FD_BUSY_INDICATOR_COMPONENT,\n useExisting: BusyIndicatorComponent\n }\n ],\n host: {\n '[attr.role]': \"loading ? 'progressbar' : 'presentation'\",\n '[attr.tabindex]': 'loading ? 0 : -1',\n '[attr.aria-busy]': 'loading',\n '[attr.aria-live]': 'ariaLive',\n '[attr.aria-label]': 'ariaLabel',\n '[attr.title]': 'title',\n '[class.fd-busy-indicator__container]': 'true',\n '[class.fd-busy-indicator__container--inline]': '!block'\n }\n})\nexport class BusyIndicatorComponent {\n /** Whether to display the loading indicator animation. */\n @Input()\n loading: boolean;\n\n /** The size of the loading indicator, default will be medium */\n @Input()\n size: BusyIndicatorSize = 'm';\n\n /** Whether to use loader as block element */\n @Input()\n block = false;\n\n /** Aria label attribute value. */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** title attribute value for tooltip. */\n @Input()\n title: string;\n\n /** add loading label value */\n @Input()\n label: string;\n\n /** Aria live attribute value. */\n @Input()\n ariaLive: Nullable<'assertive' | 'polite' | 'off'> = null;\n\n /** @hidden */\n @ViewChild('fakeFocusElement')\n fakeFocusElement: ElementRef;\n\n /** @hidden */\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden If focus escapes busy container focus element after wrapped content */\n @HostListener('keydown', ['$event'])\n hostFocusChangeHandler(event: KeyboardEvent): void {\n if (this.loading && KeyUtil.isKeyCode(event, TAB) && !event.shiftKey) {\n this.fakeFocusElement.nativeElement.focus();\n }\n }\n\n /** @hidden If busy container is navigated as \"previous focusable element\",\n * focus busy indicator to prevent from focusing wrapped content */\n fakeElementFocusHandler(event: FocusEvent): void {\n if (this.loading && event.relatedTarget !== this._elementRef.nativeElement) {\n event.stopPropagation();\n this._elementRef.nativeElement.focus();\n }\n }\n}\n","<ng-content></ng-content>\n\n<ng-container *ngIf=\"loading\">\n <div\n #busyIndicator\n class=\"fd-busy-indicator\"\n [class.fd-busy-indicator--l]=\"size === 'l'\"\n [class.fd-busy-indicator--m]=\"size === 'm'\"\n [class.fd-busy-indicator--s]=\"size === 's'\"\n >\n <div class=\"fd-busy-indicator__circle\"></div>\n <div class=\"fd-busy-indicator__circle\"></div>\n <div class=\"fd-busy-indicator__circle\"></div>\n </div>\n\n <span *ngIf=\"label\" class=\"fd-busy-indicator-extended__label\">{{ label }}</span>\n\n <div class=\"fd-busy-indicator__overlay\"></div>\n\n <div #fakeFocusElement tabindex=\"0\" aria-hidden=\"true\" (focusin)=\"fakeElementFocusHandler($event)\"></div>\n</ng-container>\n","import { AfterContentInit, ContentChild, Directive, ElementRef } from '@angular/core';\nimport { BusyIndicatorComponent } from '../busy-indicator.component';\nimport { FD_BUSY_INDICATOR_COMPONENT } from '../tokens';\n\nconst messageToastClass = 'fd-message-toast';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-busy-indicator-extended]'\n})\nexport class BusyIndicatorExtendedDirective implements AfterContentInit {\n /** @hidden */\n @ContentChild(FD_BUSY_INDICATOR_COMPONENT)\n busyIndicator: BusyIndicatorComponent;\n\n /** @hidden */\n constructor(public readonly elementRef: ElementRef) {}\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._appendCssToParent();\n }\n\n /** @hidden */\n private _appendCssToParent(): void {\n const hasLabel = this.busyIndicator.label;\n if (!hasLabel) {\n return;\n }\n const classList = this.elementRef.nativeElement.parentElement?.classList;\n if (classList) {\n classList.add('fd-busy-indicator-extended');\n if (classList.contains(messageToastClass)) {\n classList.add('fd-busy-indicator-extended--message-toast');\n }\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BusyIndicatorComponent } from './busy-indicator.component';\nimport { BusyIndicatorExtendedDirective } from './busy-indicator-extended/busy-indicator-extended.directive';\n\n@NgModule({\n declarations: [BusyIndicatorComponent, BusyIndicatorExtendedDirective],\n exports: [BusyIndicatorComponent, BusyIndicatorExtendedDirective],\n imports: [CommonModule]\n})\nexport class BusyIndicatorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAEa,2BAA2B,GAAG,IAAI,cAAc,CAAC,0BAA0B;;MCqC3E,sBAAsB,CAAA;;AAkC/B,IAAA,WAAA,CAAoB,WAAuB,EAAA;AAAvB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;;AA3B3C,QAAA,IAAI,CAAA,IAAA,GAAsB,GAAG,CAAC;;AAI9B,QAAA,IAAK,CAAA,KAAA,GAAG,KAAK,CAAC;;AAgBd,QAAA,IAAQ,CAAA,QAAA,GAA6C,IAAI,CAAC;KAOX;;AAI/C,IAAA,sBAAsB,CAAC,KAAoB,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AAClE,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAC/C,SAAA;KACJ;AAED;AACmE;AACnE,IAAA,uBAAuB,CAAC,KAAiB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;YACxE,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAC1C,SAAA;KACJ;;mHAnDQ,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAjBpB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,gCAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,0CAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,OAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,4CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACP,QAAA;AACI,YAAA,OAAO,EAAE,2BAA2B;AACpC,YAAA,WAAW,EAAE,sBAAsB;AACtC,SAAA;AACJ,KAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BL,uwBAqBA,EAAA,MAAA,EAAA,CAAA,65GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FDkBa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAvBlC,SAAS;+BACI,mBAAmB,EAAA,aAAA,EAGd,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,2BAA2B;AACpC,4BAAA,WAAW,EAAwB,sBAAA;AACtC,yBAAA;AACJ,qBAAA,EACK,IAAA,EAAA;AACF,wBAAA,aAAa,EAAE,0CAA0C;AACzD,wBAAA,iBAAiB,EAAE,kBAAkB;AACrC,wBAAA,kBAAkB,EAAE,SAAS;AAC7B,wBAAA,kBAAkB,EAAE,UAAU;AAC9B,wBAAA,mBAAmB,EAAE,WAAW;AAChC,wBAAA,cAAc,EAAE,OAAO;AACvB,wBAAA,sCAAsC,EAAE,MAAM;AAC9C,wBAAA,8CAA8C,EAAE,QAAQ;qBAC3D,EAAA,QAAA,EAAA,uwBAAA,EAAA,MAAA,EAAA,CAAA,65GAAA,CAAA,EAAA,CAAA;iGAKD,OAAO,EAAA,CAAA;sBADN,KAAK;gBAKN,IAAI,EAAA,CAAA;sBADH,KAAK;gBAKN,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAKN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAKN,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAKN,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAKN,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAKN,gBAAgB,EAAA,CAAA;sBADf,SAAS;uBAAC,kBAAkB,CAAA;gBAQ7B,sBAAsB,EAAA,CAAA;sBADrB,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAA;;;AExEvC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;MAMhC,8BAA8B,CAAA;;AAMvC,IAAA,WAAA,CAA4B,UAAsB,EAAA;AAAtB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;KAAI;;IAGtD,kBAAkB,GAAA;QACd,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC7B;;IAGO,kBAAkB,GAAA;;AACtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO;AACV,SAAA;AACD,QAAA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,CAAC;AACzE,QAAA,IAAI,SAAS,EAAE;AACX,YAAA,SAAS,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC5C,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;AACvC,gBAAA,SAAS,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;AAC9D,aAAA;AACJ,SAAA;KACJ;;2HA1BQ,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,8BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,+GAEzB,2BAA2B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAFhC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,8BAA8B;iBAC3C,CAAA;iGAIG,aAAa,EAAA,CAAA;sBADZ,YAAY;uBAAC,2BAA2B,CAAA;;;MCFhC,mBAAmB,CAAA;;gHAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;iHAAnB,mBAAmB,EAAA,YAAA,EAAA,CAJb,sBAAsB,EAAE,8BAA8B,aAE3D,YAAY,CAAA,EAAA,OAAA,EAAA,CADZ,sBAAsB,EAAE,8BAA8B,CAAA,EAAA,CAAA,CAAA;AAGvD,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAFlB,YAAY,CAAA,EAAA,CAAA,CAAA;2FAEb,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,CAAC,sBAAsB,EAAE,8BAA8B,CAAC;AACtE,oBAAA,OAAO,EAAE,CAAC,sBAAsB,EAAE,8BAA8B,CAAC;oBACjE,OAAO,EAAE,CAAC,YAAY,CAAC;iBAC1B,CAAA;;;ACTD;;AAEG;;;;"}