barsa-sap-ui 2.2.12 → 2.2.14

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.
@@ -10,14 +10,13 @@ import * as i3 from "@fundamental-ngx/core/bar";
10
10
  import * as i4 from "@fundamental-ngx/core/button";
11
11
  import * as i5 from "@fundamental-ngx/core/card";
12
12
  import * as i6 from "@fundamental-ngx/core/file-uploader";
13
- import * as i7 from "@fundamental-ngx/core/inline-help";
14
- import * as i8 from "@fundamental-ngx/core/layout-grid";
15
- import * as i9 from "@fundamental-ngx/core/menu";
16
- import * as i10 from "@fundamental-ngx/core/dialog";
17
- import * as i11 from "@fundamental-ngx/cdk/utils";
18
- import * as i12 from "@fundamental-ngx/core/title";
19
- import * as i13 from "@fundamental-ngx/core/toolbar";
20
- import * as i14 from "../mask/mask.component";
13
+ import * as i7 from "@fundamental-ngx/core/layout-grid";
14
+ import * as i8 from "@fundamental-ngx/core/menu";
15
+ import * as i9 from "@fundamental-ngx/core/dialog";
16
+ import * as i10 from "@fundamental-ngx/cdk/utils";
17
+ import * as i11 from "@fundamental-ngx/core/title";
18
+ import * as i12 from "@fundamental-ngx/core/toolbar";
19
+ import * as i13 from "../mask/mask.component";
21
20
  export class UiPicturesInfoComponent extends DeviceInfoFieldBaseComponent {
22
21
  constructor() {
23
22
  super(...arguments);
@@ -244,11 +243,11 @@ export class UiPicturesInfoComponent extends DeviceInfoFieldBaseComponent {
244
243
  this.value = value;
245
244
  }
246
245
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiPicturesInfoComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
247
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: UiPicturesInfoComponent, selector: "bsu-ui-pictures-info", inputs: { value: "value" }, providers: [UploadService], viewQueries: [{ propertyName: "gallery", first: true, predicate: ["gallery"], descendants: true }, { propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<fd-file-uploader\r\n #uploader\r\n [style.display]=\"'none'\"\r\n [id]=\"id\"\r\n [name]=\"'pictures_' + id\"\r\n [placeholder]=\"'AttachPicture' | bbbTranslate\"\r\n [buttonLabel]=\"'AttachPicture' | bbbTranslate\"\r\n [buttonAriaLabel]=\"'AttachPicture' | bbbTranslate\"\r\n accept=\".png,.jpg,.bpm,.jpeg,.gif,.png,.tif,.pdf\"\r\n [fileLimit]=\"maxFileCount === 0 ? 100 : maxFileCount\"\r\n [multiple]=\"maxFileCount === 0 || maxFileCount > 1\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n></fd-file-uploader>\r\n\r\n<ng-container *ngTemplateOutlet=\"layoutGridTpl\"></ng-container>\r\n<ng-template #layoutGridTpl let-inDialog=\"inDialog\" let-gallery=\"gallery\">\r\n <fd-layout-grid>\r\n @if (mediaData$ | async; as mediaData) {\r\n <div fdLayoutGridRow>\r\n @for (media of mediaData; track media; let i = $index) {\r\n <div [fdLayoutGridCol]=\"6\" [colMd]=\"3\" [colLg]=\"2\" [colXl]=\"2\" (click)=\"onMedaiClick(gallery, media, i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n cardTpl;\r\n context: { $implicit: media, mediaData: this.mediaData, inDialog: this.inDialog, index: i }\r\n \"\r\n ></ng-container>\r\n </div>\r\n } @if (!inDialog && (disableOrReadonly$ | async) === true ? false : true) {\r\n <div [fdLayoutGridCol]=\"6\" [colMd]=\"3\" [colLg]=\"2\" [colXl]=\"2\">\r\n <ng-container *ngTemplateOutlet=\"newFile\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </fd-layout-grid>\r\n</ng-template>\r\n<ng-template #cardTpl let-media let-mediaData=\"mediaData\" let-inDialog=\"inDialog\" let-index=\"index\">\r\n <fd-card class=\"media\" [class.inDialog]=\"inDialog\">\r\n <fd-card-content style=\"text-align: center; height: 120px\">\r\n <img imgLazy [imgLazy]=\"media.thumbnailUrl\" [src]=\"media.thumbnailUrl\" #img />\r\n </fd-card-content>\r\n @if (!inDialog) {\r\n <fd-card-footer>\r\n <button\r\n glyph=\"message-information\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n [fd-inline-help]=\"media.title\"\r\n [triggers]=\"['click']\"\r\n [closeOnOutsideClick]=\"true\"\r\n ></button>\r\n <button *fdCardFooterActionItem fd-button glyph=\"rotate\" (click)=\"onRotate(img, media, index)\"></button>\r\n\r\n <button\r\n glyph=\"full-screen\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n (click)=\"onFullscreen(media, mediaData)\"\r\n ></button>\r\n @if ((disableOrReadonly$ | async) === true ? false : true) {\r\n <button\r\n glyph=\"delete\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n (click)=\"onDelete(index)\"\r\n ></button>\r\n <button\r\n glyph=\"print\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n [file]=\"media\"\r\n [files]=\"mediaData\"\r\n printFiles\r\n ></button>\r\n }\r\n </fd-card-footer>\r\n }\r\n </fd-card>\r\n</ng-template>\r\n<ng-template #newFile>\r\n <div style=\"position: relative; height: 100%\">\r\n <fd-card>\r\n <fd-card-content style=\"display: flex; align-items: center; justify-content: center; min-height: 120px\">\r\n <button\r\n fd-button\r\n glyph=\"add-photo\"\r\n fdType=\"transparent\"\r\n [label]=\"'AttachFile' | bbbTranslate\"\r\n (click)=\"uploader.open()\"\r\n ></button>\r\n </fd-card-content>\r\n\r\n <fd-card-footer style=\"border-top: 1px solid #ccc\">\r\n <button fd-button [glyph]=\"'overflow'\" [fdType]=\"'transparent'\" [fdMenuTrigger]=\"menu\"></button>\r\n <fd-menu #menu>\r\n <li fd-menu-item (click)=\"onScan()\">\r\n <a fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Scan' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n <li fd-menu-item (click)=\"onAdvanceScan()\">\r\n <a fd-menu-interactive>\r\n <span fd-menu-title>{{ 'AdvancedScan' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n </fd-menu>\r\n </fd-card-footer>\r\n </fd-card>\r\n @if ((uploadingState$ | async)?.uploading === true) {\r\n <bsu-mask></bsu-mask>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #dialogTemplate let-dialog let-dialogConfig=\"dialogConfig\">\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" #dialogTpl class=\"vertical\">\r\n <fd-dialog-header>\r\n <ng-template fdkTemplate=\"header\">\r\n <div fd-bar-left>\r\n <fd-bar-element>\r\n <h1 fd-title>{{ Setting.ControlFieldCaptionTranslated }}</h1>\r\n </fd-bar-element>\r\n </div>\r\n <div fd-bar-right>\r\n @if (!dialogConfig.fullscreen) {\r\n <fd-button-bar\r\n ariaLabel=\"Fit image size\"\r\n [glyph]=\"'resize'\"\r\n [fdType]=\"fillWidth ? 'emphasized' : 'transparent'\"\r\n (click)=\"fillWidth = !fillWidth\"\r\n ></fd-button-bar>\r\n }\r\n <fd-button-bar ariaLabel=\"close\" glyph=\"decline\" (click)=\"dialog.close()\"></fd-button-bar>\r\n </div>\r\n </ng-template>\r\n </fd-dialog-header>\r\n <fd-dialog-body #fdbody>\r\n <div #gallery class=\"gallery inDialog\" style=\"flex: 1\">\r\n @for (media of dialog.data.mediaData; track media.FileId; let i = $index) {\r\n <div\r\n class=\"column big-imgs-box\"\r\n [class.fill-width]=\"fillWidth\"\r\n [class.fill-all]=\"fillAll\"\r\n [class.fill-original]=\"fillOriginal\"\r\n [ngClass]=\"selectedZoom\"\r\n >\r\n <fd-toolbar fdType=\"solid\" fdType=\"transparent\" [clearBorder]=\"true\">\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n <button fd-toolbar-item fd-button glyph=\"rotate\" (click)=\"onRotate(img, media, i)\"></button>\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n </fd-toolbar>\r\n <div class=\"pics\" [id]=\"i\">\r\n <bsu-mask></bsu-mask>\r\n <img #img imgLazy [imgLazy]=\"media.mediaUrl\" [src]=\"media.mediaUrl\" />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n @if ((deviceSize$ | async) !== 's') {\r\n <div class=\"thumbnail\" style=\"flex-shrink: 1\">\r\n <ng-cotainer\r\n *ngTemplateOutlet=\"layoutGridTpl; context: { inDialog: true, gallery: this.gallery }\"\r\n ></ng-cotainer>\r\n </div>\r\n }\r\n </fd-dialog-body>\r\n </fd-dialog>\r\n</ng-template>\r\n", styles: [":host{position:relative}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}.big-imgs-box{position:relative}.big-imgs-box>fd-toolbar{position:absolute;z-index:5;opacity:.5}.big-imgs-box>fd-toolbar:hover{opacity:1}fd-toolbar{width:100%}fd-dialog-footer{justify-content:center}.hatchBackground{min-height:100px}.gallery{display:flex;width:100%;height:400px;column-gap:1px;background-color:var(--sapField_Background, #fff)}.gallery ::-webkit-scrollbar{width:7px;height:7px}.gallery ::-webkit-scrollbar-track{box-shadow:inset 0 0 5px gray;border-radius:4px}.gallery ::-webkit-scrollbar-thumb{background:#555454;border-radius:4px}.gallery ::-webkit-scrollbar-thumb:hover{background:#2c2b2b}.gallery .column{overflow-y:scroll;display:flex;flex-direction:column;row-gap:3%;align-items:center}.gallery .column .pics{width:100%;display:flex;justify-content:center}.gallery .column .pics img{border-radius:5px}.gallery .column.small-imgs-box{flex:10%}.gallery .column.big-imgs-box{flex:90%}.gallery .selected{background-color:#fff;border:3px solid #0294d8;padding:10px}.gallery .fill-all .pics{height:100%}.gallery .fill-all img{width:100%!important;height:100%!important;object-fit:fill!important}.gallery .fill-original img{width:unset;height:unset}.gallery .zoom1 img{zoom:1}.gallery .zoom1-5 img{zoom:1.5}.gallery .zoom2 img{zoom:2}fd-dialog .gallery{overflow:auto}fd-dialog .gallery .column{overflow:initial}fd-dialog .gallery .pics{position:relative}fd-dialog fd-dialog-body{display:flex}fd-dialog.horizontal fd-dialog-body{flex-direction:column}fd-dialog.horizontal .gallery{flex-direction:row}fd-dialog.horizontal .thumbnail{border-top:1px solid #ccc;overflow-x:auto}fd-dialog.vertical fd-dialog-body{flex-direction:row-reverse}fd-dialog.vertical .gallery{flex-direction:column;height:100%}fd-dialog.vertical .thumbnail{border-left:1px solid #ccc;height:100%;width:200px;overflow-y:auto}fd-dialog.vertical .thumbnail ::ng-deep .fd-row>div{width:100%;min-width:100%}fd-card.media fd-card-footer button{border:none}fd-card.inDialog fd-card-header{padding-top:5px;padding-bottom:5px}.fd-col{min-width:165px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.ImageLazyDirective, selector: "[imgLazy]", inputs: ["auto", "threshold", "imgLazy"], outputs: ["imageLoaded"] }, { kind: "directive", type: i2.PrintFilesDirective, selector: "[printFiles]", inputs: ["files", "file", "isImageGallery", "component"] }, { kind: "directive", type: i3.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i3.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i3.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: i3.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.CardComponent, selector: "fd-card", inputs: ["badge", "badgeIcon", "badgeColor", "badgeColorSecondary", "badgeStatus", "badgeAriaLabel", "secondBadge", "secondBadgeIcon", "secondBadgeColor", "secondBadgeColorSecondary", "secondBadgeStatus", "secondBadgeAriaLabel", "isLoading", "cardType", "id", "ariaRoledescription", "ariaDescription", "ariaLabel", "role", "interactive", "selected", "ariaPosinset", "ariaSetsize"], outputs: ["ariaPosinsetChange", "ariaSetsizeChange"] }, { kind: "component", type: i5.CardContentComponent, selector: "fd-card-content" }, { kind: "component", type: i5.CardFooterComponent, selector: "fd-card-footer" }, { kind: "directive", type: i5.CardFooterActionItemDirective, selector: "[fdCardFooterActionItem]" }, { kind: "component", type: i6.FileUploaderComponent, selector: "fd-file-uploader", inputs: ["disabled", "required", "multiple", "accept", "dragndrop", "maxFileSize", "minFileSize", "id", "ariaLabel", "ariaLabelledBy", "placeholder", "buttonLabel", "buttonAriaLabel", "state", "fileLimit", "inputHidden", "width"], outputs: ["selectedFilesChanged", "selectedInvalidFiles", "onDragEnter", "onDragLeave"] }, { kind: "directive", type: i7.InlineHelpDirective, selector: "[fd-inline-help]:not([fd-inline-help-template]), [fd-inline-help-template]:not([fd-inline-help])", inputs: ["triggers", "noArrow", "closeOnEscapeKey", "closeOnOutsideClick", "fd-inline-help"] }, { kind: "component", type: i8.LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: i8.LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "directive", type: i8.LayoutGridRowDirective, selector: "[fd-layout-grid-row], [fdLayoutGridRow]" }, { kind: "component", type: i9.MenuComponent, selector: "fd-menu", inputs: ["mobile", "disabled", "focusTrapped", "focusAutoCapture", "openOnHoverTime", "mobileConfig", "ariaLabel", "ariaLabelledby", "id"], outputs: ["activePath"] }, { kind: "component", type: i9.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu", "parentSubmenu", "hasSeparator"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "component", type: i9.MenuInteractiveComponent, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i9.MenuTitleDirective, selector: "[fd-menu-title]" }, { kind: "directive", type: i9.MenuTriggerDirective, selector: "[fdMenuTrigger]", inputs: ["fdMenuTrigger"] }, { kind: "component", type: i10.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i10.DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: i10.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: i11.TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i12.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: i13.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "headingLevel", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i13.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i13.ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: i14.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
246
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: UiPicturesInfoComponent, selector: "bsu-ui-pictures-info", inputs: { value: "value" }, providers: [UploadService], viewQueries: [{ propertyName: "gallery", first: true, predicate: ["gallery"], descendants: true }, { propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<fd-file-uploader\r\n #uploader\r\n [style.display]=\"'none'\"\r\n [id]=\"id\"\r\n [name]=\"'pictures_' + id\"\r\n [placeholder]=\"'AttachPicture' | bbbTranslate\"\r\n [buttonLabel]=\"'AttachPicture' | bbbTranslate\"\r\n [buttonAriaLabel]=\"'AttachPicture' | bbbTranslate\"\r\n accept=\".png,.jpg,.bpm,.jpeg,.gif,.png,.tif,.pdf\"\r\n [fileLimit]=\"maxFileCount === 0 ? 100 : maxFileCount\"\r\n [multiple]=\"maxFileCount === 0 || maxFileCount > 1\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n></fd-file-uploader>\r\n\r\n<ng-container\r\n *ngTemplateOutlet=\"layoutGridTpl; context: { disableOrReadonly: disableOrReadonly$ | async }\"\r\n></ng-container>\r\n<ng-template #layoutGridTpl let-inDialog=\"inDialog\" let-gallery=\"gallery\" let-disableOrReadonly=\"disableOrReadonly\">\r\n <fd-layout-grid>\r\n @if (mediaData$ | async; as mediaData) {\r\n <div fdLayoutGridRow>\r\n @for (media of mediaData; track media; let i = $index) {\r\n <div [fdLayoutGridCol]=\"6\" [colMd]=\"3\" [colLg]=\"2\" [colXl]=\"2\" (click)=\"onMedaiClick(gallery, media, i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n cardTpl;\r\n context: {\r\n $implicit: media,\r\n mediaData: this.mediaData,\r\n inDialog: this.inDialog,\r\n index: i,\r\n disableOrReadonly: disableOrReadonly\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n } @if (!inDialog && !disableOrReadonly) {\r\n <div [fdLayoutGridCol]=\"6\" [colMd]=\"3\" [colLg]=\"2\" [colXl]=\"2\">\r\n <ng-container *ngTemplateOutlet=\"newFile\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </fd-layout-grid>\r\n</ng-template>\r\n<ng-template\r\n #cardTpl\r\n let-media\r\n let-mediaData=\"mediaData\"\r\n let-inDialog=\"inDialog\"\r\n let-index=\"index\"\r\n let-disableOrReadonly=\"disableOrReadonly\"\r\n>\r\n <fd-card class=\"media\" [class.inDialog]=\"inDialog\">\r\n <fd-card-content style=\"text-align: center; height: 120px\">\r\n <img imgLazy [imgLazy]=\"media.thumbnailUrl\" [src]=\"media.thumbnailUrl\" #img />\r\n </fd-card-content>\r\n @if (!inDialog) {\r\n <fd-card-footer>\r\n <button\r\n glyph=\"print\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n [files]=\"[media]\"\r\n printFiles\r\n ></button>\r\n <button\r\n glyph=\"full-screen\"\r\n [title]=\"'FullScreen' | bbbTranslate\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n (click)=\"onFullscreen(media, mediaData)\"\r\n ></button>\r\n\r\n <button fd-button [glyph]=\"'overflow'\" [fdType]=\"'transparent'\" [fdMenuTrigger]=\"menu\"></button>\r\n <fd-menu #menu>\r\n <li fd-menu-item [files]=\"mediaData\" printFiles>\r\n <a fd-menu-interactive>\r\n <fd-menu-addon position=\"before\" glyph=\"print\"></fd-menu-addon>\r\n <span fd-menu-title>{{ 'Print' | bbbTranslate }} {{ 'All' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n\r\n @if (!disableOrReadonly) {\r\n <li fd-menu-item (click)=\"onRotate(img, media, index)\">\r\n <a fd-menu-interactive>\r\n <fd-menu-addon position=\"before\" glyph=\"rotate\"></fd-menu-addon>\r\n <span fd-menu-title>{{ 'Rotate' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n <li fd-menu-item (click)=\"onDelete(index)\">\r\n <a fd-menu-interactive>\r\n <fd-menu-addon position=\"before\" glyph=\"delete\"></fd-menu-addon>\r\n <span fd-menu-title>{{ 'Delete' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n }\r\n </fd-menu>\r\n </fd-card-footer>\r\n }\r\n </fd-card>\r\n</ng-template>\r\n<ng-template #newFile>\r\n <div style=\"position: relative; height: 100%\">\r\n <fd-card>\r\n <fd-card-content style=\"display: flex; align-items: center; justify-content: center; min-height: 120px\">\r\n <button\r\n fd-button\r\n glyph=\"add-photo\"\r\n fdType=\"transparent\"\r\n [label]=\"'AttachFile' | bbbTranslate\"\r\n (click)=\"uploader.open()\"\r\n ></button>\r\n </fd-card-content>\r\n\r\n <fd-card-footer style=\"border-top: 1px solid #ccc\">\r\n <button fd-button [glyph]=\"'overflow'\" [fdType]=\"'transparent'\" [fdMenuTrigger]=\"menu\"></button>\r\n <fd-menu #menu>\r\n <li fd-menu-item (click)=\"onScan()\">\r\n <a fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Scan' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n <li fd-menu-item (click)=\"onAdvanceScan()\">\r\n <a fd-menu-interactive>\r\n <span fd-menu-title>{{ 'AdvancedScan' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n </fd-menu>\r\n </fd-card-footer>\r\n </fd-card>\r\n @if ((uploadingState$ | async)?.uploading === true) {\r\n <bsu-mask></bsu-mask>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #dialogTemplate let-dialog let-dialogConfig=\"dialogConfig\">\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" #dialogTpl class=\"vertical\">\r\n <fd-dialog-header>\r\n <ng-template fdkTemplate=\"header\">\r\n <div fd-bar-left>\r\n <fd-bar-element>\r\n <h1 fd-title>{{ Setting.ControlFieldCaptionTranslated }}</h1>\r\n </fd-bar-element>\r\n </div>\r\n <div fd-bar-right>\r\n <fd-button-bar\r\n ariaLabel=\"print\"\r\n [glyph]=\"'print'\"\r\n fdType=\"transparent\"\r\n [files]=\"dialog.data.mediaData\"\r\n printFiles\r\n ></fd-button-bar>\r\n @if (!dialogConfig.fullscreen) {\r\n <fd-button-bar\r\n ariaLabel=\"Fit image size\"\r\n [glyph]=\"'resize'\"\r\n [fdType]=\"fillWidth ? 'emphasized' : 'transparent'\"\r\n (click)=\"fillWidth = !fillWidth\"\r\n ></fd-button-bar>\r\n }\r\n <fd-button-bar ariaLabel=\"close\" glyph=\"decline\" (click)=\"dialog.close()\"></fd-button-bar>\r\n </div>\r\n </ng-template>\r\n </fd-dialog-header>\r\n <fd-dialog-body #fdbody>\r\n <div #gallery class=\"gallery inDialog\" style=\"flex: 1\">\r\n @for (media of dialog.data.mediaData; track media.FileId; let i = $index) {\r\n <div\r\n class=\"column big-imgs-box\"\r\n [class.fill-width]=\"fillWidth\"\r\n [class.fill-all]=\"fillAll\"\r\n [class.fill-original]=\"fillOriginal\"\r\n [ngClass]=\"selectedZoom\"\r\n >\r\n <fd-toolbar fdType=\"solid\" fdType=\"transparent\" [clearBorder]=\"true\">\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n <button fd-toolbar-item fd-button glyph=\"rotate\" (click)=\"onRotate(img, media, i)\"></button>\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n </fd-toolbar>\r\n <div class=\"pics\" [id]=\"i\">\r\n <bsu-mask></bsu-mask>\r\n <img #img imgLazy [imgLazy]=\"media.mediaUrl\" [src]=\"media.mediaUrl\" />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n @if ((deviceSize$ | async) !== 's') {\r\n <div class=\"thumbnail\" style=\"flex-shrink: 1\">\r\n <ng-cotainer\r\n *ngTemplateOutlet=\"\r\n layoutGridTpl;\r\n context: {\r\n inDialog: true,\r\n gallery: gallery,\r\n disableOrReadonly: disableOrReadonly$ | async\r\n }\r\n \"\r\n ></ng-cotainer>\r\n </div>\r\n }\r\n </fd-dialog-body>\r\n </fd-dialog>\r\n</ng-template>\r\n", styles: [":host{position:relative}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}.big-imgs-box{position:relative}.big-imgs-box>fd-toolbar{position:absolute;z-index:5;opacity:.5}.big-imgs-box>fd-toolbar:hover{opacity:1}fd-toolbar{width:100%}fd-dialog-footer{justify-content:center}.hatchBackground{min-height:100px}.gallery{display:flex;width:100%;height:400px;column-gap:1px;background-color:var(--sapField_Background, #fff)}.gallery ::-webkit-scrollbar{width:7px;height:7px}.gallery ::-webkit-scrollbar-track{box-shadow:inset 0 0 5px gray;border-radius:4px}.gallery ::-webkit-scrollbar-thumb{background:#555454;border-radius:4px}.gallery ::-webkit-scrollbar-thumb:hover{background:#2c2b2b}.gallery .column{overflow-y:scroll;display:flex;flex-direction:column;row-gap:3%;align-items:center}.gallery .column .pics{width:100%;display:flex;justify-content:center}.gallery .column .pics img{border-radius:5px}.gallery .column.small-imgs-box{flex:10%}.gallery .column.big-imgs-box{flex:90%}.gallery .selected{background-color:#fff;border:3px solid #0294d8;padding:10px}.gallery .fill-all .pics{height:100%}.gallery .fill-all img{width:100%!important;height:100%!important;object-fit:fill!important}.gallery .fill-original img{width:unset;height:unset}.gallery .zoom1 img{zoom:1}.gallery .zoom1-5 img{zoom:1.5}.gallery .zoom2 img{zoom:2}fd-dialog .gallery{overflow:auto}fd-dialog .gallery .column{overflow:initial}fd-dialog .gallery .pics{position:relative}fd-dialog fd-dialog-body{display:flex}fd-dialog.horizontal fd-dialog-body{flex-direction:column}fd-dialog.horizontal .gallery{flex-direction:row}fd-dialog.horizontal .thumbnail{border-top:1px solid #ccc;overflow-x:auto}fd-dialog.vertical fd-dialog-body{flex-direction:row-reverse}fd-dialog.vertical .gallery{flex-direction:column;height:100%}fd-dialog.vertical .thumbnail{border-left:1px solid #ccc;height:100%;width:200px;overflow-y:auto}fd-dialog.vertical .thumbnail ::ng-deep .fd-row>div{width:100%;min-width:100%}fd-card.media fd-card-footer button{border:none}fd-card.inDialog fd-card-header{padding-top:5px;padding-bottom:5px}.fd-col{min-width:165px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.ImageLazyDirective, selector: "[imgLazy]", inputs: ["auto", "threshold", "imgLazy"], outputs: ["imageLoaded"] }, { kind: "directive", type: i2.PrintFilesDirective, selector: "[printFiles]", inputs: ["files", "file", "isImageGallery", "component"] }, { kind: "directive", type: i3.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i3.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i3.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: i3.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.CardComponent, selector: "fd-card", inputs: ["badge", "badgeIcon", "badgeColor", "badgeColorSecondary", "badgeStatus", "badgeAriaLabel", "secondBadge", "secondBadgeIcon", "secondBadgeColor", "secondBadgeColorSecondary", "secondBadgeStatus", "secondBadgeAriaLabel", "isLoading", "cardType", "id", "ariaRoledescription", "ariaDescription", "ariaLabel", "role", "interactive", "selected", "ariaPosinset", "ariaSetsize"], outputs: ["ariaPosinsetChange", "ariaSetsizeChange"] }, { kind: "component", type: i5.CardContentComponent, selector: "fd-card-content" }, { kind: "component", type: i5.CardFooterComponent, selector: "fd-card-footer" }, { kind: "directive", type: i5.CardFooterActionItemDirective, selector: "[fdCardFooterActionItem]" }, { kind: "component", type: i6.FileUploaderComponent, selector: "fd-file-uploader", inputs: ["disabled", "required", "multiple", "accept", "dragndrop", "maxFileSize", "minFileSize", "id", "ariaLabel", "ariaLabelledBy", "placeholder", "buttonLabel", "buttonAriaLabel", "state", "fileLimit", "inputHidden", "width"], outputs: ["selectedFilesChanged", "selectedInvalidFiles", "onDragEnter", "onDragLeave"] }, { kind: "component", type: i7.LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: i7.LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "directive", type: i7.LayoutGridRowDirective, selector: "[fd-layout-grid-row], [fdLayoutGridRow]" }, { kind: "component", type: i8.MenuComponent, selector: "fd-menu", inputs: ["mobile", "disabled", "focusTrapped", "focusAutoCapture", "openOnHoverTime", "mobileConfig", "ariaLabel", "ariaLabelledby", "id"], outputs: ["activePath"] }, { kind: "component", type: i8.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu", "parentSubmenu", "hasSeparator"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "component", type: i8.MenuInteractiveComponent, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i8.MenuTitleDirective, selector: "[fd-menu-title]" }, { kind: "component", type: i8.MenuAddonDirective, selector: "fd-menu-addon", inputs: ["position", "submenuIndicator", "ariaHidden"] }, { kind: "directive", type: i8.MenuTriggerDirective, selector: "[fdMenuTrigger]", inputs: ["fdMenuTrigger"] }, { kind: "component", type: i9.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i9.DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: i9.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: i10.TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i11.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: i12.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "headingLevel", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i12.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i12.ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: i13.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
248
247
  }
249
248
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiPicturesInfoComponent, decorators: [{
250
249
  type: Component,
251
- args: [{ selector: 'bsu-ui-pictures-info', providers: [UploadService], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<fd-file-uploader\r\n #uploader\r\n [style.display]=\"'none'\"\r\n [id]=\"id\"\r\n [name]=\"'pictures_' + id\"\r\n [placeholder]=\"'AttachPicture' | bbbTranslate\"\r\n [buttonLabel]=\"'AttachPicture' | bbbTranslate\"\r\n [buttonAriaLabel]=\"'AttachPicture' | bbbTranslate\"\r\n accept=\".png,.jpg,.bpm,.jpeg,.gif,.png,.tif,.pdf\"\r\n [fileLimit]=\"maxFileCount === 0 ? 100 : maxFileCount\"\r\n [multiple]=\"maxFileCount === 0 || maxFileCount > 1\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n></fd-file-uploader>\r\n\r\n<ng-container *ngTemplateOutlet=\"layoutGridTpl\"></ng-container>\r\n<ng-template #layoutGridTpl let-inDialog=\"inDialog\" let-gallery=\"gallery\">\r\n <fd-layout-grid>\r\n @if (mediaData$ | async; as mediaData) {\r\n <div fdLayoutGridRow>\r\n @for (media of mediaData; track media; let i = $index) {\r\n <div [fdLayoutGridCol]=\"6\" [colMd]=\"3\" [colLg]=\"2\" [colXl]=\"2\" (click)=\"onMedaiClick(gallery, media, i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n cardTpl;\r\n context: { $implicit: media, mediaData: this.mediaData, inDialog: this.inDialog, index: i }\r\n \"\r\n ></ng-container>\r\n </div>\r\n } @if (!inDialog && (disableOrReadonly$ | async) === true ? false : true) {\r\n <div [fdLayoutGridCol]=\"6\" [colMd]=\"3\" [colLg]=\"2\" [colXl]=\"2\">\r\n <ng-container *ngTemplateOutlet=\"newFile\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </fd-layout-grid>\r\n</ng-template>\r\n<ng-template #cardTpl let-media let-mediaData=\"mediaData\" let-inDialog=\"inDialog\" let-index=\"index\">\r\n <fd-card class=\"media\" [class.inDialog]=\"inDialog\">\r\n <fd-card-content style=\"text-align: center; height: 120px\">\r\n <img imgLazy [imgLazy]=\"media.thumbnailUrl\" [src]=\"media.thumbnailUrl\" #img />\r\n </fd-card-content>\r\n @if (!inDialog) {\r\n <fd-card-footer>\r\n <button\r\n glyph=\"message-information\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n [fd-inline-help]=\"media.title\"\r\n [triggers]=\"['click']\"\r\n [closeOnOutsideClick]=\"true\"\r\n ></button>\r\n <button *fdCardFooterActionItem fd-button glyph=\"rotate\" (click)=\"onRotate(img, media, index)\"></button>\r\n\r\n <button\r\n glyph=\"full-screen\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n (click)=\"onFullscreen(media, mediaData)\"\r\n ></button>\r\n @if ((disableOrReadonly$ | async) === true ? false : true) {\r\n <button\r\n glyph=\"delete\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n (click)=\"onDelete(index)\"\r\n ></button>\r\n <button\r\n glyph=\"print\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n [file]=\"media\"\r\n [files]=\"mediaData\"\r\n printFiles\r\n ></button>\r\n }\r\n </fd-card-footer>\r\n }\r\n </fd-card>\r\n</ng-template>\r\n<ng-template #newFile>\r\n <div style=\"position: relative; height: 100%\">\r\n <fd-card>\r\n <fd-card-content style=\"display: flex; align-items: center; justify-content: center; min-height: 120px\">\r\n <button\r\n fd-button\r\n glyph=\"add-photo\"\r\n fdType=\"transparent\"\r\n [label]=\"'AttachFile' | bbbTranslate\"\r\n (click)=\"uploader.open()\"\r\n ></button>\r\n </fd-card-content>\r\n\r\n <fd-card-footer style=\"border-top: 1px solid #ccc\">\r\n <button fd-button [glyph]=\"'overflow'\" [fdType]=\"'transparent'\" [fdMenuTrigger]=\"menu\"></button>\r\n <fd-menu #menu>\r\n <li fd-menu-item (click)=\"onScan()\">\r\n <a fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Scan' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n <li fd-menu-item (click)=\"onAdvanceScan()\">\r\n <a fd-menu-interactive>\r\n <span fd-menu-title>{{ 'AdvancedScan' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n </fd-menu>\r\n </fd-card-footer>\r\n </fd-card>\r\n @if ((uploadingState$ | async)?.uploading === true) {\r\n <bsu-mask></bsu-mask>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #dialogTemplate let-dialog let-dialogConfig=\"dialogConfig\">\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" #dialogTpl class=\"vertical\">\r\n <fd-dialog-header>\r\n <ng-template fdkTemplate=\"header\">\r\n <div fd-bar-left>\r\n <fd-bar-element>\r\n <h1 fd-title>{{ Setting.ControlFieldCaptionTranslated }}</h1>\r\n </fd-bar-element>\r\n </div>\r\n <div fd-bar-right>\r\n @if (!dialogConfig.fullscreen) {\r\n <fd-button-bar\r\n ariaLabel=\"Fit image size\"\r\n [glyph]=\"'resize'\"\r\n [fdType]=\"fillWidth ? 'emphasized' : 'transparent'\"\r\n (click)=\"fillWidth = !fillWidth\"\r\n ></fd-button-bar>\r\n }\r\n <fd-button-bar ariaLabel=\"close\" glyph=\"decline\" (click)=\"dialog.close()\"></fd-button-bar>\r\n </div>\r\n </ng-template>\r\n </fd-dialog-header>\r\n <fd-dialog-body #fdbody>\r\n <div #gallery class=\"gallery inDialog\" style=\"flex: 1\">\r\n @for (media of dialog.data.mediaData; track media.FileId; let i = $index) {\r\n <div\r\n class=\"column big-imgs-box\"\r\n [class.fill-width]=\"fillWidth\"\r\n [class.fill-all]=\"fillAll\"\r\n [class.fill-original]=\"fillOriginal\"\r\n [ngClass]=\"selectedZoom\"\r\n >\r\n <fd-toolbar fdType=\"solid\" fdType=\"transparent\" [clearBorder]=\"true\">\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n <button fd-toolbar-item fd-button glyph=\"rotate\" (click)=\"onRotate(img, media, i)\"></button>\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n </fd-toolbar>\r\n <div class=\"pics\" [id]=\"i\">\r\n <bsu-mask></bsu-mask>\r\n <img #img imgLazy [imgLazy]=\"media.mediaUrl\" [src]=\"media.mediaUrl\" />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n @if ((deviceSize$ | async) !== 's') {\r\n <div class=\"thumbnail\" style=\"flex-shrink: 1\">\r\n <ng-cotainer\r\n *ngTemplateOutlet=\"layoutGridTpl; context: { inDialog: true, gallery: this.gallery }\"\r\n ></ng-cotainer>\r\n </div>\r\n }\r\n </fd-dialog-body>\r\n </fd-dialog>\r\n</ng-template>\r\n", styles: [":host{position:relative}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}.big-imgs-box{position:relative}.big-imgs-box>fd-toolbar{position:absolute;z-index:5;opacity:.5}.big-imgs-box>fd-toolbar:hover{opacity:1}fd-toolbar{width:100%}fd-dialog-footer{justify-content:center}.hatchBackground{min-height:100px}.gallery{display:flex;width:100%;height:400px;column-gap:1px;background-color:var(--sapField_Background, #fff)}.gallery ::-webkit-scrollbar{width:7px;height:7px}.gallery ::-webkit-scrollbar-track{box-shadow:inset 0 0 5px gray;border-radius:4px}.gallery ::-webkit-scrollbar-thumb{background:#555454;border-radius:4px}.gallery ::-webkit-scrollbar-thumb:hover{background:#2c2b2b}.gallery .column{overflow-y:scroll;display:flex;flex-direction:column;row-gap:3%;align-items:center}.gallery .column .pics{width:100%;display:flex;justify-content:center}.gallery .column .pics img{border-radius:5px}.gallery .column.small-imgs-box{flex:10%}.gallery .column.big-imgs-box{flex:90%}.gallery .selected{background-color:#fff;border:3px solid #0294d8;padding:10px}.gallery .fill-all .pics{height:100%}.gallery .fill-all img{width:100%!important;height:100%!important;object-fit:fill!important}.gallery .fill-original img{width:unset;height:unset}.gallery .zoom1 img{zoom:1}.gallery .zoom1-5 img{zoom:1.5}.gallery .zoom2 img{zoom:2}fd-dialog .gallery{overflow:auto}fd-dialog .gallery .column{overflow:initial}fd-dialog .gallery .pics{position:relative}fd-dialog fd-dialog-body{display:flex}fd-dialog.horizontal fd-dialog-body{flex-direction:column}fd-dialog.horizontal .gallery{flex-direction:row}fd-dialog.horizontal .thumbnail{border-top:1px solid #ccc;overflow-x:auto}fd-dialog.vertical fd-dialog-body{flex-direction:row-reverse}fd-dialog.vertical .gallery{flex-direction:column;height:100%}fd-dialog.vertical .thumbnail{border-left:1px solid #ccc;height:100%;width:200px;overflow-y:auto}fd-dialog.vertical .thumbnail ::ng-deep .fd-row>div{width:100%;min-width:100%}fd-card.media fd-card-footer button{border:none}fd-card.inDialog fd-card-header{padding-top:5px;padding-bottom:5px}.fd-col{min-width:165px}\n"] }]
250
+ args: [{ selector: 'bsu-ui-pictures-info', providers: [UploadService], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<fd-file-uploader\r\n #uploader\r\n [style.display]=\"'none'\"\r\n [id]=\"id\"\r\n [name]=\"'pictures_' + id\"\r\n [placeholder]=\"'AttachPicture' | bbbTranslate\"\r\n [buttonLabel]=\"'AttachPicture' | bbbTranslate\"\r\n [buttonAriaLabel]=\"'AttachPicture' | bbbTranslate\"\r\n accept=\".png,.jpg,.bpm,.jpeg,.gif,.png,.tif,.pdf\"\r\n [fileLimit]=\"maxFileCount === 0 ? 100 : maxFileCount\"\r\n [multiple]=\"maxFileCount === 0 || maxFileCount > 1\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n></fd-file-uploader>\r\n\r\n<ng-container\r\n *ngTemplateOutlet=\"layoutGridTpl; context: { disableOrReadonly: disableOrReadonly$ | async }\"\r\n></ng-container>\r\n<ng-template #layoutGridTpl let-inDialog=\"inDialog\" let-gallery=\"gallery\" let-disableOrReadonly=\"disableOrReadonly\">\r\n <fd-layout-grid>\r\n @if (mediaData$ | async; as mediaData) {\r\n <div fdLayoutGridRow>\r\n @for (media of mediaData; track media; let i = $index) {\r\n <div [fdLayoutGridCol]=\"6\" [colMd]=\"3\" [colLg]=\"2\" [colXl]=\"2\" (click)=\"onMedaiClick(gallery, media, i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n cardTpl;\r\n context: {\r\n $implicit: media,\r\n mediaData: this.mediaData,\r\n inDialog: this.inDialog,\r\n index: i,\r\n disableOrReadonly: disableOrReadonly\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n } @if (!inDialog && !disableOrReadonly) {\r\n <div [fdLayoutGridCol]=\"6\" [colMd]=\"3\" [colLg]=\"2\" [colXl]=\"2\">\r\n <ng-container *ngTemplateOutlet=\"newFile\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </fd-layout-grid>\r\n</ng-template>\r\n<ng-template\r\n #cardTpl\r\n let-media\r\n let-mediaData=\"mediaData\"\r\n let-inDialog=\"inDialog\"\r\n let-index=\"index\"\r\n let-disableOrReadonly=\"disableOrReadonly\"\r\n>\r\n <fd-card class=\"media\" [class.inDialog]=\"inDialog\">\r\n <fd-card-content style=\"text-align: center; height: 120px\">\r\n <img imgLazy [imgLazy]=\"media.thumbnailUrl\" [src]=\"media.thumbnailUrl\" #img />\r\n </fd-card-content>\r\n @if (!inDialog) {\r\n <fd-card-footer>\r\n <button\r\n glyph=\"print\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n [files]=\"[media]\"\r\n printFiles\r\n ></button>\r\n <button\r\n glyph=\"full-screen\"\r\n [title]=\"'FullScreen' | bbbTranslate\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n (click)=\"onFullscreen(media, mediaData)\"\r\n ></button>\r\n\r\n <button fd-button [glyph]=\"'overflow'\" [fdType]=\"'transparent'\" [fdMenuTrigger]=\"menu\"></button>\r\n <fd-menu #menu>\r\n <li fd-menu-item [files]=\"mediaData\" printFiles>\r\n <a fd-menu-interactive>\r\n <fd-menu-addon position=\"before\" glyph=\"print\"></fd-menu-addon>\r\n <span fd-menu-title>{{ 'Print' | bbbTranslate }} {{ 'All' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n\r\n @if (!disableOrReadonly) {\r\n <li fd-menu-item (click)=\"onRotate(img, media, index)\">\r\n <a fd-menu-interactive>\r\n <fd-menu-addon position=\"before\" glyph=\"rotate\"></fd-menu-addon>\r\n <span fd-menu-title>{{ 'Rotate' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n <li fd-menu-item (click)=\"onDelete(index)\">\r\n <a fd-menu-interactive>\r\n <fd-menu-addon position=\"before\" glyph=\"delete\"></fd-menu-addon>\r\n <span fd-menu-title>{{ 'Delete' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n }\r\n </fd-menu>\r\n </fd-card-footer>\r\n }\r\n </fd-card>\r\n</ng-template>\r\n<ng-template #newFile>\r\n <div style=\"position: relative; height: 100%\">\r\n <fd-card>\r\n <fd-card-content style=\"display: flex; align-items: center; justify-content: center; min-height: 120px\">\r\n <button\r\n fd-button\r\n glyph=\"add-photo\"\r\n fdType=\"transparent\"\r\n [label]=\"'AttachFile' | bbbTranslate\"\r\n (click)=\"uploader.open()\"\r\n ></button>\r\n </fd-card-content>\r\n\r\n <fd-card-footer style=\"border-top: 1px solid #ccc\">\r\n <button fd-button [glyph]=\"'overflow'\" [fdType]=\"'transparent'\" [fdMenuTrigger]=\"menu\"></button>\r\n <fd-menu #menu>\r\n <li fd-menu-item (click)=\"onScan()\">\r\n <a fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Scan' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n <li fd-menu-item (click)=\"onAdvanceScan()\">\r\n <a fd-menu-interactive>\r\n <span fd-menu-title>{{ 'AdvancedScan' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n </fd-menu>\r\n </fd-card-footer>\r\n </fd-card>\r\n @if ((uploadingState$ | async)?.uploading === true) {\r\n <bsu-mask></bsu-mask>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #dialogTemplate let-dialog let-dialogConfig=\"dialogConfig\">\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" #dialogTpl class=\"vertical\">\r\n <fd-dialog-header>\r\n <ng-template fdkTemplate=\"header\">\r\n <div fd-bar-left>\r\n <fd-bar-element>\r\n <h1 fd-title>{{ Setting.ControlFieldCaptionTranslated }}</h1>\r\n </fd-bar-element>\r\n </div>\r\n <div fd-bar-right>\r\n <fd-button-bar\r\n ariaLabel=\"print\"\r\n [glyph]=\"'print'\"\r\n fdType=\"transparent\"\r\n [files]=\"dialog.data.mediaData\"\r\n printFiles\r\n ></fd-button-bar>\r\n @if (!dialogConfig.fullscreen) {\r\n <fd-button-bar\r\n ariaLabel=\"Fit image size\"\r\n [glyph]=\"'resize'\"\r\n [fdType]=\"fillWidth ? 'emphasized' : 'transparent'\"\r\n (click)=\"fillWidth = !fillWidth\"\r\n ></fd-button-bar>\r\n }\r\n <fd-button-bar ariaLabel=\"close\" glyph=\"decline\" (click)=\"dialog.close()\"></fd-button-bar>\r\n </div>\r\n </ng-template>\r\n </fd-dialog-header>\r\n <fd-dialog-body #fdbody>\r\n <div #gallery class=\"gallery inDialog\" style=\"flex: 1\">\r\n @for (media of dialog.data.mediaData; track media.FileId; let i = $index) {\r\n <div\r\n class=\"column big-imgs-box\"\r\n [class.fill-width]=\"fillWidth\"\r\n [class.fill-all]=\"fillAll\"\r\n [class.fill-original]=\"fillOriginal\"\r\n [ngClass]=\"selectedZoom\"\r\n >\r\n <fd-toolbar fdType=\"solid\" fdType=\"transparent\" [clearBorder]=\"true\">\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n <button fd-toolbar-item fd-button glyph=\"rotate\" (click)=\"onRotate(img, media, i)\"></button>\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n </fd-toolbar>\r\n <div class=\"pics\" [id]=\"i\">\r\n <bsu-mask></bsu-mask>\r\n <img #img imgLazy [imgLazy]=\"media.mediaUrl\" [src]=\"media.mediaUrl\" />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n @if ((deviceSize$ | async) !== 's') {\r\n <div class=\"thumbnail\" style=\"flex-shrink: 1\">\r\n <ng-cotainer\r\n *ngTemplateOutlet=\"\r\n layoutGridTpl;\r\n context: {\r\n inDialog: true,\r\n gallery: gallery,\r\n disableOrReadonly: disableOrReadonly$ | async\r\n }\r\n \"\r\n ></ng-cotainer>\r\n </div>\r\n }\r\n </fd-dialog-body>\r\n </fd-dialog>\r\n</ng-template>\r\n", styles: [":host{position:relative}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}.big-imgs-box{position:relative}.big-imgs-box>fd-toolbar{position:absolute;z-index:5;opacity:.5}.big-imgs-box>fd-toolbar:hover{opacity:1}fd-toolbar{width:100%}fd-dialog-footer{justify-content:center}.hatchBackground{min-height:100px}.gallery{display:flex;width:100%;height:400px;column-gap:1px;background-color:var(--sapField_Background, #fff)}.gallery ::-webkit-scrollbar{width:7px;height:7px}.gallery ::-webkit-scrollbar-track{box-shadow:inset 0 0 5px gray;border-radius:4px}.gallery ::-webkit-scrollbar-thumb{background:#555454;border-radius:4px}.gallery ::-webkit-scrollbar-thumb:hover{background:#2c2b2b}.gallery .column{overflow-y:scroll;display:flex;flex-direction:column;row-gap:3%;align-items:center}.gallery .column .pics{width:100%;display:flex;justify-content:center}.gallery .column .pics img{border-radius:5px}.gallery .column.small-imgs-box{flex:10%}.gallery .column.big-imgs-box{flex:90%}.gallery .selected{background-color:#fff;border:3px solid #0294d8;padding:10px}.gallery .fill-all .pics{height:100%}.gallery .fill-all img{width:100%!important;height:100%!important;object-fit:fill!important}.gallery .fill-original img{width:unset;height:unset}.gallery .zoom1 img{zoom:1}.gallery .zoom1-5 img{zoom:1.5}.gallery .zoom2 img{zoom:2}fd-dialog .gallery{overflow:auto}fd-dialog .gallery .column{overflow:initial}fd-dialog .gallery .pics{position:relative}fd-dialog fd-dialog-body{display:flex}fd-dialog.horizontal fd-dialog-body{flex-direction:column}fd-dialog.horizontal .gallery{flex-direction:row}fd-dialog.horizontal .thumbnail{border-top:1px solid #ccc;overflow-x:auto}fd-dialog.vertical fd-dialog-body{flex-direction:row-reverse}fd-dialog.vertical .gallery{flex-direction:column;height:100%}fd-dialog.vertical .thumbnail{border-left:1px solid #ccc;height:100%;width:200px;overflow-y:auto}fd-dialog.vertical .thumbnail ::ng-deep .fd-row>div{width:100%;min-width:100%}fd-card.media fd-card-footer button{border:none}fd-card.inDialog fd-card-header{padding-top:5px;padding-bottom:5px}.fd-col{min-width:165px}\n"] }]
252
251
  }], propDecorators: { value: [{
253
252
  type: Input
254
253
  }], gallery: [{
@@ -258,4 +257,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
258
257
  type: ViewChild,
259
258
  args: ['dialogTemplate', { read: TemplateRef }]
260
259
  }] } });
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcGljdHVyZXMtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS1waWN0dXJlcy1pbmZvL3VpLXBpY3R1cmVzLWluZm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcGljdHVyZXMtaW5mby91aS1waWN0dXJlcy1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFHTCxTQUFTLEVBQ1QsV0FBVyxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdkUsT0FBTyxFQUNILFFBQVEsRUFDUixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUV4QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBVXpFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSw0QkFBNEI7SUFSekU7O1FBcUJJLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUduQyxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFVLEVBQUUsQ0FBQyxDQUFDO1FBR25ELGtCQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFJbkIsaUJBQVksR0FBa0MsT0FBTyxDQUFDO1FBSzlDLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0tBK1A3RDtJQTdQRyxRQUFR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MUNwRCx1d1BBNEtBOzs0RkQ1SWEsdUJBQXVCO2tCQVJuQyxTQUFTOytCQUNJLHNCQUFzQixhQUdyQixDQUFDLGFBQWEsQ0FBQyxtQkFDVCx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLEtBQUs7OEJBR1IsS0FBSztzQkFBYixLQUFLO2dCQVFnQixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBQ2dDLGNBQWM7c0JBQWpFLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIElucHV0LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgVGVtcGxhdGVSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ29udGVudERlbnNpdHkgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEJhcnNhQXBpLFxyXG4gICAgVXBsb2FkU2VydmljZSxcclxuICAgIGdldERldmljZUlzTW9iaWxlLFxyXG4gICAgRmlsZXNWYWxpZGF0aW9uSGVscGVyLFxyXG4gICAgSVVwbG9hZGluZ1N0YXRlXHJcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQgeyBEZXZpY2VJbmZvRmllbGRCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGV2aWNlLWluZm8tZmllbGQtYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYnN1LXVpLXBpY3R1cmVzLWluZm8nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLXBpY3R1cmVzLWluZm8uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdWktcGljdHVyZXMtaW5mby5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbVXBsb2FkU2VydmljZV0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaVBpY3R1cmVzSW5mb0NvbXBvbmVudCBleHRlbmRzIERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBASW5wdXQoKSB2YWx1ZToge1xyXG4gICAgICAgIElkOiBzdHJpbmc7XHJcbiAgICAgICAgRmlsZUlkOiBzdHJpbmc7XHJcbiAgICAgICAgRmlsZU5hbWU6IHN0cmluZztcclxuICAgICAgICBXaWR0aDogc3RyaW5nO1xyXG4gICAgICAgIEhlaWdodDogc3RyaW5nO1xyXG4gICAgICAgIFNpemU6IHN0cmluZztcclxuICAgIH1bXTtcclxuICAgIEBWaWV3Q2hpbGQoJ2dhbGxlcnknKSBnYWxsZXJ5ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgICBAVmlld0NoaWxkKCdkaWFsb2dUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgZGlhbG9nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgdXBsb2FkaW5nU3RhdGUkOiBPYnNlcnZhYmxlPElVcGxvYWRpbmdTdGF0ZT47XHJcbiAgICBjYW5jZWxhdGlvbiQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgY29udGVudERlbnNpdHkkOiBPYnNlcnZhYmxlPENvbnRlbnREZW5zaXR5PjtcclxuICAgIGZpbGVzOiBGaWxlW107XHJcbiAgICBtZWRpYURhdGFTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZGlhW10+KFtdKTtcclxuICAgIG1lZGlhRGF0YSQ6IE9ic2VydmFibGU8TWVkaWFbXT47XHJcbiAgICBpc01vYmlsZTogYW55O1xyXG4gICAgc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG4gICAgZmlsbFdpZHRoOiBib29sZWFuO1xyXG4gICAgZmlsbEFsbDogYm9vbGVhbjtcclxuICAgIGZpbGxPcmlnaW5hbDogYm9vbGVhbjtcclxuICAgIHNlbGVjdGVkWm9vbTogJ3pvb20xJyB8ICd6b29tMS01JyB8ICd6b29tMicgPSAnem9vbTEnO1xyXG4gICAgZmlsZXNWYWxpZGF0aW9uSGVscGVyOiBGaWxlc1ZhbGlkYXRpb25IZWxwZXI7XHJcbiAgICBtYXhGaWxlQ291bnQ6IG51bWJlcjtcclxuICAgIGZpbGVDb3VudCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuXHJcbiAgICBwcml2YXRlIF9maWxlQ291bnRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maWxlQ291bnQkID0gdGhpcy5fZmlsZUNvdW50U291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMubWVkaWFEYXRhJCA9IHRoaXMubWVkaWFEYXRhU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5pc01vYmlsZSA9IGdldERldmljZUlzTW9iaWxlKCk7XHJcbiAgICAgICAgdGhpcy51cGxvYWRpbmdTdGF0ZSQgPSB0aGlzLl91cGxvYWRTZXJ2aWNlLnVwbG9hZGluZ1N0YXRlJDtcclxuICAgICAgICB0aGlzLnZhbHVlJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLl9zZXRGaWxlQ291bnQodmFsdWUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWxlc1ZhbGlkYXRpb25IZWxwZXIgPSBuZXcgRmlsZXNWYWxpZGF0aW9uSGVscGVyKFxyXG4gICAgICAgICAgICB0aGlzLlNldHRpbmcuTWF4UGljdHVyZUNvdW50LFxyXG4gICAgICAgICAgICB0aGlzLlNldHRpbmcuTWF4RmlsZVNpemVLYixcclxuICAgICAgICAgICAgdGhpcy5TZXR0aW5nLk1heFRvdGFsRmlsZVNpemVLYlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5tYXhGaWxlQ291bnQgPSB0aGlzLmZpbGVzVmFsaWRhdGlvbkhlbHBlci5tYXhGaWxlQ291bnQ7XHJcblxyXG4gICAgICAgIHRoaXMuX3ByZXBhcmVHYWxsZXJ5KHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5vbih7XHJcbiAgICAgICAgICAgIERpc3BsYXlJbWFnZXM6IHRoaXMuX2Rpc3BsYXlJbWFnZXMuYmluZCh0aGlzKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ0Rpc3BsYXlJbWFnZXMnLCB0aGlzLl9kaXNwbGF5SW1hZ2VzKTtcclxuICAgIH1cclxuICAgIG9uUm90YXRlKGltZ0VsOiBIVE1MSW1hZ2VFbGVtZW50LCBtZWRpYTI6IE1lZGlhLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gMTtcclxuICAgICAgICBjb25zdCBtZWRpYTogYW55ID0gbWVkaWEyO1xyXG4gICAgICAgIGNvbnN0IGJwSWQgPSBtZWRpYS5GaWxlSWQ7XHJcbiAgICAgICAgY29uc3QgYW5nbGUgPSA5MCAqIGRpcmVjdGlvbjtcclxuICAgICAgICBpZiAobWVkaWEuUm90YXRpb25BbmdsZSkge1xyXG4gICAgICAgICAgICBtZWRpYS5Sb3RhdGlvbkFuZ2xlID0gKG1lZGlhLlJvdGF0aW9uQW5nbGUgKyBhbmdsZSkgJSAzNjA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWVkaWEuUm90YXRpb25BbmdsZSA9IGFuZ2xlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdyA9IGltZ0VsLm9mZnNldFdpZHRoO1xyXG4gICAgICAgIGNvbnN0IGggPSBpbWdFbC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgbGV0IG1hcmdpbiA9ICh3IC0gaCkgLyAyO1xyXG4gICAgICAgIGxldCBzY2FsZUZhY3RvciA9IHcgLyBoO1xyXG4gICAgICAgIGlmIChtZWRpYS5zY2FsZUZhY3Rvcikge1xyXG4gICAgICAgICAgICBzY2FsZUZhY3RvciA9IDE7XHJcbiAgICAgICAgICAgIG1lZGlhLnNjYWxlRmFjdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgbWFyZ2luID0gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtZWRpYS5zY2FsZUZhY3RvciA9IHNjYWxlRmFjdG9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNjYWxlRmFjdG9yIDwgMSkge1xyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUoaW1nRWwsICd0cmFuc2Zvcm0nLCBgcm90YXRlKCR7bWVkaWEuUm90YXRpb25BbmdsZX1kZWcpIHNjYWxlKCR7c2NhbGVGYWN0b3J9KWApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZShpbWdFbCwgJ3RyYW5zZm9ybScsIGByb3RhdGUoJHttZWRpYS5Sb3RhdGlvbkFuZ2xlfWRlZylgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKGltZ0VsLCAnbWFyZ2luLWJvdHRvbScsIG1hcmdpbiArICdweCcpO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZShpbWdFbCwgJ21hcmdpbi10b3AnLCBtYXJnaW4gKyAncHgnKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdTZXR0aW5nc0NoYW5nZScsIHRoaXMsIHtcclxuICAgICAgICAgICAgRmlsZUlkOiBicElkLFxyXG4gICAgICAgICAgICBBbmdsZTogbWVkaWEuUm90YXRpb25BbmdsZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25GdWxsc2NyZWVuKG1lZGlhLCBtZWRpYURhdGEpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHsgbWVkaWEsIG1lZGlhRGF0YSB9LFxyXG4gICAgICAgICAgICBlc2NLZXlDbG9zZWFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBtb2JpbGU6IHRydWUsXHJcbiAgICAgICAgICAgIHZlcnRpY2FsUGFkZGluZzogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLmRpYWxvZ1RlbXBsYXRlLCBkaWFsb2dDb25maWcpO1xyXG4gICAgfVxyXG4gICAgb25NZWRhaUNsaWNrKGdhbGxlcnksIG1lZGlhLCBpbmRleCk6IHZvaWQge1xyXG4gICAgICAgIGdhbGxlcnkgJiYgZ2FsbGVyeS5xdWVyeVNlbGVjdG9yKCdbaWQ9XCInICsgU3RyaW5nKGluZGV4KSArICdcIl0nKT8uc2Nyb2xsSW50b1ZpZXcodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBvblRodW1ibmFpbENsaWNrZWQoaW1nSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGltZ0luZGV4O1xyXG4gICAgICAgIHRoaXMuZ2FsbGVyeS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD1cIicgKyBTdHJpbmcoaW1nSW5kZXgpICsgJ1wiXScpPy5zY3JvbGxJbnRvVmlldyh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkRlbGV0ZShpbmRleCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTWVkaWEgPSB0aGlzLnZhbHVlW2luZGV4XTtcclxuICAgICAgICB0aGlzLl9kZWxldGVNZWRpYShzZWxlY3RlZE1lZGlhKTtcclxuICAgIH1cclxuICAgIG9uU2NhbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zY2FuSGVscGVyKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkFkdmFuY2VTY2FuKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NjYW5IZWxwZXIodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25ab29tSW4oKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkWm9vbSkge1xyXG4gICAgICAgICAgICBjYXNlICd6b29tMSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkWm9vbSA9ICd6b29tMS01JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd6b29tMS01JzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRab29tID0gJ3pvb20yJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblpvb21PdXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkWm9vbSkge1xyXG4gICAgICAgICAgICBjYXNlICd6b29tMic6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkWm9vbSA9ICd6b29tMS01JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd6b29tMS01JzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRab29tID0gJ3pvb20xJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkZpbGxPcmlnaW5hbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbGxXaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsbEFsbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsbE9yaWdpbmFsID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBvbkZpbGxXaWR0aCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbGxXaWR0aCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maWxsQWxsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maWxsT3JpZ2luYWwgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvbkZpbGxBbGwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maWxsQWxsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZpbGxPcmlnaW5hbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsbFdpZHRoID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBvbkZpbGVTZWxlY3Rpb24oZmlsZXM6IEZpbGVbXSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmlsZXNWYWxpZGF0aW9uSGVscGVyLnZhbGlkYXRlRmlsZXMoZmlsZXMpO1xyXG4gICAgICAgIHRoaXMudXBsb2FkVG9TZXJ2ZXIoZmlsZXMpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZGVsZXRlTWVkaWEoc2VsZWN0ZWRNZWRpYSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgSWQsIEZpbGVJZCB9ID0gc2VsZWN0ZWRNZWRpYTtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRJZCA9IElkO1xyXG4gICAgICAgIGlmICghc2VsZWN0ZWRJZCkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZElkID0gRmlsZUlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzZWxlY3RlZFBpY0luZGV4ID0gdGhpcy52YWx1ZS5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IHNlbGVjdGVkSWQgfHwgYy5GaWxlSWQgPT09IHNlbGVjdGVkSWQpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLmZpbHRlcigoYykgPT4gYy5JZCAhPT0gc2VsZWN0ZWRJZCAmJiBjLkZpbGVJZCAhPT0gc2VsZWN0ZWRJZCk7XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZUdhbGxlcnkodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ0NoYW5nZScsIHtcclxuICAgICAgICAgICAgRmlsZUlkOiBzZWxlY3RlZElkLFxyXG4gICAgICAgICAgICBJc0RlbGV0ZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIE9sZEluZGV4OiBzZWxlY3RlZFBpY0luZGV4XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NjYW5IZWxwZXIoaXNBZHZhbmNlZCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNjYW5uZXIgPSBuZXcgQmFyc2FBcGkuQ29tbW9uLkJhcnNhU2Nhbm5lcih7XHJcbiAgICAgICAgICAgIFNjYW5uZXJBZ2VudFBhcmFtczogdGhpcy5jb250ZXh0LlNjYW5uZXJBZ2VudFBhcmFtc1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzY2FubmVyLm9uKEJhcnNhQXBpLkNvbW1vbi5CYXJzYVNjYW5uZXIuRXZlbnRFbnVtLlNjYW5SZXN1bHRSZWFkeSwgdGhpcy5fb25TY2FuUmVzdWx0X1JlYWR5LCB0aGlzKTtcclxuICAgICAgICBzY2FubmVyLm9uKEJhcnNhQXBpLkNvbW1vbi5CYXJzYVNjYW5uZXIuRXZlbnRFbnVtLlNjYW5FcnJvciwgdGhpcy5fb25TY2FuX0Vycm9yLCB0aGlzKTtcclxuICAgICAgICBzY2FubmVyLm9uKEJhcnNhQXBpLkNvbW1vbi5CYXJzYVNjYW5uZXIuRXZlbnRFbnVtLlNob3dXYXJybmluZywgdGhpcy5fb25TY2FuX1dhcnJuaW5nLCB0aGlzKTtcclxuICAgICAgICBCYXJzYUFwaS5VbC5Mb2FkaW5nTWFzay5NYXNrKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgc2Nhbm5lci5TY2FuKGlzQWR2YW5jZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfb25TY2FuUmVzdWx0X1JlYWR5KGNvbnRlbnRzKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdXBsb2FkU2Nhbihjb250ZW50cyk7XHJcbiAgICAgICAgQmFyc2FBcGkuVWwuTG9hZGluZ01hc2suVW5tYXNrKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9vblNjYW5fV2Fycm5pbmcodGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgQmFyc2FBcGkuVWwuTXNnQm94LkVycm9yKHRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBCYXJzYUFwaS5VbC5Mb2FkaW5nTWFzay5Vbm1hc2sodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX29uU2Nhbl9FcnJvcihlcnIpOiB2b2lkIHtcclxuICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgQmFyc2FBcGkuVWwuTXNnQm94LkVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBCYXJzYUFwaS5VbC5Mb2FkaW5nTWFzay5Vbm1hc2sodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3VwbG9hZFNjYW4oY29udGVudHMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY29udGVudHMgJiYgY29udGVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb250ZW50cy5mb3JFYWNoKChjb250ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBCYXJzYUFwaS5Db21tb24uQmFyc2FTY2FubmVyLlVwbG9hZFNjYW5Db250ZW50KHRoaXMuY29udGV4dC5GaWVsZERlZklkLCBjb250ZW50LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGZpbGVPYmopIHRoaXMuX29uVXBsb2FkV2luX05ld0ZpbGVVcGxvYWQobnVsbCwgZmlsZU9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVidWdnZXI7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgQmFyc2FBcGkuVWwuTXNnQm94Lldhcm5pbmcodGhpcy5fYmJiUGlwZS50cmFuc2Zvcm0oJ1NjYW5SZXN1bHROb3RGb3VuZCcpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9wcmVwYXJlR2FsbGVyeSh2YWx1ZTogYW55W10pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkYXRhOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIHZhbHVlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWVkaWFVcmwgPSB0aGlzLl9waWNGaWVsZFNyYy50cmFuc2Zvcm0oaXRlbS5GaWxlSWQsICdCYXJzYVBpY3R1cmUuRnVsbCcsIG51bGwpO1xyXG4gICAgICAgICAgICBjb25zdCB0aHVtYm5haWxVcmwgPSB0aGlzLl9waWNGaWVsZFNyYy50cmFuc2Zvcm0oaXRlbS5GaWxlSWQsICdCYXJzYVBpY3R1cmUuVGh1bWJuYWlsJywgbnVsbCk7XHJcbiAgICAgICAgICAgIGRhdGEucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBJZDogaXRlbS5JZCxcclxuICAgICAgICAgICAgICAgIEZpbGVJZDogaXRlbS5GaWxlSWQsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5GaWxlTmFtZSxcclxuICAgICAgICAgICAgICAgIG1lZGlhVHlwZTogJ2ltYWdlJyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtLkZpbGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgbWVkaWFVcmw6IGAke21lZGlhVXJsfSZjcmVhdGVEYXRlPSR7aXRlbS5DcmVhdGVEYXRlfWAsXHJcbiAgICAgICAgICAgICAgICB0aHVtYm5haWxVcmw6IGAke3RodW1ibmFpbFVybH0mY3JlYXRlRGF0ZT0ke2l0ZW0uQ3JlYXRlRGF0ZX1gLFxyXG4gICAgICAgICAgICAgICAgYWx0OiAnRmFpbGVkIHRvIGxvYWQgJyArIG1lZGlhVXJsLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlRGF0ZTogaXRlbS5DcmVhdGVEYXRlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubWVkaWFEYXRhU291cmNlLm5leHQoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwbG9hZFRvU2VydmVyKGZpbGVzOiBGaWxlW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91cGxvYWRTZXJ2aWNlLmNvbXByZXNzRmlsZXMkKGZpbGVzKS5waXBlKFxyXG4gICAgICAgICAgICBjb25jYXRNYXAoKGZvcm1EYXRhKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBsb2FkU2VydmljZS51cGxvYWQoZm9ybURhdGEsIHRoaXMuU2V0dGluZy5Db250cm9sRmllbGREZWZJZCkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICB0YXAoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IG9mKGVycikpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc2V0RmlsZUNvdW50KHZhbHVlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZmlsZUNvdW50U291cmNlLm5leHQodmFsdWUuZmlsdGVyKChjKSA9PiAhYy5Jc0RlbGV0ZWQpLmxlbmd0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVZhbHVlKG5ld1ZhbDogYW55W10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIC4uLm5ld1ZhbF07XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZUdhbGxlcnkodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ29udGV4dEV2ZW50KCdDaGFuZ2UnLCBuZXdWYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZGlzcGxheUltYWdlcyhcclxuICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICBJZDogc3RyaW5nO1xyXG4gICAgICAgICAgICBGaWxlSWQ6IHN0cmluZztcclxuICAgICAgICAgICAgRmlsZU5hbWU6IHN0cmluZztcclxuICAgICAgICAgICAgV2lkdGg6IHN0cmluZztcclxuICAgICAgICAgICAgSGVpZ2h0OiBzdHJpbmc7XHJcbiAgICAgICAgICAgIFNpemU6IHN0cmluZztcclxuICAgICAgICB9W11cclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhIHtcclxuICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICB0aHVtYm5haWxVcmw6IHN0cmluZztcclxuICAgIG1lZGlhVHlwZTogc3RyaW5nO1xyXG4gICAgbWVkaWFVcmw6IHN0cmluZztcclxuICAgIGNhcHRpb25GaWxlPzogc3RyaW5nO1xyXG4gICAgYXVkaW9EZXNjRmlsZT86IHN0cmluZztcclxuICAgIGFsdDogc3RyaW5nO1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIHNlbGVjdGVkPzogYm9vbGVhbjtcclxuICAgIG92ZXJsYXlSZXF1aXJlZD86IGJvb2xlYW47XHJcbn1cclxuIiwiPGZkLWZpbGUtdXBsb2FkZXJcclxuICAgICN1cGxvYWRlclxyXG4gICAgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCJcclxuICAgIFtpZF09XCJpZFwiXHJcbiAgICBbbmFtZV09XCIncGljdHVyZXNfJyArIGlkXCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCInQXR0YWNoUGljdHVyZScgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgW2J1dHRvbkxhYmVsXT1cIidBdHRhY2hQaWN0dXJlJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICBbYnV0dG9uQXJpYUxhYmVsXT1cIidBdHRhY2hQaWN0dXJlJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICBhY2NlcHQ9XCIucG5nLC5qcGcsLmJwbSwuanBlZywuZ2lmLC5wbmcsLnRpZiwucGRmXCJcclxuICAgIFtmaWxlTGltaXRdPVwibWF4RmlsZUNvdW50ID09PSAwID8gMTAwIDogbWF4RmlsZUNvdW50XCJcclxuICAgIFttdWx0aXBsZV09XCJtYXhGaWxlQ291bnQgPT09IDAgfHwgbWF4RmlsZUNvdW50ID4gMVwiXHJcbiAgICAoc2VsZWN0ZWRGaWxlc0NoYW5nZWQpPVwib25GaWxlU2VsZWN0aW9uKCRldmVudClcIlxyXG4+PC9mZC1maWxlLXVwbG9hZGVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxheW91dEdyaWRUcGxcIj48L25nLWNvbnRhaW5lcj5cclxuPG5nLXRlbXBsYXRlICNsYXlvdXRHcmlkVHBsIGxldC1pbkRpYWxvZz1cImluRGlhbG9nXCIgbGV0LWdhbGxlcnk9XCJnYWxsZXJ5XCI+XHJcbiAgICA8ZmQtbGF5b3V0LWdyaWQ+XHJcbiAgICAgICAgQGlmIChtZWRpYURhdGEkIHwgYXN5bmM7IGFzIG1lZGlhRGF0YSkge1xyXG4gICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkUm93PlxyXG4gICAgICAgICAgICBAZm9yIChtZWRpYSBvZiBtZWRpYURhdGE7IHRyYWNrIG1lZGlhOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgICA8ZGl2IFtmZExheW91dEdyaWRDb2xdPVwiNlwiIFtjb2xNZF09XCIzXCIgW2NvbExnXT1cIjJcIiBbY29sWGxdPVwiMlwiIChjbGljayk9XCJvbk1lZGFpQ2xpY2soZ2FsbGVyeSwgbWVkaWEsIGkpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZFRwbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG1lZGlhLCBtZWRpYURhdGE6IHRoaXMubWVkaWFEYXRhLCBpbkRpYWxvZzogdGhpcy5pbkRpYWxvZywgaW5kZXg6IGkgfVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9IEBpZiAoIWluRGlhbG9nICYmIChkaXNhYmxlT3JSZWFkb25seSQgfCBhc3luYykgPT09IHRydWUgPyBmYWxzZSA6IHRydWUpIHtcclxuICAgICAgICAgICAgPGRpdiBbZmRMYXlvdXRHcmlkQ29sXT1cIjZcIiBbY29sTWRdPVwiM1wiIFtjb2xMZ109XCIyXCIgW2NvbFhsXT1cIjJcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXdGaWxlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgPC9mZC1sYXlvdXQtZ3JpZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNjYXJkVHBsIGxldC1tZWRpYSBsZXQtbWVkaWFEYXRhPVwibWVkaWFEYXRhXCIgbGV0LWluRGlhbG9nPVwiaW5EaWFsb2dcIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gICAgPGZkLWNhcmQgY2xhc3M9XCJtZWRpYVwiIFtjbGFzcy5pbkRpYWxvZ109XCJpbkRpYWxvZ1wiPlxyXG4gICAgICAgIDxmZC1jYXJkLWNvbnRlbnQgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IGhlaWdodDogMTIwcHhcIj5cclxuICAgICAgICAgICAgPGltZyBpbWdMYXp5IFtpbWdMYXp5XT1cIm1lZGlhLnRodW1ibmFpbFVybFwiIFtzcmNdPVwibWVkaWEudGh1bWJuYWlsVXJsXCIgI2ltZyAvPlxyXG4gICAgICAgIDwvZmQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIEBpZiAoIWluRGlhbG9nKSB7XHJcbiAgICAgICAgPGZkLWNhcmQtZm9vdGVyPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBnbHlwaD1cIm1lc3NhZ2UtaW5mb3JtYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgKmZkQ2FyZEZvb3RlckFjdGlvbkl0ZW1cclxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgW2ZkLWlubGluZS1oZWxwXT1cIm1lZGlhLnRpdGxlXCJcclxuICAgICAgICAgICAgICAgIFt0cmlnZ2Vyc109XCJbJ2NsaWNrJ11cIlxyXG4gICAgICAgICAgICAgICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqZmRDYXJkRm9vdGVyQWN0aW9uSXRlbSBmZC1idXR0b24gZ2x5cGg9XCJyb3RhdGVcIiAoY2xpY2spPVwib25Sb3RhdGUoaW1nLCBtZWRpYSwgaW5kZXgpXCI+PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBnbHlwaD1cImZ1bGwtc2NyZWVuXCJcclxuICAgICAgICAgICAgICAgICpmZENhcmRGb290ZXJBY3Rpb25JdGVtXHJcbiAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkZ1bGxzY3JlZW4obWVkaWEsIG1lZGlhRGF0YSlcIlxyXG4gICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgIEBpZiAoKGRpc2FibGVPclJlYWRvbmx5JCB8IGFzeW5jKSA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZSkge1xyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBnbHlwaD1cImRlbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAqZmRDYXJkRm9vdGVyQWN0aW9uSXRlbVxyXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUoaW5kZXgpXCJcclxuICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBnbHlwaD1cInByaW50XCJcclxuICAgICAgICAgICAgICAgICpmZENhcmRGb290ZXJBY3Rpb25JdGVtXHJcbiAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgIFtmaWxlXT1cIm1lZGlhXCJcclxuICAgICAgICAgICAgICAgIFtmaWxlc109XCJtZWRpYURhdGFcIlxyXG4gICAgICAgICAgICAgICAgcHJpbnRGaWxlc1xyXG4gICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2ZkLWNhcmQtZm9vdGVyPlxyXG4gICAgICAgIH1cclxuICAgIDwvZmQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNuZXdGaWxlPlxyXG4gICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgaGVpZ2h0OiAxMDAlXCI+XHJcbiAgICAgICAgPGZkLWNhcmQ+XHJcbiAgICAgICAgICAgIDxmZC1jYXJkLWNvbnRlbnQgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWluLWhlaWdodDogMTIwcHhcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICBnbHlwaD1cImFkZC1waG90b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQXR0YWNoRmlsZScgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGxvYWRlci5vcGVuKClcIlxyXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2ZkLWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgICAgICAgIDxmZC1jYXJkLWZvb3RlciBzdHlsZT1cImJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGZkLWJ1dHRvbiBbZ2x5cGhdPVwiJ292ZXJmbG93J1wiIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiIFtmZE1lbnVUcmlnZ2VyXT1cIm1lbnVcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxmZC1tZW51ICNtZW51PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBmZC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uU2NhbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGZkLW1lbnUtaW50ZXJhY3RpdmU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPnt7ICdTY2FuJyB8IGJiYlRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGZkLW1lbnUtaXRlbSAoY2xpY2spPVwib25BZHZhbmNlU2NhbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGZkLW1lbnUtaW50ZXJhY3RpdmU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPnt7ICdBZHZhbmNlZFNjYW4nIHwgYmJiVHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvZmQtbWVudT5cclxuICAgICAgICAgICAgPC9mZC1jYXJkLWZvb3Rlcj5cclxuICAgICAgICA8L2ZkLWNhcmQ+XHJcbiAgICAgICAgQGlmICgodXBsb2FkaW5nU3RhdGUkIHwgYXN5bmMpPy51cGxvYWRpbmcgPT09IHRydWUpIHtcclxuICAgICAgICA8YnN1LW1hc2s+PC9ic3UtbWFzaz5cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dUZW1wbGF0ZSBsZXQtZGlhbG9nIGxldC1kaWFsb2dDb25maWc9XCJkaWFsb2dDb25maWdcIj5cclxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiICNkaWFsb2dUcGwgY2xhc3M9XCJ2ZXJ0aWNhbFwiPlxyXG4gICAgICAgIDxmZC1kaWFsb2ctaGVhZGVyPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRrVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLWxlZnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDEgZmQtdGl0bGU+e3sgU2V0dGluZy5Db250cm9sRmllbGRDYXB0aW9uVHJhbnNsYXRlZCB9fTwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmICghZGlhbG9nQ29uZmlnLmZ1bGxzY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJGaXQgaW1hZ2Ugc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtnbHlwaF09XCIncmVzaXplJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmZFR5cGVdPVwiZmlsbFdpZHRoID8gJ2VtcGhhc2l6ZWQnIDogJ3RyYW5zcGFyZW50J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWxsV2lkdGggPSAhZmlsbFdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9mZC1idXR0b24tYmFyPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhciBhcmlhTGFiZWw9XCJjbG9zZVwiIGdseXBoPVwiZGVjbGluZVwiIChjbGljayk9XCJkaWFsb2cuY2xvc2UoKVwiPjwvZmQtYnV0dG9uLWJhcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZmQtZGlhbG9nLWhlYWRlcj5cclxuICAgICAgICA8ZmQtZGlhbG9nLWJvZHkgI2ZkYm9keT5cclxuICAgICAgICAgICAgPGRpdiAjZ2FsbGVyeSBjbGFzcz1cImdhbGxlcnkgaW5EaWFsb2dcIiBzdHlsZT1cImZsZXg6IDFcIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKG1lZGlhIG9mIGRpYWxvZy5kYXRhLm1lZGlhRGF0YTsgdHJhY2sgbWVkaWEuRmlsZUlkOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sdW1uIGJpZy1pbWdzLWJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpbGwtd2lkdGhdPVwiZmlsbFdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmlsbC1hbGxdPVwiZmlsbEFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpbGwtb3JpZ2luYWxdPVwiZmlsbE9yaWdpbmFsXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZFpvb21cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZC10b29sYmFyIGZkVHlwZT1cInNvbGlkXCIgZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBbY2xlYXJCb3JkZXJdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zcGFjZXI+PC9mZC10b29sYmFyLXNwYWNlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBmZC10b29sYmFyLWl0ZW0gZmQtYnV0dG9uIGdseXBoPVwicm90YXRlXCIgKGNsaWNrKT1cIm9uUm90YXRlKGltZywgbWVkaWEsIGkpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b29sYmFyLXNwYWNlcj48L2ZkLXRvb2xiYXItc3BhY2VyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZmQtdG9vbGJhcj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGljc1wiIFtpZF09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxic3UtbWFzaz48L2JzdS1tYXNrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nICNpbWcgaW1nTGF6eSBbaW1nTGF6eV09XCJtZWRpYS5tZWRpYVVybFwiIFtzcmNdPVwibWVkaWEubWVkaWFVcmxcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBAaWYgKChkZXZpY2VTaXplJCB8IGFzeW5jKSAhPT0gJ3MnKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYm5haWxcIiBzdHlsZT1cImZsZXgtc2hyaW5rOiAxXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY290YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxheW91dEdyaWRUcGw7IGNvbnRleHQ6IHsgaW5EaWFsb2c6IHRydWUsIGdhbGxlcnk6IHRoaXMuZ2FsbGVyeSB9XCJcclxuICAgICAgICAgICAgICAgID48L25nLWNvdGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZmQtZGlhbG9nLWJvZHk+XHJcbiAgICA8L2ZkLWRpYWxvZz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcGljdHVyZXMtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS1waWN0dXJlcy1pbmZvL3VpLXBpY3R1cmVzLWluZm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcGljdHVyZXMtaW5mby91aS1waWN0dXJlcy1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFHTCxTQUFTLEVBQ1QsV0FBVyxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdkUsT0FBTyxFQUNILFFBQVEsRUFDUixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUV4QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFVekUsTUFBTSxPQUFPLHVCQUF3QixTQUFRLDRCQUE0QjtJQVJ6RTs7UUFxQkksaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBR25DLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsRUFBRSxDQUFDLENBQUM7UUFHbkQsa0JBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUluQixpQkFBWSxHQUFrQyxPQUFPLENBQUM7UUFLOUMscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7S0ErUDdEO0lBN1BHLFFBQVE7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Q3BELDRzU0E4TUE7OzRGRDlLYSx1QkFBdUI7a0JBUm5DLFNBQVM7K0JBQ0ksc0JBQXNCLGFBR3JCLENBQUMsYUFBYSxDQUFDLG1CQUNULHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsS0FBSzs4QkFHUixLQUFLO3NCQUFiLEtBQUs7Z0JBUWdCLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDZ0MsY0FBYztzQkFBakUsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBUZW1wbGF0ZVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbmNhdE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQmFyc2FBcGksXHJcbiAgICBVcGxvYWRTZXJ2aWNlLFxyXG4gICAgZ2V0RGV2aWNlSXNNb2JpbGUsXHJcbiAgICBGaWxlc1ZhbGlkYXRpb25IZWxwZXIsXHJcbiAgICBJVXBsb2FkaW5nU3RhdGVcclxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbmltcG9ydCB7IERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9kZXZpY2UtaW5mby1maWVsZC1iYXNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdic3UtdWktcGljdHVyZXMtaW5mbycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktcGljdHVyZXMtaW5mby5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91aS1waWN0dXJlcy1pbmZvLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtVcGxvYWRTZXJ2aWNlXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgc3RhbmRhbG9uZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpUGljdHVyZXNJbmZvQ29tcG9uZW50IGV4dGVuZHMgRGV2aWNlSW5mb0ZpZWxkQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgpIHZhbHVlOiB7XHJcbiAgICAgICAgSWQ6IHN0cmluZztcclxuICAgICAgICBGaWxlSWQ6IHN0cmluZztcclxuICAgICAgICBGaWxlTmFtZTogc3RyaW5nO1xyXG4gICAgICAgIFdpZHRoOiBzdHJpbmc7XHJcbiAgICAgICAgSGVpZ2h0OiBzdHJpbmc7XHJcbiAgICAgICAgU2l6ZTogc3RyaW5nO1xyXG4gICAgfVtdO1xyXG4gICAgQFZpZXdDaGlsZCgnZ2FsbGVyeScpIGdhbGxlcnkhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICAgIEBWaWV3Q2hpbGQoJ2RpYWxvZ1RlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBkaWFsb2dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICB1cGxvYWRpbmdTdGF0ZSQ6IE9ic2VydmFibGU8SVVwbG9hZGluZ1N0YXRlPjtcclxuICAgIGNhbmNlbGF0aW9uJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBjb250ZW50RGVuc2l0eSQ6IE9ic2VydmFibGU8Q29udGVudERlbnNpdHk+O1xyXG4gICAgZmlsZXM6IEZpbGVbXTtcclxuICAgIG1lZGlhRGF0YVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVkaWFbXT4oW10pO1xyXG4gICAgbWVkaWFEYXRhJDogT2JzZXJ2YWJsZTxNZWRpYVtdPjtcclxuICAgIGlzTW9iaWxlOiBhbnk7XHJcbiAgICBzZWxlY3RlZEluZGV4ID0gLTE7XHJcbiAgICBmaWxsV2lkdGg6IGJvb2xlYW47XHJcbiAgICBmaWxsQWxsOiBib29sZWFuO1xyXG4gICAgZmlsbE9yaWdpbmFsOiBib29sZWFuO1xyXG4gICAgc2VsZWN0ZWRab29tOiAnem9vbTEnIHwgJ3pvb20xLTUnIHwgJ3pvb20yJyA9ICd6b29tMSc7XHJcbiAgICBmaWxlc1ZhbGlkYXRpb25IZWxwZXI6IEZpbGVzVmFsaWRhdGlvbkhlbHBlcjtcclxuICAgIG1heEZpbGVDb3VudDogbnVtYmVyO1xyXG4gICAgZmlsZUNvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG5cclxuICAgIHByaXZhdGUgX2ZpbGVDb3VudFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbGVDb3VudCQgPSB0aGlzLl9maWxlQ291bnRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5tZWRpYURhdGEkID0gdGhpcy5tZWRpYURhdGFTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLmlzTW9iaWxlID0gZ2V0RGV2aWNlSXNNb2JpbGUoKTtcclxuICAgICAgICB0aGlzLnVwbG9hZGluZ1N0YXRlJCA9IHRoaXMuX3VwbG9hZFNlcnZpY2UudXBsb2FkaW5nU3RhdGUkO1xyXG4gICAgICAgIHRoaXMudmFsdWUkLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuX3NldEZpbGVDb3VudCh2YWx1ZSkpO1xyXG5cclxuICAgICAgICB0aGlzLmZpbGVzVmFsaWRhdGlvbkhlbHBlciA9IG5ldyBGaWxlc1ZhbGlkYXRpb25IZWxwZXIoXHJcbiAgICAgICAgICAgIHRoaXMuU2V0dGluZy5NYXhQaWN0dXJlQ291bnQsXHJcbiAgICAgICAgICAgIHRoaXMuU2V0dGluZy5NYXhGaWxlU2l6ZUtiLFxyXG4gICAgICAgICAgICB0aGlzLlNldHRpbmcuTWF4VG90YWxGaWxlU2l6ZUtiXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLm1heEZpbGVDb3VudCA9IHRoaXMuZmlsZXNWYWxpZGF0aW9uSGVscGVyLm1heEZpbGVDb3VudDtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZUdhbGxlcnkodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0Lm9uKHtcclxuICAgICAgICAgICAgRGlzcGxheUltYWdlczogdGhpcy5fZGlzcGxheUltYWdlcy5iaW5kKHRoaXMpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC51bignRGlzcGxheUltYWdlcycsIHRoaXMuX2Rpc3BsYXlJbWFnZXMpO1xyXG4gICAgfVxyXG4gICAgb25Sb3RhdGUoaW1nRWw6IEhUTUxJbWFnZUVsZW1lbnQsIG1lZGlhMjogTWVkaWEsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSAxO1xyXG4gICAgICAgIGNvbnN0IG1lZGlhOiBhbnkgPSBtZWRpYTI7XHJcbiAgICAgICAgY29uc3QgYnBJZCA9IG1lZGlhLkZpbGVJZDtcclxuICAgICAgICBjb25zdCBhbmdsZSA9IDkwICogZGlyZWN0aW9uO1xyXG4gICAgICAgIGlmIChtZWRpYS5Sb3RhdGlvbkFuZ2xlKSB7XHJcbiAgICAgICAgICAgIG1lZGlhLlJvdGF0aW9uQW5nbGUgPSAobWVkaWEuUm90YXRpb25BbmdsZSArIGFuZ2xlKSAlIDM2MDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtZWRpYS5Sb3RhdGlvbkFuZ2xlID0gYW5nbGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB3ID0gaW1nRWwub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgY29uc3QgaCA9IGltZ0VsLm9mZnNldEhlaWdodDtcclxuICAgICAgICBsZXQgbWFyZ2luID0gKHcgLSBoKSAvIDI7XHJcbiAgICAgICAgbGV0IHNjYWxlRmFjdG9yID0gdyAvIGg7XHJcbiAgICAgICAgaWYgKG1lZGlhLnNjYWxlRmFjdG9yKSB7XHJcbiAgICAgICAgICAgIHNjYWxlRmFjdG9yID0gMTtcclxuICAgICAgICAgICAgbWVkaWEuc2NhbGVGYWN0b3IgPSBudWxsO1xyXG4gICAgICAgICAgICBtYXJnaW4gPSAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1lZGlhLnNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2NhbGVGYWN0b3IgPCAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZShpbWdFbCwgJ3RyYW5zZm9ybScsIGByb3RhdGUoJHttZWRpYS5Sb3RhdGlvbkFuZ2xlfWRlZykgc2NhbGUoJHtzY2FsZUZhY3Rvcn0pYCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKGltZ0VsLCAndHJhbnNmb3JtJywgYHJvdGF0ZSgke21lZGlhLlJvdGF0aW9uQW5nbGV9ZGVnKWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUoaW1nRWwsICdtYXJnaW4tYm90dG9tJywgbWFyZ2luICsgJ3B4Jyk7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKGltZ0VsLCAnbWFyZ2luLXRvcCcsIG1hcmdpbiArICdweCcpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ1NldHRpbmdzQ2hhbmdlJywgdGhpcywge1xyXG4gICAgICAgICAgICBGaWxlSWQ6IGJwSWQsXHJcbiAgICAgICAgICAgIEFuZ2xlOiBtZWRpYS5Sb3RhdGlvbkFuZ2xlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBvbkZ1bGxzY3JlZW4obWVkaWEsIG1lZGlhRGF0YSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgZGF0YTogeyBtZWRpYSwgbWVkaWFEYXRhIH0sXHJcbiAgICAgICAgICAgIGVzY0tleUNsb3NlYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG1vYmlsZTogdHJ1ZSxcclxuICAgICAgICAgICAgdmVydGljYWxQYWRkaW5nOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKHRoaXMuZGlhbG9nVGVtcGxhdGUsIGRpYWxvZ0NvbmZpZyk7XHJcbiAgICB9XHJcbiAgICBvbk1lZGFpQ2xpY2soZ2FsbGVyeSwgbWVkaWEsIGluZGV4KTogdm9pZCB7XHJcbiAgICAgICAgZ2FsbGVyeSAmJiBnYWxsZXJ5LnF1ZXJ5U2VsZWN0b3IoJ1tpZD1cIicgKyBTdHJpbmcoaW5kZXgpICsgJ1wiXScpPy5zY3JvbGxJbnRvVmlldyh0cnVlKTtcclxuICAgIH1cclxuICAgIG9uVGh1bWJuYWlsQ2xpY2tlZChpbWdJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW1nSW5kZXg7XHJcbiAgICAgICAgdGhpcy5nYWxsZXJ5Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW2lkPVwiJyArIFN0cmluZyhpbWdJbmRleCkgKyAnXCJdJyk/LnNjcm9sbEludG9WaWV3KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGVsZXRlKGluZGV4KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRNZWRpYSA9IHRoaXMudmFsdWVbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMuX2RlbGV0ZU1lZGlhKHNlbGVjdGVkTWVkaWEpO1xyXG4gICAgfVxyXG4gICAgb25TY2FuKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NjYW5IZWxwZXIoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWR2YW5jZVNjYW4oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2NhbkhlbHBlcih0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBvblpvb21JbigpOiB2b2lkIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRab29tKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3pvb20xJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRab29tID0gJ3pvb20xLTUnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3pvb20xLTUnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFpvb20gPSAnem9vbTInO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uWm9vbU91dCgpOiB2b2lkIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRab29tKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3pvb20yJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRab29tID0gJ3pvb20xLTUnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3pvb20xLTUnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFpvb20gPSAnem9vbTEnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRmlsbE9yaWdpbmFsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmlsbFdpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maWxsQWxsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maWxsT3JpZ2luYWwgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRmlsbFdpZHRoKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmlsbFdpZHRoID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZpbGxBbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZpbGxPcmlnaW5hbCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRmlsbEFsbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbGxBbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZmlsbE9yaWdpbmFsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maWxsV2lkdGggPSBmYWxzZTtcclxuICAgIH1cclxuICAgIG9uRmlsZVNlbGVjdGlvbihmaWxlczogRmlsZVtdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maWxlc1ZhbGlkYXRpb25IZWxwZXIudmFsaWRhdGVGaWxlcyhmaWxlcyk7XHJcbiAgICAgICAgdGhpcy51cGxvYWRUb1NlcnZlcihmaWxlcykucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9kZWxldGVNZWRpYShzZWxlY3RlZE1lZGlhKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeyBJZCwgRmlsZUlkIH0gPSBzZWxlY3RlZE1lZGlhO1xyXG4gICAgICAgIGxldCBzZWxlY3RlZElkID0gSWQ7XHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZElkKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkSWQgPSBGaWxlSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUGljSW5kZXggPSB0aGlzLnZhbHVlLmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gc2VsZWN0ZWRJZCB8fCBjLkZpbGVJZCA9PT0gc2VsZWN0ZWRJZCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUuZmlsdGVyKChjKSA9PiBjLklkICE9PSBzZWxlY3RlZElkICYmIGMuRmlsZUlkICE9PSBzZWxlY3RlZElkKTtcclxuICAgICAgICB0aGlzLl9wcmVwYXJlR2FsbGVyeSh0aGlzLnZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnQ2hhbmdlJywge1xyXG4gICAgICAgICAgICBGaWxlSWQ6IHNlbGVjdGVkSWQsXHJcbiAgICAgICAgICAgIElzRGVsZXRlZDogdHJ1ZSxcclxuICAgICAgICAgICAgT2xkSW5kZXg6IHNlbGVjdGVkUGljSW5kZXhcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfc2NhbkhlbHBlcihpc0FkdmFuY2VkKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2Nhbm5lciA9IG5ldyBCYXJzYUFwaS5Db21tb24uQmFyc2FTY2FubmVyKHtcclxuICAgICAgICAgICAgU2Nhbm5lckFnZW50UGFyYW1zOiB0aGlzLmNvbnRleHQuU2Nhbm5lckFnZW50UGFyYW1zXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNjYW5uZXIub24oQmFyc2FBcGkuQ29tbW9uLkJhcnNhU2Nhbm5lci5FdmVudEVudW0uU2NhblJlc3VsdFJlYWR5LCB0aGlzLl9vblNjYW5SZXN1bHRfUmVhZHksIHRoaXMpO1xyXG4gICAgICAgIHNjYW5uZXIub24oQmFyc2FBcGkuQ29tbW9uLkJhcnNhU2Nhbm5lci5FdmVudEVudW0uU2NhbkVycm9yLCB0aGlzLl9vblNjYW5fRXJyb3IsIHRoaXMpO1xyXG4gICAgICAgIHNjYW5uZXIub24oQmFyc2FBcGkuQ29tbW9uLkJhcnNhU2Nhbm5lci5FdmVudEVudW0uU2hvd1dhcnJuaW5nLCB0aGlzLl9vblNjYW5fV2Fycm5pbmcsIHRoaXMpO1xyXG4gICAgICAgIEJhcnNhQXBpLlVsLkxvYWRpbmdNYXNrLk1hc2sodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICBzY2FubmVyLlNjYW4oaXNBZHZhbmNlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9vblNjYW5SZXN1bHRfUmVhZHkoY29udGVudHMpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl91cGxvYWRTY2FuKGNvbnRlbnRzKTtcclxuICAgICAgICBCYXJzYUFwaS5VbC5Mb2FkaW5nTWFzay5Vbm1hc2sodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX29uU2Nhbl9XYXJybmluZyh0ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBCYXJzYUFwaS5VbC5Nc2dCb3guRXJyb3IodGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEJhcnNhQXBpLlVsLkxvYWRpbmdNYXNrLlVubWFzayh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfb25TY2FuX0Vycm9yKGVycik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBCYXJzYUFwaS5VbC5Nc2dCb3guRXJyb3IoZXJyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIEJhcnNhQXBpLlVsLkxvYWRpbmdNYXNrLlVubWFzayh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdXBsb2FkU2Nhbihjb250ZW50cyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjb250ZW50cyAmJiBjb250ZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnRlbnRzLmZvckVhY2goKGNvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIEJhcnNhQXBpLkNvbW1vbi5CYXJzYVNjYW5uZXIuVXBsb2FkU2NhbkNvbnRlbnQodGhpcy5jb250ZXh0LkZpZWxkRGVmSWQsIGNvbnRlbnQsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiAoZmlsZU9iaikgdGhpcy5fb25VcGxvYWRXaW5fTmV3RmlsZVVwbG9hZChudWxsLCBmaWxlT2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBkZWJ1Z2dlcjtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBCYXJzYUFwaS5VbC5Nc2dCb3guV2FybmluZyh0aGlzLl9iYmJQaXBlLnRyYW5zZm9ybSgnU2NhblJlc3VsdE5vdEZvdW5kJykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3ByZXBhcmVHYWxsZXJ5KHZhbHVlOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gW107XHJcbiAgICAgICAgdmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZWRpYVVybCA9IHRoaXMuX3BpY0ZpZWxkU3JjLnRyYW5zZm9ybShpdGVtLkZpbGVJZCwgJ0JhcnNhUGljdHVyZS5GdWxsJywgbnVsbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRodW1ibmFpbFVybCA9IHRoaXMuX3BpY0ZpZWxkU3JjLnRyYW5zZm9ybShpdGVtLkZpbGVJZCwgJ0JhcnNhUGljdHVyZS5UaHVtYm5haWwnLCBudWxsKTtcclxuICAgICAgICAgICAgZGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIElkOiBpdGVtLklkLFxyXG4gICAgICAgICAgICAgICAgRmlsZUlkOiBpdGVtLkZpbGVJZCxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLkZpbGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgbWVkaWFUeXBlOiAnaW1hZ2UnLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IGl0ZW0uRmlsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICBtZWRpYVVybDogYCR7bWVkaWFVcmx9JmNyZWF0ZURhdGU9JHtpdGVtLkNyZWF0ZURhdGV9YCxcclxuICAgICAgICAgICAgICAgIHRodW1ibmFpbFVybDogYCR7dGh1bWJuYWlsVXJsfSZjcmVhdGVEYXRlPSR7aXRlbS5DcmVhdGVEYXRlfWAsXHJcbiAgICAgICAgICAgICAgICBhbHQ6ICdGYWlsZWQgdG8gbG9hZCAnICsgbWVkaWFVcmwsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVEYXRlOiBpdGVtLkNyZWF0ZURhdGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tZWRpYURhdGFTb3VyY2UubmV4dChkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBsb2FkVG9TZXJ2ZXIoZmlsZXM6IEZpbGVbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZFNlcnZpY2UuY29tcHJlc3NGaWxlcyQoZmlsZXMpLnBpcGUoXHJcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoZm9ybURhdGEpID0+XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGxvYWRTZXJ2aWNlLnVwbG9hZChmb3JtRGF0YSwgdGhpcy5TZXR0aW5nLkNvbnRyb2xGaWVsZERlZklkKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcCgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4gb2YoZXJyKSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9zZXRGaWxlQ291bnQodmFsdWUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9maWxlQ291bnRTb3VyY2UubmV4dCh2YWx1ZS5maWx0ZXIoKGMpID0+ICFjLklzRGVsZXRlZCkubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlVmFsdWUobmV3VmFsOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgLi4ubmV3VmFsXTtcclxuICAgICAgICB0aGlzLl9wcmVwYXJlR2FsbGVyeSh0aGlzLnZhbHVlKTtcclxuICAgICAgICB0aGlzLmZpcmVDb250ZXh0RXZlbnQoJ0NoYW5nZScsIG5ld1ZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kaXNwbGF5SW1hZ2VzKFxyXG4gICAgICAgIHZhbHVlOiB7XHJcbiAgICAgICAgICAgIElkOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIEZpbGVJZDogc3RyaW5nO1xyXG4gICAgICAgICAgICBGaWxlTmFtZTogc3RyaW5nO1xyXG4gICAgICAgICAgICBXaWR0aDogc3RyaW5nO1xyXG4gICAgICAgICAgICBIZWlnaHQ6IHN0cmluZztcclxuICAgICAgICAgICAgU2l6ZTogc3RyaW5nO1xyXG4gICAgICAgIH1bXVxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWEge1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIHRodW1ibmFpbFVybDogc3RyaW5nO1xyXG4gICAgbWVkaWFUeXBlOiBzdHJpbmc7XHJcbiAgICBtZWRpYVVybDogc3RyaW5nO1xyXG4gICAgY2FwdGlvbkZpbGU/OiBzdHJpbmc7XHJcbiAgICBhdWRpb0Rlc2NGaWxlPzogc3RyaW5nO1xyXG4gICAgYWx0OiBzdHJpbmc7XHJcbiAgICBsYWJlbDogc3RyaW5nO1xyXG4gICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xyXG4gICAgb3ZlcmxheVJlcXVpcmVkPzogYm9vbGVhbjtcclxufVxyXG4iLCI8ZmQtZmlsZS11cGxvYWRlclxyXG4gICAgI3VwbG9hZGVyXHJcbiAgICBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIlxyXG4gICAgW2lkXT1cImlkXCJcclxuICAgIFtuYW1lXT1cIidwaWN0dXJlc18nICsgaWRcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cIidBdHRhY2hQaWN0dXJlJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICBbYnV0dG9uTGFiZWxdPVwiJ0F0dGFjaFBpY3R1cmUnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgIFtidXR0b25BcmlhTGFiZWxdPVwiJ0F0dGFjaFBpY3R1cmUnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgIGFjY2VwdD1cIi5wbmcsLmpwZywuYnBtLC5qcGVnLC5naWYsLnBuZywudGlmLC5wZGZcIlxyXG4gICAgW2ZpbGVMaW1pdF09XCJtYXhGaWxlQ291bnQgPT09IDAgPyAxMDAgOiBtYXhGaWxlQ291bnRcIlxyXG4gICAgW211bHRpcGxlXT1cIm1heEZpbGVDb3VudCA9PT0gMCB8fCBtYXhGaWxlQ291bnQgPiAxXCJcclxuICAgIChzZWxlY3RlZEZpbGVzQ2hhbmdlZCk9XCJvbkZpbGVTZWxlY3Rpb24oJGV2ZW50KVwiXHJcbj48L2ZkLWZpbGUtdXBsb2FkZXI+XHJcblxyXG48bmctY29udGFpbmVyXHJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxheW91dEdyaWRUcGw7IGNvbnRleHQ6IHsgZGlzYWJsZU9yUmVhZG9ubHk6IGRpc2FibGVPclJlYWRvbmx5JCB8IGFzeW5jIH1cIlxyXG4+PC9uZy1jb250YWluZXI+XHJcbjxuZy10ZW1wbGF0ZSAjbGF5b3V0R3JpZFRwbCBsZXQtaW5EaWFsb2c9XCJpbkRpYWxvZ1wiIGxldC1nYWxsZXJ5PVwiZ2FsbGVyeVwiIGxldC1kaXNhYmxlT3JSZWFkb25seT1cImRpc2FibGVPclJlYWRvbmx5XCI+XHJcbiAgICA8ZmQtbGF5b3V0LWdyaWQ+XHJcbiAgICAgICAgQGlmIChtZWRpYURhdGEkIHwgYXN5bmM7IGFzIG1lZGlhRGF0YSkge1xyXG4gICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkUm93PlxyXG4gICAgICAgICAgICBAZm9yIChtZWRpYSBvZiBtZWRpYURhdGE7IHRyYWNrIG1lZGlhOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgICA8ZGl2IFtmZExheW91dEdyaWRDb2xdPVwiNlwiIFtjb2xNZF09XCIzXCIgW2NvbExnXT1cIjJcIiBbY29sWGxdPVwiMlwiIChjbGljayk9XCJvbk1lZGFpQ2xpY2soZ2FsbGVyeSwgbWVkaWEsIGkpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZFRwbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBtZWRpYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRGF0YTogdGhpcy5tZWRpYURhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkRpYWxvZzogdGhpcy5pbkRpYWxvZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZU9yUmVhZG9ubHk6IGRpc2FibGVPclJlYWRvbmx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfSBAaWYgKCFpbkRpYWxvZyAmJiAhZGlzYWJsZU9yUmVhZG9ubHkpIHtcclxuICAgICAgICAgICAgPGRpdiBbZmRMYXlvdXRHcmlkQ29sXT1cIjZcIiBbY29sTWRdPVwiM1wiIFtjb2xMZ109XCIyXCIgW2NvbFhsXT1cIjJcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXdGaWxlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgPC9mZC1sYXlvdXQtZ3JpZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlXHJcbiAgICAjY2FyZFRwbFxyXG4gICAgbGV0LW1lZGlhXHJcbiAgICBsZXQtbWVkaWFEYXRhPVwibWVkaWFEYXRhXCJcclxuICAgIGxldC1pbkRpYWxvZz1cImluRGlhbG9nXCJcclxuICAgIGxldC1pbmRleD1cImluZGV4XCJcclxuICAgIGxldC1kaXNhYmxlT3JSZWFkb25seT1cImRpc2FibGVPclJlYWRvbmx5XCJcclxuPlxyXG4gICAgPGZkLWNhcmQgY2xhc3M9XCJtZWRpYVwiIFtjbGFzcy5pbkRpYWxvZ109XCJpbkRpYWxvZ1wiPlxyXG4gICAgICAgIDxmZC1jYXJkLWNvbnRlbnQgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IGhlaWdodDogMTIwcHhcIj5cclxuICAgICAgICAgICAgPGltZyBpbWdMYXp5IFtpbWdMYXp5XT1cIm1lZGlhLnRodW1ibmFpbFVybFwiIFtzcmNdPVwibWVkaWEudGh1bWJuYWlsVXJsXCIgI2ltZyAvPlxyXG4gICAgICAgIDwvZmQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIEBpZiAoIWluRGlhbG9nKSB7XHJcbiAgICAgICAgPGZkLWNhcmQtZm9vdGVyPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBnbHlwaD1cInByaW50XCJcclxuICAgICAgICAgICAgICAgICpmZENhcmRGb290ZXJBY3Rpb25JdGVtXHJcbiAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgIFtmaWxlc109XCJbbWVkaWFdXCJcclxuICAgICAgICAgICAgICAgIHByaW50RmlsZXNcclxuICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBnbHlwaD1cImZ1bGwtc2NyZWVuXCJcclxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInRnVsbFNjcmVlbicgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgKmZkQ2FyZEZvb3RlckFjdGlvbkl0ZW1cclxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRnVsbHNjcmVlbihtZWRpYSwgbWVkaWFEYXRhKVwiXHJcbiAgICAgICAgICAgID48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gZmQtYnV0dG9uIFtnbHlwaF09XCInb3ZlcmZsb3cnXCIgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCIgW2ZkTWVudVRyaWdnZXJdPVwibWVudVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZmQtbWVudSAjbWVudT5cclxuICAgICAgICAgICAgICAgIDxsaSBmZC1tZW51LWl0ZW0gW2ZpbGVzXT1cIm1lZGlhRGF0YVwiIHByaW50RmlsZXM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgZmQtbWVudS1pbnRlcmFjdGl2ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLW1lbnUtYWRkb24gcG9zaXRpb249XCJiZWZvcmVcIiBnbHlwaD1cInByaW50XCI+PC9mZC1tZW51LWFkZG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPnt7ICdQcmludCcgfCBiYmJUcmFuc2xhdGUgfX0ge3sgJ0FsbCcgfCBiYmJUcmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICBAaWYgKCFkaXNhYmxlT3JSZWFkb25seSkge1xyXG4gICAgICAgICAgICAgICAgPGxpIGZkLW1lbnUtaXRlbSAoY2xpY2spPVwib25Sb3RhdGUoaW1nLCBtZWRpYSwgaW5kZXgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgZmQtbWVudS1pbnRlcmFjdGl2ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLW1lbnUtYWRkb24gcG9zaXRpb249XCJiZWZvcmVcIiBnbHlwaD1cInJvdGF0ZVwiPjwvZmQtbWVudS1hZGRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbWVudS10aXRsZT57eyAnUm90YXRlJyB8IGJiYlRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGZkLW1lbnUtaXRlbSAoY2xpY2spPVwib25EZWxldGUoaW5kZXgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgZmQtbWVudS1pbnRlcmFjdGl2ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLW1lbnUtYWRkb24gcG9zaXRpb249XCJiZWZvcmVcIiBnbHlwaD1cImRlbGV0ZVwiPjwvZmQtbWVudS1hZGRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbWVudS10aXRsZT57eyAnRGVsZXRlJyB8IGJiYlRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2ZkLW1lbnU+XHJcbiAgICAgICAgPC9mZC1jYXJkLWZvb3Rlcj5cclxuICAgICAgICB9XHJcbiAgICA8L2ZkLWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjbmV3RmlsZT5cclxuICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7IGhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgIDxmZC1jYXJkPlxyXG4gICAgICAgICAgICA8ZmQtY2FyZC1jb250ZW50IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IG1pbi1oZWlnaHQ6IDEyMHB4XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJhZGQtcGhvdG9cIlxyXG4gICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0F0dGFjaEZpbGUnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkZXIub3BlbigpXCJcclxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9mZC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgICAgICAgICA8ZmQtY2FyZC1mb290ZXIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggc29saWQgI2NjY1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gW2dseXBoXT1cIidvdmVyZmxvdydcIiBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIiBbZmRNZW51VHJpZ2dlcl09XCJtZW51XCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZmQtbWVudSAjbWVudT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgZmQtbWVudS1pdGVtIChjbGljayk9XCJvblNjYW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBmZC1tZW51LWludGVyYWN0aXZlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbWVudS10aXRsZT57eyAnU2NhbicgfCBiYmJUcmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBmZC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uQWR2YW5jZVNjYW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBmZC1tZW51LWludGVyYWN0aXZlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbWVudS10aXRsZT57eyAnQWR2YW5jZWRTY2FuJyB8IGJiYlRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L2ZkLW1lbnU+XHJcbiAgICAgICAgICAgIDwvZmQtY2FyZC1mb290ZXI+XHJcbiAgICAgICAgPC9mZC1jYXJkPlxyXG4gICAgICAgIEBpZiAoKHVwbG9hZGluZ1N0YXRlJCB8IGFzeW5jKT8udXBsb2FkaW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgPGJzdS1tYXNrPjwvYnN1LW1hc2s+XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nVGVtcGxhdGUgbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCI+XHJcbiAgICA8ZmQtZGlhbG9nIFtkaWFsb2dDb25maWddPVwiZGlhbG9nQ29uZmlnXCIgW2RpYWxvZ1JlZl09XCJkaWFsb2dcIiAjZGlhbG9nVHBsIGNsYXNzPVwidmVydGljYWxcIj5cclxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZka1RlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1sZWZ0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgxIGZkLXRpdGxlPnt7IFNldHRpbmcuQ29udHJvbEZpZWxkQ2FwdGlvblRyYW5zbGF0ZWQgfX08L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD1cInByaW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2dseXBoXT1cIidwcmludCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlc109XCJkaWFsb2cuZGF0YS5tZWRpYURhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmludEZpbGVzXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvZmQtYnV0dG9uLWJhcj5cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKCFkaWFsb2dDb25maWcuZnVsbHNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD1cIkZpdCBpbWFnZSBzaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2dseXBoXT1cIidyZXNpemUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZkVHlwZV09XCJmaWxsV2lkdGggPyAnZW1waGFzaXplZCcgOiAndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbGxXaWR0aCA9ICFmaWxsV2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2ZkLWJ1dHRvbi1iYXI+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyIGFyaWFMYWJlbD1cImNsb3NlXCIgZ2x5cGg9XCJkZWNsaW5lXCIgKGNsaWNrKT1cImRpYWxvZy5jbG9zZSgpXCI+PC9mZC1idXR0b24tYmFyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9mZC1kaWFsb2ctaGVhZGVyPlxyXG4gICAgICAgIDxmZC1kaWFsb2ctYm9keSAjZmRib2R5PlxyXG4gICAgICAgICAgICA8ZGl2ICNnYWxsZXJ5IGNsYXNzPVwiZ2FsbGVyeSBpbkRpYWxvZ1wiIHN0eWxlPVwiZmxleDogMVwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAobWVkaWEgb2YgZGlhbG9nLmRhdGEubWVkaWFEYXRhOyB0cmFjayBtZWRpYS5GaWxlSWQ7IGxldCBpID0gJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2x1bW4gYmlnLWltZ3MtYm94XCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmlsbC13aWR0aF09XCJmaWxsV2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maWxsLWFsbF09XCJmaWxsQWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmlsbC1vcmlnaW5hbF09XCJmaWxsT3JpZ2luYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkWm9vbVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZkLXRvb2xiYXIgZmRUeXBlPVwic29saWRcIiBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiIFtjbGVhckJvcmRlcl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b29sYmFyLXNwYWNlcj48L2ZkLXRvb2xiYXItc3BhY2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGZkLXRvb2xiYXItaXRlbSBmZC1idXR0b24gZ2x5cGg9XCJyb3RhdGVcIiAoY2xpY2spPVwib25Sb3RhdGUoaW1nLCBtZWRpYSwgaSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXRvb2xiYXItc3BhY2VyPjwvZmQtdG9vbGJhci1zcGFjZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mZC10b29sYmFyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNzXCIgW2lkXT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJzdS1tYXNrPjwvYnN1LW1hc2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgI2ltZyBpbWdMYXp5IFtpbWdMYXp5XT1cIm1lZGlhLm1lZGlhVXJsXCIgW3NyY109XCJtZWRpYS5tZWRpYVVybFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIEBpZiAoKGRldmljZVNpemUkIHwgYXN5bmMpICE9PSAncycpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRodW1ibmFpbFwiIHN0eWxlPVwiZmxleC1zaHJpbms6IDFcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb3RhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dEdyaWRUcGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluRGlhbG9nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FsbGVyeTogZ2FsbGVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVPclJlYWRvbmx5OiBkaXNhYmxlT3JSZWFkb25seSQgfCBhc3luY1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID48L25nLWNvdGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZmQtZGlhbG9nLWJvZHk+XHJcbiAgICA8L2ZkLWRpYWxvZz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
@@ -51,9 +51,9 @@ export class UlvToolbarComponent extends BaseComponent {
51
51
  }
52
52
  onVisibilityChange(e) {
53
53
  if (e === 'Visible') {
54
+ this._setWidth();
54
55
  if (!this.visibled) {
55
56
  this.visibled = true;
56
- this._setWidth();
57
57
  }
58
58
  else {
59
59
  this._refreshToolbar();
@@ -174,4 +174,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
174
174
  }], createNewInlineMo: [{
175
175
  type: Output
176
176
  }] } });
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWx2LXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWx2LXRvb2xiYXIvdWx2LXRvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWx2LXRvb2xiYXIvdWx2LXRvb2xiYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFFVCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFrQixnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXpFLE9BQU8sRUFDSCxhQUFhLEVBS2IsYUFBYSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFTakMsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGFBQWE7SUF1Q2xELFlBQW1CLEVBQWMsRUFBVSxJQUF1QjtRQUM5RCxLQUFLLEVBQUUsQ0FBQztRQURPLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQWxDekQsY0FBUyxHQUFHLEtBQUssQ0FBQztRQXVCakIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDcEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzFDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN6QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsY0FBUyxHQUFHLElBQUksWUFB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RyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIGluamVjdCxcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgUmVuZGVyZXIyLFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eSwgVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQmFzZUNvbXBvbmVudCxcclxuICAgIERlZmF1bHRDb21tYW5kc0FjY2VzcyxcclxuICAgIEFiYnJldmF0aW9uRGV2aWNlU2l6ZSxcclxuICAgIERldmljZVNpemUsXHJcbiAgICBVaVJlcG9ydFZpZXdCYXNlLFxyXG4gICAgUG9ydGFsU2VydmljZVxyXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYnN1LXVsdi10b29sYmFyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi91bHYtdG9vbGJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91bHYtdG9vbGJhci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVWx2VG9vbGJhckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gICAgQFZpZXdDaGlsZChUb29sYmFyQ29tcG9uZW50KSBfdGxiQ21wOiBUb29sYmFyQ29tcG9uZW50O1xyXG4gICAgQElucHV0KCkgYWxsb3dHcmlkQ29sdW1uU29ydDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGVuYWJsZVNlYXJjaDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGhpZGVUaXRsZSA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGljb246IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGRldmljZU5hbWU6IERldmljZVNpemU7XHJcbiAgICBASW5wdXQoKSBkZXZpY2VTaXplOiBBYmJyZXZhdGlvbkRldmljZVNpemU7XHJcbiAgICBASW5wdXQoKSBhY2Nlc3M6IERlZmF1bHRDb21tYW5kc0FjY2VzcztcclxuICAgIEBJbnB1dCgpIGhpZGVUb29sYmFyOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgdG9vbGJhckJ1dHRvbnM6IGFueVtdO1xyXG4gICAgQElucHV0KCkgY29udGVudERlbnNpdHk6IENvbnRlbnREZW5zaXR5O1xyXG4gICAgQElucHV0KCkgaW5saW5lRWRpdE1vZGU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBhbGxvd0lubGluZUVkaXQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBncmlkU2V0dGluZzogYW55O1xyXG4gICAgQElucHV0KCkgdmlld0NvbGxlY3Rpb246IGFueVtdO1xyXG4gICAgQElucHV0KCkgcmVwb3J0VmlldzogVWlSZXBvcnRWaWV3QmFzZTtcclxuICAgIEBJbnB1dCgpIGluRGlhbG9nOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaXNNdWx0aVNlbGVjdDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGNsczogYW55O1xyXG5cclxuICAgIEBJbnB1dCgpIGhhc1NlbGVjdGVkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgY29uZmlnOiBhbnk7XHJcbiAgICBASW5wdXQoKSBoaWRkZW46IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBidXR0b25zOiBhbnlbXTtcclxuICAgIEBJbnB1dCgpIG1vRGF0YUxpc3RDb3VudDogbnVtYmVyO1xyXG4gICAgQE91dHB1dCgpIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgQE91dHB1dCgpIGdyb3VwYnlDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgQE91dHB1dCgpIHNvcnRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgQE91dHB1dCgpIGNvbHVtbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgICBAT3V0cHV0KCkgZWRpdE1vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSB2aWV3Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFVpUmVwb3J0Vmlld0Jhc2U+KCk7XHJcbiAgICBAT3V0cHV0KCkgY3JlYXRlTmV3SW5saW5lTW8gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICBlbmFibGU6IGJvb2xlYW47XHJcbiAgICBfcmVuZGVyZXIyID0gaW5qZWN0KFJlbmRlcmVyMik7XHJcbiAgICBfcG9ydGFsU2VydmljZSA9IGluamVjdChQb3J0YWxTZXJ2aWNlKTtcclxuICAgIHZpc2libGVkID0gZmFsc2U7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgICAgIHRoaXMuX3BvcnRhbFNlcnZpY2Uud2luZG93UmVzaXplJC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoUmVzaXplKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgICAgICAgY29uc3QgeyB0b29sYmFyQnV0dG9ucyB9ID0gY2hhbmdlcztcclxuICAgICAgICBpZiAodG9vbGJhckJ1dHRvbnMpIHtcclxuICAgICAgICAgICAgaWYgKHRvb2xiYXJCdXR0b25zLmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoVG9vbGJhcigpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoVG9vbGJhcigpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvblZpc2liaWxpdHlDaGFuZ2UoZSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChlID09PSAnVmlzaWJsZScpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnZpc2libGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldFdpZHRoKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoVG9vbGJhcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9zZXRXaWR0aCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMudmlzaWJsZWQgfHwgdGhpcy5oaWRlVG9vbGJhcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVmcmVzaFJlc2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSByZWZyZXNoUmVzaXplKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHggPSBNYXRoLmZsb29yKHRoaXMuZWwubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCB4ICsgJ3B4Jyk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hUb29sYmFyKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Hcm91cGJ5U2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ncm91cGJ5Q2xpY2suZW1pdCh0aGlzLmRldmljZU5hbWUpO1xyXG4gICAgfVxyXG4gICAgb25Tb3J0U2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zb3J0Q2xpY2suZW1pdCh0aGlzLmRldmljZU5hbWUpO1xyXG4gICAgfVxyXG4gICAgb25Db2x1bW5TZXR0aW5ncygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbHVtbkNsaWNrLmVtaXQodGhpcy5kZXZpY2VOYW1lKTtcclxuICAgIH1cclxuICAgIG9uRWRpdE1vZGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZUNsaWNrLmVtaXQoKTtcclxuICAgIH1cclxuICAgIG9uQ2hhbmdlVmlldyh2aWV3OiBVaVJlcG9ydFZpZXdCYXNlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3Q2xpY2suZW1pdCh2aWV3KTtcclxuICAgIH1cclxuICAgIF90cmFja0J5KGluZGV4LCBpdGVtKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gaXRlbT8uaXRlbUlkO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGlkZW50aWZ5KGluZGV4LCBpdGVtKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gaXRlbS50ZXh0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfcmVmcmVzaFRvb2xiYXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RsYkNtcCkge1xyXG4gICAgICAgICAgICB0aGlzLl90bGJDbXAuZm9yY2VPdmVyZmxvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLl90bGJDbXAudXBkYXRlQ29sbGFwc2libGVJdGVtcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDA7IHZpc2liaWxpdHk6IGhpZGRlbjsgb3BhY2l0eTogMFwiXHJcbiAgICBpbnRlcnNlY3Rpb25PYnNlcnZlclxyXG4gICAgW2ludGVyc2VjdGlvblRocmVzaG9sZF09XCIwLjFcIlxyXG4gICAgKHZpc2liaWxpdHlDaGFuZ2UpPVwib25WaXNpYmlsaXR5Q2hhbmdlKCRldmVudClcIlxyXG4+PC9kaXY+XHJcbkBpZiAoIXVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbCAmJiAhaGlkZVRvb2xiYXIgJiYgdmlzaWJsZWQpIHtcclxuPGZkLXRvb2xiYXJcclxuICAgICN0b29sYmFyXHJcbiAgICBbc2hvdWxkT3ZlcmZsb3ddPVwiZGV2aWNlU2l6ZSA9PT0gJ3MnXCJcclxuICAgIFtuZ0NsYXNzXT1cImRldmljZVNpemVcIlxyXG4gICAgW2hhc1RpdGxlXT1cIiFoaWRlVGl0bGVcIlxyXG4gICAgW2ZvcmNlT3ZlcmZsb3ddPVwidHJ1ZVwiXHJcbiAgICBbbmdDbGFzc109XCJjbHNcIlxyXG4+XHJcbiAgICBAaWYoIWhpZGVUaXRsZSAmJiBkZXZpY2VTaXplICE9PSAncycgPyAodGl0bGUgfCBiYmJUcmFuc2xhdGUpIDogJycpeyBAaWYoaWNvbil7XHJcbiAgICA8ZmQtaWNvbiBbZ2x5cGhdPVwiaWNvblwiPjwvZmQtaWNvbj5cclxuICAgIH1cclxuICAgIDxoNCBmZC10aXRsZT57eyB0aXRsZSB8IGJiYlRyYW5zbGF0ZSB9fTwvaDQ+XHJcbiAgICB9IEBpZiAoZGV2aWNlU2l6ZSAhPT0gJ3MnKSB7XHJcbiAgICA8ZmQtdG9vbGJhci1zcGFjZXIgZmQtdG9vbGJhci1pdGVtPjwvZmQtdG9vbGJhci1zcGFjZXI+XHJcbiAgICB9IEBpZiAoIWhpZGVUb29sYmFyKSB7IEBmb3IgKGJ0biBvZiB0b29sYmFyQnV0dG9uczsgdHJhY2sgX3RyYWNrQnkoaSwgYnRuKTsgbGV0IGkgPSAkaW5kZXgpIHsgQGlmIChidG4gIT09ICctJyAmJlxyXG4gICAgYnRuLkNvbW1hbmQgJiYgIWJ0bi5Db21tYW5kLkN1c3RvbVVpICYmICFidG4ubWVudSkge1xyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgIFthdHRyLmZkT3ZlcmZsb3dQcmlvcml0eV09XCJidG4uaXRlbUlkID09PSAnRWRpdCcgPyAnYWx3YXlzJyA6IGJ0bi5Db21tYW5kPy5Jc0J1aWx0aW4gPyAnbG93JyA6ICdoaWdoJ1wiXHJcbiAgICAgICAgW3VsdkNvbW1hbmRIYW5kbGVyXT1cImJ0blwiXHJcbiAgICAgICAgW2Rpc2FibGVdPVwiaW5saW5lRWRpdE1vZGUgJiYgYnRuLml0ZW1JZCA9PT0gJ05ldydcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJidG4uQ29tbWFuZC5faXNFbmFibGUgPT09IGZhbHNlID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICBbZmRUeXBlXT1cIiFidG4uQ29tbWFuZC5faXNFbmFibGUgPyAndHJhbnNwYXJlbnQnIDogYnRuLkNvbW1hbmQuSnNvbkV4dHJhUHJvcD8uRGVzaWduIHx8ICd0cmFuc3BhcmVudCdcIlxyXG4gICAgICAgIFtnbHlwaF09XCJkZXZpY2VTaXplID09PSAncycgPyBudWxsIDogYnRuLkNvbW1hbmQuSnNvbkV4dHJhUHJvcD8uSWNvblwiXHJcbiAgICAgICAgW3RpdGxlXT1cIihidG4uQ29tbWFuZD8uSXNCdWlsdGluID8gYnRuLnRleHQgOiAnJykgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgIChjbGljayk9XCJpbmxpbmVFZGl0TW9kZSAmJiBidG4uaXRlbUlkID09PSAnTmV3JyAmJiBjcmVhdGVOZXdJbmxpbmVNby5lbWl0KClcIlxyXG4gICAgICAgIGJvZHlDbGlja1xyXG4gICAgPlxyXG4gICAgICAgIEBpZiAoIWJ0bi5Db21tYW5kLkpzb25FeHRyYVByb3A/Lkljb24gJiYgIWJ0bi5Db21tYW5kPy5Jc0J1aWx0aW4gJiYgYnRuLmljb24pIHtcclxuICAgICAgICA8aW1nIHdpZHRoPVwiMTZcIiBbc3JjXT1cImJ0bi5pY29uXCIgLz5cclxuICAgICAgICB9IEBpZiAoIWJ0bi5oaWRlVGV4dCB8fCBkZXZpY2VTaXplID09PSAncycpIHtcclxuICAgICAgICA8c3Bhbj57eyBidG4udGV4dCB8IGJiYlRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICB9XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH0gQGlmICgoYnRuID09PSAnLScgfHwgYnRuLnR5cGUgPT09ICdzZXBlcmF0b3InKSAmJiBkZXZpY2VOYW1lICE9PSAnbW9iaWxlJykge1xyXG4gICAgPGZkLXRvb2xiYXItc2VwYXJhdG9yIGZkLXRvb2xiYXItaXRlbT48L2ZkLXRvb2xiYXItc2VwYXJhdG9yPlxyXG4gICAgfSBAaWYgKGJ0bi5tZW51KSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgW2ZkTWVudV09XCJ0cnVlXCJcclxuICAgICAgICBbZmRUeXBlXT1cImJ0bi5Db21tYW5kPy5Jc0J1aWx0aW4gPyAnc3RhbmRhcmQnIDogJ3RyYW5zcGFyZW50J1wiXHJcbiAgICAgICAgW2xhYmVsXT1cImJ0bi50ZXh0IHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICBbYXJpYUxhYmVsXT1cImJ0bi50ZXh0IHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICBbZmRNZW51VHJpZ2dlcl09XCJtZW51XCJcclxuICAgICAgICBib2R5Q2xpY2tcclxuICAgID5cclxuICAgICAgICA8ZmQtbWVudSAjbWVudT5cclxuICAgICAgICAgICAgQGZvciAoYnRuQ29tbWFuZCBvZiBidG4ubWVudS5pdGVtczsgdHJhY2sgYnRuQ29tbWFuZCkge1xyXG4gICAgICAgICAgICA8bGkgZmQtbWVudS1pdGVtIFt1bHZDb21tYW5kSGFuZGxlcl09XCJidG5Db21tYW5kXCIgKGNsaWNrKT1cIm1lbnUuY2xvc2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmZC1tZW51LWludGVyYWN0aXZlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGZkLW1lbnUtdGl0bGU+e3sgYnRuQ29tbWFuZC50ZXh0IHwgYmJiVHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2ZkLW1lbnU+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH0gQGlmIChidG4gIT09ICctJyAmJiBidG4uQ29tbWFuZCAmJiBidG4uQ29tbWFuZC5DdXN0b21VaSkge1xyXG4gICAgPGJucmMtZHluYW1pYy1mb3JtLXRvb2xiYXJpdGVtXHJcbiAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgW3VsdkNvbW1hbmRIYW5kbGVyXT1cImJ0blwiXHJcbiAgICAgICAgW2NvbXBvbmVudF09XCJidG4uQ29tbWFuZD8uQ3VzdG9tVWlcIlxyXG4gICAgICAgIFtjb250ZXh0XT1cImJ0blwiXHJcbiAgICAgICAgW2lzRW5hYmxlXT1cImJ0bi5Db21tYW5kPy5faXNFbmFibGVcIlxyXG4gICAgICAgIFtkZXZpY2VOYW1lXT1cImRldmljZU5hbWVcIlxyXG4gICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxyXG4gICAgICAgIGJvZHlDbGlja1xyXG4gICAgPjwvYm5yYy1keW5hbWljLWZvcm0tdG9vbGJhcml0ZW0+XHJcbiAgICB9IH1cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmZC10b29sYmFyLWl0ZW1dXCI+PC9uZy1jb250ZW50PlxyXG4gICAgQGlmIChhbGxvd0lubGluZUVkaXQgJiYgYWNjZXNzPy5FZGl0KSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgW2ZkVHlwZV09XCJpbmxpbmVFZGl0TW9kZSA/ICdlbXBoYXNpemVkJyA6ICd0cmFuc3BhcmVudCdcIlxyXG4gICAgICAgIFtnbHlwaF09XCInZWRpdCdcIlxyXG4gICAgICAgIFtsYWJlbF09XCJkZXZpY2VTaXplID09PSAncycgPyAoJ0lubGluZSBFZGl0IEluIExpc3QnIHwgYmJiVHJhbnNsYXRlKSA6ICcnXCJcclxuICAgICAgICAoY2xpY2spPVwib25FZGl0TW9kZSgpXCJcclxuICAgICAgICBbYXR0ci5mZE92ZXJmbG93UHJpb3JpdHldPVwiJ2Fsd2F5cydcIlxyXG4gICAgICAgIFt0aXRsZV09XCInSW5saW5lIEVkaXQgSW4gTGlzdCcgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgIGJvZHlDbGlja1xyXG4gICAgPjwvYnV0dG9uPlxyXG4gICAgfSBAaWYgKGdyaWRTZXR0aW5nICYmIGdyaWRTZXR0aW5nLkhpZGRlbiAhPT0gdHJ1ZSAmJiBhbGxvd0dyaWRDb2x1bW5Tb3J0KSB7IEBpZiAoZGV2aWNlU2l6ZSA9PT0gJ3MnKSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgW2NvbnRlbnREZW5zaXR5XT1cImNvbnRlbnREZW5zaXR5XCJcclxuICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgW2F0dHIuZmRPdmVyZmxvd1ByaW9yaXR5XT1cIidhbHdheXMnXCJcclxuICAgICAgICAoY2xpY2spPVwib25Hcm91cGJ5U2V0dGluZ3MoKVwiXHJcbiAgICAgICAgW2xhYmVsXT1cIidHcm91cHMnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICBib2R5Q2xpY2tcclxuICAgID48L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICBmZC1idXR0b25cclxuICAgICAgICBbY29udGVudERlbnNpdHldPVwiY29udGVudERlbnNpdHlcIlxyXG4gICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICBbYXR0ci5mZE92ZXJmbG93UHJpb3JpdHldPVwiJ2Fsd2F5cydcIlxyXG4gICAgICAgIChjbGljayk9XCJvblNvcnRTZXR0aW5ncygpXCJcclxuICAgICAgICBbbGFiZWxdPVwiJ1NvcnQnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICBib2R5Q2xpY2tcclxuICAgID48L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICBmZC1idXR0b25cclxuICAgICAgICBbY29udGVudERlbnNpdHldPVwiY29udGVudERlbnNpdHlcIlxyXG4gICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICBbYXR0ci5mZE92ZXJmbG93UHJpb3JpdHldPVwiJ2Fsd2F5cydcIlxyXG4gICAgICAgIChjbGljayk9XCJvbkNvbHVtblNldHRpbmdzKClcIlxyXG4gICAgICAgIFtsYWJlbF09XCInQ29sdW1ucycgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgIGJvZHlDbGlja1xyXG4gICAgPjwvYnV0dG9uPlxyXG4gICAgfSBAaWYgKGRldmljZVNpemUgIT09ICdzJykge1xyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgIFthdHRyLmZkT3ZlcmZsb3dQcmlvcml0eV09XCInbmV2ZXInXCJcclxuICAgICAgICBbZmRNZW51XT1cInRydWVcIlxyXG4gICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICBnbHlwaD1cImFjdGlvbi1zZXR0aW5nc1wiXHJcbiAgICAgICAgW3RpdGxlXT1cIidTZXR0aW5ncycgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgIFtmZE1lbnVUcmlnZ2VyXT1cInRhYmxlTWVudVNldHRpbmdzXCJcclxuICAgICAgICBib2R5Q2xpY2tcclxuICAgID48L2J1dHRvbj5cclxuICAgIH1cclxuICAgIDxmZC1tZW51ICN0YWJsZU1lbnVTZXR0aW5ncz5cclxuICAgICAgICA8bGkgZmQtbWVudS1pdGVtPlxyXG4gICAgICAgICAgICA8ZGl2IGZkLW1lbnUtaW50ZXJhY3RpdmUgKGNsaWNrKT1cInRhYmxlTWVudVNldHRpbmdzLmNsb3NlKCk7IG9uQ29sdW1uU2V0dGluZ3MoKVwiIGJvZHlDbGljaz5cclxuICAgICAgICAgICAgICAgIDxmZC1tZW51LWFkZG9uIHBvc2l0aW9uPVwiYmVmb3JlXCIgZ2x5cGg9XCJhY3Rpb24tc2V0dGluZ3NcIj48L2ZkLW1lbnUtYWRkb24+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdDb2x1bW5zJyB8IGJiYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBmZC1tZW51LWl0ZW0+XHJcbiAgICAgICAgICAgIDxkaXYgZmQtbWVudS1pbnRlcmFjdGl2ZSAoY2xpY2spPVwidGFibGVNZW51U2V0dGluZ3MuY2xvc2UoKTsgb25Tb3J0U2V0dGluZ3MoKVwiIGJvZHlDbGljaz5cclxuICAgICAgICAgICAgICAgIDxmZC1tZW51LWFkZG9uIHBvc2l0aW9uPVwiYmVmb3JlXCIgZ2x5cGg9XCJzb3J0XCI+PC9mZC1tZW51LWFkZG9uPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZmQtbWVudS10aXRsZT5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnU29ydCcgfCBiYmJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgZmQtbWVudS1pdGVtPlxyXG4gICAgICAgICAgICA8ZGl2IGZkLW1lbnUtaW50ZXJhY3RpdmUgKGNsaWNrKT1cInRhYmxlTWVudVNldHRpbmdzLmNsb3NlKCk7IG9uR3JvdXBieVNldHRpbmdzKClcIiBib2R5Q2xpY2s+XHJcbiAgICAgICAgICAgICAgICA8ZmQtbWVudS1hZGRvbiBwb3NpdGlvbj1cImJlZm9yZVwiIGdseXBoPVwiZ3JvdXAtMlwiPjwvZmQtbWVudS1hZGRvbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGZkLW1lbnUtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ0dyb3VwcycgfCBiYmJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvZmQtbWVudT5cclxuICAgIH0gQGlmICh2aWV3Q29sbGVjdGlvbiAmJiB2aWV3Q29sbGVjdGlvbi5sZW5ndGggPiAxKSB7XHJcbiAgICA8ZmQtc3BsaXQtYnV0dG9uXHJcbiAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgW2F0dHIuZmRPdmVyZmxvd1ByaW9yaXR5XT1cImRldmljZVNpemUgPT09ICdzJyA/ICdhbHdheXMnIDogJ2xvdydcIlxyXG4gICAgICAgIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiXHJcbiAgICAgICAgW21haW5BY3Rpb25dPVwie1xyXG4gICAgICAgICAgICBrZWVwTWFpbkFjdGlvbjogdHJ1ZSxcclxuICAgICAgICAgICAgbWFpbkFjdGlvblRpdGxlOiBzcGxpdEJ0blRpdGxlXHJcbiAgICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgICAgPGZkLW1lbnU+XHJcbiAgICAgICAgICAgIEBmb3IgKHZpZXdPYmplY3Qgb2Ygdmlld0NvbGxlY3Rpb247IHRyYWNrIHZpZXdPYmplY3QpIHtcclxuICAgICAgICAgICAgPGxpIGZkLW1lbnUtaXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgZmQtbWVudS1pbnRlcmFjdGl2ZSAoY2xpY2spPVwib25DaGFuZ2VWaWV3KHZpZXdPYmplY3QpXCIgYm9keUNsaWNrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGZkLW1lbnUtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIFtnbHlwaF09XCJ2aWV3T2JqZWN0LlVpQ29tcG9uZW50LlNldHRpbmdzPy5JY29uXCI+IDwvZmQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZmQtbWVudT5cclxuICAgIDwvZmQtc3BsaXQtYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgPG5nLXRlbXBsYXRlICNzcGxpdEJ0blRpdGxlPlxyXG4gICAgICAgIDxmZC1pY29uIFtnbHlwaF09XCJyZXBvcnRWaWV3LlVpQ29tcG9uZW50LlNldHRpbmdzPy5JY29uXCI+PC9mZC1pY29uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjc3BsaXRCdG5TZXR0aW5ncz5cclxuICAgICAgICA8ZmQtaWNvbiBbZ2x5cGhdPVwiJ2FjdGlvbi1zZXR0aW5ncydcIj48L2ZkLWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgfVxyXG48L2ZkLXRvb2xiYXI+XHJcbn1cclxuIl19
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWx2LXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWx2LXRvb2xiYXIvdWx2LXRvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWx2LXRvb2xiYXIvdWx2LXRvb2xiYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFFVCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFrQixnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXpFLE9BQU8sRUFDSCxhQUFhLEVBS2IsYUFBYSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFTakMsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGFBQWE7SUF1Q2xELFlBQW1CLEVBQWMsRUFBVSxJQUF1QjtRQUM5RCxLQUFLLEVBQUUsQ0FBQztRQURPLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQWxDekQsY0FBUyxHQUFHLEtBQUssQ0FBQztRQXVCakIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDcEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzFDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN6QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsY0FBUyxHQUFHLElBQUksWUFB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LFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgaW5qZWN0LFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBSZW5kZXJlcjIsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5LCBUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBCYXNlQ29tcG9uZW50LFxyXG4gICAgRGVmYXVsdENvbW1hbmRzQWNjZXNzLFxyXG4gICAgQWJicmV2YXRpb25EZXZpY2VTaXplLFxyXG4gICAgRGV2aWNlU2l6ZSxcclxuICAgIFVpUmVwb3J0Vmlld0Jhc2UsXHJcbiAgICBQb3J0YWxTZXJ2aWNlXHJcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdic3UtdWx2LXRvb2xiYXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Vsdi10b29sYmFyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Vsdi10b29sYmFyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVbHZUb29sYmFyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgICBAVmlld0NoaWxkKFRvb2xiYXJDb21wb25lbnQpIF90bGJDbXA6IFRvb2xiYXJDb21wb25lbnQ7XHJcbiAgICBASW5wdXQoKSBhbGxvd0dyaWRDb2x1bW5Tb3J0OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgdXNlTGF5b3V0SXRlbVRleHRGb3JDb250cm9sOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgZW5hYmxlU2VhcmNoOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaGlkZVRpdGxlID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgaWNvbjogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgZGV2aWNlTmFtZTogRGV2aWNlU2l6ZTtcclxuICAgIEBJbnB1dCgpIGRldmljZVNpemU6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZTtcclxuICAgIEBJbnB1dCgpIGFjY2VzczogRGVmYXVsdENvbW1hbmRzQWNjZXNzO1xyXG4gICAgQElucHV0KCkgaGlkZVRvb2xiYXI6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSB0b29sYmFyQnV0dG9uczogYW55W107XHJcbiAgICBASW5wdXQoKSBjb250ZW50RGVuc2l0eTogQ29udGVudERlbnNpdHk7XHJcbiAgICBASW5wdXQoKSBpbmxpbmVFZGl0TW9kZTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGFsbG93SW5saW5lRWRpdDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGdyaWRTZXR0aW5nOiBhbnk7XHJcbiAgICBASW5wdXQoKSB2aWV3Q29sbGVjdGlvbjogYW55W107XHJcbiAgICBASW5wdXQoKSByZXBvcnRWaWV3OiBVaVJlcG9ydFZpZXdCYXNlO1xyXG4gICAgQElucHV0KCkgaW5EaWFsb2c6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBpc011bHRpU2VsZWN0OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgY2xzOiBhbnk7XHJcblxyXG4gICAgQElucHV0KCkgaGFzU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBjb25maWc6IGFueTtcclxuICAgIEBJbnB1dCgpIGhpZGRlbjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGJ1dHRvbnM6IGFueVtdO1xyXG4gICAgQElucHV0KCkgbW9EYXRhTGlzdENvdW50OiBudW1iZXI7XHJcbiAgICBAT3V0cHV0KCkgc2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgICBAT3V0cHV0KCkgZ3JvdXBieUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgICBAT3V0cHV0KCkgc29ydENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgICBAT3V0cHV0KCkgY29sdW1uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICAgIEBPdXRwdXQoKSBlZGl0TW9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHZpZXdDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VWlSZXBvcnRWaWV3QmFzZT4oKTtcclxuICAgIEBPdXRwdXQoKSBjcmVhdGVOZXdJbmxpbmVNbyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAgIGVuYWJsZTogYm9vbGVhbjtcclxuICAgIF9yZW5kZXJlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICAgIF9wb3J0YWxTZXJ2aWNlID0gaW5qZWN0KFBvcnRhbFNlcnZpY2UpO1xyXG4gICAgdmlzaWJsZWQgPSBmYWxzZTtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XHJcbiAgICAgICAgdGhpcy5fcG9ydGFsU2VydmljZS53aW5kb3dSZXNpemUkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hSZXNpemUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBjb25zdCB7IHRvb2xiYXJCdXR0b25zIH0gPSBjaGFuZ2VzO1xyXG4gICAgICAgIGlmICh0b29sYmFyQnV0dG9ucykge1xyXG4gICAgICAgICAgICBpZiAodG9vbGJhckJ1dHRvbnMuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hUb29sYmFyKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hUb29sYmFyKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG9uVmlzaWJpbGl0eUNoYW5nZShlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGUgPT09ICdWaXNpYmxlJykge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRXaWR0aCgpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudmlzaWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFRvb2xiYXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfc2V0V2lkdGgoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGVkIHx8IHRoaXMuaGlkZVRvb2xiYXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZnJlc2hSZXNpemUoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVmcmVzaFJlc2l6ZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB4ID0gTWF0aC5mbG9vcih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgeCArICdweCcpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoVG9vbGJhcigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uR3JvdXBieVNldHRpbmdzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBieUNsaWNrLmVtaXQodGhpcy5kZXZpY2VOYW1lKTtcclxuICAgIH1cclxuICAgIG9uU29ydFNldHRpbmdzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc29ydENsaWNrLmVtaXQodGhpcy5kZXZpY2VOYW1lKTtcclxuICAgIH1cclxuICAgIG9uQ29sdW1uU2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5DbGljay5lbWl0KHRoaXMuZGV2aWNlTmFtZSk7XHJcbiAgICB9XHJcbiAgICBvbkVkaXRNb2RlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZWRpdE1vZGVDbGljay5lbWl0KCk7XHJcbiAgICB9XHJcbiAgICBvbkNoYW5nZVZpZXcodmlldzogVWlSZXBvcnRWaWV3QmFzZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld0NsaWNrLmVtaXQodmlldyk7XHJcbiAgICB9XHJcbiAgICBfdHJhY2tCeShpbmRleCwgaXRlbSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0/Lml0ZW1JZDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBpZGVudGlmeShpbmRleCwgaXRlbSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0udGV4dDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3JlZnJlc2hUb29sYmFyKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl90bGJDbXApIHtcclxuICAgICAgICAgICAgdGhpcy5fdGxiQ21wLmZvcmNlT3ZlcmZsb3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5fdGxiQ21wLnVwZGF0ZUNvbGxhcHNpYmxlSXRlbXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAwOyB2aXNpYmlsaXR5OiBoaWRkZW47IG9wYWNpdHk6IDBcIlxyXG4gICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJcclxuICAgIFtpbnRlcnNlY3Rpb25UaHJlc2hvbGRdPVwiMC4xXCJcclxuICAgICh2aXNpYmlsaXR5Q2hhbmdlKT1cIm9uVmlzaWJpbGl0eUNoYW5nZSgkZXZlbnQpXCJcclxuPjwvZGl2PlxyXG5AaWYgKCF1c2VMYXlvdXRJdGVtVGV4dEZvckNvbnRyb2wgJiYgIWhpZGVUb29sYmFyICYmIHZpc2libGVkKSB7XHJcbjxmZC10b29sYmFyXHJcbiAgICAjdG9vbGJhclxyXG4gICAgW3Nob3VsZE92ZXJmbG93XT1cImRldmljZVNpemUgPT09ICdzJ1wiXHJcbiAgICBbbmdDbGFzc109XCJkZXZpY2VTaXplXCJcclxuICAgIFtoYXNUaXRsZV09XCIhaGlkZVRpdGxlXCJcclxuICAgIFtmb3JjZU92ZXJmbG93XT1cInRydWVcIlxyXG4gICAgW25nQ2xhc3NdPVwiY2xzXCJcclxuPlxyXG4gICAgQGlmKCFoaWRlVGl0bGUgJiYgZGV2aWNlU2l6ZSAhPT0gJ3MnID8gKHRpdGxlIHwgYmJiVHJhbnNsYXRlKSA6ICcnKXsgQGlmKGljb24pe1xyXG4gICAgPGZkLWljb24gW2dseXBoXT1cImljb25cIj48L2ZkLWljb24+XHJcbiAgICB9XHJcbiAgICA8aDQgZmQtdGl0bGU+e3sgdGl0bGUgfCBiYmJUcmFuc2xhdGUgfX08L2g0PlxyXG4gICAgfSBAaWYgKGRldmljZVNpemUgIT09ICdzJykge1xyXG4gICAgPGZkLXRvb2xiYXItc3BhY2VyIGZkLXRvb2xiYXItaXRlbT48L2ZkLXRvb2xiYXItc3BhY2VyPlxyXG4gICAgfSBAaWYgKCFoaWRlVG9vbGJhcikgeyBAZm9yIChidG4gb2YgdG9vbGJhckJ1dHRvbnM7IHRyYWNrIF90cmFja0J5KGksIGJ0bik7IGxldCBpID0gJGluZGV4KSB7IEBpZiAoYnRuICE9PSAnLScgJiZcclxuICAgIGJ0bi5Db21tYW5kICYmICFidG4uQ29tbWFuZC5DdXN0b21VaSAmJiAhYnRuLm1lbnUpIHtcclxuICAgIDxidXR0b25cclxuICAgICAgICBmZC1idXR0b25cclxuICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICBbYXR0ci5mZE92ZXJmbG93UHJpb3JpdHldPVwiYnRuLml0ZW1JZCA9PT0gJ0VkaXQnID8gJ2Fsd2F5cycgOiBidG4uQ29tbWFuZD8uSXNCdWlsdGluID8gJ2xvdycgOiAnaGlnaCdcIlxyXG4gICAgICAgIFt1bHZDb21tYW5kSGFuZGxlcl09XCJidG5cIlxyXG4gICAgICAgIFtkaXNhYmxlXT1cImlubGluZUVkaXRNb2RlICYmIGJ0bi5pdGVtSWQgPT09ICdOZXcnXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiYnRuLkNvbW1hbmQuX2lzRW5hYmxlID09PSBmYWxzZSA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgW2ZkVHlwZV09XCIhYnRuLkNvbW1hbmQuX2lzRW5hYmxlID8gJ3RyYW5zcGFyZW50JyA6IGJ0bi5Db21tYW5kLkpzb25FeHRyYVByb3A/LkRlc2lnbiB8fCAndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICBbZ2x5cGhdPVwiZGV2aWNlU2l6ZSA9PT0gJ3MnID8gbnVsbCA6IGJ0bi5Db21tYW5kLkpzb25FeHRyYVByb3A/Lkljb25cIlxyXG4gICAgICAgIFt0aXRsZV09XCIoYnRuLkNvbW1hbmQ/LklzQnVpbHRpbiA/IGJ0bi50ZXh0IDogJycpIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAoY2xpY2spPVwiaW5saW5lRWRpdE1vZGUgJiYgYnRuLml0ZW1JZCA9PT0gJ05ldycgJiYgY3JlYXRlTmV3SW5saW5lTW8uZW1pdCgpXCJcclxuICAgICAgICBib2R5Q2xpY2tcclxuICAgID5cclxuICAgICAgICBAaWYgKCFidG4uQ29tbWFuZC5Kc29uRXh0cmFQcm9wPy5JY29uICYmICFidG4uQ29tbWFuZD8uSXNCdWlsdGluICYmIGJ0bi5pY29uKSB7XHJcbiAgICAgICAgPGltZyB3aWR0aD1cIjE2XCIgW3NyY109XCJidG4uaWNvblwiIC8+XHJcbiAgICAgICAgfSBAaWYgKCFidG4uaGlkZVRleHQgfHwgZGV2aWNlU2l6ZSA9PT0gJ3MnKSB7XHJcbiAgICAgICAgPHNwYW4+e3sgYnRuLnRleHQgfCBiYmJUcmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgfVxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9IEBpZiAoKGJ0biA9PT0gJy0nIHx8IGJ0bi50eXBlID09PSAnc2VwZXJhdG9yJykgJiYgZGV2aWNlTmFtZSAhPT0gJ21vYmlsZScpIHtcclxuICAgIDxmZC10b29sYmFyLXNlcGFyYXRvciBmZC10b29sYmFyLWl0ZW0+PC9mZC10b29sYmFyLXNlcGFyYXRvcj5cclxuICAgIH0gQGlmIChidG4ubWVudSkge1xyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgIFtmZE1lbnVdPVwidHJ1ZVwiXHJcbiAgICAgICAgW2ZkVHlwZV09XCJidG4uQ29tbWFuZD8uSXNCdWlsdGluID8gJ3N0YW5kYXJkJyA6ICd0cmFuc3BhcmVudCdcIlxyXG4gICAgICAgIFtsYWJlbF09XCJidG4udGV4dCB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgW2FyaWFMYWJlbF09XCJidG4udGV4dCB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgW2ZkTWVudVRyaWdnZXJdPVwibWVudVwiXHJcbiAgICAgICAgYm9keUNsaWNrXHJcbiAgICA+XHJcbiAgICAgICAgPGZkLW1lbnUgI21lbnU+XHJcbiAgICAgICAgICAgIEBmb3IgKGJ0bkNvbW1hbmQgb2YgYnRuLm1lbnUuaXRlbXM7IHRyYWNrIGJ0bkNvbW1hbmQpIHtcclxuICAgICAgICAgICAgPGxpIGZkLW1lbnUtaXRlbSBbdWx2Q29tbWFuZEhhbmRsZXJdPVwiYnRuQ29tbWFuZFwiIChjbGljayk9XCJtZW51LmNsb3NlKClcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZmQtbWVudS1pbnRlcmFjdGl2ZT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPnt7IGJ0bkNvbW1hbmQudGV4dCB8IGJiYlRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9mZC1tZW51PlxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9IEBpZiAoYnRuICE9PSAnLScgJiYgYnRuLkNvbW1hbmQgJiYgYnRuLkNvbW1hbmQuQ3VzdG9tVWkpIHtcclxuICAgIDxibnJjLWR5bmFtaWMtZm9ybS10b29sYmFyaXRlbVxyXG4gICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgIFt1bHZDb21tYW5kSGFuZGxlcl09XCJidG5cIlxyXG4gICAgICAgIFtjb21wb25lbnRdPVwiYnRuLkNvbW1hbmQ/LkN1c3RvbVVpXCJcclxuICAgICAgICBbY29udGV4dF09XCJidG5cIlxyXG4gICAgICAgIFtpc0VuYWJsZV09XCJidG4uQ29tbWFuZD8uX2lzRW5hYmxlXCJcclxuICAgICAgICBbZGV2aWNlTmFtZV09XCJkZXZpY2VOYW1lXCJcclxuICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcclxuICAgICAgICBib2R5Q2xpY2tcclxuICAgID48L2JucmMtZHluYW1pYy1mb3JtLXRvb2xiYXJpdGVtPlxyXG4gICAgfSB9XHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmQtdG9vbGJhci1pdGVtXVwiPjwvbmctY29udGVudD5cclxuICAgIEBpZiAoYWxsb3dJbmxpbmVFZGl0ICYmIGFjY2Vzcz8uRWRpdCkge1xyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgIFtmZFR5cGVdPVwiaW5saW5lRWRpdE1vZGUgPyAnZW1waGFzaXplZCcgOiAndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICBbZ2x5cGhdPVwiJ2VkaXQnXCJcclxuICAgICAgICBbbGFiZWxdPVwiZGV2aWNlU2l6ZSA9PT0gJ3MnID8gKCdJbmxpbmUgRWRpdCBJbiBMaXN0JyB8IGJiYlRyYW5zbGF0ZSkgOiAnJ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uRWRpdE1vZGUoKVwiXHJcbiAgICAgICAgW2F0dHIuZmRPdmVyZmxvd1ByaW9yaXR5XT1cIidhbHdheXMnXCJcclxuICAgICAgICBbdGl0bGVdPVwiJ0lubGluZSBFZGl0IEluIExpc3QnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICBib2R5Q2xpY2tcclxuICAgID48L2J1dHRvbj5cclxuICAgIH0gQGlmIChncmlkU2V0dGluZyAmJiBncmlkU2V0dGluZy5IaWRkZW4gIT09IHRydWUgJiYgYWxsb3dHcmlkQ29sdW1uU29ydCkgeyBAaWYgKGRldmljZVNpemUgPT09ICdzJykge1xyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgIFtjb250ZW50RGVuc2l0eV09XCJjb250ZW50RGVuc2l0eVwiXHJcbiAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgIFthdHRyLmZkT3ZlcmZsb3dQcmlvcml0eV09XCInYWx3YXlzJ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uR3JvdXBieVNldHRpbmdzKClcIlxyXG4gICAgICAgIFtsYWJlbF09XCInR3JvdXBzJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgYm9keUNsaWNrXHJcbiAgICA+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgW2NvbnRlbnREZW5zaXR5XT1cImNvbnRlbnREZW5zaXR5XCJcclxuICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgW2F0dHIuZmRPdmVyZmxvd1ByaW9yaXR5XT1cIidhbHdheXMnXCJcclxuICAgICAgICAoY2xpY2spPVwib25Tb3J0U2V0dGluZ3MoKVwiXHJcbiAgICAgICAgW2xhYmVsXT1cIidTb3J0JyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgYm9keUNsaWNrXHJcbiAgICA+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgW2NvbnRlbnREZW5zaXR5XT1cImNvbnRlbnREZW5zaXR5XCJcclxuICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgW2F0dHIuZmRPdmVyZmxvd1ByaW9yaXR5XT1cIidhbHdheXMnXCJcclxuICAgICAgICAoY2xpY2spPVwib25Db2x1bW5TZXR0aW5ncygpXCJcclxuICAgICAgICBbbGFiZWxdPVwiJ0NvbHVtbnMnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICBib2R5Q2xpY2tcclxuICAgID48L2J1dHRvbj5cclxuICAgIH0gQGlmIChkZXZpY2VTaXplICE9PSAncycpIHtcclxuICAgIDxidXR0b25cclxuICAgICAgICBmZC1idXR0b25cclxuICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICBbYXR0ci5mZE92ZXJmbG93UHJpb3JpdHldPVwiJ25ldmVyJ1wiXHJcbiAgICAgICAgW2ZkTWVudV09XCJ0cnVlXCJcclxuICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgZ2x5cGg9XCJhY3Rpb24tc2V0dGluZ3NcIlxyXG4gICAgICAgIFt0aXRsZV09XCInU2V0dGluZ3MnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICBbZmRNZW51VHJpZ2dlcl09XCJ0YWJsZU1lbnVTZXR0aW5nc1wiXHJcbiAgICAgICAgYm9keUNsaWNrXHJcbiAgICA+PC9idXR0b24+XHJcbiAgICB9XHJcbiAgICA8ZmQtbWVudSAjdGFibGVNZW51U2V0dGluZ3M+XHJcbiAgICAgICAgPGxpIGZkLW1lbnUtaXRlbT5cclxuICAgICAgICAgICAgPGRpdiBmZC1tZW51LWludGVyYWN0aXZlIChjbGljayk9XCJ0YWJsZU1lbnVTZXR0aW5ncy5jbG9zZSgpOyBvbkNvbHVtblNldHRpbmdzKClcIiBib2R5Q2xpY2s+XHJcbiAgICAgICAgICAgICAgICA8ZmQtbWVudS1hZGRvbiBwb3NpdGlvbj1cImJlZm9yZVwiIGdseXBoPVwiYWN0aW9uLXNldHRpbmdzXCI+PC9mZC1tZW51LWFkZG9uPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZmQtbWVudS10aXRsZT5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnQ29sdW1ucycgfCBiYmJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgZmQtbWVudS1pdGVtPlxyXG4gICAgICAgICAgICA8ZGl2IGZkLW1lbnUtaW50ZXJhY3RpdmUgKGNsaWNrKT1cInRhYmxlTWVudVNldHRpbmdzLmNsb3NlKCk7IG9uU29ydFNldHRpbmdzKClcIiBib2R5Q2xpY2s+XHJcbiAgICAgICAgICAgICAgICA8ZmQtbWVudS1hZGRvbiBwb3NpdGlvbj1cImJlZm9yZVwiIGdseXBoPVwic29ydFwiPjwvZmQtbWVudS1hZGRvbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGZkLW1lbnUtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ1NvcnQnIHwgYmJiVHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpIGZkLW1lbnUtaXRlbT5cclxuICAgICAgICAgICAgPGRpdiBmZC1tZW51LWludGVyYWN0aXZlIChjbGljayk9XCJ0YWJsZU1lbnVTZXR0aW5ncy5jbG9zZSgpOyBvbkdyb3VwYnlTZXR0aW5ncygpXCIgYm9keUNsaWNrPlxyXG4gICAgICAgICAgICAgICAgPGZkLW1lbnUtYWRkb24gcG9zaXRpb249XCJiZWZvcmVcIiBnbHlwaD1cImdyb3VwLTJcIj48L2ZkLW1lbnUtYWRkb24+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdHcm91cHMnIHwgYmJiVHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L2ZkLW1lbnU+XHJcbiAgICB9IEBpZiAodmlld0NvbGxlY3Rpb24gJiYgdmlld0NvbGxlY3Rpb24ubGVuZ3RoID4gMSkge1xyXG4gICAgPGZkLXNwbGl0LWJ1dHRvblxyXG4gICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgIFthdHRyLmZkT3ZlcmZsb3dQcmlvcml0eV09XCJkZXZpY2VTaXplID09PSAncycgPyAnYWx3YXlzJyA6ICdsb3cnXCJcclxuICAgICAgICBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIlxyXG4gICAgICAgIFttYWluQWN0aW9uXT1cIntcclxuICAgICAgICAgICAga2VlcE1haW5BY3Rpb246IHRydWUsXHJcbiAgICAgICAgICAgIG1haW5BY3Rpb25UaXRsZTogc3BsaXRCdG5UaXRsZVxyXG4gICAgICAgIH1cIlxyXG4gICAgPlxyXG4gICAgICAgIDxmZC1tZW51PlxyXG4gICAgICAgICAgICBAZm9yICh2aWV3T2JqZWN0IG9mIHZpZXdDb2xsZWN0aW9uOyB0cmFjayB2aWV3T2JqZWN0KSB7XHJcbiAgICAgICAgICAgIDxsaSBmZC1tZW51LWl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZkLW1lbnUtaW50ZXJhY3RpdmUgKGNsaWNrKT1cIm9uQ2hhbmdlVmlldyh2aWV3T2JqZWN0KVwiIGJvZHlDbGljaz5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBbZ2x5cGhdPVwidmlld09iamVjdC5VaUNvbXBvbmVudC5TZXR0aW5ncz8uSWNvblwiPiA8L2ZkLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2ZkLW1lbnU+XHJcbiAgICA8L2ZkLXNwbGl0LWJ1dHRvbj5cclxuICAgIH1cclxuICAgIDxuZy10ZW1wbGF0ZSAjc3BsaXRCdG5UaXRsZT5cclxuICAgICAgICA8ZmQtaWNvbiBbZ2x5cGhdPVwicmVwb3J0Vmlldy5VaUNvbXBvbmVudC5TZXR0aW5ncz8uSWNvblwiPjwvZmQtaWNvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI3NwbGl0QnRuU2V0dGluZ3M+XHJcbiAgICAgICAgPGZkLWljb24gW2dseXBoXT1cIidhY3Rpb24tc2V0dGluZ3MnXCI+PC9mZC1pY29uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIH1cclxuPC9mZC10b29sYmFyPlxyXG59XHJcbiJdfQ==