gamma-app-controller 3.0.1 → 3.0.3
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/esm2020/lib/application-controller/application-dataset-component/create-dataset/create-dataset.component.mjs +2 -2
- package/esm2020/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.mjs +8 -3
- package/esm2020/lib/application-controller/page-controller/page-config/page-config.component.mjs +3 -28
- package/esm2020/lib/application-controller/support-components/dash-chart/dash-chart.component.mjs +23 -3
- package/esm2020/lib/application-controller/support-components/dash-table/dash-table.component.mjs +17 -4
- package/esm2020/lib/application-controller/support-components/dash-today-previous/dash-today-previous.component.mjs +3 -3
- package/esm2020/lib/application-controller/support-components/geo-map/geo-map.component.mjs +4 -3
- package/esm2020/lib/application-controller/support-components/heat-map/heat-map.component.mjs +23 -3
- package/esm2020/lib/application-controller/support-components/table-with-bar/table-with-bar.component.mjs +24 -3
- package/esm2020/lib/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.mjs +14 -1
- package/esm2020/lib/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.mjs +15 -3
- package/esm2020/lib/shared/advanced-component/gamma-geo-chart/gamma-geo-chart.component.mjs +3 -3
- package/esm2020/lib/shared/advanced-component/gamma-table-with-percentage/gamma-table-with-percentage.component.mjs +2 -1
- package/esm2020/lib/shared/template-dataset-call-service.mjs +10 -3
- package/esm2020/lib/template-module/KpiCreationModule/create-kpi-tree.component.mjs +2 -1
- package/esm2020/lib/template-module/kpiWithMultiLayout/kpi-with-multilayout.component.mjs +2 -2
- package/esm2020/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.mjs +72 -9
- package/fesm2015/gamma-app-controller.mjs +6082 -5928
- package/fesm2015/gamma-app-controller.mjs.map +1 -1
- package/fesm2020/gamma-app-controller.mjs +6195 -6044
- package/fesm2020/gamma-app-controller.mjs.map +1 -1
- package/lib/application-controller/support-components/dash-chart/dash-chart.component.d.ts +2 -0
- package/lib/application-controller/support-components/dash-table/dash-table.component.d.ts +1 -0
- package/lib/application-controller/support-components/heat-map/heat-map.component.d.ts +2 -0
- package/lib/application-controller/support-components/table-with-bar/table-with-bar.component.d.ts +2 -0
- package/lib/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.d.ts +1 -0
- package/lib/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.d.ts +1 -0
- package/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.d.ts +3 -1
- package/package.json +1 -1
package/esm2020/lib/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.mjs
CHANGED
|
@@ -512,6 +512,19 @@ export class GammaAdvanceChartComponent {
|
|
|
512
512
|
listOfGroupByData: Array.from(uniqueGroups)
|
|
513
513
|
};
|
|
514
514
|
}
|
|
515
|
+
getParamsTitle(data) {
|
|
516
|
+
const config = this.page_config.kpiConfig.dataConfig.commonConfig;
|
|
517
|
+
const titleTemplate = config['title'];
|
|
518
|
+
const hasParams = /\$P\{.*?\}/.test(titleTemplate);
|
|
519
|
+
if (!hasParams) {
|
|
520
|
+
const title_params = data[config['dataField']];
|
|
521
|
+
return titleTemplate + (title_params ?? '');
|
|
522
|
+
}
|
|
523
|
+
let result = titleTemplate.replace(/\$P\{(.*?)\}/g, (_, key) => {
|
|
524
|
+
return data[key] ?? '';
|
|
525
|
+
});
|
|
526
|
+
return result;
|
|
527
|
+
}
|
|
515
528
|
}
|
|
516
529
|
GammaAdvanceChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GammaAdvanceChartComponent, deps: [{ token: i1.CommonService }, { token: i2.ToastrService }, { token: i3.kpicommonService }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: APP_ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
517
530
|
GammaAdvanceChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GammaAdvanceChartComponent, selector: "app-gamma-advance-chart", inputs: { componentId: "componentId", kpi_name: "kpi_name", chartDataSource: "chartDataSource" }, outputs: { onChartPointClick: "onChartPointClick" }, ngImport: i0, template: "<div class=\"not-full-screen\" (dblclick)=\"toggleFullScreen()\">\n <ng-container *ngIf=\"page_config?.widGetConfig?.display\">\n <app-title [title]=\"page_config.widGetConfig.widgetTitle\" [operators]=\"page_config.operations\"\n [displayType]=\"'chart'\"></app-title>\n </ng-container>\n <div class=\"mx-2 p-2 bg-gray-200 dark:bg-gray-800 text-gray-900 dark:text-gray-100\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <ng-container\n *ngIf=\"chartConfig.chartType !== 'doughnut' && chartConfig.chartType !== 'pie' && chartConfig.chartType !== 'funnel' && chartConfig.chartType !== 'bubble'\">\n\n <dx-chart id=\"chart\" [dataSource]=\"finalChartDataSource\" (onPointClick)=\"getAllChartPointClick($event)\"\n [palette]=\"chartConfig.palette\" [title]=\"{ text: chartConfig.caption, font: { size: 14 } }\"\n *ngIf=\"!isLoader\" [valueAxis]=\"chartConfig.valueAxisConfig\">\n <ng-container *ngIf=\"chartConfig.size\">\n <dxo-size [height]=\"chartConfig.size\">\n </dxo-size>\n </ng-container>\n\n <ng-container *ngFor=\"let item of chartConfig.chart_config\">\n <ng-container *ngIf=\"item && item.axis\">\n <dxi-value-axis name=\"{{item.axis}}\" position=\"{{item.position}}\">\n <dxo-title text=\"{{item.name}}\"></dxo-title>\n </dxi-value-axis>\n </ng-container>\n\n </ng-container>\n\n\n <dxo-argument-axis>\n <dxo-label overlappingBehavior=\"rotate\" [rotationAngle]=\"270\"></dxo-label>\n </dxo-argument-axis>\n <dxo-tooltip [enabled]=\"true\" [shared]=\"true\" [customizeTooltip]=\"customizeTooltip\">\n </dxo-tooltip>\n <dxo-common-series-settings argumentField=\"{{chartConfig.argumentField}}\">\n </dxo-common-series-settings>\n\n\n <!-- for others single access chart start -->\n <ng-container *ngIf=\"chartConfig.chartType !== 'stackedBar' && chartConfig.chartType !== 'multiLine' && chartConfig.chartType !== 'multiBar'\">\n <ng-container *ngFor=\"let item of chartConfig.chart_config\">\n <ng-container *ngIf=\"item && item.color\">\n <dxi-series type=\"{{item.type}}\" valueField=\"{{item.valueField}}\" axis=\"{{item.axis}}\"\n name=\"{{item.name}}\" color=\"{{item.color}}\">\n </dxi-series>\n </ng-container>\n <ng-container *ngIf=\"item && !item.color\">\n <dxi-series type=\"{{item.type}}\" valueField=\"{{item.valueField}}\" axis=\"{{item.axis}}\"\n name=\"{{item.name}}\">\n </dxi-series>\n </ng-container>\n </ng-container>\n </ng-container>\n <!-- for others single access chart end -->\n\n <!-- for stackber start -->\n <ng-container *ngIf=\"chartConfig.chartType === 'stackedBar' || chartConfig.chartType === 'multiLine' || chartConfig.chartType === 'multiBar' \" >\n <ng-container *ngFor=\"let item of chartWithThreeDimentionDataSeries\">\n <dxi-series valueField=\"{{item}}\" name=\"{{item}}\" type=\"{{chartTypeWhenMultiSeries}}\"></dxi-series>\n </ng-container>\n </ng-container>\n <!-- for stackber end -->\n\n <dxo-size [height]=\"chartHeight\">\n </dxo-size>\n <dxo-legend [visible]=\"chartConfig.legendDisplay\" verticalAlignment=\"{{chartConfig.verticalAlignment}}\"\n horizontalAlignment=\"{{chartConfig.horizontalAlignment}}\">\n </dxo-legend>\n </dx-chart>\n </ng-container>\n\n\n\n <ng-container *ngIf=\"chartConfig.chartType === 'doughnut' || chartConfig.chartType === 'pie'\">\n\n <dx-pie-chart id=\"pie\" [type]=\"chartConfig.chartType\"\n [title]=\"{ text: chartConfig.caption, font: { size: 14 } }\" [dataSource]=\"finalChartDataSource\"\n centerTemplate=\"centerTemplate\" (onPointClick)=\"pointClickHandler($event)\"\n [palette]=\"chartConfig.palette\">\n\n <ng-container *ngFor=\"let item of chartConfig.chart_config\">\n <ng-container *ngIf=\"item.color\">\n <dxi-series argumentField={{chartConfig.argumentField}} valueField=\"{{item.valueField}}\"\n name=\"{{item.name}}\" color=\"{{item.color}}\">\n <dxo-label [visible]=\"chartConfig.labelDisplay\" format=\"currency\">\n <dxo-connector [visible]=\"true\"></dxo-connector>\n </dxo-label>\n </dxi-series>\n </ng-container>\n <ng-container *ngIf=\"!item.color\">\n <dxi-series argumentField={{chartConfig.argumentField}} valueField=\"{{item.valueField}}\"\n name=\"{{item.name}}\">\n <dxo-label [visible]=\"chartConfig.labelDisplay\" format=\"currency\">\n <dxo-connector [visible]=\"true\"></dxo-connector>\n </dxo-label>\n </dxi-series>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"chartConfig.size\">\n <dxo-size [height]=\"chartConfig.size\">\n </dxo-size>\n </ng-container>\n <dxo-legend [visible]=\"chartConfig.legendDisplay\"\n horizontalAlignment=\"{{chartConfig.horizontalAlignment}}\"\n verticalAlignment=\"{{chartConfig.verticalAlignment}}\"></dxo-legend>\n <!-- <dxo-export [enabled]=\"true\"></dxo-export> -->\n <dxo-tooltip [enabled]=\"true\" [customizeTooltip]=\"customizeTooltip\" format=\"currency\">\n </dxo-tooltip>\n <ng-container *ngIf=\"chartConfig.chartType === 'doughnut'\">\n <svg *dxTemplate=\"let pieChart of 'centerTemplate'\">\n <circle cx=\"100\" cy=\"100\" [attr.r]=\"pieChart.getInnerRadius() - 6\" fill=\"gray\" opacity=\"0.0001\">\n </circle>\n\n <text text-anchor=\"middle\" style=\"font-size: 0px\" x=\"100\" y=\"100\" fill=\"#eee\" *ngIf=\"chartConfig.displayCenterLabel\">\n <tspan x=\"100\">{{ calculateTotal(pieChart) }}</tspan>\n \n </text>\n </svg>\n </ng-container>\n </dx-pie-chart>\n </ng-container>\n\n <ng-container *ngIf=\"chartConfig.chartType === 'funnel'\">\n <dx-funnel id=\"funnel\" [dataSource]=\"finalChartDataSource\" argumentField=\"argument\" valueField=\"value\"\n palette=\"Soft Pastel\">\n <ng-container *ngIf=\"chartConfig.size\">\n <dxo-size [height]=\"chartConfig.size\">\n </dxo-size>\n </ng-container>\n <dxo-export [enabled]=\"false\"></dxo-export>\n <dxo-tooltip [enabled]=\"true\"> </dxo-tooltip>\n <dxo-item>\n <dxo-border [visible]=\"true\"> </dxo-border>\n </dxo-item>\n <dxo-label [visible]=\"true\" position=\"inside\" backgroundColor=\"none\"\n [customizeText]=\"customizeText\"></dxo-label>\n </dx-funnel>\n\n </ng-container>\n\n <ng-container *ngIf=\"chartConfig.chartType === 'bubble'\">\n <div class=\"mx-5 overflow-x-auto\">\n <ng-container *ngFor=\"let item of heatChartDataSource.dataSet\">\n <div class=\"flex flex-row\">\n <div class=\"h-10 text-sm items-center min-w-12 max-w-[30%] justify-center flex\">\n {{item.datasource}}\n </div>\n <div class=\"inline-block \">\n <div class=\"flex flex-nowrap justify-center \">\n <ng-container *ngFor=\"let box of item.dataset\">\n <div class=\"flex-shrink-0 min-w-10 max-w-[20%] h-10 text-sm cursor-pointer flex items-center justify-center text-gray-800\"\n [matTooltip]=\"'Record Date: ' + box.recordDate + '\\nRecharge Count: ' + box.toolTip\"\n matTooltipClass=\"custom-tooltip\">\n <div class=\"rounded-full\" [ngStyle]=\"{\n 'background-color': box.isHovered ? 'rgb(135, 184, 106)' : box.color,\n 'width.px': box.size,\n 'hover': box.hover,\n 'height.px': box.size\n }\" (mouseenter)=\"box.isHovered = true\"\n (mouseleave)=\"box.isHovered = false\">\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </ng-container>\n <div class=\"inline-block\">\n <div class=\"flex flex-nowrap justify-center\">\n <div class=\"flex-shrink-0 w-12 max-w-[20%] h-full flex items-center justify-center\"></div>\n <div *ngFor=\"let item of heatChartDataSource.argumentValue\"\n class=\"flex-shrink-0 w-10 max-w-[20%] min-h-14 flex text-sm items-center justify-center my-1\"\n [ngStyle]=\"{'height': 'auto'}\">\n <span class=\"text-rotate\">\n {{item}}\n </span>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n\n </div>\n\n <button *ngIf=\"isFullScreen\" class=\"close-button\" (click)=\"toggleFullScreen()\">Close</button>\n</div>", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i6.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "proxyUrl", "svgToCanvas", "allowExportSelectedData", "customizeExcelCell", "excelFilterEnabled", "excelWrapTextEnabled", "ignoreExcelErrors", "texts"] }, { kind: "component", type: i6.DxoLabelComponent, selector: "dxo-label", inputs: ["connectorColor", "connectorWidth", "customizeText", "font", "format", "indent", "visible", "horizontalAlignment", "position", "text", "verticalAlignment", "alignment", "customizeHint", "displayMode", "indentFromAxis", "overlappingBehavior", "rotationAngle", "staggeringSpacing", "template", "textOverflow", "wordWrap", "argumentFormat", "backgroundColor", "border", "connector", "displayFormat", "horizontalOffset", "showForZeroValues", "verticalOffset", "hideFirstOrLast", "indentFromTick", "useRangeColors", "location", "showColon", "radialOffset", "topIndent", "shadow", "useNodeColors", "dataField", "enabled"] }, { kind: "component", type: i6.DxoLegendComponent, selector: "dxo-legend", inputs: ["backgroundColor", "border", "columnCount", "columnItemSpacing", "customizeHint", "customizeItems", "customizeText", "font", "horizontalAlignment", "itemsAlignment", "itemTextFormat", "itemTextPosition", "margin", "markerSize", "markerTemplate", "orientation", "paddingLeftRight", "paddingTopBottom", "rowCount", "rowItemSpacing", "title", "verticalAlignment", "visible", "hoverMode", "position"] }, { kind: "component", type: i6.DxoBorderComponent, selector: "dxo-border", inputs: ["color", "cornerRadius", "dashStyle", "opacity", "visible", "width", "bottom", "left", "right", "top"] }, { kind: "component", type: i6.DxoTitleComponent, selector: "dxo-title", inputs: ["font", "horizontalAlignment", "margin", "placeholderSize", "subtitle", "text", "verticalAlignment", "textOverflow", "wordWrap", "alignment"] }, { kind: "component", type: i6.DxoSizeComponent, selector: "dxo-size", inputs: ["height", "width"] }, { kind: "component", type: i6.DxoTooltipComponent, selector: "dxo-tooltip", inputs: ["arrowLength", "border", "color", "container", "contentTemplate", "cornerRadius", "customizeTooltip", "enabled", "font", "format", "interactive", "opacity", "paddingLeftRight", "paddingTopBottom", "shadow", "zIndex", "argumentFormat", "location", "shared", "isShown", "text", "position", "showMode", "customizeLinkTooltip", "customizeNodeTooltip", "linkTooltipTemplate", "nodeTooltipTemplate"] }, { kind: "component", type: i7.DxChartComponent, selector: "dx-chart", inputs: ["adaptiveLayout", "adjustOnZoom", "animation", "annotations", "argumentAxis", "autoHidePointMarkers", "barGroupPadding", "barGroupWidth", "commonAnnotationSettings", "commonAxisSettings", "commonPaneSettings", "commonSeriesSettings", "containerBackgroundColor", "crosshair", "customizeAnnotation", "customizeLabel", "customizePoint", "dataPrepareSettings", "dataSource", "defaultPane", "disabled", "elementAttr", "export", "legend", "loadingIndicator", "margin", "maxBubbleSize", "minBubbleSize", "negativesAsZeroes", "palette", "paletteExtensionMode", "panes", "pathModified", "pointSelectionMode", "redrawOnResize", "resizePanesOnZoom", "resolveLabelOverlapping", "rotated", "rtlEnabled", "scrollBar", "series", "seriesSelectionMode", "seriesTemplate", "size", "stickyHovering", "synchronizeMultiAxes", "theme", "title", "tooltip", "valueAxis", "zoomAndPan"], outputs: ["onArgumentAxisClick", "onDisposing", "onDone", "onDrawn", "onExported", "onExporting", "onFileSaving", "onIncidentOccurred", "onInitialized", "onLegendClick", "onOptionChanged", "onPointClick", "onPointHoverChanged", "onPointSelectionChanged", "onSeriesClick", "onSeriesHoverChanged", "onSeriesSelectionChanged", "onTooltipHidden", "onTooltipShown", "onZoomEnd", "onZoomStart", "adaptiveLayoutChange", "adjustOnZoomChange", "animationChange", "annotationsChange", "argumentAxisChange", "autoHidePointMarkersChange", "barGroupPaddingChange", "barGroupWidthChange", "commonAnnotationSettingsChange", "commonAxisSettingsChange", "commonPaneSettingsChange", "commonSeriesSettingsChange", "containerBackgroundColorChange", "crosshairChange", "customizeAnnotationChange", "customizeLabelChange", "customizePointChange", "dataPrepareSettingsChange", "dataSourceChange", "defaultPaneChange", "disabledChange", "elementAttrChange", "exportChange", "legendChange", "loadingIndicatorChange", "marginChange", "maxBubbleSizeChange", "minBubbleSizeChange", "negativesAsZeroesChange", "paletteChange", "paletteExtensionModeChange", "panesChange", "pathModifiedChange", "pointSelectionModeChange", "redrawOnResizeChange", "resizePanesOnZoomChange", "resolveLabelOverlappingChange", "rotatedChange", "rtlEnabledChange", "scrollBarChange", "seriesChange", "seriesSelectionModeChange", "seriesTemplateChange", "sizeChange", "stickyHoveringChange", "synchronizeMultiAxesChange", "themeChange", "titleChange", "tooltipChange", "valueAxisChange", "zoomAndPanChange"] }, { kind: "component", type: i6.DxoArgumentAxisComponent, selector: "dxo-argument-axis", inputs: ["aggregateByCategory", "aggregatedPointsPosition", "aggregationGroupWidth", "aggregationInterval", "allowDecimals", "argumentType", "axisDivisionFactor", "breaks", "breakStyle", "categories", "color", "constantLines", "constantLineStyle", "customPosition", "customPositionAxis", "discreteAxisDivisionMode", "endOnTick", "grid", "holidays", "hoverMode", "inverted", "label", "linearThreshold", "logarithmBase", "maxValueMargin", "minorGrid", "minorTick", "minorTickCount", "minorTickInterval", "minValueMargin", "minVisualRangeLength", "offset", "opacity", "placeholderSize", "position", "singleWorkdays", "strips", "stripStyle", "tick", "tickInterval", "title", "type", "valueMarginsEnabled", "visible", "visualRange", "visualRangeUpdateMode", "wholeRange", "width", "workdaysOnly", "workWeek", "firstPointOnStartAngle", "originValue", "period", "startAngle"], outputs: ["visualRangeChange"] }, { kind: "component", type: i6.DxoCommonSeriesSettingsComponent, selector: "dxo-common-series-settings", inputs: ["aggregation", "area", "argumentField", "axis", "bar", "barOverlapGroup", "barPadding", "barWidth", "border", "bubble", "candlestick", "closeValueField", "color", "cornerRadius", "dashStyle", "fullstackedarea", "fullstackedbar", "fullstackedline", "fullstackedspline", "fullstackedsplinearea", "highValueField", "hoverMode", "hoverStyle", "ignoreEmptyPoints", "innerColor", "label", "line", "lowValueField", "maxLabelCount", "minBarSize", "opacity", "openValueField", "pane", "point", "rangearea", "rangebar", "rangeValue1Field", "rangeValue2Field", "reduction", "scatter", "selectionMode", "selectionStyle", "showInLegend", "sizeField", "spline", "splinearea", "stack", "stackedarea", "stackedbar", "stackedline", "stackedspline", "stackedsplinearea", "steparea", "stepline", "stock", "tagField", "type", "valueErrorBar", "valueField", "visible", "width", "argumentType", "minSegmentSize", "smallValuesGrouping", "closed"] }, { kind: "component", type: i6.DxoConnectorComponent, selector: "dxo-connector", inputs: ["color", "visible", "width", "opacity"] }, { kind: "component", type: i6.DxiSeriesComponent, selector: "dxi-series", inputs: ["aggregation", "argumentField", "axis", "barOverlapGroup", "barPadding", "barWidth", "border", "closeValueField", "color", "cornerRadius", "dashStyle", "highValueField", "hoverMode", "hoverStyle", "ignoreEmptyPoints", "innerColor", "label", "lowValueField", "maxLabelCount", "minBarSize", "name", "opacity", "openValueField", "pane", "point", "rangeValue1Field", "rangeValue2Field", "reduction", "selectionMode", "selectionStyle", "showInLegend", "sizeField", "stack", "tag", "tagField", "type", "valueErrorBar", "valueField", "visible", "width", "argumentType", "minSegmentSize", "smallValuesGrouping", "closed"] }, { kind: "component", type: i6.DxiValueAxisComponent, selector: "dxi-value-axis", inputs: ["aggregatedPointsPosition", "allowDecimals", "autoBreaksEnabled", "axisDivisionFactor", "breaks", "breakStyle", "categories", "color", "constantLines", "constantLineStyle", "customPosition", "discreteAxisDivisionMode", "endOnTick", "grid", "inverted", "label", "linearThreshold", "logarithmBase", "maxAutoBreakCount", "maxValueMargin", "minorGrid", "minorTick", "minorTickCount", "minorTickInterval", "minValueMargin", "minVisualRangeLength", "multipleAxesSpacing", "name", "offset", "opacity", "pane", "placeholderSize", "position", "showZero", "strips", "stripStyle", "synchronizedValue", "tick", "tickInterval", "title", "type", "valueMarginsEnabled", "valueType", "visible", "visualRange", "visualRangeUpdateMode", "wholeRange", "width"], outputs: ["visualRangeChange"] }, { kind: "component", type: i8.DxFunnelComponent, selector: "dx-funnel", inputs: ["adaptiveLayout", "algorithm", "argumentField", "colorField", "dataSource", "disabled", "elementAttr", "export", "hoverEnabled", "inverted", "item", "label", "legend", "loadingIndicator", "margin", "neckHeight", "neckWidth", "palette", "paletteExtensionMode", "pathModified", "redrawOnResize", "resolveLabelOverlapping", "rtlEnabled", "selectionMode", "size", "sortData", "theme", "title", "tooltip", "valueField"], outputs: ["onDisposing", "onDrawn", "onExported", "onExporting", "onFileSaving", "onHoverChanged", "onIncidentOccurred", "onInitialized", "onItemClick", "onLegendClick", "onOptionChanged", "onSelectionChanged", "adaptiveLayoutChange", "algorithmChange", "argumentFieldChange", "colorFieldChange", "dataSourceChange", "disabledChange", "elementAttrChange", "exportChange", "hoverEnabledChange", "invertedChange", "itemChange", "labelChange", "legendChange", "loadingIndicatorChange", "marginChange", "neckHeightChange", "neckWidthChange", "paletteChange", "paletteExtensionModeChange", "pathModifiedChange", "redrawOnResizeChange", "resolveLabelOverlappingChange", "rtlEnabledChange", "selectionModeChange", "sizeChange", "sortDataChange", "themeChange", "titleChange", "tooltipChange", "valueFieldChange"] }, { kind: "component", type: i6.DxoItemComponent, selector: "dxo-item", inputs: ["border", "hoverStyle", "selectionStyle"] }, { kind: "component", type: i9.DxPieChartComponent, selector: "dx-pie-chart", inputs: ["adaptiveLayout", "animation", "annotations", "centerTemplate", "commonAnnotationSettings", "commonSeriesSettings", "customizeAnnotation", "customizeLabel", "customizePoint", "dataSource", "diameter", "disabled", "elementAttr", "export", "innerRadius", "legend", "loadingIndicator", "margin", "minDiameter", "palette", "paletteExtensionMode", "pathModified", "pointSelectionMode", "redrawOnResize", "resolveLabelOverlapping", "rtlEnabled", "segmentsDirection", "series", "seriesTemplate", "size", "sizeGroup", "startAngle", "theme", "title", "tooltip", "type"], outputs: ["onDisposing", "onDone", "onDrawn", "onExported", "onExporting", "onFileSaving", "onIncidentOccurred", "onInitialized", "onLegendClick", "onOptionChanged", "onPointClick", "onPointHoverChanged", "onPointSelectionChanged", "onTooltipHidden", "onTooltipShown", "adaptiveLayoutChange", "animationChange", "annotationsChange", "centerTemplateChange", "commonAnnotationSettingsChange", "commonSeriesSettingsChange", "customizeAnnotationChange", "customizeLabelChange", "customizePointChange", "dataSourceChange", "diameterChange", "disabledChange", "elementAttrChange", "exportChange", "innerRadiusChange", "legendChange", "loadingIndicatorChange", "marginChange", "minDiameterChange", "paletteChange", "paletteExtensionModeChange", "pathModifiedChange", "pointSelectionModeChange", "redrawOnResizeChange", "resolveLabelOverlappingChange", "rtlEnabledChange", "segmentsDirectionChange", "seriesChange", "seriesTemplateChange", "sizeChange", "sizeGroupChange", "startAngleChange", "themeChange", "titleChange", "tooltipChange", "typeChange"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i11.AppTitleComponent, selector: "app-title", inputs: ["title", "multiple", "isFilterDisplay", "icon", "iconName", "displayType", "keyToPass", "fixOperationLevles", "operators"], outputs: ["onOperatorClick"] }, { kind: "component", type: i12.LoaderComponent, selector: "app-loader" }] });
|
|
@@ -531,4 +544,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
531
544
|
type: Input,
|
|
532
545
|
args: ['chartDataSource']
|
|
533
546
|
}] } });
|
|
534
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtYWR2YW5jZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtYWR2YW5jZS1jaGFydC9nYW1tYS1hZHZhbmNlLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1hZHZhbmNlLWNoYXJ0L2dhbW1hLWFkdmFuY2UtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFvQyxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBR2hKLE9BQU8sTUFBTSxNQUFNLCtDQUErQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFNOUUsTUFBTSxPQUFPLDBCQUEwQjtJQXFCckMsWUFDVSxhQUE0QixFQUM1QixNQUFxQixFQUNyQixVQUE0QixFQUM1QixRQUFtQixFQUFVLEVBQWMsRUFDM0MsR0FBc0IsRUFDRyxXQUFnQjtRQUx6QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQzNDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ0csZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUExQm5ELGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLGdCQUFXLEdBQVEsRUFB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b250ZW50IjpbIlxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBrcGljb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4va3BpLWNvbW9uLXNlcnZpY2UnO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvY29tbW9uJztcbmltcG9ydCB7IEFQUF9FTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvZW52aXJvbm1lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZ2FtbWEtYWR2YW5jZS1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9nYW1tYS1hZHZhbmNlLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgR2FtbWFBZHZhbmNlQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjaGFydENvbmZpZzogYW55ID0ge307XG4gIHBhZ2VfY29uZmlnOiBhbnkgPSB7fTtcbiAgaXNMb2FkZXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbXBvbmVudElkOiBhbnk7XG4gIC8vIEBJbnB1dCgpIGNhcHRpb246IGFueTtcbiAgQElucHV0KCkga3BpX25hbWU6IGFueTtcbiAgLy8gQElucHV0KCkgY2hhcnREYXRhU291cmNlOmFueTtcbiAgY2FwdGlvbjogYW55O1xuICBpc0NoYXJ0dmlzaWJsZTogYm9vbGVhbjtcbiAgY3JlYXRDaGFydERhdGFTb3VyY2UgPSB1bmRlZmluZWQ7XG4gIGZpbmFsQ2hhcnREYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgY2hhcnRXaXRoVGhyZWVEaW1lbnRpb25EYXRhU2VyaWVzOiBhbnkgPSBbXTtcbiAgY2hhcnRIZWlnaHQ6IGFueTtcblxuICBpc0Z1bGxTY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBoZWF0Q2hhcnREYXRhU291cmNlOiBhbnk7XG4gIGJ1YmJsZUNoYXJ0RGF0YTogYW55O1xuXG4gIGNoYXJ0VHlwZVdoZW5NdWx0aVNlcmllczogYW55O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrcGlTZXJ2aWNlOiBrcGljb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChBUFBfRU5WSVJPTk1FTlQpIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcblxuICB9XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgLy8gY2hhcnRfYXR0ci5sZWdlbmRbMF1cbiAgY2hhcnRPcmRlckJ5OiBib29sZWFuO1xuICBjaGFydERpc3BsYXlEYXRlRm9ybWF0OiBhbnk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb25DaGFydFBvaW50Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBJbnB1dCgnY2hhcnREYXRhU291cmNlJylcbiAgc2V0IGNoYXJ0RGF0YVNvdXJjZSh2YWx1ZSkge1xuICAgIHRoaXMuY3JlYXRDaGFydERhdGFTb3VyY2UgPSB2YWx1ZTtcbiAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuY3JlYXRDaGFydERhdGFTb3VyY2UgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmNyZWF0Q2hhcnREYXRhU291cmNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0NoYXJ0dmlzaWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wYWdlX2NvbmZpZyA9IHZhbHVlO1xuICAgICAgdGhpcy5wYWdlX3Bhcm1zID0gdmFsdWUudGl0bGVQYXJhbXM7XG4gICAgICB0aGlzLmNoYXJ0T3JkZXJCeSA9ICh2YWx1ZS5rcGlDb25maWcuZGVzY2VuZGluZ09yZGVyKSA/IHZhbHVlLmtwaUNvbmZpZy5kZXNjZW5kaW5nT3JkZXIgOiBmYWxzZTtcbiAgICAgIHRoaXMuY2hhcnREaXNwbGF5RGF0ZUZvcm1hdCA9ICh2YWx1ZS5rcGlDb25maWcuZGlzcGxheURhdGVGb3JtYXQpID8gdmFsdWUua3BpQ29uZmlnLmRpc3BsYXlEYXRlRm9ybWF0IDogXCJNTS1ERFwiO1xuXG4gICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRoaXMuY2hhcnRDb25maWcgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZztcblxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZy5pc0RhdGFBZ2dyZWdhdGlvbikge1xuICAgICAgICAgIGNvbnN0IGFnZ3JlYXRpb25EYXRhID0gdGhpcy5nZXRHcm91cERhdGFGb3JDaGFydCh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSwgdGhpcy5jaGFydENvbmZpZ1snZGF0YUFnZ3JlZ2F0aW9uQ29uZmlnJ11bJ2RhdGFBZ2dyZWdhdGVDb2x1bWVzJ10sIHRoaXMuY2hhcnRDb25maWdbJ2RhdGFBZ2dyZWdhdGlvbkNvbmZpZyddWydhZ2dyZWdhdGVGaWVsZHMnXSk7XG4gICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgPSBhZ2dyZWF0aW9uRGF0YTtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKGFnZ3JlYXRpb25EYXRhKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5mb3JtYXRlID09IFwiZGFpbHlcIikge1xuXG4gICAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlXG4gICAgICAgICAgICAuZmlsdGVyKHJlY29yZCA9PiByZWNvcmQucmVjb3JkRGF0ZSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYi5yZWNvcmREYXRlKS5kaWZmKG1vbWVudChhLnJlY29yZERhdGUpKSk7XG5cbiAgICAgICAgICBjb25zdCBtb3N0UmVjZW50UmVjb3JkID0gc29ydGVkRGF0YVswXTtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZE9iamVjdHMgPSBzb3J0ZWREYXRhLmZpbHRlcihkYXRhID0+IGRhdGEucmVjb3JkRGF0ZSA9PT0gdmFsdWUuZW5kRGF0ZSk7XG4gICAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09ICdmdW5uZWwnKSB7XG4gICAgICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gT2JqZWN0LmtleXMobW9zdFJlY2VudFJlY29yZCkuZmlsdGVyKGtleSA9PiBrZXkgIT09ICdyZWNvcmREYXRlJykubWFwKGtleSA9PiAoe1xuICAgICAgICAgICAgICBhcmd1bWVudDoga2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogTWF0aC5hYnMocGFyc2VJbnQobW9zdFJlY2VudFJlY29yZFtrZXldKSlcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnc3RhY2tlZEJhcicgfHwgdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ211bHRpTGluZScgfHwgdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ211bHRpQmFyJykge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhU291cmNlRm9yQ2hhcnQsIGxpc3RPZkdyb3VwQnlEYXRhIH0gPSB0aGlzLmdlQ2hhcnRXaXRoR3JvdXBCeUZvck11bHRpU2VyaXMoZmlsdGVyZWRPYmplY3RzLCB0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQsIHRoaXMuY2hhcnRDb25maWcuY2hhcnRfY29uZmlnWzBdLnZhbHVlRmllbGQsIHRoaXMuY2hhcnRDb25maWcuY2hhcnRHcm91cEJ5KVxuICAgICAgICAgICAgdGhpcy5jaGFydFdpdGhUaHJlZURpbWVudGlvbkRhdGFTZXJpZXMgPSBsaXN0T2ZHcm91cEJ5RGF0YTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRUeXBlV2hlbk11bHRpU2VyaWVzID0gdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT09ICdtdWx0aUxpbmUnID8gJ2xpbmUnIDogdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT09ICdtdWx0aUJhcicgPyAnYmFyJyA6IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlO1xuICAgICAgICAgICAgdGhpcy5nZXREYWlseUNoYXJ0KGRhdGFTb3VyY2VGb3JDaGFydCwgdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldERhaWx5Q2hhcnQoZmlsdGVyZWRPYmplY3RzLCB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmtwaUNvbmZpZy5mb3JtYXRlID09IFwibW9udGhseVwiKSB7XG4gICAgICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuXG4gICAgICAgICAgICAvLyBmb3IgY2hhcnQgc2hvcnQgYnkgYW55IGNvbHVtZVxuICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnRPcmRlckJ5KSB7XG4gICAgICAgICAgICAgIGxldCBzaG9ydE5hbWUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1snYXJndW1lbnRGaWVsZCddLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIGlmIChzaG9ydE5hbWUuaW5jbHVkZXMoJ2RhdGUnKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIocmVjb3JkID0+IHJlY29yZFt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1snYXJndW1lbnRGaWVsZCddXSlcbiAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYlt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1snYXJndW1lbnRGaWVsZCddXSkuZGlmZihtb21lbnQoYVt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1snYXJndW1lbnRGaWVsZCddXSkpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjaGFydFNvcnRCeSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnWydjaGFydFNvcnRCeSddO1xuICAgICAgICAgICAgY29uc3QgaXNEZXNjID0gdGhpcy5jaGFydE9yZGVyQnkgPT09IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoYXJ0U29ydEJ5KSAmJiBjaGFydFNvcnRCeS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2Uuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGNoYXJ0U29ydEJ5KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoYVtrZXldID09IG51bGwgJiYgYltrZXldID09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgaWYgKGFba2V5XSA9PSBudWxsKSByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgIGlmIChiW2tleV0gPT0gbnVsbCkgcmV0dXJuIC0xO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoYVtrZXldID09PSBiW2tleV0pIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXNEZXNjXG4gICAgICAgICAgICAgICAgICAgID8gYltrZXldIC0gYVtrZXldICAgLy8gREVTQ1xuICAgICAgICAgICAgICAgICAgICA6IGFba2V5XSAtIGJba2V5XTsgIC8vIEFTQ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnYnViYmxlJykge1xuICAgICAgICAgICAgICB0aGlzLmJ1YmJsZUNoYXJ0RGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlO1xuICAgICAgICAgICAgICB0aGlzLmdldEJ1YmJsZUNoYXJ0RGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnc3RhY2tlZEJhcicgfHwgdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ211bHRpTGluZScgfHwgdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ211bHRpQmFyJykge1xuXG4gICAgICAgICAgICAgIGNvbnN0IHsgZGF0YVNvdXJjZUZvckNoYXJ0LCBsaXN0T2ZHcm91cEJ5RGF0YSB9ID0gdGhpcy5nZUNoYXJ0V2l0aEdyb3VwQnlGb3JNdWx0aVNlcmlzKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLCB0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQsIHRoaXMuY2hhcnRDb25maWcuY2hhcnRfY29uZmlnWzBdLnZhbHVlRmllbGQsIHRoaXMuY2hhcnRDb25maWcuY2hhcnRHcm91cEJ5KVxuICAgICAgICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gZGF0YVNvdXJjZUZvckNoYXJ0O1xuICAgICAgICAgICAgICB0aGlzLmNoYXJ0V2l0aFRocmVlRGltZW50aW9uRGF0YVNlcmllcyA9IGxpc3RPZkdyb3VwQnlEYXRhO1xuICAgICAgICAgICAgICB0aGlzLmNoYXJ0VHlwZVdoZW5NdWx0aVNlcmllcyA9IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnbXVsdGlMaW5lJyA/ICdsaW5lJyA6IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnbXVsdGlCYXInID8gJ2JhcicgOiB0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZTtcbiAgICAgICAgICAgICAgLy8gdGhpcy5nZXRNb250aGx5Q2hhcnQoZGF0YVNvdXJjZUZvckNoYXJ0LCB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZylcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5nZXRNb250aGx5Q2hhcnQodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UsIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnKVxuICAgICAgICAgICAgICB0aGlzLmlzQ2hhcnR2aXNpYmxlID09IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcImhvdXJseVwiKSB7XG5cbiAgICAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBzb3J0ZWREYXRhID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLmhvdXIpXG4gICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYS5ob3VyLCAnaGgnKS5kaWZmKG1vbWVudChiLmhvdXIsICdoaCcpKSk7XG4gICAgICAgICAgICBjb25zdCBtb3N0UmVjZW50UmVjb3JkID0gc29ydGVkRGF0YVswXTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT2JqZWN0cyA9IHNvcnRlZERhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5yZWNvcmREYXRlID09PSBtb3N0UmVjZW50UmVjb3JkLnJlY29yZERhdGUpO1xuXG4gICAgICAgICAgICB0aGlzLmdldEhvdXJDaGFydChmaWx0ZXJlZE9iamVjdHMsIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnKVxuICAgICAgICAgICAgdGhpcy5pc0NoYXJ0dmlzaWJsZSA9PSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICAgIC8vIGVsc2Uge1xuICAgICAgLy8gICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAvLyB9XG5cbiAgICB9XG5cblxuXG4gIH1cblxuXG4gIGdldEdyb3VwRGF0YUZvckNoYXJ0KGRhdGEsIGFnZ3JlZ2F0aW9uQ29uZmlnLCBncm91cEJ5Q29sdW1ucykge1xuICAgIGNvbnN0IGdyb3VwTWFwID0ge307XG5cbiAgICBkYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwS2V5ID0gZ3JvdXBCeUNvbHVtbnMubWFwKGNvbCA9PiByb3dbY29sXSkuam9pbihcInx8XCIpO1xuXG4gICAgICBpZiAoIWdyb3VwTWFwW2dyb3VwS2V5XSkge1xuICAgICAgICBncm91cE1hcFtncm91cEtleV0gPSB7fTtcblxuICAgICAgICBncm91cEJ5Q29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2NvbF0gPSByb3dbY29sXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWdncmVnYXRpb25Db25maWcuZm9yRWFjaCgoeyBhZ2dyZWdhdGVEYXRhRmllbGQsIGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSB9KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhZ2dyZWdhdGVGdW5jdGlvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdW1cIjpcbiAgICAgICAgICAgIGNhc2UgXCJhdmdcIjpcbiAgICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPSAwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPSBJbmZpbml0eTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID0gLUluZmluaXR5O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjb3VudFwiOlxuICAgICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhZ2dyZWdhdGVGdW5jdGlvblR5cGUgPT09IFwiYXZnXCIpIHtcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVtgJHthZ2dyZWdhdGVEYXRhRmllbGR9X19jb3VudGBdID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBhZ2dyZWdhdGlvbnNcbiAgICAgIGFnZ3JlZ2F0aW9uQ29uZmlnLmZvckVhY2goKHsgYWdncmVnYXRlRGF0YUZpZWxkLCBhZ2dyZWdhdGVGdW5jdGlvblR5cGUgfSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd1thZ2dyZWdhdGVEYXRhRmllbGRdO1xuXG4gICAgICAgIHN3aXRjaCAoYWdncmVnYXRlRnVuY3Rpb25UeXBlKSB7XG4gICAgICAgICAgY2FzZSBcInN1bVwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gKz0gdmFsdWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJhdmdcIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdICs9IHZhbHVlO1xuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF0gKz0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPVxuICAgICAgICAgICAgICBNYXRoLm1pbihncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJjb3VudFwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gKz0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEZpbmFsaXplIGF2ZXJhZ2VzXG4gICAgT2JqZWN0LnZhbHVlcyhncm91cE1hcCkuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICBhZ2dyZWdhdGlvbkNvbmZpZy5mb3JFYWNoKCh7IGFnZ3JlZ2F0ZURhdGFGaWVsZCwgYWdncmVnYXRlRnVuY3Rpb25UeXBlIH0pID0+IHtcbiAgICAgICAgaWYgKGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSA9PT0gXCJhdmdcIikge1xuICAgICAgICAgIGdyb3VwW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPVxuICAgICAgICAgICAgZ3JvdXBbYWdncmVnYXRlRGF0YUZpZWxkXSAvIGdyb3VwW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF07XG4gICAgICAgICAgZGVsZXRlIGdyb3VwW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ3JvdXBNYXApO1xuICB9XG5cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICB9XG5cbiAgZ2V0SG91ckNoYXJ0KGRhdGEsIGRhdGFDb25maWcpIHtcbiAgICAvLyBjb25zdCB2YWx1ZUZpZWxkcyA9IGRhdGFDb25maWcuY2hhcnRfY29uZmlnLm1hcChjb25maWcgPT4gY29uZmlnLnZhbHVlRmllbGQpO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBkYXRhLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgaWYgKHZhbFtkYXRhQ29uZmlnLmFyZ3VtZW50RmllbGRdLnRvU3RyaW5nKCkubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICB2YWxbZGF0YUNvbmZpZy5hcmd1bWVudEZpZWxkXSA9ICcwJyArIHZhbFtkYXRhQ29uZmlnLmFyZ3VtZW50RmllbGRdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsYWJlbCA9IHZhbFtkYXRhQ29uZmlnLmFyZ3VtZW50RmllbGRdLnRvU3RyaW5nKCk7XG4gICAgICAgIHZhbFtkYXRhQ29uZmlnLmFyZ3VtZW50RmllbGRdID0gbGFiZWxcbiAgICAgIH0pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgfSwgNTAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy5rcGlfbmFtZSArICdDaGFydCBFcnJvcicpO1xuXG4gICAgfVxuICB9XG4gIGdldE1vbnRobHlDaGFydChkYXRhLCBkYXRhQ29uZmlnKSB7XG4gICAgY29uc3QgdmFsdWVGaWVsZHMgPSBkYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZy5tYXAoY29uZmlnID0+IGNvbmZpZy52YWx1ZUZpZWxkKTtcbiAgICBkYXRhLmZvckVhY2goKGVudHJ5OiBhbnkpID0+IHtcbiAgICAgIHZhbHVlRmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVudHJ5Lmhhc093blByb3BlcnR5KGZpZWxkKSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgZW50cnlbZmllbGRdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBlbnRyeVtmaWVsZF0gPSBOdW1iZXIoZW50cnlbZmllbGRdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBsZXQgY29udGVudCA9IHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJ2RhdGUnKSkge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gZGF0YS5tYXAob2JqID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuICAgICAgICAgIGlmIChuZXdPYmouaGFzT3duUHJvcGVydHkodGhpcy5jaGFydENvbmZpZy5hcmd1bWVudEZpZWxkKSkge1xuICAgICAgICAgICAgbmV3T2JqW3RoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0gPSBtb21lbnQobmV3T2JqW3RoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0pLmZvcm1hdCh0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gZGF0YTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy5rcGlfbmFtZSArICdDaGFydCBFcnJvcicpO1xuICAgIH1cbiAgfVxuICBnZXREYWlseUNoYXJ0KGRhdGEsIGRhdGFDb25maWcpIHtcbiAgICBjb25zdCB2YWx1ZUZpZWxkcyA9IGRhdGFDb25maWcuY2hhcnRfY29uZmlnLm1hcChjb25maWcgPT4gY29uZmlnLnZhbHVlRmllbGQpO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBsZXQgY29udGVudCA9IHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJ2RhdGUnKSkge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gZGF0YS5tYXAob2JqID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuICAgICAgICAgIGlmIChuZXdPYmouaGFzT3duUHJvcGVydHkodGhpcy5jaGFydENvbmZpZy5hcmd1bWVudEZpZWxkKSkge1xuICAgICAgICAgICAgbmV3T2JqW3RoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0gPSBtb21lbnQobmV3T2JqW3RoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0pLmZvcm1hdCh0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gZGF0YTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy5rcGlfbmFtZSArICcgQ2hhcnQgRXJyb3InKTtcbiAgICB9XG4gIH1cblxuXG4gIGdldFJlY29uRGFpbHlDaGFydChkYXRhLCBkYXRhQ29uZmlnKSB7XG5cbiAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gW107XG4gICAgY29uc3QgcmVjb25fa2V5ID0gZGF0YUNvbmZpZy5yZWNvbktleTtcbiAgICBjb25zdCByZWNvbl9jb2x1bW4gPSBkYXRhQ29uZmlnLnJlY29uQ29sdW1ucztcbiAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gdGhpcy5nZXRGaW5hbERhdGEoZGF0YSwgcmVjb25fY29sdW1uKTtcblxuICB9XG5cbiAgZ2V0RmluYWxEYXRhKG1haW5EYXRhOiBhbnlbXSwgcmVjb25Db2x1bW46IGFueVtdKTogYW55W10ge1xuICAgIG1haW5EYXRhLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICByZWNvbkNvbHVtbi5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgIGNvbnN0IGZpcnN0S2V5VmFsdWUgPSBkYXRhW2NvbHVtbi5maXJzdEtleV07XG4gICAgICAgIGNvbnN0IHNlY29uZEtleVZhbHVlID0gZGF0YVtjb2x1bW4uc2Vjb25kS2V5XTtcbiAgICAgICAgY29uc3QgbW91RGlmZiA9IE1hdGguYWJzKGZpcnN0S2V5VmFsdWUgLSBzZWNvbmRLZXlWYWx1ZSk7XG4gICAgICAgIGRhdGFbY29sdW1uLmZpbmFsS2V5XSA9IG1vdURpZmY7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtYWluRGF0YTtcbiAgfVxuXG4gIGN1c3RvbWl6ZVRvb2x0aXAgPSAoaW5mbzogYW55KSA9PiAoXG4gICAge1xuXG4gICAgICBodG1sOiBgPHRhYmxlIHN0eWxlID0gd2lkdGg9MTAwJSBoZWlnaHQ9MzAgYm9yZGVyPTAgIHN0eWxlPVxcJ2ZvbnQtc2l6ZTogMTNweFxcJz5cbiAgICA8dHI+PHRkIGNsYXNzPVwidGV4dC1ncmF5LTgwMCBkYXJrOnRleHQtZ3JheS0yMDAgXCIgc3R5bGU9XFwndGV4dC1hbGlnbjogbGVmdFxcJz4gJHt0aGlzLmNvbW1vblNlcnZpY2UuY29udmVydFRvVGl0bGVDYXNlKHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZCl9IDogICR7aW5mby5hcmd1bWVudFRleHR9IDwvdGQ+PC90cj5cbiAgICAgPHRyPjx0ZCBjbGFzcz1cInRleHQtZ3JheS04MDAgZGFyazp0ZXh0LWdyYXktMjAwIFwiIHN0eWxlPVxcJ3RleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmctdG9wOiA1cHhcXCc+ICR7aW5mby5zZXJpZXNOYW1lfSA6XG4gICAgICR7dGhpcy5nZXRWYWx1ZShpbmZvLnNlcmllc05hbWUsIGluZm8udmFsdWUpfSAgPC90ZD48L3RyPlxuICAgICA8L3RhYmxlPmAsXG4gICAgfSk7XG5cbiAgLy8gY3VzdG9taXplVG9vbHRpcCA9IChpbmZvOiBhbnkpID0+ICh7XG4gIC8vICAgaHRtbDogYFxuICAvLyAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbWluLXctWzIwMHB4XSBwLTMgcm91bmRlZC1sZyBzaGFkb3ctbGcgXG4gIC8vICAgICAgICAgICAgICAgYmctd2hpdGUgZGFyazpiZy1ncmF5LTgwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWdyYXktNzAwXG4gIC8vICAgICAgICAgICAgICAgdGV4dC1zbSBmb250LXNhbnNcIj5cbiAgLy8gICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktODAwIGRhcms6dGV4dC1ncmF5LTIwMCBmb250LW1lZGl1bSBtYi0yXCI+XG4gIC8vICAgICAgICR7dGhpcy5jb21tb25TZXJ2aWNlLmNvbnZlcnRUb1RpdGxlQ2FzZSh0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQpfTogJHtpbmZvLmFyZ3VtZW50VGV4dH1cbiAgLy8gICAgIDwvZGl2PlxuICAvLyAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwXCI+XG4gIC8vICAgICAgICR7aW5mby5zZXJpZXNOYW1lfTogJHt0aGlzLmdldFZhbHVlKGluZm8uc2VyaWVzTmFtZSwgaW5mby52YWx1ZSl9XG4gIC8vICAgICA8L2Rpdj5cbiAgLy8gICA8L2Rpdj5cbiAgLy8gYCxcbiAgLy8gfSk7XG5cbiAgLy8gY3VzdG9taXplVG9vbHRpcChhcmcpIHtcbiAgLy8gICByZXR1cm4geyB0ZXh0OiBgJHthcmcuYXJndW1lbnRUZXh0fTxicj4ke2FyZy5zZXJpZXNOYW1lfTogJHthcmcudmFsdWVUZXh0fUJgIH07XG4gIC8vIH1cblxuICBjYWxjdWxhdGVUb3RhbChwaWVDaGFydCkge1xuICAgIGNvbnN0IHRvdGFsVmFsdWUgPSBwaWVDaGFydC5nZXRBbGxTZXJpZXMoKVswXS5nZXRWaXNpYmxlUG9pbnRzKCkucmVkdWNlKChzLCBwKSA9PiBzICsgcC5vcmlnaW5hbFZhbHVlLCAwKTtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXROdW1iZXIodG90YWxWYWx1ZSk7XG4gIH1cblxuICBmb3JtYXROdW1iZXIodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPj0gMWU5KSB7XG4gICAgICByZXR1cm4gKHZhbHVlIC8gMWU5KS50b0ZpeGVkKDIpICsgJ0InO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMWU2KSB7XG4gICAgICByZXR1cm4gKHZhbHVlIC8gMWU2KS50b0ZpeGVkKDIpICsgJ00nO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMWUzKSB7XG4gICAgICByZXR1cm4gKHZhbHVlIC8gMWUzKS50b0ZpeGVkKDIpICsgJ0snO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgyKTtcbiAgICB9XG4gIH1cblxuICBwb2ludENsaWNrSGFuZGxlcihhcmcpIHtcbiAgICBhcmcudGFyZ2V0LnNlbGVjdCgpO1xuICB9XG4gIGdldEFsbENoYXJ0UG9pbnRDbGljayhldmVudCkge1xuXG4gICAgbGV0IHRpdGxlID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuY29tbW9uQ29uZmlnWyd0aXRsZSddO1xuICAgIGxldCB0aXRsZV9kYXRhZmllbGQgPSB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5jb21tb25Db25maWdbJ2RhdGFGaWVsZCddO1xuXG4gICAgY29uc3QgdGl0bGVfcGFyYW1zID0gKHRpdGxlX2RhdGFmaWVsZCkgPyBldmVudC50YXJnZXQuZGF0YVt0aXRsZV9kYXRhZmllbGRdIDogXCJcIjtcbiAgICBsZXQgd2lkZ2V0X3RpdGxlID0gKHRpdGxlKSA/IHRpdGxlICsgdGl0bGVfcGFyYW1zIDogdGl0bGVfcGFyYW1zO1xuXG4gICAgaWYgKCdyZWNvcmREYXRlJyBpbiBldmVudC50YXJnZXQuZGF0YSkge1xuICAgICAgY29uc3QgcmVjb3JkRGF0ZSA9IGV2ZW50LnRhcmdldC5kYXRhLnJlY29yZERhdGU7XG4gICAgICBpZiAodGhpcy5jaGFydERpc3BsYXlEYXRlRm9ybWF0ID09IFwiTU0tRERcIikge1xuICAgICAgICBjb25zdCBmdWxsRGF0ZSA9IG1vbWVudChyZWNvcmREYXRlLCBcIk1NLUREXCIpXG4gICAgICAgICAgLnllYXIobW9tZW50KCkueWVhcigpKVxuICAgICAgICAgIC5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcbiAgICAgICAgZXZlbnQudGFyZ2V0LmRhdGEucmVjb3JkRGF0ZSA9IGZ1bGxEYXRlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgbGV0IG9iaiA9IHtcbiAgICAgIGRhdGE6IGV2ZW50LnRhcmdldC5kYXRhLFxuICAgICAga2V5VG9QYXNzOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5rZXlUb1Bhc3MsXG4gICAgICB0YWJsZVRpdGxlOiAodGhpcy5wYWdlX3Bhcm1zKSA/IHRoaXMucGFnZV9wYXJtcyArIHdpZGdldF90aXRsZSA6IHdpZGdldF90aXRsZSxcbiAgICAgIHZpZXdJZDogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4gICAgICBkcmlsbERvd25UeXBlOiBcIm5hdHVyYWxcIixcbiAgICAgIGRyaWxsZG93bkZyb206IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuICAgICAgZHJpbGxkb3duVG86IFwiXCIsXG4gICAgfVxuICAgIHRoaXMub25DaGFydFBvaW50Q2xpY2suZW1pdChvYmopO1xuXG4gICAgY29uc29sZS5sb2coXCJvbmNoYXJ0IGNsaWNrXCIsIG9iaik7XG5cbiAgfVxuXG4gIGdldFZhbHVlKGNvbnRleHRLZXksIHZhbHVlKSB7XG5cbiAgICBsZXQgY29udGV4dF9kYXRhOiBhbnk7XG4gICAgY29uc3Qgc21sX2tleSA9IGNvbnRleHRLZXkudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmIChzbWxfa2V5ID09PSBcImNvdW50XCIgfHwgc21sX2tleSA9PT0gXCJob3VyXCIgfHwgc21sX2tleSA9PT0gXCJkZW5vbWluYXRpb25cIiB8fCBzbWxfa2V5LmluY2x1ZGVzKFwiY291bnRcIikpIHtcbiAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjModmFsdWUsIDApO1xuICAgICAgfSBlbHNlIGlmIChzbWxfa2V5LmluY2x1ZGVzKCd2b2x1bWUnKSB8fCBzbWxfa2V5LmluY2x1ZGVzKCd1cGxvYWQnKSB8fCBzbWxfa2V5LmluY2x1ZGVzKCdkb3dubG9hZCcpKSB7XG4gICAgICAgIGlmIChzbWxfa2V5ID09ICdiaWxsYWJsZXZvbHVtZScpIHtcbiAgICAgICAgICBjb250ZXh0X2RhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2UuZm9ybWF0Qnl0c1RvR2IodmFsdWUgKiAxMDI0LCAyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHRfZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZS5mb3JtYXRCeXRzVG9HYih2YWx1ZSAqIDEwMjQsIDIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNtbF9rZXkgPT0gXCJ1cGxpbmtcIiB8fCBzbWxfa2V5ID09IFwiZG93bmxpbmtcIikge1xuICAgICAgICBjb250ZXh0X2RhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2UuZm9ybWF0Qnl0c1RvR2IodmFsdWUsIDIpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc0RlY2ltYWwodmFsdWUpKSB7XG4gICAgICAgIGNvbnRleHRfZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZS5yZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYzKHZhbHVlLCAyKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaGFzRGVjaW1hbCh2YWx1ZSkpIHtcbiAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjModmFsdWUsIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjModmFsdWUsIDIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0X2RhdGEgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dF9kYXRhO1xuICB9XG5cblxuICBoYXNEZWNpbWFsKG51bWJlcikge1xuICAgIHJldHVybiBudW1iZXIgJSAxICE9PSAwO1xuICB9XG5cbiAgdG9nZ2xlRnVsbFNjcmVlbigpIHtcbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmlzRnVsbFNjcmVlbiA9ICF0aGlzLmlzRnVsbFNjcmVlbjtcbiAgICBjb25zdCBkaXYgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm5vdC1mdWxsLXNjcmVlbicpO1xuICAgIGlmICh0aGlzLmlzRnVsbFNjcmVlbikge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkaXYsICdmdWxsLXNjcmVlbicpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0sIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkaXYsICdmdWxsLXNjcmVlbicpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cblxuXG5cblxuXG4gIGN1c3RvbWl6ZVRleHQgPSAoeyBwZXJjZW50VGV4dCwgaXRlbTogeyBhcmd1bWVudCB9IH0pID0+IGA8c3BhbiBzdHlsZT0nZm9udC1zaXplOiAyOHB4Jz4ke3BlcmNlbnRUZXh0fTwvc3Bhbj48YnIvPiR7YXJndW1lbnR9YDtcblxuXG4gIC8vIGJ1YmJsZSBjaGFydFxuXG4gIGdldEJ1YmJsZUNoYXJ0RGF0YSgpIHtcbiAgICB0aGlzLmhlYXRDaGFydERhdGFTb3VyY2UgPSB7fTtcbiAgICBjb25zdCB7IHJlc3VsdCwgdW5pcXVlRGF0ZXMgfSA9IHRoaXMuZ2VuZXJhdGVEYXRhKHRoaXMuYnViYmxlQ2hhcnREYXRhLCB0aGlzLmNoYXJ0Q29uZmlnKVxuICAgIC8vIHJlc3VsdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIC8vICAgZWxlbWVudC5kYXRhc2V0LnNvcnQoKGEsIGIpID0+IG1vbWVudChhLnJlY29yZERhdGUsICdZWVlZTU1ERCcpLmRpZmYobW9tZW50KGIucmVjb3JkRGF0ZSwgJ1lZWVlNTUREJykpKTtcbiAgICAvLyB9KTtcbiAgICAvLyB1bmlxdWVEYXRlcy5zb3J0KCk7XG4gICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlW1wiZGF0YVNldFwiXSA9IHJlc3VsdDtcbiAgICB0aGlzLmhlYXRDaGFydERhdGFTb3VyY2VbXCJhcmd1bWVudFZhbHVlXCJdID0gdW5pcXVlRGF0ZXM7XG4gIH1cblxuICBnZW5lcmF0ZURhdGEoZGF0YSwgY2hhcnRDb25maWcpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCB1bmlxdWVEYXRlcyA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBkYXRhU291cmNlTWFwID0ge307XG5cbiAgICBjb25zdCBzb3VyY2VGaWVsZCA9IGNoYXJ0Q29uZmlnLnNvdXJjZUZpZWxkO1xuICAgIGNvbnN0IGFyZ3VtZW50RmllbGQgPSBjaGFydENvbmZpZy5hcmd1bWVudEZpZWxkO1xuICAgIGNvbnN0IHZhbHVlRmllbGQgPSBjaGFydENvbmZpZy5jaGFydF9jb25maWdbMF0udmFsdWVGaWVsZDtcbiAgICBjb25zdCBtaW5CdWJibGVTaXplID0gKHRoaXMuY2hhcnRDb25maWcubWluQnViYmxlU2l6ZSkgPyBwYXJzZUludCh0aGlzLmNoYXJ0Q29uZmlnLm1pbkJ1YmJsZVNpemUpIDogODtcbiAgICBjb25zdCBtYXhCdWJibGVTaXplID0gKHRoaXMuY2hhcnRDb25maWcubWF4QnViYmxlU2l6ZSkgPyBwYXJzZUludCh0aGlzLmNoYXJ0Q29uZmlnLm1heEJ1YmJsZVNpemUpIDogMjA7XG5cbiAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VGaWVsZFZhbHVlID0gaXRlbVtzb3VyY2VGaWVsZF07XG4gICAgICBjb25zdCBhcmd1bWVudEZpZWxkVmFsdWUgPSBpdGVtW2FyZ3VtZW50RmllbGRdO1xuICAgICAgY29uc3QgeyBbc291cmNlRmllbGRdOiBfLCBbYXJndW1lbnRGaWVsZF06IF9fLCAuLi5yZXN0IH0gPSBpdGVtO1xuXG4gICAgICBpZiAoIWRhdGFTb3VyY2VNYXBbc291cmNlRmllbGRWYWx1ZV0pIHtcbiAgICAgICAgZGF0YVNvdXJjZU1hcFtzb3VyY2VGaWVsZFZhbHVlXSA9IHtcbiAgICAgICAgICBkYXRhc291cmNlOiBzb3VyY2VGaWVsZFZhbHVlLFxuICAgICAgICAgIGRhdGFzZXQ6IFtdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBkYXRhU291cmNlTWFwW3NvdXJjZUZpZWxkVmFsdWVdLmRhdGFzZXQucHVzaCh7XG4gICAgICAgIC4uLnJlc3QsXG4gICAgICAgIFthcmd1bWVudEZpZWxkXTogbW9tZW50KGFyZ3VtZW50RmllbGRWYWx1ZSkuZm9ybWF0KHRoaXMuY2hhcnREaXNwbGF5RGF0ZUZvcm1hdClcbiAgICAgIH0pO1xuICAgICAgdW5pcXVlRGF0ZXMuYWRkKG1vbWVudChhcmd1bWVudEZpZWxkVmFsdWUpLmZvcm1hdCh0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHVuaXF1ZURhdGVzQXJyYXkgPSBBcnJheS5mcm9tKHVuaXF1ZURhdGVzKTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGFTb3VyY2VNYXApIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhU291cmNlTWFwW2tleV0uZGF0YXNldDtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGFzZXQgPSB0aGlzLmdldEZvcm1hdGVEYXRhQnlDb2xvckNvZGUoZGF0YXNldCwgdmFsdWVGaWVsZCwgbWluQnViYmxlU2l6ZSwgbWF4QnViYmxlU2l6ZSk7XG5cbiAgICAgIGNvbnN0IGRhdGVUb0l0ZW1NYXAgPSB7fTtcbiAgICAgIGZvcm1hdHRlZERhdGFzZXQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgZGF0ZVRvSXRlbU1hcFtpdGVtW2FyZ3VtZW50RmllbGRdXSA9IGl0ZW07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY29tcGxldGVEYXRhc2V0ID0gdW5pcXVlRGF0ZXNBcnJheS5tYXAoKGRhdGU6IGFueSkgPT4ge1xuXG4gICAgICAgIGlmIChkYXRlVG9JdGVtTWFwW2RhdGVdKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGVUb0l0ZW1NYXBbZGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpbGVDb3VudDogMCxcbiAgICAgICAgICAgIFthcmd1bWVudEZpZWxkXTogZGF0ZSxcbiAgICAgICAgICAgIFt2YWx1ZUZpZWxkXTogMCxcbiAgICAgICAgICAgIGNvbG9yOiBcInJnYigyNDIsIDExOCwgMTA5KVwiXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZGF0YXNvdXJjZToga2V5LFxuICAgICAgICBkYXRhc2V0OiBjb21wbGV0ZURhdGFzZXRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgIHVuaXF1ZURhdGVzOiB1bmlxdWVEYXRlc0FycmF5XG4gICAgfTtcbiAgfVxuXG5cblxuICBnZXRGb3JtYXRlRGF0YUJ5Q29sb3JDb2RlKGZpbGVkYXRhLCB2YWx1ZUZpZWxkLCBtaW5CdWJibGVTaXplLCBtYXhCdWJibGVTaXplKSB7XG4gICAgZmlsZWRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGl0ZW1bdmFsdWVGaWVsZF0gPSBwYXJzZUZsb2F0KGl0ZW1bdmFsdWVGaWVsZF0pO1xuICAgIH0pO1xuXG4gICAgbGV0IG1heFJlY2hhcmdlQ291bnQgPSBNYXRoLm1heCguLi5maWxlZGF0YS5tYXAoaXRlbSA9PiBpdGVtW3ZhbHVlRmllbGRdKSk7XG4gICAgbGV0IG1pblJlY2hhcmdlQ291bnQgPSBNYXRoLm1pbiguLi5maWxlZGF0YS5tYXAoaXRlbSA9PiBpdGVtW3ZhbHVlRmllbGRdKSk7XG5cbiAgICBsZXQgbWluQ29sb3IgPSBbNDMsIDIyNCwgOTFdO1xuICAgIGxldCBtYXhDb2xvciA9IFs2NSwgMTM1LCAyNF07XG4gICAgbGV0IGhvdmVyID0gWzEzNSwgMTg0LCAxMDZdO1xuXG4gICAgZmlsZWRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGxldCBzaXplID0gdGhpcy5tYXBSYW5nZShpdGVtW3ZhbHVlRmllbGRdLCBtaW5SZWNoYXJnZUNvdW50LCBtYXhSZWNoYXJnZUNvdW50LCBtaW5CdWJibGVTaXplLCBtYXhCdWJibGVTaXplKTtcbiAgICAgIGl0ZW0uc2l6ZSA9IHNpemU7XG4gICAgICBpdGVtLnRvb2xUaXAgPSAoaXRlbVt2YWx1ZUZpZWxkXSkgPyBpdGVtW3ZhbHVlRmllbGRdIDogJzAnO1xuICAgICAgaXRlbS5ob3ZlciA9IGByZ2IoJHtob3Zlci5qb2luKCcsJyl9KWA7XG4gICAgICBpZiAoaXRlbVt2YWx1ZUZpZWxkXSA9PSAwIHx8IGl0ZW1bdmFsdWVGaWVsZF0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGl0ZW0uY29sb3IgPSBgcmdiKCR7bWluQ29sb3Iuam9pbignLCcpfSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbS5jb2xvciA9IGByZ2IoJHttYXhDb2xvci5qb2luKCcsJyl9KWA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsZWRhdGE7XG4gIH1cblxuICBtYXBSYW5nZSh2YWx1ZSwgaW5NaW4sIGluTWF4LCBvdXRNaW4sIG91dE1heCkge1xuICAgIHJldHVybiAoKHZhbHVlIC0gaW5NaW4pICogKG91dE1heCAtIG91dE1pbikpIC8gKGluTWF4IC0gaW5NaW4pICsgb3V0TWluO1xuICB9XG5cblxuXG4gIC8vIHN0YWNrYmFyIGNoYXJ0O1xuXG5cblxuICBnZUNoYXJ0V2l0aEdyb3VwQnlGb3JNdWx0aVNlcmlzKHByZXZpZXdkYXRhOiBhbnlbXSwgYXJndW1lbnRWYWx1ZTogc3RyaW5nLCB2YWx1ZUZpZWxkOiBzdHJpbmcsIGdyb3VwQnk6IHN0cmluZykge1xuICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICBjb25zdCBncm91cGVkID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICBjb25zdCB1bmlxdWVHcm91cHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBwcmV2aWV3ZGF0YSkge1xuICAgICAgY29uc3QgYXJnID0gaXRlbVthcmd1bWVudFZhbHVlXTtcbiAgICAgIGNvbnN0IGdyb3VwID0gaXRlbVtncm91cEJ5XTtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVt2YWx1ZUZpZWxkXTtcblxuICAgICAgdW5pcXVlR3JvdXBzLmFkZChncm91cCk7XG5cbiAgICAgIGlmICghZ3JvdXBlZC5oYXMoYXJnKSkge1xuICAgICAgICBncm91cGVkLnNldChhcmcsIHsgW2FyZ3VtZW50VmFsdWVdOiBhcmcgfSk7XG4gICAgICB9XG4gICAgICBncm91cGVkLmdldChhcmcpW2dyb3VwXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdyb3VwZWQuZm9yRWFjaCh2YWx1ZSA9PiByZXN1bHQucHVzaCh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFTb3VyY2VGb3JDaGFydDogcmVzdWx0LFxuICAgICAgbGlzdE9mR3JvdXBCeURhdGE6IEFycmF5LmZyb20odW5pcXVlR3JvdXBzKVxuICAgIH07XG4gIH1cblxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJub3QtZnVsbC1zY3JlZW5cIiAoZGJsY2xpY2spPVwidG9nZ2xlRnVsbFNjcmVlbigpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VfY29uZmlnPy53aWRHZXRDb25maWc/LmRpc3BsYXlcIj5cbiAgICAgICAgPGFwcC10aXRsZSBbdGl0bGVdPVwicGFnZV9jb25maWcud2lkR2V0Q29uZmlnLndpZGdldFRpdGxlXCIgW29wZXJhdG9yc109XCJwYWdlX2NvbmZpZy5vcGVyYXRpb25zXCJcbiAgICAgICAgICAgIFtkaXNwbGF5VHlwZV09XCInY2hhcnQnXCI+PC9hcHAtdGl0bGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cIm14LTIgcC0yIGJnLWdyYXktMjAwIGRhcms6YmctZ3JheS04MDAgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDBcIj5cbiAgICAgICAgPGFwcC1sb2FkZXIgKm5nSWY9XCJpc0xvYWRlclwiPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdkb3VnaG51dCcgJiYgY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAncGllJyAmJiBjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdmdW5uZWwnICYmIGNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSAhPT0gJ2J1YmJsZSdcIj5cblxuICAgICAgICAgICAgPGR4LWNoYXJ0IGlkPVwiY2hhcnRcIiBbZGF0YVNvdXJjZV09XCJmaW5hbENoYXJ0RGF0YVNvdXJjZVwiIChvblBvaW50Q2xpY2spPVwiZ2V0QWxsQ2hhcnRQb2ludENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtwYWxldHRlXT1cImNoYXJ0Q29uZmlnLnBhbGV0dGVcIiBbdGl0bGVdPVwieyB0ZXh0OiBjaGFydENvbmZpZy5jYXB0aW9uLCBmb250OiB7IHNpemU6IDE0IH0gfVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNMb2FkZXJcIiBbdmFsdWVBeGlzXT1cImNoYXJ0Q29uZmlnLnZhbHVlQXhpc0NvbmZpZ1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFydENvbmZpZy5zaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkeG8tc2l6ZSBbaGVpZ2h0XT1cImNoYXJ0Q29uZmlnLnNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9keG8tc2l6ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hhcnRDb25maWcuY2hhcnRfY29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtICYmIGl0ZW0uYXhpc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS12YWx1ZS1heGlzIG5hbWU9XCJ7e2l0ZW0uYXhpc319XCIgcG9zaXRpb249XCJ7e2l0ZW0ucG9zaXRpb259fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tdGl0bGUgdGV4dD1cInt7aXRlbS5uYW1lfX1cIj48L2R4by10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLXZhbHVlLWF4aXM+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgICAgIDxkeG8tYXJndW1lbnQtYXhpcz5cbiAgICAgICAgICAgICAgICAgICAgPGR4by1sYWJlbCBvdmVybGFwcGluZ0JlaGF2aW9yPVwicm90YXRlXCIgW3JvdGF0aW9uQW5nbGVdPVwiMjcwXCI+PC9keG8tbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9keG8tYXJndW1lbnQtYXhpcz5cbiAgICAgICAgICAgICAgICA8ZHhvLXRvb2x0aXAgW2VuYWJsZWRdPVwidHJ1ZVwiIFtzaGFyZWRdPVwidHJ1ZVwiIFtjdXN0b21pemVUb29sdGlwXT1cImN1c3RvbWl6ZVRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICA8L2R4by10b29sdGlwPlxuICAgICAgICAgICAgICAgIDxkeG8tY29tbW9uLXNlcmllcy1zZXR0aW5ncyBhcmd1bWVudEZpZWxkPVwie3tjaGFydENvbmZpZy5hcmd1bWVudEZpZWxkfX1cIj5cbiAgICAgICAgICAgICAgICA8L2R4by1jb21tb24tc2VyaWVzLXNldHRpbmdzPlxuXG5cbiAgICAgICAgICAgICAgICA8IS0tIGZvciBvdGhlcnMgc2luZ2xlIGFjY2VzcyBjaGFydCBzdGFydCAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAnc3RhY2tlZEJhcicgJiYgY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAnbXVsdGlMaW5lJyAmJiBjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdtdWx0aUJhcidcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydENvbmZpZy5jaGFydF9jb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtICYmIGl0ZW0uY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLXNlcmllcyB0eXBlPVwie3tpdGVtLnR5cGV9fVwiIHZhbHVlRmllbGQ9XCJ7e2l0ZW0udmFsdWVGaWVsZH19XCIgYXhpcz1cInt7aXRlbS5heGlzfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tpdGVtLm5hbWV9fVwiIGNvbG9yPVwie3tpdGVtLmNvbG9yfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1zZXJpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtICYmICFpdGVtLmNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1zZXJpZXMgdHlwZT1cInt7aXRlbS50eXBlfX1cIiB2YWx1ZUZpZWxkPVwie3tpdGVtLnZhbHVlRmllbGR9fVwiIGF4aXM9XCJ7e2l0ZW0uYXhpc319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7aXRlbS5uYW1lfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1zZXJpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPCEtLSBmb3Igb3RoZXJzIHNpbmdsZSBhY2Nlc3MgY2hhcnQgZW5kIC0tPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBmb3Igc3RhY2tiZXIgc3RhcnQgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gJ3N0YWNrZWRCYXInIHx8IGNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gJ211bHRpTGluZScgfHwgY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnbXVsdGlCYXInIFwiID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydFdpdGhUaHJlZURpbWVudGlvbkRhdGFTZXJpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktc2VyaWVzIHZhbHVlRmllbGQ9XCJ7e2l0ZW19fVwiIG5hbWU9XCJ7e2l0ZW19fVwiIHR5cGU9XCJ7e2NoYXJ0VHlwZVdoZW5NdWx0aVNlcmllc319XCI+PC9keGktc2VyaWVzPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8IS0tIGZvciBzdGFja2JlciBlbmQgLS0+XG5cbiAgICAgICAgICAgICAgICA8ZHhvLXNpemUgW2hlaWdodF09XCJjaGFydEhlaWdodFwiPlxuICAgICAgICAgICAgICAgIDwvZHhvLXNpemU+XG4gICAgICAgICAgICAgICAgPGR4by1sZWdlbmQgW3Zpc2libGVdPVwiY2hhcnRDb25maWcubGVnZW5kRGlzcGxheVwiIHZlcnRpY2FsQWxpZ25tZW50PVwie3tjaGFydENvbmZpZy52ZXJ0aWNhbEFsaWdubWVudH19XCJcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudD1cInt7Y2hhcnRDb25maWcuaG9yaXpvbnRhbEFsaWdubWVudH19XCI+XG4gICAgICAgICAgICAgICAgPC9keG8tbGVnZW5kPlxuICAgICAgICAgICAgPC9keC1jaGFydD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFydENvbmZpZy5jaGFydFR5cGUgPT09ICdkb3VnaG51dCcgfHwgY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAncGllJ1wiPlxuXG4gICAgICAgICAgICA8ZHgtcGllLWNoYXJ0IGlkPVwicGllXCIgW3R5cGVdPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwieyB0ZXh0OiBjaGFydENvbmZpZy5jYXB0aW9uLCBmb250OiB7IHNpemU6IDE0IH0gfVwiIFtkYXRhU291cmNlXT1cImZpbmFsQ2hhcnREYXRhU291cmNlXCJcbiAgICAgICAgICAgICAgICBjZW50ZXJUZW1wbGF0ZT1cImNlbnRlclRlbXBsYXRlXCIgKG9uUG9pbnRDbGljayk9XCJwb2ludENsaWNrSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbcGFsZXR0ZV09XCJjaGFydENvbmZpZy5wYWxldHRlXCI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5jb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1zZXJpZXMgYXJndW1lbnRGaWVsZD17e2NoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGR9fSB2YWx1ZUZpZWxkPVwie3tpdGVtLnZhbHVlRmllbGR9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7aXRlbS5uYW1lfX1cIiBjb2xvcj1cInt7aXRlbS5jb2xvcn19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1sYWJlbCBbdmlzaWJsZV09XCJjaGFydENvbmZpZy5sYWJlbERpc3BsYXlcIiBmb3JtYXQ9XCJjdXJyZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLWNvbm5lY3RvciBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tY29ubmVjdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keGktc2VyaWVzPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLmNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLXNlcmllcyBhcmd1bWVudEZpZWxkPXt7Y2hhcnRDb25maWcuYXJndW1lbnRGaWVsZH19IHZhbHVlRmllbGQ9XCJ7e2l0ZW0udmFsdWVGaWVsZH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tpdGVtLm5hbWV9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tbGFiZWwgW3Zpc2libGVdPVwiY2hhcnRDb25maWcubGFiZWxEaXNwbGF5XCIgZm9ybWF0PVwiY3VycmVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1jb25uZWN0b3IgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWNvbm5lY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLXNlcmllcz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLnNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGR4by1zaXplIFtoZWlnaHRdPVwiY2hhcnRDb25maWcuc2l6ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2R4by1zaXplPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkeG8tbGVnZW5kIFt2aXNpYmxlXT1cImNoYXJ0Q29uZmlnLmxlZ2VuZERpc3BsYXlcIlxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsQWxpZ25tZW50PVwie3tjaGFydENvbmZpZy5ob3Jpem9udGFsQWxpZ25tZW50fX1cIlxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudD1cInt7Y2hhcnRDb25maWcudmVydGljYWxBbGlnbm1lbnR9fVwiPjwvZHhvLWxlZ2VuZD5cbiAgICAgICAgICAgICAgICA8IS0tIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIj48L2R4by1leHBvcnQ+IC0tPlxuICAgICAgICAgICAgICAgIDxkeG8tdG9vbHRpcCBbZW5hYmxlZF09XCJ0cnVlXCIgW2N1c3RvbWl6ZVRvb2x0aXBdPVwiY3VzdG9taXplVG9vbHRpcFwiIGZvcm1hdD1cImN1cnJlbmN5XCI+XG4gICAgICAgICAgICAgICAgPC9keG8tdG9vbHRpcD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnZG91Z2hudXQnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgKmR4VGVtcGxhdGU9XCJsZXQgcGllQ2hhcnQgb2YgJ2NlbnRlclRlbXBsYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwMFwiIGN5PVwiMTAwXCIgW2F0dHIucl09XCJwaWVDaGFydC5nZXRJbm5lclJhZGl1cygpIC0gNlwiIGZpbGw9XCJncmF5XCIgb3BhY2l0eT1cIjAuMDAwMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jaXJjbGU+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHRleHQtYW5jaG9yPVwibWlkZGxlXCIgc3R5bGU9XCJmb250LXNpemU6IDBweFwiIHg9XCIxMDBcIiB5PVwiMTAwXCIgZmlsbD1cIiNlZWVcIiAqbmdJZj1cImNoYXJ0Q29uZmlnLmRpc3BsYXlDZW50ZXJMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0c3BhbiB4PVwiMTAwXCI+e3sgY2FsY3VsYXRlVG90YWwocGllQ2hhcnQpIH19PC90c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZHgtcGllLWNoYXJ0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnZnVubmVsJ1wiPlxuICAgICAgICAgICAgPGR4LWZ1bm5lbCBpZD1cImZ1bm5lbFwiIFtkYXRhU291cmNlXT1cImZpbmFsQ2hhcnREYXRhU291cmNlXCIgYXJndW1lbnRGaWVsZD1cImFyZ3VtZW50XCIgdmFsdWVGaWVsZD1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBwYWxldHRlPVwiU29mdCBQYXN0ZWxcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuc2l6ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNpemUgW2hlaWdodF09XCJjaGFydENvbmZpZy5zaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZHhvLXNpemU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGR4by1leHBvcnQgW2VuYWJsZWRdPVwiZmFsc2VcIj48L2R4by1leHBvcnQ+XG4gICAgICAgICAgICAgICAgPGR4by10b29sdGlwIFtlbmFibGVkXT1cInRydWVcIj4gPC9keG8tdG9vbHRpcD5cbiAgICAgICAgICAgICAgICA8ZHhvLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxkeG8tYm9yZGVyIFt2aXNpYmxlXT1cInRydWVcIj4gPC9keG8tYm9yZGVyPlxuICAgICAgICAgICAgICAgIDwvZHhvLWl0ZW0+XG4gICAgICAgICAgICAgICAgPGR4by1sYWJlbCBbdmlzaWJsZV09XCJ0cnVlXCIgcG9zaXRpb249XCJpbnNpZGVcIiBiYWNrZ3JvdW5kQ29sb3I9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbWl6ZVRleHRdPVwiY3VzdG9taXplVGV4dFwiPjwvZHhvLWxhYmVsPlxuICAgICAgICAgICAgPC9keC1mdW5uZWw+XG5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gJ2J1YmJsZSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC01IG92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaGVhdENoYXJ0RGF0YVNvdXJjZS5kYXRhU2V0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMCB0ZXh0LXNtIGl0ZW1zLWNlbnRlciBtaW4tdy0xMiBtYXgtdy1bMzAlXSBqdXN0aWZ5LWNlbnRlciBmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLmRhdGFzb3VyY2V9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLWJsb2NrIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtbm93cmFwIGp1c3RpZnktY2VudGVyIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBib3ggb2YgaXRlbS5kYXRhc2V0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMCBtaW4tdy0xMCBtYXgtdy1bMjAlXSBoLTEwIHRleHQtc20gY3Vyc29yLXBvaW50ZXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ncmF5LTgwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1JlY29yZCBEYXRlOiAnICsgYm94LnJlY29yZERhdGUgKyAnXFxuUmVjaGFyZ2UgQ291bnQ6ICcgKyBib3gudG9vbFRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1mdWxsXCIgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBib3guaXNIb3ZlcmVkID8gJ3JnYigxMzUsIDE4NCwgMTA2KScgOiBib3guY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkdGgucHgnOiBib3guc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdob3Zlcic6IGJveC5ob3ZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQucHgnOiBib3guc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAobW91c2VlbnRlcik9XCJib3guaXNIb3ZlcmVkID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImJveC5pc0hvdmVyZWQgPSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmxpbmUtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1ub3dyYXAganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wIHctMTIgbWF4LXctWzIwJV0gaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGhlYXRDaGFydERhdGFTb3VyY2UuYXJndW1lbnRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LXNocmluay0wIHctMTAgbWF4LXctWzIwJV0gbWluLWgtMTQgZmxleCB0ZXh0LXNtIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBteS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2hlaWdodCc6ICdhdXRvJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcm90YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b24gKm5nSWY9XCJpc0Z1bGxTY3JlZW5cIiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVGdWxsU2NyZWVuKClcIj5DbG9zZTwvYnV0dG9uPlxuPC9kaXY+Il19
|
|
547
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtYWR2YW5jZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtYWR2YW5jZS1jaGFydC9nYW1tYS1hZHZhbmNlLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1hZHZhbmNlLWNoYXJ0L2dhbW1hLWFkdmFuY2UtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFvQyxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBR2hKLE9BQU8sTUFBTSxNQUFNLCtDQUErQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFNOUUsTUFBTSxPQUFPLDBCQUEwQjtJQXFCckMsWUFDVSxhQUE0QixFQUM1QixNQUFxQixFQUNyQixVQUE0QixFQUM1QixRQUFtQixFQUFVLEVBQWMsRUFDM0MsR0FBc0IsRUFDRyxXQUFnQjtRQUx6QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQzNDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ0csZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUExQm5ELGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLGdCQUFXLEdBQVEsRUFB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SSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sYUFBYSxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQzdDO1FBR0QsSUFBSSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDN0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7dUhBOW9CVSwwQkFBMEIsZ01BMkIzQixlQUFlOzJHQTNCZCwwQkFBMEIsc05DWnZDLGdrVkF5TE07MkZEN0tPLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDRSx5QkFBeUI7OzBCQThCaEMsTUFBTTsyQkFBQyxlQUFlOzRDQXZCaEIsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQTZCVyxpQkFBaUI7c0JBQWpDLE1BQU07Z0JBR0gsZUFBZTtzQkFEbEIsS0FBSzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsga3BpY29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2twaS1jb21vbi1zZXJ2aWNlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9tb21lbnQtaGVscGVyJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2NvbW1vbic7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2Vudmlyb25tZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWdhbW1hLWFkdmFuY2UtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FtbWEtYWR2YW5jZS1jaGFydC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEdhbW1hQWR2YW5jZUNoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY2hhcnRDb25maWc6IGFueSA9IHt9O1xuICBwYWdlX2NvbmZpZzogYW55ID0ge307XG4gIGlzTG9hZGVyOiBib29sZWFuO1xuICBASW5wdXQoKSBjb21wb25lbnRJZDogYW55O1xuICAvLyBASW5wdXQoKSBjYXB0aW9uOiBhbnk7XG4gIEBJbnB1dCgpIGtwaV9uYW1lOiBhbnk7XG4gIC8vIEBJbnB1dCgpIGNoYXJ0RGF0YVNvdXJjZTphbnk7XG4gIGNhcHRpb246IGFueTtcbiAgaXNDaGFydHZpc2libGU6IGJvb2xlYW47XG4gIGNyZWF0Q2hhcnREYXRhU291cmNlID0gdW5kZWZpbmVkO1xuICBmaW5hbENoYXJ0RGF0YVNvdXJjZTogYW55ID0gW107XG4gIGNoYXJ0V2l0aFRocmVlRGltZW50aW9uRGF0YVNlcmllczogYW55ID0gW107XG4gIGNoYXJ0SGVpZ2h0OiBhbnk7XG5cbiAgaXNGdWxsU2NyZWVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgaGVhdENoYXJ0RGF0YVNvdXJjZTogYW55O1xuICBidWJibGVDaGFydERhdGE6IGFueTtcblxuICBjaGFydFR5cGVXaGVuTXVsdGlTZXJpZXM6IGFueTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHByaXZhdGUga3BpU2VydmljZToga3BpY29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoQVBQX0VOVklST05NRU5UKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG5cbiAgfVxuICBwYWdlX3Bhcm1zOiBhbnk7XG4gIC8vIGNoYXJ0X2F0dHIubGVnZW5kWzBdXG4gIGNoYXJ0T3JkZXJCeTogYm9vbGVhbjtcbiAgY2hhcnREaXNwbGF5RGF0ZUZvcm1hdDogYW55O1xuICBAT3V0cHV0KCkgcHVibGljIG9uQ2hhcnRQb2ludENsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoJ2NoYXJ0RGF0YVNvdXJjZScpXG4gIHNldCBjaGFydERhdGFTb3VyY2UodmFsdWUpIHtcbiAgICB0aGlzLmNyZWF0Q2hhcnREYXRhU291cmNlID0gdmFsdWU7XG4gICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xuICAgIGlmICh0aGlzLmNyZWF0Q2hhcnREYXRhU291cmNlID09PSB1bmRlZmluZWQgfHwgdGhpcy5jcmVhdENoYXJ0RGF0YVNvdXJjZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaXNDaGFydHZpc2libGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuXG4gICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucGFnZV9jb25maWcgPSB2YWx1ZTtcbiAgICAgIHRoaXMucGFnZV9wYXJtcyA9IHZhbHVlLnRpdGxlUGFyYW1zO1xuICAgICAgdGhpcy5jaGFydE9yZGVyQnkgPSAodmFsdWUua3BpQ29uZmlnLmRlc2NlbmRpbmdPcmRlcikgPyB2YWx1ZS5rcGlDb25maWcuZGVzY2VuZGluZ09yZGVyIDogZmFsc2U7XG4gICAgICB0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQgPSAodmFsdWUua3BpQ29uZmlnLmRpc3BsYXlEYXRlRm9ybWF0KSA/IHZhbHVlLmtwaUNvbmZpZy5kaXNwbGF5RGF0ZUZvcm1hdCA6IFwiTU0tRERcIjtcblxuICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlnID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWc7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWcuaXNEYXRhQWdncmVnYXRpb24pIHtcbiAgICAgICAgICBjb25zdCBhZ2dyZWF0aW9uRGF0YSA9IHRoaXMuZ2V0R3JvdXBEYXRhRm9yQ2hhcnQodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UsIHRoaXMuY2hhcnRDb25maWdbJ2RhdGFBZ2dyZWdhdGlvbkNvbmZpZyddWydkYXRhQWdncmVnYXRlQ29sdW1lcyddLCB0aGlzLmNoYXJ0Q29uZmlnWydkYXRhQWdncmVnYXRpb25Db25maWcnXVsnYWdncmVnYXRlRmllbGRzJ10pO1xuICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlID0gYWdncmVhdGlvbkRhdGE7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZyhhZ2dyZWF0aW9uRGF0YSk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcImRhaWx5XCIpIHtcblxuICAgICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZVxuICAgICAgICAgICAgLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLnJlY29yZERhdGUpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gbW9tZW50KGIucmVjb3JkRGF0ZSkuZGlmZihtb21lbnQoYS5yZWNvcmREYXRlKSkpO1xuXG4gICAgICAgICAgY29uc3QgbW9zdFJlY2VudFJlY29yZCA9IHNvcnRlZERhdGFbMF07XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRPYmplY3RzID0gc29ydGVkRGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLnJlY29yZERhdGUgPT09IHZhbHVlLmVuZERhdGUpO1xuICAgICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnZnVubmVsJykge1xuICAgICAgICAgICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IE9iamVjdC5rZXlzKG1vc3RSZWNlbnRSZWNvcmQpLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAncmVjb3JkRGF0ZScpLm1hcChrZXkgPT4gKHtcbiAgICAgICAgICAgICAgYXJndW1lbnQ6IGtleSxcbiAgICAgICAgICAgICAgdmFsdWU6IE1hdGguYWJzKHBhcnNlSW50KG1vc3RSZWNlbnRSZWNvcmRba2V5XSkpXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ3N0YWNrZWRCYXInIHx8IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09ICdtdWx0aUxpbmUnIHx8IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09ICdtdWx0aUJhcicpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YVNvdXJjZUZvckNoYXJ0LCBsaXN0T2ZHcm91cEJ5RGF0YSB9ID0gdGhpcy5nZUNoYXJ0V2l0aEdyb3VwQnlGb3JNdWx0aVNlcmlzKGZpbHRlcmVkT2JqZWN0cywgdGhpcy5jaGFydENvbmZpZy5hcmd1bWVudEZpZWxkLCB0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZ1swXS52YWx1ZUZpZWxkLCB0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0R3JvdXBCeSlcbiAgICAgICAgICAgIHRoaXMuY2hhcnRXaXRoVGhyZWVEaW1lbnRpb25EYXRhU2VyaWVzID0gbGlzdE9mR3JvdXBCeURhdGE7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0VHlwZVdoZW5NdWx0aVNlcmllcyA9IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnbXVsdGlMaW5lJyA/ICdsaW5lJyA6IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnbXVsdGlCYXInID8gJ2JhcicgOiB0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZTtcbiAgICAgICAgICAgIHRoaXMuZ2V0RGFpbHlDaGFydChkYXRhU291cmNlRm9yQ2hhcnQsIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXREYWlseUNoYXJ0KGZpbHRlcmVkT2JqZWN0cywgdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcIm1vbnRobHlcIikge1xuICAgICAgICAgIGlmICh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSAmJiB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5sZW5ndGggIT09IDApIHtcblxuICAgICAgICAgICAgLy8gZm9yIGNoYXJ0IHNob3J0IGJ5IGFueSBjb2x1bWVcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0T3JkZXJCeSkge1xuICAgICAgICAgICAgICBsZXQgc2hvcnROYW1lID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbJ2FyZ3VtZW50RmllbGQnXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICBpZiAoc2hvcnROYW1lLmluY2x1ZGVzKCdkYXRlJykpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKHJlY29yZCA9PiByZWNvcmRbdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbJ2FyZ3VtZW50RmllbGQnXV0pXG4gICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gbW9tZW50KGJbdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbJ2FyZ3VtZW50RmllbGQnXV0pLmRpZmYobW9tZW50KGFbdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbJ2FyZ3VtZW50RmllbGQnXV0pKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2hhcnRTb3J0QnkgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1snY2hhcnRTb3J0QnknXTtcbiAgICAgICAgICAgIGNvbnN0IGlzRGVzYyA9IHRoaXMuY2hhcnRPcmRlckJ5ID09PSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGFydFNvcnRCeSkgJiYgY2hhcnRTb3J0QnkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBjaGFydFNvcnRCeSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGFba2V5XSA9PSBudWxsICYmIGJba2V5XSA9PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGlmIChhW2tleV0gPT0gbnVsbCkgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICBpZiAoYltrZXldID09IG51bGwpIHJldHVybiAtMTtcblxuICAgICAgICAgICAgICAgICAgaWYgKGFba2V5XSA9PT0gYltrZXldKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzRGVzY1xuICAgICAgICAgICAgICAgICAgICA/IGJba2V5XSAtIGFba2V5XSAgIC8vIERFU0NcbiAgICAgICAgICAgICAgICAgICAgOiBhW2tleV0gLSBiW2tleV07ICAvLyBBU0NcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ2J1YmJsZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5idWJibGVDaGFydERhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgICAgdGhpcy5nZXRCdWJibGVDaGFydERhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ3N0YWNrZWRCYXInIHx8IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09ICdtdWx0aUxpbmUnIHx8IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09ICdtdWx0aUJhcicpIHtcblxuICAgICAgICAgICAgICBjb25zdCB7IGRhdGFTb3VyY2VGb3JDaGFydCwgbGlzdE9mR3JvdXBCeURhdGEgfSA9IHRoaXMuZ2VDaGFydFdpdGhHcm91cEJ5Rm9yTXVsdGlTZXJpcyh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSwgdGhpcy5jaGFydENvbmZpZy5hcmd1bWVudEZpZWxkLCB0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZ1swXS52YWx1ZUZpZWxkLCB0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0R3JvdXBCeSlcbiAgICAgICAgICAgICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2VGb3JDaGFydDtcbiAgICAgICAgICAgICAgdGhpcy5jaGFydFdpdGhUaHJlZURpbWVudGlvbkRhdGFTZXJpZXMgPSBsaXN0T2ZHcm91cEJ5RGF0YTtcbiAgICAgICAgICAgICAgdGhpcy5jaGFydFR5cGVXaGVuTXVsdGlTZXJpZXMgPSB0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gJ211bHRpTGluZScgPyAnbGluZScgOiB0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gJ211bHRpQmFyJyA/ICdiYXInIDogdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGU7XG4gICAgICAgICAgICAgIC8vIHRoaXMuZ2V0TW9udGhseUNoYXJ0KGRhdGFTb3VyY2VGb3JDaGFydCwgdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcpXG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0TW9udGhseUNoYXJ0KHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLCB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZylcbiAgICAgICAgICAgICAgdGhpcy5pc0NoYXJ0dmlzaWJsZSA9PSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJob3VybHlcIikge1xuXG4gICAgICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlXG4gICAgICAgICAgICAgIC5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5ob3VyKVxuICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gbW9tZW50KGEuaG91ciwgJ2hoJykuZGlmZihtb21lbnQoYi5ob3VyLCAnaGgnKSkpO1xuICAgICAgICAgICAgY29uc3QgbW9zdFJlY2VudFJlY29yZCA9IHNvcnRlZERhdGFbMF07XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZE9iamVjdHMgPSBzb3J0ZWREYXRhLmZpbHRlcihkYXRhID0+IGRhdGEucmVjb3JkRGF0ZSA9PT0gbW9zdFJlY2VudFJlY29yZC5yZWNvcmREYXRlKTtcblxuICAgICAgICAgICAgdGhpcy5nZXRIb3VyQ2hhcnQoZmlsdGVyZWRPYmplY3RzLCB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZylcbiAgICAgICAgICAgIHRoaXMuaXNDaGFydHZpc2libGUgPT0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgICAvLyBlbHNlIHtcbiAgICAgIC8vICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgLy8gfVxuXG4gICAgfVxuXG5cblxuICB9XG5cblxuICBnZXRHcm91cERhdGFGb3JDaGFydChkYXRhLCBhZ2dyZWdhdGlvbkNvbmZpZywgZ3JvdXBCeUNvbHVtbnMpIHtcbiAgICBjb25zdCBncm91cE1hcCA9IHt9O1xuXG4gICAgZGF0YS5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICBjb25zdCBncm91cEtleSA9IGdyb3VwQnlDb2x1bW5zLm1hcChjb2wgPT4gcm93W2NvbF0pLmpvaW4oXCJ8fFwiKTtcblxuICAgICAgaWYgKCFncm91cE1hcFtncm91cEtleV0pIHtcbiAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldID0ge307XG5cbiAgICAgICAgZ3JvdXBCeUNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVtjb2xdID0gcm93W2NvbF07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFnZ3JlZ2F0aW9uQ29uZmlnLmZvckVhY2goKHsgYWdncmVnYXRlRGF0YUZpZWxkLCBhZ2dyZWdhdGVGdW5jdGlvblR5cGUgfSkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoYWdncmVnYXRlRnVuY3Rpb25UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwic3VtXCI6XG4gICAgICAgICAgICBjYXNlIFwiYXZnXCI6XG4gICAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID0gMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWluXCI6XG4gICAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID0gSW5maW5pdHk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1heFwiOlxuICAgICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9IC1JbmZpbml0eTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiY291bnRcIjpcbiAgICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPSAwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWdncmVnYXRlRnVuY3Rpb25UeXBlID09PSBcImF2Z1wiKSB7XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYCR7YWdncmVnYXRlRGF0YUZpZWxkfV9fY291bnRgXSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgYWdncmVnYXRpb25zXG4gICAgICBhZ2dyZWdhdGlvbkNvbmZpZy5mb3JFYWNoKCh7IGFnZ3JlZ2F0ZURhdGFGaWVsZCwgYWdncmVnYXRlRnVuY3Rpb25UeXBlIH0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3dbYWdncmVnYXRlRGF0YUZpZWxkXTtcblxuICAgICAgICBzd2l0Y2ggKGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJzdW1cIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdICs9IHZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiYXZnXCI6XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSArPSB2YWx1ZTtcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVtgJHthZ2dyZWdhdGVEYXRhRmllbGR9X19jb3VudGBdICs9IDE7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID1cbiAgICAgICAgICAgICAgTWF0aC5taW4oZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm1heFwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPVxuICAgICAgICAgICAgICBNYXRoLm1heChncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiY291bnRcIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdICs9IDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBGaW5hbGl6ZSBhdmVyYWdlc1xuICAgIE9iamVjdC52YWx1ZXMoZ3JvdXBNYXApLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgYWdncmVnYXRpb25Db25maWcuZm9yRWFjaCgoeyBhZ2dyZWdhdGVEYXRhRmllbGQsIGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSB9KSA9PiB7XG4gICAgICAgIGlmIChhZ2dyZWdhdGVGdW5jdGlvblR5cGUgPT09IFwiYXZnXCIpIHtcbiAgICAgICAgICBncm91cFthZ2dyZWdhdGVEYXRhRmllbGRdID1cbiAgICAgICAgICAgIGdyb3VwW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gLyBncm91cFtgJHthZ2dyZWdhdGVEYXRhRmllbGR9X19jb3VudGBdO1xuICAgICAgICAgIGRlbGV0ZSBncm91cFtgJHthZ2dyZWdhdGVEYXRhRmllbGR9X19jb3VudGBdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdyb3VwTWFwKTtcbiAgfVxuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIGdldEhvdXJDaGFydChkYXRhLCBkYXRhQ29uZmlnKSB7XG4gICAgLy8gY29uc3QgdmFsdWVGaWVsZHMgPSBkYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZy5tYXAoY29uZmlnID0+IGNvbmZpZy52YWx1ZUZpZWxkKTtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgZGF0YS5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgIGlmICh2YWxbZGF0YUNvbmZpZy5hcmd1bWVudEZpZWxkXS50b1N0cmluZygpLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgdmFsW2RhdGFDb25maWcuYXJndW1lbnRGaWVsZF0gPSAnMCcgKyB2YWxbZGF0YUNvbmZpZy5hcmd1bWVudEZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGFiZWwgPSB2YWxbZGF0YUNvbmZpZy5hcmd1bWVudEZpZWxkXS50b1N0cmluZygpO1xuICAgICAgICB2YWxbZGF0YUNvbmZpZy5hcmd1bWVudEZpZWxkXSA9IGxhYmVsXG4gICAgICB9KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gZGF0YTtcbiAgICAgIH0sIDUwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKHRoaXMua3BpX25hbWUgKyAnQ2hhcnQgRXJyb3InKTtcblxuICAgIH1cbiAgfVxuICBnZXRNb250aGx5Q2hhcnQoZGF0YSwgZGF0YUNvbmZpZykge1xuICAgIGNvbnN0IHZhbHVlRmllbGRzID0gZGF0YUNvbmZpZy5jaGFydF9jb25maWcubWFwKGNvbmZpZyA9PiBjb25maWcudmFsdWVGaWVsZCk7XG4gICAgZGF0YS5mb3JFYWNoKChlbnRyeTogYW55KSA9PiB7XG4gICAgICB2YWx1ZUZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGVudHJ5W2ZpZWxkXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgZW50cnlbZmllbGRdID0gTnVtYmVyKGVudHJ5W2ZpZWxkXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgbGV0IGNvbnRlbnQgPSB0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKCdkYXRlJykpIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGRhdGEubWFwKG9iaiA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3T2JqID0geyAuLi5vYmogfTtcbiAgICAgICAgICBpZiAobmV3T2JqLmhhc093blByb3BlcnR5KHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZCkpIHtcbiAgICAgICAgICAgIG5ld09ialt0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGRdID0gbW9tZW50KG5ld09ialt0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGRdKS5mb3JtYXQodGhpcy5jaGFydERpc3BsYXlEYXRlRm9ybWF0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ld09iajtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKHRoaXMua3BpX25hbWUgKyAnQ2hhcnQgRXJyb3InKTtcbiAgICB9XG4gIH1cbiAgZ2V0RGFpbHlDaGFydChkYXRhLCBkYXRhQ29uZmlnKSB7XG4gICAgY29uc3QgdmFsdWVGaWVsZHMgPSBkYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZy5tYXAoY29uZmlnID0+IGNvbmZpZy52YWx1ZUZpZWxkKTtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgbGV0IGNvbnRlbnQgPSB0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKCdkYXRlJykpIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGRhdGEubWFwKG9iaiA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3T2JqID0geyAuLi5vYmogfTtcbiAgICAgICAgICBpZiAobmV3T2JqLmhhc093blByb3BlcnR5KHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZCkpIHtcbiAgICAgICAgICAgIG5ld09ialt0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGRdID0gbW9tZW50KG5ld09ialt0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGRdKS5mb3JtYXQodGhpcy5jaGFydERpc3BsYXlEYXRlRm9ybWF0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ld09iajtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKHRoaXMua3BpX25hbWUgKyAnIENoYXJ0IEVycm9yJyk7XG4gICAgfVxuICB9XG5cblxuICBnZXRSZWNvbkRhaWx5Q2hhcnQoZGF0YSwgZGF0YUNvbmZpZykge1xuXG4gICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IFtdO1xuICAgIGNvbnN0IHJlY29uX2tleSA9IGRhdGFDb25maWcucmVjb25LZXk7XG4gICAgY29uc3QgcmVjb25fY29sdW1uID0gZGF0YUNvbmZpZy5yZWNvbkNvbHVtbnM7XG4gICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IHRoaXMuZ2V0RmluYWxEYXRhKGRhdGEsIHJlY29uX2NvbHVtbik7XG5cbiAgfVxuXG4gIGdldEZpbmFsRGF0YShtYWluRGF0YTogYW55W10sIHJlY29uQ29sdW1uOiBhbnlbXSk6IGFueVtdIHtcbiAgICBtYWluRGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xuICAgICAgcmVjb25Db2x1bW4uZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICBjb25zdCBmaXJzdEtleVZhbHVlID0gZGF0YVtjb2x1bW4uZmlyc3RLZXldO1xuICAgICAgICBjb25zdCBzZWNvbmRLZXlWYWx1ZSA9IGRhdGFbY29sdW1uLnNlY29uZEtleV07XG4gICAgICAgIGNvbnN0IG1vdURpZmYgPSBNYXRoLmFicyhmaXJzdEtleVZhbHVlIC0gc2Vjb25kS2V5VmFsdWUpO1xuICAgICAgICBkYXRhW2NvbHVtbi5maW5hbEtleV0gPSBtb3VEaWZmO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWFpbkRhdGE7XG4gIH1cblxuICBjdXN0b21pemVUb29sdGlwID0gKGluZm86IGFueSkgPT4gKFxuICAgIHtcblxuICAgICAgaHRtbDogYDx0YWJsZSBzdHlsZSA9IHdpZHRoPTEwMCUgaGVpZ2h0PTMwIGJvcmRlcj0wICBzdHlsZT1cXCdmb250LXNpemU6IDEzcHhcXCc+XG4gICAgPHRyPjx0ZCBjbGFzcz1cInRleHQtZ3JheS04MDAgZGFyazp0ZXh0LWdyYXktMjAwIFwiIHN0eWxlPVxcJ3RleHQtYWxpZ246IGxlZnRcXCc+ICR7dGhpcy5jb21tb25TZXJ2aWNlLmNvbnZlcnRUb1RpdGxlQ2FzZSh0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQpfSA6ICAke2luZm8uYXJndW1lbnRUZXh0fSA8L3RkPjwvdHI+XG4gICAgIDx0cj48dGQgY2xhc3M9XCJ0ZXh0LWdyYXktODAwIGRhcms6dGV4dC1ncmF5LTIwMCBcIiBzdHlsZT1cXCd0ZXh0LWFsaWduOiBsZWZ0OyBwYWRkaW5nLXRvcDogNXB4XFwnPiAke2luZm8uc2VyaWVzTmFtZX0gOlxuICAgICAke3RoaXMuZ2V0VmFsdWUoaW5mby5zZXJpZXNOYW1lLCBpbmZvLnZhbHVlKX0gIDwvdGQ+PC90cj5cbiAgICAgPC90YWJsZT5gLFxuICAgIH0pO1xuXG4gIC8vIGN1c3RvbWl6ZVRvb2x0aXAgPSAoaW5mbzogYW55KSA9PiAoe1xuICAvLyAgIGh0bWw6IGBcbiAgLy8gICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1pbi13LVsyMDBweF0gcC0zIHJvdW5kZWQtbGcgc2hhZG93LWxnIFxuICAvLyAgICAgICAgICAgICAgIGJnLXdoaXRlIGRhcms6YmctZ3JheS04MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1ncmF5LTcwMFxuICAvLyAgICAgICAgICAgICAgIHRleHQtc20gZm9udC1zYW5zXCI+XG4gIC8vICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTgwMCBkYXJrOnRleHQtZ3JheS0yMDAgZm9udC1tZWRpdW0gbWItMlwiPlxuICAvLyAgICAgICAke3RoaXMuY29tbW9uU2VydmljZS5jb252ZXJ0VG9UaXRsZUNhc2UodGhpcy5jaGFydENvbmZpZy5hcmd1bWVudEZpZWxkKX06ICR7aW5mby5hcmd1bWVudFRleHR9XG4gIC8vICAgICA8L2Rpdj5cbiAgLy8gICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTMwMFwiPlxuICAvLyAgICAgICAke2luZm8uc2VyaWVzTmFtZX06ICR7dGhpcy5nZXRWYWx1ZShpbmZvLnNlcmllc05hbWUsIGluZm8udmFsdWUpfVxuICAvLyAgICAgPC9kaXY+XG4gIC8vICAgPC9kaXY+XG4gIC8vIGAsXG4gIC8vIH0pO1xuXG4gIC8vIGN1c3RvbWl6ZVRvb2x0aXAoYXJnKSB7XG4gIC8vICAgcmV0dXJuIHsgdGV4dDogYCR7YXJnLmFyZ3VtZW50VGV4dH08YnI+JHthcmcuc2VyaWVzTmFtZX06ICR7YXJnLnZhbHVlVGV4dH1CYCB9O1xuICAvLyB9XG5cbiAgY2FsY3VsYXRlVG90YWwocGllQ2hhcnQpIHtcbiAgICBjb25zdCB0b3RhbFZhbHVlID0gcGllQ2hhcnQuZ2V0QWxsU2VyaWVzKClbMF0uZ2V0VmlzaWJsZVBvaW50cygpLnJlZHVjZSgocywgcCkgPT4gcyArIHAub3JpZ2luYWxWYWx1ZSwgMCk7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0TnVtYmVyKHRvdGFsVmFsdWUpO1xuICB9XG5cbiAgZm9ybWF0TnVtYmVyKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID49IDFlOSkge1xuICAgICAgcmV0dXJuICh2YWx1ZSAvIDFlOSkudG9GaXhlZCgyKSArICdCJztcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDFlNikge1xuICAgICAgcmV0dXJuICh2YWx1ZSAvIDFlNikudG9GaXhlZCgyKSArICdNJztcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDFlMykge1xuICAgICAgcmV0dXJuICh2YWx1ZSAvIDFlMykudG9GaXhlZCgyKSArICdLJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoMik7XG4gICAgfVxuICB9XG5cbiAgcG9pbnRDbGlja0hhbmRsZXIoYXJnKSB7XG4gICAgYXJnLnRhcmdldC5zZWxlY3QoKTtcbiAgfVxuICBnZXRBbGxDaGFydFBvaW50Q2xpY2soZXZlbnQpIHtcblxuICAgIGxldCB0aXRsZSA9IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmNvbW1vbkNvbmZpZ1sndGl0bGUnXTtcbiAgICBsZXQgdGl0bGVfZGF0YWZpZWxkID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuY29tbW9uQ29uZmlnWydkYXRhRmllbGQnXTtcblxuICAgIGNvbnN0IHRpdGxlX3BhcmFtcyA9ICh0aXRsZV9kYXRhZmllbGQpID8gZXZlbnQudGFyZ2V0LmRhdGFbdGl0bGVfZGF0YWZpZWxkXSA6IFwiXCI7XG4gICAgbGV0IHdpZGdldF90aXRsZSA9ICh0aXRsZSkgPyB0aXRsZSArIHRpdGxlX3BhcmFtcyA6IHRpdGxlX3BhcmFtcztcblxuICAgIGlmICgncmVjb3JkRGF0ZScgaW4gZXZlbnQudGFyZ2V0LmRhdGEpIHtcbiAgICAgIGNvbnN0IHJlY29yZERhdGUgPSBldmVudC50YXJnZXQuZGF0YS5yZWNvcmREYXRlO1xuICAgICAgaWYgKHRoaXMuY2hhcnREaXNwbGF5RGF0ZUZvcm1hdCA9PSBcIk1NLUREXCIpIHtcbiAgICAgICAgY29uc3QgZnVsbERhdGUgPSBtb21lbnQocmVjb3JkRGF0ZSwgXCJNTS1ERFwiKVxuICAgICAgICAgIC55ZWFyKG1vbWVudCgpLnllYXIoKSlcbiAgICAgICAgICAuZm9ybWF0KHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCk7XG4gICAgICAgIGV2ZW50LnRhcmdldC5kYXRhLnJlY29yZERhdGUgPSBmdWxsRGF0ZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGxldCBvYmogPSB7XG4gICAgICBkYXRhOiBldmVudC50YXJnZXQuZGF0YSxcbiAgICAgIGtleVRvUGFzczogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcua2V5VG9QYXNzLFxuICAgICAgdGFibGVUaXRsZTogKHRoaXMucGFnZV9wYXJtcykgPyB0aGlzLnBhZ2VfcGFybXMgKyB3aWRnZXRfdGl0bGUgOiB3aWRnZXRfdGl0bGUsXG4gICAgICB2aWV3SWQ6IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuICAgICAgZHJpbGxEb3duVHlwZTogXCJuYXR1cmFsXCIsXG4gICAgICBkcmlsbGRvd25Gcm9tOiB0aGlzLnBhZ2VfY29uZmlnLnZpZXdJZCxcbiAgICAgIGRyaWxsZG93blRvOiBcIlwiLFxuICAgIH1cbiAgICB0aGlzLm9uQ2hhcnRQb2ludENsaWNrLmVtaXQob2JqKTtcblxuICAgIGNvbnNvbGUubG9nKFwib25jaGFydCBjbGlja1wiLCBvYmopO1xuXG4gIH1cblxuICBnZXRWYWx1ZShjb250ZXh0S2V5LCB2YWx1ZSkge1xuXG4gICAgbGV0IGNvbnRleHRfZGF0YTogYW55O1xuICAgIGNvbnN0IHNtbF9rZXkgPSBjb250ZXh0S2V5LnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICBpZiAoc21sX2tleSA9PT0gXCJjb3VudFwiIHx8IHNtbF9rZXkgPT09IFwiaG91clwiIHx8IHNtbF9rZXkgPT09IFwiZGVub21pbmF0aW9uXCIgfHwgc21sX2tleS5pbmNsdWRlcyhcImNvdW50XCIpKSB7XG4gICAgICAgIGNvbnRleHRfZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZS5yZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYzKHZhbHVlLCAwKTtcbiAgICAgIH0gZWxzZSBpZiAoc21sX2tleS5pbmNsdWRlcygndm9sdW1lJykgfHwgc21sX2tleS5pbmNsdWRlcygndXBsb2FkJykgfHwgc21sX2tleS5pbmNsdWRlcygnZG93bmxvYWQnKSkge1xuICAgICAgICBpZiAoc21sX2tleSA9PSAnYmlsbGFibGV2b2x1bWUnKSB7XG4gICAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLmZvcm1hdEJ5dHNUb0diKHZhbHVlICogMTAyNCwgMilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0X2RhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2UuZm9ybWF0Qnl0c1RvR2IodmFsdWUgKiAxMDI0LCAyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzbWxfa2V5ID09IFwidXBsaW5rXCIgfHwgc21sX2tleSA9PSBcImRvd25saW5rXCIpIHtcbiAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLmZvcm1hdEJ5dHNUb0diKHZhbHVlLCAyKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNEZWNpbWFsKHZhbHVlKSkge1xuICAgICAgICBjb250ZXh0X2RhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2UucmVmb3JtYXROdW1iZXJXaXRoVGhvdXNhbmRTZXBhcmF0b3JWMyh2YWx1ZSwgMik7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmhhc0RlY2ltYWwodmFsdWUpKSB7XG4gICAgICAgIGNvbnRleHRfZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZS5yZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYzKHZhbHVlLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHRfZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZS5yZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYzKHZhbHVlLCAyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dF9kYXRhID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHRfZGF0YTtcbiAgfVxuXG5cbiAgaGFzRGVjaW1hbChudW1iZXIpIHtcbiAgICByZXR1cm4gbnVtYmVyICUgMSAhPT0gMDtcbiAgfVxuXG4gIHRvZ2dsZUZ1bGxTY3JlZW4oKSB7XG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSAhdGhpcy5pc0Z1bGxTY3JlZW47XG4gICAgY29uc3QgZGl2ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ub3QtZnVsbC1zY3JlZW4nKTtcbiAgICBpZiAodGhpcy5pc0Z1bGxTY3JlZW4pIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZGl2LCAnZnVsbC1zY3JlZW4nKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICB9LCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZGl2LCAnZnVsbC1zY3JlZW4nKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICB9LCAxMCk7XG4gICAgfVxuICB9XG5cblxuXG5cblxuICBjdXN0b21pemVUZXh0ID0gKHsgcGVyY2VudFRleHQsIGl0ZW06IHsgYXJndW1lbnQgfSB9KSA9PiBgPHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZTogMjhweCc+JHtwZXJjZW50VGV4dH08L3NwYW4+PGJyLz4ke2FyZ3VtZW50fWA7XG5cblxuICAvLyBidWJibGUgY2hhcnRcblxuICBnZXRCdWJibGVDaGFydERhdGEoKSB7XG4gICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlID0ge307XG4gICAgY29uc3QgeyByZXN1bHQsIHVuaXF1ZURhdGVzIH0gPSB0aGlzLmdlbmVyYXRlRGF0YSh0aGlzLmJ1YmJsZUNoYXJ0RGF0YSwgdGhpcy5jaGFydENvbmZpZylcbiAgICAvLyByZXN1bHQuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAvLyAgIGVsZW1lbnQuZGF0YXNldC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYS5yZWNvcmREYXRlLCAnWVlZWU1NREQnKS5kaWZmKG1vbWVudChiLnJlY29yZERhdGUsICdZWVlZTU1ERCcpKSk7XG4gICAgLy8gfSk7XG4gICAgLy8gdW5pcXVlRGF0ZXMuc29ydCgpO1xuICAgIHRoaXMuaGVhdENoYXJ0RGF0YVNvdXJjZVtcImRhdGFTZXRcIl0gPSByZXN1bHQ7XG4gICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlW1wiYXJndW1lbnRWYWx1ZVwiXSA9IHVuaXF1ZURhdGVzO1xuICB9XG5cbiAgZ2VuZXJhdGVEYXRhKGRhdGEsIGNoYXJ0Q29uZmlnKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgY29uc3QgdW5pcXVlRGF0ZXMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgZGF0YVNvdXJjZU1hcCA9IHt9O1xuXG4gICAgY29uc3Qgc291cmNlRmllbGQgPSBjaGFydENvbmZpZy5zb3VyY2VGaWVsZDtcbiAgICBjb25zdCBhcmd1bWVudEZpZWxkID0gY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZDtcbiAgICBjb25zdCB2YWx1ZUZpZWxkID0gY2hhcnRDb25maWcuY2hhcnRfY29uZmlnWzBdLnZhbHVlRmllbGQ7XG4gICAgY29uc3QgbWluQnViYmxlU2l6ZSA9ICh0aGlzLmNoYXJ0Q29uZmlnLm1pbkJ1YmJsZVNpemUpID8gcGFyc2VJbnQodGhpcy5jaGFydENvbmZpZy5taW5CdWJibGVTaXplKSA6IDg7XG4gICAgY29uc3QgbWF4QnViYmxlU2l6ZSA9ICh0aGlzLmNoYXJ0Q29uZmlnLm1heEJ1YmJsZVNpemUpID8gcGFyc2VJbnQodGhpcy5jaGFydENvbmZpZy5tYXhCdWJibGVTaXplKSA6IDIwO1xuXG4gICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3Qgc291cmNlRmllbGRWYWx1ZSA9IGl0ZW1bc291cmNlRmllbGRdO1xuICAgICAgY29uc3QgYXJndW1lbnRGaWVsZFZhbHVlID0gaXRlbVthcmd1bWVudEZpZWxkXTtcbiAgICAgIGNvbnN0IHsgW3NvdXJjZUZpZWxkXTogXywgW2FyZ3VtZW50RmllbGRdOiBfXywgLi4ucmVzdCB9ID0gaXRlbTtcblxuICAgICAgaWYgKCFkYXRhU291cmNlTWFwW3NvdXJjZUZpZWxkVmFsdWVdKSB7XG4gICAgICAgIGRhdGFTb3VyY2VNYXBbc291cmNlRmllbGRWYWx1ZV0gPSB7XG4gICAgICAgICAgZGF0YXNvdXJjZTogc291cmNlRmllbGRWYWx1ZSxcbiAgICAgICAgICBkYXRhc2V0OiBbXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZGF0YVNvdXJjZU1hcFtzb3VyY2VGaWVsZFZhbHVlXS5kYXRhc2V0LnB1c2goe1xuICAgICAgICAuLi5yZXN0LFxuICAgICAgICBbYXJndW1lbnRGaWVsZF06IG1vbWVudChhcmd1bWVudEZpZWxkVmFsdWUpLmZvcm1hdCh0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQpXG4gICAgICB9KTtcbiAgICAgIHVuaXF1ZURhdGVzLmFkZChtb21lbnQoYXJndW1lbnRGaWVsZFZhbHVlKS5mb3JtYXQodGhpcy5jaGFydERpc3BsYXlEYXRlRm9ybWF0KSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB1bmlxdWVEYXRlc0FycmF5ID0gQXJyYXkuZnJvbSh1bmlxdWVEYXRlcyk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhU291cmNlTWFwKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gZGF0YVNvdXJjZU1hcFtrZXldLmRhdGFzZXQ7XG4gICAgICBjb25zdCBmb3JtYXR0ZWREYXRhc2V0ID0gdGhpcy5nZXRGb3JtYXRlRGF0YUJ5Q29sb3JDb2RlKGRhdGFzZXQsIHZhbHVlRmllbGQsIG1pbkJ1YmJsZVNpemUsIG1heEJ1YmJsZVNpemUpO1xuXG4gICAgICBjb25zdCBkYXRlVG9JdGVtTWFwID0ge307XG4gICAgICBmb3JtYXR0ZWREYXRhc2V0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGRhdGVUb0l0ZW1NYXBbaXRlbVthcmd1bWVudEZpZWxkXV0gPSBpdGVtO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbXBsZXRlRGF0YXNldCA9IHVuaXF1ZURhdGVzQXJyYXkubWFwKChkYXRlOiBhbnkpID0+IHtcblxuICAgICAgICBpZiAoZGF0ZVRvSXRlbU1hcFtkYXRlXSkge1xuICAgICAgICAgIHJldHVybiBkYXRlVG9JdGVtTWFwW2RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmaWxlQ291bnQ6IDAsXG4gICAgICAgICAgICBbYXJndW1lbnRGaWVsZF06IGRhdGUsXG4gICAgICAgICAgICBbdmFsdWVGaWVsZF06IDAsXG4gICAgICAgICAgICBjb2xvcjogXCJyZ2IoMjQyLCAxMTgsIDEwOSlcIlxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGRhdGFzb3VyY2U6IGtleSxcbiAgICAgICAgZGF0YXNldDogY29tcGxldGVEYXRhc2V0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVzdWx0OiByZXN1bHQsXG4gICAgICB1bmlxdWVEYXRlczogdW5pcXVlRGF0ZXNBcnJheVxuICAgIH07XG4gIH1cblxuXG5cbiAgZ2V0Rm9ybWF0ZURhdGFCeUNvbG9yQ29kZShmaWxlZGF0YSwgdmFsdWVGaWVsZCwgbWluQnViYmxlU2l6ZSwgbWF4QnViYmxlU2l6ZSkge1xuICAgIGZpbGVkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpdGVtW3ZhbHVlRmllbGRdID0gcGFyc2VGbG9hdChpdGVtW3ZhbHVlRmllbGRdKTtcbiAgICB9KTtcblxuICAgIGxldCBtYXhSZWNoYXJnZUNvdW50ID0gTWF0aC5tYXgoLi4uZmlsZWRhdGEubWFwKGl0ZW0gPT4gaXRlbVt2YWx1ZUZpZWxkXSkpO1xuICAgIGxldCBtaW5SZWNoYXJnZUNvdW50ID0gTWF0aC5taW4oLi4uZmlsZWRhdGEubWFwKGl0ZW0gPT4gaXRlbVt2YWx1ZUZpZWxkXSkpO1xuXG4gICAgbGV0IG1pbkNvbG9yID0gWzQzLCAyMjQsIDkxXTtcbiAgICBsZXQgbWF4Q29sb3IgPSBbNjUsIDEzNSwgMjRdO1xuICAgIGxldCBob3ZlciA9IFsxMzUsIDE4NCwgMTA2XTtcblxuICAgIGZpbGVkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBsZXQgc2l6ZSA9IHRoaXMubWFwUmFuZ2UoaXRlbVt2YWx1ZUZpZWxkXSwgbWluUmVjaGFyZ2VDb3VudCwgbWF4UmVjaGFyZ2VDb3VudCwgbWluQnViYmxlU2l6ZSwgbWF4QnViYmxlU2l6ZSk7XG4gICAgICBpdGVtLnNpemUgPSBzaXplO1xuICAgICAgaXRlbS50b29sVGlwID0gKGl0ZW1bdmFsdWVGaWVsZF0pID8gaXRlbVt2YWx1ZUZpZWxkXSA6ICcwJztcbiAgICAgIGl0ZW0uaG92ZXIgPSBgcmdiKCR7aG92ZXIuam9pbignLCcpfSlgO1xuICAgICAgaWYgKGl0ZW1bdmFsdWVGaWVsZF0gPT0gMCB8fCBpdGVtW3ZhbHVlRmllbGRdID09IHVuZGVmaW5lZCkge1xuICAgICAgICBpdGVtLmNvbG9yID0gYHJnYigke21pbkNvbG9yLmpvaW4oJywnKX0pYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0uY29sb3IgPSBgcmdiKCR7bWF4Q29sb3Iuam9pbignLCcpfSlgO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbGVkYXRhO1xuICB9XG5cbiAgbWFwUmFuZ2UodmFsdWUsIGluTWluLCBpbk1heCwgb3V0TWluLCBvdXRNYXgpIHtcbiAgICByZXR1cm4gKCh2YWx1ZSAtIGluTWluKSAqIChvdXRNYXggLSBvdXRNaW4pKSAvIChpbk1heCAtIGluTWluKSArIG91dE1pbjtcbiAgfVxuXG5cblxuICAvLyBzdGFja2JhciBjaGFydDtcblxuXG5cbiAgZ2VDaGFydFdpdGhHcm91cEJ5Rm9yTXVsdGlTZXJpcyhwcmV2aWV3ZGF0YTogYW55W10sIGFyZ3VtZW50VmFsdWU6IHN0cmluZywgdmFsdWVGaWVsZDogc3RyaW5nLCBncm91cEJ5OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgY29uc3QgZ3JvdXBlZCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgY29uc3QgdW5pcXVlR3JvdXBzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcHJldmlld2RhdGEpIHtcbiAgICAgIGNvbnN0IGFyZyA9IGl0ZW1bYXJndW1lbnRWYWx1ZV07XG4gICAgICBjb25zdCBncm91cCA9IGl0ZW1bZ3JvdXBCeV07XG4gICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bdmFsdWVGaWVsZF07XG5cbiAgICAgIHVuaXF1ZUdyb3Vwcy5hZGQoZ3JvdXApO1xuXG4gICAgICBpZiAoIWdyb3VwZWQuaGFzKGFyZykpIHtcbiAgICAgICAgZ3JvdXBlZC5zZXQoYXJnLCB7IFthcmd1bWVudFZhbHVlXTogYXJnIH0pO1xuICAgICAgfVxuICAgICAgZ3JvdXBlZC5nZXQoYXJnKVtncm91cF0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBncm91cGVkLmZvckVhY2godmFsdWUgPT4gcmVzdWx0LnB1c2godmFsdWUpKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhU291cmNlRm9yQ2hhcnQ6IHJlc3VsdCxcbiAgICAgIGxpc3RPZkdyb3VwQnlEYXRhOiBBcnJheS5mcm9tKHVuaXF1ZUdyb3VwcylcbiAgICB9O1xuICB9XG5cbiBnZXRQYXJhbXNUaXRsZShkYXRhKSB7XG4gICAgXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5jb21tb25Db25maWc7XG4gICAgY29uc3QgdGl0bGVUZW1wbGF0ZSA9IGNvbmZpZ1sndGl0bGUnXTtcblxuICAgIC8vIPCflI4gQ2hlY2sgaWYgdGVtcGxhdGUgY29udGFpbnMgJFB7Li4ufVxuICAgIGNvbnN0IGhhc1BhcmFtcyA9IC9cXCRQXFx7Lio/XFx9Ly50ZXN0KHRpdGxlVGVtcGxhdGUpO1xuXG4gICAgLy8g8J+foiBDQVNFIDE6IE5vICRQe30g4oaSIHVzZSBvbGQgbG9naWNcbiAgICBpZiAoIWhhc1BhcmFtcykge1xuICAgICAgY29uc3QgdGl0bGVfcGFyYW1zID0gZGF0YVtjb25maWdbJ2RhdGFGaWVsZCddXTtcbiAgICAgIHJldHVybiB0aXRsZVRlbXBsYXRlICsgKHRpdGxlX3BhcmFtcyA/PyAnJyk7XG4gICAgfVxuXG4gICAgLy8g8J+UtSBDQVNFIDI6IEhhcyAkUHt9IOKGkiByZXBsYWNlIGR5bmFtaWNhbGx5XG4gICAgbGV0IHJlc3VsdCA9IHRpdGxlVGVtcGxhdGUucmVwbGFjZSgvXFwkUFxceyguKj8pXFx9L2csIChfLCBrZXkpID0+IHtcbiAgICAgIHJldHVybiBkYXRhW2tleV0gPz8gJyc7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJub3QtZnVsbC1zY3JlZW5cIiAoZGJsY2xpY2spPVwidG9nZ2xlRnVsbFNjcmVlbigpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VfY29uZmlnPy53aWRHZXRDb25maWc/LmRpc3BsYXlcIj5cbiAgICAgICAgPGFwcC10aXRsZSBbdGl0bGVdPVwicGFnZV9jb25maWcud2lkR2V0Q29uZmlnLndpZGdldFRpdGxlXCIgW29wZXJhdG9yc109XCJwYWdlX2NvbmZpZy5vcGVyYXRpb25zXCJcbiAgICAgICAgICAgIFtkaXNwbGF5VHlwZV09XCInY2hhcnQnXCI+PC9hcHAtdGl0bGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cIm14LTIgcC0yIGJnLWdyYXktMjAwIGRhcms6YmctZ3JheS04MDAgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDBcIj5cbiAgICAgICAgPGFwcC1sb2FkZXIgKm5nSWY9XCJpc0xvYWRlclwiPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdkb3VnaG51dCcgJiYgY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAncGllJyAmJiBjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdmdW5uZWwnICYmIGNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSAhPT0gJ2J1YmJsZSdcIj5cblxuICAgICAgICAgICAgPGR4LWNoYXJ0IGlkPVwiY2hhcnRcIiBbZGF0YVNvdXJjZV09XCJmaW5hbENoYXJ0RGF0YVNvdXJjZVwiIChvblBvaW50Q2xpY2spPVwiZ2V0QWxsQ2hhcnRQb2ludENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtwYWxldHRlXT1cImNoYXJ0Q29uZmlnLnBhbGV0dGVcIiBbdGl0bGVdPVwieyB0ZXh0OiBjaGFydENvbmZpZy5jYXB0aW9uLCBmb250OiB7IHNpemU6IDE0IH0gfVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNMb2FkZXJcIiBbdmFsdWVBeGlzXT1cImNoYXJ0Q29uZmlnLnZhbHVlQXhpc0NvbmZpZ1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFydENvbmZpZy5zaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkeG8tc2l6ZSBbaGVpZ2h0XT1cImNoYXJ0Q29uZmlnLnNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9keG8tc2l6ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hhcnRDb25maWcuY2hhcnRfY29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtICYmIGl0ZW0uYXhpc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS12YWx1ZS1heGlzIG5hbWU9XCJ7e2l0ZW0uYXhpc319XCIgcG9zaXRpb249XCJ7e2l0ZW0ucG9zaXRpb259fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tdGl0bGUgdGV4dD1cInt7aXRlbS5uYW1lfX1cIj48L2R4by10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLXZhbHVlLWF4aXM+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgICAgIDxkeG8tYXJndW1lbnQtYXhpcz5cbiAgICAgICAgICAgICAgICAgICAgPGR4by1sYWJlbCBvdmVybGFwcGluZ0JlaGF2aW9yPVwicm90YXRlXCIgW3JvdGF0aW9uQW5nbGVdPVwiMjcwXCI+PC9keG8tbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9keG8tYXJndW1lbnQtYXhpcz5cbiAgICAgICAgICAgICAgICA8ZHhvLXRvb2x0aXAgW2VuYWJsZWRdPVwidHJ1ZVwiIFtzaGFyZWRdPVwidHJ1ZVwiIFtjdXN0b21pemVUb29sdGlwXT1cImN1c3RvbWl6ZVRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICA8L2R4by10b29sdGlwPlxuICAgICAgICAgICAgICAgIDxkeG8tY29tbW9uLXNlcmllcy1zZXR0aW5ncyBhcmd1bWVudEZpZWxkPVwie3tjaGFydENvbmZpZy5hcmd1bWVudEZpZWxkfX1cIj5cbiAgICAgICAgICAgICAgICA8L2R4by1jb21tb24tc2VyaWVzLXNldHRpbmdzPlxuXG5cbiAgICAgICAgICAgICAgICA8IS0tIGZvciBvdGhlcnMgc2luZ2xlIGFjY2VzcyBjaGFydCBzdGFydCAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAnc3RhY2tlZEJhcicgJiYgY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAnbXVsdGlMaW5lJyAmJiBjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdtdWx0aUJhcidcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydENvbmZpZy5jaGFydF9jb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtICYmIGl0ZW0uY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLXNlcmllcyB0eXBlPVwie3tpdGVtLnR5cGV9fVwiIHZhbHVlRmllbGQ9XCJ7e2l0ZW0udmFsdWVGaWVsZH19XCIgYXhpcz1cInt7aXRlbS5heGlzfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tpdGVtLm5hbWV9fVwiIGNvbG9yPVwie3tpdGVtLmNvbG9yfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1zZXJpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtICYmICFpdGVtLmNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1zZXJpZXMgdHlwZT1cInt7aXRlbS50eXBlfX1cIiB2YWx1ZUZpZWxkPVwie3tpdGVtLnZhbHVlRmllbGR9fVwiIGF4aXM9XCJ7e2l0ZW0uYXhpc319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7aXRlbS5uYW1lfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1zZXJpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPCEtLSBmb3Igb3RoZXJzIHNpbmdsZSBhY2Nlc3MgY2hhcnQgZW5kIC0tPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBmb3Igc3RhY2tiZXIgc3RhcnQgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gJ3N0YWNrZWRCYXInIHx8IGNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gJ211bHRpTGluZScgfHwgY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnbXVsdGlCYXInIFwiID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydFdpdGhUaHJlZURpbWVudGlvbkRhdGFTZXJpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktc2VyaWVzIHZhbHVlRmllbGQ9XCJ7e2l0ZW19fVwiIG5hbWU9XCJ7e2l0ZW19fVwiIHR5cGU9XCJ7e2NoYXJ0VHlwZVdoZW5NdWx0aVNlcmllc319XCI+PC9keGktc2VyaWVzPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8IS0tIGZvciBzdGFja2JlciBlbmQgLS0+XG5cbiAgICAgICAgICAgICAgICA8ZHhvLXNpemUgW2hlaWdodF09XCJjaGFydEhlaWdodFwiPlxuICAgICAgICAgICAgICAgIDwvZHhvLXNpemU+XG4gICAgICAgICAgICAgICAgPGR4by1sZWdlbmQgW3Zpc2libGVdPVwiY2hhcnRDb25maWcubGVnZW5kRGlzcGxheVwiIHZlcnRpY2FsQWxpZ25tZW50PVwie3tjaGFydENvbmZpZy52ZXJ0aWNhbEFsaWdubWVudH19XCJcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudD1cInt7Y2hhcnRDb25maWcuaG9yaXpvbnRhbEFsaWdubWVudH19XCI+XG4gICAgICAgICAgICAgICAgPC9keG8tbGVnZW5kPlxuICAgICAgICAgICAgPC9keC1jaGFydD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFydENvbmZpZy5jaGFydFR5cGUgPT09ICdkb3VnaG51dCcgfHwgY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAncGllJ1wiPlxuXG4gICAgICAgICAgICA8ZHgtcGllLWNoYXJ0IGlkPVwicGllXCIgW3R5cGVdPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwieyB0ZXh0OiBjaGFydENvbmZpZy5jYXB0aW9uLCBmb250OiB7IHNpemU6IDE0IH0gfVwiIFtkYXRhU291cmNlXT1cImZpbmFsQ2hhcnREYXRhU291cmNlXCJcbiAgICAgICAgICAgICAgICBjZW50ZXJUZW1wbGF0ZT1cImNlbnRlclRlbXBsYXRlXCIgKG9uUG9pbnRDbGljayk9XCJwb2ludENsaWNrSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbcGFsZXR0ZV09XCJjaGFydENvbmZpZy5wYWxldHRlXCI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5jb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1zZXJpZXMgYXJndW1lbnRGaWVsZD17e2NoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGR9fSB2YWx1ZUZpZWxkPVwie3tpdGVtLnZhbHVlRmllbGR9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7aXRlbS5uYW1lfX1cIiBjb2xvcj1cInt7aXRlbS5jb2xvcn19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1sYWJlbCBbdmlzaWJsZV09XCJjaGFydENvbmZpZy5sYWJlbERpc3BsYXlcIiBmb3JtYXQ9XCJjdXJyZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLWNvbm5lY3RvciBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tY29ubmVjdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keGktc2VyaWVzPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLmNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLXNlcmllcyBhcmd1bWVudEZpZWxkPXt7Y2hhcnRDb25maWcuYXJndW1lbnRGaWVsZH19IHZhbHVlRmllbGQ9XCJ7e2l0ZW0udmFsdWVGaWVsZH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tpdGVtLm5hbWV9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tbGFiZWwgW3Zpc2libGVdPVwiY2hhcnRDb25maWcubGFiZWxEaXNwbGF5XCIgZm9ybWF0PVwiY3VycmVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1jb25uZWN0b3IgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWNvbm5lY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLXNlcmllcz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLnNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGR4by1zaXplIFtoZWlnaHRdPVwiY2hhcnRDb25maWcuc2l6ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2R4by1zaXplPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkeG8tbGVnZW5kIFt2aXNpYmxlXT1cImNoYXJ0Q29uZmlnLmxlZ2VuZERpc3BsYXlcIlxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsQWxpZ25tZW50PVwie3tjaGFydENvbmZpZy5ob3Jpem9udGFsQWxpZ25tZW50fX1cIlxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudD1cInt7Y2hhcnRDb25maWcudmVydGljYWxBbGlnbm1lbnR9fVwiPjwvZHhvLWxlZ2VuZD5cbiAgICAgICAgICAgICAgICA8IS0tIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIj48L2R4by1leHBvcnQ+IC0tPlxuICAgICAgICAgICAgICAgIDxkeG8tdG9vbHRpcCBbZW5hYmxlZF09XCJ0cnVlXCIgW2N1c3RvbWl6ZVRvb2x0aXBdPVwiY3VzdG9taXplVG9vbHRpcFwiIGZvcm1hdD1cImN1cnJlbmN5XCI+XG4gICAgICAgICAgICAgICAgPC9keG8tdG9vbHRpcD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnZG91Z2hudXQnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgKmR4VGVtcGxhdGU9XCJsZXQgcGllQ2hhcnQgb2YgJ2NlbnRlclRlbXBsYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwMFwiIGN5PVwiMTAwXCIgW2F0dHIucl09XCJwaWVDaGFydC5nZXRJbm5lclJhZGl1cygpIC0gNlwiIGZpbGw9XCJncmF5XCIgb3BhY2l0eT1cIjAuMDAwMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jaXJjbGU+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHRleHQtYW5jaG9yPVwibWlkZGxlXCIgc3R5bGU9XCJmb250LXNpemU6IDBweFwiIHg9XCIxMDBcIiB5PVwiMTAwXCIgZmlsbD1cIiNlZWVcIiAqbmdJZj1cImNoYXJ0Q29uZmlnLmRpc3BsYXlDZW50ZXJMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0c3BhbiB4PVwiMTAwXCI+e3sgY2FsY3VsYXRlVG90YWwocGllQ2hhcnQpIH19PC90c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZHgtcGllLWNoYXJ0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnZnVubmVsJ1wiPlxuICAgICAgICAgICAgPGR4LWZ1bm5lbCBpZD1cImZ1bm5lbFwiIFtkYXRhU291cmNlXT1cImZpbmFsQ2hhcnREYXRhU291cmNlXCIgYXJndW1lbnRGaWVsZD1cImFyZ3VtZW50XCIgdmFsdWVGaWVsZD1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBwYWxldHRlPVwiU29mdCBQYXN0ZWxcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuc2l6ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNpemUgW2hlaWdodF09XCJjaGFydENvbmZpZy5zaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZHhvLXNpemU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGR4by1leHBvcnQgW2VuYWJsZWRdPVwiZmFsc2VcIj48L2R4by1leHBvcnQ+XG4gICAgICAgICAgICAgICAgPGR4by10b29sdGlwIFtlbmFibGVkXT1cInRydWVcIj4gPC9keG8tdG9vbHRpcD5cbiAgICAgICAgICAgICAgICA8ZHhvLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxkeG8tYm9yZGVyIFt2aXNpYmxlXT1cInRydWVcIj4gPC9keG8tYm9yZGVyPlxuICAgICAgICAgICAgICAgIDwvZHhvLWl0ZW0+XG4gICAgICAgICAgICAgICAgPGR4by1sYWJlbCBbdmlzaWJsZV09XCJ0cnVlXCIgcG9zaXRpb249XCJpbnNpZGVcIiBiYWNrZ3JvdW5kQ29sb3I9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbWl6ZVRleHRdPVwiY3VzdG9taXplVGV4dFwiPjwvZHhvLWxhYmVsPlxuICAgICAgICAgICAgPC9keC1mdW5uZWw+XG5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gJ2J1YmJsZSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC01IG92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaGVhdENoYXJ0RGF0YVNvdXJjZS5kYXRhU2V0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMCB0ZXh0LXNtIGl0ZW1zLWNlbnRlciBtaW4tdy0xMiBtYXgtdy1bMzAlXSBqdXN0aWZ5LWNlbnRlciBmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLmRhdGFzb3VyY2V9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLWJsb2NrIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtbm93cmFwIGp1c3RpZnktY2VudGVyIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBib3ggb2YgaXRlbS5kYXRhc2V0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMCBtaW4tdy0xMCBtYXgtdy1bMjAlXSBoLTEwIHRleHQtc20gY3Vyc29yLXBvaW50ZXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ncmF5LTgwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1JlY29yZCBEYXRlOiAnICsgYm94LnJlY29yZERhdGUgKyAnXFxuUmVjaGFyZ2UgQ291bnQ6ICcgKyBib3gudG9vbFRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1mdWxsXCIgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBib3guaXNIb3ZlcmVkID8gJ3JnYigxMzUsIDE4NCwgMTA2KScgOiBib3guY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkdGgucHgnOiBib3guc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdob3Zlcic6IGJveC5ob3ZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQucHgnOiBib3guc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAobW91c2VlbnRlcik9XCJib3guaXNIb3ZlcmVkID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImJveC5pc0hvdmVyZWQgPSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmxpbmUtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1ub3dyYXAganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wIHctMTIgbWF4LXctWzIwJV0gaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGhlYXRDaGFydERhdGFTb3VyY2UuYXJndW1lbnRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LXNocmluay0wIHctMTAgbWF4LXctWzIwJV0gbWluLWgtMTQgZmxleCB0ZXh0LXNtIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBteS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2hlaWdodCc6ICdhdXRvJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcm90YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b24gKm5nSWY9XCJpc0Z1bGxTY3JlZW5cIiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVGdWxsU2NyZWVuKClcIj5DbG9zZTwvYnV0dG9uPlxuPC9kaXY+Il19
|