barsa-sap-ui 2.2.10 → 2.2.12
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.
- package/esm2022/lib/barsa-bar-download-file/barsa-bar-download-file.component.mjs +11 -6
- package/esm2022/lib/file-viewer/file-viewer.component.mjs +10 -10
- package/esm2022/lib/file-viewer-popover/file-viewer-popover.component.mjs +3 -3
- package/esm2022/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +3 -3
- package/esm2022/lib/ui-pictures-info/ui-pictures-info.component.mjs +3 -3
- package/fesm2022/barsa-sap-ui.mjs +143 -139
- package/fesm2022/barsa-sap-ui.mjs.map +1 -1
- package/lib/barsa-bar-download-file/barsa-bar-download-file.component.d.ts +3 -1
- package/package.json +1 -1
|
@@ -244,11 +244,11 @@ export class UiPicturesInfoComponent extends DeviceInfoFieldBaseComponent {
|
|
|
244
244
|
this.value = value;
|
|
245
245
|
}
|
|
246
246
|
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 }\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: 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 }); }
|
|
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 }); }
|
|
248
248
|
}
|
|
249
249
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiPicturesInfoComponent, decorators: [{
|
|
250
250
|
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 }\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"] }]
|
|
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"] }]
|
|
252
252
|
}], propDecorators: { value: [{
|
|
253
253
|
type: Input
|
|
254
254
|
}], gallery: [{
|
|
@@ -258,4 +258,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
258
258
|
type: ViewChild,
|
|
259
259
|
args: ['dialogTemplate', { read: TemplateRef }]
|
|
260
260
|
}] } });
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcGljdHVyZXMtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS1waWN0dXJlcy1pbmZvL3VpLXBpY3R1cmVzLWluZm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcGljdHVyZXMtaW5mby91aS1waWN0dXJlcy1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFHTCxTQUFTLEVBQ1QsV0FBVyxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdkUsT0FBTyxFQUNILFFBQVEsRUFDUixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUV4QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBVXpFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSw0QkFBNEI7SUFSekU7O1FBcUJJLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUduQyxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFVLEVBQUUsQ0FBQyxDQUFDO1FBR25ELGtCQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFJbkIsaUJBQVksR0FBa0MsT0FBTyxDQUFDO1FBSzlDLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0tBK1A3RDtJQTdQRyxRQUFR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MUNwRCxzOU9BbUtBOzs0RkRuSWEsdUJBQXVCO2tCQVJuQyxTQUFTOytCQUNJLHNCQUFzQixhQUdyQixDQUFDLGFBQWEsQ0FBQyxtQkFDVCx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLEtBQUs7OEJBR1IsS0FBSztzQkFBYixLQUFLO2dCQVFnQixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBQ2dDLGNBQWM7c0JBQWpFLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIElucHV0LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgVGVtcGxhdGVSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ29udGVudERlbnNpdHkgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEJhcnNhQXBpLFxyXG4gICAgVXBsb2FkU2VydmljZSxcclxuICAgIGdldERldmljZUlzTW9iaWxlLFxyXG4gICAgRmlsZXNWYWxpZGF0aW9uSGVscGVyLFxyXG4gICAgSVVwbG9hZGluZ1N0YXRlXHJcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQgeyBEZXZpY2VJbmZvRmllbGRCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGV2aWNlLWluZm8tZmllbGQtYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYnN1LXVpLXBpY3R1cmVzLWluZm8nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLXBpY3R1cmVzLWluZm8uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdWktcGljdHVyZXMtaW5mby5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbVXBsb2FkU2VydmljZV0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaVBpY3R1cmVzSW5mb0NvbXBvbmVudCBleHRlbmRzIERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBASW5wdXQoKSB2YWx1ZToge1xyXG4gICAgICAgIElkOiBzdHJpbmc7XHJcbiAgICAgICAgRmlsZUlkOiBzdHJpbmc7XHJcbiAgICAgICAgRmlsZU5hbWU6IHN0cmluZztcclxuICAgICAgICBXaWR0aDogc3RyaW5nO1xyXG4gICAgICAgIEhlaWdodDogc3RyaW5nO1xyXG4gICAgICAgIFNpemU6IHN0cmluZztcclxuICAgIH1bXTtcclxuICAgIEBWaWV3Q2hpbGQoJ2dhbGxlcnknKSBnYWxsZXJ5ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgICBAVmlld0NoaWxkKCdkaWFsb2dUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgZGlhbG9nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgdXBsb2FkaW5nU3RhdGUkOiBPYnNlcnZhYmxlPElVcGxvYWRpbmdTdGF0ZT47XHJcbiAgICBjYW5jZWxhdGlvbiQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgY29udGVudERlbnNpdHkkOiBPYnNlcnZhYmxlPENvbnRlbnREZW5zaXR5PjtcclxuICAgIGZpbGVzOiBGaWxlW107XHJcbiAgICBtZWRpYURhdGFTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZGlhW10+KFtdKTtcclxuICAgIG1lZGlhRGF0YSQ6IE9ic2VydmFibGU8TWVkaWFbXT47XHJcbiAgICBpc01vYmlsZTogYW55O1xyXG4gICAgc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG4gICAgZmlsbFdpZHRoOiBib29sZWFuO1xyXG4gICAgZmlsbEFsbDogYm9vbGVhbjtcclxuICAgIGZpbGxPcmlnaW5hbDogYm9vbGVhbjtcclxuICAgIHNlbGVjdGVkWm9vbTogJ3pvb20xJyB8ICd6b29tMS01JyB8ICd6b29tMicgPSAnem9vbTEnO1xyXG4gICAgZmlsZXNWYWxpZGF0aW9uSGVscGVyOiBGaWxlc1ZhbGlkYXRpb25IZWxwZXI7XHJcbiAgICBtYXhGaWxlQ291bnQ6IG51bWJlcjtcclxuICAgIGZpbGVDb3VudCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuXHJcbiAgICBwcml2YXRlIF9maWxlQ291bnRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maWxlQ291bnQkID0gdGhpcy5fZmlsZUNvdW50U291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMubWVkaWFEYXRhJCA9IHRoaXMubWVkaWFEYXRhU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5pc01vYmlsZSA9IGdldERldmljZUlzTW9iaWxlKCk7XHJcbiAgICAgICAgdGhpcy51cGxvYWRpbmdTdGF0ZSQgPSB0aGlzLl91cGxvYWRTZXJ2aWNlLnVwbG9hZGluZ1N0YXRlJDtcclxuICAgICAgICB0aGlzLnZhbHVlJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLl9zZXRGaWxlQ291bnQodmFsdWUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWxlc1ZhbGlkYXRpb25IZWxwZXIgPSBuZXcgRmlsZXNWYWxpZGF0aW9uSGVscGVyKFxyXG4gICAgICAgICAgICB0aGlzLlNldHRpbmcuTWF4UGljdHVyZUNvdW50LFxyXG4gICAgICAgICAgICB0aGlzLlNldHRpbmcuTWF4RmlsZVNpemVLYixcclxuICAgICAgICAgICAgdGhpcy5TZXR0aW5nLk1heFRvdGFsRmlsZVNpemVLYlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5tYXhGaWxlQ291bnQgPSB0aGlzLmZpbGVzVmFsaWRhdGlvbkhlbHBlci5tYXhGaWxlQ291bnQ7XHJcblxyXG4gICAgICAgIHRoaXMuX3ByZXBhcmVHYWxsZXJ5KHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5vbih7XHJcbiAgICAgICAgICAgIERpc3BsYXlJbWFnZXM6IHRoaXMuX2Rpc3BsYXlJbWFnZXMuYmluZCh0aGlzKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ0Rpc3BsYXlJbWFnZXMnLCB0aGlzLl9kaXNwbGF5SW1hZ2VzKTtcclxuICAgIH1cclxuICAgIG9uUm90YXRlKGltZ0VsOiBIVE1MSW1hZ2VFbGVtZW50LCBtZWRpYTI6IE1lZGlhLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gMTtcclxuICAgICAgICBjb25zdCBtZWRpYTogYW55ID0gbWVkaWEyO1xyXG4gICAgICAgIGNvbnN0IGJwSWQgPSBtZWRpYS5GaWxlSWQ7XHJcbiAgICAgICAgY29uc3QgYW5nbGUgPSA5MCAqIGRpcmVjdGlvbjtcclxuICAgICAgICBpZiAobWVkaWEuUm90YXRpb25BbmdsZSkge1xyXG4gICAgICAgICAgICBtZWRpYS5Sb3RhdGlvbkFuZ2xlID0gKG1lZGlhLlJvdGF0aW9uQW5nbGUgKyBhbmdsZSkgJSAzNjA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWVkaWEuUm90YXRpb25BbmdsZSA9IGFuZ2xlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdyA9IGltZ0VsLm9mZnNldFdpZHRoO1xyXG4gICAgICAgIGNvbnN0IGggPSBpbWdFbC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgbGV0IG1hcmdpbiA9ICh3IC0gaCkgLyAyO1xyXG4gICAgICAgIGxldCBzY2FsZUZhY3RvciA9IHcgLyBoO1xyXG4gICAgICAgIGlmIChtZWRpYS5zY2FsZUZhY3Rvcikge1xyXG4gICAgICAgICAgICBzY2FsZUZhY3RvciA9IDE7XHJcbiAgICAgICAgICAgIG1lZGlhLnNjYWxlRmFjdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgbWFyZ2luID0gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtZWRpYS5zY2FsZUZhY3RvciA9IHNjYWxlRmFjdG9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNjYWxlRmFjdG9yIDwgMSkge1xyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUoaW1nRWwsICd0cmFuc2Zvcm0nLCBgcm90YXRlKCR7bWVkaWEuUm90YXRpb25BbmdsZX1kZWcpIHNjYWxlKCR7c2NhbGVGYWN0b3J9KWApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZShpbWdFbCwgJ3RyYW5zZm9ybScsIGByb3RhdGUoJHttZWRpYS5Sb3RhdGlvbkFuZ2xlfWRlZylgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKGltZ0VsLCAnbWFyZ2luLWJvdHRvbScsIG1hcmdpbiArICdweCcpO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZShpbWdFbCwgJ21hcmdpbi10b3AnLCBtYXJnaW4gKyAncHgnKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdTZXR0aW5nc0NoYW5nZScsIHRoaXMsIHtcclxuICAgICAgICAgICAgRmlsZUlkOiBicElkLFxyXG4gICAgICAgICAgICBBbmdsZTogbWVkaWEuUm90YXRpb25BbmdsZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25GdWxsc2NyZWVuKG1lZGlhLCBtZWRpYURhdGEpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHsgbWVkaWEsIG1lZGlhRGF0YSB9LFxyXG4gICAgICAgICAgICBlc2NLZXlDbG9zZWFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBtb2JpbGU6IHRydWUsXHJcbiAgICAgICAgICAgIHZlcnRpY2FsUGFkZGluZzogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLmRpYWxvZ1RlbXBsYXRlLCBkaWFsb2dDb25maWcpO1xyXG4gICAgfVxyXG4gICAgb25NZWRhaUNsaWNrKGdhbGxlcnksIG1lZGlhLCBpbmRleCk6IHZvaWQge1xyXG4gICAgICAgIGdhbGxlcnkgJiYgZ2FsbGVyeS5xdWVyeVNlbGVjdG9yKCdbaWQ9XCInICsgU3RyaW5nKGluZGV4KSArICdcIl0nKT8uc2Nyb2xsSW50b1ZpZXcodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBvblRodW1ibmFpbENsaWNrZWQoaW1nSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGltZ0luZGV4O1xyXG4gICAgICAgIHRoaXMuZ2FsbGVyeS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD1cIicgKyBTdHJpbmcoaW1nSW5kZXgpICsgJ1wiXScpPy5zY3JvbGxJbnRvVmlldyh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkRlbGV0ZShpbmRleCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTWVkaWEgPSB0aGlzLnZhbHVlW2luZGV4XTtcclxuICAgICAgICB0aGlzLl9kZWxldGVNZWRpYShzZWxlY3RlZE1lZGlhKTtcclxuICAgIH1cclxuICAgIG9uU2NhbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zY2FuSGVscGVyKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkFkdmFuY2VTY2FuKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NjYW5IZWxwZXIodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25ab29tSW4oKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkWm9vbSkge1xyXG4gICAgICAgICAgICBjYXNlICd6b29tMSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkWm9vbSA9ICd6b29tMS01JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd6b29tMS01JzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRab29tID0gJ3pvb20yJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblpvb21PdXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkWm9vbSkge1xyXG4gICAgICAgICAgICBjYXNlICd6b29tMic6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkWm9vbSA9ICd6b29tMS01JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd6b29tMS01JzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRab29tID0gJ3pvb20xJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkZpbGxPcmlnaW5hbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbGxXaWR0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsbEFsbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsbE9yaWdpbmFsID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBvbkZpbGxXaWR0aCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbGxXaWR0aCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maWxsQWxsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maWxsT3JpZ2luYWwgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvbkZpbGxBbGwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maWxsQWxsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZpbGxPcmlnaW5hbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsbFdpZHRoID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBvbkZpbGVTZWxlY3Rpb24oZmlsZXM6IEZpbGVbXSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmlsZXNWYWxpZGF0aW9uSGVscGVyLnZhbGlkYXRlRmlsZXMoZmlsZXMpO1xyXG4gICAgICAgIHRoaXMudXBsb2FkVG9TZXJ2ZXIoZmlsZXMpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZGVsZXRlTWVkaWEoc2VsZWN0ZWRNZWRpYSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgSWQsIEZpbGVJZCB9ID0gc2VsZWN0ZWRNZWRpYTtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRJZCA9IElkO1xyXG4gICAgICAgIGlmICghc2VsZWN0ZWRJZCkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZElkID0gRmlsZUlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzZWxlY3RlZFBpY0luZGV4ID0gdGhpcy52YWx1ZS5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IHNlbGVjdGVkSWQgfHwgYy5GaWxlSWQgPT09IHNlbGVjdGVkSWQpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLmZpbHRlcigoYykgPT4gYy5JZCAhPT0gc2VsZWN0ZWRJZCAmJiBjLkZpbGVJZCAhPT0gc2VsZWN0ZWRJZCk7XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZUdhbGxlcnkodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ0NoYW5nZScsIHtcclxuICAgICAgICAgICAgRmlsZUlkOiBzZWxlY3RlZElkLFxyXG4gICAgICAgICAgICBJc0RlbGV0ZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIE9sZEluZGV4OiBzZWxlY3RlZFBpY0luZGV4XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NjYW5IZWxwZXIoaXNBZHZhbmNlZCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNjYW5uZXIgPSBuZXcgQmFyc2FBcGkuQ29tbW9uLkJhcnNhU2Nhbm5lcih7XHJcbiAgICAgICAgICAgIFNjYW5uZXJBZ2VudFBhcmFtczogdGhpcy5jb250ZXh0LlNjYW5uZXJBZ2VudFBhcmFtc1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzY2FubmVyLm9uKEJhcnNhQXBpLkNvbW1vbi5CYXJzYVNjYW5uZXIuRXZlbnRFbnVtLlNjYW5SZXN1bHRSZWFkeSwgdGhpcy5fb25TY2FuUmVzdWx0X1JlYWR5LCB0aGlzKTtcclxuICAgICAgICBzY2FubmVyLm9uKEJhcnNhQXBpLkNvbW1vbi5CYXJzYVNjYW5uZXIuRXZlbnRFbnVtLlNjYW5FcnJvciwgdGhpcy5fb25TY2FuX0Vycm9yLCB0aGlzKTtcclxuICAgICAgICBzY2FubmVyLm9uKEJhcnNhQXBpLkNvbW1vbi5CYXJzYVNjYW5uZXIuRXZlbnRFbnVtLlNob3dXYXJybmluZywgdGhpcy5fb25TY2FuX1dhcnJuaW5nLCB0aGlzKTtcclxuICAgICAgICBCYXJzYUFwaS5VbC5Mb2FkaW5nTWFzay5NYXNrKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgc2Nhbm5lci5TY2FuKGlzQWR2YW5jZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfb25TY2FuUmVzdWx0X1JlYWR5KGNvbnRlbnRzKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdXBsb2FkU2Nhbihjb250ZW50cyk7XHJcbiAgICAgICAgQmFyc2FBcGkuVWwuTG9hZGluZ01hc2suVW5tYXNrKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9vblNjYW5fV2Fycm5pbmcodGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgQmFyc2FBcGkuVWwuTXNnQm94LkVycm9yKHRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBCYXJzYUFwaS5VbC5Mb2FkaW5nTWFzay5Vbm1hc2sodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX29uU2Nhbl9FcnJvcihlcnIpOiB2b2lkIHtcclxuICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgQmFyc2FBcGkuVWwuTXNnQm94LkVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBCYXJzYUFwaS5VbC5Mb2FkaW5nTWFzay5Vbm1hc2sodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3VwbG9hZFNjYW4oY29udGVudHMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY29udGVudHMgJiYgY29udGVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb250ZW50cy5mb3JFYWNoKChjb250ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBCYXJzYUFwaS5Db21tb24uQmFyc2FTY2FubmVyLlVwbG9hZFNjYW5Db250ZW50KHRoaXMuY29udGV4dC5GaWVsZERlZklkLCBjb250ZW50LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGZpbGVPYmopIHRoaXMuX29uVXBsb2FkV2luX05ld0ZpbGVVcGxvYWQobnVsbCwgZmlsZU9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVidWdnZXI7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgQmFyc2FBcGkuVWwuTXNnQm94Lldhcm5pbmcodGhpcy5fYmJiUGlwZS50cmFuc2Zvcm0oJ1NjYW5SZXN1bHROb3RGb3VuZCcpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9wcmVwYXJlR2FsbGVyeSh2YWx1ZTogYW55W10pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkYXRhOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIHZhbHVlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWVkaWFVcmwgPSB0aGlzLl9waWNGaWVsZFNyYy50cmFuc2Zvcm0oaXRlbS5GaWxlSWQsICdCYXJzYVBpY3R1cmUuRnVsbCcsIG51bGwpO1xyXG4gICAgICAgICAgICBjb25zdCB0aHVtYm5haWxVcmwgPSB0aGlzLl9waWNGaWVsZFNyYy50cmFuc2Zvcm0oaXRlbS5GaWxlSWQsICdCYXJzYVBpY3R1cmUuVGh1bWJuYWlsJywgbnVsbCk7XHJcbiAgICAgICAgICAgIGRhdGEucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBJZDogaXRlbS5JZCxcclxuICAgICAgICAgICAgICAgIEZpbGVJZDogaXRlbS5GaWxlSWQsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5GaWxlTmFtZSxcclxuICAgICAgICAgICAgICAgIG1lZGlhVHlwZTogJ2ltYWdlJyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtLkZpbGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgbWVkaWFVcmw6IGAke21lZGlhVXJsfSZjcmVhdGVEYXRlPSR7aXRlbS5DcmVhdGVEYXRlfWAsXHJcbiAgICAgICAgICAgICAgICB0aHVtYm5haWxVcmw6IGAke3RodW1ibmFpbFVybH0mY3JlYXRlRGF0ZT0ke2l0ZW0uQ3JlYXRlRGF0ZX1gLFxyXG4gICAgICAgICAgICAgICAgYWx0OiAnRmFpbGVkIHRvIGxvYWQgJyArIG1lZGlhVXJsLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlRGF0ZTogaXRlbS5DcmVhdGVEYXRlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubWVkaWFEYXRhU291cmNlLm5leHQoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwbG9hZFRvU2VydmVyKGZpbGVzOiBGaWxlW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91cGxvYWRTZXJ2aWNlLmNvbXByZXNzRmlsZXMkKGZpbGVzKS5waXBlKFxyXG4gICAgICAgICAgICBjb25jYXRNYXAoKGZvcm1EYXRhKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBsb2FkU2VydmljZS51cGxvYWQoZm9ybURhdGEsIHRoaXMuU2V0dGluZy5Db250cm9sRmllbGREZWZJZCkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICB0YXAoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IG9mKGVycikpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc2V0RmlsZUNvdW50KHZhbHVlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZmlsZUNvdW50U291cmNlLm5leHQodmFsdWUuZmlsdGVyKChjKSA9PiAhYy5Jc0RlbGV0ZWQpLmxlbmd0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVZhbHVlKG5ld1ZhbDogYW55W10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIC4uLm5ld1ZhbF07XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZUdhbGxlcnkodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ29udGV4dEV2ZW50KCdDaGFuZ2UnLCBuZXdWYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZGlzcGxheUltYWdlcyhcclxuICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICBJZDogc3RyaW5nO1xyXG4gICAgICAgICAgICBGaWxlSWQ6IHN0cmluZztcclxuICAgICAgICAgICAgRmlsZU5hbWU6IHN0cmluZztcclxuICAgICAgICAgICAgV2lkdGg6IHN0cmluZztcclxuICAgICAgICAgICAgSGVpZ2h0OiBzdHJpbmc7XHJcbiAgICAgICAgICAgIFNpemU6IHN0cmluZztcclxuICAgICAgICB9W11cclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhIHtcclxuICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICB0aHVtYm5haWxVcmw6IHN0cmluZztcclxuICAgIG1lZGlhVHlwZTogc3RyaW5nO1xyXG4gICAgbWVkaWFVcmw6IHN0cmluZztcclxuICAgIGNhcHRpb25GaWxlPzogc3RyaW5nO1xyXG4gICAgYXVkaW9EZXNjRmlsZT86IHN0cmluZztcclxuICAgIGFsdDogc3RyaW5nO1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIHNlbGVjdGVkPzogYm9vbGVhbjtcclxuICAgIG92ZXJsYXlSZXF1aXJlZD86IGJvb2xlYW47XHJcbn1cclxuIiwiPGZkLWZpbGUtdXBsb2FkZXJcclxuICAgICN1cGxvYWRlclxyXG4gICAgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCJcclxuICAgIFtpZF09XCJpZFwiXHJcbiAgICBbbmFtZV09XCIncGljdHVyZXNfJyArIGlkXCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCInQXR0YWNoUGljdHVyZScgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgW2J1dHRvbkxhYmVsXT1cIidBdHRhY2hQaWN0dXJlJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICBbYnV0dG9uQXJpYUxhYmVsXT1cIidBdHRhY2hQaWN0dXJlJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICBhY2NlcHQ9XCIucG5nLC5qcGcsLmJwbSwuanBlZywuZ2lmLC5wbmcsLnRpZiwucGRmXCJcclxuICAgIFtmaWxlTGltaXRdPVwibWF4RmlsZUNvdW50ID09PSAwID8gMTAwIDogbWF4RmlsZUNvdW50XCJcclxuICAgIFttdWx0aXBsZV09XCJtYXhGaWxlQ291bnQgPT09IDAgfHwgbWF4RmlsZUNvdW50ID4gMVwiXHJcbiAgICAoc2VsZWN0ZWRGaWxlc0NoYW5nZWQpPVwib25GaWxlU2VsZWN0aW9uKCRldmVudClcIlxyXG4+PC9mZC1maWxlLXVwbG9hZGVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxheW91dEdyaWRUcGxcIj48L25nLWNvbnRhaW5lcj5cclxuPG5nLXRlbXBsYXRlICNsYXlvdXRHcmlkVHBsIGxldC1pbkRpYWxvZz1cImluRGlhbG9nXCIgbGV0LWdhbGxlcnk9XCJnYWxsZXJ5XCI+XHJcbiAgICA8ZmQtbGF5b3V0LWdyaWQ+XHJcbiAgICAgICAgQGlmIChtZWRpYURhdGEkIHwgYXN5bmM7IGFzIG1lZGlhRGF0YSkge1xyXG4gICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkUm93PlxyXG4gICAgICAgICAgICBAZm9yIChtZWRpYSBvZiBtZWRpYURhdGE7IHRyYWNrIG1lZGlhOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgICA8ZGl2IFtmZExheW91dEdyaWRDb2xdPVwiNlwiIFtjb2xNZF09XCIzXCIgW2NvbExnXT1cIjJcIiBbY29sWGxdPVwiMlwiIChjbGljayk9XCJvbk1lZGFpQ2xpY2soZ2FsbGVyeSwgbWVkaWEsIGkpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZFRwbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG1lZGlhLCBtZWRpYURhdGE6IHRoaXMubWVkaWFEYXRhLCBpbkRpYWxvZzogdGhpcy5pbkRpYWxvZywgaW5kZXg6IGkgfVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9IEBpZiAoIWluRGlhbG9nICYmIChkaXNhYmxlT3JSZWFkb25seSQgfCBhc3luYykgPT09IHRydWUgPyBmYWxzZSA6IHRydWUpIHtcclxuICAgICAgICAgICAgPGRpdiBbZmRMYXlvdXRHcmlkQ29sXT1cIjZcIiBbY29sTWRdPVwiM1wiIFtjb2xMZ109XCIyXCIgW2NvbFhsXT1cIjJcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXdGaWxlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgPC9mZC1sYXlvdXQtZ3JpZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNjYXJkVHBsIGxldC1tZWRpYSBsZXQtbWVkaWFEYXRhPVwibWVkaWFEYXRhXCIgbGV0LWluRGlhbG9nPVwiaW5EaWFsb2dcIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gICAgPGZkLWNhcmQgY2xhc3M9XCJtZWRpYVwiIFtjbGFzcy5pbkRpYWxvZ109XCJpbkRpYWxvZ1wiPlxyXG4gICAgICAgIDxmZC1jYXJkLWNvbnRlbnQgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IGhlaWdodDogMTIwcHhcIj5cclxuICAgICAgICAgICAgPGltZyBpbWdMYXp5IFtpbWdMYXp5XT1cIm1lZGlhLnRodW1ibmFpbFVybFwiIFtzcmNdPVwibWVkaWEudGh1bWJuYWlsVXJsXCIgI2ltZyAvPlxyXG4gICAgICAgIDwvZmQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIEBpZiAoIWluRGlhbG9nKSB7XHJcbiAgICAgICAgPGZkLWNhcmQtZm9vdGVyPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBnbHlwaD1cIm1lc3NhZ2UtaW5mb3JtYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgKmZkQ2FyZEZvb3RlckFjdGlvbkl0ZW1cclxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgW2ZkLWlubGluZS1oZWxwXT1cIm1lZGlhLnRpdGxlXCJcclxuICAgICAgICAgICAgICAgIFt0cmlnZ2Vyc109XCJbJ2NsaWNrJ11cIlxyXG4gICAgICAgICAgICAgICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqZmRDYXJkRm9vdGVyQWN0aW9uSXRlbSBmZC1idXR0b24gZ2x5cGg9XCJyb3RhdGVcIiAoY2xpY2spPVwib25Sb3RhdGUoaW1nLCBtZWRpYSwgaW5kZXgpXCI+PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBnbHlwaD1cImZ1bGwtc2NyZWVuXCJcclxuICAgICAgICAgICAgICAgICpmZENhcmRGb290ZXJBY3Rpb25JdGVtXHJcbiAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkZ1bGxzY3JlZW4obWVkaWEsIG1lZGlhRGF0YSlcIlxyXG4gICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgIEBpZiAoKGRpc2FibGVPclJlYWRvbmx5JCB8IGFzeW5jKSA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZSkge1xyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBnbHlwaD1cImRlbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAqZmRDYXJkRm9vdGVyQWN0aW9uSXRlbVxyXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUoaW5kZXgpXCJcclxuICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9mZC1jYXJkLWZvb3Rlcj5cclxuICAgICAgICB9XHJcbiAgICA8L2ZkLWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjbmV3RmlsZT5cclxuICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7IGhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgIDxmZC1jYXJkPlxyXG4gICAgICAgICAgICA8ZmQtY2FyZC1jb250ZW50IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IG1pbi1oZWlnaHQ6IDEyMHB4XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJhZGQtcGhvdG9cIlxyXG4gICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0F0dGFjaEZpbGUnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkZXIub3BlbigpXCJcclxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9mZC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgICAgICAgICA8ZmQtY2FyZC1mb290ZXIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggc29saWQgI2NjY1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gW2dseXBoXT1cIidvdmVyZmxvdydcIiBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIiBbZmRNZW51VHJpZ2dlcl09XCJtZW51XCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZmQtbWVudSAjbWVudT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgZmQtbWVudS1pdGVtIChjbGljayk9XCJvblNjYW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBmZC1tZW51LWludGVyYWN0aXZlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbWVudS10aXRsZT57eyAnU2NhbicgfCBiYmJUcmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBmZC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uQWR2YW5jZVNjYW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBmZC1tZW51LWludGVyYWN0aXZlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbWVudS10aXRsZT57eyAnQWR2YW5jZWRTY2FuJyB8IGJiYlRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L2ZkLW1lbnU+XHJcbiAgICAgICAgICAgIDwvZmQtY2FyZC1mb290ZXI+XHJcbiAgICAgICAgPC9mZC1jYXJkPlxyXG4gICAgICAgIEBpZiAoKHVwbG9hZGluZ1N0YXRlJCB8IGFzeW5jKT8udXBsb2FkaW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgPGJzdS1tYXNrPjwvYnN1LW1hc2s+XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nVGVtcGxhdGUgbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCI+XHJcbiAgICA8ZmQtZGlhbG9nIFtkaWFsb2dDb25maWddPVwiZGlhbG9nQ29uZmlnXCIgW2RpYWxvZ1JlZl09XCJkaWFsb2dcIiAjZGlhbG9nVHBsIGNsYXNzPVwidmVydGljYWxcIj5cclxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZka1RlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1sZWZ0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgxIGZkLXRpdGxlPnt7IFNldHRpbmcuQ29udHJvbEZpZWxkQ2FwdGlvblRyYW5zbGF0ZWQgfX08L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIWRpYWxvZ0NvbmZpZy5mdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiRml0IGltYWdlIHNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZ2x5cGhdPVwiJ3Jlc2l6ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmRUeXBlXT1cImZpbGxXaWR0aCA/ICdlbXBoYXNpemVkJyA6ICd0cmFuc3BhcmVudCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsbFdpZHRoID0gIWZpbGxXaWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvZmQtYnV0dG9uLWJhcj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXIgYXJpYUxhYmVsPVwiY2xvc2VcIiBnbHlwaD1cImRlY2xpbmVcIiAoY2xpY2spPVwiZGlhbG9nLmNsb3NlKClcIj48L2ZkLWJ1dHRvbi1iYXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XHJcbiAgICAgICAgPGZkLWRpYWxvZy1ib2R5ICNmZGJvZHk+XHJcbiAgICAgICAgICAgIDxkaXYgI2dhbGxlcnkgY2xhc3M9XCJnYWxsZXJ5IGluRGlhbG9nXCIgc3R5bGU9XCJmbGV4OiAxXCI+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChtZWRpYSBvZiBkaWFsb2cuZGF0YS5tZWRpYURhdGE7IHRyYWNrIG1lZGlhLkZpbGVJZDsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbiBiaWctaW1ncy1ib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maWxsLXdpZHRoXT1cImZpbGxXaWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpbGwtYWxsXT1cImZpbGxBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maWxsLW9yaWdpbmFsXT1cImZpbGxPcmlnaW5hbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRab29tXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhciBmZFR5cGU9XCJzb2xpZFwiIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgW2NsZWFyQm9yZGVyXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXRvb2xiYXItc3BhY2VyPjwvZmQtdG9vbGJhci1zcGFjZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZmQtdG9vbGJhci1pdGVtIGZkLWJ1dHRvbiBnbHlwaD1cInJvdGF0ZVwiIChjbGljayk9XCJvblJvdGF0ZShpbWcsIG1lZGlhLCBpKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zcGFjZXI+PC9mZC10b29sYmFyLXNwYWNlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2ZkLXRvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY3NcIiBbaWRdPVwiaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnN1LW1hc2s+PC9ic3UtbWFzaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAjaW1nIGltZ0xhenkgW2ltZ0xhenldPVwibWVkaWEubWVkaWFVcmxcIiBbc3JjXT1cIm1lZGlhLm1lZGlhVXJsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgQGlmICgoZGV2aWNlU2l6ZSQgfCBhc3luYykgIT09ICdzJykge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWJuYWlsXCIgc3R5bGU9XCJmbGV4LXNocmluazogMVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvdGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYXlvdXRHcmlkVHBsOyBjb250ZXh0OiB7IGluRGlhbG9nOiB0cnVlLCBnYWxsZXJ5OiB0aGlzLmdhbGxlcnkgfVwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb3RhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2ZkLWRpYWxvZy1ib2R5PlxyXG4gICAgPC9mZC1kaWFsb2c+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|
|
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
|