@netgrif/components
Version:
Netgrif Application Engine frontend Angular components
61 lines • 18.9 kB
JavaScript
import { Component, Inject } from '@angular/core';
import { animate, state, style, transition, trigger } from '@angular/animations';
import { AbstractImportNetComponent, NAE_SIDE_MENU_CONTROL } from '@netgrif/components-core';
import * as i0 from "@angular/core";
import * as i1 from "@netgrif/components-core";
import * as i2 from "@ngx-translate/core";
import * as i3 from "@angular/common";
import * as i4 from "@ngbracket/ngx-layout";
import * as i5 from "@angular/material/core";
import * as i6 from "@angular/material/button";
import * as i7 from "@angular/material/icon";
import * as i8 from "@angular/material/form-field";
import * as i9 from "@angular/material/progress-bar";
import * as i10 from "@angular/material/progress-spinner";
import * as i11 from "@angular/material/select";
import * as i12 from "@angular/material/toolbar";
import * as i13 from "@angular/forms";
/**
* @deprecated
* */
export class ImportNetComponent extends AbstractImportNetComponent {
_sideMenuControl;
_petriNetResource;
_pathService;
_log;
_snackbar;
_translate;
constructor(_sideMenuControl, _petriNetResource, _pathService, _log, _snackbar, _translate) {
super(_sideMenuControl, _petriNetResource, _pathService, _log, _snackbar, _translate);
this._sideMenuControl = _sideMenuControl;
this._petriNetResource = _petriNetResource;
this._pathService = _pathService;
this._log = _log;
this._snackbar = _snackbar;
this._translate = _translate;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImportNetComponent, deps: [{ token: NAE_SIDE_MENU_CONTROL }, { token: i1.PetriNetResourceService }, { token: i1.PathService }, { token: i1.LoggerService }, { token: i1.SnackBarService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ImportNetComponent, selector: "nc-import-net", usesInheritance: true, ngImport: i0, template: "<mat-toolbar color=\"primary\">{{ 'side-menu.import-net.upload' | translate}}</mat-toolbar>\n\n<div fxLayout=\"column\" class=\"container side-menu-root netgrif-input\">\n\n <ul class=\"file-list\">\n <li *ngFor=\"let file of fileList\" [@fadeInOut]=\"'in'\">\n <mat-progress-bar color=\"accent\" [value]=\"file.progress\"></mat-progress-bar>\n <span class=\"file-list-label\">\n <mat-progress-spinner *ngIf=\"file.inProgress && file.uploaded\" class=\"margin-right-default\"\n color=\"accent\" mode=\"indeterminate\" diameter=\"20\"></mat-progress-spinner>\n <mat-icon *ngIf=\"!file.inProgress && file.uploaded && file.completed\"\n class=\"done-icon margin-right-default\">\n done\n </mat-icon>\n <mat-icon *ngIf=\"!file.inProgress && !file.completed && file.error\"\n class=\"done-icon margin-right-default\">\n error\n </mat-icon>\n {{file.data.name}}\n <a title=\"Retry\" (click)=\"retryFile(file)\" *ngIf=\"!file.inProgress && file.error\">\n <mat-icon>refresh</mat-icon>\n </a>\n <a title=\"Cancel\" (click)=\"cancelFile(file)\" *ngIf=\"file.inProgress\">\n <mat-icon>cancel</mat-icon>\n </a>\n </span>\n </li>\n </ul>\n\n <input type=\"file\" id=\"sidemenu-fileUpload\" name=\"fileUpload\" multiple=\"multiple\"\n accept=\"text/xml\" class=\"display-none\"/>\n\n <mat-form-field color=\"primary\" appearance=\"outline\">\n <mat-label>Release</mat-label>\n <mat-select [formControl]=\"releaseTypeControl\">\n <mat-option *ngFor=\"let type of releaseTypes\" [value]=\"type\">\n {{type}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <button mat-raised-button color=\"primary\" (click)=\"onProcessFileChosen()\">\n <mat-icon>file_upload</mat-icon>\n {{ 'side-menu.import-net.choose' | translate}}\n </button>\n\n <button *ngIf=\"isAllFinished\" mat-flat-button (click)=\"close()\">\n {{ 'side-menu.import-net.done' | translate}}\n </button>\n\n</div>\n", styles: [".file-list,.file-list li{margin:0;padding:0;list-style:none}.file-list-label{display:inline-flex;vertical-align:middle;font-size:12px;line-height:18px}.file-list-label mat-icon{font-size:18px;text-align:center}.file-list-label a{cursor:pointer}.container{padding:10%}.margin-right-default{margin-right:8px}.margin-right-half{margin-right:4px}.display-none{display:none!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.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: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "component", type: i9.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i13.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], animations: [
trigger('fadeInOut', [
state('in', style({ opacity: 100 })),
transition('* => void', [
animate(300, style({ opacity: 0 }))
])
])
] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImportNetComponent, decorators: [{
type: Component,
args: [{ selector: 'nc-import-net', animations: [
trigger('fadeInOut', [
state('in', style({ opacity: 100 })),
transition('* => void', [
animate(300, style({ opacity: 0 }))
])
])
], template: "<mat-toolbar color=\"primary\">{{ 'side-menu.import-net.upload' | translate}}</mat-toolbar>\n\n<div fxLayout=\"column\" class=\"container side-menu-root netgrif-input\">\n\n <ul class=\"file-list\">\n <li *ngFor=\"let file of fileList\" [@fadeInOut]=\"'in'\">\n <mat-progress-bar color=\"accent\" [value]=\"file.progress\"></mat-progress-bar>\n <span class=\"file-list-label\">\n <mat-progress-spinner *ngIf=\"file.inProgress && file.uploaded\" class=\"margin-right-default\"\n color=\"accent\" mode=\"indeterminate\" diameter=\"20\"></mat-progress-spinner>\n <mat-icon *ngIf=\"!file.inProgress && file.uploaded && file.completed\"\n class=\"done-icon margin-right-default\">\n done\n </mat-icon>\n <mat-icon *ngIf=\"!file.inProgress && !file.completed && file.error\"\n class=\"done-icon margin-right-default\">\n error\n </mat-icon>\n {{file.data.name}}\n <a title=\"Retry\" (click)=\"retryFile(file)\" *ngIf=\"!file.inProgress && file.error\">\n <mat-icon>refresh</mat-icon>\n </a>\n <a title=\"Cancel\" (click)=\"cancelFile(file)\" *ngIf=\"file.inProgress\">\n <mat-icon>cancel</mat-icon>\n </a>\n </span>\n </li>\n </ul>\n\n <input type=\"file\" id=\"sidemenu-fileUpload\" name=\"fileUpload\" multiple=\"multiple\"\n accept=\"text/xml\" class=\"display-none\"/>\n\n <mat-form-field color=\"primary\" appearance=\"outline\">\n <mat-label>Release</mat-label>\n <mat-select [formControl]=\"releaseTypeControl\">\n <mat-option *ngFor=\"let type of releaseTypes\" [value]=\"type\">\n {{type}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <button mat-raised-button color=\"primary\" (click)=\"onProcessFileChosen()\">\n <mat-icon>file_upload</mat-icon>\n {{ 'side-menu.import-net.choose' | translate}}\n </button>\n\n <button *ngIf=\"isAllFinished\" mat-flat-button (click)=\"close()\">\n {{ 'side-menu.import-net.done' | translate}}\n </button>\n\n</div>\n", styles: [".file-list,.file-list li{margin:0;padding:0;list-style:none}.file-list-label{display:inline-flex;vertical-align:middle;font-size:12px;line-height:18px}.file-list-label mat-icon{font-size:18px;text-align:center}.file-list-label a{cursor:pointer}.container{padding:10%}.margin-right-default{margin-right:8px}.margin-right-half{margin-right:4px}.display-none{display:none!important}\n"] }]
}], ctorParameters: () => [{ type: i1.SideMenuControl, decorators: [{
type: Inject,
args: [NAE_SIDE_MENU_CONTROL]
}] }, { type: i1.PetriNetResourceService }, { type: i1.PathService }, { type: i1.LoggerService }, { type: i1.SnackBarService }, { type: i2.TranslateService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LW5ldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMvc3JjL2xpYi9zaWRlLW1lbnUvY29udGVudC1jb21wb25lbnRzL2ltcG9ydC1uZXQvaW1wb3J0LW5ldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMvc3JjL2xpYi9zaWRlLW1lbnUvY29udGVudC1jb21wb25lbnRzL2ltcG9ydC1uZXQvaW1wb3J0LW5ldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQy9FLE9BQU8sRUFDSCwwQkFBMEIsRUFFMUIscUJBQXFCLEVBS3hCLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQUlsQzs7S0FFSztBQWNMLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSwwQkFBMEI7SUFFVDtJQUMvQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBTHRCLFlBQXFELGdCQUFpQyxFQUNoRSxpQkFBMEMsRUFDMUMsWUFBeUIsRUFDekIsSUFBbUIsRUFDbkIsU0FBMEIsRUFDMUIsVUFBNEI7UUFDOUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBTnJDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDaEUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF5QjtRQUMxQyxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQWtCO0lBRWxELENBQUM7d0dBVFEsa0JBQWtCLGtCQUVQLHFCQUFxQjs0RkFGaEMsa0JBQWtCLDRFQzlCL0IsMHlFQW1EQSwydUdEOUJnQjtZQUNSLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQ2pCLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7Z0JBQ2xDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7b0JBQ3BCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUMsT0FBTyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7aUJBQ3BDLENBQUM7YUFDTCxDQUFDO1NBQ0w7OzRGQUVRLGtCQUFrQjtrQkFiOUIsU0FBUzsrQkFDSSxlQUFlLGNBR2I7d0JBQ1IsT0FBTyxDQUFDLFdBQVcsRUFBRTs0QkFDakIsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQzs0QkFDbEMsVUFBVSxDQUFDLFdBQVcsRUFBRTtnQ0FDcEIsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQzs2QkFDcEMsQ0FBQzt5QkFDTCxDQUFDO3FCQUNMOzswQkFJWSxNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdEltcG9ydE5ldENvbXBvbmVudCxcbiAgICBMb2dnZXJTZXJ2aWNlLFxuICAgIE5BRV9TSURFX01FTlVfQ09OVFJPTCxcbiAgICBQZXRyaU5ldFJlc291cmNlU2VydmljZSxcbiAgICBTaWRlTWVudUNvbnRyb2wsXG4gICAgU25hY2tCYXJTZXJ2aWNlLFxuICAgIFBhdGhTZXJ2aWNlXG59IGZyb20gJ0BuZXRncmlmL2NvbXBvbmVudHMtY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtQYXRofSBmcm9tIFwiQHNjaGVtYXRpY3MvYW5ndWxhci90aGlyZF9wYXJ0eS9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2xpYi90eXBlc2NyaXB0XCI7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jLWltcG9ydC1uZXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbXBvcnQtbmV0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9pbXBvcnQtbmV0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdmYWRlSW5PdXQnLCBbXG4gICAgICAgICAgICBzdGF0ZSgnaW4nLCBzdHlsZSh7b3BhY2l0eTogMTAwfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiB2b2lkJywgW1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoMzAwLCBzdHlsZSh7b3BhY2l0eTogMH0pKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSlcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEltcG9ydE5ldENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SW1wb3J0TmV0Q29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoTkFFX1NJREVfTUVOVV9DT05UUk9MKSBwcm90ZWN0ZWQgX3NpZGVNZW51Q29udHJvbDogU2lkZU1lbnVDb250cm9sLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfcGV0cmlOZXRSZXNvdXJjZTogUGV0cmlOZXRSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9wYXRoU2VydmljZTogUGF0aFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9zbmFja2JhcjogU25hY2tCYXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKF9zaWRlTWVudUNvbnRyb2wsIF9wZXRyaU5ldFJlc291cmNlLCBfcGF0aFNlcnZpY2UsIF9sb2csIF9zbmFja2JhciwgX3RyYW5zbGF0ZSk7XG4gICAgfVxufVxuIiwiPG1hdC10b29sYmFyIGNvbG9yPVwicHJpbWFyeVwiPnt7ICdzaWRlLW1lbnUuaW1wb3J0LW5ldC51cGxvYWQnIHwgdHJhbnNsYXRlfX08L21hdC10b29sYmFyPlxuXG48ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJjb250YWluZXIgc2lkZS1tZW51LXJvb3QgbmV0Z3JpZi1pbnB1dFwiPlxuXG4gICAgPHVsIGNsYXNzPVwiZmlsZS1saXN0XCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlTGlzdFwiIFtAZmFkZUluT3V0XT1cIidpbidcIj5cbiAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIGNvbG9yPVwiYWNjZW50XCIgW3ZhbHVlXT1cImZpbGUucHJvZ3Jlc3NcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtbGlzdC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciAqbmdJZj1cImZpbGUuaW5Qcm9ncmVzcyAmJiBmaWxlLnVwbG9hZGVkXCIgY2xhc3M9XCJtYXJnaW4tcmlnaHQtZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBkaWFtZXRlcj1cIjIwXCI+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhZmlsZS5pblByb2dyZXNzICYmIGZpbGUudXBsb2FkZWQgJiYgZmlsZS5jb21wbGV0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRvbmUtaWNvbiBtYXJnaW4tcmlnaHQtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICBkb25lXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhZmlsZS5pblByb2dyZXNzICYmICFmaWxlLmNvbXBsZXRlZCAmJiAgZmlsZS5lcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZG9uZS1pY29uIG1hcmdpbi1yaWdodC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICB7e2ZpbGUuZGF0YS5uYW1lfX1cbiAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIlJldHJ5XCIgKGNsaWNrKT1cInJldHJ5RmlsZShmaWxlKVwiICpuZ0lmPVwiIWZpbGUuaW5Qcm9ncmVzcyAmJiBmaWxlLmVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5yZWZyZXNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJDYW5jZWxcIiAoY2xpY2spPVwiY2FuY2VsRmlsZShmaWxlKVwiICpuZ0lmPVwiZmlsZS5pblByb2dyZXNzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJzaWRlbWVudS1maWxlVXBsb2FkXCIgbmFtZT1cImZpbGVVcGxvYWRcIiBtdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgYWNjZXB0PVwidGV4dC94bWxcIiBjbGFzcz1cImRpc3BsYXktbm9uZVwiLz5cblxuICAgIDxtYXQtZm9ybS1maWVsZCBjb2xvcj1cInByaW1hcnlcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICA8bWF0LWxhYmVsPlJlbGVhc2U8L21hdC1sYWJlbD5cbiAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInJlbGVhc2VUeXBlQ29udHJvbFwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHR5cGUgb2YgcmVsZWFzZVR5cGVzXCIgW3ZhbHVlXT1cInR5cGVcIj5cbiAgICAgICAgICAgICAgICB7e3R5cGV9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uUHJvY2Vzc0ZpbGVDaG9zZW4oKVwiPlxuICAgICAgICA8bWF0LWljb24+ZmlsZV91cGxvYWQ8L21hdC1pY29uPlxuICAgICAgICB7eyAnc2lkZS1tZW51LmltcG9ydC1uZXQuY2hvb3NlJyB8IHRyYW5zbGF0ZX19XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uICpuZ0lmPVwiaXNBbGxGaW5pc2hlZFwiIG1hdC1mbGF0LWJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiPlxuICAgICAgICB7eyAnc2lkZS1tZW51LmltcG9ydC1uZXQuZG9uZScgfCB0cmFuc2xhdGV9fVxuICAgIDwvYnV0dG9uPlxuXG48L2Rpdj5cbiJdfQ==