@eternalheart/ngx-file-preview
Version:
A powerful Angular file preview component library supporting multiple file formats including images, videos, PDFs, Office documents, text files and more.
68 lines • 20.2 kB
JavaScript
import { ChangeDetectionStrategy, Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { PreviewIconComponent } from '../../components/preview-icon/preview-icon.component';
import { BasePreviewComponent } from "../base-preview/base-preview.component";
import { I18nPipe } from "../../i18n";
import * as i0 from "@angular/core";
export class ArchivePreviewComponent extends BasePreviewComponent {
getArchiveType() {
const extension = this.file.name.split('.').pop()?.toLowerCase();
const that = this;
const types = ['zip', 'rar', '7z', 'tar', 'gz'].reduce((ts, key) => Object.assign(ts, {
[key]: that.t('zip.types.' + key)
}), {});
console.log("types", types, this.t("zip.types.zip"));
return types[extension || ''] || this.t('zip.types.unknown');
}
async handleFileContent(content) {
}
formatFileSize(bytes) {
if (!bytes)
return this.t('zip.unknownSize');
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
let size = bytes;
let unitIndex = 0;
while (size >= 1024 && unitIndex < units.length - 1) {
size /= 1024;
unitIndex++;
}
return `${size.toFixed(2)} ${units[unitIndex]}`;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArchivePreviewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ArchivePreviewComponent, isStandalone: true, selector: "ngx-archive-preview", usesInheritance: true, ngImport: i0, template: `
<div class="archive-container">
<div class="archive-info">
<div class="icon">
<preview-icon [themeMode]="themeMode" [svg]="'zip'" [size]="48"></preview-icon>
</div>
<div class="details">
<h2>{{ file.name }}</h2>
<div class="meta">
<span>{{ 'zip.type'|i18n }}: {{ getArchiveType() }}</span>
<span>{{ 'zip.size'|i18n }}: {{ formatFileSize(file.size) }}</span>
</div>
</div>
</div>
</div>
`, isInline: true, styles: [":root{--nfp-primary-color: #177ddc;--nfp-primary-hover: #1890ff;--nfp-primary-active: #0050b3;--nfp-error-color: #d32029;--nfp-warning-color: #d89614;--nfp-success-color: #49aa19;--nfp-text-primary: rgba(0, 0, 0, .85);--nfp-text-secondary: rgba(0, 0, 0, .65);--nfp-text-disabled: rgba(0, 0, 0, .25);--nfp-bg-container: #ffffff;--nfp-bg-elevated: #fafafa;--nfp-bg-layout: #f0f2f5;--nfp-hover-bg: rgba(0, 0, 0, .04);--nfp-border-color: #d9d9d9;--nfp-split-color: rgba(0, 0, 0, .06);--nfp-scrollbar-bg: #ffffff;--nfp-scrollbar-thumb: #d9d9d9;--nfp-toolbar-bg: #fafafa;--nfp-toolbar-border: #d9d9d9;--nfp-toolbar-hover: rgba(0, 0, 0, .04);--nfp-toolbar-active: #e6f4ff;--nfp-preview-mask: rgba(0, 0, 0, .3);--nfp-preview-loading-bg: rgba(255, 255, 255, .8);--nfp-preview-toolbar-bg: rgba(0, 0, 0, .1);--nfp-theme-transition-duration: .3s}[data-nfp-theme=dark]{--nfp-primary-color: #177ddc;--nfp-primary-hover: #1890ff;--nfp-primary-active: #0050b3;--nfp-error-color: #a61d24;--nfp-warning-color: #d89614;--nfp-success-color: #49aa19;--nfp-text-primary: rgba(255, 255, 255, .85);--nfp-text-secondary: rgba(255, 255, 255, .65);--nfp-text-disabled: rgba(255, 255, 255, .25);--nfp-bg-container: #1a1a1a;--nfp-bg-elevated: #262626;--nfp-bg-layout: #141414;--nfp-hover-bg: rgba(255, 255, 255, .08);--nfp-border-color: #303030;--nfp-split-color: rgba(255, 255, 255, .12);--nfp-scrollbar-bg: #1a1a1a;--nfp-scrollbar-thumb: #404040;--nfp-toolbar-bg: #262626;--nfp-toolbar-border: #303030;--nfp-toolbar-hover: rgba(255, 255, 255, .08);--nfp-toolbar-active: #111b26;--nfp-preview-mask: rgba(0, 0, 0, .65);--nfp-preview-loading-bg: rgba(0, 0, 0, .8);--nfp-preview-toolbar-bg: rgba(0, 0, 0, .4);--nfp-theme-transition-duration: .3s}*{transition:background-color var(--nfp-theme-transition-duration) var(--theme-transition-timing),border-color var(--nfp-theme-transition-duration) var(--theme-transition-timing),color var(--nfp-theme-transition-duration) var(--theme-transition-timing)}.no-transition,.no-transition *{transition:none!important}\n", ":host{display:block;width:100%;height:100%}.archive-container{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;background:var(--nfp-bg-container);padding:24px;gap:24px}.archive-info{display:flex;align-items:flex-start;gap:24px;background:var(--nfp-bg-elevated);padding:24px;border-radius:8px;border:1px solid var(--nfp-border-color);transition:all .3s ease}.archive-info .icon{width:64px;height:64px;display:flex;align-items:center;justify-content:center;background:var(--nfp-bg-container);border-radius:8px;color:var(--nfp-primary-color);flex-shrink:0;transition:all .3s ease}.archive-info .icon:hover{background:var(--nfp-hover-bg);transform:scale(1.05)}.archive-info .details{flex:1;min-width:0}.archive-info .details h2{margin:0 0 12px;font-size:18px;font-weight:500;color:var(--nfp-text-primary);line-height:1.4;word-break:break-word}.archive-info .details .meta{display:flex;flex-wrap:wrap;gap:16px;color:var(--nfp-text-secondary);font-size:14px}.archive-info .details .meta span{display:flex;align-items:center;gap:8px}.archive-info .details .meta span:before{content:\"\";display:inline-block;width:4px;height:4px;background:var(--nfp-primary-color);border-radius:50%;opacity:.5}.file-list{flex:1;background:var(--nfp-bg-elevated);border-radius:8px;border:1px solid var(--nfp-border-color);overflow:hidden;display:flex;flex-direction:column}.file-list .list-header{padding:12px 16px;background:var(--nfp-bg-container);border-bottom:1px solid var(--nfp-border-color);display:flex;justify-content:space-between;align-items:center}.file-list .list-header .title{font-size:14px;font-weight:500;color:var(--nfp-text-primary)}.file-list .list-header .count{font-size:12px;color:var(--nfp-text-secondary)}.file-list .list-content{flex:1;overflow:auto;padding:8px;scrollbar-width:thin;scrollbar-color:var(--nfp-scrollbar-thumb) var(--nfp-scrollbar-bg)}.file-list .list-content::-webkit-scrollbar{width:8px;height:8px}.file-list .list-content::-webkit-scrollbar-track{background:var(--scrollbar-bg, var(--nfp-bg-container));border-radius:4px}.file-list .list-content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb, var(--nfp-border-color));border-radius:4px}.file-list .list-content::-webkit-scrollbar-thumb:hover{background:var(--nfp-primary-color)}.file-list .file-item{display:flex;align-items:center;gap:12px;padding:12px;border-radius:4px;cursor:pointer;transition:all .2s ease}.file-list .file-item .file-icon{width:32px;height:32px;display:flex;align-items:center;justify-content:center;color:var(--nfp-primary-color);flex-shrink:0}.file-list .file-item .file-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.file-list .file-item .file-info .file-name{color:var(--nfp-text-primary);font-size:14px;line-height:1.4;word-break:break-word}.file-list .file-item .file-info .file-meta{display:flex;gap:16px;color:var(--nfp-text-secondary);font-size:12px}.file-list .file-item:hover{background:var(--nfp-hover-bg)}.file-list .file-item.selected{background:var(--nfp-primary-color);color:#fff}.file-list .file-item.selected .file-name,.file-list .file-item.selected .file-meta{color:#fff}@media (max-width: 480px){.archive-container{padding:16px;gap:16px}.archive-info{padding:16px;flex-direction:column;align-items:center;text-align:center}.archive-info .details .meta{justify-content:center}.file-list .file-item{padding:8px}.file-list .file-item .file-icon{width:24px;height:24px}.file-list .file-item .file-info .file-name{font-size:13px}}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}.loading .icon{animation:pulse 2s infinite ease-in-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: PreviewIconComponent, selector: "preview-icon", inputs: ["name", "svg", "size", "color", "themeMode", "title", "cursor"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArchivePreviewComponent, decorators: [{
type: Component,
args: [{ selector: 'ngx-archive-preview', standalone: true, imports: [CommonModule, PreviewIconComponent, I18nPipe], template: `
<div class="archive-container">
<div class="archive-info">
<div class="icon">
<preview-icon [themeMode]="themeMode" [svg]="'zip'" [size]="48"></preview-icon>
</div>
<div class="details">
<h2>{{ file.name }}</h2>
<div class="meta">
<span>{{ 'zip.type'|i18n }}: {{ getArchiveType() }}</span>
<span>{{ 'zip.size'|i18n }}: {{ formatFileSize(file.size) }}</span>
</div>
</div>
</div>
</div>
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":root{--nfp-primary-color: #177ddc;--nfp-primary-hover: #1890ff;--nfp-primary-active: #0050b3;--nfp-error-color: #d32029;--nfp-warning-color: #d89614;--nfp-success-color: #49aa19;--nfp-text-primary: rgba(0, 0, 0, .85);--nfp-text-secondary: rgba(0, 0, 0, .65);--nfp-text-disabled: rgba(0, 0, 0, .25);--nfp-bg-container: #ffffff;--nfp-bg-elevated: #fafafa;--nfp-bg-layout: #f0f2f5;--nfp-hover-bg: rgba(0, 0, 0, .04);--nfp-border-color: #d9d9d9;--nfp-split-color: rgba(0, 0, 0, .06);--nfp-scrollbar-bg: #ffffff;--nfp-scrollbar-thumb: #d9d9d9;--nfp-toolbar-bg: #fafafa;--nfp-toolbar-border: #d9d9d9;--nfp-toolbar-hover: rgba(0, 0, 0, .04);--nfp-toolbar-active: #e6f4ff;--nfp-preview-mask: rgba(0, 0, 0, .3);--nfp-preview-loading-bg: rgba(255, 255, 255, .8);--nfp-preview-toolbar-bg: rgba(0, 0, 0, .1);--nfp-theme-transition-duration: .3s}[data-nfp-theme=dark]{--nfp-primary-color: #177ddc;--nfp-primary-hover: #1890ff;--nfp-primary-active: #0050b3;--nfp-error-color: #a61d24;--nfp-warning-color: #d89614;--nfp-success-color: #49aa19;--nfp-text-primary: rgba(255, 255, 255, .85);--nfp-text-secondary: rgba(255, 255, 255, .65);--nfp-text-disabled: rgba(255, 255, 255, .25);--nfp-bg-container: #1a1a1a;--nfp-bg-elevated: #262626;--nfp-bg-layout: #141414;--nfp-hover-bg: rgba(255, 255, 255, .08);--nfp-border-color: #303030;--nfp-split-color: rgba(255, 255, 255, .12);--nfp-scrollbar-bg: #1a1a1a;--nfp-scrollbar-thumb: #404040;--nfp-toolbar-bg: #262626;--nfp-toolbar-border: #303030;--nfp-toolbar-hover: rgba(255, 255, 255, .08);--nfp-toolbar-active: #111b26;--nfp-preview-mask: rgba(0, 0, 0, .65);--nfp-preview-loading-bg: rgba(0, 0, 0, .8);--nfp-preview-toolbar-bg: rgba(0, 0, 0, .4);--nfp-theme-transition-duration: .3s}*{transition:background-color var(--nfp-theme-transition-duration) var(--theme-transition-timing),border-color var(--nfp-theme-transition-duration) var(--theme-transition-timing),color var(--nfp-theme-transition-duration) var(--theme-transition-timing)}.no-transition,.no-transition *{transition:none!important}\n", ":host{display:block;width:100%;height:100%}.archive-container{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;background:var(--nfp-bg-container);padding:24px;gap:24px}.archive-info{display:flex;align-items:flex-start;gap:24px;background:var(--nfp-bg-elevated);padding:24px;border-radius:8px;border:1px solid var(--nfp-border-color);transition:all .3s ease}.archive-info .icon{width:64px;height:64px;display:flex;align-items:center;justify-content:center;background:var(--nfp-bg-container);border-radius:8px;color:var(--nfp-primary-color);flex-shrink:0;transition:all .3s ease}.archive-info .icon:hover{background:var(--nfp-hover-bg);transform:scale(1.05)}.archive-info .details{flex:1;min-width:0}.archive-info .details h2{margin:0 0 12px;font-size:18px;font-weight:500;color:var(--nfp-text-primary);line-height:1.4;word-break:break-word}.archive-info .details .meta{display:flex;flex-wrap:wrap;gap:16px;color:var(--nfp-text-secondary);font-size:14px}.archive-info .details .meta span{display:flex;align-items:center;gap:8px}.archive-info .details .meta span:before{content:\"\";display:inline-block;width:4px;height:4px;background:var(--nfp-primary-color);border-radius:50%;opacity:.5}.file-list{flex:1;background:var(--nfp-bg-elevated);border-radius:8px;border:1px solid var(--nfp-border-color);overflow:hidden;display:flex;flex-direction:column}.file-list .list-header{padding:12px 16px;background:var(--nfp-bg-container);border-bottom:1px solid var(--nfp-border-color);display:flex;justify-content:space-between;align-items:center}.file-list .list-header .title{font-size:14px;font-weight:500;color:var(--nfp-text-primary)}.file-list .list-header .count{font-size:12px;color:var(--nfp-text-secondary)}.file-list .list-content{flex:1;overflow:auto;padding:8px;scrollbar-width:thin;scrollbar-color:var(--nfp-scrollbar-thumb) var(--nfp-scrollbar-bg)}.file-list .list-content::-webkit-scrollbar{width:8px;height:8px}.file-list .list-content::-webkit-scrollbar-track{background:var(--scrollbar-bg, var(--nfp-bg-container));border-radius:4px}.file-list .list-content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb, var(--nfp-border-color));border-radius:4px}.file-list .list-content::-webkit-scrollbar-thumb:hover{background:var(--nfp-primary-color)}.file-list .file-item{display:flex;align-items:center;gap:12px;padding:12px;border-radius:4px;cursor:pointer;transition:all .2s ease}.file-list .file-item .file-icon{width:32px;height:32px;display:flex;align-items:center;justify-content:center;color:var(--nfp-primary-color);flex-shrink:0}.file-list .file-item .file-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.file-list .file-item .file-info .file-name{color:var(--nfp-text-primary);font-size:14px;line-height:1.4;word-break:break-word}.file-list .file-item .file-info .file-meta{display:flex;gap:16px;color:var(--nfp-text-secondary);font-size:12px}.file-list .file-item:hover{background:var(--nfp-hover-bg)}.file-list .file-item.selected{background:var(--nfp-primary-color);color:#fff}.file-list .file-item.selected .file-name,.file-list .file-item.selected .file-meta{color:#fff}@media (max-width: 480px){.archive-container{padding:16px;gap:16px}.archive-info{padding:16px;flex-direction:column;align-items:center;text-align:center}.archive-info .details .meta{justify-content:center}.file-list .file-item{padding:8px}.file-list .file-item .file-icon{width:24px;height:24px}.file-list .file-item .file-info .file-name{font-size:13px}}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}.loading .icon{animation:pulse 2s infinite ease-in-out}\n"] }]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZS1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LWZpbGUtcHJldmlldy9zcmMvbGliL3ByZXZpZXctdHlwZXMvYXJjaGl2ZS1wcmV2aWV3L2FyY2hpdmUtcHJldmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sc0RBQXNELENBQUM7QUFDMUYsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFFNUUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQzs7QUF5QnBDLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxvQkFBb0I7SUFDL0QsY0FBYztRQUNaLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNqRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsTUFBTSxLQUFLLEdBQThCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQy9HLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1NBQ2xDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7UUFDcEQsT0FBTyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRWtCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUEyQjtJQUN0RSxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWM7UUFDM0IsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUU3QyxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUM7UUFDakIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwRCxJQUFJLElBQUksSUFBSSxDQUFDO1lBQ2IsU0FBUyxFQUFFLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7SUFDbEQsQ0FBQzsrR0EzQlUsdUJBQXVCO21HQUF2Qix1QkFBdUIsc0dBbkJ4Qjs7Ozs7Ozs7Ozs7Ozs7O0dBZVQsaW9MQWhCUyxZQUFZLCtCQUFFLG9CQUFvQiw4SEFBRSxRQUFROzs0RkFvQjNDLHVCQUF1QjtrQkF2Qm5DLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxRQUFRLENBQUMsWUFDN0M7Ozs7Ozs7Ozs7Ozs7OztHQWVULG1CQUVnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtQcmV2aWV3SWNvbkNvbXBvbmVudH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wcmV2aWV3LWljb24vcHJldmlldy1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQge0Jhc2VQcmV2aWV3Q29tcG9uZW50fSBmcm9tIFwiLi4vYmFzZS1wcmV2aWV3L2Jhc2UtcHJldmlldy5jb21wb25lbnRcIjtcbmltcG9ydCB7RmlsZVJlYWRlclJlc3BvbnNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXNcIjtcbmltcG9ydCB7STE4blBpcGV9IGZyb20gXCIuLi8uLi9pMThuXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1hcmNoaXZlLXByZXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBQcmV2aWV3SWNvbkNvbXBvbmVudCwgSTE4blBpcGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJhcmNoaXZlLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImFyY2hpdmUtaW5mb1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvblwiPlxuICAgICAgICAgIDxwcmV2aWV3LWljb24gW3RoZW1lTW9kZV09XCJ0aGVtZU1vZGVcIiBbc3ZnXT1cIid6aXAnXCIgW3NpemVdPVwiNDhcIj48L3ByZXZpZXctaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzXCI+XG4gICAgICAgICAgPGgyPnt7IGZpbGUubmFtZSB9fTwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldGFcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7ICd6aXAudHlwZSd8aTE4biB9fToge3sgZ2V0QXJjaGl2ZVR5cGUoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7ICd6aXAuc2l6ZSd8aTE4biB9fToge3sgZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbXCIuLi8uLi9zdHlsZXMvX3RoZW1lLnNjc3NcIiwgXCJhcmNoaXZlLXByZXZpZXcuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFyY2hpdmVQcmV2aWV3Q29tcG9uZW50IGV4dGVuZHMgQmFzZVByZXZpZXdDb21wb25lbnQge1xuICBnZXRBcmNoaXZlVHlwZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IHRoaXMuZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCk/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgY29uc3QgdHlwZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSBbJ3ppcCcsICdyYXInLCAnN3onLCAndGFyJywgJ2d6J10ucmVkdWNlKCh0cywga2V5KSA9PiBPYmplY3QuYXNzaWduKHRzLCB7XG4gICAgICBba2V5XTogdGhhdC50KCd6aXAudHlwZXMuJyArIGtleSlcbiAgICB9KSwge30pO1xuICAgIGNvbnNvbGUubG9nKFwidHlwZXNcIiwgdHlwZXMsIHRoaXMudChcInppcC50eXBlcy56aXBcIikpXG4gICAgcmV0dXJuIHR5cGVzW2V4dGVuc2lvbiB8fCAnJ10gfHwgdGhpcy50KCd6aXAudHlwZXMudW5rbm93bicpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGhhbmRsZUZpbGVDb250ZW50KGNvbnRlbnQ6IEZpbGVSZWFkZXJSZXNwb25zZSkge1xuICB9XG5cbiAgZm9ybWF0RmlsZVNpemUoYnl0ZXM/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICghYnl0ZXMpIHJldHVybiB0aGlzLnQoJ3ppcC51bmtub3duU2l6ZScpO1xuXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcbiAgICBsZXQgc2l6ZSA9IGJ5dGVzO1xuICAgIGxldCB1bml0SW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKHNpemUgPj0gMTAyNCAmJiB1bml0SW5kZXggPCB1bml0cy5sZW5ndGggLSAxKSB7XG4gICAgICBzaXplIC89IDEwMjQ7XG4gICAgICB1bml0SW5kZXgrKztcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7c2l6ZS50b0ZpeGVkKDIpfSAke3VuaXRzW3VuaXRJbmRleF19YDtcbiAgfVxuXG59XG4iXX0=