UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

264 lines 33.8 kB
import { isTemplateRef } from '@alauda/ui'; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, TemplateRef, } from '@angular/core'; import { get } from 'lodash-es'; import { Chart, ChartEvent } from 'zz-chart'; import * as i0 from "@angular/core"; const _c0 = a0 => ({ context: a0 }); const _c1 = a0 => [a0, "label-symbol"]; function LegendComponent_div_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 5); i0.ɵɵelementContainer(1, 6); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.leftOperation)("ngTemplateOutletContext", ctx_r0.leftOperationContext); } } function LegendComponent_div_1_ng_container_1_acl_view_legend_dropdown_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "acl-view-legend-dropdown", 11); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(3); const legendTemplate_r2 = i0.ɵɵreference(4); i0.ɵɵproperty("data", ctx_r0.legendEntries)("noData", ctx_r0.noData)("legendTemplate", legendTemplate_r2)("isCard", ctx_r0.mode === "card"); } } function LegendComponent_div_1_ng_container_1_ng_container_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵelementContainer(1, 12); i0.ɵɵelementContainerEnd(); } if (rf & 2) { i0.ɵɵnextContext(3); const legendTemplate_r2 = i0.ɵɵreference(4); i0.ɵɵadvance(); i0.ɵɵproperty("ngTemplateOutlet", legendTemplate_r2); } } function LegendComponent_div_1_ng_container_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵtemplate(1, LegendComponent_div_1_ng_container_1_acl_view_legend_dropdown_1_Template, 1, 4, "acl-view-legend-dropdown", 9)(2, LegendComponent_div_1_ng_container_1_ng_container_2_Template, 2, 1, "ng-container", 10); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx_r0.legendEntries.length > 3); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx_r0.legendEntries.length < 4); } } function LegendComponent_div_1_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵelementContainer(1, 6); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵadvance(); i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.template)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, ctx_r0.legendEntries)); } } function LegendComponent_div_1_ng_template_2_ng_template_1_acl_view_legend_dropdown_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "acl-view-legend-dropdown", 11); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(4); const legendTemplate_r2 = i0.ɵɵreference(4); i0.ɵɵproperty("data", ctx_r0.legendEntries)("noData", ctx_r0.noData)("legendTemplate", legendTemplate_r2)("isCard", ctx_r0.mode === "card"); } } function LegendComponent_div_1_ng_template_2_ng_template_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0, 13); i0.ɵɵtemplate(1, LegendComponent_div_1_ng_template_2_ng_template_1_acl_view_legend_dropdown_1_Template, 1, 4, "acl-view-legend-dropdown", 14); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵproperty("ngSwitch", ctx_r0.template); i0.ɵɵadvance(); i0.ɵɵproperty("ngSwitchCase", "dropdown"); } } function LegendComponent_div_1_ng_template_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, LegendComponent_div_1_ng_template_2_ng_container_0_Template, 2, 4, "ng-container", 8)(1, LegendComponent_div_1_ng_template_2_ng_template_1_Template, 2, 2, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor); } if (rf & 2) { const builtinTemplate_r3 = i0.ɵɵreference(2); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵproperty("ngIf", ctx_r0.isTemplateRef(ctx_r0.template))("ngIfElse", builtinTemplate_r3); } } function LegendComponent_div_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 7); i0.ɵɵtemplate(1, LegendComponent_div_1_ng_container_1_Template, 3, 2, "ng-container", 8)(2, LegendComponent_div_1_ng_template_2_Template, 3, 2, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor); i0.ɵɵelementEnd(); } if (rf & 2) { const custom_r4 = i0.ɵɵreference(3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", !ctx_r0.template)("ngIfElse", custom_r4); } } function LegendComponent_div_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 5); i0.ɵɵelementContainer(1, 12); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.rightOperation); } } function LegendComponent_ng_template_3_li_1_Template(rf, ctx) { if (rf & 1) { const _r5 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "li", 18)(1, "aui-checkbox", 19); i0.ɵɵtwoWayListener("ngModelChange", function LegendComponent_ng_template_3_li_1_Template_aui_checkbox_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.allSelected, $event) || (ctx_r0.allSelected = $event); return i0.ɵɵresetView($event); }); i0.ɵɵlistener("ngModelChange", function LegendComponent_ng_template_3_li_1_Template_aui_checkbox_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.allSelect($event)); }); i0.ɵɵtext(2); i0.ɵɵpipe(3, "translate"); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵadvance(); i0.ɵɵtwoWayProperty("ngModel", ctx_r0.allSelected); i0.ɵɵadvance(); i0.ɵɵtextInterpolate1(" ", ctx_r0.selectAllName || i0.ɵɵpipeBind1(3, 2, "select_all"), " "); } } function LegendComponent_ng_template_3_li_2_Template(rf, ctx) { if (rf & 1) { const _r6 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "li", 20); i0.ɵɵpipe(1, "translate"); i0.ɵɵlistener("click", function LegendComponent_ng_template_3_li_2_Template_li_click_0_listener() { const legend_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.selected(legend_r7)); }); i0.ɵɵelement(2, "span", 21); i0.ɵɵelementStart(3, "span", 22); i0.ɵɵtext(4); i0.ɵɵpipe(5, "translate"); i0.ɵɵelementEnd()(); } if (rf & 2) { const legend_r7 = ctx.$implicit; const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵclassProp("disable", !legend_r7.activate || ctx_r0.noData)("forbid", ctx_r0.noData); i0.ɵɵproperty("title", i0.ɵɵpipeBind1(1, 9, legend_r7.activate ? "click_hide" : "click_show")); i0.ɵɵadvance(2); i0.ɵɵstyleProp("background", legend_r7.color); i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(13, _c1, ctx_r0.symbolName)); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r0.translation ? i0.ɵɵpipeBind1(5, 11, legend_r7.name) : legend_r7.name); } } function LegendComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "ul", 15); i0.ɵɵtemplate(1, LegendComponent_ng_template_3_li_1_Template, 4, 4, "li", 16)(2, LegendComponent_ng_template_3_li_2_Template, 6, 15, "li", 17); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", !ctx_r0.noData && ctx_r0.selectAllOperation && ctx_r0.template === "dropdown"); i0.ɵɵadvance(); i0.ɵɵproperty("ngForOf", ctx_r0.legendEntries); } } export class LegendPayload { } export class LegendComponent { get noData() { return this.legendEntries?.length === 0 || !this.legendEntries; } get legendInstance() { return this.chart?.components.get('legend'); } get legendItem() { return (this.legendInstance?.getLegend()?.map(legend => ({ ...legend, activate: true, })) || []); } get symbolName() { return `symbol-${this.symbol}`; } constructor(cdr) { this.cdr = cdr; this.symbol = 'line'; this.mode = 'default'; this.translation = true; this.selectAllOperation = false; this.changeLegend = new EventEmitter(); this.legendEntries = []; this.isTemplateRef = isTemplateRef; this.allSelected = true; } ngOnChanges({ chart }) { if (chart.currentValue) { this.legendEntries = this.legendItem; } } ngOnInit() { this.legendEntries = this.legendItem; this.chart?.on(ChartEvent.DATA_CHANGE, (data) => { this.legendEntries = data.reduce((acc, d) => [ ...acc, ...(d.name ? [ { name: d.name, color: d.color, activate: !this.legendInstance.inactivatedSet.has(d.name), hover: false, value: d.values[d.values?.length - 1].y, source: d, unit: get(d, 'unit'), ...d, }, ] : []), ], []); if (this.legendEntries.length) { this.changeLegend.next(this.legendEntries); } this.cdr.markForCheck(); }); } selected(legend) { this.legendInstance.legendItemClick({ name: legend.name, activated: !legend.activate, }); const legendItem = this.legendEntries.find(item => item.name === legend.name); legendItem.activate = !legend.activate; this.changeLegend.next(this.legendEntries); this.cdr.markForCheck(); } allSelect(select) { this.legendEntries.forEach(legend => { this.legendInstance.legendItemClick({ name: legend.name, activated: select, }); legend.activate = select; }); this.changeLegend.next(this.legendEntries); } static { this.ɵfac = function LegendComponent_Factory(t) { return new (t || LegendComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LegendComponent, selectors: [["acl-base-legend"]], inputs: { symbol: "symbol", template: "template", mode: "mode", translation: "translation", leftOperation: "leftOperation", leftOperationContext: "leftOperationContext", rightOperation: "rightOperation", hideLegend: "hideLegend", selectAllOperation: "selectAllOperation", selectAllName: "selectAllName", chart: "chart" }, outputs: { changeLegend: "changeLegend" }, features: [i0.ɵɵNgOnChangesFeature], decls: 5, vars: 3, consts: [["legendTemplate", ""], ["custom", ""], ["builtinTemplate", ""], ["class", "operation", 4, "ngIf"], ["class", "legend-wrap operation", 4, "ngIf"], [1, "operation"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "legend-wrap", "operation"], [4, "ngIf", "ngIfElse"], ["class", "legend-vertical", 3, "data", "noData", "legendTemplate", "isCard", 4, "ngIf"], [4, "ngIf"], [1, "legend-vertical", 3, "data", "noData", "legendTemplate", "isCard"], [3, "ngTemplateOutlet"], [3, "ngSwitch"], ["class", "legend-vertical", 3, "data", "noData", "legendTemplate", "isCard", 4, "ngSwitchCase"], [1, "legend-labels"], ["class", "select-all", 4, "ngIf"], ["class", "legend-label", 3, "disable", "forbid", "title", "click", 4, "ngFor", "ngForOf"], [1, "select-all"], [3, "ngModelChange", "ngModel"], [1, "legend-label", 3, "click", "title"], [3, "ngClass"], [1, "label-name"]], template: function LegendComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, LegendComponent_div_0_Template, 2, 2, "div", 3)(1, LegendComponent_div_1_Template, 4, 2, "div", 4)(2, LegendComponent_div_2_Template, 2, 1, "div", 3)(3, LegendComponent_ng_template_3_Template, 3, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor); } if (rf & 2) { i0.ɵɵproperty("ngIf", ctx.isTemplateRef(ctx.leftOperation)); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", !ctx.hideLegend); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx.isTemplateRef(ctx.rightOperation)); } }, styles: ["[_nghost-%COMP%]{flex:1;display:flex;justify-content:flex-end;align-items:center}.legend-wrap[_ngcontent-%COMP%]{display:inline-block}.legend-wrap[_ngcontent-%COMP%] ul[_ngcontent-%COMP%], .legend-wrap[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{padding:0;margin:0;list-style:none}.legend-wrap[_ngcontent-%COMP%] .legend-labels[_ngcontent-%COMP%]{display:flex}.legend-wrap[_ngcontent-%COMP%] .legend-label[_ngcontent-%COMP%]{display:flex;align-items:center;cursor:pointer;justify-content:center}.legend-wrap[_ngcontent-%COMP%] .legend-label[_ngcontent-%COMP%]:not(:last-child){margin-right:12px}.legend-wrap[_ngcontent-%COMP%] .forbid[_ngcontent-%COMP%]{cursor:no-drop}.legend-wrap[_ngcontent-%COMP%] .label-name[_ngcontent-%COMP%]{font-size:12px;color:rgb(var(--aui-color-secondary-text));max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.legend-wrap[_ngcontent-%COMP%] .label-symbol[_ngcontent-%COMP%]{margin-right:4px}.disable[_ngcontent-%COMP%] .label-symbol[_ngcontent-%COMP%]{background:rgb(var(--aui-color-n-6))!important}.disable[_ngcontent-%COMP%] .label-name[_ngcontent-%COMP%]{color:rgb(var(--aui-color-n-6))}.symbol-square[_ngcontent-%COMP%]{width:12px;height:12px;display:inline-block}.symbol-line[_ngcontent-%COMP%]{width:12px;height:2px;display:inline-block}.symbol-circle[_ngcontent-%COMP%]{width:6px;height:6px;border-radius:50%;display:inline-block}.operation[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;margin-left:8px}.select-all[_ngcontent-%COMP%] .aui-checkbox{font-size:12px;line-height:16px;margin-bottom:8px}"], changeDetection: 0 }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LegendComponent, [{ type: Component, args: [{ selector: 'acl-base-legend', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"operation\"\n *ngIf=\"isTemplateRef(leftOperation)\"\n>\n <ng-container\n [ngTemplateOutlet]=\"leftOperation\"\n [ngTemplateOutletContext]=\"leftOperationContext\"\n ></ng-container>\n</div>\n\n<div\n class=\"legend-wrap operation\"\n *ngIf=\"!hideLegend\"\n>\n <ng-container *ngIf=\"!template; else custom\">\n <acl-view-legend-dropdown\n class=\"legend-vertical\"\n *ngIf=\"legendEntries.length > 3\"\n [data]=\"legendEntries\"\n [noData]=\"noData\"\n [legendTemplate]=\"legendTemplate\"\n [isCard]=\"mode === 'card'\"\n >\n </acl-view-legend-dropdown>\n <ng-container *ngIf=\"legendEntries.length < 4\">\n <ng-container [ngTemplateOutlet]=\"legendTemplate\"></ng-container>\n </ng-container>\n </ng-container>\n <ng-template #custom>\n <ng-container *ngIf=\"isTemplateRef(template); else builtinTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"$any(template)\"\n [ngTemplateOutletContext]=\"{ context: legendEntries }\"\n ></ng-container>\n </ng-container>\n <ng-template #builtinTemplate>\n <ng-container [ngSwitch]=\"template\">\n <acl-view-legend-dropdown\n class=\"legend-vertical\"\n *ngSwitchCase=\"'dropdown'\"\n [data]=\"legendEntries\"\n [noData]=\"noData\"\n [legendTemplate]=\"legendTemplate\"\n [isCard]=\"mode === 'card'\"\n >\n </acl-view-legend-dropdown>\n </ng-container>\n </ng-template>\n </ng-template>\n</div>\n\n<div\n class=\"operation\"\n *ngIf=\"isTemplateRef(rightOperation)\"\n>\n <ng-container [ngTemplateOutlet]=\"rightOperation\"></ng-container>\n</div>\n\n<ng-template #legendTemplate>\n <ul class=\"legend-labels\">\n <li\n class=\"select-all\"\n *ngIf=\"!noData && selectAllOperation && template === 'dropdown'\"\n >\n <aui-checkbox\n [(ngModel)]=\"allSelected\"\n (ngModelChange)=\"allSelect($event)\"\n >\n {{ selectAllName || ('select_all' | translate) }}\n </aui-checkbox>\n </li>\n <li\n class=\"legend-label\"\n [class.disable]=\"!legend.activate || noData\"\n [class.forbid]=\"noData\"\n [title]=\"(legend.activate ? 'click_hide' : 'click_show') | translate\"\n *ngFor=\"let legend of legendEntries; let i = index\"\n (click)=\"selected(legend)\"\n >\n <span\n [ngClass]=\"[symbolName, 'label-symbol']\"\n [style.background]=\"legend.color\"\n >\n </span>\n <span class=\"label-name\">{{\n translation ? (legend.name | translate) : legend.name\n }}</span>\n </li>\n </ul>\n</ng-template>\n", styles: [":host{flex:1;display:flex;justify-content:flex-end;align-items:center}.legend-wrap{display:inline-block}.legend-wrap ul,.legend-wrap li{padding:0;margin:0;list-style:none}.legend-wrap .legend-labels{display:flex}.legend-wrap .legend-label{display:flex;align-items:center;cursor:pointer;justify-content:center}.legend-wrap .legend-label:not(:last-child){margin-right:12px}.legend-wrap .forbid{cursor:no-drop}.legend-wrap .label-name{font-size:12px;color:rgb(var(--aui-color-secondary-text));max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.legend-wrap .label-symbol{margin-right:4px}.disable .label-symbol{background:rgb(var(--aui-color-n-6))!important}.disable .label-name{color:rgb(var(--aui-color-n-6))}.symbol-square{width:12px;height:12px;display:inline-block}.symbol-line{width:12px;height:2px;display:inline-block}.symbol-circle{width:6px;height:6px;border-radius:50%;display:inline-block}.operation{display:flex;justify-content:center;align-items:center;margin-left:8px}.select-all ::ng-deep .aui-checkbox{font-size:12px;line-height:16px;margin-bottom:8px}\n"] }] }], () => [{ type: i0.ChangeDetectorRef }], { symbol: [{ type: Input }], template: [{ type: Input }], mode: [{ type: Input }], translation: [{ type: Input }], leftOperation: [{ type: Input }], leftOperationContext: [{ type: Input }], rightOperation: [{ type: Input }], hideLegend: [{ type: Input }], selectAllOperation: [{ type: Input }], selectAllName: [{ type: Input }], chart: [{ type: Input }], changeLegend: [{ type: Output }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LegendComponent, { className: "LegendComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnZW5kLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy92aWV3LXpjaGFydC9sZWdlbmQvbGVnZW5kLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy92aWV3LXpjaGFydC9sZWdlbmQvbGVnZW5kLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxLQUFLLEVBQXlCLFVBQVUsRUFBUSxNQUFNLFVBQVUsQ0FBQzs7Ozs7SUNkMUUsOEJBR0M7SUFDQywyQkFHZ0I7SUFDbEIsaUJBQU07OztJQUhGLGNBQWtDO0lBQ2xDLEFBREEsdURBQWtDLHdEQUNjOzs7SUFTaEQsK0NBUTJCOzs7O0lBRnpCLEFBREEsQUFEQSxBQURBLDJDQUFzQix5QkFDTCxxQ0FDZ0Isa0NBQ1A7OztJQUc1Qiw2QkFBK0M7SUFDN0MsNEJBQWlFOzs7OztJQUFuRCxjQUFtQztJQUFuQyxvREFBbUM7OztJQVhyRCw2QkFBNkM7SUFVM0MsQUFUQSwrSEFPQywyRkFFOEM7Ozs7SUFQNUMsY0FBOEI7SUFBOUIsc0RBQThCO0lBT2xCLGNBQThCO0lBQTlCLHNEQUE4Qjs7O0lBSzdDLDZCQUFvRTtJQUNsRSwyQkFHZ0I7Ozs7SUFGZCxjQUFtQztJQUNuQyxBQURBLGtEQUFtQyw2RUFDbUI7OztJQUt0RCwrQ0FRMkI7Ozs7SUFGekIsQUFEQSxBQURBLEFBREEsMkNBQXNCLHlCQUNMLHFDQUNn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QUFVO2tCQUFsQixLQUFLO1lBRUcsa0JBQWtCO2tCQUExQixLQUFLO1lBRUcsYUFBYTtrQkFBckIsS0FBSztZQUVHLEtBQUs7a0JBQWIsS0FBSztZQUVJLFlBQVk7a0JBQXJCLE1BQU07O2tGQXZCSSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNUZW1wbGF0ZVJlZiB9IGZyb20gJ0BhbGF1ZGEvdWknO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBDaGFydCwgTGVnZW5kIGFzIENoYXJ0TGVnZW5kLCBDaGFydEV2ZW50LCBEYXRhIH0gZnJvbSAnenotY2hhcnQnO1xuXG5pbXBvcnQgeyBTdHJpbmdNYXAgfSBmcm9tICcuLi8uLi9jb3JlL3B1YmxpYy1hcGknO1xuXG5leHBvcnQgaW50ZXJmYWNlIExlZ2VuZEl0ZW0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvbG9yOiBzdHJpbmc7XG4gIGFjdGl2YXRlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIExlZ2VuZFBheWxvYWQge1xuICBsZWdlbmQ6IExlZ2VuZEl0ZW07XG4gIHNvdXJjZTogTGVnZW5kSXRlbVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtYmFzZS1sZWdlbmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGVnZW5kLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGVnZW5kLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBMZWdlbmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHN5bWJvbDogJ2NpcmNsZScgfCAnc3F1YXJlJyB8ICdsaW5lJyA9ICdsaW5lJztcblxuICBASW5wdXQoKSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBzdHJpbmcgfCAnZHJvcGRvd24nO1xuXG4gIEBJbnB1dCgpIG1vZGU6ICdjYXJkJyB8ICdkZWZhdWx0JyA9ICdkZWZhdWx0JztcblxuICBASW5wdXQoKSB0cmFuc2xhdGlvbiA9IHRydWU7XG5cbiAgQElucHV0KCkgbGVmdE9wZXJhdGlvbjogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KCkgbGVmdE9wZXJhdGlvbkNvbnRleHQ6IFN0cmluZ01hcDtcblxuICBASW5wdXQoKSByaWdodE9wZXJhdGlvbjogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KCkgaGlkZUxlZ2VuZDogYm9vbGVhbjtcblxuICBASW5wdXQoKSBzZWxlY3RBbGxPcGVyYXRpb24gPSBmYWxzZTtcblxuICBASW5wdXQoKSBzZWxlY3RBbGxOYW1lOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgY2hhcnQ6IENoYXJ0O1xuXG4gIEBPdXRwdXQoKSBjaGFuZ2VMZWdlbmQgPSBuZXcgRXZlbnRFbWl0dGVyPExlZ2VuZEl0ZW1bXT4oKTtcblxuICBnZXQgbm9EYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmxlZ2VuZEVudHJpZXM/Lmxlbmd0aCA9PT0gMCB8fCAhdGhpcy5sZWdlbmRFbnRyaWVzO1xuICB9XG5cbiAgZ2V0IGxlZ2VuZEluc3RhbmNlKCk6IENoYXJ0TGVnZW5kIHtcbiAgICByZXR1cm4gdGhpcy5jaGFydD8uY29tcG9uZW50cy5nZXQoJ2xlZ2VuZCcpIGFzIENoYXJ0TGVnZW5kO1xuICB9XG5cbiAgZ2V0IGxlZ2VuZEl0ZW0oKTogTGVnZW5kSXRlbVtdIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMubGVnZW5kSW5zdGFuY2U/LmdldExlZ2VuZCgpIGFzIExlZ2VuZEl0ZW1bXSk/Lm1hcChsZWdlbmQgPT4gKHtcbiAgICAgICAgLi4ubGVnZW5kLFxuICAgICAgICBhY3RpdmF0ZTogdHJ1ZSxcbiAgICAgIH0pKSB8fCBbXVxuICAgICk7XG4gIH1cblxuICBsZWdlbmRFbnRyaWVzOiBMZWdlbmRJdGVtW10gPSBbXTtcblxuICBpc1RlbXBsYXRlUmVmID0gaXNUZW1wbGF0ZVJlZjtcblxuICBhbGxTZWxlY3RlZCA9IHRydWU7XG5cbiAgZ2V0IHN5bWJvbE5hbWUoKSB7XG4gICAgcmV0dXJuIGBzeW1ib2wtJHt0aGlzLnN5bWJvbH1gO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkNoYW5nZXMoeyBjaGFydCB9OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYXJ0LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5sZWdlbmRFbnRyaWVzID0gdGhpcy5sZWdlbmRJdGVtO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubGVnZW5kRW50cmllcyA9IHRoaXMubGVnZW5kSXRlbTtcblxuICAgIHRoaXMuY2hhcnQ/Lm9uKENoYXJ0RXZlbnQuREFUQV9DSEFOR0UsIChkYXRhOiBEYXRhKSA9PiB7XG4gICAgICB0aGlzLmxlZ2VuZEVudHJpZXMgPSBkYXRhLnJlZHVjZShcbiAgICAgICAgKGFjYywgZCkgPT4gW1xuICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAuLi4oZC5uYW1lXG4gICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBkLm5hbWUsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogZC5jb2xvcixcbiAgICAgICAgICAgICAgICAgIGFjdGl2YXRlOiAhdGhpcy5sZWdlbmRJbnN0YW5jZS5pbmFjdGl2YXRlZFNldC5oYXMoZC5uYW1lKSxcbiAgICAgICAgICAgICAgICAgIGhvdmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBkLnZhbHVlc1tkLnZhbHVlcz8ubGVuZ3RoIC0gMV0ueSxcbiAgICAgICAgICAgICAgICAgIHNvdXJjZTogZCxcbiAgICAgICAgICAgICAgICAgIHVuaXQ6IGdldChkLCAndW5pdCcpLFxuICAgICAgICAgICAgICAgICAgLi4uZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgXSxcbiAgICAgICAgW10sXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMubGVnZW5kRW50cmllcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VMZWdlbmQubmV4dCh0aGlzLmxlZ2VuZEVudHJpZXMpO1xuICAgICAgfVxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3RlZChsZWdlbmQ6IExlZ2VuZEl0ZW0pIHtcbiAgICB0aGlzLmxlZ2VuZEluc3RhbmNlLmxlZ2VuZEl0ZW1DbGljayh7XG4gICAgICBuYW1lOiBsZWdlbmQubmFtZSxcbiAgICAgIGFjdGl2YXRlZDogIWxlZ2VuZC5hY3RpdmF0ZSxcbiAgICB9KTtcbiAgICBjb25zdCBsZWdlbmRJdGVtID0gdGhpcy5sZWdlbmRFbnRyaWVzLmZpbmQoXG4gICAgICBpdGVtID0+IGl0ZW0ubmFtZSA9PT0gbGVnZW5kLm5hbWUsXG4gICAgKTtcbiAgICBsZWdlbmRJdGVtLmFjdGl2YXRlID0gIWxlZ2VuZC5hY3RpdmF0ZTtcbiAgICB0aGlzLmNoYW5nZUxlZ2VuZC5uZXh0KHRoaXMubGVnZW5kRW50cmllcyk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBhbGxTZWxlY3Qoc2VsZWN0OiBib29sZWFuKSB7XG4gICAgdGhpcy5sZWdlbmRFbnRyaWVzLmZvckVhY2gobGVnZW5kID0+IHtcbiAgICAgIHRoaXMubGVnZW5kSW5zdGFuY2UubGVnZW5kSXRlbUNsaWNrKHtcbiAgICAgICAgbmFtZTogbGVnZW5kLm5hbWUsXG4gICAgICAgIGFjdGl2YXRlZDogc2VsZWN0LFxuICAgICAgfSk7XG4gICAgICBsZWdlbmQuYWN0aXZhdGUgPSBzZWxlY3Q7XG4gICAgfSk7XG4gICAgdGhpcy5jaGFuZ2VMZWdlbmQubmV4dCh0aGlzLmxlZ2VuZEVudHJpZXMpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwib3BlcmF0aW9uXCJcbiAgKm5nSWY9XCJpc1RlbXBsYXRlUmVmKGxlZnRPcGVyYXRpb24pXCJcbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxlZnRPcGVyYXRpb25cIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJsZWZ0T3BlcmF0aW9uQ29udGV4dFwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48ZGl2XG4gIGNsYXNzPVwibGVnZW5kLXdyYXAgb3BlcmF0aW9uXCJcbiAgKm5nSWY9XCIhaGlkZUxlZ2VuZFwiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGVtcGxhdGU7IGVsc2UgY3VzdG9tXCI+XG4gICAgPGFjbC12aWV3LWxlZ2VuZC1kcm9wZG93blxuICAgICAgY2xhc3M9XCJsZWdlbmQtdmVydGljYWxcIlxuICAgICAgKm5nSWY9XCJsZWdlbmRFbnRyaWVzLmxlbmd0aCA+IDNcIlxuICAgICAgW2RhdGFdPVwibGVnZW5kRW50cmllc1wiXG4gICAgICBbbm9EYXRhXT1cIm5vRGF0YVwiXG4gICAgICBbbGVnZW5kVGVtcGxhdGVdPVwibGVnZW5kVGVtcGxhdGVcIlxuICAgICAgW2lzQ2FyZF09XCJtb2RlID09PSAnY2FyZCdcIlxuICAgID5cbiAgICA8L2FjbC12aWV3LWxlZ2VuZC1kcm9wZG93bj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGVnZW5kRW50cmllcy5sZW5ndGggPCA0XCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxlZ2VuZFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI2N1c3RvbT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZih0ZW1wbGF0ZSk7IGVsc2UgYnVpbHRpblRlbXBsYXRlXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkodGVtcGxhdGUpXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY29udGV4dDogbGVnZW5kRW50cmllcyB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2J1aWx0aW5UZW1wbGF0ZT5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInRlbXBsYXRlXCI+XG4gICAgICAgIDxhY2wtdmlldy1sZWdlbmQtZHJvcGRvd25cbiAgICAgICAgICBjbGFzcz1cImxlZ2VuZC12ZXJ0aWNhbFwiXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIlxuICAgICAgICAgIFtkYXRhXT1cImxlZ2VuZEVudHJpZXNcIlxuICAgICAgICAgIFtub0RhdGFdPVwibm9EYXRhXCJcbiAgICAgICAgICBbbGVnZW5kVGVtcGxhdGVdPVwibGVnZW5kVGVtcGxhdGVcIlxuICAgICAgICAgIFtpc0NhcmRdPVwibW9kZSA9PT0gJ2NhcmQnXCJcbiAgICAgICAgPlxuICAgICAgICA8L2FjbC12aWV3LWxlZ2VuZC1kcm9wZG93bj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPGRpdlxuICBjbGFzcz1cIm9wZXJhdGlvblwiXG4gICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZihyaWdodE9wZXJhdGlvbilcIlxuPlxuICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJpZ2h0T3BlcmF0aW9uXCI+PC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNsZWdlbmRUZW1wbGF0ZT5cbiAgPHVsIGNsYXNzPVwibGVnZW5kLWxhYmVsc1wiPlxuICAgIDxsaVxuICAgICAgY2xhc3M9XCJzZWxlY3QtYWxsXCJcbiAgICAgICpuZ0lmPVwiIW5vRGF0YSAmJiBzZWxlY3RBbGxPcGVyYXRpb24gJiYgdGVtcGxhdGUgPT09ICdkcm9wZG93bidcIlxuICAgID5cbiAgICAgIDxhdWktY2hlY2tib3hcbiAgICAgICAgWyhuZ01vZGVsKV09XCJhbGxTZWxlY3RlZFwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImFsbFNlbGVjdCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAge3sgc2VsZWN0QWxsTmFtZSB8fCAoJ3NlbGVjdF9hbGwnIHwgdHJhbnNsYXRlKSB9fVxuICAgICAgPC9hdWktY2hlY2tib3g+XG4gICAgPC9saT5cbiAgICA8bGlcbiAgICAgIGNsYXNzPVwibGVnZW5kLWxhYmVsXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlXT1cIiFsZWdlbmQuYWN0aXZhdGUgfHwgbm9EYXRhXCJcbiAgICAgIFtjbGFzcy5mb3JiaWRdPVwibm9EYXRhXCJcbiAgICAgIFt0aXRsZV09XCIobGVnZW5kLmFjdGl2YXRlID8gJ2NsaWNrX2hpZGUnIDogJ2NsaWNrX3Nob3cnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAqbmdGb3I9XCJsZXQgbGVnZW5kIG9mIGxlZ2VuZEVudHJpZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdGVkKGxlZ2VuZClcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtuZ0NsYXNzXT1cIltzeW1ib2xOYW1lLCAnbGFiZWwtc3ltYm9sJ11cIlxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJsZWdlbmQuY29sb3JcIlxuICAgICAgPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC1uYW1lXCI+e3tcbiAgICAgICAgdHJhbnNsYXRpb24gPyAobGVnZW5kLm5hbWUgfCB0cmFuc2xhdGUpIDogbGVnZW5kLm5hbWVcbiAgICAgIH19PC9zcGFuPlxuICAgIDwvbGk+XG4gIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuIl19