@alauda-fe/common
Version:
Alauda frontend team common codes.
146 lines • 18.4 kB
JavaScript
import { IconModule, TooltipModule } from '@alauda/ui';
import { NgClass, NgFor, NgIf, NgStyle, NgTemplateOutlet, } from '@angular/common';
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
import { PurePipe } from '../core/public-api';
import { StatusIconComponent } from '../widget/public-api';
import { getPodAggregatedStatus, getPodStatus } from './status';
import { PodStatusColorMapper, PodStatusIconMapper } from './typings';
import * as i0 from "@angular/core";
import * as i1 from "@alauda/ui";
const _c0 = () => ({ "margin-right": 0 });
const _c1 = a0 => ({ $implicit: a0 });
const _c2 = a0 => ({ messages: a0 });
function PodStatusComponent_ng_container_0_ng_template_8_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtext(0);
} if (rf & 2) {
const data_r1 = ctx.$implicit;
i0.ɵɵtextInterpolate2(" (", data_r1.ready, "/", data_r1.all, ") ");
} }
function PodStatusComponent_ng_container_0_ng_container_10_aui_icon_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelement(0, "aui-icon", 11);
} if (rf & 2) {
const messages_r2 = i0.ɵɵnextContext().ngIf;
i0.ɵɵnextContext(2);
const podMessages_r3 = i0.ɵɵreference(5);
const onlyOnePodMessage_r4 = i0.ɵɵreference(7);
i0.ɵɵproperty("auiTooltip", messages_r2.length === 1 ? onlyOnePodMessage_r4 : podMessages_r3)("auiTooltipContext", i0.ɵɵpureFunction1(2, _c2, messages_r2));
} }
function PodStatusComponent_ng_container_0_ng_container_10_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, PodStatusComponent_ng_container_0_ng_container_10_aui_icon_1_Template, 1, 4, "aui-icon", 10);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const messages_r2 = ctx.ngIf;
const ctx_r4 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", (messages_r2 == null ? null : messages_r2.length) && !ctx_r4.disableMessageOverview);
} }
function PodStatusComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "div", 5);
i0.ɵɵelement(2, "acl-status-icon", 6);
i0.ɵɵpipe(3, "pure");
i0.ɵɵelementStart(4, "div", 7);
i0.ɵɵtext(5);
i0.ɵɵelementContainer(6, 8);
i0.ɵɵpipe(7, "pure");
i0.ɵɵtemplate(8, PodStatusComponent_ng_container_0_ng_template_8_Template, 1, 2, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor)(10, PodStatusComponent_ng_container_0_ng_container_10_Template, 2, 1, "ng-container", 9);
i0.ɵɵpipe(11, "pure");
i0.ɵɵelementEnd()();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const status_r6 = ctx.ngIf;
const readyContainerTmpl_r7 = i0.ɵɵreference(9);
const ctx_r4 = i0.ɵɵnextContext();
i0.ɵɵadvance(2);
i0.ɵɵproperty("status", i0.ɵɵpipeBind2(3, 9, status_r6, ctx_r4.getPodAggregatedStatus))("colorMapper", ctx_r4.PodStatusColorMapper)("iconMapper", ctx_r4.PodStatusIconMapper)("withText", false)("ngStyle", i0.ɵɵpureFunction0(18, _c0));
i0.ɵɵadvance(3);
i0.ɵɵtextInterpolate1(" ", status_r6, " ");
i0.ɵɵadvance();
i0.ɵɵproperty("ngTemplateOutlet", readyContainerTmpl_r7)("ngTemplateOutletContext", i0.ɵɵpureFunction1(19, _c1, i0.ɵɵpipeBind2(7, 12, ctx_r4.pod, ctx_r4.getReadyContainer)));
i0.ɵɵadvance(4);
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(11, 15, ctx_r4.pod, ctx_r4.getPodErrorMessages));
} }
function PodStatusComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtext(0, "-");
} }
function PodStatusComponent_ng_template_4_li_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "li")(1, "em");
i0.ɵɵtext(2, "\u2022");
i0.ɵɵelementEnd();
i0.ɵɵtext(3);
i0.ɵɵelementEnd();
} if (rf & 2) {
const msg_r8 = ctx.$implicit;
i0.ɵɵadvance(3);
i0.ɵɵtextInterpolate(msg_r8);
} }
function PodStatusComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "ul", 12);
i0.ɵɵtemplate(1, PodStatusComponent_ng_template_4_li_1_Template, 4, 1, "li", 13);
i0.ɵɵelementEnd();
} if (rf & 2) {
const messages_r9 = ctx.messages;
i0.ɵɵadvance();
i0.ɵɵproperty("ngForOf", messages_r9);
} }
function PodStatusComponent_ng_template_6_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtext(0);
} if (rf & 2) {
const messages_r10 = ctx.messages;
i0.ɵɵtextInterpolate1(" ", messages_r10[0], "\n");
} }
export class PodStatusComponent {
constructor() {
this.getPodErrorMessages = (pod) => getPodStatus(pod).includes('Pending')
? pod.status.conditions?.map(item => item.message).filter(msg => !!msg)
: pod.status.containerStatuses
?.filter(c => !c.ready)
.map(c => c.state?.waiting?.message)
.filter(msg => !!msg);
this.getPodAggregatedStatus = getPodAggregatedStatus;
this.getPodStatus = getPodStatus;
this.PodStatusColorMapper = PodStatusColorMapper;
this.PodStatusIconMapper = PodStatusIconMapper;
}
getReadyContainer(pod) {
return {
ready: (pod.status.containerStatuses || []).filter(i => i.ready).length,
all: pod.spec.containers.length,
};
}
static { this.ɵfac = function PodStatusComponent_Factory(t) { return new (t || PodStatusComponent)(); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PodStatusComponent, selectors: [["acl-pod-status"]], inputs: { pod: "pod", disableMessageOverview: "disableMessageOverview" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 8, vars: 5, consts: [["nodata", ""], ["podMessages", ""], ["onlyOnePodMessage", ""], ["readyContainerTmpl", ""], [4, "ngIf", "ngIfElse"], [1, "status-wrapper"], [3, "status", "colorMapper", "iconMapper", "withText", "ngStyle"], [1, "tw-flex"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [4, "ngIf"], ["icon", "file_magnifier", "class", "message-tip-icon", "size", "14", "auiTooltipClass", "condition-message-tip", 3, "auiTooltip", "auiTooltipContext", 4, "ngIf"], ["icon", "file_magnifier", "size", "14", "auiTooltipClass", "condition-message-tip", 1, "message-tip-icon", 3, "auiTooltip", "auiTooltipContext"], [1, "pod-messages"], [4, "ngFor", "ngForOf"]], template: function PodStatusComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, PodStatusComponent_ng_container_0_Template, 12, 21, "ng-container", 4);
i0.ɵɵpipe(1, "pure");
i0.ɵɵtemplate(2, PodStatusComponent_ng_template_2_Template, 1, 0, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(4, PodStatusComponent_ng_template_4_Template, 2, 1, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor)(6, PodStatusComponent_ng_template_6_Template, 1, 1, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
} if (rf & 2) {
const nodata_r11 = i0.ɵɵreference(3);
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(1, 2, ctx.pod, ctx.getPodStatus))("ngIfElse", nodata_r11);
} }, dependencies: [StatusIconComponent,
NgIf,
IconModule, i1.IconComponent, TooltipModule, i1.TooltipDirective, NgStyle,
NgTemplateOutlet,
PurePipe,
NgFor], styles: ["[_nghost-%COMP%]{display:flex}[_nghost-%COMP%] .condition-message-tip{white-space:pre-line}[_nghost-%COMP%] .message-tip-icon[_ngcontent-%COMP%]{margin-left:6px}[_nghost-%COMP%] .status-wrapper[_ngcontent-%COMP%]{display:flex;overflow:hidden;text-overflow:ellipsis}.pod-messages[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{padding-left:8px}.pod-messages[_ngcontent-%COMP%] li[_ngcontent-%COMP%] em[_ngcontent-%COMP%]{color:rgb(var(--aui-color-n-4));margin-right:4px;margin-left:-8px;font-size:14px}"], changeDetection: 0 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PodStatusComponent, [{
type: Component,
args: [{ selector: 'acl-pod-status', standalone: true, imports: [
StatusIconComponent,
NgIf,
IconModule,
TooltipModule,
NgStyle,
NgClass,
NgTemplateOutlet,
PurePipe,
NgFor,
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"pod | pure: getPodStatus as status; else nodata\">\n <div class=\"status-wrapper\">\n <acl-status-icon\n [status]=\"status | pure: getPodAggregatedStatus\"\n [colorMapper]=\"PodStatusColorMapper\"\n [iconMapper]=\"PodStatusIconMapper\"\n [withText]=\"false\"\n [ngStyle]=\"{ 'margin-right': 0 }\"\n ></acl-status-icon>\n <div class=\"tw-flex\">\n {{ status }}\n <ng-container\n [ngTemplateOutlet]=\"readyContainerTmpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: pod | pure: getReadyContainer,\n }\"\n ></ng-container>\n <ng-template\n #readyContainerTmpl\n let-data\n >\n ({{ data.ready }}/{{ data.all }})\n </ng-template>\n <ng-container *ngIf=\"pod | pure: getPodErrorMessages as messages\">\n <aui-icon\n icon=\"file_magnifier\"\n *ngIf=\"messages?.length && !disableMessageOverview\"\n class=\"message-tip-icon\"\n [auiTooltip]=\"messages.length === 1 ? onlyOnePodMessage : podMessages\"\n [auiTooltipContext]=\"{ messages: messages }\"\n size=\"14\"\n auiTooltipClass=\"condition-message-tip\"\n ></aui-icon>\n </ng-container>\n </div>\n </div>\n</ng-container>\n<ng-template #nodata>-</ng-template>\n<ng-template\n #podMessages\n let-messages=\"messages\"\n>\n <ul class=\"pod-messages\">\n <li *ngFor=\"let msg of messages\"><em>•</em>{{ msg }}</li>\n </ul>\n</ng-template>\n<ng-template\n #onlyOnePodMessage\n let-messages=\"messages\"\n>\n {{ messages[0] }}\n</ng-template>\n", styles: [":host{display:flex}:host ::ng-deep .condition-message-tip{white-space:pre-line}:host .message-tip-icon{margin-left:6px}:host .status-wrapper{display:flex;overflow:hidden;text-overflow:ellipsis}.pod-messages li{padding-left:8px}.pod-messages li em{color:rgb(var(--aui-color-n-4));margin-right:4px;margin-left:-8px;font-size:14px}\n"] }]
}], null, { pod: [{
type: Input
}], disableMessageOverview: [{
type: Input
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PodStatusComponent, { className: "PodStatusComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3BvZC1zdGF0dXMvY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3BvZC1zdGF0dXMvdGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2RCxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0osT0FBTyxFQUNQLGdCQUFnQixHQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBTyxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7OztJQ085RCxZQUNGOzs7SUFERSxrRUFDRjs7O0lBRUUsK0JBUVk7Ozs7OztJQUhWLEFBREEsNkZBQXNFLDhEQUMxQjs7O0lBTmhELDZCQUFrRTtJQUNoRSw2R0FRQzs7Ozs7SUFORSxjQUFpRDtJQUFqRCwwR0FBaUQ7OztJQTFCNUQsNkJBQXNFO0lBQ3BFLDhCQUE0QjtJQUMxQixxQ0FNbUI7O0lBQ25CLDhCQUFxQjtJQUNuQixZQUNBO0lBQUEsMkJBS2dCOztJQU9oQixBQU5BLG1JQUdDLHlGQUdpRTs7SUFZdEUsQUFERSxpQkFBTSxFQUNGOzs7Ozs7SUFoQ0YsZUFBZ0Q7SUFJaEQsQUFEQSxBQURBLEFBREEsQUFEQSx1RkFBZ0QsNENBQ1osMENBQ0YsbUJBQ2hCLHdDQUNlO0lBR2pDLGVBQ0E7SUFEQSwwQ0FDQTtJQUNFLGNBQXVDO0lBQ3ZDLEFBREEsd0RBQXVDLHFIQUdyQztJQVFXLGVBQXNDO0lBQXRDLHFGQUFzQzs7O0lBY3RDLGlCQUFDOzs7SUFNZSxBQUFqQywwQkFBaUMsU0FBSTtJQUFBLHNCQUFNO0lBQUEsaUJBQUs7SUFBQSxZQUFTO0lBQUEsaUJBQUs7OztJQUFkLGVBQVM7SUFBVCw0QkFBUzs7O0lBRDNELDhCQUF5QjtJQUN2QixnRkFBaUM7SUFDbkMsaUJBQUs7OztJQURpQixjQUFXO0lBQVgscUNBQVc7OztJQU9qQyxZQUNGOzs7SUFERSxpREFDRjs7QURqQkEsTUFBTSxPQUFPLGtCQUFrQjtJQWxCL0I7UUFnQ0Usd0JBQW1CLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNqQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUNuQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDdkUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCO2dCQUMxQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztpQkFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO2lCQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFOUIsMkJBQXNCLEdBQUcsc0JBQXNCLENBQUM7UUFDaEQsaUJBQVksR0FBRyxZQUFZLENBQUM7UUFDNUIseUJBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDNUMsd0JBQW1CLEdBQUcsbUJBQW1CLENBQUM7S0FDM0M7SUFuQkMsaUJBQWlCLENBQUMsR0FBUTtRQUN4QixPQUFPO1lBQ0wsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTTtZQUN2RSxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtTQUNoQyxDQUFDO0lBQ0osQ0FBQzttRkFaVSxrQkFBa0I7b0VBQWxCLGtCQUFrQjtZQ2xDL0IsdUZBQXNFOztZQThDdEUsQUFSQSxBQURBLG9IQUFxQix1R0FJcEIsdUdBUUE7OztZQWpEd0QsQUFBMUMsc0VBQStCLHdCQUFzQjs0QkRzQmhFLG1CQUFtQjtZQUNuQixJQUFJO1lBQ0osVUFBVSxvQkFDVixhQUFhLHVCQUNiLE9BQU87WUFFUCxnQkFBZ0I7WUFDaEIsUUFBUTtZQUNSLEtBQUs7O2lGQUlJLGtCQUFrQjtjQWxCOUIsU0FBUzsyQkFDRSxnQkFBZ0IsY0FHZCxJQUFJLFdBQ1A7b0JBQ1AsbUJBQW1CO29CQUNuQixJQUFJO29CQUNKLFVBQVU7b0JBQ1YsYUFBYTtvQkFDYixPQUFPO29CQUNQLE9BQU87b0JBQ1AsZ0JBQWdCO29CQUNoQixRQUFRO29CQUNSLEtBQUs7aUJBQ04sbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07Z0JBSS9DLEdBQUc7a0JBREYsS0FBSztZQUlOLHNCQUFzQjtrQkFEckIsS0FBSzs7a0ZBSkssa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSWNvbk1vZHVsZSwgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ0BhbGF1ZGEvdWknO1xuaW1wb3J0IHtcbiAgTmdDbGFzcyxcbiAgTmdGb3IsXG4gIE5nSWYsXG4gIE5nU3R5bGUsXG4gIE5nVGVtcGxhdGVPdXRsZXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBQb2QsIFB1cmVQaXBlIH0gZnJvbSAnLi4vY29yZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IFN0YXR1c0ljb25Db21wb25lbnQgfSBmcm9tICcuLi93aWRnZXQvcHVibGljLWFwaSc7XG5cbmltcG9ydCB7IGdldFBvZEFnZ3JlZ2F0ZWRTdGF0dXMsIGdldFBvZFN0YXR1cyB9IGZyb20gJy4vc3RhdHVzJztcbmltcG9ydCB7IFBvZFN0YXR1c0NvbG9yTWFwcGVyLCBQb2RTdGF0dXNJY29uTWFwcGVyIH0gZnJvbSAnLi90eXBpbmdzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLXBvZC1zdGF0dXMnLFxuICB0ZW1wbGF0ZVVybDogJ3RlbXBsYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc3R5bGUuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgU3RhdHVzSWNvbkNvbXBvbmVudCxcbiAgICBOZ0lmLFxuICAgIEljb25Nb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBOZ1N0eWxlLFxuICAgIE5nQ2xhc3MsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBQdXJlUGlwZSxcbiAgICBOZ0ZvcixcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBvZFN0YXR1c0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHBvZDogUG9kO1xuXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVNZXNzYWdlT3ZlcnZpZXc6IGJvb2xlYW47XG5cbiAgZ2V0UmVhZHlDb250YWluZXIocG9kOiBQb2QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVhZHk6IChwb2Quc3RhdHVzLmNvbnRhaW5lclN0YXR1c2VzIHx8IFtdKS5maWx0ZXIoaSA9PiBpLnJlYWR5KS5sZW5ndGgsXG4gICAgICBhbGw6IHBvZC5zcGVjLmNvbnRhaW5lcnMubGVuZ3RoLFxuICAgIH07XG4gIH1cblxuICBnZXRQb2RFcnJvck1lc3NhZ2VzID0gKHBvZDogUG9kKSA9PlxuICAgIGdldFBvZFN0YXR1cyhwb2QpLmluY2x1ZGVzKCdQZW5kaW5nJylcbiAgICAgID8gcG9kLnN0YXR1cy5jb25kaXRpb25zPy5tYXAoaXRlbSA9PiBpdGVtLm1lc3NhZ2UpLmZpbHRlcihtc2cgPT4gISFtc2cpXG4gICAgICA6IHBvZC5zdGF0dXMuY29udGFpbmVyU3RhdHVzZXNcbiAgICAgICAgICA/LmZpbHRlcihjID0+ICFjLnJlYWR5KVxuICAgICAgICAgIC5tYXAoYyA9PiBjLnN0YXRlPy53YWl0aW5nPy5tZXNzYWdlKVxuICAgICAgICAgIC5maWx0ZXIobXNnID0+ICEhbXNnKTtcblxuICBnZXRQb2RBZ2dyZWdhdGVkU3RhdHVzID0gZ2V0UG9kQWdncmVnYXRlZFN0YXR1cztcbiAgZ2V0UG9kU3RhdHVzID0gZ2V0UG9kU3RhdHVzO1xuICBQb2RTdGF0dXNDb2xvck1hcHBlciA9IFBvZFN0YXR1c0NvbG9yTWFwcGVyO1xuICBQb2RTdGF0dXNJY29uTWFwcGVyID0gUG9kU3RhdHVzSWNvbk1hcHBlcjtcbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJwb2QgfCBwdXJlOiBnZXRQb2RTdGF0dXMgYXMgc3RhdHVzOyBlbHNlIG5vZGF0YVwiPlxuICA8ZGl2IGNsYXNzPVwic3RhdHVzLXdyYXBwZXJcIj5cbiAgICA8YWNsLXN0YXR1cy1pY29uXG4gICAgICBbc3RhdHVzXT1cInN0YXR1cyB8IHB1cmU6IGdldFBvZEFnZ3JlZ2F0ZWRTdGF0dXNcIlxuICAgICAgW2NvbG9yTWFwcGVyXT1cIlBvZFN0YXR1c0NvbG9yTWFwcGVyXCJcbiAgICAgIFtpY29uTWFwcGVyXT1cIlBvZFN0YXR1c0ljb25NYXBwZXJcIlxuICAgICAgW3dpdGhUZXh0XT1cImZhbHNlXCJcbiAgICAgIFtuZ1N0eWxlXT1cInsgJ21hcmdpbi1yaWdodCc6IDAgfVwiXG4gICAgPjwvYWNsLXN0YXR1cy1pY29uPlxuICAgIDxkaXYgY2xhc3M9XCJ0dy1mbGV4XCI+XG4gICAgICB7eyBzdGF0dXMgfX1cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicmVhZHlDb250YWluZXJUbXBsXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAkaW1wbGljaXQ6IHBvZCB8IHB1cmU6IGdldFJlYWR5Q29udGFpbmVyLFxuICAgICAgICB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAjcmVhZHlDb250YWluZXJUbXBsXG4gICAgICAgIGxldC1kYXRhXG4gICAgICA+XG4gICAgICAgICh7eyBkYXRhLnJlYWR5IH19L3t7IGRhdGEuYWxsIH19KVxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwb2QgfCBwdXJlOiBnZXRQb2RFcnJvck1lc3NhZ2VzIGFzIG1lc3NhZ2VzXCI+XG4gICAgICAgIDxhdWktaWNvblxuICAgICAgICAgIGljb249XCJmaWxlX21hZ25pZmllclwiXG4gICAgICAgICAgKm5nSWY9XCJtZXNzYWdlcz8ubGVuZ3RoICYmICFkaXNhYmxlTWVzc2FnZU92ZXJ2aWV3XCJcbiAgICAgICAgICBjbGFzcz1cIm1lc3NhZ2UtdGlwLWljb25cIlxuICAgICAgICAgIFthdWlUb29sdGlwXT1cIm1lc3NhZ2VzLmxlbmd0aCA9PT0gMSA/IG9ubHlPbmVQb2RNZXNzYWdlIDogcG9kTWVzc2FnZXNcIlxuICAgICAgICAgIFthdWlUb29sdGlwQ29udGV4dF09XCJ7IG1lc3NhZ2VzOiBtZXNzYWdlcyB9XCJcbiAgICAgICAgICBzaXplPVwiMTRcIlxuICAgICAgICAgIGF1aVRvb2x0aXBDbGFzcz1cImNvbmRpdGlvbi1tZXNzYWdlLXRpcFwiXG4gICAgICAgID48L2F1aS1pY29uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGUgI25vZGF0YT4tPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZVxuICAjcG9kTWVzc2FnZXNcbiAgbGV0LW1lc3NhZ2VzPVwibWVzc2FnZXNcIlxuPlxuICA8dWwgY2xhc3M9XCJwb2QtbWVzc2FnZXNcIj5cbiAgICA8bGkgKm5nRm9yPVwibGV0IG1zZyBvZiBtZXNzYWdlc1wiPjxlbT4mYnVsbDs8L2VtPnt7IG1zZyB9fTwvbGk+XG4gIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlXG4gICNvbmx5T25lUG9kTWVzc2FnZVxuICBsZXQtbWVzc2FnZXM9XCJtZXNzYWdlc1wiXG4+XG4gIHt7IG1lc3NhZ2VzWzBdIH19XG48L25nLXRlbXBsYXRlPlxuIl19