@arsedizioni/ars-utils 18.1.181 → 18.1.182
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/clipper.ui/ui/document/document.component.mjs +2 -2
- package/esm2022/clipper.ui/ui/references/references.component.mjs +3 -3
- package/esm2022/ui/ui/services/dialog.service.mjs +4 -3
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +3 -2
- package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
- package/package.json +12 -12
|
@@ -307,7 +307,7 @@ export class ClipperReferencesComponent extends ClipperSearchResultManager {
|
|
|
307
307
|
this.dialogRef.close({ id: documentId });
|
|
308
308
|
}
|
|
309
309
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperReferencesComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
310
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: ClipperReferencesComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, viewQueries: [{ propertyName: "filterPane", first: true, predicate: ["filterPane"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div id=\"clipper-references-fixed\">\r\n <div id=\"clipper-references-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\r\n (!filterPane.opened || filterPaneClosed))) {\r\n <div style=\"padding: 0 10px 0 24px; height: 48px; min-height: 48px;\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData.mode === 1) {\r\n <mat-slide-toggle name=\"excludeTextReferences\" [(ngModel)]=\"filterParams.excludeTextReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note\r\n </mat-slide-toggle>\r\n } @else if (dialogData.mode == 2) {\r\n <mat-slide-toggle name=\"excludeNotesReferences\" [(ngModel)]=\"filterParams.excludeNotesReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-slide-toggle>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\"\r\n [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-references-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"48px\" style=\"padding:14px 5px 0 5px\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <div fxLayout=\"row\" fxLayoutGap=\"6px\" fxLayoutAlign=\"start center\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection?.isSelected(item.documentId) }\">\r\n <div fxFlex=\"54px\" fxLayoutAlign=\"center\" style=\"padding-left: 6px;\">\r\n @if (screenService.isTouchable || item.isOver || selection?.isSelected(item.documentId)) {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection?.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection?.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"item-content\">\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\"></clipper-search-result-item>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection?.isSelected(item.documentId)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot?.total ?? 0\"\r\n [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</div>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.accent{color:var(--ars-accent, #7894ae)!important}.primary{color:var(--ars-primary, #00a293)!important}.secondary{color:var(--ars-secondary, #4a635f)!important}.error{color:var(--ars-error, #ff5449)!important}.warning{color:var(--ars-warning, #FFC107)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer,.drawer-small{min-width:420px!important;max-width:420px!important;padding:20px 0 0}.drawer .title-container,.drawer-small .title-container{padding:0 10px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 0}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .content,.drawer-small .content{padding:10px 0!important}.drawer .fixed,.drawer-small .fixed{padding:0 4px!important}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-bottom:20px!important}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.drawer-small{min-width:360px!important;max-width:360px!important}.drawer-small .title{min-width:150px}.drawer-small .content{padding:20px 0 10px}@media screen and (min-width: 0px) and (max-width: 359px){.drawer{min-width:360px!important;max-width:360px!important}.drawer .title{min-width:150px}}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-color-scheme: dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.expired,.unread{color:var(--ars-error, #ff5449)!important}.expiring{color:var(--ars-warning, #FFC107)!important}.error-bg,.expired-bg,.unread-bg{background-color:var(--ars-error, #ff5449)}.expiring-bg{background-color:var(--ars-warning, #FFC107)}.popular-bg{background-color:#388e3c}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-accent, #7894ae);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .spaced{padding-top:10px!important}.items-footer{padding-top:10px}.item{border-radius:12px;padding:10px 0;min-height:60px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item-content .info-1{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent, #7894ae)}.item-content .info-2{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent-low, #456179)}.item-content .title{font-size:small;line-height:18px}.item-content .details{margin-top:4px;font-size:x-small;font-weight:700;line-height:15px;color:var(--ars-accent-low, #456179);text-transform:uppercase;border-left:4px solid var(--ars-accent-low, #456179);padding-left:10px}.item-content .details .links{text-transform:none;text-decoration:none}.item-content .details .links a,.item-content .details .links span,.item-content .details .links div{margin-right:8px;font-weight:600;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-link, #03A9F4);font-weight:600}.item-content a.link{color:var(--ars-link, #03A9F4);cursor:pointer!important}.item-content:hover{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer;padding:10px 13px;margin-bottom:2px}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--ars-error, #ff5449);margin:0 8px}.tile .image{height:180px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .image .img{object-fit:cover;width:100%;height:100%}.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-accent, #7894ae);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .check{position:absolute;left:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .check-selected{background-color:var(--ars-primary-hi, #12c0ae)}.tile .image .read{position:absolute;right:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .date{padding:8px 0 6px;font-weight:700;text-transform:uppercase}.tile .date .date-day{color:var(--ars-accent, #7894ae)}.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-divider, #757d87)}.tile .time{font-size:small;font-weight:700}.tile .title{text-decoration:none;font-size:small;min-height:72px;overflow:hidden}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:var(--ars-accent, #7894ae);text-transform:uppercase;white-space:nowrap;color:var(--ars-color-text, #191c1b)}.badge-red{background-color:var(--ars-error, #ff5449);color:var(--ars-color-text, #191c1b)}.busy-backdrop{background-color:#00000052!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .next{margin-left:8px}.special-date,.special-date-expired{border:2px var(--ars-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-error, #ff5449) solid!important}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i8.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i9.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i10.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i11.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i12.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i12.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i13.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: ClipperDocumentMenuComponent, selector: "clipper-document-menu", inputs: ["parent", "selectionSource", "useSelections", "item", "isReference", "isReadable", "isDeadline", "isLawInForce", "isLaw"] }, { kind: "component", type: ClipperSearchFacetsComponent, selector: "clipper-search-facets", outputs: ["changed"] }, { kind: "component", type: ClipperSearchResultItemComponent, selector: "clipper-search-result-item", inputs: ["parent", "item", "displayModelName"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
310
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: ClipperReferencesComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, viewQueries: [{ propertyName: "filterPane", first: true, predicate: ["filterPane"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"clipper-references-fixed\">\r\n <div id=\"clipper-references-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\r\n (!filterPane.opened || filterPaneClosed))) {\r\n <div style=\"padding: 0 10px 0 24px; height: 48px; min-height: 48px;\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData.mode === 1) {\r\n <mat-slide-toggle name=\"excludeTextReferences\" [(ngModel)]=\"filterParams.excludeTextReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note\r\n </mat-slide-toggle>\r\n } @else if (dialogData.mode == 2) {\r\n <mat-slide-toggle name=\"excludeNotesReferences\" [(ngModel)]=\"filterParams.excludeNotesReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-slide-toggle>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\"\r\n [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-references-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"48px\" style=\"padding:14px 5px 0 5px\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <div fxLayout=\"row\" fxLayoutGap=\"6px\" fxLayoutAlign=\"start center\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection?.isSelected(item.documentId) }\">\r\n <div fxFlex=\"54px\" fxLayoutAlign=\"center\" style=\"padding-left: 6px;\">\r\n @if (screenService.isTouchable || item.isOver || selection?.isSelected(item.documentId)) {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection?.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection?.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"item-content\">\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\"></clipper-search-result-item>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection?.isSelected(item.documentId)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot?.total ?? 0\"\r\n [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</div>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.accent{color:var(--ars-accent, #7894ae)!important}.primary{color:var(--ars-primary, #00a293)!important}.secondary{color:var(--ars-secondary, #4a635f)!important}.error{color:var(--ars-error, #ff5449)!important}.warning{color:var(--ars-warning, #FFC107)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer,.drawer-small{min-width:420px!important;max-width:420px!important;padding:20px 0 0}.drawer .title-container,.drawer-small .title-container{padding:0 10px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 0}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .content,.drawer-small .content{padding:10px 0!important}.drawer .fixed,.drawer-small .fixed{padding:0 4px!important}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-bottom:20px!important}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.drawer-small{min-width:360px!important;max-width:360px!important}.drawer-small .title{min-width:150px}.drawer-small .content{padding:20px 0 10px}@media screen and (min-width: 0px) and (max-width: 359px){.drawer{min-width:360px!important;max-width:360px!important}.drawer .title{min-width:150px}}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-color-scheme: dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.expired,.unread{color:var(--ars-error, #ff5449)!important}.expiring{color:var(--ars-warning, #FFC107)!important}.error-bg,.expired-bg,.unread-bg{background-color:var(--ars-error, #ff5449)}.expiring-bg{background-color:var(--ars-warning, #FFC107)}.popular-bg{background-color:#388e3c}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-accent, #7894ae);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .spaced{padding-top:10px!important}.items-footer{padding-top:10px}.item{border-radius:12px;padding:10px 0;min-height:60px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item-content .info-1{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent, #7894ae)}.item-content .info-2{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent-low, #456179)}.item-content .title{font-size:small;line-height:18px}.item-content .details{margin-top:4px;font-size:x-small;font-weight:700;line-height:15px;color:var(--ars-accent-low, #456179);text-transform:uppercase;border-left:4px solid var(--ars-accent-low, #456179);padding-left:10px}.item-content .details .links{text-transform:none;text-decoration:none}.item-content .details .links a,.item-content .details .links span,.item-content .details .links div{margin-right:8px;font-weight:600;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-link, #03A9F4);font-weight:600}.item-content a.link{color:var(--ars-link, #03A9F4);cursor:pointer!important}.item-content:hover{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer;padding:10px 13px;margin-bottom:2px}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--ars-error, #ff5449);margin:0 8px}.tile .image{height:180px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .image .img{object-fit:cover;width:100%;height:100%}.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-accent, #7894ae);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .check{position:absolute;left:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .check-selected{background-color:var(--ars-primary-hi, #12c0ae)}.tile .image .read{position:absolute;right:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .date{padding:8px 0 6px;font-weight:700;text-transform:uppercase}.tile .date .date-day{color:var(--ars-accent, #7894ae)}.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-divider, #757d87)}.tile .time{font-size:small;font-weight:700}.tile .title{text-decoration:none;font-size:small;min-height:72px;overflow:hidden}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:var(--ars-accent, #7894ae);text-transform:uppercase;white-space:nowrap;color:var(--ars-color-text, #191c1b)}.badge-red{background-color:var(--ars-error, #ff5449);color:var(--ars-color-text, #191c1b)}.busy-backdrop{background-color:#00000052!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .next{margin-left:8px}.special-date,.special-date-expired{border:2px var(--ars-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-error, #ff5449) solid!important}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i8.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i9.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i10.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i11.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i12.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i12.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i13.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: ClipperDocumentMenuComponent, selector: "clipper-document-menu", inputs: ["parent", "selectionSource", "useSelections", "item", "isReference", "isReadable", "isDeadline", "isLawInForce", "isLaw"] }, { kind: "component", type: ClipperSearchFacetsComponent, selector: "clipper-search-facets", outputs: ["changed"] }, { kind: "component", type: ClipperSearchResultItemComponent, selector: "clipper-search-result-item", inputs: ["parent", "item", "displayModelName"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
311
311
|
}
|
|
312
312
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperReferencesComponent, decorators: [{
|
|
313
313
|
type: Component,
|
|
@@ -330,9 +330,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
330
330
|
ClipperDocumentMenuComponent,
|
|
331
331
|
ClipperSearchFacetsComponent,
|
|
332
332
|
ClipperSearchResultItemComponent
|
|
333
|
-
], template: "<div id=\"clipper-references-fixed\">\r\n <div id=\"clipper-references-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\r\n (!filterPane.opened || filterPaneClosed))) {\r\n <div style=\"padding: 0 10px 0 24px; height: 48px; min-height: 48px;\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData.mode === 1) {\r\n <mat-slide-toggle name=\"excludeTextReferences\" [(ngModel)]=\"filterParams.excludeTextReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note\r\n </mat-slide-toggle>\r\n } @else if (dialogData.mode == 2) {\r\n <mat-slide-toggle name=\"excludeNotesReferences\" [(ngModel)]=\"filterParams.excludeNotesReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-slide-toggle>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\"\r\n [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-references-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"48px\" style=\"padding:14px 5px 0 5px\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <div fxLayout=\"row\" fxLayoutGap=\"6px\" fxLayoutAlign=\"start center\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection?.isSelected(item.documentId) }\">\r\n <div fxFlex=\"54px\" fxLayoutAlign=\"center\" style=\"padding-left: 6px;\">\r\n @if (screenService.isTouchable || item.isOver || selection?.isSelected(item.documentId)) {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection?.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection?.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"item-content\">\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\"></clipper-search-result-item>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection?.isSelected(item.documentId)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot?.total ?? 0\"\r\n [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</div>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.accent{color:var(--ars-accent, #7894ae)!important}.primary{color:var(--ars-primary, #00a293)!important}.secondary{color:var(--ars-secondary, #4a635f)!important}.error{color:var(--ars-error, #ff5449)!important}.warning{color:var(--ars-warning, #FFC107)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer,.drawer-small{min-width:420px!important;max-width:420px!important;padding:20px 0 0}.drawer .title-container,.drawer-small .title-container{padding:0 10px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 0}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .content,.drawer-small .content{padding:10px 0!important}.drawer .fixed,.drawer-small .fixed{padding:0 4px!important}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-bottom:20px!important}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.drawer-small{min-width:360px!important;max-width:360px!important}.drawer-small .title{min-width:150px}.drawer-small .content{padding:20px 0 10px}@media screen and (min-width: 0px) and (max-width: 359px){.drawer{min-width:360px!important;max-width:360px!important}.drawer .title{min-width:150px}}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-color-scheme: dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.expired,.unread{color:var(--ars-error, #ff5449)!important}.expiring{color:var(--ars-warning, #FFC107)!important}.error-bg,.expired-bg,.unread-bg{background-color:var(--ars-error, #ff5449)}.expiring-bg{background-color:var(--ars-warning, #FFC107)}.popular-bg{background-color:#388e3c}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-accent, #7894ae);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .spaced{padding-top:10px!important}.items-footer{padding-top:10px}.item{border-radius:12px;padding:10px 0;min-height:60px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item-content .info-1{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent, #7894ae)}.item-content .info-2{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent-low, #456179)}.item-content .title{font-size:small;line-height:18px}.item-content .details{margin-top:4px;font-size:x-small;font-weight:700;line-height:15px;color:var(--ars-accent-low, #456179);text-transform:uppercase;border-left:4px solid var(--ars-accent-low, #456179);padding-left:10px}.item-content .details .links{text-transform:none;text-decoration:none}.item-content .details .links a,.item-content .details .links span,.item-content .details .links div{margin-right:8px;font-weight:600;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-link, #03A9F4);font-weight:600}.item-content a.link{color:var(--ars-link, #03A9F4);cursor:pointer!important}.item-content:hover{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer;padding:10px 13px;margin-bottom:2px}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--ars-error, #ff5449);margin:0 8px}.tile .image{height:180px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .image .img{object-fit:cover;width:100%;height:100%}.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-accent, #7894ae);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .check{position:absolute;left:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .check-selected{background-color:var(--ars-primary-hi, #12c0ae)}.tile .image .read{position:absolute;right:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .date{padding:8px 0 6px;font-weight:700;text-transform:uppercase}.tile .date .date-day{color:var(--ars-accent, #7894ae)}.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-divider, #757d87)}.tile .time{font-size:small;font-weight:700}.tile .title{text-decoration:none;font-size:small;min-height:72px;overflow:hidden}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:var(--ars-accent, #7894ae);text-transform:uppercase;white-space:nowrap;color:var(--ars-color-text, #191c1b)}.badge-red{background-color:var(--ars-error, #ff5449);color:var(--ars-color-text, #191c1b)}.busy-backdrop{background-color:#00000052!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .next{margin-left:8px}.special-date,.special-date-expired{border:2px var(--ars-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-error, #ff5449) solid!important}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}\n"] }]
|
|
333
|
+
], template: "<div class=\"clipper-references-fixed\">\r\n <div id=\"clipper-references-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\r\n (!filterPane.opened || filterPaneClosed))) {\r\n <div style=\"padding: 0 10px 0 24px; height: 48px; min-height: 48px;\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData.mode === 1) {\r\n <mat-slide-toggle name=\"excludeTextReferences\" [(ngModel)]=\"filterParams.excludeTextReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note\r\n </mat-slide-toggle>\r\n } @else if (dialogData.mode == 2) {\r\n <mat-slide-toggle name=\"excludeNotesReferences\" [(ngModel)]=\"filterParams.excludeNotesReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-slide-toggle>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\"\r\n [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-references-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"48px\" style=\"padding:14px 5px 0 5px\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <div fxLayout=\"row\" fxLayoutGap=\"6px\" fxLayoutAlign=\"start center\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection?.isSelected(item.documentId) }\">\r\n <div fxFlex=\"54px\" fxLayoutAlign=\"center\" style=\"padding-left: 6px;\">\r\n @if (screenService.isTouchable || item.isOver || selection?.isSelected(item.documentId)) {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection?.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection?.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"item-content\">\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\"></clipper-search-result-item>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection?.isSelected(item.documentId)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot?.total ?? 0\"\r\n [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</div>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.accent{color:var(--ars-accent, #7894ae)!important}.primary{color:var(--ars-primary, #00a293)!important}.secondary{color:var(--ars-secondary, #4a635f)!important}.error{color:var(--ars-error, #ff5449)!important}.warning{color:var(--ars-warning, #FFC107)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer,.drawer-small{min-width:420px!important;max-width:420px!important;padding:20px 0 0}.drawer .title-container,.drawer-small .title-container{padding:0 10px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 0}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .content,.drawer-small .content{padding:10px 0!important}.drawer .fixed,.drawer-small .fixed{padding:0 4px!important}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-bottom:20px!important}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.drawer-small{min-width:360px!important;max-width:360px!important}.drawer-small .title{min-width:150px}.drawer-small .content{padding:20px 0 10px}@media screen and (min-width: 0px) and (max-width: 359px){.drawer{min-width:360px!important;max-width:360px!important}.drawer .title{min-width:150px}}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-color-scheme: dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.expired,.unread{color:var(--ars-error, #ff5449)!important}.expiring{color:var(--ars-warning, #FFC107)!important}.error-bg,.expired-bg,.unread-bg{background-color:var(--ars-error, #ff5449)}.expiring-bg{background-color:var(--ars-warning, #FFC107)}.popular-bg{background-color:#388e3c}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-accent, #7894ae);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .spaced{padding-top:10px!important}.items-footer{padding-top:10px}.item{border-radius:12px;padding:10px 0;min-height:60px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item-content .info-1{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent, #7894ae)}.item-content .info-2{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent-low, #456179)}.item-content .title{font-size:small;line-height:18px}.item-content .details{margin-top:4px;font-size:x-small;font-weight:700;line-height:15px;color:var(--ars-accent-low, #456179);text-transform:uppercase;border-left:4px solid var(--ars-accent-low, #456179);padding-left:10px}.item-content .details .links{text-transform:none;text-decoration:none}.item-content .details .links a,.item-content .details .links span,.item-content .details .links div{margin-right:8px;font-weight:600;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-link, #03A9F4);font-weight:600}.item-content a.link{color:var(--ars-link, #03A9F4);cursor:pointer!important}.item-content:hover{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer;padding:10px 13px;margin-bottom:2px}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--ars-error, #ff5449);margin:0 8px}.tile .image{height:180px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .image .img{object-fit:cover;width:100%;height:100%}.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-accent, #7894ae);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .check{position:absolute;left:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .check-selected{background-color:var(--ars-primary-hi, #12c0ae)}.tile .image .read{position:absolute;right:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .date{padding:8px 0 6px;font-weight:700;text-transform:uppercase}.tile .date .date-day{color:var(--ars-accent, #7894ae)}.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-divider, #757d87)}.tile .time{font-size:small;font-weight:700}.tile .title{text-decoration:none;font-size:small;min-height:72px;overflow:hidden}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:var(--ars-accent, #7894ae);text-transform:uppercase;white-space:nowrap;color:var(--ars-color-text, #191c1b)}.badge-red{background-color:var(--ars-error, #ff5449);color:var(--ars-color-text, #191c1b)}.busy-backdrop{background-color:#00000052!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .next{margin-left:8px}.special-date,.special-date-expired{border:2px var(--ars-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-error, #ff5449) solid!important}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}\n"] }]
|
|
334
334
|
}], propDecorators: { filterPane: [{
|
|
335
335
|
type: ViewChild,
|
|
336
336
|
args: ['filterPane']
|
|
337
337
|
}] } });
|
|
338
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvcmVmZXJlbmNlcy9yZWZlcmVuY2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBYSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFn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dkIsMEJBQTBCO2tCQTVCdEMsU0FBUzsyQkFDRixFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQUUsY0FHaEMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFVBQVU7d0JBQ1YsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixpQkFBaUI7d0JBQ2pCLG9CQUFvQjt3QkFDcEIsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixvQkFBb0I7d0JBQ3BCLDRCQUE0Qjt3QkFDNUIsNEJBQTRCO3dCQUM1QixnQ0FBZ0M7cUJBRWpDOzhCQUl3QixVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha3BvaW50cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEJhZGdlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYmFkZ2UnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dSZWYsIE1hdERpYWxvZ1RpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcclxuaW1wb3J0IHsgTWF0RHJhd2VyLCBNYXRTaWRlbmF2TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XHJcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQge1xyXG4gIENsaXBwZXJEb2N1bWVudEluZm8sXHJcbiAgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUsIENsaXBwZXJTZWFyY2hGYWNldHNTbmFwc2hvdFxyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBTZWxlY3RhYmxlTW9kZWwsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgRXh0ZW5kZWRNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQvZXh0ZW5kZWQnO1xyXG5pbXBvcnQgeyBGbGV4TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2ZsZXgnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mYWNldHMvc2VhcmNoLWZhY2V0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlciB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtbWFuYWdlci9zZWFyY2gtcmVzdWx0LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtaXRlbS9zZWFyY2gtcmVzdWx0LWl0ZW0uY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2xpcHBlclJlZmVyZW5jZXNEaWFsb2dEYXRhIHtcclxuICBtb2RlPzogQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUgfCBudWxsO1xyXG4gIGFuY2hvcj86IHN0cmluZyB8IG51bGw7XHJcbiAgYW5jaG9yVGl0bGU/OiBzdHJpbmcgfCBudWxsO1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbW9kZWw6IG51bWJlcjtcclxuXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIGhvc3Q6IHsgJ0JpbmQnOiBTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKSB9LFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWZlcmVuY2VzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZWZlcmVuY2VzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGbGV4TW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nVGl0bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBNYXRCYWRnZU1vZHVsZSxcclxuICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcclxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXHJcbiAgICBFeHRlbmRlZE1vZHVsZSxcclxuICAgIE1hdFNpZGVuYXZNb2R1bGUsXHJcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcclxuICAgIENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQsXHJcbiAgICBDbGlwcGVyU2VhcmNoRmFjZXRzQ29tcG9uZW50LFxyXG4gICAgQ2xpcHBlclNlYXJjaFJlc3VsdEl0ZW1Db21wb25lbnRcclxuXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50IGV4dGVuZHMgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXJcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdmaWx0ZXJQYW5lJykgZmlsdGVyUGFuZSE6IE1hdERyYXdlcjtcclxuXHJcbiAgcHJpdmF0ZSBoZWlnaHQ6IG51bWJlciA9IC0xO1xyXG4gIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0KE1hdERpYWxvZ1JlZjxDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudD4pO1xyXG4gIHByb3RlY3RlZCBkaWFsb2dEYXRhOiBDbGlwcGVyUmVmZXJlbmNlc0RpYWxvZ0RhdGEgPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBKSA/PyB7IG1vZGU6IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbiB9O1xyXG4gIHByb3RlY3RlZCB0aXRsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuZGlhbG9nRGF0YS5tb2RlKSB7XHJcbiAgICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW46XHJcbiAgICAgICAgICB0aGlzLnRpdGxlID0gXCJEb2N1bWVudGkgcmljaGlhbWF0aSBuZWxsZSBub3RlIG8gbmVsIHRlc3RvXCI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNPdXQ6XHJcbiAgICAgICAgICB0aGlzLnRpdGxlID0gXCJEb2N1bWVudGkgY2hlIHJpY2hpYW1hbm8gcXVlbGxvIGluIHZpc2lvbmVcIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc0luOlxyXG4gICAgICAgICAgdGhpcy50aXRsZSA9IFwiTW9kaWZpY2hlIHN1Yml0ZVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0OlxyXG4gICAgICAgICAgdGhpcy50aXRsZSA9IFwiTW9kaWZpY2hlIGFwcG9ydGF0ZVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5KdXJpczpcclxuICAgICAgICAgIHRoaXMudGl0bGUgPSBcIkdpdXJpc3BydWRlbnphIGFzc29jaWF0YVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5hbmNob3JUaXRsZSkge1xyXG4gICAgICAgIHRoaXMudGl0bGUgKz0gXCIgLSBcIiArIHRoaXMuZGlhbG9nRGF0YS5hbmNob3JUaXRsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXNlIHNlcnZpY2Ugc25hcHNob3RcclxuICAgICAgdGhpcy5zbmFwc2hvdCA9IHRoaXMuY2xpcHBlclNlcnZpY2UucmVmZXJlbmNlc1NuYXBzaG90ID8/IHsgc2VhcmNoUGFyYW1zOiB7fSwgaW50ZXJ2YWw6IFwiLTFcIiB9O1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZSAhPT0gdGhpcy5kaWFsb2dEYXRhLm1vZGUgfHxcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5pZCAhPT0gdGhpcy5kaWFsb2dEYXRhLmlkIHx8XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuYW5jaG9yICE9PSB0aGlzLmRpYWxvZ0RhdGEuYW5jaG9yXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zID0ge1xyXG4gICAgICAgICAgbW9kZTogdGhpcy5kaWFsb2dEYXRhLm1vZGUsXHJcbiAgICAgICAgICBtb2RlbDogdGhpcy5kaWFsb2dEYXRhLm1vZGVsLFxyXG4gICAgICAgICAgYW5jaG9yOiB0aGlzLmRpYWxvZ0RhdGEuYW5jaG9yLFxyXG4gICAgICAgICAgaWQ6IHRoaXMuZGlhbG9nRGF0YS5pZCxcclxuICAgICAgICAgIHVzZU1vZGlmaWVySW5mbzogdGhpcy5kaWFsb2dEYXRhLm1vZGUgPT09IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkNoYW5nZXNPdXQsXHJcbiAgICAgICAgICByZXR1cm5Nb2RpZmllckluZm86IHRoaXMuZGlhbG9nRGF0YS5tb2RlICE9PSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0LFxyXG4gICAgICAgICAgZmlyc3Q6IDAsXHJcbiAgICAgICAgICBjb3VudDogMTUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnJlZmVyZW5jZXNTbmFwc2hvdCA9IHRoaXMuc25hcHNob3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHNlbGVjdGlvblxyXG4gICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0YWJsZU1vZGVsPGFueSwgc3RyaW5nPih0cnVlLCAnZG9jdW1lbnRJZCcpO1xyXG5cclxuICAgIC8vIE9ic2VydmUgbGF5b3V0IGNoYW5nZXNcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyXHJcbiAgICAgIC5vYnNlcnZlKFtcclxuICAgICAgICBCcmVha3BvaW50cy5YU21hbGwsXHJcbiAgICAgICAgQnJlYWtwb2ludHMuU21hbGwsXHJcbiAgICAgICAgQnJlYWtwb2ludHMuTWVkaXVtLFxyXG4gICAgICAgIEJyZWFrcG9pbnRzLkxhcmdlLFxyXG4gICAgICAgIEJyZWFrcG9pbnRzLlhMYXJnZSxcclxuICAgICAgXSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgZm9yIChjb25zdCBxdWVyeSBvZiBPYmplY3Qua2V5cyhyZXN1bHQuYnJlYWtwb2ludHMpKSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0LmJyZWFrcG9pbnRzW3F1ZXJ5XSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgLy8gUmVhY3QgdG8gd2luZG93IHNpemUgY2hhbmdlXHJcbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpLCBkZWJvdW5jZVRpbWUoNTAwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8vIEhhbmRsZSBmaWx0ZXIgcGFuZSBcclxuICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJQYW5lVmlzaWJpbGl0eSgpO1xyXG4gICAgICAvLyBIYW5kbGUgZmFjZXRzXHJcbiAgICAgIGlmICh0aGlzLmZhY2V0cykge1xyXG4gICAgICAgIHRoaXMuZmFjZXRzLmNoYW5nZWRcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBDbGlwcGVyU2VhcmNoRmFjZXRzU25hcHNob3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzLmZyb21EYXRlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGUgPSB0aGlzLnNuYXBzaG90LmZhY2V0cy5mcm9tRGF0ZTtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50b0RhdGUgPSB0aGlzLnNuYXBzaG90LmZhY2V0cy50b0RhdGU7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMueWVhciA9IHRoaXMuc25hcHNob3QuZmFjZXRzLmZyb21EYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHMuY2hhbmdlZEludGVydmFsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMueWVhciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRvRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzLnNlY3RvciB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cy5jaGFuZ2VkU2VjdG9yKVxyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvciA9IHRoaXMuc25hcHNob3QuZmFjZXRzLnNlY3RvcjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzLnR5cGUgfHwgdGhpcy5zbmFwc2hvdC5mYWNldHMuY2hhbmdlZFR5cGUpXHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudHlwZSA9IHRoaXMuc25hcHNob3QuZmFjZXRzLnR5cGU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cy5hdXRob3IgfHwgdGhpcy5zbmFwc2hvdC5mYWNldHMuY2hhbmdlZEF1dGhvcilcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5hdXRob3IgPSB0aGlzLnNuYXBzaG90LmZhY2V0cy5hdXRob3I7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2godHJ1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgICB0aGlzLmZldGNoKHRydWUpO1xyXG4gICAgdGhpcy5yZXN0b3JlRmFjZXRzKCk7XHJcbiAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNpemUgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXNpemUoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xpcHBlci1yZWZlcmVuY2VzLXNjcm9sbGFibGUnKTtcclxuICAgICAgaWYgKGVsZW0pIHtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZ2V0Q3VycmVudERpYWxvZ1Njcm9sbGFibGVIZWlnaHQoXHJcbiAgICAgICAgICBbJ2NsaXBwZXItcmVmZXJlbmNlcy1maXhlZCddLFxyXG4gICAgICAgICAgd2luZG93LmlubmVySGVpZ2h0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaGVpZ2h0ICE9IHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAncGFkZGluZzogMjBweCAwIDAgMDsnICsgaGVpZ2h0ICsgJ3B4ICFpbXBvcnRhbnQ7bWF4LWhlaWdodDonICsgaGVpZ2h0ICsgJ3B4ICFpbXBvcnRhbnQnKTtcclxuICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgICAgdGhpcy5yZXNpemUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBTaG93IGhpZGUgZmlsdGVyIHBhbmUgbWFudWFsbHlcclxuICovXHJcbiAgcHJvdGVjdGVkIHRvZ2dsZUZpbHRlclBhbmUoKSB7XHJcbiAgICB0aGlzLmZpbHRlclBhbmVDbG9zZWQgPSAhdGhpcy5maWx0ZXJQYW5lQ2xvc2VkO1xyXG4gICAgdGhpcy5maWx0ZXJQYW5lPy50b2dnbGUoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIGZpbHRlciBwYW5lIHZpc2liaWxpdHlcclxuICAgKi9cclxuICBwcml2YXRlIGhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFuZSkge1xyXG4gICAgICBpZiAodGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKEJyZWFrcG9pbnRzLlhTbWFsbCkgfHxcclxuICAgICAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuU21hbGwpIHx8XHJcbiAgICAgICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKEJyZWFrcG9pbnRzLk1lZGl1bSkpIHtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJQYW5lLm9wZW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZS5tb2RlID0gJ292ZXInO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZS5kaXNhYmxlQ2xvc2UgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmVIYXNCYWNrZHJvcCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbHRlclBhbmUub3BlbmVkICYmICF0aGlzLmZpbHRlclBhbmVDbG9zZWQgJiYgdGhpcy5oYXNGYWNldHMoKSkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm9wZW4oKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyUGFuZS5vcGVuZWQgJiYgdGhpcy5maWx0ZXJQYW5lQ2xvc2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm1vZGUgPSAnc2lkZSc7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lSGFzQmFja2Ryb3AgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIGRpYWxvZ1xyXG4gICAqL1xyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBkb2N1bWVudCBsaW5rcyBieSBlbWFpbFxyXG4gICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gYWRkXHJcbiAgICovXHJcbiAgc2VuZFRvKGl0ZW06IGFueSA9IG51bGwpIHtcclxuICAgIHRoaXMuc2VuZEl0ZW1zVG8oaXRlbSA/IFtpdGVtXSA6IHRoaXMuc2VsZWN0aW9uPy5hbGwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBhIHNlYXJjaFxyXG4gICAqIEBwYXJhbSBuZXdTZWFyY2g6IHRydWUgaWYgaXMgYSBuZXcgc2VhcmNoXHJcbiAgICovXHJcbiAgZmV0Y2gobmV3U2VhcmNoOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbikgcmV0dXJuO1xyXG4gICAgaWYgKG5ld1NlYXJjaCkgdGhpcy5maWx0ZXJQYXJhbXMuZmlyc3QgPSAwO1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMudXNlTW9kaWZpZXJJbmZvID1cclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZSA9PT0gQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc091dDtcclxuICAgIHRoaXMuZmlsdGVyUGFyYW1zLnJldHVybk1vZGlmaWVySW5mbyA9XHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZGUgIT09IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkNoYW5nZXNPdXQ7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnUmljZXJjYSBpbiBjb3Jzby4uLicpO1xyXG4gICAgdGhpcy5jbGlwcGVyU2VydmljZS5yZWZlcmVuY2VzKHRoaXMuZmlsdGVyUGFyYW1zKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVJlc3VsdHMoci52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBIYW5kbGUgZmFjZXRzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90LnRvdGFsID4gMCkge1xyXG4gICAgICAgICAgICAgIGlmIChuZXdTZWFyY2gpXHJcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZmFjZXRzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoRmFjZXRzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mYWNldHM/LnJlc2V0KCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChuZXdTZWFyY2gpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsKDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbGVhckJ1c3koKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhIG5ldyBwYWdlIHJlc3VsdFxyXG4gICAqIEBwYXJhbSBlIDogdGhlIE1hdFBhZ2luYXRvciBQYWdlRXZlbnQgZGF0YVxyXG4gICAqL1xyXG4gIGZldGNoTW9yZShlOiBhbnkpIHtcclxuICAgIGxldCBmaXJzdCA9IGUucGFnZUluZGV4ICogdGhpcy5maWx0ZXJQYXJhbXMuY291bnQ7XHJcbiAgICB0aGlzLmZpbHRlclBhcmFtcy5maXJzdCA9IGZpcnN0O1xyXG4gICAgdGhpcy5mZXRjaCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZhY2V0c1xyXG4gICAqL1xyXG4gIGZldGNoRmFjZXRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuc25hcHNob3QuZmFjZXRzIHx8IHRoaXMuc25hcHNob3QuZmFjZXRzPy5oYXNNb3JlRmFjZXRzKSB7XHJcbiAgICB0aGlzLmZpbHRlckJ1c3kuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5jbGlwcGVyU2VydmljZS5yZWZlcmVuY2VzRmFjZXRzKHRoaXMuZmlsdGVyUGFyYW1zKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocikgPT4ge1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVSZXN1bHRzKG51bGwsIHIudmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJCdXN5LnNldChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBUcnkgdG8gcmVzdG9yZSBzdG9yZWQgZmFjZXRzXHJcbiAqL1xyXG4gIHJlc3RvcmVGYWNldHMoKSB7XHJcbiAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHMpIHtcclxuICAgICAgdGhpcy5mYWNldHMucmVzdG9yZSh0aGlzLnNuYXBzaG90LmZhY2V0cyk7XHJcbiAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIGN1cnJlbnQgZGlhbG9nIGFuZCByZXR1cm4gdGhlIGlkIHRvIG5hdmlnYXRlIHRvXHJcbiAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgKi9cclxuICBvcGVuKGRvY3VtZW50SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBpZDogZG9jdW1lbnRJZCB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cImNsaXBwZXItcmVmZXJlbmNlcy1maXhlZFwiPlxyXG4gIDxkaXYgaWQ9XCJjbGlwcGVyLXJlZmVyZW5jZXMtaGVhZGVyXCI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4TGF5b3V0R2FwPScxMHB4JyBmeEZpbGw+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPnt7dGl0bGV9fSA8L2gyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cInN0YXJ0XCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQ2hpdWRpXCIgYXJpYS1sYWJlbD1cIkNoaXVkaVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiIGNsYXNzPVwiZGlhbG9nLWNsb3NlXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmIChkaWFsb2dEYXRhLm1vZGUgPiAwIHx8IHNlbGVjdGlvbj8uaGFzVmFsdWUoKSB8fCAoc25hcHNob3QgJiYgc25hcHNob3QuZmFjZXRzPy5oYXNGYWNldHMgJiYgZmlsdGVyUGFuZSAmJlxyXG4gICAgKCFmaWx0ZXJQYW5lLm9wZW5lZCB8fCBmaWx0ZXJQYW5lQ2xvc2VkKSkpIHtcclxuICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAwIDEwcHggMCAyNHB4OyBoZWlnaHQ6IDQ4cHg7IG1pbi1oZWlnaHQ6IDQ4cHg7XCI+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgICAgQGlmIChkaWFsb2dEYXRhLm1vZGUgPT09IDEpIHtcclxuICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIG5hbWU9XCJleGNsdWRlVGV4dFJlZmVyZW5jZXNcIiBbKG5nTW9kZWwpXT1cImZpbHRlclBhcmFtcy5leGNsdWRlVGV4dFJlZmVyZW5jZXNcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cImZldGNoKHRydWUpXCI+XHJcbiAgICAgICAgICAgIE1vc3RyYSBzb2xvIHNlIGNpdGF0aSBuZWxsZSBub3RlXHJcbiAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICB9IEBlbHNlIGlmIChkaWFsb2dEYXRhLm1vZGUgPT0gMikge1xyXG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgbmFtZT1cImV4Y2x1ZGVOb3Rlc1JlZmVyZW5jZXNcIiBbKG5nTW9kZWwpXT1cImZpbHRlclBhcmFtcy5leGNsdWRlTm90ZXNSZWZlcmVuY2VzXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJmZXRjaCh0cnVlKVwiPlxyXG4gICAgICAgICAgICBNb3N0cmEgc29sbyBzZSBjaXRhbm8gbmVsIHRlc3RvIGlsIGRvY3VtZW50b1xyXG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgQGlmIChzZWxlY3Rpb24/Lmhhc1ZhbHVlKCkpIHtcclxuICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQXppb25pIGRhIGVzZWd1aXJlIHN1Z2xpIGVsZW1lbnRpIHNlbGV6aW9uYXRpXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBvcHppb25pIHBlciBlbGVtZW50aSBzZWxlemlvbmF0aSdcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVNlbGVjdGlvbnNcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNuYXBzaG90LnRvdGFsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW21hdEJhZGdlXT1cInNlbGVjdGlvbj8uYWxsLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgbWF0QmFkZ2VDb2xvcj1cImFjY2VudFwiPnBsYXlsaXN0X2FkZF9jaGVjazwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24tbWVudS1kcm9wLWRvd25cIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxtYXQtbWVudSAjbWVudVNlbGVjdGlvbnM9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgIDxjbGlwcGVyLWRvY3VtZW50LW1lbnUgW3BhcmVudF09XCJ0aGlzXCIgW3NlbGVjdGlvblNvdXJjZV09XCJzZWxlY3Rpb25cIiBbaXNSZWFkYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2lzUmVmZXJlbmNlXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPC9jbGlwcGVyLWRvY3VtZW50LW1lbnU+XHJcbiAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgQGlmIChzbmFwc2hvdCAmJiBzbmFwc2hvdC5mYWNldHM/Lmhhc0ZhY2V0cyAmJiBmaWx0ZXJQYW5lICYmICghZmlsdGVyUGFuZS5vcGVuZWQgfHwgZmlsdGVyUGFuZUNsb3NlZCkpIHtcclxuICAgICAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJBZmZpbmEgcmljZXJjYVwiIGFyaWEtbGFiZWw9XCInQWZmaW5hIHJpY2VyY2EnXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyUGFuZSgpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPm1lbnVfb3BlbjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBpZD1cImNsaXBwZXItcmVmZXJlbmNlcy1zY3JvbGxhYmxlXCI+XHJcbiAgPG1hdC1kcmF3ZXItY29udGFpbmVyIGNsYXNzPVwiZmlsbFwiIFtoYXNCYWNrZHJvcF09XCJmaWx0ZXJQYW5lSGFzQmFja2Ryb3BcIj5cclxuICAgIDxtYXQtZHJhd2VyICNmaWx0ZXJQYW5lIHBvc2l0aW9uPVwiZW5kXCIgY2xhc3M9XCJkcmF3ZXItc21hbGwgZHJhd2VyLXdpdGgtbG9hZGVyXCI+XHJcbiAgICAgIEBpZiAoZmlsdGVyQnVzeSgpKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+PC9kaXY+XHJcbiAgICAgIH1cclxuICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4RmlsbD5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjZweFwiPlxyXG4gICAgICAgICAgQGlmIChmaWx0ZXJCdXN5KCkpIHtcclxuICAgICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIHN0eWxlPVwiei1pbmRleDogMTE7XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj5cclxuICAgICAgICAgIDwvbWF0LXByb2dyZXNzLWJhcj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjQ4cHhcIiBzdHlsZT1cInBhZGRpbmc6MTRweCA1cHggMCA1cHhcIj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRpdGxlXCI+QWZmaW5hIHJpY2VyY2E8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZUZpbHRlclBhbmUoKVwiXHJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiTmFzY29uZGlcIj48bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGNsYXNzPVwic2Nyb2xsLWhpZGRlblwiPlxyXG4gICAgICAgICAgPGNsaXBwZXItc2VhcmNoLWZhY2V0cyAjZmFjZXRzPjwvY2xpcHBlci1zZWFyY2gtZmFjZXRzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWRyYXdlcj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZpbGw+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIFtpZF09XCJzY3JvbGxlcklkXCIgY2xhc3M9XCJzY3JvbGwtYXV0b1wiIHN0eWxlPVwicGFkZGluZzogMCA1cHg7XCI+XHJcbiAgICAgICAgQGlmICghc25hcHNob3QudG90YWwpIHtcclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJtZXNzYWdlXCI+PGk+TmVzc3VuIGVsZW1lbnRvIGRhIHZpc3VhbGl6emFyZS48L2k+PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICBAZm9yIChpdGVtIG9mIHNuYXBzaG90Lml0ZW1zOyB0cmFjayAkaW5kZXg7IGxldCBpID0gJGluZGV4KSB7XHJcbiAgICAgICAgICA8ZGl2IChjb250ZXh0bWVudSk9XCJvbkNvbnRleHRNZW51KCRldmVudCwgaXRlbSlcIiAobW91c2VlbnRlcik9XCJpdGVtLmlzT3ZlciA9IHRydWVcIlxyXG4gICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJpdGVtLmlzT3ZlciA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgIEBpZiAoaXRlbS5ncm91cCkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtZ3JvdXAtdGl0bGVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnc3BhY2VkJzogaSA+IDB9XCI+e3tpdGVtLmdyb3VwfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiNnB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbCBjbGFzcz1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXRlbS1zZWxlY3RlZCc6IHNlbGVjdGlvbj8uaXNTZWxlY3RlZChpdGVtLmRvY3VtZW50SWQpIH1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjU0cHhcIiBmeExheW91dEFsaWduPVwiY2VudGVyXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDZweDtcIj5cclxuICAgICAgICAgICAgICAgIEBpZiAoc2NyZWVuU2VydmljZS5pc1RvdWNoYWJsZSB8fCBpdGVtLmlzT3ZlciB8fCBzZWxlY3Rpb24/LmlzU2VsZWN0ZWQoaXRlbS5kb2N1bWVudElkKSkge1xyXG4gICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24/LnRvZ2dsZShpdGVtLCBpdGVtLmRvY3VtZW50SWQpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbj8uaXNTZWxlY3RlZChpdGVtLmRvY3VtZW50SWQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIGNsYXNzPVwiaXRlbS1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8Y2xpcHBlci1zZWFyY2gtcmVzdWx0LWl0ZW0gW2l0ZW1dPVwiaXRlbVwiIFtwYXJlbnRdPVwidGhpc1wiPjwvY2xpcHBlci1zZWFyY2gtcmVzdWx0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCI0OHB4XCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgICAgICAgQGlmIChpdGVtLmlzT3ZlciB8fCBpdGVtLmlzTWVudU9wZW4gfHwgc2VsZWN0aW9uPy5pc1NlbGVjdGVkKGl0ZW0uZG9jdW1lbnRJZCkpIHtcclxuICAgICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJNZW51XCJcclxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBvcHppb25pJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb250ZXh0TWVudVwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwie2l0ZW06IGl0ZW19XCIgKGNsaWNrKT1cIml0ZW0uaXNNZW51T3BlbiA9IHRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICNjb250ZXh0TWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiIHN0eWxlPVwicG9zaXRpb246IGZpeGVkXCIgW3N0eWxlLmxlZnRdPVwiY29udGV4dE1lbnVQb3NpdGlvbi54XCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS50b3BdPVwiY29udGV4dE1lbnVQb3NpdGlvbi55XCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbnRleHRNZW51XCJcclxuICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwie2l0ZW06IGl0ZW19XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8bWF0LW1lbnUgI2NvbnRleHRNZW51PVwibWF0TWVudVwiIChjbG9zZWQpPVwidXBkYXRlTWVudUJ1dHRvbnNWaXNpYmlsaXR5KClcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgIDxjbGlwcGVyLWRvY3VtZW50LW1lbnUgW3BhcmVudF09XCJ0aGlzXCIgW2l0ZW1dPVwiaXRlbVwiIFtpc1JlYWRhYmxlXT1cImZhbHNlXCIgW2lzUmVmZXJlbmNlXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICA8L2NsaXBwZXItZG9jdW1lbnQtbWVudT5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBmb290ZXIgLS0+XHJcbiAgICAgIEBpZiAoKHNuYXBzaG90Py50b3RhbCA/PyAwKSA+IDApIHtcclxuICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLWZvb3RlclwiPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiIGZ4RmlsbD5cclxuICAgICAgICAgIDxtYXQtcGFnaW5hdG9yICNwYWdpbmF0b3IgY2xhc3M9XCJwYWdpbmF0b3JcIiBbaGlkZVBhZ2VTaXplXT1cInRydWVcIiBbbGVuZ3RoXT1cInNuYXBzaG90Py50b3RhbCA/PyAwXCJcclxuICAgICAgICAgICAgW3BhZ2VTaXplXT1cImZpbHRlclBhcmFtcy5jb3VudCA/PyAxNVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCIgKHBhZ2UpPVwiZmV0Y2hNb3JlKCRldmVudClcIj5cclxuICAgICAgICAgIDwvbWF0LXBhZ2luYXRvcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LWRyYXdlci1jb250YWluZXI+XHJcbjwvZGl2PiJdfQ==
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvcmVmZXJlbmNlcy9yZWZlcmVuY2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBYSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFn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dkIsMEJBQTBCO2tCQTVCdEMsU0FBUzsyQkFDRixFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQUUsY0FHaEMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFVBQVU7d0JBQ1YsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixpQkFBaUI7d0JBQ2pCLG9CQUFvQjt3QkFDcEIsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixvQkFBb0I7d0JBQ3BCLDRCQUE0Qjt3QkFDNUIsNEJBQTRCO3dCQUM1QixnQ0FBZ0M7cUJBRWpDOzhCQUl3QixVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha3BvaW50cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEJhZGdlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYmFkZ2UnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dSZWYsIE1hdERpYWxvZ1RpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcclxuaW1wb3J0IHsgTWF0RHJhd2VyLCBNYXRTaWRlbmF2TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XHJcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQge1xyXG4gIENsaXBwZXJEb2N1bWVudEluZm8sXHJcbiAgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUsIENsaXBwZXJTZWFyY2hGYWNldHNTbmFwc2hvdFxyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBTZWxlY3RhYmxlTW9kZWwsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgRXh0ZW5kZWRNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQvZXh0ZW5kZWQnO1xyXG5pbXBvcnQgeyBGbGV4TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2ZsZXgnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mYWNldHMvc2VhcmNoLWZhY2V0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlciB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtbWFuYWdlci9zZWFyY2gtcmVzdWx0LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtaXRlbS9zZWFyY2gtcmVzdWx0LWl0ZW0uY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2xpcHBlclJlZmVyZW5jZXNEaWFsb2dEYXRhIHtcclxuICBtb2RlPzogQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUgfCBudWxsO1xyXG4gIGFuY2hvcj86IHN0cmluZyB8IG51bGw7XHJcbiAgYW5jaG9yVGl0bGU/OiBzdHJpbmcgfCBudWxsO1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbW9kZWw6IG51bWJlcjtcclxuXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIGhvc3Q6IHsgJ0JpbmQnOiBTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKSB9LFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWZlcmVuY2VzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZWZlcmVuY2VzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGbGV4TW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nVGl0bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBNYXRCYWRnZU1vZHVsZSxcclxuICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcclxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXHJcbiAgICBFeHRlbmRlZE1vZHVsZSxcclxuICAgIE1hdFNpZGVuYXZNb2R1bGUsXHJcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcclxuICAgIENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQsXHJcbiAgICBDbGlwcGVyU2VhcmNoRmFjZXRzQ29tcG9uZW50LFxyXG4gICAgQ2xpcHBlclNlYXJjaFJlc3VsdEl0ZW1Db21wb25lbnRcclxuXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50IGV4dGVuZHMgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXJcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdmaWx0ZXJQYW5lJykgZmlsdGVyUGFuZSE6IE1hdERyYXdlcjtcclxuXHJcbiAgcHJpdmF0ZSBoZWlnaHQ6IG51bWJlciA9IC0xO1xyXG4gIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0KE1hdERpYWxvZ1JlZjxDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudD4pO1xyXG4gIHByb3RlY3RlZCBkaWFsb2dEYXRhOiBDbGlwcGVyUmVmZXJlbmNlc0RpYWxvZ0RhdGEgPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBKSA/PyB7IG1vZGU6IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbiB9O1xyXG4gIHByb3RlY3RlZCB0aXRsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuZGlhbG9nRGF0YS5tb2RlKSB7XHJcbiAgICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW46XHJcbiAgICAgICAgICB0aGlzLnRpdGxlID0gXCJEb2N1bWVudGkgcmljaGlhbWF0aSBuZWxsZSBub3RlIG8gbmVsIHRlc3RvXCI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNPdXQ6XHJcbiAgICAgICAgICB0aGlzLnRpdGxlID0gXCJEb2N1bWVudGkgY2hlIHJpY2hpYW1hbm8gcXVlbGxvIGluIHZpc2lvbmVcIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc0luOlxyXG4gICAgICAgICAgdGhpcy50aXRsZSA9IFwiTW9kaWZpY2hlIHN1Yml0ZVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0OlxyXG4gICAgICAgICAgdGhpcy50aXRsZSA9IFwiTW9kaWZpY2hlIGFwcG9ydGF0ZVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5KdXJpczpcclxuICAgICAgICAgIHRoaXMudGl0bGUgPSBcIkdpdXJpc3BydWRlbnphIGFzc29jaWF0YVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5hbmNob3JUaXRsZSkge1xyXG4gICAgICAgIHRoaXMudGl0bGUgKz0gXCIgLSBcIiArIHRoaXMuZGlhbG9nRGF0YS5hbmNob3JUaXRsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXNlIHNlcnZpY2Ugc25hcHNob3RcclxuICAgICAgdGhpcy5zbmFwc2hvdCA9IHRoaXMuY2xpcHBlclNlcnZpY2UucmVmZXJlbmNlc1NuYXBzaG90ID8/IHsgc2VhcmNoUGFyYW1zOiB7fSwgaW50ZXJ2YWw6IFwiLTFcIiB9O1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZSAhPT0gdGhpcy5kaWFsb2dEYXRhLm1vZGUgfHxcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5pZCAhPT0gdGhpcy5kaWFsb2dEYXRhLmlkIHx8XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuYW5jaG9yICE9PSB0aGlzLmRpYWxvZ0RhdGEuYW5jaG9yXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zID0ge1xyXG4gICAgICAgICAgbW9kZTogdGhpcy5kaWFsb2dEYXRhLm1vZGUsXHJcbiAgICAgICAgICBtb2RlbDogdGhpcy5kaWFsb2dEYXRhLm1vZGVsLFxyXG4gICAgICAgICAgYW5jaG9yOiB0aGlzLmRpYWxvZ0RhdGEuYW5jaG9yLFxyXG4gICAgICAgICAgaWQ6IHRoaXMuZGlhbG9nRGF0YS5pZCxcclxuICAgICAgICAgIHVzZU1vZGlmaWVySW5mbzogdGhpcy5kaWFsb2dEYXRhLm1vZGUgPT09IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkNoYW5nZXNPdXQsXHJcbiAgICAgICAgICByZXR1cm5Nb2RpZmllckluZm86IHRoaXMuZGlhbG9nRGF0YS5tb2RlICE9PSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0LFxyXG4gICAgICAgICAgZmlyc3Q6IDAsXHJcbiAgICAgICAgICBjb3VudDogMTUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnJlZmVyZW5jZXNTbmFwc2hvdCA9IHRoaXMuc25hcHNob3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHNlbGVjdGlvblxyXG4gICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0YWJsZU1vZGVsPGFueSwgc3RyaW5nPih0cnVlLCAnZG9jdW1lbnRJZCcpO1xyXG5cclxuICAgIC8vIE9ic2VydmUgbGF5b3V0IGNoYW5nZXNcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyXHJcbiAgICAgIC5vYnNlcnZlKFtcclxuICAgICAgICBCcmVha3BvaW50cy5YU21hbGwsXHJcbiAgICAgICAgQnJlYWtwb2ludHMuU21hbGwsXHJcbiAgICAgICAgQnJlYWtwb2ludHMuTWVkaXVtLFxyXG4gICAgICAgIEJyZWFrcG9pbnRzLkxhcmdlLFxyXG4gICAgICAgIEJyZWFrcG9pbnRzLlhMYXJnZSxcclxuICAgICAgXSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgZm9yIChjb25zdCBxdWVyeSBvZiBPYmplY3Qua2V5cyhyZXN1bHQuYnJlYWtwb2ludHMpKSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0LmJyZWFrcG9pbnRzW3F1ZXJ5XSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgLy8gUmVhY3QgdG8gd2luZG93IHNpemUgY2hhbmdlXHJcbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpLCBkZWJvdW5jZVRpbWUoNTAwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8vIEhhbmRsZSBmaWx0ZXIgcGFuZSBcclxuICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJQYW5lVmlzaWJpbGl0eSgpO1xyXG4gICAgICAvLyBIYW5kbGUgZmFjZXRzXHJcbiAgICAgIGlmICh0aGlzLmZhY2V0cykge1xyXG4gICAgICAgIHRoaXMuZmFjZXRzLmNoYW5nZWRcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBDbGlwcGVyU2VhcmNoRmFjZXRzU25hcHNob3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzLmZyb21EYXRlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGUgPSB0aGlzLnNuYXBzaG90LmZhY2V0cy5mcm9tRGF0ZTtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50b0RhdGUgPSB0aGlzLnNuYXBzaG90LmZhY2V0cy50b0RhdGU7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMueWVhciA9IHRoaXMuc25hcHNob3QuZmFjZXRzLmZyb21EYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHMuY2hhbmdlZEludGVydmFsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMueWVhciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRvRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzLnNlY3RvciB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cy5jaGFuZ2VkU2VjdG9yKVxyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvciA9IHRoaXMuc25hcHNob3QuZmFjZXRzLnNlY3RvcjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzLnR5cGUgfHwgdGhpcy5zbmFwc2hvdC5mYWNldHMuY2hhbmdlZFR5cGUpXHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudHlwZSA9IHRoaXMuc25hcHNob3QuZmFjZXRzLnR5cGU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cy5hdXRob3IgfHwgdGhpcy5zbmFwc2hvdC5mYWNldHMuY2hhbmdlZEF1dGhvcilcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5hdXRob3IgPSB0aGlzLnNuYXBzaG90LmZhY2V0cy5hdXRob3I7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2godHJ1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgICB0aGlzLmZldGNoKHRydWUpO1xyXG4gICAgdGhpcy5yZXN0b3JlRmFjZXRzKCk7XHJcbiAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNpemUgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXNpemUoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xpcHBlci1yZWZlcmVuY2VzLXNjcm9sbGFibGUnKTtcclxuICAgICAgaWYgKGVsZW0pIHtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZ2V0Q3VycmVudERpYWxvZ1Njcm9sbGFibGVIZWlnaHQoXHJcbiAgICAgICAgICBbJ2NsaXBwZXItcmVmZXJlbmNlcy1maXhlZCddLFxyXG4gICAgICAgICAgd2luZG93LmlubmVySGVpZ2h0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaGVpZ2h0ICE9IHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAncGFkZGluZzogMjBweCAwIDAgMDsnICsgaGVpZ2h0ICsgJ3B4ICFpbXBvcnRhbnQ7bWF4LWhlaWdodDonICsgaGVpZ2h0ICsgJ3B4ICFpbXBvcnRhbnQnKTtcclxuICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgICAgdGhpcy5yZXNpemUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBTaG93IGhpZGUgZmlsdGVyIHBhbmUgbWFudWFsbHlcclxuICovXHJcbiAgcHJvdGVjdGVkIHRvZ2dsZUZpbHRlclBhbmUoKSB7XHJcbiAgICB0aGlzLmZpbHRlclBhbmVDbG9zZWQgPSAhdGhpcy5maWx0ZXJQYW5lQ2xvc2VkO1xyXG4gICAgdGhpcy5maWx0ZXJQYW5lPy50b2dnbGUoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIGZpbHRlciBwYW5lIHZpc2liaWxpdHlcclxuICAgKi9cclxuICBwcml2YXRlIGhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFuZSkge1xyXG4gICAgICBpZiAodGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKEJyZWFrcG9pbnRzLlhTbWFsbCkgfHxcclxuICAgICAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuU21hbGwpIHx8XHJcbiAgICAgICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKEJyZWFrcG9pbnRzLk1lZGl1bSkpIHtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJQYW5lLm9wZW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZS5tb2RlID0gJ292ZXInO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZS5kaXNhYmxlQ2xvc2UgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmVIYXNCYWNrZHJvcCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbHRlclBhbmUub3BlbmVkICYmICF0aGlzLmZpbHRlclBhbmVDbG9zZWQgJiYgdGhpcy5oYXNGYWNldHMoKSkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm9wZW4oKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyUGFuZS5vcGVuZWQgJiYgdGhpcy5maWx0ZXJQYW5lQ2xvc2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm1vZGUgPSAnc2lkZSc7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lSGFzQmFja2Ryb3AgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIGRpYWxvZ1xyXG4gICAqL1xyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBkb2N1bWVudCBsaW5rcyBieSBlbWFpbFxyXG4gICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gYWRkXHJcbiAgICovXHJcbiAgc2VuZFRvKGl0ZW06IGFueSA9IG51bGwpIHtcclxuICAgIHRoaXMuc2VuZEl0ZW1zVG8oaXRlbSA/IFtpdGVtXSA6IHRoaXMuc2VsZWN0aW9uPy5hbGwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBhIHNlYXJjaFxyXG4gICAqIEBwYXJhbSBuZXdTZWFyY2g6IHRydWUgaWYgaXMgYSBuZXcgc2VhcmNoXHJcbiAgICovXHJcbiAgZmV0Y2gobmV3U2VhcmNoOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbikgcmV0dXJuO1xyXG4gICAgaWYgKG5ld1NlYXJjaCkgdGhpcy5maWx0ZXJQYXJhbXMuZmlyc3QgPSAwO1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMudXNlTW9kaWZpZXJJbmZvID1cclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZSA9PT0gQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc091dDtcclxuICAgIHRoaXMuZmlsdGVyUGFyYW1zLnJldHVybk1vZGlmaWVySW5mbyA9XHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZGUgIT09IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkNoYW5nZXNPdXQ7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnUmljZXJjYSBpbiBjb3Jzby4uLicpO1xyXG4gICAgdGhpcy5jbGlwcGVyU2VydmljZS5yZWZlcmVuY2VzKHRoaXMuZmlsdGVyUGFyYW1zKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVJlc3VsdHMoci52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBIYW5kbGUgZmFjZXRzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90LnRvdGFsID4gMCkge1xyXG4gICAgICAgICAgICAgIGlmIChuZXdTZWFyY2gpXHJcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZmFjZXRzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoRmFjZXRzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mYWNldHM/LnJlc2V0KCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChuZXdTZWFyY2gpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsKDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbGVhckJ1c3koKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhIG5ldyBwYWdlIHJlc3VsdFxyXG4gICAqIEBwYXJhbSBlIDogdGhlIE1hdFBhZ2luYXRvciBQYWdlRXZlbnQgZGF0YVxyXG4gICAqL1xyXG4gIGZldGNoTW9yZShlOiBhbnkpIHtcclxuICAgIGxldCBmaXJzdCA9IGUucGFnZUluZGV4ICogdGhpcy5maWx0ZXJQYXJhbXMuY291bnQ7XHJcbiAgICB0aGlzLmZpbHRlclBhcmFtcy5maXJzdCA9IGZpcnN0O1xyXG4gICAgdGhpcy5mZXRjaCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZhY2V0c1xyXG4gICAqL1xyXG4gIGZldGNoRmFjZXRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuc25hcHNob3QuZmFjZXRzIHx8IHRoaXMuc25hcHNob3QuZmFjZXRzPy5oYXNNb3JlRmFjZXRzKSB7XHJcbiAgICB0aGlzLmZpbHRlckJ1c3kuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5jbGlwcGVyU2VydmljZS5yZWZlcmVuY2VzRmFjZXRzKHRoaXMuZmlsdGVyUGFyYW1zKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocikgPT4ge1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVSZXN1bHRzKG51bGwsIHIudmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJCdXN5LnNldChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBUcnkgdG8gcmVzdG9yZSBzdG9yZWQgZmFjZXRzXHJcbiAqL1xyXG4gIHJlc3RvcmVGYWNldHMoKSB7XHJcbiAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHMpIHtcclxuICAgICAgdGhpcy5mYWNldHMucmVzdG9yZSh0aGlzLnNuYXBzaG90LmZhY2V0cyk7XHJcbiAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIGN1cnJlbnQgZGlhbG9nIGFuZCByZXR1cm4gdGhlIGlkIHRvIG5hdmlnYXRlIHRvXHJcbiAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgKi9cclxuICBvcGVuKGRvY3VtZW50SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBpZDogZG9jdW1lbnRJZCB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNsaXBwZXItcmVmZXJlbmNlcy1maXhlZFwiPlxyXG4gIDxkaXYgaWQ9XCJjbGlwcGVyLXJlZmVyZW5jZXMtaGVhZGVyXCI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4TGF5b3V0R2FwPScxMHB4JyBmeEZpbGw+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPnt7dGl0bGV9fSA8L2gyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cInN0YXJ0XCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQ2hpdWRpXCIgYXJpYS1sYWJlbD1cIkNoaXVkaVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiIGNsYXNzPVwiZGlhbG9nLWNsb3NlXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmIChkaWFsb2dEYXRhLm1vZGUgPiAwIHx8IHNlbGVjdGlvbj8uaGFzVmFsdWUoKSB8fCAoc25hcHNob3QgJiYgc25hcHNob3QuZmFjZXRzPy5oYXNGYWNldHMgJiYgZmlsdGVyUGFuZSAmJlxyXG4gICAgKCFmaWx0ZXJQYW5lLm9wZW5lZCB8fCBmaWx0ZXJQYW5lQ2xvc2VkKSkpIHtcclxuICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAwIDEwcHggMCAyNHB4OyBoZWlnaHQ6IDQ4cHg7IG1pbi1oZWlnaHQ6IDQ4cHg7XCI+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgICAgQGlmIChkaWFsb2dEYXRhLm1vZGUgPT09IDEpIHtcclxuICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIG5hbWU9XCJleGNsdWRlVGV4dFJlZmVyZW5jZXNcIiBbKG5nTW9kZWwpXT1cImZpbHRlclBhcmFtcy5leGNsdWRlVGV4dFJlZmVyZW5jZXNcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cImZldGNoKHRydWUpXCI+XHJcbiAgICAgICAgICAgIE1vc3RyYSBzb2xvIHNlIGNpdGF0aSBuZWxsZSBub3RlXHJcbiAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICB9IEBlbHNlIGlmIChkaWFsb2dEYXRhLm1vZGUgPT0gMikge1xyXG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgbmFtZT1cImV4Y2x1ZGVOb3Rlc1JlZmVyZW5jZXNcIiBbKG5nTW9kZWwpXT1cImZpbHRlclBhcmFtcy5leGNsdWRlTm90ZXNSZWZlcmVuY2VzXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJmZXRjaCh0cnVlKVwiPlxyXG4gICAgICAgICAgICBNb3N0cmEgc29sbyBzZSBjaXRhbm8gbmVsIHRlc3RvIGlsIGRvY3VtZW50b1xyXG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgQGlmIChzZWxlY3Rpb24/Lmhhc1ZhbHVlKCkpIHtcclxuICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQXppb25pIGRhIGVzZWd1aXJlIHN1Z2xpIGVsZW1lbnRpIHNlbGV6aW9uYXRpXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBvcHppb25pIHBlciBlbGVtZW50aSBzZWxlemlvbmF0aSdcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVNlbGVjdGlvbnNcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNuYXBzaG90LnRvdGFsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW21hdEJhZGdlXT1cInNlbGVjdGlvbj8uYWxsLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgbWF0QmFkZ2VDb2xvcj1cImFjY2VudFwiPnBsYXlsaXN0X2FkZF9jaGVjazwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24tbWVudS1kcm9wLWRvd25cIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxtYXQtbWVudSAjbWVudVNlbGVjdGlvbnM9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgIDxjbGlwcGVyLWRvY3VtZW50LW1lbnUgW3BhcmVudF09XCJ0aGlzXCIgW3NlbGVjdGlvblNvdXJjZV09XCJzZWxlY3Rpb25cIiBbaXNSZWFkYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2lzUmVmZXJlbmNlXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPC9jbGlwcGVyLWRvY3VtZW50LW1lbnU+XHJcbiAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgQGlmIChzbmFwc2hvdCAmJiBzbmFwc2hvdC5mYWNldHM/Lmhhc0ZhY2V0cyAmJiBmaWx0ZXJQYW5lICYmICghZmlsdGVyUGFuZS5vcGVuZWQgfHwgZmlsdGVyUGFuZUNsb3NlZCkpIHtcclxuICAgICAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJBZmZpbmEgcmljZXJjYVwiIGFyaWEtbGFiZWw9XCInQWZmaW5hIHJpY2VyY2EnXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyUGFuZSgpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPm1lbnVfb3BlbjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBpZD1cImNsaXBwZXItcmVmZXJlbmNlcy1zY3JvbGxhYmxlXCI+XHJcbiAgPG1hdC1kcmF3ZXItY29udGFpbmVyIGNsYXNzPVwiZmlsbFwiIFtoYXNCYWNrZHJvcF09XCJmaWx0ZXJQYW5lSGFzQmFja2Ryb3BcIj5cclxuICAgIDxtYXQtZHJhd2VyICNmaWx0ZXJQYW5lIHBvc2l0aW9uPVwiZW5kXCIgY2xhc3M9XCJkcmF3ZXItc21hbGwgZHJhd2VyLXdpdGgtbG9hZGVyXCI+XHJcbiAgICAgIEBpZiAoZmlsdGVyQnVzeSgpKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+PC9kaXY+XHJcbiAgICAgIH1cclxuICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4RmlsbD5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjZweFwiPlxyXG4gICAgICAgICAgQGlmIChmaWx0ZXJCdXN5KCkpIHtcclxuICAgICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIHN0eWxlPVwiei1pbmRleDogMTE7XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj5cclxuICAgICAgICAgIDwvbWF0LXByb2dyZXNzLWJhcj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjQ4cHhcIiBzdHlsZT1cInBhZGRpbmc6MTRweCA1cHggMCA1cHhcIj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRpdGxlXCI+QWZmaW5hIHJpY2VyY2E8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZUZpbHRlclBhbmUoKVwiXHJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiTmFzY29uZGlcIj48bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGNsYXNzPVwic2Nyb2xsLWhpZGRlblwiPlxyXG4gICAgICAgICAgPGNsaXBwZXItc2VhcmNoLWZhY2V0cyAjZmFjZXRzPjwvY2xpcHBlci1zZWFyY2gtZmFjZXRzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWRyYXdlcj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZpbGw+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIFtpZF09XCJzY3JvbGxlcklkXCIgY2xhc3M9XCJzY3JvbGwtYXV0b1wiIHN0eWxlPVwicGFkZGluZzogMCA1cHg7XCI+XHJcbiAgICAgICAgQGlmICghc25hcHNob3QudG90YWwpIHtcclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJtZXNzYWdlXCI+PGk+TmVzc3VuIGVsZW1lbnRvIGRhIHZpc3VhbGl6emFyZS48L2k+PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICBAZm9yIChpdGVtIG9mIHNuYXBzaG90Lml0ZW1zOyB0cmFjayAkaW5kZXg7IGxldCBpID0gJGluZGV4KSB7XHJcbiAgICAgICAgICA8ZGl2IChjb250ZXh0bWVudSk9XCJvbkNvbnRleHRNZW51KCRldmVudCwgaXRlbSlcIiAobW91c2VlbnRlcik9XCJpdGVtLmlzT3ZlciA9IHRydWVcIlxyXG4gICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJpdGVtLmlzT3ZlciA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgIEBpZiAoaXRlbS5ncm91cCkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtZ3JvdXAtdGl0bGVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnc3BhY2VkJzogaSA+IDB9XCI+e3tpdGVtLmdyb3VwfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiNnB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbCBjbGFzcz1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXRlbS1zZWxlY3RlZCc6IHNlbGVjdGlvbj8uaXNTZWxlY3RlZChpdGVtLmRvY3VtZW50SWQpIH1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjU0cHhcIiBmeExheW91dEFsaWduPVwiY2VudGVyXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDZweDtcIj5cclxuICAgICAgICAgICAgICAgIEBpZiAoc2NyZWVuU2VydmljZS5pc1RvdWNoYWJsZSB8fCBpdGVtLmlzT3ZlciB8fCBzZWxlY3Rpb24/LmlzU2VsZWN0ZWQoaXRlbS5kb2N1bWVudElkKSkge1xyXG4gICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24/LnRvZ2dsZShpdGVtLCBpdGVtLmRvY3VtZW50SWQpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbj8uaXNTZWxlY3RlZChpdGVtLmRvY3VtZW50SWQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIGNsYXNzPVwiaXRlbS1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8Y2xpcHBlci1zZWFyY2gtcmVzdWx0LWl0ZW0gW2l0ZW1dPVwiaXRlbVwiIFtwYXJlbnRdPVwidGhpc1wiPjwvY2xpcHBlci1zZWFyY2gtcmVzdWx0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCI0OHB4XCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgICAgICAgQGlmIChpdGVtLmlzT3ZlciB8fCBpdGVtLmlzTWVudU9wZW4gfHwgc2VsZWN0aW9uPy5pc1NlbGVjdGVkKGl0ZW0uZG9jdW1lbnRJZCkpIHtcclxuICAgICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJNZW51XCJcclxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBvcHppb25pJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb250ZXh0TWVudVwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwie2l0ZW06IGl0ZW19XCIgKGNsaWNrKT1cIml0ZW0uaXNNZW51T3BlbiA9IHRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICNjb250ZXh0TWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiIHN0eWxlPVwicG9zaXRpb246IGZpeGVkXCIgW3N0eWxlLmxlZnRdPVwiY29udGV4dE1lbnVQb3NpdGlvbi54XCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS50b3BdPVwiY29udGV4dE1lbnVQb3NpdGlvbi55XCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbnRleHRNZW51XCJcclxuICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwie2l0ZW06IGl0ZW19XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8bWF0LW1lbnUgI2NvbnRleHRNZW51PVwibWF0TWVudVwiIChjbG9zZWQpPVwidXBkYXRlTWVudUJ1dHRvbnNWaXNpYmlsaXR5KClcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgIDxjbGlwcGVyLWRvY3VtZW50LW1lbnUgW3BhcmVudF09XCJ0aGlzXCIgW2l0ZW1dPVwiaXRlbVwiIFtpc1JlYWRhYmxlXT1cImZhbHNlXCIgW2lzUmVmZXJlbmNlXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICA8L2NsaXBwZXItZG9jdW1lbnQtbWVudT5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBmb290ZXIgLS0+XHJcbiAgICAgIEBpZiAoKHNuYXBzaG90Py50b3RhbCA/PyAwKSA+IDApIHtcclxuICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLWZvb3RlclwiPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiIGZ4RmlsbD5cclxuICAgICAgICAgIDxtYXQtcGFnaW5hdG9yICNwYWdpbmF0b3IgY2xhc3M9XCJwYWdpbmF0b3JcIiBbaGlkZVBhZ2VTaXplXT1cInRydWVcIiBbbGVuZ3RoXT1cInNuYXBzaG90Py50b3RhbCA/PyAwXCJcclxuICAgICAgICAgICAgW3BhZ2VTaXplXT1cImZpbHRlclBhcmFtcy5jb3VudCA/PyAxNVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCIgKHBhZ2UpPVwiZmV0Y2hNb3JlKCRldmVudClcIj5cclxuICAgICAgICAgIDwvbWF0LXBhZ2luYXRvcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LWRyYXdlci1jb250YWluZXI+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -129,6 +129,9 @@ export class DialogService extends UIService {
|
|
|
129
129
|
if (!SystemUtils.isBrowser())
|
|
130
130
|
return 0;
|
|
131
131
|
let h = this.getCurrentDialogHeight();
|
|
132
|
+
if (h < minimalHeight) {
|
|
133
|
+
h = minimalHeight;
|
|
134
|
+
}
|
|
132
135
|
if (fixedPartsClassName) {
|
|
133
136
|
fixedPartsClassName.forEach(n => {
|
|
134
137
|
const elems = document.getElementsByClassName(n);
|
|
@@ -139,8 +142,6 @@ export class DialogService extends UIService {
|
|
|
139
142
|
}
|
|
140
143
|
});
|
|
141
144
|
}
|
|
142
|
-
if (h < minimalHeight)
|
|
143
|
-
h = minimalHeight;
|
|
144
145
|
return h;
|
|
145
146
|
}
|
|
146
147
|
/**
|
|
@@ -397,4 +398,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
397
398
|
providedIn: 'root'
|
|
398
399
|
}]
|
|
399
400
|
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.Overlay }, { type: i3.MatSnackBar }, { type: i4.PlatformLocation }] });
|
|
400
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvdWkvdWkvc2VydmljZXMvZGlhbG9nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUNMLG1CQUFtQixFQUNwQixNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFDTCxzQkFBc0IsRUFFdkIsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsbUJBQW1CLEVBRXBCLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBYSxNQUFNLGtDQUFrQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7OztBQU96QyxNQUFNLE9BQU8sYUFBYyxTQUFRLFNBQVM7SUFTMUMsWUFDUyxNQUFpQixFQUNqQixPQUFnQixFQUNoQixRQUFxQixFQUNyQixRQUEwQjtRQUVqQyxLQUFLLEVBQUUsQ0FBQztRQUxELFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQWtCO1FBUjNCLGVBQVUsR0FBUSxFQUFFLENBQUM7UUFDckIsYUFBUSxHQUFZLElBQUksQ0FBQztRQUN6QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQVVwQyxrREFBa0Q7UUFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FB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O1lBQ3ZDLFNBQVMsRUFBRSxVQUFVO1lBQ3JCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsWUFBWSxFQUFFLEtBQUs7WUFDbkIsSUFBSSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixLQUFLLEVBQUUsS0FBSztnQkFDWixTQUFTLEVBQUUsU0FBUztnQkFDcEIsYUFBYSxFQUFFLGFBQWE7Z0JBQzVCLFlBQVksRUFBRSxZQUFZO2dCQUMxQixPQUFPLEVBQUUsT0FBTztnQkFDaEIsVUFBVSxFQUFFLE1BQU07YUFDRTtZQUN0QixpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFFBQVEsRUFBRSxLQUFLLEdBQUcsSUFBSTtZQUN0QixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBamJVLGFBQWE7a0hBQWIsYUFBYSxjQUZaLE1BQU07OzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7IFBsYXRmb3JtTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnRSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciwgTWF0U25hY2tCYXJSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7XHJcbiAgQnVzeURpYWxvZ0NvbXBvbmVudFxyXG59IGZyb20gJy4uL2RpYWxvZ3MvYnVzeS9idXN5LWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIENvbmZpcm1EaWFsb2dDb21wb25lbnQsXHJcbiAgQ29uZmlybURpYWxvZ0RhdGFcclxufSBmcm9tICcuLi9kaWFsb2dzL2NvbmZpcm0vY29uZmlybS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBJbmZvRGlhbG9nQ29tcG9uZW50LFxyXG4gIEluZm9EaWFsb2dEYXRhXHJcbn0gZnJvbSAnLi4vZGlhbG9ncy9pbmZvL2luZm8tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvYXN0Q29tcG9uZW50LCBUb2FzdERhdGEgfSBmcm9tICcuLi9kaWFsb2dzL3RvYXN0L3RvYXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFVJU2VydmljZSB9IGZyb20gJy4vdWkuc2VydmljZSc7XHJcblxyXG5cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ1NlcnZpY2UgZXh0ZW5kcyBVSVNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIGJ1c3lEaWFsb2dSZWY6IE92ZXJsYXlSZWY7XHJcbiAgcHJpdmF0ZSBidXN5Q29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8QnVzeURpYWxvZ0NvbXBvbmVudD47XHJcbiAgcHJpdmF0ZSBlcnJvckRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEluZm9EaWFsb2dDb21wb25lbnQ+O1xyXG4gIHByaXZhdGUgcG9wSGlzdG9yeTogYW55ID0gW107XHJcbiAgcHJpdmF0ZSBwb3BTdGF0ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBwb3BwaW5nU3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwdWJsaWMgb3ZlcmxheTogT3ZlcmxheSxcclxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBwdWJsaWMgbG9jYXRpb246IFBsYXRmb3JtTG9jYXRpb24sXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIC8vIEhhbmRsZSBkaWFsb2cgY2xvc2Ugd2hlbiBiYWNrIGJ1dHRvbiBpcyBjbGlja2VkXHJcbiAgICB0aGlzLmxvY2F0aW9uLm9uUG9wU3RhdGUoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMucG9wcGluZ1N0YXRlKSB7XHJcbiAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGNvdW50ID4gMCkge1xyXG4gICAgICAgICAgLy8gRGlzYWJsZSBwb3Agc2F0ZSBpZiBjYXNlXHJcbiAgICAgICAgICB0aGlzLnBvcFN0YXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyBDbG9zZSBkaWFsb2dcclxuICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzW2NvdW50IC0gMV0uY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB0aGlzLnBvcHBpbmdTdGF0ZSA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciB1cmwgZnJvbSAjIGluIGNhc2Ugb2YgcGFnZSByZWxvYWRcclxuICAgKiBAcGFyYW0gcmVzZXRQb3BwaW5nU3RhdGU6IHRydWUgaWYgcG9wcGluZyBzdGF0ZSBzaG91bGQgYmUgc2V0IHRvIGZhbHNlXHJcbiAgICovXHJcbiAgY2xlYXJVcmwocmVzZXRQb3BwaW5nU3RhdGU6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgY29uc3QgdXJsID0gbG9jYXRpb24uaHJlZjtcclxuICAgIGxldCBsID0gdXJsLmxlbmd0aDtcclxuICAgIHdoaWxlIChsID49IDAgJiYgdXJsW2wgLSAxXSA9PT0gJyMnKSBsLS07XHJcbiAgICBpZiAobCA8IHVybC5sZW5ndGgpXHJcbiAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAnJywgdXJsLnN1YnN0cmluZygwLCBsKSk7XHJcbiAgICBpZiAocmVzZXRQb3BwaW5nU3RhdGUpXHJcbiAgICAgIHRoaXMucG9wcGluZ1N0YXRlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSBhbGwgZGlhbG9nc1xyXG4gICAqL1xyXG4gIGNsb3NlQWxsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MuZm9yRWFjaChuID0+IHtcclxuICAgICAgbi5jbG9zZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbiBhIGRpYWxvZ1xyXG4gICAqIEBwYXJhbSBjb21wb25lbnQgOiB0aGUgY29tcG9uZW50XHJcbiAgICogQHBhcmFtIGNvbmZpZyA6IHRoZSBjb25maWdcclxuICAgKiBAcmV0dXJuczogdGhlIGRpYWxvZyBvYmplY3RcclxuICAgKi9cclxuICBvcGVuKGNvbXBvbmVudDogYW55LCBjb25maWc6IGFueSk6IE1hdERpYWxvZ1JlZjxhbnk+IHtcclxuICAgIGlmICghU3lzdGVtVXRpbHMuaXNCcm93c2VyKCkpIHJldHVybiBudWxsO1xyXG4gICAgdGhpcy5jbGVhckJ1c3koKTtcclxuICAgIHJldHVybiB0aGlzLm9wZW5EaWFsb2coY29tcG9uZW50LCBjb25maWcpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBPcGVuIGEgZGlhbG9nXHJcbiAqIEBwYXJhbSBjb21wb25lbnQgOiB0aGUgY29tcG9uZW50XHJcbiAqIEBwYXJhbSBjb25maWcgOiB0aGUgY29uZmlnXHJcbiAqIEByZXR1cm5zIDogdGhlIGRpYWxvZyBvYmplY3RcclxuICovXHJcbiAgcHJpdmF0ZSBvcGVuRGlhbG9nKGNvbXBvbmVudDogYW55LCBjb25maWc6IGFueSk6IE1hdERpYWxvZ1JlZjxhbnk+IHtcclxuICAgIC8vIFdlIHdpbGwgdGFrZSBjYXJlIG9mIG5hdmlnYXRpb25cclxuICAgIGNvbmZpZy5jbG9zZU9uTmF2aWdhdGlvbiA9IGZhbHNlO1xyXG4gICAgbGV0IGQgPSB0aGlzLmRpYWxvZy5vcGVuKGNvbXBvbmVudCwgY29uZmlnKTtcclxuICAgIGQuYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnB1c2hEaWFsb2coZC5pZCk7XHJcbiAgICB9KTtcclxuICAgIGQuYmVmb3JlQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5wb3BEaWFsb2coZC5pZCk7ICAgICAgIFxyXG4gICAgfSk7XHJcbiAgICBkLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgLy8gRmluYWwgY2xlYW51cCBvZiBtaWRkbGUgb2JqZWN0c1xyXG4gICAgICB0aGlzLmVycm9yRGlhbG9nUmVmID0gbnVsbDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBlbGVtZW50IGhlaWdodCBpbmNsdWRpbmcgbWFyZ2luc1xyXG4gICAqIEBwYXJhbSBlbGVtZW50IC0gZWxlbWVudFxyXG4gICAqIEByZXR1cm5zIHRoZSBoZWlnaHRcclxuICAgKi9cclxuICBwcml2YXRlIG91dGVySGVpZ2h0KGVsZW1lbnQ6IGFueSk6IG51bWJlciB7XHJcbiAgICBpZiAoIVN5c3RlbVV0aWxzLmlzQnJvd3NlcigpKSByZXR1cm4gMDtcclxuICAgIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgbGV0IGggPSBbJ3RvcCcsICdib3R0b20nXVxyXG4gICAgICAubWFwKHNpZGUgPT4gcGFyc2VJbnQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLScgKyBzaWRlKSkpXHJcbiAgICAgIC5yZWR1Y2UoKHRvdGFsLCBzaWRlKSA9PiB0b3RhbCArIHNpZGUsIGhlaWdodCk7XHJcbiAgICByZXR1cm4gaDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBjdXJyZW50IGRpYWxvZyBoZWlnaHRcclxuICAgKi9cclxuICBnZXRDdXJyZW50RGlhbG9nSGVpZ2h0KCk6IG51bWJlciB7XHJcbiAgICBpZiAoIVN5c3RlbVV0aWxzLmlzQnJvd3NlcigpKSByZXR1cm4gMDtcclxuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5wb3BIaXN0b3J5Lmxlbmd0aDtcclxuICAgIGlmIChjb3VudCA+IDApIHtcclxuICAgICAgbGV0IGlkID0gdGhpcy5wb3BIaXN0b3J5W2NvdW50IC0gMV0uaWQ7XHJcbiAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgICBpZiAoZWxlbSAmJiBlbGVtLmNsaWVudEhlaWdodCA+IDApIHJldHVybiBlbGVtLmNsaWVudEhlaWdodDtcclxuICAgIH1cclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGN1cnJlbnQgZGlhbG9nIHNjcm9sbGFibGUgaGVpZ2h0XHJcbiAgICovXHJcbiAgZ2V0Q3VycmVudERpYWxvZ1Njcm9sbGFibGVIZWlnaHQoXHJcbiAgICBmaXhlZFBhcnRzQ2xhc3NOYW1lOiBzdHJpbmdbXSxcclxuICAgIG1pbmltYWxIZWlnaHQ6IG51bWJlclxyXG4gICk6IG51bWJlciB7XHJcbiAgICBpZiAoIVN5c3RlbVV0aWxzLmlzQnJvd3NlcigpKSByZXR1cm4gMDtcclxuICAgIGxldCBoID0gdGhpcy5nZXRDdXJyZW50RGlhbG9nSGVpZ2h0KCk7XHJcbiAgICBpZiAoZml4ZWRQYXJ0c0NsYXNzTmFtZSkge1xyXG4gICAgICBmaXhlZFBhcnRzQ2xhc3NOYW1lLmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgY29uc3QgZWxlbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG4pO1xyXG4gICAgICAgIGlmIChlbGVtcykge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBoIC09IHRoaXMub3V0ZXJIZWlnaHQoZWxlbXNbaV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoaCA8IG1pbmltYWxIZWlnaHQpIGggPSBtaW5pbWFsSGVpZ2h0O1xyXG4gICAgcmV0dXJuIGg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQdXNoIGEgZGlhbG9nIGluZm8gdGhlIGhpc3RvcnlcclxuICAgKi9cclxuICBwcml2YXRlIHB1c2hEaWFsb2coaWQ6IHN0cmluZykge1xyXG4gICAgaWYgKCFTeXN0ZW1VdGlscy5pc0Jyb3dzZXIoKSkgcmV0dXJuO1xyXG4gICAgbGV0IGluZGV4ID0gaGlzdG9yeS5sZW5ndGg7XHJcbiAgICBoaXN0b3J5LnB1c2hTdGF0ZSh7IGluZGV4OiBpbmRleCB9LCBudWxsLCBsb2NhdGlvbi5ocmVmICsgJyMnKTtcclxuICAgIHRoaXMucG9wSGlzdG9yeS5wdXNoKHsgaWQ6IGlkLCB2YWx1ZTogaW5kZXggfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3AgYSBkaWFsb2cgZnJvbSB0aGUgaGlzdG9yeVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcG9wRGlhbG9nKGlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xyXG4gICAgaWYgKCFTeXN0ZW1VdGlscy5pc0Jyb3dzZXIoKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucG9wU3RhdGUpIHtcclxuICAgICAgdGhpcy5wb3BwaW5nU3RhdGUgPSB0cnVlO1xyXG4gICAgICBsZXQgcG9wcGVkID0gMTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgY29uc3QgcCA9IFN5c3RlbVV0aWxzLmFycmF5RmluZEluZGV4QnlLZXkodGhpcy5wb3BIaXN0b3J5LCAnaWQnLCBpZCk7XHJcbiAgICAgICAgaWYgKHAgIT0gLTEpIHtcclxuICAgICAgICAgIHBvcHBlZCA9IHRoaXMucG9wSGlzdG9yeVtwXS52YWx1ZSAtIGhpc3Rvcnkuc3RhdGUuaW5kZXg7XHJcbiAgICAgICAgICBpZiAocG9wcGVkKSBwb3BwZWQrKztcclxuICAgICAgICAgIGVsc2UgcG9wcGVkID0gMTtcclxuICAgICAgICAgIHRoaXMucG9wSGlzdG9yeS5zcGxpY2UocCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVybCA9IGxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgbGV0IGwgPSB1cmwubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChsID49IDAgJiYgdXJsW2wgLSAxXSA9PT0gJyMnICYmIHBvcHBlZCA+IDApIHtcclxuICAgICAgICAgIGwtLTtcclxuICAgICAgICAgIHBvcHBlZC0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobCA8IHVybC5sZW5ndGgpXHJcbiAgICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgJycsIHVybC5zdWJzdHJpbmcoMCwgbCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvcFN0YXRlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0aGUgYnVzeSBvdmVybGF5XHJcbiAgICogQHBhcmFtIHR5cGU6IHRoZSB0eXBlIG9mIHNwaW5uZXIgdG8gY3JlYXRlXHJcbiAgICogQHJldHVybnM6IHRoZSBuZXcgb3ZlcmxheVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQnVzeSgpOiBPdmVybGF5UmVmIHtcclxuICAgIHJldHVybiB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIGJhY2tkcm9wQ2xhc3M6J2J1c3ktYmFja2Ryb3AnLFxyXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkucG9zaXRpb24oKVxyXG4gICAgICAgIC5nbG9iYWwoKVxyXG4gICAgICAgIC5jZW50ZXJIb3Jpem9udGFsbHkoKVxyXG4gICAgICAgIC5jZW50ZXJWZXJ0aWNhbGx5KClcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYnVzeSBkaWFsb2dcclxuICAgKi9cclxuICBjbGVhckJ1c3koKSB7XHJcbiAgICB0aGlzLmJ1c3lEaWFsb2dSZWY/LmRldGFjaCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGJ1c3kgZGlhbG9nXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgOiBuZXcgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSBwcm9ncmVzcyA6IG5ldyBwcm9ncmVzc1xyXG4gICAqIEBwYXJhbSBwcm9ncmVzc01vZGUgOiBuZXcgbW9kZSAoZGVmYXVsdCA9ICdpbmRldGVybWluYXRlJylcclxuICAgKiBAcGFyYW0gdHlwZTogbmV3IHR5cGUgKGRlZmF1bHQgPSAnYmFyJylcclxuICAgKiBAcGFyYW0gYWN0aW9uIDogYWN0aW9uIHRvIGRvIGR1cmluZyB0aGUgZXhlY3V0aW9uIChvcHRpb25hbClcclxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGEgbmV3IHBvcHVwIGhhcyBiZWVuIG9wZW5lZFxyXG4gICAqL1xyXG4gIHNldEJ1c3koXHJcbiAgICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgICBwcm9ncmVzczogbnVtYmVyID0gLTEsXHJcbiAgICBwcm9ncmVzc01vZGU6ICdkZXRlcm1pbmF0ZScgfCAnaW5kZXRlcm1pbmF0ZScgPSAnaW5kZXRlcm1pbmF0ZScsXHJcbiAgICB0eXBlOiAnYmFyJyB8ICdzcGlubmVyJyB8ICd3YWl0JyA9ICdiYXInLFxyXG4gICAgYWN0aW9uOiBPYnNlcnZhYmxlPE9iamVjdD4gfCBudWxsID0gbnVsbFxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZXhpc3RzID0gdGhpcy5idXN5RGlhbG9nUmVmICYmIHRoaXMuYnVzeURpYWxvZ1JlZi5oYXNBdHRhY2hlZCgpO1xyXG4gICAgaWYgKGV4aXN0cykge1xyXG4gICAgICB0aGlzLmJ1c3lDb21wb25lbnRSZWYuaW5zdGFuY2Uuc2V0KG1lc3NhZ2UsIHByb2dyZXNzLCBwcm9ncmVzc01vZGUsIHR5cGUpOyAvLyBVc2UgdGhlIHNhbWUgICAgICBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE9wZW4gbmV3XHJcbiAgICAgIGlmICghdGhpcy5idXN5RGlhbG9nUmVmKVxyXG4gICAgICAgIHRoaXMuYnVzeURpYWxvZ1JlZiA9IHRoaXMuY3JlYXRlQnVzeSgpO1xyXG4gICAgICB0aGlzLmJ1c3lDb21wb25lbnRSZWYgPSB0aGlzLmJ1c3lEaWFsb2dSZWYuYXR0YWNoKG5ldyBDb21wb25lbnRQb3J0YWwoQnVzeURpYWxvZ0NvbXBvbmVudCkpO1xyXG4gICAgICB0aGlzLmJ1c3lDb21wb25lbnRSZWYuaW5zdGFuY2Uuc2V0KG1lc3NhZ2UsIHByb2dyZXNzLCBwcm9ncmVzc01vZGUsIHR5cGUpO1xyXG4gICAgICBpZiAoYWN0aW9uKSB7XHJcbiAgICAgICAgYWN0aW9uXHJcbiAgICAgICAgICAucGlwZShmaXJzdCgpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICFleGlzdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IGEgYnVzeSBkaWFsb2dcclxuICAgKiBAcGFyYW0gbWVzc2FnZSA6IG5ldyBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHByb2dyZXNzIDogbmV3IHByb2dyZXNzXHJcbiAgICogQHBhcmFtIHByb2dyZXNzTW9kZSA6IG5ldyBtb2RlIChkZWZhdWx0ID0gJ2luZGV0ZXJtaW5hdGUnKVxyXG4gICAqIEBwYXJhbSBhY3Rpb24gOiBhY3Rpb24gdG8gZG8gZHVyaW5nIHRoZSBleGVjdXRpb24gKG9wdGlvbmFsKVxyXG4gICAqIEByZXR1cm5zIHRydWUgaWYgYSBuZXcgcG9wdXAgaGFzIGJlZW4gb3BlbmVkXHJcbiAgICovXHJcbiAgYnVzeShtZXNzYWdlOiBzdHJpbmcsXHJcbiAgICBwcm9ncmVzczogbnVtYmVyID0gLTEsXHJcbiAgICBwcm9ncmVzc01vZGU6ICdkZXRlcm1pbmF0ZScgfCAnaW5kZXRlcm1pbmF0ZScgPSAnaW5kZXRlcm1pbmF0ZScsXHJcbiAgICBhY3Rpb246IE9ic2VydmFibGU8T2JqZWN0PiB8IG51bGwgPSBudWxsKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXRCdXN5KG1lc3NhZ2UsIHByb2dyZXNzLCBwcm9ncmVzc01vZGUsICdiYXInLCBhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIERpc3BsYXkgYSBidXN5IHNwaW5uZXIgZGlhbG9nXHJcbiAqIEBwYXJhbSBtZXNzYWdlIDogbmV3IG1lc3NhZ2VcclxuICogQHBhcmFtIHByb2dyZXNzIDogbmV3IHByb2dyZXNzXHJcbiAqIEBwYXJhbSBwcm9ncmVzc01vZGUgOiBuZXcgbW9kZSAoZGVmYXVsdCA9ICdpbmRldGVybWluYXRlJylcclxuICogQHBhcmFtIGFjdGlvbiA6IGFjdGlvbiB0byBkbyBkdXJpbmcgdGhlIGV4ZWN1dGlvbiAob3B0aW9uYWwpXHJcbiAqIEByZXR1cm5zIHRydWUgaWYgYSBuZXcgcG9wdXAgaGFzIGJlZW4gb3BlbmVkXHJcbiAqL1xyXG4gIGJ1c3lTcGlubmVyKG1lc3NhZ2U6IHN0cmluZyxcclxuICAgIHByb2dyZXNzOiBudW1iZXIgPSAtMSxcclxuICAgIHByb2dyZXNzTW9kZTogJ2RldGVybWluYXRlJyB8ICdpbmRldGVybWluYXRlJyA9ICdpbmRldGVybWluYXRlJyxcclxuICAgIGFjdGlvbjogT2JzZXJ2YWJsZTxPYmplY3Q+IHwgbnVsbCA9IG51bGwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNldEJ1c3kobWVzc2FnZSwgcHJvZ3Jlc3MsIHByb2dyZXNzTW9kZSwgJ3NwaW5uZXInLCBhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBEaXNwbGF5IGEgd2FpdCBzcGlubmVyIFxyXG4gICogQHBhcmFtIGFjdGlvbiA6IGFjdGlvbiB0byBkbyBkdXJpbmcgdGhlIGV4ZWN1dGlvbiAob3B0aW9uYWwpXHJcbiAgKiBAcmV0dXJucyB0cnVlIGlmIGEgbmV3IHBvcHVwIGhhcyBiZWVuIG9wZW5lZFxyXG4gICovXHJcbiAgd2FpdChcclxuICAgIGFjdGlvbjogT2JzZXJ2YWJsZTxPYmplY3Q+IHwgbnVsbCA9IG51bGwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNldEJ1c3kobnVsbCwgbnVsbCwgbnVsbCwgJ3dhaXQnLCBhY3Rpb24pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BsYXkgYW4gaW5mb3JtYXRpb24gZGlhbG9nXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgOiBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHRpdGxlIDogZGlhbG9nIHRpdGxlXHJcbiAgICogQHBhcmFtIG9rQ2FwdGlvbiA6IG9rIGJ1dHRvbiBjYXB0aW9uXHJcbiAgICogQHBhcmFtIHdpZHRoOiB0aGUgcHJlZmVycmVkIHdpZHRoXHJcbiAgICogQHBhcmFtIGRpc21pc3NBZnRlcjogaWYgc3BlY2lmaWVkLCB0aGUgZGlhbG9nIHdpbGwgYmUgY2xvc2VkIGFmdGVyIGRpc21pc3NBZnRlciBtaWxsaXNlY29uZHNcclxuICAgKiBAcGFyYW0gZGV0YWlsczogaWYgc3BlY2lmaWVkLCB0aGUgZGV0YWlscyBpbmZvXHJcbiAgICovXHJcbiAgaW5mbyhcclxuICAgIG1lc3NhZ2U6IHN0cmluZyxcclxuICAgIHRpdGxlOiBzdHJpbmcgPSAnSW5mb3JtYXppb25pJyxcclxuICAgIG9rQ2FwdGlvbjogc3RyaW5nID0gJ09rJyxcclxuICAgIHdpZHRoOiBudW1iZXIgPSA1MDAsXHJcbiAgICBkaXNtaXNzQWZ0ZXI6IG51bWJlciB8IG51bGwgPSBudWxsLFxyXG4gICAgZGV0YWlsczogc3RyaW5nIHwgbnVsbCA9IG51bGxcclxuICApOiBNYXREaWFsb2dSZWY8SW5mb0RpYWxvZ0NvbXBvbmVudD4ge1xyXG4gICAgcmV0dXJuIHRoaXMub3BlbihJbmZvRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIGFyaWFMYWJlbDogJ2luZm9ybWF6aW9uaScsXHJcbiAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXHJcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgIG9rQ2FwdGlvbjogb2tDYXB0aW9uLFxyXG4gICAgICAgIGRpc21pc3NBZnRlcjogZGlzbWlzc0FmdGVyLFxyXG4gICAgICAgIGRldGFpbHM6IGRldGFpbHMsXHJcbiAgICAgICAgYXBwZWFyYW5jZTogJ2ZpbGwnXHJcbiAgICAgIH0gYXMgSW5mb0RpYWxvZ0RhdGEsXHJcbiAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcclxuICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgIG1heFdpZHRoOiB3aWR0aCArICdweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJ1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IGFuIGVycm9yIGRpYWxvZ1xyXG4gICAqIEBwYXJhbSBtZXNzYWdlIDogbWVzc2FnZVxyXG4gICAqIEBwYXJhbSBsb2cgOiB0aGUgZXJyb3IgbG9nXHJcbiAgICogQHBhcmFtIHRpdGxlIDogZGlhbG9nIHRpdGxlXHJcbiAgICogQHBhcmFtIG9rQ2FwdGlvbiA6IG9rIGJ1dHRvbiBjYXB0aW9uXHJcbiAgICogQHBhcmFtIHdpZHRoOiB0aGUgcHJlZmVycmVkIHdpZHRoXHJcbiAgICogQHBhcmFtIGRpc21pc3NBZnRlcjogaWYgc3BlY2lmaWVkLCB0aGUgZGlhbG9nIHdpbGwgYmUgY2xvc2VkIGFmdGVyIGRpc21pc3NBZnRlciBtaWxsaXNlY29uZHMgICBcclxuICAgKi9cclxuICBlcnJvcihcclxuICAgIG1lc3NhZ2U6IHN0cmluZyxcclxuICAgIGxvZzogc3RyaW5nIHwgbnVsbCA9IG51bGwsXHJcbiAgICB0aXRsZTogc3RyaW5nID0gJ0Vycm9yZScsXHJcbiAgICBva0NhcHRpb246IHN0cmluZyA9ICdPaycsXHJcbiAgICB3aWR0aDogbnVtYmVyID0gNTAwLFxyXG4gICAgZGlzbWlzc0FmdGVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxyXG4gICk6IE1hdERpYWxvZ1JlZjxJbmZvRGlhbG9nQ29tcG9uZW50PiB7XHJcbiAgICBpZiAodGhpcy5lcnJvckRpYWxvZ1JlZikge1xyXG4gICAgICAvLyBKdXN0IGNoYW5nZSBjdXJyZW50IGVycm9yXHJcbiAgICAgIHRoaXMuZXJyb3JEaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uuc2V0RGF0YSgge1xyXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXHJcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgIGRldGFpbHM6IGxvZyxcclxuICAgICAgICBva0NhcHRpb246IG9rQ2FwdGlvbixcclxuICAgICAgICBkaXNtaXNzQWZ0ZXI6IGRpc21pc3NBZnRlclxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JEaWFsb2dSZWY7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVycm9yRGlhbG9nUmVmID0gdGhpcy5vcGVuKEluZm9EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgYXJpYUxhYmVsOiAnZXJyb3JlJyxcclxuICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IGZhbHNlLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcclxuICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgZGV0YWlsczogbG9nLFxyXG4gICAgICAgIG9rQ2FwdGlvbjogb2tDYXB0aW9uLFxyXG4gICAgICAgIGRpc21pc3NBZnRlcjogZGlzbWlzc0FmdGVyLFxyXG4gICAgICAgIGFwcGVhcmFuY2U6ICdmaWxsJ1xyXG4gICAgICB9IGFzIEluZm9EaWFsb2dEYXRhLFxyXG4gICAgICBjbG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogd2lkdGggKyAncHgnLFxyXG4gICAgICB3aWR0aDogJzk5JSdcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuZXJyb3JEaWFsb2dSZWY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IHRvYXN0XHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgOiBtZXNzYWdlIHRvIGRpc3BsYXlcclxuICAgKiBAcGFyYW0gZHVyYXRpb24gOiBkdXJhdGlvbiBpbiBtc2VjXHJcbiAgICogQHBhcmFtIGljb24gOiB0aGUgbWF0LWljb24gdG8gZGlzcGxheVxyXG4gICAqIEBwYXJhbSBhY3Rpb25DYXB0aW9uIGFjdGlvbiBidXR0b24gY2FwdGlvblxyXG4gICAqL1xyXG4gIHRvYXN0KFxyXG4gICAgbWVzc2FnZTogc3RyaW5nLFxyXG4gICAgZHVyYXRpb246IG51bWJlciA9IDIwMDAsXHJcbiAgICBpY29uOiBzdHJpbmcgPSAnY2hlY2snLFxyXG4gICAgYWN0aW9uQ2FwdGlvbjogc3RyaW5nIHwgbnVsbCA9IG51bGxcclxuICApOiBNYXRTbmFja0JhclJlZjxUb2FzdENvbXBvbmVudD4ge1xyXG4gICAgdGhpcy5jbGVhckJ1c3koKTtcclxuICAgIGlmIChkdXJhdGlvbiA9PT0gLTEpIGR1cmF0aW9uID0gMjAwMDsgLy8gZGVmYXVsdFxyXG4gICAgbGV0IHRvYXN0UmVmID0gdGhpcy5zbmFja0Jhci5vcGVuRnJvbUNvbXBvbmVudChUb2FzdENvbXBvbmVudCwge1xyXG4gICAgICBkdXJhdGlvbjogZHVyYXRpb24sXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxyXG4gICAgICAgIGljb246IGljb24sXHJcbiAgICAgICAgYWN0aW9uQ2FwdGlvbjogYWN0aW9uQ2FwdGlvblxyXG4gICAgICB9IGFzIFRvYXN0RGF0YVxyXG4gICAgfSk7XHJcbiAgICB0b2FzdFJlZi5pbnN0YW5jZS5hY3Rpb24uc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdG9hc3RSZWYuZGlzbWlzcygpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdG9hc3RSZWY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IGEgY29uZmlybSBkaWFsb2dcclxuICAgKiBAcGFyYW0gbWVzc2FnZSA6IGh0bWwgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSB0aXRsZSA6IGRpYWxvZyB0aXRsZVxyXG4gICAqIEBwYXJhbSBva0NhcHRpb24gOiBvayBidXR0b24gY2FwdGlvblxyXG4gICAqIEBwYXJhbSBjYW5jZWxDYXB0aW9uIDogY2FuY2VsIGJ1dHRvbiBjYXB0aW9uXHJcbiAgICogQHBhcmFtIG90aGVyQ2FwdGlvbiA6IG90aGVyIGJ1dHRvbiBjYXB0aW9uXHJcbiAgICogQHBhcmFtIG9wdGlvbnM6IGNoZWNrIGJveCBvcHRpb25zXHJcbiAgICogQHBhcmFtIHdpZHRoOiB0aGUgcHJlZmVycmVkIHdpZHRoXHJcbiAgICovXHJcbiAgY29uZmlybShcclxuICAgIG1lc3NhZ2U6IHN0cmluZyxcclxuICAgIHRpdGxlOiBzdHJpbmcgPSAnQ29uZmVybWEnLFxyXG4gICAgb2tDYXB0aW9uOiBzdHJpbmcgPSAnU2knLFxyXG4gICAgY2FuY2VsQ2FwdGlvbjogc3RyaW5nID0gJ05vJyxcclxuICAgIG90aGVyQ2FwdGlvbjogc3RyaW5nIHwgbnVsbCA9IG51bGwsXHJcbiAgICBvcHRpb25zOiBhbnkgfCBudWxsID0gbnVsbCxcclxuICAgIHdpZHRoOiBudW1iZXIgPSA1MDBcclxuICApIHtcclxuICAgIHJldHVybiB0aGlzLm9wZW4oQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdjb25mZXJtYScsXHJcbiAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXHJcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgIG9rQ2FwdGlvbjogb2tDYXB0aW9uLFxyXG4gICAgICAgIGNhbmNlbENhcHRpb246IGNhbmNlbENhcHRpb24sXHJcbiAgICAgICAgb3RoZXJDYXB0aW9uOiBvdGhlckNhcHRpb24sXHJcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcclxuICAgICAgICBhcHBlYXJhbmNlOiAnZmlsbCdcclxuICAgICAgfSBhcyBDb25maXJtRGlhbG9nRGF0YSxcclxuICAgICAgY2xvc2VPbk5hdmlnYXRpb246IGZhbHNlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsICAgXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogd2lkdGggKyAncHgnLFxyXG4gICAgICB3aWR0aDogJzk5JSdcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxufVxyXG5cclxuIl19
|
|
401
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvdWkvdWkvc2VydmljZXMvZGlhbG9nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUNMLG1CQUFtQixFQUNwQixNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFDTCxzQkFBc0IsRUFFdkIsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsbUJBQW1CLEVBRXBCLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBYSxNQUFNLGtDQUFrQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7OztBQU96QyxNQUFNLE9BQU8sYUFBYyxTQUFRLFNBQVM7SUFTMUMsWUFDUyxNQUFpQixFQUNqQixPQUFnQixFQUNoQixRQUFxQixFQUNyQixRQUEwQjtRQUVqQyxLQUFLLEVBQUUsQ0FBQztRQUxELFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQWtCO1FBUjNCLGVBQVUsR0FBUSxFQUFFLENBQUM7UUFDckIsYUFBUSxHQUFZLElBQUksQ0FBQztRQUN6QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQVVwQyxrREFBa0Q7UUFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FB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SUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQ3ZDLFNBQVMsRUFBRSxVQUFVO1lBQ3JCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsWUFBWSxFQUFFLEtBQUs7WUFDbkIsSUFBSSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixLQUFLLEVBQUUsS0FBSztnQkFDWixTQUFTLEVBQUUsU0FBUztnQkFDcEIsYUFBYSxFQUFFLGFBQWE7Z0JBQzVCLFlBQVksRUFBRSxZQUFZO2dCQUMxQixPQUFPLEVBQUUsT0FBTztnQkFDaEIsVUFBVSxFQUFFLE1BQU07YUFDRTtZQUN0QixpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFFBQVEsRUFBRSxLQUFLLEdBQUcsSUFBSTtZQUN0QixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBbmJVLGFBQWE7a0hBQWIsYUFBYSxjQUZaLE1BQU07OzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7IFBsYXRmb3JtTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnRSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciwgTWF0U25hY2tCYXJSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7XHJcbiAgQnVzeURpYWxvZ0NvbXBvbmVudFxyXG59IGZyb20gJy4uL2RpYWxvZ3MvYnVzeS9idXN5LWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIENvbmZpcm1EaWFsb2dDb21wb25lbnQsXHJcbiAgQ29uZmlybURpYWxvZ0RhdGFcclxufSBmcm9tICcuLi9kaWFsb2dzL2NvbmZpcm0vY29uZmlybS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBJbmZvRGlhbG9nQ29tcG9uZW50LFxyXG4gIEluZm9EaWFsb2dEYXRhXHJcbn0gZnJvbSAnLi4vZGlhbG9ncy9pbmZvL2luZm8tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvYXN0Q29tcG9uZW50LCBUb2FzdERhdGEgfSBmcm9tICcuLi9kaWFsb2dzL3RvYXN0L3RvYXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFVJU2VydmljZSB9IGZyb20gJy4vdWkuc2VydmljZSc7XHJcblxyXG5cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ1NlcnZpY2UgZXh0ZW5kcyBVSVNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIGJ1c3lEaWFsb2dSZWY6IE92ZXJsYXlSZWY7XHJcbiAgcHJpdmF0ZSBidXN5Q29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8QnVzeURpYWxvZ0NvbXBvbmVudD47XHJcbiAgcHJpdmF0ZSBlcnJvckRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEluZm9EaWFsb2dDb21wb25lbnQ+O1xyXG4gIHByaXZhdGUgcG9wSGlzdG9yeTogYW55ID0gW107XHJcbiAgcHJpdmF0ZSBwb3BTdGF0ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBwb3BwaW5nU3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwdWJsaWMgb3ZlcmxheTogT3ZlcmxheSxcclxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBwdWJsaWMgbG9jYXRpb246IFBsYXRmb3JtTG9jYXRpb24sXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIC8vIEhhbmRsZSBkaWFsb2cgY2xvc2Ugd2hlbiBiYWNrIGJ1dHRvbiBpcyBjbGlja2VkXHJcbiAgICB0aGlzLmxvY2F0aW9uLm9uUG9wU3RhdGUoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMucG9wcGluZ1N0YXRlKSB7XHJcbiAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGNvdW50ID4gMCkge1xyXG4gICAgICAgICAgLy8gRGlzYWJsZSBwb3Agc2F0ZSBpZiBjYXNlXHJcbiAgICAgICAgICB0aGlzLnBvcFN0YXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyBDbG9zZSBkaWFsb2dcclxuICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzW2NvdW50IC0gMV0uY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB0aGlzLnBvcHBpbmdTdGF0ZSA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciB1cmwgZnJvbSAjIGluIGNhc2Ugb2YgcGFnZSByZWxvYWRcclxuICAgKiBAcGFyYW0gcmVzZXRQb3BwaW5nU3RhdGU6IHRydWUgaWYgcG9wcGluZyBzdGF0ZSBzaG91bGQgYmUgc2V0IHRvIGZhbHNlXHJcbiAgICovXHJcbiAgY2xlYXJVcmwocmVzZXRQb3BwaW5nU3RhdGU6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgY29uc3QgdXJsID0gbG9jYXRpb24uaHJlZjtcclxuICAgIGxldCBsID0gdXJsLmxlbmd0aDtcclxuICAgIHdoaWxlIChsID49IDAgJiYgdXJsW2wgLSAxXSA9PT0gJyMnKSBsLS07XHJcbiAgICBpZiAobCA8IHVybC5sZW5ndGgpXHJcbiAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAnJywgdXJsLnN1YnN0cmluZygwLCBsKSk7XHJcbiAgICBpZiAocmVzZXRQb3BwaW5nU3RhdGUpXHJcbiAgICAgIHRoaXMucG9wcGluZ1N0YXRlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSBhbGwgZGlhbG9nc1xyXG4gICAqL1xyXG4gIGNsb3NlQWxsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MuZm9yRWFjaChuID0+IHtcclxuICAgICAgbi5jbG9zZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbiBhIGRpYWxvZ1xyXG4gICAqIEBwYXJhbSBjb21wb25lbnQgOiB0aGUgY29tcG9uZW50XHJcbiAgICogQHBhcmFtIGNvbmZpZyA6IHRoZSBjb25maWdcclxuICAgKiBAcmV0dXJuczogdGhlIGRpYWxvZyBvYmplY3RcclxuICAgKi9cclxuICBvcGVuKGNvbXBvbmVudDogYW55LCBjb25maWc6IGFueSk6IE1hdERpYWxvZ1JlZjxhbnk+IHtcclxuICAgIGlmICghU3lzdGVtVXRpbHMuaXNCcm93c2VyKCkpIHJldHVybiBudWxsO1xyXG4gICAgdGhpcy5jbGVhckJ1c3koKTtcclxuICAgIHJldHVybiB0aGlzLm9wZW5EaWFsb2coY29tcG9uZW50LCBjb25maWcpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBPcGVuIGEgZGlhbG9nXHJcbiAqIEBwYXJhbSBjb21wb25lbnQgOiB0aGUgY29tcG9uZW50XHJcbiAqIEBwYXJhbSBjb25maWcgOiB0aGUgY29uZmlnXHJcbiAqIEByZXR1cm5zIDogdGhlIGRpYWxvZyBvYmplY3RcclxuICovXHJcbiAgcHJpdmF0ZSBvcGVuRGlhbG9nKGNvbXBvbmVudDogYW55LCBjb25maWc6IGFueSk6IE1hdERpYWxvZ1JlZjxhbnk+IHtcclxuICAgIC8vIFdlIHdpbGwgdGFrZSBjYXJlIG9mIG5hdmlnYXRpb25cclxuICAgIGNvbmZpZy5jbG9zZU9uTmF2aWdhdGlvbiA9IGZhbHNlO1xyXG4gICAgbGV0IGQgPSB0aGlzLmRpYWxvZy5vcGVuKGNvbXBvbmVudCwgY29uZmlnKTtcclxuICAgIGQuYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnB1c2hEaWFsb2coZC5pZCk7XHJcbiAgICB9KTtcclxuICAgIGQuYmVmb3JlQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5wb3BEaWFsb2coZC5pZCk7ICAgICAgIFxyXG4gICAgfSk7XHJcbiAgICBkLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgLy8gRmluYWwgY2xlYW51cCBvZiBtaWRkbGUgb2JqZWN0c1xyXG4gICAgICB0aGlzLmVycm9yRGlhbG9nUmVmID0gbnVsbDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBlbGVtZW50IGhlaWdodCBpbmNsdWRpbmcgbWFyZ2luc1xyXG4gICAqIEBwYXJhbSBlbGVtZW50IC0gZWxlbWVudFxyXG4gICAqIEByZXR1cm5zIHRoZSBoZWlnaHRcclxuICAgKi9cclxuICBwcml2YXRlIG91dGVySGVpZ2h0KGVsZW1lbnQ6IGFueSk6IG51bWJlciB7XHJcbiAgICBpZiAoIVN5c3RlbVV0aWxzLmlzQnJvd3NlcigpKSByZXR1cm4gMDtcclxuICAgIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgbGV0IGggPSBbJ3RvcCcsICdib3R0b20nXVxyXG4gICAgICAubWFwKHNpZGUgPT4gcGFyc2VJbnQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLScgKyBzaWRlKSkpXHJcbiAgICAgIC5yZWR1Y2UoKHRvdGFsLCBzaWRlKSA9PiB0b3RhbCArIHNpZGUsIGhlaWdodCk7XHJcbiAgICByZXR1cm4gaDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBjdXJyZW50IGRpYWxvZyBoZWlnaHRcclxuICAgKi9cclxuICBnZXRDdXJyZW50RGlhbG9nSGVpZ2h0KCk6IG51bWJlciB7XHJcbiAgICBpZiAoIVN5c3RlbVV0aWxzLmlzQnJvd3NlcigpKSByZXR1cm4gMDtcclxuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5wb3BIaXN0b3J5Lmxlbmd0aDtcclxuICAgIGlmIChjb3VudCA+IDApIHtcclxuICAgICAgbGV0IGlkID0gdGhpcy5wb3BIaXN0b3J5W2NvdW50IC0gMV0uaWQ7XHJcbiAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgICBpZiAoZWxlbSAmJiBlbGVtLmNsaWVudEhlaWdodCA+IDApIHJldHVybiBlbGVtLmNsaWVudEhlaWdodDtcclxuICAgIH1cclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGN1cnJlbnQgZGlhbG9nIHNjcm9sbGFibGUgaGVpZ2h0XHJcbiAgICovXHJcbiAgZ2V0Q3VycmVudERpYWxvZ1Njcm9sbGFibGVIZWlnaHQoXHJcbiAgICBmaXhlZFBhcnRzQ2xhc3NOYW1lOiBzdHJpbmdbXSxcclxuICAgIG1pbmltYWxIZWlnaHQ6IG51bWJlclxyXG4gICk6IG51bWJlciB7XHJcbiAgICBpZiAoIVN5c3RlbVV0aWxzLmlzQnJvd3NlcigpKSByZXR1cm4gMDtcclxuICAgIGxldCBoID0gdGhpcy5nZXRDdXJyZW50RGlhbG9nSGVpZ2h0KCk7XHJcbiAgICBpZiAoaCA8IG1pbmltYWxIZWlnaHQpIHsgXHJcbiAgICAgIGggPSBtaW5pbWFsSGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgaWYgKGZpeGVkUGFydHNDbGFzc05hbWUpIHtcclxuICAgICAgZml4ZWRQYXJ0c0NsYXNzTmFtZS5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgIGNvbnN0IGVsZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShuKTtcclxuICAgICAgICBpZiAoZWxlbXMpIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaCAtPSB0aGlzLm91dGVySGVpZ2h0KGVsZW1zW2ldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQdXNoIGEgZGlhbG9nIGluZm8gdGhlIGhpc3RvcnlcclxuICAgKi9cclxuICBwcml2YXRlIHB1c2hEaWFsb2coaWQ6IHN0cmluZykge1xyXG4gICAgaWYgKCFTeXN0ZW1VdGlscy5pc0Jyb3dzZXIoKSkgcmV0dXJuO1xyXG4gICAgbGV0IGluZGV4ID0gaGlzdG9yeS5sZW5ndGg7XHJcbiAgICBoaXN0b3J5LnB1c2hTdGF0ZSh7IGluZGV4OiBpbmRleCB9LCBudWxsLCBsb2NhdGlvbi5ocmVmICsgJyMnKTtcclxuICAgIHRoaXMucG9wSGlzdG9yeS5wdXNoKHsgaWQ6IGlkLCB2YWx1ZTogaW5kZXggfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3AgYSBkaWFsb2cgZnJvbSB0aGUgaGlzdG9yeVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcG9wRGlhbG9nKGlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xyXG4gICAgaWYgKCFTeXN0ZW1VdGlscy5pc0Jyb3dzZXIoKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucG9wU3RhdGUpIHtcclxuICAgICAgdGhpcy5wb3BwaW5nU3RhdGUgPSB0cnVlO1xyXG4gICAgICBsZXQgcG9wcGVkID0gMTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgY29uc3QgcCA9IFN5c3RlbVV0aWxzLmFycmF5RmluZEluZGV4QnlLZXkodGhpcy5wb3BIaXN0b3J5LCAnaWQnLCBpZCk7XHJcbiAgICAgICAgaWYgKHAgIT0gLTEpIHtcclxuICAgICAgICAgIHBvcHBlZCA9IHRoaXMucG9wSGlzdG9yeVtwXS52YWx1ZSAtIGhpc3Rvcnkuc3RhdGUuaW5kZXg7XHJcbiAgICAgICAgICBpZiAocG9wcGVkKSBwb3BwZWQrKztcclxuICAgICAgICAgIGVsc2UgcG9wcGVkID0gMTtcclxuICAgICAgICAgIHRoaXMucG9wSGlzdG9yeS5zcGxpY2UocCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVybCA9IGxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgbGV0IGwgPSB1cmwubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChsID49IDAgJiYgdXJsW2wgLSAxXSA9PT0gJyMnICYmIHBvcHBlZCA+IDApIHtcclxuICAgICAgICAgIGwtLTtcclxuICAgICAgICAgIHBvcHBlZC0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobCA8IHVybC5sZW5ndGgpXHJcbiAgICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgJycsIHVybC5zdWJzdHJpbmcoMCwgbCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvcFN0YXRlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0aGUgYnVzeSBvdmVybGF5XHJcbiAgICogQHBhcmFtIHR5cGU6IHRoZSB0eXBlIG9mIHNwaW5uZXIgdG8gY3JlYXRlXHJcbiAgICogQHJldHVybnM6IHRoZSBuZXcgb3ZlcmxheVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQnVzeSgpOiBPdmVybGF5UmVmIHtcclxuICAgIHJldHVybiB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIGJhY2tkcm9wQ2xhc3M6J2J1c3ktYmFja2Ryb3AnLFxyXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkucG9zaXRpb24oKVxyXG4gICAgICAgIC5nbG9iYWwoKVxyXG4gICAgICAgIC5jZW50ZXJIb3Jpem9udGFsbHkoKVxyXG4gICAgICAgIC5jZW50ZXJWZXJ0aWNhbGx5KClcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYnVzeSBkaWFsb2dcclxuICAgKi9cclxuICBjbGVhckJ1c3koKSB7XHJcbiAgICB0aGlzLmJ1c3lEaWFsb2dSZWY/LmRldGFjaCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGJ1c3kgZGlhbG9nXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgOiBuZXcgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSBwcm9ncmVzcyA6IG5ldyBwcm9ncmVzc1xyXG4gICAqIEBwYXJhbSBwcm9ncmVzc01vZGUgOiBuZXcgbW9kZSAoZGVmYXVsdCA9ICdpbmRldGVybWluYXRlJylcclxuICAgKiBAcGFyYW0gdHlwZTogbmV3IHR5cGUgKGRlZmF1bHQgPSAnYmFyJylcclxuICAgKiBAcGFyYW0gYWN0aW9uIDogYWN0aW9uIHRvIGRvIGR1cmluZyB0aGUgZXhlY3V0aW9uIChvcHRpb25hbClcclxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGEgbmV3IHBvcHVwIGhhcyBiZWVuIG9wZW5lZFxyXG4gICAqL1xyXG4gIHNldEJ1c3koXHJcbiAgICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgICBwcm9ncmVzczogbnVtYmVyID0gLTEsXHJcbiAgICBwcm9ncmVzc01vZGU6ICdkZXRlcm1pbmF0ZScgfCAnaW5kZXRlcm1pbmF0ZScgPSAnaW5kZXRlcm1pbmF0ZScsXHJcbiAgICB0eXBlOiAnYmFyJyB8ICdzcGlubmVyJyB8ICd3YWl0JyA9ICdiYXInLFxyXG4gICAgYWN0aW9uOiBPYnNlcnZhYmxlPE9iamVjdD4gfCBudWxsID0gbnVsbFxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZXhpc3RzID0gdGhpcy5idXN5RGlhbG9nUmVmICYmIHRoaXMuYnVzeURpYWxvZ1JlZi5oYXNBdHRhY2hlZCgpO1xyXG4gICAgaWYgKGV4aXN0cykge1xyXG4gICAgICB0aGlzLmJ1c3lDb21wb25lbnRSZWYuaW5zdGFuY2Uuc2V0KG1lc3NhZ2UsIHByb2dyZXNzLCBwcm9ncmVzc01vZGUsIHR5cGUpOyAvLyBVc2UgdGhlIHNhbWUgICAgICBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE9wZW4gbmV3XHJcbiAgICAgIGlmICghdGhpcy5idXN5RGlhbG9nUmVmKVxyXG4gICAgICAgIHRoaXMuYnVzeURpYWxvZ1JlZiA9IHRoaXMuY3JlYXRlQnVzeSgpO1xyXG4gICAgICB0aGlzLmJ1c3lDb21wb25lbnRSZWYgPSB0aGlzLmJ1c3lEaWFsb2dSZWYuYXR0YWNoKG5ldyBDb21wb25lbnRQb3J0YWwoQnVzeURpYWxvZ0NvbXBvbmVudCkpO1xyXG4gICAgICB0aGlzLmJ1c3lDb21wb25lbnRSZWYuaW5zdGFuY2Uuc2V0KG1lc3NhZ2UsIHByb2dyZXNzLCBwcm9ncmVzc01vZGUsIHR5cGUpO1xyXG4gICAgICBpZiAoYWN0aW9uKSB7XHJcbiAgICAgICAgYWN0aW9uXHJcbiAgICAgICAgICAucGlwZShmaXJzdCgpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICFleGlzdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IGEgYnVzeSBkaWFsb2dcclxuICAgKiBAcGFyYW0gbWVzc2FnZSA6IG5ldyBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHByb2dyZXNzIDogbmV3IHByb2dyZXNzXHJcbiAgICogQHBhcmFtIHByb2dyZXNzTW9kZSA6IG5ldyBtb2RlIChkZWZhdWx0ID0gJ2luZGV0ZXJtaW5hdGUnKVxyXG4gICAqIEBwYXJhbSBhY3Rpb24gOiBhY3Rpb24gdG8gZG8gZHVyaW5nIHRoZSBleGVjdXRpb24gKG9wdGlvbmFsKVxyXG4gICAqIEByZXR1cm5zIHRydWUgaWYgYSBuZXcgcG9wdXAgaGFzIGJlZW4gb3BlbmVkXHJcbiAgICovXHJcbiAgYnVzeShtZXNzYWdlOiBzdHJpbmcsXHJcbiAgICBwcm9ncmVzczogbnVtYmVyID0gLTEsXHJcbiAgICBwcm9ncmVzc01vZGU6ICdkZXRlcm1pbmF0ZScgfCAnaW5kZXRlcm1pbmF0ZScgPSAnaW5kZXRlcm1pbmF0ZScsXHJcbiAgICBhY3Rpb246IE9ic2VydmFibGU8T2JqZWN0PiB8IG51bGwgPSBudWxsKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXRCdXN5KG1lc3NhZ2UsIHByb2dyZXNzLCBwcm9ncmVzc01vZGUsICdiYXInLCBhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIERpc3BsYXkgYSBidXN5IHNwaW5uZXIgZGlhbG9nXHJcbiAqIEBwYXJhbSBtZXNzYWdlIDogbmV3IG1lc3NhZ2VcclxuICogQHBhcmFtIHByb2dyZXNzIDogbmV3IHByb2dyZXNzXHJcbiAqIEBwYXJhbSBwcm9ncmVzc01vZGUgOiBuZXcgbW9kZSAoZGVmYXVsdCA9ICdpbmRldGVybWluYXRlJylcclxuICogQHBhcmFtIGFjdGlvbiA6IGFjdGlvbiB0byBkbyBkdXJpbmcgdGhlIGV4ZWN1dGlvbiAob3B0aW9uYWwpXHJcbiAqIEByZXR1cm5zIHRydWUgaWYgYSBuZXcgcG9wdXAgaGFzIGJlZW4gb3BlbmVkXHJcbiAqL1xyXG4gIGJ1c3lTcGlubmVyKG1lc3NhZ2U6IHN0cmluZyxcclxuICAgIHByb2dyZXNzOiBudW1iZXIgPSAtMSxcclxuICAgIHByb2dyZXNzTW9kZTogJ2RldGVybWluYXRlJyB8ICdpbmRldGVybWluYXRlJyA9ICdpbmRldGVybWluYXRlJyxcclxuICAgIGFjdGlvbjogT2JzZXJ2YWJsZTxPYmplY3Q+IHwgbnVsbCA9IG51bGwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNldEJ1c3kobWVzc2FnZSwgcHJvZ3Jlc3MsIHByb2dyZXNzTW9kZSwgJ3NwaW5uZXInLCBhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBEaXNwbGF5IGEgd2FpdCBzcGlubmVyIFxyXG4gICogQHBhcmFtIGFjdGlvbiA6IGFjdGlvbiB0byBkbyBkdXJpbmcgdGhlIGV4ZWN1dGlvbiAob3B0aW9uYWwpXHJcbiAgKiBAcmV0dXJucyB0cnVlIGlmIGEgbmV3IHBvcHVwIGhhcyBiZWVuIG9wZW5lZFxyXG4gICovXHJcbiAgd2FpdChcclxuICAgIGFjdGlvbjogT2JzZXJ2YWJsZTxPYmplY3Q+IHwgbnVsbCA9IG51bGwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNldEJ1c3kobnVsbCwgbnVsbCwgbnVsbCwgJ3dhaXQnLCBhY3Rpb24pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BsYXkgYW4gaW5mb3JtYXRpb24gZGlhbG9nXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgOiBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHRpdGxlIDogZGlhbG9nIHRpdGxlXHJcbiAgICogQHBhcmFtIG9rQ2FwdGlvbiA6IG9rIGJ1dHRvbiBjYXB0aW9uXHJcbiAgICogQHBhcmFtIHdpZHRoOiB0aGUgcHJlZmVycmVkIHdpZHRoXHJcbiAgICogQHBhcmFtIGRpc21pc3NBZnRlcjogaWYgc3BlY2lmaWVkLCB0aGUgZGlhbG9nIHdpbGwgYmUgY2xvc2VkIGFmdGVyIGRpc21pc3NBZnRlciBtaWxsaXNlY29uZHNcclxuICAgKiBAcGFyYW0gZGV0YWlsczogaWYgc3BlY2lmaWVkLCB0aGUgZGV0YWlscyBpbmZvXHJcbiAgICovXHJcbiAgaW5mbyhcclxuICAgIG1lc3NhZ2U6IHN0cmluZyxcclxuICAgIHRpdGxlOiBzdHJpbmcgPSAnSW5mb3JtYXppb25pJyxcclxuICAgIG9rQ2FwdGlvbjogc3RyaW5nID0gJ09rJyxcclxuICAgIHdpZHRoOiBudW1iZXIgPSA1MDAsXHJcbiAgICBkaXNtaXNzQWZ0ZXI6IG51bWJlciB8IG51bGwgPSBudWxsLFxyXG4gICAgZGV0YWlsczogc3RyaW5nIHwgbnVsbCA9IG51bGxcclxuICApOiBNYXREaWFsb2dSZWY8SW5mb0RpYWxvZ0NvbXBvbmVudD4ge1xyXG4gICAgcmV0dXJuIHRoaXMub3BlbihJbmZvRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIGFyaWFMYWJlbDogJ2luZm9ybWF6aW9uaScsXHJcbiAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXHJcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgIG9rQ2FwdGlvbjogb2tDYXB0aW9uLFxyXG4gICAgICAgIGRpc21pc3NBZnRlcjogZGlzbWlzc0FmdGVyLFxyXG4gICAgICAgIGRldGFpbHM6IGRldGFpbHMsXHJcbiAgICAgICAgYXBwZWFyYW5jZTogJ2ZpbGwnXHJcbiAgICAgIH0gYXMgSW5mb0RpYWxvZ0RhdGEsXHJcbiAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcclxuICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgIG1heFdpZHRoOiB3aWR0aCArICdweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJ1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IGFuIGVycm9yIGRpYWxvZ1xyXG4gICAqIEBwYXJhbSBtZXNzYWdlIDogbWVzc2FnZVxyXG4gICAqIEBwYXJhbSBsb2cgOiB0aGUgZXJyb3IgbG9nXHJcbiAgICogQHBhcmFtIHRpdGxlIDogZGlhbG9nIHRpdGxlXHJcbiAgICogQHBhcmFtIG9rQ2FwdGlvbiA6IG9rIGJ1dHRvbiBjYXB0aW9uXHJcbiAgICogQHBhcmFtIHdpZHRoOiB0aGUgcHJlZmVycmVkIHdpZHRoXHJcbiAgICogQHBhcmFtIGRpc21pc3NBZnRlcjogaWYgc3BlY2lmaWVkLCB0aGUgZGlhbG9nIHdpbGwgYmUgY2xvc2VkIGFmdGVyIGRpc21pc3NBZnRlciBtaWxsaXNlY29uZHMgICBcclxuICAgKi9cclxuICBlcnJvcihcclxuICAgIG1lc3NhZ2U6IHN0cmluZyxcclxuICAgIGxvZzogc3RyaW5nIHwgbnVsbCA9IG51bGwsXHJcbiAgICB0aXRsZTogc3RyaW5nID0gJ0Vycm9yZScsXHJcbiAgICBva0NhcHRpb246IHN0cmluZyA9ICdPaycsXHJcbiAgICB3aWR0aDogbnVtYmVyID0gNTAwLFxyXG4gICAgZGlzbWlzc0FmdGVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxyXG4gICk6IE1hdERpYWxvZ1JlZjxJbmZvRGlhbG9nQ29tcG9uZW50PiB7XHJcbiAgICBpZiAodGhpcy5lcnJvckRpYWxvZ1JlZikge1xyXG4gICAgICAvLyBKdXN0IGNoYW5nZSBjdXJyZW50IGVycm9yXHJcbiAgICAgIHRoaXMuZXJyb3JEaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uuc2V0RGF0YSgge1xyXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXHJcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgIGRldGFpbHM6IGxvZyxcclxuICAgICAgICBva0NhcHRpb246IG9rQ2FwdGlvbixcclxuICAgICAgICBkaXNtaXNzQWZ0ZXI6IGRpc21pc3NBZnRlclxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JEaWFsb2dSZWY7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVycm9yRGlhbG9nUmVmID0gdGhpcy5vcGVuKEluZm9EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgYXJpYUxhYmVsOiAnZXJyb3JlJyxcclxuICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IGZhbHNlLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcclxuICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgZGV0YWlsczogbG9nLFxyXG4gICAgICAgIG9rQ2FwdGlvbjogb2tDYXB0aW9uLFxyXG4gICAgICAgIGRpc21pc3NBZnRlcjogZGlzbWlzc0FmdGVyLFxyXG4gICAgICAgIGFwcGVhcmFuY2U6ICdmaWxsJ1xyXG4gICAgICB9IGFzIEluZm9EaWFsb2dEYXRhLFxyXG4gICAgICBjbG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogd2lkdGggKyAncHgnLFxyXG4gICAgICB3aWR0aDogJzk5JSdcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuZXJyb3JEaWFsb2dSZWY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IHRvYXN0XHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgOiBtZXNzYWdlIHRvIGRpc3BsYXlcclxuICAgKiBAcGFyYW0gZHVyYXRpb24gOiBkdXJhdGlvbiBpbiBtc2VjXHJcbiAgICogQHBhcmFtIGljb24gOiB0aGUgbWF0LWljb24gdG8gZGlzcGxheVxyXG4gICAqIEBwYXJhbSBhY3Rpb25DYXB0aW9uIGFjdGlvbiBidXR0b24gY2FwdGlvblxyXG4gICAqL1xyXG4gIHRvYXN0KFxyXG4gICAgbWVzc2FnZTogc3RyaW5nLFxyXG4gICAgZHVyYXRpb246IG51bWJlciA9IDIwMDAsXHJcbiAgICBpY29uOiBzdHJpbmcgPSAnY2hlY2snLFxyXG4gICAgYWN0aW9uQ2FwdGlvbjogc3RyaW5nIHwgbnVsbCA9IG51bGxcclxuICApOiBNYXRTbmFja0JhclJlZjxUb2FzdENvbXBvbmVudD4ge1xyXG4gICAgdGhpcy5jbGVhckJ1c3koKTtcclxuICAgIGlmIChkdXJhdGlvbiA9PT0gLTEpIGR1cmF0aW9uID0gMjAwMDsgLy8gZGVmYXVsdFxyXG4gICAgbGV0IHRvYXN0UmVmID0gdGhpcy5zbmFja0Jhci5vcGVuRnJvbUNvbXBvbmVudChUb2FzdENvbXBvbmVudCwge1xyXG4gICAgICBkdXJhdGlvbjogZHVyYXRpb24sXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxyXG4gICAgICAgIGljb246IGljb24sXHJcbiAgICAgICAgYWN0aW9uQ2FwdGlvbjogYWN0aW9uQ2FwdGlvblxyXG4gICAgICB9IGFzIFRvYXN0RGF0YVxyXG4gICAgfSk7XHJcbiAgICB0b2FzdFJlZi5pbnN0YW5jZS5hY3Rpb24uc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdG9hc3RSZWYuZGlzbWlzcygpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdG9hc3RSZWY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IGEgY29uZmlybSBkaWFsb2dcclxuICAgKiBAcGFyYW0gbWVzc2FnZSA6IGh0bWwgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSB0aXRsZSA6IGRpYWxvZyB0aXRsZVxyXG4gICAqIEBwYXJhbSBva0NhcHRpb24gOiBvayBidXR0b24gY2FwdGlvblxyXG4gICAqIEBwYXJhbSBjYW5jZWxDYXB0aW9uIDogY2FuY2VsIGJ1dHRvbiBjYXB0aW9uXHJcbiAgICogQHBhcmFtIG90aGVyQ2FwdGlvbiA6IG90aGVyIGJ1dHRvbiBjYXB0aW9uXHJcbiAgICogQHBhcmFtIG9wdGlvbnM6IGNoZWNrIGJveCBvcHRpb25zXHJcbiAgICogQHBhcmFtIHdpZHRoOiB0aGUgcHJlZmVycmVkIHdpZHRoXHJcbiAgICovXHJcbiAgY29uZmlybShcclxuICAgIG1lc3NhZ2U6IHN0cmluZyxcclxuICAgIHRpdGxlOiBzdHJpbmcgPSAnQ29uZmVybWEnLFxyXG4gICAgb2tDYXB0aW9uOiBzdHJpbmcgPSAnU2knLFxyXG4gICAgY2FuY2VsQ2FwdGlvbjogc3RyaW5nID0gJ05vJyxcclxuICAgIG90aGVyQ2FwdGlvbjogc3RyaW5nIHwgbnVsbCA9IG51bGwsXHJcbiAgICBvcHRpb25zOiBhbnkgfCBudWxsID0gbnVsbCxcclxuICAgIHdpZHRoOiBudW1iZXIgPSA1MDBcclxuICApIHtcclxuICAgIHJldHVybiB0aGlzLm9wZW4oQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdjb25mZXJtYScsXHJcbiAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXHJcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgIG9rQ2FwdGlvbjogb2tDYXB0aW9uLFxyXG4gICAgICAgIGNhbmNlbENhcHRpb246IGNhbmNlbENhcHRpb24sXHJcbiAgICAgICAgb3RoZXJDYXB0aW9uOiBvdGhlckNhcHRpb24sXHJcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcclxuICAgICAgICBhcHBlYXJhbmNlOiAnZmlsbCdcclxuICAgICAgfSBhcyBDb25maXJtRGlhbG9nRGF0YSxcclxuICAgICAgY2xvc2VPbk5hdmlnYXRpb246IGZhbHNlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsICAgXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogd2lkdGggKyAncHgnLFxyXG4gICAgICB3aWR0aDogJzk5JSdcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxufVxyXG5cclxuIl19
|