From 3db5477465246dcd390e9b79c7c406020fa468a6 Mon Sep 17 00:00:00 2001 From: shate Date: Mon, 20 Feb 2017 13:46:47 +0900 Subject: [PATCH] import dependent functions --- .eslintrc | 1 - dist/canvasjs.js | 3897 +++++++++++++++++++++++++++++++++++------- dist/canvasjs.min.js | 16 +- package.json | 5 +- src/core/axis.js | 3 +- src/core/charts.js | 3 +- src/helpers/utils.js | 6 +- 7 files changed, 3316 insertions(+), 615 deletions(-) diff --git a/.eslintrc b/.eslintrc index 3705717..ed3459d 100644 --- a/.eslintrc +++ b/.eslintrc @@ -8,7 +8,6 @@ "classes": true, "defaultParams": true, "destructuring": true, - "forOf": true, "generators": true, "objectLiteralComputedProperties": true, "objectLiteralDuplicateProperties": true, diff --git a/dist/canvasjs.js b/dist/canvasjs.js index d1abb43..7537939 100755 --- a/dist/canvasjs.js +++ b/dist/canvasjs.js @@ -287,6 +287,7 @@ exports.default = function (plotUnit) { //dataSeries.maxWidthInX = barWidth / (plotUnit.axisX.conversionParameters.pixelPerUnit > 1 ? plotUnit.axisX.conversionParameters.pixelPerUnit - 1 : plotUnit.axisX.conversionParameters.pixelPerUnit); + if (dataPoints.length > 0) { //var xy = this.getPixelCoordinatesOnPlotArea(dataPoints[0].x, dataPoints[0].y); @@ -605,6 +606,7 @@ exports.default = function (plotUnit) { //var offsetX = barWidth * plotUnit.index << 0; + if (dataPoints.length > 0) { //var xy = this.getPixelCoordinatesOnPlotArea(dataPoints[0].x, dataPoints[0].y); @@ -802,6 +804,7 @@ exports.default = function (plotUnit) { //var offsetX = barWidth * plotUnit.index << 0; + if (dataPoints.length > 0) { //var xy = this.getPixelCoordinatesOnPlotArea(dataPoints[0].x, dataPoints[0].y); @@ -1489,25 +1492,25 @@ exports.default = function (plotUnit) { //dataPointEO.indexLabelTextBlock.x = newlabelX; } else { - validOffset = 0; + validOffset = 0; - //dataPointEO.indexLabelTextBlock.x = newlabelX; + //dataPointEO.indexLabelTextBlock.x = newlabelX; - //Index Line is overlapping the pie. So lets find out the point where indexline becomes a tangent. + //Index Line is overlapping the pie. So lets find out the point where indexline becomes a tangent. - //distFromIndexLineStart = Math.sqrt(indexLabelRadius * indexLabelRadius - outerRadius * outerRadius); - ////distFromIndexLineStart *= offset < 0 ? -1 : 1; - ////indexLabelAngle = Math.acos((indexLabelRadius * indexLabelRadius + outerRadius * outerRadius - distFromIndexLineStart * distFromIndexLineStart) / (2 * outerRadius * indexLabelRadius)); - //indexLabelAngle = Math.atan2(distFromIndexLineStart, outerRadius); + //distFromIndexLineStart = Math.sqrt(indexLabelRadius * indexLabelRadius - outerRadius * outerRadius); + ////distFromIndexLineStart *= offset < 0 ? -1 : 1; + ////indexLabelAngle = Math.acos((indexLabelRadius * indexLabelRadius + outerRadius * outerRadius - distFromIndexLineStart * distFromIndexLineStart) / (2 * outerRadius * indexLabelRadius)); + //indexLabelAngle = Math.atan2(distFromIndexLineStart, outerRadius); - //newlabelX = center.x + indexLabelRadius * Math.cos(indexLabelAngle); - //newlabelY = center.y + indexLabelRadius * Math.sin(indexLabelAngle); + //newlabelX = center.x + indexLabelRadius * Math.cos(indexLabelAngle); + //newlabelY = center.y + indexLabelRadius * Math.sin(indexLabelAngle); - //actualOffset = newlabelY - dataPointEO.indexLabelTextBlock.y; + //actualOffset = newlabelY - dataPointEO.indexLabelTextBlock.y; - //dataPointEO.indexLabelTextBlock.y = newlabelY; - //dataPointEO.indexLabelTextBlock.x = newlabelX; - } + //dataPointEO.indexLabelTextBlock.y = newlabelY; + //dataPointEO.indexLabelTextBlock.x = newlabelX; + } } //var tempIndex = (dataPointIndex + dataPointEOs.length - 1) % dataPointEOs.length; @@ -1549,6 +1552,7 @@ exports.default = function (plotUnit) { //if (dataPointIndex < 4) // customPrompt(dataPointIndex + "; " + "offset: " + otherDataPointOffset); + if (+otherDataPointActualOffset.toFixed(precision) > +otherDataPointOffset.toFixed(precision)) { if (distanceFromOtherLabel > minDistanceBetweenLabels) actualOffset = -(distanceFromOtherLabel - minDistanceBetweenLabels); @@ -1563,41 +1567,41 @@ exports.default = function (plotUnit) { } } else if (validOffset > 0) { - otherDataPointIndex = dataPointEO.hemisphere === "right" ? nextDataPointIndex : prevDataPointIndex; + otherDataPointIndex = dataPointEO.hemisphere === "right" ? nextDataPointIndex : prevDataPointIndex; - actualOffset = validOffset; + actualOffset = validOffset; - if (otherDataPointIndex !== null) { + if (otherDataPointIndex !== null) { - var tempOffset = validOffset; + var tempOffset = validOffset; - var distanceFromOtherLabel = dataPointEOs[otherDataPointIndex].indexLabelTextBlock.y - dataPointEOs[otherDataPointIndex].indexLabelTextBlock.height / 2 - (dataPointEO.indexLabelTextBlock.y + dataPointEO.indexLabelTextBlock.height / 2); + var distanceFromOtherLabel = dataPointEOs[otherDataPointIndex].indexLabelTextBlock.y - dataPointEOs[otherDataPointIndex].indexLabelTextBlock.height / 2 - (dataPointEO.indexLabelTextBlock.y + dataPointEO.indexLabelTextBlock.height / 2); - if (distanceFromOtherLabel - tempOffset < minDistanceBetweenLabels) { - otherDataPointOffset = tempOffset; - //totalRecursions++; - otherDataPointActualOffset = rePositionLabels(otherDataPointIndex, otherDataPointOffset, recursionCount + 1); + if (distanceFromOtherLabel - tempOffset < minDistanceBetweenLabels) { + otherDataPointOffset = tempOffset; + //totalRecursions++; + otherDataPointActualOffset = rePositionLabels(otherDataPointIndex, otherDataPointOffset, recursionCount + 1); - if (+otherDataPointActualOffset.toFixed(precision) < +otherDataPointOffset.toFixed(precision)) { + if (+otherDataPointActualOffset.toFixed(precision) < +otherDataPointOffset.toFixed(precision)) { - if (distanceFromOtherLabel > minDistanceBetweenLabels) actualOffset = distanceFromOtherLabel - minDistanceBetweenLabels; - //else - // actualOffset = 0; - else actualOffset = tempOffset - (otherDataPointOffset - otherDataPointActualOffset); - } + if (distanceFromOtherLabel > minDistanceBetweenLabels) actualOffset = distanceFromOtherLabel - minDistanceBetweenLabels; + //else + // actualOffset = 0; + else actualOffset = tempOffset - (otherDataPointOffset - otherDataPointActualOffset); } } - - //if (!(dataPointEO.indexLabelTextBlock.y + dataPointEO.indexLabelTextBlock.height / 2 + actualOffset < labelYMax)) { - // if (dataPointEO.indexLabelTextBlock.y + dataPointEO.indexLabelTextBlock.height / 2 < labelYMax) { - // actualOffset = labelYMax - (dataPointEO.indexLabelTextBlock.y + dataPointEO.indexLabelTextBlock.height / 2); - // } - // else { - // actualOffset = 0; - // } - //} } + //if (!(dataPointEO.indexLabelTextBlock.y + dataPointEO.indexLabelTextBlock.height / 2 + actualOffset < labelYMax)) { + // if (dataPointEO.indexLabelTextBlock.y + dataPointEO.indexLabelTextBlock.height / 2 < labelYMax) { + // actualOffset = labelYMax - (dataPointEO.indexLabelTextBlock.y + dataPointEO.indexLabelTextBlock.height / 2); + // } + // else { + // actualOffset = 0; + // } + //} + } + if (actualOffset) { var newLabelY = dataPointEO.indexLabelTextBlock.y + actualOffset; @@ -1671,9 +1675,11 @@ exports.default = function (plotUnit) { if (dataSeries.indexLabelPlacement !== "inside") { indexLabelRadius = outerRadius * indexLabelRadiusToRadiusRatio; + for (i = 0; i < dataPoints.length; i++) { dataPointEO = dataPointEOs[i]; + dataPointEO.indexLabelTextBlock.x = center.x + indexLabelRadius * Math.cos(dataPointEO.midAngle); dataPointEO.indexLabelTextBlock.y = center.y + indexLabelRadius * Math.sin(dataPointEO.midAngle); @@ -1697,6 +1703,7 @@ exports.default = function (plotUnit) { nextDataPointIndex = getNextLabelIndex(i); + if (nextDataPointIndex === null) continue; currentDataPoint = dataPointEOs[i]; @@ -1716,6 +1723,7 @@ exports.default = function (plotUnit) { dataPointsBelow = 0; //var indexLabelAngleWhenTangent = Math.acos(outerRadius / indexLabelRadius) / Math.PI * 180; + for (k = 0; k < dataPoints.length; k++) { if (k === i) continue; @@ -1737,12 +1745,14 @@ exports.default = function (plotUnit) { actualUpwardOffset = 0; actualDownwardOffset = 0; + if (dataPointEO.hemisphere === "right") { actualUpwardOffset = rePositionLabels(i, upWardsOffset); //if (i < 4 && actualDownwardOffset !== upWardsOffset) // customPrompt(i + "; " + upWardsOffset.toFixed(2) + "; " + actualUpwardOffset.toFixed(2)); + downWardsOffset = -1 * (distanceFromNextLabel - actualUpwardOffset); actualDownwardOffset = rePositionLabels(nextDataPointIndex, downWardsOffset); @@ -1768,18 +1778,19 @@ exports.default = function (plotUnit) { //window.alert("next??"); } } else { - for (i = 0; i < dataPoints.length; i++) { - dataPointEO = dataPointEOs[i]; + for (i = 0; i < dataPoints.length; i++) { + dataPointEO = dataPointEOs[i]; - indexLabelRadius = dataSeries.type === "pie" ? outerRadius * .7 : outerRadius * .8; + indexLabelRadius = dataSeries.type === "pie" ? outerRadius * .7 : outerRadius * .8; - dx = center.x + indexLabelRadius * Math.cos(dataPointEO.midAngle); - dy = center.y + indexLabelRadius * Math.sin(dataPointEO.midAngle); + dx = center.x + indexLabelRadius * Math.cos(dataPointEO.midAngle); + dy = center.y + indexLabelRadius * Math.sin(dataPointEO.midAngle); - dataPointEO.indexLabelTextBlock.x = dx; - dataPointEO.indexLabelTextBlock.y = dy; - } + + dataPointEO.indexLabelTextBlock.x = dx; + dataPointEO.indexLabelTextBlock.y = dy; } + } // Resize Pie based on the label length. for (i = 0; i < dataPoints.length; i++) { @@ -1794,6 +1805,7 @@ exports.default = function (plotUnit) { xOverflow = 0; xdr = 0; + if (dataPointEO.hemisphere === "right") { xOverflow = plotArea.x2 - (dataPointEO.indexLabelTextBlock.x + dataPointEO.indexLabelTextBlock.width + indexLabelLineEdgeLength); xOverflow *= -1; @@ -1821,6 +1833,7 @@ exports.default = function (plotUnit) { yOverflow = 0; ydr = 0; + if (dataPointEO.indexLabelAngle > 0 && dataPointEO.indexLabelAngle < Math.PI) { yOverflow = plotArea.y2 - (dataPointEO.indexLabelTextBlock.y + dataPointEO.indexLabelTextBlock.height / 2 + 5); yOverflow *= -1; @@ -1918,8 +1931,8 @@ exports.default = function (plotUnit) { //nextDataPoint.indexLabelTextBlock.measureText(); } else { - removeLabels = true; - } + removeLabels = true; + } if (removeLabels) { @@ -1968,6 +1981,7 @@ exports.default = function (plotUnit) { } //window.alert("next??"); + //resetAnimationFrame(_this.animationEnabled && _this.renderCount === 0 ? isCanvasSupported ? 60 : 30 : 1); //animate(); @@ -2394,6 +2408,7 @@ exports.default = function (plotUnit) { //dataSeries.maxWidthInX = barWidth / (plotUnit.axisX.conversionParameters.pixelPerUnit > 1 ? plotUnit.axisX.conversionParameters.pixelPerUnit - 1 : plotUnit.axisX.conversionParameters.pixelPerUnit); + if (dataPoints.length > 0) { //var xy = this.getPixelCoordinatesOnPlotArea(dataPoints[0].x, dataPoints[0].y); @@ -2551,6 +2566,7 @@ exports.default = function (plotUnit) { //var offsetX = barWidth * plotUnit.index << 0; + if (dataPoints.length > 0) { //var xy = this.getPixelCoordinatesOnPlotArea(dataPoints[0].x, dataPoints[0].y); @@ -3944,6 +3960,7 @@ exports.default = function (plotUnit) { y; var dataPointX; //Used so that when dataPoint.x is a DateTime value, it doesn't get converted to number everytime it is accessed. + //var yZeroToPixel = (axisYProps.y2 - axisYProps.height / rangeY * Math.abs(0 - plotUnit.axisY.viewportMinimum) + .5) << 0; var yZeroToPixel = plotUnit.axisY.conversionParameters.reference + plotUnit.axisY.conversionParameters.pixelPerUnit * (0 - plotUnit.axisY.conversionParameters.minimum) << 0; @@ -4553,6 +4570,7 @@ exports.default = function (plotUnit) { // Reducing pixelPerUnit by 1 just to overcome any problems due to rounding off of pixels. //dataSeries.maxWidthInX = barWidth / (plotUnit.axisX.conversionParameters.pixelPerUnit > 1 ? plotUnit.axisX.conversionParameters.pixelPerUnit - 1 : plotUnit.axisX.conversionParameters.pixelPerUnit); + if (dataPoints.length > 0) { //var xy = this.getPixelCoordinatesOnPlotArea(dataPoints[0].x, dataPoints[0].y); @@ -4702,6 +4720,7 @@ exports.default = function (plotUnit) { //dataSeries.maxWidthInX = barWidth / (plotUnit.axisX.conversionParameters.pixelPerUnit > 1 ? plotUnit.axisX.conversionParameters.pixelPerUnit - 1 : plotUnit.axisX.conversionParameters.pixelPerUnit); + if (dataPoints.length > 0) { //var xy = this.getPixelCoordinatesOnPlotArea(dataPoints[0].x, dataPoints[0].y); @@ -5712,6 +5731,8 @@ var _text_block2 = _interopRequireDefault(_text_block); var _utils = require('../helpers/utils'); +var _culture = require('../constants/culture'); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function Axis(chart, options, type, position) { @@ -5813,6 +5834,7 @@ Axis.prototype.createLabels = function () { //var intervalInPixels = this.conversionParameters.pixelPerUnit * this.interval; + if (this._position === "bottom" || this._position === "top") { intervalInPixels = this.lineCoordinates.width / Math.abs(this.viewportMaximum - this.viewportMinimum) * this.interval; @@ -5837,14 +5859,14 @@ Axis.prototype.createLabels = function () { } if (this.type === "axisX" && this.chart.plotInfo.axisXValueType === "dateTime") { - endPoint = addToDateTime(new Date(this.viewportMaximum), this.interval, this.intervalType); + endPoint = (0, _utils.addToDateTime)(new Date(this.viewportMaximum), this.interval, this.intervalType); //endPoint = this.viewportMaximum; - for (i = this.intervalStartPosition; i < endPoint; addToDateTime(i, this.interval, this.intervalType)) { + for (i = this.intervalStartPosition; i < endPoint; (0, _utils.addToDateTime)(i, this.interval, this.intervalType)) { //var text = dateFormat(i, this.valueFormatString); var timeInMilliseconds = i.getTime(); - var text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this._options, value: i, label: this.labels[i] ? this.labels[i] : null }) : this.type === "axisX" && this.labels[timeInMilliseconds] ? this.labels[timeInMilliseconds] : dateFormat(i, this.valueFormatString, this.chart._cultureInfo); + var text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this._options, value: i, label: this.labels[i] ? this.labels[i] : null }) : this.type === "axisX" && this.labels[timeInMilliseconds] ? this.labels[timeInMilliseconds] : (0, _utils.dateFormat)(i, this.valueFormatString, this.chart._cultureInfo); textBlock = new _text_block2.default(this.ctx, { x: 0, @@ -6591,69 +6613,69 @@ Axis.prototype.renderLabelsTicksAndTitle = function () { } } else if (this._position === "right") { - var label; - var xy; - - for (var i = 0; i < this._labels.length; i++) { - label = this._labels[i]; - if (label.position < this.viewportMinimum || label.position > this.viewportMaximum) continue; + var label; + var xy; - xy = this.getPixelCoordinatesOnAxis(label.position); + for (var i = 0; i < this._labels.length; i++) { + label = this._labels[i]; + if (label.position < this.viewportMinimum || label.position > this.viewportMaximum) continue; - if (this.tickThickness && !this._labels[i].stripLine || this._labels[i].stripLine && this._labels[i].stripLine._thicknessType === "pixel") { + xy = this.getPixelCoordinatesOnAxis(label.position); - if (this._labels[i].stripLine) { - stripLine = this._labels[i].stripLine; + if (this.tickThickness && !this._labels[i].stripLine || this._labels[i].stripLine && this._labels[i].stripLine._thicknessType === "pixel") { - this.ctx.lineWidth = stripLine.thickness; - this.ctx.strokeStyle = stripLine.color; - } else { - this.ctx.lineWidth = this.tickThickness; - this.ctx.strokeStyle = this.tickColor; - } + if (this._labels[i].stripLine) { + stripLine = this._labels[i].stripLine; - var tickY = this.ctx.lineWidth % 2 === 1 ? (xy.y << 0) + .5 : xy.y << 0; - this.ctx.beginPath(); - this.ctx.moveTo(xy.x << 0, tickY); - this.ctx.lineTo(xy.x + this.tickLength << 0, tickY); - this.ctx.stroke(); - } - - //Don't skip stripLine's labels - if (skipLabels && labelCount++ % 2 !== 0 && !this._labels[i].stripLine) continue; - - label.textBlock.x = xy.x + this.tickLength + 5; - //label.textBlock.y = xy.y - (label.textBlock.width * Math.sin(Math.PI / 180 * this.labelAngle)); - if (this.labelAngle === 0) { - label.textBlock.y = xy.y; - } else label.textBlock.y = xy.y; - - label.textBlock.render(true); - } - - if (this.title) { - - this._titleTextBlock = new _text_block2.default(this.ctx, { - x: this.boundingRect.x2 - 1, - y: this.lineCoordinates.y2, - maxWidth: this.lineCoordinates.height, - maxHeight: this.titleFontSize * 1.5, - angle: 90, - text: this.title, - horizontalAlign: "center", //left, center, right - fontSize: this.titleFontSize, //in pixels - fontFamily: this.titleFontFamily, - fontWeight: this.titleFontWeight, //normal, bold, bolder, lighter, - fontColor: this.titleFontColor, - fontStyle: this.titleFontStyle, // normal, italic, oblique - textBaseline: "top" - }); + this.ctx.lineWidth = stripLine.thickness; + this.ctx.strokeStyle = stripLine.color; + } else { + this.ctx.lineWidth = this.tickThickness; + this.ctx.strokeStyle = this.tickColor; + } - this._titleTextBlock.measureText(); - this._titleTextBlock.y = this.lineCoordinates.height / 2 - this._titleTextBlock.width / 2 + this.lineCoordinates.y1; - this._titleTextBlock.render(true); + var tickY = this.ctx.lineWidth % 2 === 1 ? (xy.y << 0) + .5 : xy.y << 0; + this.ctx.beginPath(); + this.ctx.moveTo(xy.x << 0, tickY); + this.ctx.lineTo(xy.x + this.tickLength << 0, tickY); + this.ctx.stroke(); } + + //Don't skip stripLine's labels + if (skipLabels && labelCount++ % 2 !== 0 && !this._labels[i].stripLine) continue; + + label.textBlock.x = xy.x + this.tickLength + 5; + //label.textBlock.y = xy.y - (label.textBlock.width * Math.sin(Math.PI / 180 * this.labelAngle)); + if (this.labelAngle === 0) { + label.textBlock.y = xy.y; + } else label.textBlock.y = xy.y; + + label.textBlock.render(true); + } + + if (this.title) { + + this._titleTextBlock = new _text_block2.default(this.ctx, { + x: this.boundingRect.x2 - 1, + y: this.lineCoordinates.y2, + maxWidth: this.lineCoordinates.height, + maxHeight: this.titleFontSize * 1.5, + angle: 90, + text: this.title, + horizontalAlign: "center", //left, center, right + fontSize: this.titleFontSize, //in pixels + fontFamily: this.titleFontFamily, + fontWeight: this.titleFontWeight, //normal, bold, bolder, lighter, + fontColor: this.titleFontColor, + fontStyle: this.titleFontStyle, // normal, italic, oblique + textBaseline: "top" + }); + + this._titleTextBlock.measureText(); + this._titleTextBlock.y = this.lineCoordinates.height / 2 - this._titleTextBlock.width / 2 + this.lineCoordinates.y1; + this._titleTextBlock.render(true); } + } }; Axis.prototype.renderInterlacedColors = function () { @@ -7048,101 +7070,101 @@ Axis.prototype.calculateAxisParameters = function () { } else if (range / (1 * 500) <= noTicks) { this.interval = 500; this.intervalType = "millisecond"; - } else if (range / (constants.secondDuration * 1) <= noTicks) { + } else if (range / (_culture.constants.secondDuration * 1) <= noTicks) { this.interval = 1; this.intervalType = "second"; - } else if (range / (constants.secondDuration * 2) <= noTicks) { + } else if (range / (_culture.constants.secondDuration * 2) <= noTicks) { this.interval = 2; this.intervalType = "second"; - } else if (range / (constants.secondDuration * 5) <= noTicks) { + } else if (range / (_culture.constants.secondDuration * 5) <= noTicks) { this.interval = 5; this.intervalType = "second"; - } else if (range / (constants.secondDuration * 10) <= noTicks) { + } else if (range / (_culture.constants.secondDuration * 10) <= noTicks) { this.interval = 10; this.intervalType = "second"; - } else if (range / (constants.secondDuration * 15) <= noTicks) { + } else if (range / (_culture.constants.secondDuration * 15) <= noTicks) { this.interval = 15; this.intervalType = "second"; - } else if (range / (constants.secondDuration * 20) <= noTicks) { + } else if (range / (_culture.constants.secondDuration * 20) <= noTicks) { this.interval = 20; this.intervalType = "second"; - } else if (range / (constants.secondDuration * 30) <= noTicks) { + } else if (range / (_culture.constants.secondDuration * 30) <= noTicks) { this.interval = 30; this.intervalType = "second"; - } else if (range / (constants.minuteDuration * 1) <= noTicks) { + } else if (range / (_culture.constants.minuteDuration * 1) <= noTicks) { this.interval = 1; this.intervalType = "minute"; - } else if (range / (constants.minuteDuration * 2) <= noTicks) { + } else if (range / (_culture.constants.minuteDuration * 2) <= noTicks) { this.interval = 2; this.intervalType = "minute"; - } else if (range / (constants.minuteDuration * 5) <= noTicks) { + } else if (range / (_culture.constants.minuteDuration * 5) <= noTicks) { this.interval = 5; this.intervalType = "minute"; - } else if (range / (constants.minuteDuration * 10) <= noTicks) { + } else if (range / (_culture.constants.minuteDuration * 10) <= noTicks) { this.interval = 10; this.intervalType = "minute"; - } else if (range / (constants.minuteDuration * 15) <= noTicks) { + } else if (range / (_culture.constants.minuteDuration * 15) <= noTicks) { this.interval = 15; this.intervalType = "minute"; - } else if (range / (constants.minuteDuration * 20) <= noTicks) { + } else if (range / (_culture.constants.minuteDuration * 20) <= noTicks) { this.interval = 20; this.intervalType = "minute"; - } else if (range / (constants.minuteDuration * 30) <= noTicks) { + } else if (range / (_culture.constants.minuteDuration * 30) <= noTicks) { this.interval = 30; this.intervalType = "minute"; - } else if (range / (constants.hourDuration * 1) <= noTicks) { + } else if (range / (_culture.constants.hourDuration * 1) <= noTicks) { this.interval = 1; this.intervalType = "hour"; - } else if (range / (constants.hourDuration * 2) <= noTicks) { + } else if (range / (_culture.constants.hourDuration * 2) <= noTicks) { this.interval = 2; this.intervalType = "hour"; - } else if (range / (constants.hourDuration * 3) <= noTicks) { + } else if (range / (_culture.constants.hourDuration * 3) <= noTicks) { this.interval = 3; this.intervalType = "hour"; - } else if (range / (constants.hourDuration * 6) <= noTicks) { + } else if (range / (_culture.constants.hourDuration * 6) <= noTicks) { this.interval = 6; this.intervalType = "hour"; - } else if (range / (constants.dayDuration * 1) <= noTicks) { + } else if (range / (_culture.constants.dayDuration * 1) <= noTicks) { this.interval = 1; this.intervalType = "day"; - } else if (range / (constants.dayDuration * 2) <= noTicks) { + } else if (range / (_culture.constants.dayDuration * 2) <= noTicks) { this.interval = 2; this.intervalType = "day"; - } else if (range / (constants.dayDuration * 4) <= noTicks) { + } else if (range / (_culture.constants.dayDuration * 4) <= noTicks) { this.interval = 4; this.intervalType = "day"; - } else if (range / (constants.weekDuration * 1) <= noTicks) { + } else if (range / (_culture.constants.weekDuration * 1) <= noTicks) { this.interval = 1; this.intervalType = "week"; - } else if (range / (constants.weekDuration * 2) <= noTicks) { + } else if (range / (_culture.constants.weekDuration * 2) <= noTicks) { this.interval = 2; this.intervalType = "week"; - } else if (range / (constants.weekDuration * 3) <= noTicks) { + } else if (range / (_culture.constants.weekDuration * 3) <= noTicks) { this.interval = 3; this.intervalType = "week"; - } else if (range / (constants.monthDuration * 1) <= noTicks) { + } else if (range / (_culture.constants.monthDuration * 1) <= noTicks) { this.interval = 1; this.intervalType = "month"; - } else if (range / (constants.monthDuration * 2) <= noTicks) { + } else if (range / (_culture.constants.monthDuration * 2) <= noTicks) { this.interval = 2; this.intervalType = "month"; - } else if (range / (constants.monthDuration * 3) <= noTicks) { + } else if (range / (_culture.constants.monthDuration * 3) <= noTicks) { this.interval = 3; this.intervalType = "month"; - } else if (range / (constants.monthDuration * 6) <= noTicks) { + } else if (range / (_culture.constants.monthDuration * 6) <= noTicks) { this.interval = 6; this.intervalType = "month"; - } else if (range / (constants.yearDuration * 1) <= noTicks) { + } else if (range / (_culture.constants.yearDuration * 1) <= noTicks) { this.interval = 1; this.intervalType = "year"; - } else if (range / (constants.yearDuration * 2) <= noTicks) { + } else if (range / (_culture.constants.yearDuration * 2) <= noTicks) { this.interval = 2; this.intervalType = "year"; - } else if (range / (constants.yearDuration * 4) <= noTicks) { + } else if (range / (_culture.constants.yearDuration * 4) <= noTicks) { this.interval = 4; this.intervalType = "year"; } else { - this.interval = Math.floor(Axis.getNiceNumber(range / (noTicks - 1), true) / constants.yearDuration); + this.interval = Math.floor(Axis.getNiceNumber(range / (noTicks - 1), true) / _culture.constants.yearDuration); this.intervalType = "year"; } } @@ -7291,6 +7313,7 @@ Axis.prototype.calculateAxisParameters = function () { //var nfrac = Math.max(-Math.floor(Math.log(d)/Math.LN10), 0); //number of fractional digits to show + if (this.maximum === 0 && this.minimum === 0) { if (this._options.minimum === 0) { @@ -7350,7 +7373,7 @@ Axis.getNiceNumber = function (x, round) { Axis.prototype.getLabelStartPoint = function () { - var intervalInMilliseconds = convertToNumber(this.interval, this.intervalType); + var intervalInMilliseconds = (0, _utils.convertToNumber)(this.interval, this.intervalType); var minimum = Math.floor(this.viewportMinimum / intervalInMilliseconds) * intervalInMilliseconds; var dateTime = new Date(minimum); @@ -7358,66 +7381,66 @@ Axis.prototype.getLabelStartPoint = function () { //millisecond = dateTime.getMilliSecond(); //millisecond = Math.floor((millisecond + this.interval) / this.interval) * this.interval; } else if (this.intervalType === "second") { - if (dateTime.getMilliseconds() > 0) { - dateTime.setSeconds(dateTime.getSeconds() + 1); - dateTime.setMilliseconds(0); - } - } else if (this.intervalType === "minute") { - if (dateTime.getSeconds() > 0 || dateTime.getMilliseconds() > 0) { - dateTime.setMinutes(dateTime.getMinutes() + 1); - dateTime.setSeconds(0); - dateTime.setMilliseconds(0); - } - } else if (this.intervalType === "hour") { - if (dateTime.getMinutes() > 0 || dateTime.getSeconds() > 0 || dateTime.getMilliseconds() > 0) { - dateTime.setHours(dateTime.getHours() + 1); - dateTime.setMinutes(0); - dateTime.setSeconds(0); - dateTime.setMilliseconds(0); - } - } else if (this.intervalType === "day") { - if (dateTime.getHours() > 0 || dateTime.getMinutes() > 0 || dateTime.getSeconds() > 0 || dateTime.getMilliseconds() > 0) { - dateTime.setDate(dateTime.getDate() + 1); - dateTime.setHours(0); - dateTime.setMinutes(0); - dateTime.setSeconds(0); - dateTime.setMilliseconds(0); - } - } else if (this.intervalType === "week") { - if (dateTime.getDay() > 0 || dateTime.getHours() > 0 || dateTime.getMinutes() > 0 || dateTime.getSeconds() > 0 || dateTime.getMilliseconds() > 0) { - dateTime.setDate(dateTime.getDate() + (7 - dateTime.getDay())); - dateTime.setHours(0); - dateTime.setMinutes(0); - dateTime.setSeconds(0); - dateTime.setMilliseconds(0); - } - } else if (this.intervalType === "month") { - if (dateTime.getDate() > 1 || dateTime.getHours() > 0 || dateTime.getMinutes() > 0 || dateTime.getSeconds() > 0 || dateTime.getMilliseconds() > 0) { - dateTime.setMonth(dateTime.getMonth() + 1); - dateTime.setDate(1); - dateTime.setHours(0); - dateTime.setMinutes(0); - dateTime.setSeconds(0); - dateTime.setMilliseconds(0); - } - } else if (this.intervalType === "year") { - if (dateTime.getMonth() > 0 || dateTime.getDate() > 1 || dateTime.getHours() > 0 || dateTime.getMinutes() > 0 || dateTime.getSeconds() > 0 || dateTime.getMilliseconds() > 0) { - dateTime.setFullYear(dateTime.getFullYear() + 1); - dateTime.setMonth(0); - dateTime.setDate(1); - dateTime.setHours(0); - dateTime.setMinutes(0); - dateTime.setSeconds(0); - dateTime.setMilliseconds(0); - } + if (dateTime.getMilliseconds() > 0) { + dateTime.setSeconds(dateTime.getSeconds() + 1); + dateTime.setMilliseconds(0); + } + } else if (this.intervalType === "minute") { + if (dateTime.getSeconds() > 0 || dateTime.getMilliseconds() > 0) { + dateTime.setMinutes(dateTime.getMinutes() + 1); + dateTime.setSeconds(0); + dateTime.setMilliseconds(0); + } + } else if (this.intervalType === "hour") { + if (dateTime.getMinutes() > 0 || dateTime.getSeconds() > 0 || dateTime.getMilliseconds() > 0) { + dateTime.setHours(dateTime.getHours() + 1); + dateTime.setMinutes(0); + dateTime.setSeconds(0); + dateTime.setMilliseconds(0); + } + } else if (this.intervalType === "day") { + if (dateTime.getHours() > 0 || dateTime.getMinutes() > 0 || dateTime.getSeconds() > 0 || dateTime.getMilliseconds() > 0) { + dateTime.setDate(dateTime.getDate() + 1); + dateTime.setHours(0); + dateTime.setMinutes(0); + dateTime.setSeconds(0); + dateTime.setMilliseconds(0); + } + } else if (this.intervalType === "week") { + if (dateTime.getDay() > 0 || dateTime.getHours() > 0 || dateTime.getMinutes() > 0 || dateTime.getSeconds() > 0 || dateTime.getMilliseconds() > 0) { + dateTime.setDate(dateTime.getDate() + (7 - dateTime.getDay())); + dateTime.setHours(0); + dateTime.setMinutes(0); + dateTime.setSeconds(0); + dateTime.setMilliseconds(0); + } + } else if (this.intervalType === "month") { + if (dateTime.getDate() > 1 || dateTime.getHours() > 0 || dateTime.getMinutes() > 0 || dateTime.getSeconds() > 0 || dateTime.getMilliseconds() > 0) { + dateTime.setMonth(dateTime.getMonth() + 1); + dateTime.setDate(1); + dateTime.setHours(0); + dateTime.setMinutes(0); + dateTime.setSeconds(0); + dateTime.setMilliseconds(0); } + } else if (this.intervalType === "year") { + if (dateTime.getMonth() > 0 || dateTime.getDate() > 1 || dateTime.getHours() > 0 || dateTime.getMinutes() > 0 || dateTime.getSeconds() > 0 || dateTime.getMilliseconds() > 0) { + dateTime.setFullYear(dateTime.getFullYear() + 1); + dateTime.setMonth(0); + dateTime.setDate(1); + dateTime.setHours(0); + dateTime.setMinutes(0); + dateTime.setSeconds(0); + dateTime.setMilliseconds(0); + } + } return dateTime; }; exports.default = Axis; -},{"../helpers/utils":39,"./canvasjs":27,"./text_block":34}],27:[function(require,module,exports){ +},{"../constants/culture":22,"../helpers/utils":39,"./canvasjs":27,"./text_block":34}],27:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -7558,400 +7581,3066 @@ CanvasJSObject.prototype.dispatchEvent = function (eventName, eventParameter, co exports.default = CanvasJSObject; },{"../constants/options":23,"../constants/themes":24}],28:[function(require,module,exports){ -'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _canvasjs=require('./canvasjs');var _canvasjs2=_interopRequireDefault(_canvasjs);var _animator=require('./animator');var _animator2=_interopRequireDefault(_animator);var _data_series=require('./data_series');var _data_series2=_interopRequireDefault(_data_series);var _text_block=require('./text_block');var _text_block2=_interopRequireDefault(_text_block);var _render=require('../helpers/render');var _render2=_interopRequireDefault(_render);var _layout_manager=require('./layout_manager');var _layout_manager2=_interopRequireDefault(_layout_manager);var _event_manager=require('./event_manager');var _event_manager2=_interopRequireDefault(_event_manager);var _tooltip=require('./tooltip');var _tooltip2=_interopRequireDefault(_tooltip);var _culture_info=require('../core/culture_info');var _culture_info2=_interopRequireDefault(_culture_info);var _axis=require('../core/axis');var _axis2=_interopRequireDefault(_axis);var _title=require('../core/title');var _title2=_interopRequireDefault(_title);var _legend=require('../core/legend');var _legend2=_interopRequireDefault(_legend);var _animator3=require('../helpers/animator');var _animator4=_interopRequireDefault(_animator3);var _themes=require('../constants/themes');var _options=require('../constants/options');var _utils=require('../helpers/utils');var _index=require('../charts/index');function _interopRequireDefault(obj){return obj && obj.__esModule?obj:{default:obj};} // import {inherits} from 'util'; -function Chart(containerId,options,publicChartReference){this._publicChartReference = publicChartReference;options = options || {};Chart.base.constructor.call(this,"Chart",options,options.theme?options.theme:"theme1");var _this=this;this._containerId = containerId;this._objectsInitialized = false;this.ctx = null;this.overlaidCanvasCtx = null;this._indexLabels = [];this._panTimerId = 0;this._lastTouchEventType = "";this._lastTouchData = null;this.isAnimating = false;this.renderCount = 0;this.animatedRender = false;this.disableToolTip = false;this.panEnabled = false;this._defaultCursor = "default";this.plotArea = {canvas:null,ctx:null,x1:0,y1:0,x2:0,y2:0,width:0,height:0};this._dataInRenderedOrder = [];this._container = typeof this._containerId === "string"?document.getElementById(this._containerId):this._containerId;if(!this._container){if(window.console)window.console.log("CanvasJS Error: Chart Container with id \"" + this._containerId + "\" was not found");return;}this._container.innerHTML = "";var width=0;var height=0;if(this._options.width)width = this.width;else width = this._container.clientWidth > 0?this._container.clientWidth:this.width;if(this._options.height)height = this.height;else height = this._container.clientHeight > 0?this._container.clientHeight:this.height;this.width = width;this.height = height;this.x1 = this.y1 = 0;this.x2 = this.width;this.y2 = this.height;this._selectedColorSet = typeof _themes.colorSets[this.colorSet] !== "undefined"?_themes.colorSets[this.colorSet]:_themes.colorSets["colorSet1"];this._canvasJSContainer = document.createElement("div");this._canvasJSContainer.setAttribute("class","canvasjs-chart-container");this._canvasJSContainer.style.position = "relative";this._canvasJSContainer.style.textAlign = "left";this._canvasJSContainer.style.cursor = "auto";if(!_utils.isCanvasSupported){this._canvasJSContainer.style.height = "0px"; //In IE6 toolTip doesn't show at proper position if not set. -}this._container.appendChild(this._canvasJSContainer);this.canvas = (0,_utils.createCanvas)(width,height);this.canvas.style.position = "absolute";if(this.canvas.getContext){ //try { -// this.canvas.style.background = this.backgroundColor; -//} catch (e) { } -this._canvasJSContainer.appendChild(this.canvas);this.ctx = this.canvas.getContext("2d");this.ctx.textBaseline = "top";(0,_utils.extendCtx)(this.ctx);}else return; //this.canvas.style.cursor = "pointer"; -if(!_utils.isCanvasSupported){this.plotArea.canvas = (0,_utils.createCanvas)(width,height);this.plotArea.canvas.style.position = "absolute";this.plotArea.canvas.setAttribute("class","plotAreaCanvas");this._canvasJSContainer.appendChild(this.plotArea.canvas);this.plotArea.ctx = this.plotArea.canvas.getContext("2d");}else {this.plotArea.ctx = this.ctx;}this.overlaidCanvas = (0,_utils.createCanvas)(width,height);this.overlaidCanvas.style.position = "absolute";this._canvasJSContainer.appendChild(this.overlaidCanvas);this.overlaidCanvasCtx = this.overlaidCanvas.getContext("2d");this.overlaidCanvasCtx.textBaseline = "top";this._eventManager = new _event_manager2.default(this);(0,_utils.addEvent)(window,"resize",function(){ //this._container.addEventListener("DOMSubtreeModified", function () { -if(_this._updateSize())_this.render();});this._toolBar = document.createElement("div");this._toolBar.setAttribute("class","canvasjs-chart-toolbar");this._toolBar.style.cssText = "position: absolute; right: 1px; top: 1px;";this._canvasJSContainer.appendChild(this._toolBar);this.bounds = {x1:0,y1:0,x2:this.width,y2:this.height};(0,_utils.addEvent)(this.overlaidCanvas,'click',function(e){_this._mouseEventHandler(e);});(0,_utils.addEvent)(this.overlaidCanvas,'mousemove',function(e){_this._mouseEventHandler(e);});(0,_utils.addEvent)(this.overlaidCanvas,'mouseup',function(e){_this._mouseEventHandler(e);});(0,_utils.addEvent)(this.overlaidCanvas,'mousedown',function(e){_this._mouseEventHandler(e);(0,_utils.hide)(_this._dropdownMenu);});(0,_utils.addEvent)(this.overlaidCanvas,'mouseout',function(e){_this._mouseEventHandler(e);});(0,_utils.addEvent)(this.overlaidCanvas,window.navigator.msPointerEnabled?"MSPointerDown":"touchstart",function(e){_this._touchEventHandler(e);});(0,_utils.addEvent)(this.overlaidCanvas,window.navigator.msPointerEnabled?"MSPointerMove":'touchmove',function(e){_this._touchEventHandler(e);});(0,_utils.addEvent)(this.overlaidCanvas,window.navigator.msPointerEnabled?"MSPointerUp":'touchend',function(e){_this._touchEventHandler(e);});(0,_utils.addEvent)(this.overlaidCanvas,window.navigator.msPointerEnabled?"MSPointerCancel":'touchcancel',function(e){_this._touchEventHandler(e);});if(!this._creditLink){this._creditLink = document.createElement("a");this._creditLink.setAttribute("class","canvasjs-chart-credit");this._creditLink.setAttribute("style","outline:none;margin:0px;position:absolute;right:3px;top:" + (this.height - 14) + "px;color:dimgrey;text-decoration:none;font-size:10px;font-family:Lucida Grande, Lucida Sans Unicode, Arial, sans-serif");this._creditLink.setAttribute("tabIndex",-1);this._creditLink.setAttribute("target","_blank");}this._toolTip = new _tooltip2.default(this,this._options.toolTip,this.theme);this.data = null;this.axisX = null;this.axisY = null;this.axisY2 = null;this.sessionVariables = {axisX:{},axisY:{},axisY2:{}};}(0,_utils.extend)(Chart,_canvasjs2.default); //Update Chart Properties -Chart.prototype._updateOptions = function(){var _this=this;this.updateOption("width");this.updateOption("height");this.updateOption("dataPointMaxWidth");this.updateOption("interactivityEnabled");this.updateOption("theme");if(this.updateOption("colorSet"))this._selectedColorSet = typeof _themes.colorSets[this.colorSet] !== "undefined"?_themes.colorSets[this.colorSet]:_themes.colorSets["colorSet1"];this.updateOption("backgroundColor");if(!this.backgroundColor)this.backgroundColor = "rgba(0,0,0,0)";this.updateOption("culture");this._cultureInfo = new _culture_info2.default(this._options.culture);this.updateOption("animationEnabled");this.animationEnabled = this.animationEnabled && _utils.isCanvasSupported;this.updateOption("animationDuration");this.updateOption("rangeChanging");this.updateOption("rangeChanged"); //Need to check this._options.zoomEnabled because this.zoomEnabled is used internally to keep track of state - and hence changes. -if(this._options.zoomEnabled){if(!this._zoomButton){(0,_utils.hide)(this._zoomButton = document.createElement("button"));setButtonState(this,this._zoomButton,"pan");this._toolBar.appendChild(this._zoomButton);(0,_utils.addEvent)(this._zoomButton,"click",function(){if(_this.zoomEnabled){_this.zoomEnabled = false;_this.panEnabled = true;setButtonState(_this,_this._zoomButton,"zoom");}else {_this.zoomEnabled = true;_this.panEnabled = false;setButtonState(_this,_this._zoomButton,"pan");}_this.render();});}if(!this._resetButton){(0,_utils.hide)(this._resetButton = document.createElement("button"));setButtonState(this,this._resetButton,"reset");this._toolBar.appendChild(this._resetButton);(0,_utils.addEvent)(this._resetButton,"click",function(){_this._toolTip.hide();if(_this.zoomEnabled || _this.panEnabled){_this.zoomEnabled = true;_this.panEnabled = false;setButtonState(_this,_this._zoomButton,"pan");_this._defaultCursor = "default";_this.overlaidCanvas.style.cursor = _this._defaultCursor;}else {_this.zoomEnabled = false;_this.panEnabled = false;} //Reset axisX -if(_this.sessionVariables.axisX){_this.sessionVariables.axisX.newViewportMinimum = null;_this.sessionVariables.axisX.newViewportMaximum = null;} //Reset axisY -if(_this.sessionVariables.axisY){_this.sessionVariables.axisY.newViewportMinimum = null;_this.sessionVariables.axisY.newViewportMaximum = null;} //Reset axisY2 -if(_this.sessionVariables.axisY2){_this.sessionVariables.axisY2.newViewportMinimum = null;_this.sessionVariables.axisY2.newViewportMaximum = null;}_this.resetOverlayedCanvas();(0,_utils.hide)(_this._zoomButton,_this._resetButton);_this._dispatchRangeEvent("rangeChanging","reset");_this.render();_this._dispatchRangeEvent("rangeChanged","reset");});this.overlaidCanvas.style.cursor = _this._defaultCursor;}if(!this.zoomEnabled && !this.panEnabled){if(!this._zoomButton){this.zoomEnabled = true;this.panEnabled = false;}else {if(_this._zoomButton.getAttribute("state") === _this._cultureInfo.zoomText){this.panEnabled = true;this.zoomEnabled = false;}else {this.zoomEnabled = true;this.panEnabled = false;}(0,_utils.show)(_this._zoomButton,_this._resetButton);}}}else {this.zoomEnabled = false;this.panEnabled = false;}if(this._menuButton){if(this.exportEnabled)(0,_utils.show)(this._menuButton);else (0,_utils.hide)(this._menuButton);}else if(this.exportEnabled && _utils.isCanvasSupported){this._menuButton = document.createElement("button");setButtonState(this,this._menuButton,"menu");this._toolBar.appendChild(this._menuButton);(0,_utils.addEvent)(this._menuButton,"click",function(){if(_this._dropdownMenu.style.display === "none"){if(_this._dropDownCloseTime && new Date().getTime() - _this._dropDownCloseTime.getTime() <= 500)return;_this._dropdownMenu.style.display = "block";_this._menuButton.blur();_this._dropdownMenu.focus();}},true);}if(!this._dropdownMenu && this.exportEnabled && _utils.isCanvasSupported){this._dropdownMenu = document.createElement("div");this._dropdownMenu.setAttribute("tabindex",-1);this._dropdownMenu.style.cssText = "position: absolute; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer;right: 1px;top: 25px;min-width: 120px;outline: 0;border: 1px solid silver;font-size: 14px;font-family: Calibri, Verdana, sans-serif;padding: 5px 0px 5px 0px;text-align: left;background-color: #fff;line-height: 20px;box-shadow: 2px 2px 10px #888888;";_this._dropdownMenu.style.display = "none";this._toolBar.appendChild(this._dropdownMenu);(0,_utils.addEvent)(this._dropdownMenu,"blur",function(){(0,_utils.hide)(_this._dropdownMenu);_this._dropDownCloseTime = new Date();},true);var exportOption=document.createElement("div");exportOption.style.cssText = "padding: 2px 15px 2px 10px";exportOption.innerHTML = this._cultureInfo.saveJPGText;this._dropdownMenu.appendChild(exportOption);(0,_utils.addEvent)(exportOption,"mouseover",function(){this.style.backgroundColor = "#EEEEEE";},true);(0,_utils.addEvent)(exportOption,"mouseout",function(){this.style.backgroundColor = "transparent";},true);(0,_utils.addEvent)(exportOption,"click",function(){exportCanvas(_this.canvas,"jpg",_this.exportFileName);(0,_utils.hide)(_this._dropdownMenu);},true);var exportOption=document.createElement("div");exportOption.style.cssText = "padding: 2px 15px 2px 10px";exportOption.innerHTML = this._cultureInfo.savePNGText;this._dropdownMenu.appendChild(exportOption);(0,_utils.addEvent)(exportOption,"mouseover",function(){this.style.backgroundColor = "#EEEEEE";},true);(0,_utils.addEvent)(exportOption,"mouseout",function(){this.style.backgroundColor = "transparent";},true);(0,_utils.addEvent)(exportOption,"click",function(){exportCanvas(_this.canvas,"png",_this.exportFileName);(0,_utils.hide)(_this._dropdownMenu);},true);}if(this._toolBar.style.display !== "none" && this._zoomButton){this.panEnabled?setButtonState(_this,_this._zoomButton,"zoom"):setButtonState(_this,_this._zoomButton,"pan");if(_this._resetButton.getAttribute("state") !== _this._cultureInfo.resetText)setButtonState(_this,_this._resetButton,"reset");}if(typeof _options.defaultOptions.Chart.creditHref === "undefined"){this.creditHref = "http://canvasjs.com/";this.creditText = "CanvasJS.com";}else {var creditTextChanged=this.updateOption("creditText");var creditHrefChanged=this.updateOption("creditHref");}if(this.renderCount === 0 || creditTextChanged || creditHrefChanged){this._creditLink.setAttribute("href",this.creditHref);this._creditLink.innerHTML = this.creditText;}if(this.creditHref && this.creditText){if(!this._creditLink.parentElement)this._canvasJSContainer.appendChild(this._creditLink);}else if(this._creditLink.parentElement)this._canvasJSContainer.removeChild(this._creditLink);if(this._options.toolTip && this._toolTip._options !== this._options.toolTip)this._toolTip._options = this._options.toolTip;for(var prop in this._toolTip._options) {if(this._toolTip._options.hasOwnProperty(prop)){this._toolTip.updateOption(prop);}}};Chart.prototype._updateSize = function(){var width=0;var height=0;if(this._options.width)width = this.width;else this.width = width = this._container.clientWidth > 0?this._container.clientWidth:this.width;if(this._options.height)height = this.height;else this.height = height = this._container.clientHeight > 0?this._container.clientHeight:this.height;if(this.canvas.width !== width * _utils.devicePixelBackingStoreRatio || this.canvas.height !== height * _utils.devicePixelBackingStoreRatio){(0,_utils.setCanvasSize)(this.canvas,width,height);(0,_utils.setCanvasSize)(this.overlaidCanvas,width,height);(0,_utils.setCanvasSize)(this._eventManager.ghostCanvas,width,height);return true;}return false;}; // initialize chart objects -Chart.prototype._initialize = function(){ /// -///Initializes Chart objects/state. Creates DataSeries class instance for each DataSeries provided by ther user. Sets the Axis Type based on the user data -/// -//this.width = this.width; -if(!this._animator)this._animator = new _animator2.default(this);else {this._animator.cancelAllAnimations();}this.removeAllEventListeners();this.disableToolTip = false;this._axes = [];this.pieDoughnutClickHandler = null; //this._touchCurrentCoordinates = null; -if(this.animationRequestId)this.cancelRequestAnimFrame.call(window,this.animationRequestId);this._updateOptions();this.animatedRender = _utils.isCanvasSupported && this.animationEnabled && this.renderCount === 0;this._updateSize(); //this._selectedColorSet = colorSets["colorSet2"]; -//this.ctx.clearRect(0, 0, this.width, this.height); -this.clearCanvas();this.ctx.beginPath();this.axisX = null;this.axisY = null;this.axisY2 = null;this._indexLabels = [];this._dataInRenderedOrder = [];this._events = [];if(this._eventManager)this._eventManager.reset();this.plotInfo = {axisPlacement:null,axisXValueType:null,plotTypes:[] //array of plotType: {type:"", axisYType: "primary", dataSeriesIndexes:[]} -};this.layoutManager = new _layout_manager2.default(0,0,this.width,this.height,2);if(this.plotArea.layoutManager)this.plotArea.layoutManager.reset();this.data = [];var dataSeriesIndex=0;for(var series=0;series < this._options.data.length;series++) { //for (series in this._options.data) { -dataSeriesIndex++;if(!(!this._options.data[series].type || Chart._supportedChartTypes.indexOf(this._options.data[series].type) >= 0))continue;var dataSeries=new _data_series2.default(this,this._options.data[series],this.theme,dataSeriesIndex - 1,++this._eventManager.lastObjectId);if(dataSeries.name === null)dataSeries.name = "DataSeries " + dataSeriesIndex;if(dataSeries.color === null){if(this._options.data.length > 1){dataSeries._colorSet = [this._selectedColorSet[dataSeries.index % this._selectedColorSet.length]];dataSeries.color = this._selectedColorSet[dataSeries.index % this._selectedColorSet.length];}else {if(dataSeries.type === "line" || dataSeries.type === "stepLine" || dataSeries.type === "spline" || dataSeries.type === "area" || dataSeries.type === "stepArea" || dataSeries.type === "splineArea" || dataSeries.type === "stackedArea" || dataSeries.type === "stackedArea100" || dataSeries.type === "rangeArea" || dataSeries.type === "rangeSplineArea" || dataSeries.type === "candlestick" || dataSeries.type === "ohlc"){dataSeries._colorSet = [this._selectedColorSet[0]];}else dataSeries._colorSet = this._selectedColorSet;}}else {dataSeries._colorSet = [dataSeries.color];}if(dataSeries.markerSize === null){if((dataSeries.type === "line" || dataSeries.type === "stepLine" || dataSeries.type === "spline") && dataSeries.dataPoints && dataSeries.dataPoints.length < this.width / 16 || dataSeries.type === "scatter"){ //if (dataSeries.type === "line") { -dataSeries.markerSize = 8;}}if((dataSeries.type === "bubble" || dataSeries.type === "scatter") && dataSeries.dataPoints){dataSeries.dataPoints.sort(_utils.compareDataPointX);} //if (dataSeries.markerBorderThickness === null && dataSeries.type === "scatter") { -// dataSeries.markerBorderThickness = 2; -//} -//if (dataSeries.markerType === null) { -// if (dataSeries.type === "line" & dataSeries.dataPoints.length < 500) { -// dataSeries.markerType = "circle"; -// } -//} -this.data.push(dataSeries);var seriesAxisPlacement=dataSeries.axisPlacement; //if (isDebugMode && window.console) -// window.console.log(dataSeries.type); -var errorMessage;if(seriesAxisPlacement === "normal"){if(this.plotInfo.axisPlacement === "xySwapped"){errorMessage = "You cannot combine \"" + dataSeries.type + "\" with bar chart";}else if(this.plotInfo.axisPlacement === "none"){errorMessage = "You cannot combine \"" + dataSeries.type + "\" with pie chart";}else if(this.plotInfo.axisPlacement === null)this.plotInfo.axisPlacement = "normal";}else if(seriesAxisPlacement === "xySwapped"){if(this.plotInfo.axisPlacement === "normal"){errorMessage = "You cannot combine \"" + dataSeries.type + "\" with line, area, column or pie chart";}else if(this.plotInfo.axisPlacement === "none"){errorMessage = "You cannot combine \"" + dataSeries.type + "\" with pie chart";}else if(this.plotInfo.axisPlacement === null)this.plotInfo.axisPlacement = "xySwapped";}else if(seriesAxisPlacement == "none"){if(this.plotInfo.axisPlacement === "normal"){errorMessage = "You cannot combine \"" + dataSeries.type + "\" with line, area, column or bar chart";}else if(this.plotInfo.axisPlacement === "xySwapped"){errorMessage = "You cannot combine \"" + dataSeries.type + "\" with bar chart";}else if(this.plotInfo.axisPlacement === null)this.plotInfo.axisPlacement = "none";}if(errorMessage && window.console){window.console.log(errorMessage);return;}} //if (isDebugMode && window.console) { -// window.console.log("xMin: " + this.plotInfo.viewPortXMin + "; xMax: " + this.plotInfo.viewPortXMax + "; yMin: " + this.plotInfo.yMin + "; yMax: " + this.plotInfo.yMax); -//} -this._objectsInitialized = true;}; //indexOf is not supported in IE8- -Chart._supportedChartTypes = (0,_utils.addArrayIndexOf)(["line","stepLine","spline","column","area","stepArea","splineArea","bar","bubble","scatter","stackedColumn","stackedColumn100","stackedBar","stackedBar100","stackedArea","stackedArea100","candlestick","ohlc","rangeColumn","rangeBar","rangeArea","rangeSplineArea","pie","doughnut","funnel"]);Chart.prototype.render = function(options){if(options)this._options = options;this._initialize();var plotAreaElements=[]; //Elements to be rendered inside the plotArea -//Create Primary and Secondary axis and assign them to the series -for(var i=0;i < this.data.length;i++) {if(this.plotInfo.axisPlacement === "normal" || this.plotInfo.axisPlacement === "xySwapped"){if(!this.data[i].axisYType || this.data[i].axisYType === "primary"){if(!this.axisY){if(this.plotInfo.axisPlacement === "normal"){this._axes.push(this.axisY = new _axis2.default(this,this._options.axisY,"axisY","left"));}else if(this.plotInfo.axisPlacement === "xySwapped"){this._axes.push(this.axisY = new _axis2.default(this,this._options.axisY,"axisY","bottom"));}}this.data[i].axisY = this.axisY;}else if(this.data[i].axisYType === "secondary"){if(!this.axisY2){if(this.plotInfo.axisPlacement === "normal"){this._axes.push(this.axisY2 = new _axis2.default(this,this._options.axisY2,"axisY","right"));}else if(this.plotInfo.axisPlacement === "xySwapped"){this._axes.push(this.axisY2 = new _axis2.default(this,this._options.axisY2,"axisY","top"));}}this.data[i].axisY = this.axisY2;}if(!this.axisX){if(this.plotInfo.axisPlacement === "normal"){this._axes.push(this.axisX = new _axis2.default(this,this._options.axisX,"axisX","bottom"));}else if(this.plotInfo.axisPlacement === "xySwapped"){this._axes.push(this.axisX = new _axis2.default(this,this._options.axisX,"axisX","left"));}}this.data[i].axisX = this.axisX;}} //If Both Primary and Secondary axis are present, disable gridlines for one of them unless the user has set value for both -if(this.axisY && this.axisY2){if(this.axisY.gridThickness > 0 && typeof this.axisY2._options.gridThickness === "undefined")this.axisY2.gridThickness = 0;else if(this.axisY2.gridThickness > 0 && typeof this.axisY._options.gridThickness === "undefined")this.axisY.gridThickness = 0;} //Show toolBar when viewportMinimum/viewportMaximum are set -var showToolBar=false;if(this._axes.length > 0 && (this.zoomEnabled || this.panEnabled)){for(var i=0;i < this._axes.length;i++) {if(this._axes[i].viewportMinimum !== null || this._axes[i].viewportMaximum !== null){showToolBar = true;break;}}}if(showToolBar){(0,_utils.show)(this._zoomButton,this._resetButton);}else {(0,_utils.hide)(this._zoomButton,this._resetButton);}this._processData(); // Categorises the dataSeries and calculates min, max and other values -if(this._options.title){this._title = new _title2.default(this,this._options.title);if(!this._title.dockInsidePlotArea)this._title.render();else plotAreaElements.push(this._title);}if(this._options.subtitles){for(var i=0;i < this._options.subtitles.length;i++) {this.subtitles = [];var subtitle=new Subtitle(this,this._options.subtitles[i]);this.subtitles.push(subtitle);if(!subtitle.dockInsidePlotArea)subtitle.render();else plotAreaElements.push(subtitle);}}this.legend = new _legend2.default(this,this._options.legend,this.theme);for(var i=0;i < this.data.length;i++) {if(this.data[i].showInLegend || this.data[i].type === "pie" || this.data[i].type === "doughnut"){this.legend.dataSeries.push(this.data[i]);}}if(!this.legend.dockInsidePlotArea)this.legend.render();else plotAreaElements.push(this.legend); //TBI: Revisit and check if the functionality is enough. -if(this.plotInfo.axisPlacement === "normal" || this.plotInfo.axisPlacement === "xySwapped"){ //var freeSpace = this.layoutManager.getFreeSpace(); -_axis2.default.setLayoutAndRender(this.axisX,this.axisY,this.axisY2,this.plotInfo.axisPlacement,this.layoutManager.getFreeSpace());}else if(this.plotInfo.axisPlacement === "none"){ //In case of charts with axis this method is called inside setLayoutAndRender -this.preparePlotArea();}else {return;}var index=0;for(index in plotAreaElements) {if(plotAreaElements.hasOwnProperty(index))plotAreaElements[index].render();}var animations=[];if(this.animatedRender){var initialState=(0,_utils.createCanvas)(this.width,this.height);var initialStateCtx=initialState.getContext("2d");initialStateCtx.drawImage(this.canvas,0,0,this.width,this.height);}for(var i=0;i < this.plotInfo.plotTypes.length;i++) {var plotType=this.plotInfo.plotTypes[i];for(var j=0;j < plotType.plotUnits.length;j++) {var plotUnit=plotType.plotUnits[j];var animationInfo=null;plotUnit.targetCanvas = null; //In case chart updates before the animation is complete, previous canvases need to be removed -if(this.animatedRender){plotUnit.targetCanvas = (0,_utils.createCanvas)(this.width,this.height);plotUnit.targetCanvasCtx = plotUnit.targetCanvas.getContext("2d");}if(plotUnit.type === "line")animationInfo = this.renderLine(plotUnit);else if(plotUnit.type === "stepLine")animationInfo = this.renderStepLine(plotUnit);else if(plotUnit.type === "spline")animationInfo = this.renderSpline(plotUnit);else if(plotUnit.type === "column")animationInfo = this.renderColumn(plotUnit);else if(plotUnit.type === "bar")animationInfo = this.renderBar(plotUnit);else if(plotUnit.type === "area")animationInfo = this.renderArea(plotUnit);else if(plotUnit.type === "stepArea")animationInfo = this.renderStepArea(plotUnit);else if(plotUnit.type === "splineArea")animationInfo = this.renderSplineArea(plotUnit);else if(plotUnit.type === "stackedColumn")animationInfo = this.renderStackedColumn(plotUnit);else if(plotUnit.type === "stackedColumn100")animationInfo = this.renderStackedColumn100(plotUnit);else if(plotUnit.type === "stackedBar")animationInfo = this.renderStackedBar(plotUnit);else if(plotUnit.type === "stackedBar100")animationInfo = this.renderStackedBar100(plotUnit);else if(plotUnit.type === "stackedArea")animationInfo = this.renderStackedArea(plotUnit);else if(plotUnit.type === "stackedArea100")animationInfo = this.renderStackedArea100(plotUnit);else if(plotUnit.type === "bubble")animationInfo = animationInfo = this.renderBubble(plotUnit);else if(plotUnit.type === "scatter")animationInfo = this.renderScatter(plotUnit);else if(plotUnit.type === "pie")this.renderPie(plotUnit);else if(plotUnit.type === "doughnut")this.renderPie(plotUnit);else if(plotUnit.type === "candlestick")animationInfo = this.renderCandlestick(plotUnit);else if(plotUnit.type === "ohlc")animationInfo = this.renderCandlestick(plotUnit);else if(plotUnit.type === "rangeColumn")animationInfo = this.renderRangeColumn(plotUnit);else if(plotUnit.type === "rangeBar")animationInfo = this.renderRangeBar(plotUnit);else if(plotUnit.type === "rangeArea")animationInfo = this.renderRangeArea(plotUnit);else if(plotUnit.type === "rangeSplineArea")animationInfo = this.renderRangeSplineArea(plotUnit);for(var k=0;k < plotUnit.dataSeriesIndexes.length;k++) {this._dataInRenderedOrder.push(this.data[plotUnit.dataSeriesIndexes[k]]);}if(this.animatedRender && animationInfo)animations.push(animationInfo);}}if(this.animatedRender && this._indexLabels.length > 0){var indexLabelCanvas=(0,_utils.createCanvas)(this.width,this.height);var indexLabelCanvasCtx=indexLabelCanvas.getContext("2d");animations.push(this.renderIndexLabels(indexLabelCanvasCtx));}var _this=this;if(animations.length > 0){ //var animationCount = 0; -_this.disableToolTip = true;_this._animator.animate(200,_this.animationDuration,function(fractionComplete){ //console.log(fractionComplete); -//animationCount++; -_this.ctx.clearRect(0,0,_this.width,_this.height); // _this.ctx.drawImage(initialState, 0, 0, _this.width * devicePixelBackingStoreRatio, _this.height * devicePixelBackingStoreRatio, 0, 0, _this.width, _this.height); -_this.ctx.drawImage(initialState,0,0,Math.floor(_this.width * _utils.devicePixelBackingStoreRatio),Math.floor(_this.height * _utils.devicePixelBackingStoreRatio),0,0,_this.width,_this.height);for(var l=0;l < animations.length;l++) {animationInfo = animations[l];if(fractionComplete < 1 && typeof animationInfo.startTimePercent !== "undefined"){if(fractionComplete >= animationInfo.startTimePercent){ //animationInfo.animationCallback(AnimationHelper.easing.linear(fractionComplete - animationInfo.startTimePercent, 0, 1, 1 - animationInfo.startTimePercent), animationInfo); -animationInfo.animationCallback(animationInfo.easingFunction(fractionComplete - animationInfo.startTimePercent,0,1,1 - animationInfo.startTimePercent),animationInfo);}}else {animationInfo.animationCallback(animationInfo.easingFunction(fractionComplete,0,1,1),animationInfo);}}_this.dispatchEvent("dataAnimationIterationEnd",{chart:_this});},function(){animations = [];var count=0; //Delete all render target canvases used for animation. -for(var i=0;i < _this.plotInfo.plotTypes.length;i++) {var plotType=_this.plotInfo.plotTypes[i];for(var j=0;j < plotType.plotUnits.length;j++) {var plotUnit=plotType.plotUnits[j];plotUnit.targetCanvas = null;}}initialState = null;_this.disableToolTip = false; //console.log("*********** Animation Complete - " + animationCount + " ***********"); -});}else {if(_this._indexLabels.length > 0)_this.renderIndexLabels();_this.dispatchEvent("dataAnimationIterationEnd",{chart:_this});}this.attachPlotAreaEventHandlers();if(!this.zoomEnabled && !this.panEnabled && this._zoomButton && this._zoomButton.style.display !== "none"){(0,_utils.hide)(this._zoomButton,this._resetButton);}this._toolTip._updateToolTip();this.renderCount++; //if (window.console) { -// window.console.log(new Date().getTime() - dt); -//} -if(_options.isDebugMode){var _this=this;setTimeout(function(){var ghostCanvasCopy=document.getElementById("ghostCanvasCopy");if(ghostCanvasCopy){ //console.log(ghostCanvasCopy.clientWidth); -(0,_utils.setCanvasSize)(ghostCanvasCopy,_this.width,_this.height);var ghostCanvasCopyCtx=ghostCanvasCopy.getContext("2d"); //ghostCanvasCopyCtx.scale(1, 1); -//var imageData = this._eventManager.ghostCtx.getImageData(0, 0, this._container.clientWidth, this._container.clientHeight); -//this._eventManager.ghostCtx.drawImage(this._eventManager.ghostCanvas, 0, 0); -//this.ctx.drawImage(this._eventManager.ghostCanvas, 0, 0); -ghostCanvasCopyCtx.drawImage(_this._eventManager.ghostCanvas,0,0); //_this._canvasJSContainer.appendChild(_this._eventManager.ghostCanvas); -//_this.overlaidCanvasCtx.drawImage(_this._eventManager.ghostCanvas, 0, 0); -}},2000);}};Chart.prototype.attachPlotAreaEventHandlers = function(){ //this._toolBar.style.display = "inline"; -this.attachEvent({context:this,chart:this,mousedown:this._plotAreaMouseDown,mouseup:this._plotAreaMouseUp,mousemove:this._plotAreaMouseMove,cursor:this.zoomEnabled?"col-resize":"move",cursor:this.panEnabled?"move":"default",capture:true,bounds:this.plotArea});};Chart.prototype.categoriseDataSeries = function(){var dataSeries="";for(var i=0;i < this.data.length;i++) {dataSeries = this.data[i];if(!dataSeries.dataPoints || dataSeries.dataPoints.length === 0 || !dataSeries.visible)continue;if(Chart._supportedChartTypes.indexOf(dataSeries.type) >= 0){var plotType=null;var plotTypeExists=false;var plotUnit=null;var plotUnitExists=false;for(var j=0;j < this.plotInfo.plotTypes.length;j++) {if(this.plotInfo.plotTypes[j].type === dataSeries.type){plotTypeExists = true;var plotType=this.plotInfo.plotTypes[j];break;}}if(!plotTypeExists){plotType = {type:dataSeries.type,totalDataSeries:0,plotUnits:[]};this.plotInfo.plotTypes.push(plotType);}for(var j=0;j < plotType.plotUnits.length;j++) {if(plotType.plotUnits[j].axisYType === dataSeries.axisYType){plotUnitExists = true;var plotUnit=plotType.plotUnits[j];break;}}if(!plotUnitExists){plotUnit = {type:dataSeries.type,previousDataSeriesCount:0, //to be set next -index:plotType.plotUnits.length,plotType:plotType,axisYType:dataSeries.axisYType,axisY:dataSeries.axisYType === "primary"?this.axisY:this.axisY2,axisX:this.axisX,dataSeriesIndexes:[], //index of dataSeries -yTotals:[]};plotType.plotUnits.push(plotUnit);}plotType.totalDataSeries++;plotUnit.dataSeriesIndexes.push(i);dataSeries.plotUnit = plotUnit;}}for(var i=0;i < this.plotInfo.plotTypes.length;i++) {var plotType=this.plotInfo.plotTypes[i];var previousDataSeriesCount=0;for(var j=0;j < plotType.plotUnits.length;j++) {plotType.plotUnits[j].previousDataSeriesCount = previousDataSeriesCount;previousDataSeriesCount += plotType.plotUnits[j].dataSeriesIndexes.length;}}};Chart.prototype.assignIdToDataPoints = function(){for(var i=0;i < this.data.length;i++) {var dataSeries=this.data[i];if(!dataSeries.dataPoints)continue;var length=dataSeries.dataPoints.length;for(var j=0;j < length;j++) {dataSeries.dataPointIds[j] = ++this._eventManager.lastObjectId;}}};Chart.prototype._processData = function(){this.assignIdToDataPoints();this.categoriseDataSeries();for(var i=0;i < this.plotInfo.plotTypes.length;i++) {var plotType=this.plotInfo.plotTypes[i];for(var j=0;j < plotType.plotUnits.length;j++) {var plotUnit=plotType.plotUnits[j];if(plotUnit.type === "line" || plotUnit.type === "stepLine" || plotUnit.type === "spline" || plotUnit.type === "column" || plotUnit.type === "area" || plotUnit.type === "stepArea" || plotUnit.type === "splineArea" || plotUnit.type === "bar" || plotUnit.type === "bubble" || plotUnit.type === "scatter")this._processMultiseriesPlotUnit(plotUnit);else if(plotUnit.type === "stackedColumn" || plotUnit.type === "stackedBar" || plotUnit.type === "stackedArea")this._processStackedPlotUnit(plotUnit);else if(plotUnit.type === "stackedColumn100" || plotUnit.type === "stackedBar100" || plotUnit.type === "stackedArea100")this._processStacked100PlotUnit(plotUnit);else if(plotUnit.type === "candlestick" || plotUnit.type === "ohlc" || plotUnit.type === "rangeColumn" || plotUnit.type === "rangeBar" || plotUnit.type === "rangeArea" || plotUnit.type === "rangeSplineArea")this._processMultiYPlotUnit(plotUnit);}}};Chart.prototype._processMultiseriesPlotUnit = function(plotUnit){if(!plotUnit.dataSeriesIndexes || plotUnit.dataSeriesIndexes.length < 1)return;var axisYDataInfo=plotUnit.axisY.dataInfo;var axisXDataInfo=plotUnit.axisX.dataInfo;var dataPointX,dataPointY;var isDateTime=false;for(var j=0;j < plotUnit.dataSeriesIndexes.length;j++) {var dataSeries=this.data[plotUnit.dataSeriesIndexes[j]];var i=0;var isFirstDPInViewPort=false;var isLastDPInViewPort=false;if(dataSeries.axisPlacement === "normal" || dataSeries.axisPlacement === "xySwapped"){var plotAreaXMin=this.sessionVariables.axisX.newViewportMinimum?this.sessionVariables.axisX.newViewportMinimum:this._options.axisX && this._options.axisX.viewportMinimum?this._options.axisX.viewportMinimum:this._options.axisX && this._options.axisX.minimum?this._options.axisX.minimum:-Infinity;var plotAreaXMax=this.sessionVariables.axisX.newViewportMaximum?this.sessionVariables.axisX.newViewportMaximum:this._options.axisX && this._options.axisX.viewportMaximum?this._options.axisX.viewportMaximum:this._options.axisX && this._options.axisX.maximum?this._options.axisX.maximum:Infinity;}if(dataSeries.dataPoints[i].x && dataSeries.dataPoints[i].x.getTime || dataSeries.xValueType === "dateTime"){isDateTime = true;}for(i = 0;i < dataSeries.dataPoints.length;i++) {if(typeof dataSeries.dataPoints[i].x === "undefined"){dataSeries.dataPoints[i].x = i;}if(dataSeries.dataPoints[i].x.getTime){isDateTime = true;dataPointX = dataSeries.dataPoints[i].x.getTime(); //dataPointX is used so that getTime is called only once in case of dateTime values -}else dataPointX = dataSeries.dataPoints[i].x;dataPointY = dataSeries.dataPoints[i].y;if(dataPointX < axisXDataInfo.min)axisXDataInfo.min = dataPointX;if(dataPointX > axisXDataInfo.max)axisXDataInfo.max = dataPointX;if(dataPointY < axisYDataInfo.min)axisYDataInfo.min = dataPointY;if(dataPointY > axisYDataInfo.max)axisYDataInfo.max = dataPointY;if(i > 0){var xDiff=dataPointX - dataSeries.dataPoints[i - 1].x;xDiff < 0 && (xDiff = xDiff * -1); //If Condition shortcut -if(axisXDataInfo.minDiff > xDiff && xDiff !== 0){axisXDataInfo.minDiff = xDiff;}if(dataPointY !== null && dataSeries.dataPoints[i - 1].y !== null){var yDiff=dataPointY - dataSeries.dataPoints[i - 1].y;yDiff < 0 && (yDiff = yDiff * -1); //If Condition shortcut -if(axisYDataInfo.minDiff > yDiff && yDiff !== 0){axisYDataInfo.minDiff = yDiff;}}} // This section makes sure that partially visible dataPoints are included in the begining -if(dataPointX < plotAreaXMin && !isFirstDPInViewPort){continue;}else if(!isFirstDPInViewPort){isFirstDPInViewPort = true;if(i > 0){i -= 2;continue;}} // This section makes sure that partially visible dataPoints are included at the end -if(dataPointX > plotAreaXMax && !isLastDPInViewPort){isLastDPInViewPort = true;}else if(dataPointX > plotAreaXMax && isLastDPInViewPort){continue;}if(dataSeries.dataPoints[i].label)plotUnit.axisX.labels[dataPointX] = dataSeries.dataPoints[i].label;if(dataPointX < axisXDataInfo.viewPortMin)axisXDataInfo.viewPortMin = dataPointX;if(dataPointX > axisXDataInfo.viewPortMax)axisXDataInfo.viewPortMax = dataPointX;if(dataPointY === null)continue;if(dataPointY < axisYDataInfo.viewPortMin)axisYDataInfo.viewPortMin = dataPointY;if(dataPointY > axisYDataInfo.viewPortMax)axisYDataInfo.viewPortMax = dataPointY;}this.plotInfo.axisXValueType = dataSeries.xValueType = isDateTime?"dateTime":"number";} //this.dataPoints.sort(compareDataPointX); -//this.dataPoints.sort(function (dataPoint1, dataPoint2) { return dataPoint1.x - dataPoint2.x; }); -};Chart.prototype._processStackedPlotUnit = function(plotUnit){if(!plotUnit.dataSeriesIndexes || plotUnit.dataSeriesIndexes.length < 1)return;var axisYDataInfo=plotUnit.axisY.dataInfo;var axisXDataInfo=plotUnit.axisX.dataInfo;var dataPointX,dataPointY;var isDateTime=false;var dataPointYPositiveSums=[];var dataPointYNegativeSums=[];for(var j=0;j < plotUnit.dataSeriesIndexes.length;j++) {var dataSeries=this.data[plotUnit.dataSeriesIndexes[j]];var i=0;var isFirstDPInViewPort=false;var isLastDPInViewPort=false;if(dataSeries.axisPlacement === "normal" || dataSeries.axisPlacement === "xySwapped"){var plotAreaXMin=this.sessionVariables.axisX.newViewportMinimum?this.sessionVariables.axisX.newViewportMinimum:this._options.axisX && this._options.axisX.viewportMinimum?this._options.axisX.viewportMinimum:this._options.axisX && this._options.axisX.minimum?this._options.axisX.minimum:-Infinity;var plotAreaXMax=this.sessionVariables.axisX.newViewportMaximum?this.sessionVariables.axisX.newViewportMaximum:this._options.axisX && this._options.axisX.viewportMaximum?this._options.axisX.viewportMaximum:this._options.axisX && this._options.axisX.maximum?this._options.axisX.maximum:Infinity;}if(dataSeries.dataPoints[i].x && dataSeries.dataPoints[i].x.getTime || dataSeries.xValueType === "dateTime"){isDateTime = true;}for(i = 0;i < dataSeries.dataPoints.length;i++) { // Requird when no x values are provided -if(typeof dataSeries.dataPoints[i].x === "undefined"){dataSeries.dataPoints[i].x = i;}if(dataSeries.dataPoints[i].x.getTime){isDateTime = true;dataPointX = dataSeries.dataPoints[i].x.getTime(); //dataPointX is used so that getTime is called only once in case of dateTime values -}else dataPointX = dataSeries.dataPoints[i].x;dataPointY = dataSeries.dataPoints[i].y;if(dataPointX < axisXDataInfo.min)axisXDataInfo.min = dataPointX;if(dataPointX > axisXDataInfo.max)axisXDataInfo.max = dataPointX;if(i > 0){var xDiff=dataPointX - dataSeries.dataPoints[i - 1].x;xDiff < 0 && (xDiff = xDiff * -1); //If Condition shortcut -if(axisXDataInfo.minDiff > xDiff && xDiff !== 0){axisXDataInfo.minDiff = xDiff;}if(dataPointY !== null && dataSeries.dataPoints[i - 1].y !== null){var yDiff=dataPointY - dataSeries.dataPoints[i - 1].y;yDiff < 0 && (yDiff = yDiff * -1); //If Condition shortcut -if(axisYDataInfo.minDiff > yDiff && yDiff !== 0){axisYDataInfo.minDiff = yDiff;}}} // This section makes sure that partially visible dataPoints are included in the begining -if(dataPointX < plotAreaXMin && !isFirstDPInViewPort){continue;}else if(!isFirstDPInViewPort){isFirstDPInViewPort = true;if(i > 0){i -= 2;continue;}} // This section makes sure that partially visible dataPoints are included at the end -if(dataPointX > plotAreaXMax && !isLastDPInViewPort){isLastDPInViewPort = true;}else if(dataPointX > plotAreaXMax && isLastDPInViewPort){continue;}if(dataSeries.dataPoints[i].label)plotUnit.axisX.labels[dataPointX] = dataSeries.dataPoints[i].label;if(dataPointX < axisXDataInfo.viewPortMin)axisXDataInfo.viewPortMin = dataPointX;if(dataPointX > axisXDataInfo.viewPortMax)axisXDataInfo.viewPortMax = dataPointX;if(dataPointY === null)continue;plotUnit.yTotals[dataPointX] = (!plotUnit.yTotals[dataPointX]?0:plotUnit.yTotals[dataPointX]) + Math.abs(dataPointY);if(dataPointY >= 0){if(dataPointYPositiveSums[dataPointX])dataPointYPositiveSums[dataPointX] += dataPointY;else dataPointYPositiveSums[dataPointX] = dataPointY;}else {if(dataPointYNegativeSums[dataPointX])dataPointYNegativeSums[dataPointX] += dataPointY;else dataPointYNegativeSums[dataPointX] = dataPointY;}}this.plotInfo.axisXValueType = dataSeries.xValueType = isDateTime?"dateTime":"number";}for(i in dataPointYPositiveSums) {if(dataPointYPositiveSums.hasOwnProperty(i)){if(isNaN(i)){continue;}var ySum=dataPointYPositiveSums[i];if(ySum < axisYDataInfo.min)axisYDataInfo.min = ySum;if(ySum > axisYDataInfo.max)axisYDataInfo.max = ySum;if(i < axisXDataInfo.viewPortMin || i > axisXDataInfo.viewPortMax)continue;if(ySum < axisYDataInfo.viewPortMin)axisYDataInfo.viewPortMin = ySum;if(ySum > axisYDataInfo.viewPortMax)axisYDataInfo.viewPortMax = ySum;}}for(i in dataPointYNegativeSums) {if(dataPointYNegativeSums.hasOwnProperty(i)){if(isNaN(i)){continue;}var ySum=dataPointYNegativeSums[i];if(ySum < axisYDataInfo.min)axisYDataInfo.min = ySum;if(ySum > axisYDataInfo.max)axisYDataInfo.max = ySum;if(i < axisXDataInfo.viewPortMin || i > axisXDataInfo.viewPortMax)continue;if(ySum < axisYDataInfo.viewPortMin)axisYDataInfo.viewPortMin = ySum;if(ySum > axisYDataInfo.viewPortMax)axisYDataInfo.viewPortMax = ySum;}} //this.dataPoints.sort(compareDataPointX); -//this.dataPoints.sort(function (dataPoint1, dataPoint2) { return dataPoint1.x - dataPoint2.x; }); -//window.console.log("viewPortYMin: " + plotInfo.viewPortYMin + "; viewPortYMax: " + plotInfo.viewPortYMax); -};Chart.prototype._processStacked100PlotUnit = function(plotUnit){if(!plotUnit.dataSeriesIndexes || plotUnit.dataSeriesIndexes.length < 1)return;var axisYDataInfo=plotUnit.axisY.dataInfo;var axisXDataInfo=plotUnit.axisX.dataInfo;var dataPointX,dataPointY;var isDateTime=false;var containsPositiveY=false;var containsNegativeY=false;var dataPointYSums=[];for(var j=0;j < plotUnit.dataSeriesIndexes.length;j++) {var dataSeries=this.data[plotUnit.dataSeriesIndexes[j]];var i=0;var isFirstDPInViewPort=false;var isLastDPInViewPort=false;if(dataSeries.axisPlacement === "normal" || dataSeries.axisPlacement === "xySwapped"){var plotAreaXMin=this.sessionVariables.axisX.newViewportMinimum?this.sessionVariables.axisX.newViewportMinimum:this._options.axisX && this._options.axisX.viewportMinimum?this._options.axisX.viewportMinimum:this._options.axisX && this._options.axisX.minimum?this._options.axisX.minimum:-Infinity;var plotAreaXMax=this.sessionVariables.axisX.newViewportMaximum?this.sessionVariables.axisX.newViewportMaximum:this._options.axisX && this._options.axisX.viewportMaximum?this._options.axisX.viewportMaximum:this._options.axisX && this._options.axisX.maximum?this._options.axisX.maximum:Infinity;}if(dataSeries.dataPoints[i].x && dataSeries.dataPoints[i].x.getTime || dataSeries.xValueType === "dateTime"){isDateTime = true;}for(i = 0;i < dataSeries.dataPoints.length;i++) { // Requird when no x values are provided -if(typeof dataSeries.dataPoints[i].x === "undefined"){dataSeries.dataPoints[i].x = i;}if(dataSeries.dataPoints[i].x.getTime){isDateTime = true;dataPointX = dataSeries.dataPoints[i].x.getTime(); //dataPointX is used so that getTime is called only once in case of dateTime values -}else dataPointX = dataSeries.dataPoints[i].x;dataPointY = dataSeries.dataPoints[i].y;if(dataPointX < axisXDataInfo.min)axisXDataInfo.min = dataPointX;if(dataPointX > axisXDataInfo.max)axisXDataInfo.max = dataPointX;if(i > 0){var xDiff=dataPointX - dataSeries.dataPoints[i - 1].x;xDiff < 0 && (xDiff = xDiff * -1); //If Condition shortcut -if(axisXDataInfo.minDiff > xDiff && xDiff !== 0){axisXDataInfo.minDiff = xDiff;}if(dataPointY !== null && dataSeries.dataPoints[i - 1].y !== null){var yDiff=dataPointY - dataSeries.dataPoints[i - 1].y;yDiff < 0 && (yDiff = yDiff * -1); //If Condition shortcut -if(axisYDataInfo.minDiff > yDiff && yDiff !== 0){axisYDataInfo.minDiff = yDiff;}}} // This section makes sure that partially visible dataPoints are included in the begining -if(dataPointX < plotAreaXMin && !isFirstDPInViewPort){continue;}else if(!isFirstDPInViewPort){isFirstDPInViewPort = true;if(i > 0){i -= 2;continue;}} // This section makes sure that partially visible dataPoints are included at the end -if(dataPointX > plotAreaXMax && !isLastDPInViewPort){isLastDPInViewPort = true;}else if(dataPointX > plotAreaXMax && isLastDPInViewPort){continue;}if(dataSeries.dataPoints[i].label)plotUnit.axisX.labels[dataPointX] = dataSeries.dataPoints[i].label;if(dataPointX < axisXDataInfo.viewPortMin)axisXDataInfo.viewPortMin = dataPointX;if(dataPointX > axisXDataInfo.viewPortMax)axisXDataInfo.viewPortMax = dataPointX;if(dataPointY === null)continue;plotUnit.yTotals[dataPointX] = (!plotUnit.yTotals[dataPointX]?0:plotUnit.yTotals[dataPointX]) + Math.abs(dataPointY);if(dataPointY >= 0){containsPositiveY = true;}else {containsNegativeY = true;}if(dataPointYSums[dataPointX])dataPointYSums[dataPointX] += Math.abs(dataPointY);else dataPointYSums[dataPointX] = Math.abs(dataPointY);}this.plotInfo.axisXValueType = dataSeries.xValueType = isDateTime?"dateTime":"number";}if(containsPositiveY && !containsNegativeY){axisYDataInfo.max = 99;axisYDataInfo.min = 1;}else if(containsPositiveY && containsNegativeY){axisYDataInfo.max = 99;axisYDataInfo.min = -99;}else if(!containsPositiveY && containsNegativeY){axisYDataInfo.max = -1;axisYDataInfo.min = -99;}axisYDataInfo.viewPortMin = axisYDataInfo.min;axisYDataInfo.viewPortMax = axisYDataInfo.max;plotUnit.dataPointYSums = dataPointYSums; //this.dataPoints.sort(compareDataPointX); -//this.dataPoints.sort(function (dataPoint1, dataPoint2) { return dataPoint1.x - dataPoint2.x; }); -//window.console.log("viewPortYMin: " + plotInfo.viewPortYMin + "; viewPortYMax: " + plotInfo.viewPortYMax); -};Chart.prototype._processMultiYPlotUnit = function(plotUnit){if(!plotUnit.dataSeriesIndexes || plotUnit.dataSeriesIndexes.length < 1)return;var axisYDataInfo=plotUnit.axisY.dataInfo;var axisXDataInfo=plotUnit.axisX.dataInfo;var dataPointX,dataPointY,dataPointYMin,dataPointYMax;var isDateTime=false;for(var j=0;j < plotUnit.dataSeriesIndexes.length;j++) {var dataSeries=this.data[plotUnit.dataSeriesIndexes[j]];var i=0;var isFirstDPInViewPort=false;var isLastDPInViewPort=false;if(dataSeries.axisPlacement === "normal" || dataSeries.axisPlacement === "xySwapped"){var plotAreaXMin=this.sessionVariables.axisX.newViewportMinimum?this.sessionVariables.axisX.newViewportMinimum:this._options.axisX && this._options.axisX.viewportMinimum?this._options.axisX.viewportMinimum:this._options.axisX && this._options.axisX.minimum?this._options.axisX.minimum:-Infinity;var plotAreaXMax=this.sessionVariables.axisX.newViewportMaximum?this.sessionVariables.axisX.newViewportMaximum:this._options.axisX && this._options.axisX.viewportMaximum?this._options.axisX.viewportMaximum:this._options.axisX && this._options.axisX.maximum?this._options.axisX.maximum:Infinity;}if(dataSeries.dataPoints[i].x && dataSeries.dataPoints[i].x.getTime || dataSeries.xValueType === "dateTime"){isDateTime = true;}for(i = 0;i < dataSeries.dataPoints.length;i++) {if(typeof dataSeries.dataPoints[i].x === "undefined"){dataSeries.dataPoints[i].x = i;}if(dataSeries.dataPoints[i].x.getTime){isDateTime = true;dataPointX = dataSeries.dataPoints[i].x.getTime(); //dataPointX is used so that getTime is called only once in case of dateTime values -}else dataPointX = dataSeries.dataPoints[i].x;dataPointY = dataSeries.dataPoints[i].y;if(dataPointY && dataPointY.length){dataPointYMin = Math.min.apply(null,dataPointY);dataPointYMax = Math.max.apply(null,dataPointY);}if(dataPointX < axisXDataInfo.min)axisXDataInfo.min = dataPointX;if(dataPointX > axisXDataInfo.max)axisXDataInfo.max = dataPointX;if(dataPointYMin < axisYDataInfo.min)axisYDataInfo.min = dataPointYMin;if(dataPointYMax > axisYDataInfo.max)axisYDataInfo.max = dataPointYMax;if(i > 0){var xDiff=dataPointX - dataSeries.dataPoints[i - 1].x;xDiff < 0 && (xDiff = xDiff * -1); //If Condition shortcut -if(axisXDataInfo.minDiff > xDiff && xDiff !== 0){axisXDataInfo.minDiff = xDiff;}if(dataPointY[0] !== null && dataSeries.dataPoints[i - 1].y[0] !== null){var yDiff=dataPointY[0] - dataSeries.dataPoints[i - 1].y[0];yDiff < 0 && (yDiff = yDiff * -1); //If Condition shortcut -if(axisYDataInfo.minDiff > yDiff && yDiff !== 0){axisYDataInfo.minDiff = yDiff;}}} // This section makes sure that partially visible dataPoints are included in the begining -if(dataPointX < plotAreaXMin && !isFirstDPInViewPort){continue;}else if(!isFirstDPInViewPort){isFirstDPInViewPort = true;if(i > 0){i -= 2;continue;}} // This section makes sure that partially visible dataPoints are included at the end -if(dataPointX > plotAreaXMax && !isLastDPInViewPort){isLastDPInViewPort = true;}else if(dataPointX > plotAreaXMax && isLastDPInViewPort){continue;}if(dataSeries.dataPoints[i].label)plotUnit.axisX.labels[dataPointX] = dataSeries.dataPoints[i].label;if(dataPointX < axisXDataInfo.viewPortMin)axisXDataInfo.viewPortMin = dataPointX;if(dataPointX > axisXDataInfo.viewPortMax)axisXDataInfo.viewPortMax = dataPointX;if(dataPointY === null)continue;if(dataPointYMin < axisYDataInfo.viewPortMin)axisYDataInfo.viewPortMin = dataPointYMin;if(dataPointYMax > axisYDataInfo.viewPortMax)axisYDataInfo.viewPortMax = dataPointYMax;}this.plotInfo.axisXValueType = dataSeries.xValueType = isDateTime?"dateTime":"number";} //this.dataPoints.sort(compareDataPointX); -//this.dataPoints.sort(function (dataPoint1, dataPoint2) { return dataPoint1.x - dataPoint2.x; }); -}; //getClosest returns objects nearby and hence shouldn't be used for events like click, mouseover, mousemove, etc which require object that is exactly under the mouse. -Chart.prototype.getDataPointAtXY = function(mouseX,mouseY,getClosest){getClosest = getClosest || false;var results=[];for(var i=this._dataInRenderedOrder.length - 1;i >= 0;i--) {var dataSeries=this._dataInRenderedOrder[i];var result=null;result = dataSeries.getDataPointAtXY(mouseX,mouseY,getClosest);if(result)results.push(result);}var closestResult=null;var onlyLineAreaTypes=false;for(var m=0;m < results.length;m++) {if(results[m].dataSeries.type === "line" || results[m].dataSeries.type === "stepLine" || results[m].dataSeries.type === "area" || results[m].dataSeries.type === "stepArea"){var markerSize=(0,_utils.getProperty)("markerSize",results[m].dataPoint,results[m].dataSeries) || 8;if(results[m].distance <= markerSize / 2){onlyLineAreaTypes = true;break;}}}for(m = 0;m < results.length;m++) {if(onlyLineAreaTypes && results[m].dataSeries.type !== "line" && results[m].dataSeries.type !== "stepLine" && results[m].dataSeries.type !== "area" && results[m].dataSeries.type !== "stepArea")continue;if(!closestResult){closestResult = results[m];}else if(results[m].distance <= closestResult.distance){closestResult = results[m];}}return closestResult;};Chart.prototype.getObjectAtXY = function(mouseX,mouseY,getClosest){getClosest = getClosest || false;var id=null;var dataPointInfo=this.getDataPointAtXY(mouseX,mouseY,getClosest);if(dataPointInfo){id = dataPointInfo.dataSeries.dataPointIds[dataPointInfo.dataPointIndex];}else if(_utils.isCanvasSupported){ //IE9+ -id = (0,_utils.getObjectId)(mouseX,mouseY,this._eventManager.ghostCtx);}else {for(var i=0;i < this.legend.items.length;i++) {var item=this.legend.items[i];if(mouseX >= item.x1 && mouseX <= item.x2 && mouseY >= item.y1 && mouseY <= item.y2){id = item.id;}}}return id;}; /// Calculates Font Size based on standardSize and Chart Size -/// Standard font size for a Chart with min(width,height) = 400px -/// The area. -Chart.prototype.getAutoFontSize = function(standardSize,width,height){width = width || this.width;height = height || this.height;var fontSizeScaleFactor=standardSize / 400;return Math.round(Math.min(this.width,this.height) * fontSizeScaleFactor);}; //#region Events -Chart.prototype.resetOverlayedCanvas = function(){ //var width = this.overlaidCanvas.width; -//this.overlaidCanvas.width = 0; -//this.overlaidCanvas.width = width; -this.overlaidCanvasCtx.clearRect(0,0,this.width,this.height);};Chart.prototype.clearCanvas = function(){this.ctx.clearRect(0,0,this.width,this.height);if(this.backgroundColor){this.ctx.fillStyle = this.backgroundColor;this.ctx.fillRect(0,0,this.width,this.height);}};Chart.prototype.attachEvent = function(param){this._events.push(param);};Chart.prototype._touchEventHandler = function(ev){if(!ev.changedTouches || !this.interactivityEnabled)return;var mouseEvents=[];var touches=ev.changedTouches;var first=touches?touches[0]:ev;var touchCurrentCoordinates=null; //window.console.log(touches.length); -switch(ev.type){case "touchstart":case "MSPointerDown":mouseEvents = ["mousemove","mousedown"];this._lastTouchData = (0,_utils.getMouseCoordinates)(first);this._lastTouchData.time = new Date();break;case "touchmove":case "MSPointerMove":mouseEvents = ["mousemove"];break;case "touchend":case "MSPointerUp":mouseEvents = this._lastTouchEventType === "touchstart" || this._lastTouchEventType === "MSPointerDown"?["mouseup","click"]:["mouseup"];break;default:return;}if(touches && touches.length > 1)return;touchCurrentCoordinates = (0,_utils.getMouseCoordinates)(first);touchCurrentCoordinates.time = new Date();try{var dy=touchCurrentCoordinates.y - this._lastTouchData.y;var dx=touchCurrentCoordinates.x - this._lastTouchData.x;var dt=touchCurrentCoordinates.time - this._lastTouchData.time;if(Math.abs(dy) > 15 && (!!this._lastTouchData.scroll || dt < 200)){ //this._lastTouchData.y = touchCurrentCoordinates.y; -this._lastTouchData.scroll = true;var win=window.parent || window;if(win && win.scrollBy)win.scrollBy(0,-dy);}}catch(e) {};this._lastTouchEventType = ev.type;if(!!this._lastTouchData.scroll && this.zoomEnabled){if(this.isDrag)this.resetOverlayedCanvas();this.isDrag = false;return;}for(var i=0;i < mouseEvents.length;i++) {var type=mouseEvents[i];var simulatedEvent=document.createEvent("MouseEvent");simulatedEvent.initMouseEvent(type,true,true,window,1,first.screenX,first.screenY,first.clientX,first.clientY,false,false,false,false,0,null);first.target.dispatchEvent(simulatedEvent);if(ev.preventManipulation){ //alert("preventManipulation"); -ev.preventManipulation();}if(ev.preventDefault){ //alert("preventDefault"); -ev.preventDefault();}}};Chart.prototype._dispatchRangeEvent = function(eventName,triggerSource){var eventParameter={};eventParameter.chart = this._publicChartReference;eventParameter.type = eventName;eventParameter.trigger = triggerSource;var axes=[];if(this.axisX)axes.push("axisX");if(this.axisY)axes.push("axisY");if(this.axisY2)axes.push("axisY2");for(var i=0;i < axes.length;i++) {eventParameter[axes[i]] = {viewportMinimum:this[axes[i]].sessionVariables.newViewportMinimum,viewportMaximum:this[axes[i]].sessionVariables.newViewportMaximum};}this.dispatchEvent(eventName,eventParameter,this._publicChartReference);};Chart.prototype._mouseEventHandler = function(ev){if(!this.interactivityEnabled)return;if(this._ignoreNextEvent){this._ignoreNextEvent = false;return;} // stop panning and zooming so we can draw -if(ev.preventManipulation){ //alert("preventManipulation"); -ev.preventManipulation();} // we are handling this event -if(ev.preventDefault){ //alert("preventDefault"); -ev.preventDefault();} //IE8- uses srcElement instead of target. So instead of checking this condition everytime, its better to create a reference called target. -if(typeof ev.target === "undefined" && ev.srcElement)ev.target = ev.srcElement; //console.log(ev.type); -var xy=(0,_utils.getMouseCoordinates)(ev);var type=ev.type;var eventParam;var rightclick;if(!ev)var e=window.event;if(ev.which)rightclick = ev.which == 3;else if(ev.button)rightclick = ev.button == 2; //window.console.log(type + " --> x: " + xy.x + "; y:" + xy.y); -//if (type === "mouseout") { -// this._toolTip.hide(); -//} -if(_options.isDebugMode && window.console){window.console.log(type + " --> x: " + xy.x + "; y:" + xy.y);if(rightclick)window.console.log(ev.which);if(type === "mouseup")window.console.log("mouseup");}if(rightclick)return; //if (this.plotInfo.axisPlacement === "xySwapped") { -// //var temp = xy.x; -// //xy.x = xy.y; -// //xy.y = temp; -// xy = {x: xy.y, y: xy.x}; -//} -if(Chart.capturedEventParam){eventParam = Chart.capturedEventParam;if(type === "mouseup"){Chart.capturedEventParam = null;if(eventParam.chart.overlaidCanvas.releaseCapture)eventParam.chart.overlaidCanvas.releaseCapture();else document.body.removeEventListener("mouseup",eventParam.chart._mouseEventHandler,false);}if(eventParam.hasOwnProperty(type))eventParam[type].call(eventParam.context,xy.x,xy.y);}else if(this._events){for(var i=0;i < this._events.length;i++) {if(!this._events[i].hasOwnProperty(type))continue;eventParam = this._events[i];var bounds=eventParam.bounds;if(xy.x >= bounds.x1 && xy.x <= bounds.x2 && xy.y >= bounds.y1 && xy.y <= bounds.y2){eventParam[type].call(eventParam.context,xy.x,xy.y);if(type === "mousedown" && eventParam.capture === true){Chart.capturedEventParam = eventParam;if(this.overlaidCanvas.setCapture)this.overlaidCanvas.setCapture();else {document.body.addEventListener("mouseup",this._mouseEventHandler,false); //addEvent(document.body, "mouseup", this._mouseEventHandler); -}}else if(type === "mouseup"){if(eventParam.chart.overlaidCanvas.releaseCapture)eventParam.chart.overlaidCanvas.releaseCapture();else document.body.removeEventListener("mouseup",this._mouseEventHandler,false);}break;}else eventParam = null;}if(eventParam && eventParam.cursor){ev.target.style.cursor = eventParam.cursor;}else ev.target.style.cursor = this._defaultCursor; //eventParam = -}if(this._toolTip && this._toolTip.enabled){var plotArea=this.plotArea;if(xy.x < plotArea.x1 || xy.x > plotArea.x2 || xy.y < plotArea.y1 || xy.y > plotArea.y2)this._toolTip.hide();}if((!this.isDrag || !this.zoomEnabled) && this._eventManager){this._eventManager.mouseEventHandler(ev); //this._updateToolTip(ev.x, ev.y); -} //if (this._toolTip.enabled) -// this._toolTip.mouseMoveHandler(ev.x, ev.y); -};Chart.prototype._plotAreaMouseDown = function(x,y){this.isDrag = true;if(this.plotInfo.axisPlacement !== "none"){this.dragStartPoint = {x:x,y:y};}else {this.dragStartPoint = {x:x,y:y};}};Chart.prototype._plotAreaMouseUp = function(x,y){if(this.plotInfo.axisPlacement === "normal" || this.plotInfo.axisPlacement === "xySwapped"){if(this.isDrag){var dragDelta=0,dragDeltaPY=y - this.dragStartPoint.y,dragDeltaPX=x - this.dragStartPoint.x,zoomPX=this.zoomType.indexOf("x") >= 0, //Whether to zoom horizontally -zoomPY=this.zoomType.indexOf("y") >= 0, //Whether to zoom vertically -reRender=false;this.resetOverlayedCanvas();if(this.plotInfo.axisPlacement === "xySwapped"){var temp=zoomPY;zoomPY = zoomPX;zoomPX = temp;}if(this.panEnabled || this.zoomEnabled){if(this.panEnabled){var overflow=0;for(var i=0;i < this._axes.length;i++) {var axis=this._axes[i];if(axis.viewportMinimum < axis.minimum){overflow = axis.minimum - axis.viewportMinimum;axis.sessionVariables.newViewportMinimum = axis.viewportMinimum + overflow;axis.sessionVariables.newViewportMaximum = axis.viewportMaximum + overflow;reRender = true;}else if(axis.viewportMaximum > axis.maximum){overflow = axis.viewportMaximum - axis.maximum;axis.sessionVariables.newViewportMinimum = axis.viewportMinimum - overflow;axis.sessionVariables.newViewportMaximum = axis.viewportMaximum - overflow;reRender = true;}}}else if((!zoomPX || Math.abs(dragDeltaPX) > 2) && (!zoomPY || Math.abs(dragDeltaPY) > 2) && this.zoomEnabled){if(!this.dragStartPoint)return;var selectedRegion={x1:zoomPX?this.dragStartPoint.x:this.plotArea.x1,y1:zoomPY?this.dragStartPoint.y:this.plotArea.y1,x2:zoomPX?x:this.plotArea.x2,y2:zoomPY?y:this.plotArea.y2};if(Math.abs(selectedRegion.x1 - selectedRegion.x2) > 2 && Math.abs(selectedRegion.y1 - selectedRegion.y2) > 2){if(this._zoomPanToSelectedRegion(selectedRegion.x1,selectedRegion.y1,selectedRegion.x2,selectedRegion.y2)){reRender = true;}}}if(reRender){this._ignoreNextEvent = true; //Required so that click event doesn't fire after zooming into a section of the chart. -this._dispatchRangeEvent("rangeChanging","zoom");this.render();this._dispatchRangeEvent("rangeChanged","zoom");if(reRender && this.zoomEnabled && this._zoomButton.style.display === "none"){(0,_utils.show)(this._zoomButton,this._resetButton);setButtonState(this,this._zoomButton,"pan");setButtonState(this,this._resetButton,"reset");}}}}}this.isDrag = false;};Chart.prototype._plotAreaMouseMove = function(x,y){if(this.isDrag && this.plotInfo.axisPlacement !== "none"){var dragDeltaPX=0,dragDeltaPY=0,alpha=null,selectedRegion=null,zoomPX=this.zoomType.indexOf("x") >= 0, //Whether to zoom horizontally -zoomPY=this.zoomType.indexOf("y") >= 0, //Whether to zoom vertically -_this=this;if(this.plotInfo.axisPlacement === "xySwapped"){var temp=zoomPY;zoomPY = zoomPX;zoomPX = temp;}dragDeltaPX = this.dragStartPoint.x - x;dragDeltaPY = this.dragStartPoint.y - y;if(Math.abs(dragDeltaPX) > 2 && Math.abs(dragDeltaPX) < 8 && (this.panEnabled || this.zoomEnabled)){this._toolTip.hide();}else if(!this.panEnabled && !this.zoomEnabled){this._toolTip.mouseMoveHandler(x,y);}if((!zoomPX || Math.abs(dragDeltaPX) > 2 || !zoomPY || Math.abs(dragDeltaPY) > 2) && (this.panEnabled || this.zoomEnabled)){if(this.panEnabled){selectedRegion = {x1:zoomPX?this.plotArea.x1 + dragDeltaPX:this.plotArea.x1,y1:zoomPY?this.plotArea.y1 + dragDeltaPY:this.plotArea.y1,x2:zoomPX?this.plotArea.x2 + dragDeltaPX:this.plotArea.x2,y2:zoomPY?this.plotArea.y2 + dragDeltaPY:this.plotArea.y2};if(this._zoomPanToSelectedRegion(selectedRegion.x1,selectedRegion.y1,selectedRegion.x2,selectedRegion.y2,true)){this._dispatchRangeEvent("rangeChanging","pan");this.render();this._dispatchRangeEvent("rangeChanged","pan");this.dragStartPoint.x = x;this.dragStartPoint.y = y; //clearTimeout(this._panTimerId); -//this._panTimerId = setTimeout(function () { -// _this._dispatchRangeEvent("rangeChanging", "pan"); -// _this.render(); -// _this._dispatchRangeEvent("rangeChanged", "pan"); -//}, 0); -}}else if(this.zoomEnabled){this.resetOverlayedCanvas();alpha = this.overlaidCanvasCtx.globalAlpha;this.overlaidCanvasCtx.globalAlpha = .7;this.overlaidCanvasCtx.fillStyle = "#A0ABB8";var rect={x1:zoomPX?this.dragStartPoint.x:this.plotArea.x1,y1:zoomPY?this.dragStartPoint.y:this.plotArea.y1,x2:zoomPX?x - this.dragStartPoint.x:this.plotArea.x2 - this.plotArea.x1,y2:zoomPY?y - this.dragStartPoint.y:this.plotArea.y2 - this.plotArea.y1};this.overlaidCanvasCtx.fillRect(rect.x1,rect.y1,rect.x2,rect.y2);this.overlaidCanvasCtx.globalAlpha = alpha;}}}else this._toolTip.mouseMoveHandler(x,y);}; //#endregion Events -//Sets the viewport range of Axis based on the given rect bounds (pixels). Also limits the zooming/panning based on axis bounds. Returns a boolean to indicate whether it was succesful or not based on the selected region. -Chart.prototype._zoomPanToSelectedRegion = function(px1,py1,px2,py2,keepAxisIndependent){keepAxisIndependent = keepAxisIndependent || false;var zoomPX=this.zoomType.indexOf("x") >= 0, //Whether to zoom horizontally -zoomPY=this.zoomType.indexOf("y") >= 0, //Whether to zoom vertically -validRegion=false;var axes=[],axesWithValidRange=[];if(this.axisX && zoomPX)axes.push(this.axisX);if(this.axisY && zoomPY)axes.push(this.axisY);if(this.axisY2 && zoomPY)axes.push(this.axisY2);var params=[];for(var i=0;i < axes.length;i++) {var axis=axes[i]; //var range = Math.abs(axis.viewportMaximum - axis.viewportMinimum); -var val1=axis.convertPixelToValue({x:px1,y:py1});var val2=axis.convertPixelToValue({x:px2,y:py2});if(val1 > val2){var temp=val2;val2 = val1;val1 = temp;}if(isFinite(axis.dataInfo.minDiff)){if(!(Math.abs(val2 - val1) < 3 * Math.abs(axis.dataInfo.minDiff) || val1 < axis.minimum || val2 > axis.maximum)){axesWithValidRange.push(axis);params.push({val1:val1,val2:val2});validRegion = true;}else if(!keepAxisIndependent){validRegion = false;break;}}}if(validRegion){for(var i=0;i < axesWithValidRange.length;i++) {var axis=axesWithValidRange[i];var param=params[i];axis.setViewPortRange(param.val1,param.val2);}}return validRegion;};Chart.prototype.preparePlotArea = function(){var plotArea=this.plotArea;var yAxis=this.axisY?this.axisY:this.axisY2;if(!_utils.isCanvasSupported && (plotArea.x1 > 0 || plotArea.y1 > 0)){plotArea.ctx.translate(plotArea.x1,plotArea.y1);}if(this.axisX && yAxis){plotArea.x1 = this.axisX.lineCoordinates.x1 < this.axisX.lineCoordinates.x2?this.axisX.lineCoordinates.x1:yAxis.lineCoordinates.x1;plotArea.y1 = this.axisX.lineCoordinates.y1 < yAxis.lineCoordinates.y1?this.axisX.lineCoordinates.y1:yAxis.lineCoordinates.y1;plotArea.x2 = this.axisX.lineCoordinates.x2 > yAxis.lineCoordinates.x2?this.axisX.lineCoordinates.x2:yAxis.lineCoordinates.x2;plotArea.y2 = this.axisX.lineCoordinates.y2 > this.axisX.lineCoordinates.y1?this.axisX.lineCoordinates.y2:yAxis.lineCoordinates.y2;plotArea.width = plotArea.x2 - plotArea.x1;plotArea.height = plotArea.y2 - plotArea.y1; //plotArea = { x1: x1, y1: y1, x2: x2, y2: y2, width: x2 - x1, height: y2 - y1 }; -}else { //ToDo: @sunil -var freeSpace=this.layoutManager.getFreeSpace();plotArea.x1 = freeSpace.x1;plotArea.x2 = freeSpace.x2;plotArea.y1 = freeSpace.y1;plotArea.y2 = freeSpace.y2;plotArea.width = freeSpace.width;plotArea.height = freeSpace.height;}if(!_utils.isCanvasSupported){plotArea.canvas.width = plotArea.width;plotArea.canvas.height = plotArea.height;plotArea.canvas.style.left = plotArea.x1 + "px";plotArea.canvas.style.top = plotArea.y1 + "px";if(plotArea.x1 > 0 || plotArea.y1 > 0){plotArea.ctx.translate(-plotArea.x1,-plotArea.y1);}}plotArea.layoutManager = new _layout_manager2.default(plotArea.x1,plotArea.y1,plotArea.x2,plotArea.y2,2);};Chart.prototype.getPixelCoordinatesOnPlotArea = function(x,y){return {x:this.axisX.getPixelCoordinatesOnAxis(x).x,y:this.axisY.getPixelCoordinatesOnAxis(y).y}; //return { x: 5, y: 10 }; -}; //#region Render Methods -Chart.prototype.renderIndexLabels = function(targetCtx){var ctx=targetCtx || this.plotArea.ctx;var plotArea=this.plotArea;var mid=0;var yMinLimit=0;var yMaxLimit=0;var xMinLimit=0;var xMaxLimit=0;var marginX=0,marginY=0; // Margin between label and dataPoint / PlotArea -var offSetX=0,offSetY=0; // Distance to offSet textBlock (top) from dataPoint inorder to position it -var visibleWidth=0;var visibleHeight=0;for(var i=0;i < this._indexLabels.length;i++) {var indexLabel=this._indexLabels[i];var chartTypeLower=indexLabel.chartType.toLowerCase();var x,y,angle;var fontColor=(0,_utils.getProperty)("indexLabelFontColor",indexLabel.dataPoint,indexLabel.dataSeries);var fontSize=(0,_utils.getProperty)("indexLabelFontSize",indexLabel.dataPoint,indexLabel.dataSeries);var fontFamily=(0,_utils.getProperty)("indexLabelFontFamily",indexLabel.dataPoint,indexLabel.dataSeries);var fontStyle=(0,_utils.getProperty)("indexLabelFontStyle",indexLabel.dataPoint,indexLabel.dataSeries);var fontWeight=(0,_utils.getProperty)("indexLabelFontWeight",indexLabel.dataPoint,indexLabel.dataSeries);var backgroundColor=(0,_utils.getProperty)("indexLabelBackgroundColor",indexLabel.dataPoint,indexLabel.dataSeries);var maxWidth=(0,_utils.getProperty)("indexLabelMaxWidth",indexLabel.dataPoint,indexLabel.dataSeries);var indexLabelWrap=(0,_utils.getProperty)("indexLabelWrap",indexLabel.dataPoint,indexLabel.dataSeries);var percentAndTotal={percent:null,total:null};var formatterParameter=null;if(indexLabel.dataSeries.type.indexOf("stacked") >= 0 || indexLabel.dataSeries.type === "pie" || indexLabel.dataSeries.type === "doughnut")percentAndTotal = this.getPercentAndTotal(indexLabel.dataSeries,indexLabel.dataPoint);if(indexLabel.dataSeries.indexLabelFormatter || indexLabel.dataPoint.indexLabelFormatter)formatterParameter = {chart:this._options,dataSeries:indexLabel.dataSeries,dataPoint:indexLabel.dataPoint,index:indexLabel.indexKeyword,total:percentAndTotal.total,percent:percentAndTotal.percent};var indexLabelText=indexLabel.dataPoint.indexLabelFormatter?indexLabel.dataPoint.indexLabelFormatter(formatterParameter):indexLabel.dataPoint.indexLabel?this.replaceKeywordsWithValue(indexLabel.dataPoint.indexLabel,indexLabel.dataPoint,indexLabel.dataSeries,null,indexLabel.indexKeyword):indexLabel.dataSeries.indexLabelFormatter?indexLabel.dataSeries.indexLabelFormatter(formatterParameter):indexLabel.dataSeries.indexLabel?this.replaceKeywordsWithValue(indexLabel.dataSeries.indexLabel,indexLabel.dataPoint,indexLabel.dataSeries,null,indexLabel.indexKeyword):null;if(indexLabelText === null || indexLabelText === "")continue;var placement=(0,_utils.getProperty)("indexLabelPlacement",indexLabel.dataPoint,indexLabel.dataSeries);var orientation=(0,_utils.getProperty)("indexLabelOrientation",indexLabel.dataPoint,indexLabel.dataSeries);var angle=0;var direction=indexLabel.direction; // +1 for above the point and -1 for below the point -var axisX=indexLabel.dataSeries.axisX;var axisY=indexLabel.dataSeries.axisY;var textBlock=new _text_block2.default(ctx,{x:0,y:0,maxWidth:maxWidth?maxWidth:this.width * .5,maxHeight:indexLabelWrap?fontSize * 5:fontSize * 1.5,angle:orientation === "horizontal"?0:-90,text:indexLabelText,padding:0,backgroundColor:backgroundColor,horizontalAlign:"left", //left, center, right -fontSize:fontSize, //in pixels -fontFamily:fontFamily,fontWeight:fontWeight, //normal, bold, bolder, lighter, -fontColor:fontColor,fontStyle:fontStyle, // normal, italic, oblique -textBaseline:"top"});var textSize=textBlock.measureText(); //if (indexLabel.dataPoint.x < axisX.viewportMinimum || indexLabel.dataPoint.x > axisX.viewportMaximum || indexLabel.dataPoint.y < axisY.viewportMinimum || indexLabel.dataPoint.y > axisY.viewportMaximum) -// continue; -if(chartTypeLower.indexOf("line") >= 0 || chartTypeLower.indexOf("area") >= 0 || chartTypeLower.indexOf("bubble") >= 0 || chartTypeLower.indexOf("scatter") >= 0){if(indexLabel.dataPoint.x < axisX.viewportMinimum || indexLabel.dataPoint.x > axisX.viewportMaximum || indexLabel.dataPoint.y < axisY.viewportMinimum || indexLabel.dataPoint.y > axisY.viewportMaximum)continue;}else {if(indexLabel.dataPoint.x < axisX.viewportMinimum || indexLabel.dataPoint.x > axisX.viewportMaximum)continue;}marginY = 2;marginX = 2;if(orientation === "horizontal"){visibleWidth = textBlock.width;visibleHeight = textBlock.height;}else {visibleHeight = textBlock.width;visibleWidth = textBlock.height;}if(this.plotInfo.axisPlacement === "normal"){if(chartTypeLower.indexOf("line") >= 0 || chartTypeLower.indexOf("area") >= 0){placement = "auto";marginY = 4;}else if(chartTypeLower.indexOf("stacked") >= 0){if(placement === "auto")placement = "inside";}else if(chartTypeLower === "bubble" || chartTypeLower === "scatter"){placement = "inside";}x = indexLabel.point.x - visibleWidth / 2;if(placement !== "inside"){ //outside or auto -yMinLimit = plotArea.y1;yMaxLimit = plotArea.y2;if(direction > 0){y = indexLabel.point.y - visibleHeight - marginY;if(y < yMinLimit){if(placement === "auto"){y = Math.max(indexLabel.point.y,yMinLimit) + marginY;}else {y = yMinLimit + marginY;}}}else {y = indexLabel.point.y + marginY;if(y > yMaxLimit - visibleHeight - marginY){if(placement === "auto"){y = Math.min(indexLabel.point.y,yMaxLimit) - visibleHeight - marginY;}else {y = yMaxLimit - visibleHeight - marginY;}}}}else {yMinLimit = Math.max(indexLabel.bounds.y1,plotArea.y1);yMaxLimit = Math.min(indexLabel.bounds.y2,plotArea.y2);if(chartTypeLower.indexOf("range") >= 0){if(direction > 0)mid = Math.max(indexLabel.bounds.y1,plotArea.y1) + visibleHeight / 2 + marginY;else mid = Math.min(indexLabel.bounds.y2,plotArea.y2) - visibleHeight / 2 - marginY;}else mid = (Math.max(indexLabel.bounds.y1,plotArea.y1) + Math.min(indexLabel.bounds.y2,plotArea.y2)) / 2;if(direction > 0){y = Math.max(indexLabel.point.y,mid) - visibleHeight / 2;if(y < yMinLimit && (chartTypeLower === "bubble" || chartTypeLower === "scatter")){y = Math.max(indexLabel.point.y - visibleHeight - marginY,plotArea.y1 + marginY);}}else {y = Math.min(indexLabel.point.y,mid) - visibleHeight / 2;if(y > yMaxLimit - visibleHeight - marginY && (chartTypeLower === "bubble" || chartTypeLower === "scatter")){y = Math.min(indexLabel.point.y + marginY,plotArea.y2 - visibleHeight - marginY);}} // Make Sure that it does not overlap the axis line -y = Math.min(y,yMaxLimit - visibleHeight);}}else {if(chartTypeLower.indexOf("line") >= 0 || chartTypeLower.indexOf("area") >= 0 || chartTypeLower.indexOf("scatter") >= 0){placement = "auto";marginX = 4;}else if(chartTypeLower.indexOf("stacked") >= 0){if(placement === "auto")placement = "inside";}else if(chartTypeLower === "bubble"){placement = "inside";}y = indexLabel.point.y - visibleHeight / 2;if(placement !== "inside"){ //outside or auto -xMinLimit = plotArea.x1;xMaxLimit = plotArea.x2;if(direction < 0){x = indexLabel.point.x - visibleWidth - marginX;if(x < xMinLimit){if(placement === "auto"){x = Math.max(indexLabel.point.x,xMinLimit) + marginX;}else {x = xMinLimit + marginX;}}}else {x = indexLabel.point.x + marginX;if(x > xMaxLimit - visibleWidth - marginX){if(placement === "auto"){x = Math.min(indexLabel.point.x,xMaxLimit) - visibleWidth - marginX;}else {x = xMaxLimit - visibleWidth - marginX;}}}}else {xMinLimit = Math.max(indexLabel.bounds.x1,plotArea.x1);xMaxLimit = Math.min(indexLabel.bounds.x2,plotArea.x2);if(chartTypeLower.indexOf("range") >= 0){if(direction < 0)mid = Math.max(indexLabel.bounds.x1,plotArea.x1) + visibleWidth / 2 + marginX;else mid = Math.min(indexLabel.bounds.x2,plotArea.x2) - visibleWidth / 2 - marginX;}else var mid=(Math.max(indexLabel.bounds.x1,plotArea.x1) + Math.min(indexLabel.bounds.x2,plotArea.x2)) / 2;if(direction < 0){x = Math.max(indexLabel.point.x,mid) - visibleWidth / 2; //if (y < xMinLimit) { -// y = Math.max(indexLabel.point.y - visibleHeight - marginY, plotArea.y1 + marginY); -//} -}else {x = Math.min(indexLabel.point.x,mid) - visibleWidth / 2; //if (y > xMaxLimit - visibleHeight - marginY) { -// y = Math.min(indexLabel.point.y + marginY, plotArea.y2 - visibleHeight - marginY); -//} -} // Make Sure that it does not overlap the axis line -x = Math.max(x,xMinLimit);}}if(orientation === "vertical"){y += visibleHeight;}textBlock.x = x;textBlock.y = y; //console.log(textBlock.text + ": " + textBlock.x + "; " + textBlock.y); -textBlock.render(true);} //source and dest would be same when animation is not enabled -var animationInfo={source:ctx,dest:this.plotArea.ctx,animationCallback:_animator4.default.fadeInAnimation,easingFunction:_animator4.default.easing.easeInQuad,animationBase:0,startTimePercent:.7};return animationInfo;};Chart.prototype.renderLine = function(plotUnit){var ctx=plotUnit.targetCanvasCtx || this.plotArea.ctx;var totalDataSeries=plotUnit.dataSeriesIndexes.length;if(totalDataSeries <= 0)return;var ghostCtx=this._eventManager.ghostCtx; //var ghostCtx = this.overlaidCanvasCtx; -ctx.save();var plotArea=this.plotArea;ctx.beginPath();ctx.rect(plotArea.x1,plotArea.y1,plotArea.width,plotArea.height);ctx.clip();var markers=[];for(var j=0;j < plotUnit.dataSeriesIndexes.length;j++) {var dataSeriesIndex=plotUnit.dataSeriesIndexes[j];var dataSeries=this.data[dataSeriesIndex];ctx.lineWidth = dataSeries.lineThickness;var dataPoints=dataSeries.dataPoints;if(ctx.setLineDash){ctx.setLineDash((0,_utils.getLineDashArray)(dataSeries.lineDashType,dataSeries.lineThickness));}var seriesId=dataSeries.id;this._eventManager.objectMap[seriesId] = {objectType:"dataSeries",dataSeriesIndex:dataSeriesIndex};var hexColor=(0,_utils.intToHexColorString)(seriesId);ghostCtx.strokeStyle = hexColor; //ghostCtx.lineWidth = dataSeries.lineThickness; -ghostCtx.lineWidth = dataSeries.lineThickness > 0?Math.max(dataSeries.lineThickness,4):0;var colorSet=dataSeries._colorSet;var color=colorSet[0];ctx.strokeStyle = color;var isFirstDataPointInPlotArea=true;var i=0,x,y;var dataPointX; //Used so that when dataPoint.x is a DateTime value, it doesn't get converted to number back and forth. -//if (!dataSeries._options.markerSize && dataSeries.dataPoints.length < 1000) -// dataSeries.markerSize = 8; -ctx.beginPath();if(dataPoints.length > 0){ //var xy = this.getPixelCoordinatesOnPlotArea(dataPoints[0].x, dataPoints[0].y); -//dataSeries.noDataPointsInPlotArea = 0 -var prevDataNull=false;for(i = 0;i < dataPoints.length;i++) {dataPointX = dataPoints[i].x.getTime?dataPoints[i].x.getTime():dataPoints[i].x;if(dataPointX < plotUnit.axisX.dataInfo.viewPortMin || dataPointX > plotUnit.axisX.dataInfo.viewPortMax)continue; //if (!isFinite(dataPoints[i].y)) -// continue; -if(typeof dataPoints[i].y !== "number"){if(i > 0){ // if first dataPoint is null then no need to call stroke method -ctx.stroke();if(_utils.isCanvasSupported){ghostCtx.stroke();}}prevDataNull = true;continue;}x = plotUnit.axisX.conversionParameters.reference + plotUnit.axisX.conversionParameters.pixelPerUnit * (dataPointX - plotUnit.axisX.conversionParameters.minimum) + .5 << 0;y = plotUnit.axisY.conversionParameters.reference + plotUnit.axisY.conversionParameters.pixelPerUnit * (dataPoints[i].y - plotUnit.axisY.conversionParameters.minimum) + .5 << 0;var id=dataSeries.dataPointIds[i];this._eventManager.objectMap[id] = {id:id,objectType:"dataPoint",dataSeriesIndex:dataSeriesIndex,dataPointIndex:i,x1:x,y1:y}; //dataSeries.noDataPointsInPlotArea++; -if(isFirstDataPointInPlotArea || prevDataNull){ctx.beginPath();ctx.moveTo(x,y);if(_utils.isCanvasSupported){ghostCtx.beginPath();ghostCtx.moveTo(x,y);}isFirstDataPointInPlotArea = false;prevDataNull = false;}else {ctx.lineTo(x,y);if(_utils.isCanvasSupported)ghostCtx.lineTo(x,y);if(i % 500 == 0){ctx.stroke();ctx.beginPath();ctx.moveTo(x,y);if(_utils.isCanvasSupported){ghostCtx.stroke();ghostCtx.beginPath();ghostCtx.moveTo(x,y);}}} //Render Marker -if(dataPoints[i].markerSize > 0 || dataSeries.markerSize > 0){var markerProps=dataSeries.getMarkerProperties(i,x,y,ctx);markers.push(markerProps); //if (!dataSeries.maxWidthInX || markerProps.size > dataSeries.maxWidthInX) { -// dataSeries.maxWidthInX = markerProps.size / (plotUnit.axisX.conversionParameters.pixelPerUnit > 1 ? plotUnit.axisX.conversionParameters.pixelPerUnit - 1 : plotUnit.axisX.conversionParameters.pixelPerUnit); -//} -var markerColor=(0,_utils.intToHexColorString)(id); //window.console.log("index: " + i + "; id: " + id + "; hex: " + markerColor); -if(_utils.isCanvasSupported){markers.push({x:x,y:y,ctx:ghostCtx,type:markerProps.type,size:markerProps.size,color:markerColor,borderColor:markerColor,borderThickness:markerProps.borderThickness});}}if(dataPoints[i].indexLabel || dataSeries.indexLabel || dataPoints[i].indexLabelFormatter || dataSeries.indexLabelFormatter){this._indexLabels.push({chartType:"line",dataPoint:dataPoints[i],dataSeries:dataSeries,point:{x:x,y:y},direction:dataPoints[i].y >= 0?1:-1,color:color});}}ctx.stroke();if(_utils.isCanvasSupported)ghostCtx.stroke();}}_render2.default.drawMarkers(markers);ctx.restore();ctx.beginPath();if(_utils.isCanvasSupported)ghostCtx.beginPath(); //source and dest would be same when animation is not enabled -var animationInfo={source:ctx,dest:this.plotArea.ctx,animationCallback:_animator4.default.xClipAnimation,easingFunction:_animator4.default.easing.linear,animationBase:0};return animationInfo;};Chart.prototype.renderStepLine = function(plotUnit){var ctx=plotUnit.targetCanvasCtx || this.plotArea.ctx;var totalDataSeries=plotUnit.dataSeriesIndexes.length;if(totalDataSeries <= 0)return;var ghostCtx=this._eventManager.ghostCtx; //var ghostCtx = this.overlaidCanvasCtx; -ctx.save();var plotArea=this.plotArea;ctx.beginPath();ctx.rect(plotArea.x1,plotArea.y1,plotArea.width,plotArea.height);ctx.clip();var markers=[];for(var j=0;j < plotUnit.dataSeriesIndexes.length;j++) {var dataSeriesIndex=plotUnit.dataSeriesIndexes[j];var dataSeries=this.data[dataSeriesIndex];ctx.lineWidth = dataSeries.lineThickness;var dataPoints=dataSeries.dataPoints;if(ctx.setLineDash){ctx.setLineDash((0,_utils.getLineDashArray)(dataSeries.lineDashType,dataSeries.lineThickness));}var seriesId=dataSeries.id;this._eventManager.objectMap[seriesId] = {objectType:"dataSeries",dataSeriesIndex:dataSeriesIndex};var hexColor=(0,_utils.intToHexColorString)(seriesId);ghostCtx.strokeStyle = hexColor; //ghostCtx.lineWidth = dataSeries.lineThickness; -ghostCtx.lineWidth = dataSeries.lineThickness > 0?Math.max(dataSeries.lineThickness,4):0;var colorSet=dataSeries._colorSet;var color=colorSet[0];ctx.strokeStyle = color;var isFirstDataPointInPlotArea=true;var i=0,x,y;var dataPointX; //Used so that when dataPoint.x is a DateTime value, it doesn't get converted to number back and forth. -//if (!dataSeries._options.markerSize && dataSeries.dataPoints.length < 1000) -// dataSeries.markerSize = 8; -ctx.beginPath();if(dataPoints.length > 0){ //var xy = this.getPixelCoordinatesOnPlotArea(dataPoints[0].x, dataPoints[0].y); -//dataSeries.noDataPointsInPlotArea = 0 -var prevDataNull=false;for(i = 0;i < dataPoints.length;i++) {dataPointX = dataPoints[i].getTime?dataPoints[i].x.getTime():dataPoints[i].x;if(dataPointX < plotUnit.axisX.dataInfo.viewPortMin || dataPointX > plotUnit.axisX.dataInfo.viewPortMax)continue; //if (!isFinite(dataPoints[i].y)) -// continue; -if(typeof dataPoints[i].y !== "number"){if(i > 0){ // if first dataPoint is null then no need to call stroke method -ctx.stroke();if(_utils.isCanvasSupported){ghostCtx.stroke();}}prevDataNull = true;continue;}var prevY=y;x = plotUnit.axisX.conversionParameters.reference + plotUnit.axisX.conversionParameters.pixelPerUnit * (dataPointX - plotUnit.axisX.conversionParameters.minimum) + .5 << 0;y = plotUnit.axisY.conversionParameters.reference + plotUnit.axisY.conversionParameters.pixelPerUnit * (dataPoints[i].y - plotUnit.axisY.conversionParameters.minimum) + .5 << 0;var id=dataSeries.dataPointIds[i];this._eventManager.objectMap[id] = {id:id,objectType:"dataPoint",dataSeriesIndex:dataSeriesIndex,dataPointIndex:i,x1:x,y1:y}; //dataSeries.noDataPointsInPlotArea++; -if(isFirstDataPointInPlotArea || prevDataNull){ctx.beginPath();ctx.moveTo(x,y);if(_utils.isCanvasSupported){ghostCtx.beginPath();ghostCtx.moveTo(x,y);}isFirstDataPointInPlotArea = false;prevDataNull = false;}else {ctx.lineTo(x,prevY);if(_utils.isCanvasSupported)ghostCtx.lineTo(x,prevY);ctx.lineTo(x,y);if(_utils.isCanvasSupported)ghostCtx.lineTo(x,y);if(i % 500 == 0){ctx.stroke();ctx.beginPath();ctx.moveTo(x,y);if(_utils.isCanvasSupported){ghostCtx.stroke();ghostCtx.beginPath();ghostCtx.moveTo(x,y);}}} //Render Marker -if(dataPoints[i].markerSize > 0 || dataSeries.markerSize > 0){var markerProps=dataSeries.getMarkerProperties(i,x,y,ctx);markers.push(markerProps); //if (!dataSeries.maxWidthInX || markerProps.size > dataSeries.maxWidthInX) { -// dataSeries.maxWidthInX = markerProps.size / (plotUnit.axisX.conversionParameters.pixelPerUnit > 1 ? plotUnit.axisX.conversionParameters.pixelPerUnit - 1 : plotUnit.axisX.conversionParameters.pixelPerUnit); -//} -var markerColor=(0,_utils.intToHexColorString)(id); //window.console.log("index: " + i + "; id: " + id + "; hex: " + markerColor); -if(_utils.isCanvasSupported){markers.push({x:x,y:y,ctx:ghostCtx,type:markerProps.type,size:markerProps.size,color:markerColor,borderColor:markerColor,borderThickness:markerProps.borderThickness});}}if(dataPoints[i].indexLabel || dataSeries.indexLabel || dataPoints[i].indexLabelFormatter || dataSeries.indexLabelFormatter){this._indexLabels.push({chartType:"stepLine",dataPoint:dataPoints[i],dataSeries:dataSeries,point:{x:x,y:y},direction:dataPoints[i].y >= 0?1:-1,color:color});}}ctx.stroke();if(_utils.isCanvasSupported)ghostCtx.stroke();}}_render2.default.drawMarkers(markers);ctx.restore();ctx.beginPath();if(_utils.isCanvasSupported)ghostCtx.beginPath(); //source and dest would be same when animation is not enabled -var animationInfo={source:ctx,dest:this.plotArea.ctx,animationCallback:_animator4.default.xClipAnimation,easingFunction:_animator4.default.easing.linear,animationBase:0};return animationInfo;};Chart.prototype.animationRequestId = null;Chart.prototype.requestAnimFrame = (function(){return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback){window.setTimeout(callback,1000 / 60);};})();Chart.prototype.cancelRequestAnimFrame = (function(){return window.cancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || clearTimeout;})();Chart.prototype.getPercentAndTotal = function(ds,dp){var dpX=null;var total=null;var percent=null;if(ds.type.indexOf("stacked") >= 0){total = 0;dpX = dp.x.getTime?dp.x.getTime():dp.x;if(dpX in ds.plotUnit.yTotals){total = ds.plotUnit.yTotals[dpX];if(!isNaN(dp.y)){if(total === 0)percent = 0;else percent = dp.y / total * 100;}else percent = 0;}}else if(ds.type === "pie" || ds.type === "doughnut"){total = 0;for(var i=0;i < ds.dataPoints.length;i++) {if(!isNaN(ds.dataPoints[i].y))total += ds.dataPoints[i].y;}if(!isNaN(dp.y))percent = dp.y / total * 100;else percent = 0;}return {percent:percent,total:total};};Chart.prototype.replaceKeywordsWithValue = function(str,dp,ds,dpIndex,indexKeywordValue){ //var regex = /\{\s*[a-zA-Z]+\s*\}|"[^"]*"|'[^']*'/g; -var regex=/\{.*?\}|"[^"]*"|'[^']*'/g;var chart=this;indexKeywordValue = typeof indexKeywordValue === "undefined"?0:indexKeywordValue;if((ds.type.indexOf("stacked") >= 0 || ds.type === "pie" || ds.type === "doughnut") && (str.indexOf("#percent") >= 0 || str.indexOf("#total") >= 0)){var percent="#percent";var total="#total";var dpX=null;var percentAndTotal=this.getPercentAndTotal(ds,dp);total = isNaN(percentAndTotal.total)?total:percentAndTotal.total;percent = isNaN(percentAndTotal.percent)?percent:percentAndTotal.percent;do {var percentFormatString="";if(ds.percentFormatString)percentFormatString = ds.percentFormatString;else {percentFormatString = "#,##0.";var numberOfDecimals=Math.max(Math.ceil(Math.log(1 / Math.abs(percent)) / Math.LN10),2);if(isNaN(numberOfDecimals) || !isFinite(numberOfDecimals))numberOfDecimals = 2;for(var n=0;n < numberOfDecimals;n++) {percentFormatString += "#";}}str = str.replace("#percent",(0,_utils.numberFormat)(percent,percentFormatString,chart._cultureInfo));str = str.replace("#total",(0,_utils.numberFormat)(total,ds.yValueFormatString?ds.yValueFormatString:"#,##0.########"));}while(str.indexOf("#percent") >= 0 || str.indexOf("#total") >= 0);}var fcn=function fcn($0){if($0[0] === "\"" && $0[$0.length - 1] === "\"" || $0[0] === "\'" && $0[$0.length - 1] === "\'")return $0.slice(1,$0.length - 1);var key=(0,_utils.trimString)($0.slice(1,$0.length - 1));key = key.replace("#index",indexKeywordValue);var index=null;try{var match=key.match(/(.*?)\s*\[\s*(.*?)\s*\]/);if(match && match.length > 0){index = (0,_utils.trimString)(match[2]);key = (0,_utils.trimString)(match[1]);}}catch(e) {};var obj=null;if(key === "color"){return dp.color?dp.color:ds.color?ds.color:ds._colorSet[dpIndex % ds._colorSet.length];}if(dp.hasOwnProperty(key))obj = dp;else if(ds.hasOwnProperty(key))obj = ds;else return "";var value=obj[key];if(index !== null)value = value[index];if(key === "x"){if(chart.axisX && chart.plotInfo.axisXValueType === "dateTime")return dateFormat(value,dp.xValueFormatString?dp.xValueFormatString:ds.xValueFormatString?ds.xValueFormatString:chart.axisX && chart.axisX.valueFormatString?chart.axisX.valueFormatString:"DD MMM YY",chart._cultureInfo);else return (0,_utils.numberFormat)(value,dp.xValueFormatString?dp.xValueFormatString:ds.xValueFormatString?ds.xValueFormatString:"#,##0.########",chart._cultureInfo);}else if(key === "y")return (0,_utils.numberFormat)(value,dp.yValueFormatString?dp.yValueFormatString:ds.yValueFormatString?ds.yValueFormatString:"#,##0.########",chart._cultureInfo);else if(key === "z")return (0,_utils.numberFormat)(value,dp.zValueFormatString?dp.zValueFormatString:ds.zValueFormatString?ds.zValueFormatString:"#,##0.########",chart._cultureInfo);else return value;};return str.replace(regex,fcn);};Chart.prototype.renderSpline = _index.SplineChart;Chart.prototype.renderColumn = _index.ColumnChart;Chart.prototype.renderStackedColumn = _index.StackedColumnChart;Chart.prototype.renderStackedColumn100 = _index.StackedColumn100Chart;Chart.prototype.renderBar = _index.BarChart;Chart.prototype.renderStackedBar = _index.StackedBarChart;Chart.prototype.renderStackedBar100 = _index.StackedBar100Chart;Chart.prototype.renderArea = _index.AreaChart;Chart.prototype.renderSplineArea = _index.SplineAreaChart;Chart.prototype.renderStepArea = _index.StepAreaChart;Chart.prototype.renderStackedArea = _index.StackedAreaChart;Chart.prototype.renderStackedArea100 = _index.StackedArea100Chart;Chart.prototype.renderBubble = _index.BubbleChart;Chart.prototype.renderScatter = _index.ScatterChart;Chart.prototype.renderCandlestick = _index.CandlestickChart;Chart.prototype.renderRangeColumn = _index.RangeColumnChart;Chart.prototype.renderRangeBar = _index.RangeBarChart;Chart.prototype.renderRangeArea = _index.RangeAreaChart;Chart.prototype.renderRangeSplineArea = _index.RangeSplineAreaChart;Chart.prototype.renderPie = _index.PieChart;exports.default = Chart; - -},{"../charts/index":6,"../constants/options":23,"../constants/themes":24,"../core/axis":26,"../core/culture_info":29,"../core/legend":33,"../core/title":35,"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39,"./animator":25,"./canvasjs":27,"./data_series":30,"./event_manager":31,"./layout_manager":32,"./text_block":34,"./tooltip":36}],29:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { - value: true + value: true }); var _canvasjs = require('./canvasjs'); var _canvasjs2 = _interopRequireDefault(_canvasjs); -var _utils = require('../helpers/utils'); +var _animator = require('./animator'); -var _culture = require('../constants/culture'); +var _animator2 = _interopRequireDefault(_animator); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _data_series = require('./data_series'); -function CultureInfo(culture) { +var _data_series2 = _interopRequireDefault(_data_series); - var cultureInfo; +var _text_block = require('./text_block'); - if (culture && _culture.cultures[culture]) cultureInfo = _culture.cultures[culture]; +var _text_block2 = _interopRequireDefault(_text_block); - CultureInfo.base.constructor.call(this, "CultureInfo", cultureInfo); -} +var _render = require('../helpers/render'); -(0, _utils.extend)(CultureInfo, _canvasjs2.default); +var _render2 = _interopRequireDefault(_render); -exports.default = CultureInfo; +var _layout_manager = require('./layout_manager'); -},{"../constants/culture":22,"../helpers/utils":39,"./canvasjs":27}],30:[function(require,module,exports){ -'use strict'; +var _layout_manager2 = _interopRequireDefault(_layout_manager); -Object.defineProperty(exports, "__esModule", { - value: true -}); +var _event_manager = require('./event_manager'); -var _canvasjs = require('./canvasjs'); +var _event_manager2 = _interopRequireDefault(_event_manager); -var _canvasjs2 = _interopRequireDefault(_canvasjs); +var _tooltip = require('./tooltip'); -var _utils = require('../helpers/utils'); +var _tooltip2 = _interopRequireDefault(_tooltip); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _culture_info = require('../core/culture_info'); -function DataSeries(chart, options, theme, index, id) { - DataSeries.base.constructor.call(this, "DataSeries", options, theme); +var _culture_info2 = _interopRequireDefault(_culture_info); - this.chart = chart; - this.canvas = chart.canvas; - this._ctx = chart.canvas.ctx; - this.index = index; - this.noDataPointsInPlotArea = 0; - //this.maxWidthInX = 0; - this.id = id; - this.chart._eventManager.objectMap[id] = { - id: id, objectType: "dataSeries", dataSeriesIndex: index - }; - this.dataPointIds = []; - this.plotUnit = []; +var _axis = require('../core/axis'); - this.axisX = null; - this.axisY = null; +var _axis2 = _interopRequireDefault(_axis); - if (this.fillOpacity === null) { - if (this.type.match(/area/i)) this.fillOpacity = .7;else this.fillOpacity = 1; - } +var _title = require('../core/title'); - this.axisPlacement = this.getDefaultAxisPlacement(); +var _title2 = _interopRequireDefault(_title); - if (typeof this._options.indexLabelFontSize === "undefined") { +var _legend = require('../core/legend'); - this.indexLabelFontSize = this.chart.getAutoFontSize(this.indexLabelFontSize); - } -} +var _legend2 = _interopRequireDefault(_legend); -(0, _utils.extend)(DataSeries, _canvasjs2.default); +var _animator3 = require('../helpers/animator'); -//Static Method that returns the axisPlacement for a given ChartType. Returns one of "normal", "xySwapped", "none" -DataSeries.prototype.getDefaultAxisPlacement = function () { +var _animator4 = _interopRequireDefault(_animator3); - //if (!this.visible) - // return "none"; +var _themes = require('../constants/themes'); - //type = this.type.toLowerCase(); - var type = this.type; +var _options = require('../constants/options'); - if (type === "column" || type === "line" || type === "stepLine" || type === "spline" || type === "area" || type === "stepArea" || type === "splineArea" || type === "stackedColumn" || type === "stackedLine" || type === "bubble" || type === "scatter" || type === "stackedArea" || type === "stackedColumn100" || type === "stackedLine100" || type === "stackedArea100" || type === "candlestick" || type === "ohlc" || type === "rangeColumn" || type === "rangeArea" || type === "rangeSplineArea") { - return "normal"; - } else if (type === "bar" || type === "stackedBar" || type === "stackedBar100" || type === "rangeBar") { +var _utils = require('../helpers/utils'); - return "xySwapped"; - } else if (type === "pie" || type === "doughnut" || type === "funnel") { - return "none"; - } else { - window.console.log("Unknown Chart Type: " + type); - return null; - } -}; +var _index = require('../charts/index'); -DataSeries.getDefaultLegendMarker = function (type) { +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - //type = type.toLowerCase(); +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +// import {inherits} from 'util'; - if (type === "column" || type === "stackedColumn" || type === "stackedLine" || type === "bar" || type === "stackedBar" || type === "stackedBar100" || type === "bubble" || type === "scatter" || type === "stackedColumn100" || type === "stackedLine100" || type === "stepArea" || type === "candlestick" || type === "ohlc" || type === "rangeColumn" || type === "rangeBar" || type === "rangeArea" || type === "rangeSplineArea") { - return "square"; - } else if (type === "line" || type === "stepLine" || type === "spline" || type === "pie" || type === "doughnut" || type === "funnel") { - return "circle"; - } else if (type === "area" || type === "splineArea" || type === "stackedArea" || type === "stackedArea100") { - return "triangle"; - } else { - window.console.log("Unknown Chart Type: " + type); - return null; - } -}; +function Chart(containerId, options, publicChartReference) { -//Finds dataPoint with the given x value. If findClosest is set, finds dataPoint with closest x value. -//Returns searchResult object if found, else returns null -DataSeries.prototype.getDataPointAtX = function (x, findClosest) { + this._publicChartReference = publicChartReference; - if (!this.dataPoints || this.dataPoints.length === 0) return null; + options = options || {}; - var searchResult = { - dataPoint: null, distance: Infinity, index: NaN - }; - var dataPoint = null; + Chart.base.constructor.call(this, "Chart", options, options.theme ? options.theme : "theme1"); - var j = 0; - var i = 0; - var direction = 1; // +1 for foward and -1 for backward. + var _this = this; - var minimumXDistance = Infinity; - var forwardMissCount = 0, - backwardMissCount = 0; - var maxMissCount = 1000; - var searchStartIndex = 0; + this._containerId = containerId; + this._objectsInitialized = false; + this.ctx = null; + this.overlaidCanvasCtx = null; + this._indexLabels = []; + this._panTimerId = 0; + this._lastTouchEventType = ""; + this._lastTouchData = null; + this.isAnimating = false; + this.renderCount = 0; + this.animatedRender = false; + this.disableToolTip = false; + + this.panEnabled = false; + this._defaultCursor = "default"; + this.plotArea = { canvas: null, ctx: null, x1: 0, y1: 0, x2: 0, y2: 0, width: 0, height: 0 }; + this._dataInRenderedOrder = []; + + this._container = typeof this._containerId === "string" ? document.getElementById(this._containerId) : this._containerId; + + if (!this._container) { + if (window.console) window.console.log("CanvasJS Error: Chart Container with id \"" + this._containerId + "\" was not found"); + return; + } - if (this.chart.plotInfo.axisPlacement !== "none") { + this._container.innerHTML = ""; - //var xRange = (this.dataPoints[this.dataPoints.length - 1].x - this.dataPoints[0].x); + var width = 0; + var height = 0; - //if (xRange > 0) - // searchStartIndex = ((this.dataPoints.length - 1) / xRange * (x - this.dataPoints[0].x)) >> 0; - //else - // searchStartIndex = 0; + if (this._options.width) width = this.width;else width = this._container.clientWidth > 0 ? this._container.clientWidth : this.width; - var xRange = this.dataPoints[this.dataPoints.length - 1].x - this.dataPoints[0].x; + if (this._options.height) height = this.height;else height = this._container.clientHeight > 0 ? this._container.clientHeight : this.height; - if (xRange > 0) searchStartIndex = Math.min(Math.max((this.dataPoints.length - 1) / xRange * (x - this.dataPoints[0].x) >> 0, 0), this.dataPoints.length);else searchStartIndex = 0; + this.width = width; + this.height = height; - //searchStartIndex = ((this.dataPoints[this.dataPoints.length - 1].x - this.dataPoints[0].x) / this.dataPoints.length * (x - this.dataPoints[0].x)) >> 0; - } + this.x1 = this.y1 = 0; + this.x2 = this.width; + this.y2 = this.height; - while (true) { + this._selectedColorSet = typeof _themes.colorSets[this.colorSet] !== "undefined" ? _themes.colorSets[this.colorSet] : _themes.colorSets["colorSet1"]; - i = direction > 0 ? searchStartIndex + j : searchStartIndex - j; + this._canvasJSContainer = document.createElement("div"); + this._canvasJSContainer.setAttribute("class", "canvasjs-chart-container"); - if (i >= 0 && i < this.dataPoints.length) { + this._canvasJSContainer.style.position = "relative"; + this._canvasJSContainer.style.textAlign = "left"; + this._canvasJSContainer.style.cursor = "auto"; - dataPoint = this.dataPoints[i]; + if (!_utils.isCanvasSupported) { + this._canvasJSContainer.style.height = "0px"; //In IE6 toolTip doesn't show at proper position if not set. + } + this._container.appendChild(this._canvasJSContainer); - var distance = Math.abs(dataPoint.x - x); + this.canvas = (0, _utils.createCanvas)(width, height); - if (distance < searchResult.distance) { - searchResult.dataPoint = dataPoint; - searchResult.distance = distance; - searchResult.index = i; - } + this.canvas.style.position = "absolute"; + if (this.canvas.getContext) { + //try { + // this.canvas.style.background = this.backgroundColor; + //} catch (e) { } + this._canvasJSContainer.appendChild(this.canvas); + this.ctx = this.canvas.getContext("2d"); + this.ctx.textBaseline = "top"; + (0, _utils.extendCtx)(this.ctx); + } else return; - var xDistance = Math.abs(dataPoint.x - x); - if (xDistance <= minimumXDistance) minimumXDistance = xDistance;else { - if (direction > 0) forwardMissCount++;else backwardMissCount++; - } + //this.canvas.style.cursor = "pointer"; - if (forwardMissCount > maxMissCount && backwardMissCount > maxMissCount) break; - } else if (searchStartIndex - j < 0 && searchStartIndex + j >= this.dataPoints.length) break; + if (!_utils.isCanvasSupported) { + this.plotArea.canvas = (0, _utils.createCanvas)(width, height); + this.plotArea.canvas.style.position = "absolute"; + this.plotArea.canvas.setAttribute("class", "plotAreaCanvas"); + this._canvasJSContainer.appendChild(this.plotArea.canvas); - if (direction === -1) { - j++; - direction = 1; - } else direction = -1; - } + this.plotArea.ctx = this.plotArea.canvas.getContext("2d"); + } else { + this.plotArea.ctx = this.ctx; + } - if (!findClosest && searchResult.dataPoint.x === x) return searchResult;else if (findClosest && searchResult.dataPoint !== null) return searchResult;else return null; + this.overlaidCanvas = (0, _utils.createCanvas)(width, height); + this.overlaidCanvas.style.position = "absolute"; + this._canvasJSContainer.appendChild(this.overlaidCanvas); + this.overlaidCanvasCtx = this.overlaidCanvas.getContext("2d"); + this.overlaidCanvasCtx.textBaseline = "top"; + + this._eventManager = new _event_manager2.default(this); + + (0, _utils.addEvent)(window, "resize", function () { + //this._container.addEventListener("DOMSubtreeModified", function () { + + if (_this._updateSize()) _this.render(); + }); + + this._toolBar = document.createElement("div"); + this._toolBar.setAttribute("class", "canvasjs-chart-toolbar"); + this._toolBar.style.cssText = "position: absolute; right: 1px; top: 1px;"; + this._canvasJSContainer.appendChild(this._toolBar); + + this.bounds = { x1: 0, y1: 0, x2: this.width, y2: this.height }; + + (0, _utils.addEvent)(this.overlaidCanvas, 'click', function (e) { + _this._mouseEventHandler(e); + }); + + (0, _utils.addEvent)(this.overlaidCanvas, 'mousemove', function (e) { + _this._mouseEventHandler(e); + }); + + (0, _utils.addEvent)(this.overlaidCanvas, 'mouseup', function (e) { + _this._mouseEventHandler(e); + }); + + (0, _utils.addEvent)(this.overlaidCanvas, 'mousedown', function (e) { + _this._mouseEventHandler(e); + (0, _utils.hide)(_this._dropdownMenu); + }); + + (0, _utils.addEvent)(this.overlaidCanvas, 'mouseout', function (e) { + _this._mouseEventHandler(e); + }); + + (0, _utils.addEvent)(this.overlaidCanvas, window.navigator.msPointerEnabled ? "MSPointerDown" : "touchstart", function (e) { + _this._touchEventHandler(e); + }); + + (0, _utils.addEvent)(this.overlaidCanvas, window.navigator.msPointerEnabled ? "MSPointerMove" : 'touchmove', function (e) { + _this._touchEventHandler(e); + }); + + (0, _utils.addEvent)(this.overlaidCanvas, window.navigator.msPointerEnabled ? "MSPointerUp" : 'touchend', function (e) { + _this._touchEventHandler(e); + }); + + (0, _utils.addEvent)(this.overlaidCanvas, window.navigator.msPointerEnabled ? "MSPointerCancel" : 'touchcancel', function (e) { + _this._touchEventHandler(e); + }); + + if (!this._creditLink) { + + this._creditLink = document.createElement("a"); + this._creditLink.setAttribute("class", "canvasjs-chart-credit"); + this._creditLink.setAttribute("style", "outline:none;margin:0px;position:absolute;right:3px;top:" + (this.height - 14) + "px;color:dimgrey;text-decoration:none;font-size:10px;font-family:Lucida Grande, Lucida Sans Unicode, Arial, sans-serif"); + + this._creditLink.setAttribute("tabIndex", -1); + + this._creditLink.setAttribute("target", "_blank"); + } + + this._toolTip = new _tooltip2.default(this, this._options.toolTip, this.theme); + + this.data = null; + this.axisX = null; + this.axisY = null; + this.axisY2 = null; + + this.sessionVariables = { + axisX: {}, + axisY: {}, + axisY2: {} + }; +} + +(0, _utils.extend)(Chart, _canvasjs2.default); + +//Update Chart Properties +Chart.prototype._updateOptions = function () { + + var _this = this; + + this.updateOption("width"); + this.updateOption("height"); + this.updateOption("dataPointMaxWidth"); + this.updateOption("interactivityEnabled"); + this.updateOption("theme"); + + if (this.updateOption("colorSet")) this._selectedColorSet = typeof _themes.colorSets[this.colorSet] !== "undefined" ? _themes.colorSets[this.colorSet] : _themes.colorSets["colorSet1"]; + + this.updateOption("backgroundColor"); + if (!this.backgroundColor) this.backgroundColor = "rgba(0,0,0,0)"; + + this.updateOption("culture"); + this._cultureInfo = new _culture_info2.default(this._options.culture); + + this.updateOption("animationEnabled"); + this.animationEnabled = this.animationEnabled && _utils.isCanvasSupported; + this.updateOption("animationDuration"); + + this.updateOption("rangeChanging"); + this.updateOption("rangeChanged"); + + //Need to check this._options.zoomEnabled because this.zoomEnabled is used internally to keep track of state - and hence changes. + if (this._options.zoomEnabled) { + + if (!this._zoomButton) { + + (0, _utils.hide)(this._zoomButton = document.createElement("button")); + + setButtonState(this, this._zoomButton, "pan"); + + this._toolBar.appendChild(this._zoomButton); + (0, _utils.addEvent)(this._zoomButton, "click", function () { + if (_this.zoomEnabled) { + _this.zoomEnabled = false; + _this.panEnabled = true; + + setButtonState(_this, _this._zoomButton, "zoom"); + } else { + _this.zoomEnabled = true; + _this.panEnabled = false; + + setButtonState(_this, _this._zoomButton, "pan"); + } + + _this.render(); + }); + } + + if (!this._resetButton) { + (0, _utils.hide)(this._resetButton = document.createElement("button")); + setButtonState(this, this._resetButton, "reset"); + this._toolBar.appendChild(this._resetButton); + + (0, _utils.addEvent)(this._resetButton, "click", function () { + + _this._toolTip.hide(); + + if (_this.zoomEnabled || _this.panEnabled) { + _this.zoomEnabled = true; + _this.panEnabled = false; + setButtonState(_this, _this._zoomButton, "pan"); + + _this._defaultCursor = "default"; + _this.overlaidCanvas.style.cursor = _this._defaultCursor; + } else { + _this.zoomEnabled = false; + _this.panEnabled = false; + } + //Reset axisX + if (_this.sessionVariables.axisX) { + _this.sessionVariables.axisX.newViewportMinimum = null; + _this.sessionVariables.axisX.newViewportMaximum = null; + } + + //Reset axisY + if (_this.sessionVariables.axisY) { + _this.sessionVariables.axisY.newViewportMinimum = null; + _this.sessionVariables.axisY.newViewportMaximum = null; + } + + //Reset axisY2 + if (_this.sessionVariables.axisY2) { + _this.sessionVariables.axisY2.newViewportMinimum = null; + _this.sessionVariables.axisY2.newViewportMaximum = null; + } + + _this.resetOverlayedCanvas(); + + (0, _utils.hide)(_this._zoomButton, _this._resetButton); + + _this._dispatchRangeEvent("rangeChanging", "reset"); + _this.render(); + _this._dispatchRangeEvent("rangeChanged", "reset"); + }); + + this.overlaidCanvas.style.cursor = _this._defaultCursor; + } + + if (!this.zoomEnabled && !this.panEnabled) { + if (!this._zoomButton) { + this.zoomEnabled = true; + this.panEnabled = false; + } else { + + if (_this._zoomButton.getAttribute("state") === _this._cultureInfo.zoomText) { + this.panEnabled = true; + this.zoomEnabled = false; + } else { + this.zoomEnabled = true; + this.panEnabled = false; + } + + (0, _utils.show)(_this._zoomButton, _this._resetButton); + } + } + } else { + this.zoomEnabled = false; + this.panEnabled = false; + } + + if (this._menuButton) { + if (this.exportEnabled) (0, _utils.show)(this._menuButton);else (0, _utils.hide)(this._menuButton); + } else if (this.exportEnabled && _utils.isCanvasSupported) { + this._menuButton = document.createElement("button"); + setButtonState(this, this._menuButton, "menu"); + this._toolBar.appendChild(this._menuButton); + + (0, _utils.addEvent)(this._menuButton, "click", function () { + if (_this._dropdownMenu.style.display === "none") { + + if (_this._dropDownCloseTime && new Date().getTime() - _this._dropDownCloseTime.getTime() <= 500) return; + + _this._dropdownMenu.style.display = "block"; + _this._menuButton.blur(); + _this._dropdownMenu.focus(); + } + }, true); + } + + if (!this._dropdownMenu && this.exportEnabled && _utils.isCanvasSupported) { + this._dropdownMenu = document.createElement("div"); + this._dropdownMenu.setAttribute("tabindex", -1); + this._dropdownMenu.style.cssText = "position: absolute; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer;right: 1px;top: 25px;min-width: 120px;outline: 0;border: 1px solid silver;font-size: 14px;font-family: Calibri, Verdana, sans-serif;padding: 5px 0px 5px 0px;text-align: left;background-color: #fff;line-height: 20px;box-shadow: 2px 2px 10px #888888;"; + _this._dropdownMenu.style.display = "none"; + this._toolBar.appendChild(this._dropdownMenu); + + (0, _utils.addEvent)(this._dropdownMenu, "blur", function () { + (0, _utils.hide)(_this._dropdownMenu); + + _this._dropDownCloseTime = new Date(); + }, true); + + var exportOption = document.createElement("div"); + exportOption.style.cssText = "padding: 2px 15px 2px 10px"; + exportOption.innerHTML = this._cultureInfo.saveJPGText; + this._dropdownMenu.appendChild(exportOption); + + (0, _utils.addEvent)(exportOption, "mouseover", function () { + this.style.backgroundColor = "#EEEEEE"; + }, true); + + (0, _utils.addEvent)(exportOption, "mouseout", function () { + this.style.backgroundColor = "transparent"; + }, true); + + (0, _utils.addEvent)(exportOption, "click", function () { + exportCanvas(_this.canvas, "jpg", _this.exportFileName); + (0, _utils.hide)(_this._dropdownMenu); + }, true); + + var exportOption = document.createElement("div"); + exportOption.style.cssText = "padding: 2px 15px 2px 10px"; + exportOption.innerHTML = this._cultureInfo.savePNGText; + this._dropdownMenu.appendChild(exportOption); + + (0, _utils.addEvent)(exportOption, "mouseover", function () { + this.style.backgroundColor = "#EEEEEE"; + }, true); + + (0, _utils.addEvent)(exportOption, "mouseout", function () { + this.style.backgroundColor = "transparent"; + }, true); + + (0, _utils.addEvent)(exportOption, "click", function () { + exportCanvas(_this.canvas, "png", _this.exportFileName); + (0, _utils.hide)(_this._dropdownMenu); + }, true); + } + + if (this._toolBar.style.display !== "none" && this._zoomButton) { + + this.panEnabled ? setButtonState(_this, _this._zoomButton, "zoom") : setButtonState(_this, _this._zoomButton, "pan"); + + if (_this._resetButton.getAttribute("state") !== _this._cultureInfo.resetText) setButtonState(_this, _this._resetButton, "reset"); + } + + if (typeof _options.defaultOptions.Chart.creditHref === "undefined") { + this.creditHref = "http://canvasjs.com/"; + this.creditText = "CanvasJS.com"; + } else { + var creditTextChanged = this.updateOption("creditText"); + var creditHrefChanged = this.updateOption("creditHref"); + } + + if (this.renderCount === 0 || creditTextChanged || creditHrefChanged) { + this._creditLink.setAttribute("href", this.creditHref); + this._creditLink.innerHTML = this.creditText; + } + + if (this.creditHref && this.creditText) { + if (!this._creditLink.parentElement) this._canvasJSContainer.appendChild(this._creditLink); + } else if (this._creditLink.parentElement) this._canvasJSContainer.removeChild(this._creditLink); + + if (this._options.toolTip && this._toolTip._options !== this._options.toolTip) this._toolTip._options = this._options.toolTip; + + for (var prop in this._toolTip._options) { + + if (this._toolTip._options.hasOwnProperty(prop)) { + this._toolTip.updateOption(prop); + } + } +}; + +Chart.prototype._updateSize = function () { + var width = 0; + var height = 0; + + if (this._options.width) width = this.width;else this.width = width = this._container.clientWidth > 0 ? this._container.clientWidth : this.width; + + if (this._options.height) height = this.height;else this.height = height = this._container.clientHeight > 0 ? this._container.clientHeight : this.height; + + if (this.canvas.width !== width * _utils.devicePixelBackingStoreRatio || this.canvas.height !== height * _utils.devicePixelBackingStoreRatio) { + (0, _utils.setCanvasSize)(this.canvas, width, height); + + (0, _utils.setCanvasSize)(this.overlaidCanvas, width, height); + (0, _utils.setCanvasSize)(this._eventManager.ghostCanvas, width, height); + + return true; + } + + return false; +}; + +// initialize chart objects +Chart.prototype._initialize = function () { + /// + ///Initializes Chart objects/state. Creates DataSeries class instance for each DataSeries provided by ther user. Sets the Axis Type based on the user data + /// + //this.width = this.width; + + if (!this._animator) this._animator = new _animator2.default(this);else { + this._animator.cancelAllAnimations(); + } + + this.removeAllEventListeners(); + + this.disableToolTip = false; + + this._axes = []; + + this.pieDoughnutClickHandler = null; + //this._touchCurrentCoordinates = null; + + if (this.animationRequestId) this.cancelRequestAnimFrame.call(window, this.animationRequestId); + + this._updateOptions(); + + this.animatedRender = _utils.isCanvasSupported && this.animationEnabled && this.renderCount === 0; + + this._updateSize(); + + //this._selectedColorSet = colorSets["colorSet2"]; + + //this.ctx.clearRect(0, 0, this.width, this.height); + this.clearCanvas(); + this.ctx.beginPath(); + + this.axisX = null; + this.axisY = null; + this.axisY2 = null; + this._indexLabels = []; + this._dataInRenderedOrder = []; + + this._events = []; + if (this._eventManager) this._eventManager.reset(); + + this.plotInfo = { + axisPlacement: null, + axisXValueType: null, + plotTypes: [] //array of plotType: {type:"", axisYType: "primary", dataSeriesIndexes:[]} + }; + + this.layoutManager = new _layout_manager2.default(0, 0, this.width, this.height, 2); + + if (this.plotArea.layoutManager) this.plotArea.layoutManager.reset(); + + this.data = []; + var dataSeriesIndex = 0; + + for (var series = 0; series < this._options.data.length; series++) { + //for (series in this._options.data) { + + dataSeriesIndex++; + + if (!(!this._options.data[series].type || Chart._supportedChartTypes.indexOf(this._options.data[series].type) >= 0)) continue; + + var dataSeries = new _data_series2.default(this, this._options.data[series], this.theme, dataSeriesIndex - 1, ++this._eventManager.lastObjectId); + if (dataSeries.name === null) dataSeries.name = "DataSeries " + dataSeriesIndex; + + if (dataSeries.color === null) { + if (this._options.data.length > 1) { + dataSeries._colorSet = [this._selectedColorSet[dataSeries.index % this._selectedColorSet.length]]; + dataSeries.color = this._selectedColorSet[dataSeries.index % this._selectedColorSet.length]; + } else { + if (dataSeries.type === "line" || dataSeries.type === "stepLine" || dataSeries.type === "spline" || dataSeries.type === "area" || dataSeries.type === "stepArea" || dataSeries.type === "splineArea" || dataSeries.type === "stackedArea" || dataSeries.type === "stackedArea100" || dataSeries.type === "rangeArea" || dataSeries.type === "rangeSplineArea" || dataSeries.type === "candlestick" || dataSeries.type === "ohlc") { + dataSeries._colorSet = [this._selectedColorSet[0]]; + } else dataSeries._colorSet = this._selectedColorSet; + } + } else { + dataSeries._colorSet = [dataSeries.color]; + } + + if (dataSeries.markerSize === null) { + if ((dataSeries.type === "line" || dataSeries.type === "stepLine" || dataSeries.type === "spline") && dataSeries.dataPoints && dataSeries.dataPoints.length < this.width / 16 || dataSeries.type === "scatter") { + //if (dataSeries.type === "line") { + dataSeries.markerSize = 8; + } + } + + if ((dataSeries.type === "bubble" || dataSeries.type === "scatter") && dataSeries.dataPoints) { + dataSeries.dataPoints.sort(_utils.compareDataPointX); + } + + //if (dataSeries.markerBorderThickness === null && dataSeries.type === "scatter") { + // dataSeries.markerBorderThickness = 2; + //} + + //if (dataSeries.markerType === null) { + // if (dataSeries.type === "line" & dataSeries.dataPoints.length < 500) { + // dataSeries.markerType = "circle"; + // } + //} + + this.data.push(dataSeries); + + var seriesAxisPlacement = dataSeries.axisPlacement; + + //if (isDebugMode && window.console) + // window.console.log(dataSeries.type); + + var errorMessage; + + if (seriesAxisPlacement === "normal") { + + if (this.plotInfo.axisPlacement === "xySwapped") { + errorMessage = "You cannot combine \"" + dataSeries.type + "\" with bar chart"; + } else if (this.plotInfo.axisPlacement === "none") { + errorMessage = "You cannot combine \"" + dataSeries.type + "\" with pie chart"; + } else if (this.plotInfo.axisPlacement === null) this.plotInfo.axisPlacement = "normal"; + } else if (seriesAxisPlacement === "xySwapped") { + + if (this.plotInfo.axisPlacement === "normal") { + errorMessage = "You cannot combine \"" + dataSeries.type + "\" with line, area, column or pie chart"; + } else if (this.plotInfo.axisPlacement === "none") { + errorMessage = "You cannot combine \"" + dataSeries.type + "\" with pie chart"; + } else if (this.plotInfo.axisPlacement === null) this.plotInfo.axisPlacement = "xySwapped"; + } else if (seriesAxisPlacement == "none") { + + if (this.plotInfo.axisPlacement === "normal") { + errorMessage = "You cannot combine \"" + dataSeries.type + "\" with line, area, column or bar chart"; + } else if (this.plotInfo.axisPlacement === "xySwapped") { + errorMessage = "You cannot combine \"" + dataSeries.type + "\" with bar chart"; + } else if (this.plotInfo.axisPlacement === null) this.plotInfo.axisPlacement = "none"; + } + + if (errorMessage && window.console) { + window.console.log(errorMessage); + return; + } + } + + //if (isDebugMode && window.console) { + // window.console.log("xMin: " + this.plotInfo.viewPortXMin + "; xMax: " + this.plotInfo.viewPortXMax + "; yMin: " + this.plotInfo.yMin + "; yMax: " + this.plotInfo.yMax); + //} + + this._objectsInitialized = true; +}; + +//indexOf is not supported in IE8- +Chart._supportedChartTypes = (0, _utils.addArrayIndexOf)(["line", "stepLine", "spline", "column", "area", "stepArea", "splineArea", "bar", "bubble", "scatter", "stackedColumn", "stackedColumn100", "stackedBar", "stackedBar100", "stackedArea", "stackedArea100", "candlestick", "ohlc", "rangeColumn", "rangeBar", "rangeArea", "rangeSplineArea", "pie", "doughnut", "funnel"]); + +Chart.prototype.render = function (options) { + + if (options) this._options = options; + + this._initialize(); + var plotAreaElements = []; //Elements to be rendered inside the plotArea + + //Create Primary and Secondary axis and assign them to the series + for (var i = 0; i < this.data.length; i++) { + + if (this.plotInfo.axisPlacement === "normal" || this.plotInfo.axisPlacement === "xySwapped") { + if (!this.data[i].axisYType || this.data[i].axisYType === "primary") { + if (!this.axisY) { + + if (this.plotInfo.axisPlacement === "normal") { + this._axes.push(this.axisY = new _axis2.default(this, this._options.axisY, "axisY", "left")); + } else if (this.plotInfo.axisPlacement === "xySwapped") { + this._axes.push(this.axisY = new _axis2.default(this, this._options.axisY, "axisY", "bottom")); + } + } + this.data[i].axisY = this.axisY; + } else if (this.data[i].axisYType === "secondary") { + if (!this.axisY2) { + if (this.plotInfo.axisPlacement === "normal") { + this._axes.push(this.axisY2 = new _axis2.default(this, this._options.axisY2, "axisY", "right")); + } else if (this.plotInfo.axisPlacement === "xySwapped") { + this._axes.push(this.axisY2 = new _axis2.default(this, this._options.axisY2, "axisY", "top")); + } + } + this.data[i].axisY = this.axisY2; + } + + if (!this.axisX) { + if (this.plotInfo.axisPlacement === "normal") { + this._axes.push(this.axisX = new _axis2.default(this, this._options.axisX, "axisX", "bottom")); + } else if (this.plotInfo.axisPlacement === "xySwapped") { + this._axes.push(this.axisX = new _axis2.default(this, this._options.axisX, "axisX", "left")); + } + } + + this.data[i].axisX = this.axisX; + } + } + + //If Both Primary and Secondary axis are present, disable gridlines for one of them unless the user has set value for both + if (this.axisY && this.axisY2) { + if (this.axisY.gridThickness > 0 && typeof this.axisY2._options.gridThickness === "undefined") this.axisY2.gridThickness = 0;else if (this.axisY2.gridThickness > 0 && typeof this.axisY._options.gridThickness === "undefined") this.axisY.gridThickness = 0; + } + + //Show toolBar when viewportMinimum/viewportMaximum are set + var showToolBar = false; + if (this._axes.length > 0 && (this.zoomEnabled || this.panEnabled)) { + for (var i = 0; i < this._axes.length; i++) { + if (this._axes[i].viewportMinimum !== null || this._axes[i].viewportMaximum !== null) { + showToolBar = true; + break; + } + } + } + + if (showToolBar) { + (0, _utils.show)(this._zoomButton, this._resetButton); + } else { + (0, _utils.hide)(this._zoomButton, this._resetButton); + } + + this._processData(); // Categorises the dataSeries and calculates min, max and other values + + if (this._options.title) { + this._title = new _title2.default(this, this._options.title); + + if (!this._title.dockInsidePlotArea) this._title.render();else plotAreaElements.push(this._title); + } + + if (this._options.subtitles) { + for (var i = 0; i < this._options.subtitles.length; i++) { + + this.subtitles = []; + + var subtitle = new Subtitle(this, this._options.subtitles[i]); + this.subtitles.push(subtitle); + + if (!subtitle.dockInsidePlotArea) subtitle.render();else plotAreaElements.push(subtitle); + } + } + + this.legend = new _legend2.default(this, this._options.legend, this.theme); + for (var i = 0; i < this.data.length; i++) { + if (this.data[i].showInLegend || this.data[i].type === "pie" || this.data[i].type === "doughnut") { + this.legend.dataSeries.push(this.data[i]); + } + } + + if (!this.legend.dockInsidePlotArea) this.legend.render();else plotAreaElements.push(this.legend); + + //TBI: Revisit and check if the functionality is enough. + if (this.plotInfo.axisPlacement === "normal" || this.plotInfo.axisPlacement === "xySwapped") { + + //var freeSpace = this.layoutManager.getFreeSpace(); + + _axis2.default.setLayoutAndRender(this.axisX, this.axisY, this.axisY2, this.plotInfo.axisPlacement, this.layoutManager.getFreeSpace()); + } else if (this.plotInfo.axisPlacement === "none") { + //In case of charts with axis this method is called inside setLayoutAndRender + this.preparePlotArea(); + } else { + return; + } + + var index = 0; + for (index in plotAreaElements) { + if (plotAreaElements.hasOwnProperty(index)) plotAreaElements[index].render(); + } + + var animations = []; + if (this.animatedRender) { + var initialState = (0, _utils.createCanvas)(this.width, this.height); + var initialStateCtx = initialState.getContext("2d"); + initialStateCtx.drawImage(this.canvas, 0, 0, this.width, this.height); + } + + for (var i = 0; i < this.plotInfo.plotTypes.length; i++) { + var plotType = this.plotInfo.plotTypes[i]; + + for (var j = 0; j < plotType.plotUnits.length; j++) { + + var plotUnit = plotType.plotUnits[j]; + var animationInfo = null; + + plotUnit.targetCanvas = null; //In case chart updates before the animation is complete, previous canvases need to be removed + + if (this.animatedRender) { + plotUnit.targetCanvas = (0, _utils.createCanvas)(this.width, this.height); + plotUnit.targetCanvasCtx = plotUnit.targetCanvas.getContext("2d"); + } + + if (plotUnit.type === "line") animationInfo = this.renderLine(plotUnit);else if (plotUnit.type === "stepLine") animationInfo = this.renderStepLine(plotUnit);else if (plotUnit.type === "spline") animationInfo = this.renderSpline(plotUnit);else if (plotUnit.type === "column") animationInfo = this.renderColumn(plotUnit);else if (plotUnit.type === "bar") animationInfo = this.renderBar(plotUnit);else if (plotUnit.type === "area") animationInfo = this.renderArea(plotUnit);else if (plotUnit.type === "stepArea") animationInfo = this.renderStepArea(plotUnit);else if (plotUnit.type === "splineArea") animationInfo = this.renderSplineArea(plotUnit);else if (plotUnit.type === "stackedColumn") animationInfo = this.renderStackedColumn(plotUnit);else if (plotUnit.type === "stackedColumn100") animationInfo = this.renderStackedColumn100(plotUnit);else if (plotUnit.type === "stackedBar") animationInfo = this.renderStackedBar(plotUnit);else if (plotUnit.type === "stackedBar100") animationInfo = this.renderStackedBar100(plotUnit);else if (plotUnit.type === "stackedArea") animationInfo = this.renderStackedArea(plotUnit);else if (plotUnit.type === "stackedArea100") animationInfo = this.renderStackedArea100(plotUnit);else if (plotUnit.type === "bubble") animationInfo = animationInfo = this.renderBubble(plotUnit);else if (plotUnit.type === "scatter") animationInfo = this.renderScatter(plotUnit);else if (plotUnit.type === "pie") this.renderPie(plotUnit);else if (plotUnit.type === "doughnut") this.renderPie(plotUnit);else if (plotUnit.type === "candlestick") animationInfo = this.renderCandlestick(plotUnit);else if (plotUnit.type === "ohlc") animationInfo = this.renderCandlestick(plotUnit);else if (plotUnit.type === "rangeColumn") animationInfo = this.renderRangeColumn(plotUnit);else if (plotUnit.type === "rangeBar") animationInfo = this.renderRangeBar(plotUnit);else if (plotUnit.type === "rangeArea") animationInfo = this.renderRangeArea(plotUnit);else if (plotUnit.type === "rangeSplineArea") animationInfo = this.renderRangeSplineArea(plotUnit); + + for (var k = 0; k < plotUnit.dataSeriesIndexes.length; k++) { + this._dataInRenderedOrder.push(this.data[plotUnit.dataSeriesIndexes[k]]); + } + + if (this.animatedRender && animationInfo) animations.push(animationInfo); + } + } + + if (this.animatedRender && this._indexLabels.length > 0) { + var indexLabelCanvas = (0, _utils.createCanvas)(this.width, this.height); + var indexLabelCanvasCtx = indexLabelCanvas.getContext("2d"); + animations.push(this.renderIndexLabels(indexLabelCanvasCtx)); + } + + var _this = this; + + if (animations.length > 0) { + //var animationCount = 0; + _this.disableToolTip = true; + _this._animator.animate(200, _this.animationDuration, function (fractionComplete) { + + //console.log(fractionComplete); + //animationCount++; + + _this.ctx.clearRect(0, 0, _this.width, _this.height); + + // _this.ctx.drawImage(initialState, 0, 0, _this.width * devicePixelBackingStoreRatio, _this.height * devicePixelBackingStoreRatio, 0, 0, _this.width, _this.height); + _this.ctx.drawImage(initialState, 0, 0, Math.floor(_this.width * _utils.devicePixelBackingStoreRatio), Math.floor(_this.height * _utils.devicePixelBackingStoreRatio), 0, 0, _this.width, _this.height); + + for (var l = 0; l < animations.length; l++) { + + animationInfo = animations[l]; + + if (fractionComplete < 1 && typeof animationInfo.startTimePercent !== "undefined") { + if (fractionComplete >= animationInfo.startTimePercent) { + //animationInfo.animationCallback(AnimationHelper.easing.linear(fractionComplete - animationInfo.startTimePercent, 0, 1, 1 - animationInfo.startTimePercent), animationInfo); + + animationInfo.animationCallback(animationInfo.easingFunction(fractionComplete - animationInfo.startTimePercent, 0, 1, 1 - animationInfo.startTimePercent), animationInfo); + } + } else { + + animationInfo.animationCallback(animationInfo.easingFunction(fractionComplete, 0, 1, 1), animationInfo); + } + } + + _this.dispatchEvent("dataAnimationIterationEnd", { + chart: _this + }); + }, function () { + + animations = []; + + var count = 0; + + //Delete all render target canvases used for animation. + for (var i = 0; i < _this.plotInfo.plotTypes.length; i++) { + var plotType = _this.plotInfo.plotTypes[i]; + + for (var j = 0; j < plotType.plotUnits.length; j++) { + var plotUnit = plotType.plotUnits[j]; + plotUnit.targetCanvas = null; + } + } + + initialState = null; + _this.disableToolTip = false; + //console.log("*********** Animation Complete - " + animationCount + " ***********"); + }); + } else { + if (_this._indexLabels.length > 0) _this.renderIndexLabels(); + + _this.dispatchEvent("dataAnimationIterationEnd", { + chart: _this + }); + } + + this.attachPlotAreaEventHandlers(); + + if (!this.zoomEnabled && !this.panEnabled && this._zoomButton && this._zoomButton.style.display !== "none") { + (0, _utils.hide)(this._zoomButton, this._resetButton); + } + + this._toolTip._updateToolTip(); + + this.renderCount++; + + //if (window.console) { + // window.console.log(new Date().getTime() - dt); + //} + + if (_options.isDebugMode) { + + var _this = this; + setTimeout(function () { + var ghostCanvasCopy = document.getElementById("ghostCanvasCopy"); + + if (ghostCanvasCopy) { + //console.log(ghostCanvasCopy.clientWidth); + (0, _utils.setCanvasSize)(ghostCanvasCopy, _this.width, _this.height); + var ghostCanvasCopyCtx = ghostCanvasCopy.getContext("2d"); + + //ghostCanvasCopyCtx.scale(1, 1); + //var imageData = this._eventManager.ghostCtx.getImageData(0, 0, this._container.clientWidth, this._container.clientHeight); + //this._eventManager.ghostCtx.drawImage(this._eventManager.ghostCanvas, 0, 0); + //this.ctx.drawImage(this._eventManager.ghostCanvas, 0, 0); + + ghostCanvasCopyCtx.drawImage(_this._eventManager.ghostCanvas, 0, 0); + //_this._canvasJSContainer.appendChild(_this._eventManager.ghostCanvas); + //_this.overlaidCanvasCtx.drawImage(_this._eventManager.ghostCanvas, 0, 0); + } + }, 2000); + } +}; + +Chart.prototype.attachPlotAreaEventHandlers = function () { + var _attachEvent; + + //this._toolBar.style.display = "inline"; + + this.attachEvent((_attachEvent = { + context: this, + chart: this, + mousedown: this._plotAreaMouseDown, + mouseup: this._plotAreaMouseUp, + mousemove: this._plotAreaMouseMove, + cursor: this.zoomEnabled ? "col-resize" : "move" + }, _defineProperty(_attachEvent, 'cursor', this.panEnabled ? "move" : "default"), _defineProperty(_attachEvent, 'capture', true), _defineProperty(_attachEvent, 'bounds', this.plotArea), _attachEvent)); +}; + +Chart.prototype.categoriseDataSeries = function () { + var dataSeries = ""; + + for (var i = 0; i < this.data.length; i++) { + dataSeries = this.data[i]; + if (!dataSeries.dataPoints || dataSeries.dataPoints.length === 0 || !dataSeries.visible) continue; + + if (Chart._supportedChartTypes.indexOf(dataSeries.type) >= 0) { + + var plotType = null; + var plotTypeExists = false; + + var plotUnit = null; + var plotUnitExists = false; + + for (var j = 0; j < this.plotInfo.plotTypes.length; j++) { + if (this.plotInfo.plotTypes[j].type === dataSeries.type) { + plotTypeExists = true; + var plotType = this.plotInfo.plotTypes[j]; + break; + } + } + + if (!plotTypeExists) { + plotType = { + type: dataSeries.type, + totalDataSeries: 0, + plotUnits: [] + }; + this.plotInfo.plotTypes.push(plotType); + } + + for (var j = 0; j < plotType.plotUnits.length; j++) { + if (plotType.plotUnits[j].axisYType === dataSeries.axisYType) { + plotUnitExists = true; + var plotUnit = plotType.plotUnits[j]; + break; + } + } + + if (!plotUnitExists) { + plotUnit = { + type: dataSeries.type, + previousDataSeriesCount: 0, //to be set next + index: plotType.plotUnits.length, + plotType: plotType, + axisYType: dataSeries.axisYType, + axisY: dataSeries.axisYType === "primary" ? this.axisY : this.axisY2, + axisX: this.axisX, + dataSeriesIndexes: [], //index of dataSeries + yTotals: [] + }; + plotType.plotUnits.push(plotUnit); + } + + plotType.totalDataSeries++; + + plotUnit.dataSeriesIndexes.push(i); + + dataSeries.plotUnit = plotUnit; + } + } + + for (var i = 0; i < this.plotInfo.plotTypes.length; i++) { + var plotType = this.plotInfo.plotTypes[i]; + var previousDataSeriesCount = 0; + + for (var j = 0; j < plotType.plotUnits.length; j++) { + + plotType.plotUnits[j].previousDataSeriesCount = previousDataSeriesCount; + + previousDataSeriesCount += plotType.plotUnits[j].dataSeriesIndexes.length; + } + } +}; + +Chart.prototype.assignIdToDataPoints = function () { + + for (var i = 0; i < this.data.length; i++) { + var dataSeries = this.data[i]; + + if (!dataSeries.dataPoints) continue; + + var length = dataSeries.dataPoints.length; + + for (var j = 0; j < length; j++) { + dataSeries.dataPointIds[j] = ++this._eventManager.lastObjectId; + } + } +}; + +Chart.prototype._processData = function () { + this.assignIdToDataPoints(); + this.categoriseDataSeries(); + + for (var i = 0; i < this.plotInfo.plotTypes.length; i++) { + var plotType = this.plotInfo.plotTypes[i]; + + for (var j = 0; j < plotType.plotUnits.length; j++) { + + var plotUnit = plotType.plotUnits[j]; + + if (plotUnit.type === "line" || plotUnit.type === "stepLine" || plotUnit.type === "spline" || plotUnit.type === "column" || plotUnit.type === "area" || plotUnit.type === "stepArea" || plotUnit.type === "splineArea" || plotUnit.type === "bar" || plotUnit.type === "bubble" || plotUnit.type === "scatter") this._processMultiseriesPlotUnit(plotUnit);else if (plotUnit.type === "stackedColumn" || plotUnit.type === "stackedBar" || plotUnit.type === "stackedArea") this._processStackedPlotUnit(plotUnit);else if (plotUnit.type === "stackedColumn100" || plotUnit.type === "stackedBar100" || plotUnit.type === "stackedArea100") this._processStacked100PlotUnit(plotUnit);else if (plotUnit.type === "candlestick" || plotUnit.type === "ohlc" || plotUnit.type === "rangeColumn" || plotUnit.type === "rangeBar" || plotUnit.type === "rangeArea" || plotUnit.type === "rangeSplineArea") this._processMultiYPlotUnit(plotUnit); + } + } +}; + +Chart.prototype._processMultiseriesPlotUnit = function (plotUnit) { + if (!plotUnit.dataSeriesIndexes || plotUnit.dataSeriesIndexes.length < 1) return; + + var axisYDataInfo = plotUnit.axisY.dataInfo; + var axisXDataInfo = plotUnit.axisX.dataInfo; + var dataPointX, dataPointY; + var isDateTime = false; + + for (var j = 0; j < plotUnit.dataSeriesIndexes.length; j++) { + var dataSeries = this.data[plotUnit.dataSeriesIndexes[j]]; + var i = 0; + var isFirstDPInViewPort = false; + var isLastDPInViewPort = false; + + if (dataSeries.axisPlacement === "normal" || dataSeries.axisPlacement === "xySwapped") { + + var plotAreaXMin = this.sessionVariables.axisX.newViewportMinimum ? this.sessionVariables.axisX.newViewportMinimum : this._options.axisX && this._options.axisX.viewportMinimum ? this._options.axisX.viewportMinimum : this._options.axisX && this._options.axisX.minimum ? this._options.axisX.minimum : -Infinity; + + var plotAreaXMax = this.sessionVariables.axisX.newViewportMaximum ? this.sessionVariables.axisX.newViewportMaximum : this._options.axisX && this._options.axisX.viewportMaximum ? this._options.axisX.viewportMaximum : this._options.axisX && this._options.axisX.maximum ? this._options.axisX.maximum : Infinity; + } + + if (dataSeries.dataPoints[i].x && dataSeries.dataPoints[i].x.getTime || dataSeries.xValueType === "dateTime") { + isDateTime = true; + } + + for (i = 0; i < dataSeries.dataPoints.length; i++) { + + if (typeof dataSeries.dataPoints[i].x === "undefined") { + dataSeries.dataPoints[i].x = i; + } + + if (dataSeries.dataPoints[i].x.getTime) { + isDateTime = true; + dataPointX = dataSeries.dataPoints[i].x.getTime(); //dataPointX is used so that getTime is called only once in case of dateTime values + } else dataPointX = dataSeries.dataPoints[i].x; + + dataPointY = dataSeries.dataPoints[i].y; + + if (dataPointX < axisXDataInfo.min) axisXDataInfo.min = dataPointX; + if (dataPointX > axisXDataInfo.max) axisXDataInfo.max = dataPointX; + + if (dataPointY < axisYDataInfo.min) axisYDataInfo.min = dataPointY; + + if (dataPointY > axisYDataInfo.max) axisYDataInfo.max = dataPointY; + + if (i > 0) { + var xDiff = dataPointX - dataSeries.dataPoints[i - 1].x; + xDiff < 0 && (xDiff = xDiff * -1); //If Condition shortcut + + if (axisXDataInfo.minDiff > xDiff && xDiff !== 0) { + axisXDataInfo.minDiff = xDiff; + } + + if (dataPointY !== null && dataSeries.dataPoints[i - 1].y !== null) { + var yDiff = dataPointY - dataSeries.dataPoints[i - 1].y; + yDiff < 0 && (yDiff = yDiff * -1); //If Condition shortcut + + if (axisYDataInfo.minDiff > yDiff && yDiff !== 0) { + axisYDataInfo.minDiff = yDiff; + } + } + } + + // This section makes sure that partially visible dataPoints are included in the begining + if (dataPointX < plotAreaXMin && !isFirstDPInViewPort) { + continue; + } else if (!isFirstDPInViewPort) { + isFirstDPInViewPort = true; + + if (i > 0) { + i -= 2; + continue; + } + } + + // This section makes sure that partially visible dataPoints are included at the end + if (dataPointX > plotAreaXMax && !isLastDPInViewPort) { + isLastDPInViewPort = true; + } else if (dataPointX > plotAreaXMax && isLastDPInViewPort) { + continue; + } + + if (dataSeries.dataPoints[i].label) plotUnit.axisX.labels[dataPointX] = dataSeries.dataPoints[i].label; + + if (dataPointX < axisXDataInfo.viewPortMin) axisXDataInfo.viewPortMin = dataPointX; + if (dataPointX > axisXDataInfo.viewPortMax) axisXDataInfo.viewPortMax = dataPointX; + + if (dataPointY === null) continue; + + if (dataPointY < axisYDataInfo.viewPortMin) axisYDataInfo.viewPortMin = dataPointY; + if (dataPointY > axisYDataInfo.viewPortMax) axisYDataInfo.viewPortMax = dataPointY; + } + + this.plotInfo.axisXValueType = dataSeries.xValueType = isDateTime ? "dateTime" : "number"; + } + + //this.dataPoints.sort(compareDataPointX); + //this.dataPoints.sort(function (dataPoint1, dataPoint2) { return dataPoint1.x - dataPoint2.x; }); +}; + +Chart.prototype._processStackedPlotUnit = function (plotUnit) { + + if (!plotUnit.dataSeriesIndexes || plotUnit.dataSeriesIndexes.length < 1) return; + + var axisYDataInfo = plotUnit.axisY.dataInfo; + var axisXDataInfo = plotUnit.axisX.dataInfo; + + var dataPointX, dataPointY; + var isDateTime = false; + + var dataPointYPositiveSums = []; + var dataPointYNegativeSums = []; + + for (var j = 0; j < plotUnit.dataSeriesIndexes.length; j++) { + var dataSeries = this.data[plotUnit.dataSeriesIndexes[j]]; + var i = 0; + var isFirstDPInViewPort = false; + var isLastDPInViewPort = false; + + if (dataSeries.axisPlacement === "normal" || dataSeries.axisPlacement === "xySwapped") { + + var plotAreaXMin = this.sessionVariables.axisX.newViewportMinimum ? this.sessionVariables.axisX.newViewportMinimum : this._options.axisX && this._options.axisX.viewportMinimum ? this._options.axisX.viewportMinimum : this._options.axisX && this._options.axisX.minimum ? this._options.axisX.minimum : -Infinity; + + var plotAreaXMax = this.sessionVariables.axisX.newViewportMaximum ? this.sessionVariables.axisX.newViewportMaximum : this._options.axisX && this._options.axisX.viewportMaximum ? this._options.axisX.viewportMaximum : this._options.axisX && this._options.axisX.maximum ? this._options.axisX.maximum : Infinity; + } + + if (dataSeries.dataPoints[i].x && dataSeries.dataPoints[i].x.getTime || dataSeries.xValueType === "dateTime") { + isDateTime = true; + } + + for (i = 0; i < dataSeries.dataPoints.length; i++) { + + // Requird when no x values are provided + if (typeof dataSeries.dataPoints[i].x === "undefined") { + dataSeries.dataPoints[i].x = i; + } + + if (dataSeries.dataPoints[i].x.getTime) { + isDateTime = true; + dataPointX = dataSeries.dataPoints[i].x.getTime(); //dataPointX is used so that getTime is called only once in case of dateTime values + } else dataPointX = dataSeries.dataPoints[i].x; + + dataPointY = dataSeries.dataPoints[i].y; + + if (dataPointX < axisXDataInfo.min) axisXDataInfo.min = dataPointX; + if (dataPointX > axisXDataInfo.max) axisXDataInfo.max = dataPointX; + + if (i > 0) { + var xDiff = dataPointX - dataSeries.dataPoints[i - 1].x; + xDiff < 0 && (xDiff = xDiff * -1); //If Condition shortcut + + if (axisXDataInfo.minDiff > xDiff && xDiff !== 0) { + axisXDataInfo.minDiff = xDiff; + } + + if (dataPointY !== null && dataSeries.dataPoints[i - 1].y !== null) { + var yDiff = dataPointY - dataSeries.dataPoints[i - 1].y; + yDiff < 0 && (yDiff = yDiff * -1); //If Condition shortcut + + if (axisYDataInfo.minDiff > yDiff && yDiff !== 0) { + axisYDataInfo.minDiff = yDiff; + } + } + } + + // This section makes sure that partially visible dataPoints are included in the begining + if (dataPointX < plotAreaXMin && !isFirstDPInViewPort) { + continue; + } else if (!isFirstDPInViewPort) { + isFirstDPInViewPort = true; + + if (i > 0) { + i -= 2; + continue; + } + } + + // This section makes sure that partially visible dataPoints are included at the end + if (dataPointX > plotAreaXMax && !isLastDPInViewPort) { + isLastDPInViewPort = true; + } else if (dataPointX > plotAreaXMax && isLastDPInViewPort) { + continue; + } + + if (dataSeries.dataPoints[i].label) plotUnit.axisX.labels[dataPointX] = dataSeries.dataPoints[i].label; + + if (dataPointX < axisXDataInfo.viewPortMin) axisXDataInfo.viewPortMin = dataPointX; + if (dataPointX > axisXDataInfo.viewPortMax) axisXDataInfo.viewPortMax = dataPointX; + + if (dataPointY === null) continue; + + plotUnit.yTotals[dataPointX] = (!plotUnit.yTotals[dataPointX] ? 0 : plotUnit.yTotals[dataPointX]) + Math.abs(dataPointY); + + if (dataPointY >= 0) { + if (dataPointYPositiveSums[dataPointX]) dataPointYPositiveSums[dataPointX] += dataPointY;else dataPointYPositiveSums[dataPointX] = dataPointY; + } else { + if (dataPointYNegativeSums[dataPointX]) dataPointYNegativeSums[dataPointX] += dataPointY;else dataPointYNegativeSums[dataPointX] = dataPointY; + } + } + + this.plotInfo.axisXValueType = dataSeries.xValueType = isDateTime ? "dateTime" : "number"; + } + + for (i in dataPointYPositiveSums) { + if (dataPointYPositiveSums.hasOwnProperty(i)) { + if (isNaN(i)) { + continue; + } + var ySum = dataPointYPositiveSums[i]; + + if (ySum < axisYDataInfo.min) axisYDataInfo.min = ySum; + + if (ySum > axisYDataInfo.max) axisYDataInfo.max = ySum; + + if (i < axisXDataInfo.viewPortMin || i > axisXDataInfo.viewPortMax) continue; + + if (ySum < axisYDataInfo.viewPortMin) axisYDataInfo.viewPortMin = ySum; + if (ySum > axisYDataInfo.viewPortMax) axisYDataInfo.viewPortMax = ySum; + } + } + + for (i in dataPointYNegativeSums) { + + if (dataPointYNegativeSums.hasOwnProperty(i)) { + if (isNaN(i)) { + continue; + } + + var ySum = dataPointYNegativeSums[i]; + + if (ySum < axisYDataInfo.min) axisYDataInfo.min = ySum; + + if (ySum > axisYDataInfo.max) axisYDataInfo.max = ySum; + + if (i < axisXDataInfo.viewPortMin || i > axisXDataInfo.viewPortMax) continue; + + if (ySum < axisYDataInfo.viewPortMin) axisYDataInfo.viewPortMin = ySum; + if (ySum > axisYDataInfo.viewPortMax) axisYDataInfo.viewPortMax = ySum; + } + } + + //this.dataPoints.sort(compareDataPointX); + //this.dataPoints.sort(function (dataPoint1, dataPoint2) { return dataPoint1.x - dataPoint2.x; }); + + //window.console.log("viewPortYMin: " + plotInfo.viewPortYMin + "; viewPortYMax: " + plotInfo.viewPortYMax); +}; + +Chart.prototype._processStacked100PlotUnit = function (plotUnit) { + if (!plotUnit.dataSeriesIndexes || plotUnit.dataSeriesIndexes.length < 1) return; + + var axisYDataInfo = plotUnit.axisY.dataInfo; + var axisXDataInfo = plotUnit.axisX.dataInfo; + + var dataPointX, dataPointY; + var isDateTime = false; + var containsPositiveY = false; + var containsNegativeY = false; + + var dataPointYSums = []; + + for (var j = 0; j < plotUnit.dataSeriesIndexes.length; j++) { + var dataSeries = this.data[plotUnit.dataSeriesIndexes[j]]; + var i = 0; + var isFirstDPInViewPort = false; + var isLastDPInViewPort = false; + + if (dataSeries.axisPlacement === "normal" || dataSeries.axisPlacement === "xySwapped") { + + var plotAreaXMin = this.sessionVariables.axisX.newViewportMinimum ? this.sessionVariables.axisX.newViewportMinimum : this._options.axisX && this._options.axisX.viewportMinimum ? this._options.axisX.viewportMinimum : this._options.axisX && this._options.axisX.minimum ? this._options.axisX.minimum : -Infinity; + + var plotAreaXMax = this.sessionVariables.axisX.newViewportMaximum ? this.sessionVariables.axisX.newViewportMaximum : this._options.axisX && this._options.axisX.viewportMaximum ? this._options.axisX.viewportMaximum : this._options.axisX && this._options.axisX.maximum ? this._options.axisX.maximum : Infinity; + } + + if (dataSeries.dataPoints[i].x && dataSeries.dataPoints[i].x.getTime || dataSeries.xValueType === "dateTime") { + isDateTime = true; + } + + for (i = 0; i < dataSeries.dataPoints.length; i++) { + + // Requird when no x values are provided + if (typeof dataSeries.dataPoints[i].x === "undefined") { + dataSeries.dataPoints[i].x = i; + } + + if (dataSeries.dataPoints[i].x.getTime) { + isDateTime = true; + dataPointX = dataSeries.dataPoints[i].x.getTime(); //dataPointX is used so that getTime is called only once in case of dateTime values + } else dataPointX = dataSeries.dataPoints[i].x; + + dataPointY = dataSeries.dataPoints[i].y; + + if (dataPointX < axisXDataInfo.min) axisXDataInfo.min = dataPointX; + if (dataPointX > axisXDataInfo.max) axisXDataInfo.max = dataPointX; + + if (i > 0) { + var xDiff = dataPointX - dataSeries.dataPoints[i - 1].x; + xDiff < 0 && (xDiff = xDiff * -1); //If Condition shortcut + + if (axisXDataInfo.minDiff > xDiff && xDiff !== 0) { + axisXDataInfo.minDiff = xDiff; + } + + if (dataPointY !== null && dataSeries.dataPoints[i - 1].y !== null) { + var yDiff = dataPointY - dataSeries.dataPoints[i - 1].y; + yDiff < 0 && (yDiff = yDiff * -1); //If Condition shortcut + + if (axisYDataInfo.minDiff > yDiff && yDiff !== 0) { + axisYDataInfo.minDiff = yDiff; + } + } + } + + // This section makes sure that partially visible dataPoints are included in the begining + if (dataPointX < plotAreaXMin && !isFirstDPInViewPort) { + continue; + } else if (!isFirstDPInViewPort) { + isFirstDPInViewPort = true; + + if (i > 0) { + i -= 2; + continue; + } + } + + // This section makes sure that partially visible dataPoints are included at the end + if (dataPointX > plotAreaXMax && !isLastDPInViewPort) { + isLastDPInViewPort = true; + } else if (dataPointX > plotAreaXMax && isLastDPInViewPort) { + continue; + } + + if (dataSeries.dataPoints[i].label) plotUnit.axisX.labels[dataPointX] = dataSeries.dataPoints[i].label; + + if (dataPointX < axisXDataInfo.viewPortMin) axisXDataInfo.viewPortMin = dataPointX; + if (dataPointX > axisXDataInfo.viewPortMax) axisXDataInfo.viewPortMax = dataPointX; + + if (dataPointY === null) continue; + + plotUnit.yTotals[dataPointX] = (!plotUnit.yTotals[dataPointX] ? 0 : plotUnit.yTotals[dataPointX]) + Math.abs(dataPointY); + + if (dataPointY >= 0) { + containsPositiveY = true; + } else { + containsNegativeY = true; + } + + if (dataPointYSums[dataPointX]) dataPointYSums[dataPointX] += Math.abs(dataPointY);else dataPointYSums[dataPointX] = Math.abs(dataPointY); + } + + this.plotInfo.axisXValueType = dataSeries.xValueType = isDateTime ? "dateTime" : "number"; + } + + if (containsPositiveY && !containsNegativeY) { + axisYDataInfo.max = 99; + axisYDataInfo.min = 1; + } else if (containsPositiveY && containsNegativeY) { + axisYDataInfo.max = 99; + axisYDataInfo.min = -99; + } else if (!containsPositiveY && containsNegativeY) { + axisYDataInfo.max = -1; + axisYDataInfo.min = -99; + } + + axisYDataInfo.viewPortMin = axisYDataInfo.min; + axisYDataInfo.viewPortMax = axisYDataInfo.max; + + plotUnit.dataPointYSums = dataPointYSums; + + //this.dataPoints.sort(compareDataPointX); + //this.dataPoints.sort(function (dataPoint1, dataPoint2) { return dataPoint1.x - dataPoint2.x; }); + + //window.console.log("viewPortYMin: " + plotInfo.viewPortYMin + "; viewPortYMax: " + plotInfo.viewPortYMax); +}; + +Chart.prototype._processMultiYPlotUnit = function (plotUnit) { + if (!plotUnit.dataSeriesIndexes || plotUnit.dataSeriesIndexes.length < 1) return; + + var axisYDataInfo = plotUnit.axisY.dataInfo; + var axisXDataInfo = plotUnit.axisX.dataInfo; + var dataPointX, dataPointY, dataPointYMin, dataPointYMax; + var isDateTime = false; + + for (var j = 0; j < plotUnit.dataSeriesIndexes.length; j++) { + var dataSeries = this.data[plotUnit.dataSeriesIndexes[j]]; + var i = 0; + var isFirstDPInViewPort = false; + var isLastDPInViewPort = false; + + if (dataSeries.axisPlacement === "normal" || dataSeries.axisPlacement === "xySwapped") { + + var plotAreaXMin = this.sessionVariables.axisX.newViewportMinimum ? this.sessionVariables.axisX.newViewportMinimum : this._options.axisX && this._options.axisX.viewportMinimum ? this._options.axisX.viewportMinimum : this._options.axisX && this._options.axisX.minimum ? this._options.axisX.minimum : -Infinity; + + var plotAreaXMax = this.sessionVariables.axisX.newViewportMaximum ? this.sessionVariables.axisX.newViewportMaximum : this._options.axisX && this._options.axisX.viewportMaximum ? this._options.axisX.viewportMaximum : this._options.axisX && this._options.axisX.maximum ? this._options.axisX.maximum : Infinity; + } + + if (dataSeries.dataPoints[i].x && dataSeries.dataPoints[i].x.getTime || dataSeries.xValueType === "dateTime") { + isDateTime = true; + } + + for (i = 0; i < dataSeries.dataPoints.length; i++) { + + if (typeof dataSeries.dataPoints[i].x === "undefined") { + dataSeries.dataPoints[i].x = i; + } + + if (dataSeries.dataPoints[i].x.getTime) { + isDateTime = true; + dataPointX = dataSeries.dataPoints[i].x.getTime(); //dataPointX is used so that getTime is called only once in case of dateTime values + } else dataPointX = dataSeries.dataPoints[i].x; + + dataPointY = dataSeries.dataPoints[i].y; + + if (dataPointY && dataPointY.length) { + dataPointYMin = Math.min.apply(null, dataPointY); + dataPointYMax = Math.max.apply(null, dataPointY); + } + + if (dataPointX < axisXDataInfo.min) axisXDataInfo.min = dataPointX; + if (dataPointX > axisXDataInfo.max) axisXDataInfo.max = dataPointX; + + if (dataPointYMin < axisYDataInfo.min) axisYDataInfo.min = dataPointYMin; + + if (dataPointYMax > axisYDataInfo.max) axisYDataInfo.max = dataPointYMax; + + if (i > 0) { + var xDiff = dataPointX - dataSeries.dataPoints[i - 1].x; + xDiff < 0 && (xDiff = xDiff * -1); //If Condition shortcut + + if (axisXDataInfo.minDiff > xDiff && xDiff !== 0) { + axisXDataInfo.minDiff = xDiff; + } + + if (dataPointY[0] !== null && dataSeries.dataPoints[i - 1].y[0] !== null) { + var yDiff = dataPointY[0] - dataSeries.dataPoints[i - 1].y[0]; + yDiff < 0 && (yDiff = yDiff * -1); //If Condition shortcut + + if (axisYDataInfo.minDiff > yDiff && yDiff !== 0) { + axisYDataInfo.minDiff = yDiff; + } + } + } + + // This section makes sure that partially visible dataPoints are included in the begining + if (dataPointX < plotAreaXMin && !isFirstDPInViewPort) { + continue; + } else if (!isFirstDPInViewPort) { + isFirstDPInViewPort = true; + + if (i > 0) { + i -= 2; + continue; + } + } + + // This section makes sure that partially visible dataPoints are included at the end + if (dataPointX > plotAreaXMax && !isLastDPInViewPort) { + isLastDPInViewPort = true; + } else if (dataPointX > plotAreaXMax && isLastDPInViewPort) { + continue; + } + + if (dataSeries.dataPoints[i].label) plotUnit.axisX.labels[dataPointX] = dataSeries.dataPoints[i].label; + + if (dataPointX < axisXDataInfo.viewPortMin) axisXDataInfo.viewPortMin = dataPointX; + if (dataPointX > axisXDataInfo.viewPortMax) axisXDataInfo.viewPortMax = dataPointX; + + if (dataPointY === null) continue; + + if (dataPointYMin < axisYDataInfo.viewPortMin) axisYDataInfo.viewPortMin = dataPointYMin; + if (dataPointYMax > axisYDataInfo.viewPortMax) axisYDataInfo.viewPortMax = dataPointYMax; + } + + this.plotInfo.axisXValueType = dataSeries.xValueType = isDateTime ? "dateTime" : "number"; + } + + //this.dataPoints.sort(compareDataPointX); + //this.dataPoints.sort(function (dataPoint1, dataPoint2) { return dataPoint1.x - dataPoint2.x; }); +}; + +//getClosest returns objects nearby and hence shouldn't be used for events like click, mouseover, mousemove, etc which require object that is exactly under the mouse. +Chart.prototype.getDataPointAtXY = function (mouseX, mouseY, getClosest) { + + getClosest = getClosest || false; + var results = []; + + for (var i = this._dataInRenderedOrder.length - 1; i >= 0; i--) { + var dataSeries = this._dataInRenderedOrder[i]; + + var result = null; + + result = dataSeries.getDataPointAtXY(mouseX, mouseY, getClosest); + if (result) results.push(result); + } + + var closestResult = null; + var onlyLineAreaTypes = false; + + for (var m = 0; m < results.length; m++) { + + if (results[m].dataSeries.type === "line" || results[m].dataSeries.type === "stepLine" || results[m].dataSeries.type === "area" || results[m].dataSeries.type === "stepArea") { + var markerSize = (0, _utils.getProperty)("markerSize", results[m].dataPoint, results[m].dataSeries) || 8; + if (results[m].distance <= markerSize / 2) { + onlyLineAreaTypes = true; + break; + } + } + } + + for (m = 0; m < results.length; m++) { + + if (onlyLineAreaTypes && results[m].dataSeries.type !== "line" && results[m].dataSeries.type !== "stepLine" && results[m].dataSeries.type !== "area" && results[m].dataSeries.type !== "stepArea") continue; + + if (!closestResult) { + closestResult = results[m]; + } else if (results[m].distance <= closestResult.distance) { + closestResult = results[m]; + } + } + + return closestResult; +}; + +Chart.prototype.getObjectAtXY = function (mouseX, mouseY, getClosest) { + getClosest = getClosest || false; + + var id = null; + + var dataPointInfo = this.getDataPointAtXY(mouseX, mouseY, getClosest); + + if (dataPointInfo) { + id = dataPointInfo.dataSeries.dataPointIds[dataPointInfo.dataPointIndex]; + } else if (_utils.isCanvasSupported) { + //IE9+ + id = (0, _utils.getObjectId)(mouseX, mouseY, this._eventManager.ghostCtx); + } else { + for (var i = 0; i < this.legend.items.length; i++) { + var item = this.legend.items[i]; + + if (mouseX >= item.x1 && mouseX <= item.x2 && mouseY >= item.y1 && mouseY <= item.y2) { + id = item.id; + } + } + } + + return id; +}; + +/// Calculates Font Size based on standardSize and Chart Size +/// Standard font size for a Chart with min(width,height) = 400px +/// The area. +Chart.prototype.getAutoFontSize = function (standardSize, width, height) { + + width = width || this.width; + height = height || this.height; + + var fontSizeScaleFactor = standardSize / 400; + + return Math.round(Math.min(this.width, this.height) * fontSizeScaleFactor); +}; + +//#region Events + +Chart.prototype.resetOverlayedCanvas = function () { + //var width = this.overlaidCanvas.width; + //this.overlaidCanvas.width = 0; + //this.overlaidCanvas.width = width; + this.overlaidCanvasCtx.clearRect(0, 0, this.width, this.height); +}; + +Chart.prototype.clearCanvas = function () { + this.ctx.clearRect(0, 0, this.width, this.height); + + if (this.backgroundColor) { + this.ctx.fillStyle = this.backgroundColor; + this.ctx.fillRect(0, 0, this.width, this.height); + } +}; + +Chart.prototype.attachEvent = function (param) { + this._events.push(param); +}; + +Chart.prototype._touchEventHandler = function (ev) { + if (!ev.changedTouches || !this.interactivityEnabled) return; + + var mouseEvents = []; + var touches = ev.changedTouches; + var first = touches ? touches[0] : ev; + var touchCurrentCoordinates = null; + + //window.console.log(touches.length); + + switch (ev.type) { + case "touchstart":case "MSPointerDown": + mouseEvents = ["mousemove", "mousedown"]; + this._lastTouchData = (0, _utils.getMouseCoordinates)(first); + this._lastTouchData.time = new Date(); + break; + case "touchmove":case "MSPointerMove": + mouseEvents = ["mousemove"];break; + case "touchend":case "MSPointerUp": + mouseEvents = this._lastTouchEventType === "touchstart" || this._lastTouchEventType === "MSPointerDown" ? ["mouseup", "click"] : ["mouseup"]; + break; + default: + return; + } + + if (touches && touches.length > 1) return; + + touchCurrentCoordinates = (0, _utils.getMouseCoordinates)(first); + touchCurrentCoordinates.time = new Date(); + try { + var dy = touchCurrentCoordinates.y - this._lastTouchData.y; + var dx = touchCurrentCoordinates.x - this._lastTouchData.x; + var dt = touchCurrentCoordinates.time - this._lastTouchData.time; + + if (Math.abs(dy) > 15 && (!!this._lastTouchData.scroll || dt < 200)) { + //this._lastTouchData.y = touchCurrentCoordinates.y; + this._lastTouchData.scroll = true; + + var win = window.parent || window; + if (win && win.scrollBy) win.scrollBy(0, -dy); + } + } catch (e) {}; + + this._lastTouchEventType = ev.type; + + if (!!this._lastTouchData.scroll && this.zoomEnabled) { + if (this.isDrag) this.resetOverlayedCanvas(); + + this.isDrag = false; + return; + } + + for (var i = 0; i < mouseEvents.length; i++) { + + var type = mouseEvents[i]; + var simulatedEvent = document.createEvent("MouseEvent"); + simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY, false, false, false, false, 0, null); + + first.target.dispatchEvent(simulatedEvent); + + if (ev.preventManipulation) { + //alert("preventManipulation"); + ev.preventManipulation(); + } + + if (ev.preventDefault) { + //alert("preventDefault"); + ev.preventDefault(); + } + } +}; + +Chart.prototype._dispatchRangeEvent = function (eventName, triggerSource) { + var eventParameter = {}; + + eventParameter.chart = this._publicChartReference; + eventParameter.type = eventName; + eventParameter.trigger = triggerSource; + + var axes = []; + + if (this.axisX) axes.push("axisX"); + if (this.axisY) axes.push("axisY"); + if (this.axisY2) axes.push("axisY2"); + + for (var i = 0; i < axes.length; i++) { + eventParameter[axes[i]] = { + viewportMinimum: this[axes[i]].sessionVariables.newViewportMinimum, + viewportMaximum: this[axes[i]].sessionVariables.newViewportMaximum + }; + } + + this.dispatchEvent(eventName, eventParameter, this._publicChartReference); +}; + +Chart.prototype._mouseEventHandler = function (ev) { + + if (!this.interactivityEnabled) return; + + if (this._ignoreNextEvent) { + this._ignoreNextEvent = false; + return; + } + + // stop panning and zooming so we can draw + if (ev.preventManipulation) { + //alert("preventManipulation"); + ev.preventManipulation(); + } + + // we are handling this event + if (ev.preventDefault) { + //alert("preventDefault"); + ev.preventDefault(); + } + + //IE8- uses srcElement instead of target. So instead of checking this condition everytime, its better to create a reference called target. + if (typeof ev.target === "undefined" && ev.srcElement) ev.target = ev.srcElement; + + //console.log(ev.type); + + var xy = (0, _utils.getMouseCoordinates)(ev); + var type = ev.type; + var eventParam; + var rightclick; + + if (!ev) var e = window.event; + if (ev.which) rightclick = ev.which == 3;else if (ev.button) rightclick = ev.button == 2; + + //window.console.log(type + " --> x: " + xy.x + "; y:" + xy.y); + + //if (type === "mouseout") { + // this._toolTip.hide(); + //} + + if (_options.isDebugMode && window.console) { + window.console.log(type + " --> x: " + xy.x + "; y:" + xy.y); + if (rightclick) window.console.log(ev.which); + + if (type === "mouseup") window.console.log("mouseup"); + } + + if (rightclick) return; + + //if (this.plotInfo.axisPlacement === "xySwapped") { + // //var temp = xy.x; + // //xy.x = xy.y; + // //xy.y = temp; + // xy = {x: xy.y, y: xy.x}; + //} + + if (Chart.capturedEventParam) { + eventParam = Chart.capturedEventParam; + + if (type === "mouseup") { + Chart.capturedEventParam = null; + + if (eventParam.chart.overlaidCanvas.releaseCapture) eventParam.chart.overlaidCanvas.releaseCapture();else document.body.removeEventListener("mouseup", eventParam.chart._mouseEventHandler, false); + } + + if (eventParam.hasOwnProperty(type)) eventParam[type].call(eventParam.context, xy.x, xy.y); + } else if (this._events) { + + for (var i = 0; i < this._events.length; i++) { + if (!this._events[i].hasOwnProperty(type)) continue; + + eventParam = this._events[i]; + var bounds = eventParam.bounds; + + if (xy.x >= bounds.x1 && xy.x <= bounds.x2 && xy.y >= bounds.y1 && xy.y <= bounds.y2) { + eventParam[type].call(eventParam.context, xy.x, xy.y); + + if (type === "mousedown" && eventParam.capture === true) { + Chart.capturedEventParam = eventParam; + + if (this.overlaidCanvas.setCapture) this.overlaidCanvas.setCapture();else { + document.body.addEventListener("mouseup", this._mouseEventHandler, false); + //addEvent(document.body, "mouseup", this._mouseEventHandler); + } + } else if (type === "mouseup") { + if (eventParam.chart.overlaidCanvas.releaseCapture) eventParam.chart.overlaidCanvas.releaseCapture();else document.body.removeEventListener("mouseup", this._mouseEventHandler, false); + } + + break; + } else eventParam = null; + } + + if (eventParam && eventParam.cursor) { + ev.target.style.cursor = eventParam.cursor; + } else ev.target.style.cursor = this._defaultCursor; + + //eventParam = + } + + if (this._toolTip && this._toolTip.enabled) { + + var plotArea = this.plotArea; + + if (xy.x < plotArea.x1 || xy.x > plotArea.x2 || xy.y < plotArea.y1 || xy.y > plotArea.y2) this._toolTip.hide(); + } + + if ((!this.isDrag || !this.zoomEnabled) && this._eventManager) { + + this._eventManager.mouseEventHandler(ev); + //this._updateToolTip(ev.x, ev.y); + } + + //if (this._toolTip.enabled) + // this._toolTip.mouseMoveHandler(ev.x, ev.y); +}; + +Chart.prototype._plotAreaMouseDown = function (x, y) { + this.isDrag = true; + + if (this.plotInfo.axisPlacement !== "none") { + this.dragStartPoint = { x: x, y: y }; + } else { + this.dragStartPoint = { x: x, y: y }; + } +}; + +Chart.prototype._plotAreaMouseUp = function (x, y) { + + if (this.plotInfo.axisPlacement === "normal" || this.plotInfo.axisPlacement === "xySwapped") { + if (this.isDrag) { + var dragDelta = 0, + dragDeltaPY = y - this.dragStartPoint.y, + dragDeltaPX = x - this.dragStartPoint.x, + zoomPX = this.zoomType.indexOf("x") >= 0, + //Whether to zoom horizontally + zoomPY = this.zoomType.indexOf("y") >= 0, + //Whether to zoom vertically + reRender = false; + + this.resetOverlayedCanvas(); + + if (this.plotInfo.axisPlacement === "xySwapped") { + var temp = zoomPY; + zoomPY = zoomPX; + zoomPX = temp; + } + + if (this.panEnabled || this.zoomEnabled) { + if (this.panEnabled) { + + var overflow = 0; + + for (var i = 0; i < this._axes.length; i++) { + var axis = this._axes[i]; + + if (axis.viewportMinimum < axis.minimum) { + + overflow = axis.minimum - axis.viewportMinimum; + + axis.sessionVariables.newViewportMinimum = axis.viewportMinimum + overflow; + axis.sessionVariables.newViewportMaximum = axis.viewportMaximum + overflow; + + reRender = true; + } else if (axis.viewportMaximum > axis.maximum) { + + overflow = axis.viewportMaximum - axis.maximum; + axis.sessionVariables.newViewportMinimum = axis.viewportMinimum - overflow; + axis.sessionVariables.newViewportMaximum = axis.viewportMaximum - overflow; + + reRender = true; + } + } + } else if ((!zoomPX || Math.abs(dragDeltaPX) > 2) && (!zoomPY || Math.abs(dragDeltaPY) > 2) && this.zoomEnabled) { + + if (!this.dragStartPoint) return; + + var selectedRegion = { + x1: zoomPX ? this.dragStartPoint.x : this.plotArea.x1, + y1: zoomPY ? this.dragStartPoint.y : this.plotArea.y1, + x2: zoomPX ? x : this.plotArea.x2, + y2: zoomPY ? y : this.plotArea.y2 + }; + + if (Math.abs(selectedRegion.x1 - selectedRegion.x2) > 2 && Math.abs(selectedRegion.y1 - selectedRegion.y2) > 2) { + + if (this._zoomPanToSelectedRegion(selectedRegion.x1, selectedRegion.y1, selectedRegion.x2, selectedRegion.y2)) { + + reRender = true; + } + } + } + + if (reRender) { + this._ignoreNextEvent = true; //Required so that click event doesn't fire after zooming into a section of the chart. + + this._dispatchRangeEvent("rangeChanging", "zoom"); + this.render(); + this._dispatchRangeEvent("rangeChanged", "zoom"); + + if (reRender && this.zoomEnabled && this._zoomButton.style.display === "none") { + (0, _utils.show)(this._zoomButton, this._resetButton); + setButtonState(this, this._zoomButton, "pan"); + setButtonState(this, this._resetButton, "reset"); + } + } + } + } + } + + this.isDrag = false; +}; + +Chart.prototype._plotAreaMouseMove = function (x, y) { + if (this.isDrag && this.plotInfo.axisPlacement !== "none") { + + var dragDeltaPX = 0, + dragDeltaPY = 0, + alpha = null, + selectedRegion = null, + zoomPX = this.zoomType.indexOf("x") >= 0, + //Whether to zoom horizontally + zoomPY = this.zoomType.indexOf("y") >= 0, + //Whether to zoom vertically + _this = this; + + if (this.plotInfo.axisPlacement === "xySwapped") { + var temp = zoomPY; + zoomPY = zoomPX; + zoomPX = temp; + } + + dragDeltaPX = this.dragStartPoint.x - x; + dragDeltaPY = this.dragStartPoint.y - y; + + if (Math.abs(dragDeltaPX) > 2 && Math.abs(dragDeltaPX) < 8 && (this.panEnabled || this.zoomEnabled)) { + this._toolTip.hide(); + } else if (!this.panEnabled && !this.zoomEnabled) { + this._toolTip.mouseMoveHandler(x, y); + } + + if ((!zoomPX || Math.abs(dragDeltaPX) > 2 || !zoomPY || Math.abs(dragDeltaPY) > 2) && (this.panEnabled || this.zoomEnabled)) { + if (this.panEnabled) { + + selectedRegion = { + x1: zoomPX ? this.plotArea.x1 + dragDeltaPX : this.plotArea.x1, + y1: zoomPY ? this.plotArea.y1 + dragDeltaPY : this.plotArea.y1, + x2: zoomPX ? this.plotArea.x2 + dragDeltaPX : this.plotArea.x2, + y2: zoomPY ? this.plotArea.y2 + dragDeltaPY : this.plotArea.y2 + }; + + if (this._zoomPanToSelectedRegion(selectedRegion.x1, selectedRegion.y1, selectedRegion.x2, selectedRegion.y2, true)) { + this._dispatchRangeEvent("rangeChanging", "pan"); + this.render(); + this._dispatchRangeEvent("rangeChanged", "pan"); + + this.dragStartPoint.x = x; + this.dragStartPoint.y = y; + + //clearTimeout(this._panTimerId); + //this._panTimerId = setTimeout(function () { + // _this._dispatchRangeEvent("rangeChanging", "pan"); + // _this.render(); + // _this._dispatchRangeEvent("rangeChanged", "pan"); + //}, 0); + } + } else if (this.zoomEnabled) { + + this.resetOverlayedCanvas(); + + alpha = this.overlaidCanvasCtx.globalAlpha; + + this.overlaidCanvasCtx.globalAlpha = .7; + this.overlaidCanvasCtx.fillStyle = "#A0ABB8"; + + var rect = { + x1: zoomPX ? this.dragStartPoint.x : this.plotArea.x1, + y1: zoomPY ? this.dragStartPoint.y : this.plotArea.y1, + x2: zoomPX ? x - this.dragStartPoint.x : this.plotArea.x2 - this.plotArea.x1, + y2: zoomPY ? y - this.dragStartPoint.y : this.plotArea.y2 - this.plotArea.y1 + }; + + this.overlaidCanvasCtx.fillRect(rect.x1, rect.y1, rect.x2, rect.y2); + + this.overlaidCanvasCtx.globalAlpha = alpha; + } + } + } else this._toolTip.mouseMoveHandler(x, y); +}; + +//#endregion Events + +//Sets the viewport range of Axis based on the given rect bounds (pixels). Also limits the zooming/panning based on axis bounds. Returns a boolean to indicate whether it was succesful or not based on the selected region. +Chart.prototype._zoomPanToSelectedRegion = function (px1, py1, px2, py2, keepAxisIndependent) { + + keepAxisIndependent = keepAxisIndependent || false; + + var zoomPX = this.zoomType.indexOf("x") >= 0, + //Whether to zoom horizontally + zoomPY = this.zoomType.indexOf("y") >= 0, + //Whether to zoom vertically + validRegion = false; + + var axes = [], + axesWithValidRange = []; + if (this.axisX && zoomPX) axes.push(this.axisX); + if (this.axisY && zoomPY) axes.push(this.axisY); + if (this.axisY2 && zoomPY) axes.push(this.axisY2); + + var params = []; + + for (var i = 0; i < axes.length; i++) { + var axis = axes[i]; + //var range = Math.abs(axis.viewportMaximum - axis.viewportMinimum); + + var val1 = axis.convertPixelToValue({ x: px1, y: py1 }); + var val2 = axis.convertPixelToValue({ x: px2, y: py2 }); + + if (val1 > val2) { + var temp = val2; + val2 = val1; + val1 = temp; + } + + if (isFinite(axis.dataInfo.minDiff)) { + if (!(Math.abs(val2 - val1) < 3 * Math.abs(axis.dataInfo.minDiff) || val1 < axis.minimum || val2 > axis.maximum)) { + axesWithValidRange.push(axis); + params.push({ val1: val1, val2: val2 }); + + validRegion = true; + } else if (!keepAxisIndependent) { + validRegion = false; + break; + } + } + } + + if (validRegion) { + for (var i = 0; i < axesWithValidRange.length; i++) { + var axis = axesWithValidRange[i]; + var param = params[i]; + + axis.setViewPortRange(param.val1, param.val2); + } + } + + return validRegion; +}; + +Chart.prototype.preparePlotArea = function () { + + var plotArea = this.plotArea; + + var yAxis = this.axisY ? this.axisY : this.axisY2; + + if (!_utils.isCanvasSupported && (plotArea.x1 > 0 || plotArea.y1 > 0)) { + plotArea.ctx.translate(plotArea.x1, plotArea.y1); + } + + if (this.axisX && yAxis) { + plotArea.x1 = this.axisX.lineCoordinates.x1 < this.axisX.lineCoordinates.x2 ? this.axisX.lineCoordinates.x1 : yAxis.lineCoordinates.x1; + plotArea.y1 = this.axisX.lineCoordinates.y1 < yAxis.lineCoordinates.y1 ? this.axisX.lineCoordinates.y1 : yAxis.lineCoordinates.y1; + + plotArea.x2 = this.axisX.lineCoordinates.x2 > yAxis.lineCoordinates.x2 ? this.axisX.lineCoordinates.x2 : yAxis.lineCoordinates.x2; + plotArea.y2 = this.axisX.lineCoordinates.y2 > this.axisX.lineCoordinates.y1 ? this.axisX.lineCoordinates.y2 : yAxis.lineCoordinates.y2; + + plotArea.width = plotArea.x2 - plotArea.x1; + plotArea.height = plotArea.y2 - plotArea.y1; + //plotArea = { x1: x1, y1: y1, x2: x2, y2: y2, width: x2 - x1, height: y2 - y1 }; + } else { + //ToDo: @sunil + var freeSpace = this.layoutManager.getFreeSpace(); + plotArea.x1 = freeSpace.x1; + plotArea.x2 = freeSpace.x2; + plotArea.y1 = freeSpace.y1; + plotArea.y2 = freeSpace.y2; + + plotArea.width = freeSpace.width; + plotArea.height = freeSpace.height; + } + + if (!_utils.isCanvasSupported) { + + plotArea.canvas.width = plotArea.width; + plotArea.canvas.height = plotArea.height; + + plotArea.canvas.style.left = plotArea.x1 + "px"; + plotArea.canvas.style.top = plotArea.y1 + "px"; + + if (plotArea.x1 > 0 || plotArea.y1 > 0) { + plotArea.ctx.translate(-plotArea.x1, -plotArea.y1); + } + } + + plotArea.layoutManager = new _layout_manager2.default(plotArea.x1, plotArea.y1, plotArea.x2, plotArea.y2, 2); +}; + +Chart.prototype.getPixelCoordinatesOnPlotArea = function (x, y) { + return { + x: this.axisX.getPixelCoordinatesOnAxis(x).x, y: this.axisY.getPixelCoordinatesOnAxis(y).y + }; + //return { x: 5, y: 10 }; +}; + +//#region Render Methods + +Chart.prototype.renderIndexLabels = function (targetCtx) { + var ctx = targetCtx || this.plotArea.ctx; + + var plotArea = this.plotArea; + + var mid = 0; + var yMinLimit = 0; + var yMaxLimit = 0; + var xMinLimit = 0; + var xMaxLimit = 0; + var marginX = 0, + marginY = 0; // Margin between label and dataPoint / PlotArea + var offSetX = 0, + offSetY = 0; // Distance to offSet textBlock (top) from dataPoint inorder to position it + var visibleWidth = 0; + var visibleHeight = 0; + + for (var i = 0; i < this._indexLabels.length; i++) { + + var indexLabel = this._indexLabels[i]; + var chartTypeLower = indexLabel.chartType.toLowerCase(); + + var x, y, angle; + + var fontColor = (0, _utils.getProperty)("indexLabelFontColor", indexLabel.dataPoint, indexLabel.dataSeries); + var fontSize = (0, _utils.getProperty)("indexLabelFontSize", indexLabel.dataPoint, indexLabel.dataSeries); + var fontFamily = (0, _utils.getProperty)("indexLabelFontFamily", indexLabel.dataPoint, indexLabel.dataSeries); + var fontStyle = (0, _utils.getProperty)("indexLabelFontStyle", indexLabel.dataPoint, indexLabel.dataSeries); + var fontWeight = (0, _utils.getProperty)("indexLabelFontWeight", indexLabel.dataPoint, indexLabel.dataSeries); + var backgroundColor = (0, _utils.getProperty)("indexLabelBackgroundColor", indexLabel.dataPoint, indexLabel.dataSeries); + var maxWidth = (0, _utils.getProperty)("indexLabelMaxWidth", indexLabel.dataPoint, indexLabel.dataSeries); + var indexLabelWrap = (0, _utils.getProperty)("indexLabelWrap", indexLabel.dataPoint, indexLabel.dataSeries); + + var percentAndTotal = { + percent: null, total: null + }; + var formatterParameter = null; + + if (indexLabel.dataSeries.type.indexOf("stacked") >= 0 || indexLabel.dataSeries.type === "pie" || indexLabel.dataSeries.type === "doughnut") percentAndTotal = this.getPercentAndTotal(indexLabel.dataSeries, indexLabel.dataPoint); + + if (indexLabel.dataSeries.indexLabelFormatter || indexLabel.dataPoint.indexLabelFormatter) formatterParameter = { + chart: this._options, dataSeries: indexLabel.dataSeries, dataPoint: indexLabel.dataPoint, index: indexLabel.indexKeyword, total: percentAndTotal.total, percent: percentAndTotal.percent + }; + + var indexLabelText = indexLabel.dataPoint.indexLabelFormatter ? indexLabel.dataPoint.indexLabelFormatter(formatterParameter) : indexLabel.dataPoint.indexLabel ? this.replaceKeywordsWithValue(indexLabel.dataPoint.indexLabel, indexLabel.dataPoint, indexLabel.dataSeries, null, indexLabel.indexKeyword) : indexLabel.dataSeries.indexLabelFormatter ? indexLabel.dataSeries.indexLabelFormatter(formatterParameter) : indexLabel.dataSeries.indexLabel ? this.replaceKeywordsWithValue(indexLabel.dataSeries.indexLabel, indexLabel.dataPoint, indexLabel.dataSeries, null, indexLabel.indexKeyword) : null; + + if (indexLabelText === null || indexLabelText === "") continue; + + var placement = (0, _utils.getProperty)("indexLabelPlacement", indexLabel.dataPoint, indexLabel.dataSeries); + var orientation = (0, _utils.getProperty)("indexLabelOrientation", indexLabel.dataPoint, indexLabel.dataSeries); + var angle = 0; + + var direction = indexLabel.direction; // +1 for above the point and -1 for below the point + + var axisX = indexLabel.dataSeries.axisX; + var axisY = indexLabel.dataSeries.axisY; + + var textBlock = new _text_block2.default(ctx, { + x: 0, + y: 0, + maxWidth: maxWidth ? maxWidth : this.width * .5, + maxHeight: indexLabelWrap ? fontSize * 5 : fontSize * 1.5, + angle: orientation === "horizontal" ? 0 : -90, + text: indexLabelText, + padding: 0, + backgroundColor: backgroundColor, + horizontalAlign: "left", //left, center, right + fontSize: fontSize, //in pixels + fontFamily: fontFamily, + fontWeight: fontWeight, //normal, bold, bolder, lighter, + fontColor: fontColor, + fontStyle: fontStyle, // normal, italic, oblique + textBaseline: "top" + }); + + var textSize = textBlock.measureText(); + + //if (indexLabel.dataPoint.x < axisX.viewportMinimum || indexLabel.dataPoint.x > axisX.viewportMaximum || indexLabel.dataPoint.y < axisY.viewportMinimum || indexLabel.dataPoint.y > axisY.viewportMaximum) + // continue; + + if (chartTypeLower.indexOf("line") >= 0 || chartTypeLower.indexOf("area") >= 0 || chartTypeLower.indexOf("bubble") >= 0 || chartTypeLower.indexOf("scatter") >= 0) { + + if (indexLabel.dataPoint.x < axisX.viewportMinimum || indexLabel.dataPoint.x > axisX.viewportMaximum || indexLabel.dataPoint.y < axisY.viewportMinimum || indexLabel.dataPoint.y > axisY.viewportMaximum) continue; + } else { + if (indexLabel.dataPoint.x < axisX.viewportMinimum || indexLabel.dataPoint.x > axisX.viewportMaximum) continue; + } + + marginY = 2; + marginX = 2; + + if (orientation === "horizontal") { + visibleWidth = textBlock.width; + visibleHeight = textBlock.height; + } else { + visibleHeight = textBlock.width; + visibleWidth = textBlock.height; + } + + if (this.plotInfo.axisPlacement === "normal") { + + if (chartTypeLower.indexOf("line") >= 0 || chartTypeLower.indexOf("area") >= 0) { + + placement = "auto"; + marginY = 4; + } else if (chartTypeLower.indexOf("stacked") >= 0) { + + if (placement === "auto") placement = "inside"; + } else if (chartTypeLower === "bubble" || chartTypeLower === "scatter") { + + placement = "inside"; + } + + x = indexLabel.point.x - visibleWidth / 2; + + if (placement !== "inside") { + //outside or auto + + yMinLimit = plotArea.y1; + yMaxLimit = plotArea.y2; + + if (direction > 0) { + y = indexLabel.point.y - visibleHeight - marginY; + + if (y < yMinLimit) { + if (placement === "auto") { + y = Math.max(indexLabel.point.y, yMinLimit) + marginY; + } else { + y = yMinLimit + marginY; + } + } + } else { + y = indexLabel.point.y + marginY; + + if (y > yMaxLimit - visibleHeight - marginY) { + if (placement === "auto") { + y = Math.min(indexLabel.point.y, yMaxLimit) - visibleHeight - marginY; + } else { + y = yMaxLimit - visibleHeight - marginY; + } + } + } + } else { + + yMinLimit = Math.max(indexLabel.bounds.y1, plotArea.y1); + yMaxLimit = Math.min(indexLabel.bounds.y2, plotArea.y2); + + if (chartTypeLower.indexOf("range") >= 0) { + if (direction > 0) mid = Math.max(indexLabel.bounds.y1, plotArea.y1) + visibleHeight / 2 + marginY;else mid = Math.min(indexLabel.bounds.y2, plotArea.y2) - visibleHeight / 2 - marginY; + } else mid = (Math.max(indexLabel.bounds.y1, plotArea.y1) + Math.min(indexLabel.bounds.y2, plotArea.y2)) / 2; + + if (direction > 0) { + y = Math.max(indexLabel.point.y, mid) - visibleHeight / 2; + + if (y < yMinLimit && (chartTypeLower === "bubble" || chartTypeLower === "scatter")) { + y = Math.max(indexLabel.point.y - visibleHeight - marginY, plotArea.y1 + marginY); + } + } else { + y = Math.min(indexLabel.point.y, mid) - visibleHeight / 2; + + if (y > yMaxLimit - visibleHeight - marginY && (chartTypeLower === "bubble" || chartTypeLower === "scatter")) { + y = Math.min(indexLabel.point.y + marginY, plotArea.y2 - visibleHeight - marginY); + } + } + + // Make Sure that it does not overlap the axis line + y = Math.min(y, yMaxLimit - visibleHeight); + } + } else { + + if (chartTypeLower.indexOf("line") >= 0 || chartTypeLower.indexOf("area") >= 0 || chartTypeLower.indexOf("scatter") >= 0) { + + placement = "auto"; + marginX = 4; + } else if (chartTypeLower.indexOf("stacked") >= 0) { + + if (placement === "auto") placement = "inside"; + } else if (chartTypeLower === "bubble") { + + placement = "inside"; + } + + y = indexLabel.point.y - visibleHeight / 2; + + if (placement !== "inside") { + //outside or auto + + xMinLimit = plotArea.x1; + xMaxLimit = plotArea.x2; + + if (direction < 0) { + x = indexLabel.point.x - visibleWidth - marginX; + + if (x < xMinLimit) { + if (placement === "auto") { + x = Math.max(indexLabel.point.x, xMinLimit) + marginX; + } else { + x = xMinLimit + marginX; + } + } + } else { + x = indexLabel.point.x + marginX; + + if (x > xMaxLimit - visibleWidth - marginX) { + if (placement === "auto") { + x = Math.min(indexLabel.point.x, xMaxLimit) - visibleWidth - marginX; + } else { + x = xMaxLimit - visibleWidth - marginX; + } + } + } + } else { + + xMinLimit = Math.max(indexLabel.bounds.x1, plotArea.x1); + xMaxLimit = Math.min(indexLabel.bounds.x2, plotArea.x2); + + if (chartTypeLower.indexOf("range") >= 0) { + if (direction < 0) mid = Math.max(indexLabel.bounds.x1, plotArea.x1) + visibleWidth / 2 + marginX;else mid = Math.min(indexLabel.bounds.x2, plotArea.x2) - visibleWidth / 2 - marginX; + } else var mid = (Math.max(indexLabel.bounds.x1, plotArea.x1) + Math.min(indexLabel.bounds.x2, plotArea.x2)) / 2; + + if (direction < 0) { + x = Math.max(indexLabel.point.x, mid) - visibleWidth / 2; + + //if (y < xMinLimit) { + // y = Math.max(indexLabel.point.y - visibleHeight - marginY, plotArea.y1 + marginY); + //} + } else { + x = Math.min(indexLabel.point.x, mid) - visibleWidth / 2; + + //if (y > xMaxLimit - visibleHeight - marginY) { + // y = Math.min(indexLabel.point.y + marginY, plotArea.y2 - visibleHeight - marginY); + //} + } + + // Make Sure that it does not overlap the axis line + x = Math.max(x, xMinLimit); + } + } + + if (orientation === "vertical") { + y += visibleHeight; + } + + textBlock.x = x; + textBlock.y = y; + + //console.log(textBlock.text + ": " + textBlock.x + "; " + textBlock.y); + + textBlock.render(true); + } + + //source and dest would be same when animation is not enabled + var animationInfo = { + source: ctx, dest: this.plotArea.ctx, animationCallback: _animator4.default.fadeInAnimation, easingFunction: _animator4.default.easing.easeInQuad, animationBase: 0, startTimePercent: .7 + }; + return animationInfo; +}; + +Chart.prototype.renderLine = function (plotUnit) { + + var ctx = plotUnit.targetCanvasCtx || this.plotArea.ctx; + + var totalDataSeries = plotUnit.dataSeriesIndexes.length; + if (totalDataSeries <= 0) return; + + var ghostCtx = this._eventManager.ghostCtx; + //var ghostCtx = this.overlaidCanvasCtx; + + ctx.save(); + + var plotArea = this.plotArea; + + ctx.beginPath(); + ctx.rect(plotArea.x1, plotArea.y1, plotArea.width, plotArea.height); + ctx.clip(); + + var markers = []; + + for (var j = 0; j < plotUnit.dataSeriesIndexes.length; j++) { + + var dataSeriesIndex = plotUnit.dataSeriesIndexes[j]; + + var dataSeries = this.data[dataSeriesIndex]; + ctx.lineWidth = dataSeries.lineThickness; + var dataPoints = dataSeries.dataPoints; + + if (ctx.setLineDash) { + ctx.setLineDash((0, _utils.getLineDashArray)(dataSeries.lineDashType, dataSeries.lineThickness)); + } + + var seriesId = dataSeries.id; + this._eventManager.objectMap[seriesId] = { + objectType: "dataSeries", dataSeriesIndex: dataSeriesIndex + }; + var hexColor = (0, _utils.intToHexColorString)(seriesId); + ghostCtx.strokeStyle = hexColor; + //ghostCtx.lineWidth = dataSeries.lineThickness; + ghostCtx.lineWidth = dataSeries.lineThickness > 0 ? Math.max(dataSeries.lineThickness, 4) : 0; + + var colorSet = dataSeries._colorSet; + var color = colorSet[0]; + ctx.strokeStyle = color; + + var isFirstDataPointInPlotArea = true; + var i = 0, + x, + y; + var dataPointX; //Used so that when dataPoint.x is a DateTime value, it doesn't get converted to number back and forth. + + //if (!dataSeries._options.markerSize && dataSeries.dataPoints.length < 1000) + // dataSeries.markerSize = 8; + ctx.beginPath(); + if (dataPoints.length > 0) { + //var xy = this.getPixelCoordinatesOnPlotArea(dataPoints[0].x, dataPoints[0].y); + + //dataSeries.noDataPointsInPlotArea = 0 + var prevDataNull = false; + for (i = 0; i < dataPoints.length; i++) { + + dataPointX = dataPoints[i].x.getTime ? dataPoints[i].x.getTime() : dataPoints[i].x; + + if (dataPointX < plotUnit.axisX.dataInfo.viewPortMin || dataPointX > plotUnit.axisX.dataInfo.viewPortMax) continue; + + //if (!isFinite(dataPoints[i].y)) + // continue; + + if (typeof dataPoints[i].y !== "number") { + if (i > 0) { + // if first dataPoint is null then no need to call stroke method + ctx.stroke(); + + if (_utils.isCanvasSupported) { + ghostCtx.stroke(); + } + } + + prevDataNull = true; + continue; + } + + x = plotUnit.axisX.conversionParameters.reference + plotUnit.axisX.conversionParameters.pixelPerUnit * (dataPointX - plotUnit.axisX.conversionParameters.minimum) + .5 << 0; + y = plotUnit.axisY.conversionParameters.reference + plotUnit.axisY.conversionParameters.pixelPerUnit * (dataPoints[i].y - plotUnit.axisY.conversionParameters.minimum) + .5 << 0; + + var id = dataSeries.dataPointIds[i]; + this._eventManager.objectMap[id] = { + id: id, objectType: "dataPoint", dataSeriesIndex: dataSeriesIndex, dataPointIndex: i, x1: x, y1: y + }; + + //dataSeries.noDataPointsInPlotArea++; + + if (isFirstDataPointInPlotArea || prevDataNull) { + ctx.beginPath(); + ctx.moveTo(x, y); + + if (_utils.isCanvasSupported) { + ghostCtx.beginPath(); + ghostCtx.moveTo(x, y); + } + + isFirstDataPointInPlotArea = false; + prevDataNull = false; + } else { + + ctx.lineTo(x, y); + + if (_utils.isCanvasSupported) ghostCtx.lineTo(x, y); + + if (i % 500 == 0) { + ctx.stroke(); + ctx.beginPath(); + ctx.moveTo(x, y); + + if (_utils.isCanvasSupported) { + ghostCtx.stroke(); + ghostCtx.beginPath(); + ghostCtx.moveTo(x, y); + } + } + } + + //Render Marker + if (dataPoints[i].markerSize > 0 || dataSeries.markerSize > 0) { + + var markerProps = dataSeries.getMarkerProperties(i, x, y, ctx); + markers.push(markerProps); + + //if (!dataSeries.maxWidthInX || markerProps.size > dataSeries.maxWidthInX) { + // dataSeries.maxWidthInX = markerProps.size / (plotUnit.axisX.conversionParameters.pixelPerUnit > 1 ? plotUnit.axisX.conversionParameters.pixelPerUnit - 1 : plotUnit.axisX.conversionParameters.pixelPerUnit); + //} + + var markerColor = (0, _utils.intToHexColorString)(id); + + //window.console.log("index: " + i + "; id: " + id + "; hex: " + markerColor); + + if (_utils.isCanvasSupported) { + markers.push({ + x: x, y: y, ctx: ghostCtx, + type: markerProps.type, + size: markerProps.size, + color: markerColor, + borderColor: markerColor, + borderThickness: markerProps.borderThickness + }); + } + } + + if (dataPoints[i].indexLabel || dataSeries.indexLabel || dataPoints[i].indexLabelFormatter || dataSeries.indexLabelFormatter) { + + this._indexLabels.push({ + chartType: "line", + dataPoint: dataPoints[i], + dataSeries: dataSeries, + point: { + x: x, y: y + }, + direction: dataPoints[i].y >= 0 ? 1 : -1, + color: color + }); + } + } + + ctx.stroke(); + + if (_utils.isCanvasSupported) ghostCtx.stroke(); + } + } + + _render2.default.drawMarkers(markers); + ctx.restore(); + + ctx.beginPath(); + + if (_utils.isCanvasSupported) ghostCtx.beginPath(); + + //source and dest would be same when animation is not enabled + var animationInfo = { + source: ctx, dest: this.plotArea.ctx, animationCallback: _animator4.default.xClipAnimation, easingFunction: _animator4.default.easing.linear, animationBase: 0 + }; + return animationInfo; +}; + +Chart.prototype.renderStepLine = function (plotUnit) { + var ctx = plotUnit.targetCanvasCtx || this.plotArea.ctx; + + var totalDataSeries = plotUnit.dataSeriesIndexes.length; + if (totalDataSeries <= 0) return; + + var ghostCtx = this._eventManager.ghostCtx; + //var ghostCtx = this.overlaidCanvasCtx; + + ctx.save(); + + var plotArea = this.plotArea; + + ctx.beginPath(); + ctx.rect(plotArea.x1, plotArea.y1, plotArea.width, plotArea.height); + ctx.clip(); + + var markers = []; + + for (var j = 0; j < plotUnit.dataSeriesIndexes.length; j++) { + + var dataSeriesIndex = plotUnit.dataSeriesIndexes[j]; + + var dataSeries = this.data[dataSeriesIndex]; + ctx.lineWidth = dataSeries.lineThickness; + var dataPoints = dataSeries.dataPoints; + + if (ctx.setLineDash) { + ctx.setLineDash((0, _utils.getLineDashArray)(dataSeries.lineDashType, dataSeries.lineThickness)); + } + + var seriesId = dataSeries.id; + this._eventManager.objectMap[seriesId] = { + objectType: "dataSeries", dataSeriesIndex: dataSeriesIndex + }; + var hexColor = (0, _utils.intToHexColorString)(seriesId); + ghostCtx.strokeStyle = hexColor; + //ghostCtx.lineWidth = dataSeries.lineThickness; + ghostCtx.lineWidth = dataSeries.lineThickness > 0 ? Math.max(dataSeries.lineThickness, 4) : 0; + + var colorSet = dataSeries._colorSet; + var color = colorSet[0]; + ctx.strokeStyle = color; + + var isFirstDataPointInPlotArea = true; + var i = 0, + x, + y; + var dataPointX; //Used so that when dataPoint.x is a DateTime value, it doesn't get converted to number back and forth. + + //if (!dataSeries._options.markerSize && dataSeries.dataPoints.length < 1000) + // dataSeries.markerSize = 8; + ctx.beginPath(); + if (dataPoints.length > 0) { + //var xy = this.getPixelCoordinatesOnPlotArea(dataPoints[0].x, dataPoints[0].y); + + //dataSeries.noDataPointsInPlotArea = 0 + var prevDataNull = false; + for (i = 0; i < dataPoints.length; i++) { + + dataPointX = dataPoints[i].getTime ? dataPoints[i].x.getTime() : dataPoints[i].x; + + if (dataPointX < plotUnit.axisX.dataInfo.viewPortMin || dataPointX > plotUnit.axisX.dataInfo.viewPortMax) continue; + + //if (!isFinite(dataPoints[i].y)) + // continue; + + if (typeof dataPoints[i].y !== "number") { + if (i > 0) { + // if first dataPoint is null then no need to call stroke method + ctx.stroke(); + + if (_utils.isCanvasSupported) { + ghostCtx.stroke(); + } + } + + prevDataNull = true; + continue; + } + + var prevY = y; + + x = plotUnit.axisX.conversionParameters.reference + plotUnit.axisX.conversionParameters.pixelPerUnit * (dataPointX - plotUnit.axisX.conversionParameters.minimum) + .5 << 0; + y = plotUnit.axisY.conversionParameters.reference + plotUnit.axisY.conversionParameters.pixelPerUnit * (dataPoints[i].y - plotUnit.axisY.conversionParameters.minimum) + .5 << 0; + + var id = dataSeries.dataPointIds[i]; + this._eventManager.objectMap[id] = { + id: id, objectType: "dataPoint", dataSeriesIndex: dataSeriesIndex, dataPointIndex: i, x1: x, y1: y + }; + + //dataSeries.noDataPointsInPlotArea++; + + if (isFirstDataPointInPlotArea || prevDataNull) { + ctx.beginPath(); + ctx.moveTo(x, y); + + if (_utils.isCanvasSupported) { + ghostCtx.beginPath(); + ghostCtx.moveTo(x, y); + } + + isFirstDataPointInPlotArea = false; + prevDataNull = false; + } else { + + ctx.lineTo(x, prevY); + if (_utils.isCanvasSupported) ghostCtx.lineTo(x, prevY); + + ctx.lineTo(x, y); + if (_utils.isCanvasSupported) ghostCtx.lineTo(x, y); + + if (i % 500 == 0) { + ctx.stroke(); + ctx.beginPath(); + ctx.moveTo(x, y); + + if (_utils.isCanvasSupported) { + ghostCtx.stroke(); + ghostCtx.beginPath(); + ghostCtx.moveTo(x, y); + } + } + } + + //Render Marker + if (dataPoints[i].markerSize > 0 || dataSeries.markerSize > 0) { + + var markerProps = dataSeries.getMarkerProperties(i, x, y, ctx); + markers.push(markerProps); + + //if (!dataSeries.maxWidthInX || markerProps.size > dataSeries.maxWidthInX) { + // dataSeries.maxWidthInX = markerProps.size / (plotUnit.axisX.conversionParameters.pixelPerUnit > 1 ? plotUnit.axisX.conversionParameters.pixelPerUnit - 1 : plotUnit.axisX.conversionParameters.pixelPerUnit); + //} + + var markerColor = (0, _utils.intToHexColorString)(id); + + //window.console.log("index: " + i + "; id: " + id + "; hex: " + markerColor); + if (_utils.isCanvasSupported) { + markers.push({ + x: x, y: y, ctx: ghostCtx, + type: markerProps.type, + size: markerProps.size, + color: markerColor, + borderColor: markerColor, + borderThickness: markerProps.borderThickness + }); + } + } + + if (dataPoints[i].indexLabel || dataSeries.indexLabel || dataPoints[i].indexLabelFormatter || dataSeries.indexLabelFormatter) { + + this._indexLabels.push({ + chartType: "stepLine", + dataPoint: dataPoints[i], + dataSeries: dataSeries, + point: { + x: x, y: y + }, + direction: dataPoints[i].y >= 0 ? 1 : -1, + color: color + }); + } + } + + ctx.stroke(); + if (_utils.isCanvasSupported) ghostCtx.stroke(); + } + } + + _render2.default.drawMarkers(markers); + ctx.restore(); + + ctx.beginPath(); + + if (_utils.isCanvasSupported) ghostCtx.beginPath(); + + //source and dest would be same when animation is not enabled + var animationInfo = { + source: ctx, dest: this.plotArea.ctx, animationCallback: _animator4.default.xClipAnimation, easingFunction: _animator4.default.easing.linear, animationBase: 0 + }; + return animationInfo; +}; + +Chart.prototype.animationRequestId = null; + +Chart.prototype.requestAnimFrame = function () { + return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) { + window.setTimeout(callback, 1000 / 60); + }; +}(); + +Chart.prototype.cancelRequestAnimFrame = function () { + return window.cancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || clearTimeout; +}(); + +Chart.prototype.getPercentAndTotal = function (ds, dp) { + + var dpX = null; + var total = null; + var percent = null; + + if (ds.type.indexOf("stacked") >= 0) { + total = 0; + dpX = dp.x.getTime ? dp.x.getTime() : dp.x; + if (dpX in ds.plotUnit.yTotals) { + total = ds.plotUnit.yTotals[dpX]; + + if (!isNaN(dp.y)) { + if (total === 0) percent = 0;else percent = dp.y / total * 100; + } else percent = 0; + } + } else if (ds.type === "pie" || ds.type === "doughnut") { + total = 0; + for (var i = 0; i < ds.dataPoints.length; i++) { + + if (!isNaN(ds.dataPoints[i].y)) total += ds.dataPoints[i].y; + } + + if (!isNaN(dp.y)) percent = dp.y / total * 100;else percent = 0; + } + + return { + percent: percent, total: total + }; +}; + +Chart.prototype.replaceKeywordsWithValue = function (str, dp, ds, dpIndex, indexKeywordValue) { + //var regex = /\{\s*[a-zA-Z]+\s*\}|"[^"]*"|'[^']*'/g; + var regex = /\{.*?\}|"[^"]*"|'[^']*'/g; + var chart = this; + indexKeywordValue = typeof indexKeywordValue === "undefined" ? 0 : indexKeywordValue; + + if ((ds.type.indexOf("stacked") >= 0 || ds.type === "pie" || ds.type === "doughnut") && (str.indexOf("#percent") >= 0 || str.indexOf("#total") >= 0)) { + var percent = "#percent"; + var total = "#total"; + var dpX = null; + + var percentAndTotal = this.getPercentAndTotal(ds, dp); + + total = isNaN(percentAndTotal.total) ? total : percentAndTotal.total; + percent = isNaN(percentAndTotal.percent) ? percent : percentAndTotal.percent; + + do { + var percentFormatString = ""; + if (ds.percentFormatString) percentFormatString = ds.percentFormatString;else { + percentFormatString = "#,##0."; + var numberOfDecimals = Math.max(Math.ceil(Math.log(1 / Math.abs(percent)) / Math.LN10), 2); + + if (isNaN(numberOfDecimals) || !isFinite(numberOfDecimals)) numberOfDecimals = 2; + + for (var n = 0; n < numberOfDecimals; n++) { + percentFormatString += "#"; + } + } + + str = str.replace("#percent", (0, _utils.numberFormat)(percent, percentFormatString, chart._cultureInfo)); + str = str.replace("#total", (0, _utils.numberFormat)(total, ds.yValueFormatString ? ds.yValueFormatString : "#,##0.########")); + } while (str.indexOf("#percent") >= 0 || str.indexOf("#total") >= 0); + } + + var fcn = function fcn($0) { + if ($0[0] === "\"" && $0[$0.length - 1] === "\"" || $0[0] === "\'" && $0[$0.length - 1] === "\'") return $0.slice(1, $0.length - 1); + + var key = (0, _utils.trimString)($0.slice(1, $0.length - 1)); + key = key.replace("#index", indexKeywordValue); + + var index = null; + + try { + var match = key.match(/(.*?)\s*\[\s*(.*?)\s*\]/); + if (match && match.length > 0) { + index = (0, _utils.trimString)(match[2]); + key = (0, _utils.trimString)(match[1]); + } + } catch (e) {}; + + var obj = null; + + if (key === "color") { + return dp.color ? dp.color : ds.color ? ds.color : ds._colorSet[dpIndex % ds._colorSet.length]; + } + + if (dp.hasOwnProperty(key)) obj = dp;else if (ds.hasOwnProperty(key)) obj = ds;else return ""; + + var value = obj[key]; + if (index !== null) value = value[index]; + + if (key === "x") { + if (chart.axisX && chart.plotInfo.axisXValueType === "dateTime") return (0, _utils.dateFormat)(value, dp.xValueFormatString ? dp.xValueFormatString : ds.xValueFormatString ? ds.xValueFormatString : chart.axisX && chart.axisX.valueFormatString ? chart.axisX.valueFormatString : "DD MMM YY", chart._cultureInfo);else return (0, _utils.numberFormat)(value, dp.xValueFormatString ? dp.xValueFormatString : ds.xValueFormatString ? ds.xValueFormatString : "#,##0.########", chart._cultureInfo); + } else if (key === "y") return (0, _utils.numberFormat)(value, dp.yValueFormatString ? dp.yValueFormatString : ds.yValueFormatString ? ds.yValueFormatString : "#,##0.########", chart._cultureInfo);else if (key === "z") return (0, _utils.numberFormat)(value, dp.zValueFormatString ? dp.zValueFormatString : ds.zValueFormatString ? ds.zValueFormatString : "#,##0.########", chart._cultureInfo);else return value; + }; + + return str.replace(regex, fcn); +}; + +Chart.prototype.renderSpline = _index.SplineChart; + +Chart.prototype.renderColumn = _index.ColumnChart; + +Chart.prototype.renderStackedColumn = _index.StackedColumnChart; + +Chart.prototype.renderStackedColumn100 = _index.StackedColumn100Chart; + +Chart.prototype.renderBar = _index.BarChart; + +Chart.prototype.renderStackedBar = _index.StackedBarChart; + +Chart.prototype.renderStackedBar100 = _index.StackedBar100Chart; + +Chart.prototype.renderArea = _index.AreaChart; + +Chart.prototype.renderSplineArea = _index.SplineAreaChart; + +Chart.prototype.renderStepArea = _index.StepAreaChart; + +Chart.prototype.renderStackedArea = _index.StackedAreaChart; + +Chart.prototype.renderStackedArea100 = _index.StackedArea100Chart; + +Chart.prototype.renderBubble = _index.BubbleChart; + +Chart.prototype.renderScatter = _index.ScatterChart; + +Chart.prototype.renderCandlestick = _index.CandlestickChart; + +Chart.prototype.renderRangeColumn = _index.RangeColumnChart; + +Chart.prototype.renderRangeBar = _index.RangeBarChart; + +Chart.prototype.renderRangeArea = _index.RangeAreaChart; + +Chart.prototype.renderRangeSplineArea = _index.RangeSplineAreaChart; + +Chart.prototype.renderPie = _index.PieChart; + +exports.default = Chart; + +},{"../charts/index":6,"../constants/options":23,"../constants/themes":24,"../core/axis":26,"../core/culture_info":29,"../core/legend":33,"../core/title":35,"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39,"./animator":25,"./canvasjs":27,"./data_series":30,"./event_manager":31,"./layout_manager":32,"./text_block":34,"./tooltip":36}],29:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _canvasjs = require('./canvasjs'); + +var _canvasjs2 = _interopRequireDefault(_canvasjs); + +var _utils = require('../helpers/utils'); + +var _culture = require('../constants/culture'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function CultureInfo(culture) { + + var cultureInfo; + + if (culture && _culture.cultures[culture]) cultureInfo = _culture.cultures[culture]; + + CultureInfo.base.constructor.call(this, "CultureInfo", cultureInfo); +} + +(0, _utils.extend)(CultureInfo, _canvasjs2.default); + +exports.default = CultureInfo; + +},{"../constants/culture":22,"../helpers/utils":39,"./canvasjs":27}],30:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _canvasjs = require('./canvasjs'); + +var _canvasjs2 = _interopRequireDefault(_canvasjs); + +var _utils = require('../helpers/utils'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function DataSeries(chart, options, theme, index, id) { + DataSeries.base.constructor.call(this, "DataSeries", options, theme); + + this.chart = chart; + this.canvas = chart.canvas; + this._ctx = chart.canvas.ctx; + this.index = index; + this.noDataPointsInPlotArea = 0; + //this.maxWidthInX = 0; + this.id = id; + this.chart._eventManager.objectMap[id] = { + id: id, objectType: "dataSeries", dataSeriesIndex: index + }; + this.dataPointIds = []; + this.plotUnit = []; + + this.axisX = null; + this.axisY = null; + + if (this.fillOpacity === null) { + if (this.type.match(/area/i)) this.fillOpacity = .7;else this.fillOpacity = 1; + } + + this.axisPlacement = this.getDefaultAxisPlacement(); + + if (typeof this._options.indexLabelFontSize === "undefined") { + + this.indexLabelFontSize = this.chart.getAutoFontSize(this.indexLabelFontSize); + } +} + +(0, _utils.extend)(DataSeries, _canvasjs2.default); + +//Static Method that returns the axisPlacement for a given ChartType. Returns one of "normal", "xySwapped", "none" +DataSeries.prototype.getDefaultAxisPlacement = function () { + + //if (!this.visible) + // return "none"; + + //type = this.type.toLowerCase(); + var type = this.type; + + if (type === "column" || type === "line" || type === "stepLine" || type === "spline" || type === "area" || type === "stepArea" || type === "splineArea" || type === "stackedColumn" || type === "stackedLine" || type === "bubble" || type === "scatter" || type === "stackedArea" || type === "stackedColumn100" || type === "stackedLine100" || type === "stackedArea100" || type === "candlestick" || type === "ohlc" || type === "rangeColumn" || type === "rangeArea" || type === "rangeSplineArea") { + return "normal"; + } else if (type === "bar" || type === "stackedBar" || type === "stackedBar100" || type === "rangeBar") { + + return "xySwapped"; + } else if (type === "pie" || type === "doughnut" || type === "funnel") { + return "none"; + } else { + window.console.log("Unknown Chart Type: " + type); + return null; + } +}; + +DataSeries.getDefaultLegendMarker = function (type) { + + //type = type.toLowerCase(); + + if (type === "column" || type === "stackedColumn" || type === "stackedLine" || type === "bar" || type === "stackedBar" || type === "stackedBar100" || type === "bubble" || type === "scatter" || type === "stackedColumn100" || type === "stackedLine100" || type === "stepArea" || type === "candlestick" || type === "ohlc" || type === "rangeColumn" || type === "rangeBar" || type === "rangeArea" || type === "rangeSplineArea") { + return "square"; + } else if (type === "line" || type === "stepLine" || type === "spline" || type === "pie" || type === "doughnut" || type === "funnel") { + return "circle"; + } else if (type === "area" || type === "splineArea" || type === "stackedArea" || type === "stackedArea100") { + return "triangle"; + } else { + window.console.log("Unknown Chart Type: " + type); + return null; + } +}; + +//Finds dataPoint with the given x value. If findClosest is set, finds dataPoint with closest x value. +//Returns searchResult object if found, else returns null +DataSeries.prototype.getDataPointAtX = function (x, findClosest) { + + if (!this.dataPoints || this.dataPoints.length === 0) return null; + + var searchResult = { + dataPoint: null, distance: Infinity, index: NaN + }; + var dataPoint = null; + + var j = 0; + var i = 0; + var direction = 1; // +1 for foward and -1 for backward. + + var minimumXDistance = Infinity; + var forwardMissCount = 0, + backwardMissCount = 0; + var maxMissCount = 1000; + var searchStartIndex = 0; + + if (this.chart.plotInfo.axisPlacement !== "none") { + + //var xRange = (this.dataPoints[this.dataPoints.length - 1].x - this.dataPoints[0].x); + + //if (xRange > 0) + // searchStartIndex = ((this.dataPoints.length - 1) / xRange * (x - this.dataPoints[0].x)) >> 0; + //else + // searchStartIndex = 0; + + var xRange = this.dataPoints[this.dataPoints.length - 1].x - this.dataPoints[0].x; + + if (xRange > 0) searchStartIndex = Math.min(Math.max((this.dataPoints.length - 1) / xRange * (x - this.dataPoints[0].x) >> 0, 0), this.dataPoints.length);else searchStartIndex = 0; + + //searchStartIndex = ((this.dataPoints[this.dataPoints.length - 1].x - this.dataPoints[0].x) / this.dataPoints.length * (x - this.dataPoints[0].x)) >> 0; + } + + while (true) { + + i = direction > 0 ? searchStartIndex + j : searchStartIndex - j; + + if (i >= 0 && i < this.dataPoints.length) { + + dataPoint = this.dataPoints[i]; + + var distance = Math.abs(dataPoint.x - x); + + if (distance < searchResult.distance) { + searchResult.dataPoint = dataPoint; + searchResult.distance = distance; + searchResult.index = i; + } + + var xDistance = Math.abs(dataPoint.x - x); + if (xDistance <= minimumXDistance) minimumXDistance = xDistance;else { + if (direction > 0) forwardMissCount++;else backwardMissCount++; + } + + if (forwardMissCount > maxMissCount && backwardMissCount > maxMissCount) break; + } else if (searchStartIndex - j < 0 && searchStartIndex + j >= this.dataPoints.length) break; + + if (direction === -1) { + j++; + direction = 1; + } else direction = -1; + } + + if (!findClosest && searchResult.dataPoint.x === x) return searchResult;else if (findClosest && searchResult.dataPoint !== null) return searchResult;else return null; }; // x & y should be in pixels. Can be used only after rendering the chart. @@ -8116,6 +10805,7 @@ DataSeries.prototype.getDataPointAtXY = function (x, y, getClosest) { angle = Number(((angle / Math.PI * 180 % 360 + 360) % 360).toFixed(12)); //console.log(angle); + var startAngle = Number(((visualInfo.startAngle / Math.PI * 180 % 360 + 360) % 360).toFixed(12)); var endAngle = Number(((visualInfo.endAngle / Math.PI * 180 % 360 + 360) % 360).toFixed(12)); @@ -8469,8 +11159,8 @@ LayoutManager.prototype.registerSpace = function (position, size) { } else if (position === "left") { this._leftOccupied += size.width; // this is width when seen upright/vertically } else if (position === "right") { - this._rightOccupied += size.width; // this is width when seen upright/vertically - } + this._rightOccupied += size.width; // this is width when seen upright/vertically + } }; LayoutManager.prototype.unRegisterSpace = function (position, size) { @@ -8481,8 +11171,8 @@ LayoutManager.prototype.unRegisterSpace = function (position, size) { } else if (position === "left") { this._leftOccupied -= size.width; // this is width when seen upright/vertically } else if (position === "right") { - this._rightOccupied -= size.width; // this is width when seen upright/vertically - } + this._rightOccupied -= size.width; // this is width when seen upright/vertically + } }; LayoutManager.prototype.getFreeSpace = function () { @@ -9635,62 +12325,62 @@ ToolTip.prototype.highlightObjects = function (entries) { //overlaidCanvasCtx.globalAlpha = .8; } } else if (dataSeries.type === "bubble") { - var markerProps = dataSeries.getMarkerProperties(index, eventObject.x1, eventObject.y1, this.chart.overlaidCanvasCtx); - markerProps.size = eventObject.size; - markerProps.color = "white"; - markerProps.borderColor = "white"; - //markerProps.borderThickness = 2; - overlaidCanvasCtx.globalAlpha = .3; - _render2.default.drawMarkers([markerProps]); - overlaidCanvasCtx.globalAlpha = 1; - } else if (dataSeries.type === "column" || dataSeries.type === "stackedColumn" || dataSeries.type === "stackedColumn100" || dataSeries.type === "bar" || dataSeries.type === "rangeBar" || dataSeries.type === "stackedBar" || dataSeries.type === "stackedBar100" || dataSeries.type === "rangeColumn") { - (0, _utils.drawRect)(overlaidCanvasCtx, eventObject.x1, eventObject.y1, eventObject.x2, eventObject.y2, "white", 0, null, false, false, false, false, .3); - } else if (dataSeries.type === "pie" || dataSeries.type === "doughnut") { - (0, _utils.drawSegment)(overlaidCanvasCtx, eventObject.center, eventObject.radius, "white", dataSeries.type, eventObject.startAngle, eventObject.endAngle, .3, eventObject.percentInnerRadius); - } else if (dataSeries.type === "candlestick") { - - overlaidCanvasCtx.globalAlpha = 1; - overlaidCanvasCtx.strokeStyle = eventObject.color; - overlaidCanvasCtx.lineWidth = eventObject.borderThickness * 2; - offset = overlaidCanvasCtx.lineWidth % 2 === 0 ? 0 : .5; - - overlaidCanvasCtx.beginPath(); - overlaidCanvasCtx.moveTo(eventObject.x3 - offset, eventObject.y2); - overlaidCanvasCtx.lineTo(eventObject.x3 - offset, Math.min(eventObject.y1, eventObject.y4)); - overlaidCanvasCtx.stroke(); - - overlaidCanvasCtx.beginPath(); - overlaidCanvasCtx.moveTo(eventObject.x3 - offset, Math.max(eventObject.y1, eventObject.y4)); - overlaidCanvasCtx.lineTo(eventObject.x3 - offset, eventObject.y3); - overlaidCanvasCtx.stroke(); - - (0, _utils.drawRect)(overlaidCanvasCtx, eventObject.x1, Math.min(eventObject.y1, eventObject.y4), eventObject.x2, Math.max(eventObject.y1, eventObject.y4), "transparent", eventObject.borderThickness * 2, eventObject.color, false, false, false, false); - overlaidCanvasCtx.globalAlpha = 1; - } else if (dataSeries.type === "ohlc") { - overlaidCanvasCtx.globalAlpha = 1; - - overlaidCanvasCtx.strokeStyle = eventObject.color; - overlaidCanvasCtx.lineWidth = eventObject.borderThickness * 2; - - offset = overlaidCanvasCtx.lineWidth % 2 === 0 ? 0 : .5; - - overlaidCanvasCtx.beginPath(); - overlaidCanvasCtx.moveTo(eventObject.x3 - offset, eventObject.y2); - overlaidCanvasCtx.lineTo(eventObject.x3 - offset, eventObject.y3); - overlaidCanvasCtx.stroke(); - - overlaidCanvasCtx.beginPath(); - overlaidCanvasCtx.moveTo(eventObject.x3, eventObject.y1); - overlaidCanvasCtx.lineTo(eventObject.x1, eventObject.y1); - overlaidCanvasCtx.stroke(); - - overlaidCanvasCtx.beginPath(); - overlaidCanvasCtx.moveTo(eventObject.x3, eventObject.y4); - overlaidCanvasCtx.lineTo(eventObject.x2, eventObject.y4); - overlaidCanvasCtx.stroke(); - - overlaidCanvasCtx.globalAlpha = 1; - } + var markerProps = dataSeries.getMarkerProperties(index, eventObject.x1, eventObject.y1, this.chart.overlaidCanvasCtx); + markerProps.size = eventObject.size; + markerProps.color = "white"; + markerProps.borderColor = "white"; + //markerProps.borderThickness = 2; + overlaidCanvasCtx.globalAlpha = .3; + _render2.default.drawMarkers([markerProps]); + overlaidCanvasCtx.globalAlpha = 1; + } else if (dataSeries.type === "column" || dataSeries.type === "stackedColumn" || dataSeries.type === "stackedColumn100" || dataSeries.type === "bar" || dataSeries.type === "rangeBar" || dataSeries.type === "stackedBar" || dataSeries.type === "stackedBar100" || dataSeries.type === "rangeColumn") { + (0, _utils.drawRect)(overlaidCanvasCtx, eventObject.x1, eventObject.y1, eventObject.x2, eventObject.y2, "white", 0, null, false, false, false, false, .3); + } else if (dataSeries.type === "pie" || dataSeries.type === "doughnut") { + (0, _utils.drawSegment)(overlaidCanvasCtx, eventObject.center, eventObject.radius, "white", dataSeries.type, eventObject.startAngle, eventObject.endAngle, .3, eventObject.percentInnerRadius); + } else if (dataSeries.type === "candlestick") { + + overlaidCanvasCtx.globalAlpha = 1; + overlaidCanvasCtx.strokeStyle = eventObject.color; + overlaidCanvasCtx.lineWidth = eventObject.borderThickness * 2; + offset = overlaidCanvasCtx.lineWidth % 2 === 0 ? 0 : .5; + + overlaidCanvasCtx.beginPath(); + overlaidCanvasCtx.moveTo(eventObject.x3 - offset, eventObject.y2); + overlaidCanvasCtx.lineTo(eventObject.x3 - offset, Math.min(eventObject.y1, eventObject.y4)); + overlaidCanvasCtx.stroke(); + + overlaidCanvasCtx.beginPath(); + overlaidCanvasCtx.moveTo(eventObject.x3 - offset, Math.max(eventObject.y1, eventObject.y4)); + overlaidCanvasCtx.lineTo(eventObject.x3 - offset, eventObject.y3); + overlaidCanvasCtx.stroke(); + + (0, _utils.drawRect)(overlaidCanvasCtx, eventObject.x1, Math.min(eventObject.y1, eventObject.y4), eventObject.x2, Math.max(eventObject.y1, eventObject.y4), "transparent", eventObject.borderThickness * 2, eventObject.color, false, false, false, false); + overlaidCanvasCtx.globalAlpha = 1; + } else if (dataSeries.type === "ohlc") { + overlaidCanvasCtx.globalAlpha = 1; + + overlaidCanvasCtx.strokeStyle = eventObject.color; + overlaidCanvasCtx.lineWidth = eventObject.borderThickness * 2; + + offset = overlaidCanvasCtx.lineWidth % 2 === 0 ? 0 : .5; + + overlaidCanvasCtx.beginPath(); + overlaidCanvasCtx.moveTo(eventObject.x3 - offset, eventObject.y2); + overlaidCanvasCtx.lineTo(eventObject.x3 - offset, eventObject.y3); + overlaidCanvasCtx.stroke(); + + overlaidCanvasCtx.beginPath(); + overlaidCanvasCtx.moveTo(eventObject.x3, eventObject.y1); + overlaidCanvasCtx.lineTo(eventObject.x1, eventObject.y1); + overlaidCanvasCtx.stroke(); + + overlaidCanvasCtx.beginPath(); + overlaidCanvasCtx.moveTo(eventObject.x3, eventObject.y4); + overlaidCanvasCtx.lineTo(eventObject.x2, eventObject.y4); + overlaidCanvasCtx.stroke(); + + overlaidCanvasCtx.globalAlpha = 1; + } } } @@ -10044,6 +12734,7 @@ exports.default = RenderHelper; Object.defineProperty(exports, "__esModule", { value: true }); +exports.isCanvasSupported = exports.dateFormat = undefined; exports.extend = extend; exports.inherit = inherit; exports.addToDateTime = addToDateTime; @@ -10061,7 +12752,6 @@ exports.addArrayIndexOf = addArrayIndexOf; exports.getFontHeightInPixels = getFontHeightInPixels; exports.getLineDashArray = getLineDashArray; exports.addEvent = addEvent; -exports.dateFormat = dateFormat; exports.numberFormat = numberFormat; exports.getObjectId = getObjectId; exports.getMouseCoordinates = getMouseCoordinates; @@ -10077,6 +12767,9 @@ exports.getBezierPoints = getBezierPoints; exports.convertPercentToValue = convertPercentToValue; exports.drawRect = drawRect; exports.drawSegment = drawSegment; + +var _culture = require("../constants/culture"); + function extend(derived, base) { derived.prototype = inherit(base.prototype); derived.prototype.constructor = derived; @@ -10097,7 +12790,7 @@ function addToDateTime(dateTime, num, type) { } function convertToNumber(num, type) { - return constants[type + "Duration"] * num; + return _culture.constants[type + "Duration"] * num; } function pad(value, length) { @@ -10340,7 +13033,7 @@ function addEvent(obj, eventType, fn, useCapture) { } //#region formatting functions/methods -function dateFormat() { +function _dateFormat() { var reg = /D{1,4}|M{1,4}|Y{1,4}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|f{1,3}|t{1,2}|T{1,2}|K|z{1,3}|"[^"]*"|'[^']*'/g; @@ -10469,6 +13162,8 @@ function dateFormat() { }; }; +var dateFormat = exports.dateFormat = _dateFormat(); + function numberFormat(v, fs, cultureInfo) { if (v === null) return ""; @@ -10632,14 +13327,14 @@ function numberFormat(v, fs, cultureInfo) { resultAfterDecimal += match.slice(1, match.length - 1); //addDecimalSeparator = true; } else if ((match[0] === "E" || match[0] === "e") && match[match.length - 1] === "0" && /[eE][+-]*[0]+/.test(match)) { - if (exponent < 0) match = match.replace("+", "").replace("-", "");else match = match.replace("-", ""); - resultAfterDecimal += match.replace(/[0]+/, function ($0) { - return pad(exponent, $0.length); - }); - } else { - resultAfterDecimal += match; - //addDecimalSeparator = true; - } + if (exponent < 0) match = match.replace("+", "").replace("-", "");else match = match.replace("-", ""); + resultAfterDecimal += match.replace(/[0]+/, function ($0) { + return pad(exponent, $0.length); + }); + } else { + resultAfterDecimal += match; + //addDecimalSeparator = true; + } } result += (addDecimalSeparator ? decimalSeparator : "") + resultAfterDecimal; @@ -10755,9 +13450,9 @@ function setCanvasSize(canvas, width, height) { //window.alert(backingStoreRatio); //window.alert(devicePixelRatio); } else { - canvas.width = width; - canvas.height = height; - } + canvas.width = width; + canvas.height = height; + } } function createCanvas(width, height) { @@ -11107,7 +13802,7 @@ function drawSegment(ctx, center, radius, color, type, theta1, theta2, fillOpaci ctx.restore(); }; -},{}],40:[function(require,module,exports){ +},{"../constants/culture":22}],40:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -11188,4 +13883,4 @@ Chart.version = "v1.8.2"; },{"../constants/culture":22,"../constants/themes":24,"../core/charts":28,"../core/culture_info":29,"../helpers/utils":39}]},{},[40])(40) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvY2hhcnRzL2FyZWEuanMiLCJzcmMvY2hhcnRzL2Jhci5qcyIsInNyYy9jaGFydHMvYnViYmxlLmpzIiwic3JjL2NoYXJ0cy9jYW5kbGVzdGljay5qcyIsInNyYy9jaGFydHMvY29sdW1uLmpzIiwic3JjL2NoYXJ0cy9pbmRleC5qcyIsInNyYy9jaGFydHMvcGllLmpzIiwic3JjL2NoYXJ0cy9yYW5nZV9hcmVhLmpzIiwic3JjL2NoYXJ0cy9yYW5nZV9iYXIuanMiLCJzcmMvY2hhcnRzL3JhbmdlX2NvbHVtbi5qcyIsInNyYy9jaGFydHMvcmFuZ2Vfc3BsaW5lX2FyZWEuanMiLCJzcmMvY2hhcnRzL3NjYXR0ZXIuanMiLCJzcmMvY2hhcnRzL3NwbGluZS5qcyIsInNyYy9jaGFydHMvc3BsaW5lX2FyZWEuanMiLCJzcmMvY2hhcnRzL3N0YWNrZWRfYXJlYS5qcyIsInNyYy9jaGFydHMvc3RhY2tlZF9hcmVhXzEwMC5qcyIsInNyYy9jaGFydHMvc3RhY2tlZF9iYXIuanMiLCJzcmMvY2hhcnRzL3N0YWNrZWRfYmFyXzEwMC5qcyIsInNyYy9jaGFydHMvc3RhY2tlZF9jb2x1bW4uanMiLCJzcmMvY2hhcnRzL3N0YWNrZWRfY29sdW1uXzEwMC5qcyIsInNyYy9jaGFydHMvc3RlcF9hcmVhLmpzIiwic3JjL2NvbnN0YW50cy9jdWx0dXJlLmpzIiwic3JjL2NvbnN0YW50cy9vcHRpb25zLmpzIiwic3JjL2NvbnN0YW50cy90aGVtZXMuanMiLCJzcmMvY29yZS9hbmltYXRvci5qcyIsInNyYy9jb3JlL2F4aXMuanMiLCJzcmMvY29yZS9jYW52YXNqcy5qcyIsInNyYy9jb3JlL2NoYXJ0cy5qcyIsInNyYy9jb3JlL2N1bHR1cmVfaW5mby5qcyIsInNyYy9jb3JlL2RhdGFfc2VyaWVzLmpzIiwic3JjL2NvcmUvZXZlbnRfbWFuYWdlci5qcyIsInNyYy9jb3JlL2xheW91dF9tYW5hZ2VyLmpzIiwic3JjL2NvcmUvbGVnZW5kLmpzIiwic3JjL2NvcmUvdGV4dF9ibG9jay5qcyIsInNyYy9jb3JlL3RpdGxlLmpzIiwic3JjL2NvcmUvdG9vbHRpcC5qcyIsInNyYy9oZWxwZXJzL2FuaW1hdG9yLmpzIiwic3JjL2hlbHBlcnMvcmVuZGVyLmpzIiwic3JjL2hlbHBlcnMvdXRpbHMuanMiLCJzcmMvbWFpbi9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztrQkNLZSxVQUFVLFFBQVEsRUFBRTtBQUNsQyxLQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDOztBQUV4RCxLQUFJLGVBQWUsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDOztBQUV4RCxLQUFJLGVBQWUsSUFBSSxDQUFDLEVBQ3ZCLE9BQU87O0FBRVIsS0FBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7O0FBRTNDLEtBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQ2hELEtBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQ2hELEtBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQzs7QUFFakIsS0FBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM3QixJQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7O0FBRVgsWUFuQk8saUJBQWlCLEVBb0J2QixRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7O0FBRWpCLElBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRSxJQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7O0FBRVgsWUExQk8saUJB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QU0sR0FBRyxRQUFRLEdBQUcsQ0FBQyxBQUFDLEdBQUksUUFBUSxDQUFDLEtBQUssR0FBRyxRQUFRLEFBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEcsUUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBSSxFQUFFLENBQUM7QUFDUCxRQUFJLEVBQUUsQ0FBQzs7QUFHUCxRQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFNBQUksTUFBTSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUUzRSxPQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoQixPQUFFLEdBQUcsWUFBWSxHQUFHLE1BQU0sQ0FBQzs7QUFFM0Isb0JBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQSxBQUFDLENBQUM7S0FFakQsTUFBTTtBQUNOLFNBQUksTUFBTSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUUzRSxPQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoQixPQUFFLEdBQUcsWUFBWSxHQUFHLE1BQU0sQ0FBQzs7QUFFM0Isb0JBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQSxBQUFDLENBQUM7S0FDakQ7O0FBR0QsU0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFHLFlBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVB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QUcsVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7O0FBQUMsQUFFMUQsS0FBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUUzRCxRQUFLLENBQUMsZUFBZSxHQUFHO0FBQ3ZCLE1BQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN6RCxDQUFBOztBQUVELFFBQUssQ0FBQyxZQUFZLEdBQUc7QUFDcEIsTUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUU7SUFDL0QsQ0FBQztHQUNGOzs7Ozs7OztBQUFBLEFBUUQsTUFBSSxNQUFNLEVBQUU7QUFDWCxLQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLEtBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkQsS0FBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDOztBQUFDLEFBRWxELEtBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzs7QUFFM0QsU0FBTSxDQUFDLGVBQWUsR0FBRztBQUN4QixNQUFF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QUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEFBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3RELFFBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFbEI7OztBQUFBLEFBR0QsT0FBSSxVQUFVLElBQUksVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUNyRSxTQUFTOztBQUVWLE9BQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ2hDLE1BQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE1BQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckQsTUFBTTtBQUNOLE1BQUUsQ0FBQyxDQUFDLElBQUssSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUksQ0FBQyxBQUFDLENBQUM7QUFDeEcsTUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxD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dkMsTUFBTTtBQUNOLFNBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDeEMsU0FBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztLQUN0Qzs7QUFFRCxRQUFJLEtBQUssR0FBRyxBQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQSxHQUFJLEVBQUUsR0FBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQUFBQyxDQUFDO0FBQzVFLFFBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDckIsUUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEMsUUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQUFBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RELFFBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEI7OztBQUFBLEFBR0QsT0FBSSxVQUFVLElBQUksVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUNyRSxTQUFTOztBQUVWLFFBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEFBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQzs7QUFFckgsT0FBSSxJQUFJLENBQUMsVUFB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QyxDQUFDLFNBQVMsQ0FBQzs7QUFFdEMsVUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztBQUN6QyxVQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO01BQ3ZDLE1BQU07QUFDTixVQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQ3hDLFVBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7TUFDdEM7O0FBRUQsU0FBSSxLQUFLLEdBQUcsQUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUEsR0FBSSxFQUFFLEdBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEFBQUMsQ0FBQztBQUM1RSxTQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3JCLFNBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLFNBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEFBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0RCxTQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBRWxCOzs7QUFBQSxBQUdELFFBQUksVUFBVSxJQUFJLFVBQVUsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDckUsU0FBUzs7QUFFVixTQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQzs7QUFBQyxB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S0FBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEtBQUssVUFBVSxFQUFFOztBQUUvRSxNQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTs7QUFFdkIsT0FBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQSxBQUFDLElBQUksT0FBTyxFQUFFO0FBQy9CLFFBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLFFBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQSxBQUFDLElBQUksT0FBTyxFQUFFO0FBQ3RDLFFBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLFFBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQSxBQUFDLElBQUksT0FBTyxFQUFFO0FBQ3RDLFFBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLFFBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQSxBQUFDLElBQUksT0FBTyxFQUFFO0FBQ3ZDLFFBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQSxBQUFDLElBQUksT0FBTyxFQUFFO0FBQ3ZDLFFBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQSxBQUFDLElBQUksT0FBTyxFQUFFO0FBQ3ZDLFFBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQSxBQUFDLElBQUksT0FBTyxFQUFFO0FBQ3hDLFFBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLFFBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQSxBQUFDLElBQUksT0FBTyxFQUFFO0FBQ3hDLFFBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLFFBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQSxBQUFDLElBQUksT0FBTyxFQUFFO0FBQ3hDLFFBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLFFBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQSxBQUFDLElBQUksT0FBTyxFQUFFO0FBQ3hDLFFBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLFFBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQSxBQUFDLElBQUksT0FBTyxFQUFFO0FBQ3hDLFFBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLFFBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQSxBQUFDLElBQUksT0FBTyxFQUFFO0FBQ3hDLFFBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLFFBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLElBQUks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QUMsQ0FBQyxBQUNyQyxJQUFJLGFBQWEsQ0FBRyxJQUFJLENBQUMsQUFFekIsUUFBUSxDQUFDLFlBQVksR0FBRyxJQUFJO0FBQUMsQUFFN0IsR0FBSSxJQUFJLENBQUMsY0FBYyxDQUFFLENBQ3hCLFFBQVEsQ0FBQyxZQUFZLEdBQUcsVUE3ekIzQixZQUFZLEVBNnpCNEIsSUFBSSxDQUFDLEtBQUssQ0FBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQUFDOUQsUUFBUSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUNsRSxBQUVELEdBQUksUUFBUSxDQUFDLElBQUksS0FBSyxNQUFNLENBQzNCLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQ3RDLEdBQUksUUFBUSxDQUFDLElBQUksS0FBSyxVQUFVLENBQ3BDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQzFDLEdBQUksUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLENBQ2xDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQ3hDLEdBQUksUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLENBQ2xDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQ3hDLEdBQUksUUFBUSxDQUFDLElBQUksS0FBSyxLQUFLLENBQy9CLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQ3JDLEdBQUksUUFBUSxDQUFDLElBQUksS0FBSyxNQUFNLENBQ2hDLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQ3RDLEdBQUksUUFBUSxDQUFDLElBQUksS0FBSyxVQUFVLENBQ3BDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQzFDLEdBQUksUUFBUSxD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QUMsQUFDeEMsR0FBSSxVQUFVLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FDekMsYUFBYSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsQUFFeEMsR0FBSSxVQUFVLEtBQUssSUFBSSxDQUN0QixTQUFTLEFBRVYsR0FBSSxVQUFVLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FDekMsYUFBYSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsQUFDeEMsR0FBSSxVQUFVLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FDekMsYUFBYSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FDeEMsQUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBRyxVQUFVLENBQUcsUUFBUSxDQUFDLENBQzFGOztBQUFBLENBSUQsQ0FBQSxBQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsdUJBQXVCLEdBQUcsU0FBVSxRQUFRLENBQUUsQ0FFN0QsR0FBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsSUFBSSxRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDdkUsT0FBTyxBQUVSLElBQUksYUFBYSxDQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEFBQzVDLElBQUksYUFBYSxDQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEFBRTVDLElBQUksVUFBVSxDQUFFLFVBQVUsQ0FBQyxBQUMzQixJQUFJLFVBQVUsQ0FBRyxLQUFLLENBQUMsQUFFdkIsSUFBSSxzQkFBc0IsQ0FBRyxFQUFFLENBQUMsQUFDaEMsSUFBSSxzQkFBc0IsQ0FBRyxFQUFFLENBQUMsQUFFaEMsSUFBSyxJQUFJLENBQUMsQ0FBRyxDQUFDLENBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDM0QsSUFBSSxVQUFVLENBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxBQUMxRCxJQUFJLENBQUMsQ0FBRyxDQUFDLENBQUMsQUFDVixJQUFJLG1CQUFtQixDQUFHLEtBQUssQ0FBQyxBQUNoQyxJQUFJLGtCQUFrQixDQUFHLEtBQUssQ0FBQyxBQUUvQixHQUFJLFVBQVUsQ0FBQyxhQUFhLEtBQUssUUFBUSxJQUFJLFVBQVUsQ0FBQyxhQUFhLEtBQUssV0FBVyxDQUFFLENBRXRGLElBQUksWUFBWSxDQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBRyxBQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDL0ssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFHLEFBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBRyxDQUFDLFFBQVEsQ0FBQyxBQUV0SSxJQUFJLFlBQVksQ0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUcsQUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQy9LLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBRyxBQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUcsUUFBUSxDQUFDLENBQ3JJLEFBR0QsR0FBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUUsQ0FDN0csVUFBVSxHQUFHLElBQUksQ0FBQyxDQUNsQixBQUVELElBQUssQ0FBQyxHQUFHLENBQUMsQ0FBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUUsQ0FBQyxFQUFFLEVBQUU7QUFHbEQsR0FBSSxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBRSxDQUN0RCxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDL0IsQUFFRCxHQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBRSxDQUN2QyxVQUFVLEdBQUcsSUFBSSxDQUFDLEFBQ2xCLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFBQyxDQUNsRCxLQUVBLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxBQUV6QyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQUFJeEMsR0FBSSxVQUFVLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FDakMsYUFBYSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsQUFDaEMsR0FBSSxVQUFVLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FDakMsYUFBYSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsQUFFaEMsR0FBSSxDQUFDLEdBQUcsQ0FBQyxDQUFFLENBQ1YsSUFBSSxLQUFLLENBQUcsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxBQUN4RCxLQUFLLEdBQUcsQ0FBQyxLQUFLLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUEsQUFBQztBQUFDLEFBRWxDLEdBQUksYUFBYSxDQUFDLE9BQU8sR0FBRyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBRSxDQUNqRCxhQUFhLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUM5QixBQUVELEdBQUksVUFBVSxLQUFLLElBQUksSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFFLENBQ25FLElBQUksS0FBSyxDQUFHLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQUFDeEQsS0FBSyxHQUFHLENBQUMsS0FBSyxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFBLEFBQUM7QUFBQyxBQUVsQyxHQUFJLGFBQWEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUUsQ0FDakQsYUFBYSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FDaEMsQ0FDQyxDQUNEO0FBQUEsQUFHRCxHQUFJLFVBQVUsR0FBRyxZQUFZLElBQUksQ0FBQyxtQkFBbUIsQ0FBRSxDQUN0RCxTQUFTLENBQ1QsS0FBTSxHQUFJLENBQUMsbUJBQW1CLENBQUUsQ0FDaEMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEFBRTNCLEdBQUksQ0FBQyxHQUFHLENBQUMsQ0FBRSxDQUNWLENBQUMsSUFBSSxDQUFDLENBQUMsQUFDUCxTQUFTLENBQ1QsQ0FDRDtBQUFBLEFBR0QsR0FBSSxVQUFVLEdBQUcsWUFBWSxJQUFJLENBQUMsa0JBQWtCLENBQUUsQ0FDckQsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLENBQzFCLEtBQU0sR0FBSSxVQUFVLEdBQUcsWUFBWSxJQUFJLGtCQUFrQixDQUFFLENBQzNELFNBQVMsQ0FDVCxBQUdELEdBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQ2pDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEFBRXBFLEdBQUksVUFBVSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQ3pDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEFBQ3hDLEdBQUksVUFBVSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQ3pDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEFBRXhDLEdBQUksVUFBVSxLQUFLLElBQUksQ0FDdEIsU0FBUyxBQUVWLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUcsQ0FBQyxDQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUEsR0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEFBRXpILEdBQUksVUFBVSxJQUFJLENBQUMsQ0FBRSxDQUNwQixHQUFJLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUNyQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsS0FFakQsc0JBQXNCLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQ2pELEtBQU0sQ0FDTixHQUFJLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUNyQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsS0FFakQsc0JBQXNCLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQ2pELENBQ0QsQUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBRyxVQUFVLENBQUcsUUFBUSxDQUFDLENBQzFGLEFBRUQsSUFBSyxDQUFDLElBQUksc0JBQXNCLEVBQUUsQ0FDakMsR0FBSSxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FDOUMsR0FBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FDYixTQUFTLENBQ1QsQUFDRCxJQUFJLElBQUksQ0FBRyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxBQUVyQyxHQUFJLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUMzQixhQUFhLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxBQUUxQixHQUFJLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUMzQixhQUFhLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxBQUUxQixHQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsV0FBVyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUNqRSxTQUFTLEFBRVYsR0FBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FDbkMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsQUFDbEMsR0FBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FDbkMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FDbEMsQ0FFQSxBQUVELElBQUssQ0FBQyxJQUFJLHNCQUFzQixFQUFFLENBRWpDLEdBQUksc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQzlDLEdBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQ2IsU0FBUyxDQUNULEFBRUQsSUFBSSxJQUFJLENBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQUFFckMsR0FBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FDM0IsYUFBYSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQUFFMUIsR0FBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FDM0IsYUFBYSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQUFFMUIsR0FBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLFdBQVcsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FDakUsU0FBUyxBQUVWLEdBQUksSUFBSSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQ25DLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEFBQ2xDLEdBQUksSUFBSSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQ25DLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQ2xDLENBRUE7OztBQUFBLENBT0QsQ0FBQSxBQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsMEJBQTBCLEdBQUcsU0FBVSxRQUFRLENBQUUsQ0FDaEUsR0FBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsSUFBSSxRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDdkUsT0FBTyxBQUVSLElBQUksYUFBYSxDQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEFBQzVDLElBQUksYUFBYSxDQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEFBRTVDLElBQUksVUFBVSxDQUFFLFVBQVUsQ0FBQyxBQUMzQixJQUFJLFVBQVUsQ0FBRyxLQUFLLENBQUMsQUFDdkIsSUFBSSxpQkFBaUIsQ0FBRyxLQUFLLENBQUMsQUFDOUIsSUFBSSxpQkFBaUIsQ0FBRyxLQUFLLENBQUMsQUFFOUIsSUFBSSxjQUFjLENBQUcsRUFBRSxDQUFDLEFBRXhCLElBQUssSUFBSSxDQUFDLENBQUcsQ0FBQyxDQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFFLENBQUMsRUFBRSxFQUFFLENBQzNELElBQUksVUFBVSxDQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQUFDMUQsSUFBSSxDQUFDLENBQUcsQ0FBQyxDQUFDLEFBQ1YsSUFBSSxtQkFBbUIsQ0FBRyxLQUFLLENBQUMsQUFDaEMsSUFBSSxrQkFBa0IsQ0FBRyxLQUFLLENBQUMsQUFFL0IsR0FBSSxVQUFVLENBQUMsYUFBYSxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsYUFBYSxLQUFLLFdBQVcsQ0FBRSxDQUV0RixJQUFJLFlBQVksQ0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUcsQUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQy9LLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBRyxBQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUcsQ0FBQyxRQUFRLENBQUMsQUFFdEksSUFBSSxZQUFZLENBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFHLEFBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUMvSyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUcsQUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFHLFFBQVEsQ0FBQyxDQUNySSxBQUdELEdBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFFLENBQzdHLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FDbEIsQUFFRCxJQUFLLENBQUMsR0FBRyxDQUFDLENBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFFLENBQUMsRUFBRSxFQUFFO0FBR2xELEdBQUksT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUUsQ0FDdEQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQy9CLEFBRUQsR0FBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUUsQ0FDdkMsVUFBVSxHQUFHLElBQUksQ0FBQyxBQUNsQixVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQUMsQ0FDbEQsS0FFQSxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQUFFekMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEFBSXhDLEdBQUksVUFBVSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQ2pDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEFBQ2hDLEdBQUksVUFBVSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQ2pDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEFBRWhDLEdBQUksQ0FBQyxHQUFHLENBQUMsQ0FBRSxDQUNWLElBQUksS0FBSyxDQUFHLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQUFDeEQsS0FBSyxHQUFHLENBQUMsS0FBSyxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFBLEFBQUM7QUFBQyxBQUVsQyxH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SSxtQkFBbUIsQ0FBRyxLQUFLLENBQUMsQUFDaEMsSUFBSSxrQkFBa0IsQ0FBRyxLQUFLLENBQUMsQUFFL0IsR0FBSSxVQUFVLENBQUMsYUFBYSxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsYUFBYSxLQUFLLFdBQVcsQ0FBRSxDQUV0RixJQUFJLFlBQVksQ0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUcsQUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQy9LLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBRyxBQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUcsQ0FBQyxRQUFRLENBQUMsQUFFdEksSUFBSSxZQUFZLENBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFHLEFBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUMvSyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUcsQUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFHLFFBQVEsQ0FBQyxDQUNySSxBQUdELEdBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxD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LFNBQVMsQ0FBRSxVQUFVLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFFLEtBQUssQ0FBQyxDQUFDLENBRTFGLEFBRUQsR0FBSSxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUNsQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUUsRUFBRSxDQUFDLENBQUMsQ0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FJdkQsS0FDSSxHQUFJLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FFdEIsSUFBSyxJQUFJLENBQUMsQ0FBRyxDQUFDLENBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFFLENBQUMsRUFBRSxFQUFFLENBQzdDLEdBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FDeEMsU0FBUyxBQUVWLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEFBQzdCLElBQUksTUFBTSxDQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQUFFL0IsR0FBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUUsQ0FDckYsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEFBRXRELEdBQUksSUFBSSxLQUFLLFdBQVcsSUFBSSxVQUFVLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBRSxDQUN4RCxLQUFLLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEFBRXRDLEdBQUksSUFB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QUFHLElBQUksQ0FDckIsTUFBTSxDQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDeEMsTUFBTSxDQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDeEMsS0FBSyxDQUFHLElBQUksQ0FBQyxBQUVkLEdBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEtBQUssV0FBVyxDQUFFLENBQ2hELElBQUksSUFBSSxDQUFHLE1BQU0sQ0FBQyxBQUNsQixNQUFNLEdBQUcsTUFBTSxDQUFDLEFBQ2hCLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FDZCxBQUVELFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQUFDeEMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxBQUV4QyxHQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQSxBQUFDLENBQUUsQ0FDcEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUNyQixLQUFNLEdBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBRSxDQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUNyQyxBQUVELEdBQUksQ0FBQyxBQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQU0sSUFBSSxDQUFDLFVB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QVcsQ0FBQyxDQUNuQixDQUFBLEFBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsVUFBWSxDQUU3QyxJQUFJLFFBQVEsQ0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEFBRTdCLElBQUksS0FBSyxDQUFHLElBQUksQ0FBQyxLQUFLLENBQUcsSUFBSSxDQUFDLEtBQUssQ0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEFBRWxELEdBQUksUUFqd0VKLGlCQUFpQixBQWl3RUssS0FBSyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQSxBQUFDLENBQUUsQ0FDL0QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDakQsQUFFRCxHQUFJLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFFLENBQ3hCLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQUFDdkksUUFBUSxDQUFDLEVBQUUsR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxBQUFDLENBQUMsQUFFcEksUUFBUSxDQUFDLEVBQUUsR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFHLEtB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LEVBQUUsS0FBSyxFQUFFLENBQUM7V0FDcEIsQ0FBQztBQUNGLGNBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDaEIsTUFBTTtBQUNMLGFBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDckIsa0JBQVEsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUEsR0FBSSxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3pDOztBQUVELFlBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7O0FBRXJDLFlBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLO0FBQUMsQUFDN0IsWUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzs7QUFBQyxBQUVyQixXQUFHLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsR0FBRyxVQUFVLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQSxBQUFDLElBQUksQUFBQyxJQUFJLENBQUMsU0FBUyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsR0FBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUEsQUFBQyxHQUFHLENBQUMsQ0FBQSxBQUFDLENBQUMsQ0FBQztBQUMzUSxXQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFckIsWUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQzlDO0tBQ0Y7O0FBRUQsUUFBSSxJQUFJLENBQUMsUUFBUSxLQUFL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Q0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7O0FBRTFILFVBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQ2xFLFVBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUUsVUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUNuRyxVQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0tBQ3JHO0FBQ0QsYUFBUyxHQUFHLFNBQVMsR0FBRyxZQUFZLENBQUM7R0FDdEM7Ozs7Ozs7O0FBQUEsQUFRRCxXQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxD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R0FBRyxDQUFDLENBQUM7Q0FDdkI7O0FBRU0sU0FBUyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakMsS0FBSSxHQUFHLEdBQUcsQUFBQyxDQUFDLElBQUksRUFBRSxHQUFLLENBQUMsSUFBSSxDQUFDLEFBQUMsR0FBSSxDQUFDLEFBQUMsQ0FBQzs7QUFFckMsUUFBTyxHQUFHLENBQUM7Q0FDWDs7QUFFTSxTQUFTLFFBQVEsQ0FBQyxHQUFHLEVBQUU7QUFDN0IsS0FBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2IsS0FBSSxDQUFDLEdBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFBLElBQUssRUFBRSxBQUFDLENBQUM7QUFDakMsS0FBSSxDQUFDLEdBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFBLElBQUssQ0FBQyxBQUFDLENBQUM7QUFDaEMsS0FBSSxDQUFDLEdBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFBLElBQUssQ0FBQyxBQUFDOzs7Ozs7QUFBQyxBQU1oQyxJQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1gsSUFBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNYLElBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRVgsUUFBTyxHQUFHLENBQUM7Q0FDWDs7QUFFTSxTQUFTLFlBQVksQ0FBQyxjQUFHLEVBQWE7QUFDNUMsS0FBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7O0FBRTVCLEtBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsS0FBSSxHQUFHLEFBQUMsSUFBSSxHQUFHLENBQUMsR0FDWixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckIsS0FBSSxJQUFJLEdBQUcsQ0FBQyxFQUNYLElBQUksSUFB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QUc7QUFDUCxZQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBLEdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQUEsQUFDckUsU0FBSyxJQUFJO0FBQ1IsWUFBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQSxHQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFBQSxBQUM3RSxTQUFLLEtBQUs7QUFDVCxZQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBLEdBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0FBQUEsQUFFN0c7QUFDQyxZQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0FBQUEsSUFFckM7R0FDRCxDQUFDLENBQUM7O0FBRUgsU0FBTyxNQUFNLENBQUM7RUFDZCxDQUFDO0NBQ0YsQ0FBQzs7QUFFSyxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRTtBQUNoRCxLQUFJLENBQUMsS0FBSyxJQUFJLEVBQ2IsT0FBTyxFQUFFLENBQUM7O0FBRVgsRUFBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLEtBQUksVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtB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QWdCLE9BQU8sQ0FBQyxDQUFDLENBQUM7Q0FFakUsQ0FBQzs7QUFFRixLQUFLLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcbmltcG9ydCBSZW5kZXJIZWxwZXIgZnJvbSAnLi4vaGVscGVycy9yZW5kZXInO1xuaW1wb3J0IEFuaW1hdGlvbkhlbHBlciBmcm9tICcuLi9oZWxwZXJzL2FuaW1hdG9yJztcbmltcG9ydCB7aXNDYW52YXNTdXBwb3J0ZWQsIGdldExpbmVEYXNoQXJyYXksIGludFRvSGV4Q29sb3JTdHJpbmd9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblxuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGdob3N0Q3R4ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4O1xuXG5cdHZhciBheGlzWFByb3BzID0gcGxvdFVuaXQuYXhpc1gubGluZUNvb3JkaW5hdGVzO1xuXHR2YXIgYXhpc1lQcm9wcyA9IHBsb3RVbml0LmF4aXNZLmxpbmVDb29yZGluYXRlcztcblx0dmFyIG1hcmtlcnMgPSBbXTtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXHRjdHguc2F2ZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRnaG9zdEN0eC5zYXZlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdGdob3N0Q3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0XHRnaG9zdEN0eC5jbGlwKCk7XG5cdH1cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cblx0XHR2YXIgc2VyaWVzSWQgPSBkYXRhU2VyaWVzLmlkO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbc2VyaWVzSWRdID0ge1xuXHRcdFx0b2JqZWN0VHlwZTogXCJkYXRhU2VyaWVzXCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4XG5cdFx0fTtcblxuXHRcdHZhciBoZXhDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoc2VyaWVzSWQpO1xuXHRcdGdob3N0Q3R4LmZpbGxTdHlsZSA9IGhleENvbG9yO1xuXHRcdC8vZ2hvc3RDdHgubGluZVdpZHRoID0gZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzO1xuXHRcdC8vZ2hvc3RDdHgubGluZVdpZHRoID0gMjA7XG5cblx0XHRtYXJrZXJzID0gW107XG5cblx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXHRcdHZhciBpID0gMCwgeCwgeTtcblx0XHR2YXIgZGF0YVBvaW50WDsgLy9Vc2VkIHNvIHRoYXQgd2hlbiBkYXRhUG9pbnQueCBpcyBhIERhdGVUaW1lIHZhbHVlLCBpdCBkb2Vzbid0IGdldCBjb252ZXJ0ZWQgdG8gbnVtYmVyIGJhY2sgYW5kIGZvcnRoLlxuXG5cdFx0dmFyIHlaZXJvVG9QaXhlbCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoMCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0dmFyIGJhc2VZO1xuXG5cdFx0dmFyIHN0YXJ0UG9pbnQgPSBudWxsO1xuXG5cdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly9jdHguc3Ryb2tlU3R5bGUgPSBcIiM0NTcyQTcgXCI7XG5cdFx0XHR2YXIgY29sb3IgPSBkYXRhU2VyaWVzLl9jb2xvclNldFtpICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcblx0XHRcdC8vY3R4LnN0cm9rZVN0eWxlID0gXCJyZWRcIjtcblx0XHRcdGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuXHRcdFx0Y3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblxuXHRcdFx0aWYgKGN0eC5zZXRMaW5lRGFzaCkge1xuXHRcdFx0XHRjdHguc2V0TGluZURhc2goZ2V0TGluZURhc2hBcnJheShkYXRhU2VyaWVzLmxpbmVEYXNoVHlwZSwgZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzKSk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBwcmV2RGF0YU51bGwgPSB0cnVlO1xuXHRcdFx0Zm9yICg7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lID8gZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKSA6IGRhdGFQb2ludHNbaV0ueDtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGVvZiAoZGF0YVBvaW50c1tpXS55KSAhPT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHRcdGNsb3NlQXJlYSgpO1xuXG5cdFx0XHRcdFx0cHJldkRhdGFOdWxsID0gdHJ1ZTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHggPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5ID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnkgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXG5cdFx0XHRcdGlmIChpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSB8fCBwcmV2RGF0YU51bGwpIHtcblx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0Y3R4Lm1vdmVUbyh4LCB5KTtcblx0XHRcdFx0XHRzdGFydFBvaW50ID0ge1xuXHRcdFx0XHRcdFx0eDogeCwgeTogeVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubW92ZVRvKHgsIHkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gZmFsc2U7XG5cdFx0XHRcdFx0cHJldkRhdGFOdWxsID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cblx0XHRcdFx0XHRjdHgubGluZVRvKHgsIHkpO1xuXG5cdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubGluZVRvKHgsIHkpO1xuXG5cdFx0XHRcdFx0aWYgKGkgJSAyNTAgPT0gMCkge1xuXHRcdFx0XHRcdFx0Y2xvc2VBcmVhKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4LCB5MTogeVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vUmVuZGVyIE1hcmtlclxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5tYXJrZXJTaXplICE9PSAwKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ubWFya2VyU2l6ZSA+IDAgfHwgZGF0YVNlcmllcy5tYXJrZXJTaXplID4gMCkge1xuXHRcdFx0XHRcdFx0dmFyIG1hcmtlclByb3BzID0gZGF0YVNlcmllcy5nZXRNYXJrZXJQcm9wZXJ0aWVzKGksIHgsIHksIGN0eCk7XG5cdFx0XHRcdFx0XHRtYXJrZXJzLnB1c2gobWFya2VyUHJvcHMpO1xuXG5cdFx0XHRcdFx0XHQvL2lmICghZGF0YVNlcmllcy5tYXhXaWR0aEluWCB8fCBtYXJrZXJQcm9wcy5zaXplID4gZGF0YVNlcmllcy5tYXhXaWR0aEluWCkge1xuXHRcdFx0XHRcdFx0Ly9cdGRhdGFTZXJpZXMubWF4V2lkdGhJblggPSBtYXJrZXJQcm9wcy5zaXplIC8gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA+IDEgPyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgLSAxIDogcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0KTtcblx0XHRcdFx0XHRcdC8vfVxuXG5cdFx0XHRcdFx0XHR2YXIgbWFya2VyQ29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGlkKTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0eDogeCwgeTogeSwgY3R4OiBnaG9zdEN0eCxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBtYXJrZXJQcm9wcy50eXBlLFxuXHRcdFx0XHRcdFx0XHRcdHNpemU6IG1hcmtlclByb3BzLnNpemUsXG5cdFx0XHRcdFx0XHRcdFx0Y29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlckNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJUaGlja25lc3M6IG1hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzc1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5pbmRleExhYmVsIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbCB8fCBkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWxGb3JtYXR0ZXIgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyKSB7XG5cblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJhcmVhXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeCwgeTogeVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55ID49IDAgPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNsb3NlQXJlYSgpO1xuXG5cdFx0XHQvL3N0YXJ0UG9pbnQgPSB7IHg6IHgsIHk6IHkgfTtcblx0XHRcdFJlbmRlckhlbHBlci5kcmF3TWFya2VycyhtYXJrZXJzKTtcblx0XHR9XG5cdH1cblxuXHRjdHgucmVzdG9yZSgpO1xuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnJlc3RvcmUoKTtcblxuXHRmdW5jdGlvbiBjbG9zZUFyZWEoKSB7XG5cblx0XHRpZiAoIXN0YXJ0UG9pbnQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAoZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzID4gMClcblx0XHRcdGN0eC5zdHJva2UoKTtcblxuXHRcdGlmIChwbG90VW5pdC5heGlzWS52aWV3cG9ydE1pbmltdW0gPD0gMCAmJiBwbG90VW5pdC5heGlzWS52aWV3cG9ydE1heGltdW0gPj0gMCkge1xuXHRcdFx0YmFzZVkgPSB5WmVyb1RvUGl4ZWw7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHBsb3RVbml0LmF4aXNZLnZpZXdwb3J0TWF4aW11bSA8IDApXG5cdFx0XHRiYXNlWSA9IGF4aXNZUHJvcHMueTE7XG5cdFx0ZWxzZSBpZiAocGxvdFVuaXQuYXhpc1kudmlld3BvcnRNaW5pbXVtID4gMClcblx0XHRcdGJhc2VZID0gYXhpc1hQcm9wcy55MjtcblxuXHRcdGN0eC5saW5lVG8oeCwgYmFzZVkpO1xuXHRcdGN0eC5saW5lVG8oc3RhcnRQb2ludC54LCBiYXNlWSk7XG5cdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXG5cdFx0Y3R4Lmdsb2JhbEFscGhhID0gZGF0YVNlcmllcy5maWxsT3BhY2l0eTtcblx0XHRjdHguZmlsbCgpO1xuXHRcdGN0eC5nbG9iYWxBbHBoYSA9IDE7XG5cblx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdGdob3N0Q3R4LmxpbmVUbyh4LCBiYXNlWSk7XG5cdFx0XHRnaG9zdEN0eC5saW5lVG8oc3RhcnRQb2ludC54LCBiYXNlWSk7XG5cdFx0XHRnaG9zdEN0eC5jbG9zZVBhdGgoKTtcblx0XHRcdGdob3N0Q3R4LmZpbGwoKTtcblx0XHR9XG5cblx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0Y3R4Lm1vdmVUbyh4LCB5KTtcblx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRnaG9zdEN0eC5tb3ZlVG8oeCwgeSk7XG5cblx0XHRzdGFydFBvaW50ID0ge1xuXHRcdFx0eDogeCwgeTogeVxuXHRcdH07XG5cdH1cblxuXHQvL3NvdXJjZSBhbmQgZGVzdCB3b3VsZCBiZSBzYW1lIHdoZW4gYW5pbWF0aW9uIGlzIG5vdCBlbmFibGVkXG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci54Q2xpcEFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcubGluZWFyLCBhbmltYXRpb25CYXNlOiAwXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuIiwiXG5pbXBvcnQgQW5pbWF0aW9uSGVscGVyIGZyb20gJy4uL2hlbHBlcnMvYW5pbWF0b3InO1xuaW1wb3J0IHtpc0NhbnZhc1N1cHBvcnRlZCwgZHJhd1JlY3QsIGludFRvSGV4Q29sb3JTdHJpbmd9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblx0dmFyIHRvdGFsRGF0YVNlcmllcyA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDtcblxuXHRpZiAodG90YWxEYXRhU2VyaWVzIDw9IDApXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBjb2xvciA9IG51bGw7XG5cblx0dmFyIHBsb3RBcmVhID0gdGhpcy5wbG90QXJlYTtcblxuXHR2YXIgaSA9IDAsIHgsIHk7XG5cdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgZnJvbSBkYXRhVGltZSBldmVyeXRpbWUgaXQgaXMgdXNlZC5cblxuXHQvL0luIGNhc2Ugb2YgQmFyIENoYXJ0LCB5WmVyb1RvUGl4ZWwgaXMgeCBjby1vcmRpbmF0ZSFcblx0dmFyIHlaZXJvVG9QaXhlbCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoMCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pKSA8PCAwO1xuXG5cdHZhciBtYXhCYXJXaWR0aCA9IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggPyB0aGlzLmRhdGFQb2ludE1heFdpZHRoIDogTWF0aC5taW4oKHRoaXMuaGVpZ2h0ICogLjE1KSwgdGhpcy5wbG90QXJlYS5oZWlnaHQgLyBwbG90VW5pdC5wbG90VHlwZS50b3RhbERhdGFTZXJpZXMgKiAuOSkgPDwgMDtcblx0dmFyIHhNaW5EaWZmID0gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8ubWluRGlmZjtcblx0Ly92YXIgYmFyV2lkdGggPSAoKChwbG90QXJlYS5oZWlnaHQgLyBNYXRoLmFicyhwbG90VW5pdC5heGlzWC52aWV3cG9ydE1heGltdW0gLSBwbG90VW5pdC5heGlzWC52aWV3cG9ydE1pbmltdW0pKSAqIE1hdGguYWJzKHhNaW5EaWZmKSkgLyB0b3RhbERhdGFTZXJpZXMgKiAuOSkgPDwgMDtcblxuXHR2YXIgYmFyV2lkdGggPSAoKChwbG90QXJlYS5oZWlnaHQgLyBNYXRoLmFicyhwbG90VW5pdC5heGlzWC52aWV3cG9ydE1heGltdW0gLSBwbG90VW5pdC5heGlzWC52aWV3cG9ydE1pbmltdW0pKSAqIE1hdGguYWJzKHhNaW5EaWZmKSkgLyBwbG90VW5pdC5wbG90VHlwZS50b3RhbERhdGFTZXJpZXMgKiAuOSkgPDwgMDtcblxuXHRpZiAoYmFyV2lkdGggPiBtYXhCYXJXaWR0aClcblx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoO1xuXHRlbHNlIGlmICh4TWluRGlmZiA9PT0gSW5maW5pdHkpIHtcblx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoIC8gcGxvdFVuaXQucGxvdFR5cGUudG90YWxEYXRhU2VyaWVzICogLjk7XG5cdH0gZWxzZSBpZiAoYmFyV2lkdGggPCAxKVxuXHRcdGJhcldpZHRoID0gMTtcblxuXHRjdHguc2F2ZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHguc2F2ZSgpO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5jbGlwKCk7XG5cdH1cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXHRcdHZhciBpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IHRydWU7XG5cblxuXHRcdC8vZGF0YVNlcmllcy5tYXhXaWR0aEluWCA9IGJhcldpZHRoIC8gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA+IDEgPyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgLSAxIDogcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0KTtcblxuXG5cdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly92YXIgeHkgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPblBsb3RBcmVhKGRhdGFQb2ludHNbMF0ueCwgZGF0YVBvaW50c1swXS55KTtcblxuXHRcdFx0dmFyIGJldmVsRW5hYmxlZCA9IChiYXJXaWR0aCA+IDUpICYmIGRhdGFTZXJpZXMuYmV2ZWxFbmFibGVkID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBcIiM0NTcyQTcgXCI7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0ZGF0YVBvaW50c1tpXS5nZXRUaW1lID8gZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZW9mIChkYXRhUG9pbnRzW2ldLnkpICE9PSBcIm51bWJlclwiKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdC8veCBhbmQgeSBhcmUgcGl4ZWwgY28tb3JkaW5hdGVzIG9mIHBvaW50IGFuZCBzaG91bGQgbm90IGJlIGNvbmZ1c2VkIHdpdGggWCBhbmQgWSB2YWx1ZXNcblx0XHRcdFx0eSA9IChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50WCAtIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHggPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cblxuXHRcdFx0XHR2YXIgeTEgPSAoeSAtIChwbG90VW5pdC5wbG90VHlwZS50b3RhbERhdGFTZXJpZXMgKiBiYXJXaWR0aCAvIDIpICsgKChwbG90VW5pdC5wcmV2aW91c0RhdGFTZXJpZXNDb3VudCArIGopICogYmFyV2lkdGgpKSA8PCAwO1xuXHRcdFx0XHR2YXIgeTIgPSB5MSArIGJhcldpZHRoIDw8IDA7XG5cdFx0XHRcdHZhciB4MTtcblx0XHRcdFx0dmFyIHgyO1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLnkgPj0gMCkge1xuXHRcdFx0XHRcdHgxID0geVplcm9Ub1BpeGVsO1xuXHRcdFx0XHRcdHgyID0geDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4MSA9IHg7XG5cdFx0XHRcdFx0eDIgPSB5WmVyb1RvUGl4ZWw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL2RyYXdSZWN0KGN0eCwgeDEsIHkxLCBwbG90QXJlYS54MiwgeTIsIFwiI0VFRUVFRVwiLCAwLCBudWxsLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdC8vZHJhd1JlY3QoY3R4LCB4MSwgeTEsIHBsb3RBcmVhLngyLCB5MiwgXCIjQkRDRUQzXCIsIDAsIG51bGwsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuXHRcdFx0XHRjb2xvciA9IGRhdGFQb2ludHNbaV0uY29sb3IgPyBkYXRhUG9pbnRzW2ldLmNvbG9yIDogZGF0YVNlcmllcy5fY29sb3JTZXRbaSAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cdFx0XHRcdC8vY29sb3IgPSBcIiMxQjQ5NjJcIjtcblx0XHRcdFx0ZHJhd1JlY3QoY3R4LCB4MSwgeTEsIHgyLCB5MiwgY29sb3IsIDAsIG51bGwsIGJldmVsRW5hYmxlZCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZGF0YVNlcmllcy5maWxsT3BhY2l0eSk7XG5cblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5MlxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRkcmF3UmVjdCh0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwiYmFyXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogZGF0YVBvaW50c1tpXS55ID49IDAgPyB4MiA6IHgxLCB5OiB5MSArICh5MiAtIHkxKSAvIDJcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IGRhdGFQb2ludHNbaV0ueSA+PSAwID8gMSA6IC0xLFxuXHRcdFx0XHRcdFx0Ym91bmRzOiB7XG5cdFx0XHRcdFx0XHRcdHgxOiBNYXRoLm1pbih4MSwgeDIpLCB5MTogeTEsIHgyOiBNYXRoLm1heCh4MSwgeDIpLCB5MjogeTJcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjdHgucmVzdG9yZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVzdG9yZSgpO1xuXG5cdC8vc291cmNlIGFuZCBkZXN0IHdvdWxkIGJlIHNhbWUgd2hlbiBhbmltYXRpb24gaXMgbm90IGVuYWJsZWRcblx0dmFyIGFuaW1hdGlvbkJhc2UgPSBNYXRoLm1heCh5WmVyb1RvUGl4ZWwsIHBsb3RVbml0LmF4aXNYLmJvdW5kaW5nUmVjdC54Mik7XG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci54U2NhbGVBbmltYXRpb24sIGVhc2luZ0Z1bmN0aW9uOiBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmVhc2VPdXRRdWFydCwgYW5pbWF0aW9uQmFzZTogYW5pbWF0aW9uQmFzZVxuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cbiIsIlxuaW1wb3J0IFJlbmRlckhlbHBlciBmcm9tICcuLi9oZWxwZXJzL3JlbmRlcic7XG5pbXBvcnQgQW5pbWF0aW9uSGVscGVyIGZyb20gJy4uL2hlbHBlcnMvYW5pbWF0b3InO1xuaW1wb3J0IHtpc0NhbnZhc1N1cHBvcnRlZCwgaW50VG9IZXhDb2xvclN0cmluZ30gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXG5cdHZhciBjdHggPSBwbG90VW5pdC50YXJnZXRDYW52YXNDdHggfHwgdGhpcy5wbG90QXJlYS5jdHg7XG5cblx0dmFyIHRvdGFsRGF0YVNlcmllcyA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDtcblxuXHRpZiAodG90YWxEYXRhU2VyaWVzIDw9IDApXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBjb2xvciA9IG51bGw7XG5cblx0dmFyIHBsb3RBcmVhID0gdGhpcy5wbG90QXJlYTtcblxuXHR2YXIgaSA9IDAsIHgsIHk7XG5cdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgZnJvbSBkYXRhVGltZSBldmVyeXRpbWUgaXQgaXMgdXNlZC5cblxuXHR2YXIgeVplcm9Ub1BpeGVsID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICgwIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkpIDw8IDA7XG5cblx0dmFyIG1heEJhcldpZHRoID0gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA/IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggOiB0aGlzLndpZHRoICogLjE1IDw8IDA7XG5cdHZhciB4TWluRGlmZiA9IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLm1pbkRpZmY7XG5cdHZhciBiYXJXaWR0aCA9ICgoKHBsb3RBcmVhLndpZHRoIC8gTWF0aC5hYnMocGxvdFVuaXQuYXhpc1gudmlld3BvcnRNYXhpbXVtIC0gcGxvdFVuaXQuYXhpc1gudmlld3BvcnRNaW5pbXVtKSkgKiBNYXRoLmFicyh4TWluRGlmZikpIC8gdG90YWxEYXRhU2VyaWVzICogLjkpIDw8IDA7XG5cblxuXHRjdHguc2F2ZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHguc2F2ZSgpO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5jbGlwKCk7XG5cdH1cblxuXHR2YXIgbWF4WiA9IC1JbmZpbml0eTtcblx0dmFyIG1pblogPSBJbmZpbml0eTtcblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblx0XHR2YXIgZGF0YVBvaW50cyA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cztcblx0XHR2YXIgeiA9IDA7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0uZ2V0VGltZSA/IGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueDtcblxuXHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1pbiB8fCBkYXRhUG9pbnRYID4gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNYXgpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgKGRhdGFQb2ludHNbaV0ueikgIT09IFwidW5kZWZpbmVkXCIpIHtcblxuXHRcdFx0XHR6ID0gZGF0YVBvaW50c1tpXS56O1xuXG5cdFx0XHRcdGlmICh6ID4gbWF4Wilcblx0XHRcdFx0XHRtYXhaID0gejtcblxuXHRcdFx0XHRpZiAoeiA8IG1pblopXG5cdFx0XHRcdFx0bWluWiA9IHo7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIG1pbkFyZWEgPSBNYXRoLlBJICogNSAqIDU7XG5cdHZhciBtYXhBcmVhID0gTWF0aC5tYXgoTWF0aC5wb3coTWF0aC5taW4ocGxvdEFyZWEuaGVpZ2h0LCBwbG90QXJlYS53aWR0aCkgKiAuMjUgLyAyLCAyKSAqIE1hdGguUEksIG1pbkFyZWEpO1xuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblxuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblxuXHRcdGlmIChkYXRhUG9pbnRzLmxlbmd0aCA9PSAxKVxuXHRcdFx0YmFyV2lkdGggPSBtYXhCYXJXaWR0aDtcblxuXHRcdGlmIChiYXJXaWR0aCA8IDEpXG5cdFx0XHRiYXJXaWR0aCA9IDE7XG5cdFx0ZWxzZSBpZiAoYmFyV2lkdGggPiBtYXhCYXJXaWR0aClcblx0XHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL3ZhciB4eSA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uUGxvdEFyZWEoZGF0YVBvaW50c1swXS54LCBkYXRhUG9pbnRzWzBdLnkpO1xuXHRcdFx0Ly92YXIgYmV2ZWxFbmFibGVkID0gKGJhcldpZHRoID4gNSkgPyBmYWxzZSA6IGZhbHNlO1xuXG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBcIiM0NTcyQTcgXCI7XG5cblxuXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS5nZXRUaW1lID8gZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZW9mIChkYXRhUG9pbnRzW2ldLnkpICE9PSBcIm51bWJlclwiKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHggPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5ID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnkgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXG5cdFx0XHRcdHZhciB6ID0gZGF0YVBvaW50c1tpXS56O1xuXG5cdFx0XHRcdHZhciBhcmVhID0gKG1heFogPT09IG1pblopID8gbWF4QXJlYSAvIDIgOiBtaW5BcmVhICsgKG1heEFyZWEgLSBtaW5BcmVhKSAvIChtYXhaIC0gbWluWikgKiAoeiAtIG1pblopO1xuXHRcdFx0XHR2YXIgcmFkaXVzID0gTWF0aC5tYXgoTWF0aC5zcXJ0KGFyZWEgLyBNYXRoLlBJKSA8PCAwLCAxKTtcblxuXHRcdFx0XHR2YXIgbWFya2VyU2l6ZSA9IHJhZGl1cyAqIDI7XG5cdFx0XHRcdHZhciBtYXJrZXJQcm9wcyA9IGRhdGFTZXJpZXMuZ2V0TWFya2VyUHJvcGVydGllcyhpLCBjdHgpO1xuXHRcdFx0XHRtYXJrZXJQcm9wcy5zaXplID0gbWFya2VyU2l6ZTtcblxuXG5cdFx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IGRhdGFTZXJpZXMuZmlsbE9wYWNpdHk7XG5cdFx0XHRcdFJlbmRlckhlbHBlci5kcmF3TWFya2VyKHgsIHksIGN0eCwgbWFya2VyUHJvcHMudHlwZSwgbWFya2VyUHJvcHMuc2l6ZSwgbWFya2VyUHJvcHMuY29sb3IsIG1hcmtlclByb3BzLmJvcmRlckNvbG9yLCBtYXJrZXJQcm9wcy5ib3JkZXJUaGlja25lc3MpO1xuXHRcdFx0XHRjdHguZ2xvYmFsQWxwaGEgPSAxO1xuXG5cdFx0XHRcdHZhciBpZCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2ldO1xuXHRcdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSA9IHtcblx0XHRcdFx0XHRpZDogaWQsIG9iamVjdFR5cGU6IFwiZGF0YVBvaW50XCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleDogaSwgeDE6IHgsIHkxOiB5LCBzaXplOiBtYXJrZXJTaXplXG5cdFx0XHRcdH07XG5cdFx0XHRcdHZhciBtYXJrZXJDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXHRcdFx0XHQvL1JlbmRlckhlbHBlci5kcmF3TWFya2VyKHgsIHksIHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eCwgbWFya2VyVHlwZSwgbWFya2VyU2l6ZSwgbWFya2VyQ29sb3IsIG1hcmtlckNvbG9yLCBkYXRhU2VyaWVzLm1hcmtlckJvcmRlclRoaWNrbmVzcyk7XG5cdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRSZW5kZXJIZWxwZXIuZHJhd01hcmtlcih4LCB5LCB0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgsIG1hcmtlclByb3BzLnR5cGUsIG1hcmtlclByb3BzLnNpemUsIG1hcmtlckNvbG9yLCBtYXJrZXJDb2xvciwgbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzKTtcblxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpIHtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcImJ1YmJsZVwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnRzW2ldLFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHlcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IDEsXG5cdFx0XHRcdFx0XHRib3VuZHM6IHtcblx0XHRcdFx0XHRcdFx0eDE6IHggLSBtYXJrZXJQcm9wcy5zaXplIC8gMiwgeTE6IHkgLSBtYXJrZXJQcm9wcy5zaXplIC8gMiwgeDI6IHggKyBtYXJrZXJQcm9wcy5zaXplIC8gMiwgeTI6IHkgKyBtYXJrZXJQcm9wcy5zaXplIC8gMlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y3R4LnJlc3RvcmUoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnJlc3RvcmUoKTtcblxuXHQvL3NvdXJjZSBhbmQgZGVzdCB3b3VsZCBiZSBzYW1lIHdoZW4gYW5pbWF0aW9uIGlzIG5vdCBlbmFibGVkXG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci5mYWRlSW5BbmltYXRpb24sIGVhc2luZ0Z1bmN0aW9uOiBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmVhc2VJblF1YWQsIGFuaW1hdGlvbkJhc2U6IDBcblx0fTtcblx0cmV0dXJuIGFuaW1hdGlvbkluZm87XG59XG4iLCJcbmltcG9ydCB7aXNDYW52YXNTdXBwb3J0ZWR9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblx0dmFyIGdob3N0Q3R4ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4O1xuXG5cdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGNvbG9yID0gbnVsbDtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdHZhciBpID0gMCwgeCwgeTEsIHkyLCB5MywgeTQ7XG5cdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgZnJvbSBkYXRhVGltZSBldmVyeXRpbWUgaXQgaXMgdXNlZC5cblxuXHR2YXIgeVplcm9Ub1BpeGVsID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICgwIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkpIDw8IDA7XG5cblx0dmFyIG1heEJhcldpZHRoID0gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA/IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggOiAodGhpcy53aWR0aCAqIC4wMTUpO1xuXHR2YXIgeE1pbkRpZmYgPSBwbG90VW5pdC5heGlzWC5kYXRhSW5mby5taW5EaWZmO1xuXHR2YXIgYmFyV2lkdGggPSAoKChwbG90QXJlYS53aWR0aCAvIE1hdGguYWJzKHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWF4aW11bSAtIHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkpICogTWF0aC5hYnMoeE1pbkRpZmYpKSAqIC43KSA8PCAwO1xuXG5cdGlmIChiYXJXaWR0aCA+IG1heEJhcldpZHRoKVxuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cdGVsc2UgaWYgKHhNaW5EaWZmID09PSBJbmZpbml0eSkge1xuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cdH0gZWxzZSBpZiAoYmFyV2lkdGggPCAxKVxuXHRcdGJhcldpZHRoID0gMTtcblxuXHRjdHguc2F2ZSgpO1xuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0Z2hvc3RDdHguc2F2ZSgpO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRnaG9zdEN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0Z2hvc3RDdHguY2xpcCgpO1xuXHR9XG5cdC8vY3R4LmJlZ2luUGF0aCgpO1xuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblxuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblxuXG5cdFx0Ly8gUmVkdWNpbmcgcGl4ZWxQZXJVbml0IGJ5IDEganVzdCB0byBvdmVyY29tZSBhbnkgcHJvYmxlbXMgZHVlIHRvIHJvdW5kaW5nIG9mZiBvZiBwaXhlbHMuXG5cdFx0Ly9kYXRhU2VyaWVzLm1heFdpZHRoSW5YID0gYmFyV2lkdGggLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXG5cdFx0Ly92YXIgb2Zmc2V0WCA9IGJhcldpZHRoICogcGxvdFVuaXQuaW5kZXggPDwgMDtcblxuXG5cdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly92YXIgeHkgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPblBsb3RBcmVhKGRhdGFQb2ludHNbMF0ueCwgZGF0YVBvaW50c1swXS55KTtcblxuXHRcdFx0dmFyIGJldmVsRW5hYmxlZCA9IChiYXJXaWR0aCA+IDUpICYmIGRhdGFTZXJpZXMuYmV2ZWxFbmFibGVkID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdGRhdGFQb2ludHNbaV0uZ2V0VGltZSA/IGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueDtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ueSA9PT0gbnVsbCB8fCAhZGF0YVBvaW50c1tpXS55Lmxlbmd0aFxuXHRcdFx0XHRcdHx8IHR5cGVvZiAoZGF0YVBvaW50c1tpXS55WzBdKSAhPT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgKGRhdGFQb2ludHNbaV0ueVsxXSkgIT09IFwibnVtYmVyXCJcblx0XHRcdFx0XHR8fCB0eXBlb2YgKGRhdGFQb2ludHNbaV0ueVsyXSkgIT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIChkYXRhUG9pbnRzW2ldLnlbM10pICE9PSBcIm51bWJlclwiKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHggPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5MSA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55WzBdIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0eTIgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueVsxXSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cblx0XHRcdFx0eTMgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueVsyXSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHk0ID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnlbM10gLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXG5cdFx0XHRcdHZhciB4MSA9ICh4IC0gYmFyV2lkdGggLyAyKSA8PCAwO1xuXHRcdFx0XHR2YXIgeDIgPSAoeDEgKyBiYXJXaWR0aCkgPDwgMDtcblxuXG5cdFx0XHRcdGNvbG9yID0gZGF0YVBvaW50c1tpXS5jb2xvciA/IGRhdGFQb2ludHNbaV0uY29sb3IgOiBkYXRhU2VyaWVzLl9jb2xvclNldFswXTtcblxuXG5cdFx0XHRcdC8vdmFyIGJvcmRlclRoaWNrbmVzcyA9IE1hdGgubWF4KDIsICgoYmFyV2lkdGggKiAuMSkgLyAyIDw8IDApICogMik7IC8vIFNldCBvbmx5IGV2ZW4gbnVtYmVycyBmb3IgYm9yZGVyXG5cdFx0XHRcdHZhciBib3JkZXJUaGlja25lc3MgPSBNYXRoLnJvdW5kKE1hdGgubWF4KDEsIChiYXJXaWR0aCAqIC4xNSkpKTtcblx0XHRcdFx0Ly9ib3JkZXJUaGlja25lc3MgPSAoYm9yZGVyVGhpY2tuZXNzIC8gMiA8PCAwKSAqIDI7XG5cdFx0XHRcdC8vYm9yZGVyVGhpY2tuZXNzID0gMjtcblx0XHRcdFx0dmFyIG9mZnNldCA9IGJvcmRlclRoaWNrbmVzcyAlIDIgPT09IDAgPyAwIDogLjU7XG5cblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5Mixcblx0XHRcdFx0XHR4MzogeCwgeTM6IHkzLCB4NDogeCwgeTQ6IHk0LCBib3JkZXJUaGlja25lc3M6IGJvcmRlclRoaWNrbmVzcywgY29sb3I6IGNvbG9yXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gY29sb3I7XG5cdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0Y3R4LmxpbmVXaWR0aCA9IGJvcmRlclRoaWNrbmVzcztcblx0XHRcdFx0Z2hvc3RDdHgubGluZVdpZHRoID0gTWF0aC5tYXgoYm9yZGVyVGhpY2tuZXNzLCA0KTtcblxuXHRcdFx0XHRpZiAoZGF0YVNlcmllcy50eXBlID09PSBcImNhbmRsZXN0aWNrXCIpIHtcblxuXHRcdFx0XHRcdGN0eC5tb3ZlVG8oeCAtIG9mZnNldCwgeTIpO1xuXHRcdFx0XHRcdGN0eC5saW5lVG8oeCAtIG9mZnNldCwgTWF0aC5taW4oeTEsIHk0KSk7XG5cdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdGN0eC5tb3ZlVG8oeCAtIG9mZnNldCwgTWF0aC5tYXgoeTEsIHk0KSk7XG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyh4IC0gb2Zmc2V0LCB5Myk7XG5cdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXG5cdFx0XHRcdFx0ZHJhd1JlY3QoY3R4LCB4MSwgTWF0aC5taW4oeTEsIHk0KSwgeDIsIE1hdGgubWF4KHkxLCB5NCksIGRhdGFQb2ludHNbaV0ueVswXSA8PSBkYXRhUG9pbnRzW2ldLnlbM10gPyBkYXRhU2VyaWVzLnJpc2luZ0NvbG9yIDogY29sb3IsIGJvcmRlclRoaWNrbmVzcywgY29sb3IsIGJldmVsRW5hYmxlZCwgYmV2ZWxFbmFibGVkLCBmYWxzZSwgZmFsc2UsIGRhdGFTZXJpZXMuZmlsbE9wYWNpdHkpO1xuXG5cblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdGNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuXG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oeCAtIG9mZnNldCwgeTIpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubGluZVRvKHggLSBvZmZzZXQsIE1hdGgubWluKHkxLCB5NCkpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHguc3Ryb2tlKCk7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oeCAtIG9mZnNldCwgTWF0aC5tYXgoeTEsIHk0KSk7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5saW5lVG8oeCAtIG9mZnNldCwgeTMpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHguc3Ryb2tlKCk7XG5cdFx0XHRcdFx0XHRkcmF3UmVjdChnaG9zdEN0eCwgeDEsIE1hdGgubWluKHkxLCB5NCksIHgyLCBNYXRoLm1heCh5MSwgeTQpLCBjb2xvciwgMCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwib2hsY1wiKSB7XG5cblx0XHRcdFx0XHRjdHgubW92ZVRvKHggLSBvZmZzZXQsIHkyKTtcblx0XHRcdFx0XHRjdHgubGluZVRvKHggLSBvZmZzZXQsIHkzKTtcblx0XHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cblx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0Y3R4Lm1vdmVUbyh4LCB5MSk7XG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyh4MSwgeTEpO1xuXHRcdFx0XHRcdGN0eC5zdHJva2UoKTtcblxuXHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRjdHgubW92ZVRvKHgsIHk0KTtcblx0XHRcdFx0XHRjdHgubGluZVRvKHgyLCB5NCk7XG5cdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXG5cdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cblx0XHRcdFx0XHRcdGNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuXG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oeCAtIG9mZnNldCwgeTIpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubGluZVRvKHggLSBvZmZzZXQsIHkzKTtcblx0XHRcdFx0XHRcdGdob3N0Q3R4LnN0cm9rZSgpO1xuXG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdGdob3N0Q3R4Lm1vdmVUbyh4LCB5MSk7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5saW5lVG8oeDEsIHkxKTtcblx0XHRcdFx0XHRcdGdob3N0Q3R4LnN0cm9rZSgpO1xuXG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdGdob3N0Q3R4Lm1vdmVUbyh4LCB5NCk7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5saW5lVG8oeDIsIHk0KTtcblx0XHRcdFx0XHRcdGdob3N0Q3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpIHtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBkYXRhU2VyaWVzLnR5cGUsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeDEgKyAoeDIgLSB4MSkgLyAyLCB5OiB5MlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogMSxcblx0XHRcdFx0XHRcdGJvdW5kczoge1xuXHRcdFx0XHRcdFx0XHR4MTogeDEsIHkxOiBNYXRoLm1pbih5MiwgeTMpLCB4MjogeDIsIHkyOiBNYXRoLm1heCh5MiwgeTMpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGN0eC5yZXN0b3JlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdGdob3N0Q3R4LnJlc3RvcmUoKTtcblxuXHQvL3NvdXJjZSBhbmQgZGVzdCB3b3VsZCBiZSBzYW1lIHdoZW4gYW5pbWF0aW9uIGlzIG5vdCBlbmFibGVkXG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci5mYWRlSW5BbmltYXRpb24sIGVhc2luZ0Z1bmN0aW9uOiBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmVhc2VJblF1YWQsIGFuaW1hdGlvbkJhc2U6IDBcblx0fTtcblx0cmV0dXJuIGFuaW1hdGlvbkluZm87XG59XG4iLCJcbmltcG9ydCBBbmltYXRpb25IZWxwZXIgZnJvbSAnLi4vaGVscGVycy9hbmltYXRvcic7XG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkLCBkcmF3UmVjdCwgaW50VG9IZXhDb2xvclN0cmluZ30gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXG5cdHZhciBjdHggPSBwbG90VW5pdC50YXJnZXRDYW52YXNDdHggfHwgdGhpcy5wbG90QXJlYS5jdHg7XG5cblx0dmFyIHRvdGFsRGF0YVNlcmllcyA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDtcblxuXHRpZiAodG90YWxEYXRhU2VyaWVzIDw9IDApXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBjb2xvciA9IG51bGw7XG5cblx0dmFyIHBsb3RBcmVhID0gdGhpcy5wbG90QXJlYTtcblxuXHR2YXIgaSA9IDAsIHgsIHk7XG5cdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgZnJvbSBkYXRhVGltZSBldmVyeXRpbWUgaXQgaXMgdXNlZC5cblxuXHR2YXIgeVplcm9Ub1BpeGVsID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICgwIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkpIDw8IDA7XG5cblx0dmFyIG1heEJhcldpZHRoID0gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA/IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggOiBNYXRoLm1pbigodGhpcy53aWR0aCAqIC4xNSksIHRoaXMucGxvdEFyZWEud2lkdGggLyBwbG90VW5pdC5wbG90VHlwZS50b3RhbERhdGFTZXJpZXMgKiAuOSkgPDwgMDtcblx0dmFyIHhNaW5EaWZmID0gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8ubWluRGlmZjtcblx0dmFyIGJhcldpZHRoID0gKCgocGxvdEFyZWEud2lkdGggLyBNYXRoLmFicyhwbG90VW5pdC5heGlzWC52aWV3cG9ydE1heGltdW0gLSBwbG90VW5pdC5heGlzWC52aWV3cG9ydE1pbmltdW0pKSAqIE1hdGguYWJzKHhNaW5EaWZmKSkgLyBwbG90VW5pdC5wbG90VHlwZS50b3RhbERhdGFTZXJpZXMgKiAuOSkgPDwgMDtcblxuXHRpZiAoYmFyV2lkdGggPiBtYXhCYXJXaWR0aClcblx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoO1xuXHRlbHNlIGlmICh4TWluRGlmZiA9PT0gSW5maW5pdHkpIHtcblx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoIC8gcGxvdFVuaXQucGxvdFR5cGUudG90YWxEYXRhU2VyaWVzICogLjk7XG5cdH0gZWxzZSBpZiAoYmFyV2lkdGggPCAxKVxuXHRcdGJhcldpZHRoID0gMTtcblxuXHRjdHguc2F2ZSgpO1xuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnNhdmUoKTtcblxuXHRjdHguYmVnaW5QYXRoKCk7XG5cdGN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdGN0eC5jbGlwKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHguY2xpcCgpO1xuXHR9XG5cdC8vY3R4LmJlZ2luUGF0aCgpO1xuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblxuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblxuXG5cdFx0Ly8gUmVkdWNpbmcgcGl4ZWxQZXJVbml0IGJ5IDEganVzdCB0byBvdmVyY29tZSBhbnkgcHJvYmxlbXMgZHVlIHRvIHJvdW5kaW5nIG9mZiBvZiBwaXhlbHMuXG5cdFx0Ly9kYXRhU2VyaWVzLm1heFdpZHRoSW5YID0gYmFyV2lkdGggLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXG5cdFx0Ly92YXIgb2Zmc2V0WCA9IGJhcldpZHRoICogcGxvdFVuaXQuaW5kZXggPDwgMDtcblxuXG5cdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly92YXIgeHkgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPblBsb3RBcmVhKGRhdGFQb2ludHNbMF0ueCwgZGF0YVBvaW50c1swXS55KTtcblxuXHRcdFx0dmFyIGJldmVsRW5hYmxlZCA9IChiYXJXaWR0aCA+IDUpICYmIGRhdGFTZXJpZXMuYmV2ZWxFbmFibGVkID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdGRhdGFQb2ludHNbaV0uZ2V0VGltZSA/IGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueDtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGVvZiAoZGF0YVBvaW50c1tpXS55KSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR4ID0gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRYIC0gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0eSA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55IC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblxuXHRcdFx0XHR2YXIgeDEgPSB4IC0gKHBsb3RVbml0LnBsb3RUeXBlLnRvdGFsRGF0YVNlcmllcyAqIGJhcldpZHRoIC8gMikgKyAoKHBsb3RVbml0LnByZXZpb3VzRGF0YVNlcmllc0NvdW50ICsgaikgKiBiYXJXaWR0aCkgPDwgMDtcblx0XHRcdFx0dmFyIHgyID0geDEgKyBiYXJXaWR0aCA8PCAwO1xuXHRcdFx0XHR2YXIgeTE7XG5cdFx0XHRcdHZhciB5MjtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS55ID49IDApIHtcblx0XHRcdFx0XHR5MSA9IHk7XG5cblx0XHRcdFx0XHR5MiA9IHlaZXJvVG9QaXhlbDtcblxuXHRcdFx0XHRcdGlmICh5MSA+IHkyKSB7XG5cdFx0XHRcdFx0XHR2YXIgdGVtcCA9IHkxO1xuXHRcdFx0XHRcdFx0eTEgPSB5Mjtcblx0XHRcdFx0XHRcdHkyID0geTE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eTIgPSB5O1xuXG5cdFx0XHRcdFx0eTEgPSB5WmVyb1RvUGl4ZWw7XG5cblx0XHRcdFx0XHRpZiAoeTEgPiB5Mikge1xuXHRcdFx0XHRcdFx0dmFyIHRlbXAgPSB5MTtcblx0XHRcdFx0XHRcdHkxID0geTI7XG5cdFx0XHRcdFx0XHR5MiA9IHkxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbG9yID0gZGF0YVBvaW50c1tpXS5jb2xvciA/IGRhdGFQb2ludHNbaV0uY29sb3IgOiBkYXRhU2VyaWVzLl9jb2xvclNldFtpICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcblx0XHRcdFx0ZHJhd1JlY3QoY3R4LCB4MSwgeTEsIHgyLCB5MiwgY29sb3IsIDAsIG51bGwsIGJldmVsRW5hYmxlZCAmJiAoZGF0YVBvaW50c1tpXS55ID49IDApLCAoZGF0YVBvaW50c1tpXS55IDwgMCkgJiYgYmV2ZWxFbmFibGVkLCBmYWxzZSwgZmFsc2UsIGRhdGFTZXJpZXMuZmlsbE9wYWNpdHkpO1xuXG5cdFx0XHRcdC8vaWYgKGRhdGFTZXJpZXMubWFya2VyVHlwZSAmJiBkYXRhU2VyaWVzLm1hcmtlclNpemUgPiAwKSB7XG5cdFx0XHRcdC8vICAgIFJlbmRlckhlbHBlci5kcmF3TWFya2VyKHgxICsgKHgyIC0geDEpIC8gMiwgeSwgY3R4LCBkYXRhU2VyaWVzLm1hcmtlclR5cGUsIGRhdGFTZXJpZXMubWFya2VyU2l6ZSwgY29sb3IsIGRhdGFTZXJpZXMubWFya2VyQm9yZGVyQ29sb3IsIGRhdGFTZXJpZXMubWFya2VyQm9yZGVyVGhpY2tuZXNzID8gZGF0YVNlcmllcy5tYXJrZXJCb3JkZXJUaGlja25lc3MgOiAxKTtcblx0XHRcdFx0Ly99XG5cblx0XHRcdFx0dmFyIGlkID0gZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbaV07XG5cdFx0XHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdID0ge1xuXHRcdFx0XHRcdGlkOiBpZCwgb2JqZWN0VHlwZTogXCJkYXRhUG9pbnRcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXgsIGRhdGFQb2ludEluZGV4OiBpLCB4MTogeDEsIHkxOiB5MSwgeDI6IHgyLCB5MjogeTJcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0ZHJhd1JlY3QodGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LCB4MSwgeTEsIHgyLCB5MiwgY29sb3IsIDAsIG51bGwsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5pbmRleExhYmVsIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbCB8fCBkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWxGb3JtYXR0ZXIgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyKSB7XG5cblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJjb2x1bW5cIixcblx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50c1tpXSxcblx0XHRcdFx0XHRcdGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsXG5cdFx0XHRcdFx0XHRwb2ludDoge1xuXHRcdFx0XHRcdFx0XHR4OiB4MSArICh4MiAtIHgxKSAvIDIsIHk6IGRhdGFQb2ludHNbaV0ueSA+PSAwID8geTEgOiB5MlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55ID49IDAgPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRib3VuZHM6IHtcblx0XHRcdFx0XHRcdFx0eDE6IHgxLCB5MTogTWF0aC5taW4oeTEsIHkyKSwgeDI6IHgyLCB5MjogTWF0aC5tYXgoeTEsIHkyKVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjdHgucmVzdG9yZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVzdG9yZSgpO1xuXG5cdC8vc291cmNlIGFuZCBkZXN0IHdvdWxkIGJlIHNhbWUgd2hlbiBhbmltYXRpb24gaXMgbm90IGVuYWJsZWRcblx0dmFyIGFuaW1hdGlvbkJhc2UgPSBNYXRoLm1pbih5WmVyb1RvUGl4ZWwsIHBsb3RVbml0LmF4aXNZLmJvdW5kaW5nUmVjdC55Mik7XG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci55U2NhbGVBbmltYXRpb24sIGVhc2luZ0Z1bmN0aW9uOiBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmVhc2VPdXRRdWFydCwgYW5pbWF0aW9uQmFzZTogYW5pbWF0aW9uQmFzZVxuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cbiIsImV4cG9ydCBTcGxpbmVDaGFydCBmcm9tICcuLi9jaGFydHMvc3BsaW5lJztcbmV4cG9ydCBDb2x1bW5DaGFydCBmcm9tICcuLi9jaGFydHMvY29sdW1uJztcbmV4cG9ydCBTdGFja2VkQ29sdW1uQ2hhcnQgZnJvbSAnLi4vY2hhcnRzL3N0YWNrZWRfY29sdW1uJztcbmV4cG9ydCBTdGFja2VkQ29sdW1uMTAwQ2hhcnQgZnJvbSAnLi4vY2hhcnRzL3N0YWNrZWRfY29sdW1uXzEwMCc7XG5leHBvcnQgQmFyQ2hhcnQgZnJvbSAnLi4vY2hhcnRzL2Jhcic7XG5leHBvcnQgU3RhY2tlZEJhckNoYXJ0IGZyb20gJy4uL2NoYXJ0cy9zdGFja2VkX2Jhcic7XG5leHBvcnQgU3RhY2tlZEJhcjEwMENoYXJ0IGZyb20gJy4uL2NoYXJ0cy9zdGFja2VkX2Jhcl8xMDAnO1xuZXhwb3J0IEFyZWFDaGFydCBmcm9tICcuLi9jaGFydHMvYXJlYSc7XG5leHBvcnQgU3BsaW5lQXJlYUNoYXJ0IGZyb20gJy4uL2NoYXJ0cy9zcGxpbmVfYXJlYSc7XG5leHBvcnQgU3RlcEFyZWFDaGFydCBmcm9tICcuLi9jaGFydHMvc3RlcF9hcmVhJztcbmV4cG9ydCBTdGFja2VkQXJlYUNoYXJ0IGZyb20gJy4uL2NoYXJ0cy9zdGFja2VkX2FyZWEnO1xuZXhwb3J0IFN0YWNrZWRBcmVhMTAwQ2hhcnQgZnJvbSAnLi4vY2hhcnRzL3N0YWNrZWRfYXJlYV8xMDAnO1xuZXhwb3J0IEJ1YmJsZUNoYXJ0IGZyb20gJy4uL2NoYXJ0cy9idWJibGUnO1xuZXhwb3J0IFNjYXR0ZXJDaGFydCBmcm9tICcuLi9jaGFydHMvc2NhdHRlcic7XG5leHBvcnQgQ2FuZGxlc3RpY2tDaGFydCBmcm9tICcuLi9jaGFydHMvY2FuZGxlc3RpY2snO1xuZXhwb3J0IFJhbmdlQ29sdW1uQ2hhcnQgZnJvbSAnLi4vY2hhcnRzL3JhbmdlX2NvbHVtbic7XG5leHBvcnQgUmFuZ2VCYXJDaGFydCBmcm9tICcuLi9jaGFydHMvcmFuZ2VfYmFyJztcbmV4cG9ydCBSYW5nZUFyZWFDaGFydCBmcm9tICcuLi9jaGFydHMvcmFuZ2VfYXJlYSc7XG5leHBvcnQgUmFuZ2VTcGxpbmVBcmVhQ2hhcnQgZnJvbSAnLi4vY2hhcnRzL3JhbmdlX3NwbGluZV9hcmVhJztcbmV4cG9ydCBQaWVDaGFydCBmcm9tICcuLi9jaGFydHMvcGllJztcbiIsIlxuaW1wb3J0IFRleHRCbG9jayBmcm9tICcuLi9jb3JlL3RleHRfYmxvY2snO1xuaW1wb3J0IHtjb252ZXJ0UGVyY2VudFRvVmFsdWUsIGlzQ2FudmFzU3VwcG9ydGVkLCBkcmF3U2VnbWVudCwgZ2V0TGluZURhc2hBcnJheX0gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXG5cdHZhciBfdGhpcyA9IHRoaXM7XG5cdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbMF07XG5cdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXHR2YXIgaW5kZXhMYWJlbExpbmVFZGdlTGVuZ3RoID0gMTA7XG5cdHZhciBleHBsb2RlRHVyYXRpb24gPSA1MDA7XG5cblx0dmFyIHBsb3RBcmVhID0gdGhpcy5wbG90QXJlYTtcblxuXHQvL3ZhciBtYXhGcmFtZSA9IGlzQ2FudmFzU3VwcG9ydGVkID8gMzAwIDogNDtcblx0Ly92YXIgdG90YWxSZWN1cnNpb25zID0gMDtcblx0dmFyIGRhdGFQb2ludEVPcyA9IFtdOyAvL2RhdGFQb2ludCBFeHRlbnNpb24gT2JqZWN0cyBCZWhhdmVzIGxpa2UgYSBzdG9yYWdlIHBsYWNlIGZvciBhbGwgYWRkaXRpb25hbCBkYXRhIHJlbGF0aW5nIHRvIGRhdGFQb2ludHMuIFJlcXVyZWQgYmVjYXVzZSBhY3R1YWwgZGF0YVBvaW50cyBzaG91bGQgbm90IGJlIG1vZGlmaWVkLlxuXG5cdHZhciBtaW5EaXN0YW5jZUJldHdlZW5MYWJlbHMgPSAyO1xuXHR2YXIgaW5kZXhMYWJlbFJhZGl1c1RvUmFkaXVzUmF0aW8gPSAxLjM7XG5cdHZhciBwb2xlQW5nbHVsYXJEaXN0YW5jZSA9ICgyMCAvIDE4MCkgKiBNYXRoLlBJOyAvL0FuZ2x1bGFyIERpc3RhbmNlIGZyb20gOTAgJiAyNzAgdG8gYmUgY29uc2lkZXJlZCBwb2xlXG5cdHZhciBwcmVjaXNpb24gPSA2O1xuXG5cdHZhciBjZW50ZXIgPSB7XG5cdFx0eDogKHBsb3RBcmVhLngyICsgcGxvdEFyZWEueDEpIC8gMiwgeTogKHBsb3RBcmVhLnkyICsgcGxvdEFyZWEueTEpIC8gMlxuXHR9O1xuXG5cdHZhciBzdW0gPSAwO1xuXHR2YXIgaXNJbmRleExhYmVsUHJlc2VudCA9IGZhbHNlO1xuXHRmb3IgKHZhciBqID0gMDsgaiA8IGRhdGFQb2ludHMubGVuZ3RoOyBqKyspIHtcblx0XHRzdW0gKz0gTWF0aC5hYnMoZGF0YVBvaW50c1tqXS55KTtcblxuXHRcdGlmICghaXNJbmRleExhYmVsUHJlc2VudCAmJiB0eXBlb2YgKGRhdGFQb2ludHNbal0uaW5kZXhMYWJlbCkgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YVBvaW50c1tqXS5pbmRleExhYmVsICE9PSBudWxsICYmIGRhdGFQb2ludHNbal0uaW5kZXhMYWJlbC50b1N0cmluZygpLmxlbmd0aCA+IDApXG5cdFx0XHRpc0luZGV4TGFiZWxQcmVzZW50ID0gdHJ1ZTtcblxuXHRcdGlmICghaXNJbmRleExhYmVsUHJlc2VudCAmJiB0eXBlb2YgKGRhdGFQb2ludHNbal0ubGFiZWwpICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGFQb2ludHNbal0ubGFiZWwgIT09IG51bGwgJiYgZGF0YVBvaW50c1tqXS5sYWJlbC50b1N0cmluZygpLmxlbmd0aCA+IDApXG5cdFx0XHRpc0luZGV4TGFiZWxQcmVzZW50ID0gdHJ1ZTtcblx0fVxuXG5cdGlmIChzdW0gPT09IDApXG5cdFx0cmV0dXJuO1xuXG5cdGlzSW5kZXhMYWJlbFByZXNlbnQgPSBpc0luZGV4TGFiZWxQcmVzZW50IHx8ICh0eXBlb2YgKGRhdGFTZXJpZXMuaW5kZXhMYWJlbCkgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YVNlcmllcy5pbmRleExhYmVsICE9PSBudWxsICYmIGRhdGFTZXJpZXMuaW5kZXhMYWJlbC50b1N0cmluZygpLmxlbmd0aCA+IDApO1xuXG5cdHZhciBvdXRlclJhZGl1cyA9IGRhdGFTZXJpZXMuaW5kZXhMYWJlbFBsYWNlbWVudCAhPT0gXCJpbnNpZGVcIiAmJiBpc0luZGV4TGFiZWxQcmVzZW50ID8gKE1hdGgubWluKHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpICogMC43NSkgLyAyIDogKE1hdGgubWluKHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpICogLjkyKSAvIDI7XG5cblx0aWYgKGRhdGFTZXJpZXMucmFkaXVzKVxuXHRcdG91dGVyUmFkaXVzID0gY29udmVydFBlcmNlbnRUb1ZhbHVlKGRhdGFTZXJpZXMucmFkaXVzLCBvdXRlclJhZGl1cyk7XG5cblxuXHR2YXIgaW5uZXJSYWRpdXMgPSAodHlwZW9mIGRhdGFTZXJpZXMuaW5uZXJSYWRpdXMgIT09ICd1bmRlZmluZWQnICYmIGRhdGFTZXJpZXMuaW5uZXJSYWRpdXMgIT09IG51bGwpID8gY29udmVydFBlcmNlbnRUb1ZhbHVlKGRhdGFTZXJpZXMuaW5uZXJSYWRpdXMsIG91dGVyUmFkaXVzKSA6IDAuNyAqIG91dGVyUmFkaXVzO1xuXG5cdHZhciBwZXJjZW50SW5uZXJSYWRpdXMgPSBNYXRoLm1pbihpbm5lclJhZGl1cyAvIG91dGVyUmFkaXVzLCAob3V0ZXJSYWRpdXMgLSAxKSAvIG91dGVyUmFkaXVzKTtcblxuXHRmdW5jdGlvbiBpbml0TGFiZWxzKCkge1xuXG5cdFx0aWYgKCFkYXRhU2VyaWVzIHx8ICFkYXRhUG9pbnRzKVxuXHRcdFx0cmV0dXJuO1xuXG5cblx0XHR2YXIgbm9EUE5lYXJTb3V0aFBvbGUgPSAwO1xuXHRcdHZhciBub0RQTmVhck5vcnRoUG9sZSA9IDA7XG5cdFx0dmFyIGZpcnN0RFBDbG9zZVRvU291dGggPSAwO1xuXHRcdHZhciBmaXJzdERQQ2xvc2VUb05vcnRoID0gMDtcblxuXHRcdGZvciAoaiA9IDA7IGogPCBkYXRhUG9pbnRzLmxlbmd0aDsgaisrKSB7XG5cblx0XHRcdHZhciBkYXRhUG9pbnQgPSBkYXRhUG9pbnRzW2pdO1xuXHRcdFx0dmFyIGlkID0gZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbal07XG5cblx0XHRcdHZhciBkYXRhUG9pbnRFTyA9IHtcblx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhUG9pbnRJbmRleDogaiwgZGF0YVNlcmllc0luZGV4OiAwXG5cdFx0XHR9O1xuXHRcdFx0ZGF0YVBvaW50RU9zLnB1c2goZGF0YVBvaW50RU8pO1xuXG5cdFx0XHR2YXIgcGVyY2VudEFuZFRvdGFsID0ge1xuXHRcdFx0XHRwZXJjZW50OiBudWxsLCB0b3RhbDogbnVsbFxuXHRcdFx0fTtcblx0XHRcdHZhciBmb3JtYXR0ZXJQYXJhbWV0ZXIgPSBudWxsO1xuXG5cdFx0XHRwZXJjZW50QW5kVG90YWwgPSBfdGhpcy5nZXRQZXJjZW50QW5kVG90YWwoZGF0YVNlcmllcywgZGF0YVBvaW50KTtcblxuXHRcdFx0aWYgKGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhUG9pbnQuaW5kZXhMYWJlbEZvcm1hdHRlcilcblx0XHRcdFx0Zm9ybWF0dGVyUGFyYW1ldGVyID0ge1xuXHRcdFx0XHRcdGNoYXJ0OiBfdGhpcy5fb3B0aW9ucywgZGF0YVNlcmllczogZGF0YVNlcmllcywgZGF0YVBvaW50OiBkYXRhUG9pbnQsIHRvdGFsOiBwZXJjZW50QW5kVG90YWwudG90YWwsIHBlcmNlbnQ6IHBlcmNlbnRBbmRUb3RhbC5wZXJjZW50XG5cdFx0XHRcdH07XG5cblx0XHRcdHZhciBpbmRleExhYmVsVGV4dCA9IGRhdGFQb2ludC5pbmRleExhYmVsRm9ybWF0dGVyID8gZGF0YVBvaW50LmluZGV4TGFiZWxGb3JtYXR0ZXIoZm9ybWF0dGVyUGFyYW1ldGVyKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBkYXRhUG9pbnQuaW5kZXhMYWJlbCA/IF90aGlzLnJlcGxhY2VLZXl3b3Jkc1dpdGhWYWx1ZShkYXRhUG9pbnQuaW5kZXhMYWJlbCwgZGF0YVBvaW50LCBkYXRhU2VyaWVzLCBqKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIgPyBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIoZm9ybWF0dGVyUGFyYW1ldGVyKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBkYXRhU2VyaWVzLmluZGV4TGFiZWwgPyBfdGhpcy5yZXBsYWNlS2V5d29yZHNXaXRoVmFsdWUoZGF0YVNlcmllcy5pbmRleExhYmVsLCBkYXRhUG9pbnQsIGRhdGFTZXJpZXMsIGopIDogZGF0YVBvaW50LmxhYmVsID8gZGF0YVBvaW50LmxhYmVsIDogJyc7XG5cblxuXHRcdFx0X3RoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdID0gZGF0YVBvaW50RU87XG5cblx0XHRcdC8vZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHQgPSBqLnRvU3RyaW5nKCkgKyBcIiBcIiArIFwia2luZ2Zpc2hlcjogXCIgKyBkYXRhUG9pbnQueS50b1N0cmluZygpOztcblx0XHRcdGRhdGFQb2ludEVPLmNlbnRlciA9IHtcblx0XHRcdFx0eDogY2VudGVyLngsIHk6IGNlbnRlci55XG5cdFx0XHR9O1xuXHRcdFx0ZGF0YVBvaW50RU8ueSA9IGRhdGFQb2ludC55O1xuXHRcdFx0ZGF0YVBvaW50RU8ucmFkaXVzID0gb3V0ZXJSYWRpdXM7XG5cdFx0XHRkYXRhUG9pbnRFTy5wZXJjZW50SW5uZXJSYWRpdXMgPSBwZXJjZW50SW5uZXJSYWRpdXM7XG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dCA9IGluZGV4TGFiZWxUZXh0O1xuXHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbFBsYWNlbWVudCA9IGRhdGFTZXJpZXMuaW5kZXhMYWJlbFBsYWNlbWVudDtcblx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxMaW5lQ29sb3IgPSBkYXRhUG9pbnQuaW5kZXhMYWJlbExpbmVDb2xvciA/IGRhdGFQb2ludC5pbmRleExhYmVsTGluZUNvbG9yIDogZGF0YVNlcmllcy5pbmRleExhYmVsTGluZUNvbG9yID8gZGF0YVNlcmllcy5pbmRleExhYmVsTGluZUNvbG9yIDogZGF0YVBvaW50LmNvbG9yID8gZGF0YVBvaW50LmNvbG9yIDogZGF0YVNlcmllcy5fY29sb3JTZXRbaiAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsTGluZVRoaWNrbmVzcyA9IGRhdGFQb2ludC5pbmRleExhYmVsTGluZVRoaWNrbmVzcyA/IGRhdGFQb2ludC5pbmRleExhYmVsTGluZVRoaWNrbmVzcyA6IGRhdGFTZXJpZXMuaW5kZXhMYWJlbExpbmVUaGlja25lc3M7XG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsTGluZURhc2hUeXBlID0gZGF0YVBvaW50LmluZGV4TGFiZWxMaW5lRGFzaFR5cGUgPyBkYXRhUG9pbnQuaW5kZXhMYWJlbExpbmVEYXNoVHlwZSA6IGRhdGFTZXJpZXMuaW5kZXhMYWJlbExpbmVEYXNoVHlwZTtcblx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxGb250Q29sb3IgPSBkYXRhUG9pbnQuaW5kZXhMYWJlbEZvbnRDb2xvciA/IGRhdGFQb2ludC5pbmRleExhYmVsRm9udENvbG9yIDogZGF0YVNlcmllcy5pbmRleExhYmVsRm9udENvbG9yO1xuXHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbEZvbnRTdHlsZSA9IGRhdGFQb2ludC5pbmRleExhYmVsRm9udFN0eWxlID8gZGF0YVBvaW50LmluZGV4TGFiZWxGb250U3R5bGUgOiBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb250U3R5bGU7XG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsRm9udFdlaWdodCA9IGRhdGFQb2ludC5pbmRleExhYmVsRm9udFdlaWdodCA/IGRhdGFQb2ludC5pbmRleExhYmVsRm9udFdlaWdodCA6IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvbnRXZWlnaHQ7XG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsRm9udFNpemUgPSBkYXRhUG9pbnQuaW5kZXhMYWJlbEZvbnRTaXplID8gZGF0YVBvaW50LmluZGV4TGFiZWxGb250U2l6ZSA6IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvbnRTaXplO1xuXHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbEZvbnRGYW1pbHkgPSBkYXRhUG9pbnQuaW5kZXhMYWJlbEZvbnRGYW1pbHkgPyBkYXRhUG9pbnQuaW5kZXhMYWJlbEZvbnRGYW1pbHkgOiBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb250RmFtaWx5O1xuXHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbEJhY2tncm91bmRDb2xvciA9IGRhdGFQb2ludC5pbmRleExhYmVsQmFja2dyb3VuZENvbG9yID8gZGF0YVBvaW50LmluZGV4TGFiZWxCYWNrZ3JvdW5kQ29sb3IgOiBkYXRhU2VyaWVzLmluZGV4TGFiZWxCYWNrZ3JvdW5kQ29sb3IgPyBkYXRhU2VyaWVzLmluZGV4TGFiZWxCYWNrZ3JvdW5kQ29sb3IgOiBudWxsO1xuXHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbE1heFdpZHRoID0gZGF0YVBvaW50LmluZGV4TGFiZWxNYXhXaWR0aCA/IGRhdGFQb2ludC5pbmRleExhYmVsTWF4V2lkdGggOiBkYXRhU2VyaWVzLmluZGV4TGFiZWxNYXhXaWR0aCA/IGRhdGFTZXJpZXMuaW5kZXhMYWJlbE1heFdpZHRoIDogcGxvdEFyZWEud2lkdGggKiAuMzM7XG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsV3JhcCA9IHR5cGVvZiAoZGF0YVBvaW50LmluZGV4TGFiZWxXcmFwKSAhPT0gXCJ1bmRlZmluZWRcIiA/IGRhdGFQb2ludC5pbmRleExhYmVsV3JhcCA6IGRhdGFTZXJpZXMuaW5kZXhMYWJlbFdyYXA7XG5cblx0XHRcdGRhdGFQb2ludEVPLnN0YXJ0QW5nbGUgPSBqID09PSAwID8gZGF0YVNlcmllcy5zdGFydEFuZ2xlID8gKGRhdGFTZXJpZXMuc3RhcnRBbmdsZSAvIDE4MCkgKiBNYXRoLlBJIDogMCA6IGRhdGFQb2ludEVPc1tqIC0gMV0uZW5kQW5nbGU7XG5cblx0XHRcdGRhdGFQb2ludEVPLnN0YXJ0QW5nbGUgPSAoZGF0YVBvaW50RU8uc3RhcnRBbmdsZSArICgyICogTWF0aC5QSSkpICUgKDIgKiBNYXRoLlBJKTtcblxuXHRcdFx0ZGF0YVBvaW50RU8uZW5kQW5nbGUgPSBkYXRhUG9pbnRFTy5zdGFydEFuZ2xlICsgKCgyICogTWF0aC5QSSAvIHN1bSkgKiBNYXRoLmFicyhkYXRhUG9pbnQueSkpO1xuXG5cdFx0XHQvL3ZhciBtaWRBbmdsZSA9IGRhdGFQb2ludEVPLnN0YXJ0QW5nbGUgKyBNYXRoLmFicyhkYXRhUG9pbnRFTy5lbmRBbmdsZSAtIGRhdGFQb2ludEVPLnN0YXJ0QW5nbGUpIC8gMjtcblx0XHRcdHZhciBtaWRBbmdsZSA9IChkYXRhUG9pbnRFTy5lbmRBbmdsZSArIGRhdGFQb2ludEVPLnN0YXJ0QW5nbGUpIC8gMjtcblxuXHRcdFx0Ly92YXIgbWlkQW5nbGUgPSAoMTgwIC8gTWF0aC5QSSAqIG1pZEFuZ2xlKTtcblxuXHRcdFx0bWlkQW5nbGUgPSAobWlkQW5nbGUgKyAoMiAqIE1hdGguUEkpKSAlICgyICogTWF0aC5QSSk7XG5cblx0XHRcdGRhdGFQb2ludEVPLm1pZEFuZ2xlID0gbWlkQW5nbGU7XG5cblx0XHRcdGlmIChkYXRhUG9pbnRFTy5taWRBbmdsZSA+IChNYXRoLlBJIC8gMikgLSBwb2xlQW5nbHVsYXJEaXN0YW5jZSAmJiBkYXRhUG9pbnRFTy5taWRBbmdsZSA8IChNYXRoLlBJIC8gMikgKyBwb2xlQW5nbHVsYXJEaXN0YW5jZSkge1xuXHRcdFx0XHRpZiAobm9EUE5lYXJTb3V0aFBvbGUgPT09IDAgfHwgZGF0YVBvaW50RU9zW2ZpcnN0RFBDbG9zZVRvU291dGhdLm1pZEFuZ2xlID4gZGF0YVBvaW50RU8ubWlkQW5nbGUpXG5cdFx0XHRcdFx0Zmlyc3REUENsb3NlVG9Tb3V0aCA9IGo7XG5cblx0XHRcdFx0bm9EUE5lYXJTb3V0aFBvbGUrKztcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKGRhdGFQb2ludEVPLm1pZEFuZ2xlID4gKDMgKiBNYXRoLlBJIC8gMikgLSBwb2xlQW5nbHVsYXJEaXN0YW5jZSAmJiBkYXRhUG9pbnRFTy5taWRBbmdsZSA8ICgzICogTWF0aC5QSSAvIDIpICsgcG9sZUFuZ2x1bGFyRGlzdGFuY2UpIHtcblx0XHRcdFx0aWYgKG5vRFBOZWFyTm9ydGhQb2xlID09PSAwIHx8IGRhdGFQb2ludEVPc1tmaXJzdERQQ2xvc2VUb05vcnRoXS5taWRBbmdsZSA+IGRhdGFQb2ludEVPLm1pZEFuZ2xlKVxuXHRcdFx0XHRcdGZpcnN0RFBDbG9zZVRvTm9ydGggPSBqO1xuXG5cdFx0XHRcdG5vRFBOZWFyTm9ydGhQb2xlKys7XG5cdFx0XHR9XG5cblxuXHRcdFx0aWYgKG1pZEFuZ2xlID4gKE1hdGguUEkgLyAyKSAmJiBtaWRBbmdsZSA8PSAoMyAqIE1hdGguUEkgLyAyKSlcblx0XHRcdFx0ZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA9IFwibGVmdFwiO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID0gXCJyaWdodFwiO1xuXG5cdFx0XHQvL2RhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0ID0gai50b1N0cmluZygpICsgXCI7IFwiICsgZGF0YVBvaW50LnkudG9TdHJpbmcoKSArIFwiOyBcIiArIG1pZEFuZ2xlLnRvU3RyaW5nKCkgKyBcIjsganVua1wiO1xuXHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jayA9IG5ldyBUZXh0QmxvY2soX3RoaXMucGxvdEFyZWEuY3R4LCB7XG5cdFx0XHRcdGZvbnRTaXplOiBkYXRhUG9pbnRFTy5pbmRleExhYmVsRm9udFNpemUsIGZvbnRGYW1pbHk6IGRhdGFQb2ludEVPLmluZGV4TGFiZWxGb250RmFtaWx5LCBmb250Q29sb3I6IGRhdGFQb2ludEVPLmluZGV4TGFiZWxGb250Q29sb3IsXG5cdFx0XHRcdGZvbnRTdHlsZTogZGF0YVBvaW50RU8uaW5kZXhMYWJlbEZvbnRTdHlsZSwgZm9udFdlaWdodDogZGF0YVBvaW50RU8uaW5kZXhMYWJlbEZvbnRXZWlnaHQsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogXCJsZWZ0XCIsXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvcjogZGF0YVBvaW50RU8uaW5kZXhMYWJlbEJhY2tncm91bmRDb2xvcixcblx0XHRcdFx0bWF4V2lkdGg6IGRhdGFQb2ludEVPLmluZGV4TGFiZWxNYXhXaWR0aCwgbWF4SGVpZ2h0OiBkYXRhUG9pbnRFTy5pbmRleExhYmVsV3JhcCA/IGRhdGFQb2ludEVPLmluZGV4TGFiZWxGb250U2l6ZSAqIDUgOiBkYXRhUG9pbnRFTy5pbmRleExhYmVsRm9udFNpemUgKiAxLjUsXG5cdFx0XHRcdHRleHQ6IGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0LFxuXHRcdFx0XHRwYWRkaW5nOiAwLFxuXHRcdFx0XHQvL3RleHRCYXNlbGluZTogZGF0YVBvaW50RU8uaW5kZXhMYWJlbEJhY2tncm91bmRDb2xvciA/IFwibWlkZGxlXCIgOiBcInRvcFwiXG5cdFx0XHRcdHRleHRCYXNlbGluZTogXCJ0b3BcIlxuXHRcdFx0fSk7XG5cblx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2subWVhc3VyZVRleHQoKTtcblxuXHRcdFx0Ly9kYXRhUG9pbnQubGFiZWxXaWR0aCA9IGN0eC5tZWFzdXJlVGV4dChqLnRvU3RyaW5nKCkgKyBcIjsgXCIgKyBkYXRhUG9pbnQubGFiZWwpLndpZHRoO1xuXG5cdFx0XHQvL2NvbnNvbGUubG9nKGRhdGFQb2ludC5sYWJlbCk7XG5cdFx0fVxuXG5cdFx0dmFyIG5vT2ZEUFRvUmlnaHRPZlNvdXRoUG9sZSA9IDA7XG5cdFx0dmFyIG5vT2ZEUFRvTGVmdE9mTm9ydGhQb2xlID0gMDtcblx0XHR2YXIga2VlcFNhbWVEaXJlY3Rpb24gPSBmYWxzZTsgLy8gb25jZSBhIGRhdGFQb2ludCdzIGhlbWlzcGhlcmUgaXMgY2hhbmdlZCwgb3RoZXJzIHNob3VsZCBmb2xsb3cgdGhlIHNhbWUgc28gdGhhdCB0aGVyZSBhcmUgbm8gbGFiZXMgbmVhciBwb2xlIHBvaW50aW5nIGluIG9wcG9zaXRlIGRpcmVjdGlvbi5cblxuXHRcdGZvciAoaiA9IDA7IGogPCBkYXRhUG9pbnRzLmxlbmd0aDsgaisrKSB7XG5cblx0XHRcdHZhciBkYXRhUG9pbnRFTyA9IGRhdGFQb2ludEVPc1soZmlyc3REUENsb3NlVG9Tb3V0aCArIGopICUgZGF0YVBvaW50cy5sZW5ndGhdO1xuXG5cdFx0XHRpZiAobm9EUE5lYXJTb3V0aFBvbGUgPiAxICYmIGRhdGFQb2ludEVPLm1pZEFuZ2xlID4gKE1hdGguUEkgLyAyKSAtIHBvbGVBbmdsdWxhckRpc3RhbmNlICYmIGRhdGFQb2ludEVPLm1pZEFuZ2xlIDwgKE1hdGguUEkgLyAyKSArIHBvbGVBbmdsdWxhckRpc3RhbmNlKSB7XG5cblx0XHRcdFx0aWYgKG5vT2ZEUFRvUmlnaHRPZlNvdXRoUG9sZSA8PSBub0RQTmVhclNvdXRoUG9sZSAvIDIgJiYgIWtlZXBTYW1lRGlyZWN0aW9uKSB7XG5cdFx0XHRcdFx0ZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA9IFwicmlnaHRcIjtcblx0XHRcdFx0XHRub09mRFBUb1JpZ2h0T2ZTb3V0aFBvbGUrKztcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID0gXCJsZWZ0XCI7XG5cdFx0XHRcdFx0a2VlcFNhbWVEaXJlY3Rpb24gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0a2VlcFNhbWVEaXJlY3Rpb24gPSBmYWxzZTtcblx0XHRmb3IgKGogPSAwOyBqIDwgZGF0YVBvaW50cy5sZW5ndGg7IGorKykge1xuXG5cdFx0XHR2YXIgZGF0YVBvaW50RU8gPSBkYXRhUG9pbnRFT3NbKGZpcnN0RFBDbG9zZVRvTm9ydGggKyBqKSAlIGRhdGFQb2ludHMubGVuZ3RoXTtcblxuXHRcdFx0Ly9pZiAoZGF0YVBvaW50LmhlbWlzcGhlcmUgPSBcInJpZ2h0XCIpXG5cdFx0XHQvL1x0YnJlYWs7XG5cblx0XHRcdGlmIChub0RQTmVhck5vcnRoUG9sZSA+IDEgJiYgZGF0YVBvaW50RU8ubWlkQW5nbGUgPiAoMyAqIE1hdGguUEkgLyAyKSAtIHBvbGVBbmdsdWxhckRpc3RhbmNlICYmIGRhdGFQb2ludEVPLm1pZEFuZ2xlIDwgKDMgKiBNYXRoLlBJIC8gMikgKyBwb2xlQW5nbHVsYXJEaXN0YW5jZSkge1xuXG5cdFx0XHRcdGlmIChub09mRFBUb0xlZnRPZk5vcnRoUG9sZSA8PSBub0RQTmVhck5vcnRoUG9sZSAvIDIgJiYgIWtlZXBTYW1lRGlyZWN0aW9uKSB7XG5cdFx0XHRcdFx0ZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA9IFwibGVmdFwiO1xuXHRcdFx0XHRcdG5vT2ZEUFRvTGVmdE9mTm9ydGhQb2xlKys7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA9IFwicmlnaHRcIjtcblx0XHRcdFx0XHRrZWVwU2FtZURpcmVjdGlvbiA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0vL0VuZCBvZiBpbml0TGFiZWxzKClcblxuXHRmdW5jdGlvbiByZW5kZXJMYWJlbHMoKSB7XG5cblx0XHR2YXIgY3R4ID0gX3RoaXMucGxvdEFyZWEuY3R4O1xuXHRcdGN0eC5maWxsU3R5bGUgPSBcImJsYWNrXCI7XG5cdFx0Y3R4LnN0cm9rZVN0eWxlID0gXCJncmV5XCI7XG5cdFx0dmFyIGZvbnRTaXplID0gMTY7XG5cdFx0Ly9jdHguZm9udCA9IGZvbnRTaXplICsgXCJweCBBcmlhbFwiO1xuXHRcdGN0eC50ZXh0QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuXHRcdGN0eC5saW5lSm9pbiA9IFwicm91bmRcIjtcblx0XHR2YXIgaSA9IDAsIGogPSAwO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkYXRhUG9pbnRFTyA9IGRhdGFQb2ludEVPc1tpXTtcblxuXHRcdFx0aWYgKCFkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSAtPSBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDI7XG5cblx0XHRcdHZhciB4T2Zmc2V0ID0gMDtcblxuXHRcdFx0aWYgKGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgPT09IFwibGVmdFwiKSB7XG5cdFx0XHRcdHZhciB4T2Zmc2V0ID0gZGF0YVNlcmllcy5pbmRleExhYmVsUGxhY2VtZW50ICE9PSBcImluc2lkZVwiID8gLShkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLndpZHRoICsgaW5kZXhMYWJlbExpbmVFZGdlTGVuZ3RoKSA6IC1kYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLndpZHRoIC8gMjtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHR2YXIgeE9mZnNldCA9IGRhdGFTZXJpZXMuaW5kZXhMYWJlbFBsYWNlbWVudCAhPT0gXCJpbnNpZGVcIiA/IGluZGV4TGFiZWxMaW5lRWRnZUxlbmd0aCA6IC1kYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLndpZHRoIC8gMjtcblx0XHRcdH1cblxuXHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay54ICs9IHhPZmZzZXQ7XG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnJlbmRlcih0cnVlKTtcblx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueCAtPSB4T2Zmc2V0O1xuXG5cdFx0XHQvL2lmIChpIDwgNClcblx0XHRcdC8vXHRjdXN0b21Qcm9tcHQoaSArIFwiOyBcIiArIGNlbnRlci55ICsgXCI7IFwiICsgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55LnRvRml4ZWQoMikpO1xuXG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgKz0gZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyO1xuXG5cdFx0XHRpZiAoZGF0YVBvaW50RU8uaW5kZXhMYWJlbFBsYWNlbWVudCAhPT0gXCJpbnNpZGVcIikge1xuXHRcdFx0XHR2YXIgaW5kZXhMYWJlbExpbmVTdGFydFggPSBkYXRhUG9pbnRFTy5jZW50ZXIueCArIG91dGVyUmFkaXVzICogTWF0aC5jb3MoZGF0YVBvaW50RU8ubWlkQW5nbGUpO1xuXHRcdFx0XHR2YXIgaW5kZXhMYWJlbExpbmVTdGFydFkgPSBkYXRhUG9pbnRFTy5jZW50ZXIueSArIG91dGVyUmFkaXVzICogTWF0aC5zaW4oZGF0YVBvaW50RU8ubWlkQW5nbGUpO1xuXG5cdFx0XHRcdC8vY3R4LnN0cm9rZVN0eWxlID0gZGF0YVBvaW50c1tpXS5jb2xvciA/IGRhdGFQb2ludHNbaV0uY29sb3IgOiBkYXRhU2VyaWVzLl9jb2xvclNldFtpICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcblx0XHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gZGF0YVBvaW50RU8uaW5kZXhMYWJlbExpbmVDb2xvcjtcblx0XHRcdFx0Y3R4LmxpbmVXaWR0aCA9IGRhdGFQb2ludEVPLmluZGV4TGFiZWxMaW5lVGhpY2tuZXNzO1xuXG5cdFx0XHRcdGlmIChjdHguc2V0TGluZURhc2gpIHtcblx0XHRcdFx0XHRjdHguc2V0TGluZURhc2goZ2V0TGluZURhc2hBcnJheShkYXRhUG9pbnRFTy5pbmRleExhYmVsTGluZURhc2hUeXBlLCBkYXRhUG9pbnRFTy5pbmRleExhYmVsTGluZVRoaWNrbmVzcykpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly9jdHgubGluZVdpZHRoID0gNDtcblx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRjdHgubW92ZVRvKGluZGV4TGFiZWxMaW5lU3RhcnRYLCBpbmRleExhYmVsTGluZVN0YXJ0WSk7XG5cdFx0XHRcdGN0eC5saW5lVG8oZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay54LCBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkpO1xuXHRcdFx0XHRjdHgubGluZVRvKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueCArIChkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID09PSBcImxlZnRcIiA/IC1pbmRleExhYmVsTGluZUVkZ2VMZW5ndGggOiBpbmRleExhYmVsTGluZUVkZ2VMZW5ndGgpLCBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkpO1xuXHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0XHRcdC8vY3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHQvL3dpbmRvdy5hbGVydChcImNvbnRpbmU/P1wiKTtcblx0XHRcdFx0Ly9hbmltYXRlKCk7XG5cdFx0XHR9XG5cblx0XHRcdGN0eC5saW5lSm9pbiA9IFwibWl0ZXJcIjtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhbmltYXRlKGZyYWN0aW9uQ29tcGxldGUpIHtcblxuXHRcdHZhciBjdHggPSBfdGhpcy5wbG90QXJlYS5jdHg7XG5cblx0XHRjdHguY2xlYXJSZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IF90aGlzLmJhY2tncm91bmRDb2xvcjtcblx0XHRjdHguZmlsbFJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblxuXHRcdHZhciBtYXhBbmdsZSA9IGRhdGFQb2ludEVPc1swXS5zdGFydEFuZ2xlICsgKDIgKiBNYXRoLlBJICogZnJhY3Rpb25Db21wbGV0ZSk7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0dmFyIHN0YXJ0QW5nbGUgPSBpID09PSAwID8gZGF0YVBvaW50RU9zW2ldLnN0YXJ0QW5nbGUgOiBlbmRBbmdsZTtcblx0XHRcdHZhciBlbmRBbmdsZSA9IHN0YXJ0QW5nbGUgKyAoZGF0YVBvaW50RU9zW2ldLmVuZEFuZ2xlIC0gZGF0YVBvaW50RU9zW2ldLnN0YXJ0QW5nbGUpO1xuXG5cdFx0XHR2YXIgc2hvdWxkQnJlYWsgPSBmYWxzZTtcblxuXHRcdFx0aWYgKGVuZEFuZ2xlID4gbWF4QW5nbGUpIHtcblx0XHRcdFx0ZW5kQW5nbGUgPSBtYXhBbmdsZTtcblx0XHRcdFx0c2hvdWxkQnJlYWsgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgY29sb3IgPSBkYXRhUG9pbnRzW2ldLmNvbG9yID8gZGF0YVBvaW50c1tpXS5jb2xvciA6IGRhdGFTZXJpZXMuX2NvbG9yU2V0W2kgJSBkYXRhU2VyaWVzLl9jb2xvclNldC5sZW5ndGhdO1xuXG5cdFx0XHRpZiAoZW5kQW5nbGUgPiBzdGFydEFuZ2xlKVxuXHRcdFx0XHRkcmF3U2VnbWVudChfdGhpcy5wbG90QXJlYS5jdHgsIGRhdGFQb2ludEVPc1tpXS5jZW50ZXIsIGRhdGFQb2ludEVPc1tpXS5yYWRpdXMsIGNvbG9yLCBkYXRhU2VyaWVzLnR5cGUsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5LCBkYXRhUG9pbnRFT3NbaV0ucGVyY2VudElubmVyUmFkaXVzKTtcblxuXHRcdFx0aWYgKHNob3VsZEJyZWFrKVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBleHBsb2RlVG9nZ2xlKGZyYWN0aW9uQ29tcGxldGUpIHtcblxuXHRcdHZhciBjdHggPSBfdGhpcy5wbG90QXJlYS5jdHg7XG5cblx0XHRjdHguY2xlYXJSZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IF90aGlzLmJhY2tncm91bmRDb2xvcjtcblx0XHRjdHguZmlsbFJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHR2YXIgc3RhcnRBbmdsZSA9IGRhdGFQb2ludEVPc1tpXS5zdGFydEFuZ2xlO1xuXHRcdFx0dmFyIGVuZEFuZ2xlID0gZGF0YVBvaW50RU9zW2ldLmVuZEFuZ2xlO1xuXG5cdFx0XHRpZiAoZW5kQW5nbGUgPiBzdGFydEFuZ2xlKSB7XG5cblxuXHRcdFx0XHR2YXIgb2Zmc2V0WCA9IChvdXRlclJhZGl1cyAqIC4wNyAqIE1hdGguY29zKGRhdGFQb2ludEVPc1tpXS5taWRBbmdsZSkpO1xuXHRcdFx0XHR2YXIgb2Zmc2V0WSA9IChvdXRlclJhZGl1cyAqIC4wNyAqIE1hdGguc2luKGRhdGFQb2ludEVPc1tpXS5taWRBbmdsZSkpO1xuXHRcdFx0XHR2YXIgaXNJblRyYW5zaXRpb24gPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5leHBsb2RlZCkge1xuXHRcdFx0XHRcdGlmIChNYXRoLmFicyhkYXRhUG9pbnRFT3NbaV0uY2VudGVyLnggLSAoY2VudGVyLnggKyBvZmZzZXRYKSkgPiAwLjAwMDAwMDAwMSB8fCBNYXRoLmFicyhkYXRhUG9pbnRFT3NbaV0uY2VudGVyLnkgLSAoY2VudGVyLnkgKyBvZmZzZXRZKSkgPiAwLjAwMDAwMDAwMSkge1xuXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnRFT3NbaV0uY2VudGVyLnggPSBjZW50ZXIueCArIG9mZnNldFggKiBmcmFjdGlvbkNvbXBsZXRlO1xuXHRcdFx0XHRcdFx0ZGF0YVBvaW50RU9zW2ldLmNlbnRlci55ID0gY2VudGVyLnkgKyBvZmZzZXRZICogZnJhY3Rpb25Db21wbGV0ZTtcblxuXHRcdFx0XHRcdFx0aXNJblRyYW5zaXRpb24gPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChNYXRoLmFicyhkYXRhUG9pbnRFT3NbaV0uY2VudGVyLnggLSBjZW50ZXIueCkgPiAwIHx8IE1hdGguYWJzKGRhdGFQb2ludEVPc1tpXS5jZW50ZXIueSAtIGNlbnRlci55KSA+IDApIHtcblx0XHRcdFx0XHRkYXRhUG9pbnRFT3NbaV0uY2VudGVyLnggPSBjZW50ZXIueCArIG9mZnNldFggKiAoMSAtIGZyYWN0aW9uQ29tcGxldGUpO1xuXHRcdFx0XHRcdGRhdGFQb2ludEVPc1tpXS5jZW50ZXIueSA9IGNlbnRlci55ICsgb2Zmc2V0WSAqICgxIC0gZnJhY3Rpb25Db21wbGV0ZSk7XG5cblx0XHRcdFx0XHRpc0luVHJhbnNpdGlvbiA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaXNJblRyYW5zaXRpb24pIHtcblx0XHRcdFx0XHR2YXIgZW50cnkgPSB7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRlbnRyeS5kYXRhU2VyaWVzID0gZGF0YVNlcmllcztcblx0XHRcdFx0XHRlbnRyeS5kYXRhUG9pbnQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV07XG5cdFx0XHRcdFx0ZW50cnkuaW5kZXggPSBpO1xuXHRcdFx0XHRcdF90aGlzLl90b29sVGlwLmhpZ2hsaWdodE9iamVjdHMoW2VudHJ5XSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgY29sb3IgPSBkYXRhUG9pbnRzW2ldLmNvbG9yID8gZGF0YVBvaW50c1tpXS5jb2xvciA6IGRhdGFTZXJpZXMuX2NvbG9yU2V0W2kgJSBkYXRhU2VyaWVzLl9jb2xvclNldC5sZW5ndGhdO1xuXG5cdFx0XHRcdGRyYXdTZWdtZW50KF90aGlzLnBsb3RBcmVhLmN0eCwgZGF0YVBvaW50RU9zW2ldLmNlbnRlciwgZGF0YVBvaW50RU9zW2ldLnJhZGl1cywgY29sb3IsIGRhdGFTZXJpZXMudHlwZSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGRhdGFTZXJpZXMuZmlsbE9wYWNpdHksIGRhdGFQb2ludEVPc1tpXS5wZXJjZW50SW5uZXJSYWRpdXMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vd2luZG93LmFsZXJ0KFwibmV4dD8/XCIpO1xuXHRcdHJlbmRlckxhYmVscygpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXJlRGF0YVBvaW50c1Rvb0Nsb3NlKGZpcnN0LCBzZWNvbmQpIHtcblxuXHRcdHZhciBsYWJlbDEgPSB7XG5cdFx0XHR4MTogZmlyc3QuaW5kZXhMYWJlbFRleHRCbG9jay54LCB5MTogZmlyc3QuaW5kZXhMYWJlbFRleHRCbG9jay55IC0gZmlyc3QuaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyLCB4MjogZmlyc3QuaW5kZXhMYWJlbFRleHRCbG9jay54ICsgZmlyc3QuaW5kZXhMYWJlbFRleHRCbG9jay53aWR0aCwgeTI6IGZpcnN0LmluZGV4TGFiZWxUZXh0QmxvY2sueSArIGZpcnN0LmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMlxuXHRcdH07XG5cdFx0dmFyIGxhYmVsMiA9IHtcblx0XHRcdHgxOiBzZWNvbmQuaW5kZXhMYWJlbFRleHRCbG9jay54LCB5MTogc2Vjb25kLmluZGV4TGFiZWxUZXh0QmxvY2sueSAtIHNlY29uZC5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIsIHgyOiBzZWNvbmQuaW5kZXhMYWJlbFRleHRCbG9jay54ICsgc2Vjb25kLmluZGV4TGFiZWxUZXh0QmxvY2sud2lkdGgsIHkyOiBzZWNvbmQuaW5kZXhMYWJlbFRleHRCbG9jay55ICsgc2Vjb25kLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMlxuXHRcdH07XG5cblx0XHRpZiAobGFiZWwxLngyIDwgbGFiZWwyLngxIC0gaW5kZXhMYWJlbExpbmVFZGdlTGVuZ3RoIHx8IGxhYmVsMS54MSA+IGxhYmVsMi54MiArIGluZGV4TGFiZWxMaW5lRWRnZUxlbmd0aCB8fCBsYWJlbDEueTEgPiBsYWJlbDIueTIgKyBpbmRleExhYmVsTGluZUVkZ2VMZW5ndGggfHwgbGFiZWwxLnkyIDwgbGFiZWwyLnkxIC0gaW5kZXhMYWJlbExpbmVFZGdlTGVuZ3RoKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRWZXJ0aWNhbERpc3RhbmNlQmV0d2VlbkxhYmVscyhmaXJzdCwgc2Vjb25kKSB7XG5cblx0XHR2YXIgZGlzdGFuY2UgPSAwO1xuXHRcdHZhciBsYWJlbDEgPSB7XG5cdFx0XHR5OiBmaXJzdC5pbmRleExhYmVsVGV4dEJsb2NrLnksIHkxOiBmaXJzdC5pbmRleExhYmVsVGV4dEJsb2NrLnkgLSBmaXJzdC5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIsIHkyOiBmaXJzdC5pbmRleExhYmVsVGV4dEJsb2NrLnkgKyBmaXJzdC5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDJcblx0XHR9O1xuXHRcdHZhciBsYWJlbDIgPSB7XG5cdFx0XHR5OiBzZWNvbmQuaW5kZXhMYWJlbFRleHRCbG9jay55LCB5MTogc2Vjb25kLmluZGV4TGFiZWxUZXh0QmxvY2sueSAtIHNlY29uZC5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIsIHkyOiBzZWNvbmQuaW5kZXhMYWJlbFRleHRCbG9jay55ICsgc2Vjb25kLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMlxuXHRcdH07XG5cblx0XHRpZiAobGFiZWwyLnkgPiBsYWJlbDEueSkge1xuXHRcdFx0ZGlzdGFuY2UgPSBsYWJlbDIueTEgLSBsYWJlbDEueTI7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0ZGlzdGFuY2UgPSBsYWJlbDEueTEgLSBsYWJlbDIueTI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRpc3RhbmNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0TmV4dExhYmVsSW5kZXgoY3VycmVudExhYmVsSW5kZXgpIHtcblx0XHR2YXIgbmV4dExhYmVsSW5kZXggPSBudWxsO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDE7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdG5leHRMYWJlbEluZGV4ID0gKGN1cnJlbnRMYWJlbEluZGV4ICsgaSArIGRhdGFQb2ludEVPcy5sZW5ndGgpICUgZGF0YVBvaW50RU9zLmxlbmd0aDtcblxuXHRcdFx0aWYgKGRhdGFQb2ludEVPc1tuZXh0TGFiZWxJbmRleF0uaGVtaXNwaGVyZSAhPT0gZGF0YVBvaW50RU9zW2N1cnJlbnRMYWJlbEluZGV4XS5oZW1pc3BoZXJlKSB7XG5cdFx0XHRcdG5leHRMYWJlbEluZGV4ID0gbnVsbDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICgoZGF0YVBvaW50RU9zW25leHRMYWJlbEluZGV4XS5pbmRleExhYmVsVGV4dCkgJiYgKG5leHRMYWJlbEluZGV4ICE9PSBjdXJyZW50TGFiZWxJbmRleClcblx0XHRcdFx0JiYgKChnZXRWZXJ0aWNhbERpc3RhbmNlQmV0d2VlbkxhYmVscyhkYXRhUG9pbnRFT3NbbmV4dExhYmVsSW5kZXhdLCBkYXRhUG9pbnRFT3NbY3VycmVudExhYmVsSW5kZXhdKSA8IDApIHx8IChkYXRhUG9pbnRFT3NbY3VycmVudExhYmVsSW5kZXhdLmhlbWlzcGhlcmUgPT09IFwicmlnaHRcIiA/IGRhdGFQb2ludEVPc1tuZXh0TGFiZWxJbmRleF0uaW5kZXhMYWJlbFRleHRCbG9jay55ID49IGRhdGFQb2ludEVPc1tjdXJyZW50TGFiZWxJbmRleF0uaW5kZXhMYWJlbFRleHRCbG9jay55IDogZGF0YVBvaW50RU9zW25leHRMYWJlbEluZGV4XS5pbmRleExhYmVsVGV4dEJsb2NrLnkgPD0gZGF0YVBvaW50RU9zW2N1cnJlbnRMYWJlbEluZGV4XS5pbmRleExhYmVsVGV4dEJsb2NrLnkpKSlcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0bmV4dExhYmVsSW5kZXggPSBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBuZXh0TGFiZWxJbmRleDtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldFByZXZpb3VzTGFiZWxJbmRleChjdXJyZW50TGFiZWxJbmRleCkge1xuXHRcdHZhciBwcmV2TGFiZWxJbmRleCA9IG51bGw7XG5cblx0XHRmb3IgKHZhciBpID0gMTsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0cHJldkxhYmVsSW5kZXggPSAoY3VycmVudExhYmVsSW5kZXggLSBpICsgZGF0YVBvaW50RU9zLmxlbmd0aCkgJSBkYXRhUG9pbnRFT3MubGVuZ3RoO1xuXG5cdFx0XHRpZiAoZGF0YVBvaW50RU9zW3ByZXZMYWJlbEluZGV4XS5oZW1pc3BoZXJlICE9PSBkYXRhUG9pbnRFT3NbY3VycmVudExhYmVsSW5kZXhdLmhlbWlzcGhlcmUpIHtcblx0XHRcdFx0cHJldkxhYmVsSW5kZXggPSBudWxsO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKChkYXRhUG9pbnRFT3NbcHJldkxhYmVsSW5kZXhdLmluZGV4TGFiZWxUZXh0KSAmJiAoZGF0YVBvaW50RU9zW3ByZXZMYWJlbEluZGV4XS5oZW1pc3BoZXJlID09PSBkYXRhUG9pbnRFT3NbY3VycmVudExhYmVsSW5kZXhdLmhlbWlzcGhlcmUpICYmIChwcmV2TGFiZWxJbmRleCAhPT0gY3VycmVudExhYmVsSW5kZXgpXG5cdFx0XHRcdCYmICgoZ2V0VmVydGljYWxEaXN0YW5jZUJldHdlZW5MYWJlbHMoZGF0YVBvaW50RU9zW3ByZXZMYWJlbEluZGV4XSwgZGF0YVBvaW50RU9zW2N1cnJlbnRMYWJlbEluZGV4XSkgPCAwKSB8fCAoZGF0YVBvaW50RU9zW2N1cnJlbnRMYWJlbEluZGV4XS5oZW1pc3BoZXJlID09PSBcInJpZ2h0XCIgPyBkYXRhUG9pbnRFT3NbcHJldkxhYmVsSW5kZXhdLmluZGV4TGFiZWxUZXh0QmxvY2sueSA8PSBkYXRhUG9pbnRFT3NbY3VycmVudExhYmVsSW5kZXhdLmluZGV4TGFiZWxUZXh0QmxvY2sueSA6IGRhdGFQb2ludEVPc1twcmV2TGFiZWxJbmRleF0uaW5kZXhMYWJlbFRleHRCbG9jay55ID49IGRhdGFQb2ludEVPc1tjdXJyZW50TGFiZWxJbmRleF0uaW5kZXhMYWJlbFRleHRCbG9jay55KSkpXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHByZXZMYWJlbEluZGV4ID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiBwcmV2TGFiZWxJbmRleDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlUG9zaXRpb25MYWJlbHMoZGF0YVBvaW50SW5kZXgsIG9mZnNldCkge1xuXHRcdG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG5cdFx0dmFyIGFjdHVhbE9mZnNldCA9IDA7XG5cblx0XHQvL3ZhciBsYWJlbFlNaW4gPSAyO1xuXHRcdC8vdmFyIGxhYmVsWU1heCA9IGN0eC5jYW52YXMuaGVpZ2h0IC0gMjtcblx0XHQvL3ZhciBsYWJlbFlNaW4gPSBfdGhpcy5wbG90QXJlYS5jdHguY2FudmFzLmhlaWdodCAvIDIgLSBpbmRleExhYmVsUmFkaXVzICogMTtcblx0XHQvL3ZhciBsYWJlbFlNYXggPSBfdGhpcy5wbG90QXJlYS5jdHguY2FudmFzLmhlaWdodCAvIDIgKyBpbmRleExhYmVsUmFkaXVzICogMTtcblxuXHRcdHZhciBsYWJlbFlNaW4gPSBjZW50ZXIueSAtIGluZGV4TGFiZWxSYWRpdXMgKiAxO1xuXHRcdHZhciBsYWJlbFlNYXggPSBjZW50ZXIueSArIGluZGV4TGFiZWxSYWRpdXMgKiAxO1xuXG5cdFx0Ly9jb25zb2xlLmxvZyh0b3RhbFJlY3Vyc2lvbnMpO1xuXG5cdFx0aWYgKGRhdGFQb2ludEluZGV4ID49IDAgJiYgZGF0YVBvaW50SW5kZXggPCBkYXRhUG9pbnRzLmxlbmd0aCkge1xuXG5cdFx0XHR2YXIgZGF0YVBvaW50RU8gPSBkYXRhUG9pbnRFT3NbZGF0YVBvaW50SW5kZXhdO1xuXHRcdFx0Ly9pZiAoZGF0YVBvaW50SW5kZXggPT09IDApXG5cdFx0XHQvL1x0Y3VzdG9tUHJvbXB0KGxhYmVsWU1pbi50b0ZpeGVkKDIpICsgXCI7IFwiICsgbGFiZWxZTWF4LnRvRml4ZWQoMikgKyBcIjsgXCIgKyBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkudG9GaXhlZCgyKSk7XG5cblx0XHRcdC8vIElmIGxhYmVsIGlzIGFscmVhZHkgb3V0c2lkZSB0aGUgYm91bmRzLCByZXR1cm5cblx0XHRcdGlmICgob2Zmc2V0IDwgMCAmJiBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgPCBsYWJlbFlNaW4pIHx8IChvZmZzZXQgPiAwICYmIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSA+IGxhYmVsWU1heCkpXG5cdFx0XHRcdHJldHVybiAwO1xuXG5cblx0XHRcdHZhciB2YWxpZE9mZnNldCA9IG9mZnNldDtcblxuXG5cdFx0XHQvL0NoZWNrIGlmIHRoZSBvZmZzZXQgZmFsbHMgd2l0aGluIHRoZSBib3VuZHMgKGxhYmVsWU1pbiwgbGFiZWxZTWF4LCB0YW5nZW50aWFsIGJvdW5kcykgd2l0aG91dCBjb25zaWRlcmluZyBvdmVybGFwLiBFbHNlIHVzZSB0aGUgY2xvc2VzdCBvZmZzZXQgdGhhdCBpcyBwb3NzaWJsZSAtIHZhbGlkT2Zmc2V0LlxuXHRcdFx0e1xuXHRcdFx0XHR2YXIgZGlzdEZyb21JbmRleExpbmVTdGFydCA9IDA7XG5cdFx0XHRcdHZhciBpbmRleExhYmVsTGluZVN0YXJ0WCA9IDA7XG5cdFx0XHRcdHZhciBpbmRleExhYmVsTGluZVN0YXJ0WSA9IDA7XG5cdFx0XHRcdHZhciBpbmRleExhYmVsQW5nbGUgPSAwO1xuXHRcdFx0XHR2YXIgaW5kZXhMYWJlbEFuZ2xlV2hlblRhbmdlbnQgPSAwO1xuXG5cdFx0XHRcdGlmICh2YWxpZE9mZnNldCA8IDApIHtcblx0XHRcdFx0XHRpZiAoZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55IC0gZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyID4gbGFiZWxZTWluICYmIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSAtIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMiArIHZhbGlkT2Zmc2V0IDwgbGFiZWxZTWluKVxuXHRcdFx0XHRcdFx0dmFsaWRPZmZzZXQgPSAtKGxhYmVsWU1pbiAtIChkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgLSBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIgKyB2YWxpZE9mZnNldCkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgKyBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIgPCBsYWJlbFlNaW4gJiYgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55ICsgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyICsgdmFsaWRPZmZzZXQgPiBsYWJlbFlNYXgpXG5cdFx0XHRcdFx0XHR2YWxpZE9mZnNldCA9IChkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgKyBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIgKyB2YWxpZE9mZnNldCkgLSBsYWJlbFlNYXg7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgbmV3bGFiZWxZID0gZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55ICsgdmFsaWRPZmZzZXQ7XG5cdFx0XHRcdHZhciBuZXdsYWJlbFggPSAwO1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID09PSBcInJpZ2h0XCIpIHtcblx0XHRcdFx0XHRuZXdsYWJlbFggPSBjZW50ZXIueCArIE1hdGguc3FydChNYXRoLnBvdyhpbmRleExhYmVsUmFkaXVzLCAyKSAtIE1hdGgucG93KG5ld2xhYmVsWSAtIGNlbnRlci55LCAyKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdG5ld2xhYmVsWCA9IGNlbnRlci54IC0gTWF0aC5zcXJ0KE1hdGgucG93KGluZGV4TGFiZWxSYWRpdXMsIDIpIC0gTWF0aC5wb3cobmV3bGFiZWxZIC0gY2VudGVyLnksIDIpKTtcblxuXG5cdFx0XHRcdGluZGV4TGFiZWxMaW5lU3RhcnRYID0gY2VudGVyLnggKyBvdXRlclJhZGl1cyAqIE1hdGguY29zKGRhdGFQb2ludEVPLm1pZEFuZ2xlKTtcblx0XHRcdFx0aW5kZXhMYWJlbExpbmVTdGFydFkgPSBjZW50ZXIueSArIG91dGVyUmFkaXVzICogTWF0aC5zaW4oZGF0YVBvaW50RU8ubWlkQW5nbGUpO1xuXG5cdFx0XHRcdGRpc3RGcm9tSW5kZXhMaW5lU3RhcnQgPSBNYXRoLnNxcnQoTWF0aC5wb3cobmV3bGFiZWxYIC0gaW5kZXhMYWJlbExpbmVTdGFydFgsIDIpICsgTWF0aC5wb3cobmV3bGFiZWxZIC0gaW5kZXhMYWJlbExpbmVTdGFydFksIDIpKTtcblxuXHRcdFx0XHRpbmRleExhYmVsQW5nbGVXaGVuVGFuZ2VudCA9IE1hdGguYWNvcyhvdXRlclJhZGl1cyAvIGluZGV4TGFiZWxSYWRpdXMpO1xuXG5cdFx0XHRcdC8vaW5kZXhMYWJlbEFuZ2xlID0gTWF0aC5hY29zKChvdXRlclJhZGl1cyAqIG91dGVyUmFkaXVzICsgZGlzdEZyb21JbmRleExpbmVTdGFydCAqIGRpc3RGcm9tSW5kZXhMaW5lU3RhcnQgLSBpbmRleExhYmVsUmFkaXVzICogaW5kZXhMYWJlbFJhZGl1cykgLyAoMiAqIG91dGVyUmFkaXVzICogZGlzdEZyb21JbmRleExpbmVTdGFydCkpO1xuXHRcdFx0XHRpbmRleExhYmVsQW5nbGUgPSBNYXRoLmFjb3MoKGluZGV4TGFiZWxSYWRpdXMgKiBpbmRleExhYmVsUmFkaXVzICsgb3V0ZXJSYWRpdXMgKiBvdXRlclJhZGl1cyAtIGRpc3RGcm9tSW5kZXhMaW5lU3RhcnQgKiBkaXN0RnJvbUluZGV4TGluZVN0YXJ0KSAvICgyICogb3V0ZXJSYWRpdXMgKiBpbmRleExhYmVsUmFkaXVzKSk7XG5cblx0XHRcdFx0aWYgKGluZGV4TGFiZWxBbmdsZSA8IGluZGV4TGFiZWxBbmdsZVdoZW5UYW5nZW50KSB7XG5cdFx0XHRcdFx0dmFsaWRPZmZzZXQgPSBuZXdsYWJlbFkgLSBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnk7XG5cdFx0XHRcdFx0Ly9kYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnggPSBuZXdsYWJlbFg7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cblx0XHRcdFx0XHR2YWxpZE9mZnNldCA9IDA7XG5cblx0XHRcdFx0XHQvL2RhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueCA9IG5ld2xhYmVsWDtcblxuXHRcdFx0XHRcdC8vSW5kZXggTGluZSBpcyBvdmVybGFwcGluZyB0aGUgcGllLiBTbyBsZXRzIGZpbmQgb3V0IHRoZSBwb2ludCB3aGVyZSBpbmRleGxpbmUgYmVjb21lcyBhIHRhbmdlbnQuXG5cblx0XHRcdFx0XHQvL2Rpc3RGcm9tSW5kZXhMaW5lU3RhcnQgPSBNYXRoLnNxcnQoaW5kZXhMYWJlbFJhZGl1cyAqIGluZGV4TGFiZWxSYWRpdXMgLSBvdXRlclJhZGl1cyAqIG91dGVyUmFkaXVzKTtcblx0XHRcdFx0XHQvLy8vZGlzdEZyb21JbmRleExpbmVTdGFydCAqPSBvZmZzZXQgPCAwID8gLTEgOiAxO1xuXHRcdFx0XHRcdC8vLy9pbmRleExhYmVsQW5nbGUgPSBNYXRoLmFjb3MoKGluZGV4TGFiZWxSYWRpdXMgKiBpbmRleExhYmVsUmFkaXVzICsgb3V0ZXJSYWRpdXMgKiBvdXRlclJhZGl1cyAtIGRpc3RGcm9tSW5kZXhMaW5lU3RhcnQgKiBkaXN0RnJvbUluZGV4TGluZVN0YXJ0KSAvICgyICogb3V0ZXJSYWRpdXMgKiBpbmRleExhYmVsUmFkaXVzKSk7XG5cdFx0XHRcdFx0Ly9pbmRleExhYmVsQW5nbGUgPSBNYXRoLmF0YW4yKGRpc3RGcm9tSW5kZXhMaW5lU3RhcnQsIG91dGVyUmFkaXVzKTtcblxuXHRcdFx0XHRcdC8vbmV3bGFiZWxYID0gY2VudGVyLnggKyBpbmRleExhYmVsUmFkaXVzICogTWF0aC5jb3MoaW5kZXhMYWJlbEFuZ2xlKTtcblx0XHRcdFx0XHQvL25ld2xhYmVsWSA9IGNlbnRlci55ICsgaW5kZXhMYWJlbFJhZGl1cyAqIE1hdGguc2luKGluZGV4TGFiZWxBbmdsZSk7XG5cblx0XHRcdFx0XHQvL2FjdHVhbE9mZnNldCA9IG5ld2xhYmVsWSAtIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueTtcblxuXHRcdFx0XHRcdC8vZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55ID0gbmV3bGFiZWxZO1xuXHRcdFx0XHRcdC8vZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay54ID0gbmV3bGFiZWxYO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHQvL3ZhciB0ZW1wSW5kZXggPSAoZGF0YVBvaW50SW5kZXggKyBkYXRhUG9pbnRFT3MubGVuZ3RoIC0gMSkgJSBkYXRhUG9pbnRFT3MubGVuZ3RoO1xuXG5cdFx0XHQvL3ZhciBwcmV2RGF0YVBvaW50SW5kZXggPSBkYXRhUG9pbnRFT3NbdGVtcEluZGV4XS5oZW1pc3BoZXJlID09PSBkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID8gdGVtcEluZGV4IDogbnVsbDtcblxuXHRcdFx0dmFyIHByZXZEYXRhUG9pbnRJbmRleCA9IGdldFByZXZpb3VzTGFiZWxJbmRleChkYXRhUG9pbnRJbmRleCk7XG5cblx0XHRcdC8vdGVtcEluZGV4ID0gKGRhdGFQb2ludEluZGV4ICsgZGF0YVBvaW50RU9zLmxlbmd0aCArIDEpICUgZGF0YVBvaW50RU9zLmxlbmd0aDtcblxuXHRcdFx0Ly92YXIgbmV4dERhdGFQb2ludEluZGV4ID0gZGF0YVBvaW50RU9zW3RlbXBJbmRleF0uaGVtaXNwaGVyZSA9PT0gZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA/IHRlbXBJbmRleCA6IG51bGw7XG5cblx0XHRcdHZhciBuZXh0RGF0YVBvaW50SW5kZXggPSBnZXROZXh0TGFiZWxJbmRleChkYXRhUG9pbnRJbmRleCk7XG5cblx0XHRcdHZhciBvdGhlcmRhdGFQb2ludEVPLCBvdGhlckRhdGFQb2ludEluZGV4LCBkaXN0YW5jZUZyb21PdGhlckxhYmVsO1xuXHRcdFx0dmFyIG90aGVyRGF0YVBvaW50T2Zmc2V0ID0gMDtcblx0XHRcdHZhciBvdGhlckRhdGFQb2ludEFjdHVhbE9mZnNldCA9IDA7XG5cblxuXHRcdFx0aWYgKHZhbGlkT2Zmc2V0IDwgMCkge1xuXG5cdFx0XHRcdG90aGVyRGF0YVBvaW50SW5kZXggPSBkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID09PSBcInJpZ2h0XCIgPyBwcmV2RGF0YVBvaW50SW5kZXggOiBuZXh0RGF0YVBvaW50SW5kZXg7XG5cblx0XHRcdFx0YWN0dWFsT2Zmc2V0ID0gdmFsaWRPZmZzZXQ7XG5cblx0XHRcdFx0aWYgKG90aGVyRGF0YVBvaW50SW5kZXggIT09IG51bGwpIHtcblxuXHRcdFx0XHRcdC8vaWYgKGRhdGFQb2ludEluZGV4IDwgNClcblx0XHRcdFx0XHQvL1x0Y3VzdG9tUHJvbXB0KFwidmFsaWQ6IFwiICsgdmFsaWRPZmZzZXQpO1xuXG5cdFx0XHRcdFx0dmFyIHRlbXBPZmZzZXQgPSAtdmFsaWRPZmZzZXQ7XG5cblx0XHRcdFx0XHR2YXIgZGlzdGFuY2VGcm9tT3RoZXJMYWJlbCA9IChkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgLSBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIpIC0gKGRhdGFQb2ludEVPc1tvdGhlckRhdGFQb2ludEluZGV4XS5pbmRleExhYmVsVGV4dEJsb2NrLnkgKyBkYXRhUG9pbnRFT3Nbb3RoZXJEYXRhUG9pbnRJbmRleF0uaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyKTtcblxuXHRcdFx0XHRcdGlmIChkaXN0YW5jZUZyb21PdGhlckxhYmVsIC0gdGVtcE9mZnNldCA8IG1pbkRpc3RhbmNlQmV0d2VlbkxhYmVscykge1xuXHRcdFx0XHRcdFx0b3RoZXJEYXRhUG9pbnRPZmZzZXQgPSAtdGVtcE9mZnNldDtcblx0XHRcdFx0XHRcdC8vdG90YWxSZWN1cnNpb25zKys7XG5cdFx0XHRcdFx0XHRvdGhlckRhdGFQb2ludEFjdHVhbE9mZnNldCA9IHJlUG9zaXRpb25MYWJlbHMob3RoZXJEYXRhUG9pbnRJbmRleCwgb3RoZXJEYXRhUG9pbnRPZmZzZXQsIHJlY3Vyc2lvbkNvdW50ICsgMSk7XG5cblx0XHRcdFx0XHRcdC8vaWYgKGRhdGFQb2ludEluZGV4IDwgNClcblx0XHRcdFx0XHRcdC8vXHRjdXN0b21Qcm9tcHQoZGF0YVBvaW50SW5kZXggKyBcIjsgXCIgKyBcIm9mZnNldDogXCIgKyBvdGhlckRhdGFQb2ludE9mZnNldCk7XG5cblxuXHRcdFx0XHRcdFx0aWYgKCtvdGhlckRhdGFQb2ludEFjdHVhbE9mZnNldC50b0ZpeGVkKHByZWNpc2lvbikgPiArb3RoZXJEYXRhUG9pbnRPZmZzZXQudG9GaXhlZChwcmVjaXNpb24pKSB7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGRpc3RhbmNlRnJvbU90aGVyTGFiZWwgPiBtaW5EaXN0YW5jZUJldHdlZW5MYWJlbHMpXG5cdFx0XHRcdFx0XHRcdFx0YWN0dWFsT2Zmc2V0ID0gLShkaXN0YW5jZUZyb21PdGhlckxhYmVsIC0gbWluRGlzdGFuY2VCZXR3ZWVuTGFiZWxzKTtcblx0XHRcdFx0XHRcdFx0XHQvL2Vsc2Vcblx0XHRcdFx0XHRcdFx0XHQvL1x0YWN0dWFsT2Zmc2V0ID0gMDtcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdGFjdHVhbE9mZnNldCA9IC0odGVtcE9mZnNldCAtIChvdGhlckRhdGFQb2ludEFjdHVhbE9mZnNldCAtIG90aGVyRGF0YVBvaW50T2Zmc2V0KSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vaWYgKGRhdGFQb2ludEluZGV4IDwgNClcblx0XHRcdFx0XHRcdC8vXHRjdXN0b21Qcm9tcHQoXCJhY3R1YWw6IFwiICsgYWN0dWFsT2Zmc2V0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKHZhbGlkT2Zmc2V0ID4gMCkge1xuXG5cdFx0XHRcdG90aGVyRGF0YVBvaW50SW5kZXggPSBkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID09PSBcInJpZ2h0XCIgPyBuZXh0RGF0YVBvaW50SW5kZXggOiBwcmV2RGF0YVBvaW50SW5kZXg7XG5cblx0XHRcdFx0YWN0dWFsT2Zmc2V0ID0gdmFsaWRPZmZzZXQ7XG5cblx0XHRcdFx0aWYgKG90aGVyRGF0YVBvaW50SW5kZXggIT09IG51bGwpIHtcblxuXHRcdFx0XHRcdHZhciB0ZW1wT2Zmc2V0ID0gdmFsaWRPZmZzZXQ7XG5cblx0XHRcdFx0XHR2YXIgZGlzdGFuY2VGcm9tT3RoZXJMYWJlbCA9IChkYXRhUG9pbnRFT3Nbb3RoZXJEYXRhUG9pbnRJbmRleF0uaW5kZXhMYWJlbFRleHRCbG9jay55IC0gZGF0YVBvaW50RU9zW290aGVyRGF0YVBvaW50SW5kZXhdLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMikgLSAoZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55ICsgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyKTtcblxuXHRcdFx0XHRcdGlmIChkaXN0YW5jZUZyb21PdGhlckxhYmVsIC0gdGVtcE9mZnNldCA8IG1pbkRpc3RhbmNlQmV0d2VlbkxhYmVscykge1xuXHRcdFx0XHRcdFx0b3RoZXJEYXRhUG9pbnRPZmZzZXQgPSB0ZW1wT2Zmc2V0O1xuXHRcdFx0XHRcdFx0Ly90b3RhbFJlY3Vyc2lvbnMrKztcblx0XHRcdFx0XHRcdG90aGVyRGF0YVBvaW50QWN0dWFsT2Zmc2V0ID0gcmVQb3NpdGlvbkxhYmVscyhvdGhlckRhdGFQb2ludEluZGV4LCBvdGhlckRhdGFQb2ludE9mZnNldCwgcmVjdXJzaW9uQ291bnQgKyAxKTtcblxuXHRcdFx0XHRcdFx0aWYgKCtvdGhlckRhdGFQb2ludEFjdHVhbE9mZnNldC50b0ZpeGVkKHByZWNpc2lvbikgPCArb3RoZXJEYXRhUG9pbnRPZmZzZXQudG9GaXhlZChwcmVjaXNpb24pKSB7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGRpc3RhbmNlRnJvbU90aGVyTGFiZWwgPiBtaW5EaXN0YW5jZUJldHdlZW5MYWJlbHMpXG5cdFx0XHRcdFx0XHRcdFx0YWN0dWFsT2Zmc2V0ID0gZGlzdGFuY2VGcm9tT3RoZXJMYWJlbCAtIG1pbkRpc3RhbmNlQmV0d2VlbkxhYmVscztcblx0XHRcdFx0XHRcdFx0XHQvL2Vsc2Vcblx0XHRcdFx0XHRcdFx0XHQvL1x0YWN0dWFsT2Zmc2V0ID0gMDtcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdGFjdHVhbE9mZnNldCA9IHRlbXBPZmZzZXQgLSAob3RoZXJEYXRhUG9pbnRPZmZzZXQgLSBvdGhlckRhdGFQb2ludEFjdHVhbE9mZnNldCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL2lmICghKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSArIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMiArIGFjdHVhbE9mZnNldCA8IGxhYmVsWU1heCkpIHtcblx0XHRcdFx0Ly9cdGlmIChkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgKyBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIgPCBsYWJlbFlNYXgpIHtcblx0XHRcdFx0Ly9cdFx0YWN0dWFsT2Zmc2V0ID0gbGFiZWxZTWF4IC0gKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSArIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMik7XG5cdFx0XHRcdC8vXHR9XG5cdFx0XHRcdC8vXHRlbHNlIHtcblx0XHRcdFx0Ly9cdFx0YWN0dWFsT2Zmc2V0ID0gMDtcblx0XHRcdFx0Ly9cdH1cblx0XHRcdFx0Ly99XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKGFjdHVhbE9mZnNldCkge1xuXG5cdFx0XHRcdHZhciBuZXdMYWJlbFkgPSBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgKyBhY3R1YWxPZmZzZXQ7XG5cblxuXG5cblx0XHRcdFx0dmFyIG5ld0xhYmVsWCA9IDA7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgPT09IFwicmlnaHRcIikge1xuXHRcdFx0XHRcdG5ld0xhYmVsWCA9IGNlbnRlci54ICsgTWF0aC5zcXJ0KE1hdGgucG93KGluZGV4TGFiZWxSYWRpdXMsIDIpIC0gTWF0aC5wb3cobmV3TGFiZWxZIC0gY2VudGVyLnksIDIpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0bmV3TGFiZWxYID0gY2VudGVyLnggLSBNYXRoLnNxcnQoTWF0aC5wb3coaW5kZXhMYWJlbFJhZGl1cywgMikgLSBNYXRoLnBvdyhuZXdMYWJlbFkgLSBjZW50ZXIueSwgMikpO1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRFTy5taWRBbmdsZSA+IChNYXRoLlBJIC8gMikgLSBwb2xlQW5nbHVsYXJEaXN0YW5jZSAmJiBkYXRhUG9pbnRFTy5taWRBbmdsZSA8IChNYXRoLlBJIC8gMikgKyBwb2xlQW5nbHVsYXJEaXN0YW5jZSkge1xuXG5cdFx0XHRcdFx0dmFyIHByZXZEUEluZGV4ID0gKGRhdGFQb2ludEluZGV4IC0gMSArIGRhdGFQb2ludEVPcy5sZW5ndGgpICUgZGF0YVBvaW50RU9zLmxlbmd0aDtcblx0XHRcdFx0XHR2YXIgcHJldkRQID0gZGF0YVBvaW50RU9zW3ByZXZEUEluZGV4XTtcblx0XHRcdFx0XHR2YXIgbmV4dERQID0gZGF0YVBvaW50RU9zWyhkYXRhUG9pbnRJbmRleCArIDEgKyBkYXRhUG9pbnRFT3MubGVuZ3RoKSAlIGRhdGFQb2ludEVPcy5sZW5ndGhdO1xuXG5cdFx0XHRcdFx0aWYgKGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgPT09IFwibGVmdFwiICYmIHByZXZEUC5oZW1pc3BoZXJlID09PSBcInJpZ2h0XCIgJiYgbmV3TGFiZWxYID4gcHJldkRQLmluZGV4TGFiZWxUZXh0QmxvY2sueCkge1xuXHRcdFx0XHRcdFx0bmV3TGFiZWxYID0gcHJldkRQLmluZGV4TGFiZWxUZXh0QmxvY2sueCAtIDE1O1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA9PT0gXCJyaWdodFwiICYmIG5leHREUC5oZW1pc3BoZXJlID09PSBcImxlZnRcIiAmJiBuZXdMYWJlbFggPCBuZXh0RFAuaW5kZXhMYWJlbFRleHRCbG9jay54KSB7XG5cdFx0XHRcdFx0XHRuZXdMYWJlbFggPSBuZXh0RFAuaW5kZXhMYWJlbFRleHRCbG9jay54ICsgMTU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGRhdGFQb2ludEVPLm1pZEFuZ2xlID4gKDMgKiBNYXRoLlBJIC8gMikgLSBwb2xlQW5nbHVsYXJEaXN0YW5jZSAmJiBkYXRhUG9pbnRFTy5taWRBbmdsZSA8ICgzICogTWF0aC5QSSAvIDIpICsgcG9sZUFuZ2x1bGFyRGlzdGFuY2UpIHtcblxuXHRcdFx0XHRcdHZhciBwcmV2RFBJbmRleCA9IChkYXRhUG9pbnRJbmRleCAtIDEgKyBkYXRhUG9pbnRFT3MubGVuZ3RoKSAlIGRhdGFQb2ludEVPcy5sZW5ndGg7XG5cdFx0XHRcdFx0dmFyIHByZXZEUCA9IGRhdGFQb2ludEVPc1twcmV2RFBJbmRleF07XG5cdFx0XHRcdFx0dmFyIG5leHREUCA9IGRhdGFQb2ludEVPc1soZGF0YVBvaW50SW5kZXggKyAxICsgZGF0YVBvaW50RU9zLmxlbmd0aCkgJSBkYXRhUG9pbnRFT3MubGVuZ3RoXTtcblxuXHRcdFx0XHRcdGlmIChkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID09PSBcInJpZ2h0XCIgJiYgcHJldkRQLmhlbWlzcGhlcmUgPT09IFwibGVmdFwiICYmIG5ld0xhYmVsWCA8IHByZXZEUC5pbmRleExhYmVsVGV4dEJsb2NrLngpIHtcblx0XHRcdFx0XHRcdG5ld0xhYmVsWCA9IHByZXZEUC5pbmRleExhYmVsVGV4dEJsb2NrLnggKyAxNTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgPT09IFwibGVmdFwiICYmIG5leHREUC5oZW1pc3BoZXJlID09PSBcInJpZ2h0XCIgJiYgbmV3TGFiZWxYID4gbmV4dERQLmluZGV4TGFiZWxUZXh0QmxvY2sueCkge1xuXHRcdFx0XHRcdFx0bmV3TGFiZWxYID0gbmV4dERQLmluZGV4TGFiZWxUZXh0QmxvY2sueCAtIDE1O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vaWYgKGFjdHVhbE9mZnNldCA8IDAgJiYgZGF0YVBvaW50SW5kZXggPCA0KVxuXHRcdFx0XHQvL1x0Y3VzdG9tUHJvbXB0KGFjdHVhbE9mZnNldC50b0ZpeGVkKDIpICsgXCI7IFwiICsgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55LnRvRml4ZWQoMikgKyBcIjsgXCIgKyBuZXdMYWJlbFkudG9GaXhlZCgyKSk7XG5cblx0XHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55ID0gbmV3TGFiZWxZO1xuXG5cdFx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueCA9IG5ld0xhYmVsWDtcblxuXHRcdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsQW5nbGUgPSBNYXRoLmF0YW4yKChkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgLSBjZW50ZXIueSksIChkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnggLSBjZW50ZXIueCkpO1xuXG5cdFx0XHR9XG5cblxuXHRcdH1cblxuXHRcdHJldHVybiBhY3R1YWxPZmZzZXQ7XG5cdH1cblxuXG5cdGZ1bmN0aW9uIHBvc2l0aW9uTGFiZWxzKCkge1xuXHRcdHZhciBjdHggPSBfdGhpcy5wbG90QXJlYS5jdHg7XG5cblx0XHRjdHguZmlsbFN0eWxlID0gXCJncmV5XCI7XG5cdFx0Y3R4LnN0cm9rZVN0eWxlID0gXCJncmV5XCI7XG5cdFx0dmFyIGZvbnRTaXplID0gMTY7XG5cdFx0Y3R4LmZvbnQgPSBmb250U2l6ZSArIFwicHggQXJpYWxcIjtcblx0XHRjdHgudGV4dEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcblx0XHR2YXIgaSA9IDAsIGogPSAwO1xuXHRcdHZhciBkZWx0YVIgPSAwO1xuXG5cdFx0dmFyIHJlc2l6ZUZsYWcgPSB0cnVlO1xuXG5cdFx0Zm9yIChqID0gMDsgaiA8IDEwICYmIChqIDwgMSB8fCBkZWx0YVIgPiAwKSA7IGorKykge1xuXG5cdFx0XHRpZiAoZGF0YVNlcmllcy5yYWRpdXMgfHwgKCFkYXRhU2VyaWVzLnJhZGl1cyAmJiB0eXBlb2YgZGF0YVNlcmllcy5pbm5lclJhZGl1cyAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YVNlcmllcy5pbm5lclJhZGl1cyAhPT0gbnVsbCAmJiBvdXRlclJhZGl1cyAtIGRlbHRhUiA8PSBpbm5lclJhZGl1cykpXG5cdFx0XHRcdHJlc2l6ZUZsYWcgPSBmYWxzZTtcblxuXHRcdFx0aWYgKHJlc2l6ZUZsYWcpXG5cdFx0XHRvdXRlclJhZGl1cyAtPSBkZWx0YVI7XG5cblx0XHRcdGRlbHRhUiA9IDA7XG5cblx0XHRcdGlmIChkYXRhU2VyaWVzLmluZGV4TGFiZWxQbGFjZW1lbnQgIT09IFwiaW5zaWRlXCIpIHtcblxuXHRcdFx0XHR2YXIgaW5kZXhMYWJlbFJhZGl1cyA9IG91dGVyUmFkaXVzICogaW5kZXhMYWJlbFJhZGl1c1RvUmFkaXVzUmF0aW87XG5cblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgZGF0YVBvaW50RU8gPSBkYXRhUG9pbnRFT3NbaV07XG5cblx0XHRcdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnggPSBjZW50ZXIueCArIGluZGV4TGFiZWxSYWRpdXMgKiBNYXRoLmNvcyhkYXRhUG9pbnRFTy5taWRBbmdsZSk7XG5cdFx0XHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55ID0gY2VudGVyLnkgKyBpbmRleExhYmVsUmFkaXVzICogTWF0aC5zaW4oZGF0YVBvaW50RU8ubWlkQW5nbGUpO1xuXG5cdFx0XHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbEFuZ2xlID0gZGF0YVBvaW50RU8ubWlkQW5nbGU7XG5cdFx0XHRcdFx0ZGF0YVBvaW50RU8ucmFkaXVzID0gb3V0ZXJSYWRpdXM7XG5cdFx0XHRcdFx0ZGF0YVBvaW50RU8ucGVyY2VudElubmVyUmFkaXVzID0gcGVyY2VudElubmVyUmFkaXVzO1xuXHRcdFx0XHRcdC8vZGF0YVBvaW50RU8uaW5kZXhMYWJlbEZvbnRTaXplID0gZGF0YVBvaW50LmluZGV4TGFiZWxGb250U2l6ZSA/IGRhdGFQb2ludC5pbmRleExhYmVsRm9udFNpemUgOiBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb250U2l6ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBjdXJyZW50RGF0YVBvaW50LCBuZXh0RGF0YVBvaW50O1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdFx0dmFyIGRhdGFQb2ludEVPID0gZGF0YVBvaW50RU9zW2ldO1xuXHRcdFx0XHRcdC8vZGF0YVBvaW50RU8ubGFiXG5cdFx0XHRcdFx0Ly9yZXNldEFuaW1hdGlvbkZyYW1lKCk7XG5cdFx0XHRcdFx0Ly9hbmltYXRlKCk7XG5cdFx0XHRcdFx0Ly9yZW5kZXJMYWJlbHMoKTtcblxuXHRcdFx0XHRcdC8vdmFyIHByZXZEYXRhUG9pbnRJbmRleCA9IChpIC0gMSArIGRhdGFQb2ludEVPcy5sZW5ndGgpICUgZGF0YVBvaW50RU9zLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vdmFyIG5leHREYXRhUG9pbnRJbmRleCA9IChpICsgMSArIGRhdGFQb2ludEVPcy5sZW5ndGgpICUgZGF0YVBvaW50RU9zLmxlbmd0aDtcblx0XHRcdFx0XHQvL25leHREYXRhUG9pbnRJbmRleCA9IGRhdGFQb2ludEVPc1tuZXh0RGF0YVBvaW50SW5kZXhdLmhlbWlzcGhlcmUgPT09IGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgJiYgbmV4dERhdGFQb2ludEluZGV4ICE9PSBpID8gbmV4dERhdGFQb2ludEluZGV4IDogbnVsbDtcblxuXHRcdFx0XHRcdHZhciBuZXh0RGF0YVBvaW50SW5kZXggPSBnZXROZXh0TGFiZWxJbmRleChpKTtcblxuXHRcdFx0XHRcdGlmIChuZXh0RGF0YVBvaW50SW5kZXggPT09IG51bGwpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGN1cnJlbnREYXRhUG9pbnQgPSBkYXRhUG9pbnRFT3NbaV07XG5cdFx0XHRcdFx0bmV4dERhdGFQb2ludCA9IGRhdGFQb2ludEVPc1tuZXh0RGF0YVBvaW50SW5kZXhdO1xuXG5cblx0XHRcdFx0XHR2YXIgZGlzdGFuY2VGcm9tTmV4dExhYmVsID0gMDtcblxuXHRcdFx0XHRcdC8vaWYgKGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgPT09IFwicmlnaHRcIilcblx0XHRcdFx0XHQvL1x0ZGlzdGFuY2VGcm9tTmV4dExhYmVsID0gKG5leHREYXRhUG9pbnQuaW5kZXhMYWJlbFRleHRCbG9jay55IC0gbmV4dERhdGFQb2ludC5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIpIC0gKGN1cnJlbnREYXRhUG9pbnQuaW5kZXhMYWJlbFRleHRCbG9jay55ICsgY3VycmVudERhdGFQb2ludC5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIpIC0gbWluRGlzdGFuY2VCZXR3ZWVuTGFiZWxzO1xuXHRcdFx0XHRcdC8vZWxzZVxuXHRcdFx0XHRcdC8vXHRkaXN0YW5jZUZyb21OZXh0TGFiZWwgPSAoY3VycmVudERhdGFQb2ludC5pbmRleExhYmVsVGV4dEJsb2NrLnkgLSBjdXJyZW50RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMikgLSAobmV4dERhdGFQb2ludC5pbmRleExhYmVsVGV4dEJsb2NrLnkgKyBuZXh0RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMikgLSBtaW5EaXN0YW5jZUJldHdlZW5MYWJlbHM7XG5cblx0XHRcdFx0XHRkaXN0YW5jZUZyb21OZXh0TGFiZWwgPSBnZXRWZXJ0aWNhbERpc3RhbmNlQmV0d2VlbkxhYmVscyhjdXJyZW50RGF0YVBvaW50LCBuZXh0RGF0YVBvaW50KSAtIG1pbkRpc3RhbmNlQmV0d2VlbkxhYmVscztcblxuXG5cdFx0XHRcdFx0aWYgKGRpc3RhbmNlRnJvbU5leHRMYWJlbCA8IDApIHtcblxuXHRcdFx0XHRcdFx0dmFyIGRhdGFQb2ludHNBYm92ZSA9IDA7XG5cdFx0XHRcdFx0XHR2YXIgZGF0YVBvaW50c0JlbG93ID0gMDtcblx0XHRcdFx0XHRcdC8vdmFyIGluZGV4TGFiZWxBbmdsZVdoZW5UYW5nZW50ID0gTWF0aC5hY29zKG91dGVyUmFkaXVzIC8gaW5kZXhMYWJlbFJhZGl1cykgLyBNYXRoLlBJICogMTgwO1xuXG5cblx0XHRcdFx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgZGF0YVBvaW50cy5sZW5ndGg7IGsrKykge1xuXG5cdFx0XHRcdFx0XHRcdGlmIChrID09PSBpKVxuXHRcdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0XHRcdC8vaWYgKGRhdGFQb2ludEVPc1trXS5oZW1pc3BoZXJlICE9PSBkYXRhUG9pbnRFTy5oZW1pc3BoZXJlIHx8IE1hdGguYWJzKGRhdGFQb2ludEVPc1trXS5taWRBbmdsZSAtIGRhdGFQb2ludEVPLm1pZEFuZ2xlKSA+IDMwKVxuXHRcdFx0XHRcdFx0XHQvL1x0Y29udGludWU7XG5cdFx0XHRcdFx0XHRcdC8vaWYgKGRhdGFQb2ludEVPc1trXS5oZW1pc3BoZXJlICE9PSBkYXRhUG9pbnRFTy5oZW1pc3BoZXJlIHx8IE1hdGguYWJzKGRhdGFQb2ludEVPc1trXS5sYWJlbEFuZ2xlIC0gZGF0YVBvaW50RU8uaW5kZXhMYWJlbEFuZ2xlKSA+IDMwKVxuXHRcdFx0XHRcdFx0XHQvL1x0Y29udGludWU7XG5cdFx0XHRcdFx0XHRcdC8vaWYgKGRhdGFQb2ludEVPc1trXS5oZW1pc3BoZXJlICE9PSBkYXRhUG9pbnRFTy5oZW1pc3BoZXJlIHx8IE1hdGguYWJzKGRhdGFQb2ludEVPc1trXS5taWRBbmdsZSAtIGRhdGFQb2ludEVPLm1pZEFuZ2xlKSA+IGluZGV4TGFiZWxBbmdsZVdoZW5UYW5nZW50KVxuXHRcdFx0XHRcdFx0XHQvL1x0Y29udGludWU7XG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhUG9pbnRFT3Nba10uaGVtaXNwaGVyZSAhPT0gZGF0YVBvaW50RU8uaGVtaXNwaGVyZSlcblx0XHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoZGF0YVBvaW50RU9zW2tdLmluZGV4TGFiZWxUZXh0QmxvY2sueSA8IGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSlcblx0XHRcdFx0XHRcdFx0XHRkYXRhUG9pbnRzQWJvdmUrKztcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdGRhdGFQb2ludHNCZWxvdysrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvL3ZhciB1cFdhcmRzT2Zmc2V0ID0gKGRpc3RhbmNlRnJvbU5leHRMYWJlbCkgLyBkYXRhUG9pbnRzLmxlbmd0aCAqIChkYXRhUG9pbnRzQmVsb3cpO1xuXHRcdFx0XHRcdFx0dmFyIHVwV2FyZHNPZmZzZXQgPSAoZGlzdGFuY2VGcm9tTmV4dExhYmVsKSAvIChkYXRhUG9pbnRzQWJvdmUgKyBkYXRhUG9pbnRzQmVsb3cgfHwgMSkgKiAoZGF0YVBvaW50c0JlbG93KTtcblx0XHRcdFx0XHRcdHZhciBkb3duV2FyZHNPZmZzZXQgPSAtMSAqIChkaXN0YW5jZUZyb21OZXh0TGFiZWwgLSB1cFdhcmRzT2Zmc2V0KTtcblxuXHRcdFx0XHRcdFx0dmFyIGFjdHVhbFVwd2FyZE9mZnNldCA9IDA7XG5cdFx0XHRcdFx0XHR2YXIgYWN0dWFsRG93bndhcmRPZmZzZXQgPSAwO1xuXG5cdFx0XHRcdFx0XHRpZiAoZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA9PT0gXCJyaWdodFwiKSB7XG5cdFx0XHRcdFx0XHRcdGFjdHVhbFVwd2FyZE9mZnNldCA9IHJlUG9zaXRpb25MYWJlbHMoaSwgdXBXYXJkc09mZnNldCk7XG5cblx0XHRcdFx0XHRcdFx0Ly9pZiAoaSA8IDQgJiYgYWN0dWFsRG93bndhcmRPZmZzZXQgIT09IHVwV2FyZHNPZmZzZXQpXG5cdFx0XHRcdFx0XHRcdC8vXHRjdXN0b21Qcm9tcHQoaSArIFwiOyBcIiArIHVwV2FyZHNPZmZzZXQudG9GaXhlZCgyKSArIFwiOyBcIiArIGFjdHVhbFVwd2FyZE9mZnNldC50b0ZpeGVkKDIpKTtcblxuXG5cdFx0XHRcdFx0XHRcdGRvd25XYXJkc09mZnNldCA9IC0xICogKGRpc3RhbmNlRnJvbU5leHRMYWJlbCAtIGFjdHVhbFVwd2FyZE9mZnNldCk7XG5cblx0XHRcdFx0XHRcdFx0YWN0dWFsRG93bndhcmRPZmZzZXQgPSByZVBvc2l0aW9uTGFiZWxzKG5leHREYXRhUG9pbnRJbmRleCwgZG93bldhcmRzT2Zmc2V0KTtcblxuXHRcdFx0XHRcdFx0XHQvL3dpbmRvdy5hbGVydCh0eXBlb2YgK2Rvd25XYXJkc09mZnNldC50b0ZpeGVkKHByZWNpc2lvbikpO1xuXHRcdFx0XHRcdFx0XHQvL1NldHRpbmcgcHJlY2lzaW9uIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgZG9uJ3QgYmVjb21lIG5vdCBlcXVhbCBiZWNvbWUgb2YgbWlub3IgZGlmZmVyZW5jZXMgLSBsaWtlIGEgZGlmZmVyZW5jZSBvZiAuMDAwMDAxXG5cdFx0XHRcdFx0XHRcdGlmICgrYWN0dWFsRG93bndhcmRPZmZzZXQudG9GaXhlZChwcmVjaXNpb24pIDwgK2Rvd25XYXJkc09mZnNldC50b0ZpeGVkKHByZWNpc2lvbikgJiYgK2FjdHVhbFVwd2FyZE9mZnNldC50b0ZpeGVkKHByZWNpc2lvbikgPD0gK3VwV2FyZHNPZmZzZXQudG9GaXhlZChwcmVjaXNpb24pKVxuXHRcdFx0XHRcdFx0XHRcdHJlUG9zaXRpb25MYWJlbHMoaSwgLShkb3duV2FyZHNPZmZzZXQgLSBhY3R1YWxEb3dud2FyZE9mZnNldCkpO1xuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhY3R1YWxVcHdhcmRPZmZzZXQgPSByZVBvc2l0aW9uTGFiZWxzKG5leHREYXRhUG9pbnRJbmRleCwgdXBXYXJkc09mZnNldCk7XG5cblx0XHRcdFx0XHRcdFx0ZG93bldhcmRzT2Zmc2V0ID0gLTEgKiAoZGlzdGFuY2VGcm9tTmV4dExhYmVsIC0gYWN0dWFsVXB3YXJkT2Zmc2V0KTtcblxuXHRcdFx0XHRcdFx0XHRhY3R1YWxEb3dud2FyZE9mZnNldCA9IHJlUG9zaXRpb25MYWJlbHMoaSwgZG93bldhcmRzT2Zmc2V0KTtcblxuXHRcdFx0XHRcdFx0XHQvL1NldHRpbmcgcHJlY2lzaW9uIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgZG9uJ3QgYmVjb21lIG5vdCBlcXVhbCBiZWNvbWUgb2YgbWlub3IgZGlmZmVyZW5jZXMgLSBsaWtlIGEgZGlmZmVyZW5jZSBvZiAuMDAwMDAxXG5cdFx0XHRcdFx0XHRcdGlmICgrYWN0dWFsRG93bndhcmRPZmZzZXQudG9GaXhlZChwcmVjaXNpb24pIDwgK2Rvd25XYXJkc09mZnNldC50b0ZpeGVkKHByZWNpc2lvbikgJiYgK2FjdHVhbFVwd2FyZE9mZnNldC50b0ZpeGVkKHByZWNpc2lvbikgPD0gK3VwV2FyZHNPZmZzZXQudG9GaXhlZChwcmVjaXNpb24pKVxuXHRcdFx0XHRcdFx0XHRcdHJlUG9zaXRpb25MYWJlbHMobmV4dERhdGFQb2ludEluZGV4LCAtKGRvd25XYXJkc09mZnNldCAtIGFjdHVhbERvd253YXJkT2Zmc2V0KSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cblx0XHRcdFx0XHQvL3Jlc2V0QW5pbWF0aW9uRnJhbWUoKTtcblx0XHRcdFx0XHQvL2FuaW1hdGUoKTtcblx0XHRcdFx0XHQvL3JlbmRlckxhYmVscygpO1xuXHRcdFx0XHRcdC8vd2luZG93LmFsZXJ0KFwibmV4dD8/XCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdFx0dmFyIGRhdGFQb2ludEVPID0gZGF0YVBvaW50RU9zW2ldO1xuXHRcdFx0XHRcdGluZGV4TGFiZWxSYWRpdXMgPSBkYXRhU2VyaWVzLnR5cGUgPT09IFwicGllXCIgPyBvdXRlclJhZGl1cyAqIC43IDogb3V0ZXJSYWRpdXMgKiAuODtcblxuXG5cdFx0XHRcdFx0dmFyIGR4ID0gY2VudGVyLnggKyBpbmRleExhYmVsUmFkaXVzICogKE1hdGguY29zKChkYXRhUG9pbnRFTy5taWRBbmdsZSkpKTtcblx0XHRcdFx0XHR2YXIgZHkgPSBjZW50ZXIueSArIGluZGV4TGFiZWxSYWRpdXMgKiAoTWF0aC5zaW4oKGRhdGFQb2ludEVPLm1pZEFuZ2xlKSkpO1xuXG5cdFx0XHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay54ID0gZHg7XG5cdFx0XHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55ID0gZHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVzaXplIFBpZSBiYXNlZCBvbiB0aGUgbGFiZWwgbGVuZ3RoLlxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRFTyA9IGRhdGFQb2ludEVPc1tpXTtcblxuXHRcdFx0XHR2YXIgc2l6ZSA9IGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2subWVhc3VyZVRleHQoKTtcblx0XHRcdFx0Ly8gVG8gbWFrZSBzdXJlIHRoYXQgbnVsbCB0ZXh0IG9yIGVtcHR5IHN0cmluZ3MgZG9uJ3QgYWZmZWN0IHRoZSByYWRpdXMuIFJlcXVpcmVkIHdoZW4gdXNlciBpcyBub3Qgc2hvd2luZyBhbnkgbGFiZWxzXG5cdFx0XHRcdGlmIChzaXplLmhlaWdodCA9PT0gMCB8fCBzaXplLndpZHRoID09PSAwKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHZhciB4T3ZlcmZsb3cgPSAwO1xuXHRcdFx0XHR2YXIgeGRyID0gMDtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA9PT0gXCJyaWdodFwiKSB7XG5cdFx0XHRcdFx0eE92ZXJmbG93ID0gcGxvdEFyZWEueDIgLSAoZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay54ICsgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay53aWR0aCArIGluZGV4TGFiZWxMaW5lRWRnZUxlbmd0aCk7XG5cdFx0XHRcdFx0eE92ZXJmbG93ICo9IC0xO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhPdmVyZmxvdyA9IHBsb3RBcmVhLngxIC0gKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueCAtIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sud2lkdGggLSBpbmRleExhYmVsTGluZUVkZ2VMZW5ndGgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh4T3ZlcmZsb3cgPiAwKSB7XG5cdFx0XHRcdFx0aWYgKCFyZXNpemVGbGFnICYmIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0KSB7XG5cdFx0XHRcdFx0XHR2YXIgbmV3SW5kZXhMYWJlbE1heFdpZHRoID0gZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA9PT0gXCJyaWdodFwiID8gcGxvdEFyZWEueDIgLSBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnggOiBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnggLSBwbG90QXJlYS54MTtcblx0XHRcdFx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2subWF4V2lkdGggKiAuMyA+IG5ld0luZGV4TGFiZWxNYXhXaWR0aCA/IGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0ID0gXCJcIiA6IGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2subWF4V2lkdGggPSBuZXdJbmRleExhYmVsTWF4V2lkdGggKiAuODU7XG5cdFx0XHRcdFx0XHRpZiAoZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5tYXhXaWR0aCAqIC4zIDwgbmV3SW5kZXhMYWJlbE1heFdpZHRoKSBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnggLT0gZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA9PT0gXCJyaWdodFwiID8gMiA6IC0yO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoTWF0aC5hYnMoZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55IC0gZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyIC0gY2VudGVyLnkpIDwgb3V0ZXJSYWRpdXNcblx0XHRcdFx0XHRcdHx8IE1hdGguYWJzKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSArIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMiAtIGNlbnRlci55KSA8IG91dGVyUmFkaXVzKSB7XG5cblx0XHRcdFx0XHRcdHhkciA9IHhPdmVyZmxvdyAvIE1hdGguYWJzKE1hdGguY29zKGRhdGFQb2ludEVPLmluZGV4TGFiZWxBbmdsZSkpO1xuXG5cdFx0XHRcdFx0XHRpZiAoeGRyID4gOSlcblx0XHRcdFx0XHRcdFx0eGRyID0geGRyICogLjM7XG5cblx0XHRcdFx0XHRcdGlmICh4ZHIgPiBkZWx0YVIpXG5cdFx0XHRcdFx0XHRcdGRlbHRhUiA9IHhkcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgeU92ZXJmbG93ID0gMDtcblx0XHRcdFx0dmFyIHlkciA9IDA7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludEVPLmluZGV4TGFiZWxBbmdsZSA+IDAgJiYgZGF0YVBvaW50RU8uaW5kZXhMYWJlbEFuZ2xlIDwgTWF0aC5QSSkge1xuXHRcdFx0XHRcdHlPdmVyZmxvdyA9IHBsb3RBcmVhLnkyIC0gKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSArIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMiArIDUpO1xuXHRcdFx0XHRcdHlPdmVyZmxvdyAqPSAtMTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR5T3ZlcmZsb3cgPSBwbG90QXJlYS55MSAtIChkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgLSBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIgLSA1KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh5T3ZlcmZsb3cgPiAwKSB7XG5cdFx0XHRcdFx0aWYgKCFyZXNpemVGbGFnICYmIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0KSB7XG5cdFx0XHRcdFx0XHR2YXIgcG9zaXRpb25NdWx0aXBsaWVyID0gZGF0YVBvaW50RU8uaW5kZXhMYWJlbEFuZ2xlID4gMCAmJiBkYXRhUG9pbnRFTy5pbmRleExhYmVsQW5nbGUgPCBNYXRoLlBJID8gLTEgOiAxO1xuXHRcdFx0XHRcdFx0aWYgKHJlUG9zaXRpb25MYWJlbHMoaSwgeU92ZXJmbG93ICogcG9zaXRpb25NdWx0aXBsaWVyKSA9PT0gMClcblx0XHRcdFx0XHRcdFx0cmVQb3NpdGlvbkxhYmVscyhpLCAyICogcG9zaXRpb25NdWx0aXBsaWVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKE1hdGguYWJzKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueCAtIGNlbnRlci54KSA8IG91dGVyUmFkaXVzKSB7XG5cblx0XHRcdFx0XHRcdHlkciA9IHlPdmVyZmxvdyAvIE1hdGguYWJzKE1hdGguc2luKGRhdGFQb2ludEVPLmluZGV4TGFiZWxBbmdsZSkpO1xuXG5cdFx0XHRcdFx0XHRpZiAoeWRyID4gOSlcblx0XHRcdFx0XHRcdFx0eWRyID0geWRyICogLjM7XG5cblx0XHRcdFx0XHRcdGlmICh5ZHIgPiBkZWx0YVIpXG5cdFx0XHRcdFx0XHRcdGRlbHRhUiA9IHlkcjtcblxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIHJlbW92ZUxhYmVsc0ZvclNtYWxsU2VnbWVudHModG90YWxPdmVybGFwLCBzdGFydEluZGV4LCBlbmRJbmRleCkge1xuXG5cdFx0XHRcdHZhciBkcEVPcyA9IFtdO1xuXHRcdFx0XHR2YXIgdG90YWxSZW1vdmVkTGFiZWxIZWlnaHQgPSAwO1xuXG5cdFx0XHRcdGZvciAodmFyIGkgPSBzdGFydEluZGV4OyB0cnVlOyBpID0gKGkgKyAxICsgZGF0YVBvaW50cy5sZW5ndGgpICUgZGF0YVBvaW50cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRkcEVPcy5wdXNoKGRhdGFQb2ludEVPc1tpXSk7XG5cblx0XHRcdFx0XHRpZiAoaSA9PT0gZW5kSW5kZXgpXG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRwRU9zLnNvcnQoZnVuY3Rpb24gKGVudHJ5MSwgZW50cnkyKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVudHJ5MS55IC0gZW50cnkyLnk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBkcEVPcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBkcEVPID0gZHBFT3NbaV07XG5cblx0XHRcdFx0XHRpZiAodG90YWxSZW1vdmVkTGFiZWxIZWlnaHQgPCB0b3RhbE92ZXJsYXAgKiAuNykge1xuXHRcdFx0XHRcdFx0dG90YWxSZW1vdmVkTGFiZWxIZWlnaHQgKz0gZHBFTy5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodDtcblx0XHRcdFx0XHRcdGRwRU8uaW5kZXhMYWJlbFRleHRCbG9jay50ZXh0ID0gXCJcIjtcblx0XHRcdFx0XHRcdGRwRU8uaW5kZXhMYWJlbFRleHQgPSBcIlwiO1xuXHRcdFx0XHRcdFx0ZHBFTy5pbmRleExhYmVsVGV4dEJsb2NrLm1lYXN1cmVUZXh0KCk7XG5cdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdC8vcmVzZXRBbmltYXRpb25GcmFtZSgxKTtcblx0XHRcdC8vYW5pbWF0ZSgpO1xuXHRcdFx0Ly93aW5kb3cuYWxlcnQoXCJuZXh0Pz9cIik7XG5cdFx0XHRmdW5jdGlvbiBza2lwTGFiZWxzKCkge1xuXHRcdFx0dmFyIG92ZXJsYXBTdGFydEluZGV4ID0gLTE7XG5cdFx0XHR2YXIgb3ZlcmxhcEVuZEluZGV4ID0gLTE7XG5cdFx0XHR2YXIgdG90YWxPdmVybGFwID0gMDtcblx0XHRcdFx0dmFyIHJlbW92ZUxhYmVscyA9IGZhbHNlO1xuXG5cdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IGRhdGFQb2ludHMubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHRyZW1vdmVMYWJlbHMgPSBmYWxzZTtcblx0XHRcdFx0Y3VycmVudERhdGFQb2ludCA9IGRhdGFQb2ludEVPc1trXTtcblxuXHRcdFx0XHRpZiAoIWN1cnJlbnREYXRhUG9pbnQuaW5kZXhMYWJlbFRleHQpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0dmFyIG5leHRMYWJlbEluZGV4ID0gZ2V0TmV4dExhYmVsSW5kZXgoayk7XG5cdFx0XHRcdGlmIChuZXh0TGFiZWxJbmRleCA9PT0gbnVsbClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR2YXIgbmV4dERhdGFQb2ludCA9IGRhdGFQb2ludEVPc1tuZXh0TGFiZWxJbmRleF07XG5cblx0XHRcdFx0ZGlzdGFuY2VGcm9tTmV4dExhYmVsID0gMDtcblxuXHRcdFx0XHQvL2lmIChuZXh0RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2sueSA+IGN1cnJlbnREYXRhUG9pbnQuaW5kZXhMYWJlbFRleHRCbG9jay55KVxuXHRcdFx0XHQvL1x0ZGlzdGFuY2VGcm9tTmV4dExhYmVsID0gKG5leHREYXRhUG9pbnQuaW5kZXhMYWJlbFRleHRCbG9jay55IC0gKG5leHREYXRhUG9pbnQuaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyKSkgLSAoY3VycmVudERhdGFQb2ludC5pbmRleExhYmVsVGV4dEJsb2NrLnkgKyAoY3VycmVudERhdGFQb2ludC5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIpKTtcblx0XHRcdFx0Ly9lbHNlXG5cdFx0XHRcdC8vXHRkaXN0YW5jZUZyb21OZXh0TGFiZWwgPSAoY3VycmVudERhdGFQb2ludC5pbmRleExhYmVsVGV4dEJsb2NrLnkgLSAoY3VycmVudERhdGFQb2ludC5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIpKSAtIChuZXh0RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2sueSArIChuZXh0RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMikpO1xuXG5cdFx0XHRcdGRpc3RhbmNlRnJvbU5leHRMYWJlbCA9IGdldFZlcnRpY2FsRGlzdGFuY2VCZXR3ZWVuTGFiZWxzKGN1cnJlbnREYXRhUG9pbnQsIG5leHREYXRhUG9pbnQpO1xuXG5cdFx0XHRcdGlmIChkaXN0YW5jZUZyb21OZXh0TGFiZWwgPCAwICYmIGFyZURhdGFQb2ludHNUb29DbG9zZShjdXJyZW50RGF0YVBvaW50LCBuZXh0RGF0YVBvaW50KSkge1xuXHRcdFx0XHRcdFx0Ly9pZiAoZGlzdGFuY2VGcm9tTmV4dExhYmVsIDwgMCAmJiBhcmVEYXRhUG9pbnRzVG9vQ2xvc2UoY3VycmVudERhdGFQb2ludCwgbmV4dERhdGFQb2ludCkgKSB7XG5cdFx0XHRcdFx0aWYgKG92ZXJsYXBTdGFydEluZGV4IDwgMClcblx0XHRcdFx0XHRcdG92ZXJsYXBTdGFydEluZGV4ID0gaztcblxuXHRcdFx0XHRcdFx0aWYgKG5leHRMYWJlbEluZGV4ICE9PSBvdmVybGFwU3RhcnRJbmRleCkge1xuXHRcdFx0XHRcdFx0b3ZlcmxhcEVuZEluZGV4ID0gbmV4dExhYmVsSW5kZXg7XG5cblx0XHRcdFx0XHR0b3RhbE92ZXJsYXAgKz0gLWRpc3RhbmNlRnJvbU5leHRMYWJlbDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGsgJSBNYXRoLm1heChkYXRhUG9pbnRzLmxlbmd0aCAvIDEwLCAzKSA9PT0gMClcblx0XHRcdFx0XHRcdFx0cmVtb3ZlTGFiZWxzID0gdHJ1ZTtcblxuXHRcdFx0XHRcdC8vbmV4dERhdGFQb2ludC5pbmRleExhYmVsVGV4dCA9IFwiXCI7XG5cdFx0XHRcdFx0Ly9uZXh0RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2sudGV4dCA9IFwiXCI7XG5cdFx0XHRcdFx0Ly9uZXh0RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2subWVhc3VyZVRleHQoKTtcblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0cmVtb3ZlTGFiZWxzID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAocmVtb3ZlTGFiZWxzKSB7XG5cblx0XHRcdFx0XHRcdGlmICh0b3RhbE92ZXJsYXAgPiAwICYmIG92ZXJsYXBTdGFydEluZGV4ID49IDAgJiYgb3ZlcmxhcEVuZEluZGV4ID49IDApIHtcblx0XHRcdFx0XHRcdHJlbW92ZUxhYmVsc0ZvclNtYWxsU2VnbWVudHModG90YWxPdmVybGFwLCBvdmVybGFwU3RhcnRJbmRleCwgb3ZlcmxhcEVuZEluZGV4KTtcblxuXHRcdFx0XHRcdFx0b3ZlcmxhcFN0YXJ0SW5kZXggPSAtMTtcblx0XHRcdFx0XHRcdG92ZXJsYXBFbmRJbmRleCA9IC0xO1xuXHRcdFx0XHRcdFx0dG90YWxPdmVybGFwID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRvdGFsT3ZlcmxhcCA+IDApXG5cdFx0XHRcdHJlbW92ZUxhYmVsc0ZvclNtYWxsU2VnbWVudHModG90YWxPdmVybGFwLCBvdmVybGFwU3RhcnRJbmRleCwgb3ZlcmxhcEVuZEluZGV4KTtcblx0XHRcdH1cblxuXHRcdFx0c2tpcExhYmVscygpO1xuXG5cblx0XHR9XG5cdFx0Ly93aW5kb3cuYWxlcnQoXCJuZXh0Pz9cIik7XG5cblxuXHRcdC8vcmVzZXRBbmltYXRpb25GcmFtZShfdGhpcy5hbmltYXRpb25FbmFibGVkICYmIF90aGlzLnJlbmRlckNvdW50ID09PSAwID8gaXNDYW52YXNTdXBwb3J0ZWQgPyA2MCA6IDMwIDogMSk7XG5cdFx0Ly9hbmltYXRlKCk7XG5cblx0XHQvL2NvbnNvbGUubG9nKFwidG90YWxSZWN1cnNpb25zOiBcIiArIHRvdGFsUmVjdXJzaW9ucyk7XG5cdH1cblxuXG5cdHRoaXMucGllRG91Z2hudXRDbGlja0hhbmRsZXIgPSBmdW5jdGlvbiAoZSkge1xuXG5cdFx0aWYgKF90aGlzLmlzQW5pbWF0aW5nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGkgPSBlLmRhdGFQb2ludEluZGV4O1xuXHRcdHZhciBkYXRhUG9pbnQgPSBlLmRhdGFQb2ludDtcblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXM7XG5cblxuXHRcdHZhciBpZCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2ldO1xuXG5cdFx0Ly9kYXRhUG9pbnRFTyA9IF90aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXTtcblxuXHRcdGlmIChkYXRhUG9pbnQuZXhwbG9kZWQpXG5cdFx0XHRkYXRhUG9pbnQuZXhwbG9kZWQgPSBmYWxzZTtcblx0XHRlbHNlXG5cdFx0XHRkYXRhUG9pbnQuZXhwbG9kZWQgPSB0cnVlO1xuXG5cblx0XHQvLyBTbyB0aGF0IGl0IGRvZXNuJ3QgdHJ5IHRvIGV4cGxvZGUgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBzZWdtZW50XG5cdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRfdGhpcy5fYW5pbWF0b3IuYW5pbWF0ZSgwLCBleHBsb2RlRHVyYXRpb24sIGZ1bmN0aW9uIChmcmFjdGlvbkNvbXBsZXRlKSB7XG5cblx0XHRcdFx0ZXhwbG9kZVRvZ2dsZShmcmFjdGlvbkNvbXBsZXRlKTtcblx0XHRcdFx0cmVuZGVyQ2hhcnRFbGVtZW50c0luUGxvdEFyZWEoKTtcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhcIkV4cGxvZGUgU3RhcnRcIik7XG5cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybjtcblx0fVxuXG5cdGluaXRMYWJlbHMoKTtcblxuXHRwb3NpdGlvbkxhYmVscygpO1xuXHRwb3NpdGlvbkxhYmVscygpO1xuXHRwb3NpdGlvbkxhYmVscygpO1xuXHRwb3NpdGlvbkxhYmVscygpO1xuXG5cdHRoaXMuZGlzYWJsZVRvb2xUaXAgPSB0cnVlO1xuXHR0aGlzLl9hbmltYXRvci5hbmltYXRlKDAsIHRoaXMuYW5pbWF0ZWRSZW5kZXIgPyB0aGlzLmFuaW1hdGlvbkR1cmF0aW9uIDogMCwgZnVuY3Rpb24gKGZyYWN0aW9uQ29tcGxldGUpIHtcblxuXHRcdGFuaW1hdGUoZnJhY3Rpb25Db21wbGV0ZSk7XG5cdFx0cmVuZGVyQ2hhcnRFbGVtZW50c0luUGxvdEFyZWEoKTtcblxuXHR9LCBmdW5jdGlvbiAoKSB7XG5cblx0XHRfdGhpcy5kaXNhYmxlVG9vbFRpcCA9IGZhbHNlO1xuXHRcdF90aGlzLl9hbmltYXRvci5hbmltYXRlKDAsIF90aGlzLmFuaW1hdGVkUmVuZGVyID8gZXhwbG9kZUR1cmF0aW9uIDogMCwgZnVuY3Rpb24gKGZyYWN0aW9uQ29tcGxldGUpIHtcblxuXHRcdFx0ZXhwbG9kZVRvZ2dsZShmcmFjdGlvbkNvbXBsZXRlKTtcblx0XHRcdHJlbmRlckNoYXJ0RWxlbWVudHNJblBsb3RBcmVhKCk7XG5cblx0XHR9KTtcblxuXHRcdC8vY29uc29sZS5sb2coXCJBbmltYXRpb24gQ29tcGxldGVcIik7XG5cdH0pO1xuXG5cdGZ1bmN0aW9uIHJlbmRlckNoYXJ0RWxlbWVudHNJblBsb3RBcmVhKCkge1xuXG5cdFx0X3RoaXMucGxvdEFyZWEubGF5b3V0TWFuYWdlci5yZXNldCgpO1xuXG5cdFx0aWYgKF90aGlzLl90aXRsZSkge1xuXHRcdFx0aWYgKF90aGlzLl90aXRsZS5kb2NrSW5zaWRlUGxvdEFyZWEgfHwgKF90aGlzLl90aXRsZS5ob3Jpem9udGFsQWxpZ24gPT09IFwiY2VudGVyXCIgJiYgX3RoaXMuX3RpdGxlLnZlcnRpY2FsQWxpZ24gPT09IFwiY2VudGVyXCIpKVxuXHRcdFx0XHRfdGhpcy5fdGl0bGUucmVuZGVyKCk7XG5cblx0XHR9XG5cblx0XHRpZiAoX3RoaXMuc3VidGl0bGVzKVxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBfdGhpcy5zdWJ0aXRsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIHN1YnRpdGxlID0gX3RoaXMuc3VidGl0bGVzW2ldO1xuXHRcdFx0XHRpZiAoc3VidGl0bGUuZG9ja0luc2lkZVBsb3RBcmVhIHx8IChzdWJ0aXRsZS5ob3Jpem9udGFsQWxpZ24gPT09IFwiY2VudGVyXCIgJiYgc3VidGl0bGUudmVydGljYWxBbGlnbiA9PT0gXCJjZW50ZXJcIikpXG5cdFx0XHRcdFx0c3VidGl0bGUucmVuZGVyKCk7XG5cdFx0XHR9XG5cblx0XHRpZiAoX3RoaXMubGVnZW5kKSB7XG5cdFx0XHRpZiAoX3RoaXMubGVnZW5kLmRvY2tJbnNpZGVQbG90QXJlYSB8fCAoX3RoaXMubGVnZW5kLmhvcml6b250YWxBbGlnbiA9PT0gXCJjZW50ZXJcIiAmJiBfdGhpcy5sZWdlbmQudmVydGljYWxBbGlnbiA9PT0gXCJjZW50ZXJcIikpXG5cdFx0XHRcdF90aGlzLmxlZ2VuZC5yZW5kZXIoKTtcblx0XHR9XG5cdH1cblxuXHQvL3RoaXMuY3R4LnN0cm9rZVJlY3QocGxvdEFyZWEueDEgKyAxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGggLSAyLCBwbG90QXJlYS5oZWlnaHQpO1xufVxuIiwiXG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cdHZhciBjdHggPSBwbG90VW5pdC50YXJnZXRDYW52YXNDdHggfHwgdGhpcy5wbG90QXJlYS5jdHg7XG5cdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgZ2hvc3RDdHggPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHg7XG5cblx0dmFyIGF4aXNYUHJvcHMgPSBwbG90VW5pdC5heGlzWC5saW5lQ29vcmRpbmF0ZXM7XG5cdHZhciBheGlzWVByb3BzID0gcGxvdFVuaXQuYXhpc1kubGluZUNvb3JkaW5hdGVzO1xuXHR2YXIgbWFya2VycyA9IFtdO1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cdGN0eC5zYXZlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdGdob3N0Q3R4LnNhdmUoKTtcblxuXHRjdHguYmVnaW5QYXRoKCk7XG5cdGN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdGN0eC5jbGlwKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0Z2hvc3RDdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRcdGdob3N0Q3R4LmNsaXAoKTtcblx0fVxuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBjbG9zaW5nUGF0aCA9IFtdO1xuXG5cdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblxuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXG5cdFx0dmFyIHNlcmllc0lkID0gZGF0YVNlcmllcy5pZDtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW3Nlcmllc0lkXSA9IHtcblx0XHRcdG9iamVjdFR5cGU6IFwiZGF0YVNlcmllc1wiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleFxuXHRcdH07XG5cblx0XHR2YXIgaGV4Q29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKHNlcmllc0lkKTtcblx0XHRnaG9zdEN0eC5maWxsU3R5bGUgPSBoZXhDb2xvcjtcblx0XHQvL2dob3N0Q3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblx0XHQvL2dob3N0Q3R4LmxpbmVXaWR0aCA9IDIwO1xuXG5cdFx0bWFya2VycyA9IFtdO1xuXG5cdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblx0XHR2YXIgaSA9IDAsIHgsIHkxLCB5Mjtcblx0XHR2YXIgZGF0YVBvaW50WDsgLy9Vc2VkIHNvIHRoYXQgd2hlbiBkYXRhUG9pbnQueCBpcyBhIERhdGVUaW1lIHZhbHVlLCBpdCBkb2Vzbid0IGdldCBjb252ZXJ0ZWQgdG8gbnVtYmVyIGJhY2sgYW5kIGZvcnRoLlxuXG5cdFx0dmFyIHlaZXJvVG9QaXhlbCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoMCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0dmFyIGJhc2VZO1xuXG5cdFx0dmFyIHN0YXJ0UG9pbnQgPSBudWxsO1xuXG5cdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly9jdHguc3Ryb2tlU3R5bGUgPSBcIiM0NTcyQTcgXCI7XG5cdFx0XHR2YXIgY29sb3IgPSBkYXRhU2VyaWVzLl9jb2xvclNldFtpICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcblx0XHRcdC8vY3R4LnN0cm9rZVN0eWxlID0gXCJyZWRcIjtcblx0XHRcdGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuXHRcdFx0Y3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblxuXHRcdFx0aWYgKGN0eC5zZXRMaW5lRGFzaCkge1xuXHRcdFx0XHRjdHguc2V0TGluZURhc2goZ2V0TGluZURhc2hBcnJheShkYXRhU2VyaWVzLmxpbmVEYXNoVHlwZSwgZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzKSk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBwcmV2RGF0YU51bGwgPSB0cnVlO1xuXHRcdFx0Zm9yICg7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lID8gZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKSA6IGRhdGFQb2ludHNbaV0ueDtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ueSA9PT0gbnVsbCB8fCAhZGF0YVBvaW50c1tpXS55Lmxlbmd0aFxuXHRcdFx0XHRcdHx8IHR5cGVvZiAoZGF0YVBvaW50c1tpXS55WzBdKSAhPT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgKGRhdGFQb2ludHNbaV0ueVsxXSkgIT09IFwibnVtYmVyXCIpIHtcblxuXHRcdFx0XHRcdGNsb3NlQXJlYSgpO1xuXG5cdFx0XHRcdFx0cHJldkRhdGFOdWxsID0gdHJ1ZTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHggPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXG5cdFx0XHRcdHkxID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnlbMF0gLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5MiA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55WzFdIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblxuXHRcdFx0XHRpZiAoaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgfHwgcHJldkRhdGFOdWxsKSB7XG5cdFx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdGN0eC5tb3ZlVG8oeCwgeTEpO1xuXHRcdFx0XHRcdHN0YXJ0UG9pbnQgPSB7XG5cdFx0XHRcdFx0XHR4OiB4LCB5OiB5MVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y2xvc2luZ1BhdGggPSBbXTtcblx0XHRcdFx0XHRjbG9zaW5nUGF0aC5wdXNoKHsgeDogeCwgeTogeTIgfSk7XG5cblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubW92ZVRvKHgsIHkxKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IGZhbHNlO1xuXHRcdFx0XHRcdHByZXZEYXRhTnVsbCA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyh4LCB5MSk7XG5cdFx0XHRcdFx0Y2xvc2luZ1BhdGgucHVzaCh7IHg6IHgsIHk6IHkyIH0pO1xuXG5cdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubGluZVRvKHgsIHkxKTtcblxuXHRcdFx0XHRcdGlmIChpICUgMjUwID09IDApIHtcblx0XHRcdFx0XHRcdGNsb3NlQXJlYSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0dmFyIGlkID0gZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbaV07XG5cdFx0XHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdID0ge1xuXHRcdFx0XHRcdGlkOiBpZCwgb2JqZWN0VHlwZTogXCJkYXRhUG9pbnRcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXgsIGRhdGFQb2ludEluZGV4OiBpLCB4MTogeCwgeTE6IHkxLCB5MjogeTJcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvL1JlbmRlciBNYXJrZXJcblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ubWFya2VyU2l6ZSAhPT0gMCkge1xuXHRcdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLm1hcmtlclNpemUgPiAwIHx8IGRhdGFTZXJpZXMubWFya2VyU2l6ZSA+IDApIHtcblx0XHRcdFx0XHRcdHZhciBtYXJrZXJQcm9wcyA9IGRhdGFTZXJpZXMuZ2V0TWFya2VyUHJvcGVydGllcyhpLCB4LCB5MiwgY3R4KTtcblx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaChtYXJrZXJQcm9wcyk7XG5cblx0XHRcdFx0XHRcdC8vaWYgKCFkYXRhU2VyaWVzLm1heFdpZHRoSW5YIHx8IG1hcmtlclByb3BzLnNpemUgPiBkYXRhU2VyaWVzLm1heFdpZHRoSW5YKSB7XG5cdFx0XHRcdFx0XHQvL1x0ZGF0YVNlcmllcy5tYXhXaWR0aEluWCA9IG1hcmtlclByb3BzLnNpemUgLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXHRcdFx0XHRcdFx0Ly99XG5cblx0XHRcdFx0XHRcdHZhciBtYXJrZXJDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdFx0bWFya2Vycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHR4OiB4LCB5OiB5MiwgY3R4OiBnaG9zdEN0eCxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBtYXJrZXJQcm9wcy50eXBlLFxuXHRcdFx0XHRcdFx0XHRcdHNpemU6IG1hcmtlclByb3BzLnNpemUsXG5cdFx0XHRcdFx0XHRcdFx0Y29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlckNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJUaGlja25lc3M6IG1hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzc1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bWFya2VyUHJvcHMgPSBkYXRhU2VyaWVzLmdldE1hcmtlclByb3BlcnRpZXMoaSwgeCwgeTEsIGN0eCk7XG5cdFx0XHRcdFx0XHRtYXJrZXJzLnB1c2gobWFya2VyUHJvcHMpO1xuXG5cblxuXHRcdFx0XHRcdFx0dmFyIG1hcmtlckNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0XHRtYXJrZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHkxLCBjdHg6IGdob3N0Q3R4LFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IG1hcmtlclByb3BzLnR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0c2l6ZTogbWFya2VyUHJvcHMuc2l6ZSxcblx0XHRcdFx0XHRcdFx0XHRjb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQ29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclRoaWNrbmVzczogbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpIHtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcInJhbmdlQXJlYVwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnRzW2ldLFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdGluZGV4S2V5d29yZDogMCxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHkxXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkYXRhUG9pbnRzW2ldLnlbMF0gPD0gZGF0YVBvaW50c1tpXS55WzFdID8gLTEgOiAxLFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJyYW5nZUFyZWFcIixcblx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50c1tpXSxcblx0XHRcdFx0XHRcdGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsXG5cdFx0XHRcdFx0XHRpbmRleEtleXdvcmQ6IDEsXG5cdFx0XHRcdFx0XHRwb2ludDoge1xuXHRcdFx0XHRcdFx0XHR4OiB4LCB5OiB5MlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55WzBdIDw9IGRhdGFQb2ludHNbaV0ueVsxXSA/IDEgOiAtMSxcblx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL2FsZXJ0KFwiaGlcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNsb3NlQXJlYSgpO1xuXG5cdFx0XHQvL3N0YXJ0UG9pbnQgPSB7IHg6IHgsIHk6IHkgfTtcblx0XHRcdFJlbmRlckhlbHBlci5kcmF3TWFya2VycyhtYXJrZXJzKTtcblx0XHR9XG5cdH1cblxuXHRjdHgucmVzdG9yZSgpO1xuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnJlc3RvcmUoKTtcblxuXHRmdW5jdGlvbiBjbG9zZUFyZWEoKSB7XG5cblx0XHRpZiAoIXN0YXJ0UG9pbnQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR2YXIgcG9pbnQgPSBudWxsO1xuXG5cdFx0aWYgKGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcyA+IDApXG5cdFx0XHRjdHguc3Ryb2tlKCk7XG5cblx0XHRmb3IgKHZhciBpID0gY2xvc2luZ1BhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdHBvaW50ID0gY2xvc2luZ1BhdGhbaV07XG5cdFx0XHRjdHgubGluZVRvKHBvaW50LngsIHBvaW50LnkpO1xuXHRcdFx0Z2hvc3RDdHgubGluZVRvKHBvaW50LngsIHBvaW50LnkpO1xuXHRcdH1cblxuXG5cblx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0Ly9jdHgubGluZVRvKHN0YXJ0UG9pbnQueCwgc3RhcnRQb2ludC55KTtcblxuXHRcdGN0eC5nbG9iYWxBbHBoYSA9IGRhdGFTZXJpZXMuZmlsbE9wYWNpdHk7XG5cdFx0Y3R4LmZpbGwoKTtcblx0XHRjdHguZ2xvYmFsQWxwaGEgPSAxO1xuXG5cdFx0Z2hvc3RDdHguZmlsbCgpO1xuXG5cdFx0Ly9pZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHQvL1x0Z2hvc3RDdHgubGluZVRvKHgsIGJhc2VZKTtcblx0XHQvL1x0Z2hvc3RDdHgubGluZVRvKHN0YXJ0UG9pbnQueCwgYmFzZVkpO1xuXHRcdC8vXHRnaG9zdEN0eC5jbG9zZVBhdGgoKTtcblx0XHQvL1x0Z2hvc3RDdHguZmlsbCgpO1xuXHRcdC8vfVxuXG5cdFx0aWYgKGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcyA+IDApIHtcblx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdGN0eC5tb3ZlVG8ocG9pbnQueCwgcG9pbnQueSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGNsb3NpbmdQYXRoLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHBvaW50ID0gY2xvc2luZ1BhdGhbaV07XG5cdFx0XHRcdGN0eC5saW5lVG8ocG9pbnQueCwgcG9pbnQueSk7XG5cdFx0XHR9XG5cblx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHR9XG5cblxuXHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRjdHgubW92ZVRvKHgsIHkxKTtcblx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRnaG9zdEN0eC5tb3ZlVG8oeCwgeTEpO1xuXG5cdFx0c3RhcnRQb2ludCA9IHtcblx0XHRcdHg6IHgsIHk6IHkxXG5cdFx0fTtcblx0XHRjbG9zaW5nUGF0aCA9IFtdO1xuXHRcdGNsb3NpbmdQYXRoLnB1c2goeyB4OiB4LCB5OiB5MiB9KTtcblx0fVxuXG5cdC8vY3R4LmJlZ2luUGF0aCgpO1xuXHQvL3NvdXJjZSBhbmQgZGVzdCB3b3VsZCBiZSBzYW1lIHdoZW4gYW5pbWF0aW9uIGlzIG5vdCBlbmFibGVkXG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci54Q2xpcEFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcubGluZWFyLCBhbmltYXRpb25CYXNlOiAwXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuIiwiXG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cdHZhciBjdHggPSBwbG90VW5pdC50YXJnZXRDYW52YXNDdHggfHwgdGhpcy5wbG90QXJlYS5jdHg7XG5cdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgY29sb3IgPSBudWxsO1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cblx0dmFyIGkgPSAwLCB4MSwgeDIsIHk7XG5cdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgZnJvbSBkYXRhVGltZSBldmVyeXRpbWUgaXQgaXMgdXNlZC5cblxuXHQvL0luIGNhc2Ugb2YgQmFyIENoYXJ0LCB5WmVyb1RvUGl4ZWwgaXMgeCBjby1vcmRpbmF0ZSFcblx0dmFyIHlaZXJvVG9QaXhlbCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoMCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pKSA8PCAwO1xuXG5cdHZhciBtYXhCYXJXaWR0aCA9IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggPyB0aGlzLmRhdGFQb2ludE1heFdpZHRoIDogTWF0aC5taW4oKHRoaXMuaGVpZ2h0ICogLjE1KSwgdGhpcy5wbG90QXJlYS5oZWlnaHQgLyBwbG90VW5pdC5wbG90VHlwZS50b3RhbERhdGFTZXJpZXMgKiAuOSkgPDwgMDtcblx0dmFyIHhNaW5EaWZmID0gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8ubWluRGlmZjtcblx0Ly92YXIgYmFyV2lkdGggPSAoKChwbG90QXJlYS5oZWlnaHQgLyBNYXRoLmFicyhwbG90VW5pdC5heGlzWC52aWV3cG9ydE1heGltdW0gLSBwbG90VW5pdC5heGlzWC52aWV3cG9ydE1pbmltdW0pKSAqIE1hdGguYWJzKHhNaW5EaWZmKSkgLyB0b3RhbERhdGFTZXJpZXMgKiAuOSkgPDwgMDtcblxuXHR2YXIgYmFyV2lkdGggPSAoKChwbG90QXJlYS5oZWlnaHQgLyBNYXRoLmFicyhwbG90VW5pdC5heGlzWC52aWV3cG9ydE1heGltdW0gLSBwbG90VW5pdC5heGlzWC52aWV3cG9ydE1pbmltdW0pKSAqIE1hdGguYWJzKHhNaW5EaWZmKSkgLyBwbG90VW5pdC5wbG90VHlwZS50b3RhbERhdGFTZXJpZXMgKiAuOSkgPDwgMDtcblxuXHRpZiAoYmFyV2lkdGggPiBtYXhCYXJXaWR0aClcblx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoO1xuXHRlbHNlIGlmICh4TWluRGlmZiA9PT0gSW5maW5pdHkpIHtcblx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoIC8gcGxvdFVuaXQucGxvdFR5cGUudG90YWxEYXRhU2VyaWVzICogLjk7XG5cdH0gZWxzZSBpZiAoYmFyV2lkdGggPCAxKVxuXHRcdGJhcldpZHRoID0gMTtcblxuXHRjdHguc2F2ZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHguc2F2ZSgpO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5jbGlwKCk7XG5cdH1cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXHRcdHZhciBpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IHRydWU7XG5cblxuXHRcdC8vZGF0YVNlcmllcy5tYXhXaWR0aEluWCA9IGJhcldpZHRoIC8gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA+IDEgPyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgLSAxIDogcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0KTtcblxuXG5cdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly92YXIgeHkgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPblBsb3RBcmVhKGRhdGFQb2ludHNbMF0ueCwgZGF0YVBvaW50c1swXS55KTtcblxuXHRcdFx0dmFyIGJldmVsRW5hYmxlZCA9IChiYXJXaWR0aCA+IDUpICYmIGRhdGFTZXJpZXMuYmV2ZWxFbmFibGVkID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBcIiM0NTcyQTcgXCI7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0ZGF0YVBvaW50c1tpXS5nZXRUaW1lID8gZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS55ID09PSBudWxsIHx8ICFkYXRhUG9pbnRzW2ldLnkubGVuZ3RoXG5cdFx0XHRcdFx0fHwgdHlwZW9mIChkYXRhUG9pbnRzW2ldLnlbMF0pICE9PSBcIm51bWJlclwiIHx8IHR5cGVvZiAoZGF0YVBvaW50c1tpXS55WzFdKSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHQvL3ggYW5kIHkgYXJlIHBpeGVsIGNvLW9yZGluYXRlcyBvZiBwb2ludCBhbmQgc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoIFggYW5kIFkgdmFsdWVzXG5cdFx0XHRcdHgxID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnlbMF0gLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR4MiA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55WzFdIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblxuXHRcdFx0XHR5ID0gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRYIC0gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblxuXG5cdFx0XHRcdHZhciB5MSA9ICh5IC0gKHBsb3RVbml0LnBsb3RUeXBlLnRvdGFsRGF0YVNlcmllcyAqIGJhcldpZHRoIC8gMikgKyAoKHBsb3RVbml0LnByZXZpb3VzRGF0YVNlcmllc0NvdW50ICsgaikgKiBiYXJXaWR0aCkpIDw8IDA7XG5cdFx0XHRcdHZhciB5MiA9IHkxICsgYmFyV2lkdGggPDwgMDtcblxuXHRcdFx0XHRpZiAoeDEgPiB4Mikge1xuXHRcdFx0XHRcdHZhciB0ZW1wID0geDE7XG5cdFx0XHRcdFx0eDEgPSB4Mjtcblx0XHRcdFx0XHR4MiA9IHRlbXA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL2RyYXdSZWN0KGN0eCwgeDEsIHkxLCBwbG90QXJlYS54MiwgeTIsIFwiI0VFRUVFRVwiLCAwLCBudWxsLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdC8vZHJhd1JlY3QoY3R4LCB4MSwgeTEsIHBsb3RBcmVhLngyLCB5MiwgXCIjQkRDRUQzXCIsIDAsIG51bGwsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuXHRcdFx0XHRjb2xvciA9IGRhdGFQb2ludHNbaV0uY29sb3IgPyBkYXRhUG9pbnRzW2ldLmNvbG9yIDogZGF0YVNlcmllcy5fY29sb3JTZXRbaSAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cdFx0XHRcdC8vY29sb3IgPSBcIiMxQjQ5NjJcIjtcblx0XHRcdFx0ZHJhd1JlY3QoY3R4LCB4MSwgeTEsIHgyLCB5MiwgY29sb3IsIDAsIG51bGwsIGJldmVsRW5hYmxlZCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZGF0YVNlcmllcy5maWxsT3BhY2l0eSk7XG5cblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5MlxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRkcmF3UmVjdCh0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbCB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWwgfHwgZGF0YVBvaW50c1tpXS5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcikge1xuXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwicmFuZ2VCYXJcIixcblx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50c1tpXSxcblx0XHRcdFx0XHRcdGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsXG5cdFx0XHRcdFx0XHRpbmRleEtleXdvcmQ6IDAsXG5cdFx0XHRcdFx0XHRwb2ludDoge1xuXHRcdFx0XHRcdFx0XHR4OiBkYXRhUG9pbnRzW2ldLnlbMV0gPj0gZGF0YVBvaW50c1tpXS55WzBdID8geDEgOiB4MiwgeTogeTEgKyAoeTIgLSB5MSkgLyAyXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkYXRhUG9pbnRzW2ldLnlbMV0gPj0gZGF0YVBvaW50c1tpXS55WzBdID8gLTEgOiAxLFxuXHRcdFx0XHRcdFx0Ym91bmRzOiB7XG5cdFx0XHRcdFx0XHRcdHgxOiBNYXRoLm1pbih4MSwgeDIpLCB5MTogeTEsIHgyOiBNYXRoLm1heCh4MSwgeDIpLCB5MjogeTJcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcInJhbmdlQmFyXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0aW5kZXhLZXl3b3JkOiAxLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogZGF0YVBvaW50c1tpXS55WzFdID49IGRhdGFQb2ludHNbaV0ueVswXSA/IHgyIDogeDEsIHk6IHkxICsgKHkyIC0geTEpIC8gMlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55WzFdID49IGRhdGFQb2ludHNbaV0ueVswXSA/IDEgOiAtMSxcblx0XHRcdFx0XHRcdGJvdW5kczoge1xuXHRcdFx0XHRcdFx0XHR4MTogTWF0aC5taW4oeDEsIHgyKSwgeTE6IHkxLCB4MjogTWF0aC5tYXgoeDEsIHgyKSwgeTI6IHkyXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjdHgucmVzdG9yZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVzdG9yZSgpO1xuXG5cdC8vc291cmNlIGFuZCBkZXN0IHdvdWxkIGJlIHNhbWUgd2hlbiBhbmltYXRpb24gaXMgbm90IGVuYWJsZWRcblx0dmFyIGFuaW1hdGlvbkluZm8gPSB7XG5cdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLmZhZGVJbkFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcuZWFzZUluUXVhZCwgYW5pbWF0aW9uQmFzZTogMFxuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cbiIsIlxuaW1wb3J0IHtpc0NhbnZhc1N1cHBvcnRlZH0gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXHR2YXIgY3R4ID0gcGxvdFVuaXQudGFyZ2V0Q2FudmFzQ3R4IHx8IHRoaXMucGxvdEFyZWEuY3R4O1xuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGNvbG9yID0gbnVsbDtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdHZhciBpID0gMCwgeCwgeTEsIHkyO1xuXHR2YXIgZGF0YVBvaW50WDsgLy9Vc2VkIHNvIHRoYXQgd2hlbiBkYXRhUG9pbnQueCBpcyBhIERhdGVUaW1lIHZhbHVlLCBpdCBkb2Vzbid0IGdldCBjb252ZXJ0ZWQgdG8gbnVtYmVyIGZyb20gZGF0YVRpbWUgZXZlcnl0aW1lIGl0IGlzIHVzZWQuXG5cblx0dmFyIHlaZXJvVG9QaXhlbCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoMCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pKSA8PCAwO1xuXG5cdHZhciBtYXhCYXJXaWR0aCA9IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggPyB0aGlzLmRhdGFQb2ludE1heFdpZHRoIDogKHRoaXMud2lkdGggKiAuMDMpO1xuXHQvL3ZhciBtYXhCYXJXaWR0aCA9ICh0aGlzLndpZHRoICogLjAxNSk7XG5cdHZhciB4TWluRGlmZiA9IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLm1pbkRpZmY7XG5cdC8vdmFyIGJhcldpZHRoID0gKCgocGxvdEFyZWEud2lkdGggLyBNYXRoLmFicyhwbG90VW5pdC5heGlzWC52aWV3cG9ydE1heGltdW0gLSBwbG90VW5pdC5heGlzWC52aWV3cG9ydE1pbmltdW0pKSAqIE1hdGguYWJzKHhNaW5EaWZmKSkgKiAuOSkgPDwgMDtcblx0dmFyIGJhcldpZHRoID0gKCgocGxvdEFyZWEud2lkdGggLyBNYXRoLmFicyhwbG90VW5pdC5heGlzWC52aWV3cG9ydE1heGltdW0gLSBwbG90VW5pdC5heGlzWC52aWV3cG9ydE1pbmltdW0pKSAqIE1hdGguYWJzKHhNaW5EaWZmKSkgLyBwbG90VW5pdC5wbG90VHlwZS50b3RhbERhdGFTZXJpZXMgKiAuOSkgPDwgMDtcblxuXHRpZiAoYmFyV2lkdGggPiBtYXhCYXJXaWR0aClcblx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoO1xuXHRlbHNlIGlmICh4TWluRGlmZiA9PT0gSW5maW5pdHkpIHtcblx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoIC8gcGxvdFVuaXQucGxvdFR5cGUudG90YWxEYXRhU2VyaWVzICogLjk7XG5cdH0gZWxzZSBpZiAoYmFyV2lkdGggPCAxKVxuXHRcdGJhcldpZHRoID0gMTtcblxuXHRjdHguc2F2ZSgpO1xuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnNhdmUoKTtcblxuXHRjdHguYmVnaW5QYXRoKCk7XG5cdGN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdGN0eC5jbGlwKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHguY2xpcCgpO1xuXHR9XG5cdC8vY3R4LmJlZ2luUGF0aCgpO1xuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblxuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblxuXG5cdFx0Ly8gUmVkdWNpbmcgcGl4ZWxQZXJVbml0IGJ5IDEganVzdCB0byBvdmVyY29tZSBhbnkgcHJvYmxlbXMgZHVlIHRvIHJvdW5kaW5nIG9mZiBvZiBwaXhlbHMuXG5cdFx0Ly9kYXRhU2VyaWVzLm1heFdpZHRoSW5YID0gYmFyV2lkdGggLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXG5cdFx0Ly92YXIgb2Zmc2V0WCA9IGJhcldpZHRoICogcGxvdFVuaXQuaW5kZXggPDwgMDtcblxuXG5cdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly92YXIgeHkgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPblBsb3RBcmVhKGRhdGFQb2ludHNbMF0ueCwgZGF0YVBvaW50c1swXS55KTtcblxuXHRcdFx0dmFyIGJldmVsRW5hYmxlZCA9IChiYXJXaWR0aCA+IDUpICYmIGRhdGFTZXJpZXMuYmV2ZWxFbmFibGVkID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdGRhdGFQb2ludHNbaV0uZ2V0VGltZSA/IGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueDtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ueSA9PT0gbnVsbCB8fCAhZGF0YVBvaW50c1tpXS55Lmxlbmd0aFxuXHRcdFx0XHRcdHx8IHR5cGVvZiAoZGF0YVBvaW50c1tpXS55WzBdKSAhPT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgKGRhdGFQb2ludHNbaV0ueVsxXSkgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0eCA9IChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50WCAtIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHkxID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnlbMF0gLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5MiA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55WzFdIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblxuXHRcdFx0XHQvL3ZhciB4MSA9IHggLSBiYXJXaWR0aCAvIDIgPDwgMDtcblx0XHRcdFx0dmFyIHgxID0geCAtIChwbG90VW5pdC5wbG90VHlwZS50b3RhbERhdGFTZXJpZXMgKiBiYXJXaWR0aCAvIDIpICsgKChwbG90VW5pdC5wcmV2aW91c0RhdGFTZXJpZXNDb3VudCArIGopICogYmFyV2lkdGgpIDw8IDA7XG5cdFx0XHRcdHZhciB4MiA9IHgxICsgYmFyV2lkdGggPDwgMDtcblx0XHRcdFx0dmFyIHkxO1xuXHRcdFx0XHR2YXIgeTI7XG5cblxuXHRcdFx0XHRjb2xvciA9IGRhdGFQb2ludHNbaV0uY29sb3IgPyBkYXRhUG9pbnRzW2ldLmNvbG9yIDogZGF0YVNlcmllcy5fY29sb3JTZXRbaSAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cblx0XHRcdFx0aWYgKHkxID4geTIpIHtcblx0XHRcdFx0XHR2YXIgdGVtcCA9IHkxO1xuXHRcdFx0XHRcdHkxID0geTI7XG5cdFx0XHRcdFx0eTIgPSB0ZW1wO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGlkID0gZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbaV07XG5cdFx0XHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdID0ge1xuXHRcdFx0XHRcdGlkOiBpZCwgb2JqZWN0VHlwZTogXCJkYXRhUG9pbnRcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXgsIGRhdGFQb2ludEluZGV4OiBpLCB4MTogeDEsIHkxOiB5MSwgeDI6IHgyLCB5MjogeTJcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvL3ZhciBib3JkZXJUaGlja25lc3MgPSBNYXRoLm1heCgxLCAoYmFyV2lkdGggKiAuMSA8PCAwKSk7XG5cdFx0XHRcdHZhciBib3JkZXJUaGlja25lc3MgPSAwO1xuXG5cdFx0XHRcdGRyYXdSZWN0KGN0eCwgeDEsIHkxLCB4MiwgeTIsIGNvbG9yLCBib3JkZXJUaGlja25lc3MsIGNvbG9yLCBiZXZlbEVuYWJsZWQsIGJldmVsRW5hYmxlZCwgZmFsc2UsIGZhbHNlLCBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5KTtcblx0XHRcdFx0Y29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGlkKTtcblxuXHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0ZHJhd1JlY3QodGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LCB4MSwgeTEsIHgyLCB5MiwgY29sb3IsIDAsIG51bGwsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpIHtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcInJhbmdlQ29sdW1uXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0aW5kZXhLZXl3b3JkOiAwLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeDEgKyAoeDIgLSB4MSkgLyAyLCB5OiBkYXRhUG9pbnRzW2ldLnlbMV0gPj0gZGF0YVBvaW50c1tpXS55WzBdID8geTIgOiB5MVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55WzFdID49IGRhdGFQb2ludHNbaV0ueVswXSA/IC0xIDogMSxcblx0XHRcdFx0XHRcdGJvdW5kczoge1xuXHRcdFx0XHRcdFx0XHR4MTogeDEsIHkxOiBNYXRoLm1pbih5MSwgeTIpLCB4MjogeDIsIHkyOiBNYXRoLm1heCh5MSwgeTIpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJyYW5nZUNvbHVtblwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnRzW2ldLFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdGluZGV4S2V5d29yZDogMSxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IHgxICsgKHgyIC0geDEpIC8gMiwgeTogZGF0YVBvaW50c1tpXS55WzFdID49IGRhdGFQb2ludHNbaV0ueVswXSA/IHkxIDogeTJcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IGRhdGFQb2ludHNbaV0ueVsxXSA+PSBkYXRhUG9pbnRzW2ldLnlbMF0gPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRib3VuZHM6IHtcblx0XHRcdFx0XHRcdFx0eDE6IHgxLCB5MTogTWF0aC5taW4oeTEsIHkyKSwgeDI6IHgyLCB5MjogTWF0aC5tYXgoeTEsIHkyKVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjdHgucmVzdG9yZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVzdG9yZSgpO1xuXG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uSW5mbyA9IHtcblx0XHRzb3VyY2U6IGN0eCwgZGVzdDogdGhpcy5wbG90QXJlYS5jdHgsIGFuaW1hdGlvbkNhbGxiYWNrOiBBbmltYXRpb25IZWxwZXIuZmFkZUluQW5pbWF0aW9uLCBlYXNpbmdGdW5jdGlvbjogQW5pbWF0aW9uSGVscGVyLmVhc2luZy5lYXNlSW5RdWFkLCBhbmltYXRpb25CYXNlOiAwXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuIiwiXG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocGxvdFVuaXQpIHtcblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblx0dmFyIHRvdGFsRGF0YVNlcmllcyA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDtcblxuXHRpZiAodG90YWxEYXRhU2VyaWVzIDw9IDApXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBnaG9zdEN0eCA9IHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eDtcblxuXHR2YXIgYXhpc1hQcm9wcyA9IHBsb3RVbml0LmF4aXNYLmxpbmVDb29yZGluYXRlcztcblx0dmFyIGF4aXNZUHJvcHMgPSBwbG90VW5pdC5heGlzWS5saW5lQ29vcmRpbmF0ZXM7XG5cdHZhciBtYXJrZXJzID0gW107XG5cblx0dmFyIHBsb3RBcmVhID0gdGhpcy5wbG90QXJlYTtcblx0Y3R4LnNhdmUoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0Z2hvc3RDdHguc2F2ZSgpO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRnaG9zdEN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0Z2hvc3RDdHguY2xpcCgpO1xuXHR9XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXG5cdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblxuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXG5cdFx0dmFyIHNlcmllc0lkID0gZGF0YVNlcmllcy5pZDtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW3Nlcmllc0lkXSA9IHtcblx0XHRcdG9iamVjdFR5cGU6IFwiZGF0YVNlcmllc1wiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleFxuXHRcdH07XG5cblx0XHR2YXIgaGV4Q29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKHNlcmllc0lkKTtcblx0XHRnaG9zdEN0eC5maWxsU3R5bGUgPSBoZXhDb2xvcjtcblx0XHQvL2dob3N0Q3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblx0XHQvL2dob3N0Q3R4LmxpbmVXaWR0aCA9IDIwO1xuXG5cdFx0bWFya2VycyA9IFtdO1xuXG5cdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblx0XHR2YXIgaSA9IDAsIHgsIHkxLCB5Mjtcblx0XHR2YXIgZGF0YVBvaW50WDsgLy9Vc2VkIHNvIHRoYXQgd2hlbiBkYXRhUG9pbnQueCBpcyBhIERhdGVUaW1lIHZhbHVlLCBpdCBkb2Vzbid0IGdldCBjb252ZXJ0ZWQgdG8gbnVtYmVyIGJhY2sgYW5kIGZvcnRoLlxuXG5cdFx0dmFyIHlaZXJvVG9QaXhlbCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoMCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0dmFyIGJhc2VZO1xuXG5cdFx0dmFyIHN0YXJ0UG9pbnQgPSBudWxsO1xuXG5cdFx0dmFyIHBpeGVsc1kxID0gW107XG5cdFx0dmFyIHBpeGVsc1kyID0gW107XG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL2N0eC5zdHJva2VTdHlsZSA9IFwiIzQ1NzJBNyBcIjtcblx0XHRcdGNvbG9yID0gZGF0YVNlcmllcy5fY29sb3JTZXRbaSAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cdFx0XHQvL2N0eC5zdHJva2VTdHlsZSA9IFwicmVkXCI7XG5cdFx0XHRjdHguZmlsbFN0eWxlID0gY29sb3I7XG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcblx0XHRcdGN0eC5saW5lV2lkdGggPSBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3M7XG5cblx0XHRcdGlmIChjdHguc2V0TGluZURhc2gpIHtcblx0XHRcdFx0Y3R4LnNldExpbmVEYXNoKGdldExpbmVEYXNoQXJyYXkoZGF0YVNlcmllcy5saW5lRGFzaFR5cGUsIGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcykpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54LmdldFRpbWUgPyBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS55ID09PSBudWxsIHx8ICFkYXRhUG9pbnRzW2ldLnkubGVuZ3RoIHx8IHR5cGVvZiAoZGF0YVBvaW50c1tpXS55WzBdKSAhPT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgKGRhdGFQb2ludHNbaV0ueVsxXSkgIT09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRpZiAoaSA+IDApIHtcblx0XHRcdFx0XHRcdHJlbmRlckJlemllckFyZWEoKTtcblx0XHRcdFx0XHRcdHBpeGVsc1kxID0gW107XG5cdFx0XHRcdFx0XHRwaXhlbHNZMiA9IFtdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHggPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5MSA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55WzBdIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0eTIgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueVsxXSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4LCB5MTogeTEsIHkyOiB5MlxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHBpeGVsc1kxW3BpeGVsc1kxLmxlbmd0aF0gPSB7XG5cdFx0XHRcdFx0eDogeCwgeTogeTFcblx0XHRcdFx0fTtcblx0XHRcdFx0cGl4ZWxzWTJbcGl4ZWxzWTIubGVuZ3RoXSA9IHtcblx0XHRcdFx0XHR4OiB4LCB5OiB5MlxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vUmVuZGVyIE1hcmtlclxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5tYXJrZXJTaXplICE9PSAwKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ubWFya2VyU2l6ZSA+IDAgfHwgZGF0YVNlcmllcy5tYXJrZXJTaXplID4gMCkge1xuXHRcdFx0XHRcdFx0dmFyIG1hcmtlclByb3BzID0gZGF0YVNlcmllcy5nZXRNYXJrZXJQcm9wZXJ0aWVzKGksIHgsIHkxLCBjdHgpO1xuXHRcdFx0XHRcdFx0bWFya2Vycy5wdXNoKG1hcmtlclByb3BzKTtcblxuXHRcdFx0XHRcdFx0Ly9pZiAoIWRhdGFTZXJpZXMubWF4V2lkdGhJblggfHwgbWFya2VyUHJvcHMuc2l6ZSA+IGRhdGFTZXJpZXMubWF4V2lkdGhJblgpIHtcblx0XHRcdFx0XHRcdC8vXHRkYXRhU2VyaWVzLm1heFdpZHRoSW5YID0gbWFya2VyUHJvcHMuc2l6ZSAvIChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgPiAxID8gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0IC0gMSA6IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCk7XG5cdFx0XHRcdFx0XHQvL31cblxuXHRcdFx0XHRcdFx0dmFyIG1hcmtlckNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0XHRtYXJrZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHkxLCBjdHg6IGdob3N0Q3R4LFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IG1hcmtlclByb3BzLnR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0c2l6ZTogbWFya2VyUHJvcHMuc2l6ZSxcblx0XHRcdFx0XHRcdFx0XHRjb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQ29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclRoaWNrbmVzczogbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2YXIgbWFya2VyUHJvcHMgPSBkYXRhU2VyaWVzLmdldE1hcmtlclByb3BlcnRpZXMoaSwgeCwgeTIsIGN0eCk7XG5cdFx0XHRcdFx0XHRtYXJrZXJzLnB1c2gobWFya2VyUHJvcHMpO1xuXG5cdFx0XHRcdFx0XHQvL2lmICghZGF0YVNlcmllcy5tYXhXaWR0aEluWCB8fCBtYXJrZXJQcm9wcy5zaXplID4gZGF0YVNlcmllcy5tYXhXaWR0aEluWCkge1xuXHRcdFx0XHRcdFx0Ly9cdGRhdGFTZXJpZXMubWF4V2lkdGhJblggPSBtYXJrZXJQcm9wcy5zaXplIC8gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA+IDEgPyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgLSAxIDogcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0KTtcblx0XHRcdFx0XHRcdC8vfVxuXG5cdFx0XHRcdFx0XHR2YXIgbWFya2VyQ29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGlkKTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0eDogeCwgeTogeTIsIGN0eDogZ2hvc3RDdHgsXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogbWFya2VyUHJvcHMudHlwZSxcblx0XHRcdFx0XHRcdFx0XHRzaXplOiBtYXJrZXJQcm9wcy5zaXplLFxuXHRcdFx0XHRcdFx0XHRcdGNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJDb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyVGhpY2tuZXNzOiBtYXJrZXJQcm9wcy5ib3JkZXJUaGlja25lc3Ncblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblxuXHRcdFx0XHQvL1JlbmRlciBJbmRleCBMYWJlbHNcblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbCB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWwgfHwgZGF0YVBvaW50c1tpXS5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcikge1xuXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwic3BsaW5lQXJlYVwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnRzW2ldLFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdGluZGV4S2V5d29yZDogMCxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHkxXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkYXRhUG9pbnRzW2ldLnlbMF0gPD0gZGF0YVBvaW50c1tpXS55WzFdID8gLTEgOiAxLFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJzcGxpbmVBcmVhXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0aW5kZXhLZXl3b3JkOiAxLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeCwgeTogeTJcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IGRhdGFQb2ludHNbaV0ueVswXSA8PSBkYXRhUG9pbnRzW2ldLnlbMV0gPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJlbmRlckJlemllckFyZWEoKTtcblxuXHRcdFx0UmVuZGVySGVscGVyLmRyYXdNYXJrZXJzKG1hcmtlcnMpO1xuXHRcdH1cblx0fVxuXG5cdGN0eC5yZXN0b3JlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZXN0b3JlKCk7XG5cblx0ZnVuY3Rpb24gcmVuZGVyQmV6aWVyQXJlYSgpIHtcblx0XHR2YXIgYnAgPSBnZXRCZXppZXJQb2ludHMocGl4ZWxzWTEsIDIpO1xuXG5cdFx0aWYgKGJwLmxlbmd0aCA+IDApIHtcblx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdGN0eC5tb3ZlVG8oYnBbMF0ueCwgYnBbMF0ueSk7XG5cblx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0Z2hvc3RDdHgubW92ZVRvKGJwWzBdLngsIGJwWzBdLnkpO1xuXHRcdFx0fVxuXG5cblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYnAubGVuZ3RoIC0gMzsgaSArPSAzKSB7XG5cblx0XHRcdFx0Y3R4LmJlemllckN1cnZlVG8oYnBbaSArIDFdLngsIGJwW2kgKyAxXS55LCBicFtpICsgMl0ueCwgYnBbaSArIDJdLnksIGJwW2kgKyAzXS54LCBicFtpICsgM10ueSk7XG5cblx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdGdob3N0Q3R4LmJlemllckN1cnZlVG8oYnBbaSArIDFdLngsIGJwW2kgKyAxXS55LCBicFtpICsgMl0ueCwgYnBbaSArIDJdLnksIGJwW2kgKyAzXS54LCBicFtpICsgM10ueSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MgPiAwKVxuXHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cblx0XHRcdGJwID0gZ2V0QmV6aWVyUG9pbnRzKHBpeGVsc1kyLCAyKTtcblxuXHRcdFx0Y3R4LmxpbmVUbyhwaXhlbHNZMltwaXhlbHNZMi5sZW5ndGggLSAxXS54LCBwaXhlbHNZMltwaXhlbHNZMi5sZW5ndGggLSAxXS55KTtcblxuXHRcdFx0Zm9yICh2YXIgaSA9IGJwLmxlbmd0aCAtIDE7IGkgPiAyOyBpIC09IDMpIHtcblxuXHRcdFx0XHRjdHguYmV6aWVyQ3VydmVUbyhicFtpIC0gMV0ueCwgYnBbaSAtIDFdLnksIGJwW2kgLSAyXS54LCBicFtpIC0gMl0ueSwgYnBbaSAtIDNdLngsIGJwW2kgLSAzXS55KTtcblxuXHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0Z2hvc3RDdHguYmV6aWVyQ3VydmVUbyhicFtpIC0gMV0ueCwgYnBbaSAtIDFdLnksIGJwW2kgLSAyXS54LCBicFtpIC0gMl0ueSwgYnBbaSAtIDNdLngsIGJwW2kgLSAzXS55KTtcblx0XHRcdH1cblxuXHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXG5cdFx0XHRjdHguZ2xvYmFsQWxwaGEgPSBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5O1xuXHRcdFx0Y3R4LmZpbGwoKTtcblx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IDE7XG5cblxuXHRcdFx0aWYgKGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcyA+IDApIHtcblx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRjdHgubW92ZVRvKHBpeGVsc1kyW3BpeGVsc1kyLmxlbmd0aCAtIDFdLngsIHBpeGVsc1kyW3BpeGVsc1kyLmxlbmd0aCAtIDFdLnkpO1xuXG5cdFx0XHRcdGZvciAodmFyIGkgPSBicC5sZW5ndGggLSAxOyBpID4gMjsgaSAtPSAzKSB7XG5cblx0XHRcdFx0XHRjdHguYmV6aWVyQ3VydmVUbyhicFtpIC0gMV0ueCwgYnBbaSAtIDFdLnksIGJwW2kgLSAyXS54LCBicFtpIC0gMl0ueSwgYnBbaSAtIDNdLngsIGJwW2kgLSAzXS55KTtcblxuXHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmJlemllckN1cnZlVG8oYnBbaSAtIDFdLngsIGJwW2kgLSAxXS55LCBicFtpIC0gMl0ueCwgYnBbaSAtIDJdLnksIGJwW2kgLSAzXS54LCBicFtpIC0gM10ueSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cblxuXHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdGdob3N0Q3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHRnaG9zdEN0eC5maWxsKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uSW5mbyA9IHtcblx0XHRzb3VyY2U6IGN0eCwgZGVzdDogdGhpcy5wbG90QXJlYS5jdHgsIGFuaW1hdGlvbkNhbGxiYWNrOiBBbmltYXRpb25IZWxwZXIueENsaXBBbmltYXRpb24sIGVhc2luZ0Z1bmN0aW9uOiBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmxpbmVhciwgYW5pbWF0aW9uQmFzZTogMFxuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cbi8vI3JlZ2lvbiBwaWVDaGFydFxuXG52YXIgZHJhd1NlZ21lbnQgPSBmdW5jdGlvbiAoY3R4LCBjZW50ZXIsIHJhZGl1cywgY29sb3IsIHR5cGUsIHRoZXRhMSwgdGhldGEyLCBmaWxsT3BhY2l0eSwgcGVyY2VudElubmVyUmFkaXVzKSB7XG5cblx0aWYgKHR5cGVvZiAoZmlsbE9wYWNpdHkpID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdGZpbGxPcGFjaXR5ID0gMTtcblxuXHQvL0lFOC0gRklYOiBJbiBJRTgtIHNlZ21lbnQgZG9lc24ndCBnZXQgZHJhdyBpZiB0aGV0YTIgaXMgZXF1YWwgdG8gdGhldGExICsgMipQSS5cblx0aWYgKCFpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdHZhciB0aGV0YTJNb2QgPSBOdW1iZXIoKHRoZXRhMiAlICgyICogTWF0aC5QSSkpLnRvRml4ZWQoOCkpO1xuXHRcdHZhciB0aGV0YTFNb2QgPSBOdW1iZXIoKHRoZXRhMSAlICgyICogTWF0aC5QSSkpLnRvRml4ZWQoOCkpO1xuXHRcdGlmICh0aGV0YTFNb2QgPT09IHRoZXRhMk1vZClcblx0XHRcdHRoZXRhMiAtPSAuMDAwMTtcblx0fVxuXG5cdGN0eC5zYXZlKCk7XG5cdGN0eC5nbG9iYWxBbHBoYSA9IGZpbGxPcGFjaXR5O1xuXG5cdGlmICh0eXBlID09PSBcInBpZVwiKSB7XG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdGN0eC5tb3ZlVG8oY2VudGVyLngsIGNlbnRlci55KTtcblx0XHRjdHguYXJjKGNlbnRlci54LCBjZW50ZXIueSwgcmFkaXVzLCB0aGV0YTEsIHRoZXRhMiwgZmFsc2UpO1xuXHRcdGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcblx0XHRjdHguc3Ryb2tlU3R5bGUgPSBcIndoaXRlXCI7XG5cdFx0Y3R4LmxpbmVXaWR0aCA9IDI7XG5cdFx0Ly8gICAgY3R4LnNoYWRvd09mZnNldFggPSAyO1xuXHRcdC8vICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMTtcblx0XHQvLyAgICAgY3R4LnNoYWRvd0JsdXIgPSAyO1xuXHRcdC8vICAgIGN0eC5zaGFkb3dDb2xvciA9ICcjQkZCRkJGJztcblx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0Ly9jdHguc3Ryb2tlKCk7XG5cdFx0Y3R4LmZpbGwoKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlID09PSBcImRvdWdobnV0XCIpIHtcblx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0Y3R4LmFyYyhjZW50ZXIueCwgY2VudGVyLnksIHJhZGl1cywgdGhldGExLCB0aGV0YTIsIGZhbHNlKTtcblx0XHRjdHguYXJjKGNlbnRlci54LCBjZW50ZXIueSwgcGVyY2VudElubmVyUmFkaXVzICogcmFkaXVzLCB0aGV0YTIsIHRoZXRhMSwgdHJ1ZSk7XG5cdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcblx0XHRjdHguc3Ryb2tlU3R5bGUgPSBcIndoaXRlXCI7XG5cdFx0Y3R4LmxpbmVXaWR0aCA9IDI7XG5cdFx0Ly8gc2hhZG93IHByb3BlcnRpZXNcblx0XHQvLyAgICAgY3R4LnNoYWRvd09mZnNldFggPSAxO1xuXHRcdC8vICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMTtcblx0XHQvLyAgICAgY3R4LnNoYWRvd0JsdXIgPSAxO1xuXHRcdC8vICAgIGN0eC5zaGFkb3dDb2xvciA9ICcjQkZCRkJGJzsgIC8vZ3JleSBzaGFkb3dcblx0XHQvL2N0eC5zdHJva2UoKTtcblx0XHRjdHguZmlsbCgpO1xuXHR9XG5cblx0Y3R4Lmdsb2JhbEFscGhhID0gMTtcblxuXHRjdHgucmVzdG9yZSgpO1xufTtcbiIsIlxuaW1wb3J0IFJlbmRlckhlbHBlciBmcm9tICcuLi9oZWxwZXJzL3JlbmRlcic7XG5pbXBvcnQgQW5pbWF0aW9uSGVscGVyIGZyb20gJy4uL2hlbHBlcnMvYW5pbWF0b3InO1xuaW1wb3J0IHtpc0NhbnZhc1N1cHBvcnRlZCwgaW50VG9IZXhDb2xvclN0cmluZ30gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXHR2YXIgY3R4ID0gcGxvdFVuaXQudGFyZ2V0Q2FudmFzQ3R4IHx8IHRoaXMucGxvdEFyZWEuY3R4O1xuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGNvbG9yID0gbnVsbDtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdHZhciBpID0gMCwgeCwgeTtcblx0dmFyIGRhdGFQb2ludFg7IC8vVXNlZCBzbyB0aGF0IHdoZW4gZGF0YVBvaW50LnggaXMgYSBEYXRlVGltZSB2YWx1ZSwgaXQgZG9lc24ndCBnZXQgY29udmVydGVkIHRvIG51bWJlciBmcm9tIGRhdGFUaW1lIGV2ZXJ5dGltZSBpdCBpcyB1c2VkLlxuXG5cdHZhciB5WmVyb1RvUGl4ZWwgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKDAgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSkgPDwgMDtcblxuXHR2YXIgbWF4QmFyV2lkdGggPSB0aGlzLmRhdGFQb2ludE1heFdpZHRoID8gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA6IHRoaXMud2lkdGggKiAuMTUgPDwgMDtcblx0dmFyIHhNaW5EaWZmID0gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8ubWluRGlmZjtcblx0dmFyIGJhcldpZHRoID0gKCgocGxvdEFyZWEud2lkdGggLyBNYXRoLmFicyhwbG90VW5pdC5heGlzWC52aWV3cG9ydE1heGltdW0gLSBwbG90VW5pdC5heGlzWC52aWV3cG9ydE1pbmltdW0pKSAqIE1hdGguYWJzKHhNaW5EaWZmKSkgLyB0b3RhbERhdGFTZXJpZXMgKiAuOSkgPDwgMDtcblxuXG5cdGN0eC5zYXZlKCk7XG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHguc2F2ZSgpO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5jbGlwKCk7XG5cdH1cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXHRcdHZhciBpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IHRydWU7XG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPT0gMSlcblx0XHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cblx0XHRpZiAoYmFyV2lkdGggPCAxKVxuXHRcdFx0YmFyV2lkdGggPSAxO1xuXHRcdGVsc2UgaWYgKGJhcldpZHRoID4gbWF4QmFyV2lkdGgpXG5cdFx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoO1xuXG5cdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly92YXIgYmV2ZWxFbmFibGVkID0gKGJhcldpZHRoID4gNSkgPyBmYWxzZSA6IGZhbHNlO1xuXG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBcIiM0NTcyQTcgXCI7XG5cblx0XHRcdHZhciBtYXhBcmVhID0gTWF0aC5wb3coTWF0aC5taW4ocGxvdEFyZWEuaGVpZ2h0LCBwbG90QXJlYS53aWR0aCkgKiAuMyAvIDIsIDIpICogTWF0aC5QSTtcblxuXHRcdFx0dmFyIHByZXZEYXRhUG9pbnRYID0gMDtcblx0XHRcdHZhciBwcmV2RGF0YVBvaW50WSA9IDA7XG5cblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLmdldFRpbWUgPyBkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKSA6IGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLng7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1pbiB8fCBkYXRhUG9pbnRYID4gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNYXgpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgKGRhdGFQb2ludHNbaV0ueSkgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0eCA9IChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50WCAtIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHkgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cblx0XHRcdFx0dmFyIG1hcmtlclByb3BzID0gZGF0YVNlcmllcy5nZXRNYXJrZXJQcm9wZXJ0aWVzKGksIHgsIHksIGN0eCk7XG5cblx0XHRcdFx0Y3R4Lmdsb2JhbEFscGhhID0gZGF0YVNlcmllcy5maWxsT3BhY2l0eTtcblx0XHRcdFx0UmVuZGVySGVscGVyLmRyYXdNYXJrZXIobWFya2VyUHJvcHMueCwgbWFya2VyUHJvcHMueSwgbWFya2VyUHJvcHMuY3R4LCBtYXJrZXJQcm9wcy50eXBlLCBtYXJrZXJQcm9wcy5zaXplLCBtYXJrZXJQcm9wcy5jb2xvciwgbWFya2VyUHJvcHMuYm9yZGVyQ29sb3IsIG1hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzcyk7XG5cdFx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IDE7XG5cblxuXHRcdFx0XHQvL2lmIChNYXRoLmFicyhwcmV2RGF0YVBvaW50WCAtIHgpIDwgbWFya2VyUHJvcHMuc2l6ZSAvIDIgJiYgTWF0aC5hYnMocHJldkRhdGFQb2ludFkgLSB5KSA8IG1hcmtlclByb3BzLnNpemUgLyAyKSB7XG5cdFx0XHRcdC8vICAgIGNvbnRpbnVlO1xuXHRcdFx0XHQvL31cblxuXHRcdFx0XHQvL2lmICghZGF0YVNlcmllcy5tYXhXaWR0aEluWCB8fCBtYXJrZXJQcm9wcy5zaXplID4gZGF0YVNlcmllcy5tYXhXaWR0aEluWCkge1xuXHRcdFx0XHQvL1x0ZGF0YVNlcmllcy5tYXhXaWR0aEluWCA9IG1hcmtlclByb3BzLnNpemUgLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXHRcdFx0XHQvL31cblxuXHRcdFx0XHRpZiAoKE1hdGguc3FydCgocHJldkRhdGFQb2ludFggLSB4KSAqIChwcmV2RGF0YVBvaW50WCAtIHgpICsgKHByZXZEYXRhUG9pbnRZIC0geSkgKiAocHJldkRhdGFQb2ludFkgLSB5KSkgPCBNYXRoLm1pbihtYXJrZXJQcm9wcy5zaXplLCA1KSlcblx0XHRcdFx0XHQmJiBkYXRhUG9pbnRzLmxlbmd0aCA+IChNYXRoLm1pbih0aGlzLnBsb3RBcmVhLndpZHRoLCB0aGlzLnBsb3RBcmVhLmhlaWdodCkpKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL1JlbmRlciBJRCBvbiBHaG9zdCBDYW52YXMgLSBmb3IgZXZlbnQgaGFuZGxpbmdcblx0XHRcdFx0dmFyIGlkID0gZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbaV07XG5cdFx0XHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdID0ge1xuXHRcdFx0XHRcdGlkOiBpZCwgb2JqZWN0VHlwZTogXCJkYXRhUG9pbnRcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXgsIGRhdGFQb2ludEluZGV4OiBpLCB4MTogeCwgeTE6IHlcblx0XHRcdFx0fTtcblx0XHRcdFx0dmFyIG1hcmtlckNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cblx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0UmVuZGVySGVscGVyLmRyYXdNYXJrZXIoXG5cdFx0XHRcdFx0XHRcdG1hcmtlclByb3BzLngsIG1hcmtlclByb3BzLnksIHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eCxcblx0XHRcdFx0XHRcdFx0bWFya2VyUHJvcHMudHlwZSxcblx0XHRcdFx0XHRcdFx0bWFya2VyUHJvcHMuc2l6ZSxcblx0XHRcdFx0XHRcdFx0bWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRtYXJrZXJQcm9wcy5ib3JkZXJUaGlja25lc3Ncblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9tYXJrZXJzLnB1c2goKTtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5pbmRleExhYmVsIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbCB8fCBkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWxGb3JtYXR0ZXIgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyKSB7XG5cblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJzY2F0dGVyXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeCwgeTogeVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogMSxcblx0XHRcdFx0XHRcdGJvdW5kczoge1xuXHRcdFx0XHRcdFx0XHR4MTogeCAtIG1hcmtlclByb3BzLnNpemUgLyAyLCB5MTogeSAtIG1hcmtlclByb3BzLnNpemUgLyAyLCB4MjogeCArIG1hcmtlclByb3BzLnNpemUgLyAyLCB5MjogeSArIG1hcmtlclByb3BzLnNpemUgLyAyXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwcmV2RGF0YVBvaW50WCA9IHg7XG5cdFx0XHRcdHByZXZEYXRhUG9pbnRZID0geTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjdHgucmVzdG9yZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVzdG9yZSgpO1xuXG5cdC8vc291cmNlIGFuZCBkZXN0IHdvdWxkIGJlIHNhbWUgd2hlbiBhbmltYXRpb24gaXMgbm90IGVuYWJsZWRcblx0dmFyIGFuaW1hdGlvbkluZm8gPSB7XG5cdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLmZhZGVJbkFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcuZWFzZUluUXVhZCwgYW5pbWF0aW9uQmFzZTogMFxuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cbiIsIlxuaW1wb3J0IHtpc0NhbnZhc1N1cHBvcnRlZH0gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXHRcdHZhciBjdHggPSBwbG90VW5pdC50YXJnZXRDYW52YXNDdHggfHwgdGhpcy5wbG90QXJlYS5jdHg7XG5cblx0XHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXHRcdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdHZhciBnaG9zdEN0eCA9IHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eDtcblxuXHRcdGN0eC5zYXZlKCk7XG5cblx0XHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdGN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0Y3R4LmNsaXAoKTtcblxuXHRcdHZhciBtYXJrZXJzID0gW107XG5cblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblxuXHRcdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblx0XHRcdGN0eC5saW5lV2lkdGggPSBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3M7XG5cdFx0XHR2YXIgZGF0YVBvaW50cyA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cztcblxuXHRcdFx0aWYgKGN0eC5zZXRMaW5lRGFzaCkge1xuXHRcdFx0XHRjdHguc2V0TGluZURhc2goZ2V0TGluZURhc2hBcnJheShkYXRhU2VyaWVzLmxpbmVEYXNoVHlwZSwgZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzKSk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBzZXJpZXNJZCA9IGRhdGFTZXJpZXMuaWQ7XG5cdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW3Nlcmllc0lkXSA9IHtcblx0XHRcdFx0b2JqZWN0VHlwZTogXCJkYXRhU2VyaWVzXCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4XG5cdFx0XHR9O1xuXHRcdFx0dmFyIGhleENvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhzZXJpZXNJZCk7XG5cdFx0XHRnaG9zdEN0eC5zdHJva2VTdHlsZSA9IGhleENvbG9yO1xuXHRcdFx0Ly9naG9zdEN0eC5saW5lV2lkdGggPSBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3M7XG5cdFx0XHRnaG9zdEN0eC5saW5lV2lkdGggPSBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MgPiAwID8gTWF0aC5tYXgoZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzLCA0KSA6IDA7XG5cblx0XHRcdHZhciBjb2xvclNldCA9IGRhdGFTZXJpZXMuX2NvbG9yU2V0O1xuXHRcdFx0dmFyIGNvbG9yID0gY29sb3JTZXRbMF07XG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcblxuXHRcdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblx0XHRcdHZhciBpID0gMCwgeCwgeTtcblx0XHRcdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgYmFjayBhbmQgZm9ydGguXG5cblx0XHRcdC8vaWYgKCFkYXRhU2VyaWVzLl9vcHRpb25zLm1hcmtlclNpemUgJiYgZGF0YVNlcmllcy5kYXRhUG9pbnRzLmxlbmd0aCA8IDEwMDApXG5cdFx0XHQvLyAgICBkYXRhU2VyaWVzLm1hcmtlclNpemUgPSA4O1xuXG5cdFx0XHR2YXIgcGl4ZWxzID0gW107XG5cblx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdGlmIChkYXRhUG9pbnRzLmxlbmd0aCA+IDApIHtcblxuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0uZ2V0VGltZSA/IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRzW2ldLng7XG5cblx0XHRcdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heClcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0Ly9pZiAoIWlzRmluaXRlKGRhdGFQb2ludHNbaV0ueSkpXG5cdFx0XHRcdFx0Ly8gICAgY29udGludWU7XG5cblx0XHRcdFx0XHRpZiAodHlwZW9mIChkYXRhUG9pbnRzW2ldLnkpICE9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdFx0XHRpZiAoaSA+IDApIHsvLyBpZiBmaXJzdCBkYXRhUG9pbnQgaXMgbnVsbCB0aGVuIG5vIG5lZWQgdG8gY2FsbCBzdHJva2UgbWV0aG9kXG5cdFx0XHRcdFx0XHRcdHJlbmRlckJlemllcihwaXhlbHMpO1xuXHRcdFx0XHRcdFx0XHRwaXhlbHMgPSBbXTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0eCA9IChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50WCAtIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdFx0eSA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55IC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblxuXHRcdFx0XHRcdHZhciBpZCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2ldO1xuXHRcdFx0XHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdID0ge1xuXHRcdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4LCB5MTogeVxuXHRcdFx0XHRcdH07XG5cblxuXHRcdFx0XHRcdHBpeGVsc1twaXhlbHMubGVuZ3RoXSA9IHtcblx0XHRcdFx0XHRcdHg6IHgsIHk6IHlcblx0XHRcdFx0XHR9O1xuXG5cblx0XHRcdFx0XHQvL0FkZCBNYXJrZXJzXG5cdFx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ubWFya2VyU2l6ZSA+IDAgfHwgZGF0YVNlcmllcy5tYXJrZXJTaXplID4gMCkge1xuXG5cdFx0XHRcdFx0XHR2YXIgbWFya2VyUHJvcHMgPSBkYXRhU2VyaWVzLmdldE1hcmtlclByb3BlcnRpZXMoaSwgeCwgeSwgY3R4KTtcblx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaChtYXJrZXJQcm9wcyk7XG5cblx0XHRcdFx0XHRcdC8vaWYgKCFkYXRhU2VyaWVzLm1heFdpZHRoSW5YIHx8IG1hcmtlclByb3BzLnNpemUgPiBkYXRhU2VyaWVzLm1heFdpZHRoSW5YKSB7XG5cdFx0XHRcdFx0XHQvL1x0ZGF0YVNlcmllcy5tYXhXaWR0aEluWCA9IG1hcmtlclByb3BzLnNpemUgLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXHRcdFx0XHRcdFx0Ly99XG5cblx0XHRcdFx0XHRcdHZhciBtYXJrZXJDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdFx0XHQvL3dpbmRvdy5jb25zb2xlLmxvZyhcImluZGV4OiBcIiArIGkgKyBcIjsgaWQ6IFwiICsgaWQgKyBcIjsgaGV4OiBcIiArIG1hcmtlckNvbG9yKTtcblx0XHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0XHRtYXJrZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHksIGN0eDogZ2hvc3RDdHgsXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogbWFya2VyUHJvcHMudHlwZSxcblx0XHRcdFx0XHRcdFx0XHRzaXplOiBtYXJrZXJQcm9wcy5zaXplLFxuXHRcdFx0XHRcdFx0XHRcdGNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJDb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyVGhpY2tuZXNzOiBtYXJrZXJQcm9wcy5ib3JkZXJUaGlja25lc3Ncblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly9BZGQgTGFiZWxzXG5cdFx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbCB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWwgfHwgZGF0YVBvaW50c1tpXS5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcikge1xuXG5cdFx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcInNwbGluZVwiLFxuXHRcdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRcdGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsXG5cdFx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdFx0eDogeCwgeTogeVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRkaXJlY3Rpb246IGRhdGFQb2ludHNbaV0ueSA+PSAwID8gMSA6IC0xLFxuXHRcdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmVuZGVyQmV6aWVyKHBpeGVscyk7XG5cdFx0fVxuXG5cdFx0UmVuZGVySGVscGVyLmRyYXdNYXJrZXJzKG1hcmtlcnMpO1xuXHRcdGN0eC5yZXN0b3JlKCk7XG5cblx0XHRjdHguYmVnaW5QYXRoKCk7XG5cblx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblxuXHRcdGZ1bmN0aW9uIHJlbmRlckJlemllcihwaXhlbHMpIHtcblxuXHRcdFx0dmFyIGJwID0gZ2V0QmV6aWVyUG9pbnRzKHBpeGVscywgMik7XG5cblx0XHRcdGlmIChicC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXG5cdFx0XHRcdGN0eC5tb3ZlVG8oYnBbMF0ueCwgYnBbMF0ueSk7XG5cdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oYnBbMF0ueCwgYnBbMF0ueSk7XG5cblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBicC5sZW5ndGggLSAzOyBpICs9IDMpIHtcblxuXHRcdFx0XHRcdGN0eC5iZXppZXJDdXJ2ZVRvKGJwW2kgKyAxXS54LCBicFtpICsgMV0ueSwgYnBbaSArIDJdLngsIGJwW2kgKyAyXS55LCBicFtpICsgM10ueCwgYnBbaSArIDNdLnkpO1xuXG5cdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdFx0Z2hvc3RDdHguYmV6aWVyQ3VydmVUbyhicFtpICsgMV0ueCwgYnBbaSArIDFdLnksIGJwW2kgKyAyXS54LCBicFtpICsgMl0ueSwgYnBbaSArIDNdLngsIGJwW2kgKyAzXS55KTtcblxuXHRcdFx0XHRcdGlmIChpID4gMCAmJiBpICUgMzAwMCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0Y3R4Lm1vdmVUbyhicFtpICsgM10ueCwgYnBbaSArIDNdLnkpO1xuXG5cdFx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdFx0Z2hvc3RDdHguc3Ryb2tlKCk7XG5cdFx0XHRcdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oYnBbaSArIDNdLngsIGJwW2kgKyAzXS55KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cblx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdGdob3N0Q3R4LnN0cm9rZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vc291cmNlIGFuZCBkZXN0IHdvdWxkIGJlIHNhbWUgd2hlbiBhbmltYXRpb24gaXMgbm90IGVuYWJsZWRcblx0XHR2YXIgYW5pbWF0aW9uSW5mbyA9IHtcblx0XHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci54Q2xpcEFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcubGluZWFyLCBhbmltYXRpb25CYXNlOiAwXG5cdFx0fTtcblx0XHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcblx0fVxuXG5cdHZhciBkcmF3UmVjdCA9IGZ1bmN0aW9uIChjdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgYm9yZGVyVGhpY2tuZXNzLCBib3JkZXJDb2xvciwgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0LCBmaWxsT3BhY2l0eSkge1xuXHRcdGlmICh0eXBlb2YgKGZpbGxPcGFjaXR5KSA9PT0gXCJ1bmRlZmluZWRcIilcblx0XHRcdGZpbGxPcGFjaXR5ID0gMTtcblxuXHRcdGJvcmRlclRoaWNrbmVzcyA9IGJvcmRlclRoaWNrbmVzcyB8fCAwO1xuXHRcdGJvcmRlckNvbG9yID0gYm9yZGVyQ29sb3IgfHwgXCJibGFja1wiO1xuXHRcdC8vYWxlcnQoXCJ0b3BcIisgdG9wICsgXCJib3R0b21cIiArIGJvdHRvbSArIFwiIGx0XCIgKyBsZWZ0KyBcInJ0XCIgKyByaWdodCApXG5cdFx0dmFyIGExID0geDEsIGEyID0geDIsIGIxID0geTEsIGIyID0geTIsIGVkZ2VZLCBlZGdlWDtcblx0XHRpZiAoeDIgLSB4MSA+IDE1ICYmIHkyIC0geTEgPiAxNSlcblx0XHRcdHZhciBiZXZlbERlcHRoID0gODtcblx0XHRlbHNlXG5cdFx0XHR2YXIgYmV2ZWxEZXB0aCA9IDAuMzUgKiBNYXRoLm1pbigoeDIgLSB4MSksICh5MiAtIHkxKSk7XG5cdFx0Ly9hbGVydChhMSArIFwiXCIgKyBhMik7XG5cdFx0dmFyIGNvbG9yMiA9IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAuNClcIjtcblx0XHR2YXIgY29sb3IzID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSlcIjtcblx0XHQvL2NvbG9yMSA9IFwicmdiYShcIiArIHIgKyBcIixcIiArIGcgKyBcIiwgXCIgKyBiICsgXCIsMSlcIjtcblx0XHR2YXIgY29sb3IxID0gY29sb3I7XG5cblx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0Y3R4Lm1vdmVUbyh4MSwgeTEpO1xuXHRcdGN0eC5zYXZlKCk7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IGNvbG9yMTtcblxuXHRcdGN0eC5nbG9iYWxBbHBoYSA9IGZpbGxPcGFjaXR5O1xuXHRcdGN0eC5maWxsUmVjdCh4MSwgeTEsIHgyIC0geDEsIHkyIC0geTEpO1xuXHRcdGN0eC5nbG9iYWxBbHBoYSA9IDE7XG5cblx0XHRpZiAoYm9yZGVyVGhpY2tuZXNzID4gMCkge1xuXHRcdFx0dmFyIG9mZnNldCA9IGJvcmRlclRoaWNrbmVzcyAlIDIgPT09IDAgPyAwIDogLjU7XG5cdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRjdHgubGluZVdpZHRoID0gYm9yZGVyVGhpY2tuZXNzO1xuXHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gYm9yZGVyQ29sb3I7XG5cdFx0XHRjdHgubW92ZVRvKHgxLCB5MSk7XG5cdFx0XHRjdHgucmVjdCh4MSAtIG9mZnNldCwgeTEgLSBvZmZzZXQsIHgyIC0geDEgKyAyICogb2Zmc2V0LCB5MiAtIHkxICsgMiAqIG9mZnNldCk7XG5cdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0fVxuXG5cdFx0Y3R4LnJlc3RvcmUoKTtcblx0XHQvLyAgIGN0eC5iZWdpblBhdGgoKTtcblx0XHRpZiAodG9wID09PSB0cnVlKSB7XG5cdFx0XHQvLyBhbGVydCh4MSArIFwiXCIgKyB4MiArIFwiIFwiICsgYmV2ZWxEZXB0aCk7XG5cdFx0XHRjdHguc2F2ZSgpO1xuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0Y3R4Lm1vdmVUbyh4MSwgeTEpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4MSArIGJldmVsRGVwdGgsIHkxICsgYmV2ZWxEZXB0aCk7XG5cdFx0XHRjdHgubGluZVRvKHgyIC0gYmV2ZWxEZXB0aCwgeTEgKyBiZXZlbERlcHRoKTtcblx0XHRcdGN0eC5saW5lVG8oeDIsIHkxKTtcblx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHRcdHZhciBncmQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoKHgyICsgeDEpIC8gMiwgYjEgKyBiZXZlbERlcHRoLCAoeDIgKyB4MSkgLyAyLCBiMSk7XG5cdFx0XHRncmQuYWRkQ29sb3JTdG9wKDAsIGNvbG9yMSk7XG5cdFx0XHRncmQuYWRkQ29sb3JTdG9wKDEsIGNvbG9yMik7XG5cdFx0XHRjdHguZmlsbFN0eWxlID0gZ3JkO1xuXHRcdFx0Y3R4LmZpbGwoKTtcblx0XHRcdC8vICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG5cdFx0XHRjdHgucmVzdG9yZSgpO1xuXHRcdH1cblxuXG5cdFx0aWYgKGJvdHRvbSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y3R4LnNhdmUoKTtcblx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdGN0eC5tb3ZlVG8oeDEsIHkyKTtcblx0XHRcdGN0eC5saW5lVG8oeDEgKyBiZXZlbERlcHRoLCB5MiAtIGJldmVsRGVwdGgpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4MiAtIGJldmVsRGVwdGgsIHkyIC0gYmV2ZWxEZXB0aCk7XG5cdFx0XHRjdHgubGluZVRvKHgyLCB5Mik7XG5cdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0XHR2YXIgZ3JkID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KCh4MiArIHgxKSAvIDIsIGIyIC0gYmV2ZWxEZXB0aCwgKHgyICsgeDEpIC8gMiwgYjIpO1xuXHRcdFx0Z3JkLmFkZENvbG9yU3RvcCgwLCBjb2xvcjEpO1xuXHRcdFx0Z3JkLmFkZENvbG9yU3RvcCgxLCBjb2xvcjIpO1xuXHRcdFx0Y3R4LmZpbGxTdHlsZSA9IGdyZDtcblx0XHRcdC8vICAgICAgIGN0eC5zdHJva2UoKTtcblx0XHRcdGN0eC5maWxsKCk7XG5cdFx0XHRjdHgucmVzdG9yZSgpO1xuXHRcdH1cblxuXHRcdGlmIChsZWZ0ID09PSB0cnVlKSB7XG5cdFx0XHQvLyAgIGFsZXJ0KHgxKVxuXHRcdFx0Y3R4LnNhdmUoKTtcblx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdGN0eC5tb3ZlVG8oeDEsIHkxKVxuXHRcdFx0Y3R4LmxpbmVUbyh4MSArIGJldmVsRGVwdGgsIHkxICsgYmV2ZWxEZXB0aCk7XG5cdFx0XHRjdHgubGluZVRvKHgxICsgYmV2ZWxEZXB0aCwgeTIgLSBiZXZlbERlcHRoKTtcblx0XHRcdGN0eC5saW5lVG8oeDEsIHkyKTtcblx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHRcdHZhciBncmQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoYTEgKyBiZXZlbERlcHRoLCAoeTIgKyB5MSkgLyAyLCBhMSwgKHkyICsgeTEpIC8gMik7XG5cdFx0XHRncmQuYWRkQ29sb3JTdG9wKDAsIGNvbG9yMSk7XG5cdFx0XHRncmQuYWRkQ29sb3JTdG9wKDEsIGNvbG9yMyk7XG5cdFx0XHRjdHguZmlsbFN0eWxlID0gZ3JkO1xuXHRcdFx0Y3R4LmZpbGwoKTtcblx0XHRcdC8vICAgICBjdHguc3Ryb2tlKCk7XG5cdFx0XHRjdHgucmVzdG9yZSgpO1xuXHRcdH1cblxuXG5cdFx0aWYgKHJpZ2h0ID09PSB0cnVlKSB7XG5cdFx0XHRjdHguc2F2ZSgpO1xuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0Y3R4Lm1vdmVUbyh4MiwgeTEpXG5cdFx0XHRjdHgubGluZVRvKHgyIC0gYmV2ZWxEZXB0aCwgeTEgKyBiZXZlbERlcHRoKTtcblx0XHRcdGN0eC5saW5lVG8oeDIgLSBiZXZlbERlcHRoLCB5MiAtIGJldmVsRGVwdGgpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4MiwgeTIpO1xuXHRcdFx0dmFyIGdyZCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudChhMiAtIGJldmVsRGVwdGgsICh5MiArIHkxKSAvIDIsIGEyLCAoeTIgKyB5MSkgLyAyKTtcblx0XHRcdGdyZC5hZGRDb2xvclN0b3AoMCwgY29sb3IxKTtcblx0XHRcdGdyZC5hZGRDb2xvclN0b3AoMSwgY29sb3IzKTtcblx0XHRcdGN0eC5maWxsU3R5bGUgPSBncmQ7XG5cdFx0XHRncmQuYWRkQ29sb3JTdG9wKDAsIGNvbG9yMSk7XG5cdFx0XHRncmQuYWRkQ29sb3JTdG9wKDEsIGNvbG9yMyk7XG5cdFx0XHRjdHguZmlsbFN0eWxlID0gZ3JkO1xuXHRcdFx0Y3R4LmZpbGwoKTtcblx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHRcdC8vICAgICAgICAgIGN0eC5zdHJva2UoKTtcblx0XHRcdGN0eC5yZXN0b3JlKCk7XG5cdFx0fVxuXHRcdC8vXG5cblx0fVxuIiwiXG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cdHZhciBjdHggPSBwbG90VW5pdC50YXJnZXRDYW52YXNDdHggfHwgdGhpcy5wbG90QXJlYS5jdHg7XG5cblx0dmFyIHRvdGFsRGF0YVNlcmllcyA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDtcblxuXHRpZiAodG90YWxEYXRhU2VyaWVzIDw9IDApXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBnaG9zdEN0eCA9IHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eDtcblxuXHR2YXIgYXhpc1hQcm9wcyA9IHBsb3RVbml0LmF4aXNYLmxpbmVDb29yZGluYXRlcztcblx0dmFyIGF4aXNZUHJvcHMgPSBwbG90VW5pdC5heGlzWS5saW5lQ29vcmRpbmF0ZXM7XG5cdHZhciBtYXJrZXJzID0gW107XG5cblx0dmFyIHBsb3RBcmVhID0gdGhpcy5wbG90QXJlYTtcblx0Y3R4LnNhdmUoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0Z2hvc3RDdHguc2F2ZSgpO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRnaG9zdEN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0Z2hvc3RDdHguY2xpcCgpO1xuXHR9XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXG5cdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblxuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXG5cdFx0dmFyIHNlcmllc0lkID0gZGF0YVNlcmllcy5pZDtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW3Nlcmllc0lkXSA9IHtcblx0XHRcdG9iamVjdFR5cGU6IFwiZGF0YVNlcmllc1wiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleFxuXHRcdH07XG5cblx0XHR2YXIgaGV4Q29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKHNlcmllc0lkKTtcblx0XHRnaG9zdEN0eC5maWxsU3R5bGUgPSBoZXhDb2xvcjtcblx0XHQvL2dob3N0Q3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblx0XHQvL2dob3N0Q3R4LmxpbmVXaWR0aCA9IDIwO1xuXG5cdFx0bWFya2VycyA9IFtdO1xuXG5cdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblx0XHR2YXIgaSA9IDAsIHgsIHk7XG5cdFx0dmFyIGRhdGFQb2ludFg7IC8vVXNlZCBzbyB0aGF0IHdoZW4gZGF0YVBvaW50LnggaXMgYSBEYXRlVGltZSB2YWx1ZSwgaXQgZG9lc24ndCBnZXQgY29udmVydGVkIHRvIG51bWJlciBiYWNrIGFuZCBmb3J0aC5cblxuXHRcdHZhciB5WmVyb1RvUGl4ZWwgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKDAgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdHZhciBiYXNlWTtcblxuXHRcdHZhciBzdGFydFBvaW50ID0gbnVsbDtcblxuXHRcdHZhciBwaXhlbHMgPSBbXTtcblxuXHRcdGlmIChkYXRhUG9pbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vY3R4LnN0cm9rZVN0eWxlID0gXCIjNDU3MkE3IFwiO1xuXHRcdFx0Y29sb3IgPSBkYXRhU2VyaWVzLl9jb2xvclNldFtpICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcblx0XHRcdGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuXHRcdFx0Y3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblxuXHRcdFx0aWYgKGN0eC5zZXRMaW5lRGFzaCkge1xuXHRcdFx0XHRjdHguc2V0TGluZURhc2goZ2V0TGluZURhc2hBcnJheShkYXRhU2VyaWVzLmxpbmVEYXNoVHlwZSwgZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzKSk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSA/IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRzW2ldLng7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1pbiB8fCBkYXRhUG9pbnRYID4gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNYXgpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgKGRhdGFQb2ludHNbaV0ueSkgIT09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRpZiAoaSA+IDApIHtcblx0XHRcdFx0XHRcdHJlbmRlckJlemllckFyZWEoKTtcblx0XHRcdFx0XHRcdHBpeGVscyA9IFtdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHggPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5ID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnkgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXG5cblx0XHRcdFx0dmFyIGlkID0gZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbaV07XG5cdFx0XHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdID0ge1xuXHRcdFx0XHRcdGlkOiBpZCwgb2JqZWN0VHlwZTogXCJkYXRhUG9pbnRcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXgsIGRhdGFQb2ludEluZGV4OiBpLCB4MTogeCwgeTE6IHlcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRwaXhlbHNbcGl4ZWxzLmxlbmd0aF0gPSB7XG5cdFx0XHRcdFx0eDogeCwgeTogeVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vUmVuZGVyIE1hcmtlclxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5tYXJrZXJTaXplICE9PSAwKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ubWFya2VyU2l6ZSA+IDAgfHwgZGF0YVNlcmllcy5tYXJrZXJTaXplID4gMCkge1xuXHRcdFx0XHRcdFx0dmFyIG1hcmtlclByb3BzID0gZGF0YVNlcmllcy5nZXRNYXJrZXJQcm9wZXJ0aWVzKGksIHgsIHksIGN0eCk7XG5cdFx0XHRcdFx0XHRtYXJrZXJzLnB1c2gobWFya2VyUHJvcHMpO1xuXG5cdFx0XHRcdFx0XHQvL2lmICghZGF0YVNlcmllcy5tYXhXaWR0aEluWCB8fCBtYXJrZXJQcm9wcy5zaXplID4gZGF0YVNlcmllcy5tYXhXaWR0aEluWCkge1xuXHRcdFx0XHRcdFx0Ly9cdGRhdGFTZXJpZXMubWF4V2lkdGhJblggPSBtYXJrZXJQcm9wcy5zaXplIC8gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA+IDEgPyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgLSAxIDogcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0KTtcblx0XHRcdFx0XHRcdC8vfVxuXG5cdFx0XHRcdFx0XHR2YXIgbWFya2VyQ29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGlkKTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0eDogeCwgeTogeSwgY3R4OiBnaG9zdEN0eCxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBtYXJrZXJQcm9wcy50eXBlLFxuXHRcdFx0XHRcdFx0XHRcdHNpemU6IG1hcmtlclByb3BzLnNpemUsXG5cdFx0XHRcdFx0XHRcdFx0Y29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlckNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJUaGlja25lc3M6IG1hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzc1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXG5cdFx0XHRcdC8vUmVuZGVyIEluZGV4IExhYmVsc1xuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5pbmRleExhYmVsIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbCB8fCBkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWxGb3JtYXR0ZXIgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyKSB7XG5cblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJzcGxpbmVBcmVhXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeCwgeTogeVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55ID49IDAgPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJlbmRlckJlemllckFyZWEoKTtcblxuXHRcdFx0UmVuZGVySGVscGVyLmRyYXdNYXJrZXJzKG1hcmtlcnMpO1xuXHRcdH1cblx0fVxuXG5cdGN0eC5yZXN0b3JlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZXN0b3JlKCk7XG5cblx0ZnVuY3Rpb24gcmVuZGVyQmV6aWVyQXJlYSgpIHtcblx0XHR2YXIgYnAgPSBnZXRCZXppZXJQb2ludHMocGl4ZWxzLCAyKTtcblxuXHRcdGlmIChicC5sZW5ndGggPiAwKSB7XG5cdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRjdHgubW92ZVRvKGJwWzBdLngsIGJwWzBdLnkpO1xuXG5cdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdGdob3N0Q3R4Lm1vdmVUbyhicFswXS54LCBicFswXS55KTtcblx0XHRcdH1cblxuXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGJwLmxlbmd0aCAtIDM7IGkgKz0gMykge1xuXG5cdFx0XHRcdGN0eC5iZXppZXJDdXJ2ZVRvKGJwW2kgKyAxXS54LCBicFtpICsgMV0ueSwgYnBbaSArIDJdLngsIGJwW2kgKyAyXS55LCBicFtpICsgM10ueCwgYnBbaSArIDNdLnkpO1xuXG5cdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRnaG9zdEN0eC5iZXppZXJDdXJ2ZVRvKGJwW2kgKyAxXS54LCBicFtpICsgMV0ueSwgYnBbaSArIDJdLngsIGJwW2kgKyAyXS55LCBicFtpICsgM10ueCwgYnBbaSArIDNdLnkpO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MgPiAwKVxuXHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cblx0XHRcdGlmIChwbG90VW5pdC5heGlzWS52aWV3cG9ydE1pbmltdW0gPD0gMCAmJiBwbG90VW5pdC5heGlzWS52aWV3cG9ydE1heGltdW0gPj0gMCkge1xuXHRcdFx0XHRiYXNlWSA9IHlaZXJvVG9QaXhlbDtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LmF4aXNZLnZpZXdwb3J0TWF4aW11bSA8IDApXG5cdFx0XHRcdGJhc2VZID0gYXhpc1lQcm9wcy55MTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LmF4aXNZLnZpZXdwb3J0TWluaW11bSA+IDApXG5cdFx0XHRcdGJhc2VZID0gYXhpc1hQcm9wcy55MjtcblxuXHRcdFx0c3RhcnRQb2ludCA9IHtcblx0XHRcdFx0eDogYnBbMF0ueCwgeTogYnBbMF0ueVxuXHRcdFx0fTtcblxuXHRcdFx0Y3R4LmxpbmVUbyhicFticC5sZW5ndGggLSAxXS54LCBiYXNlWSk7XG5cdFx0XHRjdHgubGluZVRvKHN0YXJ0UG9pbnQueCwgYmFzZVkpO1xuXHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXG5cdFx0XHRjdHguZ2xvYmFsQWxwaGEgPSBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5O1xuXHRcdFx0Y3R4LmZpbGwoKTtcblx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IDE7XG5cblx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRnaG9zdEN0eC5saW5lVG8oYnBbYnAubGVuZ3RoIC0gMV0ueCwgYmFzZVkpO1xuXHRcdFx0XHRnaG9zdEN0eC5saW5lVG8oc3RhcnRQb2ludC54LCBiYXNlWSk7XG5cdFx0XHRcdGdob3N0Q3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHRnaG9zdEN0eC5maWxsKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uSW5mbyA9IHtcblx0XHRzb3VyY2U6IGN0eCwgZGVzdDogdGhpcy5wbG90QXJlYS5jdHgsIGFuaW1hdGlvbkNhbGxiYWNrOiBBbmltYXRpb25IZWxwZXIueENsaXBBbmltYXRpb24sIGVhc2luZ0Z1bmN0aW9uOiBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmxpbmVhciwgYW5pbWF0aW9uQmFzZTogMFxuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cbiIsIlxuaW1wb3J0IFJlbmRlckhlbHBlciBmcm9tICcuLi9oZWxwZXJzL3JlbmRlcic7XG5pbXBvcnQgQW5pbWF0aW9uSGVscGVyIGZyb20gJy4uL2hlbHBlcnMvYW5pbWF0b3InO1xuaW1wb3J0IHtpc0NhbnZhc1N1cHBvcnRlZCwgY29tcGFyZU51bWJlcnMsIGludFRvSGV4Q29sb3JTdHJpbmcsIGdldExpbmVEYXNoQXJyYXl9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblxuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGNvbG9yID0gbnVsbDtcblx0dmFyIG1hcmtlcnMgPSBbXTtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdHZhciBvZmZzZXRZID0gW107XG5cblx0dmFyIGFsbFhWYWx1ZXMgPSBbXTtcblx0Ly92YXIgb2Zmc2V0TmVnYXRpdmVZID0gW107XG5cblx0dmFyIGkgPSAwLCB4LCB5O1xuXHR2YXIgZGF0YVBvaW50WDsgLy9Vc2VkIHNvIHRoYXQgd2hlbiBkYXRhUG9pbnQueCBpcyBhIERhdGVUaW1lIHZhbHVlLCBpdCBkb2Vzbid0IGdldCBjb252ZXJ0ZWQgdG8gbnVtYmVyIGV2ZXJ5dGltZSBpdCBpcyBhY2Nlc3NlZC5cblxuXHQvL3ZhciB5WmVyb1RvUGl4ZWwgPSAoYXhpc1lQcm9wcy55MiAtIGF4aXNZUHJvcHMuaGVpZ2h0IC8gcmFuZ2VZICogTWF0aC5hYnMoMCAtIHBsb3RVbml0LmF4aXNZLnZpZXdwb3J0TWluaW11bSkgKyAuNSkgPDwgMDtcblx0dmFyIHlaZXJvVG9QaXhlbCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoMCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pKSA8PCAwO1xuXG5cdHZhciB4TWluRGlmZiA9IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLm1pbkRpZmY7XG5cblx0dmFyIGdob3N0Q3R4ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4O1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblxuXHRjdHguc2F2ZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRnaG9zdEN0eC5zYXZlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdGdob3N0Q3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0XHRnaG9zdEN0eC5jbGlwKCk7XG5cdH1cblxuXHR2YXIgeFZhbHVlUHJlc2VudCA9IFtdO1xuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblx0XHR2YXIgZGF0YVBvaW50cyA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cztcblx0XHR2YXIgeFZhbHVlO1xuXG5cdFx0ZGF0YVNlcmllcy5kYXRhUG9pbnRJbmRleGVzID0gW107XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0eFZhbHVlID0gZGF0YVBvaW50c1tpXS54LmdldFRpbWUgPyBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50c1tpXS54O1xuXHRcdFx0ZGF0YVNlcmllcy5kYXRhUG9pbnRJbmRleGVzW3hWYWx1ZV0gPSBpO1xuXG5cdFx0XHRpZiAoIXhWYWx1ZVByZXNlbnRbeFZhbHVlXSkge1xuXHRcdFx0XHRhbGxYVmFsdWVzLnB1c2goeFZhbHVlKTtcblx0XHRcdFx0eFZhbHVlUHJlc2VudFt4VmFsdWVdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRhbGxYVmFsdWVzLnNvcnQoY29tcGFyZU51bWJlcnMpO1xuXHR9XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXG5cdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblx0XHR2YXIgZGF0YVBvaW50cyA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cztcblx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXG5cdFx0dmFyIGN1cnJlbnRCYXNlVmFsdWVzID0gW107XG5cblxuXHRcdHZhciBzZXJpZXNJZCA9IGRhdGFTZXJpZXMuaWQ7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtzZXJpZXNJZF0gPSB7XG5cdFx0XHRvYmplY3RUeXBlOiBcImRhdGFTZXJpZXNcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXhcblx0XHR9O1xuXHRcdHZhciBoZXhDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoc2VyaWVzSWQpO1xuXHRcdGdob3N0Q3R4LmZpbGxTdHlsZSA9IGhleENvbG9yO1xuXG5cblxuXHRcdGlmIChhbGxYVmFsdWVzLmxlbmd0aCA+IDApIHtcblxuXHRcdFx0Y29sb3IgPSBkYXRhU2VyaWVzLl9jb2xvclNldFswXTtcblx0XHRcdC8vY3R4LnN0cm9rZVN0eWxlID0gXCJyZWRcIjtcblx0XHRcdGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuXHRcdFx0Y3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblxuXHRcdFx0aWYgKGN0eC5zZXRMaW5lRGFzaCkge1xuXHRcdFx0XHRjdHguc2V0TGluZURhc2goZ2V0TGluZURhc2hBcnJheShkYXRhU2VyaWVzLmxpbmVEYXNoVHlwZSwgZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzKSk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBhbGxYVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0ZGF0YVBvaW50WCA9IGFsbFhWYWx1ZXNbaV07XG5cdFx0XHRcdHZhciBkYXRhUG9pbnQgPSBudWxsO1xuXG5cdFx0XHRcdGlmIChkYXRhU2VyaWVzLmRhdGFQb2ludEluZGV4ZXNbZGF0YVBvaW50WF0gPj0gMClcblx0XHRcdFx0XHRkYXRhUG9pbnQgPSBkYXRhUG9pbnRzW2RhdGFTZXJpZXMuZGF0YVBvaW50SW5kZXhlc1tkYXRhUG9pbnRYXV07XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRkYXRhUG9pbnQgPSB7XG5cdFx0XHRcdFx0XHR4OiBkYXRhUG9pbnRYLCB5OiAwXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGVvZiAoZGF0YVBvaW50LnkpICE9PSBcIm51bWJlclwiKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHZhciB4ID0gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRYIC0gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0Ly92YXIgeSA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50LnkgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR2YXIgeSA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50LnkgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSk7XG5cblx0XHRcdFx0dmFyIG9mZnNldCA9IG9mZnNldFlbZGF0YVBvaW50WF0gPyBvZmZzZXRZW2RhdGFQb2ludFhdIDogMDtcblxuXHRcdFx0XHR5ID0geSAtIG9mZnNldDtcblx0XHRcdFx0Y3VycmVudEJhc2VWYWx1ZXMucHVzaCh7IHg6IHgsIHk6IHlaZXJvVG9QaXhlbCAtIG9mZnNldCB9KTtcblx0XHRcdFx0b2Zmc2V0WVtkYXRhUG9pbnRYXSA9IHlaZXJvVG9QaXhlbCAtIHk7XG5cblx0XHRcdFx0aWYgKGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhKSB7XG5cdFx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdGN0eC5tb3ZlVG8oeCwgeSk7XG5cblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubW92ZVRvKHgsIHkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cblx0XHRcdFx0XHRjdHgubGluZVRvKHgsIHkpO1xuXG5cdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubGluZVRvKHgsIHkpO1xuXG5cdFx0XHRcdFx0aWYgKGkgJSAyNTAgPT0gMCkge1xuXG5cdFx0XHRcdFx0XHRpZiAoZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzID4gMClcblx0XHRcdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXG5cdFx0XHRcdFx0XHR3aGlsZSAoY3VycmVudEJhc2VWYWx1ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgcG9pbnQgPSBjdXJyZW50QmFzZVZhbHVlcy5wb3AoKTtcblx0XHRcdFx0XHRcdFx0Y3R4LmxpbmVUbyhwb2ludC54LCBwb2ludC55KTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0XHRcdFx0Z2hvc3RDdHgubGluZVRvKHBvaW50LngsIHBvaW50LnkpO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblxuXHRcdFx0XHRcdFx0Y3R4Lmdsb2JhbEFscGhhID0gZGF0YVNlcmllcy5maWxsT3BhY2l0eTtcblx0XHRcdFx0XHRcdGN0eC5maWxsKCk7XG5cdFx0XHRcdFx0XHRjdHguZ2xvYmFsQWxwaGEgPSAxO1xuXG5cdFx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRjdHgubW92ZVRvKHgsIHkpO1xuXG5cdFx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdFx0Z2hvc3RDdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRcdFx0XHRcdGdob3N0Q3R4LmZpbGwoKTtcblxuXHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdFx0Z2hvc3RDdHgubW92ZVRvKHgsIHkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjdXJyZW50QmFzZVZhbHVlcy5wdXNoKHsgeDogeCwgeTogeVplcm9Ub1BpeGVsIC0gb2Zmc2V0IH0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50SW5kZXhlc1tkYXRhUG9pbnRYXSA+PSAwKSB7XG5cdFx0XHRcdFx0dmFyIGlkID0gZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbZGF0YVNlcmllcy5kYXRhUG9pbnRJbmRleGVzW2RhdGFQb2ludFhdXTtcblx0XHRcdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSA9IHtcblx0XHRcdFx0XHRcdGlkOiBpZCwgb2JqZWN0VHlwZTogXCJkYXRhUG9pbnRcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXgsIGRhdGFQb2ludEluZGV4OiBkYXRhU2VyaWVzLmRhdGFQb2ludEluZGV4ZXNbZGF0YVBvaW50WF0sIHgxOiB4LCB5MTogeVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL1JlbmRlciBNYXJrZXJcblx0XHRcdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50SW5kZXhlc1tkYXRhUG9pbnRYXSA+PSAwICYmIGRhdGFQb2ludC5tYXJrZXJTaXplICE9PSAwKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGFQb2ludC5tYXJrZXJTaXplID4gMCB8fCBkYXRhU2VyaWVzLm1hcmtlclNpemUgPiAwKSB7XG5cblx0XHRcdFx0XHRcdHZhciBtYXJrZXJQcm9wcyA9IGRhdGFTZXJpZXMuZ2V0TWFya2VyUHJvcGVydGllcyhpLCB4LCB5LCBjdHgpO1xuXHRcdFx0XHRcdFx0bWFya2Vycy5wdXNoKG1hcmtlclByb3BzKTtcblxuXHRcdFx0XHRcdFx0Ly9pZiAoIWRhdGFTZXJpZXMubWF4V2lkdGhJblggfHwgbWFya2VyUHJvcHMuc2l6ZSA+IGRhdGFTZXJpZXMubWF4V2lkdGhJblgpIHtcblx0XHRcdFx0XHRcdC8vXHRkYXRhU2VyaWVzLm1heFdpZHRoSW5YID0gbWFya2VyUHJvcHMuc2l6ZSAvIChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgPiAxID8gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0IC0gMSA6IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCk7XG5cdFx0XHRcdFx0XHQvL31cblxuXHRcdFx0XHRcdFx0bWFya2VyQ29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGlkKTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0eDogeCwgeTogeSwgY3R4OiBnaG9zdEN0eCxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBtYXJrZXJQcm9wcy50eXBlLFxuXHRcdFx0XHRcdFx0XHRcdHNpemU6IG1hcmtlclByb3BzLnNpemUsXG5cdFx0XHRcdFx0XHRcdFx0Y29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlckNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJUaGlja25lc3M6IG1hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzc1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50LmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludC5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcikge1xuXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwic3RhY2tlZEFyZWFcIixcblx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50LFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHlcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IGRhdGFQb2ludHNbaV0ueSA+PSAwID8gMSA6IC0xLFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzID4gMClcblx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXG5cdFx0XHR3aGlsZSAoY3VycmVudEJhc2VWYWx1ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR2YXIgcG9pbnQgPSBjdXJyZW50QmFzZVZhbHVlcy5wb3AoKTtcblx0XHRcdFx0Y3R4LmxpbmVUbyhwb2ludC54LCBwb2ludC55KTtcblxuXHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0Z2hvc3RDdHgubGluZVRvKHBvaW50LngsIHBvaW50LnkpO1xuXHRcdFx0fVxuXG5cdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cblx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IGRhdGFTZXJpZXMuZmlsbE9wYWNpdHk7XG5cdFx0XHRjdHguZmlsbCgpO1xuXHRcdFx0Y3R4Lmdsb2JhbEFscGhhID0gMTtcblxuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0Y3R4Lm1vdmVUbyh4LCB5KTtcblxuXHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdGdob3N0Q3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHRnaG9zdEN0eC5maWxsKCk7XG5cdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oeCwgeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIChkYXRhU2VyaWVzLmRhdGFQb2ludEluZGV4ZXMpO1xuXHR9XG5cblx0UmVuZGVySGVscGVyLmRyYXdNYXJrZXJzKG1hcmtlcnMpO1xuXG5cblx0Y3R4LnJlc3RvcmUoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0Z2hvc3RDdHgucmVzdG9yZSgpO1xuXG5cdC8vc291cmNlIGFuZCBkZXN0IHdvdWxkIGJlIHNhbWUgd2hlbiBhbmltYXRpb24gaXMgbm90IGVuYWJsZWRcblx0dmFyIGFuaW1hdGlvbkluZm8gPSB7XG5cdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLnhDbGlwQW5pbWF0aW9uLCBlYXNpbmdGdW5jdGlvbjogQW5pbWF0aW9uSGVscGVyLmVhc2luZy5saW5lYXIsIGFuaW1hdGlvbkJhc2U6IDBcblx0fTtcblx0cmV0dXJuIGFuaW1hdGlvbkluZm87XG59XG4iLCJcbmltcG9ydCBSZW5kZXJIZWxwZXIgZnJvbSAnLi4vaGVscGVycy9yZW5kZXInO1xuaW1wb3J0IEFuaW1hdGlvbkhlbHBlciBmcm9tICcuLi9oZWxwZXJzL2FuaW1hdG9yJztcbmltcG9ydCB7aXNDYW52YXNTdXBwb3J0ZWQsIGNvbXBhcmVOdW1iZXJzLCBpbnRUb0hleENvbG9yU3RyaW5nLCBnZXRMaW5lRGFzaEFycmF5fSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocGxvdFVuaXQpIHtcblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblxuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGNvbG9yID0gbnVsbDtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXHR2YXIgbWFya2VycyA9IFtdO1xuXG5cdHZhciBvZmZzZXRZID0gW107XG5cblx0dmFyIGFsbFhWYWx1ZXMgPSBbXTtcblx0Ly92YXIgb2Zmc2V0TmVnYXRpdmVZID0gW107XG5cblx0dmFyIGkgPSAwLCB4LCB5O1xuXHR2YXIgZGF0YVBvaW50WDsgLy9Vc2VkIHNvIHRoYXQgd2hlbiBkYXRhUG9pbnQueCBpcyBhIERhdGVUaW1lIHZhbHVlLCBpdCBkb2Vzbid0IGdldCBjb252ZXJ0ZWQgdG8gbnVtYmVyIGV2ZXJ5dGltZSBpdCBpcyBhY2Nlc3NlZC5cblxuXG5cdC8vdmFyIHlaZXJvVG9QaXhlbCA9IChheGlzWVByb3BzLnkyIC0gYXhpc1lQcm9wcy5oZWlnaHQgLyByYW5nZVkgKiBNYXRoLmFicygwIC0gcGxvdFVuaXQuYXhpc1kudmlld3BvcnRNaW5pbXVtKSArIC41KSA8PCAwO1xuXHR2YXIgeVplcm9Ub1BpeGVsID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICgwIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkpIDw8IDA7XG5cblx0dmFyIG1heEJhcldpZHRoID0gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA/IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggOiB0aGlzLndpZHRoICogLjE1IDw8IDA7XG5cdHZhciB4TWluRGlmZiA9IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLm1pbkRpZmY7XG5cdHZhciBiYXJXaWR0aCA9ICgoKHBsb3RBcmVhLndpZHRoIC8gTWF0aC5hYnMocGxvdFVuaXQuYXhpc1gudmlld3BvcnRNYXhpbXVtIC0gcGxvdFVuaXQuYXhpc1gudmlld3BvcnRNaW5pbXVtKSkgKiBNYXRoLmFicyh4TWluRGlmZikpICogLjkpIDw8IDA7XG5cblx0dmFyIGdob3N0Q3R4ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4O1xuXG5cdGN0eC5zYXZlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdGdob3N0Q3R4LnNhdmUoKTtcblxuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRnaG9zdEN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0Z2hvc3RDdHguY2xpcCgpO1xuXHR9XG5cblx0dmFyIHhWYWx1ZVByZXNlbnQgPSBbXTtcblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXG5cdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cdFx0dmFyIHhWYWx1ZTtcblxuXHRcdGRhdGFTZXJpZXMuZGF0YVBvaW50SW5kZXhlcyA9IFtdO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHhWYWx1ZSA9IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lID8gZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKSA6IGRhdGFQb2ludHNbaV0ueDtcblx0XHRcdGRhdGFTZXJpZXMuZGF0YVBvaW50SW5kZXhlc1t4VmFsdWVdID0gaTtcblxuXHRcdFx0aWYgKCF4VmFsdWVQcmVzZW50W3hWYWx1ZV0pIHtcblx0XHRcdFx0YWxsWFZhbHVlcy5wdXNoKHhWYWx1ZSk7XG5cdFx0XHRcdHhWYWx1ZVByZXNlbnRbeFZhbHVlXSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0YWxsWFZhbHVlcy5zb3J0KGNvbXBhcmVOdW1iZXJzKTtcblx0fVxuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblxuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblxuXG5cdFx0dmFyIHNlcmllc0lkID0gZGF0YVNlcmllcy5pZDtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW3Nlcmllc0lkXSA9IHtcblx0XHRcdG9iamVjdFR5cGU6IFwiZGF0YVNlcmllc1wiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleFxuXHRcdH07XG5cdFx0dmFyIGhleENvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhzZXJpZXNJZCk7XG5cdFx0Z2hvc3RDdHguZmlsbFN0eWxlID0gaGV4Q29sb3I7XG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPT0gMSlcblx0XHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cblx0XHRpZiAoYmFyV2lkdGggPCAxKVxuXHRcdFx0YmFyV2lkdGggPSAxO1xuXHRcdGVsc2UgaWYgKGJhcldpZHRoID4gbWF4QmFyV2lkdGgpXG5cdFx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoO1xuXG5cdFx0dmFyIGN1cnJlbnRCYXNlVmFsdWVzID0gW107XG5cblx0XHRpZiAoYWxsWFZhbHVlcy5sZW5ndGggPiAwKSB7XG5cblx0XHRcdGNvbG9yID0gZGF0YVNlcmllcy5fY29sb3JTZXRbaSAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cdFx0XHQvL2N0eC5zdHJva2VTdHlsZSA9IFwicmVkXCI7XG5cdFx0XHRjdHguZmlsbFN0eWxlID0gY29sb3I7XG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcblx0XHRcdGN0eC5saW5lV2lkdGggPSBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3M7XG5cblx0XHRcdGlmIChjdHguc2V0TGluZURhc2gpIHtcblx0XHRcdFx0Y3R4LnNldExpbmVEYXNoKGdldExpbmVEYXNoQXJyYXkoZGF0YVNlcmllcy5saW5lRGFzaFR5cGUsIGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcykpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgYmV2ZWxFbmFibGVkID0gKGJhcldpZHRoID4gNSkgPyBmYWxzZSA6IGZhbHNlO1xuXG5cdFx0XHQvL2N0eC5zdHJva2VTdHlsZSA9IFwiIzQ1NzJBNyBcIjtcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGFsbFhWYWx1ZXMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRYID0gYWxsWFZhbHVlc1tpXTtcblx0XHRcdFx0dmFyIGRhdGFQb2ludCA9IG51bGw7XG5cblx0XHRcdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50SW5kZXhlc1tkYXRhUG9pbnRYXSA+PSAwKVxuXHRcdFx0XHRcdGRhdGFQb2ludCA9IGRhdGFQb2ludHNbZGF0YVNlcmllcy5kYXRhUG9pbnRJbmRleGVzW2RhdGFQb2ludFhdXTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdGRhdGFQb2ludCA9IHtcblx0XHRcdFx0XHRcdHg6IGRhdGFQb2ludFgsIHk6IDBcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZW9mIChkYXRhUG9pbnQueSkgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0dmFyIHlQZXJjZW50O1xuXHRcdFx0XHRpZiAocGxvdFVuaXQuZGF0YVBvaW50WVN1bXNbZGF0YVBvaW50WF0gIT09IDApXG5cdFx0XHRcdFx0eVBlcmNlbnQgPSBkYXRhUG9pbnQueSAvIHBsb3RVbml0LmRhdGFQb2ludFlTdW1zW2RhdGFQb2ludFhdICogMTAwO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0eVBlcmNlbnQgPSAwO1xuXG5cdFx0XHRcdHZhciB4ID0gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRYIC0gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0dmFyIHkgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKHlQZXJjZW50IC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkpO1xuXG5cdFx0XHRcdHZhciBvZmZzZXQgPSBvZmZzZXRZW2RhdGFQb2ludFhdID8gb2Zmc2V0WVtkYXRhUG9pbnRYXSA6IDA7XG5cblx0XHRcdFx0eSA9IHkgLSBvZmZzZXQ7XG5cdFx0XHRcdGN1cnJlbnRCYXNlVmFsdWVzLnB1c2goeyB4OiB4LCB5OiB5WmVyb1RvUGl4ZWwgLSBvZmZzZXQgfSk7XG5cdFx0XHRcdG9mZnNldFlbZGF0YVBvaW50WF0gPSB5WmVyb1RvUGl4ZWwgLSB5O1xuXG5cdFx0XHRcdGlmIChpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSkge1xuXHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRjdHgubW92ZVRvKHgsIHkpO1xuXG5cdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdGdob3N0Q3R4Lm1vdmVUbyh4LCB5KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyh4LCB5KTtcblxuXHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmxpbmVUbyh4LCB5KTtcblxuXHRcdFx0XHRcdGlmIChpICUgMjUwID09IDApIHtcblxuXHRcdFx0XHRcdFx0aWYgKGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcyA+IDApXG5cdFx0XHRcdFx0XHRcdGN0eC5zdHJva2UoKTtcblxuXHRcdFx0XHRcdFx0d2hpbGUgKGN1cnJlbnRCYXNlVmFsdWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0dmFyIHBvaW50ID0gY3VycmVudEJhc2VWYWx1ZXMucG9wKCk7XG5cdFx0XHRcdFx0XHRcdGN0eC5saW5lVG8ocG9pbnQueCwgcG9pbnQueSk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdFx0XHRcdGdob3N0Q3R4LmxpbmVUbyhwb2ludC54LCBwb2ludC55KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXG5cdFx0XHRcdFx0XHRjdHguZ2xvYmFsQWxwaGEgPSBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5O1xuXHRcdFx0XHRcdFx0Y3R4LmZpbGwoKTtcblx0XHRcdFx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IDE7XG5cblx0XHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdGN0eC5tb3ZlVG8oeCwgeSk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5jbG9zZVBhdGgoKTtcblx0XHRcdFx0XHRcdFx0Z2hvc3RDdHguZmlsbCgpO1xuXHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdFx0Z2hvc3RDdHgubW92ZVRvKHgsIHkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjdXJyZW50QmFzZVZhbHVlcy5wdXNoKHsgeDogeCwgeTogeVplcm9Ub1BpeGVsIC0gb2Zmc2V0IH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50SW5kZXhlc1tkYXRhUG9pbnRYXSA+PSAwKSB7XG5cdFx0XHRcdFx0dmFyIGlkID0gZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbZGF0YVNlcmllcy5kYXRhUG9pbnRJbmRleGVzW2RhdGFQb2ludFhdXTtcblx0XHRcdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSA9IHtcblx0XHRcdFx0XHRcdGlkOiBpZCwgb2JqZWN0VHlwZTogXCJkYXRhUG9pbnRcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXgsIGRhdGFQb2ludEluZGV4OiBkYXRhU2VyaWVzLmRhdGFQb2ludEluZGV4ZXNbZGF0YVBvaW50WF0sIHgxOiB4LCB5MTogeVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL1JlbmRlciBNYXJrZXJcblx0XHRcdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50SW5kZXhlc1tkYXRhUG9pbnRYXSA+PSAwICYmIGRhdGFQb2ludC5tYXJrZXJTaXplICE9PSAwKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGFQb2ludC5tYXJrZXJTaXplID4gMCB8fCBkYXRhU2VyaWVzLm1hcmtlclNpemUgPiAwKSB7XG5cdFx0XHRcdFx0XHR2YXIgbWFya2VyUHJvcHMgPSBkYXRhU2VyaWVzLmdldE1hcmtlclByb3BlcnRpZXMoaSwgeCwgeSwgY3R4KTtcblx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaChtYXJrZXJQcm9wcyk7XG5cblx0XHRcdFx0XHRcdC8vaWYgKCFkYXRhU2VyaWVzLm1heFdpZHRoSW5YIHx8IG1hcmtlclByb3BzLnNpemUgPiBkYXRhU2VyaWVzLm1heFdpZHRoSW5YKSB7XG5cdFx0XHRcdFx0XHQvL1x0ZGF0YVNlcmllcy5tYXhXaWR0aEluWCA9IG1hcmtlclByb3BzLnNpemUgLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXHRcdFx0XHRcdFx0Ly99XG5cblx0XHRcdFx0XHRcdG1hcmtlckNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0XHRtYXJrZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHksIGN0eDogZ2hvc3RDdHgsXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogbWFya2VyUHJvcHMudHlwZSxcblx0XHRcdFx0XHRcdFx0XHRzaXplOiBtYXJrZXJQcm9wcy5zaXplLFxuXHRcdFx0XHRcdFx0XHRcdGNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJDb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyVGhpY2tuZXNzOiBtYXJrZXJQcm9wcy5ib3JkZXJUaGlja25lc3Ncblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludC5pbmRleExhYmVsIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbCB8fCBkYXRhUG9pbnQuaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpIHtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcInN0YWNrZWRBcmVhMTAwXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludCxcblx0XHRcdFx0XHRcdGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsXG5cdFx0XHRcdFx0XHRwb2ludDoge1xuXHRcdFx0XHRcdFx0XHR4OiB4LCB5OiB5XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkYXRhUG9pbnRzW2ldLnkgPj0gMCA/IDEgOiAtMSxcblx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcyA+IDApXG5cdFx0XHRcdGN0eC5zdHJva2UoKTtcblxuXHRcdFx0d2hpbGUgKGN1cnJlbnRCYXNlVmFsdWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dmFyIHBvaW50ID0gY3VycmVudEJhc2VWYWx1ZXMucG9wKCk7XG5cdFx0XHRcdGN0eC5saW5lVG8ocG9pbnQueCwgcG9pbnQueSk7XG5cblx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdGdob3N0Q3R4LmxpbmVUbyhwb2ludC54LCBwb2ludC55KTtcblx0XHRcdH1cblxuXHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXG5cdFx0XHRjdHguZ2xvYmFsQWxwaGEgPSBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5O1xuXHRcdFx0Y3R4LmZpbGwoKTtcblx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IDE7XG5cblx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdGN0eC5tb3ZlVG8oeCwgeSk7XG5cblx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRnaG9zdEN0eC5jbG9zZVBhdGgoKTtcblx0XHRcdFx0Z2hvc3RDdHguZmlsbCgpO1xuXHRcdFx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0Z2hvc3RDdHgubW92ZVRvKHgsIHkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGRlbGV0ZSAoZGF0YVNlcmllcy5kYXRhUG9pbnRJbmRleGVzKTtcblx0fVxuXG5cdFJlbmRlckhlbHBlci5kcmF3TWFya2VycyhtYXJrZXJzKTtcblxuXHRjdHgucmVzdG9yZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRnaG9zdEN0eC5yZXN0b3JlKCk7XG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uSW5mbyA9IHtcblx0XHRzb3VyY2U6IGN0eCwgZGVzdDogdGhpcy5wbG90QXJlYS5jdHgsIGFuaW1hdGlvbkNhbGxiYWNrOiBBbmltYXRpb25IZWxwZXIueENsaXBBbmltYXRpb24sIGVhc2luZ0Z1bmN0aW9uOiBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmxpbmVhciwgYW5pbWF0aW9uQmFzZTogMFxuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cbiIsIlxuaW1wb3J0IHtpc0NhbnZhc1N1cHBvcnRlZH0gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXHR2YXIgY3R4ID0gcGxvdFVuaXQudGFyZ2V0Q2FudmFzQ3R4IHx8IHRoaXMucGxvdEFyZWEuY3R4O1xuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGNvbG9yID0gbnVsbDtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdHZhciBvZmZzZXRQb3NpdGl2ZVkgPSBbXTtcblx0dmFyIG9mZnNldE5lZ2F0aXZlWSA9IFtdO1xuXG5cdHZhciBpID0gMCwgeCwgeTtcblx0dmFyIGRhdGFQb2ludFg7IC8vVXNlZCBzbyB0aGF0IHdoZW4gZGF0YVBvaW50LnggaXMgYSBEYXRlVGltZSB2YWx1ZSwgaXQgZG9lc24ndCBnZXQgY29udmVydGVkIHRvIG51bWJlciBldmVyeXRpbWUgaXQgaXMgYWNjZXNzZWQuXG5cblx0Ly92YXIgeVplcm9Ub1BpeGVsID0gKGF4aXNZUHJvcHMueTIgLSBheGlzWVByb3BzLmhlaWdodCAvIHJhbmdlWSAqIE1hdGguYWJzKDAgLSBwbG90VW5pdC5heGlzWS52aWV3cG9ydE1pbmltdW0pICsgLjUpIDw8IDA7XG5cdHZhciB5WmVyb1RvUGl4ZWwgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKDAgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSkgPDwgMDtcblxuXHR2YXIgbWF4QmFyV2lkdGggPSB0aGlzLmRhdGFQb2ludE1heFdpZHRoID8gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA6IHRoaXMuaGVpZ2h0ICogLjE1IDw8IDA7XG5cdHZhciB4TWluRGlmZiA9IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLm1pbkRpZmY7XG5cdHZhciBiYXJXaWR0aCA9ICgoKHBsb3RBcmVhLmhlaWdodCAvIE1hdGguYWJzKHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWF4aW11bSAtIHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkpICogTWF0aC5hYnMoeE1pbkRpZmYpKSAvIHBsb3RVbml0LnBsb3RUeXBlLnBsb3RVbml0cy5sZW5ndGggKiAuOSkgPDwgMDtcblxuXHRpZiAoYmFyV2lkdGggPiBtYXhCYXJXaWR0aClcblx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoO1xuXHRlbHNlIGlmICh4TWluRGlmZiA9PT0gSW5maW5pdHkpIHtcblx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoO1xuXHR9IGVsc2UgaWYgKGJhcldpZHRoIDwgMSlcblx0XHRiYXJXaWR0aCA9IDE7XG5cblx0Y3R4LnNhdmUoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnNhdmUoKTtcblxuXHRjdHguYmVnaW5QYXRoKCk7XG5cdGN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdGN0eC5jbGlwKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHguY2xpcCgpO1xuXHR9XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXG5cdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblx0XHR2YXIgZGF0YVBvaW50cyA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cztcblx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXG5cdFx0Ly9kYXRhU2VyaWVzLm1heFdpZHRoSW5YID0gYmFyV2lkdGggLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXG5cdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly92YXIgeHkgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPblBsb3RBcmVhKGRhdGFQb2ludHNbMF0ueCwgZGF0YVBvaW50c1swXS55KTtcblxuXHRcdFx0dmFyIGJldmVsRW5hYmxlZCA9IChiYXJXaWR0aCA+IDUpICYmIGRhdGFTZXJpZXMuYmV2ZWxFbmFibGVkID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBcIiM0NTcyQTcgXCI7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lID8gZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKSA6IGRhdGFQb2ludHNbaV0ueDtcblxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZW9mIChkYXRhUG9pbnRzW2ldLnkpICE9PSBcIm51bWJlclwiKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHkgPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHQvL3ggPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHggPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pKTtcblxuXHRcdFx0XHQvL3ZhciB4MSA9IHggLSAocGxvdFVuaXQucGxvdFR5cGUucGxvdFVuaXRzLmxlbmd0aCAqIGJhcldpZHRoIC8gMikgKyAocGxvdFVuaXQuaW5kZXggKiBiYXJXaWR0aCkgPDwgMDtcblxuXHRcdFx0XHR2YXIgeTEgPSB5IC0gKHBsb3RVbml0LnBsb3RUeXBlLnBsb3RVbml0cy5sZW5ndGggKiBiYXJXaWR0aCAvIDIpICsgKHBsb3RVbml0LmluZGV4ICogYmFyV2lkdGgpIDw8IDA7XG5cdFx0XHRcdHZhciB5MiA9IHkxICsgYmFyV2lkdGggPDwgMDtcblx0XHRcdFx0dmFyIHgxO1xuXHRcdFx0XHR2YXIgeDI7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ueSA+PSAwKSB7XG5cdFx0XHRcdFx0dmFyIG9mZnNldCA9IG9mZnNldFBvc2l0aXZlWVtkYXRhUG9pbnRYXSA/IG9mZnNldFBvc2l0aXZlWVtkYXRhUG9pbnRYXSA6IDA7XG5cblx0XHRcdFx0XHR4MSA9IHlaZXJvVG9QaXhlbCArIG9mZnNldDtcblx0XHRcdFx0XHR4MiA9IHggKyBvZmZzZXQ7XG5cblx0XHRcdFx0XHRvZmZzZXRQb3NpdGl2ZVlbZGF0YVBvaW50WF0gPSBvZmZzZXQgKyAoeDIgLSB4MSk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgb2Zmc2V0ID0gb2Zmc2V0TmVnYXRpdmVZW2RhdGFQb2ludFhdID8gb2Zmc2V0TmVnYXRpdmVZW2RhdGFQb2ludFhdIDogMDtcblxuXHRcdFx0XHRcdHgxID0geCAtIG9mZnNldDtcblx0XHRcdFx0XHR4MiA9IHlaZXJvVG9QaXhlbCAtIG9mZnNldDtcblxuXHRcdFx0XHRcdG9mZnNldE5lZ2F0aXZlWVtkYXRhUG9pbnRYXSA9IG9mZnNldCArICh4MiAtIHgxKTtcblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0Y29sb3IgPSBkYXRhUG9pbnRzW2ldLmNvbG9yID8gZGF0YVBvaW50c1tpXS5jb2xvciA6IGRhdGFTZXJpZXMuX2NvbG9yU2V0W2kgJSBkYXRhU2VyaWVzLl9jb2xvclNldC5sZW5ndGhdO1xuXHRcdFx0XHRkcmF3UmVjdChjdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgYmV2ZWxFbmFibGVkLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5KTtcblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5MlxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRkcmF3UmVjdCh0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwic3RhY2tlZEJhclwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnRzW2ldLFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IGRhdGFQb2ludHNbaV0ueSA+PSAwID8geDIgOiB4MSwgeTogeVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55ID49IDAgPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRib3VuZHM6IHtcblx0XHRcdFx0XHRcdFx0eDE6IE1hdGgubWluKHgxLCB4MiksIHkxOiB5MSwgeDI6IE1hdGgubWF4KHgxLCB4MiksIHkyOiB5MlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGN0eC5yZXN0b3JlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZXN0b3JlKCk7XG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uQmFzZSA9IE1hdGgubWF4KHlaZXJvVG9QaXhlbCwgcGxvdFVuaXQuYXhpc1guYm91bmRpbmdSZWN0LngyKTtcblx0dmFyIGFuaW1hdGlvbkluZm8gPSB7XG5cdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLnhTY2FsZUFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcuZWFzZU91dFF1YXJ0LCBhbmltYXRpb25CYXNlOiBhbmltYXRpb25CYXNlXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuIiwiXG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cdHZhciBjdHggPSBwbG90VW5pdC50YXJnZXRDYW52YXNDdHggfHwgdGhpcy5wbG90QXJlYS5jdHg7XG5cdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgY29sb3IgPSBudWxsO1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cblx0dmFyIG9mZnNldFBvc2l0aXZlWSA9IFtdO1xuXHR2YXIgb2Zmc2V0TmVnYXRpdmVZID0gW107XG5cblx0dmFyIGkgPSAwLCB4LCB5O1xuXHR2YXIgZGF0YVBvaW50WDsgLy9Vc2VkIHNvIHRoYXQgd2hlbiBkYXRhUG9pbnQueCBpcyBhIERhdGVUaW1lIHZhbHVlLCBpdCBkb2Vzbid0IGdldCBjb252ZXJ0ZWQgdG8gbnVtYmVyIGV2ZXJ5dGltZSBpdCBpcyBhY2Nlc3NlZC5cblxuXHQvL3ZhciB5WmVyb1RvUGl4ZWwgPSAoYXhpc1lQcm9wcy55MiAtIGF4aXNZUHJvcHMuaGVpZ2h0IC8gcmFuZ2VZICogTWF0aC5hYnMoMCAtIHBsb3RVbml0LmF4aXNZLnZpZXdwb3J0TWluaW11bSkgKyAuNSkgPDwgMDtcblx0dmFyIHlaZXJvVG9QaXhlbCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoMCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pKSA8PCAwO1xuXG5cdHZhciBtYXhCYXJXaWR0aCA9IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggPyB0aGlzLmRhdGFQb2ludE1heFdpZHRoIDogdGhpcy5oZWlnaHQgKiAuMTUgPDwgMDtcblx0dmFyIHhNaW5EaWZmID0gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8ubWluRGlmZjtcblx0dmFyIGJhcldpZHRoID0gKCgocGxvdEFyZWEuaGVpZ2h0IC8gTWF0aC5hYnMocGxvdFVuaXQuYXhpc1gudmlld3BvcnRNYXhpbXVtIC0gcGxvdFVuaXQuYXhpc1gudmlld3BvcnRNaW5pbXVtKSkgKiBNYXRoLmFicyh4TWluRGlmZikpIC8gcGxvdFVuaXQucGxvdFR5cGUucGxvdFVuaXRzLmxlbmd0aCAqIC45KSA8PCAwO1xuXG5cdGlmIChiYXJXaWR0aCA+IG1heEJhcldpZHRoKVxuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cdGVsc2UgaWYgKHhNaW5EaWZmID09PSBJbmZpbml0eSkge1xuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cdH0gZWxzZSBpZiAoYmFyV2lkdGggPCAxKVxuXHRcdGJhcldpZHRoID0gMTtcblxuXHRjdHguc2F2ZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHguc2F2ZSgpO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5jbGlwKCk7XG5cdH1cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXHRcdHZhciBpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IHRydWU7XG5cblx0XHQvL2RhdGFTZXJpZXMubWF4V2lkdGhJblggPSBiYXJXaWR0aCAvIChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgPiAxID8gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0IC0gMSA6IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCk7XG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL3ZhciB4eSA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uUGxvdEFyZWEoZGF0YVBvaW50c1swXS54LCBkYXRhUG9pbnRzWzBdLnkpO1xuXG5cdFx0XHR2YXIgYmV2ZWxFbmFibGVkID0gKGJhcldpZHRoID4gNSkgJiYgZGF0YVNlcmllcy5iZXZlbEVuYWJsZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IFwiIzQ1NzJBNyBcIjtcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54LmdldFRpbWUgPyBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50c1tpXS54O1xuXG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1pbiB8fCBkYXRhUG9pbnRYID4gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNYXgpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgKGRhdGFQb2ludHNbaV0ueSkgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0eSA9IChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50WCAtIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cblx0XHRcdFx0dmFyIHlQZXJjZW50O1xuXHRcdFx0XHRpZiAocGxvdFVuaXQuZGF0YVBvaW50WVN1bXNbZGF0YVBvaW50WF0gIT09IDApXG5cdFx0XHRcdFx0eVBlcmNlbnQgPSBkYXRhUG9pbnRzW2ldLnkgLyBwbG90VW5pdC5kYXRhUG9pbnRZU3Vtc1tkYXRhUG9pbnRYXSAqIDEwMDtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHlQZXJjZW50ID0gMDtcblxuXHRcdFx0XHQvL3ggPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKHlQZXJjZW50IC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0eCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoeVBlcmNlbnQgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSk7XG5cblx0XHRcdFx0dmFyIHkxID0geSAtIChwbG90VW5pdC5wbG90VHlwZS5wbG90VW5pdHMubGVuZ3RoICogYmFyV2lkdGggLyAyKSArIChwbG90VW5pdC5pbmRleCAqIGJhcldpZHRoKSA8PCAwO1xuXHRcdFx0XHR2YXIgeTIgPSB5MSArIGJhcldpZHRoIDw8IDA7XG5cdFx0XHRcdHZhciB4MTtcblx0XHRcdFx0dmFyIHgyO1xuXG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ueSA+PSAwKSB7XG5cdFx0XHRcdFx0dmFyIG9mZnNldCA9IG9mZnNldFBvc2l0aXZlWVtkYXRhUG9pbnRYXSA/IG9mZnNldFBvc2l0aXZlWVtkYXRhUG9pbnRYXSA6IDA7XG5cblx0XHRcdFx0XHR4MSA9IHlaZXJvVG9QaXhlbCArIG9mZnNldDtcblx0XHRcdFx0XHR4MiA9IHggKyBvZmZzZXQ7XG5cblx0XHRcdFx0XHRvZmZzZXRQb3NpdGl2ZVlbZGF0YVBvaW50WF0gPSBvZmZzZXQgKyAoeDIgLSB4MSk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgb2Zmc2V0ID0gb2Zmc2V0TmVnYXRpdmVZW2RhdGFQb2ludFhdID8gb2Zmc2V0TmVnYXRpdmVZW2RhdGFQb2ludFhdIDogMDtcblxuXHRcdFx0XHRcdHgxID0geCAtIG9mZnNldDtcblx0XHRcdFx0XHR4MiA9IHlaZXJvVG9QaXhlbCAtIG9mZnNldDtcblxuXHRcdFx0XHRcdG9mZnNldE5lZ2F0aXZlWVtkYXRhUG9pbnRYXSA9IG9mZnNldCArICh4MiAtIHgxKTtcblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0Y29sb3IgPSBkYXRhUG9pbnRzW2ldLmNvbG9yID8gZGF0YVBvaW50c1tpXS5jb2xvciA6IGRhdGFTZXJpZXMuX2NvbG9yU2V0W2kgJSBkYXRhU2VyaWVzLl9jb2xvclNldC5sZW5ndGhdO1xuXHRcdFx0XHRkcmF3UmVjdChjdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgYmV2ZWxFbmFibGVkLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5KTtcblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5MlxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRkcmF3UmVjdCh0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwic3RhY2tlZEJhcjEwMFwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnRzW2ldLFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IGRhdGFQb2ludHNbaV0ueSA+PSAwID8geDIgOiB4MSwgeTogeVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55ID49IDAgPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRib3VuZHM6IHtcblx0XHRcdFx0XHRcdFx0eDE6IE1hdGgubWluKHgxLCB4MiksIHkxOiB5MSwgeDI6IE1hdGgubWF4KHgxLCB4MiksIHkyOiB5MlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGN0eC5yZXN0b3JlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZXN0b3JlKCk7XG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uQmFzZSA9IE1hdGgubWF4KHlaZXJvVG9QaXhlbCwgcGxvdFVuaXQuYXhpc1guYm91bmRpbmdSZWN0LngyKTtcblx0dmFyIGFuaW1hdGlvbkluZm8gPSB7XG5cdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLnhTY2FsZUFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcuZWFzZU91dFF1YXJ0LCBhbmltYXRpb25CYXNlOiBhbmltYXRpb25CYXNlXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuIiwiXG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblx0dmFyIHRvdGFsRGF0YVNlcmllcyA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDtcblxuXHRpZiAodG90YWxEYXRhU2VyaWVzIDw9IDApXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBjb2xvciA9IG51bGw7XG5cblx0dmFyIHBsb3RBcmVhID0gdGhpcy5wbG90QXJlYTtcblxuXHR2YXIgb2Zmc2V0UG9zaXRpdmVZID0gW107XG5cdHZhciBvZmZzZXROZWdhdGl2ZVkgPSBbXTtcblxuXHR2YXIgaSA9IDAsIHgsIHk7XG5cdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgZXZlcnl0aW1lIGl0IGlzIGFjY2Vzc2VkLlxuXG5cdC8vdmFyIHlaZXJvVG9QaXhlbCA9IChheGlzWVByb3BzLnkyIC0gYXhpc1lQcm9wcy5oZWlnaHQgLyByYW5nZVkgKiBNYXRoLmFicygwIC0gcGxvdFVuaXQuYXhpc1kudmlld3BvcnRNaW5pbXVtKSArIC41KSA8PCAwO1xuXHR2YXIgeVplcm9Ub1BpeGVsID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICgwIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkpIDw8IDA7XG5cblx0dmFyIG1heEJhcldpZHRoID0gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA/IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggOiB0aGlzLndpZHRoICogLjE1IDw8IDA7XG5cdHZhciB4TWluRGlmZiA9IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLm1pbkRpZmY7XG5cdHZhciBiYXJXaWR0aCA9ICgoKHBsb3RBcmVhLndpZHRoIC8gTWF0aC5hYnMocGxvdFVuaXQuYXhpc1gudmlld3BvcnRNYXhpbXVtIC0gcGxvdFVuaXQuYXhpc1gudmlld3BvcnRNaW5pbXVtKSkgKiBNYXRoLmFicyh4TWluRGlmZikpIC8gcGxvdFVuaXQucGxvdFR5cGUucGxvdFVuaXRzLmxlbmd0aCAqIC45KSA8PCAwO1xuXG5cdGlmIChiYXJXaWR0aCA+IG1heEJhcldpZHRoKVxuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cdGVsc2UgaWYgKHhNaW5EaWZmID09PSBJbmZpbml0eSkge1xuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cdH0gZWxzZSBpZiAoYmFyV2lkdGggPCAxKVxuXHRcdGJhcldpZHRoID0gMTtcblxuXG5cblx0Y3R4LnNhdmUoKTtcblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5zYXZlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LmNsaXAoKTtcblx0fVxuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXHRcdHZhciBpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IHRydWU7XG5cblx0XHQvLyBSZWR1Y2luZyBwaXhlbFBlclVuaXQgYnkgMSBqdXN0IHRvIG92ZXJjb21lIGFueSBwcm9ibGVtcyBkdWUgdG8gcm91bmRpbmcgb2ZmIG9mIHBpeGVscy5cblx0XHQvL2RhdGFTZXJpZXMubWF4V2lkdGhJblggPSBiYXJXaWR0aCAvIChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgPiAxID8gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0IC0gMSA6IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCk7XG5cblxuXHRcdGlmIChkYXRhUG9pbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vdmFyIHh5ID0gdGhpcy5nZXRQaXhlbENvb3JkaW5hdGVzT25QbG90QXJlYShkYXRhUG9pbnRzWzBdLngsIGRhdGFQb2ludHNbMF0ueSk7XG5cblx0XHRcdHZhciBiZXZlbEVuYWJsZWQgPSAoYmFyV2lkdGggPiA1KSAmJiBkYXRhU2VyaWVzLmJldmVsRW5hYmxlZCA/IHRydWUgOiBmYWxzZTtcblxuXHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gXCIjNDU3MkE3IFwiO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSA/IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRzW2ldLng7XG5cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGVvZiAoZGF0YVBvaW50c1tpXS55KSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR4ID0gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRYIC0gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0eSA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55IC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkpO1xuXG5cdFx0XHRcdHZhciB4MSA9IHggLSAocGxvdFVuaXQucGxvdFR5cGUucGxvdFVuaXRzLmxlbmd0aCAqIGJhcldpZHRoIC8gMikgKyAocGxvdFVuaXQuaW5kZXggKiBiYXJXaWR0aCkgPDwgMDtcblx0XHRcdFx0dmFyIHgyID0geDEgKyBiYXJXaWR0aCA8PCAwO1xuXHRcdFx0XHR2YXIgeTE7XG5cdFx0XHRcdHZhciB5MjtcblxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLnkgPj0gMCkge1xuXHRcdFx0XHRcdHZhciBvZmZzZXQgPSBvZmZzZXRQb3NpdGl2ZVlbZGF0YVBvaW50WF0gPyBvZmZzZXRQb3NpdGl2ZVlbZGF0YVBvaW50WF0gOiAwO1xuXG5cdFx0XHRcdFx0eTEgPSB5IC0gb2Zmc2V0O1xuXHRcdFx0XHRcdHkyID0geVplcm9Ub1BpeGVsIC0gb2Zmc2V0O1xuXG5cdFx0XHRcdFx0b2Zmc2V0UG9zaXRpdmVZW2RhdGFQb2ludFhdID0gb2Zmc2V0ICsgKHkyIC0geTEpO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIG9mZnNldCA9IG9mZnNldE5lZ2F0aXZlWVtkYXRhUG9pbnRYXSA/IG9mZnNldE5lZ2F0aXZlWVtkYXRhUG9pbnRYXSA6IDA7XG5cblx0XHRcdFx0XHR5MiA9IHkgKyBvZmZzZXQ7XG5cdFx0XHRcdFx0eTEgPSB5WmVyb1RvUGl4ZWwgKyBvZmZzZXQ7XG5cblx0XHRcdFx0XHRvZmZzZXROZWdhdGl2ZVlbZGF0YVBvaW50WF0gPSBvZmZzZXQgKyAoeTIgLSB5MSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb2xvciA9IGRhdGFQb2ludHNbaV0uY29sb3IgPyBkYXRhUG9pbnRzW2ldLmNvbG9yIDogZGF0YVNlcmllcy5fY29sb3JTZXRbaSAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cblx0XHRcdFx0ZHJhd1JlY3QoY3R4LCB4MSwgeTEsIHgyLCB5MiwgY29sb3IsIDAsIG51bGwsIGJldmVsRW5hYmxlZCAmJiAoZGF0YVBvaW50c1tpXS55ID49IDApLCAoZGF0YVBvaW50c1tpXS55IDwgMCkgJiYgYmV2ZWxFbmFibGVkLCBmYWxzZSwgZmFsc2UsIGRhdGFTZXJpZXMuZmlsbE9wYWNpdHkpO1xuXG5cdFx0XHRcdC8vaWYgKGRhdGFTZXJpZXMubWFya2VyVHlwZSAmJiBkYXRhU2VyaWVzLm1hcmtlclNpemUgPiAwKSB7XG5cdFx0XHRcdC8vICAgIFJlbmRlckhlbHBlci5kcmF3TWFya2VyKHgxICsgKHgyIC0geDEpLzIsIHkxLCBjdHgsIGRhdGFTZXJpZXMubWFya2VyVHlwZSwgZGF0YVNlcmllcy5tYXJrZXJTaXplLCBjb2xvciwgZGF0YVNlcmllcy5tYXJrZXJCb3JkZXJDb2xvciwgZGF0YVNlcmllcy5tYXJrZXJCb3JkZXJUaGlja25lc3MgPyBkYXRhU2VyaWVzLm1hcmtlckJvcmRlclRoaWNrbmVzcyA6IDEpO1xuXHRcdFx0XHQvL31cblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5MlxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRkcmF3UmVjdCh0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbCB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWwgfHwgZGF0YVBvaW50c1tpXS5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcikge1xuXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwic3RhY2tlZENvbHVtblwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnRzW2ldLFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IHgsIHk6IGRhdGFQb2ludHNbaV0ueSA+PSAwID8geTEgOiB5MlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55ID49IDAgPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRib3VuZHM6IHtcblx0XHRcdFx0XHRcdFx0eDE6IHgxLCB5MTogTWF0aC5taW4oeTEsIHkyKSwgeDI6IHgyLCB5MjogTWF0aC5tYXgoeTEsIHkyKVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjdHgucmVzdG9yZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVzdG9yZSgpO1xuXG5cdC8vc291cmNlIGFuZCBkZXN0IHdvdWxkIGJlIHNhbWUgd2hlbiBhbmltYXRpb24gaXMgbm90IGVuYWJsZWRcblx0dmFyIGFuaW1hdGlvbkJhc2UgPSBNYXRoLm1pbih5WmVyb1RvUGl4ZWwsIHBsb3RVbml0LmF4aXNZLmJvdW5kaW5nUmVjdC55Mik7XG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci55U2NhbGVBbmltYXRpb24sIGVhc2luZ0Z1bmN0aW9uOiBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmVhc2VPdXRRdWFydCwgYW5pbWF0aW9uQmFzZTogYW5pbWF0aW9uQmFzZVxuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cbiIsIlxuaW1wb3J0IHtpc0NhbnZhc1N1cHBvcnRlZH0gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXHR2YXIgY3R4ID0gcGxvdFVuaXQudGFyZ2V0Q2FudmFzQ3R4IHx8IHRoaXMucGxvdEFyZWEuY3R4O1xuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGNvbG9yID0gbnVsbDtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdHZhciBvZmZzZXRQb3NpdGl2ZVkgPSBbXTtcblx0dmFyIG9mZnNldE5lZ2F0aXZlWSA9IFtdO1xuXG5cdHZhciBpID0gMCwgeCwgeTtcblx0dmFyIGRhdGFQb2ludFg7IC8vVXNlZCBzbyB0aGF0IHdoZW4gZGF0YVBvaW50LnggaXMgYSBEYXRlVGltZSB2YWx1ZSwgaXQgZG9lc24ndCBnZXQgY29udmVydGVkIHRvIG51bWJlciBldmVyeXRpbWUgaXQgaXMgYWNjZXNzZWQuXG5cblx0Ly92YXIgeVplcm9Ub1BpeGVsID0gKGF4aXNZUHJvcHMueTIgLSBheGlzWVByb3BzLmhlaWdodCAvIHJhbmdlWSAqIE1hdGguYWJzKDAgLSBwbG90VW5pdC5heGlzWS52aWV3cG9ydE1pbmltdW0pICsgLjUpIDw8IDA7XG5cdHZhciB5WmVyb1RvUGl4ZWwgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKDAgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSkgPDwgMDtcblxuXHR2YXIgbWF4QmFyV2lkdGggPSB0aGlzLmRhdGFQb2ludE1heFdpZHRoID8gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA6IHRoaXMud2lkdGggKiAuMTUgPDwgMDtcblx0dmFyIHhNaW5EaWZmID0gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8ubWluRGlmZjtcblx0dmFyIGJhcldpZHRoID0gKCgocGxvdEFyZWEud2lkdGggLyBNYXRoLmFicyhwbG90VW5pdC5heGlzWC52aWV3cG9ydE1heGltdW0gLSBwbG90VW5pdC5heGlzWC52aWV3cG9ydE1pbmltdW0pKSAqIE1hdGguYWJzKHhNaW5EaWZmKSkgLyBwbG90VW5pdC5wbG90VHlwZS5wbG90VW5pdHMubGVuZ3RoICogLjkpIDw8IDA7XG5cblx0aWYgKGJhcldpZHRoID4gbWF4QmFyV2lkdGgpXG5cdFx0YmFyV2lkdGggPSBtYXhCYXJXaWR0aDtcblx0ZWxzZSBpZiAoeE1pbkRpZmYgPT09IEluZmluaXR5KSB7XG5cdFx0YmFyV2lkdGggPSBtYXhCYXJXaWR0aDtcblx0fSBlbHNlIGlmIChiYXJXaWR0aCA8IDEpXG5cdFx0YmFyV2lkdGggPSAxO1xuXG5cdGN0eC5zYXZlKCk7XG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHguc2F2ZSgpO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5jbGlwKCk7XG5cdH1cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXHRcdHZhciBpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IHRydWU7XG5cblxuXHRcdC8vZGF0YVNlcmllcy5tYXhXaWR0aEluWCA9IGJhcldpZHRoIC8gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA+IDEgPyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgLSAxIDogcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0KTtcblxuXG5cdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly92YXIgeHkgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPblBsb3RBcmVhKGRhdGFQb2ludHNbMF0ueCwgZGF0YVBvaW50c1swXS55KTtcblxuXHRcdFx0dmFyIGJldmVsRW5hYmxlZCA9IChiYXJXaWR0aCA+IDUpICYmIGRhdGFTZXJpZXMuYmV2ZWxFbmFibGVkID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdFx0XHQvL2N0eC5zdHJva2VTdHlsZSA9IFwiIzQ1NzJBNyBcIjtcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54LmdldFRpbWUgPyBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50c1tpXS54O1xuXG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1pbiB8fCBkYXRhUG9pbnRYID4gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNYXgpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgKGRhdGFQb2ludHNbaV0ueSkgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0eCA9IChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50WCAtIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cblx0XHRcdFx0dmFyIHlQZXJjZW50O1xuXHRcdFx0XHRpZiAocGxvdFVuaXQuZGF0YVBvaW50WVN1bXNbZGF0YVBvaW50WF0gIT09IDApXG5cdFx0XHRcdFx0eVBlcmNlbnQgPSBkYXRhUG9pbnRzW2ldLnkgLyBwbG90VW5pdC5kYXRhUG9pbnRZU3Vtc1tkYXRhUG9pbnRYXSAqIDEwMDtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHlQZXJjZW50ID0gMDtcblxuXHRcdFx0XHQvL3kgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKHlQZXJjZW50IC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0eSA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoeVBlcmNlbnQgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSk7XG5cblx0XHRcdFx0dmFyIHgxID0geCAtIChwbG90VW5pdC5wbG90VHlwZS5wbG90VW5pdHMubGVuZ3RoICogYmFyV2lkdGggLyAyKSArIChwbG90VW5pdC5pbmRleCAqIGJhcldpZHRoKSA8PCAwO1xuXHRcdFx0XHR2YXIgeDIgPSB4MSArIGJhcldpZHRoIDw8IDA7XG5cdFx0XHRcdHZhciB5MTtcblx0XHRcdFx0dmFyIHkyO1xuXG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ueSA+PSAwKSB7XG5cdFx0XHRcdFx0dmFyIG9mZnNldCA9IG9mZnNldFBvc2l0aXZlWVtkYXRhUG9pbnRYXSA/IG9mZnNldFBvc2l0aXZlWVtkYXRhUG9pbnRYXSA6IDA7XG5cblx0XHRcdFx0XHR5MSA9IHkgLSBvZmZzZXQ7XG5cdFx0XHRcdFx0eTIgPSB5WmVyb1RvUGl4ZWwgLSBvZmZzZXQ7XG5cblx0XHRcdFx0XHRvZmZzZXRQb3NpdGl2ZVlbZGF0YVBvaW50WF0gPSBvZmZzZXQgKyAoeTIgLSB5MSk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgb2Zmc2V0ID0gb2Zmc2V0TmVnYXRpdmVZW2RhdGFQb2ludFhdID8gb2Zmc2V0TmVnYXRpdmVZW2RhdGFQb2ludFhdIDogMDtcblxuXHRcdFx0XHRcdHkyID0geSArIG9mZnNldDtcblx0XHRcdFx0XHR5MSA9IHlaZXJvVG9QaXhlbCArIG9mZnNldDtcblxuXHRcdFx0XHRcdG9mZnNldE5lZ2F0aXZlWVtkYXRhUG9pbnRYXSA9IG9mZnNldCArICh5MiAtIHkxKTtcblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0Y29sb3IgPSBkYXRhUG9pbnRzW2ldLmNvbG9yID8gZGF0YVBvaW50c1tpXS5jb2xvciA6IGRhdGFTZXJpZXMuX2NvbG9yU2V0W2kgJSBkYXRhU2VyaWVzLl9jb2xvclNldC5sZW5ndGhdO1xuXHRcdFx0XHRkcmF3UmVjdChjdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgYmV2ZWxFbmFibGVkICYmIChkYXRhUG9pbnRzW2ldLnkgPj0gMCksIChkYXRhUG9pbnRzW2ldLnkgPCAwKSAmJiBiZXZlbEVuYWJsZWQsIGZhbHNlLCBmYWxzZSwgZGF0YVNlcmllcy5maWxsT3BhY2l0eSk7XG5cblx0XHRcdFx0dmFyIGlkID0gZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbaV07XG5cdFx0XHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdID0ge1xuXHRcdFx0XHRcdGlkOiBpZCwgb2JqZWN0VHlwZTogXCJkYXRhUG9pbnRcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXgsIGRhdGFQb2ludEluZGV4OiBpLCB4MTogeDEsIHkxOiB5MSwgeDI6IHgyLCB5MjogeTJcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGlkKTtcblxuXHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0ZHJhd1JlY3QodGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LCB4MSwgeTEsIHgyLCB5MiwgY29sb3IsIDAsIG51bGwsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpIHtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcInN0YWNrZWRDb2x1bW4xMDBcIixcblx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50c1tpXSxcblx0XHRcdFx0XHRcdGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsXG5cdFx0XHRcdFx0XHRwb2ludDoge1xuXHRcdFx0XHRcdFx0XHR4OiB4LCB5OiBkYXRhUG9pbnRzW2ldLnkgPj0gMCA/IHkxIDogeTJcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IGRhdGFQb2ludHNbaV0ueSA+PSAwID8gMSA6IC0xLFxuXHRcdFx0XHRcdFx0Ym91bmRzOiB7XG5cdFx0XHRcdFx0XHRcdHgxOiB4MSwgeTE6IE1hdGgubWluKHkxLCB5MiksIHgyOiB4MiwgeTI6IE1hdGgubWF4KHkxLCB5Milcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y3R4LnJlc3RvcmUoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnJlc3RvcmUoKTtcblxuXHQvL3NvdXJjZSBhbmQgZGVzdCB3b3VsZCBiZSBzYW1lIHdoZW4gYW5pbWF0aW9uIGlzIG5vdCBlbmFibGVkXG5cdHZhciBhbmltYXRpb25CYXNlID0gTWF0aC5taW4oeVplcm9Ub1BpeGVsLCBwbG90VW5pdC5heGlzWS5ib3VuZGluZ1JlY3QueTIpO1xuXHR2YXIgYW5pbWF0aW9uSW5mbyA9IHtcblx0XHRzb3VyY2U6IGN0eCwgZGVzdDogdGhpcy5wbG90QXJlYS5jdHgsIGFuaW1hdGlvbkNhbGxiYWNrOiBBbmltYXRpb25IZWxwZXIueVNjYWxlQW5pbWF0aW9uLCBlYXNpbmdGdW5jdGlvbjogQW5pbWF0aW9uSGVscGVyLmVhc2luZy5lYXNlT3V0UXVhcnQsIGFuaW1hdGlvbkJhc2U6IGFuaW1hdGlvbkJhc2Vcblx0fTtcblx0cmV0dXJuIGFuaW1hdGlvbkluZm87XG59XG4iLCJcbmltcG9ydCB7aXNDYW52YXNTdXBwb3J0ZWR9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblxuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGdob3N0Q3R4ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4O1xuXG5cdHZhciBheGlzWFByb3BzID0gcGxvdFVuaXQuYXhpc1gubGluZUNvb3JkaW5hdGVzO1xuXHR2YXIgYXhpc1lQcm9wcyA9IHBsb3RVbml0LmF4aXNZLmxpbmVDb29yZGluYXRlcztcblx0dmFyIG1hcmtlcnMgPSBbXTtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXHRjdHguc2F2ZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRnaG9zdEN0eC5zYXZlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdGdob3N0Q3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0XHRnaG9zdEN0eC5jbGlwKCk7XG5cdH1cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cblx0XHR2YXIgc2VyaWVzSWQgPSBkYXRhU2VyaWVzLmlkO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbc2VyaWVzSWRdID0ge1xuXHRcdFx0b2JqZWN0VHlwZTogXCJkYXRhU2VyaWVzXCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4XG5cdFx0fTtcblxuXHRcdHZhciBoZXhDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoc2VyaWVzSWQpO1xuXHRcdGdob3N0Q3R4LmZpbGxTdHlsZSA9IGhleENvbG9yO1xuXHRcdC8vZ2hvc3RDdHgubGluZVdpZHRoID0gZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzO1xuXHRcdC8vZ2hvc3RDdHgubGluZVdpZHRoID0gMjA7XG5cblx0XHRtYXJrZXJzID0gW107XG5cblx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXHRcdHZhciBpID0gMCwgeCwgeTtcblx0XHR2YXIgZGF0YVBvaW50WDsgLy9Vc2VkIHNvIHRoYXQgd2hlbiBkYXRhUG9pbnQueCBpcyBhIERhdGVUaW1lIHZhbHVlLCBpdCBkb2Vzbid0IGdldCBjb252ZXJ0ZWQgdG8gbnVtYmVyIGJhY2sgYW5kIGZvcnRoLlxuXG5cdFx0dmFyIHlaZXJvVG9QaXhlbCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoMCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0dmFyIGJhc2VZO1xuXG5cdFx0dmFyIHN0YXJ0UG9pbnQgPSBudWxsO1xuXG5cdFx0dmFyIHByZXZEYXRhTnVsbCA9IGZhbHNlO1xuXHRcdGlmIChkYXRhUG9pbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vY3R4LnN0cm9rZVN0eWxlID0gXCIjNDU3MkE3IFwiO1xuXHRcdFx0dmFyIGNvbG9yID0gZGF0YVNlcmllcy5fY29sb3JTZXRbaSAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cdFx0XHQvL2N0eC5zdHJva2VTdHlsZSA9IFwicmVkXCI7XG5cdFx0XHRjdHguZmlsbFN0eWxlID0gY29sb3I7XG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcblx0XHRcdGN0eC5saW5lV2lkdGggPSBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3M7XG5cblx0XHRcdGlmIChjdHguc2V0TGluZURhc2gpIHtcblx0XHRcdFx0Y3R4LnNldExpbmVEYXNoKGdldExpbmVEYXNoQXJyYXkoZGF0YVNlcmllcy5saW5lRGFzaFR5cGUsIGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcykpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54LmdldFRpbWUgPyBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgcHJldlkgPSB5O1xuXG5cdFx0XHRcdGlmICh0eXBlb2YgKGRhdGFQb2ludHNbaV0ueSkgIT09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRjbG9zZUFyZWEoKTtcblxuXHRcdFx0XHRcdHByZXZEYXRhTnVsbCA9IHRydWU7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR4ID0gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRYIC0gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0eSA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55IC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblxuXG5cblx0XHRcdFx0aWYgKGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhIHx8IHByZXZEYXRhTnVsbCkge1xuXHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRjdHgubW92ZVRvKHgsIHkpO1xuXHRcdFx0XHRcdHN0YXJ0UG9pbnQgPSB7XG5cdFx0XHRcdFx0XHR4OiB4LCB5OiB5XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oeCwgeSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSBmYWxzZTtcblx0XHRcdFx0XHRwcmV2RGF0YU51bGwgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblxuXHRcdFx0XHRcdGN0eC5saW5lVG8oeCwgcHJldlkpO1xuXHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmxpbmVUbyh4LCBwcmV2WSk7XG5cblx0XHRcdFx0XHRjdHgubGluZVRvKHgsIHkpO1xuXG5cdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubGluZVRvKHgsIHkpO1xuXG5cdFx0XHRcdFx0aWYgKGkgJSAyNTAgPT0gMCkge1xuXHRcdFx0XHRcdFx0Y2xvc2VBcmVhKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4LCB5MTogeVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vUmVuZGVyIE1hcmtlclxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5tYXJrZXJTaXplICE9PSAwKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ubWFya2VyU2l6ZSA+IDAgfHwgZGF0YVNlcmllcy5tYXJrZXJTaXplID4gMCkge1xuXHRcdFx0XHRcdFx0dmFyIG1hcmtlclByb3BzID0gZGF0YVNlcmllcy5nZXRNYXJrZXJQcm9wZXJ0aWVzKGksIHgsIHksIGN0eCk7XG5cdFx0XHRcdFx0XHRtYXJrZXJzLnB1c2gobWFya2VyUHJvcHMpO1xuXG5cdFx0XHRcdFx0XHQvL2lmICghZGF0YVNlcmllcy5tYXhXaWR0aEluWCB8fCBtYXJrZXJQcm9wcy5zaXplID4gZGF0YVNlcmllcy5tYXhXaWR0aEluWCkge1xuXHRcdFx0XHRcdFx0Ly9cdGRhdGFTZXJpZXMubWF4V2lkdGhJblggPSBtYXJrZXJQcm9wcy5zaXplIC8gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA+IDEgPyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgLSAxIDogcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0KTtcblx0XHRcdFx0XHRcdC8vfVxuXG5cdFx0XHRcdFx0XHR2YXIgbWFya2VyQ29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGlkKTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0eDogeCwgeTogeSwgY3R4OiBnaG9zdEN0eCxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBtYXJrZXJQcm9wcy50eXBlLFxuXHRcdFx0XHRcdFx0XHRcdHNpemU6IG1hcmtlclByb3BzLnNpemUsXG5cdFx0XHRcdFx0XHRcdFx0Y29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlckNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJUaGlja25lc3M6IG1hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzc1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5pbmRleExhYmVsIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbCB8fCBkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWxGb3JtYXR0ZXIgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyKSB7XG5cblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJzdGVwQXJlYVwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnRzW2ldLFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHlcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IGRhdGFQb2ludHNbaV0ueSA+PSAwID8gMSA6IC0xLFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjbG9zZUFyZWEoKTtcblxuXHRcdFx0UmVuZGVySGVscGVyLmRyYXdNYXJrZXJzKG1hcmtlcnMpO1xuXHRcdH1cblx0fVxuXG5cdGN0eC5yZXN0b3JlKCk7XG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVzdG9yZSgpO1xuXG5cdGZ1bmN0aW9uIGNsb3NlQXJlYSgpIHtcblxuXHRcdGlmICghc3RhcnRQb2ludClcblx0XHRcdHJldHVybjtcblxuXHRcdGlmIChkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MgPiAwKVxuXHRcdFx0Y3R4LnN0cm9rZSgpO1xuXG5cdFx0aWYgKHBsb3RVbml0LmF4aXNZLnZpZXdwb3J0TWluaW11bSA8PSAwICYmIHBsb3RVbml0LmF4aXNZLnZpZXdwb3J0TWF4aW11bSA+PSAwKSB7XG5cdFx0XHRiYXNlWSA9IHlaZXJvVG9QaXhlbDtcblx0XHR9XG5cdFx0ZWxzZSBpZiAocGxvdFVuaXQuYXhpc1kudmlld3BvcnRNYXhpbXVtIDwgMClcblx0XHRcdGJhc2VZID0gYXhpc1lQcm9wcy55MTtcblx0XHRlbHNlIGlmIChwbG90VW5pdC5heGlzWS52aWV3cG9ydE1pbmltdW0gPiAwKVxuXHRcdFx0YmFzZVkgPSBheGlzWFByb3BzLnkyO1xuXG5cdFx0Y3R4LmxpbmVUbyh4LCBiYXNlWSk7XG5cdFx0Y3R4LmxpbmVUbyhzdGFydFBvaW50LngsIGJhc2VZKTtcblx0XHRjdHguY2xvc2VQYXRoKCk7XG5cblx0XHRjdHguZ2xvYmFsQWxwaGEgPSBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5O1xuXHRcdGN0eC5maWxsKCk7XG5cdFx0Y3R4Lmdsb2JhbEFscGhhID0gMTtcblxuXHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0Z2hvc3RDdHgubGluZVRvKHgsIGJhc2VZKTtcblx0XHRcdGdob3N0Q3R4LmxpbmVUbyhzdGFydFBvaW50LngsIGJhc2VZKTtcblx0XHRcdGdob3N0Q3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0Z2hvc3RDdHguZmlsbCgpO1xuXHRcdH1cblxuXHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRjdHgubW92ZVRvKHgsIHkpO1xuXHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdGdob3N0Q3R4Lm1vdmVUbyh4LCB5KTtcblxuXHRcdHN0YXJ0UG9pbnQgPSB7XG5cdFx0XHR4OiB4LCB5OiB5XG5cdFx0fTtcblx0fVxuXG5cdC8vc291cmNlIGFuZCBkZXN0IHdvdWxkIGJlIHNhbWUgd2hlbiBhbmltYXRpb24gaXMgbm90IGVuYWJsZWRcblx0dmFyIGFuaW1hdGlvbkluZm8gPSB7XG5cdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLnhDbGlwQW5pbWF0aW9uLCBlYXNpbmdGdW5jdGlvbjogQW5pbWF0aW9uSGVscGVyLmVhc2luZy5saW5lYXIsIGFuaW1hdGlvbkJhc2U6IDBcblx0fTtcblx0cmV0dXJuIGFuaW1hdGlvbkluZm87XG59XG4iLCJleHBvcnQgY29uc3QgY3VsdHVyZXMgPSB7XG4gIFwiZW5cIjoge1xuICAgIC8vRGVyaXZlcyBmcm9tIHRoZSBkZWZhdWx0IG9wdGlvbnNcbiAgfS8vLFxuICAvL1wiZXNcIjoge1xuICAvLyAgICBkZWNpbWFsU2VwYXJhdG9yOiBcIixcIixcbiAgLy8gICAgZGlnaXRHcm91cFNlcGFyYXRvcjogXCIuXCIsXG4gIC8vICAgIHpvb21UZXh0OiBcInpvb21cIixcbiAgLy8gICAgcGFuVGV4dDogXCJwYW5cIixcbiAgLy8gICAgcmVzZXRUZXh0OiBcInJlc2V0XCIsXG4gIC8vICAgIGRheXM6IFtcImRvbWluZ29cIiwgXCJsdW5lc1wiLCBcIm1hcnRlc1wiLCBcIm1pw6lyY29sZXNcIiwgXCJqdWV2ZXNcIiwgXCJ2aWVybmVzXCIsIFwic8OhYmFkb1wiXSxcbiAgLy99XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RhbnRzID0ge1xuICBudW1iZXJEdXJhdGlvbjogMSxcbiAgeWVhckR1cmF0aW9uOiAxMDAwICogNjAgKiA2MCAqIDI0ICogMzY0LFxuICBtb250aER1cmF0aW9uOiAxMDAwICogNjAgKiA2MCAqIDI0ICogMzAsXG4gIHdlZWtEdXJhdGlvbjogMTAwMCAqIDYwICogNjAgKiAyNCAqIDcsXG4gIGRheUR1cmF0aW9uOiAxMDAwICogNjAgKiA2MCAqIDI0LFxuICBob3VyRHVyYXRpb246IDEwMDAgKiA2MCAqIDYwLFxuICBtaW51dGVEdXJhdGlvbjogMTAwMCAqIDYwLFxuICBzZWNvbmREdXJhdGlvbjogMTAwMCxcbiAgbWlsbGlzZWNvbmREdXJhdGlvbjogMSxcblxuICBkYXlPZldlZWtGcm9tSW50OiBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXVxufTtcbiIsIlxuZXhwb3J0IGNvbnN0IGlzRGVidWdNb2RlID0gZmFsc2U7XG5cbmV4cG9ydCBjb25zdCBpc0NhbnZhc1N1cHBvcnRlZCA9ICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKS5nZXRDb250ZXh0O1xuXHQvL2lzQ2FudmFzU3VwcG9ydGVkID0gZmFsc2U7XG5cblx0Ly9EZWZhdWx0IHZhbHVlcyBmb3IgYWxsIENoYXJ0IEVsZW1lbnRzIHRoYXQgY2FuIGJlIHNldCBieSB0aGUgdXNlci4gQ2FudmFzSlNPYmplY3Quc2V0T3B0aW9ucyBsb29rcyBpbnRvIHRoaXMgd2hpbGUgc2V0dGluZyB0aGUgZGVmYXVsdC91c2VyLWRlZmluZWQgdmFsdWVzLlxuZXhwb3J0IGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuXHRcdENoYXJ0OiB7XG5cdFx0XHR3aWR0aDogNTAwLFxuXHRcdFx0aGVpZ2h0OiA0MDAsXG5cdFx0XHR6b29tRW5hYmxlZDogZmFsc2UsXG5cdFx0XHR6b29tVHlwZTogXCJ4XCIsXG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IFwid2hpdGVcIixcblx0XHRcdHRoZW1lOiBcInRoZW1lMVwiLFxuXHRcdFx0YW5pbWF0aW9uRW5hYmxlZDogZmFsc2UsXG5cdFx0XHRhbmltYXRpb25EdXJhdGlvbjogMTIwMCxcblx0XHRcdGRhdGFQb2ludE1heFdpZHRoOiBudWxsLFxuXG5cdFx0XHRjb2xvclNldDogXCJjb2xvclNldDFcIixcblx0XHRcdGN1bHR1cmU6IFwiZW5cIixcblx0XHRcdGNyZWRpdFRleHQ6IFwiQ2FudmFzSlMuY29tXCIsXG5cdFx0XHRpbnRlcmFjdGl2aXR5RW5hYmxlZDogdHJ1ZSxcblx0XHRcdGV4cG9ydEVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0RmlsZU5hbWU6IFwiQ2hhcnRcIixcblxuXHRcdFx0cmFuZ2VDaGFuZ2luZzogbnVsbCxcblx0XHRcdHJhbmdlQ2hhbmdlZDogbnVsbFxuXHRcdH0sXG5cblx0XHRUaXRsZToge1xuXHRcdFx0cGFkZGluZzogMCxcblx0XHRcdHRleHQ6IG51bGwsXG5cdFx0XHR2ZXJ0aWNhbEFsaWduOiBcInRvcFwiLC8vdG9wLCBjZW50ZXIsIGJvdHRvbVxuXHRcdFx0aG9yaXpvbnRhbEFsaWduOiBcImNlbnRlclwiLC8vbGVmdCwgY2VudGVyLCByaWdodFxuXHRcdFx0Zm9udFNpemU6IDIwLC8vaW4gcGl4ZWxzXG5cdFx0XHRmb250RmFtaWx5OiBcIkNhbGlicmlcIixcblx0XHRcdGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsIC8vbm9ybWFsLCBib2xkLCBib2xkZXIsIGxpZ2h0ZXIsXG5cdFx0XHRmb250Q29sb3I6IFwiYmxhY2tcIixcblx0XHRcdGZvbnRTdHlsZTogXCJub3JtYWxcIiwgLy8gbm9ybWFsLCBpdGFsaWMsIG9ibGlxdWVcblxuXHRcdFx0Ym9yZGVyVGhpY2tuZXNzOiAwLFxuXHRcdFx0Ym9yZGVyQ29sb3I6IFwiYmxhY2tcIixcblx0XHRcdGNvcm5lclJhZGl1czogMCxcblx0XHRcdGJhY2tncm91bmRDb2xvcjogbnVsbCxcblx0XHRcdG1hcmdpbjogNSxcblx0XHRcdHdyYXA6IHRydWUsXG5cdFx0XHRtYXhXaWR0aDogbnVsbCxcblxuXHRcdFx0ZG9ja0luc2lkZVBsb3RBcmVhOiBmYWxzZVxuXHRcdFx0Ly90b29sVGlwQ29udGVudDogbnVsbC8vc3RyaW5nIC0gVG8gYmUgaW1wbGVtZW50ZWQgKFRCSSlcblx0XHR9LFxuXG5cdFx0U3VidGl0bGU6IHtcblx0XHRcdHBhZGRpbmc6IDAsXG5cdFx0XHR0ZXh0OiBudWxsLFxuXHRcdFx0dmVydGljYWxBbGlnbjogXCJ0b3BcIiwvL3RvcCwgY2VudGVyLCBib3R0b21cblx0XHRcdGhvcml6b250YWxBbGlnbjogXCJjZW50ZXJcIiwvL2xlZnQsIGNlbnRlciwgcmlnaHRcblx0XHRcdGZvbnRTaXplOiAxNCwvL2luIHBpeGVsc1xuXHRcdFx0Zm9udEZhbWlseTogXCJDYWxpYnJpXCIsXG5cdFx0XHRmb250V2VpZ2h0OiBcIm5vcm1hbFwiLCAvL25vcm1hbCwgYm9sZCwgYm9sZGVyLCBsaWdodGVyLFxuXHRcdFx0Zm9udENvbG9yOiBcImJsYWNrXCIsXG5cdFx0XHRmb250U3R5bGU6IFwibm9ybWFsXCIsIC8vIG5vcm1hbCwgaXRhbGljLCBvYmxpcXVlXG5cblx0XHRcdGJvcmRlclRoaWNrbmVzczogMCxcblx0XHRcdGJvcmRlckNvbG9yOiBcImJsYWNrXCIsXG5cdFx0XHRjb3JuZXJSYWRpdXM6IDAsXG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IG51bGwsXG5cdFx0XHRtYXJnaW46IDIsXG5cdFx0XHR3cmFwOiB0cnVlLFxuXHRcdFx0bWF4V2lkdGg6IG51bGwsXG5cblx0XHRcdGRvY2tJbnNpZGVQbG90QXJlYTogZmFsc2Vcblx0XHRcdC8vdG9vbFRpcENvbnRlbnQ6IG51bGwvL3N0cmluZyAtIFRvIGJlIGltcGxlbWVudGVkIChUQkkpXG5cdFx0fSxcblxuXHRcdExlZ2VuZDoge1xuXHRcdFx0bmFtZTogbnVsbCxcblx0XHRcdHZlcnRpY2FsQWxpZ246IFwiY2VudGVyXCIsXG5cdFx0XHRob3Jpem9udGFsQWxpZ246IFwicmlnaHRcIixcblxuXHRcdFx0Zm9udFNpemU6IDE0LC8vaW4gcGl4ZWxzXG5cdFx0XHRmb250RmFtaWx5OiBcImNhbGlicmlcIixcblx0XHRcdGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsIC8vbm9ybWFsLCBib2xkLCBib2xkZXIsIGxpZ2h0ZXIsXG5cdFx0XHRmb250Q29sb3I6IFwiYmxhY2tcIixcblx0XHRcdGZvbnRTdHlsZTogXCJub3JtYWxcIiwgLy8gbm9ybWFsLCBpdGFsaWMsIG9ibGlxdWVcblxuXHRcdFx0Y3Vyc29yOiBudWxsLFxuXHRcdFx0aXRlbW1vdXNlb3ZlcjogbnVsbCxcblx0XHRcdGl0ZW1tb3VzZW91dDogbnVsbCxcblx0XHRcdGl0ZW1tb3VzZW1vdmU6IG51bGwsXG5cdFx0XHRpdGVtY2xpY2s6IG51bGwsXG5cblx0XHRcdGRvY2tJbnNpZGVQbG90QXJlYTogZmFsc2UsXG5cdFx0XHRyZXZlcnNlZDogZmFsc2UsXG5cblx0XHRcdG1heFdpZHRoOiBudWxsLFxuXHRcdFx0bWF4SGVpZ2h0OiBudWxsLFxuXG5cdFx0XHRpdGVtTWF4V2lkdGg6IG51bGwsXG5cdFx0XHRpdGVtV2lkdGg6IG51bGwsXG5cdFx0XHRpdGVtV3JhcDogdHJ1ZSxcblx0XHRcdGl0ZW1UZXh0Rm9ybWF0dGVyOiBudWxsXG5cdFx0fSxcblxuXHRcdFRvb2xUaXA6IHtcblx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRzaGFyZWQ6IGZhbHNlLFxuXHRcdFx0YW5pbWF0aW9uRW5hYmxlZDogdHJ1ZSxcblx0XHRcdGNvbnRlbnQ6IG51bGwsXG5cdFx0XHRjb250ZW50Rm9ybWF0dGVyOiBudWxsLFxuXG5cdFx0XHRyZXZlcnNlZDogZmFsc2UsXG5cblx0XHRcdGJhY2tncm91bmRDb2xvcjogbnVsbCxcblxuXHRcdFx0Ym9yZGVyQ29sb3I6IG51bGwsXG5cdFx0XHRib3JkZXJUaGlja25lc3M6IDIsIC8vaW4gcGl4ZWxzXG5cdFx0XHRjb3JuZXJSYWRpdXM6IDUsIC8vIGluIHBpeGVsc1xuXG5cdFx0XHRmb250U2l6ZTogMTQsIC8vIGluIHBpeGVsc1xuXHRcdFx0Zm9udENvbG9yOiBcIiMwMDAwMDBcIixcblx0XHRcdGZvbnRGYW1pbHk6IFwiQ2FsaWJyaSwgQXJpYWwsIEdlb3JnaWEsIHNlcmlmO1wiLFxuXHRcdFx0Zm9udFdlaWdodDogXCJub3JtYWxcIiwgLy9ub3JtYWwsIGJvbGQsIGJvbGRlciwgbGlnaHRlcixcblx0XHRcdGZvbnRTdHlsZTogXCJpdGFsaWNcIiAgLy8gbm9ybWFsLCBpdGFsaWMsIG9ibGlxdWVcblx0XHR9LFxuXG5cdFx0QXhpczoge1xuXHRcdFx0bWluaW11bTogbnVsbCwgLy9NaW5pbXVtIHZhbHVlIHRvIGJlIHNob3duIG9uIHRoZSBBeGlzXG5cdFx0XHRtYXhpbXVtOiBudWxsLCAvL01pbmltdW0gdmFsdWUgdG8gYmUgc2hvd24gb24gdGhlIEF4aXNcblx0XHRcdHZpZXdwb3J0TWluaW11bTogbnVsbCxcblx0XHRcdHZpZXdwb3J0TWF4aW11bTogbnVsbCxcblx0XHRcdGludGVydmFsOiBudWxsLCAvLyBJbnRlcnZhbCBmb3IgdGljayBtYXJrcyBhbmQgZ3JpZCBsaW5lc1xuXHRcdFx0aW50ZXJ2YWxUeXBlOiBudWxsLCAvL251bWJlciwgbWlsbGlzZWNvbmQsIHNlY29uZCwgbWludXRlLCBob3VyLCBkYXksIG1vbnRoLCB5ZWFyXG5cdFx0XHQvL3JldmVyc2VkOiBmYWxzZSxcblxuXHRcdFx0dGl0bGU6IG51bGwsIC8vIHN0cmluZ1xuXHRcdFx0dGl0bGVGb250Q29sb3I6IFwiYmxhY2tcIixcblx0XHRcdHRpdGxlRm9udFNpemU6IDIwLFxuXHRcdFx0dGl0bGVGb250RmFtaWx5OiBcImFyaWFsXCIsXG5cdFx0XHR0aXRsZUZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG5cdFx0XHR0aXRsZUZvbnRTdHlsZTogXCJub3JtYWxcIixcblxuXHRcdFx0bGFiZWxBbmdsZTogMCxcblx0XHRcdGxhYmVsRm9udEZhbWlseTogXCJhcmlhbFwiLFxuXHRcdFx0bGFiZWxGb250Q29sb3I6IFwiYmxhY2tcIixcblx0XHRcdGxhYmVsRm9udFNpemU6IDEyLFxuXHRcdFx0bGFiZWxGb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuXHRcdFx0bGFiZWxGb250U3R5bGU6IFwibm9ybWFsXCIsXG5cdFx0XHRsYWJlbEF1dG9GaXQ6IGZhbHNlLFxuXHRcdFx0bGFiZWxXcmFwOiB0cnVlLFxuXHRcdFx0bGFiZWxNYXhXaWR0aDogbnVsbCwvL251bGwgZm9yIGF1dG9cblx0XHRcdGxhYmVsRm9ybWF0dGVyOiBudWxsLFxuXG5cdFx0XHRwcmVmaXg6IFwiXCIsXG5cdFx0XHRzdWZmaXg6IFwiXCIsXG5cblx0XHRcdGluY2x1ZGVaZXJvOiB0cnVlLCAvL0FwcGxpZXMgb25seSBmb3IgYXhpc1kuIElnbm9yZWQgaW4gYXhpc1guXG5cblx0XHRcdHRpY2tMZW5ndGg6IDUsXG5cdFx0XHR0aWNrQ29sb3I6IFwiYmxhY2tcIixcblx0XHRcdHRpY2tUaGlja25lc3M6IDEsXG5cblx0XHRcdGxpbmVDb2xvcjogXCJibGFja1wiLFxuXHRcdFx0bGluZVRoaWNrbmVzczogMSxcblx0XHRcdGxpbmVEYXNoVHlwZTogXCJzb2xpZFwiLFxuXG5cdFx0XHRncmlkQ29sb3I6IFwiQTBBMEEwXCIsXG5cdFx0XHRncmlkVGhpY2tuZXNzOiAwLFxuXHRcdFx0Z3JpZERhc2hUeXBlOiBcInNvbGlkXCIsXG5cblx0XHRcdGludGVybGFjZWRDb2xvcjogbnVsbCxcblxuXHRcdFx0dmFsdWVGb3JtYXRTdHJpbmc6IG51bGwsXG5cblx0XHRcdG1hcmdpbjogMixcblxuXHRcdFx0c3RyaXBMaW5lczogW10gLy8gSnVzdCBhIHBsYWNlaG9sZGVyLiBEb2VzIG5vdCBoYXZlIGFueSBlZmZlY3Qgb24gdGhlIGFjdHVhbCBudW1iZXIgb2Ygc3RyaXBsaW5lc1xuXHRcdH0sXG5cblx0XHRTdHJpcExpbmU6IHtcblx0XHRcdHZhbHVlOiBudWxsLFxuXHRcdFx0c3RhcnRWYWx1ZTogbnVsbCxcblx0XHRcdGVuZFZhbHVlOiBudWxsLFxuXG5cdFx0XHRjb2xvcjogXCJvcmFuZ2VcIixcblx0XHRcdG9wYWNpdHk6IG51bGwsXG5cdFx0XHR0aGlja25lc3M6IDIsXG5cdFx0XHRsaW5lRGFzaFR5cGU6IFwic29saWRcIixcblx0XHRcdGxhYmVsOiBcIlwiLFxuXHRcdFx0bGFiZWxCYWNrZ3JvdW5kQ29sb3I6IFwiI0VFRUVFRVwiLFxuXHRcdFx0bGFiZWxGb250RmFtaWx5OiBcImFyaWFsXCIsXG5cdFx0XHRsYWJlbEZvbnRDb2xvcjogXCJvcmFuZ2VcIixcblx0XHRcdGxhYmVsRm9udFNpemU6IDEyLFxuXHRcdFx0bGFiZWxGb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuXHRcdFx0bGFiZWxGb250U3R5bGU6IFwibm9ybWFsXCIsXG5cdFx0XHRsYWJlbEZvcm1hdHRlcjogbnVsbCxcblxuXHRcdFx0c2hvd09uVG9wOiBmYWxzZVxuXHRcdH0sXG5cblx0XHREYXRhU2VyaWVzOiB7XG5cdFx0XHRuYW1lOiBudWxsLFxuXHRcdFx0ZGF0YVBvaW50czogbnVsbCxcblx0XHRcdGxhYmVsOiBcIlwiLFxuXHRcdFx0YmV2ZWxFbmFibGVkOiBmYWxzZSxcblx0XHRcdGhpZ2hsaWdodEVuYWJsZWQ6IHRydWUsXG5cblx0XHRcdGN1cnNvcjogbnVsbCxcblxuXHRcdFx0aW5kZXhMYWJlbDogXCJcIixcblx0XHRcdGluZGV4TGFiZWxQbGFjZW1lbnQ6IFwiYXV0b1wiLCAgLy9pbnNpZGUsIG91dHNpZGUsIGF1dG9cblx0XHRcdGluZGV4TGFiZWxPcmllbnRhdGlvbjogXCJob3Jpem9udGFsXCIsXG5cdFx0XHRpbmRleExhYmVsRm9udENvbG9yOiBcImJsYWNrXCIsXG5cdFx0XHRpbmRleExhYmVsRm9udFNpemU6IDEyLFxuXHRcdFx0aW5kZXhMYWJlbEZvbnRTdHlsZTogXCJub3JtYWxcIiwgLy8gICBpdGFsaWMgLG9ibGlxdWUsIG5vcm1hbFxuXHRcdFx0aW5kZXhMYWJlbEZvbnRGYW1pbHk6IFwiQXJpYWxcIiwgXHQvLyBmeDogQXJpYWwgVmVyZGFuYSBcIkNvdXJpZXIgTmV3XCIgU2VyaWZcblx0XHRcdGluZGV4TGFiZWxGb250V2VpZ2h0OiBcIm5vcm1hbFwiLCBcdC8vIGJvbGQgLGJvbGRlciwgbGlnaHRlciwgbm9ybWFsXG5cdFx0XHRpbmRleExhYmVsQmFja2dyb3VuZENvbG9yOiBudWxsLFxuXHRcdFx0aW5kZXhMYWJlbExpbmVDb2xvcjogbnVsbCxcblx0XHRcdGluZGV4TGFiZWxMaW5lVGhpY2tuZXNzOiAxLFxuXHRcdFx0aW5kZXhMYWJlbExpbmVEYXNoVHlwZTogXCJzb2xpZFwiLFxuXHRcdFx0aW5kZXhMYWJlbE1heFdpZHRoOiBudWxsLFxuXHRcdFx0aW5kZXhMYWJlbFdyYXA6IHRydWUsXG5cdFx0XHRpbmRleExhYmVsRm9ybWF0dGVyOiBudWxsLFxuXG5cdFx0XHRsaW5lVGhpY2tuZXNzOiAyLFxuXHRcdFx0bGluZURhc2hUeXBlOiBcInNvbGlkXCIsXG5cblx0XHRcdGNvbG9yOiBudWxsLFxuXHRcdFx0cmlzaW5nQ29sb3I6IFwid2hpdGVcIixcblx0XHRcdGZpbGxPcGFjaXR5OiBudWxsLFxuXG5cdFx0XHRzdGFydEFuZ2xlOiAwLFxuXG5cdFx0XHRyYWRpdXM6IG51bGwsXG5cdFx0XHRpbm5lclJhZGl1czogbnVsbCxcblxuXHRcdFx0dHlwZTogXCJjb2x1bW5cIiwgLy9saW5lLCBjb2x1bW4sIGJhciwgYXJlYSwgc2NhdHRlciBzdGFja2VkQ29sdW1uLCBzdGFja2VkQmFyLCBzdGFja2VkQXJlYSwgc3RhY2tlZENvbHVtbjEwMCwgc3RhY2tlZEJhcjEwMCwgc3RhY2tlZEFyZWExMDAsIHBpZSwgZG91Z2hudXRcblx0XHRcdHhWYWx1ZVR5cGU6IFwibnVtYmVyXCIsIC8vbnVtYmVyLCBkYXRlVGltZVxuXHRcdFx0YXhpc1lUeXBlOiBcInByaW1hcnlcIixcblxuXHRcdFx0eFZhbHVlRm9ybWF0U3RyaW5nOiBudWxsLFxuXHRcdFx0eVZhbHVlRm9ybWF0U3RyaW5nOiBudWxsLFxuXHRcdFx0elZhbHVlRm9ybWF0U3RyaW5nOiBudWxsLFxuXHRcdFx0cGVyY2VudEZvcm1hdFN0cmluZzogbnVsbCxcblxuXHRcdFx0c2hvd0luTGVnZW5kOiBudWxsLFxuXHRcdFx0bGVnZW5kTWFya2VyVHlwZTogbnVsbCxcblx0XHRcdGxlZ2VuZE1hcmtlckNvbG9yOiBudWxsLFxuXHRcdFx0bGVnZW5kVGV4dDogbnVsbCxcblx0XHRcdGxlZ2VuZE1hcmtlckJvcmRlckNvbG9yOiBudWxsLFxuXHRcdFx0bGVnZW5kTWFya2VyQm9yZGVyVGhpY2tuZXNzOiBudWxsLFxuXG5cdFx0XHRtYXJrZXJUeXBlOiBcImNpcmNsZVwiLCAvL25vbmUsIGNpcmNsZSwgc3F1YXJlLCBjcm9zcywgdHJpYW5nbGUsIGxpbmVcblx0XHRcdG1hcmtlckNvbG9yOiBudWxsLFxuXHRcdFx0bWFya2VyU2l6ZTogbnVsbCxcblx0XHRcdG1hcmtlckJvcmRlckNvbG9yOiBudWxsLFxuXHRcdFx0bWFya2VyQm9yZGVyVGhpY2tuZXNzOiBudWxsLFxuXHRcdFx0Ly9hbmltYXRpb25FbmFibGVkOiB0cnVlLFxuXHRcdFx0bW91c2VvdmVyOiBudWxsLFxuXHRcdFx0bW91c2VvdXQ6IG51bGwsXG5cdFx0XHRtb3VzZW1vdmU6IG51bGwsXG5cdFx0XHRjbGljazogbnVsbCxcblx0XHRcdHRvb2xUaXBDb250ZW50OiBudWxsLFxuXG5cdFx0XHR2aXNpYmxlOiB0cnVlXG5cdFx0fSxcblxuXHRcdC8vUHJpdmF0ZVxuXHRcdFRleHRCbG9jazoge1xuXHRcdFx0eDogMCxcblx0XHRcdHk6IDAsXG5cdFx0XHR3aWR0aDogbnVsbCwvL3JlYWQgb25seVxuXHRcdFx0aGVpZ2h0OiBudWxsLC8vcmVhZCBvbmx5XG5cdFx0XHRtYXhXaWR0aDogbnVsbCxcblx0XHRcdG1heEhlaWdodDogbnVsbCxcblx0XHRcdHBhZGRpbmc6IDAsXG5cdFx0XHRhbmdsZTogMCxcblx0XHRcdHRleHQ6IFwiXCIsXG5cdFx0XHRob3Jpem9udGFsQWxpZ246IFwiY2VudGVyXCIsLy9sZWZ0LCBjZW50ZXIsIHJpZ2h0XG5cdFx0XHRmb250U2l6ZTogMTIsLy9pbiBwaXhlbHNcblx0XHRcdGZvbnRGYW1pbHk6IFwiY2FsaWJyaVwiLFxuXHRcdFx0Zm9udFdlaWdodDogXCJub3JtYWxcIiwgLy9ub3JtYWwsIGJvbGQsIGJvbGRlciwgbGlnaHRlcixcblx0XHRcdGZvbnRDb2xvcjogXCJibGFja1wiLFxuXHRcdFx0Zm9udFN0eWxlOiBcIm5vcm1hbFwiLCAvLyBub3JtYWwsIGl0YWxpYywgb2JsaXF1ZVxuXG5cdFx0XHRib3JkZXJUaGlja25lc3M6IDAsXG5cdFx0XHRib3JkZXJDb2xvcjogXCJibGFja1wiLFxuXHRcdFx0Y29ybmVyUmFkaXVzOiAwLFxuXHRcdFx0YmFja2dyb3VuZENvbG9yOiBudWxsLFxuXHRcdFx0dGV4dEJhc2VsaW5lOiBcInRvcFwiXG5cdFx0fSxcblxuXHRcdEN1bHR1cmVJbmZvOiB7XG5cdFx0XHRkZWNpbWFsU2VwYXJhdG9yOiBcIi5cIixcblx0XHRcdGRpZ2l0R3JvdXBTZXBhcmF0b3I6IFwiLFwiLFxuXHRcdFx0em9vbVRleHQ6IFwiWm9vbVwiLFxuXHRcdFx0cGFuVGV4dDogXCJQYW5cIixcblx0XHRcdHJlc2V0VGV4dDogXCJSZXNldFwiLFxuXG5cdFx0XHRtZW51VGV4dDogXCJNb3JlIE9wdGlvbnNcIixcblx0XHRcdHNhdmVKUEdUZXh0OiBcIlNhdmUgYXMgSlBHXCIsXG5cdFx0XHRzYXZlUE5HVGV4dDogXCJTYXZlIGFzIFBOR1wiLFxuXG5cdFx0XHRkYXlzOiBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXSxcblx0XHRcdHNob3J0RGF5czogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuXG5cdFx0XHRtb250aHM6IFtcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsIFwiQXByaWxcIiwgXCJNYXlcIiwgXCJKdW5lXCIsIFwiSnVseVwiLCBcIkF1Z3VzdFwiLCBcIlNlcHRlbWJlclwiLCBcIk9jdG9iZXJcIiwgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJdLFxuXHRcdFx0c2hvcnRNb250aHM6IFtcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLCBcIk1heVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiXVxuXHRcdH1cblx0fTtcbiIsIlxuaW1wb3J0IHtpc0NhbnZhc1N1cHBvcnRlZH0gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBjb2xvclNldHMgPSB7XG5cblx0XHRcImNvbG9yU2V0MVwiOiBbXG5cdFx0XHRcIiMzNjlFQURcIixcblx0XHRcdFwiI0MyNDY0MlwiLFxuXHRcdFx0XCIjN0Y2MDg0XCIsXG5cdFx0XHQvL1wiIzk2QzQxMlwiLFxuXHRcdFx0XCIjODZCNDAyXCIsXG5cdFx0XHRcIiNBMkQxQ0ZcIixcblx0XHRcdC8vXCIjRDhDNjQxXCIsXG5cdFx0XHRcIiNDOEI2MzFcIixcblx0XHRcdFwiIzZEQkNFQlwiLFxuXHRcdFx0Ly9cIiM0QTQ5NDZcIixcblx0XHRcdFwiIzUyNTE0RVwiLFxuXHRcdFx0XCIjNEY4MUJDXCIsXG5cdFx0XHRcIiNBMDY0QTFcIixcblx0XHRcdFwiI0Y3OTY0N1wiXG5cdFx0XSxcblx0XHRcImNvbG9yU2V0MlwiOiBbXG5cdFx0XHRcIiM0RjgxQkNcIixcblx0XHRcdFwiI0MwNTA0RVwiLFxuXHRcdFx0XCIjOUJCQjU4XCIsXG5cdFx0XHRcIiMyM0JGQUFcIixcblx0XHRcdC8vXCIjRkFBNTg2XCIsXG5cdFx0XHRcIiM4MDY0QTFcIixcblx0XHRcdFwiIzRBQUNDNVwiLFxuXHRcdFx0XCIjRjc5NjQ3XCIsXG5cdFx0XHQvL1wiIzc3QUEzM1wiLFxuXHRcdFx0Ly9cIiM3RjYwODRcIlxuXHRcdFx0XCIjMzM1NThCXCJcblx0XHRdLFxuXHRcdFwiY29sb3JTZXQzXCI6IFtcblx0XHRcdFwiIzhDQTFCQ1wiLFxuXHRcdFx0XCIjMzY4NDVDXCIsXG5cdFx0XHRcIiMwMTdFODJcIixcblx0XHRcdFwiIzhDQjlEMFwiLFxuXHRcdFx0XCIjNzA4Qzk4XCIsXG5cdFx0XHRcIiM5NDgzOERcIixcblx0XHRcdFwiI0YwODg5MVwiLFxuXHRcdFx0XCIjMDM2NkE3XCIsXG5cdFx0XHRcIiMwMDgyNzZcIixcblx0XHRcdFwiI0VFNzc1N1wiLFxuXHRcdFx0XCIjRTVCQTNBXCIsXG5cdFx0XHRcIiNGMjk5MEJcIixcblx0XHRcdFwiIzAzNTU3QlwiLFxuXHRcdFx0XCIjNzgyOTcwXCJcblx0XHRdLy8sXG5cdFx0Ly9cImNvbG9yU2V0NFwiOiBbXG5cdFx0Ly8gICAgXCIjMzY5OEM1XCIsXG5cdFx0Ly8gICAgXCIjMDA5QjhEXCIsXG5cdFx0Ly8gICAgXCIjRjFENjkxXCIsXG5cdFx0Ly8gICAgXCIjRjhCOTBDXCIsXG5cdFx0Ly8gICAgXCIjMDA4MUI4XCIsXG5cdFx0Ly8gICAgXCIjNUI1QTk2XCIsXG5cdFx0Ly8gICAgXCIjQUNCREQxXCIsXG5cdFx0Ly8gICAgXCIjODhBODkxXCIsXG5cdFx0Ly8gICAgXCIjMzk5NjlEXCIsXG5cdFx0Ly8gICAgXCIjQUVDRUREXCIsXG5cdFx0Ly8gICAgXCIjQTBCMkJDXCIsXG5cdFx0Ly8gICAgXCIjQkJBRUI3XCIsXG5cdFx0Ly8gICAgXCIjQTBDNjVGXCIsXG5cdFx0Ly8gICAgXCIjRUVBNkFBXCIsXG5cdFx0Ly8gICAgXCIjMzc5OEM1XCJcblx0XHQvL10sXG5cdFx0Ly9cImNvbG9yU2V0NVwiOiBbXG5cdFx0Ly8gICAgXCIjODhBREJGXCIsXG5cdFx0Ly8gICAgXCIjODRDMzM2XCIsXG5cdFx0Ly8gICAgXCIjN0I5MUMzXCIsXG5cdFx0Ly8gICAgXCIjNDY2MUVFXCIsXG5cdFx0Ly8gICAgXCIjRUM1NjU3XCIsXG5cdFx0Ly8gICAgXCIjMUJDREQxXCIsXG5cdFx0Ly8gICAgXCIjOEZBQUJCXCIsXG5cdFx0Ly8gICAgXCIjQjA4QkVCXCIsXG5cdFx0Ly8gICAgXCIjM0VBMEREXCIsXG5cdFx0Ly8gICAgXCIjRjVBNTJBXCIsXG5cdFx0Ly8gICAgXCIjMjNCRkFBXCIsXG5cdFx0Ly8gICAgXCIjRkFBNTg2XCIsXG5cdFx0Ly8gICAgXCIjRUI4Q0M2XCJcblx0XHQvL11cblxuXHR9O1xuXG5leHBvcnQgY29uc3QgdGhlbWVzID0ge1xuXG5cdFx0XHRcInRoZW1lMVwiOiB7XG5cdFx0XHRcdENoYXJ0OlxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbG9yU2V0OiBcImNvbG9yU2V0MVwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0VGl0bGU6IHtcblx0XHRcdFx0XHRmb250RmFtaWx5OiBpc0NhbnZhc1N1cHBvcnRlZCA/IFwiQ2FsaWJyaSwgT3B0aW1hLCBDYW5kYXJhLCBWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWZcIiA6IFwiY2FsaWJyaVwiLFxuXHRcdFx0XHRcdGZvbnRTaXplOiAzMyxcblx0XHRcdFx0XHRmb250Q29sb3I6IFwiIzNBM0EzQVwiLFxuXHRcdFx0XHRcdGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdHZlcnRpY2FsQWxpZ246IFwidG9wXCIsXG5cdFx0XHRcdFx0bWFyZ2luOiA1XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFN1YnRpdGxlOiB7XG5cdFx0XHRcdFx0Zm9udEZhbWlseTogaXNDYW52YXNTdXBwb3J0ZWQgPyBcIkNhbGlicmksIE9wdGltYSwgQ2FuZGFyYSwgVmVyZGFuYSwgR2VuZXZhLCBzYW5zLXNlcmlmXCIgOiBcImNhbGlicmlcIixcblx0XHRcdFx0XHRmb250U2l6ZTogMTYsXG5cdFx0XHRcdFx0Zm9udENvbG9yOiBcIiMzQTNBM0FcIixcblx0XHRcdFx0XHRmb250V2VpZ2h0OiBcImJvbGRcIixcblx0XHRcdFx0XHR2ZXJ0aWNhbEFsaWduOiBcInRvcFwiLFxuXHRcdFx0XHRcdG1hcmdpbjogNVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRBeGlzOiB7XG5cdFx0XHRcdFx0dGl0bGVGb250U2l6ZTogMjYsXG5cdFx0XHRcdFx0Ly90aXRsZUZvbnRDb2xvcjogXCJyZ2IoOTgsOTgsOTgpXCIsXG5cdFx0XHRcdFx0dGl0bGVGb250Q29sb3I6IFwiIzY2NjY2NlwiLFxuXHRcdFx0XHRcdC8vdGl0bGVGb250RmFtaWx5OiBcImFyaWFsIGJsYWNrXCIsXG5cdFx0XHRcdFx0Ly90aXRsZUZvbnRGYW1pbHk6IFwiVmVyZGFuYSwgR2VuZXZhLCBDYWxpYnJpLCBzYW5zLXNlcmlmXCIsXG5cdFx0XHRcdFx0dGl0bGVGb250RmFtaWx5OiBpc0NhbnZhc1N1cHBvcnRlZCA/IFwiQ2FsaWJyaSwgT3B0aW1hLCBDYW5kYXJhLCBWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWZcIiA6IFwiY2FsaWJyaVwiLFxuXHRcdFx0XHRcdC8vdGl0bGVGb250V2VpZ2h0OiBcImJvbGRcIixcblxuXHRcdFx0XHRcdC8vbGFiZWxGb250RmFtaWx5OiBcIlRpbWVzIE5ldyBSb21hbiwgVGltZXMsIHNlcmlmXCIsXG5cdFx0XHRcdFx0bGFiZWxGb250RmFtaWx5OiBpc0NhbnZhc1N1cHBvcnRlZCA/IFwiQ2FsaWJyaSwgT3B0aW1hLCBDYW5kYXJhLCBWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWZcIiA6IFwiY2FsaWJyaVwiLFxuXHRcdFx0XHRcdC8vbGFiZWxGb250RmFtaWx5OiBcIkhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2FcIixcblx0XHRcdFx0XHRsYWJlbEZvbnRTaXplOiAxOCxcblx0XHRcdFx0XHRsYWJlbEZvbnRDb2xvcjogXCJncmV5XCIsXG5cdFx0XHRcdFx0Ly9sYWJlbEZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdHRpY2tDb2xvcjogXCIjQkJCQkJCXCIsXG5cdFx0XHRcdFx0dGlja1RoaWNrbmVzczogMixcblx0XHRcdFx0XHRncmlkVGhpY2tuZXNzOiAyLFxuXHRcdFx0XHRcdGdyaWRDb2xvcjogXCIjQkJCQkJCXCIsXG5cdFx0XHRcdFx0bGluZVRoaWNrbmVzczogMixcblx0XHRcdFx0XHRsaW5lQ29sb3I6IFwiI0JCQkJCQlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdExlZ2VuZDoge1xuXHRcdFx0XHRcdHZlcnRpY2FsQWxpZ246IFwiYm90dG9tXCIsXG5cdFx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBcImNlbnRlclwiLFxuXHRcdFx0XHRcdGZvbnRGYW1pbHk6IGlzQ2FudmFzU3VwcG9ydGVkID8gXCJtb25vc3BhY2UsIHNhbnMtc2VyaWYsYXJpYWwgYmxhY2tcIiA6IFwiY2FsaWJyaVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdERhdGFTZXJpZXM6IHtcblx0XHRcdFx0XHQvL2JldmVsRW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHRpbmRleExhYmVsRm9udENvbG9yOiBcImdyZXlcIixcblx0XHRcdFx0XHQvL2luZGV4TGFiZWxGb250RmFtaWx5OiBcIlRyZWJ1Y2hldCBNUywgbW9ub3NwYWNlLCBDb3VyaWVyIE5ldywgQ291cmllclwiLFxuXHRcdFx0XHRcdGluZGV4TGFiZWxGb250RmFtaWx5OiBpc0NhbnZhc1N1cHBvcnRlZCA/IFwiQ2FsaWJyaSwgT3B0aW1hLCBDYW5kYXJhLCBWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWZcIiA6IFwiY2FsaWJyaVwiLFxuXHRcdFx0XHRcdC8vaW5kZXhMYWJlbEZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdGluZGV4TGFiZWxGb250U2l6ZTogMTgsXG5cdFx0XHRcdFx0Ly9pbmRleExhYmVsTGluZUNvbG9yOiBcImxpZ2h0Z3JleVwiLFxuXHRcdFx0XHRcdGluZGV4TGFiZWxMaW5lVGhpY2tuZXNzOiAxXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdFwidGhlbWUyXCI6IHtcblx0XHRcdFx0Q2hhcnQ6XG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y29sb3JTZXQ6IFwiY29sb3JTZXQyXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRUaXRsZToge1xuXHRcdFx0XHRcdGZvbnRGYW1pbHk6IFwiaW1wYWN0LCBjaGFyY29hbCwgYXJpYWwgYmxhY2ssIHNhbnMtc2VyaWZcIixcblx0XHRcdFx0XHRmb250U2l6ZTogMzIsLy9mb250Q29sb3I6IFwicmdiKDU4LDU4LDU4KVwiLFxuXHRcdFx0XHRcdGZvbnRDb2xvcjogXCIjMzMzMzMzXCIsXG5cdFx0XHRcdFx0dmVydGljYWxBbGlnbjogXCJ0b3BcIixcblx0XHRcdFx0XHRtYXJnaW46IDVcblx0XHRcdFx0fSxcblx0XHRcdFx0U3VidGl0bGU6IHtcblx0XHRcdFx0XHRmb250RmFtaWx5OiBcImltcGFjdCwgY2hhcmNvYWwsIGFyaWFsIGJsYWNrLCBzYW5zLXNlcmlmXCIsXG5cdFx0XHRcdFx0Zm9udFNpemU6IDE0LC8vZm9udENvbG9yOiBcInJnYig1OCw1OCw1OClcIixcblx0XHRcdFx0XHRmb250Q29sb3I6IFwiIzMzMzMzM1wiLFxuXHRcdFx0XHRcdHZlcnRpY2FsQWxpZ246IFwidG9wXCIsXG5cdFx0XHRcdFx0bWFyZ2luOiA1XG5cdFx0XHRcdH0sXG5cdFx0XHRcdEF4aXM6IHtcblx0XHRcdFx0XHR0aXRsZUZvbnRTaXplOiAyMixcblx0XHRcdFx0XHR0aXRsZUZvbnRDb2xvcjogXCJyZ2IoOTgsOTgsOTgpXCIsXG5cdFx0XHRcdFx0Ly90aXRsZUZvbnRGYW1pbHk6IFwiYXJpYWwgYmxhY2tcIixcblx0XHRcdFx0XHR0aXRsZUZvbnRGYW1pbHk6IGlzQ2FudmFzU3VwcG9ydGVkID8gXCJtb25vc3BhY2UsIHNhbnMtc2VyaWYsYXJpYWwgYmxhY2tcIiA6IFwiYXJpYWxcIixcblx0XHRcdFx0XHR0aXRsZUZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXG5cblx0XHRcdFx0XHRsYWJlbEZvbnRGYW1pbHk6IGlzQ2FudmFzU3VwcG9ydGVkID8gXCJtb25vc3BhY2UsIENvdXJpZXIgTmV3LCBDb3VyaWVyXCIgOiBcImFyaWFsXCIsXG5cdFx0XHRcdFx0Ly9sYWJlbEZvbnRGYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYVwiLFxuXHRcdFx0XHRcdGxhYmVsRm9udFNpemU6IDE2LFxuXHRcdFx0XHRcdGxhYmVsRm9udENvbG9yOiBcImdyZXlcIixcblx0XHRcdFx0XHRsYWJlbEZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdHRpY2tDb2xvcjogXCJncmV5XCIsXG5cdFx0XHRcdFx0dGlja1RoaWNrbmVzczogMixcblx0XHRcdFx0XHRncmlkVGhpY2tuZXNzOiAyLFxuXHRcdFx0XHRcdGdyaWRDb2xvcjogXCJncmV5XCIsXG5cdFx0XHRcdFx0bGluZUNvbG9yOiBcImdyZXlcIixcblx0XHRcdFx0XHRsaW5lVGhpY2tuZXNzOiAwXG5cdFx0XHRcdH0sXG5cdFx0XHRcdExlZ2VuZDoge1xuXHRcdFx0XHRcdHZlcnRpY2FsQWxpZ246IFwiYm90dG9tXCIsXG5cdFx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBcImNlbnRlclwiLFxuXHRcdFx0XHRcdGZvbnRGYW1pbHk6IGlzQ2FudmFzU3VwcG9ydGVkID8gXCJtb25vc3BhY2UsIHNhbnMtc2VyaWYsYXJpYWwgYmxhY2tcIiA6IFwiYXJpYWxcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHREYXRhU2VyaWVzOiB7XG5cdFx0XHRcdFx0aW5kZXhMYWJlbEZvbnRDb2xvcjogXCJncmV5XCIsXG5cdFx0XHRcdFx0Ly9pbmRleExhYmVsRm9udEZhbWlseTogXCJUcmVidWNoZXQgTVMsIG1vbm9zcGFjZSwgQ291cmllciBOZXcsIENvdXJpZXJcIixcblx0XHRcdFx0XHRpbmRleExhYmVsRm9udEZhbWlseTogaXNDYW52YXNTdXBwb3J0ZWQgPyBcIkNvdXJpZXIgTmV3LCBDb3VyaWVyLCBtb25vc3BhY2VcIiA6IFwiYXJpYWxcIixcblx0XHRcdFx0XHRpbmRleExhYmVsRm9udFdlaWdodDogXCJib2xkXCIsXG5cdFx0XHRcdFx0aW5kZXhMYWJlbEZvbnRTaXplOiAxOCxcblx0XHRcdFx0XHQvL2luZGV4TGFiZWxMaW5lQ29sb3I6IFwibGlnaHRncmV5XCIsXG5cdFx0XHRcdFx0aW5kZXhMYWJlbExpbmVUaGlja25lc3M6IDFcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0XCJ0aGVtZTNcIjoge1xuXHRcdFx0XHRDaGFydDpcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjb2xvclNldDogXCJjb2xvclNldDFcIlxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFRpdGxlOiB7XG5cdFx0XHRcdFx0Zm9udEZhbWlseTogaXNDYW52YXNTdXBwb3J0ZWQgPyBcIkNhbmRhcmEsIE9wdGltYSwgVHJlYnVjaGV0IE1TLCBIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBUcmVidWNoZXQgTVMsIHNlcmlmXCIgOiBcImNhbGlicmlcIixcblx0XHRcdFx0XHRmb250U2l6ZTogMzIsXG5cdFx0XHRcdFx0Zm9udENvbG9yOiBcIiMzQTNBM0FcIixcblx0XHRcdFx0XHRmb250V2VpZ2h0OiBcImJvbGRcIixcblx0XHRcdFx0XHR2ZXJ0aWNhbEFsaWduOiBcInRvcFwiLFxuXHRcdFx0XHRcdG1hcmdpbjogNVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRTdWJ0aXRsZToge1xuXHRcdFx0XHRcdGZvbnRGYW1pbHk6IGlzQ2FudmFzU3VwcG9ydGVkID8gXCJDYW5kYXJhLCBPcHRpbWEsIFRyZWJ1Y2hldCBNUywgSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYSwgVHJlYnVjaGV0IE1TLCBzZXJpZlwiIDogXCJjYWxpYnJpXCIsXG5cdFx0XHRcdFx0Zm9udFNpemU6IDE2LFxuXHRcdFx0XHRcdGZvbnRDb2xvcjogXCIjM0EzQTNBXCIsXG5cdFx0XHRcdFx0Zm9udFdlaWdodDogXCJib2xkXCIsXG5cdFx0XHRcdFx0dmVydGljYWxBbGlnbjogXCJ0b3BcIixcblx0XHRcdFx0XHRtYXJnaW46IDVcblx0XHRcdFx0fSxcblx0XHRcdFx0QXhpczoge1xuXHRcdFx0XHRcdHRpdGxlRm9udFNpemU6IDIyLFxuXHRcdFx0XHRcdHRpdGxlRm9udENvbG9yOiBcInJnYig5OCw5OCw5OClcIixcblx0XHRcdFx0XHQvL3RpdGxlRm9udEZhbWlseTogXCJhcmlhbCBibGFja1wiLFxuXHRcdFx0XHRcdHRpdGxlRm9udEZhbWlseTogaXNDYW52YXNTdXBwb3J0ZWQgPyBcIlZlcmRhbmEsIEdlbmV2YSwgQ2FsaWJyaSwgc2Fucy1zZXJpZlwiIDogXCJjYWxpYnJpXCIsXG5cdFx0XHRcdFx0Ly90aXRsZUZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXG5cdFx0XHRcdFx0Ly9sYWJlbEZvbnRGYW1pbHk6IFwiVGltZXMgTmV3IFJvbWFuLCBUaW1lcywgc2VyaWZcIixcblx0XHRcdFx0XHRsYWJlbEZvbnRGYW1pbHk6IGlzQ2FudmFzU3VwcG9ydGVkID8gXCJDYWxpYnJpLCBPcHRpbWEsIENhbmRhcmEsIFZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZlwiIDogXCJjYWxpYnJpXCIsXG5cdFx0XHRcdFx0Ly9sYWJlbEZvbnRGYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYVwiLFxuXHRcdFx0XHRcdGxhYmVsRm9udFNpemU6IDE4LFxuXHRcdFx0XHRcdGxhYmVsRm9udENvbG9yOiBcImdyZXlcIixcblx0XHRcdFx0XHQvL2xhYmVsRm9udFdlaWdodDogXCJib2xkXCIsXG5cdFx0XHRcdFx0dGlja0NvbG9yOiBcImdyZXlcIixcblx0XHRcdFx0XHR0aWNrVGhpY2tuZXNzOiAyLFxuXHRcdFx0XHRcdGdyaWRUaGlja25lc3M6IDIsXG5cdFx0XHRcdFx0Z3JpZENvbG9yOiBcImdyZXlcIixcblx0XHRcdFx0XHRsaW5lVGhpY2tuZXNzOiAyLFxuXHRcdFx0XHRcdGxpbmVDb2xvcjogXCJncmV5XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0TGVnZW5kOiB7XG5cdFx0XHRcdFx0dmVydGljYWxBbGlnbjogXCJib3R0b21cIixcblx0XHRcdFx0XHRob3Jpem9udGFsQWxpZ246IFwiY2VudGVyXCIsXG5cdFx0XHRcdFx0Zm9udEZhbWlseTogaXNDYW52YXNTdXBwb3J0ZWQgPyBcIm1vbm9zcGFjZSwgc2Fucy1zZXJpZixhcmlhbCBibGFja1wiIDogXCJjYWxpYnJpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0RGF0YVNlcmllczoge1xuXHRcdFx0XHRcdGJldmVsRW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHRpbmRleExhYmVsRm9udENvbG9yOiBcImdyZXlcIixcblx0XHRcdFx0XHQvL2luZGV4TGFiZWxGb250RmFtaWx5OiBcIlRyZWJ1Y2hldCBNUywgbW9ub3NwYWNlLCBDb3VyaWVyIE5ldywgQ291cmllclwiLFxuXHRcdFx0XHRcdGluZGV4TGFiZWxGb250RmFtaWx5OiBpc0NhbnZhc1N1cHBvcnRlZCA/IFwiQ2FuZGFyYSwgT3B0aW1hLCBDYWxpYnJpLCBWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWZcIiA6IFwiY2FsaWJyaVwiLFxuXHRcdFx0XHRcdC8vaW5kZXhMYWJlbEZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdGluZGV4TGFiZWxGb250U2l6ZTogMTgsXG5cdFx0XHRcdFx0aW5kZXhMYWJlbExpbmVDb2xvcjogXCJsaWdodGdyZXlcIixcblx0XHRcdFx0XHRpbmRleExhYmVsTGluZVRoaWNrbmVzczogMlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcbiIsIi8vI3JlZ2lvbiBBbmltYXRvclxuXG5pbXBvcnQgQW5pbWF0aW9uSGVscGVyIGZyb20gJy4uL2hlbHBlcnMvYW5pbWF0b3InO1xuXG5mdW5jdGlvbiBBbmltYXRvcihjaGFydCkge1xuXG4gIHRoaXMuY2hhcnQgPSBjaGFydDtcbiAgdGhpcy5jdHggPSB0aGlzLmNoYXJ0LnBsb3RBcmVhLmN0eDtcbiAgdGhpcy5hbmltYXRpb25zID0gW107XG4gIHRoaXMuYW5pbWF0aW9uUmVxdWVzdElkID0gbnVsbDtcbn1cblxuLy9BbmltYXRvci5wcm90b3R5cGUuYW5pbWF0ZSA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgYmFzZSwgZGVzdCwgc291cmNlLCBhbmltYXRpb25DYWxsYmFjaywgb25Db21wbGV0ZSkge1xuQW5pbWF0b3IucHJvdG90eXBlLmFuaW1hdGUgPSBmdW5jdGlvbiAoc3RhcnREZWxheSwgZHVyYXRpb24sIGFuaW1hdGlvbkNhbGxiYWNrLCBvbkNvbXBsZXRlLCBlYXNpbmdGdW5jdGlvbikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHRoaXMuY2hhcnQuaXNBbmltYXRpbmcgPSB0cnVlO1xuICBlYXNpbmdGdW5jdGlvbiA9IGVhc2luZ0Z1bmN0aW9uIHx8IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcubGluZWFyO1xuXG4gIGlmIChhbmltYXRpb25DYWxsYmFjaykge1xuXG4gICAgdGhpcy5hbmltYXRpb25zLnB1c2goe1xuICAgICAgc3RhcnRUaW1lOiAobmV3IERhdGUoKSkuZ2V0VGltZSgpICsgKHN0YXJ0RGVsYXkgPyBzdGFydERlbGF5IDogMCksXG4gICAgICBkdXJhdGlvbjogZHVyYXRpb24sXG4gICAgICBhbmltYXRpb25DYWxsYmFjazogYW5pbWF0aW9uQ2FsbGJhY2ssXG4gICAgICBvbkNvbXBsZXRlOiBvbkNvbXBsZXRlXG4gICAgfSk7XG4gIH1cblxuICB2YXIgcmVtYWluaW5nQW5pbWF0aW9ucyA9IFtdO1xuXG4gIHdoaWxlICh0aGlzLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkge1xuXG4gICAgdmFyIGFuaW1hdGlvbiA9IHRoaXMuYW5pbWF0aW9ucy5zaGlmdCgpO1xuICAgIHZhciBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICAgIHZhciBmcmFjdGlvbkNvbXBsZXRlID0gMDtcbiAgICAvL3ZhciBmcmFjdGlvbkNvbXBsZXRlID0gTWF0aC5taW4oKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSBhbmltYXRpb24uc3RhcnRUaW1lKSAvIGFuaW1hdGlvbi5kdXJhdGlvbiwgMSk7XG5cbiAgICBpZiAoYW5pbWF0aW9uLnN0YXJ0VGltZSA8PSBub3cpIHtcbiAgICAgIGZyYWN0aW9uQ29tcGxldGUgPSBlYXNpbmdGdW5jdGlvbihNYXRoLm1pbigobm93IC0gYW5pbWF0aW9uLnN0YXJ0VGltZSksIGFuaW1hdGlvbi5kdXJhdGlvbiksIDAsIDEsIGFuaW1hdGlvbi5kdXJhdGlvbik7XG4gICAgICAvL3ZhciBmcmFjdGlvbkNvbXBsZXRlID0gQW5pbWF0aW9uSGVscGVyLmVhc2luZy5lYXNlT3V0UXVhZChNYXRoLm1pbigoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIGFuaW1hdGlvbi5zdGFydFRpbWUpLCBhbmltYXRpb24uZHVyYXRpb24pLCAwLCAxLCBhbmltYXRpb24uZHVyYXRpb24pO1xuXG4gICAgICBmcmFjdGlvbkNvbXBsZXRlID0gTWF0aC5taW4oZnJhY3Rpb25Db21wbGV0ZSwgMSk7XG5cbiAgICAgIGlmIChpc05hTihmcmFjdGlvbkNvbXBsZXRlKSB8fCAhaXNGaW5pdGUoZnJhY3Rpb25Db21wbGV0ZSkpXG4gICAgICAgIGZyYWN0aW9uQ29tcGxldGUgPSAxO1xuICAgIH1cblxuICAgIGlmIChmcmFjdGlvbkNvbXBsZXRlIDwgMSkge1xuICAgICAgcmVtYWluaW5nQW5pbWF0aW9ucy5wdXNoKGFuaW1hdGlvbik7XG4gICAgfVxuXG4gICAgYW5pbWF0aW9uLmFuaW1hdGlvbkNhbGxiYWNrKGZyYWN0aW9uQ29tcGxldGUpO1xuXG4gICAgaWYgKGZyYWN0aW9uQ29tcGxldGUgPj0gMSAmJiBhbmltYXRpb24ub25Db21wbGV0ZSlcbiAgICAgIGFuaW1hdGlvbi5vbkNvbXBsZXRlKCk7XG4gIH1cblxuICB0aGlzLmFuaW1hdGlvbnMgPSByZW1haW5pbmdBbmltYXRpb25zO1xuXG4gIGlmICh0aGlzLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkge1xuICAgIHRoaXMuYW5pbWF0aW9uUmVxdWVzdElkID0gdGhpcy5jaGFydC5yZXF1ZXN0QW5pbUZyYW1lLmNhbGwod2luZG93LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5hbmltYXRlLmNhbGwoX3RoaXMpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuY2hhcnQuaXNBbmltYXRpbmcgPSBmYWxzZTtcbiAgfVxuXG59XG5cbkFuaW1hdG9yLnByb3RvdHlwZS5jYW5jZWxBbGxBbmltYXRpb25zID0gZnVuY3Rpb24gKCkge1xuXG4gIHRoaXMuYW5pbWF0aW9ucyA9IFtdO1xuXG4gIGlmICh0aGlzLmFuaW1hdGlvblJlcXVlc3RJZCkge1xuICAgIHRoaXMuY2hhcnQuY2FuY2VsUmVxdWVzdEFuaW1GcmFtZS5jYWxsKHdpbmRvdywgdGhpcy5hbmltYXRpb25SZXF1ZXN0SWQpO1xuICB9XG5cbiAgdGhpcy5hbmltYXRpb25SZXF1ZXN0SWQgPSBudWxsO1xuICB0aGlzLmNoYXJ0LmlzQW5pbWF0aW5nID0gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFuaW1hdG9yO1xuIiwiXG5pbXBvcnQgQ2FudmFzSlNPYmplY3QgZnJvbSAnLi9jYW52YXNqcyc7XG5pbXBvcnQgVGV4dEJsb2NrIGZyb20gJy4vdGV4dF9ibG9jayc7XG5pbXBvcnQge2V4dGVuZCwgbnVtYmVyRm9ybWF0LCBnZXRMaW5lRGFzaEFycmF5fSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZnVuY3Rpb24gQXhpcyhjaGFydCwgb3B0aW9ucywgdHlwZSwgcG9zaXRpb24pIHtcblxuXHRBeGlzLmJhc2UuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBcIkF4aXNcIiwgb3B0aW9ucywgY2hhcnQudGhlbWUpO1xuXG5cdHRoaXMuY2hhcnQgPSBjaGFydDtcblx0dGhpcy5jYW52YXMgPSBjaGFydC5jYW52YXM7XG5cdHRoaXMuY3R4ID0gY2hhcnQuY3R4O1xuXHR0aGlzLm1heFdpZHRoID0gMDtcblx0dGhpcy5tYXhIZWlnaHQgPSAwO1xuXHR0aGlzLmludGVydmFsU3RhcnRQb3NpdGlvbiA9IDA7XG5cdHRoaXMubGFiZWxzID0gW107XG5cdHRoaXMuX2xhYmVscyA9IG51bGw7XG5cblx0Ly9Qcm9jZXNzZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRhdGEgdGhhdCBnZXRzIHBsb3R0ZWQgYWdhaW5zdCB0aGlzIGF4aXNcblx0dGhpcy5kYXRhSW5mbyA9IHtcblx0XHRtaW46IEluZmluaXR5LFxuXHRcdG1heDogLUluZmluaXR5LFxuXHRcdHZpZXdQb3J0TWluOiBJbmZpbml0eSxcblx0XHR2aWV3UG9ydE1heDogLUluZmluaXR5LFxuXHRcdG1pbkRpZmY6IEluZmluaXR5IC8vIFVzZWQgb25seSBpbiBjYXNlIG9mIGF4aXNYXG5cdH07XG5cblx0aWYgKHR5cGUgPT09IFwiYXhpc1hcIikge1xuXHRcdHRoaXMuc2Vzc2lvblZhcmlhYmxlcyA9IHRoaXMuY2hhcnQuc2Vzc2lvblZhcmlhYmxlc1t0eXBlXTtcblxuXHRcdGlmICghdGhpcy5fb3B0aW9ucy5pbnRlcnZhbClcblx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gbnVsbDtcblx0fSBlbHNlIHtcblx0XHRpZiAocG9zaXRpb24gPT09IFwibGVmdFwiIHx8IHBvc2l0aW9uID09PSBcInRvcFwiKVxuXHRcdFx0dGhpcy5zZXNzaW9uVmFyaWFibGVzID0gdGhpcy5jaGFydC5zZXNzaW9uVmFyaWFibGVzW1wiYXhpc1lcIl07XG5cdFx0ZWxzZSB7XG5cdFx0XHR0aGlzLnNlc3Npb25WYXJpYWJsZXMgPSB0aGlzLmNoYXJ0LnNlc3Npb25WYXJpYWJsZXNbXCJheGlzWTJcIl07XG5cdFx0fVxuXHR9XG5cblxuXG5cdGlmICh0eXBlb2YgKHRoaXMuX29wdGlvbnMudGl0bGVGb250U2l6ZSkgPT09IFwidW5kZWZpbmVkXCIpIHtcblxuXHRcdHRoaXMudGl0bGVGb250U2l6ZSA9IHRoaXMuY2hhcnQuZ2V0QXV0b0ZvbnRTaXplKHRoaXMudGl0bGVGb250U2l6ZSk7XG5cblx0XHQvL3dpbmRvdy5jb25zb2xlLmxvZyhcInRpdGxlRm9udFNpemU6IFwiICsgdGhpcy50aXRsZUZvbnRTaXplKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgKHRoaXMuX29wdGlvbnMubGFiZWxGb250U2l6ZSkgPT09IFwidW5kZWZpbmVkXCIpIHtcblxuXHRcdHRoaXMubGFiZWxGb250U2l6ZSA9IHRoaXMuY2hhcnQuZ2V0QXV0b0ZvbnRTaXplKHRoaXMubGFiZWxGb250U2l6ZSk7XG5cblx0XHQvL3dpbmRvdy5jb25zb2xlLmxvZyhcImxhYmVsRm9udFNpemU6IFwiICsgdGhpcy5sYWJlbEZvbnRTaXplKTtcblxuXHR9XG5cblx0Ly9BeGlzIFR5cGUgOiBheGlzWCwgYXhpc1lcblx0dGhpcy50eXBlID0gdHlwZTtcblx0aWYgKHR5cGUgPT09IFwiYXhpc1hcIiAmJiAoIW9wdGlvbnMgfHwgdHlwZW9mIChvcHRpb25zLmdyaWRUaGlja25lc3MpID09PSBcInVuZGVmaW5lZFwiKSlcblx0XHR0aGlzLmdyaWRUaGlja25lc3MgPSAwO1xuXG5cdHRoaXMuX3Bvc2l0aW9uID0gcG9zaXRpb247XG5cblx0dGhpcy5saW5lQ29vcmRpbmF0ZXMgPSB7XG5cdFx0eDE6IG51bGwsIHkxOiBudWxsLCB4MjogbnVsbCwgeTI6IG51bGwsIHdpZHRoOiBudWxsXG5cdH07Ly97eDE6LCB5MTosIHgyOiwgeTI6LCB3aWR0aDp9XG5cdC8vXG5cdHtcblx0XHR0aGlzLmxhYmVsQW5nbGUgPSAoKHRoaXMubGFiZWxBbmdsZSAlIDM2MCkgKyAzNjApICUgMzYwO1xuXG5cdFx0aWYgKHRoaXMubGFiZWxBbmdsZSA+IDkwICYmIHRoaXMubGFiZWxBbmdsZSA8PSAyNzApXG5cdFx0XHR0aGlzLmxhYmVsQW5nbGUgLT0gMTgwO1xuXHRcdGVsc2UgaWYgKHRoaXMubGFiZWxBbmdsZSA+IDE4MCAmJiB0aGlzLmxhYmVsQW5nbGUgPD0gMjcwKVxuXHRcdFx0dGhpcy5sYWJlbEFuZ2xlIC09IDE4MFxuXHRcdGVsc2UgaWYgKHRoaXMubGFiZWxBbmdsZSA+IDI3MCAmJiB0aGlzLmxhYmVsQW5nbGUgPD0gMzYwKVxuXHRcdFx0dGhpcy5sYWJlbEFuZ2xlIC09IDM2MFxuXHR9XG5cblx0aWYgKHRoaXMuX29wdGlvbnMuc3RyaXBMaW5lcyAmJiB0aGlzLl9vcHRpb25zLnN0cmlwTGluZXMubGVuZ3RoID4gMCkge1xuXG5cdFx0dGhpcy5zdHJpcExpbmVzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29wdGlvbnMuc3RyaXBMaW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dGhpcy5zdHJpcExpbmVzLnB1c2gobmV3IFN0cmlwTGluZSh0aGlzLmNoYXJ0LCB0aGlzLl9vcHRpb25zLnN0cmlwTGluZXNbaV0sIGNoYXJ0LnRoZW1lLCArK3RoaXMuY2hhcnQuX2V2ZW50TWFuYWdlci5sYXN0T2JqZWN0SWQsIHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLl90aXRsZVRleHRCbG9jayA9IG51bGw7XG5cblx0aWYgKCF0aGlzLmhhc09wdGlvbkNoYW5nZWQoXCJ2aWV3cG9ydE1pbmltdW1cIikgJiYgIWlzTmFOKHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5uZXdWaWV3cG9ydE1pbmltdW0pICYmIHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5uZXdWaWV3cG9ydE1pbmltdW0gIT09IG51bGwpXG5cdFx0dGhpcy52aWV3cG9ydE1pbmltdW0gPSB0aGlzLnNlc3Npb25WYXJpYWJsZXMubmV3Vmlld3BvcnRNaW5pbXVtO1xuXHRlbHNlXG5cdFx0dGhpcy5zZXNzaW9uVmFyaWFibGVzLm5ld1ZpZXdwb3J0TWluaW11bSA9IG51bGw7XG5cblx0aWYgKCF0aGlzLmhhc09wdGlvbkNoYW5nZWQoXCJ2aWV3cG9ydE1heGltdW1cIikgJiYgIWlzTmFOKHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5uZXdWaWV3cG9ydE1heGltdW0pICYmIHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5uZXdWaWV3cG9ydE1heGltdW0gIT09IG51bGwpXG5cdFx0dGhpcy52aWV3cG9ydE1heGltdW0gPSB0aGlzLnNlc3Npb25WYXJpYWJsZXMubmV3Vmlld3BvcnRNYXhpbXVtO1xuXHRlbHNlXG5cdFx0dGhpcy5zZXNzaW9uVmFyaWFibGVzLm5ld1ZpZXdwb3J0TWF4aW11bSA9IG51bGw7XG5cblx0aWYgKHRoaXMubWluaW11bSAhPT0gbnVsbCAmJiB0aGlzLnZpZXdwb3J0TWluaW11bSAhPT0gbnVsbClcblx0XHR0aGlzLnZpZXdwb3J0TWluaW11bSA9IE1hdGgubWF4KHRoaXMudmlld3BvcnRNaW5pbXVtLCB0aGlzLm1pbmltdW0pO1xuXG5cdGlmICh0aGlzLm1heGltdW0gIT09IG51bGwgJiYgdGhpcy52aWV3cG9ydE1heGltdW0gIT09IG51bGwpXG5cdFx0dGhpcy52aWV3cG9ydE1heGltdW0gPSBNYXRoLm1pbih0aGlzLnZpZXdwb3J0TWF4aW11bSwgdGhpcy5tYXhpbXVtKTtcblxuXHR0aGlzLnRyYWNrQ2hhbmdlcyhcInZpZXdwb3J0TWluaW11bVwiKTtcblx0dGhpcy50cmFja0NoYW5nZXMoXCJ2aWV3cG9ydE1heGltdW1cIik7XG59XG5cbmV4dGVuZChBeGlzLCBDYW52YXNKU09iamVjdCk7XG5cbkF4aXMucHJvdG90eXBlLmNyZWF0ZUxhYmVscyA9IGZ1bmN0aW9uICgpIHtcblxuXHR2YXIgdGV4dEJsb2NrO1xuXHR2YXIgaSA9IDA7XG5cdHZhciBlbmRQb2ludDtcblxuXHR2YXIgbGFiZWxNYXhXaWR0aCA9IDA7XG5cdHZhciBsYWJlbE1heEhlaWdodCA9IDA7XG5cdHZhciBpbnRlcnZhbEluUGl4ZWxzID0gMDtcblxuXHQvL3ZhciBpbnRlcnZhbEluUGl4ZWxzID0gdGhpcy5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiB0aGlzLmludGVydmFsO1xuXG5cblx0aWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImJvdHRvbVwiIHx8IHRoaXMuX3Bvc2l0aW9uID09PSBcInRvcFwiKSB7XG5cdFx0aW50ZXJ2YWxJblBpeGVscyA9IHRoaXMubGluZUNvb3JkaW5hdGVzLndpZHRoIC8gTWF0aC5hYnModGhpcy52aWV3cG9ydE1heGltdW0gLSB0aGlzLnZpZXdwb3J0TWluaW11bSkgKiB0aGlzLmludGVydmFsO1xuXG5cdFx0aWYgKHRoaXMubGFiZWxBdXRvRml0KSB7XG5cdFx0XHRsYWJlbE1heFdpZHRoID0gdHlwZW9mICh0aGlzLl9vcHRpb25zLmxhYmVsTWF4V2lkdGgpID09PSBcInVuZGVmaW5lZFwiID8gaW50ZXJ2YWxJblBpeGVscyAqIC45ID4+IDAgOiB0aGlzLmxhYmVsTWF4V2lkdGg7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0bGFiZWxNYXhXaWR0aCA9IHR5cGVvZiAodGhpcy5fb3B0aW9ucy5sYWJlbE1heFdpZHRoKSA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMuY2hhcnQud2lkdGggKiAuNyA+PiAwIDogdGhpcy5sYWJlbE1heFdpZHRoO1xuXHRcdH1cblxuXHRcdGxhYmVsTWF4SGVpZ2h0ID0gdHlwZW9mICh0aGlzLl9vcHRpb25zLmxhYmVsV3JhcCkgPT09IFwidW5kZWZpbmVkXCIgfHwgdGhpcy5sYWJlbFdyYXAgPyB0aGlzLmNoYXJ0LmhlaWdodCAqIC41ID4+IDAgOiB0aGlzLmxhYmVsRm9udFNpemUgKiAxLjU7XG5cdH1cblx0ZWxzZSBpZiAodGhpcy5fcG9zaXRpb24gPT09IFwibGVmdFwiIHx8IHRoaXMuX3Bvc2l0aW9uID09PSBcInJpZ2h0XCIpIHtcblxuXHRcdGludGVydmFsSW5QaXhlbHMgPSB0aGlzLmxpbmVDb29yZGluYXRlcy5oZWlnaHQgLyBNYXRoLmFicyh0aGlzLnZpZXdwb3J0TWF4aW11bSAtIHRoaXMudmlld3BvcnRNaW5pbXVtKSAqIHRoaXMuaW50ZXJ2YWw7XG5cblxuXHRcdGlmICh0aGlzLmxhYmVsQXV0b0ZpdCkge1xuXHRcdFx0bGFiZWxNYXhXaWR0aCA9IHR5cGVvZiAodGhpcy5fb3B0aW9ucy5sYWJlbE1heFdpZHRoKSA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMuY2hhcnQud2lkdGggKiAuMyA+PiAwIDogdGhpcy5sYWJlbE1heFdpZHRoO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGxhYmVsTWF4V2lkdGggPSB0eXBlb2YgKHRoaXMuX29wdGlvbnMubGFiZWxNYXhXaWR0aCkgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzLmNoYXJ0LndpZHRoICogLjUgPj4gMCA6IHRoaXMubGFiZWxNYXhXaWR0aDtcblx0XHR9XG5cblx0XHRsYWJlbE1heEhlaWdodCA9IHR5cGVvZiAodGhpcy5fb3B0aW9ucy5sYWJlbFdyYXApID09PSBcInVuZGVmaW5lZFwiIHx8IHRoaXMubGFiZWxXcmFwID8gaW50ZXJ2YWxJblBpeGVscyAqIDIgPj4gMCA6IHRoaXMubGFiZWxGb250U2l6ZSAqIDEuNTtcblx0fVxuXG5cdGlmICh0aGlzLnR5cGUgPT09IFwiYXhpc1hcIiAmJiB0aGlzLmNoYXJ0LnBsb3RJbmZvLmF4aXNYVmFsdWVUeXBlID09PSBcImRhdGVUaW1lXCIpIHtcblx0XHRlbmRQb2ludCA9IGFkZFRvRGF0ZVRpbWUobmV3IERhdGUodGhpcy52aWV3cG9ydE1heGltdW0pLCB0aGlzLmludGVydmFsLCB0aGlzLmludGVydmFsVHlwZSlcblx0XHQvL2VuZFBvaW50ID0gdGhpcy52aWV3cG9ydE1heGltdW07XG5cblx0XHRmb3IgKGkgPSB0aGlzLmludGVydmFsU3RhcnRQb3NpdGlvbjsgaSA8IGVuZFBvaW50OyBhZGRUb0RhdGVUaW1lKGksIHRoaXMuaW50ZXJ2YWwsIHRoaXMuaW50ZXJ2YWxUeXBlKSkge1xuXG5cdFx0XHQvL3ZhciB0ZXh0ID0gZGF0ZUZvcm1hdChpLCB0aGlzLnZhbHVlRm9ybWF0U3RyaW5nKTtcblx0XHRcdHZhciB0aW1lSW5NaWxsaXNlY29uZHMgPSBpLmdldFRpbWUoKTtcblx0XHRcdHZhciB0ZXh0ID0gdGhpcy5sYWJlbEZvcm1hdHRlciA/IHRoaXMubGFiZWxGb3JtYXR0ZXIoeyBjaGFydDogdGhpcy5jaGFydCwgYXhpczogdGhpcy5fb3B0aW9ucywgdmFsdWU6IGksIGxhYmVsOiB0aGlzLmxhYmVsc1tpXSA/IHRoaXMubGFiZWxzW2ldIDogbnVsbCB9KVxuXHRcdFx0XHQ6IHRoaXMudHlwZSA9PT0gXCJheGlzWFwiICYmIHRoaXMubGFiZWxzW3RpbWVJbk1pbGxpc2Vjb25kc10gPyB0aGlzLmxhYmVsc1t0aW1lSW5NaWxsaXNlY29uZHNdIDogZGF0ZUZvcm1hdChpLCB0aGlzLnZhbHVlRm9ybWF0U3RyaW5nLCB0aGlzLmNoYXJ0Ll9jdWx0dXJlSW5mbyk7XG5cblx0XHRcdHRleHRCbG9jayA9IG5ldyBUZXh0QmxvY2sodGhpcy5jdHgsIHtcblx0XHRcdFx0eDogMCxcblx0XHRcdFx0eTogMCxcblx0XHRcdFx0Ly9tYXhXaWR0aDogdGhpcy5tYXhIZWlnaHQsXG5cdFx0XHRcdC8vbWF4SGVpZ2h0OiB0aGlzLmxhYmVsRm9udFNpemUsXG5cdFx0XHRcdG1heFdpZHRoOiBsYWJlbE1heFdpZHRoLFxuXHRcdFx0XHRtYXhIZWlnaHQ6IGxhYmVsTWF4SGVpZ2h0LFxuXHRcdFx0XHRhbmdsZTogdGhpcy5sYWJlbEFuZ2xlLFxuXHRcdFx0XHR0ZXh0OiB0aGlzLnByZWZpeCArIHRleHQgKyB0aGlzLnN1ZmZpeCxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBcImxlZnRcIiwvL2xlZnQsIGNlbnRlciwgcmlnaHRcblx0XHRcdFx0Zm9udFNpemU6IHRoaXMubGFiZWxGb250U2l6ZSwvL2luIHBpeGVsc1xuXHRcdFx0XHRmb250RmFtaWx5OiB0aGlzLmxhYmVsRm9udEZhbWlseSxcblx0XHRcdFx0Zm9udFdlaWdodDogdGhpcy5sYWJlbEZvbnRXZWlnaHQsIC8vbm9ybWFsLCBib2xkLCBib2xkZXIsIGxpZ2h0ZXIsXG5cdFx0XHRcdGZvbnRDb2xvcjogdGhpcy5sYWJlbEZvbnRDb2xvcixcblx0XHRcdFx0Zm9udFN0eWxlOiB0aGlzLmxhYmVsRm9udFN0eWxlLCAvLyBub3JtYWwsIGl0YWxpYywgb2JsaXF1ZVxuXHRcdFx0XHR0ZXh0QmFzZWxpbmU6IFwibWlkZGxlXCJcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLl9sYWJlbHMucHVzaCh7IHBvc2l0aW9uOiBpLmdldFRpbWUoKSwgdGV4dEJsb2NrOiB0ZXh0QmxvY2ssIGVmZmVjdGl2ZUhlaWdodDogbnVsbCB9KTtcblx0XHR9XG5cblx0fVxuXHRlbHNlIHtcblx0XHRlbmRQb2ludCA9IHRoaXMudmlld3BvcnRNYXhpbXVtO1xuXG5cdFx0Ly9pZiAoKE1hdGguZmxvb3IodGhpcy5pbnRlcnZhbCkgPCB0aGlzLmludGVydmFsICYmICF0aGlzLl9vcHRpb25zLmludGVydmFsKSB8fCB0cnVlKSB7XG5cblx0XHQvL0NoZWNrIGlmIGl0IHNob3VsZCBiZSByZW5kZXJlZCBhcyBhIGNhdGVnb3J5IGF4aXMuIElmIHllcywgdGhlbiBjZWlsIHRoZSBpbnRlcnZhbFxuXHRcdGlmICh0aGlzLmxhYmVscyAmJiB0aGlzLmxhYmVscy5sZW5ndGgpIHtcblx0XHRcdHZhciB0ZW1wSW50ZXJ2YWwgPSBNYXRoLmNlaWwodGhpcy5pbnRlcnZhbCk7XG5cdFx0XHR2YXIgdGVtcFN0YXJ0UG9pbnQgPSBNYXRoLmNlaWwodGhpcy5pbnRlcnZhbFN0YXJ0UG9zaXRpb24pO1xuXHRcdFx0dmFyIGhhc0FsbExhYmVscyA9IGZhbHNlO1xuXHRcdFx0Zm9yIChpID0gdGVtcFN0YXJ0UG9pbnQ7IGkgPCB0aGlzLnZpZXdwb3J0TWF4aW11bTsgaSArPSB0ZW1wSW50ZXJ2YWwpIHtcblx0XHRcdFx0aWYgKHRoaXMubGFiZWxzW2ldKSB7XG5cdFx0XHRcdFx0aGFzQWxsTGFiZWxzID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRoYXNBbGxMYWJlbHMgPSBmYWxzZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaGFzQWxsTGFiZWxzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSB0ZW1wSW50ZXJ2YWw7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxTdGFydFBvc2l0aW9uID0gdGVtcFN0YXJ0UG9pbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9wYXJzZUZsb2F0ICYgdG9QcmVjaXNpb24gYXJlIGJlaW5nIHVzZWQgdG8gYXZvaWQgaXNzdWVzIHJlbGF0ZWQgdG8gcHJlY2lzaW9uLlxuXHRcdGZvciAoaSA9IHRoaXMuaW50ZXJ2YWxTdGFydFBvc2l0aW9uOyBpIDw9IGVuZFBvaW50OyBpID0gcGFyc2VGbG9hdCgoaSArIHRoaXMuaW50ZXJ2YWwpLnRvRml4ZWQoMTQpKSkge1xuXG5cdFx0XHR2YXIgdGV4dCA9IHRoaXMubGFiZWxGb3JtYXR0ZXIgPyB0aGlzLmxhYmVsRm9ybWF0dGVyKHsgY2hhcnQ6IHRoaXMuY2hhcnQsIGF4aXM6IHRoaXMuX29wdGlvbnMsIHZhbHVlOiBpLCBsYWJlbDogdGhpcy5sYWJlbHNbaV0gPyB0aGlzLmxhYmVsc1tpXSA6IG51bGwgfSlcblx0XHRcdFx0OiB0aGlzLnR5cGUgPT09IFwiYXhpc1hcIiAmJiB0aGlzLmxhYmVsc1tpXSA/IHRoaXMubGFiZWxzW2ldIDogbnVtYmVyRm9ybWF0KGksIHRoaXMudmFsdWVGb3JtYXRTdHJpbmcsIHRoaXMuY2hhcnQuX2N1bHR1cmVJbmZvKTtcblxuXHRcdFx0dGV4dEJsb2NrID0gbmV3IFRleHRCbG9jayh0aGlzLmN0eCwge1xuXHRcdFx0XHR4OiAwLFxuXHRcdFx0XHR5OiAwLFxuXHRcdFx0XHQvL21heFdpZHRoOiB0aGlzLm1heEhlaWdodCxcblx0XHRcdFx0Ly9tYXhIZWlnaHQ6IHRoaXMubGFiZWxGb250U2l6ZSxcblx0XHRcdFx0bWF4V2lkdGg6IGxhYmVsTWF4V2lkdGgsXG5cdFx0XHRcdG1heEhlaWdodDogbGFiZWxNYXhIZWlnaHQsXG5cdFx0XHRcdGFuZ2xlOiB0aGlzLmxhYmVsQW5nbGUsXG5cdFx0XHRcdHRleHQ6IHRoaXMucHJlZml4ICsgdGV4dCArIHRoaXMuc3VmZml4LFxuXHRcdFx0XHRob3Jpem9udGFsQWxpZ246IFwibGVmdFwiLC8vbGVmdCwgY2VudGVyLCByaWdodFxuXHRcdFx0XHRmb250U2l6ZTogdGhpcy5sYWJlbEZvbnRTaXplLC8vaW4gcGl4ZWxzXG5cdFx0XHRcdGZvbnRGYW1pbHk6IHRoaXMubGFiZWxGb250RmFtaWx5LFxuXHRcdFx0XHRmb250V2VpZ2h0OiB0aGlzLmxhYmVsRm9udFdlaWdodCwgLy9ub3JtYWwsIGJvbGQsIGJvbGRlciwgbGlnaHRlcixcblx0XHRcdFx0Zm9udENvbG9yOiB0aGlzLmxhYmVsRm9udENvbG9yLFxuXHRcdFx0XHRmb250U3R5bGU6IHRoaXMubGFiZWxGb250U3R5bGUsIC8vIG5vcm1hbCwgaXRhbGljLCBvYmxpcXVlXG5cdFx0XHRcdHRleHRCYXNlbGluZTogXCJtaWRkbGVcIixcblx0XHRcdFx0Ym9yZGVyVGhpY2tuZXNzOiAwXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5fbGFiZWxzLnB1c2goeyBwb3NpdGlvbjogaSwgdGV4dEJsb2NrOiB0ZXh0QmxvY2ssIGVmZmVjdGl2ZUhlaWdodDogbnVsbCB9KTtcblx0XHR9XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RyaXBMaW5lcy5sZW5ndGg7IGkrKykge1xuXG5cdFx0dmFyIHN0cmlwTGluZSA9IHRoaXMuc3RyaXBMaW5lc1tpXTtcblxuXHRcdHRleHRCbG9jayA9IG5ldyBUZXh0QmxvY2sodGhpcy5jdHgsIHtcblx0XHRcdHg6IDAsXG5cdFx0XHR5OiAwLFxuXHRcdFx0Ly9tYXhXaWR0aDogdGhpcy5tYXhIZWlnaHQsXG5cdFx0XHQvL21heEhlaWdodDogdGhpcy5sYWJlbEZvbnRTaXplLFxuXHRcdFx0YmFja2dyb3VuZENvbG9yOiBzdHJpcExpbmUubGFiZWxCYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHRtYXhXaWR0aDogbGFiZWxNYXhXaWR0aCxcblx0XHRcdG1heEhlaWdodDogbGFiZWxNYXhIZWlnaHQsXG5cdFx0XHRhbmdsZTogdGhpcy5sYWJlbEFuZ2xlLFxuXHRcdFx0dGV4dDogc3RyaXBMaW5lLmxhYmVsRm9ybWF0dGVyID8gc3RyaXBMaW5lLmxhYmVsRm9ybWF0dGVyKHsgY2hhcnQ6IHRoaXMuY2hhcnQsIGF4aXM6IHRoaXMsIHN0cmlwTGluZTogc3RyaXBMaW5lIH0pIDogc3RyaXBMaW5lLmxhYmVsLFxuXHRcdFx0aG9yaXpvbnRhbEFsaWduOiBcImxlZnRcIiwvL2xlZnQsIGNlbnRlciwgcmlnaHRcblx0XHRcdGZvbnRTaXplOiBzdHJpcExpbmUubGFiZWxGb250U2l6ZSwvL2luIHBpeGVsc1xuXHRcdFx0Zm9udEZhbWlseTogc3RyaXBMaW5lLmxhYmVsRm9udEZhbWlseSxcblx0XHRcdGZvbnRXZWlnaHQ6IHN0cmlwTGluZS5sYWJlbEZvbnRXZWlnaHQsIC8vbm9ybWFsLCBib2xkLCBib2xkZXIsIGxpZ2h0ZXIsXG5cdFx0XHRmb250Q29sb3I6IHN0cmlwTGluZS5fb3B0aW9ucy5sYWJlbEZvbnRDb2xvciB8fCBzdHJpcExpbmUuY29sb3IsXG5cdFx0XHRmb250U3R5bGU6IHN0cmlwTGluZS5sYWJlbEZvbnRTdHlsZSwgLy8gbm9ybWFsLCBpdGFsaWMsIG9ibGlxdWVcblx0XHRcdHRleHRCYXNlbGluZTogXCJtaWRkbGVcIixcblx0XHRcdGJvcmRlclRoaWNrbmVzczogMFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5fbGFiZWxzLnB1c2goeyBwb3NpdGlvbjogc3RyaXBMaW5lLnZhbHVlLCB0ZXh0QmxvY2s6IHRleHRCbG9jaywgZWZmZWN0aXZlSGVpZ2h0OiBudWxsLCBzdHJpcExpbmU6IHN0cmlwTGluZSB9KTtcblx0fVxuXG59XG5cbkF4aXMucHJvdG90eXBlLmNyZWF0ZUxhYmVsc0FuZENhbGN1bGF0ZVdpZHRoID0gZnVuY3Rpb24gKCkge1xuXG5cdHZhciBtYXhMYWJlbEVmZmVjdGl2ZVdpZHRoID0gMDtcblx0dGhpcy5fbGFiZWxzID0gW107XG5cblx0aWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImxlZnRcIiB8fCB0aGlzLl9wb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG5cblx0XHR0aGlzLmNyZWF0ZUxhYmVscygpO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9sYWJlbHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0dmFyIHRleHRCbG9jayA9IHRoaXMuX2xhYmVsc1tpXS50ZXh0QmxvY2s7XG5cblx0XHRcdHZhciBzaXplID0gdGV4dEJsb2NrLm1lYXN1cmVUZXh0KCk7XG5cblx0XHRcdC8vdmFyIGh5cG90ZW51c2UgPSBNYXRoLnNxcnQoTWF0aC5wb3coc2l6ZS5oZWlnaHQgLyAyLCAyKSArIE1hdGgucG93KHNpemUud2lkdGgsIDIpKTtcblx0XHRcdC8vbGFiZWxFZmZlY3RpdmVXaWR0aCA9IGh5cG90ZW51c2UgKiBNYXRoLmNvcyhNYXRoLmFicyhNYXRoLlBJIC8gMTgwICogdGhpcy5sYWJlbEFuZ2xlKSAtIE1hdGguYWJzKE1hdGguYWNvcyhzaXplLndpZHRoIC8gaHlwb3RlbnVzZSkpKTtcblxuXHRcdFx0dmFyIGxhYmVsRWZmZWN0aXZlV2lkdGggPSAwO1xuXG5cdFx0XHRpZiAodGhpcy5sYWJlbEFuZ2xlID09PSAwKVxuXHRcdFx0XHRsYWJlbEVmZmVjdGl2ZVdpZHRoID0gc2l6ZS53aWR0aDtcblx0XHRcdGVsc2Vcblx0XHRcdFx0bGFiZWxFZmZlY3RpdmVXaWR0aCA9IChzaXplLndpZHRoICogTWF0aC5jb3MoTWF0aC5QSSAvIDE4MCAqIE1hdGguYWJzKHRoaXMubGFiZWxBbmdsZSkpKSArIChzaXplLmhlaWdodCAvIDIgKiBNYXRoLnNpbihNYXRoLlBJIC8gMTgwICogTWF0aC5hYnModGhpcy5sYWJlbEFuZ2xlKSkpO1xuXG5cblx0XHRcdGlmIChtYXhMYWJlbEVmZmVjdGl2ZVdpZHRoIDwgbGFiZWxFZmZlY3RpdmVXaWR0aClcblx0XHRcdFx0bWF4TGFiZWxFZmZlY3RpdmVXaWR0aCA9IGxhYmVsRWZmZWN0aXZlV2lkdGg7XG5cblx0XHRcdHRoaXMuX2xhYmVsc1tpXS5lZmZlY3RpdmVXaWR0aCA9IGxhYmVsRWZmZWN0aXZlV2lkdGg7XG5cdFx0fVxuXHR9XG5cblxuXG5cdHZhciB0aXRsZUhlaWdodCA9IHRoaXMudGl0bGUgPyBnZXRGb250SGVpZ2h0SW5QaXhlbHModGhpcy50aXRsZUZvbnRGYW1pbHksIHRoaXMudGl0bGVGb250U2l6ZSwgdGhpcy50aXRsZUZvbnRXZWlnaHQpICsgMiA6IDA7XG5cblx0dmFyIGF4aXNXaWR0aCA9IHRpdGxlSGVpZ2h0ICsgbWF4TGFiZWxFZmZlY3RpdmVXaWR0aCArIHRoaXMudGlja0xlbmd0aCArIDU7XG5cblx0Ly9pZiAoaXNEZWJ1Z01vZGUgJiYgd2luZG93LmNvbnNvbGUpIHtcblx0Ly9cdHdpbmRvdy5jb25zb2xlLmxvZyh0aGlzLnR5cGUgKyBcIi0tLSBheGlzV2lkdGg6IFwiICsgYXhpc1dpZHRoKTtcblx0Ly99XG5cblx0cmV0dXJuIGF4aXNXaWR0aDtcbn1cblxuQXhpcy5wcm90b3R5cGUuY3JlYXRlTGFiZWxzQW5kQ2FsY3VsYXRlSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgbWF4TGFiZWxFZmZlY3RpdmVIZWlnaHQgPSAwO1xuXHR0aGlzLl9sYWJlbHMgPSBbXTtcblx0dmFyIHRleHRCbG9jaztcblx0dmFyIGkgPSAwO1xuXG5cdHRoaXMuY3JlYXRlTGFiZWxzKCk7XG5cblx0aWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImJvdHRvbVwiIHx8IHRoaXMuX3Bvc2l0aW9uID09PSBcInRvcFwiKSB7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5fbGFiZWxzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdHRleHRCbG9jayA9IHRoaXMuX2xhYmVsc1tpXS50ZXh0QmxvY2s7XG5cblx0XHRcdHZhciBzaXplID0gdGV4dEJsb2NrLm1lYXN1cmVUZXh0KCk7XG5cdFx0XHQvL3ZhciBkaWFnb25hbCA9IE1hdGguc3FydChNYXRoLnBvdyhzaXplLmhlaWdodCwgMikgKyBNYXRoLnBvdyhzaXplLndpZHRoLCAyKSk7XG5cblx0XHRcdC8vdmFyIGh5cG90ZW51c2UgPSBNYXRoLnNxcnQoTWF0aC5wb3coc2l6ZS5oZWlnaHQgLyAyLCAyKSArIE1hdGgucG93KHNpemUud2lkdGgsIDIpKTtcblx0XHRcdC8vdmFyIGxhYmVsRWZmZWN0aXZlSGVpZ2h0ID0gaHlwb3RlbnVzZSAqIE1hdGguY29zKE1hdGguUEkgLyAyIC0gKE1hdGguYWJzKE1hdGguUEkgLyAxODAgKiB0aGlzLmxhYmVsQW5nbGUpICsgTWF0aC5hYnMoTWF0aC5hY29zKHNpemUud2lkdGggLyBoeXBvdGVudXNlKSkpKTtcblxuXHRcdFx0dmFyIGxhYmVsRWZmZWN0aXZlSGVpZ2h0ID0gMDtcblxuXHRcdFx0aWYgKHRoaXMubGFiZWxBbmdsZSA9PT0gMClcblx0XHRcdFx0bGFiZWxFZmZlY3RpdmVIZWlnaHQgPSBzaXplLmhlaWdodDtcblx0XHRcdGVsc2Vcblx0XHRcdFx0bGFiZWxFZmZlY3RpdmVIZWlnaHQgPSAoc2l6ZS53aWR0aCAqIE1hdGguc2luKE1hdGguUEkgLyAxODAgKiBNYXRoLmFicyh0aGlzLmxhYmVsQW5nbGUpKSkgKyAoc2l6ZS5oZWlnaHQgLyAyICogTWF0aC5jb3MoTWF0aC5QSSAvIDE4MCAqIE1hdGguYWJzKHRoaXMubGFiZWxBbmdsZSkpKTtcblxuXHRcdFx0aWYgKG1heExhYmVsRWZmZWN0aXZlSGVpZ2h0IDwgbGFiZWxFZmZlY3RpdmVIZWlnaHQpXG5cdFx0XHRcdG1heExhYmVsRWZmZWN0aXZlSGVpZ2h0ID0gbGFiZWxFZmZlY3RpdmVIZWlnaHQ7XG5cblx0XHRcdHRoaXMuX2xhYmVsc1tpXS5lZmZlY3RpdmVIZWlnaHQgPSBsYWJlbEVmZmVjdGl2ZUhlaWdodDtcblx0XHR9XG5cdH1cblxuXHQvL3ZhciB0aXRsZUhlaWdodCA9IHRoaXMudGl0bGUgPyB0aGlzLnRpdGxlRm9udFNpemUgKyA1IDogMDtcblx0dmFyIHRpdGxlSGVpZ2h0ID0gdGhpcy50aXRsZSA/IGdldEZvbnRIZWlnaHRJblBpeGVscyh0aGlzLnRpdGxlRm9udEZhbWlseSwgdGhpcy50aXRsZUZvbnRTaXplLCB0aGlzLnRpdGxlRm9udFdlaWdodCkgKyAyIDogMDtcblxuXHRyZXR1cm4gdGl0bGVIZWlnaHQgKyBtYXhMYWJlbEVmZmVjdGl2ZUhlaWdodCArIHRoaXMudGlja0xlbmd0aCArIDU7XG59XG5cbi8vU3RhdGljIE1ldGhvZCB0aGF0IGNvLW9yZGluYXRlcyBiZXR3ZWVuIGF4aXNYLCBheGlzWSBhbmQgcmVuZGVycyB0aGVtXG5BeGlzLnNldExheW91dEFuZFJlbmRlciA9IGZ1bmN0aW9uIChheGlzWCwgYXhpc1ksIGF4aXNZMiwgYXhpc1BsYWNlbWVudCwgZnJlZVNwYWNlKSB7XG5cdHZhciB4MSwgeTEsIHgyLCB5Mjtcblx0dmFyIGNoYXJ0ID0gYXhpc1guY2hhcnQ7XG5cdHZhciBjdHggPSBjaGFydC5jdHg7XG5cblx0YXhpc1guY2FsY3VsYXRlQXhpc1BhcmFtZXRlcnMoKTtcblxuXHRpZiAoYXhpc1kpXG5cdFx0YXhpc1kuY2FsY3VsYXRlQXhpc1BhcmFtZXRlcnMoKTtcblxuXHRpZiAoYXhpc1kyKVxuXHRcdGF4aXNZMi5jYWxjdWxhdGVBeGlzUGFyYW1ldGVycygpO1xuXG5cdC8vaWYgKGF4aXNZICYmIGF4aXNZMiAmJiB0eXBlb2YgKGF4aXNZLl9vcHRpb25zLnZpZXdwb3J0TWF4aW11bSkgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIChheGlzWS5fb3B0aW9ucy52aWV3cG9ydE1pbmltdW0pID09PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiAoYXhpc1kuX29wdGlvbnMuaW50ZXJ2YWwpID09PSBcInVuZGVmaW5lZFwiXG5cdC8vXHRcdCYmIHR5cGVvZiAoYXhpc1kyLl9vcHRpb25zLnZpZXdwb3J0TWF4aW11bSkgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIChheGlzWTIuX29wdGlvbnMudmlld3BvcnRNaW5pbXVtKSA9PT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgKGF4aXNZMi5fb3B0aW9ucy5pbnRlcnZhbCkgPT09IFwidW5kZWZpbmVkXCIpIHtcblxuXHQvL1x0dmFyIG5vVGlja3NZID0gKGF4aXNZLnZpZXdwb3J0TWF4aW11bSAtIGF4aXNZLnZpZXdwb3J0TWluaW11bSkgLyBheGlzWS5pbnRlcnZhbDtcblxuXHQvL1x0dmFyIG5vVGlja3NZMiA9IChheGlzWTIudmlld3BvcnRNYXhpbXVtIC0gYXhpc1kyLnZpZXdwb3J0TWluaW11bSkgLyBheGlzWTIuaW50ZXJ2YWw7XG5cblx0Ly9cdGlmIChub1RpY2tzWSA+IG5vVGlja3NZMikge1xuXHQvL1x0XHRheGlzWTIudmlld3BvcnRNYXhpbXVtID0gYXhpc1kyLmludGVydmFsICogbm9UaWNrc1kgKyBheGlzWTIudmlld3BvcnRNaW5pbXVtO1xuXHQvL1x0fSBlbHNlIGlmIChub1RpY2tzWTIgPiBub1RpY2tzWSkge1xuXHQvL1x0XHRheGlzWS52aWV3cG9ydE1heGltdW0gPSBheGlzWS5pbnRlcnZhbCAqIG5vVGlja3NZMiArIGF4aXNZLnZpZXdwb3J0TWluaW11bTtcblx0Ly9cdH1cblx0Ly99XG5cblx0dmFyIGF4aXNZbGluZVRoaWNrbmVzcyA9IGF4aXNZID8gYXhpc1kubGluZVRoaWNrbmVzcyA/IGF4aXNZLmxpbmVUaGlja25lc3MgOiAwIDogMDtcblx0dmFyIGF4aXNZMmxpbmVUaGlja25lc3MgPSBheGlzWTIgPyBheGlzWTIubGluZVRoaWNrbmVzcyA/IGF4aXNZMi5saW5lVGhpY2tuZXNzIDogMCA6IDA7XG5cblx0dmFyIGF4aXNZR3JpZFRoaWNrbmVzcyA9IGF4aXNZID8gYXhpc1kuZ3JpZFRoaWNrbmVzcyA/IGF4aXNZLmdyaWRUaGlja25lc3MgOiAwIDogMDtcblx0dmFyIGF4aXNZMkdyaWRUaGlja25lc3MgPSBheGlzWTIgPyBheGlzWTIuZ3JpZFRoaWNrbmVzcyA/IGF4aXNZMi5ncmlkVGhpY2tuZXNzIDogMCA6IDA7XG5cblx0dmFyIGF4aXNZTWFyZ2luID0gYXhpc1kgPyBheGlzWS5tYXJnaW4gOiAwO1xuXHR2YXIgYXhpc1kyTWFyZ2luID0gYXhpc1kgPyBheGlzWS5tYXJnaW4gOiAwO1xuXG5cdGlmIChheGlzUGxhY2VtZW50ID09PSBcIm5vcm1hbFwiKSB7XG5cblx0XHRheGlzWC5saW5lQ29vcmRpbmF0ZXMgPSB7XG5cdFx0fTtcblxuXHRcdHZhciBheGlzWVdpZHRoID0gTWF0aC5jZWlsKGF4aXNZID8gYXhpc1kuY3JlYXRlTGFiZWxzQW5kQ2FsY3VsYXRlV2lkdGgoKSA6IDApO1xuXHRcdHgxID0gTWF0aC5yb3VuZChmcmVlU3BhY2UueDEgKyBheGlzWVdpZHRoICsgYXhpc1lNYXJnaW4pO1xuXHRcdGF4aXNYLmxpbmVDb29yZGluYXRlcy54MSA9IHgxO1xuXG5cdFx0dmFyIGF4aXNZMldpZHRoID0gTWF0aC5jZWlsKGF4aXNZMiA/IGF4aXNZMi5jcmVhdGVMYWJlbHNBbmRDYWxjdWxhdGVXaWR0aCgpIDogMCk7XG5cdFx0eDIgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS54MiAtIGF4aXNZMldpZHRoID4gYXhpc1guY2hhcnQud2lkdGggLSAxMCA/IGF4aXNYLmNoYXJ0LndpZHRoIC0gMTAgOiBmcmVlU3BhY2UueDIgLSBheGlzWTJXaWR0aCk7XG5cdFx0YXhpc1gubGluZUNvb3JkaW5hdGVzLngyID0geDI7XG5cblx0XHRheGlzWC5saW5lQ29vcmRpbmF0ZXMud2lkdGggPSBNYXRoLmFicyh4MiAtIHgxKTsgLy8gcmVxdWlyZWQgZWFybHkgb24gaW5zaWRlIGNyZWF0ZUxhYmVscyBvZiBheGlzWFxuXG5cdFx0dmFyIGF4aXNYSGVpZ2h0ID0gTWF0aC5jZWlsKGF4aXNYLmNyZWF0ZUxhYmVsc0FuZENhbGN1bGF0ZUhlaWdodCgpKTtcblxuXHRcdC8vIFBvc2l0aW9uIGF4aXNYIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSwgTWFyZ2luIGFuZCBpdHMgaGVpZ2h0XG5cdFx0Ly94MSA9IGZyZWVTcGFjZS54MSArIGF4aXNZV2lkdGggKyBheGlzWU1hcmdpbiArIGF4aXNZbGluZVRoaWNrbmVzcyAvIDI7XG5cdFx0eTEgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS55MiAtIGF4aXNYSGVpZ2h0IC0gYXhpc1gubWFyZ2luKTtcblx0XHR5MiA9IE1hdGgucm91bmQoZnJlZVNwYWNlLnkyIC0gYXhpc1gubWFyZ2luKTtcblxuXHRcdC8vYXhpc1gubGluZUNvb3JkaW5hdGVzID0geyB4MTogeDEsIHkxOiB5MSwgeDI6IHgyLCB5MjogeTEsIHdpZHRoOiBNYXRoLmFicyh4MiAtIHgxKSB9XG5cdFx0YXhpc1gubGluZUNvb3JkaW5hdGVzLnkxID0geTE7XG5cdFx0YXhpc1gubGluZUNvb3JkaW5hdGVzLnkyID0geTE7XG5cblx0XHRheGlzWC5ib3VuZGluZ1JlY3QgPSB7XG5cdFx0XHR4MTogeDEsIHkxOiB5MSwgeDI6IHgyLCB5MjogeTIsIHdpZHRoOiB4MiAtIHgxLCBoZWlnaHQ6IHkyIC0geTFcblx0XHR9O1xuXG5cdFx0Ly9pZiAoaXNEZWJ1Z01vZGUpIHtcblx0XHQvL1x0YXhpc1guY3R4LnJlY3QoYXhpc1guYm91bmRpbmdSZWN0LngxLCBheGlzWC5ib3VuZGluZ1JlY3QueTEsIGF4aXNYLmJvdW5kaW5nUmVjdC53aWR0aCwgYXhpc1guYm91bmRpbmdSZWN0LmhlaWdodCk7XG5cdFx0Ly9cdGF4aXNYLmN0eC5zdHJva2UoKTtcblx0XHQvL31cblxuXHRcdC8vIFBvc2l0aW9uIGF4aXNZIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSwgTWFyZ2luIGFuZCBpdHMgaGVpZ2h0XG5cdFx0aWYgKGF4aXNZKSB7XG5cdFx0XHR4MSA9IE1hdGgucm91bmQoZnJlZVNwYWNlLngxICsgYXhpc1kubWFyZ2luKTtcblx0XHRcdHkxID0gTWF0aC5yb3VuZChmcmVlU3BhY2UueTEgPCAxMCA/IDEwIDogZnJlZVNwYWNlLnkxKTtcblx0XHRcdHgyID0gTWF0aC5yb3VuZChmcmVlU3BhY2UueDEgKyBheGlzWVdpZHRoICsgYXhpc1kubWFyZ2luKTtcblx0XHRcdC8veTIgPSBmcmVlU3BhY2UueTIgLSBheGlzWEhlaWdodCAtIGF4aXNYLm1hcmdpbiAtIGF4aXNYLmxpbmVUaGlja25lc3MgLyAyO1xuXHRcdFx0eTIgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS55MiAtIGF4aXNYSGVpZ2h0IC0gYXhpc1gubWFyZ2luKTtcblxuXHRcdFx0YXhpc1kubGluZUNvb3JkaW5hdGVzID0ge1xuXHRcdFx0XHR4MTogeDIsIHkxOiB5MSwgeDI6IHgyLCB5MjogeTIsIGhlaWdodDogTWF0aC5hYnMoeTIgLSB5MSlcblx0XHRcdH1cblxuXHRcdFx0YXhpc1kuYm91bmRpbmdSZWN0ID0ge1xuXHRcdFx0XHR4MTogeDEsIHkxOiB5MSwgeDI6IHgyLCB5MjogeTIsIHdpZHRoOiB4MiAtIHgxLCBoZWlnaHQ6IHkyIC0geTFcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly9pZiAoaXNEZWJ1Z01vZGUgJiYgYXhpc1kpIHtcblx0XHQvL1x0YXhpc1kuY3R4LnJlY3QoYXhpc1kuYm91bmRpbmdSZWN0LngxLCBheGlzWS5ib3VuZGluZ1JlY3QueTEsIGF4aXNZLmJvdW5kaW5nUmVjdC53aWR0aCwgYXhpc1kuYm91bmRpbmdSZWN0LmhlaWdodCk7XG5cdFx0Ly9cdGF4aXNZLmN0eC5zdHJva2UoKTtcblx0XHQvL31cblxuXHRcdC8vIFBvc2l0aW9uIGF4aXNZMiBiYXNlZCBvbiB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UsIE1hcmdpbiBhbmQgaXRzIGhlaWdodFxuXHRcdGlmIChheGlzWTIpIHtcblx0XHRcdHgxID0gTWF0aC5yb3VuZChheGlzWC5saW5lQ29vcmRpbmF0ZXMueDIpO1xuXHRcdFx0eTEgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS55MSA8IDEwID8gMTAgOiBmcmVlU3BhY2UueTEpO1xuXHRcdFx0eDIgPSBNYXRoLnJvdW5kKHgxICsgYXhpc1kyV2lkdGggKyBheGlzWTIubWFyZ2luKTtcblx0XHRcdC8veTIgPSBmcmVlU3BhY2UueTIgLSBheGlzWEhlaWdodCAtIGF4aXNYLm1hcmdpbiAtIGF4aXNYLmxpbmVUaGlja25lc3MgLyAyO1xuXHRcdFx0eTIgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS55MiAtIGF4aXNYSGVpZ2h0IC0gYXhpc1gubWFyZ2luKTtcblxuXHRcdFx0YXhpc1kyLmxpbmVDb29yZGluYXRlcyA9IHtcblx0XHRcdFx0eDE6IHgxLCB5MTogeTEsIHgyOiB4MSwgeTI6IHkyLCBoZWlnaHQ6IE1hdGguYWJzKHkyIC0geTEpXG5cdFx0XHR9XG5cblx0XHRcdGF4aXNZMi5ib3VuZGluZ1JlY3QgPSB7XG5cdFx0XHRcdHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5Miwgd2lkdGg6IHgyIC0geDEsIGhlaWdodDogeTIgLSB5MVxuXHRcdFx0fTtcblx0XHR9XG5cblxuXHRcdGF4aXNYLmNhbGN1bGF0ZVZhbHVlVG9QaXhlbENvbnZlcnNpb25QYXJhbWV0ZXJzKCk7XG5cblx0XHRpZiAoYXhpc1kpXG5cdFx0XHRheGlzWS5jYWxjdWxhdGVWYWx1ZVRvUGl4ZWxDb252ZXJzaW9uUGFyYW1ldGVycygpO1xuXG5cdFx0aWYgKGF4aXNZMilcblx0XHRcdGF4aXNZMi5jYWxjdWxhdGVWYWx1ZVRvUGl4ZWxDb252ZXJzaW9uUGFyYW1ldGVycygpO1xuXG5cblx0XHRjdHguc2F2ZSgpO1xuXHRcdGN0eC5yZWN0KDUsIGF4aXNYLmJvdW5kaW5nUmVjdC55MSwgYXhpc1guY2hhcnQud2lkdGggLSAxMCwgYXhpc1guYm91bmRpbmdSZWN0LmhlaWdodCk7XG5cdFx0Y3R4LmNsaXAoKTtcblxuXHRcdGF4aXNYLnJlbmRlckxhYmVsc1RpY2tzQW5kVGl0bGUoKTtcblx0XHRjdHgucmVzdG9yZSgpO1xuXG5cdFx0aWYgKGF4aXNZKVxuXHRcdFx0YXhpc1kucmVuZGVyTGFiZWxzVGlja3NBbmRUaXRsZSgpO1xuXG5cdFx0aWYgKGF4aXNZMilcblx0XHRcdGF4aXNZMi5yZW5kZXJMYWJlbHNUaWNrc0FuZFRpdGxlKCk7XG5cblxuXHRcdGNoYXJ0LnByZXBhcmVQbG90QXJlYSgpO1xuXHRcdHZhciBwbG90QXJlYSA9IGF4aXNYLmNoYXJ0LnBsb3RBcmVhO1xuXG5cdFx0Y3R4LnNhdmUoKTtcblxuXHRcdGN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgTWF0aC5hYnMocGxvdEFyZWEueDIgLSBwbG90QXJlYS54MSksIE1hdGguYWJzKHBsb3RBcmVhLnkyIC0gcGxvdEFyZWEueTEpKTtcblxuXHRcdGN0eC5jbGlwKCk7XG5cblx0XHRheGlzWC5yZW5kZXJTdHJpcExpbmVzT2ZUaGlja25lc3NUeXBlKFwidmFsdWVcIik7XG5cblx0XHRpZiAoYXhpc1kpXG5cdFx0XHRheGlzWS5yZW5kZXJTdHJpcExpbmVzT2ZUaGlja25lc3NUeXBlKFwidmFsdWVcIik7XG5cblx0XHRpZiAoYXhpc1kyKVxuXHRcdFx0YXhpc1kyLnJlbmRlclN0cmlwTGluZXNPZlRoaWNrbmVzc1R5cGUoXCJ2YWx1ZVwiKTtcblxuXG5cdFx0YXhpc1gucmVuZGVySW50ZXJsYWNlZENvbG9ycygpO1xuXG5cdFx0aWYgKGF4aXNZKVxuXHRcdFx0YXhpc1kucmVuZGVySW50ZXJsYWNlZENvbG9ycygpO1xuXG5cdFx0aWYgKGF4aXNZMilcblx0XHRcdGF4aXNZMi5yZW5kZXJJbnRlcmxhY2VkQ29sb3JzKCk7XG5cblx0XHRjdHgucmVzdG9yZSgpO1xuXG5cblx0XHRheGlzWC5yZW5kZXJHcmlkKCk7XG5cblx0XHRpZiAoYXhpc1kpXG5cdFx0XHRheGlzWS5yZW5kZXJHcmlkKCk7XG5cblx0XHRpZiAoYXhpc1kyKVxuXHRcdFx0YXhpc1kyLnJlbmRlckdyaWQoKTtcblxuXG5cdFx0YXhpc1gucmVuZGVyQXhpc0xpbmUoKTtcblxuXHRcdGlmIChheGlzWSlcblx0XHRcdGF4aXNZLnJlbmRlckF4aXNMaW5lKCk7XG5cblx0XHRpZiAoYXhpc1kyKVxuXHRcdFx0YXhpc1kyLnJlbmRlckF4aXNMaW5lKCk7XG5cblxuXHRcdC8vTm8gbmVlZCB0byBjbGlwIHRvIHBsb3RBcmVhIGJlY2F1c2Ugc3RyaXBMaW5lcyBuZWVkIHRvIHJlbmRlciBvbiB0b3Agb2YgZ3JpZGxpbmVzXG5cdFx0YXhpc1gucmVuZGVyU3RyaXBMaW5lc09mVGhpY2tuZXNzVHlwZShcInBpeGVsXCIpO1xuXG5cdFx0aWYgKGF4aXNZKVxuXHRcdFx0YXhpc1kucmVuZGVyU3RyaXBMaW5lc09mVGhpY2tuZXNzVHlwZShcInBpeGVsXCIpO1xuXG5cdFx0aWYgKGF4aXNZMilcblx0XHRcdGF4aXNZMi5yZW5kZXJTdHJpcExpbmVzT2ZUaGlja25lc3NUeXBlKFwicGl4ZWxcIik7XG5cdH1cblx0ZWxzZSB7XG5cdFx0dmFyIGF4aXNYV2lkdGggPSBNYXRoLmNlaWwoYXhpc1guY3JlYXRlTGFiZWxzQW5kQ2FsY3VsYXRlV2lkdGgoKSk7XG5cblx0XHRpZiAoYXhpc1kpIHtcblx0XHRcdGF4aXNZLmxpbmVDb29yZGluYXRlcyA9IHtcblx0XHRcdH07XG5cblx0XHRcdHgxID0gTWF0aC5yb3VuZChmcmVlU3BhY2UueDEgKyBheGlzWFdpZHRoICsgYXhpc1gubWFyZ2luKTtcblx0XHRcdHgyID0gTWF0aC5yb3VuZChmcmVlU3BhY2UueDIgPiBheGlzWS5jaGFydC53aWR0aCAtIDEwID8gYXhpc1kuY2hhcnQud2lkdGggLSAxMCA6IGZyZWVTcGFjZS54Mik7XG5cblx0XHRcdGF4aXNZLmxpbmVDb29yZGluYXRlcy54MSA9IHgxO1xuXHRcdFx0YXhpc1kubGluZUNvb3JkaW5hdGVzLngyID0geDI7XG5cdFx0XHRheGlzWS5saW5lQ29vcmRpbmF0ZXMud2lkdGggPSBNYXRoLmFicyh4MiAtIHgxKTtcblx0XHR9XG5cblx0XHRpZiAoYXhpc1kyKSB7XG5cdFx0XHRheGlzWTIubGluZUNvb3JkaW5hdGVzID0ge1xuXHRcdFx0fTtcblx0XHRcdHgxID0gTWF0aC5yb3VuZChmcmVlU3BhY2UueDEgKyBheGlzWFdpZHRoICsgYXhpc1gubWFyZ2luKTtcblx0XHRcdHgyID0gTWF0aC5yb3VuZChmcmVlU3BhY2UueDIgPiBheGlzWTIuY2hhcnQud2lkdGggLSAxMCA/IGF4aXNZMi5jaGFydC53aWR0aCAtIDEwIDogZnJlZVNwYWNlLngyKTtcblxuXHRcdFx0YXhpc1kyLmxpbmVDb29yZGluYXRlcy54MSA9IHgxO1xuXHRcdFx0YXhpc1kyLmxpbmVDb29yZGluYXRlcy54MiA9IHgyO1xuXHRcdFx0YXhpc1kyLmxpbmVDb29yZGluYXRlcy53aWR0aCA9IE1hdGguYWJzKHgyIC0geDEpO1xuXHRcdH1cblxuXG5cblx0XHR2YXIgYXhpc1lIZWlnaHQgPSBNYXRoLmNlaWwoYXhpc1kgPyBheGlzWS5jcmVhdGVMYWJlbHNBbmRDYWxjdWxhdGVIZWlnaHQoKSA6IDApO1xuXHRcdHZhciBheGlzWTJIZWlnaHQgPSBNYXRoLmNlaWwoYXhpc1kyID8gYXhpc1kyLmNyZWF0ZUxhYmVsc0FuZENhbGN1bGF0ZUhlaWdodCgpIDogMCk7XG5cblxuXHRcdC8vIFBvc2l0aW9uIGF4aXNZIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSwgTWFyZ2luIGFuZCBpdHMgaGVpZ2h0XG5cdFx0aWYgKGF4aXNZKSB7XG5cdFx0XHQvL3gxID0gZnJlZVNwYWNlLngxICsgYXhpc1hXaWR0aCArIGF4aXNYLm1hcmdpbiArIGF4aXNYLmxpbmVUaGlja25lc3MgLyAyO1xuXHRcdFx0Ly94MiA9IGZyZWVTcGFjZS54MiA+IGF4aXNZLmNoYXJ0LndpZHRoIC0gMTAgPyBheGlzWS5jaGFydC53aWR0aCAtIDEwIDogZnJlZVNwYWNlLngyO1xuXG5cdFx0XHR5MSA9IE1hdGgucm91bmQoZnJlZVNwYWNlLnkyIC0gYXhpc1lIZWlnaHQgLSBheGlzWS5tYXJnaW4pO1xuXHRcdFx0eTIgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS55MiAtIGF4aXNZTWFyZ2luID4gYXhpc1kuY2hhcnQuaGVpZ2h0IC0gMTAgPyBheGlzWS5jaGFydC5oZWlnaHQgLSAxMCA6IGZyZWVTcGFjZS55MiAtIGF4aXNZTWFyZ2luKTtcblxuXHRcdFx0Ly9heGlzWS5saW5lQ29vcmRpbmF0ZXMgPSB7IHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5MSwgd2lkdGg6IE1hdGguYWJzKHgyIC0geDEpIH1cblx0XHRcdGF4aXNZLmxpbmVDb29yZGluYXRlcy55MSA9IHkxO1xuXHRcdFx0YXhpc1kubGluZUNvb3JkaW5hdGVzLnkyID0geTE7XG5cblx0XHRcdGF4aXNZLmJvdW5kaW5nUmVjdCA9IHtcblx0XHRcdFx0eDE6IHgxLCB5MTogeTEsIHgyOiB4MiwgeTI6IHkyLCB3aWR0aDogeDIgLSB4MSwgaGVpZ2h0OiBheGlzWUhlaWdodFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBQb3NpdGlvbiBheGlzWSBiYXNlZCBvbiB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UsIE1hcmdpbiBhbmQgaXRzIGhlaWdodFxuXHRcdGlmIChheGlzWTIpIHtcblx0XHRcdC8veDEgPSBmcmVlU3BhY2UueDEgKyBheGlzWFdpZHRoICsgYXhpc1gubWFyZ2luICsgYXhpc1gubGluZVRoaWNrbmVzcyAvIDI7XG5cdFx0XHQvL3gyID0gZnJlZVNwYWNlLngyID4gYXhpc1kyLmNoYXJ0LndpZHRoIC0gMTAgPyBheGlzWTIuY2hhcnQud2lkdGggLSAxMCA6IGZyZWVTcGFjZS54MjtcblxuXHRcdFx0eTEgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS55MSArIGF4aXNZMi5tYXJnaW4pO1xuXHRcdFx0eTIgPSAoZnJlZVNwYWNlLnkxICsgYXhpc1kyLm1hcmdpbiArIGF4aXNZMkhlaWdodCk7XG5cblx0XHRcdC8vYXhpc1kyLmxpbmVDb29yZGluYXRlcyA9IHsgeDE6IHgxLCB5MTogeTIsIHgyOiB4MiwgeTI6IHkyLCB3aWR0aDogTWF0aC5hYnMoeDIgLSB4MSkgfVxuXHRcdFx0YXhpc1kyLmxpbmVDb29yZGluYXRlcy55MSA9IHkyO1xuXHRcdFx0YXhpc1kyLmxpbmVDb29yZGluYXRlcy55MiA9IHkyO1xuXG5cdFx0XHRheGlzWTIuYm91bmRpbmdSZWN0ID0ge1xuXHRcdFx0XHR4MTogeDEsIHkxOiB5MSwgeDI6IHgyLCB5MjogeTIsIHdpZHRoOiB4MiAtIHgxLCBoZWlnaHQ6IGF4aXNZMkhlaWdodFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvL2F4aXNZLmN0eC5yZWN0KGF4aXNZLmJvdW5kaW5nUmVjdC54MSwgYXhpc1kuYm91bmRpbmdSZWN0LnkxLCBheGlzWS5ib3VuZGluZ1JlY3Qud2lkdGgsIGF4aXNZLmJvdW5kaW5nUmVjdC5oZWlnaHQpO1xuXHRcdC8vYXhpc1kuY3R4LnN0cm9rZSgpO1xuXG5cdFx0Ly8gUG9zaXRpb24gYXhpc1ggYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBmcmVlIHNwYWNlLCBNYXJnaW4gYW5kIGl0cyBoZWlnaHRcblx0XHR4MSA9IE1hdGgucm91bmQoZnJlZVNwYWNlLngxICsgYXhpc1gubWFyZ2luKTtcblx0XHR5MSA9IE1hdGgucm91bmQoYXhpc1kyID8gYXhpc1kyLmxpbmVDb29yZGluYXRlcy55MiA6IChmcmVlU3BhY2UueTEgPCAxMCA/IDEwIDogZnJlZVNwYWNlLnkxKSk7XG5cdFx0eDIgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS54MSArIGF4aXNYV2lkdGggKyBheGlzWC5tYXJnaW4pO1xuXHRcdHkyID0gTWF0aC5yb3VuZChheGlzWSA/IGF4aXNZLmxpbmVDb29yZGluYXRlcy55MSA6IChmcmVlU3BhY2UueTIgLSBheGlzWU1hcmdpbiA+IGF4aXNYLmNoYXJ0LmhlaWdodCAtIDEwID8gYXhpc1guY2hhcnQuaGVpZ2h0IC0gMTAgOiBmcmVlU3BhY2UueTIgLSBheGlzWU1hcmdpbikpO1xuXG5cblx0XHRheGlzWC5saW5lQ29vcmRpbmF0ZXMgPSB7XG5cdFx0XHR4MTogeDIsIHkxOiB5MSwgeDI6IHgyLCB5MjogeTIsIGhlaWdodDogTWF0aC5hYnMoeTIgLSB5MSlcblx0XHR9O1xuXG5cdFx0YXhpc1guYm91bmRpbmdSZWN0ID0ge1xuXHRcdFx0eDE6IHgxLCB5MTogeTEsIHgyOiB4MiwgeTI6IHkyLCB3aWR0aDogeDIgLSB4MSwgaGVpZ2h0OiB5MiAtIHkxXG5cdFx0fTtcblxuXHRcdC8vYXhpc1guY3R4LnJlY3QoYXhpc1guYm91bmRpbmdSZWN0LngxLCBheGlzWC5ib3VuZGluZ1JlY3QueTEsIGF4aXNYLmJvdW5kaW5nUmVjdC53aWR0aCwgYXhpc1guYm91bmRpbmdSZWN0LmhlaWdodCk7XG5cdFx0Ly9heGlzWC5jdHguc3Ryb2tlKCk7XG5cblx0XHRheGlzWC5jYWxjdWxhdGVWYWx1ZVRvUGl4ZWxDb252ZXJzaW9uUGFyYW1ldGVycygpO1xuXG5cdFx0aWYgKGF4aXNZKVxuXHRcdFx0YXhpc1kuY2FsY3VsYXRlVmFsdWVUb1BpeGVsQ29udmVyc2lvblBhcmFtZXRlcnMoKTtcblx0XHRpZiAoYXhpc1kyKVxuXHRcdFx0YXhpc1kyLmNhbGN1bGF0ZVZhbHVlVG9QaXhlbENvbnZlcnNpb25QYXJhbWV0ZXJzKCk7XG5cblxuXHRcdC8vY3R4LnNhdmUoKTtcblx0XHQvL2N0eC5yZWN0KGF4aXNZLmJvdW5kaW5nUmVjdC54MSAtIDMwLCBheGlzWS5ib3VuZGluZ1JlY3QueTEsIGF4aXNZLmJvdW5kaW5nUmVjdC53aWR0aCArIDYwLCBheGlzWS5ib3VuZGluZ1JlY3QuaGVpZ2h0KTtcblx0XHQvL2N0eC5jbGlwKCk7XG5cblx0XHRpZiAoYXhpc1kpXG5cdFx0XHRheGlzWS5yZW5kZXJMYWJlbHNUaWNrc0FuZFRpdGxlKCk7XG5cblx0XHRpZiAoYXhpc1kyKVxuXHRcdFx0YXhpc1kyLnJlbmRlckxhYmVsc1RpY2tzQW5kVGl0bGUoKTtcblxuXHRcdC8vY3R4LnJlc3RvcmUoKTtcblxuXHRcdGF4aXNYLnJlbmRlckxhYmVsc1RpY2tzQW5kVGl0bGUoKTtcblxuXHRcdGNoYXJ0LnByZXBhcmVQbG90QXJlYSgpO1xuXHRcdHZhciBwbG90QXJlYSA9IGF4aXNYLmNoYXJ0LnBsb3RBcmVhO1xuXG5cdFx0Y3R4LnNhdmUoKTtcblx0XHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIE1hdGguYWJzKHBsb3RBcmVhLngyIC0gcGxvdEFyZWEueDEpLCBNYXRoLmFicyhwbG90QXJlYS55MiAtIHBsb3RBcmVhLnkxKSk7XG5cblx0XHRjdHguY2xpcCgpO1xuXG5cblx0XHQvL05vIG5lZWQgdG8gY2xpcCB0byBwbG90QXJlYSBiZWNhdXNlIHN0cmlwTGluZXMgbmVlZCB0byByZW5kZXIgb24gdG9wIG9mIGdyaWRsaW5lc1xuXHRcdGF4aXNYLnJlbmRlclN0cmlwTGluZXNPZlRoaWNrbmVzc1R5cGUoXCJ2YWx1ZVwiKTtcblxuXHRcdGlmIChheGlzWSlcblx0XHRcdGF4aXNZLnJlbmRlclN0cmlwTGluZXNPZlRoaWNrbmVzc1R5cGUoXCJ2YWx1ZVwiKTtcblx0XHRpZiAoYXhpc1kyKVxuXHRcdFx0YXhpc1kyLnJlbmRlclN0cmlwTGluZXNPZlRoaWNrbmVzc1R5cGUoXCJ2YWx1ZVwiKTtcblxuXHRcdGF4aXNYLnJlbmRlckludGVybGFjZWRDb2xvcnMoKTtcblxuXHRcdGlmIChheGlzWSlcblx0XHRcdGF4aXNZLnJlbmRlckludGVybGFjZWRDb2xvcnMoKTtcblx0XHRpZiAoYXhpc1kyKVxuXHRcdFx0YXhpc1kyLnJlbmRlckludGVybGFjZWRDb2xvcnMoKTtcblxuXHRcdGN0eC5yZXN0b3JlKCk7XG5cblxuXHRcdGF4aXNYLnJlbmRlckdyaWQoKTtcblxuXG5cdFx0aWYgKGF4aXNZKVxuXHRcdFx0YXhpc1kucmVuZGVyR3JpZCgpO1xuXG5cdFx0aWYgKGF4aXNZMilcblx0XHRcdGF4aXNZMi5yZW5kZXJHcmlkKCk7XG5cblxuXHRcdGF4aXNYLnJlbmRlckF4aXNMaW5lKCk7XG5cblx0XHRpZiAoYXhpc1kpXG5cdFx0XHRheGlzWS5yZW5kZXJBeGlzTGluZSgpO1xuXG5cdFx0aWYgKGF4aXNZMilcblx0XHRcdGF4aXNZMi5yZW5kZXJBeGlzTGluZSgpO1xuXG5cblx0XHRheGlzWC5yZW5kZXJTdHJpcExpbmVzT2ZUaGlja25lc3NUeXBlKFwicGl4ZWxcIik7XG5cblx0XHRpZiAoYXhpc1kpXG5cdFx0XHRheGlzWS5yZW5kZXJTdHJpcExpbmVzT2ZUaGlja25lc3NUeXBlKFwicGl4ZWxcIik7XG5cdFx0aWYgKGF4aXNZMilcblx0XHRcdGF4aXNZMi5yZW5kZXJTdHJpcExpbmVzT2ZUaGlja25lc3NUeXBlKFwicGl4ZWxcIik7XG5cdH1cblxufVxuXG5BeGlzLnByb3RvdHlwZS5yZW5kZXJMYWJlbHNUaWNrc0FuZFRpdGxlID0gZnVuY3Rpb24gKCkge1xuXG5cdHZhciBza2lwTGFiZWxzID0gZmFsc2U7XG5cdHZhciB0b3RhbExhYmVsV2lkdGggPSAwO1xuXHR2YXIgdGhyZXNob2xkUmF0aW8gPSAxO1xuXHR2YXIgbGFiZWxDb3VudCA9IDA7XG5cblx0dmFyIGludGVydmFsSW5QaXhlbHMgPSB0aGlzLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIHRoaXMuaW50ZXJ2YWw7XG5cblx0aWYgKHRoaXMubGFiZWxBbmdsZSAhPT0gMCAmJiB0aGlzLmxhYmVsQW5nbGUgIT09IDM2MClcblx0XHR0aHJlc2hvbGRSYXRpbyA9IDEuMjtcblxuXHQvL0Rvbid0IHNraXAgbGFiZWxzIHdoZW4gaW50ZXJ2YWwgaXMgZXhwbGljaXRlbHkgc2V0XG5cdGlmICh0eXBlb2YgKHRoaXMuX29wdGlvbnMuaW50ZXJ2YWwpID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0aWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImJvdHRvbVwiIHx8IHRoaXMuX3Bvc2l0aW9uID09PSBcInRvcFwiKSB7XG5cblx0XHRcdC8vdGhyZXNob2xkUmF0aW8gPSAuOTsvLyBNb3JlIHNwYWNlIGlzIHByZWZlcnJlZCBiZXR3ZWVuIGxhYmVscyB3aGVuIGF4aXMgaXMgaG9yaXpvbnRhbGx5IGFsaWduZWRcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHRoaXMuX2xhYmVscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRsYWJlbCA9IHRoaXMuX2xhYmVsc1tpXTtcblx0XHRcdFx0aWYgKGxhYmVsLnBvc2l0aW9uIDwgdGhpcy52aWV3cG9ydE1pbmltdW0gfHwgbGFiZWwuc3RyaXBMaW5lKS8vIGRvbid0IGNvbnNpZGVyIHN0cmlwTGluZSdzIGxhYmxlXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0dmFyIHdpZHRoID0gbGFiZWwudGV4dEJsb2NrLndpZHRoICogTWF0aC5jb3MoTWF0aC5QSSAvIDE4MCAqIHRoaXMubGFiZWxBbmdsZSkgKyBsYWJlbC50ZXh0QmxvY2suaGVpZ2h0ICogTWF0aC5zaW4oTWF0aC5QSSAvIDE4MCAqIHRoaXMubGFiZWxBbmdsZSk7XG5cblx0XHRcdFx0dG90YWxMYWJlbFdpZHRoICs9IHdpZHRoO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodG90YWxMYWJlbFdpZHRoID4gdGhpcy5saW5lQ29vcmRpbmF0ZXMud2lkdGggKiB0aHJlc2hvbGRSYXRpbykge1xuXHRcdFx0XHRza2lwTGFiZWxzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5fcG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHRoaXMuX2xhYmVscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRsYWJlbCA9IHRoaXMuX2xhYmVsc1tpXTtcblx0XHRcdFx0aWYgKGxhYmVsLnBvc2l0aW9uIDwgdGhpcy52aWV3cG9ydE1pbmltdW0gfHwgbGFiZWwuc3RyaXBMaW5lKS8vIGRvbid0IGNvbnNpZGVyIHN0cmlwTGluZSdzIGxhYmxlXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0dmFyIHdpZHRoID0gbGFiZWwudGV4dEJsb2NrLmhlaWdodCAqIE1hdGguY29zKE1hdGguUEkgLyAxODAgKiB0aGlzLmxhYmVsQW5nbGUpICsgbGFiZWwudGV4dEJsb2NrLndpZHRoICogTWF0aC5zaW4oTWF0aC5QSSAvIDE4MCAqIHRoaXMubGFiZWxBbmdsZSk7XG5cblx0XHRcdFx0dG90YWxMYWJlbFdpZHRoICs9IHdpZHRoO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodG90YWxMYWJlbFdpZHRoID4gdGhpcy5saW5lQ29vcmRpbmF0ZXMuaGVpZ2h0ICogdGhyZXNob2xkUmF0aW8pIHtcblx0XHRcdFx0c2tpcExhYmVscyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImJvdHRvbVwiKSB7XG5cdFx0dmFyIGkgPSAwO1xuXG5cdFx0dmFyIGxhYmVsO1xuXHRcdHZhciB4eTtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLl9sYWJlbHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0bGFiZWwgPSB0aGlzLl9sYWJlbHNbaV07XG5cdFx0XHRpZiAobGFiZWwucG9zaXRpb24gPCB0aGlzLnZpZXdwb3J0TWluaW11bSB8fCBsYWJlbC5wb3NpdGlvbiA+IHRoaXMudmlld3BvcnRNYXhpbXVtKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0eHkgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPbkF4aXMobGFiZWwucG9zaXRpb24pO1xuXG5cdFx0XHRpZiAoKHRoaXMudGlja1RoaWNrbmVzcyAmJiAhdGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZSkgfHwgKHRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmUgJiYgdGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZS5fdGhpY2tuZXNzVHlwZSA9PT0gXCJwaXhlbFwiKSkge1xuXG5cdFx0XHRcdGlmICh0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lKSB7XG5cdFx0XHRcdFx0c3RyaXBMaW5lID0gdGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZTtcblx0XHRcdFx0XHR0aGlzLmN0eC5saW5lV2lkdGggPSBzdHJpcExpbmUudGhpY2tuZXNzO1xuXHRcdFx0XHRcdHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gc3RyaXBMaW5lLmNvbG9yO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5jdHgubGluZVdpZHRoID0gdGhpcy50aWNrVGhpY2tuZXNzO1xuXHRcdFx0XHRcdHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gdGhpcy50aWNrQ29sb3I7XG5cdFx0XHRcdH1cblxuXG5cdFx0XHRcdHZhciB0aWNrWCA9ICh0aGlzLmN0eC5saW5lV2lkdGggJSAyID09PSAxKSA/ICh4eS54IDw8IDApICsgLjUgOiAoeHkueCA8PCAwKTtcblx0XHRcdFx0dGhpcy5jdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdHRoaXMuY3R4Lm1vdmVUbyh0aWNrWCwgeHkueSA8PCAwKTtcblx0XHRcdFx0dGhpcy5jdHgubGluZVRvKHRpY2tYLCAoeHkueSArIHRoaXMudGlja0xlbmd0aCkgPDwgMCk7XG5cdFx0XHRcdHRoaXMuY3R4LnN0cm9rZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvL0Rvbid0IHNraXAgc3RyaXBMaW5lJ3MgbGFiZWxzXG5cdFx0XHRpZiAoc2tpcExhYmVscyAmJiBsYWJlbENvdW50KysgJSAyICE9PSAwICYmICF0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKGxhYmVsLnRleHRCbG9jay5hbmdsZSA9PT0gMCkge1xuXHRcdFx0XHR4eS54IC09IGxhYmVsLnRleHRCbG9jay53aWR0aCAvIDI7XG5cdFx0XHRcdC8veHkueSArPSB0aGlzLnRpY2tMZW5ndGggKyBsYWJlbC50ZXh0QmxvY2suaGVpZ2h0IC8gMjtcblx0XHRcdFx0eHkueSArPSB0aGlzLnRpY2tMZW5ndGggKyBsYWJlbC50ZXh0QmxvY2suZm9udFNpemUgLyAyO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR4eS54IC09ICh0aGlzLmxhYmVsQW5nbGUgPCAwID8gKGxhYmVsLnRleHRCbG9jay53aWR0aCAqIE1hdGguY29zKE1hdGguUEkgLyAxODAgKiB0aGlzLmxhYmVsQW5nbGUpKSA6IDApO1xuXHRcdFx0XHR4eS55ICs9IHRoaXMudGlja0xlbmd0aCArIE1hdGguYWJzKCh0aGlzLmxhYmVsQW5nbGUgPCAwID8gbGFiZWwudGV4dEJsb2NrLndpZHRoICogTWF0aC5zaW4oTWF0aC5QSSAvIDE4MCAqIHRoaXMubGFiZWxBbmdsZSkgLSA1IDogNSkpO1xuXHRcdFx0fVxuXHRcdFx0bGFiZWwudGV4dEJsb2NrLnggPSB4eS54O1xuXHRcdFx0bGFiZWwudGV4dEJsb2NrLnkgPSB4eS55O1xuXG5cdFx0XHRsYWJlbC50ZXh0QmxvY2sucmVuZGVyKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnRpdGxlKSB7XG5cblx0XHRcdHRoaXMuX3RpdGxlVGV4dEJsb2NrID0gbmV3IFRleHRCbG9jayh0aGlzLmN0eCwge1xuXHRcdFx0XHR4OiB0aGlzLmxpbmVDb29yZGluYXRlcy54MSwvLyBUaGlzIGlzIHJlY2FsY3VsYXRlZCBhZ2FpblxuXHRcdFx0XHR5OiB0aGlzLmJvdW5kaW5nUmVjdC55MiAtIHRoaXMudGl0bGVGb250U2l6ZSAtIDUsLy8gVGhpcyBpcyByZWNhbGN1bGF0ZWQgYWdhaW5cblx0XHRcdFx0bWF4V2lkdGg6IHRoaXMubGluZUNvb3JkaW5hdGVzLndpZHRoLFxuXHRcdFx0XHRtYXhIZWlnaHQ6IHRoaXMudGl0bGVGb250U2l6ZSAqIDEuNSxcblx0XHRcdFx0YW5nbGU6IDAsXG5cdFx0XHRcdHRleHQ6IHRoaXMudGl0bGUsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogXCJjZW50ZXJcIiwvL2xlZnQsIGNlbnRlciwgcmlnaHRcblx0XHRcdFx0Zm9udFNpemU6IHRoaXMudGl0bGVGb250U2l6ZSwvL2luIHBpeGVsc1xuXHRcdFx0XHRmb250RmFtaWx5OiB0aGlzLnRpdGxlRm9udEZhbWlseSxcblx0XHRcdFx0Zm9udFdlaWdodDogdGhpcy50aXRsZUZvbnRXZWlnaHQsIC8vbm9ybWFsLCBib2xkLCBib2xkZXIsIGxpZ2h0ZXIsXG5cdFx0XHRcdGZvbnRDb2xvcjogdGhpcy50aXRsZUZvbnRDb2xvcixcblx0XHRcdFx0Zm9udFN0eWxlOiB0aGlzLnRpdGxlRm9udFN0eWxlLCAvLyBub3JtYWwsIGl0YWxpYywgb2JsaXF1ZVxuXHRcdFx0XHR0ZXh0QmFzZWxpbmU6IFwidG9wXCJcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLl90aXRsZVRleHRCbG9jay5tZWFzdXJlVGV4dCgpO1xuXHRcdFx0dGhpcy5fdGl0bGVUZXh0QmxvY2sueCA9IHRoaXMubGluZUNvb3JkaW5hdGVzLngxICsgdGhpcy5saW5lQ29vcmRpbmF0ZXMud2lkdGggLyAyIC0gdGhpcy5fdGl0bGVUZXh0QmxvY2sud2lkdGggLyAyO1xuXHRcdFx0dGhpcy5fdGl0bGVUZXh0QmxvY2sueSA9IHRoaXMuYm91bmRpbmdSZWN0LnkyIC0gdGhpcy5fdGl0bGVUZXh0QmxvY2suaGVpZ2h0IC0gMztcblx0XHRcdHRoaXMuX3RpdGxlVGV4dEJsb2NrLnJlbmRlcih0cnVlKTtcblx0XHR9XG5cdH1cblx0ZWxzZSBpZiAodGhpcy5fcG9zaXRpb24gPT09IFwidG9wXCIpIHtcblx0XHR2YXIgaSA9IDA7XG5cblx0XHR2YXIgbGFiZWw7XG5cdFx0dmFyIHh5O1xuXHRcdHZhciBzdHJpcExpbmU7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5fbGFiZWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRsYWJlbCA9IHRoaXMuX2xhYmVsc1tpXTtcblx0XHRcdGlmIChsYWJlbC5wb3NpdGlvbiA8IHRoaXMudmlld3BvcnRNaW5pbXVtIHx8IGxhYmVsLnBvc2l0aW9uID4gdGhpcy52aWV3cG9ydE1heGltdW0pXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR4eSA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uQXhpcyhsYWJlbC5wb3NpdGlvbik7XG5cblx0XHRcdGlmICgodGhpcy50aWNrVGhpY2tuZXNzICYmICF0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lKSB8fCAodGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZSAmJiB0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lLl90aGlja25lc3NUeXBlID09PSBcInBpeGVsXCIpKSB7XG5cblxuXHRcdFx0XHRpZiAodGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZSkge1xuXHRcdFx0XHRcdHN0cmlwTGluZSA9IHRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmU7XG5cblx0XHRcdFx0XHR0aGlzLmN0eC5saW5lV2lkdGggPSBzdHJpcExpbmUudGhpY2tuZXNzO1xuXHRcdFx0XHRcdHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gc3RyaXBMaW5lLmNvbG9yO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5jdHgubGluZVdpZHRoID0gdGhpcy50aWNrVGhpY2tuZXNzO1xuXHRcdFx0XHRcdHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gdGhpcy50aWNrQ29sb3I7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgdGlja1ggPSAodGhpcy5jdHgubGluZVdpZHRoICUgMiA9PT0gMSkgPyAoeHkueCA8PCAwKSArIC41IDogKHh5LnggPDwgMCk7XG5cdFx0XHRcdHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHR0aGlzLmN0eC5tb3ZlVG8odGlja1gsIHh5LnkgPDwgMCk7XG5cdFx0XHRcdHRoaXMuY3R4LmxpbmVUbyh0aWNrWCwgKHh5LnkgLSB0aGlzLnRpY2tMZW5ndGgpIDw8IDApO1xuXHRcdFx0XHR0aGlzLmN0eC5zdHJva2UoKTtcblxuXHRcdFx0fVxuXG5cdFx0XHQvL0Rvbid0IHNraXAgc3RyaXBMaW5lJ3MgbGFiZWxzXG5cdFx0XHRpZiAoc2tpcExhYmVscyAmJiBsYWJlbENvdW50KysgJSAyICE9PSAwICYmICF0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKGxhYmVsLnRleHRCbG9jay5hbmdsZSA9PT0gMCkge1xuXHRcdFx0XHR4eS54IC09IGxhYmVsLnRleHRCbG9jay53aWR0aCAvIDI7XG5cdFx0XHRcdHh5LnkgLT0gdGhpcy50aWNrTGVuZ3RoICsgbGFiZWwudGV4dEJsb2NrLmhlaWdodCAvIDI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR4eS54IC09ICh0aGlzLmxhYmVsQW5nbGUgPiAwID8gKGxhYmVsLnRleHRCbG9jay53aWR0aCAqIE1hdGguY29zKE1hdGguUEkgLyAxODAgKiB0aGlzLmxhYmVsQW5nbGUpKSA6IDApO1xuXHRcdFx0XHR4eS55IC09IHRoaXMudGlja0xlbmd0aCArIE1hdGguYWJzKCh0aGlzLmxhYmVsQW5nbGUgPiAwID8gbGFiZWwudGV4dEJsb2NrLndpZHRoICogTWF0aC5zaW4oTWF0aC5QSSAvIDE4MCAqIHRoaXMubGFiZWxBbmdsZSkgKyA1IDogNSkpO1xuXHRcdFx0fVxuXHRcdFx0bGFiZWwudGV4dEJsb2NrLnggPSB4eS54O1xuXHRcdFx0bGFiZWwudGV4dEJsb2NrLnkgPSB4eS55O1xuXG5cdFx0XHRsYWJlbC50ZXh0QmxvY2sucmVuZGVyKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnRpdGxlKSB7XG5cblx0XHRcdHRoaXMuX3RpdGxlVGV4dEJsb2NrID0gbmV3IFRleHRCbG9jayh0aGlzLmN0eCwge1xuXHRcdFx0XHR4OiB0aGlzLmxpbmVDb29yZGluYXRlcy54MSwvLyBUaGlzIGlzIHJlY2FsY3VsYXRlZCBhZ2FpblxuXHRcdFx0XHR5OiB0aGlzLmJvdW5kaW5nUmVjdC55MSArIDEsXG5cdFx0XHRcdG1heFdpZHRoOiB0aGlzLmxpbmVDb29yZGluYXRlcy53aWR0aCxcblx0XHRcdFx0bWF4SGVpZ2h0OiB0aGlzLnRpdGxlRm9udFNpemUgKiAxLjUsXG5cdFx0XHRcdGFuZ2xlOiAwLFxuXHRcdFx0XHR0ZXh0OiB0aGlzLnRpdGxlLFxuXHRcdFx0XHRob3Jpem9udGFsQWxpZ246IFwiY2VudGVyXCIsLy9sZWZ0LCBjZW50ZXIsIHJpZ2h0XG5cdFx0XHRcdGZvbnRTaXplOiB0aGlzLnRpdGxlRm9udFNpemUsLy9pbiBwaXhlbHNcblx0XHRcdFx0Zm9udEZhbWlseTogdGhpcy50aXRsZUZvbnRGYW1pbHksXG5cdFx0XHRcdGZvbnRXZWlnaHQ6IHRoaXMudGl0bGVGb250V2VpZ2h0LCAvL25vcm1hbCwgYm9sZCwgYm9sZGVyLCBsaWdodGVyLFxuXHRcdFx0XHRmb250Q29sb3I6IHRoaXMudGl0bGVGb250Q29sb3IsXG5cdFx0XHRcdGZvbnRTdHlsZTogdGhpcy50aXRsZUZvbnRTdHlsZSwgLy8gbm9ybWFsLCBpdGFsaWMsIG9ibGlxdWVcblx0XHRcdFx0dGV4dEJhc2VsaW5lOiBcInRvcFwiXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5fdGl0bGVUZXh0QmxvY2subWVhc3VyZVRleHQoKTtcblx0XHRcdHRoaXMuX3RpdGxlVGV4dEJsb2NrLnggPSB0aGlzLmxpbmVDb29yZGluYXRlcy54MSArIHRoaXMubGluZUNvb3JkaW5hdGVzLndpZHRoIC8gMiAtIHRoaXMuX3RpdGxlVGV4dEJsb2NrLndpZHRoIC8gMjtcblx0XHRcdHRoaXMuX3RpdGxlVGV4dEJsb2NrLnJlbmRlcih0cnVlKTtcblx0XHR9XG5cdH1cblx0ZWxzZSBpZiAodGhpcy5fcG9zaXRpb24gPT09IFwibGVmdFwiKSB7XG5cblxuXHRcdHZhciBsYWJlbDtcblx0XHR2YXIgeHk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9sYWJlbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxhYmVsID0gdGhpcy5fbGFiZWxzW2ldO1xuXHRcdFx0aWYgKGxhYmVsLnBvc2l0aW9uIDwgdGhpcy52aWV3cG9ydE1pbmltdW0gfHwgbGFiZWwucG9zaXRpb24gPiB0aGlzLnZpZXdwb3J0TWF4aW11bSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHh5ID0gdGhpcy5nZXRQaXhlbENvb3JkaW5hdGVzT25BeGlzKGxhYmVsLnBvc2l0aW9uKTtcblxuXHRcdFx0aWYgKCh0aGlzLnRpY2tUaGlja25lc3MgJiYgIXRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmUpIHx8ICh0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lICYmIHRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmUuX3RoaWNrbmVzc1R5cGUgPT09IFwicGl4ZWxcIikpIHtcblxuXHRcdFx0XHRpZiAodGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZSkge1xuXHRcdFx0XHRcdHN0cmlwTGluZSA9IHRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmU7XG5cblx0XHRcdFx0XHR0aGlzLmN0eC5saW5lV2lkdGggPSBzdHJpcExpbmUudGhpY2tuZXNzO1xuXHRcdFx0XHRcdHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gc3RyaXBMaW5lLmNvbG9yO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuY3R4LmxpbmVXaWR0aCA9IHRoaXMudGlja1RoaWNrbmVzcztcblx0XHRcdFx0XHR0aGlzLmN0eC5zdHJva2VTdHlsZSA9IHRoaXMudGlja0NvbG9yO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHRpY2tZID0gKHRoaXMuY3R4LmxpbmVXaWR0aCAlIDIgPT09IDEpID8gKHh5LnkgPDwgMCkgKyAuNSA6ICh4eS55IDw8IDApO1xuXHRcdFx0XHR0aGlzLmN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0dGhpcy5jdHgubW92ZVRvKHh5LnggPDwgMCwgdGlja1kpO1xuXHRcdFx0XHR0aGlzLmN0eC5saW5lVG8oKHh5LnggLSB0aGlzLnRpY2tMZW5ndGgpIDw8IDAsIHRpY2tZKTtcblx0XHRcdFx0dGhpcy5jdHguc3Ryb2tlKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vRG9uJ3Qgc2tpcCBzdHJpcExpbmUncyBsYWJlbHNcblx0XHRcdGlmIChza2lwTGFiZWxzICYmIGxhYmVsQ291bnQrKyAlIDIgIT09IDAgJiYgIXRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmUpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRsYWJlbC50ZXh0QmxvY2sueCA9IHh5LnggLSAobGFiZWwudGV4dEJsb2NrLndpZHRoICogTWF0aC5jb3MoTWF0aC5QSSAvIDE4MCAqIHRoaXMubGFiZWxBbmdsZSkpIC0gdGhpcy50aWNrTGVuZ3RoIC0gNTtcblxuXHRcdFx0aWYgKHRoaXMubGFiZWxBbmdsZSA9PT0gMCkge1xuXHRcdFx0XHRsYWJlbC50ZXh0QmxvY2sueSA9IHh5Lnk7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0bGFiZWwudGV4dEJsb2NrLnkgPSB4eS55IC0gKGxhYmVsLnRleHRCbG9jay53aWR0aCAqIE1hdGguc2luKE1hdGguUEkgLyAxODAgKiB0aGlzLmxhYmVsQW5nbGUpKTtcblxuXHRcdFx0bGFiZWwudGV4dEJsb2NrLnJlbmRlcih0cnVlKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy50aXRsZSkge1xuXG5cdFx0XHR0aGlzLl90aXRsZVRleHRCbG9jayA9IG5ldyBUZXh0QmxvY2sodGhpcy5jdHgsIHtcblx0XHRcdFx0eDogdGhpcy5ib3VuZGluZ1JlY3QueDEgKyAxLFxuXHRcdFx0XHR5OiB0aGlzLmxpbmVDb29yZGluYXRlcy55Mixcblx0XHRcdFx0bWF4V2lkdGg6IHRoaXMubGluZUNvb3JkaW5hdGVzLmhlaWdodCxcblx0XHRcdFx0bWF4SGVpZ2h0OiB0aGlzLnRpdGxlRm9udFNpemUgKiAxLjUsXG5cdFx0XHRcdGFuZ2xlOiAtOTAsXG5cdFx0XHRcdHRleHQ6IHRoaXMudGl0bGUsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogXCJjZW50ZXJcIiwvL2xlZnQsIGNlbnRlciwgcmlnaHRcblx0XHRcdFx0Zm9udFNpemU6IHRoaXMudGl0bGVGb250U2l6ZSwvL2luIHBpeGVsc1xuXHRcdFx0XHRmb250RmFtaWx5OiB0aGlzLnRpdGxlRm9udEZhbWlseSxcblx0XHRcdFx0Zm9udFdlaWdodDogdGhpcy50aXRsZUZvbnRXZWlnaHQsIC8vbm9ybWFsLCBib2xkLCBib2xkZXIsIGxpZ2h0ZXIsXG5cdFx0XHRcdGZvbnRDb2xvcjogdGhpcy50aXRsZUZvbnRDb2xvcixcblx0XHRcdFx0Zm9udFN0eWxlOiB0aGlzLnRpdGxlRm9udFN0eWxlLCAvLyBub3JtYWwsIGl0YWxpYywgb2JsaXF1ZVxuXHRcdFx0XHR0ZXh0QmFzZWxpbmU6IFwidG9wXCJcblx0XHRcdH0pO1xuXG5cdFx0XHR2YXIgc2l6ZSA9IHRoaXMuX3RpdGxlVGV4dEJsb2NrLm1lYXN1cmVUZXh0KCk7XG5cblx0XHRcdC8vdGhpcy5fdGl0bGVUZXh0QmxvY2sueCAtPSA0O1xuXG5cdFx0XHR0aGlzLl90aXRsZVRleHRCbG9jay55ID0gKHRoaXMubGluZUNvb3JkaW5hdGVzLmhlaWdodCAvIDIgKyB0aGlzLl90aXRsZVRleHRCbG9jay53aWR0aCAvIDIgKyB0aGlzLmxpbmVDb29yZGluYXRlcy55MSk7XG5cdFx0XHR0aGlzLl90aXRsZVRleHRCbG9jay5yZW5kZXIodHJ1ZSk7XG5cblx0XHRcdC8vaWYgKGlzRGVidWdNb2RlKSB7XG5cdFx0XHQvL1x0d2luZG93LmNvbnNvbGUubG9nKFwidGl0bGVGb250U2l6ZTogXCIgKyB0aGlzLnRpdGxlRm9udFNpemUgKyBcIjsgd2lkdGg6IFwiICsgc2l6ZS53aWR0aCArIFwiOyBoZWlnaHQ6IFwiICsgc2l6ZS5oZWlnaHQpO1xuXHRcdFx0Ly9cdHdpbmRvdy5jb25zb2xlLmxvZyhcInRoaXMuYm91bmRpbmdSZWN0LngxOiBcIiArIHRoaXMuYm91bmRpbmdSZWN0LngxKTtcblxuXHRcdFx0Ly9cdC8vdGhpcy5jdHgucmVjdCh0aGlzLl90aXRsZVRleHRCbG9jay54LCB0aGlzLl90aXRsZVRleHRCbG9jay55LCB0aGlzLl90aXRsZVRleHRCbG9jay5oZWlnaHQsIC10aGlzLl90aXRsZVRleHRCbG9jay53aWR0aCk7XG5cdFx0XHQvL1x0Ly90aGlzLmN0eC5zdHJva2UoKTtcblxuXHRcdFx0Ly99XG5cblx0XHR9XG5cdH1cblx0ZWxzZSBpZiAodGhpcy5fcG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuXG5cblx0XHR2YXIgbGFiZWw7XG5cdFx0dmFyIHh5O1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9sYWJlbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxhYmVsID0gdGhpcy5fbGFiZWxzW2ldO1xuXHRcdFx0aWYgKGxhYmVsLnBvc2l0aW9uIDwgdGhpcy52aWV3cG9ydE1pbmltdW0gfHwgbGFiZWwucG9zaXRpb24gPiB0aGlzLnZpZXdwb3J0TWF4aW11bSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHh5ID0gdGhpcy5nZXRQaXhlbENvb3JkaW5hdGVzT25BeGlzKGxhYmVsLnBvc2l0aW9uKTtcblxuXHRcdFx0aWYgKCh0aGlzLnRpY2tUaGlja25lc3MgJiYgIXRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmUpIHx8ICh0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lICYmIHRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmUuX3RoaWNrbmVzc1R5cGUgPT09IFwicGl4ZWxcIikpIHtcblxuXHRcdFx0XHRpZiAodGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZSkge1xuXHRcdFx0XHRcdHN0cmlwTGluZSA9IHRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmU7XG5cblx0XHRcdFx0XHR0aGlzLmN0eC5saW5lV2lkdGggPSBzdHJpcExpbmUudGhpY2tuZXNzO1xuXHRcdFx0XHRcdHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gc3RyaXBMaW5lLmNvbG9yO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuY3R4LmxpbmVXaWR0aCA9IHRoaXMudGlja1RoaWNrbmVzcztcblx0XHRcdFx0XHR0aGlzLmN0eC5zdHJva2VTdHlsZSA9IHRoaXMudGlja0NvbG9yO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHRpY2tZID0gKHRoaXMuY3R4LmxpbmVXaWR0aCAlIDIgPT09IDEpID8gKHh5LnkgPDwgMCkgKyAuNSA6ICh4eS55IDw8IDApO1xuXHRcdFx0XHR0aGlzLmN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0dGhpcy5jdHgubW92ZVRvKHh5LnggPDwgMCwgdGlja1kpO1xuXHRcdFx0XHR0aGlzLmN0eC5saW5lVG8oKHh5LnggKyB0aGlzLnRpY2tMZW5ndGgpIDw8IDAsIHRpY2tZKTtcblx0XHRcdFx0dGhpcy5jdHguc3Ryb2tlKCk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly9Eb24ndCBza2lwIHN0cmlwTGluZSdzIGxhYmVsc1xuXHRcdFx0aWYgKHNraXBMYWJlbHMgJiYgbGFiZWxDb3VudCsrICUgMiAhPT0gMCAmJiAhdGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGxhYmVsLnRleHRCbG9jay54ID0geHkueCArIHRoaXMudGlja0xlbmd0aCArIDU7XG5cdFx0XHQvL2xhYmVsLnRleHRCbG9jay55ID0geHkueSAtIChsYWJlbC50ZXh0QmxvY2sud2lkdGggKiBNYXRoLnNpbihNYXRoLlBJIC8gMTgwICogdGhpcy5sYWJlbEFuZ2xlKSk7XG5cdFx0XHRpZiAodGhpcy5sYWJlbEFuZ2xlID09PSAwKSB7XG5cdFx0XHRcdGxhYmVsLnRleHRCbG9jay55ID0geHkueTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdFx0bGFiZWwudGV4dEJsb2NrLnkgPSB4eS55O1xuXG5cdFx0XHRsYWJlbC50ZXh0QmxvY2sucmVuZGVyKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnRpdGxlKSB7XG5cblx0XHRcdHRoaXMuX3RpdGxlVGV4dEJsb2NrID0gbmV3IFRleHRCbG9jayh0aGlzLmN0eCwge1xuXHRcdFx0XHR4OiB0aGlzLmJvdW5kaW5nUmVjdC54MiAtIDEsXG5cdFx0XHRcdHk6IHRoaXMubGluZUNvb3JkaW5hdGVzLnkyLFxuXHRcdFx0XHRtYXhXaWR0aDogdGhpcy5saW5lQ29vcmRpbmF0ZXMuaGVpZ2h0LFxuXHRcdFx0XHRtYXhIZWlnaHQ6IHRoaXMudGl0bGVGb250U2l6ZSAqIDEuNSxcblx0XHRcdFx0YW5nbGU6IDkwLFxuXHRcdFx0XHR0ZXh0OiB0aGlzLnRpdGxlLFxuXHRcdFx0XHRob3Jpem9udGFsQWxpZ246IFwiY2VudGVyXCIsLy9sZWZ0LCBjZW50ZXIsIHJpZ2h0XG5cdFx0XHRcdGZvbnRTaXplOiB0aGlzLnRpdGxlRm9udFNpemUsLy9pbiBwaXhlbHNcblx0XHRcdFx0Zm9udEZhbWlseTogdGhpcy50aXRsZUZvbnRGYW1pbHksXG5cdFx0XHRcdGZvbnRXZWlnaHQ6IHRoaXMudGl0bGVGb250V2VpZ2h0LCAvL25vcm1hbCwgYm9sZCwgYm9sZGVyLCBsaWdodGVyLFxuXHRcdFx0XHRmb250Q29sb3I6IHRoaXMudGl0bGVGb250Q29sb3IsXG5cdFx0XHRcdGZvbnRTdHlsZTogdGhpcy50aXRsZUZvbnRTdHlsZSwgLy8gbm9ybWFsLCBpdGFsaWMsIG9ibGlxdWVcblx0XHRcdFx0dGV4dEJhc2VsaW5lOiBcInRvcFwiXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5fdGl0bGVUZXh0QmxvY2subWVhc3VyZVRleHQoKTtcblx0XHRcdHRoaXMuX3RpdGxlVGV4dEJsb2NrLnkgPSAodGhpcy5saW5lQ29vcmRpbmF0ZXMuaGVpZ2h0IC8gMiAtIHRoaXMuX3RpdGxlVGV4dEJsb2NrLndpZHRoIC8gMiArIHRoaXMubGluZUNvb3JkaW5hdGVzLnkxKTtcblx0XHRcdHRoaXMuX3RpdGxlVGV4dEJsb2NrLnJlbmRlcih0cnVlKTtcblxuXHRcdH1cblx0fVxufVxuXG5BeGlzLnByb3RvdHlwZS5yZW5kZXJJbnRlcmxhY2VkQ29sb3JzID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgY3R4ID0gdGhpcy5jaGFydC5wbG90QXJlYS5jdHg7XG5cdC8vcmV0dXJuO1xuXG5cdHZhciBpbnRlcmxhY2VkR3JpZFN0YXJ0UG9pbnQ7XG5cdHZhciBpbnRlcmxhY2VkR3JpZEVuZFBvaW50O1xuXHR2YXIgcGxvdEFyZWFDb29yZGluYXRlcyA9IHRoaXMuY2hhcnQucGxvdEFyZWE7XG5cdHZhciBpID0gMCwgcmVuZGVySW50ZXJsYWNlZEdyaWQgPSB0cnVlO1xuXG5cdGlmICgodGhpcy5fcG9zaXRpb24gPT09IFwiYm90dG9tXCIgfHwgdGhpcy5fcG9zaXRpb24gPT09IFwidG9wXCIpICYmIHRoaXMuaW50ZXJsYWNlZENvbG9yKSB7XG5cblx0XHRjdHguZmlsbFN0eWxlID0gdGhpcy5pbnRlcmxhY2VkQ29sb3I7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5fbGFiZWxzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdGlmICh0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHJlbmRlckludGVybGFjZWRHcmlkKSB7Ly9TbyB0aGF0IHRoZSBpbnRlcmxhY2VkIGNvbG9yIGFsdGVybmF0ZXNcblx0XHRcdFx0aW50ZXJsYWNlZEdyaWRTdGFydFBvaW50ID0gdGhpcy5nZXRQaXhlbENvb3JkaW5hdGVzT25BeGlzKHRoaXMuX2xhYmVsc1tpXS5wb3NpdGlvbik7XG5cblx0XHRcdFx0aWYgKGkgKyAxID49IHRoaXMuX2xhYmVscy5sZW5ndGggLSAxKVxuXHRcdFx0XHRcdGludGVybGFjZWRHcmlkRW5kUG9pbnQgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPbkF4aXModGhpcy52aWV3cG9ydE1heGltdW0pO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0aW50ZXJsYWNlZEdyaWRFbmRQb2ludCA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uQXhpcyh0aGlzLl9sYWJlbHNbaSArIDFdLnBvc2l0aW9uKTtcblxuXHRcdFx0XHRjdHguZmlsbFJlY3QoaW50ZXJsYWNlZEdyaWRTdGFydFBvaW50LngsIHBsb3RBcmVhQ29vcmRpbmF0ZXMueTEsIE1hdGguYWJzKGludGVybGFjZWRHcmlkRW5kUG9pbnQueCAtIGludGVybGFjZWRHcmlkU3RhcnRQb2ludC54KSwgTWF0aC5hYnMocGxvdEFyZWFDb29yZGluYXRlcy55MSAtIHBsb3RBcmVhQ29vcmRpbmF0ZXMueTIpKTtcblx0XHRcdFx0cmVuZGVySW50ZXJsYWNlZEdyaWQgPSBmYWxzZTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRyZW5kZXJJbnRlcmxhY2VkR3JpZCA9IHRydWU7XG5cblx0XHR9XG5cblx0fSBlbHNlIGlmICgodGhpcy5fcG9zaXRpb24gPT09IFwibGVmdFwiIHx8IHRoaXMuX3Bvc2l0aW9uID09PSBcInJpZ2h0XCIpICYmIHRoaXMuaW50ZXJsYWNlZENvbG9yKSB7XG5cblx0XHRjdHguZmlsbFN0eWxlID0gdGhpcy5pbnRlcmxhY2VkQ29sb3I7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5fbGFiZWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgICAgICBpZiAodGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZSlcblx0XHQgICAgICAgICAgICBjb250aW51ZTtcblxuXHRcdFx0aWYgKHJlbmRlckludGVybGFjZWRHcmlkKSB7Ly9TbyB0aGF0IHRoZSBpbnRlcmxhY2VkIGNvbG9yIGFsdGVybmF0ZXNcblxuXHRcdFx0XHRpbnRlcmxhY2VkR3JpZEVuZFBvaW50ID0gdGhpcy5nZXRQaXhlbENvb3JkaW5hdGVzT25BeGlzKHRoaXMuX2xhYmVsc1tpXS5wb3NpdGlvbik7XG5cblx0XHRcdFx0aWYgKGkgKyAxID49IHRoaXMuX2xhYmVscy5sZW5ndGggLSAxKVxuXHRcdFx0XHRcdGludGVybGFjZWRHcmlkU3RhcnRQb2ludCA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uQXhpcyh0aGlzLnZpZXdwb3J0TWF4aW11bSk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRpbnRlcmxhY2VkR3JpZFN0YXJ0UG9pbnQgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPbkF4aXModGhpcy5fbGFiZWxzW2kgKyAxXS5wb3NpdGlvbik7XG5cblx0XHRcdFx0Y3R4LmZpbGxSZWN0KHBsb3RBcmVhQ29vcmRpbmF0ZXMueDEsIGludGVybGFjZWRHcmlkU3RhcnRQb2ludC55LCBNYXRoLmFicyhwbG90QXJlYUNvb3JkaW5hdGVzLngxIC0gcGxvdEFyZWFDb29yZGluYXRlcy54MiksIE1hdGguYWJzKGludGVybGFjZWRHcmlkU3RhcnRQb2ludC55IC0gaW50ZXJsYWNlZEdyaWRFbmRQb2ludC55KSk7XG5cdFx0XHRcdHJlbmRlckludGVybGFjZWRHcmlkID0gZmFsc2U7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0cmVuZGVySW50ZXJsYWNlZEdyaWQgPSB0cnVlO1xuXHRcdH1cblx0XHQgICAgLy90aHJvdyBcIjEyM1wiO1xuXHR9XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xufVxuXG4vL1JlbmRlcnMgc3RyaXBMaW5lcyBvZiBnaXZlbiB0aGlja25lc3MgdHlwZS5cbkF4aXMucHJvdG90eXBlLnJlbmRlclN0cmlwTGluZXNPZlRoaWNrbmVzc1R5cGUgPSBmdW5jdGlvbiAodGhpY2tuZXNzVHlwZSkge1xuXG5cdGlmICghKHRoaXMuc3RyaXBMaW5lcyAmJiB0aGlzLnN0cmlwTGluZXMubGVuZ3RoID4gMCkgfHwgIXRoaWNrbmVzc1R5cGUpXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBfdGhpcyA9IHRoaXM7XG5cblx0dmFyIGkgPSAwO1xuXHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdHJpcExpbmVzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHR2YXIgc3RyaXBMaW5lID0gdGhpcy5zdHJpcExpbmVzW2ldO1xuXG5cdFx0aWYgKHN0cmlwTGluZS5fdGhpY2tuZXNzVHlwZSAhPT0gdGhpY2tuZXNzVHlwZSlcblx0XHRcdGNvbnRpbnVlO1xuXG5cblx0XHQvL1Nob3VsZCBiZSBza2lwcGVkIG9ubHkgaWYgdGhpY2tuZXNzVHlwZSBpcyBcInBpeGVsXCIuIElmIGl0IGlzIFwidmFsdWVcIiB0aGVuIGNsaXBwaW5nIGlzIGF1dG9tYXRpY2FsbHkgYXBwbGllZCBiZWZvcmUgY2FsbGluZy5cblx0XHRpZiAodGhpY2tuZXNzVHlwZSA9PT0gXCJwaXhlbFwiICYmIChzdHJpcExpbmUudmFsdWUgPCB0aGlzLnZpZXdwb3J0TWluaW11bSB8fCBzdHJpcExpbmUudmFsdWUgPiB0aGlzLnZpZXdwb3J0TWF4aW11bSkpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdGlmIChzdHJpcExpbmUuc2hvd09uVG9wKSB7XG5cdFx0XHR0aGlzLmNoYXJ0LmFkZEV2ZW50TGlzdGVuZXIoXCJkYXRhQW5pbWF0aW9uSXRlcmF0aW9uRW5kXCIsIHN0cmlwTGluZS5yZW5kZXIsIHN0cmlwTGluZSk7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHRcdHN0cmlwTGluZS5yZW5kZXIoKTtcblx0fVxufTtcblxuQXhpcy5wcm90b3R5cGUucmVuZGVyR3JpZCA9IGZ1bmN0aW9uICgpIHtcblxuXHRpZiAoISh0aGlzLmdyaWRUaGlja25lc3MgJiYgdGhpcy5ncmlkVGhpY2tuZXNzID4gMCkpXG5cdFx0cmV0dXJuO1xuXG5cdC8vdmFyIGN0eCA9IHRoaXMuY2hhcnQucGxvdEFyZWEuY3R4O1xuXHR2YXIgY3R4ID0gdGhpcy5jaGFydC5jdHg7XG5cblx0dmFyIHh5O1xuXHR2YXIgcGxvdEFyZWFDb29yZGluYXRlcyA9IHRoaXMuY2hhcnQucGxvdEFyZWE7XG5cdHZhciBzdHJpcExpbmU7XG5cdHZhciB0ZW1wTGluZVdpZHRoLCB0ZW1wU3Ryb2tlU3R5bGU7XG5cdC8vcmV0dXJuO1xuXG5cdGN0eC5saW5lV2lkdGggPSB0aGlzLmdyaWRUaGlja25lc3M7XG5cdGN0eC5zdHJva2VTdHlsZSA9IHRoaXMuZ3JpZENvbG9yO1xuXG5cdGlmIChjdHguc2V0TGluZURhc2gpIHtcblx0XHRjdHguc2V0TGluZURhc2goZ2V0TGluZURhc2hBcnJheSh0aGlzLmdyaWREYXNoVHlwZSwgdGhpcy5ncmlkVGhpY2tuZXNzKSk7XG5cdH1cblxuXG5cdGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJib3R0b21cIiB8fCB0aGlzLl9wb3NpdGlvbiA9PT0gXCJ0b3BcIikge1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IHRoaXMuX2xhYmVscy5sZW5ndGggJiYgIXRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmU7IGkrKykge1xuXG5cdFx0XHRpZiAodGhpcy5fbGFiZWxzW2ldLnBvc2l0aW9uIDwgdGhpcy52aWV3cG9ydE1pbmltdW0gfHwgdGhpcy5fbGFiZWxzW2ldLnBvc2l0aW9uID4gdGhpcy52aWV3cG9ydE1heGltdW0pXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cblx0XHRcdHh5ID0gdGhpcy5nZXRQaXhlbENvb3JkaW5hdGVzT25BeGlzKHRoaXMuX2xhYmVsc1tpXS5wb3NpdGlvbik7XG5cblx0XHRcdHZhciBncmlkWCA9IChjdHgubGluZVdpZHRoICUgMiA9PT0gMSkgPyAoeHkueCA8PCAwKSArIC41IDogKHh5LnggPDwgMCk7XG5cblx0XHRcdGN0eC5tb3ZlVG8oZ3JpZFgsIHBsb3RBcmVhQ29vcmRpbmF0ZXMueTEgPDwgMCk7XG5cdFx0XHRjdHgubGluZVRvKGdyaWRYLCBwbG90QXJlYUNvb3JkaW5hdGVzLnkyIDw8IDApO1xuXG5cdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0fVxuXG5cdH1cblx0ZWxzZSBpZiAodGhpcy5fcG9zaXRpb24gPT09IFwibGVmdFwiIHx8IHRoaXMuX3Bvc2l0aW9uID09PSBcInJpZ2h0XCIpIHtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbGFiZWxzLmxlbmd0aCAmJiAhdGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZTsgaSsrKSB7XG5cblx0XHRcdGlmIChpID09PSAwICYmIHRoaXMudHlwZSA9PT0gXCJheGlzWVwiICYmIHRoaXMuY2hhcnQuYXhpc1ggJiYgdGhpcy5jaGFydC5heGlzWC5saW5lVGhpY2tuZXNzKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHRoaXMuX2xhYmVsc1tpXS5wb3NpdGlvbiA8IHRoaXMudmlld3BvcnRNaW5pbXVtIHx8IHRoaXMuX2xhYmVsc1tpXS5wb3NpdGlvbiA+IHRoaXMudmlld3BvcnRNYXhpbXVtKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXG5cdFx0XHR4eSA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uQXhpcyh0aGlzLl9sYWJlbHNbaV0ucG9zaXRpb24pO1xuXG5cdFx0XHR2YXIgZ3JpZFkgPSAoY3R4LmxpbmVXaWR0aCAlIDIgPT09IDEpID8gKHh5LnkgPDwgMCkgKyAuNSA6ICh4eS55IDw8IDApO1xuXG5cdFx0XHRjdHgubW92ZVRvKHBsb3RBcmVhQ29vcmRpbmF0ZXMueDEgPDwgMCwgZ3JpZFkpO1xuXHRcdFx0Y3R4LmxpbmVUbyhwbG90QXJlYUNvb3JkaW5hdGVzLngyIDw8IDAsIGdyaWRZKTtcblxuXHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdH1cblxuXHR9XG59XG5cbkF4aXMucHJvdG90eXBlLnJlbmRlckF4aXNMaW5lID0gZnVuY3Rpb24gKCkge1xuXHQvL3ZhciBjdHggPSB0aGlzLmNoYXJ0LnBsb3RBcmVhLmN0eDtcblx0dmFyIGN0eCA9IHRoaXMuY2hhcnQuY3R4O1xuXG5cdGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJib3R0b21cIiB8fCB0aGlzLl9wb3NpdGlvbiA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICh0aGlzLmxpbmVUaGlja25lc3MpIHtcblx0XHRcdGN0eC5saW5lV2lkdGggPSB0aGlzLmxpbmVUaGlja25lc3M7XG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmxpbmVDb2xvciA/IHRoaXMubGluZUNvbG9yIDogXCJibGFja1wiO1xuXG5cdFx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XG5cdFx0XHRcdGN0eC5zZXRMaW5lRGFzaChnZXRMaW5lRGFzaEFycmF5KHRoaXMubGluZURhc2hUeXBlLCB0aGlzLmxpbmVUaGlja25lc3MpKTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGxpbmVZID0gKHRoaXMubGluZVRoaWNrbmVzcyAlIDIgPT09IDEpID8gKHRoaXMubGluZUNvb3JkaW5hdGVzLnkxIDw8IDApICsgLjUgOiAodGhpcy5saW5lQ29vcmRpbmF0ZXMueTEgPDwgMCk7XG5cblx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdGN0eC5tb3ZlVG8odGhpcy5saW5lQ29vcmRpbmF0ZXMueDEsIGxpbmVZKTtcblx0XHRcdGN0eC5saW5lVG8odGhpcy5saW5lQ29vcmRpbmF0ZXMueDIsIGxpbmVZKTtcblx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHR9XG5cblx0fSBlbHNlIGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5fcG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuXHRcdGlmICh0aGlzLmxpbmVUaGlja25lc3MpIHtcblx0XHRcdGN0eC5saW5lV2lkdGggPSB0aGlzLmxpbmVUaGlja25lc3M7XG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmxpbmVDb2xvcjtcblxuXHRcdFx0aWYgKGN0eC5zZXRMaW5lRGFzaCkge1xuXHRcdFx0XHRjdHguc2V0TGluZURhc2goZ2V0TGluZURhc2hBcnJheSh0aGlzLmxpbmVEYXNoVHlwZSwgdGhpcy5saW5lVGhpY2tuZXNzKSk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBsaW5lWCA9ICh0aGlzLmxpbmVUaGlja25lc3MgJSAyID09PSAxKSA/ICh0aGlzLmxpbmVDb29yZGluYXRlcy54MSA8PCAwKSArIC41IDogKHRoaXMubGluZUNvb3JkaW5hdGVzLngxIDw8IDApO1xuXG5cdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRjdHgubW92ZVRvKGxpbmVYLCB0aGlzLmxpbmVDb29yZGluYXRlcy55MSk7XG5cdFx0XHRjdHgubGluZVRvKGxpbmVYLCB0aGlzLmxpbmVDb29yZGluYXRlcy55Mik7XG5cdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0fVxuXHR9XG59XG5cbkF4aXMucHJvdG90eXBlLmdldFBpeGVsQ29vcmRpbmF0ZXNPbkF4aXMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0dmFyIHh5ID0ge1xuXHR9O1xuXHR2YXIgd2lkdGggPSB0aGlzLmxpbmVDb29yZGluYXRlcy53aWR0aDtcblx0dmFyIGhlaWdodCA9IHRoaXMubGluZUNvb3JkaW5hdGVzLmhlaWdodDtcblxuXHRpZiAodGhpcy5fcG9zaXRpb24gPT09IFwiYm90dG9tXCIgfHwgdGhpcy5fcG9zaXRpb24gPT09IFwidG9wXCIpIHtcblx0XHQvL3ZhciBwaXhlbFBlclVuaXQgPSB3aWR0aCAvIE1hdGguYWJzKHRoaXMudmlld3BvcnRNYXhpbXVtIC0gdGhpcy52aWV3cG9ydE1pbmltdW0pO1xuXHRcdHZhciBwaXhlbFBlclVuaXQgPSB0aGlzLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdDtcblxuXHRcdC8veHkueCA9IHRoaXMubGluZUNvb3JkaW5hdGVzLngxICsgKHBpeGVsUGVyVW5pdCAqICh2YWx1ZSAtIHRoaXMudmlld3BvcnRNaW5pbXVtKSk7XG5cdFx0eHkueCA9IHRoaXMuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgKHBpeGVsUGVyVW5pdCAqICh2YWx1ZSAtIHRoaXMudmlld3BvcnRNaW5pbXVtKSk7XG5cdFx0eHkueSA9IHRoaXMubGluZUNvb3JkaW5hdGVzLnkxO1xuXHR9XG5cdGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5fcG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuXHRcdC8vdmFyIHBpeGVsUGVyVW5pdCA9IGhlaWdodCAvIE1hdGguYWJzKHRoaXMudmlld3BvcnRNYXhpbXVtIC0gdGhpcy52aWV3cG9ydE1pbmltdW0pO1xuXHRcdHZhciBwaXhlbFBlclVuaXQgPSAtdGhpcy5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQ7XG5cblx0XHQvL3h5LnkgPSB0aGlzLmxpbmVDb29yZGluYXRlcy55MiAtIChwaXhlbFBlclVuaXQgKiAodmFsdWUgLSB0aGlzLnZpZXdwb3J0TWluaW11bSkpO1xuXHRcdHh5LnkgPSB0aGlzLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSAtIChwaXhlbFBlclVuaXQgKiAodmFsdWUgLSB0aGlzLnZpZXdwb3J0TWluaW11bSkpO1xuXHRcdHh5LnggPSB0aGlzLmxpbmVDb29yZGluYXRlcy54Mjtcblx0fVxuXG5cdHJldHVybiB4eTtcbn1cblxuQXhpcy5wcm90b3R5cGUuY29udmVydFBpeGVsVG9WYWx1ZSA9IGZ1bmN0aW9uIChwaXhlbCkge1xuXG5cdGlmICghcGl4ZWwpXG5cdFx0cmV0dXJuIG51bGw7XG5cblx0dmFyIHZhbHVlID0gMDtcblx0dmFyIHAgPSAodGhpcy5fcG9zaXRpb24gPT09IFwibGVmdFwiIHx8IHRoaXMuX3Bvc2l0aW9uID09PSBcInJpZ2h0XCIpID8gcGl4ZWwueSA6IHBpeGVsLng7XG5cblx0dmFsdWUgPSB0aGlzLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0gKyAocCAtIHRoaXMuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlKSAvIHRoaXMuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0O1xuXG5cdHJldHVybiB2YWx1ZTtcbn1cblxuQXhpcy5wcm90b3R5cGUuc2V0Vmlld1BvcnRSYW5nZSA9IGZ1bmN0aW9uICh2aWV3cG9ydE1pbmltdW0sIHZpZXdwb3J0TWF4aW11bSkge1xuXG5cdHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5uZXdWaWV3cG9ydE1pbmltdW0gPSB0aGlzLnZpZXdwb3J0TWluaW11bSA9IE1hdGgubWluKHZpZXdwb3J0TWluaW11bSwgdmlld3BvcnRNYXhpbXVtKTtcblx0dGhpcy5zZXNzaW9uVmFyaWFibGVzLm5ld1ZpZXdwb3J0TWF4aW11bSA9IHRoaXMudmlld3BvcnRNYXhpbXVtID0gTWF0aC5tYXgodmlld3BvcnRNaW5pbXVtLCB2aWV3cG9ydE1heGltdW0pO1xuXG59XG5cbkF4aXMucHJvdG90eXBlLmdldFhWYWx1ZUF0ID0gZnVuY3Rpb24gKHBpeGVsKSB7XG5cdGlmICghcGl4ZWwpXG5cdFx0cmV0dXJuIG51bGw7XG5cblx0dmFyIHh2YWwgPSBudWxsO1xuXG5cdGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJsZWZ0XCIpIHtcblx0XHR4dmFsID0gKHRoaXMuY2hhcnQuYXhpc1gudmlld3BvcnRNYXhpbXVtIC0gdGhpcy5jaGFydC5heGlzWC52aWV3cG9ydE1pbmltdW0pIC8gdGhpcy5jaGFydC5heGlzWC5saW5lQ29vcmRpbmF0ZXMuaGVpZ2h0ICogKCh0aGlzLmNoYXJ0LmF4aXNYLmxpbmVDb29yZGluYXRlcy55MiAtIHBpeGVsLnkpKSArIHRoaXMuY2hhcnQuYXhpc1gudmlld3BvcnRNaW5pbXVtO1xuXHR9XG5cdGVsc2UgaWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImJvdHRvbVwiKSB7XG5cdFx0eHZhbCA9ICh0aGlzLmNoYXJ0LmF4aXNYLnZpZXdwb3J0TWF4aW11bSAtIHRoaXMuY2hhcnQuYXhpc1gudmlld3BvcnRNaW5pbXVtKSAvIHRoaXMuY2hhcnQuYXhpc1gubGluZUNvb3JkaW5hdGVzLndpZHRoICogKHBpeGVsLnggLSB0aGlzLmNoYXJ0LmF4aXNYLmxpbmVDb29yZGluYXRlcy54MSkgKyB0aGlzLmNoYXJ0LmF4aXNYLnZpZXdwb3J0TWluaW11bTtcblx0fVxuXG5cdHJldHVybiB4dmFsO1xufVxuXG5BeGlzLnByb3RvdHlwZS5jYWxjdWxhdGVWYWx1ZVRvUGl4ZWxDb252ZXJzaW9uUGFyYW1ldGVycyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHR0aGlzLnJldmVyc2VkID0gZmFsc2U7XG5cblx0dmFyIGNvbnZlcnNpb25QYXJhbWV0ZXJzID0ge1xuXHRcdHBpeGVsUGVyVW5pdDogbnVsbCwgbWluaW11bTogbnVsbCwgcmVmZXJlbmNlOiBudWxsXG5cdH07XG5cblx0dmFyIHdpZHRoID0gdGhpcy5saW5lQ29vcmRpbmF0ZXMud2lkdGg7XG5cdHZhciBoZWlnaHQgPSB0aGlzLmxpbmVDb29yZGluYXRlcy5oZWlnaHQ7XG5cblx0Y29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSA9IHRoaXMudmlld3BvcnRNaW5pbXVtO1xuXG5cdGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJib3R0b21cIiB8fCB0aGlzLl9wb3NpdGlvbiA9PT0gXCJ0b3BcIikge1xuXHRcdGNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA9ICh0aGlzLnJldmVyc2VkID8gLTEgOiAxKSAqIHdpZHRoIC8gTWF0aC5hYnModGhpcy52aWV3cG9ydE1heGltdW0gLSB0aGlzLnZpZXdwb3J0TWluaW11bSk7XG5cdFx0Y29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlID0gKHRoaXMucmV2ZXJzZWQgPyB0aGlzLmxpbmVDb29yZGluYXRlcy54MiA6IHRoaXMubGluZUNvb3JkaW5hdGVzLngxKTtcblx0fVxuXG5cdGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5fcG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuXHRcdGNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA9ICh0aGlzLnJldmVyc2VkID8gMSA6IC0xKSAqIGhlaWdodCAvIE1hdGguYWJzKHRoaXMudmlld3BvcnRNYXhpbXVtIC0gdGhpcy52aWV3cG9ydE1pbmltdW0pO1xuXHRcdGNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSA9ICh0aGlzLnJldmVyc2VkID8gdGhpcy5saW5lQ29vcmRpbmF0ZXMueTEgOiB0aGlzLmxpbmVDb29yZGluYXRlcy55Mik7XG5cdH1cblxuXG5cdHRoaXMuY29udmVyc2lvblBhcmFtZXRlcnMgPSBjb252ZXJzaW9uUGFyYW1ldGVycztcbn1cblxuQXhpcy5wcm90b3R5cGUuY2FsY3VsYXRlQXhpc1BhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7XG5cblx0dmFyIGZyZWVTcGFjZSA9IHRoaXMuY2hhcnQubGF5b3V0TWFuYWdlci5nZXRGcmVlU3BhY2UoKTtcblx0dmFyIGF2YWlsYWJsZVdpZHRoID0gMDtcblx0dmFyIGF2YWlsYWJsZUhlaWdodCA9IDA7XG5cdHZhciBpc0xlc3NUaGFuVHdvRGF0YVBvaW50cyA9IGZhbHNlO1xuXG5cdGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJib3R0b21cIiB8fCB0aGlzLl9wb3NpdGlvbiA9PT0gXCJ0b3BcIikge1xuXHRcdHRoaXMubWF4V2lkdGggPSBmcmVlU3BhY2Uud2lkdGg7XG5cdFx0dGhpcy5tYXhIZWlnaHQgPSBmcmVlU3BhY2UuaGVpZ2h0O1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMubWF4V2lkdGggPSBmcmVlU3BhY2UuaGVpZ2h0O1xuXHRcdHRoaXMubWF4SGVpZ2h0ID0gZnJlZVNwYWNlLndpZHRoO1xuXHR9XG5cblx0dmFyIG5vVGlja3MgPSB0aGlzLnR5cGUgPT09IFwiYXhpc1hcIiA/ICh0aGlzLm1heFdpZHRoIDwgNTAwID8gOCA6IE1hdGgubWF4KDYsIE1hdGguZmxvb3IodGhpcy5tYXhXaWR0aCAvIDYyKSkpIDogTWF0aC5tYXgoTWF0aC5mbG9vcih0aGlzLm1heFdpZHRoIC8gNDApLCAyKTtcblx0dmFyIG1pbiwgbWF4O1xuXHR2YXIgbWluRGlmZjtcblx0dmFyIHJhbmdlO1xuXHR2YXIgcmFuZ2VQYWRkaW5nID0gMDtcblxuXG5cdGlmICh0aGlzLnZpZXdwb3J0TWluaW11bSA9PT0gbnVsbCB8fCBpc05hTih0aGlzLnZpZXdwb3J0TWluaW11bSkpXG5cdFx0dGhpcy52aWV3cG9ydE1pbmltdW0gPSB0aGlzLm1pbmltdW07XG5cblx0aWYgKHRoaXMudmlld3BvcnRNYXhpbXVtID09PSBudWxsIHx8IGlzTmFOKHRoaXMudmlld3BvcnRNYXhpbXVtKSlcblx0XHR0aGlzLnZpZXdwb3J0TWF4aW11bSA9IHRoaXMubWF4aW11bTtcblxuXHRpZiAodGhpcy50eXBlID09PSBcImF4aXNYXCIpIHtcblx0XHRtaW4gPSAodGhpcy52aWV3cG9ydE1pbmltdW0gIT09IG51bGwpID8gdGhpcy52aWV3cG9ydE1pbmltdW0gOiB0aGlzLmRhdGFJbmZvLnZpZXdQb3J0TWluO1xuXHRcdG1heCA9ICh0aGlzLnZpZXdwb3J0TWF4aW11bSAhPT0gbnVsbCkgPyB0aGlzLnZpZXdwb3J0TWF4aW11bSA6IHRoaXMuZGF0YUluZm8udmlld1BvcnRNYXg7XG5cblx0XHRpZiAobWF4IC0gbWluID09PSAwKSB7XG5cdFx0XHRyYW5nZVBhZGRpbmcgPSB0eXBlb2YgKHRoaXMuX29wdGlvbnMuaW50ZXJ2YWwpID09PSBcInVuZGVmaW5lZFwiID8gLjQgOiB0aGlzLl9vcHRpb25zLmludGVydmFsO1xuXG5cdFx0XHRtYXggKz0gcmFuZ2VQYWRkaW5nO1xuXHRcdFx0bWluIC09IHJhbmdlUGFkZGluZztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5kYXRhSW5mby5taW5EaWZmICE9PSBJbmZpbml0eSlcblx0XHRcdG1pbkRpZmYgPSB0aGlzLmRhdGFJbmZvLm1pbkRpZmY7XG5cdFx0ZWxzZSBpZiAobWF4IC0gbWluID4gMSkge1xuXHRcdFx0bWluRGlmZiA9IE1hdGguYWJzKG1heCAtIG1pbikgKiAuNTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRtaW5EaWZmID0gMTtcblxuXHRcdFx0aWYgKHRoaXMuY2hhcnQucGxvdEluZm8uYXhpc1hWYWx1ZVR5cGUgPT09IFwiZGF0ZVRpbWVcIilcblx0XHRcdFx0aXNMZXNzVGhhblR3b0RhdGFQb2ludHMgPSB0cnVlO1xuXHRcdH1cblxuXHR9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gXCJheGlzWVwiKSB7XG5cblx0XHQvL21pbiA9IHR5cGVvZiAodGhpcy5fb3B0aW9ucy52aWV3cG9ydE1pbmltdW0pID09PSBcInVuZGVmaW5lZFwiIHx8IHRoaXMuX29wdGlvbnMudmlld3BvcnRNaW5pbXVtID09PSBudWxsID8gdGhpcy5kYXRhSW5mby52aWV3UG9ydE1pbiA6IHRoaXMuX29wdGlvbnMudmlld3BvcnRNaW5pbXVtO1xuXHRcdC8vbWF4ID0gdHlwZW9mICh0aGlzLl9vcHRpb25zLnZpZXdwb3J0TWF4aW11bSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdGhpcy5fb3B0aW9ucy52aWV3cG9ydE1heGltdW0gPT09IG51bGwgPyB0aGlzLmRhdGFJbmZvLnZpZXdQb3J0TWF4IDogdGhpcy5fb3B0aW9ucy52aWV3cG9ydE1heGltdW07XG5cdFx0bWluID0gKHRoaXMudmlld3BvcnRNaW5pbXVtICE9PSBudWxsKSA/IHRoaXMudmlld3BvcnRNaW5pbXVtIDogdGhpcy5kYXRhSW5mby52aWV3UG9ydE1pbjtcblx0XHRtYXggPSAodGhpcy52aWV3cG9ydE1heGltdW0gIT09IG51bGwpID8gdGhpcy52aWV3cG9ydE1heGltdW0gOiB0aGlzLmRhdGFJbmZvLnZpZXdQb3J0TWF4O1xuXG5cdFx0aWYgKCFpc0Zpbml0ZShtaW4pICYmICFpc0Zpbml0ZShtYXgpKSB7XG5cdFx0XHRtYXggPSB0eXBlb2YgKHRoaXMuX29wdGlvbnMuaW50ZXJ2YWwpID09PSBcInVuZGVmaW5lZFwiID8gLUluZmluaXR5IDogdGhpcy5fb3B0aW9ucy5pbnRlcnZhbDtcblx0XHRcdG1pbiA9IDA7XG5cdFx0fSBlbHNlIGlmICghaXNGaW5pdGUobWluKSkge1xuXHRcdFx0bWluID0gbWF4O1xuXHRcdH0gZWxzZSBpZiAoIWlzRmluaXRlKG1heCkpIHtcblx0XHRcdG1heCA9IG1pbjtcblx0XHR9XG5cblx0XHRcdGlmIChtaW4gPT09IDAgJiYgbWF4ID09PSAwKSB7Ly8gV2hlbiBhbGwgZGF0YVBvaW50cyBhcmUgemVyb1xuXHRcdFx0XHRtYXggKz0gOTtcblx0XHRcdFx0bWluID0gMDtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKG1heCAtIG1pbiA9PT0gMCkgey8vIFdoZW4gdGhlcmUgaXMgb25seSBhIHNpbmdsZSBkYXRhUG9pbnQgb3Igd2hlbiBhbGwgZGF0YVBvaW50cyBoYXZlIHNhbWUgWSBWYWx1ZVxuXHRcdFx0XHRyYW5nZVBhZGRpbmcgPSBNYXRoLm1pbihNYXRoLmFicyhNYXRoLmFicyhtYXgpICogLjAxKSwgNSk7XG5cdFx0XHRcdG1heCArPSByYW5nZVBhZGRpbmc7XG5cdFx0XHRcdG1pbiAtPSByYW5nZVBhZGRpbmc7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChtaW4gPiBtYXgpIHtcblx0XHRcdFx0cmFuZ2VQYWRkaW5nID0gTWF0aC5taW4oTWF0aC5hYnMoTWF0aC5hYnMobWF4IC0gbWluKSAqIC4wMSksIDUpO1xuXG5cdFx0XHRcdGlmIChtYXggPj0gMClcblx0XHRcdFx0XHRtaW4gPSBtYXggLSByYW5nZVBhZGRpbmc7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRtYXggPSBtaW4gKyByYW5nZVBhZGRpbmc7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblxuXHRcdFx0XHRyYW5nZVBhZGRpbmcgPSBNYXRoLm1pbihNYXRoLmFicyhNYXRoLmFicyhtYXggLSBtaW4pICogLjAxKSwgLjA1KTtcblxuXHRcdFx0XHRpZiAobWF4ICE9PSAwKVxuXHRcdFx0XHRcdG1heCArPSByYW5nZVBhZGRpbmc7XG5cdFx0XHRcdGlmIChtaW4gIT09IDApXG5cdFx0XHRcdFx0bWluIC09IHJhbmdlUGFkZGluZztcblx0XHRcdH1cblxuXHRcdGlmICh0aGlzLmRhdGFJbmZvLm1pbkRpZmYgIT09IEluZmluaXR5KVxuXHRcdFx0bWluRGlmZiA9IHRoaXMuZGF0YUluZm8ubWluRGlmZjtcblx0XHRlbHNlIGlmIChtYXggLSBtaW4gPiAxKSB7XG5cdFx0XHRtaW5EaWZmID0gTWF0aC5hYnMobWF4IC0gbWluKSAqIC41O1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdG1pbkRpZmYgPSAxO1xuXHRcdH1cblxuXG5cdFx0Ly9BcHBseSBpbmNsdWRlWmVyb1xuXHRcdGlmICh0aGlzLmluY2x1ZGVaZXJvICYmICh0aGlzLnZpZXdwb3J0TWluaW11bSA9PT0gbnVsbCB8fCBpc05hTih0aGlzLnZpZXdwb3J0TWluaW11bSkpKSB7XG5cdFx0XHRpZiAobWluID4gMClcblx0XHRcdFx0bWluID0gMDtcblx0XHR9XG5cdFx0aWYgKHRoaXMuaW5jbHVkZVplcm8gJiYgKHRoaXMudmlld3BvcnRNYXhpbXVtID09PSBudWxsIHx8IGlzTmFOKHRoaXMudmlld3BvcnRNYXhpbXVtKSkpIHtcblx0XHRcdGlmIChtYXggPCAwKVxuXHRcdFx0XHRtYXggPSAwO1xuXHRcdH1cblx0fVxuXG5cdHJhbmdlID0gKGlzTmFOKHRoaXMudmlld3BvcnRNYXhpbXVtKSB8fCB0aGlzLnZpZXdwb3J0TWF4aW11bSA9PT0gbnVsbCA/IG1heCA6IHRoaXMudmlld3BvcnRNYXhpbXVtKSAtIChpc05hTih0aGlzLnZpZXdwb3J0TWluaW11bSkgfHwgdGhpcy52aWV3cG9ydE1pbmltdW0gPT09IG51bGwgPyBtaW4gOiB0aGlzLnZpZXdwb3J0TWluaW11bSk7XG5cblx0aWYgKHRoaXMudHlwZSA9PT0gXCJheGlzWFwiICYmIHRoaXMuY2hhcnQucGxvdEluZm8uYXhpc1hWYWx1ZVR5cGUgPT09IFwiZGF0ZVRpbWVcIikge1xuXG5cdFx0aWYgKCF0aGlzLmludGVydmFsVHlwZSkge1xuXG5cdFx0XHRpZiAocmFuZ2UgLyAoMSAqIDEpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDE7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtaWxsaXNlY29uZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvICgxICogMikgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMjtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcIm1pbGxpc2Vjb25kXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKDEgKiA1KSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSA1O1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWlsbGlzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoMSAqIDEwKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAxMDtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcIm1pbGxpc2Vjb25kXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKDEgKiAyMCkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMjA7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtaWxsaXNlY29uZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvICgxICogNTApIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDUwO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWlsbGlzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoMSAqIDEwMCkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMTAwO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWlsbGlzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoMSAqIDIwMCkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMjAwO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWlsbGlzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoMSAqIDI1MCkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMjUwO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWlsbGlzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoMSAqIDMwMCkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMzAwO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWlsbGlzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoMSAqIDQwMCkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gNDAwO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWlsbGlzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoMSAqIDUwMCkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gNTAwO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWlsbGlzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLnNlY29uZER1cmF0aW9uICogMSkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMTtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcInNlY29uZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMuc2Vjb25kRHVyYXRpb24gKiAyKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAyO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwic2Vjb25kXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy5zZWNvbmREdXJhdGlvbiAqIDUpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDU7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLnNlY29uZER1cmF0aW9uICogMTApIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDEwO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwic2Vjb25kXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy5zZWNvbmREdXJhdGlvbiAqIDE1KSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAxNTtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcInNlY29uZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMuc2Vjb25kRHVyYXRpb24gKiAyMCkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMjA7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLnNlY29uZER1cmF0aW9uICogMzApIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDMwO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwic2Vjb25kXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy5taW51dGVEdXJhdGlvbiAqIDEpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDE7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtaW51dGVcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLm1pbnV0ZUR1cmF0aW9uICogMikgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMjtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcIm1pbnV0ZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMubWludXRlRHVyYXRpb24gKiA1KSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSA1O1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWludXRlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy5taW51dGVEdXJhdGlvbiAqIDEwKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAxMDtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcIm1pbnV0ZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMubWludXRlRHVyYXRpb24gKiAxNSkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMTU7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtaW51dGVcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLm1pbnV0ZUR1cmF0aW9uICogMjApIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDIwO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWludXRlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy5taW51dGVEdXJhdGlvbiAqIDMwKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAzMDtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcIm1pbnV0ZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMuaG91ckR1cmF0aW9uICogMSkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMTtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcImhvdXJcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLmhvdXJEdXJhdGlvbiAqIDIpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDI7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJob3VyXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy5ob3VyRHVyYXRpb24gKiAzKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAzO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwiaG91clwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMuaG91ckR1cmF0aW9uICogNikgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gNjtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcImhvdXJcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLmRheUR1cmF0aW9uICogMSkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMTtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcImRheVwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMuZGF5RHVyYXRpb24gKiAyKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAyO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwiZGF5XCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy5kYXlEdXJhdGlvbiAqIDQpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDQ7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJkYXlcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLndlZWtEdXJhdGlvbiAqIDEpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDE7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJ3ZWVrXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy53ZWVrRHVyYXRpb24gKiAyKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAyO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwid2Vla1wiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMud2Vla0R1cmF0aW9uICogMykgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMztcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcIndlZWtcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLm1vbnRoRHVyYXRpb24gKiAxKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAxO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibW9udGhcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLm1vbnRoRHVyYXRpb24gKiAyKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAyO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibW9udGhcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLm1vbnRoRHVyYXRpb24gKiAzKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAzO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibW9udGhcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLm1vbnRoRHVyYXRpb24gKiA2KSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSA2O1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibW9udGhcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLnllYXJEdXJhdGlvbiAqIDEpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDE7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJ5ZWFyXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy55ZWFyRHVyYXRpb24gKiAyKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAyO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwieWVhclwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMueWVhckR1cmF0aW9uICogNCkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gNDtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcInllYXJcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSBNYXRoLmZsb29yKEF4aXMuZ2V0TmljZU51bWJlcihyYW5nZSAvIChub1RpY2tzIC0gMSksIHRydWUpIC8gY29uc3RhbnRzLnllYXJEdXJhdGlvbik7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJ5ZWFyXCI7XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAodGhpcy52aWV3cG9ydE1pbmltdW0gPT09IG51bGwgfHwgaXNOYU4odGhpcy52aWV3cG9ydE1pbmltdW0pKVxuXHRcdFx0dGhpcy52aWV3cG9ydE1pbmltdW0gPSBtaW4gLSBtaW5EaWZmIC8gMjtcblxuXHRcdGlmICh0aGlzLnZpZXdwb3J0TWF4aW11bSA9PT0gbnVsbCB8fCBpc05hTih0aGlzLnZpZXdwb3J0TWF4aW11bSkpXG5cdFx0XHR0aGlzLnZpZXdwb3J0TWF4aW11bSA9IG1heCArIG1pbkRpZmYgLyAyO1xuXG5cblx0XHRpZiAoIXRoaXMudmFsdWVGb3JtYXRTdHJpbmcpIHtcblx0XHRcdGlmIChpc0xlc3NUaGFuVHdvRGF0YVBvaW50cykge1xuXHRcdFx0XHR0aGlzLnZhbHVlRm9ybWF0U3RyaW5nID0gXCJNTU0gREQgWVlZWSBISDptbVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmludGVydmFsVHlwZSA9PT0gXCJ5ZWFyXCIpIHtcblx0XHRcdFx0dGhpcy52YWx1ZUZvcm1hdFN0cmluZyA9IFwiWVlZWVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmludGVydmFsVHlwZSA9PT0gXCJtb250aFwiKSB7XG5cdFx0XHRcdHRoaXMudmFsdWVGb3JtYXRTdHJpbmcgPSBcIk1NTSBZWVlZXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuaW50ZXJ2YWxUeXBlID09PSBcIndlZWtcIikge1xuXHRcdFx0XHR0aGlzLnZhbHVlRm9ybWF0U3RyaW5nID0gXCJNTU0gREQgWVlZWVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmludGVydmFsVHlwZSA9PT0gXCJkYXlcIikge1xuXHRcdFx0XHR0aGlzLnZhbHVlRm9ybWF0U3RyaW5nID0gXCJNTU0gREQgWVlZWVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmludGVydmFsVHlwZSA9PT0gXCJob3VyXCIpIHtcblx0XHRcdFx0dGhpcy52YWx1ZUZvcm1hdFN0cmluZyA9IFwiaGg6bW0gVFRcIjtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5pbnRlcnZhbFR5cGUgPT09IFwibWludXRlXCIpIHtcblx0XHRcdFx0dGhpcy52YWx1ZUZvcm1hdFN0cmluZyA9IFwiaGg6bW0gVFRcIjtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5pbnRlcnZhbFR5cGUgPT09IFwic2Vjb25kXCIpIHtcblx0XHRcdFx0dGhpcy52YWx1ZUZvcm1hdFN0cmluZyA9IFwiaGg6bW06c3MgVFRcIjtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5pbnRlcnZhbFR5cGUgPT09IFwibWlsbGlzZWNvbmRcIikge1xuXHRcdFx0XHR0aGlzLnZhbHVlRm9ybWF0U3RyaW5nID0gXCJmZmYnbXMnXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cblx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibnVtYmVyXCI7XG5cblx0XHRyYW5nZSA9IEF4aXMuZ2V0TmljZU51bWJlcihyYW5nZSwgZmFsc2UpO1xuXG5cdFx0aWYgKHRoaXMuX29wdGlvbnMgJiYgdGhpcy5fb3B0aW9ucy5pbnRlcnZhbClcblx0XHRcdHRoaXMuaW50ZXJ2YWwgPSB0aGlzLl9vcHRpb25zLmludGVydmFsO1xuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy5pbnRlcnZhbCA9IEF4aXMuZ2V0TmljZU51bWJlcihyYW5nZSAvIChub1RpY2tzIC0gMSksIHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnZpZXdwb3J0TWluaW11bSA9PT0gbnVsbCB8fCBpc05hTih0aGlzLnZpZXdwb3J0TWluaW11bSkpIHtcblx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwiYXhpc1hcIilcblx0XHRcdFx0dGhpcy52aWV3cG9ydE1pbmltdW0gPSBtaW4gLSBtaW5EaWZmIC8gMjtcblx0XHRcdGVsc2Vcblx0XHRcdFx0dGhpcy52aWV3cG9ydE1pbmltdW0gPSBNYXRoLmZsb29yKG1pbiAvIHRoaXMuaW50ZXJ2YWwpICogdGhpcy5pbnRlcnZhbDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy52aWV3cG9ydE1heGltdW0gPT09IG51bGwgfHwgaXNOYU4odGhpcy52aWV3cG9ydE1heGltdW0pKSB7XG5cdFx0XHRpZiAodGhpcy50eXBlID09PSBcImF4aXNYXCIpXG5cdFx0XHRcdHRoaXMudmlld3BvcnRNYXhpbXVtID0gbWF4ICsgbWluRGlmZiAvIDI7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHRoaXMudmlld3BvcnRNYXhpbXVtID0gTWF0aC5jZWlsKG1heCAvIHRoaXMuaW50ZXJ2YWwpICogdGhpcy5pbnRlcnZhbDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy52aWV3cG9ydE1heGltdW0gPT09IDAgJiYgdGhpcy52aWV3cG9ydE1pbmltdW0gPT09IDApIHtcblxuXHRcdFx0aWYgKHRoaXMuX29wdGlvbnMudmlld3BvcnRNaW5pbXVtID09PSAwKSB7XG5cdFx0XHRcdHRoaXMudmlld3BvcnRNYXhpbXVtICs9IDEwO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAodGhpcy5fb3B0aW9ucy52aWV3cG9ydE1heGltdW0gPT09IDApIHtcblx0XHRcdFx0dGhpcy52aWV3cG9ydE1pbmltdW0gLT0gMTA7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLl9vcHRpb25zICYmIHR5cGVvZiAodGhpcy5fb3B0aW9ucy5pbnRlcnZhbCkgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IEF4aXMuZ2V0TmljZU51bWJlcigodGhpcy52aWV3cG9ydE1heGltdW0gLSB0aGlzLnZpZXdwb3J0TWluaW11bSkgLyAobm9UaWNrcyAtIDEpLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvL0NhbGN1bGF0ZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGlmIG5vdCBwcm92aWRlZCBieSB0aGUgdXNlclxuXHRpZiAodGhpcy5taW5pbXVtID09PSBudWxsIHx8IHRoaXMubWF4aW11bSA9PT0gbnVsbCkge1xuXHRcdGlmICh0aGlzLnR5cGUgPT09IFwiYXhpc1hcIikge1xuXHRcdFx0bWluID0gKHRoaXMubWluaW11bSAhPT0gbnVsbCkgPyB0aGlzLm1pbmltdW0gOiB0aGlzLmRhdGFJbmZvLm1pbjtcblx0XHRcdG1heCA9ICh0aGlzLm1heGltdW0gIT09IG51bGwpID8gdGhpcy5tYXhpbXVtIDogdGhpcy5kYXRhSW5mby5tYXg7XG5cblx0XHRcdGlmIChtYXggLSBtaW4gPT09IDApIHtcblx0XHRcdFx0cmFuZ2VQYWRkaW5nID0gdHlwZW9mICh0aGlzLl9vcHRpb25zLmludGVydmFsKSA9PT0gXCJ1bmRlZmluZWRcIiA/IC40IDogdGhpcy5fb3B0aW9ucy5pbnRlcnZhbDtcblxuXHRcdFx0XHRtYXggKz0gcmFuZ2VQYWRkaW5nO1xuXHRcdFx0XHRtaW4gLT0gcmFuZ2VQYWRkaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5kYXRhSW5mby5taW5EaWZmICE9PSBJbmZpbml0eSlcblx0XHRcdFx0bWluRGlmZiA9IHRoaXMuZGF0YUluZm8ubWluRGlmZjtcblx0XHRcdGVsc2UgaWYgKG1heCAtIG1pbiA+IDEpIHtcblx0XHRcdFx0bWluRGlmZiA9IE1hdGguYWJzKG1heCAtIG1pbikgKiAuNTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRtaW5EaWZmID0gMTtcblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBcImF4aXNZXCIpIHtcblxuXHRcdFx0bWluID0gKHRoaXMubWluaW11bSAhPT0gbnVsbCkgPyB0aGlzLm1pbmltdW0gOiB0aGlzLmRhdGFJbmZvLm1pbjtcblx0XHRcdG1heCA9ICh0aGlzLm1heGltdW0gIT09IG51bGwpID8gdGhpcy5tYXhpbXVtIDogdGhpcy5kYXRhSW5mby5tYXg7XG5cblx0XHRcdGlmICghaXNGaW5pdGUobWluKSAmJiAhaXNGaW5pdGUobWF4KSkge1xuXHRcdFx0XHRtYXggPSB0eXBlb2YgKHRoaXMuX29wdGlvbnMuaW50ZXJ2YWwpID09PSBcInVuZGVmaW5lZFwiID8gLUluZmluaXR5IDogdGhpcy5fb3B0aW9ucy5pbnRlcnZhbDtcblx0XHRcdFx0bWluID0gMDtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdFx0aWYgKG1pbiA9PT0gMCAmJiBtYXggPT09IDApIHsvLyBXaGVuIGFsbCBkYXRhUG9pbnRzIGFyZSB6ZXJvXG5cdFx0XHRcdFx0bWF4ICs9IDk7XG5cdFx0XHRcdFx0bWluID0gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIGlmIChtYXggLSBtaW4gPT09IDApIHsvLyBXaGVuIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgZGF0YVBvaW50IG9yIHdoZW4gYWxsIGRhdGFQb2ludHMgaGF2ZSBzYW1lIFkgVmFsdWVcblx0XHRcdFx0XHRyYW5nZVBhZGRpbmcgPSBNYXRoLm1pbihNYXRoLmFicyhNYXRoLmFicyhtYXgpICogLjAxKSwgNSk7XG5cdFx0XHRcdFx0bWF4ICs9IHJhbmdlUGFkZGluZztcblx0XHRcdFx0XHRtaW4gLT0gcmFuZ2VQYWRkaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKG1pbiA+IG1heCkge1xuXHRcdFx0XHRcdHJhbmdlUGFkZGluZyA9IE1hdGgubWluKE1hdGguYWJzKE1hdGguYWJzKG1heCAtIG1pbikgKiAuMDEpLCA1KTtcblxuXHRcdFx0XHRcdGlmIChtYXggPj0gMClcblx0XHRcdFx0XHRcdG1pbiA9IG1heCAtIHJhbmdlUGFkZGluZztcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRtYXggPSBtaW4gKyByYW5nZVBhZGRpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cblx0XHRcdFx0XHRyYW5nZVBhZGRpbmcgPSBNYXRoLm1pbihNYXRoLmFicyhNYXRoLmFicyhtYXggLSBtaW4pICogLjAxKSwgLjA1KTtcblxuXHRcdFx0XHRcdGlmIChtYXggIT09IDApXG5cdFx0XHRcdFx0XHRtYXggKz0gcmFuZ2VQYWRkaW5nO1xuXHRcdFx0XHRcdGlmIChtaW4gIT09IDApXG5cdFx0XHRcdFx0XHRtaW4gLT0gcmFuZ2VQYWRkaW5nO1xuXHRcdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmRhdGFJbmZvLm1pbkRpZmYgIT09IEluZmluaXR5KVxuXHRcdFx0XHRtaW5EaWZmID0gdGhpcy5kYXRhSW5mby5taW5EaWZmO1xuXHRcdFx0ZWxzZSBpZiAobWF4IC0gbWluID4gMSkge1xuXHRcdFx0XHRtaW5EaWZmID0gTWF0aC5hYnMobWF4IC0gbWluKSAqIC41O1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdG1pbkRpZmYgPSAxO1xuXHRcdFx0fVxuXG5cblx0XHRcdC8vQXBwbHkgaW5jbHVkZVplcm9cblx0XHRcdGlmICh0aGlzLmluY2x1ZGVaZXJvICYmICh0aGlzLm1pbmltdW0gPT09IG51bGwgfHwgaXNOYU4odGhpcy5taW5pbXVtKSkpIHtcblx0XHRcdFx0aWYgKG1pbiA+IDApXG5cdFx0XHRcdFx0bWluID0gMDtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLmluY2x1ZGVaZXJvICYmICh0aGlzLm1heGltdW0gPT09IG51bGwgfHwgaXNOYU4odGhpcy5tYXhpbXVtKSkpIHtcblx0XHRcdFx0aWYgKG1heCA8IDApXG5cdFx0XHRcdFx0bWF4ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyYW5nZSA9IG1heCAtIG1pbjtcblxuXHRcdGlmICh0aGlzLnR5cGUgPT09IFwiYXhpc1hcIiAmJiB0aGlzLmNoYXJ0LnBsb3RJbmZvLmF4aXNYVmFsdWVUeXBlID09PSBcImRhdGVUaW1lXCIpIHtcblxuXHRcdFx0aWYgKHRoaXMubWluaW11bSA9PT0gbnVsbCB8fCBpc05hTih0aGlzLm1pbmltdW0pKVxuXHRcdFx0XHR0aGlzLm1pbmltdW0gPSBtaW4gLSBtaW5EaWZmIC8gMjtcblxuXHRcdFx0aWYgKHRoaXMubWF4aW11bSA9PT0gbnVsbCB8fCBpc05hTih0aGlzLm1heGltdW0pKVxuXHRcdFx0XHR0aGlzLm1heGltdW0gPSBtYXggKyBtaW5EaWZmIC8gMjtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJudW1iZXJcIjtcblxuXHRcdFx0aWYgKHRoaXMubWluaW11bSA9PT0gbnVsbCkge1xuXHRcdFx0XHRpZiAodGhpcy50eXBlID09PSBcImF4aXNYXCIpXG5cdFx0XHRcdFx0dGhpcy5taW5pbXVtID0gbWluIC0gbWluRGlmZiAvIDI7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5taW5pbXVtID0gTWF0aC5mbG9vcihtaW4gLyB0aGlzLmludGVydmFsKSAqIHRoaXMuaW50ZXJ2YWw7XG5cblx0XHRcdFx0dGhpcy5taW5pbXVtID0gTWF0aC5taW4odGhpcy5taW5pbXVtLCB0aGlzLnNlc3Npb25WYXJpYWJsZXMudmlld3BvcnRNaW5pbXVtID09PSBudWxsIHx8IGlzTmFOKHRoaXMuc2Vzc2lvblZhcmlhYmxlcy52aWV3cG9ydE1pbmltdW0pID8gSW5maW5pdHkgOiB0aGlzLnNlc3Npb25WYXJpYWJsZXMudmlld3BvcnRNaW5pbXVtKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMubWF4aW11bSA9PT0gbnVsbCkge1xuXHRcdFx0XHRpZiAodGhpcy50eXBlID09PSBcImF4aXNYXCIpXG5cdFx0XHRcdFx0dGhpcy5tYXhpbXVtID0gbWF4ICsgbWluRGlmZiAvIDI7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5tYXhpbXVtID0gTWF0aC5jZWlsKG1heCAvIHRoaXMuaW50ZXJ2YWwpICogdGhpcy5pbnRlcnZhbDtcblxuXHRcdFx0XHR0aGlzLm1heGltdW0gPSBNYXRoLm1heCh0aGlzLm1heGltdW0sIHRoaXMuc2Vzc2lvblZhcmlhYmxlcy52aWV3cG9ydE1heGltdW0gPT09IG51bGwgfHwgaXNOYU4odGhpcy5zZXNzaW9uVmFyaWFibGVzLnZpZXdwb3J0TWF4aW11bSkgPyAtSW5maW5pdHkgOiB0aGlzLnNlc3Npb25WYXJpYWJsZXMudmlld3BvcnRNYXhpbXVtKTtcblx0XHRcdH1cblxuXHRcdC8vdmFyIG5mcmFjID0gTWF0aC5tYXgoLU1hdGguZmxvb3IoTWF0aC5sb2coZCkvTWF0aC5MTjEwKSwgMCk7IC8vbnVtYmVyIG9mIGZyYWN0aW9uYWwgZGlnaXRzIHRvIHNob3dcblxuXG5cdFx0aWYgKHRoaXMubWF4aW11bSA9PT0gMCAmJiB0aGlzLm1pbmltdW0gPT09IDApIHtcblxuXHRcdFx0aWYgKHRoaXMuX29wdGlvbnMubWluaW11bSA9PT0gMCkge1xuXHRcdFx0XHR0aGlzLm1heGltdW0gKz0gMTA7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICh0aGlzLl9vcHRpb25zLm1heGltdW0gPT09IDApIHtcblx0XHRcdFx0dGhpcy5taW5pbXVtIC09IDEwO1xuXHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHR0aGlzLnZpZXdwb3J0TWluaW11bSA9IE1hdGgubWF4KHRoaXMudmlld3BvcnRNaW5pbXVtLCB0aGlzLm1pbmltdW0pO1xuXHR0aGlzLnZpZXdwb3J0TWF4aW11bSA9IE1hdGgubWluKHRoaXMudmlld3BvcnRNYXhpbXVtLCB0aGlzLm1heGltdW0pO1xuXG5cdGlmICh0aGlzLnR5cGUgPT09IFwiYXhpc1hcIiAmJiB0aGlzLmNoYXJ0LnBsb3RJbmZvLmF4aXNYVmFsdWVUeXBlID09PSBcImRhdGVUaW1lXCIpXG5cdFx0dGhpcy5pbnRlcnZhbFN0YXJ0UG9zaXRpb24gPSB0aGlzLmdldExhYmVsU3RhcnRQb2ludChuZXcgRGF0ZSh0aGlzLnZpZXdwb3J0TWluaW11bSksIHRoaXMuaW50ZXJ2YWxUeXBlLCB0aGlzLmludGVydmFsKTtcblx0ZWxzZVxuXHRcdHRoaXMuaW50ZXJ2YWxTdGFydFBvc2l0aW9uID0gTWF0aC5mbG9vcigodGhpcy52aWV3cG9ydE1pbmltdW0gKyAodGhpcy5pbnRlcnZhbCAqIC4yKSkgLyB0aGlzLmludGVydmFsKSAqIHRoaXMuaW50ZXJ2YWw7XG5cblx0Ly9TZXQgdmFsdWVGb3JtYXRTdHJpbmdcblx0aWYgKCF0aGlzLnZhbHVlRm9ybWF0U3RyaW5nKSB7XG5cdFx0dGhpcy52YWx1ZUZvcm1hdFN0cmluZyA9IFwiIywjIzAuIyNcIjtcblxuXHRcdHJhbmdlID0gTWF0aC5hYnModGhpcy52aWV3cG9ydE1heGltdW0gLSB0aGlzLnZpZXdwb3J0TWluaW11bSk7XG5cblx0XHRpZiAocmFuZ2UgPCAxKSB7XG5cdFx0XHR2YXIgbnVtYmVyT2ZEZWNpbWFscyA9IE1hdGguZmxvb3IoTWF0aC5hYnMoTWF0aC5sb2cocmFuZ2UpIC8gTWF0aC5MTjEwKSkgKyAyO1xuXG5cdFx0XHRpZiAoaXNOYU4obnVtYmVyT2ZEZWNpbWFscykgfHwgIWlzRmluaXRlKG51bWJlck9mRGVjaW1hbHMpKVxuXHRcdFx0XHRudW1iZXJPZkRlY2ltYWxzID0gMjtcblxuXHRcdFx0aWYgKG51bWJlck9mRGVjaW1hbHMgPiAyKSB7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZEZWNpbWFscyAtIDI7IGkrKylcblx0XHRcdFx0XHR0aGlzLnZhbHVlRm9ybWF0U3RyaW5nICs9IFwiI1wiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHR9XG5cblx0Ly9pZiAoaXNEZWJ1Z01vZGUgJiYgd2luZG93LmNvbnNvbGUpIHtcblx0Ly8gICAgd2luZG93LmNvbnNvbGUubG9nKHRoaXMudHlwZSArIFwiOiBNaW4gPSBcIiArIHRoaXMudmlld3BvcnRNaW5pbXVtKTtcblx0Ly8gICAgd2luZG93LmNvbnNvbGUubG9nKHRoaXMudHlwZSArIFwiOiBNYXggPSBcIiArIHRoaXMudmlld3BvcnRNYXhpbXVtKTtcblx0Ly8gICAgd2luZG93LmNvbnNvbGUubG9nKHRoaXMudHlwZSArIFwiOiBJbnRlcnZhbCA9IFwiICsgdGhpcy5pbnRlcnZhbCk7XG5cdC8vfVxufVxuXG5BeGlzLmdldE5pY2VOdW1iZXIgPSBmdW5jdGlvbiAoeCwgcm91bmQpIHtcblxuXHR2YXIgZXhwID0gTWF0aC5mbG9vcihNYXRoLmxvZyh4KSAvIE1hdGguTE4xMCk7XG5cdHZhciBmID0geCAvIE1hdGgucG93KDEwLCBleHApO1xuXHR2YXIgbmY7XG5cblx0aWYgKHJvdW5kKSB7XG5cdFx0aWYgKGYgPCAxLjUpXG5cdFx0XHRuZiA9IDE7XG5cdFx0ZWxzZSBpZiAoZiA8IDMpXG5cdFx0XHRuZiA9IDI7XG5cdFx0ZWxzZSBpZiAoZiA8IDcpXG5cdFx0XHRuZiA9IDU7XG5cdFx0ZWxzZVxuXHRcdFx0bmYgPSAxMDtcblx0fVxuXHRlbHNlIHtcblx0XHRpZiAoZiA8PSAxKVxuXHRcdFx0bmYgPSAxO1xuXHRcdGVsc2UgaWYgKGYgPD0gMilcblx0XHRcdG5mID0gMjtcblx0XHRlbHNlIGlmIChmIDw9IDUpXG5cdFx0XHRuZiA9IDU7XG5cdFx0ZWxzZSBuZiA9IDEwO1xuXHR9XG5cblx0cmV0dXJuIE51bWJlcigobmYgKiBNYXRoLnBvdygxMCwgZXhwKSkudG9GaXhlZCgyMCkpO1xufVxuXG5BeGlzLnByb3RvdHlwZS5nZXRMYWJlbFN0YXJ0UG9pbnQgPSBmdW5jdGlvbiAoKSB7XG5cblx0dmFyIGludGVydmFsSW5NaWxsaXNlY29uZHMgPSBjb252ZXJ0VG9OdW1iZXIodGhpcy5pbnRlcnZhbCwgdGhpcy5pbnRlcnZhbFR5cGUpO1xuXHR2YXIgbWluaW11bSA9IE1hdGguZmxvb3IoKHRoaXMudmlld3BvcnRNaW5pbXVtKSAvIGludGVydmFsSW5NaWxsaXNlY29uZHMpICogaW50ZXJ2YWxJbk1pbGxpc2Vjb25kcztcblx0dmFyIGRhdGVUaW1lID0gbmV3IERhdGUobWluaW11bSk7XG5cblx0aWYgKHRoaXMuaW50ZXJ2YWxUeXBlID09PSBcIm1pbGxpc2Vjb25kXCIpIHtcblx0XHQvL21pbGxpc2Vjb25kID0gZGF0ZVRpbWUuZ2V0TWlsbGlTZWNvbmQoKTtcblx0XHQvL21pbGxpc2Vjb25kID0gTWF0aC5mbG9vcigobWlsbGlzZWNvbmQgKyB0aGlzLmludGVydmFsKSAvIHRoaXMuaW50ZXJ2YWwpICogdGhpcy5pbnRlcnZhbDtcblx0fVxuXHRlbHNlIGlmICh0aGlzLmludGVydmFsVHlwZSA9PT0gXCJzZWNvbmRcIikge1xuXHRcdGlmIChkYXRlVGltZS5nZXRNaWxsaXNlY29uZHMoKSA+IDApIHtcblx0XHRcdGRhdGVUaW1lLnNldFNlY29uZHMoZGF0ZVRpbWUuZ2V0U2Vjb25kcygpICsgMSk7XG5cdFx0XHRkYXRlVGltZS5zZXRNaWxsaXNlY29uZHMoMCk7XG5cdFx0fVxuXHR9XG5cdGVsc2UgaWYgKHRoaXMuaW50ZXJ2YWxUeXBlID09PSBcIm1pbnV0ZVwiKSB7XG5cdFx0aWYgKGRhdGVUaW1lLmdldFNlY29uZHMoKSA+IDAgfHwgZGF0ZVRpbWUuZ2V0TWlsbGlzZWNvbmRzKCkgPiAwKSB7XG5cdFx0XHRkYXRlVGltZS5zZXRNaW51dGVzKGRhdGVUaW1lLmdldE1pbnV0ZXMoKSArIDEpO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0U2Vjb25kcygwKTtcblx0XHRcdGRhdGVUaW1lLnNldE1pbGxpc2Vjb25kcygwKTtcblx0XHR9XG5cdH1cblx0ZWxzZSBpZiAodGhpcy5pbnRlcnZhbFR5cGUgPT09IFwiaG91clwiKSB7XG5cdFx0aWYgKGRhdGVUaW1lLmdldE1pbnV0ZXMoKSA+IDAgfHwgZGF0ZVRpbWUuZ2V0U2Vjb25kcygpID4gMCB8fCBkYXRlVGltZS5nZXRNaWxsaXNlY29uZHMoKSA+IDApIHtcblx0XHRcdGRhdGVUaW1lLnNldEhvdXJzKGRhdGVUaW1lLmdldEhvdXJzKCkgKyAxKTtcblx0XHRcdGRhdGVUaW1lLnNldE1pbnV0ZXMoMCk7XG5cdFx0XHRkYXRlVGltZS5zZXRTZWNvbmRzKDApO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0TWlsbGlzZWNvbmRzKDApO1xuXHRcdH1cblx0fVxuXHRlbHNlIGlmICh0aGlzLmludGVydmFsVHlwZSA9PT0gXCJkYXlcIikge1xuXHRcdGlmIChkYXRlVGltZS5nZXRIb3VycygpID4gMCB8fCBkYXRlVGltZS5nZXRNaW51dGVzKCkgPiAwIHx8IGRhdGVUaW1lLmdldFNlY29uZHMoKSA+IDAgfHwgZGF0ZVRpbWUuZ2V0TWlsbGlzZWNvbmRzKCkgPiAwKSB7XG5cdFx0XHRkYXRlVGltZS5zZXREYXRlKGRhdGVUaW1lLmdldERhdGUoKSArIDEpO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0SG91cnMoMCk7XG5cdFx0XHRkYXRlVGltZS5zZXRNaW51dGVzKDApO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0U2Vjb25kcygwKTtcblx0XHRcdGRhdGVUaW1lLnNldE1pbGxpc2Vjb25kcygwKTtcblx0XHR9XG5cdH1cblx0ZWxzZSBpZiAodGhpcy5pbnRlcnZhbFR5cGUgPT09IFwid2Vla1wiKSB7XG5cdFx0aWYgKGRhdGVUaW1lLmdldERheSgpID4gMCB8fCBkYXRlVGltZS5nZXRIb3VycygpID4gMCB8fCBkYXRlVGltZS5nZXRNaW51dGVzKCkgPiAwIHx8IGRhdGVUaW1lLmdldFNlY29uZHMoKSA+IDAgfHwgZGF0ZVRpbWUuZ2V0TWlsbGlzZWNvbmRzKCkgPiAwKSB7XG5cdFx0XHRkYXRlVGltZS5zZXREYXRlKGRhdGVUaW1lLmdldERhdGUoKSArICg3IC0gZGF0ZVRpbWUuZ2V0RGF5KCkpKTtcblx0XHRcdGRhdGVUaW1lLnNldEhvdXJzKDApO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0TWludXRlcygwKTtcblx0XHRcdGRhdGVUaW1lLnNldFNlY29uZHMoMCk7XG5cdFx0XHRkYXRlVGltZS5zZXRNaWxsaXNlY29uZHMoMCk7XG5cdFx0fVxuXHR9XG5cdGVsc2UgaWYgKHRoaXMuaW50ZXJ2YWxUeXBlID09PSBcIm1vbnRoXCIpIHtcblx0XHRpZiAoZGF0ZVRpbWUuZ2V0RGF0ZSgpID4gMSB8fCBkYXRlVGltZS5nZXRIb3VycygpID4gMCB8fCBkYXRlVGltZS5nZXRNaW51dGVzKCkgPiAwIHx8IGRhdGVUaW1lLmdldFNlY29uZHMoKSA+IDAgfHwgZGF0ZVRpbWUuZ2V0TWlsbGlzZWNvbmRzKCkgPiAwKSB7XG5cdFx0XHRkYXRlVGltZS5zZXRNb250aChkYXRlVGltZS5nZXRNb250aCgpICsgMSk7XG5cdFx0XHRkYXRlVGltZS5zZXREYXRlKDEpO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0SG91cnMoMCk7XG5cdFx0XHRkYXRlVGltZS5zZXRNaW51dGVzKDApO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0U2Vjb25kcygwKTtcblx0XHRcdGRhdGVUaW1lLnNldE1pbGxpc2Vjb25kcygwKTtcblx0XHR9XG5cdH1cblx0ZWxzZSBpZiAodGhpcy5pbnRlcnZhbFR5cGUgPT09IFwieWVhclwiKSB7XG5cdFx0aWYgKGRhdGVUaW1lLmdldE1vbnRoKCkgPiAwIHx8IGRhdGVUaW1lLmdldERhdGUoKSA+IDEgfHwgZGF0ZVRpbWUuZ2V0SG91cnMoKSA+IDAgfHwgZGF0ZVRpbWUuZ2V0TWludXRlcygpID4gMCB8fCBkYXRlVGltZS5nZXRTZWNvbmRzKCkgPiAwIHx8IGRhdGVUaW1lLmdldE1pbGxpc2Vjb25kcygpID4gMCkge1xuXHRcdFx0ZGF0ZVRpbWUuc2V0RnVsbFllYXIoZGF0ZVRpbWUuZ2V0RnVsbFllYXIoKSArIDEpO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0TW9udGgoMCk7XG5cdFx0XHRkYXRlVGltZS5zZXREYXRlKDEpO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0SG91cnMoMCk7XG5cdFx0XHRkYXRlVGltZS5zZXRNaW51dGVzKDApO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0U2Vjb25kcygwKTtcblx0XHRcdGRhdGVUaW1lLnNldE1pbGxpc2Vjb25kcygwKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZGF0ZVRpbWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEF4aXM7XG4iLCJpbXBvcnQge3RoZW1lc30gZnJvbSAnLi4vY29uc3RhbnRzL3RoZW1lcyc7XG5pbXBvcnQge2lzRGVidWdNb2RlLCBkZWZhdWx0T3B0aW9uc30gZnJvbSAnLi4vY29uc3RhbnRzL29wdGlvbnMnO1xuXG5mdW5jdGlvbiBDYW52YXNKU09iamVjdChkZWZhdWx0c0tleSwgb3B0aW9ucywgdGhlbWUsIHBhcmVudCkge1xuICB0aGlzLl9kZWZhdWx0c0tleSA9IGRlZmF1bHRzS2V5O1xuXG4gIHRoaXMucGFyZW50ID0gcGFyZW50O1xuXG4gIHRoaXMuX2V2ZW50TGlzdGVuZXJzID0gW107Ly9NdWx0aWRpbWVudGlvbmFsIGFycmF5IHdpdGggYW4gYXJyYXkgZm9yIGVhY2ggZXZlbnQgdHlwZVxuXG4gIHZhciBjdXJyZW50VGhlbWVPcHRpb25zID0ge307XG5cbiAgaWYgKHRoZW1lICYmIHRoZW1lc1t0aGVtZV0gJiYgdGhlbWVzW3RoZW1lXVtkZWZhdWx0c0tleV0pXG4gICAgY3VycmVudFRoZW1lT3B0aW9ucyA9IHRoZW1lc1t0aGVtZV1bZGVmYXVsdHNLZXldO1xuXG4gIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zID8gb3B0aW9ucyA6IHt9O1xuICB0aGlzLnNldE9wdGlvbnModGhpcy5fb3B0aW9ucywgY3VycmVudFRoZW1lT3B0aW9ucyk7XG59XG5cbkNhbnZhc0pTT2JqZWN0LnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMsIGN1cnJlbnRUaGVtZU9wdGlvbnMpIHtcblxuICBpZiAoIWRlZmF1bHRPcHRpb25zW3RoaXMuX2RlZmF1bHRzS2V5XSkge1xuICAgIGlmIChpc0RlYnVnTW9kZSAmJiB3aW5kb3cuY29uc29sZSlcbiAgICAgIGNvbnNvbGUubG9nKFwiZGVmYXVsdHMgbm90IHNldFwiKTtcbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgZGVmYXVsdHMgPSBkZWZhdWx0T3B0aW9uc1t0aGlzLl9kZWZhdWx0c0tleV07XG5cbiAgICBmb3IgKHZhciBwcm9wIGluIGRlZmF1bHRzKSB7XG5cbiAgICAgIGlmIChkZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgaWYgKG9wdGlvbnMgJiYgcHJvcCBpbiBvcHRpb25zKVxuICAgICAgICB0aGlzW3Byb3BdID0gb3B0aW9uc1twcm9wXTtcbiAgICAgIGVsc2UgaWYgKGN1cnJlbnRUaGVtZU9wdGlvbnMgJiYgcHJvcCBpbiBjdXJyZW50VGhlbWVPcHRpb25zKVxuICAgICAgICB0aGlzW3Byb3BdID0gY3VycmVudFRoZW1lT3B0aW9uc1twcm9wXTtcbiAgICAgIGVsc2UgdGhpc1twcm9wXSA9IGRlZmF1bHRzW3Byb3BdO1xuXG4gICAgICAvL2lmICh0eXBlb2YgdGhpc1twcm9wXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAvLyAgICBhbGVydChcImZ1bmN0aW9uXCIpO1xuICAgICAgLy8gICAgdGhpc1twcm9wXSA9IHRoaXNbcHJvcF0oKTtcbiAgICAgIC8vfVxuICAgIH1cblxuICB9XG4gIH1cbn07XG5cbi8vIFVwZGF0ZSBvcHRpb25zLiBSZXR1cm5zIHRydWUgaWYgY2hhbmdlZCBvciBlbHNlIGZhbHNlXG5DYW52YXNKU09iamVjdC5wcm90b3R5cGUudXBkYXRlT3B0aW9uID0gZnVuY3Rpb24gKHByb3ApIHtcblxuICBpZiAoIWRlZmF1bHRPcHRpb25zW3RoaXMuX2RlZmF1bHRzS2V5XSAmJiBpc0RlYnVnTW9kZSAmJiB3aW5kb3cuY29uc29sZSlcbiAgICBjb25zb2xlLmxvZyhcImRlZmF1bHRzIG5vdCBzZXRcIik7XG5cbiAgdmFyIGRlZmF1bHRzID0gZGVmYXVsdE9wdGlvbnNbdGhpcy5fZGVmYXVsdHNLZXldO1xuICB2YXIgdGhlbWUgPSB0aGlzLl9vcHRpb25zLnRoZW1lID8gdGhpcy5fb3B0aW9ucy50aGVtZSA6ICh0aGlzLmNoYXJ0ICYmIHRoaXMuY2hhcnQuX29wdGlvbnMudGhlbWUpID8gdGhpcy5jaGFydC5fb3B0aW9ucy50aGVtZSA6IFwidGhlbWUxXCI7XG5cbiAgdmFyIGN1cnJlbnRUaGVtZU9wdGlvbnMgPSB7fTtcbiAgdmFyIG5ld1ZhbHVlID0gdGhpc1twcm9wXTtcblxuICBpZiAodGhlbWUgJiYgdGhlbWVzW3RoZW1lXSAmJiB0aGVtZXNbdGhlbWVdW3RoaXMuX2RlZmF1bHRzS2V5XSlcbiAgICBjdXJyZW50VGhlbWVPcHRpb25zID0gdGhlbWVzW3RoZW1lXVt0aGlzLl9kZWZhdWx0c0tleV07XG5cbiAgaWYgKHByb3AgaW4gZGVmYXVsdHMpIHtcbiAgICBpZiAocHJvcCBpbiB0aGlzLl9vcHRpb25zKVxuICAgICAgbmV3VmFsdWUgPSB0aGlzLl9vcHRpb25zW3Byb3BdO1xuICAgIGVsc2UgaWYgKGN1cnJlbnRUaGVtZU9wdGlvbnMgJiYgcHJvcCBpbiBjdXJyZW50VGhlbWVPcHRpb25zKVxuICAgICAgbmV3VmFsdWUgPSBjdXJyZW50VGhlbWVPcHRpb25zW3Byb3BdO1xuICAgIGVsc2UgbmV3VmFsdWUgPSBkZWZhdWx0c1twcm9wXTtcbiAgfVxuXG4gIGlmIChuZXdWYWx1ZSA9PT0gdGhpc1twcm9wXSlcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgdGhpc1twcm9wXSA9IG5ld1ZhbHVlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy9TdG9yZXMgdmFsdWVzIGluIF9vbGRPcHRpb25zIHNvIHRoYXQgaXQgY2FuIGJlIHRyYWNrZWQgZm9yIGFueSBjaGFuZ2VzXG5DYW52YXNKU09iamVjdC5wcm90b3R5cGUudHJhY2tDaGFuZ2VzID0gZnVuY3Rpb24gKG9wdGlvbikge1xuICBpZiAoIXRoaXMuc2Vzc2lvblZhcmlhYmxlcylcbiAgICB0aHJvdyBcIlNlc3Npb24gVmFyaWFibGUgU3RvcmUgbm90IHNldFwiO1xuXG4gIHRoaXMuc2Vzc2lvblZhcmlhYmxlc1tvcHRpb25dID0gdGhpcy5fb3B0aW9uc1tvcHRpb25dO1xufTtcblxuQ2FudmFzSlNPYmplY3QucHJvdG90eXBlLmlzQmVpbmdUcmFja2VkID0gZnVuY3Rpb24gKG9wdGlvbikge1xuICBpZiAoIXRoaXMuX29wdGlvbnMuX29sZE9wdGlvbnMpXG4gICAgdGhpcy5fb3B0aW9ucy5fb2xkT3B0aW9ucyA9IHt9O1xuXG4gIGlmICh0aGlzLl9vcHRpb25zLl9vbGRPcHRpb25zW29wdGlvbl0pXG4gICAgcmV0dXJuIHRydWU7XG4gIGVsc2VcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5DYW52YXNKU09iamVjdC5wcm90b3R5cGUuaGFzT3B0aW9uQ2hhbmdlZCA9IGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgaWYgKCF0aGlzLnNlc3Npb25WYXJpYWJsZXMpXG4gICAgdGhyb3cgXCJTZXNzaW9uIFZhcmlhYmxlIFN0b3JlIG5vdCBzZXRcIjtcblxuICB2YXIgaGFzQ2hhbmdlZCA9ICEodGhpcy5zZXNzaW9uVmFyaWFibGVzW29wdGlvbl0gPT09IHRoaXMuX29wdGlvbnNbb3B0aW9uXSk7XG5cbiAgcmV0dXJuIGhhc0NoYW5nZWQ7XG59O1xuXG5DYW52YXNKU09iamVjdC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGV2ZW50SGFuZGxlciwgY29udGV4dCkge1xuICBpZiAoIWV2ZW50TmFtZSB8fCAhZXZlbnRIYW5kbGVyKVxuICAgIHJldHVybjtcblxuICBjb250ZXh0ID0gY29udGV4dCB8fCB0aGlzO1xuXG4gIHRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gPSB0aGlzLl9ldmVudExpc3RlbmVyc1tldmVudE5hbWVdIHx8IFtdO1xuXG4gIHRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaCh7IGNvbnRleHQ6IGNvbnRleHQsIGV2ZW50SGFuZGxlcjogZXZlbnRIYW5kbGVyIH0pO1xufVxuXG5DYW52YXNKU09iamVjdC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGV2ZW50SGFuZGxlcikge1xuICBpZiAoIWV2ZW50TmFtZSB8fCAhZXZlbnRIYW5kbGVyIHx8ICF0aGlzLl9ldmVudExpc3RlbmVyc1tldmVudE5hbWVdKVxuICAgIHJldHVybjtcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcblxuICAgIGlmIChsaXN0ZW5lcnNbaV0uZXZlbnRIYW5kbGVyID09PSBldmVudEhhbmRsZXIpIHtcbiAgICAgIGxpc3RlbmVyc1tpXS5zcGxpY2UoaSwgMSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cblxuQ2FudmFzSlNPYmplY3QucHJvdG90eXBlLnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9ldmVudExpc3RlbmVycyA9IFtdO1xufVxuXG5DYW52YXNKU09iamVjdC5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGV2ZW50UGFyYW1ldGVyLCBjb250ZXh0KSB7XG5cbiAgLy9Gb3IgSW50ZXJuYWwgRXZlbnRzXG4gIGlmIChldmVudE5hbWUgJiYgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSkge1xuXG4gIGV2ZW50UGFyYW1ldGVyID0gZXZlbnRQYXJhbWV0ZXIgfHwge307XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBsaXN0ZW5lcnNbaV0uZXZlbnRIYW5kbGVyLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGV2ZW50UGFyYW1ldGVyKTtcbiAgfVxufVxuXG4gIC8vRXh0ZXJuYWwgRXZlbnRzIGRvIG5vdCByZXF1aXJlIHJlZ2lzdGVyaW5nIGFzIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIHN1ZmZpZW50IHRvIGZpcmUgdGhlIGV2ZW50LlxuICBpZiAodHlwZW9mICh0aGlzW2V2ZW50TmFtZV0pID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aGlzW2V2ZW50TmFtZV0uY2FsbChjb250ZXh0IHx8IHRoaXMuY2hhcnQuX3B1YmxpY0NoYXJ0UmVmZXJlbmNlLCBldmVudFBhcmFtZXRlcik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FudmFzSlNPYmplY3Q7XG4iLCJcbmltcG9ydCBDYW52YXNKU09iamVjdCBmcm9tICcuL2NhbnZhc2pzJztcbmltcG9ydCBBbmltYXRvciBmcm9tICcuL2FuaW1hdG9yJztcbmltcG9ydCBEYXRhU2VyaWVzIGZyb20gJy4vZGF0YV9zZXJpZXMnO1xuaW1wb3J0IFRleHRCbG9jayBmcm9tICcuL3RleHRfYmxvY2snO1xuaW1wb3J0IFJlbmRlckhlbHBlciBmcm9tICcuLi9oZWxwZXJzL3JlbmRlcic7XG5pbXBvcnQgTGF5b3V0TWFuYWdlciBmcm9tICcuL2xheW91dF9tYW5hZ2VyJztcbmltcG9ydCBFdmVudE1hbmFnZXIgZnJvbSAnLi9ldmVudF9tYW5hZ2VyJztcbmltcG9ydCBUb29sVGlwIGZyb20gJy4vdG9vbHRpcCc7XG5pbXBvcnQgQ3VsdHVyZUluZm8gZnJvbSAnLi4vY29yZS9jdWx0dXJlX2luZm8nO1xuaW1wb3J0IEF4aXMgZnJvbSAnLi4vY29yZS9heGlzJztcbmltcG9ydCBUaXRsZSBmcm9tICcuLi9jb3JlL3RpdGxlJztcbmltcG9ydCBMZWdlbmQgZnJvbSAnLi4vY29yZS9sZWdlbmQnO1xuaW1wb3J0IEFuaW1hdGlvbkhlbHBlciBmcm9tICcuLi9oZWxwZXJzL2FuaW1hdG9yJztcbmltcG9ydCB7Y29sb3JTZXRzfSBmcm9tICcuLi9jb25zdGFudHMvdGhlbWVzJztcbmltcG9ydCB7aXNEZWJ1Z01vZGUsIGRlZmF1bHRPcHRpb25zfSBmcm9tICcuLi9jb25zdGFudHMvb3B0aW9ucyc7XG4vLyBpbXBvcnQge2luaGVyaXRzfSBmcm9tICd1dGlsJztcblxuaW1wb3J0IHtcblx0YWRkRXZlbnQsXG5cdHNldENhbnZhc1NpemUsXG5cdGFkZEFycmF5SW5kZXhPZixcblx0aGlkZSxcblx0c2hvdyxcblx0Z2V0TW91c2VDb29yZGluYXRlcyxcblx0Z2V0UHJvcGVydHksXG5cdGlzQ2FudmFzU3VwcG9ydGVkLFxuXHRleHRlbmQsXG5cdGNyZWF0ZUNhbnZhcyxcblx0ZXh0ZW5kQ3R4LFxuXHRnZXRPYmplY3RJZCxcblx0ZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbyxcblx0dHJpbVN0cmluZyxcblx0bnVtYmVyRm9ybWF0LFxuXHRnZXRMaW5lRGFzaEFycmF5LFxuXHRpbnRUb0hleENvbG9yU3RyaW5nLFxuXHRjb21wYXJlRGF0YVBvaW50WFxufSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuaW1wb3J0IHtcblx0U3BsaW5lQ2hhcnQsXG5cdENvbHVtbkNoYXJ0LFxuXHRTdGFja2VkQ29sdW1uQ2hhcnQsXG5cdFN0YWNrZWRDb2x1bW4xMDBDaGFydCxcblx0QmFyQ2hhcnQsXG5cdFN0YWNrZWRCYXJDaGFydCxcblx0U3RhY2tlZEJhcjEwMENoYXJ0LFxuXHRBcmVhQ2hhcnQsXG5cdFNwbGluZUFyZWFDaGFydCxcblx0U3RlcEFyZWFDaGFydCxcblx0U3RhY2tlZEFyZWFDaGFydCxcblx0U3RhY2tlZEFyZWExMDBDaGFydCxcblx0QnViYmxlQ2hhcnQsXG5cdFNjYXR0ZXJDaGFydCxcblx0Q2FuZGxlc3RpY2tDaGFydCxcblx0UmFuZ2VDb2x1bW5DaGFydCxcblx0UmFuZ2VCYXJDaGFydCxcblx0UmFuZ2VBcmVhQ2hhcnQsXG5cdFJhbmdlU3BsaW5lQXJlYUNoYXJ0LFxuXHRQaWVDaGFydFxufSBmcm9tICcuLi9jaGFydHMvaW5kZXgnO1xuXG5mdW5jdGlvbiBDaGFydChjb250YWluZXJJZCwgb3B0aW9ucywgcHVibGljQ2hhcnRSZWZlcmVuY2UpIHtcblxuXHR0aGlzLl9wdWJsaWNDaGFydFJlZmVyZW5jZSA9IHB1YmxpY0NoYXJ0UmVmZXJlbmNlO1xuXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdENoYXJ0LmJhc2UuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBcIkNoYXJ0XCIsIG9wdGlvbnMsIG9wdGlvbnMudGhlbWUgPyBvcHRpb25zLnRoZW1lIDogXCJ0aGVtZTFcIik7XG5cblx0dmFyIF90aGlzID0gdGhpcztcblxuXHR0aGlzLl9jb250YWluZXJJZCA9IGNvbnRhaW5lcklkO1xuXHR0aGlzLl9vYmplY3RzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblx0dGhpcy5jdHggPSBudWxsO1xuXHR0aGlzLm92ZXJsYWlkQ2FudmFzQ3R4ID0gbnVsbDtcblx0dGhpcy5faW5kZXhMYWJlbHMgPSBbXTtcblx0dGhpcy5fcGFuVGltZXJJZCA9IDA7XG5cdHRoaXMuX2xhc3RUb3VjaEV2ZW50VHlwZSA9IFwiXCI7XG5cdHRoaXMuX2xhc3RUb3VjaERhdGEgPSBudWxsO1xuXHR0aGlzLmlzQW5pbWF0aW5nID0gZmFsc2U7XG5cdHRoaXMucmVuZGVyQ291bnQgPSAwO1xuXHR0aGlzLmFuaW1hdGVkUmVuZGVyID0gZmFsc2U7XG5cdHRoaXMuZGlzYWJsZVRvb2xUaXAgPSBmYWxzZTtcblxuXG5cdHRoaXMucGFuRW5hYmxlZCA9IGZhbHNlO1xuXHR0aGlzLl9kZWZhdWx0Q3Vyc29yID0gXCJkZWZhdWx0XCI7XG5cdHRoaXMucGxvdEFyZWEgPSB7IGNhbnZhczogbnVsbCwgY3R4OiBudWxsLCB4MTogMCwgeTE6IDAsIHgyOiAwLCB5MjogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuXHR0aGlzLl9kYXRhSW5SZW5kZXJlZE9yZGVyID0gW107XG5cblx0dGhpcy5fY29udGFpbmVyID0gdHlwZW9mICh0aGlzLl9jb250YWluZXJJZCkgPT09IFwic3RyaW5nXCIgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9jb250YWluZXJJZCkgOiB0aGlzLl9jb250YWluZXJJZDtcblxuXHRpZiAoIXRoaXMuX2NvbnRhaW5lcikge1xuXHRcdGlmICh3aW5kb3cuY29uc29sZSlcblx0XHRcdHdpbmRvdy5jb25zb2xlLmxvZyhcIkNhbnZhc0pTIEVycm9yOiBDaGFydCBDb250YWluZXIgd2l0aCBpZCBcXFwiXCIgKyB0aGlzLl9jb250YWluZXJJZCArIFwiXFxcIiB3YXMgbm90IGZvdW5kXCIpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUwgPSBcIlwiO1xuXG5cdHZhciB3aWR0aCA9IDA7XG5cdHZhciBoZWlnaHQgPSAwO1xuXG5cdGlmICh0aGlzLl9vcHRpb25zLndpZHRoKVxuXHRcdHdpZHRoID0gdGhpcy53aWR0aDtcblx0ZWxzZVxuXHRcdHdpZHRoID0gdGhpcy5fY29udGFpbmVyLmNsaWVudFdpZHRoID4gMCA/IHRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aCA6IHRoaXMud2lkdGg7XG5cblx0aWYgKHRoaXMuX29wdGlvbnMuaGVpZ2h0KVxuXHRcdGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXHRlbHNlXG5cdFx0aGVpZ2h0ID0gdGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodCA+IDAgPyB0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0IDogdGhpcy5oZWlnaHQ7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHR0aGlzLngxID0gdGhpcy55MSA9IDA7XG5cdHRoaXMueDIgPSB0aGlzLndpZHRoO1xuXHR0aGlzLnkyID0gdGhpcy5oZWlnaHQ7XG5cblxuXHR0aGlzLl9zZWxlY3RlZENvbG9yU2V0ID0gdHlwZW9mIChjb2xvclNldHNbdGhpcy5jb2xvclNldF0pICE9PSBcInVuZGVmaW5lZFwiID8gY29sb3JTZXRzW3RoaXMuY29sb3JTZXRdIDogY29sb3JTZXRzW1wiY29sb3JTZXQxXCJdO1xuXG5cdHRoaXMuX2NhbnZhc0pTQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0dGhpcy5fY2FudmFzSlNDb250YWluZXIuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJjYW52YXNqcy1jaGFydC1jb250YWluZXJcIik7XG5cblx0dGhpcy5fY2FudmFzSlNDb250YWluZXIuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdHRoaXMuX2NhbnZhc0pTQ29udGFpbmVyLnN0eWxlLnRleHRBbGlnbiA9IFwibGVmdFwiO1xuXHR0aGlzLl9jYW52YXNKU0NvbnRhaW5lci5zdHlsZS5jdXJzb3IgPSBcImF1dG9cIjtcblxuXHRpZiAoIWlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0dGhpcy5fY2FudmFzSlNDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gXCIwcHhcIjsvL0luIElFNiB0b29sVGlwIGRvZXNuJ3Qgc2hvdyBhdCBwcm9wZXIgcG9zaXRpb24gaWYgbm90IHNldC5cblx0fVxuXHR0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fY2FudmFzSlNDb250YWluZXIpO1xuXG5cblx0dGhpcy5jYW52YXMgPSBjcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCk7XG5cblx0dGhpcy5jYW52YXMuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdGlmICh0aGlzLmNhbnZhcy5nZXRDb250ZXh0KSB7XG5cdFx0Ly90cnkge1xuXHRcdC8vXHR0aGlzLmNhbnZhcy5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3I7XG5cdFx0Ly99IGNhdGNoIChlKSB7IH1cblx0XHR0aGlzLl9jYW52YXNKU0NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNhbnZhcyk7XG5cdFx0dGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG5cdFx0dGhpcy5jdHgudGV4dEJhc2VsaW5lID0gXCJ0b3BcIjtcblx0XHRleHRlbmRDdHgodGhpcy5jdHgpO1xuXG5cdH0gZWxzZSByZXR1cm47XG5cblx0Ly90aGlzLmNhbnZhcy5zdHlsZS5jdXJzb3IgPSBcInBvaW50ZXJcIjtcblxuXHRpZiAoIWlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0dGhpcy5wbG90QXJlYS5jYW52YXMgPSBjcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCk7XG5cdFx0dGhpcy5wbG90QXJlYS5jYW52YXMuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0dGhpcy5wbG90QXJlYS5jYW52YXMuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJwbG90QXJlYUNhbnZhc1wiKTtcblx0XHR0aGlzLl9jYW52YXNKU0NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnBsb3RBcmVhLmNhbnZhcyk7XG5cblx0XHR0aGlzLnBsb3RBcmVhLmN0eCA9IHRoaXMucGxvdEFyZWEuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLnBsb3RBcmVhLmN0eCA9IHRoaXMuY3R4O1xuXHR9XG5cblx0dGhpcy5vdmVybGFpZENhbnZhcyA9IGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcblx0dGhpcy5vdmVybGFpZENhbnZhcy5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0dGhpcy5fY2FudmFzSlNDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5vdmVybGFpZENhbnZhcyk7XG5cdHRoaXMub3ZlcmxhaWRDYW52YXNDdHggPSB0aGlzLm92ZXJsYWlkQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcblx0dGhpcy5vdmVybGFpZENhbnZhc0N0eC50ZXh0QmFzZWxpbmUgPSBcInRvcFwiO1xuXG5cdHRoaXMuX2V2ZW50TWFuYWdlciA9IG5ldyBFdmVudE1hbmFnZXIodGhpcyk7XG5cblx0YWRkRXZlbnQod2luZG93LCBcInJlc2l6ZVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0Ly90aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTVN1YnRyZWVNb2RpZmllZFwiLCBmdW5jdGlvbiAoKSB7XG5cblx0XHRpZiAoX3RoaXMuX3VwZGF0ZVNpemUoKSlcblx0XHRcdF90aGlzLnJlbmRlcigpO1xuXHR9KTtcblxuXG5cdHRoaXMuX3Rvb2xCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHR0aGlzLl90b29sQmFyLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwiY2FudmFzanMtY2hhcnQtdG9vbGJhclwiKTtcblx0dGhpcy5fdG9vbEJhci5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxcHg7IHRvcDogMXB4O1wiO1xuXHR0aGlzLl9jYW52YXNKU0NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl90b29sQmFyKTtcblxuXG5cdHRoaXMuYm91bmRzID0geyB4MTogMCwgeTE6IDAsIHgyOiB0aGlzLndpZHRoLCB5MjogdGhpcy5oZWlnaHQgfTtcblxuXHRhZGRFdmVudCh0aGlzLm92ZXJsYWlkQ2FudmFzLCAnY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuXHRcdF90aGlzLl9tb3VzZUV2ZW50SGFuZGxlcihlKTtcblx0fSk7XG5cblx0YWRkRXZlbnQodGhpcy5vdmVybGFpZENhbnZhcywgJ21vdXNlbW92ZScsIGZ1bmN0aW9uIChlKSB7XG5cdFx0X3RoaXMuX21vdXNlRXZlbnRIYW5kbGVyKGUpO1xuXHR9KTtcblxuXHRhZGRFdmVudCh0aGlzLm92ZXJsYWlkQ2FudmFzLCAnbW91c2V1cCcsIGZ1bmN0aW9uIChlKSB7XG5cdFx0X3RoaXMuX21vdXNlRXZlbnRIYW5kbGVyKGUpO1xuXHR9KTtcblxuXHRhZGRFdmVudCh0aGlzLm92ZXJsYWlkQ2FudmFzLCAnbW91c2Vkb3duJywgZnVuY3Rpb24gKGUpIHtcblx0XHRfdGhpcy5fbW91c2VFdmVudEhhbmRsZXIoZSk7XG5cdFx0aGlkZShfdGhpcy5fZHJvcGRvd25NZW51KTtcblx0fSk7XG5cblx0YWRkRXZlbnQodGhpcy5vdmVybGFpZENhbnZhcywgJ21vdXNlb3V0JywgZnVuY3Rpb24gKGUpIHtcblx0XHRfdGhpcy5fbW91c2VFdmVudEhhbmRsZXIoZSk7XG5cdH0pO1xuXG5cblx0YWRkRXZlbnQodGhpcy5vdmVybGFpZENhbnZhcywgd2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkID8gXCJNU1BvaW50ZXJEb3duXCIgOiBcInRvdWNoc3RhcnRcIiwgZnVuY3Rpb24gKGUpIHtcblx0XHRfdGhpcy5fdG91Y2hFdmVudEhhbmRsZXIoZSk7XG5cdH0pO1xuXG5cdGFkZEV2ZW50KHRoaXMub3ZlcmxhaWRDYW52YXMsIHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZCA/IFwiTVNQb2ludGVyTW92ZVwiIDogJ3RvdWNobW92ZScsIGZ1bmN0aW9uIChlKSB7XG5cdFx0X3RoaXMuX3RvdWNoRXZlbnRIYW5kbGVyKGUpO1xuXHR9KTtcblxuXHRhZGRFdmVudCh0aGlzLm92ZXJsYWlkQ2FudmFzLCB3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQgPyBcIk1TUG9pbnRlclVwXCIgOiAndG91Y2hlbmQnLCBmdW5jdGlvbiAoZSkge1xuXHRcdF90aGlzLl90b3VjaEV2ZW50SGFuZGxlcihlKTtcblx0fSk7XG5cblx0YWRkRXZlbnQodGhpcy5vdmVybGFpZENhbnZhcywgd2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkID8gXCJNU1BvaW50ZXJDYW5jZWxcIiA6ICd0b3VjaGNhbmNlbCcsIGZ1bmN0aW9uIChlKSB7XG5cdFx0X3RoaXMuX3RvdWNoRXZlbnRIYW5kbGVyKGUpO1xuXHR9KTtcblxuXHRpZiAoIXRoaXMuX2NyZWRpdExpbmspIHtcblxuXHRcdHRoaXMuX2NyZWRpdExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcblx0XHR0aGlzLl9jcmVkaXRMaW5rLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwiY2FudmFzanMtY2hhcnQtY3JlZGl0XCIpO1xuXHRcdHRoaXMuX2NyZWRpdExpbmsuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJvdXRsaW5lOm5vbmU7bWFyZ2luOjBweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDozcHg7dG9wOlwiICsgKHRoaXMuaGVpZ2h0IC0gMTQpICsgXCJweDtjb2xvcjpkaW1ncmV5O3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtZmFtaWx5Okx1Y2lkYSBHcmFuZGUsIEx1Y2lkYSBTYW5zIFVuaWNvZGUsIEFyaWFsLCBzYW5zLXNlcmlmXCIpO1xuXG5cdFx0dGhpcy5fY3JlZGl0TGluay5zZXRBdHRyaWJ1dGUoXCJ0YWJJbmRleFwiLCAtMSk7XG5cblx0XHR0aGlzLl9jcmVkaXRMaW5rLnNldEF0dHJpYnV0ZShcInRhcmdldFwiLCBcIl9ibGFua1wiKTtcblx0fVxuXG5cdHRoaXMuX3Rvb2xUaXAgPSBuZXcgVG9vbFRpcCh0aGlzLCB0aGlzLl9vcHRpb25zLnRvb2xUaXAsIHRoaXMudGhlbWUpO1xuXG5cdHRoaXMuZGF0YSA9IG51bGw7XG5cdHRoaXMuYXhpc1ggPSBudWxsO1xuXHR0aGlzLmF4aXNZID0gbnVsbDtcblx0dGhpcy5heGlzWTIgPSBudWxsO1xuXG5cdHRoaXMuc2Vzc2lvblZhcmlhYmxlcyA9IHtcblx0XHRheGlzWDoge30sXG5cdFx0YXhpc1k6IHt9LFxuXHRcdGF4aXNZMjoge31cblx0fTtcbn1cblxuZXh0ZW5kKENoYXJ0LCBDYW52YXNKU09iamVjdCk7XG5cbi8vVXBkYXRlIENoYXJ0IFByb3BlcnRpZXNcbkNoYXJ0LnByb3RvdHlwZS5fdXBkYXRlT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcblxuXHR2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdHRoaXMudXBkYXRlT3B0aW9uKFwid2lkdGhcIik7XG5cdHRoaXMudXBkYXRlT3B0aW9uKFwiaGVpZ2h0XCIpO1xuXHR0aGlzLnVwZGF0ZU9wdGlvbihcImRhdGFQb2ludE1heFdpZHRoXCIpO1xuXHR0aGlzLnVwZGF0ZU9wdGlvbihcImludGVyYWN0aXZpdHlFbmFibGVkXCIpO1xuXHR0aGlzLnVwZGF0ZU9wdGlvbihcInRoZW1lXCIpO1xuXG5cdGlmICh0aGlzLnVwZGF0ZU9wdGlvbihcImNvbG9yU2V0XCIpKVxuXHRcdHRoaXMuX3NlbGVjdGVkQ29sb3JTZXQgPSB0eXBlb2YgKGNvbG9yU2V0c1t0aGlzLmNvbG9yU2V0XSkgIT09IFwidW5kZWZpbmVkXCIgPyBjb2xvclNldHNbdGhpcy5jb2xvclNldF0gOiBjb2xvclNldHNbXCJjb2xvclNldDFcIl07XG5cblx0dGhpcy51cGRhdGVPcHRpb24oXCJiYWNrZ3JvdW5kQ29sb3JcIik7XG5cdGlmICghdGhpcy5iYWNrZ3JvdW5kQ29sb3IpXG5cdFx0dGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBcInJnYmEoMCwwLDAsMClcIjtcblxuXHR0aGlzLnVwZGF0ZU9wdGlvbihcImN1bHR1cmVcIik7XG5cdHRoaXMuX2N1bHR1cmVJbmZvID0gbmV3IEN1bHR1cmVJbmZvKHRoaXMuX29wdGlvbnMuY3VsdHVyZSk7XG5cblx0dGhpcy51cGRhdGVPcHRpb24oXCJhbmltYXRpb25FbmFibGVkXCIpO1xuXHR0aGlzLmFuaW1hdGlvbkVuYWJsZWQgPSB0aGlzLmFuaW1hdGlvbkVuYWJsZWQgJiYgaXNDYW52YXNTdXBwb3J0ZWQ7XG5cdHRoaXMudXBkYXRlT3B0aW9uKFwiYW5pbWF0aW9uRHVyYXRpb25cIik7XG5cblx0dGhpcy51cGRhdGVPcHRpb24oXCJyYW5nZUNoYW5naW5nXCIpO1xuXHR0aGlzLnVwZGF0ZU9wdGlvbihcInJhbmdlQ2hhbmdlZFwiKTtcblxuXHQvL05lZWQgdG8gY2hlY2sgdGhpcy5fb3B0aW9ucy56b29tRW5hYmxlZCBiZWNhdXNlIHRoaXMuem9vbUVuYWJsZWQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGtlZXAgdHJhY2sgb2Ygc3RhdGUgLSBhbmQgaGVuY2UgY2hhbmdlcy5cblx0aWYgKHRoaXMuX29wdGlvbnMuem9vbUVuYWJsZWQpIHtcblxuXHRcdGlmICghdGhpcy5fem9vbUJ1dHRvbikge1xuXG5cdFx0XHRoaWRlKHRoaXMuX3pvb21CdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpKTtcblxuXHRcdFx0c2V0QnV0dG9uU3RhdGUodGhpcywgdGhpcy5fem9vbUJ1dHRvbiwgXCJwYW5cIik7XG5cblx0XHRcdHRoaXMuX3Rvb2xCYXIuYXBwZW5kQ2hpbGQodGhpcy5fem9vbUJ1dHRvbik7XG5cdFx0XHRhZGRFdmVudCh0aGlzLl96b29tQnV0dG9uLCBcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKF90aGlzLnpvb21FbmFibGVkKSB7XG5cdFx0XHRcdFx0X3RoaXMuem9vbUVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRfdGhpcy5wYW5FbmFibGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdHNldEJ1dHRvblN0YXRlKF90aGlzLCBfdGhpcy5fem9vbUJ1dHRvbiwgXCJ6b29tXCIpO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0X3RoaXMuem9vbUVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0XHRcdF90aGlzLnBhbkVuYWJsZWQgPSBmYWxzZTtcblxuXHRcdFx0XHRcdHNldEJ1dHRvblN0YXRlKF90aGlzLCBfdGhpcy5fem9vbUJ1dHRvbiwgXCJwYW5cIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRfdGhpcy5yZW5kZXIoKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXG5cdFx0aWYgKCF0aGlzLl9yZXNldEJ1dHRvbikge1xuXHRcdFx0aGlkZSh0aGlzLl9yZXNldEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIikpO1xuXHRcdFx0c2V0QnV0dG9uU3RhdGUodGhpcywgdGhpcy5fcmVzZXRCdXR0b24sIFwicmVzZXRcIik7XG5cdFx0XHR0aGlzLl90b29sQmFyLmFwcGVuZENoaWxkKHRoaXMuX3Jlc2V0QnV0dG9uKTtcblxuXHRcdFx0YWRkRXZlbnQodGhpcy5fcmVzZXRCdXR0b24sIFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRcdF90aGlzLl90b29sVGlwLmhpZGUoKTtcblxuXHRcdFx0XHRpZiAoX3RoaXMuem9vbUVuYWJsZWQgfHwgX3RoaXMucGFuRW5hYmxlZCkge1xuXHRcdFx0XHRcdF90aGlzLnpvb21FbmFibGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRfdGhpcy5wYW5FbmFibGVkID0gZmFsc2U7XG5cdFx0XHRcdFx0c2V0QnV0dG9uU3RhdGUoX3RoaXMsIF90aGlzLl96b29tQnV0dG9uLCBcInBhblwiKTtcblxuXHRcdFx0XHRcdF90aGlzLl9kZWZhdWx0Q3Vyc29yID0gXCJkZWZhdWx0XCI7XG5cdFx0XHRcdFx0X3RoaXMub3ZlcmxhaWRDYW52YXMuc3R5bGUuY3Vyc29yID0gX3RoaXMuX2RlZmF1bHRDdXJzb3I7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0X3RoaXMuem9vbUVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRfdGhpcy5wYW5FbmFibGVkID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9SZXNldCBheGlzWFxuXHRcdFx0XHRpZiAoX3RoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWCkge1xuXHRcdFx0XHRcdF90aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1gubmV3Vmlld3BvcnRNaW5pbXVtID0gbnVsbDtcblx0XHRcdFx0XHRfdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNYLm5ld1ZpZXdwb3J0TWF4aW11bSA9IG51bGw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL1Jlc2V0IGF4aXNZXG5cdFx0XHRcdGlmIChfdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNZKSB7XG5cdFx0XHRcdFx0X3RoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWS5uZXdWaWV3cG9ydE1pbmltdW0gPSBudWxsO1xuXHRcdFx0XHRcdF90aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1kubmV3Vmlld3BvcnRNYXhpbXVtID0gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vUmVzZXQgYXhpc1kyXG5cdFx0XHRcdGlmIChfdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNZMikge1xuXHRcdFx0XHRcdF90aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1kyLm5ld1ZpZXdwb3J0TWluaW11bSA9IG51bGw7XG5cdFx0XHRcdFx0X3RoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWTIubmV3Vmlld3BvcnRNYXhpbXVtID0gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdF90aGlzLnJlc2V0T3ZlcmxheWVkQ2FudmFzKCk7XG5cblx0XHRcdFx0aGlkZShfdGhpcy5fem9vbUJ1dHRvbiwgX3RoaXMuX3Jlc2V0QnV0dG9uKTtcblxuXHRcdFx0XHRfdGhpcy5fZGlzcGF0Y2hSYW5nZUV2ZW50KFwicmFuZ2VDaGFuZ2luZ1wiLCBcInJlc2V0XCIpO1xuXHRcdFx0XHRfdGhpcy5yZW5kZXIoKTtcblx0XHRcdFx0X3RoaXMuX2Rpc3BhdGNoUmFuZ2VFdmVudChcInJhbmdlQ2hhbmdlZFwiLCBcInJlc2V0XCIpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMub3ZlcmxhaWRDYW52YXMuc3R5bGUuY3Vyc29yID0gX3RoaXMuX2RlZmF1bHRDdXJzb3I7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLnpvb21FbmFibGVkICYmICF0aGlzLnBhbkVuYWJsZWQpIHtcblx0XHRcdGlmICghdGhpcy5fem9vbUJ1dHRvbikge1xuXHRcdFx0XHR0aGlzLnpvb21FbmFibGVkID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5wYW5FbmFibGVkID0gZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdGlmIChfdGhpcy5fem9vbUJ1dHRvbi5nZXRBdHRyaWJ1dGUoXCJzdGF0ZVwiKSA9PT0gX3RoaXMuX2N1bHR1cmVJbmZvLnpvb21UZXh0KSB7XG5cdFx0XHRcdFx0dGhpcy5wYW5FbmFibGVkID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLnpvb21FbmFibGVkID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy56b29tRW5hYmxlZCA9IHRydWU7XG5cdFx0XHRcdFx0dGhpcy5wYW5FbmFibGVkID0gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzaG93KF90aGlzLl96b29tQnV0dG9uLCBfdGhpcy5fcmVzZXRCdXR0b24pO1xuXHRcdFx0fVxuXHRcdH1cblxuXG5cblx0fSBlbHNlIHtcblx0XHR0aGlzLnpvb21FbmFibGVkID0gZmFsc2U7XG5cdFx0dGhpcy5wYW5FbmFibGVkID0gZmFsc2U7XG5cdH1cblxuXG5cblx0aWYgKHRoaXMuX21lbnVCdXR0b24pIHtcblx0XHRpZiAodGhpcy5leHBvcnRFbmFibGVkKVxuXHRcdFx0c2hvdyh0aGlzLl9tZW51QnV0dG9uKTtcblx0XHRlbHNlXG5cdFx0XHRoaWRlKHRoaXMuX21lbnVCdXR0b24pO1xuXHR9IGVsc2UgaWYgKHRoaXMuZXhwb3J0RW5hYmxlZCAmJiBpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdHRoaXMuX21lbnVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuXHRcdHNldEJ1dHRvblN0YXRlKHRoaXMsIHRoaXMuX21lbnVCdXR0b24sIFwibWVudVwiKTtcblx0XHR0aGlzLl90b29sQmFyLmFwcGVuZENoaWxkKHRoaXMuX21lbnVCdXR0b24pO1xuXG5cdFx0YWRkRXZlbnQodGhpcy5fbWVudUJ1dHRvbiwgXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoX3RoaXMuX2Ryb3Bkb3duTWVudS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIikge1xuXG5cdFx0XHRcdGlmIChfdGhpcy5fZHJvcERvd25DbG9zZVRpbWUgJiYgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSBfdGhpcy5fZHJvcERvd25DbG9zZVRpbWUuZ2V0VGltZSgpIDw9IDUwMCkpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdF90aGlzLl9kcm9wZG93bk1lbnUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0XHRcdFx0X3RoaXMuX21lbnVCdXR0b24uYmx1cigpO1xuXHRcdFx0XHRfdGhpcy5fZHJvcGRvd25NZW51LmZvY3VzKCk7XG5cdFx0XHR9XG5cblx0XHR9LCB0cnVlKTtcblx0fVxuXG5cblx0aWYgKCF0aGlzLl9kcm9wZG93bk1lbnUgJiYgdGhpcy5leHBvcnRFbmFibGVkICYmIGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0dGhpcy5fZHJvcGRvd25NZW51ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHR0aGlzLl9kcm9wZG93bk1lbnUuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiwgLTEpO1xuXHRcdHRoaXMuX2Ryb3Bkb3duTWVudS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogYWJzb2x1dGU7IC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7IC1tcy11c2VyLXNlbGVjdDogbm9uZTsgdXNlci1zZWxlY3Q6IG5vbmU7IGN1cnNvcjogcG9pbnRlcjtyaWdodDogMXB4O3RvcDogMjVweDttaW4td2lkdGg6IDEyMHB4O291dGxpbmU6IDA7Ym9yZGVyOiAxcHggc29saWQgc2lsdmVyO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogQ2FsaWJyaSwgVmVyZGFuYSwgc2Fucy1zZXJpZjtwYWRkaW5nOiA1cHggMHB4IDVweCAwcHg7dGV4dC1hbGlnbjogbGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO2xpbmUtaGVpZ2h0OiAyMHB4O2JveC1zaGFkb3c6IDJweCAycHggMTBweCAjODg4ODg4O1wiO1xuXHRcdF90aGlzLl9kcm9wZG93bk1lbnUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRcdHRoaXMuX3Rvb2xCYXIuYXBwZW5kQ2hpbGQodGhpcy5fZHJvcGRvd25NZW51KTtcblxuXHRcdGFkZEV2ZW50KHRoaXMuX2Ryb3Bkb3duTWVudSwgXCJibHVyXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdGhpZGUoX3RoaXMuX2Ryb3Bkb3duTWVudSk7XG5cblx0XHRcdF90aGlzLl9kcm9wRG93bkNsb3NlVGltZSA9IG5ldyBEYXRlKCk7XG5cdFx0fSwgdHJ1ZSk7XG5cblx0XHR2YXIgZXhwb3J0T3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRleHBvcnRPcHRpb24uc3R5bGUuY3NzVGV4dCA9IFwicGFkZGluZzogMnB4IDE1cHggMnB4IDEwcHhcIlxuXHRcdGV4cG9ydE9wdGlvbi5pbm5lckhUTUwgPSB0aGlzLl9jdWx0dXJlSW5mby5zYXZlSlBHVGV4dDtcblx0XHR0aGlzLl9kcm9wZG93bk1lbnUuYXBwZW5kQ2hpbGQoZXhwb3J0T3B0aW9uKTtcblxuXHRcdGFkZEV2ZW50KGV4cG9ydE9wdGlvbiwgXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhpcy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcIiNFRUVFRUVcIjtcblx0XHR9LCB0cnVlKTtcblxuXHRcdGFkZEV2ZW50KGV4cG9ydE9wdGlvbiwgXCJtb3VzZW91dFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHR0aGlzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwidHJhbnNwYXJlbnRcIjtcblx0XHR9LCB0cnVlKTtcblxuXHRcdGFkZEV2ZW50KGV4cG9ydE9wdGlvbiwgXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRleHBvcnRDYW52YXMoX3RoaXMuY2FudmFzLCBcImpwZ1wiLCBfdGhpcy5leHBvcnRGaWxlTmFtZSk7XG5cdFx0XHRoaWRlKF90aGlzLl9kcm9wZG93bk1lbnUpO1xuXHRcdH0sIHRydWUpO1xuXG5cdFx0dmFyIGV4cG9ydE9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0ZXhwb3J0T3B0aW9uLnN0eWxlLmNzc1RleHQgPSBcInBhZGRpbmc6IDJweCAxNXB4IDJweCAxMHB4XCJcblx0XHRleHBvcnRPcHRpb24uaW5uZXJIVE1MID0gdGhpcy5fY3VsdHVyZUluZm8uc2F2ZVBOR1RleHQ7XG5cdFx0dGhpcy5fZHJvcGRvd25NZW51LmFwcGVuZENoaWxkKGV4cG9ydE9wdGlvbik7XG5cblx0XHRhZGRFdmVudChleHBvcnRPcHRpb24sIFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdHRoaXMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCIjRUVFRUVFXCI7XG5cdFx0fSwgdHJ1ZSk7XG5cblx0XHRhZGRFdmVudChleHBvcnRPcHRpb24sIFwibW91c2VvdXRcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhpcy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcInRyYW5zcGFyZW50XCI7XG5cdFx0fSwgdHJ1ZSk7XG5cblx0XHRhZGRFdmVudChleHBvcnRPcHRpb24sIFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0ZXhwb3J0Q2FudmFzKF90aGlzLmNhbnZhcywgXCJwbmdcIiwgX3RoaXMuZXhwb3J0RmlsZU5hbWUpO1xuXHRcdFx0aGlkZShfdGhpcy5fZHJvcGRvd25NZW51KTtcblx0XHR9LCB0cnVlKTtcblx0fVxuXG5cblx0aWYgKHRoaXMuX3Rvb2xCYXIuc3R5bGUuZGlzcGxheSAhPT0gXCJub25lXCIgJiYgdGhpcy5fem9vbUJ1dHRvbikge1xuXG5cdFx0dGhpcy5wYW5FbmFibGVkID8gc2V0QnV0dG9uU3RhdGUoX3RoaXMsIF90aGlzLl96b29tQnV0dG9uLCBcInpvb21cIikgOiBzZXRCdXR0b25TdGF0ZShfdGhpcywgX3RoaXMuX3pvb21CdXR0b24sIFwicGFuXCIpO1xuXG5cblx0XHRpZiAoX3RoaXMuX3Jlc2V0QnV0dG9uLmdldEF0dHJpYnV0ZShcInN0YXRlXCIpICE9PSBfdGhpcy5fY3VsdHVyZUluZm8ucmVzZXRUZXh0KVxuXHRcdFx0c2V0QnV0dG9uU3RhdGUoX3RoaXMsIF90aGlzLl9yZXNldEJ1dHRvbiwgXCJyZXNldFwiKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgKGRlZmF1bHRPcHRpb25zLkNoYXJ0LmNyZWRpdEhyZWYpID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0dGhpcy5jcmVkaXRIcmVmID0gXCJodHRwOi8vY2FudmFzanMuY29tL1wiO1xuXHRcdHRoaXMuY3JlZGl0VGV4dCA9IFwiQ2FudmFzSlMuY29tXCI7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIGNyZWRpdFRleHRDaGFuZ2VkID0gdGhpcy51cGRhdGVPcHRpb24oXCJjcmVkaXRUZXh0XCIpO1xuXHRcdHZhciBjcmVkaXRIcmVmQ2hhbmdlZCA9IHRoaXMudXBkYXRlT3B0aW9uKFwiY3JlZGl0SHJlZlwiKTtcblx0fVxuXG5cdGlmICh0aGlzLnJlbmRlckNvdW50ID09PSAwIHx8IChjcmVkaXRUZXh0Q2hhbmdlZCB8fCBjcmVkaXRIcmVmQ2hhbmdlZCkpIHtcblx0XHR0aGlzLl9jcmVkaXRMaW5rLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdGhpcy5jcmVkaXRIcmVmKTtcblx0XHR0aGlzLl9jcmVkaXRMaW5rLmlubmVySFRNTCA9IHRoaXMuY3JlZGl0VGV4dDtcblx0fVxuXG5cdGlmICh0aGlzLmNyZWRpdEhyZWYgJiYgdGhpcy5jcmVkaXRUZXh0KSB7XG5cdFx0aWYgKCF0aGlzLl9jcmVkaXRMaW5rLnBhcmVudEVsZW1lbnQpXG5cdFx0XHR0aGlzLl9jYW52YXNKU0NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9jcmVkaXRMaW5rKTtcblx0fVxuXHRlbHNlIGlmICh0aGlzLl9jcmVkaXRMaW5rLnBhcmVudEVsZW1lbnQpXG5cdFx0dGhpcy5fY2FudmFzSlNDb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5fY3JlZGl0TGluayk7XG5cblx0aWYgKHRoaXMuX29wdGlvbnMudG9vbFRpcCAmJiB0aGlzLl90b29sVGlwLl9vcHRpb25zICE9PSB0aGlzLl9vcHRpb25zLnRvb2xUaXApXG5cdFx0dGhpcy5fdG9vbFRpcC5fb3B0aW9ucyA9IHRoaXMuX29wdGlvbnMudG9vbFRpcFxuXG5cdGZvciAodmFyIHByb3AgaW4gdGhpcy5fdG9vbFRpcC5fb3B0aW9ucykge1xuXG5cdFx0aWYgKHRoaXMuX3Rvb2xUaXAuX29wdGlvbnMuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcblx0XHRcdHRoaXMuX3Rvb2xUaXAudXBkYXRlT3B0aW9uKHByb3ApO1xuXHRcdH1cblx0fVxuXG59XG5cbkNoYXJ0LnByb3RvdHlwZS5fdXBkYXRlU2l6ZSA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHdpZHRoID0gMDtcblx0dmFyIGhlaWdodCA9IDA7XG5cblx0aWYgKHRoaXMuX29wdGlvbnMud2lkdGgpXG5cdFx0d2lkdGggPSB0aGlzLndpZHRoO1xuXHRlbHNlXG5cdFx0dGhpcy53aWR0aCA9IHdpZHRoID0gdGhpcy5fY29udGFpbmVyLmNsaWVudFdpZHRoID4gMCA/IHRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aCA6IHRoaXMud2lkdGg7XG5cblx0aWYgKHRoaXMuX29wdGlvbnMuaGVpZ2h0KVxuXHRcdGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXHRlbHNlXG5cdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgPSB0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0ID4gMCA/IHRoaXMuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQgOiB0aGlzLmhlaWdodDtcblxuXHRpZiAodGhpcy5jYW52YXMud2lkdGggIT09IHdpZHRoICogZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbyB8fCB0aGlzLmNhbnZhcy5oZWlnaHQgIT09IGhlaWdodCAqIGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW8pIHtcblx0XHRzZXRDYW52YXNTaXplKHRoaXMuY2FudmFzLCB3aWR0aCwgaGVpZ2h0KTtcblxuXHRcdHNldENhbnZhc1NpemUodGhpcy5vdmVybGFpZENhbnZhcywgd2lkdGgsIGhlaWdodCk7XG5cdFx0c2V0Q2FudmFzU2l6ZSh0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDYW52YXMsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIGluaXRpYWxpemUgY2hhcnQgb2JqZWN0c1xuQ2hhcnQucHJvdG90eXBlLl9pbml0aWFsaXplID0gZnVuY3Rpb24gKCkge1xuXHQvLy88c2lnbmF0dXJlPlxuXHQvLy88c3VtbWFyeT5Jbml0aWFsaXplcyBDaGFydCBvYmplY3RzL3N0YXRlLiBDcmVhdGVzIERhdGFTZXJpZXMgY2xhc3MgaW5zdGFuY2UgZm9yIGVhY2ggRGF0YVNlcmllcyBwcm92aWRlZCBieSB0aGVyIHVzZXIuIFNldHMgdGhlIEF4aXMgVHlwZSBiYXNlZCBvbiB0aGUgdXNlciBkYXRhPC9zdW1tYXJ5PlxuXHQvLy88L3NpZ25hdHVyZT5cblx0Ly90aGlzLndpZHRoID0gdGhpcy53aWR0aDtcblxuXHRpZiAoIXRoaXMuX2FuaW1hdG9yKVxuXHRcdHRoaXMuX2FuaW1hdG9yID0gbmV3IEFuaW1hdG9yKHRoaXMpO1xuXHRlbHNlIHtcblx0XHR0aGlzLl9hbmltYXRvci5jYW5jZWxBbGxBbmltYXRpb25zKCk7XG5cdH1cblxuXHR0aGlzLnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7XG5cblx0dGhpcy5kaXNhYmxlVG9vbFRpcCA9IGZhbHNlO1xuXG5cdHRoaXMuX2F4ZXMgPSBbXTtcblxuXHR0aGlzLnBpZURvdWdobnV0Q2xpY2tIYW5kbGVyID0gbnVsbDtcblx0Ly90aGlzLl90b3VjaEN1cnJlbnRDb29yZGluYXRlcyA9IG51bGw7XG5cblx0aWYgKHRoaXMuYW5pbWF0aW9uUmVxdWVzdElkKVxuXHRcdHRoaXMuY2FuY2VsUmVxdWVzdEFuaW1GcmFtZS5jYWxsKHdpbmRvdywgdGhpcy5hbmltYXRpb25SZXF1ZXN0SWQpO1xuXG5cdHRoaXMuX3VwZGF0ZU9wdGlvbnMoKTtcblxuXHR0aGlzLmFuaW1hdGVkUmVuZGVyID0gaXNDYW52YXNTdXBwb3J0ZWQgJiYgdGhpcy5hbmltYXRpb25FbmFibGVkICYmICh0aGlzLnJlbmRlckNvdW50ID09PSAwKTtcblxuXHR0aGlzLl91cGRhdGVTaXplKCk7XG5cblx0Ly90aGlzLl9zZWxlY3RlZENvbG9yU2V0ID0gY29sb3JTZXRzW1wiY29sb3JTZXQyXCJdO1xuXG5cdC8vdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblx0dGhpcy5jbGVhckNhbnZhcygpO1xuXHR0aGlzLmN0eC5iZWdpblBhdGgoKTtcblxuXHR0aGlzLmF4aXNYID0gbnVsbDtcblx0dGhpcy5heGlzWSA9IG51bGw7XG5cdHRoaXMuYXhpc1kyID0gbnVsbDtcblx0dGhpcy5faW5kZXhMYWJlbHMgPSBbXTtcblx0dGhpcy5fZGF0YUluUmVuZGVyZWRPcmRlciA9IFtdO1xuXG5cdHRoaXMuX2V2ZW50cyA9IFtdO1xuXHRpZiAodGhpcy5fZXZlbnRNYW5hZ2VyKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5yZXNldCgpO1xuXG5cdHRoaXMucGxvdEluZm8gPSB7XG5cdFx0YXhpc1BsYWNlbWVudDogbnVsbCxcblx0XHRheGlzWFZhbHVlVHlwZTogbnVsbCxcblx0XHRwbG90VHlwZXM6IFtdLy9hcnJheSBvZiBwbG90VHlwZToge3R5cGU6XCJcIiwgYXhpc1lUeXBlOiBcInByaW1hcnlcIiwgZGF0YVNlcmllc0luZGV4ZXM6W119XG5cdH07XG5cblx0dGhpcy5sYXlvdXRNYW5hZ2VyID0gbmV3IExheW91dE1hbmFnZXIoMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDIpO1xuXG5cdGlmICh0aGlzLnBsb3RBcmVhLmxheW91dE1hbmFnZXIpXG5cdFx0dGhpcy5wbG90QXJlYS5sYXlvdXRNYW5hZ2VyLnJlc2V0KCk7XG5cblxuXHR0aGlzLmRhdGEgPSBbXTtcblx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IDA7XG5cblx0Zm9yICh2YXIgc2VyaWVzID0gMDsgc2VyaWVzIDwgdGhpcy5fb3B0aW9ucy5kYXRhLmxlbmd0aDsgc2VyaWVzKyspIHtcblx0XHQvL2ZvciAoc2VyaWVzIGluIHRoaXMuX29wdGlvbnMuZGF0YSkge1xuXG5cdFx0ZGF0YVNlcmllc0luZGV4Kys7XG5cblx0XHRpZiAoISghdGhpcy5fb3B0aW9ucy5kYXRhW3Nlcmllc10udHlwZSB8fCBDaGFydC5fc3VwcG9ydGVkQ2hhcnRUeXBlcy5pbmRleE9mKHRoaXMuX29wdGlvbnMuZGF0YVtzZXJpZXNdLnR5cGUpID49IDApKVxuXHRcdFx0Y29udGludWU7XG5cblx0XHR2YXIgZGF0YVNlcmllcyA9IG5ldyBEYXRhU2VyaWVzKHRoaXMsIHRoaXMuX29wdGlvbnMuZGF0YVtzZXJpZXNdLCB0aGlzLnRoZW1lLCBkYXRhU2VyaWVzSW5kZXggLSAxLCArK3RoaXMuX2V2ZW50TWFuYWdlci5sYXN0T2JqZWN0SWQpO1xuXHRcdGlmIChkYXRhU2VyaWVzLm5hbWUgPT09IG51bGwpXG5cdFx0XHRkYXRhU2VyaWVzLm5hbWUgPSBcIkRhdGFTZXJpZXMgXCIgKyAoZGF0YVNlcmllc0luZGV4KTtcblxuXHRcdGlmIChkYXRhU2VyaWVzLmNvbG9yID09PSBudWxsKSB7XG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy5kYXRhLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0ZGF0YVNlcmllcy5fY29sb3JTZXQgPSBbdGhpcy5fc2VsZWN0ZWRDb2xvclNldFtkYXRhU2VyaWVzLmluZGV4ICUgdGhpcy5fc2VsZWN0ZWRDb2xvclNldC5sZW5ndGhdXTtcblx0XHRcdFx0ZGF0YVNlcmllcy5jb2xvciA9IHRoaXMuX3NlbGVjdGVkQ29sb3JTZXRbZGF0YVNlcmllcy5pbmRleCAlIHRoaXMuX3NlbGVjdGVkQ29sb3JTZXQubGVuZ3RoXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwibGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGVwTGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzcGxpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwiYXJlYVwiXG5cdFx0XHRcdFx0fHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0ZXBBcmVhXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInNwbGluZUFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEFyZWExMDBcIlxuXHRcdFx0XHRcdHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJyYW5nZUFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwicmFuZ2VTcGxpbmVBcmVhXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcImNhbmRsZXN0aWNrXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcIm9obGNcIikge1xuXHRcdFx0XHRcdGRhdGFTZXJpZXMuX2NvbG9yU2V0ID0gW3RoaXMuX3NlbGVjdGVkQ29sb3JTZXRbMF1dO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRkYXRhU2VyaWVzLl9jb2xvclNldCA9IHRoaXMuX3NlbGVjdGVkQ29sb3JTZXQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGFTZXJpZXMuX2NvbG9yU2V0ID0gW2RhdGFTZXJpZXMuY29sb3JdO1xuXHRcdH1cblxuXHRcdGlmIChkYXRhU2VyaWVzLm1hcmtlclNpemUgPT09IG51bGwpIHtcblx0XHRcdGlmICgoKGRhdGFTZXJpZXMudHlwZSA9PT0gXCJsaW5lXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0ZXBMaW5lXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInNwbGluZVwiKSAmJiBkYXRhU2VyaWVzLmRhdGFQb2ludHMgJiYgZGF0YVNlcmllcy5kYXRhUG9pbnRzLmxlbmd0aCA8IHRoaXMud2lkdGggLyAxNikgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInNjYXR0ZXJcIikge1xuXHRcdFx0XHQvL2lmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwibGluZVwiKSB7XG5cdFx0XHRcdGRhdGFTZXJpZXMubWFya2VyU2l6ZSA9IDg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKChkYXRhU2VyaWVzLnR5cGUgPT09IFwiYnViYmxlXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInNjYXR0ZXJcIikgJiYgZGF0YVNlcmllcy5kYXRhUG9pbnRzKSB7XG5cdFx0XHRkYXRhU2VyaWVzLmRhdGFQb2ludHMuc29ydChjb21wYXJlRGF0YVBvaW50WClcblx0XHR9XG5cblx0XHQvL2lmIChkYXRhU2VyaWVzLm1hcmtlckJvcmRlclRoaWNrbmVzcyA9PT0gbnVsbCAmJiBkYXRhU2VyaWVzLnR5cGUgPT09IFwic2NhdHRlclwiKSB7XG5cdFx0Ly8gICAgZGF0YVNlcmllcy5tYXJrZXJCb3JkZXJUaGlja25lc3MgPSAyO1xuXHRcdC8vfVxuXG5cdFx0Ly9pZiAoZGF0YVNlcmllcy5tYXJrZXJUeXBlID09PSBudWxsKSB7XG5cdFx0Ly8gICAgaWYgKGRhdGFTZXJpZXMudHlwZSA9PT0gXCJsaW5lXCIgJiBkYXRhU2VyaWVzLmRhdGFQb2ludHMubGVuZ3RoIDwgNTAwKSB7XG5cdFx0Ly8gICAgICAgIGRhdGFTZXJpZXMubWFya2VyVHlwZSA9IFwiY2lyY2xlXCI7XG5cdFx0Ly8gICAgfVxuXHRcdC8vfVxuXG5cdFx0dGhpcy5kYXRhLnB1c2goZGF0YVNlcmllcyk7XG5cblx0XHR2YXIgc2VyaWVzQXhpc1BsYWNlbWVudCA9IGRhdGFTZXJpZXMuYXhpc1BsYWNlbWVudDtcblxuXHRcdC8vaWYgKGlzRGVidWdNb2RlICYmIHdpbmRvdy5jb25zb2xlKVxuXHRcdC8vICAgIHdpbmRvdy5jb25zb2xlLmxvZyhkYXRhU2VyaWVzLnR5cGUpO1xuXG5cdFx0dmFyIGVycm9yTWVzc2FnZTtcblxuXHRcdGlmIChzZXJpZXNBeGlzUGxhY2VtZW50ID09PSBcIm5vcm1hbFwiKSB7XG5cblx0XHRcdGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwieHlTd2FwcGVkXCIpIHtcblx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gXCJZb3UgY2Fubm90IGNvbWJpbmUgXFxcIlwiICsgZGF0YVNlcmllcy50eXBlICsgXCJcXFwiIHdpdGggYmFyIGNoYXJ0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJub25lXCIpIHtcblx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gXCJZb3UgY2Fubm90IGNvbWJpbmUgXFxcIlwiICsgZGF0YVNlcmllcy50eXBlICsgXCJcXFwiIHdpdGggcGllIGNoYXJ0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gbnVsbClcblx0XHRcdFx0dGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID0gXCJub3JtYWxcIjtcblx0XHR9XG5cdFx0ZWxzZSBpZiAoc2VyaWVzQXhpc1BsYWNlbWVudCA9PT0gXCJ4eVN3YXBwZWRcIikge1xuXG5cdFx0XHRpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBcIm5vcm1hbFwiKSB7XG5cdFx0XHRcdGVycm9yTWVzc2FnZSA9IFwiWW91IGNhbm5vdCBjb21iaW5lIFxcXCJcIiArIGRhdGFTZXJpZXMudHlwZSArIFwiXFxcIiB3aXRoIGxpbmUsIGFyZWEsIGNvbHVtbiBvciBwaWUgY2hhcnRcIjtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBcIm5vbmVcIikge1xuXHRcdFx0XHRlcnJvck1lc3NhZ2UgPSBcIllvdSBjYW5ub3QgY29tYmluZSBcXFwiXCIgKyBkYXRhU2VyaWVzLnR5cGUgKyBcIlxcXCIgd2l0aCBwaWUgY2hhcnRcIjtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBudWxsKVxuXHRcdFx0XHR0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPSBcInh5U3dhcHBlZFwiO1xuXHRcdH1cblx0XHRlbHNlIGlmIChzZXJpZXNBeGlzUGxhY2VtZW50ID09IFwibm9uZVwiKSB7XG5cblx0XHRcdGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwibm9ybWFsXCIpIHtcblx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gXCJZb3UgY2Fubm90IGNvbWJpbmUgXFxcIlwiICsgZGF0YVNlcmllcy50eXBlICsgXCJcXFwiIHdpdGggbGluZSwgYXJlYSwgY29sdW1uIG9yIGJhciBjaGFydFwiO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwieHlTd2FwcGVkXCIpIHtcblx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gXCJZb3UgY2Fubm90IGNvbWJpbmUgXFxcIlwiICsgZGF0YVNlcmllcy50eXBlICsgXCJcXFwiIHdpdGggYmFyIGNoYXJ0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gbnVsbClcblx0XHRcdFx0dGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID0gXCJub25lXCI7XG5cdFx0fVxuXG5cdFx0aWYgKGVycm9yTWVzc2FnZSAmJiB3aW5kb3cuY29uc29sZSkge1xuXHRcdFx0d2luZG93LmNvbnNvbGUubG9nKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0Ly9pZiAoaXNEZWJ1Z01vZGUgJiYgd2luZG93LmNvbnNvbGUpIHtcblx0Ly8gICAgd2luZG93LmNvbnNvbGUubG9nKFwieE1pbjogXCIgKyB0aGlzLnBsb3RJbmZvLnZpZXdQb3J0WE1pbiArIFwiOyB4TWF4OiBcIiArIHRoaXMucGxvdEluZm8udmlld1BvcnRYTWF4ICsgXCI7IHlNaW46IFwiICsgdGhpcy5wbG90SW5mby55TWluICsgXCI7IHlNYXg6IFwiICsgdGhpcy5wbG90SW5mby55TWF4KTtcblx0Ly99XG5cblx0dGhpcy5fb2JqZWN0c0luaXRpYWxpemVkID0gdHJ1ZTtcbn1cblxuLy9pbmRleE9mIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSUU4LVxuQ2hhcnQuX3N1cHBvcnRlZENoYXJ0VHlwZXMgPSBhZGRBcnJheUluZGV4T2YoW1wibGluZVwiLCBcInN0ZXBMaW5lXCIsIFwic3BsaW5lXCIsIFwiY29sdW1uXCIsIFwiYXJlYVwiLCBcInN0ZXBBcmVhXCIsIFwic3BsaW5lQXJlYVwiLCBcImJhclwiLCBcImJ1YmJsZVwiLCBcInNjYXR0ZXJcIixcblx0XCJzdGFja2VkQ29sdW1uXCIsIFwic3RhY2tlZENvbHVtbjEwMFwiLCBcInN0YWNrZWRCYXJcIiwgXCJzdGFja2VkQmFyMTAwXCIsXG5cdFwic3RhY2tlZEFyZWFcIiwgXCJzdGFja2VkQXJlYTEwMFwiLFxuXHRcImNhbmRsZXN0aWNrXCIsXG5cdFwib2hsY1wiLFxuXHRcInJhbmdlQ29sdW1uXCIsXG5cdFwicmFuZ2VCYXJcIixcblx0XCJyYW5nZUFyZWFcIixcblx0XCJyYW5nZVNwbGluZUFyZWFcIixcblx0XCJwaWVcIiwgXCJkb3VnaG51dFwiLCBcImZ1bm5lbFwiXG5dKTtcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cblx0aWYgKG9wdGlvbnMpXG5cdFx0dGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cblx0dGhpcy5faW5pdGlhbGl6ZSgpO1xuXHR2YXIgcGxvdEFyZWFFbGVtZW50cyA9IFtdOyAvL0VsZW1lbnRzIHRvIGJlIHJlbmRlcmVkIGluc2lkZSB0aGUgcGxvdEFyZWFcblxuXHQvL0NyZWF0ZSBQcmltYXJ5IGFuZCBTZWNvbmRhcnkgYXhpcyBhbmQgYXNzaWduIHRoZW0gdG8gdGhlIHNlcmllc1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuXG5cdFx0aWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJub3JtYWxcIiB8fCB0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwieHlTd2FwcGVkXCIpIHtcblx0XHRcdGlmICghdGhpcy5kYXRhW2ldLmF4aXNZVHlwZSB8fCB0aGlzLmRhdGFbaV0uYXhpc1lUeXBlID09PSBcInByaW1hcnlcIikge1xuXHRcdFx0XHRpZiAoIXRoaXMuYXhpc1kpIHtcblxuXHRcdFx0XHRcdGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwibm9ybWFsXCIpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2F4ZXMucHVzaCh0aGlzLmF4aXNZID0gbmV3IEF4aXModGhpcywgdGhpcy5fb3B0aW9ucy5heGlzWSwgXCJheGlzWVwiLCBcImxlZnRcIikpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwieHlTd2FwcGVkXCIpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2F4ZXMucHVzaCh0aGlzLmF4aXNZID0gbmV3IEF4aXModGhpcywgdGhpcy5fb3B0aW9ucy5heGlzWSwgXCJheGlzWVwiLCBcImJvdHRvbVwiKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZGF0YVtpXS5heGlzWSA9IHRoaXMuYXhpc1k7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICh0aGlzLmRhdGFbaV0uYXhpc1lUeXBlID09PSBcInNlY29uZGFyeVwiKSB7XG5cdFx0XHRcdGlmICghdGhpcy5heGlzWTIpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBcIm5vcm1hbFwiKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9heGVzLnB1c2godGhpcy5heGlzWTIgPSBuZXcgQXhpcyh0aGlzLCB0aGlzLl9vcHRpb25zLmF4aXNZMiwgXCJheGlzWVwiLCBcInJpZ2h0XCIpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSBpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBcInh5U3dhcHBlZFwiKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9heGVzLnB1c2godGhpcy5heGlzWTIgPSBuZXcgQXhpcyh0aGlzLCB0aGlzLl9vcHRpb25zLmF4aXNZMiwgXCJheGlzWVwiLCBcInRvcFwiKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZGF0YVtpXS5heGlzWSA9IHRoaXMuYXhpc1kyO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXRoaXMuYXhpc1gpIHtcblx0XHRcdFx0aWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJub3JtYWxcIikge1xuXHRcdFx0XHRcdHRoaXMuX2F4ZXMucHVzaCh0aGlzLmF4aXNYID0gbmV3IEF4aXModGhpcywgdGhpcy5fb3B0aW9ucy5heGlzWCwgXCJheGlzWFwiLCBcImJvdHRvbVwiKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBcInh5U3dhcHBlZFwiKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXhlcy5wdXNoKHRoaXMuYXhpc1ggPSBuZXcgQXhpcyh0aGlzLCB0aGlzLl9vcHRpb25zLmF4aXNYLCBcImF4aXNYXCIsIFwibGVmdFwiKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5kYXRhW2ldLmF4aXNYID0gdGhpcy5heGlzWDtcblx0XHR9XG5cdH1cblxuXHQvL0lmIEJvdGggUHJpbWFyeSBhbmQgU2Vjb25kYXJ5IGF4aXMgYXJlIHByZXNlbnQsIGRpc2FibGUgZ3JpZGxpbmVzIGZvciBvbmUgb2YgdGhlbSB1bmxlc3MgdGhlIHVzZXIgaGFzIHNldCB2YWx1ZSBmb3IgYm90aFxuXHRpZiAodGhpcy5heGlzWSAmJiB0aGlzLmF4aXNZMikge1xuXHRcdGlmICh0aGlzLmF4aXNZLmdyaWRUaGlja25lc3MgPiAwICYmIHR5cGVvZiAodGhpcy5heGlzWTIuX29wdGlvbnMuZ3JpZFRoaWNrbmVzcykgPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0XHR0aGlzLmF4aXNZMi5ncmlkVGhpY2tuZXNzID0gMDtcblx0XHRlbHNlIGlmICh0aGlzLmF4aXNZMi5ncmlkVGhpY2tuZXNzID4gMCAmJiB0eXBlb2YgKHRoaXMuYXhpc1kuX29wdGlvbnMuZ3JpZFRoaWNrbmVzcykgPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0XHR0aGlzLmF4aXNZLmdyaWRUaGlja25lc3MgPSAwO1xuXHR9XG5cblxuXHQvL1Nob3cgdG9vbEJhciB3aGVuIHZpZXdwb3J0TWluaW11bS92aWV3cG9ydE1heGltdW0gYXJlIHNldFxuXHR2YXIgc2hvd1Rvb2xCYXIgPSBmYWxzZTtcblx0aWYgKHRoaXMuX2F4ZXMubGVuZ3RoID4gMCAmJiAodGhpcy56b29tRW5hYmxlZCB8fCB0aGlzLnBhbkVuYWJsZWQpKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9heGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5fYXhlc1tpXS52aWV3cG9ydE1pbmltdW0gIT09IG51bGwgfHwgdGhpcy5fYXhlc1tpXS52aWV3cG9ydE1heGltdW0gIT09IG51bGwpIHtcblx0XHRcdFx0c2hvd1Rvb2xCYXIgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoc2hvd1Rvb2xCYXIpIHtcblx0XHRzaG93KHRoaXMuX3pvb21CdXR0b24sIHRoaXMuX3Jlc2V0QnV0dG9uKTtcblx0fSBlbHNlIHtcblx0XHRoaWRlKHRoaXMuX3pvb21CdXR0b24sIHRoaXMuX3Jlc2V0QnV0dG9uKTtcblx0fVxuXG5cblx0dGhpcy5fcHJvY2Vzc0RhdGEoKTsvLyBDYXRlZ29yaXNlcyB0aGUgZGF0YVNlcmllcyBhbmQgY2FsY3VsYXRlcyBtaW4sIG1heCBhbmQgb3RoZXIgdmFsdWVzXG5cblx0aWYgKHRoaXMuX29wdGlvbnMudGl0bGUpIHtcblx0XHR0aGlzLl90aXRsZSA9IG5ldyBUaXRsZSh0aGlzLCB0aGlzLl9vcHRpb25zLnRpdGxlKTtcblxuXHRcdGlmICghdGhpcy5fdGl0bGUuZG9ja0luc2lkZVBsb3RBcmVhKVxuXHRcdFx0dGhpcy5fdGl0bGUucmVuZGVyKCk7XG5cdFx0ZWxzZVxuXHRcdFx0cGxvdEFyZWFFbGVtZW50cy5wdXNoKHRoaXMuX3RpdGxlKTtcblx0fVxuXG5cdGlmICh0aGlzLl9vcHRpb25zLnN1YnRpdGxlcykge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3B0aW9ucy5zdWJ0aXRsZXMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0dGhpcy5zdWJ0aXRsZXMgPSBbXTtcblxuXHRcdFx0dmFyIHN1YnRpdGxlID0gbmV3IFN1YnRpdGxlKHRoaXMsIHRoaXMuX29wdGlvbnMuc3VidGl0bGVzW2ldKTtcblx0XHRcdHRoaXMuc3VidGl0bGVzLnB1c2goc3VidGl0bGUpO1xuXG5cdFx0XHRpZiAoIXN1YnRpdGxlLmRvY2tJbnNpZGVQbG90QXJlYSlcblx0XHRcdFx0c3VidGl0bGUucmVuZGVyKCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHBsb3RBcmVhRWxlbWVudHMucHVzaChzdWJ0aXRsZSk7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5sZWdlbmQgPSBuZXcgTGVnZW5kKHRoaXMsIHRoaXMuX29wdGlvbnMubGVnZW5kLCB0aGlzLnRoZW1lKTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAodGhpcy5kYXRhW2ldLnNob3dJbkxlZ2VuZCB8fCB0aGlzLmRhdGFbaV0udHlwZSA9PT0gXCJwaWVcIiB8fCB0aGlzLmRhdGFbaV0udHlwZSA9PT0gXCJkb3VnaG51dFwiKSB7XG5cdFx0XHR0aGlzLmxlZ2VuZC5kYXRhU2VyaWVzLnB1c2godGhpcy5kYXRhW2ldKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIXRoaXMubGVnZW5kLmRvY2tJbnNpZGVQbG90QXJlYSlcblx0XHR0aGlzLmxlZ2VuZC5yZW5kZXIoKTtcblx0ZWxzZVxuXHRcdHBsb3RBcmVhRWxlbWVudHMucHVzaCh0aGlzLmxlZ2VuZCk7XG5cblx0Ly9UQkk6IFJldmlzaXQgYW5kIGNoZWNrIGlmIHRoZSBmdW5jdGlvbmFsaXR5IGlzIGVub3VnaC5cblx0aWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJub3JtYWxcIiB8fCB0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwieHlTd2FwcGVkXCIpIHtcblxuXHRcdC8vdmFyIGZyZWVTcGFjZSA9IHRoaXMubGF5b3V0TWFuYWdlci5nZXRGcmVlU3BhY2UoKTtcblxuXHRcdEF4aXMuc2V0TGF5b3V0QW5kUmVuZGVyKHRoaXMuYXhpc1gsIHRoaXMuYXhpc1ksIHRoaXMuYXhpc1kyLCB0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQsIHRoaXMubGF5b3V0TWFuYWdlci5nZXRGcmVlU3BhY2UoKSk7XG5cdH0gZWxzZSBpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBcIm5vbmVcIikge1xuXHRcdC8vSW4gY2FzZSBvZiBjaGFydHMgd2l0aCBheGlzIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnNpZGUgc2V0TGF5b3V0QW5kUmVuZGVyXG5cdFx0dGhpcy5wcmVwYXJlUGxvdEFyZWEoKTtcblx0fVxuXHRlbHNlIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR2YXIgaW5kZXggPSAwO1xuXHRmb3IgKGluZGV4IGluIHBsb3RBcmVhRWxlbWVudHMpIHtcblx0XHRpZihwbG90QXJlYUVsZW1lbnRzLmhhc093blByb3BlcnR5KGluZGV4KSlcblx0XHRwbG90QXJlYUVsZW1lbnRzW2luZGV4XS5yZW5kZXIoKTtcblx0fVxuXG5cdHZhciBhbmltYXRpb25zID0gW107XG5cdGlmICh0aGlzLmFuaW1hdGVkUmVuZGVyKSB7XG5cdFx0dmFyIGluaXRpYWxTdGF0ZSA9IGNyZWF0ZUNhbnZhcyh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cdFx0dmFyIGluaXRpYWxTdGF0ZUN0eCA9IGluaXRpYWxTdGF0ZS5nZXRDb250ZXh0KFwiMmRcIik7XG5cdFx0aW5pdGlhbFN0YXRlQ3R4LmRyYXdJbWFnZSh0aGlzLmNhbnZhcywgMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBsb3RJbmZvLnBsb3RUeXBlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBwbG90VHlwZSA9IHRoaXMucGxvdEluZm8ucGxvdFR5cGVzW2ldO1xuXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VHlwZS5wbG90VW5pdHMubGVuZ3RoOyBqKyspIHtcblxuXHRcdFx0dmFyIHBsb3RVbml0ID0gcGxvdFR5cGUucGxvdFVuaXRzW2pdO1xuXHRcdFx0dmFyIGFuaW1hdGlvbkluZm8gPSBudWxsO1xuXG5cdFx0XHRwbG90VW5pdC50YXJnZXRDYW52YXMgPSBudWxsOyAvL0luIGNhc2UgY2hhcnQgdXBkYXRlcyBiZWZvcmUgdGhlIGFuaW1hdGlvbiBpcyBjb21wbGV0ZSwgcHJldmlvdXMgY2FudmFzZXMgbmVlZCB0byBiZSByZW1vdmVkXG5cblx0XHRcdGlmICh0aGlzLmFuaW1hdGVkUmVuZGVyKSB7XG5cdFx0XHRcdHBsb3RVbml0LnRhcmdldENhbnZhcyA9IGNyZWF0ZUNhbnZhcyh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cdFx0XHRcdHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwbG90VW5pdC50eXBlID09PSBcImxpbmVcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyTGluZShwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcInN0ZXBMaW5lXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlclN0ZXBMaW5lKHBsb3RVbml0KTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LnR5cGUgPT09IFwic3BsaW5lXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlclNwbGluZShwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcImNvbHVtblwiKVxuXHRcdFx0XHRhbmltYXRpb25JbmZvID0gdGhpcy5yZW5kZXJDb2x1bW4ocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJiYXJcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyQmFyKHBsb3RVbml0KTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LnR5cGUgPT09IFwiYXJlYVwiKVxuXHRcdFx0XHRhbmltYXRpb25JbmZvID0gdGhpcy5yZW5kZXJBcmVhKHBsb3RVbml0KTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LnR5cGUgPT09IFwic3RlcEFyZWFcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyU3RlcEFyZWEocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJzcGxpbmVBcmVhXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlclNwbGluZUFyZWEocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJzdGFja2VkQ29sdW1uXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlclN0YWNrZWRDb2x1bW4ocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJzdGFja2VkQ29sdW1uMTAwXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlclN0YWNrZWRDb2x1bW4xMDAocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJzdGFja2VkQmFyXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlclN0YWNrZWRCYXIocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJzdGFja2VkQmFyMTAwXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlclN0YWNrZWRCYXIxMDAocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJzdGFja2VkQXJlYVwiKVxuXHRcdFx0XHRhbmltYXRpb25JbmZvID0gdGhpcy5yZW5kZXJTdGFja2VkQXJlYShwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcInN0YWNrZWRBcmVhMTAwXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlclN0YWNrZWRBcmVhMTAwKHBsb3RVbml0KTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LnR5cGUgPT09IFwiYnViYmxlXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSBhbmltYXRpb25JbmZvID0gdGhpcy5yZW5kZXJCdWJibGUocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJzY2F0dGVyXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlclNjYXR0ZXIocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJwaWVcIilcblx0XHRcdFx0dGhpcy5yZW5kZXJQaWUocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJkb3VnaG51dFwiKVxuXHRcdFx0XHR0aGlzLnJlbmRlclBpZShwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcImNhbmRsZXN0aWNrXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlckNhbmRsZXN0aWNrKHBsb3RVbml0KTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LnR5cGUgPT09IFwib2hsY1wiKVxuXHRcdFx0XHRhbmltYXRpb25JbmZvID0gdGhpcy5yZW5kZXJDYW5kbGVzdGljayhwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcInJhbmdlQ29sdW1uXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlclJhbmdlQ29sdW1uKHBsb3RVbml0KTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LnR5cGUgPT09IFwicmFuZ2VCYXJcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyUmFuZ2VCYXIocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJyYW5nZUFyZWFcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyUmFuZ2VBcmVhKHBsb3RVbml0KTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LnR5cGUgPT09IFwicmFuZ2VTcGxpbmVBcmVhXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlclJhbmdlU3BsaW5lQXJlYShwbG90VW5pdCk7XG5cblx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0dGhpcy5fZGF0YUluUmVuZGVyZWRPcmRlci5wdXNoKHRoaXMuZGF0YVtwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1trXV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5hbmltYXRlZFJlbmRlciAmJiBhbmltYXRpb25JbmZvKVxuXHRcdFx0XHRhbmltYXRpb25zLnB1c2goYW5pbWF0aW9uSW5mbyk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHRoaXMuYW5pbWF0ZWRSZW5kZXIgJiYgdGhpcy5faW5kZXhMYWJlbHMubGVuZ3RoID4gMCkge1xuXHRcdHZhciBpbmRleExhYmVsQ2FudmFzID0gY3JlYXRlQ2FudmFzKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblx0XHR2YXIgaW5kZXhMYWJlbENhbnZhc0N0eCA9IGluZGV4TGFiZWxDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuXHRcdGFuaW1hdGlvbnMucHVzaCh0aGlzLnJlbmRlckluZGV4TGFiZWxzKGluZGV4TGFiZWxDYW52YXNDdHgpKTtcblx0fVxuXG5cdHZhciBfdGhpcyA9IHRoaXM7XG5cblx0aWYgKGFuaW1hdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdC8vdmFyIGFuaW1hdGlvbkNvdW50ID0gMDtcblx0XHRfdGhpcy5kaXNhYmxlVG9vbFRpcCA9IHRydWU7XG5cdFx0X3RoaXMuX2FuaW1hdG9yLmFuaW1hdGUoMjAwLCBfdGhpcy5hbmltYXRpb25EdXJhdGlvbiwgZnVuY3Rpb24gKGZyYWN0aW9uQ29tcGxldGUpIHtcblxuXHRcdFx0Ly9jb25zb2xlLmxvZyhmcmFjdGlvbkNvbXBsZXRlKTtcblx0XHRcdC8vYW5pbWF0aW9uQ291bnQrKztcblxuXHRcdFx0X3RoaXMuY3R4LmNsZWFyUmVjdCgwLCAwLCBfdGhpcy53aWR0aCwgX3RoaXMuaGVpZ2h0KTtcblxuXG5cdFx0XHQvLyAgX3RoaXMuY3R4LmRyYXdJbWFnZShpbml0aWFsU3RhdGUsIDAsIDAsIF90aGlzLndpZHRoICogZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbywgX3RoaXMuaGVpZ2h0ICogZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbywgMCwgMCwgX3RoaXMud2lkdGgsIF90aGlzLmhlaWdodCk7XG5cdFx0XHRfdGhpcy5jdHguZHJhd0ltYWdlKGluaXRpYWxTdGF0ZSwgMCwgMCwgTWF0aC5mbG9vcihfdGhpcy53aWR0aCAqIGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW8pLCBNYXRoLmZsb29yKF90aGlzLmhlaWdodCAqIGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW8pLCAwLCAwLCBfdGhpcy53aWR0aCwgX3RoaXMuaGVpZ2h0KTtcblxuXHRcdFx0Zm9yICh2YXIgbCA9IDA7IGwgPCBhbmltYXRpb25zLmxlbmd0aDsgbCsrKSB7XG5cblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IGFuaW1hdGlvbnNbbF07XG5cblx0XHRcdFx0aWYgKGZyYWN0aW9uQ29tcGxldGUgPCAxICYmIHR5cGVvZiAoYW5pbWF0aW9uSW5mby5zdGFydFRpbWVQZXJjZW50KSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdGlmIChmcmFjdGlvbkNvbXBsZXRlID49IGFuaW1hdGlvbkluZm8uc3RhcnRUaW1lUGVyY2VudCkge1xuXHRcdFx0XHRcdFx0Ly9hbmltYXRpb25JbmZvLmFuaW1hdGlvbkNhbGxiYWNrKEFuaW1hdGlvbkhlbHBlci5lYXNpbmcubGluZWFyKGZyYWN0aW9uQ29tcGxldGUgLSBhbmltYXRpb25JbmZvLnN0YXJ0VGltZVBlcmNlbnQsIDAsIDEsIDEgLSBhbmltYXRpb25JbmZvLnN0YXJ0VGltZVBlcmNlbnQpLCBhbmltYXRpb25JbmZvKTtcblxuXHRcdFx0XHRcdFx0YW5pbWF0aW9uSW5mby5hbmltYXRpb25DYWxsYmFjayhhbmltYXRpb25JbmZvLmVhc2luZ0Z1bmN0aW9uKGZyYWN0aW9uQ29tcGxldGUgLSBhbmltYXRpb25JbmZvLnN0YXJ0VGltZVBlcmNlbnQsIDAsIDEsIDEgLSBhbmltYXRpb25JbmZvLnN0YXJ0VGltZVBlcmNlbnQpLCBhbmltYXRpb25JbmZvKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRhbmltYXRpb25JbmZvLmFuaW1hdGlvbkNhbGxiYWNrKGFuaW1hdGlvbkluZm8uZWFzaW5nRnVuY3Rpb24oZnJhY3Rpb25Db21wbGV0ZSwgMCwgMSwgMSksIGFuaW1hdGlvbkluZm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdF90aGlzLmRpc3BhdGNoRXZlbnQoXCJkYXRhQW5pbWF0aW9uSXRlcmF0aW9uRW5kXCIsXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2hhcnQ6IF90aGlzXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHR9LCBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdGFuaW1hdGlvbnMgPSBbXTtcblxuXHRcdFx0dmFyIGNvdW50ID0gMDtcblxuXHRcdFx0Ly9EZWxldGUgYWxsIHJlbmRlciB0YXJnZXQgY2FudmFzZXMgdXNlZCBmb3IgYW5pbWF0aW9uLlxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBfdGhpcy5wbG90SW5mby5wbG90VHlwZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIHBsb3RUeXBlID0gX3RoaXMucGxvdEluZm8ucGxvdFR5cGVzW2ldO1xuXG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFR5cGUucGxvdFVuaXRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0dmFyIHBsb3RVbml0ID0gcGxvdFR5cGUucGxvdFVuaXRzW2pdO1xuXHRcdFx0XHRcdHBsb3RVbml0LnRhcmdldENhbnZhcyA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aW5pdGlhbFN0YXRlID0gbnVsbDtcblx0XHRcdF90aGlzLmRpc2FibGVUb29sVGlwID0gZmFsc2U7XG5cdFx0XHQvL2NvbnNvbGUubG9nKFwiKioqKioqKioqKiogQW5pbWF0aW9uIENvbXBsZXRlIC0gXCIgKyBhbmltYXRpb25Db3VudCArIFwiICoqKioqKioqKioqXCIpO1xuXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKF90aGlzLl9pbmRleExhYmVscy5sZW5ndGggPiAwKVxuXHRcdFx0X3RoaXMucmVuZGVySW5kZXhMYWJlbHMoKTtcblxuXHRcdF90aGlzLmRpc3BhdGNoRXZlbnQoXCJkYXRhQW5pbWF0aW9uSXRlcmF0aW9uRW5kXCIsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjaGFydDogX3RoaXNcblx0XHRcdFx0fSk7XG5cdH1cblxuXHR0aGlzLmF0dGFjaFBsb3RBcmVhRXZlbnRIYW5kbGVycygpO1xuXG5cdGlmICghdGhpcy56b29tRW5hYmxlZCAmJiAhdGhpcy5wYW5FbmFibGVkICYmIHRoaXMuX3pvb21CdXR0b24gJiYgdGhpcy5fem9vbUJ1dHRvbi5zdHlsZS5kaXNwbGF5ICE9PSBcIm5vbmVcIikge1xuXHRcdGhpZGUodGhpcy5fem9vbUJ1dHRvbiwgdGhpcy5fcmVzZXRCdXR0b24pO1xuXHR9XG5cblx0dGhpcy5fdG9vbFRpcC5fdXBkYXRlVG9vbFRpcCgpO1xuXG5cdHRoaXMucmVuZGVyQ291bnQrKztcblxuXHQvL2lmICh3aW5kb3cuY29uc29sZSkge1xuXHQvLyAgICB3aW5kb3cuY29uc29sZS5sb2cobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBkdCk7XG5cdC8vfVxuXG5cdGlmIChpc0RlYnVnTW9kZSkge1xuXG5cdFx0dmFyIF90aGlzID0gdGhpcztcblx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBnaG9zdENhbnZhc0NvcHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdob3N0Q2FudmFzQ29weVwiKTtcblxuXHRcdFx0aWYgKGdob3N0Q2FudmFzQ29weSkge1xuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGdob3N0Q2FudmFzQ29weS5jbGllbnRXaWR0aCk7XG5cdFx0XHRcdHNldENhbnZhc1NpemUoZ2hvc3RDYW52YXNDb3B5LCBfdGhpcy53aWR0aCwgX3RoaXMuaGVpZ2h0KTtcblx0XHRcdFx0dmFyIGdob3N0Q2FudmFzQ29weUN0eCA9IGdob3N0Q2FudmFzQ29weS5nZXRDb250ZXh0KFwiMmRcIik7XG5cblx0XHRcdFx0Ly9naG9zdENhbnZhc0NvcHlDdHguc2NhbGUoMSwgMSk7XG5cdFx0XHRcdC8vdmFyIGltYWdlRGF0YSA9IHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5nZXRJbWFnZURhdGEoMCwgMCwgdGhpcy5fY29udGFpbmVyLmNsaWVudFdpZHRoLCB0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0KTtcblx0XHRcdFx0Ly90aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHguZHJhd0ltYWdlKHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdENhbnZhcywgMCwgMCk7XG5cdFx0XHRcdC8vdGhpcy5jdHguZHJhd0ltYWdlKHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdENhbnZhcywgMCwgMCk7XG5cblx0XHRcdFx0Z2hvc3RDYW52YXNDb3B5Q3R4LmRyYXdJbWFnZShfdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q2FudmFzLCAwLCAwKTtcblx0XHRcdFx0Ly9fdGhpcy5fY2FudmFzSlNDb250YWluZXIuYXBwZW5kQ2hpbGQoX3RoaXMuX2V2ZW50TWFuYWdlci5naG9zdENhbnZhcyk7XG5cdFx0XHRcdC8vX3RoaXMub3ZlcmxhaWRDYW52YXNDdHguZHJhd0ltYWdlKF90aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDYW52YXMsIDAsIDApO1xuXHRcdFx0fVxuXHRcdH0sIDIwMDApO1xuXHR9XG59XG5cbkNoYXJ0LnByb3RvdHlwZS5hdHRhY2hQbG90QXJlYUV2ZW50SGFuZGxlcnMgPSBmdW5jdGlvbiAoKSB7XG5cblx0Ly90aGlzLl90b29sQmFyLnN0eWxlLmRpc3BsYXkgPSBcImlubGluZVwiO1xuXG5cdHRoaXMuYXR0YWNoRXZlbnQoe1xuXHRcdGNvbnRleHQ6IHRoaXMsXG5cdFx0Y2hhcnQ6IHRoaXMsXG5cdFx0bW91c2Vkb3duOiB0aGlzLl9wbG90QXJlYU1vdXNlRG93bixcblx0XHRtb3VzZXVwOiB0aGlzLl9wbG90QXJlYU1vdXNlVXAsXG5cdFx0bW91c2Vtb3ZlOiB0aGlzLl9wbG90QXJlYU1vdXNlTW92ZSxcblx0XHRjdXJzb3I6IHRoaXMuem9vbUVuYWJsZWQgPyBcImNvbC1yZXNpemVcIiA6IFwibW92ZVwiLFxuXHRcdGN1cnNvcjogdGhpcy5wYW5FbmFibGVkID8gXCJtb3ZlXCIgOiBcImRlZmF1bHRcIixcblx0XHRjYXB0dXJlOiB0cnVlLFxuXHRcdGJvdW5kczogdGhpcy5wbG90QXJlYVxuXHR9KTtcblxufVxuXG5DaGFydC5wcm90b3R5cGUuY2F0ZWdvcmlzZURhdGFTZXJpZXMgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBkYXRhU2VyaWVzID0gXCJcIjtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbaV1cblx0XHRpZiAoIWRhdGFTZXJpZXMuZGF0YVBvaW50cyB8fCBkYXRhU2VyaWVzLmRhdGFQb2ludHMubGVuZ3RoID09PSAwIHx8ICFkYXRhU2VyaWVzLnZpc2libGUpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdGlmIChDaGFydC5fc3VwcG9ydGVkQ2hhcnRUeXBlcy5pbmRleE9mKGRhdGFTZXJpZXMudHlwZSkgPj0gMCkge1xuXG5cdFx0XHR2YXIgcGxvdFR5cGUgPSBudWxsO1xuXHRcdFx0dmFyIHBsb3RUeXBlRXhpc3RzID0gZmFsc2U7XG5cblx0XHRcdHZhciBwbG90VW5pdCA9IG51bGw7XG5cdFx0XHR2YXIgcGxvdFVuaXRFeGlzdHMgPSBmYWxzZTtcblxuXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLnBsb3RJbmZvLnBsb3RUeXBlcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRpZiAodGhpcy5wbG90SW5mby5wbG90VHlwZXNbal0udHlwZSA9PT0gZGF0YVNlcmllcy50eXBlKSB7XG5cdFx0XHRcdFx0cGxvdFR5cGVFeGlzdHMgPSB0cnVlO1xuXHRcdFx0XHRcdHZhciBwbG90VHlwZSA9IHRoaXMucGxvdEluZm8ucGxvdFR5cGVzW2pdO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICghcGxvdFR5cGVFeGlzdHMpIHtcblx0XHRcdFx0cGxvdFR5cGUgPSB7XG5cdFx0XHRcdFx0dHlwZTogZGF0YVNlcmllcy50eXBlLFxuXHRcdFx0XHRcdHRvdGFsRGF0YVNlcmllczogMCxcblx0XHRcdFx0XHRwbG90VW5pdHM6IFtdXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXMucGxvdEluZm8ucGxvdFR5cGVzLnB1c2gocGxvdFR5cGUpXG5cdFx0XHR9XG5cblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFR5cGUucGxvdFVuaXRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGlmIChwbG90VHlwZS5wbG90VW5pdHNbal0uYXhpc1lUeXBlID09PSBkYXRhU2VyaWVzLmF4aXNZVHlwZSkge1xuXHRcdFx0XHRcdHBsb3RVbml0RXhpc3RzID0gdHJ1ZTtcblx0XHRcdFx0XHR2YXIgcGxvdFVuaXQgPSBwbG90VHlwZS5wbG90VW5pdHNbal07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCFwbG90VW5pdEV4aXN0cykge1xuXHRcdFx0XHRwbG90VW5pdCA9IHtcblx0XHRcdFx0XHR0eXBlOiBkYXRhU2VyaWVzLnR5cGUsXG5cdFx0XHRcdFx0cHJldmlvdXNEYXRhU2VyaWVzQ291bnQ6IDAsIC8vdG8gYmUgc2V0IG5leHRcblx0XHRcdFx0XHRpbmRleDogcGxvdFR5cGUucGxvdFVuaXRzLmxlbmd0aCxcblx0XHRcdFx0XHRwbG90VHlwZTogcGxvdFR5cGUsXG5cdFx0XHRcdFx0YXhpc1lUeXBlOiBkYXRhU2VyaWVzLmF4aXNZVHlwZSxcblx0XHRcdFx0XHRheGlzWTogZGF0YVNlcmllcy5heGlzWVR5cGUgPT09IFwicHJpbWFyeVwiID8gdGhpcy5heGlzWSA6IHRoaXMuYXhpc1kyLFxuXHRcdFx0XHRcdGF4aXNYOiB0aGlzLmF4aXNYLFxuXHRcdFx0XHRcdGRhdGFTZXJpZXNJbmRleGVzOiBbXSwgLy9pbmRleCBvZiBkYXRhU2VyaWVzXG5cdFx0XHRcdFx0eVRvdGFsczogW11cblx0XHRcdFx0fVxuXHRcdFx0XHRwbG90VHlwZS5wbG90VW5pdHMucHVzaChwbG90VW5pdCk7XG5cdFx0XHR9XG5cblx0XHRcdHBsb3RUeXBlLnRvdGFsRGF0YVNlcmllcysrO1xuXG5cdFx0XHRwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5wdXNoKGkpO1xuXG5cdFx0XHRkYXRhU2VyaWVzLnBsb3RVbml0ID0gcGxvdFVuaXQ7XG5cdFx0fVxuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBsb3RJbmZvLnBsb3RUeXBlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBwbG90VHlwZSA9IHRoaXMucGxvdEluZm8ucGxvdFR5cGVzW2ldO1xuXHRcdHZhciBwcmV2aW91c0RhdGFTZXJpZXNDb3VudCA9IDA7XG5cblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RUeXBlLnBsb3RVbml0cy5sZW5ndGg7IGorKykge1xuXG5cdFx0XHRwbG90VHlwZS5wbG90VW5pdHNbal0ucHJldmlvdXNEYXRhU2VyaWVzQ291bnQgPSBwcmV2aW91c0RhdGFTZXJpZXNDb3VudDtcblxuXHRcdFx0cHJldmlvdXNEYXRhU2VyaWVzQ291bnQgKz0gcGxvdFR5cGUucGxvdFVuaXRzW2pdLmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDtcblx0XHR9XG5cdH1cbn1cblxuQ2hhcnQucHJvdG90eXBlLmFzc2lnbklkVG9EYXRhUG9pbnRzID0gZnVuY3Rpb24gKCkge1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbaV07XG5cblx0XHRpZiAoIWRhdGFTZXJpZXMuZGF0YVBvaW50cylcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0dmFyIGxlbmd0aCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cy5sZW5ndGg7XG5cblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGxlbmd0aDsgaisrKSB7XG5cdFx0XHRkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tqXSA9ICsrdGhpcy5fZXZlbnRNYW5hZ2VyLmxhc3RPYmplY3RJZDtcblx0XHR9XG5cdH1cbn1cblxuQ2hhcnQucHJvdG90eXBlLl9wcm9jZXNzRGF0YSA9IGZ1bmN0aW9uICgpIHtcblx0dGhpcy5hc3NpZ25JZFRvRGF0YVBvaW50cygpO1xuXHR0aGlzLmNhdGVnb3Jpc2VEYXRhU2VyaWVzKCk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBsb3RJbmZvLnBsb3RUeXBlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBwbG90VHlwZSA9IHRoaXMucGxvdEluZm8ucGxvdFR5cGVzW2ldO1xuXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VHlwZS5wbG90VW5pdHMubGVuZ3RoOyBqKyspIHtcblxuXHRcdFx0dmFyIHBsb3RVbml0ID0gcGxvdFR5cGUucGxvdFVuaXRzW2pdO1xuXG5cdFx0XHRpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJsaW5lXCIgfHwgcGxvdFVuaXQudHlwZSA9PT0gXCJzdGVwTGluZVwiIHx8IHBsb3RVbml0LnR5cGUgPT09IFwic3BsaW5lXCIgfHwgcGxvdFVuaXQudHlwZSA9PT0gXCJjb2x1bW5cIiB8fCBwbG90VW5pdC50eXBlID09PSBcImFyZWFcIiB8fCBwbG90VW5pdC50eXBlID09PSBcInN0ZXBBcmVhXCIgfHwgcGxvdFVuaXQudHlwZSA9PT0gXCJzcGxpbmVBcmVhXCIgfHwgcGxvdFVuaXQudHlwZSA9PT0gXCJiYXJcIiB8fCBwbG90VW5pdC50eXBlID09PSBcImJ1YmJsZVwiIHx8IHBsb3RVbml0LnR5cGUgPT09IFwic2NhdHRlclwiKVxuXHRcdFx0XHR0aGlzLl9wcm9jZXNzTXVsdGlzZXJpZXNQbG90VW5pdChwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcInN0YWNrZWRDb2x1bW5cIiB8fCBwbG90VW5pdC50eXBlID09PSBcInN0YWNrZWRCYXJcIiB8fCBwbG90VW5pdC50eXBlID09PSBcInN0YWNrZWRBcmVhXCIpXG5cdFx0XHRcdHRoaXMuX3Byb2Nlc3NTdGFja2VkUGxvdFVuaXQocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJzdGFja2VkQ29sdW1uMTAwXCIgfHwgcGxvdFVuaXQudHlwZSA9PT0gXCJzdGFja2VkQmFyMTAwXCIgfHwgcGxvdFVuaXQudHlwZSA9PT0gXCJzdGFja2VkQXJlYTEwMFwiKVxuXHRcdFx0XHR0aGlzLl9wcm9jZXNzU3RhY2tlZDEwMFBsb3RVbml0KHBsb3RVbml0KTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LnR5cGUgPT09IFwiY2FuZGxlc3RpY2tcIiB8fCBwbG90VW5pdC50eXBlID09PSBcIm9obGNcIiB8fCBwbG90VW5pdC50eXBlID09PSBcInJhbmdlQ29sdW1uXCIgfHwgcGxvdFVuaXQudHlwZSA9PT0gXCJyYW5nZUJhclwiIHx8IHBsb3RVbml0LnR5cGUgPT09IFwicmFuZ2VBcmVhXCIgfHwgcGxvdFVuaXQudHlwZSA9PT0gXCJyYW5nZVNwbGluZUFyZWFcIilcblx0XHRcdFx0dGhpcy5fcHJvY2Vzc011bHRpWVBsb3RVbml0KHBsb3RVbml0KTtcblx0XHR9XG5cdH1cblxufVxuXG5DaGFydC5wcm90b3R5cGUuX3Byb2Nlc3NNdWx0aXNlcmllc1Bsb3RVbml0ID0gZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cdGlmICghcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMgfHwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoIDwgMSlcblx0XHRyZXR1cm47XG5cblx0dmFyIGF4aXNZRGF0YUluZm8gPSBwbG90VW5pdC5heGlzWS5kYXRhSW5mbztcblx0dmFyIGF4aXNYRGF0YUluZm8gPSBwbG90VW5pdC5heGlzWC5kYXRhSW5mbztcblx0dmFyIGRhdGFQb2ludFgsIGRhdGFQb2ludFk7XG5cdHZhciBpc0RhdGVUaW1lID0gZmFsc2U7XG5cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal1dO1xuXHRcdHZhciBpID0gMDtcblx0XHR2YXIgaXNGaXJzdERQSW5WaWV3UG9ydCA9IGZhbHNlO1xuXHRcdHZhciBpc0xhc3REUEluVmlld1BvcnQgPSBmYWxzZTtcblxuXHRcdGlmIChkYXRhU2VyaWVzLmF4aXNQbGFjZW1lbnQgPT09IFwibm9ybWFsXCIgfHwgZGF0YVNlcmllcy5heGlzUGxhY2VtZW50ID09PSBcInh5U3dhcHBlZFwiKSB7XG5cblx0XHRcdHZhciBwbG90QXJlYVhNaW4gPSB0aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1gubmV3Vmlld3BvcnRNaW5pbXVtID8gdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNYLm5ld1ZpZXdwb3J0TWluaW11bSA6ICh0aGlzLl9vcHRpb25zLmF4aXNYICYmIHRoaXMuX29wdGlvbnMuYXhpc1gudmlld3BvcnRNaW5pbXVtKSA/XG5cdFx0XHRcdHRoaXMuX29wdGlvbnMuYXhpc1gudmlld3BvcnRNaW5pbXVtIDogKHRoaXMuX29wdGlvbnMuYXhpc1ggJiYgdGhpcy5fb3B0aW9ucy5heGlzWC5taW5pbXVtKSA/IHRoaXMuX29wdGlvbnMuYXhpc1gubWluaW11bSA6IC1JbmZpbml0eTtcblxuXHRcdFx0dmFyIHBsb3RBcmVhWE1heCA9IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWC5uZXdWaWV3cG9ydE1heGltdW0gPyB0aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1gubmV3Vmlld3BvcnRNYXhpbXVtIDogKHRoaXMuX29wdGlvbnMuYXhpc1ggJiYgdGhpcy5fb3B0aW9ucy5heGlzWC52aWV3cG9ydE1heGltdW0pID9cblx0XHRcdFx0dGhpcy5fb3B0aW9ucy5heGlzWC52aWV3cG9ydE1heGltdW0gOiAodGhpcy5fb3B0aW9ucy5heGlzWCAmJiB0aGlzLl9vcHRpb25zLmF4aXNYLm1heGltdW0pID8gdGhpcy5fb3B0aW9ucy5heGlzWC5tYXhpbXVtIDogSW5maW5pdHk7XG5cdFx0fVxuXG5cblx0XHRpZiAoZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnggJiYgZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnguZ2V0VGltZSB8fCBkYXRhU2VyaWVzLnhWYWx1ZVR5cGUgPT09IFwiZGF0ZVRpbWVcIikge1xuXHRcdFx0aXNEYXRlVGltZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFTZXJpZXMuZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRpZiAodHlwZW9mIGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54ID0gaTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54LmdldFRpbWUpIHtcblx0XHRcdFx0aXNEYXRlVGltZSA9IHRydWU7XG5cdFx0XHRcdGRhdGFQb2ludFggPSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCk7Ly9kYXRhUG9pbnRYIGlzIHVzZWQgc28gdGhhdCBnZXRUaW1lIGlzIGNhbGxlZCBvbmx5IG9uY2UgaW4gY2FzZSBvZiBkYXRlVGltZSB2YWx1ZXNcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRkYXRhUG9pbnRZID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnk7XG5cblxuXHRcdFx0aWYgKGRhdGFQb2ludFggPCBheGlzWERhdGFJbmZvLm1pbilcblx0XHRcdFx0YXhpc1hEYXRhSW5mby5taW4gPSBkYXRhUG9pbnRYO1xuXHRcdFx0aWYgKGRhdGFQb2ludFggPiBheGlzWERhdGFJbmZvLm1heClcblx0XHRcdFx0YXhpc1hEYXRhSW5mby5tYXggPSBkYXRhUG9pbnRYO1xuXG5cdFx0XHRpZiAoZGF0YVBvaW50WSA8IGF4aXNZRGF0YUluZm8ubWluKVxuXHRcdFx0XHRheGlzWURhdGFJbmZvLm1pbiA9IGRhdGFQb2ludFk7XG5cblx0XHRcdGlmIChkYXRhUG9pbnRZID4gYXhpc1lEYXRhSW5mby5tYXgpXG5cdFx0XHRcdGF4aXNZRGF0YUluZm8ubWF4ID0gZGF0YVBvaW50WTtcblxuXG5cdFx0XHRpZiAoaSA+IDApIHtcblx0XHRcdFx0dmFyIHhEaWZmID0gZGF0YVBvaW50WCAtIGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpIC0gMV0ueDtcblx0XHRcdFx0eERpZmYgPCAwICYmICh4RGlmZiA9IHhEaWZmICogLTEpOyAvL0lmIENvbmRpdGlvbiBzaG9ydGN1dFxuXG5cdFx0XHRcdGlmIChheGlzWERhdGFJbmZvLm1pbkRpZmYgPiB4RGlmZiAmJiB4RGlmZiAhPT0gMCkge1xuXHRcdFx0XHRcdGF4aXNYRGF0YUluZm8ubWluRGlmZiA9IHhEaWZmO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludFkgIT09IG51bGwgJiYgZGF0YVNlcmllcy5kYXRhUG9pbnRzW2kgLSAxXS55ICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0dmFyIHlEaWZmID0gZGF0YVBvaW50WSAtIGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpIC0gMV0ueTtcblx0XHRcdFx0XHR5RGlmZiA8IDAgJiYgKHlEaWZmID0geURpZmYgKiAtMSk7IC8vSWYgQ29uZGl0aW9uIHNob3J0Y3V0XG5cblx0XHRcdFx0XHRpZiAoYXhpc1lEYXRhSW5mby5taW5EaWZmID4geURpZmYgJiYgeURpZmYgIT09IDApIHtcblx0XHRcdFx0XHRcdGF4aXNZRGF0YUluZm8ubWluRGlmZiA9IHlEaWZmO1xuXHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoaXMgc2VjdGlvbiBtYWtlcyBzdXJlIHRoYXQgcGFydGlhbGx5IHZpc2libGUgZGF0YVBvaW50cyBhcmUgaW5jbHVkZWQgaW4gdGhlIGJlZ2luaW5nXG5cdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RBcmVhWE1pbiAmJiAhaXNGaXJzdERQSW5WaWV3UG9ydCkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH0gZWxzZSBpZiAoIWlzRmlyc3REUEluVmlld1BvcnQpIHtcblx0XHRcdFx0aXNGaXJzdERQSW5WaWV3UG9ydCA9IHRydWU7XG5cblx0XHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdFx0aSAtPSAyO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoaXMgc2VjdGlvbiBtYWtlcyBzdXJlIHRoYXQgcGFydGlhbGx5IHZpc2libGUgZGF0YVBvaW50cyBhcmUgaW5jbHVkZWQgYXQgdGhlIGVuZFxuXHRcdFx0aWYgKGRhdGFQb2ludFggPiBwbG90QXJlYVhNYXggJiYgIWlzTGFzdERQSW5WaWV3UG9ydCkge1xuXHRcdFx0XHRpc0xhc3REUEluVmlld1BvcnQgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChkYXRhUG9pbnRYID4gcGxvdEFyZWFYTWF4ICYmIGlzTGFzdERQSW5WaWV3UG9ydCkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS5sYWJlbClcblx0XHRcdFx0cGxvdFVuaXQuYXhpc1gubGFiZWxzW2RhdGFQb2ludFhdID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLmxhYmVsO1xuXG5cblx0XHRcdGlmIChkYXRhUG9pbnRYIDwgYXhpc1hEYXRhSW5mby52aWV3UG9ydE1pbilcblx0XHRcdFx0YXhpc1hEYXRhSW5mby52aWV3UG9ydE1pbiA9IGRhdGFQb2ludFg7XG5cdFx0XHRpZiAoZGF0YVBvaW50WCA+IGF4aXNYRGF0YUluZm8udmlld1BvcnRNYXgpXG5cdFx0XHRcdGF4aXNYRGF0YUluZm8udmlld1BvcnRNYXggPSBkYXRhUG9pbnRYO1xuXG5cdFx0XHRpZiAoZGF0YVBvaW50WSA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmIChkYXRhUG9pbnRZIDwgYXhpc1lEYXRhSW5mby52aWV3UG9ydE1pbilcblx0XHRcdFx0YXhpc1lEYXRhSW5mby52aWV3UG9ydE1pbiA9IGRhdGFQb2ludFk7XG5cdFx0XHRpZiAoZGF0YVBvaW50WSA+IGF4aXNZRGF0YUluZm8udmlld1BvcnRNYXgpXG5cdFx0XHRcdGF4aXNZRGF0YUluZm8udmlld1BvcnRNYXggPSBkYXRhUG9pbnRZO1xuXHRcdH1cblxuXHRcdHRoaXMucGxvdEluZm8uYXhpc1hWYWx1ZVR5cGUgPSBkYXRhU2VyaWVzLnhWYWx1ZVR5cGUgPSBpc0RhdGVUaW1lID8gXCJkYXRlVGltZVwiIDogXCJudW1iZXJcIjtcblx0fVxuXG5cdC8vdGhpcy5kYXRhUG9pbnRzLnNvcnQoY29tcGFyZURhdGFQb2ludFgpO1xuXHQvL3RoaXMuZGF0YVBvaW50cy5zb3J0KGZ1bmN0aW9uIChkYXRhUG9pbnQxLCBkYXRhUG9pbnQyKSB7IHJldHVybiBkYXRhUG9pbnQxLnggLSBkYXRhUG9pbnQyLng7IH0pO1xufVxuXG5DaGFydC5wcm90b3R5cGUuX3Byb2Nlc3NTdGFja2VkUGxvdFVuaXQgPSBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblxuXHRpZiAoIXBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzIHx8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aCA8IDEpXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBheGlzWURhdGFJbmZvID0gcGxvdFVuaXQuYXhpc1kuZGF0YUluZm87XG5cdHZhciBheGlzWERhdGFJbmZvID0gcGxvdFVuaXQuYXhpc1guZGF0YUluZm87XG5cblx0dmFyIGRhdGFQb2ludFgsIGRhdGFQb2ludFk7XG5cdHZhciBpc0RhdGVUaW1lID0gZmFsc2U7XG5cblx0dmFyIGRhdGFQb2ludFlQb3NpdGl2ZVN1bXMgPSBbXTtcblx0dmFyIGRhdGFQb2ludFlOZWdhdGl2ZVN1bXMgPSBbXTtcblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal1dO1xuXHRcdHZhciBpID0gMDtcblx0XHR2YXIgaXNGaXJzdERQSW5WaWV3UG9ydCA9IGZhbHNlO1xuXHRcdHZhciBpc0xhc3REUEluVmlld1BvcnQgPSBmYWxzZTtcblxuXHRcdGlmIChkYXRhU2VyaWVzLmF4aXNQbGFjZW1lbnQgPT09IFwibm9ybWFsXCIgfHwgZGF0YVNlcmllcy5heGlzUGxhY2VtZW50ID09PSBcInh5U3dhcHBlZFwiKSB7XG5cblx0XHRcdHZhciBwbG90QXJlYVhNaW4gPSB0aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1gubmV3Vmlld3BvcnRNaW5pbXVtID8gdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNYLm5ld1ZpZXdwb3J0TWluaW11bSA6ICh0aGlzLl9vcHRpb25zLmF4aXNYICYmIHRoaXMuX29wdGlvbnMuYXhpc1gudmlld3BvcnRNaW5pbXVtKSA/XG5cdFx0XHRcdHRoaXMuX29wdGlvbnMuYXhpc1gudmlld3BvcnRNaW5pbXVtIDogKHRoaXMuX29wdGlvbnMuYXhpc1ggJiYgdGhpcy5fb3B0aW9ucy5heGlzWC5taW5pbXVtKSA/IHRoaXMuX29wdGlvbnMuYXhpc1gubWluaW11bSA6IC1JbmZpbml0eTtcblxuXHRcdFx0dmFyIHBsb3RBcmVhWE1heCA9IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWC5uZXdWaWV3cG9ydE1heGltdW0gPyB0aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1gubmV3Vmlld3BvcnRNYXhpbXVtIDogKHRoaXMuX29wdGlvbnMuYXhpc1ggJiYgdGhpcy5fb3B0aW9ucy5heGlzWC52aWV3cG9ydE1heGltdW0pID9cblx0XHRcdFx0dGhpcy5fb3B0aW9ucy5heGlzWC52aWV3cG9ydE1heGltdW0gOiAodGhpcy5fb3B0aW9ucy5heGlzWCAmJiB0aGlzLl9vcHRpb25zLmF4aXNYLm1heGltdW0pID8gdGhpcy5fb3B0aW9ucy5heGlzWC5tYXhpbXVtIDogSW5maW5pdHk7XG5cdFx0fVxuXG5cblx0XHRpZiAoZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnggJiYgZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnguZ2V0VGltZSB8fCBkYXRhU2VyaWVzLnhWYWx1ZVR5cGUgPT09IFwiZGF0ZVRpbWVcIikge1xuXHRcdFx0aXNEYXRlVGltZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFTZXJpZXMuZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHQvLyBSZXF1aXJkIHdoZW4gbm8geCB2YWx1ZXMgYXJlIHByb3ZpZGVkXG5cdFx0XHRpZiAodHlwZW9mIGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54ID0gaTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54LmdldFRpbWUpIHtcblx0XHRcdFx0aXNEYXRlVGltZSA9IHRydWU7XG5cdFx0XHRcdGRhdGFQb2ludFggPSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCk7Ly9kYXRhUG9pbnRYIGlzIHVzZWQgc28gdGhhdCBnZXRUaW1lIGlzIGNhbGxlZCBvbmx5IG9uY2UgaW4gY2FzZSBvZiBkYXRlVGltZSB2YWx1ZXNcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRkYXRhUG9pbnRZID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnk7XG5cblxuXG5cdFx0XHRpZiAoZGF0YVBvaW50WCA8IGF4aXNYRGF0YUluZm8ubWluKVxuXHRcdFx0XHRheGlzWERhdGFJbmZvLm1pbiA9IGRhdGFQb2ludFg7XG5cdFx0XHRpZiAoZGF0YVBvaW50WCA+IGF4aXNYRGF0YUluZm8ubWF4KVxuXHRcdFx0XHRheGlzWERhdGFJbmZvLm1heCA9IGRhdGFQb2ludFg7XG5cblx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHR2YXIgeERpZmYgPSBkYXRhUG9pbnRYIC0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2kgLSAxXS54O1xuXHRcdFx0XHR4RGlmZiA8IDAgJiYgKHhEaWZmID0geERpZmYgKiAtMSk7IC8vSWYgQ29uZGl0aW9uIHNob3J0Y3V0XG5cblx0XHRcdFx0aWYgKGF4aXNYRGF0YUluZm8ubWluRGlmZiA+IHhEaWZmICYmIHhEaWZmICE9PSAwKSB7XG5cdFx0XHRcdFx0YXhpc1hEYXRhSW5mby5taW5EaWZmID0geERpZmY7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WSAhPT0gbnVsbCAmJiBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaSAtIDFdLnkgIT09IG51bGwpIHtcblx0XHRcdFx0XHR2YXIgeURpZmYgPSBkYXRhUG9pbnRZIC0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2kgLSAxXS55O1xuXHRcdFx0XHRcdHlEaWZmIDwgMCAmJiAoeURpZmYgPSB5RGlmZiAqIC0xKTsgLy9JZiBDb25kaXRpb24gc2hvcnRjdXRcblxuXHRcdFx0XHRcdGlmIChheGlzWURhdGFJbmZvLm1pbkRpZmYgPiB5RGlmZiAmJiB5RGlmZiAhPT0gMCkge1xuXHRcdFx0XHRcdFx0YXhpc1lEYXRhSW5mby5taW5EaWZmID0geURpZmY7XG5cdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhpcyBzZWN0aW9uIG1ha2VzIHN1cmUgdGhhdCBwYXJ0aWFsbHkgdmlzaWJsZSBkYXRhUG9pbnRzIGFyZSBpbmNsdWRlZCBpbiB0aGUgYmVnaW5pbmdcblx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdEFyZWFYTWluICYmICFpc0ZpcnN0RFBJblZpZXdQb3J0KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fSBlbHNlIGlmICghaXNGaXJzdERQSW5WaWV3UG9ydCkge1xuXHRcdFx0XHRpc0ZpcnN0RFBJblZpZXdQb3J0ID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoaSA+IDApIHtcblx0XHRcdFx0XHRpIC09IDI7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhpcyBzZWN0aW9uIG1ha2VzIHN1cmUgdGhhdCBwYXJ0aWFsbHkgdmlzaWJsZSBkYXRhUG9pbnRzIGFyZSBpbmNsdWRlZCBhdCB0aGUgZW5kXG5cdFx0XHRpZiAoZGF0YVBvaW50WCA+IHBsb3RBcmVhWE1heCAmJiAhaXNMYXN0RFBJblZpZXdQb3J0KSB7XG5cdFx0XHRcdGlzTGFzdERQSW5WaWV3UG9ydCA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFQb2ludFggPiBwbG90QXJlYVhNYXggJiYgaXNMYXN0RFBJblZpZXdQb3J0KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cblx0XHRcdGlmIChkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ubGFiZWwpXG5cdFx0XHRcdHBsb3RVbml0LmF4aXNYLmxhYmVsc1tkYXRhUG9pbnRYXSA9IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS5sYWJlbDtcblxuXHRcdFx0aWYgKGRhdGFQb2ludFggPCBheGlzWERhdGFJbmZvLnZpZXdQb3J0TWluKVxuXHRcdFx0XHRheGlzWERhdGFJbmZvLnZpZXdQb3J0TWluID0gZGF0YVBvaW50WDtcblx0XHRcdGlmIChkYXRhUG9pbnRYID4gYXhpc1hEYXRhSW5mby52aWV3UG9ydE1heClcblx0XHRcdFx0YXhpc1hEYXRhSW5mby52aWV3UG9ydE1heCA9IGRhdGFQb2ludFg7XG5cblx0XHRcdGlmIChkYXRhUG9pbnRZID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0cGxvdFVuaXQueVRvdGFsc1tkYXRhUG9pbnRYXSA9ICghcGxvdFVuaXQueVRvdGFsc1tkYXRhUG9pbnRYXSA/IDAgOiBwbG90VW5pdC55VG90YWxzW2RhdGFQb2ludFhdKSArIE1hdGguYWJzKGRhdGFQb2ludFkpO1xuXG5cdFx0XHRpZiAoZGF0YVBvaW50WSA+PSAwKSB7XG5cdFx0XHRcdGlmIChkYXRhUG9pbnRZUG9zaXRpdmVTdW1zW2RhdGFQb2ludFhdKVxuXHRcdFx0XHRcdGRhdGFQb2ludFlQb3NpdGl2ZVN1bXNbZGF0YVBvaW50WF0gKz0gZGF0YVBvaW50WTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdGRhdGFQb2ludFlQb3NpdGl2ZVN1bXNbZGF0YVBvaW50WF0gPSBkYXRhUG9pbnRZO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGRhdGFQb2ludFlOZWdhdGl2ZVN1bXNbZGF0YVBvaW50WF0pXG5cdFx0XHRcdFx0ZGF0YVBvaW50WU5lZ2F0aXZlU3Vtc1tkYXRhUG9pbnRYXSArPSBkYXRhUG9pbnRZO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0ZGF0YVBvaW50WU5lZ2F0aXZlU3Vtc1tkYXRhUG9pbnRYXSA9IGRhdGFQb2ludFk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5wbG90SW5mby5heGlzWFZhbHVlVHlwZSA9IGRhdGFTZXJpZXMueFZhbHVlVHlwZSA9IGlzRGF0ZVRpbWUgPyBcImRhdGVUaW1lXCIgOiBcIm51bWJlclwiO1xuXHR9XG5cblx0Zm9yIChpIGluIGRhdGFQb2ludFlQb3NpdGl2ZVN1bXMpIHtcblx0XHRpZiAoZGF0YVBvaW50WVBvc2l0aXZlU3Vtcy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdGlmIChpc05hTihpKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdHZhciB5U3VtID0gZGF0YVBvaW50WVBvc2l0aXZlU3Vtc1tpXTtcblxuXHRcdGlmICh5U3VtIDwgYXhpc1lEYXRhSW5mby5taW4pXG5cdFx0XHRheGlzWURhdGFJbmZvLm1pbiA9IHlTdW07XG5cblx0XHRpZiAoeVN1bSA+IGF4aXNZRGF0YUluZm8ubWF4KVxuXHRcdFx0YXhpc1lEYXRhSW5mby5tYXggPSB5U3VtO1xuXG5cdFx0aWYgKGkgPCBheGlzWERhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGkgPiBheGlzWERhdGFJbmZvLnZpZXdQb3J0TWF4KVxuXHRcdFx0Y29udGludWU7XG5cblx0XHRpZiAoeVN1bSA8IGF4aXNZRGF0YUluZm8udmlld1BvcnRNaW4pXG5cdFx0XHRheGlzWURhdGFJbmZvLnZpZXdQb3J0TWluID0geVN1bTtcblx0XHRpZiAoeVN1bSA+IGF4aXNZRGF0YUluZm8udmlld1BvcnRNYXgpXG5cdFx0XHRheGlzWURhdGFJbmZvLnZpZXdQb3J0TWF4ID0geVN1bTtcblx0fVxuXG5cdH1cblxuXHRmb3IgKGkgaW4gZGF0YVBvaW50WU5lZ2F0aXZlU3Vtcykge1xuXG5cdFx0aWYgKGRhdGFQb2ludFlOZWdhdGl2ZVN1bXMuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRpZiAoaXNOYU4oaSkpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHZhciB5U3VtID0gZGF0YVBvaW50WU5lZ2F0aXZlU3Vtc1tpXTtcblxuXHRcdGlmICh5U3VtIDwgYXhpc1lEYXRhSW5mby5taW4pXG5cdFx0XHRheGlzWURhdGFJbmZvLm1pbiA9IHlTdW07XG5cblx0XHRpZiAoeVN1bSA+IGF4aXNZRGF0YUluZm8ubWF4KVxuXHRcdFx0YXhpc1lEYXRhSW5mby5tYXggPSB5U3VtO1xuXG5cdFx0aWYgKGkgPCBheGlzWERhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGkgPiBheGlzWERhdGFJbmZvLnZpZXdQb3J0TWF4KVxuXHRcdFx0Y29udGludWU7XG5cblx0XHRpZiAoeVN1bSA8IGF4aXNZRGF0YUluZm8udmlld1BvcnRNaW4pXG5cdFx0XHRheGlzWURhdGFJbmZvLnZpZXdQb3J0TWluID0geVN1bTtcblx0XHRpZiAoeVN1bSA+IGF4aXNZRGF0YUluZm8udmlld1BvcnRNYXgpXG5cdFx0XHRheGlzWURhdGFJbmZvLnZpZXdQb3J0TWF4ID0geVN1bTtcblx0fVxuXG5cdH1cblxuXG5cdC8vdGhpcy5kYXRhUG9pbnRzLnNvcnQoY29tcGFyZURhdGFQb2ludFgpO1xuXHQvL3RoaXMuZGF0YVBvaW50cy5zb3J0KGZ1bmN0aW9uIChkYXRhUG9pbnQxLCBkYXRhUG9pbnQyKSB7IHJldHVybiBkYXRhUG9pbnQxLnggLSBkYXRhUG9pbnQyLng7IH0pO1xuXG5cdC8vd2luZG93LmNvbnNvbGUubG9nKFwidmlld1BvcnRZTWluOiBcIiArIHBsb3RJbmZvLnZpZXdQb3J0WU1pbiArIFwiOyB2aWV3UG9ydFlNYXg6IFwiICsgcGxvdEluZm8udmlld1BvcnRZTWF4KTtcbn1cblxuQ2hhcnQucHJvdG90eXBlLl9wcm9jZXNzU3RhY2tlZDEwMFBsb3RVbml0ID0gZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cdGlmICghcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMgfHwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoIDwgMSlcblx0XHRyZXR1cm47XG5cblx0dmFyIGF4aXNZRGF0YUluZm8gPSBwbG90VW5pdC5heGlzWS5kYXRhSW5mbztcblx0dmFyIGF4aXNYRGF0YUluZm8gPSBwbG90VW5pdC5heGlzWC5kYXRhSW5mbztcblxuXHR2YXIgZGF0YVBvaW50WCwgZGF0YVBvaW50WTtcblx0dmFyIGlzRGF0ZVRpbWUgPSBmYWxzZTtcblx0dmFyIGNvbnRhaW5zUG9zaXRpdmVZID0gZmFsc2U7XG5cdHZhciBjb250YWluc05lZ2F0aXZlWSA9IGZhbHNlO1xuXG5cdHZhciBkYXRhUG9pbnRZU3VtcyA9IFtdO1xuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXV07XG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBpc0ZpcnN0RFBJblZpZXdQb3J0ID0gZmFsc2U7XG5cdFx0dmFyIGlzTGFzdERQSW5WaWV3UG9ydCA9IGZhbHNlO1xuXG5cdFx0aWYgKGRhdGFTZXJpZXMuYXhpc1BsYWNlbWVudCA9PT0gXCJub3JtYWxcIiB8fCBkYXRhU2VyaWVzLmF4aXNQbGFjZW1lbnQgPT09IFwieHlTd2FwcGVkXCIpIHtcblxuXHRcdFx0dmFyIHBsb3RBcmVhWE1pbiA9IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWC5uZXdWaWV3cG9ydE1pbmltdW0gPyB0aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1gubmV3Vmlld3BvcnRNaW5pbXVtIDogKHRoaXMuX29wdGlvbnMuYXhpc1ggJiYgdGhpcy5fb3B0aW9ucy5heGlzWC52aWV3cG9ydE1pbmltdW0pID9cblx0XHRcdFx0dGhpcy5fb3B0aW9ucy5heGlzWC52aWV3cG9ydE1pbmltdW0gOiAodGhpcy5fb3B0aW9ucy5heGlzWCAmJiB0aGlzLl9vcHRpb25zLmF4aXNYLm1pbmltdW0pID8gdGhpcy5fb3B0aW9ucy5heGlzWC5taW5pbXVtIDogLUluZmluaXR5O1xuXG5cdFx0XHR2YXIgcGxvdEFyZWFYTWF4ID0gdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNYLm5ld1ZpZXdwb3J0TWF4aW11bSA/IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWC5uZXdWaWV3cG9ydE1heGltdW0gOiAodGhpcy5fb3B0aW9ucy5heGlzWCAmJiB0aGlzLl9vcHRpb25zLmF4aXNYLnZpZXdwb3J0TWF4aW11bSkgP1xuXHRcdFx0XHR0aGlzLl9vcHRpb25zLmF4aXNYLnZpZXdwb3J0TWF4aW11bSA6ICh0aGlzLl9vcHRpb25zLmF4aXNYICYmIHRoaXMuX29wdGlvbnMuYXhpc1gubWF4aW11bSkgPyB0aGlzLl9vcHRpb25zLmF4aXNYLm1heGltdW0gOiBJbmZpbml0eTtcblx0XHR9XG5cblxuXHRcdGlmIChkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueCAmJiBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueC5nZXRUaW1lIHx8IGRhdGFTZXJpZXMueFZhbHVlVHlwZSA9PT0gXCJkYXRlVGltZVwiKSB7XG5cdFx0XHRpc0RhdGVUaW1lID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVNlcmllcy5kYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdC8vIFJlcXVpcmQgd2hlbiBubyB4IHZhbHVlcyBhcmUgcHJvdmlkZWRcblx0XHRcdGlmICh0eXBlb2YgZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnggPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0ZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnggPSBpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnguZ2V0VGltZSkge1xuXHRcdFx0XHRpc0RhdGVUaW1lID0gdHJ1ZTtcblx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKTsvL2RhdGFQb2ludFggaXMgdXNlZCBzbyB0aGF0IGdldFRpbWUgaXMgY2FsbGVkIG9ubHkgb25jZSBpbiBjYXNlIG9mIGRhdGVUaW1lIHZhbHVlc1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLng7XG5cblx0XHRcdGRhdGFQb2ludFkgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueTtcblxuXG5cblx0XHRcdGlmIChkYXRhUG9pbnRYIDwgYXhpc1hEYXRhSW5mby5taW4pXG5cdFx0XHRcdGF4aXNYRGF0YUluZm8ubWluID0gZGF0YVBvaW50WDtcblx0XHRcdGlmIChkYXRhUG9pbnRYID4gYXhpc1hEYXRhSW5mby5tYXgpXG5cdFx0XHRcdGF4aXNYRGF0YUluZm8ubWF4ID0gZGF0YVBvaW50WDtcblxuXHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdHZhciB4RGlmZiA9IGRhdGFQb2ludFggLSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaSAtIDFdLng7XG5cdFx0XHRcdHhEaWZmIDwgMCAmJiAoeERpZmYgPSB4RGlmZiAqIC0xKTsgLy9JZiBDb25kaXRpb24gc2hvcnRjdXRcblxuXHRcdFx0XHRpZiAoYXhpc1hEYXRhSW5mby5taW5EaWZmID4geERpZmYgJiYgeERpZmYgIT09IDApIHtcblx0XHRcdFx0XHRheGlzWERhdGFJbmZvLm1pbkRpZmYgPSB4RGlmZjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRZICE9PSBudWxsICYmIGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpIC0gMV0ueSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHZhciB5RGlmZiA9IGRhdGFQb2ludFkgLSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaSAtIDFdLnk7XG5cdFx0XHRcdFx0eURpZmYgPCAwICYmICh5RGlmZiA9IHlEaWZmICogLTEpOyAvL0lmIENvbmRpdGlvbiBzaG9ydGN1dFxuXG5cdFx0XHRcdFx0aWYgKGF4aXNZRGF0YUluZm8ubWluRGlmZiA+IHlEaWZmICYmIHlEaWZmICE9PSAwKSB7XG5cdFx0XHRcdFx0XHRheGlzWURhdGFJbmZvLm1pbkRpZmYgPSB5RGlmZjtcblx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGlzIHNlY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHBhcnRpYWxseSB2aXNpYmxlIGRhdGFQb2ludHMgYXJlIGluY2x1ZGVkIGluIHRoZSBiZWdpbmluZ1xuXHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90QXJlYVhNaW4gJiYgIWlzRmlyc3REUEluVmlld1BvcnQpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9IGVsc2UgaWYgKCFpc0ZpcnN0RFBJblZpZXdQb3J0KSB7XG5cdFx0XHRcdGlzRmlyc3REUEluVmlld1BvcnQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHRcdGkgLT0gMjtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGlzIHNlY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHBhcnRpYWxseSB2aXNpYmxlIGRhdGFQb2ludHMgYXJlIGluY2x1ZGVkIGF0IHRoZSBlbmRcblx0XHRcdGlmIChkYXRhUG9pbnRYID4gcGxvdEFyZWFYTWF4ICYmICFpc0xhc3REUEluVmlld1BvcnQpIHtcblx0XHRcdFx0aXNMYXN0RFBJblZpZXdQb3J0ID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YVBvaW50WCA+IHBsb3RBcmVhWE1heCAmJiBpc0xhc3REUEluVmlld1BvcnQpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ubGFiZWwpXG5cdFx0XHRcdHBsb3RVbml0LmF4aXNYLmxhYmVsc1tkYXRhUG9pbnRYXSA9IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS5sYWJlbDtcblxuXHRcdFx0aWYgKGRhdGFQb2ludFggPCBheGlzWERhdGFJbmZvLnZpZXdQb3J0TWluKVxuXHRcdFx0XHRheGlzWERhdGFJbmZvLnZpZXdQb3J0TWluID0gZGF0YVBvaW50WDtcblx0XHRcdGlmIChkYXRhUG9pbnRYID4gYXhpc1hEYXRhSW5mby52aWV3UG9ydE1heClcblx0XHRcdFx0YXhpc1hEYXRhSW5mby52aWV3UG9ydE1heCA9IGRhdGFQb2ludFg7XG5cblx0XHRcdGlmIChkYXRhUG9pbnRZID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0cGxvdFVuaXQueVRvdGFsc1tkYXRhUG9pbnRYXSA9ICghcGxvdFVuaXQueVRvdGFsc1tkYXRhUG9pbnRYXSA/IDAgOiBwbG90VW5pdC55VG90YWxzW2RhdGFQb2ludFhdKSArIE1hdGguYWJzKGRhdGFQb2ludFkpO1xuXG5cdFx0XHRpZiAoZGF0YVBvaW50WSA+PSAwKSB7XG5cdFx0XHRcdGNvbnRhaW5zUG9zaXRpdmVZID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnRhaW5zTmVnYXRpdmVZID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGRhdGFQb2ludFlTdW1zW2RhdGFQb2ludFhdKVxuXHRcdFx0XHRkYXRhUG9pbnRZU3Vtc1tkYXRhUG9pbnRYXSArPSBNYXRoLmFicyhkYXRhUG9pbnRZKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0ZGF0YVBvaW50WVN1bXNbZGF0YVBvaW50WF0gPSBNYXRoLmFicyhkYXRhUG9pbnRZKTtcblx0XHR9XG5cblx0XHR0aGlzLnBsb3RJbmZvLmF4aXNYVmFsdWVUeXBlID0gZGF0YVNlcmllcy54VmFsdWVUeXBlID0gaXNEYXRlVGltZSA/IFwiZGF0ZVRpbWVcIiA6IFwibnVtYmVyXCI7XG5cdH1cblxuXG5cdGlmIChjb250YWluc1Bvc2l0aXZlWSAmJiAhY29udGFpbnNOZWdhdGl2ZVkpIHtcblx0XHRheGlzWURhdGFJbmZvLm1heCA9IDk5O1xuXHRcdGF4aXNZRGF0YUluZm8ubWluID0gMTtcblx0fSBlbHNlIGlmIChjb250YWluc1Bvc2l0aXZlWSAmJiBjb250YWluc05lZ2F0aXZlWSkge1xuXHRcdGF4aXNZRGF0YUluZm8ubWF4ID0gOTk7XG5cdFx0YXhpc1lEYXRhSW5mby5taW4gPSAtOTk7XG5cdH0gZWxzZSBpZiAoIWNvbnRhaW5zUG9zaXRpdmVZICYmIGNvbnRhaW5zTmVnYXRpdmVZKSB7XG5cdFx0YXhpc1lEYXRhSW5mby5tYXggPSAtMTtcblx0XHRheGlzWURhdGFJbmZvLm1pbiA9IC05OTtcblx0fVxuXG5cdGF4aXNZRGF0YUluZm8udmlld1BvcnRNaW4gPSBheGlzWURhdGFJbmZvLm1pbjtcblx0YXhpc1lEYXRhSW5mby52aWV3UG9ydE1heCA9IGF4aXNZRGF0YUluZm8ubWF4O1xuXG5cdHBsb3RVbml0LmRhdGFQb2ludFlTdW1zID0gZGF0YVBvaW50WVN1bXM7XG5cblx0Ly90aGlzLmRhdGFQb2ludHMuc29ydChjb21wYXJlRGF0YVBvaW50WCk7XG5cdC8vdGhpcy5kYXRhUG9pbnRzLnNvcnQoZnVuY3Rpb24gKGRhdGFQb2ludDEsIGRhdGFQb2ludDIpIHsgcmV0dXJuIGRhdGFQb2ludDEueCAtIGRhdGFQb2ludDIueDsgfSk7XG5cblx0Ly93aW5kb3cuY29uc29sZS5sb2coXCJ2aWV3UG9ydFlNaW46IFwiICsgcGxvdEluZm8udmlld1BvcnRZTWluICsgXCI7IHZpZXdQb3J0WU1heDogXCIgKyBwbG90SW5mby52aWV3UG9ydFlNYXgpO1xufVxuXG5DaGFydC5wcm90b3R5cGUuX3Byb2Nlc3NNdWx0aVlQbG90VW5pdCA9IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXHRpZiAoIXBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzIHx8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aCA8IDEpXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBheGlzWURhdGFJbmZvID0gcGxvdFVuaXQuYXhpc1kuZGF0YUluZm87XG5cdHZhciBheGlzWERhdGFJbmZvID0gcGxvdFVuaXQuYXhpc1guZGF0YUluZm87XG5cdHZhciBkYXRhUG9pbnRYLCBkYXRhUG9pbnRZLCBkYXRhUG9pbnRZTWluLCBkYXRhUG9pbnRZTWF4O1xuXHR2YXIgaXNEYXRlVGltZSA9IGZhbHNlO1xuXG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW3Bsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdXTtcblx0XHR2YXIgaSA9IDA7XG5cdFx0dmFyIGlzRmlyc3REUEluVmlld1BvcnQgPSBmYWxzZTtcblx0XHR2YXIgaXNMYXN0RFBJblZpZXdQb3J0ID0gZmFsc2U7XG5cblx0XHRpZiAoZGF0YVNlcmllcy5heGlzUGxhY2VtZW50ID09PSBcIm5vcm1hbFwiIHx8IGRhdGFTZXJpZXMuYXhpc1BsYWNlbWVudCA9PT0gXCJ4eVN3YXBwZWRcIikge1xuXG5cdFx0XHR2YXIgcGxvdEFyZWFYTWluID0gdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNYLm5ld1ZpZXdwb3J0TWluaW11bSA/IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWC5uZXdWaWV3cG9ydE1pbmltdW0gOiAodGhpcy5fb3B0aW9ucy5heGlzWCAmJiB0aGlzLl9vcHRpb25zLmF4aXNYLnZpZXdwb3J0TWluaW11bSkgP1xuXHRcdFx0XHR0aGlzLl9vcHRpb25zLmF4aXNYLnZpZXdwb3J0TWluaW11bSA6ICh0aGlzLl9vcHRpb25zLmF4aXNYICYmIHRoaXMuX29wdGlvbnMuYXhpc1gubWluaW11bSkgPyB0aGlzLl9vcHRpb25zLmF4aXNYLm1pbmltdW0gOiAtSW5maW5pdHk7XG5cblx0XHRcdHZhciBwbG90QXJlYVhNYXggPSB0aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1gubmV3Vmlld3BvcnRNYXhpbXVtID8gdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNYLm5ld1ZpZXdwb3J0TWF4aW11bSA6ICh0aGlzLl9vcHRpb25zLmF4aXNYICYmIHRoaXMuX29wdGlvbnMuYXhpc1gudmlld3BvcnRNYXhpbXVtKSA/XG5cdFx0XHRcdHRoaXMuX29wdGlvbnMuYXhpc1gudmlld3BvcnRNYXhpbXVtIDogKHRoaXMuX29wdGlvbnMuYXhpc1ggJiYgdGhpcy5fb3B0aW9ucy5heGlzWC5tYXhpbXVtKSA/IHRoaXMuX29wdGlvbnMuYXhpc1gubWF4aW11bSA6IEluZmluaXR5O1xuXHRcdH1cblxuXG5cdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54ICYmIGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54LmdldFRpbWUgfHwgZGF0YVNlcmllcy54VmFsdWVUeXBlID09PSBcImRhdGVUaW1lXCIpIHtcblx0XHRcdGlzRGF0ZVRpbWUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhU2VyaWVzLmRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0aWYgKHR5cGVvZiBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueCA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueCA9IGk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKSB7XG5cdFx0XHRcdGlzRGF0ZVRpbWUgPSB0cnVlO1xuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpOy8vZGF0YVBvaW50WCBpcyB1c2VkIHNvIHRoYXQgZ2V0VGltZSBpcyBjYWxsZWQgb25seSBvbmNlIGluIGNhc2Ugb2YgZGF0ZVRpbWUgdmFsdWVzXG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGRhdGFQb2ludFggPSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueDtcblxuXHRcdFx0ZGF0YVBvaW50WSA9IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS55O1xuXG5cdFx0XHRpZiAoZGF0YVBvaW50WSAmJiBkYXRhUG9pbnRZLmxlbmd0aCkge1xuXHRcdFx0XHRkYXRhUG9pbnRZTWluID0gTWF0aC5taW4uYXBwbHkobnVsbCwgZGF0YVBvaW50WSk7XG5cdFx0XHRcdGRhdGFQb2ludFlNYXggPSBNYXRoLm1heC5hcHBseShudWxsLCBkYXRhUG9pbnRZKTtcblx0XHRcdH1cblxuXG5cdFx0XHRpZiAoZGF0YVBvaW50WCA8IGF4aXNYRGF0YUluZm8ubWluKVxuXHRcdFx0XHRheGlzWERhdGFJbmZvLm1pbiA9IGRhdGFQb2ludFg7XG5cdFx0XHRpZiAoZGF0YVBvaW50WCA+IGF4aXNYRGF0YUluZm8ubWF4KVxuXHRcdFx0XHRheGlzWERhdGFJbmZvLm1heCA9IGRhdGFQb2ludFg7XG5cblx0XHRcdGlmIChkYXRhUG9pbnRZTWluIDwgYXhpc1lEYXRhSW5mby5taW4pXG5cdFx0XHRcdGF4aXNZRGF0YUluZm8ubWluID0gZGF0YVBvaW50WU1pbjtcblxuXHRcdFx0aWYgKGRhdGFQb2ludFlNYXggPiBheGlzWURhdGFJbmZvLm1heClcblx0XHRcdFx0YXhpc1lEYXRhSW5mby5tYXggPSBkYXRhUG9pbnRZTWF4O1xuXG5cblx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHR2YXIgeERpZmYgPSBkYXRhUG9pbnRYIC0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2kgLSAxXS54O1xuXHRcdFx0XHR4RGlmZiA8IDAgJiYgKHhEaWZmID0geERpZmYgKiAtMSk7IC8vSWYgQ29uZGl0aW9uIHNob3J0Y3V0XG5cblx0XHRcdFx0aWYgKGF4aXNYRGF0YUluZm8ubWluRGlmZiA+IHhEaWZmICYmIHhEaWZmICE9PSAwKSB7XG5cdFx0XHRcdFx0YXhpc1hEYXRhSW5mby5taW5EaWZmID0geERpZmY7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WVswXSAhPT0gbnVsbCAmJiBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaSAtIDFdLnlbMF0gIT09IG51bGwpIHtcblx0XHRcdFx0XHR2YXIgeURpZmYgPSBkYXRhUG9pbnRZWzBdIC0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2kgLSAxXS55WzBdO1xuXHRcdFx0XHRcdHlEaWZmIDwgMCAmJiAoeURpZmYgPSB5RGlmZiAqIC0xKTsgLy9JZiBDb25kaXRpb24gc2hvcnRjdXRcblxuXHRcdFx0XHRcdGlmIChheGlzWURhdGFJbmZvLm1pbkRpZmYgPiB5RGlmZiAmJiB5RGlmZiAhPT0gMCkge1xuXHRcdFx0XHRcdFx0YXhpc1lEYXRhSW5mby5taW5EaWZmID0geURpZmY7XG5cdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhpcyBzZWN0aW9uIG1ha2VzIHN1cmUgdGhhdCBwYXJ0aWFsbHkgdmlzaWJsZSBkYXRhUG9pbnRzIGFyZSBpbmNsdWRlZCBpbiB0aGUgYmVnaW5pbmdcblx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdEFyZWFYTWluICYmICFpc0ZpcnN0RFBJblZpZXdQb3J0KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fSBlbHNlIGlmICghaXNGaXJzdERQSW5WaWV3UG9ydCkge1xuXHRcdFx0XHRpc0ZpcnN0RFBJblZpZXdQb3J0ID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoaSA+IDApIHtcblx0XHRcdFx0XHRpIC09IDI7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhpcyBzZWN0aW9uIG1ha2VzIHN1cmUgdGhhdCBwYXJ0aWFsbHkgdmlzaWJsZSBkYXRhUG9pbnRzIGFyZSBpbmNsdWRlZCBhdCB0aGUgZW5kXG5cdFx0XHRpZiAoZGF0YVBvaW50WCA+IHBsb3RBcmVhWE1heCAmJiAhaXNMYXN0RFBJblZpZXdQb3J0KSB7XG5cdFx0XHRcdGlzTGFzdERQSW5WaWV3UG9ydCA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFQb2ludFggPiBwbG90QXJlYVhNYXggJiYgaXNMYXN0RFBJblZpZXdQb3J0KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLmxhYmVsKVxuXHRcdFx0XHRwbG90VW5pdC5heGlzWC5sYWJlbHNbZGF0YVBvaW50WF0gPSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ubGFiZWw7XG5cblxuXHRcdFx0aWYgKGRhdGFQb2ludFggPCBheGlzWERhdGFJbmZvLnZpZXdQb3J0TWluKVxuXHRcdFx0XHRheGlzWERhdGFJbmZvLnZpZXdQb3J0TWluID0gZGF0YVBvaW50WDtcblx0XHRcdGlmIChkYXRhUG9pbnRYID4gYXhpc1hEYXRhSW5mby52aWV3UG9ydE1heClcblx0XHRcdFx0YXhpc1hEYXRhSW5mby52aWV3UG9ydE1heCA9IGRhdGFQb2ludFg7XG5cblx0XHRcdGlmIChkYXRhUG9pbnRZID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKGRhdGFQb2ludFlNaW4gPCBheGlzWURhdGFJbmZvLnZpZXdQb3J0TWluKVxuXHRcdFx0XHRheGlzWURhdGFJbmZvLnZpZXdQb3J0TWluID0gZGF0YVBvaW50WU1pbjtcblx0XHRcdGlmIChkYXRhUG9pbnRZTWF4ID4gYXhpc1lEYXRhSW5mby52aWV3UG9ydE1heClcblx0XHRcdFx0YXhpc1lEYXRhSW5mby52aWV3UG9ydE1heCA9IGRhdGFQb2ludFlNYXg7XG5cdFx0fVxuXG5cdFx0dGhpcy5wbG90SW5mby5heGlzWFZhbHVlVHlwZSA9IGRhdGFTZXJpZXMueFZhbHVlVHlwZSA9IGlzRGF0ZVRpbWUgPyBcImRhdGVUaW1lXCIgOiBcIm51bWJlclwiO1xuXHR9XG5cblx0Ly90aGlzLmRhdGFQb2ludHMuc29ydChjb21wYXJlRGF0YVBvaW50WCk7XG5cdC8vdGhpcy5kYXRhUG9pbnRzLnNvcnQoZnVuY3Rpb24gKGRhdGFQb2ludDEsIGRhdGFQb2ludDIpIHsgcmV0dXJuIGRhdGFQb2ludDEueCAtIGRhdGFQb2ludDIueDsgfSk7XG59XG5cbi8vZ2V0Q2xvc2VzdCByZXR1cm5zIG9iamVjdHMgbmVhcmJ5IGFuZCBoZW5jZSBzaG91bGRuJ3QgYmUgdXNlZCBmb3IgZXZlbnRzIGxpa2UgY2xpY2ssIG1vdXNlb3ZlciwgbW91c2Vtb3ZlLCBldGMgd2hpY2ggcmVxdWlyZSBvYmplY3QgdGhhdCBpcyBleGFjdGx5IHVuZGVyIHRoZSBtb3VzZS5cbkNoYXJ0LnByb3RvdHlwZS5nZXREYXRhUG9pbnRBdFhZID0gZnVuY3Rpb24gKG1vdXNlWCwgbW91c2VZLCBnZXRDbG9zZXN0KSB7XG5cblx0Z2V0Q2xvc2VzdCA9IGdldENsb3Nlc3QgfHwgZmFsc2U7XG5cdHZhciByZXN1bHRzID0gW107XG5cblx0Zm9yICh2YXIgaSA9IHRoaXMuX2RhdGFJblJlbmRlcmVkT3JkZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuX2RhdGFJblJlbmRlcmVkT3JkZXJbaV07XG5cblx0XHR2YXIgcmVzdWx0ID0gbnVsbDtcblxuXHRcdHJlc3VsdCA9IGRhdGFTZXJpZXMuZ2V0RGF0YVBvaW50QXRYWShtb3VzZVgsIG1vdXNlWSwgZ2V0Q2xvc2VzdCk7XG5cdFx0aWYgKHJlc3VsdClcblx0XHRcdHJlc3VsdHMucHVzaChyZXN1bHQpO1xuXHR9XG5cblx0dmFyIGNsb3Nlc3RSZXN1bHQgPSBudWxsO1xuXHR2YXIgb25seUxpbmVBcmVhVHlwZXMgPSBmYWxzZTtcblxuXHRmb3IgKHZhciBtID0gMDsgbSA8IHJlc3VsdHMubGVuZ3RoOyBtKyspIHtcblxuXHRcdGlmIChyZXN1bHRzW21dLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJsaW5lXCIgfHwgcmVzdWx0c1ttXS5kYXRhU2VyaWVzLnR5cGUgPT09IFwic3RlcExpbmVcIiB8fCByZXN1bHRzW21dLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJhcmVhXCIgfHwgcmVzdWx0c1ttXS5kYXRhU2VyaWVzLnR5cGUgPT09IFwic3RlcEFyZWFcIikge1xuXHRcdFx0dmFyIG1hcmtlclNpemUgPSBnZXRQcm9wZXJ0eShcIm1hcmtlclNpemVcIiwgcmVzdWx0c1ttXS5kYXRhUG9pbnQsIHJlc3VsdHNbbV0uZGF0YVNlcmllcykgfHwgODtcblx0XHRcdGlmIChyZXN1bHRzW21dLmRpc3RhbmNlIDw9IG1hcmtlclNpemUgLyAyKSB7XG5cdFx0XHRcdG9ubHlMaW5lQXJlYVR5cGVzID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChtID0gMDsgbSA8IHJlc3VsdHMubGVuZ3RoOyBtKyspIHtcblxuXHRcdGlmIChvbmx5TGluZUFyZWFUeXBlcyAmJiByZXN1bHRzW21dLmRhdGFTZXJpZXMudHlwZSAhPT0gXCJsaW5lXCIgJiYgcmVzdWx0c1ttXS5kYXRhU2VyaWVzLnR5cGUgIT09IFwic3RlcExpbmVcIiAmJiByZXN1bHRzW21dLmRhdGFTZXJpZXMudHlwZSAhPT0gXCJhcmVhXCIgJiYgcmVzdWx0c1ttXS5kYXRhU2VyaWVzLnR5cGUgIT09IFwic3RlcEFyZWFcIilcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0aWYgKCFjbG9zZXN0UmVzdWx0KSB7XG5cdFx0XHRjbG9zZXN0UmVzdWx0ID0gcmVzdWx0c1ttXTtcblx0XHR9IGVsc2UgaWYgKHJlc3VsdHNbbV0uZGlzdGFuY2UgPD0gY2xvc2VzdFJlc3VsdC5kaXN0YW5jZSkge1xuXHRcdFx0Y2xvc2VzdFJlc3VsdCA9IHJlc3VsdHNbbV07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNsb3Nlc3RSZXN1bHQ7XG59XG5cbkNoYXJ0LnByb3RvdHlwZS5nZXRPYmplY3RBdFhZID0gZnVuY3Rpb24gKG1vdXNlWCwgbW91c2VZLCBnZXRDbG9zZXN0KSB7XG5cdGdldENsb3Nlc3QgPSBnZXRDbG9zZXN0IHx8IGZhbHNlO1xuXG5cdHZhciBpZCA9IG51bGw7XG5cblx0dmFyIGRhdGFQb2ludEluZm8gPSB0aGlzLmdldERhdGFQb2ludEF0WFkobW91c2VYLCBtb3VzZVksIGdldENsb3Nlc3QpO1xuXG5cdGlmIChkYXRhUG9pbnRJbmZvKSB7XG5cdFx0aWQgPSBkYXRhUG9pbnRJbmZvLmRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2RhdGFQb2ludEluZm8uZGF0YVBvaW50SW5kZXhdO1xuXHR9IGVsc2UgaWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7Ly9JRTkrXG5cdFx0aWQgPSBnZXRPYmplY3RJZChtb3VzZVgsIG1vdXNlWSwgdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4KTtcblx0fVxuXHRlbHNlIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVnZW5kLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHRoaXMubGVnZW5kLml0ZW1zW2ldO1xuXG5cdFx0XHRpZiAobW91c2VYID49IGl0ZW0ueDEgJiYgbW91c2VYIDw9IGl0ZW0ueDIgJiYgbW91c2VZID49IGl0ZW0ueTEgJiYgbW91c2VZIDw9IGl0ZW0ueTIpIHtcblx0XHRcdFx0aWQgPSBpdGVtLmlkO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBpZDtcbn1cblxuLy8vIDxzdW1tYXJ5PkNhbGN1bGF0ZXMgRm9udCBTaXplIGJhc2VkIG9uIHN0YW5kYXJkU2l6ZSBhbmQgQ2hhcnQgU2l6ZTwvc3VtbWFyeT5cbi8vLyA8cGFyYW0gbmFtZT1cInN0YW5kYXJkU2l6ZVwiIHR5cGU9XCJOdW1iZXJcIj5TdGFuZGFyZCBmb250IHNpemUgZm9yIGEgQ2hhcnQgd2l0aCBtaW4od2lkdGgsaGVpZ2h0KSA9IDQwMHB4PC9wYXJhbT5cbi8vLyA8cmV0dXJucyB0eXBlPVwiTnVtYmVyXCI+VGhlIGFyZWEuPC9yZXR1cm5zPlxuQ2hhcnQucHJvdG90eXBlLmdldEF1dG9Gb250U2l6ZSA9IGZ1bmN0aW9uIChzdGFuZGFyZFNpemUsIHdpZHRoLCBoZWlnaHQpIHtcblxuXHR3aWR0aCA9IHdpZHRoIHx8IHRoaXMud2lkdGg7XG5cdGhlaWdodCA9IGhlaWdodCB8fCB0aGlzLmhlaWdodDtcblxuXHR2YXIgZm9udFNpemVTY2FsZUZhY3RvciA9IHN0YW5kYXJkU2l6ZSAvIDQwMDtcblxuXHRyZXR1cm4gTWF0aC5yb3VuZChNYXRoLm1pbih0aGlzLndpZHRoLCB0aGlzLmhlaWdodCkgKiBmb250U2l6ZVNjYWxlRmFjdG9yKTtcbn1cblxuLy8jcmVnaW9uIEV2ZW50c1xuXG5DaGFydC5wcm90b3R5cGUucmVzZXRPdmVybGF5ZWRDYW52YXMgPSBmdW5jdGlvbiAoKSB7XG5cdC8vdmFyIHdpZHRoID0gdGhpcy5vdmVybGFpZENhbnZhcy53aWR0aDtcblx0Ly90aGlzLm92ZXJsYWlkQ2FudmFzLndpZHRoID0gMDtcblx0Ly90aGlzLm92ZXJsYWlkQ2FudmFzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMub3ZlcmxhaWRDYW52YXNDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn1cblxuQ2hhcnQucHJvdG90eXBlLmNsZWFyQ2FudmFzID0gZnVuY3Rpb24gKCkge1xuXHR0aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG5cdGlmICh0aGlzLmJhY2tncm91bmRDb2xvcikge1xuXHRcdHRoaXMuY3R4LmZpbGxTdHlsZSA9IHRoaXMuYmFja2dyb3VuZENvbG9yO1xuXHRcdHRoaXMuY3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblx0fVxufVxuXG5DaGFydC5wcm90b3R5cGUuYXR0YWNoRXZlbnQgPSBmdW5jdGlvbiAocGFyYW0pIHtcblx0dGhpcy5fZXZlbnRzLnB1c2gocGFyYW0pO1xufVxuXG5DaGFydC5wcm90b3R5cGUuX3RvdWNoRXZlbnRIYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG5cdGlmICghZXYuY2hhbmdlZFRvdWNoZXMgfHwgIXRoaXMuaW50ZXJhY3Rpdml0eUVuYWJsZWQpXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBtb3VzZUV2ZW50cyA9IFtdO1xuXHR2YXIgdG91Y2hlcyA9IGV2LmNoYW5nZWRUb3VjaGVzO1xuXHR2YXIgZmlyc3QgPSB0b3VjaGVzID8gdG91Y2hlc1swXSA6IGV2O1xuXHR2YXIgdG91Y2hDdXJyZW50Q29vcmRpbmF0ZXMgPSBudWxsO1xuXG5cdC8vd2luZG93LmNvbnNvbGUubG9nKHRvdWNoZXMubGVuZ3RoKTtcblxuXHRzd2l0Y2ggKGV2LnR5cGUpIHtcblx0XHRjYXNlIFwidG91Y2hzdGFydFwiOiBjYXNlIFwiTVNQb2ludGVyRG93blwiOlxuXHRcdFx0bW91c2VFdmVudHMgPSBbXCJtb3VzZW1vdmVcIiwgXCJtb3VzZWRvd25cIl07XG5cdFx0XHR0aGlzLl9sYXN0VG91Y2hEYXRhID0gZ2V0TW91c2VDb29yZGluYXRlcyhmaXJzdCk7XG5cdFx0XHR0aGlzLl9sYXN0VG91Y2hEYXRhLnRpbWUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRvdWNobW92ZVwiOiBjYXNlIFwiTVNQb2ludGVyTW92ZVwiOiBtb3VzZUV2ZW50cyA9IFtcIm1vdXNlbW92ZVwiXTsgYnJlYWs7XG5cdFx0Y2FzZSBcInRvdWNoZW5kXCI6IGNhc2UgXCJNU1BvaW50ZXJVcFwiOiBtb3VzZUV2ZW50cyA9ICh0aGlzLl9sYXN0VG91Y2hFdmVudFR5cGUgPT09IFwidG91Y2hzdGFydFwiIHx8IHRoaXMuX2xhc3RUb3VjaEV2ZW50VHlwZSA9PT0gXCJNU1BvaW50ZXJEb3duXCIpID8gW1wibW91c2V1cFwiLCBcImNsaWNrXCJdIDogW1wibW91c2V1cFwiXTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6IHJldHVybjtcblx0fVxuXG5cdGlmICh0b3VjaGVzICYmIHRvdWNoZXMubGVuZ3RoID4gMSkgcmV0dXJuO1xuXG5cblx0dG91Y2hDdXJyZW50Q29vcmRpbmF0ZXMgPSBnZXRNb3VzZUNvb3JkaW5hdGVzKGZpcnN0KTtcblx0dG91Y2hDdXJyZW50Q29vcmRpbmF0ZXMudGltZSA9IG5ldyBEYXRlKCk7XG5cdHRyeSB7XG5cdFx0dmFyIGR5ID0gdG91Y2hDdXJyZW50Q29vcmRpbmF0ZXMueSAtIHRoaXMuX2xhc3RUb3VjaERhdGEueTtcblx0XHR2YXIgZHggPSB0b3VjaEN1cnJlbnRDb29yZGluYXRlcy54IC0gdGhpcy5fbGFzdFRvdWNoRGF0YS54O1xuXHRcdHZhciBkdCA9IHRvdWNoQ3VycmVudENvb3JkaW5hdGVzLnRpbWUgLSB0aGlzLl9sYXN0VG91Y2hEYXRhLnRpbWU7XG5cblx0XHRpZiAoTWF0aC5hYnMoZHkpID4gMTUgJiYgKCEhdGhpcy5fbGFzdFRvdWNoRGF0YS5zY3JvbGwgfHwgZHQgPCAyMDApKSB7XG5cdFx0XHQvL3RoaXMuX2xhc3RUb3VjaERhdGEueSA9IHRvdWNoQ3VycmVudENvb3JkaW5hdGVzLnk7XG5cdFx0XHR0aGlzLl9sYXN0VG91Y2hEYXRhLnNjcm9sbCA9IHRydWU7XG5cblx0XHRcdHZhciB3aW4gPSB3aW5kb3cucGFyZW50IHx8IHdpbmRvdztcblx0XHRcdGlmICh3aW4gJiYgd2luLnNjcm9sbEJ5KVxuXHRcdFx0XHR3aW4uc2Nyb2xsQnkoMCwgLWR5KTtcblx0XHR9XG5cdH0gY2F0Y2ggKGUpIHsgfTtcblxuXHR0aGlzLl9sYXN0VG91Y2hFdmVudFR5cGUgPSBldi50eXBlO1xuXG5cdGlmICghIXRoaXMuX2xhc3RUb3VjaERhdGEuc2Nyb2xsICYmIHRoaXMuem9vbUVuYWJsZWQpIHtcblx0XHRpZiAodGhpcy5pc0RyYWcpXG5cdFx0XHR0aGlzLnJlc2V0T3ZlcmxheWVkQ2FudmFzKCk7XG5cblx0XHR0aGlzLmlzRHJhZyA9IGZhbHNlO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbW91c2VFdmVudHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdHZhciB0eXBlID0gbW91c2VFdmVudHNbaV07XG5cdFx0dmFyIHNpbXVsYXRlZEV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJNb3VzZUV2ZW50XCIpO1xuXHRcdHNpbXVsYXRlZEV2ZW50LmluaXRNb3VzZUV2ZW50KHR5cGUsIHRydWUsIHRydWUsIHdpbmRvdywgMSxcblx0XHRcdFx0XHRcdFx0XHQgIGZpcnN0LnNjcmVlblgsIGZpcnN0LnNjcmVlblksXG5cdFx0XHRcdFx0XHRcdFx0ICBmaXJzdC5jbGllbnRYLCBmaXJzdC5jbGllbnRZLCBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHQgIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpO1xuXG5cdFx0Zmlyc3QudGFyZ2V0LmRpc3BhdGNoRXZlbnQoc2ltdWxhdGVkRXZlbnQpO1xuXG5cdFx0aWYgKGV2LnByZXZlbnRNYW5pcHVsYXRpb24pIHtcblx0XHRcdC8vYWxlcnQoXCJwcmV2ZW50TWFuaXB1bGF0aW9uXCIpO1xuXHRcdFx0ZXYucHJldmVudE1hbmlwdWxhdGlvbigpO1xuXHRcdH1cblxuXHRcdGlmIChldi5wcmV2ZW50RGVmYXVsdCkge1xuXHRcdFx0Ly9hbGVydChcInByZXZlbnREZWZhdWx0XCIpO1xuXHRcdFx0ZXYucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH1cbn1cblxuQ2hhcnQucHJvdG90eXBlLl9kaXNwYXRjaFJhbmdlRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCB0cmlnZ2VyU291cmNlKSB7XG5cdHZhciBldmVudFBhcmFtZXRlciA9IHt9O1xuXG5cdGV2ZW50UGFyYW1ldGVyLmNoYXJ0ID0gdGhpcy5fcHVibGljQ2hhcnRSZWZlcmVuY2U7XG5cdGV2ZW50UGFyYW1ldGVyLnR5cGUgPSBldmVudE5hbWU7XG5cdGV2ZW50UGFyYW1ldGVyLnRyaWdnZXIgPSB0cmlnZ2VyU291cmNlO1xuXG5cdHZhciBheGVzID0gW107XG5cblx0aWYgKHRoaXMuYXhpc1gpXG5cdFx0YXhlcy5wdXNoKFwiYXhpc1hcIik7XG5cdGlmICh0aGlzLmF4aXNZKVxuXHRcdGF4ZXMucHVzaChcImF4aXNZXCIpO1xuXHRpZiAodGhpcy5heGlzWTIpXG5cdFx0YXhlcy5wdXNoKFwiYXhpc1kyXCIpO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYXhlcy5sZW5ndGg7IGkrKykge1xuXHRcdGV2ZW50UGFyYW1ldGVyW2F4ZXNbaV1dID0ge1xuXHRcdFx0dmlld3BvcnRNaW5pbXVtOiB0aGlzW2F4ZXNbaV1dLnNlc3Npb25WYXJpYWJsZXMubmV3Vmlld3BvcnRNaW5pbXVtLFxuXHRcdFx0dmlld3BvcnRNYXhpbXVtOiB0aGlzW2F4ZXNbaV1dLnNlc3Npb25WYXJpYWJsZXMubmV3Vmlld3BvcnRNYXhpbXVtXG5cdFx0fVxuXHR9XG5cblx0dGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50TmFtZSwgZXZlbnRQYXJhbWV0ZXIsIHRoaXMuX3B1YmxpY0NoYXJ0UmVmZXJlbmNlKTtcbn1cblxuQ2hhcnQucHJvdG90eXBlLl9tb3VzZUV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uIChldikge1xuXG5cdGlmICghdGhpcy5pbnRlcmFjdGl2aXR5RW5hYmxlZClcblx0XHRyZXR1cm47XG5cblx0aWYgKHRoaXMuX2lnbm9yZU5leHRFdmVudCkge1xuXHRcdHRoaXMuX2lnbm9yZU5leHRFdmVudCA9IGZhbHNlO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIHN0b3AgcGFubmluZyBhbmQgem9vbWluZyBzbyB3ZSBjYW4gZHJhd1xuXHRpZiAoZXYucHJldmVudE1hbmlwdWxhdGlvbikge1xuXHRcdC8vYWxlcnQoXCJwcmV2ZW50TWFuaXB1bGF0aW9uXCIpO1xuXHRcdGV2LnByZXZlbnRNYW5pcHVsYXRpb24oKTtcblx0fVxuXG5cdC8vIHdlIGFyZSBoYW5kbGluZyB0aGlzIGV2ZW50XG5cdGlmIChldi5wcmV2ZW50RGVmYXVsdCkge1xuXHRcdC8vYWxlcnQoXCJwcmV2ZW50RGVmYXVsdFwiKTtcblx0XHRldi5wcmV2ZW50RGVmYXVsdCgpO1xuXHR9XG5cblx0Ly9JRTgtIHVzZXMgc3JjRWxlbWVudCBpbnN0ZWFkIG9mIHRhcmdldC4gU28gaW5zdGVhZCBvZiBjaGVja2luZyB0aGlzIGNvbmRpdGlvbiBldmVyeXRpbWUsIGl0cyBiZXR0ZXIgdG8gY3JlYXRlIGEgcmVmZXJlbmNlIGNhbGxlZCB0YXJnZXQuXG5cdGlmICh0eXBlb2YgKGV2LnRhcmdldCkgPT09IFwidW5kZWZpbmVkXCIgJiYgZXYuc3JjRWxlbWVudClcblx0XHRldi50YXJnZXQgPSBldi5zcmNFbGVtZW50O1xuXG5cdC8vY29uc29sZS5sb2coZXYudHlwZSk7XG5cblx0dmFyIHh5ID0gZ2V0TW91c2VDb29yZGluYXRlcyhldik7XG5cdHZhciB0eXBlID0gZXYudHlwZTtcblx0dmFyIGV2ZW50UGFyYW07XG5cdHZhciByaWdodGNsaWNrO1xuXG5cdGlmICghZXYpIHZhciBlID0gd2luZG93LmV2ZW50O1xuXHRpZiAoZXYud2hpY2gpIHJpZ2h0Y2xpY2sgPSAoZXYud2hpY2ggPT0gMyk7XG5cdGVsc2UgaWYgKGV2LmJ1dHRvbikgcmlnaHRjbGljayA9IChldi5idXR0b24gPT0gMik7XG5cblx0Ly93aW5kb3cuY29uc29sZS5sb2codHlwZSArIFwiIC0tPiB4OiBcIiArIHh5LnggKyBcIjsgeTpcIiArIHh5LnkpO1xuXG5cdC8vaWYgKHR5cGUgPT09IFwibW91c2VvdXRcIikge1xuXHQvLyAgICB0aGlzLl90b29sVGlwLmhpZGUoKTtcblx0Ly99XG5cblx0aWYgKGlzRGVidWdNb2RlICYmIHdpbmRvdy5jb25zb2xlKSB7XG5cdFx0d2luZG93LmNvbnNvbGUubG9nKHR5cGUgKyBcIiAtLT4geDogXCIgKyB4eS54ICsgXCI7IHk6XCIgKyB4eS55KTtcblx0XHRpZiAocmlnaHRjbGljaylcblx0XHRcdHdpbmRvdy5jb25zb2xlLmxvZyhldi53aGljaCk7XG5cblx0XHRpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIpXG5cdFx0XHR3aW5kb3cuY29uc29sZS5sb2coXCJtb3VzZXVwXCIpO1xuXHR9XG5cblx0aWYgKHJpZ2h0Y2xpY2spXG5cdFx0cmV0dXJuO1xuXG5cdC8vaWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJ4eVN3YXBwZWRcIikge1xuXHQvLyAgICAvL3ZhciB0ZW1wID0geHkueDtcblx0Ly8gICAgLy94eS54ID0geHkueTtcblx0Ly8gICAgLy94eS55ID0gdGVtcDtcblx0Ly8gICAgeHkgPSB7eDogeHkueSwgeTogeHkueH07XG5cdC8vfVxuXG5cdGlmIChDaGFydC5jYXB0dXJlZEV2ZW50UGFyYW0pIHtcblx0XHRldmVudFBhcmFtID0gQ2hhcnQuY2FwdHVyZWRFdmVudFBhcmFtO1xuXG5cdFx0aWYgKHR5cGUgPT09IFwibW91c2V1cFwiKSB7XG5cdFx0XHRDaGFydC5jYXB0dXJlZEV2ZW50UGFyYW0gPSBudWxsO1xuXG5cdFx0XHRpZiAoZXZlbnRQYXJhbS5jaGFydC5vdmVybGFpZENhbnZhcy5yZWxlYXNlQ2FwdHVyZSlcblx0XHRcdFx0ZXZlbnRQYXJhbS5jaGFydC5vdmVybGFpZENhbnZhcy5yZWxlYXNlQ2FwdHVyZSgpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGV2ZW50UGFyYW0uY2hhcnQuX21vdXNlRXZlbnRIYW5kbGVyLCBmYWxzZSk7XG5cblx0XHR9XG5cblx0XHRpZiAoZXZlbnRQYXJhbS5oYXNPd25Qcm9wZXJ0eSh0eXBlKSlcblx0XHRcdGV2ZW50UGFyYW1bdHlwZV0uY2FsbChldmVudFBhcmFtLmNvbnRleHQsIHh5LngsIHh5LnkpO1xuXG5cblxuXHR9XG5cdGVsc2UgaWYgKHRoaXMuX2V2ZW50cykge1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9ldmVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICghdGhpcy5fZXZlbnRzW2ldLmhhc093blByb3BlcnR5KHR5cGUpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0ZXZlbnRQYXJhbSA9IHRoaXMuX2V2ZW50c1tpXTtcblx0XHRcdHZhciBib3VuZHMgPSBldmVudFBhcmFtLmJvdW5kcztcblxuXHRcdFx0aWYgKHh5LnggPj0gYm91bmRzLngxICYmIHh5LnggPD0gYm91bmRzLngyICYmIHh5LnkgPj0gYm91bmRzLnkxICYmIHh5LnkgPD0gYm91bmRzLnkyKSB7XG5cdFx0XHRcdGV2ZW50UGFyYW1bdHlwZV0uY2FsbChldmVudFBhcmFtLmNvbnRleHQsIHh5LngsIHh5LnkpO1xuXG5cdFx0XHRcdGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmIGV2ZW50UGFyYW0uY2FwdHVyZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdENoYXJ0LmNhcHR1cmVkRXZlbnRQYXJhbSA9IGV2ZW50UGFyYW07XG5cblx0XHRcdFx0XHRpZiAodGhpcy5vdmVybGFpZENhbnZhcy5zZXRDYXB0dXJlKVxuXHRcdFx0XHRcdFx0dGhpcy5vdmVybGFpZENhbnZhcy5zZXRDYXB0dXJlKCk7XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMuX21vdXNlRXZlbnRIYW5kbGVyLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHQvL2FkZEV2ZW50KGRvY3VtZW50LmJvZHksIFwibW91c2V1cFwiLCB0aGlzLl9tb3VzZUV2ZW50SGFuZGxlcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiKSB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50UGFyYW0uY2hhcnQub3ZlcmxhaWRDYW52YXMucmVsZWFzZUNhcHR1cmUpXG5cdFx0XHRcdFx0XHRldmVudFBhcmFtLmNoYXJ0Lm92ZXJsYWlkQ2FudmFzLnJlbGVhc2VDYXB0dXJlKCk7XG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0ZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCB0aGlzLl9tb3VzZUV2ZW50SGFuZGxlciwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGV2ZW50UGFyYW0gPSBudWxsO1xuXHRcdH1cblxuXHRcdGlmIChldmVudFBhcmFtICYmIGV2ZW50UGFyYW0uY3Vyc29yKSB7XG5cdFx0XHRldi50YXJnZXQuc3R5bGUuY3Vyc29yID0gZXZlbnRQYXJhbS5jdXJzb3I7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHRcdGV2LnRhcmdldC5zdHlsZS5jdXJzb3IgPSB0aGlzLl9kZWZhdWx0Q3Vyc29yO1xuXG5cdFx0Ly9ldmVudFBhcmFtID1cblx0fVxuXG5cdGlmICh0aGlzLl90b29sVGlwICYmIHRoaXMuX3Rvb2xUaXAuZW5hYmxlZCkge1xuXG5cdFx0dmFyIHBsb3RBcmVhID0gdGhpcy5wbG90QXJlYTtcblxuXHRcdGlmICh4eS54IDwgcGxvdEFyZWEueDEgfHwgeHkueCA+IHBsb3RBcmVhLngyIHx8IHh5LnkgPCBwbG90QXJlYS55MSB8fCB4eS55ID4gcGxvdEFyZWEueTIpXG5cdFx0XHR0aGlzLl90b29sVGlwLmhpZGUoKTtcblx0fVxuXG5cblx0aWYgKCghdGhpcy5pc0RyYWcgfHwgIXRoaXMuem9vbUVuYWJsZWQpICYmIHRoaXMuX2V2ZW50TWFuYWdlcikge1xuXG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm1vdXNlRXZlbnRIYW5kbGVyKGV2KTtcblx0XHQvL3RoaXMuX3VwZGF0ZVRvb2xUaXAoZXYueCwgZXYueSk7XG5cdH1cblxuXHQvL2lmICh0aGlzLl90b29sVGlwLmVuYWJsZWQpXG5cdC8vICAgIHRoaXMuX3Rvb2xUaXAubW91c2VNb3ZlSGFuZGxlcihldi54LCBldi55KTtcbn1cblxuQ2hhcnQucHJvdG90eXBlLl9wbG90QXJlYU1vdXNlRG93biA9IGZ1bmN0aW9uICh4LCB5KSB7XG5cdHRoaXMuaXNEcmFnID0gdHJ1ZTtcblxuXHRpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ICE9PSBcIm5vbmVcIikge1xuXHRcdHRoaXMuZHJhZ1N0YXJ0UG9pbnQgPSB7IHg6IHgsIHk6IHkgfTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmRyYWdTdGFydFBvaW50ID0geyB4OiB4LCB5OiB5IH07XG5cdH1cbn1cblxuQ2hhcnQucHJvdG90eXBlLl9wbG90QXJlYU1vdXNlVXAgPSBmdW5jdGlvbiAoeCwgeSkge1xuXG5cdGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwibm9ybWFsXCIgfHwgdGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBcInh5U3dhcHBlZFwiKSB7XG5cdFx0aWYgKHRoaXMuaXNEcmFnKSB7XG5cdFx0XHR2YXIgZHJhZ0RlbHRhID0gMCxcblx0XHRcdFx0ZHJhZ0RlbHRhUFkgPSB5IC0gdGhpcy5kcmFnU3RhcnRQb2ludC55LFxuXHRcdFx0XHRkcmFnRGVsdGFQWCA9IHggLSB0aGlzLmRyYWdTdGFydFBvaW50LngsXG5cdFx0XHRcdHpvb21QWCA9IHRoaXMuem9vbVR5cGUuaW5kZXhPZihcInhcIikgPj0gMCwgLy9XaGV0aGVyIHRvIHpvb20gaG9yaXpvbnRhbGx5XG5cdFx0XHRcdHpvb21QWSA9IHRoaXMuem9vbVR5cGUuaW5kZXhPZihcInlcIikgPj0gMCwgLy9XaGV0aGVyIHRvIHpvb20gdmVydGljYWxseVxuXHRcdFx0XHRyZVJlbmRlciA9IGZhbHNlO1xuXG5cdFx0XHR0aGlzLnJlc2V0T3ZlcmxheWVkQ2FudmFzKCk7XG5cblx0XHRcdGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwieHlTd2FwcGVkXCIpIHtcblx0XHRcdFx0dmFyIHRlbXAgPSB6b29tUFk7XG5cdFx0XHRcdHpvb21QWSA9IHpvb21QWDtcblx0XHRcdFx0em9vbVBYID0gdGVtcDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMucGFuRW5hYmxlZCB8fCB0aGlzLnpvb21FbmFibGVkKSB7XG5cdFx0XHRcdGlmICh0aGlzLnBhbkVuYWJsZWQpIHtcblxuXHRcdFx0XHRcdHZhciBvdmVyZmxvdyA9IDA7XG5cblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2F4ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdHZhciBheGlzID0gdGhpcy5fYXhlc1tpXTtcblxuXHRcdFx0XHRcdFx0aWYgKGF4aXMudmlld3BvcnRNaW5pbXVtIDwgYXhpcy5taW5pbXVtKSB7XG5cblx0XHRcdFx0XHRcdFx0b3ZlcmZsb3cgPSBheGlzLm1pbmltdW0gLSBheGlzLnZpZXdwb3J0TWluaW11bTtcblxuXHRcdFx0XHRcdFx0XHRheGlzLnNlc3Npb25WYXJpYWJsZXMubmV3Vmlld3BvcnRNaW5pbXVtID0gYXhpcy52aWV3cG9ydE1pbmltdW0gKyBvdmVyZmxvdztcblx0XHRcdFx0XHRcdFx0YXhpcy5zZXNzaW9uVmFyaWFibGVzLm5ld1ZpZXdwb3J0TWF4aW11bSA9IGF4aXMudmlld3BvcnRNYXhpbXVtICsgb3ZlcmZsb3c7XG5cblx0XHRcdFx0XHRcdHJlUmVuZGVyID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYXhpcy52aWV3cG9ydE1heGltdW0gPiBheGlzLm1heGltdW0pIHtcblxuXHRcdFx0XHRcdFx0XHRvdmVyZmxvdyA9IGF4aXMudmlld3BvcnRNYXhpbXVtIC0gYXhpcy5tYXhpbXVtO1xuXHRcdFx0XHRcdFx0XHRheGlzLnNlc3Npb25WYXJpYWJsZXMubmV3Vmlld3BvcnRNaW5pbXVtID0gYXhpcy52aWV3cG9ydE1pbmltdW0gLSBvdmVyZmxvdztcblx0XHRcdFx0XHRcdFx0YXhpcy5zZXNzaW9uVmFyaWFibGVzLm5ld1ZpZXdwb3J0TWF4aW11bSA9IGF4aXMudmlld3BvcnRNYXhpbXVtIC0gb3ZlcmZsb3c7XG5cblx0XHRcdFx0XHRcdHJlUmVuZGVyID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoKCghem9vbVBYIHx8IE1hdGguYWJzKGRyYWdEZWx0YVBYKSA+IDIpICYmICghem9vbVBZIHx8IE1hdGguYWJzKGRyYWdEZWx0YVBZKSA+IDIpKSAmJiB0aGlzLnpvb21FbmFibGVkKSB7XG5cblx0XHRcdFx0XHRpZiAoIXRoaXMuZHJhZ1N0YXJ0UG9pbnQpXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0XHR2YXIgc2VsZWN0ZWRSZWdpb24gPSB7XG5cdFx0XHRcdFx0XHR4MTogem9vbVBYID8gdGhpcy5kcmFnU3RhcnRQb2ludC54IDogdGhpcy5wbG90QXJlYS54MSxcblx0XHRcdFx0XHRcdHkxOiB6b29tUFkgPyB0aGlzLmRyYWdTdGFydFBvaW50LnkgOiB0aGlzLnBsb3RBcmVhLnkxLFxuXHRcdFx0XHRcdFx0eDI6IHpvb21QWCA/IHggOiB0aGlzLnBsb3RBcmVhLngyLFxuXHRcdFx0XHRcdFx0eTI6IHpvb21QWSA/IHkgOiB0aGlzLnBsb3RBcmVhLnkyXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmIChNYXRoLmFicyhzZWxlY3RlZFJlZ2lvbi54MSAtIHNlbGVjdGVkUmVnaW9uLngyKSA+IDIgJiYgTWF0aC5hYnMoc2VsZWN0ZWRSZWdpb24ueTEgLSBzZWxlY3RlZFJlZ2lvbi55MikgPiAyKSB7XG5cblx0XHRcdFx0XHRcdGlmICh0aGlzLl96b29tUGFuVG9TZWxlY3RlZFJlZ2lvbihzZWxlY3RlZFJlZ2lvbi54MSwgc2VsZWN0ZWRSZWdpb24ueTEsIHNlbGVjdGVkUmVnaW9uLngyLCBzZWxlY3RlZFJlZ2lvbi55MikpIHtcblxuXHRcdFx0XHRcdFx0XHRyZVJlbmRlciA9IHRydWU7XG5cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocmVSZW5kZXIpIHtcblx0XHRcdFx0XHR0aGlzLl9pZ25vcmVOZXh0RXZlbnQgPSB0cnVlOy8vUmVxdWlyZWQgc28gdGhhdCBjbGljayBldmVudCBkb2Vzbid0IGZpcmUgYWZ0ZXIgem9vbWluZyBpbnRvIGEgc2VjdGlvbiBvZiB0aGUgY2hhcnQuXG5cblx0XHRcdFx0XHR0aGlzLl9kaXNwYXRjaFJhbmdlRXZlbnQoXCJyYW5nZUNoYW5naW5nXCIsIFwiem9vbVwiKTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlbmRlcigpO1xuXHRcdFx0XHRcdHRoaXMuX2Rpc3BhdGNoUmFuZ2VFdmVudChcInJhbmdlQ2hhbmdlZFwiLCBcInpvb21cIik7XG5cblx0XHRcdFx0XHRpZiAocmVSZW5kZXIgJiYgdGhpcy56b29tRW5hYmxlZCAmJiB0aGlzLl96b29tQnV0dG9uLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiKSB7XG5cdFx0XHRcdFx0c2hvdyh0aGlzLl96b29tQnV0dG9uLCB0aGlzLl9yZXNldEJ1dHRvbik7XG5cdFx0XHRcdFx0c2V0QnV0dG9uU3RhdGUodGhpcywgdGhpcy5fem9vbUJ1dHRvbiwgXCJwYW5cIik7XG5cdFx0XHRcdFx0c2V0QnV0dG9uU3RhdGUodGhpcywgdGhpcy5fcmVzZXRCdXR0b24sIFwicmVzZXRcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0fVxuXG5cdH1cblxuXHR0aGlzLmlzRHJhZyA9IGZhbHNlO1xufVxuXG5DaGFydC5wcm90b3R5cGUuX3Bsb3RBcmVhTW91c2VNb3ZlID0gZnVuY3Rpb24gKHgsIHkpIHtcblx0aWYgKHRoaXMuaXNEcmFnICYmIHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCAhPT0gXCJub25lXCIpIHtcblxuXHRcdHZhciBkcmFnRGVsdGFQWCA9IDAsXG5cdFx0XHRkcmFnRGVsdGFQWSA9IDAsXG5cdFx0XHRhbHBoYSA9IG51bGwsXG5cdFx0XHRzZWxlY3RlZFJlZ2lvbiA9IG51bGwsXG5cdFx0XHR6b29tUFggPSB0aGlzLnpvb21UeXBlLmluZGV4T2YoXCJ4XCIpID49IDAsIC8vV2hldGhlciB0byB6b29tIGhvcml6b250YWxseVxuXHRcdFx0em9vbVBZID0gdGhpcy56b29tVHlwZS5pbmRleE9mKFwieVwiKSA+PSAwLCAvL1doZXRoZXIgdG8gem9vbSB2ZXJ0aWNhbGx5XG5cdFx0XHRfdGhpcyA9IHRoaXM7XG5cblx0XHRpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBcInh5U3dhcHBlZFwiKSB7XG5cdFx0XHR2YXIgdGVtcCA9IHpvb21QWTtcblx0XHRcdHpvb21QWSA9IHpvb21QWDtcblx0XHRcdHpvb21QWCA9IHRlbXA7XG5cdFx0fVxuXG5cdFx0ZHJhZ0RlbHRhUFggPSB0aGlzLmRyYWdTdGFydFBvaW50LnggLSB4O1xuXHRcdGRyYWdEZWx0YVBZID0gdGhpcy5kcmFnU3RhcnRQb2ludC55IC0geTtcblxuXHRcdGlmIChNYXRoLmFicyhkcmFnRGVsdGFQWCkgPiAyICYmIE1hdGguYWJzKGRyYWdEZWx0YVBYKSA8IDggJiYgKHRoaXMucGFuRW5hYmxlZCB8fCB0aGlzLnpvb21FbmFibGVkKSkge1xuXHRcdFx0dGhpcy5fdG9vbFRpcC5oaWRlKCk7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5wYW5FbmFibGVkICYmICF0aGlzLnpvb21FbmFibGVkKSB7XG5cdFx0XHR0aGlzLl90b29sVGlwLm1vdXNlTW92ZUhhbmRsZXIoeCwgeSk7XG5cdFx0fVxuXG5cdFx0aWYgKCgoIXpvb21QWCB8fCBNYXRoLmFicyhkcmFnRGVsdGFQWCkgPiAyKSB8fCAoIXpvb21QWSB8fCBNYXRoLmFicyhkcmFnRGVsdGFQWSkgPiAyKSkgJiYgKHRoaXMucGFuRW5hYmxlZCB8fCB0aGlzLnpvb21FbmFibGVkKSkge1xuXHRcdFx0aWYgKHRoaXMucGFuRW5hYmxlZCkge1xuXG5cdFx0XHRcdHNlbGVjdGVkUmVnaW9uID1cblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR4MTogem9vbVBYID8gdGhpcy5wbG90QXJlYS54MSArIGRyYWdEZWx0YVBYIDogdGhpcy5wbG90QXJlYS54MSxcblx0XHRcdFx0XHRcdHkxOiB6b29tUFkgPyB0aGlzLnBsb3RBcmVhLnkxICsgZHJhZ0RlbHRhUFkgOiB0aGlzLnBsb3RBcmVhLnkxLFxuXHRcdFx0XHRcdFx0eDI6IHpvb21QWCA/IHRoaXMucGxvdEFyZWEueDIgKyBkcmFnRGVsdGFQWCA6IHRoaXMucGxvdEFyZWEueDIsXG5cdFx0XHRcdFx0XHR5Mjogem9vbVBZID8gdGhpcy5wbG90QXJlYS55MiArIGRyYWdEZWx0YVBZIDogdGhpcy5wbG90QXJlYS55MlxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKHRoaXMuX3pvb21QYW5Ub1NlbGVjdGVkUmVnaW9uKHNlbGVjdGVkUmVnaW9uLngxLCBzZWxlY3RlZFJlZ2lvbi55MSwgc2VsZWN0ZWRSZWdpb24ueDIsIHNlbGVjdGVkUmVnaW9uLnkyLCB0cnVlKSkge1xuXHRcdFx0XHRcdHRoaXMuX2Rpc3BhdGNoUmFuZ2VFdmVudChcInJhbmdlQ2hhbmdpbmdcIiwgXCJwYW5cIik7XG5cdFx0XHRcdFx0dGhpcy5yZW5kZXIoKTtcblx0XHRcdFx0XHR0aGlzLl9kaXNwYXRjaFJhbmdlRXZlbnQoXCJyYW5nZUNoYW5nZWRcIiwgXCJwYW5cIik7XG5cblx0XHRcdFx0XHR0aGlzLmRyYWdTdGFydFBvaW50LnggPSB4O1xuXHRcdFx0XHRcdHRoaXMuZHJhZ1N0YXJ0UG9pbnQueSA9IHk7XG5cblx0XHRcdFx0XHQvL2NsZWFyVGltZW91dCh0aGlzLl9wYW5UaW1lcklkKTtcblx0XHRcdFx0XHQvL3RoaXMuX3BhblRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHQvL1x0X3RoaXMuX2Rpc3BhdGNoUmFuZ2VFdmVudChcInJhbmdlQ2hhbmdpbmdcIiwgXCJwYW5cIik7XG5cdFx0XHRcdFx0Ly9cdF90aGlzLnJlbmRlcigpO1xuXHRcdFx0XHRcdC8vXHRfdGhpcy5fZGlzcGF0Y2hSYW5nZUV2ZW50KFwicmFuZ2VDaGFuZ2VkXCIsIFwicGFuXCIpO1xuXHRcdFx0XHRcdC8vfSwgMCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnpvb21FbmFibGVkKSB7XG5cblx0XHRcdFx0dGhpcy5yZXNldE92ZXJsYXllZENhbnZhcygpO1xuXG5cdFx0XHRcdGFscGhhID0gdGhpcy5vdmVybGFpZENhbnZhc0N0eC5nbG9iYWxBbHBoYTtcblxuXHRcdFx0XHR0aGlzLm92ZXJsYWlkQ2FudmFzQ3R4Lmdsb2JhbEFscGhhID0gLjc7XG5cdFx0XHRcdHRoaXMub3ZlcmxhaWRDYW52YXNDdHguZmlsbFN0eWxlID0gXCIjQTBBQkI4XCI7XG5cblx0XHRcdFx0dmFyIHJlY3QgPSB7XG5cdFx0XHRcdFx0eDE6IHpvb21QWCA/IHRoaXMuZHJhZ1N0YXJ0UG9pbnQueCA6IHRoaXMucGxvdEFyZWEueDEsXG5cdFx0XHRcdFx0eTE6IHpvb21QWSA/IHRoaXMuZHJhZ1N0YXJ0UG9pbnQueSA6IHRoaXMucGxvdEFyZWEueTEsXG5cdFx0XHRcdFx0eDI6IHpvb21QWCA/IHggLSB0aGlzLmRyYWdTdGFydFBvaW50LnggOiB0aGlzLnBsb3RBcmVhLngyIC0gdGhpcy5wbG90QXJlYS54MSxcblx0XHRcdFx0XHR5Mjogem9vbVBZID8geSAtIHRoaXMuZHJhZ1N0YXJ0UG9pbnQueSA6IHRoaXMucGxvdEFyZWEueTIgLSB0aGlzLnBsb3RBcmVhLnkxXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dGhpcy5vdmVybGFpZENhbnZhc0N0eC5maWxsUmVjdChyZWN0LngxLCByZWN0LnkxLCByZWN0LngyLCByZWN0LnkyKTtcblxuXHRcdFx0XHR0aGlzLm92ZXJsYWlkQ2FudmFzQ3R4Lmdsb2JhbEFscGhhID0gYWxwaGE7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdH0gZWxzZVxuXHRcdHRoaXMuX3Rvb2xUaXAubW91c2VNb3ZlSGFuZGxlcih4LCB5KTtcbn1cblxuLy8jZW5kcmVnaW9uIEV2ZW50c1xuXG4vL1NldHMgdGhlIHZpZXdwb3J0IHJhbmdlIG9mIEF4aXMgYmFzZWQgb24gdGhlIGdpdmVuIHJlY3QgYm91bmRzIChwaXhlbHMpLiBBbHNvIGxpbWl0cyB0aGUgem9vbWluZy9wYW5uaW5nIGJhc2VkIG9uIGF4aXMgYm91bmRzLiBSZXR1cm5zIGEgYm9vbGVhbiB0byBpbmRpY2F0ZSB3aGV0aGVyIGl0IHdhcyBzdWNjZXNmdWwgb3Igbm90IGJhc2VkIG9uIHRoZSBzZWxlY3RlZCByZWdpb24uXG5DaGFydC5wcm90b3R5cGUuX3pvb21QYW5Ub1NlbGVjdGVkUmVnaW9uID0gZnVuY3Rpb24gKHB4MSwgcHkxLCBweDIsIHB5Miwga2VlcEF4aXNJbmRlcGVuZGVudCkge1xuXG5cdGtlZXBBeGlzSW5kZXBlbmRlbnQgPSBrZWVwQXhpc0luZGVwZW5kZW50IHx8IGZhbHNlO1xuXG5cdHZhciB6b29tUFggPSB0aGlzLnpvb21UeXBlLmluZGV4T2YoXCJ4XCIpID49IDAsIC8vV2hldGhlciB0byB6b29tIGhvcml6b250YWxseVxuXHRcdHpvb21QWSA9IHRoaXMuem9vbVR5cGUuaW5kZXhPZihcInlcIikgPj0gMCwgLy9XaGV0aGVyIHRvIHpvb20gdmVydGljYWxseVxuXHRcdHZhbGlkUmVnaW9uID0gZmFsc2U7XG5cblx0dmFyIGF4ZXMgPSBbXSwgYXhlc1dpdGhWYWxpZFJhbmdlID0gW107XG5cdGlmICh0aGlzLmF4aXNYICYmIHpvb21QWClcblx0XHRheGVzLnB1c2godGhpcy5heGlzWCk7XG5cdGlmICh0aGlzLmF4aXNZICYmIHpvb21QWSlcblx0XHRheGVzLnB1c2godGhpcy5heGlzWSk7XG5cdGlmICh0aGlzLmF4aXNZMiAmJiB6b29tUFkpXG5cdFx0YXhlcy5wdXNoKHRoaXMuYXhpc1kyKTtcblxuXHR2YXIgcGFyYW1zID0gW107XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBheGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGF4aXMgPSBheGVzW2ldO1xuXHRcdC8vdmFyIHJhbmdlID0gTWF0aC5hYnMoYXhpcy52aWV3cG9ydE1heGltdW0gLSBheGlzLnZpZXdwb3J0TWluaW11bSk7XG5cblx0XHR2YXIgdmFsMSA9IGF4aXMuY29udmVydFBpeGVsVG9WYWx1ZSh7IHg6IHB4MSwgeTogcHkxIH0pO1xuXHRcdHZhciB2YWwyID0gYXhpcy5jb252ZXJ0UGl4ZWxUb1ZhbHVlKHsgeDogcHgyLCB5OiBweTIgfSk7XG5cblx0XHRpZiAodmFsMSA+IHZhbDIpIHtcblx0XHRcdHZhciB0ZW1wID0gdmFsMjtcblx0XHRcdHZhbDIgPSB2YWwxO1xuXHRcdFx0dmFsMSA9IHRlbXA7XG5cdFx0fVxuXG5cdFx0aWYgKGlzRmluaXRlKGF4aXMuZGF0YUluZm8ubWluRGlmZikpIHtcblx0XHRcdGlmICghKE1hdGguYWJzKHZhbDIgLSB2YWwxKSA8IDMgKiBNYXRoLmFicyhheGlzLmRhdGFJbmZvLm1pbkRpZmYpXG5cdFx0XHR8fCAodmFsMSA8IGF4aXMubWluaW11bSkgfHwgKHZhbDIgPiBheGlzLm1heGltdW0pKSkge1xuXHRcdFx0XHRheGVzV2l0aFZhbGlkUmFuZ2UucHVzaChheGlzKTtcblx0XHRcdFx0cGFyYW1zLnB1c2goeyB2YWwxOiB2YWwxLCB2YWwyOiB2YWwyIH0pO1xuXG5cdFx0XHRcdHZhbGlkUmVnaW9uID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoIWtlZXBBeGlzSW5kZXBlbmRlbnQpIHtcblx0XHRcdFx0dmFsaWRSZWdpb24gPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKHZhbGlkUmVnaW9uKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBheGVzV2l0aFZhbGlkUmFuZ2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBheGlzID0gYXhlc1dpdGhWYWxpZFJhbmdlW2ldO1xuXHRcdFx0dmFyIHBhcmFtID0gcGFyYW1zW2ldO1xuXG5cdFx0XHRheGlzLnNldFZpZXdQb3J0UmFuZ2UocGFyYW0udmFsMSwgcGFyYW0udmFsMik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHZhbGlkUmVnaW9uO1xufVxuXG5DaGFydC5wcm90b3R5cGUucHJlcGFyZVBsb3RBcmVhID0gZnVuY3Rpb24gKCkge1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cblx0dmFyIHlBeGlzID0gdGhpcy5heGlzWSA/IHRoaXMuYXhpc1kgOiB0aGlzLmF4aXNZMjtcblxuXHRpZiAoIWlzQ2FudmFzU3VwcG9ydGVkICYmIChwbG90QXJlYS54MSA+IDAgfHwgcGxvdEFyZWEueTEgPiAwKSkge1xuXHRcdHBsb3RBcmVhLmN0eC50cmFuc2xhdGUocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxKTtcblx0fVxuXG5cdGlmICh0aGlzLmF4aXNYICYmIHlBeGlzKSB7XG5cdFx0cGxvdEFyZWEueDEgPSB0aGlzLmF4aXNYLmxpbmVDb29yZGluYXRlcy54MSA8IHRoaXMuYXhpc1gubGluZUNvb3JkaW5hdGVzLngyID8gdGhpcy5heGlzWC5saW5lQ29vcmRpbmF0ZXMueDEgOiB5QXhpcy5saW5lQ29vcmRpbmF0ZXMueDE7XG5cdFx0cGxvdEFyZWEueTEgPSAodGhpcy5heGlzWC5saW5lQ29vcmRpbmF0ZXMueTEgPCB5QXhpcy5saW5lQ29vcmRpbmF0ZXMueTEgPyB0aGlzLmF4aXNYLmxpbmVDb29yZGluYXRlcy55MSA6IHlBeGlzLmxpbmVDb29yZGluYXRlcy55MSk7XG5cblx0XHRwbG90QXJlYS54MiA9ICh0aGlzLmF4aXNYLmxpbmVDb29yZGluYXRlcy54MiA+IHlBeGlzLmxpbmVDb29yZGluYXRlcy54MiA/IHRoaXMuYXhpc1gubGluZUNvb3JkaW5hdGVzLngyIDogeUF4aXMubGluZUNvb3JkaW5hdGVzLngyKTtcblx0XHRwbG90QXJlYS55MiA9IHRoaXMuYXhpc1gubGluZUNvb3JkaW5hdGVzLnkyID4gdGhpcy5heGlzWC5saW5lQ29vcmRpbmF0ZXMueTEgPyB0aGlzLmF4aXNYLmxpbmVDb29yZGluYXRlcy55MiA6IHlBeGlzLmxpbmVDb29yZGluYXRlcy55MjtcblxuXHRcdHBsb3RBcmVhLndpZHRoID0gcGxvdEFyZWEueDIgLSBwbG90QXJlYS54MTtcblx0XHRwbG90QXJlYS5oZWlnaHQgPSBwbG90QXJlYS55MiAtIHBsb3RBcmVhLnkxO1xuXHRcdC8vcGxvdEFyZWEgPSB7IHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5Miwgd2lkdGg6IHgyIC0geDEsIGhlaWdodDogeTIgLSB5MSB9O1xuXHR9IGVsc2Uge1xuXHRcdC8vVG9EbzogQHN1bmlsXG5cdFx0dmFyIGZyZWVTcGFjZSA9IHRoaXMubGF5b3V0TWFuYWdlci5nZXRGcmVlU3BhY2UoKTtcblx0XHRwbG90QXJlYS54MSA9IGZyZWVTcGFjZS54MTtcblx0XHRwbG90QXJlYS54MiA9IGZyZWVTcGFjZS54Mjtcblx0XHRwbG90QXJlYS55MSA9IGZyZWVTcGFjZS55MTtcblx0XHRwbG90QXJlYS55MiA9IGZyZWVTcGFjZS55MjtcblxuXHRcdHBsb3RBcmVhLndpZHRoID0gZnJlZVNwYWNlLndpZHRoO1xuXHRcdHBsb3RBcmVhLmhlaWdodCA9IGZyZWVTcGFjZS5oZWlnaHQ7XG5cdH1cblxuXHRpZiAoIWlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cblx0XHRwbG90QXJlYS5jYW52YXMud2lkdGggPSBwbG90QXJlYS53aWR0aDtcblx0XHRwbG90QXJlYS5jYW52YXMuaGVpZ2h0ID0gcGxvdEFyZWEuaGVpZ2h0O1xuXG5cdFx0cGxvdEFyZWEuY2FudmFzLnN0eWxlLmxlZnQgPSBwbG90QXJlYS54MSArIFwicHhcIjtcblx0XHRwbG90QXJlYS5jYW52YXMuc3R5bGUudG9wID0gcGxvdEFyZWEueTEgKyBcInB4XCI7XG5cblx0XHRpZiAocGxvdEFyZWEueDEgPiAwIHx8IHBsb3RBcmVhLnkxID4gMCkge1xuXHRcdFx0cGxvdEFyZWEuY3R4LnRyYW5zbGF0ZSgtcGxvdEFyZWEueDEsIC1wbG90QXJlYS55MSk7XG5cdFx0fVxuXHR9XG5cblx0cGxvdEFyZWEubGF5b3V0TWFuYWdlciA9IG5ldyBMYXlvdXRNYW5hZ2VyKHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEueDIsIHBsb3RBcmVhLnkyLCAyKTtcbn1cblxuQ2hhcnQucHJvdG90eXBlLmdldFBpeGVsQ29vcmRpbmF0ZXNPblBsb3RBcmVhID0gZnVuY3Rpb24gKHgsIHkpIHtcblx0cmV0dXJuIHtcblx0XHR4OiB0aGlzLmF4aXNYLmdldFBpeGVsQ29vcmRpbmF0ZXNPbkF4aXMoeCkueCwgeTogdGhpcy5heGlzWS5nZXRQaXhlbENvb3JkaW5hdGVzT25BeGlzKHkpLnlcblx0fVxuXHQvL3JldHVybiB7IHg6IDUsIHk6IDEwIH07XG59XG5cbi8vI3JlZ2lvbiBSZW5kZXIgTWV0aG9kc1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVySW5kZXhMYWJlbHMgPSBmdW5jdGlvbiAodGFyZ2V0Q3R4KSB7XG5cdHZhciBjdHggPSB0YXJnZXRDdHggfHwgdGhpcy5wbG90QXJlYS5jdHg7XG5cblx0dmFyIHBsb3RBcmVhID0gdGhpcy5wbG90QXJlYTtcblxuXHR2YXIgbWlkID0gMDtcblx0dmFyIHlNaW5MaW1pdCA9IDA7XG5cdHZhciB5TWF4TGltaXQgPSAwO1xuXHR2YXIgeE1pbkxpbWl0ID0gMDtcblx0dmFyIHhNYXhMaW1pdCA9IDA7XG5cdHZhciBtYXJnaW5YID0gMCwgbWFyZ2luWSA9IDA7IC8vIE1hcmdpbiBiZXR3ZWVuIGxhYmVsIGFuZCBkYXRhUG9pbnQgLyBQbG90QXJlYVxuXHR2YXIgb2ZmU2V0WCA9IDAsIG9mZlNldFkgPSAwOyAvLyBEaXN0YW5jZSB0byBvZmZTZXQgdGV4dEJsb2NrICh0b3ApIGZyb20gZGF0YVBvaW50IGlub3JkZXIgdG8gcG9zaXRpb24gaXRcblx0dmFyIHZpc2libGVXaWR0aCA9IDA7XG5cdHZhciB2aXNpYmxlSGVpZ2h0ID0gMDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2luZGV4TGFiZWxzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHR2YXIgaW5kZXhMYWJlbCA9IHRoaXMuX2luZGV4TGFiZWxzW2ldO1xuXHRcdHZhciBjaGFydFR5cGVMb3dlciA9IGluZGV4TGFiZWwuY2hhcnRUeXBlLnRvTG93ZXJDYXNlKCk7XG5cblx0XHR2YXIgeCwgeSwgYW5nbGU7XG5cblx0XHR2YXIgZm9udENvbG9yID0gZ2V0UHJvcGVydHkoXCJpbmRleExhYmVsRm9udENvbG9yXCIsIGluZGV4TGFiZWwuZGF0YVBvaW50LCBpbmRleExhYmVsLmRhdGFTZXJpZXMpO1xuXHRcdHZhciBmb250U2l6ZSA9IGdldFByb3BlcnR5KFwiaW5kZXhMYWJlbEZvbnRTaXplXCIsIGluZGV4TGFiZWwuZGF0YVBvaW50LCBpbmRleExhYmVsLmRhdGFTZXJpZXMpO1xuXHRcdHZhciBmb250RmFtaWx5ID0gZ2V0UHJvcGVydHkoXCJpbmRleExhYmVsRm9udEZhbWlseVwiLCBpbmRleExhYmVsLmRhdGFQb2ludCwgaW5kZXhMYWJlbC5kYXRhU2VyaWVzKTtcblx0XHR2YXIgZm9udFN0eWxlID0gZ2V0UHJvcGVydHkoXCJpbmRleExhYmVsRm9udFN0eWxlXCIsIGluZGV4TGFiZWwuZGF0YVBvaW50LCBpbmRleExhYmVsLmRhdGFTZXJpZXMpO1xuXHRcdHZhciBmb250V2VpZ2h0ID0gZ2V0UHJvcGVydHkoXCJpbmRleExhYmVsRm9udFdlaWdodFwiLCBpbmRleExhYmVsLmRhdGFQb2ludCwgaW5kZXhMYWJlbC5kYXRhU2VyaWVzKTtcblx0XHR2YXIgYmFja2dyb3VuZENvbG9yID0gZ2V0UHJvcGVydHkoXCJpbmRleExhYmVsQmFja2dyb3VuZENvbG9yXCIsIGluZGV4TGFiZWwuZGF0YVBvaW50LCBpbmRleExhYmVsLmRhdGFTZXJpZXMpO1xuXHRcdHZhciBtYXhXaWR0aCA9IGdldFByb3BlcnR5KFwiaW5kZXhMYWJlbE1heFdpZHRoXCIsIGluZGV4TGFiZWwuZGF0YVBvaW50LCBpbmRleExhYmVsLmRhdGFTZXJpZXMpO1xuXHRcdHZhciBpbmRleExhYmVsV3JhcCA9IGdldFByb3BlcnR5KFwiaW5kZXhMYWJlbFdyYXBcIiwgaW5kZXhMYWJlbC5kYXRhUG9pbnQsIGluZGV4TGFiZWwuZGF0YVNlcmllcyk7XG5cblx0XHR2YXIgcGVyY2VudEFuZFRvdGFsID0ge1xuXHRcdFx0cGVyY2VudDogbnVsbCwgdG90YWw6IG51bGxcblx0XHR9O1xuXHRcdHZhciBmb3JtYXR0ZXJQYXJhbWV0ZXIgPSBudWxsO1xuXG5cdFx0aWYgKGluZGV4TGFiZWwuZGF0YVNlcmllcy50eXBlLmluZGV4T2YoXCJzdGFja2VkXCIpID49IDAgfHwgaW5kZXhMYWJlbC5kYXRhU2VyaWVzLnR5cGUgPT09IFwicGllXCIgfHwgaW5kZXhMYWJlbC5kYXRhU2VyaWVzLnR5cGUgPT09IFwiZG91Z2hudXRcIilcblx0XHRcdHBlcmNlbnRBbmRUb3RhbCA9IHRoaXMuZ2V0UGVyY2VudEFuZFRvdGFsKGluZGV4TGFiZWwuZGF0YVNlcmllcywgaW5kZXhMYWJlbC5kYXRhUG9pbnQpO1xuXG5cdFx0aWYgKGluZGV4TGFiZWwuZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGluZGV4TGFiZWwuZGF0YVBvaW50LmluZGV4TGFiZWxGb3JtYXR0ZXIpXG5cdFx0XHRmb3JtYXR0ZXJQYXJhbWV0ZXIgPSB7XG5cdFx0XHRcdGNoYXJ0OiB0aGlzLl9vcHRpb25zLCBkYXRhU2VyaWVzOiBpbmRleExhYmVsLmRhdGFTZXJpZXMsIGRhdGFQb2ludDogaW5kZXhMYWJlbC5kYXRhUG9pbnQsIGluZGV4OiBpbmRleExhYmVsLmluZGV4S2V5d29yZCwgdG90YWw6IHBlcmNlbnRBbmRUb3RhbC50b3RhbCwgcGVyY2VudDogcGVyY2VudEFuZFRvdGFsLnBlcmNlbnRcblx0XHRcdH07XG5cblxuXHRcdHZhciBpbmRleExhYmVsVGV4dCA9IGluZGV4TGFiZWwuZGF0YVBvaW50LmluZGV4TGFiZWxGb3JtYXR0ZXIgPyBpbmRleExhYmVsLmRhdGFQb2ludC5pbmRleExhYmVsRm9ybWF0dGVyKGZvcm1hdHRlclBhcmFtZXRlcilcblx0XHRcdDogaW5kZXhMYWJlbC5kYXRhUG9pbnQuaW5kZXhMYWJlbCA/IHRoaXMucmVwbGFjZUtleXdvcmRzV2l0aFZhbHVlKGluZGV4TGFiZWwuZGF0YVBvaW50LmluZGV4TGFiZWwsIGluZGV4TGFiZWwuZGF0YVBvaW50LCBpbmRleExhYmVsLmRhdGFTZXJpZXMsIG51bGwsIGluZGV4TGFiZWwuaW5kZXhLZXl3b3JkKVxuXHRcdFx0OiBpbmRleExhYmVsLmRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlciA/IGluZGV4TGFiZWwuZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyKGZvcm1hdHRlclBhcmFtZXRlcilcblx0XHRcdDogaW5kZXhMYWJlbC5kYXRhU2VyaWVzLmluZGV4TGFiZWwgPyB0aGlzLnJlcGxhY2VLZXl3b3Jkc1dpdGhWYWx1ZShpbmRleExhYmVsLmRhdGFTZXJpZXMuaW5kZXhMYWJlbCwgaW5kZXhMYWJlbC5kYXRhUG9pbnQsIGluZGV4TGFiZWwuZGF0YVNlcmllcywgbnVsbCwgaW5kZXhMYWJlbC5pbmRleEtleXdvcmQpIDogbnVsbDtcblxuXHRcdGlmIChpbmRleExhYmVsVGV4dCA9PT0gbnVsbCB8fCBpbmRleExhYmVsVGV4dCA9PT0gXCJcIilcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0dmFyIHBsYWNlbWVudCA9IGdldFByb3BlcnR5KFwiaW5kZXhMYWJlbFBsYWNlbWVudFwiLCBpbmRleExhYmVsLmRhdGFQb2ludCwgaW5kZXhMYWJlbC5kYXRhU2VyaWVzKTtcblx0XHR2YXIgb3JpZW50YXRpb24gPSBnZXRQcm9wZXJ0eShcImluZGV4TGFiZWxPcmllbnRhdGlvblwiLCBpbmRleExhYmVsLmRhdGFQb2ludCwgaW5kZXhMYWJlbC5kYXRhU2VyaWVzKTtcblx0XHR2YXIgYW5nbGUgPSAwO1xuXG5cdFx0dmFyIGRpcmVjdGlvbiA9IGluZGV4TGFiZWwuZGlyZWN0aW9uOyAvLyArMSBmb3IgYWJvdmUgdGhlIHBvaW50IGFuZCAtMSBmb3IgYmVsb3cgdGhlIHBvaW50XG5cblx0XHR2YXIgYXhpc1ggPSBpbmRleExhYmVsLmRhdGFTZXJpZXMuYXhpc1g7XG5cdFx0dmFyIGF4aXNZID0gaW5kZXhMYWJlbC5kYXRhU2VyaWVzLmF4aXNZO1xuXG5cblx0XHR2YXIgdGV4dEJsb2NrID0gbmV3IFRleHRCbG9jayhjdHgsIHtcblx0XHRcdHg6IDAsXG5cdFx0XHR5OiAwLFxuXHRcdFx0bWF4V2lkdGg6IG1heFdpZHRoID8gbWF4V2lkdGggOiB0aGlzLndpZHRoICogLjUsXG5cdFx0XHRtYXhIZWlnaHQ6IGluZGV4TGFiZWxXcmFwID8gZm9udFNpemUgKiA1IDogZm9udFNpemUgKiAxLjUsXG5cdFx0XHRhbmdsZTogb3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiID8gMCA6IC05MCxcblx0XHRcdHRleHQ6IGluZGV4TGFiZWxUZXh0LFxuXHRcdFx0cGFkZGluZzogMCxcblx0XHRcdGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuXHRcdFx0aG9yaXpvbnRhbEFsaWduOiBcImxlZnRcIiwvL2xlZnQsIGNlbnRlciwgcmlnaHRcblx0XHRcdGZvbnRTaXplOiBmb250U2l6ZSwvL2luIHBpeGVsc1xuXHRcdFx0Zm9udEZhbWlseTogZm9udEZhbWlseSxcblx0XHRcdGZvbnRXZWlnaHQ6IGZvbnRXZWlnaHQsIC8vbm9ybWFsLCBib2xkLCBib2xkZXIsIGxpZ2h0ZXIsXG5cdFx0XHRmb250Q29sb3I6IGZvbnRDb2xvcixcblx0XHRcdGZvbnRTdHlsZTogZm9udFN0eWxlLCAvLyBub3JtYWwsIGl0YWxpYywgb2JsaXF1ZVxuXHRcdFx0dGV4dEJhc2VsaW5lOiBcInRvcFwiXG5cdFx0fSk7XG5cblx0XHR2YXIgdGV4dFNpemUgPSB0ZXh0QmxvY2subWVhc3VyZVRleHQoKTtcblxuXHRcdC8vaWYgKGluZGV4TGFiZWwuZGF0YVBvaW50LnggPCBheGlzWC52aWV3cG9ydE1pbmltdW0gfHwgaW5kZXhMYWJlbC5kYXRhUG9pbnQueCA+IGF4aXNYLnZpZXdwb3J0TWF4aW11bSB8fCBpbmRleExhYmVsLmRhdGFQb2ludC55IDwgYXhpc1kudmlld3BvcnRNaW5pbXVtIHx8IGluZGV4TGFiZWwuZGF0YVBvaW50LnkgPiBheGlzWS52aWV3cG9ydE1heGltdW0pXG5cdFx0Ly9cdGNvbnRpbnVlO1xuXG5cdFx0aWYgKGNoYXJ0VHlwZUxvd2VyLmluZGV4T2YoXCJsaW5lXCIpID49IDAgfHwgY2hhcnRUeXBlTG93ZXIuaW5kZXhPZihcImFyZWFcIikgPj0gMFxuXHRcdFx0XHR8fCBjaGFydFR5cGVMb3dlci5pbmRleE9mKFwiYnViYmxlXCIpID49IDAgfHwgY2hhcnRUeXBlTG93ZXIuaW5kZXhPZihcInNjYXR0ZXJcIikgPj0gMCkge1xuXG5cdFx0XHRpZiAoaW5kZXhMYWJlbC5kYXRhUG9pbnQueCA8IGF4aXNYLnZpZXdwb3J0TWluaW11bSB8fCBpbmRleExhYmVsLmRhdGFQb2ludC54ID4gYXhpc1gudmlld3BvcnRNYXhpbXVtIHx8IGluZGV4TGFiZWwuZGF0YVBvaW50LnkgPCBheGlzWS52aWV3cG9ydE1pbmltdW0gfHwgaW5kZXhMYWJlbC5kYXRhUG9pbnQueSA+IGF4aXNZLnZpZXdwb3J0TWF4aW11bSlcblx0XHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0aWYgKGluZGV4TGFiZWwuZGF0YVBvaW50LnggPCBheGlzWC52aWV3cG9ydE1pbmltdW0gfHwgaW5kZXhMYWJlbC5kYXRhUG9pbnQueCA+IGF4aXNYLnZpZXdwb3J0TWF4aW11bSlcblx0XHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0bWFyZ2luWSA9IDI7XG5cdFx0bWFyZ2luWCA9IDI7XG5cblx0XHRpZiAob3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG5cdFx0XHR2aXNpYmxlV2lkdGggPSB0ZXh0QmxvY2sud2lkdGg7XG5cdFx0XHR2aXNpYmxlSGVpZ2h0ID0gdGV4dEJsb2NrLmhlaWdodDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmlzaWJsZUhlaWdodCA9IHRleHRCbG9jay53aWR0aDtcblx0XHRcdHZpc2libGVXaWR0aCA9IHRleHRCbG9jay5oZWlnaHQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJub3JtYWxcIikge1xuXG5cdFx0XHRpZiAoY2hhcnRUeXBlTG93ZXIuaW5kZXhPZihcImxpbmVcIikgPj0gMCB8fCBjaGFydFR5cGVMb3dlci5pbmRleE9mKFwiYXJlYVwiKSA+PSAwKSB7XG5cblx0XHRcdFx0cGxhY2VtZW50ID0gXCJhdXRvXCI7XG5cdFx0XHRcdG1hcmdpblkgPSA0O1xuXG5cdFx0XHR9IGVsc2UgaWYgKGNoYXJ0VHlwZUxvd2VyLmluZGV4T2YoXCJzdGFja2VkXCIpID49IDApIHtcblxuXHRcdFx0XHRpZiAocGxhY2VtZW50ID09PSBcImF1dG9cIilcblx0XHRcdFx0XHRwbGFjZW1lbnQgPSBcImluc2lkZVwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKGNoYXJ0VHlwZUxvd2VyID09PSBcImJ1YmJsZVwiIHx8IGNoYXJ0VHlwZUxvd2VyID09PSBcInNjYXR0ZXJcIikge1xuXG5cdFx0XHRcdHBsYWNlbWVudCA9IFwiaW5zaWRlXCI7XG5cblx0XHRcdH1cblxuXHRcdFx0eCA9IGluZGV4TGFiZWwucG9pbnQueCAtIHZpc2libGVXaWR0aCAvIDI7XG5cblx0XHRcdGlmIChwbGFjZW1lbnQgIT09IFwiaW5zaWRlXCIpIHtcdC8vb3V0c2lkZSBvciBhdXRvXG5cblx0XHRcdFx0eU1pbkxpbWl0ID0gcGxvdEFyZWEueTE7XG5cdFx0XHRcdHlNYXhMaW1pdCA9IHBsb3RBcmVhLnkyO1xuXG5cdFx0XHRcdGlmIChkaXJlY3Rpb24gPiAwKSB7XG5cdFx0XHRcdFx0eSA9IGluZGV4TGFiZWwucG9pbnQueSAtIHZpc2libGVIZWlnaHQgLSBtYXJnaW5ZO1xuXG5cdFx0XHRcdFx0aWYgKHkgPCB5TWluTGltaXQpIHtcblx0XHRcdFx0XHRcdGlmIChwbGFjZW1lbnQgPT09IFwiYXV0b1wiKSB7XG5cdFx0XHRcdFx0XHRcdHkgPSBNYXRoLm1heChpbmRleExhYmVsLnBvaW50LnksIHlNaW5MaW1pdCkgKyBtYXJnaW5ZO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHkgPSB5TWluTGltaXQgKyBtYXJnaW5ZO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR5ID0gaW5kZXhMYWJlbC5wb2ludC55ICsgbWFyZ2luWTtcblxuXHRcdFx0XHRcdGlmICh5ID4geU1heExpbWl0IC0gdmlzaWJsZUhlaWdodCAtIG1hcmdpblkpIHtcblx0XHRcdFx0XHRcdGlmIChwbGFjZW1lbnQgPT09IFwiYXV0b1wiKSB7XG5cdFx0XHRcdFx0XHRcdHkgPSBNYXRoLm1pbihpbmRleExhYmVsLnBvaW50LnksIHlNYXhMaW1pdCkgLSB2aXNpYmxlSGVpZ2h0IC0gbWFyZ2luWTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR5ID0geU1heExpbWl0IC0gdmlzaWJsZUhlaWdodCAtIG1hcmdpblk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblxuXHRcdFx0XHR5TWluTGltaXQgPSBNYXRoLm1heChpbmRleExhYmVsLmJvdW5kcy55MSwgcGxvdEFyZWEueTEpO1xuXHRcdFx0XHR5TWF4TGltaXQgPSBNYXRoLm1pbihpbmRleExhYmVsLmJvdW5kcy55MiwgcGxvdEFyZWEueTIpO1xuXG5cblx0XHRcdFx0aWYgKGNoYXJ0VHlwZUxvd2VyLmluZGV4T2YoXCJyYW5nZVwiKSA+PSAwKSB7XG5cdFx0XHRcdFx0aWYgKGRpcmVjdGlvbiA+IDApXG5cdFx0XHRcdFx0XHRtaWQgPSBNYXRoLm1heChpbmRleExhYmVsLmJvdW5kcy55MSwgcGxvdEFyZWEueTEpICsgdmlzaWJsZUhlaWdodCAvIDIgKyBtYXJnaW5ZO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdG1pZCA9IE1hdGgubWluKGluZGV4TGFiZWwuYm91bmRzLnkyLCBwbG90QXJlYS55MikgLSB2aXNpYmxlSGVpZ2h0IC8gMiAtIG1hcmdpblk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdG1pZCA9IChNYXRoLm1heChpbmRleExhYmVsLmJvdW5kcy55MSwgcGxvdEFyZWEueTEpICsgTWF0aC5taW4oaW5kZXhMYWJlbC5ib3VuZHMueTIsIHBsb3RBcmVhLnkyKSkgLyAyXG5cblx0XHRcdFx0aWYgKGRpcmVjdGlvbiA+IDApIHtcblx0XHRcdFx0XHR5ID0gTWF0aC5tYXgoaW5kZXhMYWJlbC5wb2ludC55LCBtaWQpIC0gdmlzaWJsZUhlaWdodCAvIDI7XG5cblx0XHRcdFx0XHRpZiAoeSA8IHlNaW5MaW1pdCAmJiAoY2hhcnRUeXBlTG93ZXIgPT09IFwiYnViYmxlXCIgfHwgY2hhcnRUeXBlTG93ZXIgPT09IFwic2NhdHRlclwiKSkge1xuXHRcdFx0XHRcdFx0eSA9IE1hdGgubWF4KGluZGV4TGFiZWwucG9pbnQueSAtIHZpc2libGVIZWlnaHQgLSBtYXJnaW5ZLCBwbG90QXJlYS55MSArIG1hcmdpblkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR5ID0gTWF0aC5taW4oaW5kZXhMYWJlbC5wb2ludC55LCBtaWQpIC0gdmlzaWJsZUhlaWdodCAvIDI7XG5cblx0XHRcdFx0XHRpZiAoeSA+IHlNYXhMaW1pdCAtIHZpc2libGVIZWlnaHQgLSBtYXJnaW5ZICYmIChjaGFydFR5cGVMb3dlciA9PT0gXCJidWJibGVcIiB8fCBjaGFydFR5cGVMb3dlciA9PT0gXCJzY2F0dGVyXCIpKSB7XG5cdFx0XHRcdFx0XHR5ID0gTWF0aC5taW4oaW5kZXhMYWJlbC5wb2ludC55ICsgbWFyZ2luWSwgcGxvdEFyZWEueTIgLSB2aXNpYmxlSGVpZ2h0IC0gbWFyZ2luWSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cbiAgICAgICAgICAgICAgICAgIC8vIE1ha2UgU3VyZSB0aGF0IGl0IGRvZXMgbm90IG92ZXJsYXAgdGhlIGF4aXMgbGluZVxuXHRcdFx0XHR5ID0gTWF0aC5taW4oeSwgeU1heExpbWl0IC0gdmlzaWJsZUhlaWdodCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Uge1xuXG5cdFx0XHRpZiAoY2hhcnRUeXBlTG93ZXIuaW5kZXhPZihcImxpbmVcIikgPj0gMCB8fCBjaGFydFR5cGVMb3dlci5pbmRleE9mKFwiYXJlYVwiKSA+PSAwXG5cdFx0XHRcdHx8IGNoYXJ0VHlwZUxvd2VyLmluZGV4T2YoXCJzY2F0dGVyXCIpID49IDApIHtcblxuXHRcdFx0XHRwbGFjZW1lbnQgPSBcImF1dG9cIjtcblx0XHRcdFx0bWFyZ2luWCA9IDQ7XG5cblx0XHRcdH0gZWxzZSBpZiAoY2hhcnRUeXBlTG93ZXIuaW5kZXhPZihcInN0YWNrZWRcIikgPj0gMCkge1xuXG5cdFx0XHRcdGlmIChwbGFjZW1lbnQgPT09IFwiYXV0b1wiKVxuXHRcdFx0XHRcdHBsYWNlbWVudCA9IFwiaW5zaWRlXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoY2hhcnRUeXBlTG93ZXIgPT09IFwiYnViYmxlXCIpIHtcblxuXHRcdFx0XHRwbGFjZW1lbnQgPSBcImluc2lkZVwiO1xuXG5cdFx0XHR9XG5cblx0XHRcdHkgPSBpbmRleExhYmVsLnBvaW50LnkgLSB2aXNpYmxlSGVpZ2h0IC8gMjtcblxuXHRcdFx0aWYgKHBsYWNlbWVudCAhPT0gXCJpbnNpZGVcIikge1x0Ly9vdXRzaWRlIG9yIGF1dG9cblxuXHRcdFx0XHR4TWluTGltaXQgPSBwbG90QXJlYS54MTtcblx0XHRcdFx0eE1heExpbWl0ID0gcGxvdEFyZWEueDI7XG5cblx0XHRcdFx0aWYgKGRpcmVjdGlvbiA8IDApIHtcblx0XHRcdFx0XHR4ID0gaW5kZXhMYWJlbC5wb2ludC54IC0gdmlzaWJsZVdpZHRoIC0gbWFyZ2luWDtcblxuXHRcdFx0XHRcdGlmICh4IDwgeE1pbkxpbWl0KSB7XG5cdFx0XHRcdFx0XHRpZiAocGxhY2VtZW50ID09PSBcImF1dG9cIikge1xuXHRcdFx0XHRcdFx0XHR4ID0gTWF0aC5tYXgoaW5kZXhMYWJlbC5wb2ludC54LCB4TWluTGltaXQpICsgbWFyZ2luWDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR4ID0geE1pbkxpbWl0ICsgbWFyZ2luWDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0eCA9IGluZGV4TGFiZWwucG9pbnQueCArIG1hcmdpblg7XG5cblx0XHRcdFx0XHRpZiAoeCA+IHhNYXhMaW1pdCAtIHZpc2libGVXaWR0aCAtIG1hcmdpblgpIHtcblx0XHRcdFx0XHRcdGlmIChwbGFjZW1lbnQgPT09IFwiYXV0b1wiKSB7XG5cdFx0XHRcdFx0XHRcdHggPSBNYXRoLm1pbihpbmRleExhYmVsLnBvaW50LngsIHhNYXhMaW1pdCkgLSB2aXNpYmxlV2lkdGggLSBtYXJnaW5YO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHggPSB4TWF4TGltaXQgLSB2aXNpYmxlV2lkdGggLSBtYXJnaW5YO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHhNaW5MaW1pdCA9IE1hdGgubWF4KGluZGV4TGFiZWwuYm91bmRzLngxLCBwbG90QXJlYS54MSk7XG5cdFx0XHRcdHhNYXhMaW1pdCA9IE1hdGgubWluKGluZGV4TGFiZWwuYm91bmRzLngyLCBwbG90QXJlYS54Mik7XG5cblx0XHRcdFx0aWYgKGNoYXJ0VHlwZUxvd2VyLmluZGV4T2YoXCJyYW5nZVwiKSA+PSAwKSB7XG5cdFx0XHRcdFx0aWYgKGRpcmVjdGlvbiA8IDApXG5cdFx0XHRcdFx0XHRtaWQgPSBNYXRoLm1heChpbmRleExhYmVsLmJvdW5kcy54MSwgcGxvdEFyZWEueDEpICsgdmlzaWJsZVdpZHRoIC8gMiArIG1hcmdpblg7XG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0bWlkID0gTWF0aC5taW4oaW5kZXhMYWJlbC5ib3VuZHMueDIsIHBsb3RBcmVhLngyKSAtIHZpc2libGVXaWR0aCAvIDIgLSBtYXJnaW5YO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR2YXIgbWlkID0gKE1hdGgubWF4KGluZGV4TGFiZWwuYm91bmRzLngxLCBwbG90QXJlYS54MSkgKyBNYXRoLm1pbihpbmRleExhYmVsLmJvdW5kcy54MiwgcGxvdEFyZWEueDIpKSAvIDI7XG5cblx0XHRcdFx0aWYgKGRpcmVjdGlvbiA8IDApIHtcblx0XHRcdFx0XHR4ID0gTWF0aC5tYXgoaW5kZXhMYWJlbC5wb2ludC54LCBtaWQpIC0gdmlzaWJsZVdpZHRoIC8gMjtcblxuXHRcdFx0XHRcdC8vaWYgKHkgPCB4TWluTGltaXQpIHtcblx0XHRcdFx0XHQvL1x0eSA9IE1hdGgubWF4KGluZGV4TGFiZWwucG9pbnQueSAtIHZpc2libGVIZWlnaHQgLSBtYXJnaW5ZLCBwbG90QXJlYS55MSArIG1hcmdpblkpO1xuXHRcdFx0XHRcdC8vfVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHggPSBNYXRoLm1pbihpbmRleExhYmVsLnBvaW50LngsIG1pZCkgLSB2aXNpYmxlV2lkdGggLyAyO1xuXG5cdFx0XHRcdFx0Ly9pZiAoeSA+IHhNYXhMaW1pdCAtIHZpc2libGVIZWlnaHQgLSBtYXJnaW5ZKSB7XG5cdFx0XHRcdFx0Ly9cdHkgPSBNYXRoLm1pbihpbmRleExhYmVsLnBvaW50LnkgKyBtYXJnaW5ZLCBwbG90QXJlYS55MiAtIHZpc2libGVIZWlnaHQgLSBtYXJnaW5ZKTtcblx0XHRcdFx0XHQvL31cblx0XHRcdFx0fVxuXG5cdFx0XHQgICAgLy8gTWFrZSBTdXJlIHRoYXQgaXQgZG9lcyBub3Qgb3ZlcmxhcCB0aGUgYXhpcyBsaW5lXG5cdFx0XHQgICAgeCA9IE1hdGgubWF4KHgsIHhNaW5MaW1pdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cblx0XHRpZiAob3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuXHRcdFx0eSArPSB2aXNpYmxlSGVpZ2h0O1xuXHRcdH1cblxuXHRcdHRleHRCbG9jay54ID0geDtcblx0XHR0ZXh0QmxvY2sueSA9IHk7XG5cblx0XHQvL2NvbnNvbGUubG9nKHRleHRCbG9jay50ZXh0ICsgXCI6IFwiICsgdGV4dEJsb2NrLnggKyBcIjsgXCIgKyB0ZXh0QmxvY2sueSk7XG5cblx0XHR0ZXh0QmxvY2sucmVuZGVyKHRydWUpO1xuXHR9XG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uSW5mbyA9IHtcblx0XHRzb3VyY2U6IGN0eCwgZGVzdDogdGhpcy5wbG90QXJlYS5jdHgsIGFuaW1hdGlvbkNhbGxiYWNrOiBBbmltYXRpb25IZWxwZXIuZmFkZUluQW5pbWF0aW9uLCBlYXNpbmdGdW5jdGlvbjogQW5pbWF0aW9uSGVscGVyLmVhc2luZy5lYXNlSW5RdWFkLCBhbmltYXRpb25CYXNlOiAwLCBzdGFydFRpbWVQZXJjZW50OiAuN1xuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlckxpbmUgPSBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblxuXHR2YXIgY3R4ID0gcGxvdFVuaXQudGFyZ2V0Q2FudmFzQ3R4IHx8IHRoaXMucGxvdEFyZWEuY3R4O1xuXG5cdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGdob3N0Q3R4ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4O1xuXHQvL3ZhciBnaG9zdEN0eCA9IHRoaXMub3ZlcmxhaWRDYW52YXNDdHg7XG5cblx0Y3R4LnNhdmUoKTtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHR2YXIgbWFya2VycyA9IFtdO1xuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblxuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cdFx0Y3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblx0XHR2YXIgZGF0YVBvaW50cyA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cztcblxuXG5cdFx0aWYgKGN0eC5zZXRMaW5lRGFzaCkge1xuXHRcdFx0Y3R4LnNldExpbmVEYXNoKGdldExpbmVEYXNoQXJyYXkoZGF0YVNlcmllcy5saW5lRGFzaFR5cGUsIGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcykpO1xuXHRcdH1cblxuXHRcdHZhciBzZXJpZXNJZCA9IGRhdGFTZXJpZXMuaWQ7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtzZXJpZXNJZF0gPSB7XG5cdFx0XHRvYmplY3RUeXBlOiBcImRhdGFTZXJpZXNcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXhcblx0XHR9O1xuXHRcdHZhciBoZXhDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoc2VyaWVzSWQpO1xuXHRcdGdob3N0Q3R4LnN0cm9rZVN0eWxlID0gaGV4Q29sb3I7XG5cdFx0Ly9naG9zdEN0eC5saW5lV2lkdGggPSBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3M7XG5cdFx0Z2hvc3RDdHgubGluZVdpZHRoID0gZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzID4gMCA/IE1hdGgubWF4KGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcywgNCkgOiAwO1xuXG5cdFx0dmFyIGNvbG9yU2V0ID0gZGF0YVNlcmllcy5fY29sb3JTZXQ7XG5cdFx0dmFyIGNvbG9yID0gY29sb3JTZXRbMF07XG5cdFx0Y3R4LnN0cm9rZVN0eWxlID0gY29sb3I7XG5cblx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXHRcdHZhciBpID0gMCwgeCwgeTtcblx0XHR2YXIgZGF0YVBvaW50WDsgLy9Vc2VkIHNvIHRoYXQgd2hlbiBkYXRhUG9pbnQueCBpcyBhIERhdGVUaW1lIHZhbHVlLCBpdCBkb2Vzbid0IGdldCBjb252ZXJ0ZWQgdG8gbnVtYmVyIGJhY2sgYW5kIGZvcnRoLlxuXG5cdFx0Ly9pZiAoIWRhdGFTZXJpZXMuX29wdGlvbnMubWFya2VyU2l6ZSAmJiBkYXRhU2VyaWVzLmRhdGFQb2ludHMubGVuZ3RoIDwgMTAwMClcblx0XHQvLyAgICBkYXRhU2VyaWVzLm1hcmtlclNpemUgPSA4O1xuXHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL3ZhciB4eSA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uUGxvdEFyZWEoZGF0YVBvaW50c1swXS54LCBkYXRhUG9pbnRzWzBdLnkpO1xuXG5cdFx0XHQvL2RhdGFTZXJpZXMubm9EYXRhUG9pbnRzSW5QbG90QXJlYSA9IDBcblx0XHRcdHZhciBwcmV2RGF0YU51bGwgPSBmYWxzZTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lID8gZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKSA6IGRhdGFQb2ludHNbaV0ueDtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHQvL2lmICghaXNGaW5pdGUoZGF0YVBvaW50c1tpXS55KSlcblx0XHRcdFx0Ly8gICAgY29udGludWU7XG5cblx0XHRcdFx0aWYgKHR5cGVvZiAoZGF0YVBvaW50c1tpXS55KSAhPT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHRcdGlmIChpID4gMCkgey8vIGlmIGZpcnN0IGRhdGFQb2ludCBpcyBudWxsIHRoZW4gbm8gbmVlZCB0byBjYWxsIHN0cm9rZSBtZXRob2Rcblx0XHRcdFx0XHRcdGN0eC5zdHJva2UoKTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRcdGdob3N0Q3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXG5cdFx0XHRcdFx0cHJldkRhdGFOdWxsID0gdHJ1ZTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHggPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5ID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnkgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXG5cdFx0XHRcdHZhciBpZCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2ldO1xuXHRcdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSA9IHtcblx0XHRcdFx0XHRpZDogaWQsIG9iamVjdFR5cGU6IFwiZGF0YVBvaW50XCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleDogaSwgeDE6IHgsIHkxOiB5XG5cdFx0XHRcdH07XG5cblxuXHRcdFx0XHQvL2RhdGFTZXJpZXMubm9EYXRhUG9pbnRzSW5QbG90QXJlYSsrO1xuXG5cdFx0XHRcdGlmIChpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSB8fCBwcmV2RGF0YU51bGwpIHtcblx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0Y3R4Lm1vdmVUbyh4LCB5KTtcblxuXG5cdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdGdob3N0Q3R4Lm1vdmVUbyh4LCB5KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IGZhbHNlO1xuXHRcdFx0XHRcdHByZXZEYXRhTnVsbCA9IGZhbHNlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyh4LCB5KTtcblxuXHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmxpbmVUbyh4LCB5KTtcblxuXHRcdFx0XHRcdGlmIChpICUgNTAwID09IDApIHtcblx0XHRcdFx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdGN0eC5tb3ZlVG8oeCwgeSk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5zdHJva2UoKTtcblx0XHRcdFx0XHRcdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRcdGdob3N0Q3R4Lm1vdmVUbyh4LCB5KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL1JlbmRlciBNYXJrZXJcblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ubWFya2VyU2l6ZSA+IDAgfHwgZGF0YVNlcmllcy5tYXJrZXJTaXplID4gMCkge1xuXG5cdFx0XHRcdFx0dmFyIG1hcmtlclByb3BzID0gZGF0YVNlcmllcy5nZXRNYXJrZXJQcm9wZXJ0aWVzKGksIHgsIHksIGN0eCk7XG5cdFx0XHRcdFx0bWFya2Vycy5wdXNoKG1hcmtlclByb3BzKTtcblxuXHRcdFx0XHRcdC8vaWYgKCFkYXRhU2VyaWVzLm1heFdpZHRoSW5YIHx8IG1hcmtlclByb3BzLnNpemUgPiBkYXRhU2VyaWVzLm1heFdpZHRoSW5YKSB7XG5cdFx0XHRcdFx0Ly9cdGRhdGFTZXJpZXMubWF4V2lkdGhJblggPSBtYXJrZXJQcm9wcy5zaXplIC8gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA+IDEgPyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgLSAxIDogcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0KTtcblx0XHRcdFx0XHQvL31cblxuXHRcdFx0XHRcdHZhciBtYXJrZXJDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdFx0Ly93aW5kb3cuY29uc29sZS5sb2coXCJpbmRleDogXCIgKyBpICsgXCI7IGlkOiBcIiArIGlkICsgXCI7IGhleDogXCIgKyBtYXJrZXJDb2xvcik7XG5cblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHksIGN0eDogZ2hvc3RDdHgsXG5cdFx0XHRcdFx0XHRcdHR5cGU6IG1hcmtlclByb3BzLnR5cGUsXG5cdFx0XHRcdFx0XHRcdHNpemU6IG1hcmtlclByb3BzLnNpemUsXG5cdFx0XHRcdFx0XHRcdGNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0Ym9yZGVyQ29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJUaGlja25lc3M6IG1hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzc1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbCB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWwgfHwgZGF0YVBvaW50c1tpXS5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcikge1xuXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwibGluZVwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnRzW2ldLFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHlcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IGRhdGFQb2ludHNbaV0ueSA+PSAwID8gMSA6IC0xLFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGN0eC5zdHJva2UoKTtcblxuXHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRnaG9zdEN0eC5zdHJva2UoKTtcblx0XHR9XG5cblx0fVxuXG5cblx0UmVuZGVySGVscGVyLmRyYXdNYXJrZXJzKG1hcmtlcnMpO1xuXHRjdHgucmVzdG9yZSgpO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uSW5mbyA9IHtcblx0XHRzb3VyY2U6IGN0eCwgZGVzdDogdGhpcy5wbG90QXJlYS5jdHgsIGFuaW1hdGlvbkNhbGxiYWNrOiBBbmltYXRpb25IZWxwZXIueENsaXBBbmltYXRpb24sIGVhc2luZ0Z1bmN0aW9uOiBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmxpbmVhciwgYW5pbWF0aW9uQmFzZTogMFxuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlclN0ZXBMaW5lID0gZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cdHZhciBjdHggPSBwbG90VW5pdC50YXJnZXRDYW52YXNDdHggfHwgdGhpcy5wbG90QXJlYS5jdHg7XG5cblx0dmFyIHRvdGFsRGF0YVNlcmllcyA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDtcblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgZ2hvc3RDdHggPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHg7XG5cdC8vdmFyIGdob3N0Q3R4ID0gdGhpcy5vdmVybGFpZENhbnZhc0N0eDtcblxuXHRjdHguc2F2ZSgpO1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdHZhciBtYXJrZXJzID0gW107XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXG5cdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblx0XHRjdHgubGluZVdpZHRoID0gZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzO1xuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXG5cdFx0aWYgKGN0eC5zZXRMaW5lRGFzaCkge1xuXHRcdFx0Y3R4LnNldExpbmVEYXNoKGdldExpbmVEYXNoQXJyYXkoZGF0YVNlcmllcy5saW5lRGFzaFR5cGUsIGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcykpO1xuXHRcdH1cblxuXHRcdHZhciBzZXJpZXNJZCA9IGRhdGFTZXJpZXMuaWQ7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtzZXJpZXNJZF0gPSB7XG5cdFx0XHRvYmplY3RUeXBlOiBcImRhdGFTZXJpZXNcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXhcblx0XHR9O1xuXHRcdHZhciBoZXhDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoc2VyaWVzSWQpO1xuXHRcdGdob3N0Q3R4LnN0cm9rZVN0eWxlID0gaGV4Q29sb3I7XG5cdFx0Ly9naG9zdEN0eC5saW5lV2lkdGggPSBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3M7XG5cdFx0Z2hvc3RDdHgubGluZVdpZHRoID0gZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzID4gMCA/IE1hdGgubWF4KGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcywgNCkgOiAwO1xuXG5cdFx0dmFyIGNvbG9yU2V0ID0gZGF0YVNlcmllcy5fY29sb3JTZXQ7XG5cdFx0dmFyIGNvbG9yID0gY29sb3JTZXRbMF07XG5cdFx0Y3R4LnN0cm9rZVN0eWxlID0gY29sb3I7XG5cblx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXHRcdHZhciBpID0gMCwgeCwgeTtcblx0XHR2YXIgZGF0YVBvaW50WDsgLy9Vc2VkIHNvIHRoYXQgd2hlbiBkYXRhUG9pbnQueCBpcyBhIERhdGVUaW1lIHZhbHVlLCBpdCBkb2Vzbid0IGdldCBjb252ZXJ0ZWQgdG8gbnVtYmVyIGJhY2sgYW5kIGZvcnRoLlxuXG5cdFx0Ly9pZiAoIWRhdGFTZXJpZXMuX29wdGlvbnMubWFya2VyU2l6ZSAmJiBkYXRhU2VyaWVzLmRhdGFQb2ludHMubGVuZ3RoIDwgMTAwMClcblx0XHQvLyAgICBkYXRhU2VyaWVzLm1hcmtlclNpemUgPSA4O1xuXHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL3ZhciB4eSA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uUGxvdEFyZWEoZGF0YVBvaW50c1swXS54LCBkYXRhUG9pbnRzWzBdLnkpO1xuXG5cdFx0XHQvL2RhdGFTZXJpZXMubm9EYXRhUG9pbnRzSW5QbG90QXJlYSA9IDBcblx0XHRcdHZhciBwcmV2RGF0YU51bGwgPSBmYWxzZTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0uZ2V0VGltZSA/IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRzW2ldLng7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1pbiB8fCBkYXRhUG9pbnRYID4gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNYXgpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0Ly9pZiAoIWlzRmluaXRlKGRhdGFQb2ludHNbaV0ueSkpXG5cdFx0XHRcdC8vICAgIGNvbnRpbnVlO1xuXG5cdFx0XHRcdGlmICh0eXBlb2YgKGRhdGFQb2ludHNbaV0ueSkgIT09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRpZiAoaSA+IDApIHsvLyBpZiBmaXJzdCBkYXRhUG9pbnQgaXMgbnVsbCB0aGVuIG5vIG5lZWQgdG8gY2FsbCBzdHJva2UgbWV0aG9kXG5cdFx0XHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5zdHJva2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRwcmV2RGF0YU51bGwgPSB0cnVlO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHByZXZZID0geTtcblxuXHRcdFx0XHR4ID0gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRYIC0gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0eSA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55IC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4LCB5MTogeVxuXHRcdFx0XHR9O1xuXG5cblx0XHRcdFx0Ly9kYXRhU2VyaWVzLm5vRGF0YVBvaW50c0luUGxvdEFyZWErKztcblxuXHRcdFx0XHRpZiAoaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgfHwgcHJldkRhdGFOdWxsKSB7XG5cdFx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdGN0eC5tb3ZlVG8oeCwgeSk7XG5cblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubW92ZVRvKHgsIHkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gZmFsc2U7XG5cdFx0XHRcdFx0cHJldkRhdGFOdWxsID0gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRjdHgubGluZVRvKHgsIHByZXZZKTtcblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5saW5lVG8oeCwgcHJldlkpO1xuXG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyh4LCB5KTtcblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5saW5lVG8oeCwgeSk7XG5cblx0XHRcdFx0XHRpZiAoaSAlIDUwMCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRjdHgubW92ZVRvKHgsIHkpO1xuXG5cdFx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdFx0Z2hvc3RDdHguc3Ryb2tlKCk7XG5cdFx0XHRcdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oeCwgeSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly9SZW5kZXIgTWFya2VyXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLm1hcmtlclNpemUgPiAwIHx8IGRhdGFTZXJpZXMubWFya2VyU2l6ZSA+IDApIHtcblxuXHRcdFx0XHRcdHZhciBtYXJrZXJQcm9wcyA9IGRhdGFTZXJpZXMuZ2V0TWFya2VyUHJvcGVydGllcyhpLCB4LCB5LCBjdHgpO1xuXHRcdFx0XHRcdG1hcmtlcnMucHVzaChtYXJrZXJQcm9wcyk7XG5cblx0XHRcdFx0XHQvL2lmICghZGF0YVNlcmllcy5tYXhXaWR0aEluWCB8fCBtYXJrZXJQcm9wcy5zaXplID4gZGF0YVNlcmllcy5tYXhXaWR0aEluWCkge1xuXHRcdFx0XHRcdC8vXHRkYXRhU2VyaWVzLm1heFdpZHRoSW5YID0gbWFya2VyUHJvcHMuc2l6ZSAvIChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgPiAxID8gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0IC0gMSA6IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCk7XG5cdFx0XHRcdFx0Ly99XG5cblx0XHRcdFx0XHR2YXIgbWFya2VyQ29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGlkKTtcblxuXHRcdFx0XHRcdC8vd2luZG93LmNvbnNvbGUubG9nKFwiaW5kZXg6IFwiICsgaSArIFwiOyBpZDogXCIgKyBpZCArIFwiOyBoZXg6IFwiICsgbWFya2VyQ29sb3IpO1xuXHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0bWFya2Vycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0eDogeCwgeTogeSwgY3R4OiBnaG9zdEN0eCxcblx0XHRcdFx0XHRcdFx0dHlwZTogbWFya2VyUHJvcHMudHlwZSxcblx0XHRcdFx0XHRcdFx0c2l6ZTogbWFya2VyUHJvcHMuc2l6ZSxcblx0XHRcdFx0XHRcdFx0Y29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJDb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdGJvcmRlclRoaWNrbmVzczogbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5pbmRleExhYmVsIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbCB8fCBkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWxGb3JtYXR0ZXIgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyKSB7XG5cblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJzdGVwTGluZVwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnRzW2ldLFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHlcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IGRhdGFQb2ludHNbaV0ueSA+PSAwID8gMSA6IC0xLFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0Z2hvc3RDdHguc3Ryb2tlKCk7XG5cdFx0fVxuXHR9XG5cblxuXHRSZW5kZXJIZWxwZXIuZHJhd01hcmtlcnMobWFya2Vycyk7XG5cdGN0eC5yZXN0b3JlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblxuXHQvL3NvdXJjZSBhbmQgZGVzdCB3b3VsZCBiZSBzYW1lIHdoZW4gYW5pbWF0aW9uIGlzIG5vdCBlbmFibGVkXG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci54Q2xpcEFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcubGluZWFyLCBhbmltYXRpb25CYXNlOiAwXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuXG5DaGFydC5wcm90b3R5cGUuYW5pbWF0aW9uUmVxdWVzdElkID0gbnVsbDtcblxuQ2hhcnQucHJvdG90eXBlLnJlcXVlc3RBbmltRnJhbWUgPSAoZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuXHRcdFx0d2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuXHRcdFx0d2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuXHRcdFx0d2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcblx0XHRcdHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuXHRcdFx0ZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAxMDAwIC8gNjApO1xuXHRcdFx0fTtcbn0pKCk7XG5cbkNoYXJ0LnByb3RvdHlwZS5jYW5jZWxSZXF1ZXN0QW5pbUZyYW1lID0gKGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSB8fFxuXHRcdHdpbmRvdy53ZWJraXRDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcblx0XHR3aW5kb3cubW96Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0d2luZG93Lm9DYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcblx0XHR3aW5kb3cubXNDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcblx0XHRjbGVhclRpbWVvdXRcbn0pKCk7XG5cbkNoYXJ0LnByb3RvdHlwZS5nZXRQZXJjZW50QW5kVG90YWwgPSBmdW5jdGlvbiAoZHMsIGRwKSB7XG5cblx0dmFyIGRwWCA9IG51bGw7XG5cdHZhciB0b3RhbCA9IG51bGw7XG5cdHZhciBwZXJjZW50ID0gbnVsbDtcblxuXHRpZiAoZHMudHlwZS5pbmRleE9mKFwic3RhY2tlZFwiKSA+PSAwKSB7XG5cdFx0dG90YWwgPSAwO1xuXHRcdGRwWCA9IGRwLnguZ2V0VGltZSA/IGRwLnguZ2V0VGltZSgpIDogZHAueDtcblx0XHRpZiAoZHBYIGluIGRzLnBsb3RVbml0LnlUb3RhbHMpIHtcblx0XHRcdHRvdGFsID0gZHMucGxvdFVuaXQueVRvdGFsc1tkcFhdO1xuXG5cdFx0XHRpZiAoIWlzTmFOKGRwLnkpKSB7XG5cdFx0XHQgICAgaWYgKHRvdGFsID09PSAwKVxuXHRcdFx0ICAgICAgICBwZXJjZW50ID0gMDtcbiAgICAgICAgICAgICAgICAgIGVsc2Vcblx0XHRcdCAgICAgICAgcGVyY2VudCA9IChkcC55IC8gdG90YWwpICogMTAwO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0ICAgIHBlcmNlbnQgPSAwO1xuXHRcdH1cblx0fSBlbHNlIGlmIChkcy50eXBlID09PSBcInBpZVwiIHx8IGRzLnR5cGUgPT09IFwiZG91Z2hudXRcIikge1xuXHRcdHRvdGFsID0gMDtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRzLmRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0aWYgKCFpc05hTihkcy5kYXRhUG9pbnRzW2ldLnkpKVxuXHRcdFx0XHR0b3RhbCArPSBkcy5kYXRhUG9pbnRzW2ldLnk7XG5cdFx0fVxuXG5cdFx0aWYgKCFpc05hTihkcC55KSlcblx0XHRcdHBlcmNlbnQgPSAoZHAueSAvIHRvdGFsKSAqIDEwMDtcblx0XHRlbHNlXG5cdFx0XHRwZXJjZW50ID0gMDtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0cGVyY2VudDogcGVyY2VudCwgdG90YWw6IHRvdGFsXG5cdH07XG59XG5cbkNoYXJ0LnByb3RvdHlwZS5yZXBsYWNlS2V5d29yZHNXaXRoVmFsdWUgPSBmdW5jdGlvbiAoc3RyLCBkcCwgZHMsIGRwSW5kZXgsIGluZGV4S2V5d29yZFZhbHVlKSB7XG5cdC8vdmFyIHJlZ2V4ID0gL1xce1xccypbYS16QS1aXStcXHMqXFx9fFwiW15cIl0qXCJ8J1teJ10qJy9nO1xuXHR2YXIgcmVnZXggPSAvXFx7Lio/XFx9fFwiW15cIl0qXCJ8J1teJ10qJy9nO1xuXHR2YXIgY2hhcnQgPSB0aGlzO1xuXHRpbmRleEtleXdvcmRWYWx1ZSA9IHR5cGVvZiAoaW5kZXhLZXl3b3JkVmFsdWUpID09PSBcInVuZGVmaW5lZFwiID8gMCA6IGluZGV4S2V5d29yZFZhbHVlO1xuXG5cdGlmICgoZHMudHlwZS5pbmRleE9mKFwic3RhY2tlZFwiKSA+PSAwIHx8IChkcy50eXBlID09PSBcInBpZVwiIHx8IGRzLnR5cGUgPT09IFwiZG91Z2hudXRcIikpICYmIChzdHIuaW5kZXhPZihcIiNwZXJjZW50XCIpID49IDAgfHwgc3RyLmluZGV4T2YoXCIjdG90YWxcIikgPj0gMCkpIHtcblx0XHR2YXIgcGVyY2VudCA9IFwiI3BlcmNlbnRcIjtcblx0XHR2YXIgdG90YWwgPSBcIiN0b3RhbFwiO1xuXHRcdHZhciBkcFggPSBudWxsO1xuXG5cdFx0dmFyIHBlcmNlbnRBbmRUb3RhbCA9IHRoaXMuZ2V0UGVyY2VudEFuZFRvdGFsKGRzLCBkcCk7XG5cblx0XHR0b3RhbCA9IGlzTmFOKHBlcmNlbnRBbmRUb3RhbC50b3RhbCkgPyB0b3RhbCA6IHBlcmNlbnRBbmRUb3RhbC50b3RhbDtcblx0XHRwZXJjZW50ID0gaXNOYU4ocGVyY2VudEFuZFRvdGFsLnBlcmNlbnQpID8gcGVyY2VudCA6IHBlcmNlbnRBbmRUb3RhbC5wZXJjZW50O1xuXG5cdFx0ZG8ge1xuXHRcdFx0dmFyIHBlcmNlbnRGb3JtYXRTdHJpbmcgPSBcIlwiO1xuXHRcdFx0aWYgKGRzLnBlcmNlbnRGb3JtYXRTdHJpbmcpXG5cdFx0XHRcdHBlcmNlbnRGb3JtYXRTdHJpbmcgPSBkcy5wZXJjZW50Rm9ybWF0U3RyaW5nO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHBlcmNlbnRGb3JtYXRTdHJpbmcgPSBcIiMsIyMwLlwiO1xuXHRcdFx0XHR2YXIgbnVtYmVyT2ZEZWNpbWFscyA9IE1hdGgubWF4KE1hdGguY2VpbChNYXRoLmxvZygxIC8gTWF0aC5hYnMocGVyY2VudCkpIC8gTWF0aC5MTjEwKSwgMik7XG5cblx0XHRcdFx0aWYgKGlzTmFOKG51bWJlck9mRGVjaW1hbHMpIHx8ICFpc0Zpbml0ZShudW1iZXJPZkRlY2ltYWxzKSlcblx0XHRcdFx0XHRudW1iZXJPZkRlY2ltYWxzID0gMjtcblxuXHRcdFx0XHRmb3IgKHZhciBuID0gMDsgbiA8IG51bWJlck9mRGVjaW1hbHM7IG4rKykge1xuXHRcdFx0XHRcdHBlcmNlbnRGb3JtYXRTdHJpbmcgKz0gXCIjXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0c3RyID0gc3RyLnJlcGxhY2UoXCIjcGVyY2VudFwiLCBudW1iZXJGb3JtYXQocGVyY2VudCwgcGVyY2VudEZvcm1hdFN0cmluZywgY2hhcnQuX2N1bHR1cmVJbmZvKSk7XG5cdFx0XHRzdHIgPSBzdHIucmVwbGFjZShcIiN0b3RhbFwiLCBudW1iZXJGb3JtYXQodG90YWwsIGRzLnlWYWx1ZUZvcm1hdFN0cmluZyA/IGRzLnlWYWx1ZUZvcm1hdFN0cmluZyA6IFwiIywjIzAuIyMjIyMjIyNcIikpO1xuXHRcdH0gd2hpbGUgKHN0ci5pbmRleE9mKFwiI3BlcmNlbnRcIikgPj0gMCB8fCBzdHIuaW5kZXhPZihcIiN0b3RhbFwiKSA+PSAwKTtcblx0fVxuXG5cblx0dmFyIGZjbiA9IGZ1bmN0aW9uICgkMCkge1xuXHRcdGlmICgoJDBbMF0gPT09IFwiXFxcIlwiICYmICQwWyQwLmxlbmd0aCAtIDFdID09PSBcIlxcXCJcIikgfHwgKCQwWzBdID09PSBcIlxcJ1wiICYmICQwWyQwLmxlbmd0aCAtIDFdID09PSBcIlxcJ1wiKSlcblx0XHRcdHJldHVybiAkMC5zbGljZSgxLCAkMC5sZW5ndGggLSAxKTtcblxuXHRcdHZhciBrZXkgPSB0cmltU3RyaW5nKCQwLnNsaWNlKDEsICQwLmxlbmd0aCAtIDEpKTtcblx0XHRrZXkgPSBrZXkucmVwbGFjZShcIiNpbmRleFwiLCBpbmRleEtleXdvcmRWYWx1ZSk7XG5cblx0XHR2YXIgaW5kZXggPSBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciBtYXRjaCA9IGtleS5tYXRjaCgvKC4qPylcXHMqXFxbXFxzKiguKj8pXFxzKlxcXS8pO1xuXHRcdFx0aWYgKG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aW5kZXggPSB0cmltU3RyaW5nKG1hdGNoWzJdKTtcblx0XHRcdFx0a2V5ID0gdHJpbVN0cmluZyhtYXRjaFsxXSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdH07XG5cblxuXHRcdHZhciBvYmogPSBudWxsO1xuXG5cdFx0aWYgKGtleSA9PT0gXCJjb2xvclwiKSB7XG5cdFx0XHRyZXR1cm4gZHAuY29sb3IgPyBkcC5jb2xvciA6IGRzLmNvbG9yID8gZHMuY29sb3IgOiBkcy5fY29sb3JTZXRbZHBJbmRleCAlIGRzLl9jb2xvclNldC5sZW5ndGhdO1xuXHRcdH1cblxuXHRcdGlmIChkcC5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuXHRcdFx0b2JqID0gZHA7XG5cdFx0ZWxzZSBpZiAoZHMuaGFzT3duUHJvcGVydHkoa2V5KSlcblx0XHRcdG9iaiA9IGRzO1xuXHRcdGVsc2UgcmV0dXJuIFwiXCI7XG5cblx0XHR2YXIgdmFsdWUgPSBvYmpba2V5XTtcblx0XHRpZiAoaW5kZXggIT09IG51bGwpXG5cdFx0XHR2YWx1ZSA9IHZhbHVlW2luZGV4XTtcblxuXHRcdGlmIChrZXkgPT09IFwieFwiKSB7XG5cdFx0XHRpZiAoY2hhcnQuYXhpc1ggJiYgY2hhcnQucGxvdEluZm8uYXhpc1hWYWx1ZVR5cGUgPT09IFwiZGF0ZVRpbWVcIilcblx0XHRcdFx0cmV0dXJuIGRhdGVGb3JtYXQodmFsdWUsIGRwLnhWYWx1ZUZvcm1hdFN0cmluZyA/IGRwLnhWYWx1ZUZvcm1hdFN0cmluZyA6IGRzLnhWYWx1ZUZvcm1hdFN0cmluZyA/IGRzLnhWYWx1ZUZvcm1hdFN0cmluZyA6IGNoYXJ0LmF4aXNYICYmIGNoYXJ0LmF4aXNYLnZhbHVlRm9ybWF0U3RyaW5nID8gY2hhcnQuYXhpc1gudmFsdWVGb3JtYXRTdHJpbmcgOiBcIkREIE1NTSBZWVwiLCBjaGFydC5fY3VsdHVyZUluZm8pO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXR1cm4gbnVtYmVyRm9ybWF0KHZhbHVlLCBkcC54VmFsdWVGb3JtYXRTdHJpbmcgPyBkcC54VmFsdWVGb3JtYXRTdHJpbmcgOiBkcy54VmFsdWVGb3JtYXRTdHJpbmcgPyBkcy54VmFsdWVGb3JtYXRTdHJpbmcgOiBcIiMsIyMwLiMjIyMjIyMjXCIsIGNoYXJ0Ll9jdWx0dXJlSW5mbyk7XG5cdFx0fSBlbHNlIGlmIChrZXkgPT09IFwieVwiKVxuXHRcdFx0cmV0dXJuIG51bWJlckZvcm1hdCh2YWx1ZSwgZHAueVZhbHVlRm9ybWF0U3RyaW5nID8gZHAueVZhbHVlRm9ybWF0U3RyaW5nIDogZHMueVZhbHVlRm9ybWF0U3RyaW5nID8gZHMueVZhbHVlRm9ybWF0U3RyaW5nIDogXCIjLCMjMC4jIyMjIyMjI1wiLCBjaGFydC5fY3VsdHVyZUluZm8pO1xuXHRcdGVsc2UgaWYgKGtleSA9PT0gXCJ6XCIpXG5cdFx0XHRyZXR1cm4gbnVtYmVyRm9ybWF0KHZhbHVlLCBkcC56VmFsdWVGb3JtYXRTdHJpbmcgPyBkcC56VmFsdWVGb3JtYXRTdHJpbmcgOiBkcy56VmFsdWVGb3JtYXRTdHJpbmcgPyBkcy56VmFsdWVGb3JtYXRTdHJpbmcgOiBcIiMsIyMwLiMjIyMjIyMjXCIsIGNoYXJ0Ll9jdWx0dXJlSW5mbyk7XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0cmV0dXJuIHN0ci5yZXBsYWNlKHJlZ2V4LCBmY24pO1xufVxuXG5cbkNoYXJ0LnByb3RvdHlwZS5yZW5kZXJTcGxpbmUgPSBTcGxpbmVDaGFydDtcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlckNvbHVtbiA9IENvbHVtbkNoYXJ0XG5cbkNoYXJ0LnByb3RvdHlwZS5yZW5kZXJTdGFja2VkQ29sdW1uID0gU3RhY2tlZENvbHVtbkNoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyU3RhY2tlZENvbHVtbjEwMCA9IFN0YWNrZWRDb2x1bW4xMDBDaGFydDtcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlckJhciA9IEJhckNoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyU3RhY2tlZEJhciA9IFN0YWNrZWRCYXJDaGFydDtcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlclN0YWNrZWRCYXIxMDAgPSBTdGFja2VkQmFyMTAwQ2hhcnQ7XG5cbkNoYXJ0LnByb3RvdHlwZS5yZW5kZXJBcmVhID0gQXJlYUNoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyU3BsaW5lQXJlYSA9IFNwbGluZUFyZWFDaGFydDtcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlclN0ZXBBcmVhID0gU3RlcEFyZWFDaGFydDtcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlclN0YWNrZWRBcmVhID0gU3RhY2tlZEFyZWFDaGFydDtcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlclN0YWNrZWRBcmVhMTAwID0gU3RhY2tlZEFyZWExMDBDaGFydDtcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlckJ1YmJsZSA9IEJ1YmJsZUNoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyU2NhdHRlciA9IFNjYXR0ZXJDaGFydDtcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlckNhbmRsZXN0aWNrID0gQ2FuZGxlc3RpY2tDaGFydDtcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlclJhbmdlQ29sdW1uID0gUmFuZ2VDb2x1bW5DaGFydDtcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlclJhbmdlQmFyID0gUmFuZ2VCYXJDaGFydDtcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlclJhbmdlQXJlYSA9IFJhbmdlQXJlYUNoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyUmFuZ2VTcGxpbmVBcmVhID0gUmFuZ2VTcGxpbmVBcmVhQ2hhcnQ7XG5cbkNoYXJ0LnByb3RvdHlwZS5yZW5kZXJQaWUgPSBQaWVDaGFydDtcblxuZXhwb3J0IGRlZmF1bHQgQ2hhcnQ7XG4iLCJcbmltcG9ydCBDYW52YXNKU09iamVjdCBmcm9tICcuL2NhbnZhc2pzJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcbmltcG9ydCB7Y3VsdHVyZXN9IGZyb20gJy4uL2NvbnN0YW50cy9jdWx0dXJlJztcblxuZnVuY3Rpb24gQ3VsdHVyZUluZm8oY3VsdHVyZSkge1xuXG4gIHZhciBjdWx0dXJlSW5mbztcblxuICBpZiAoY3VsdHVyZSAmJiBjdWx0dXJlc1tjdWx0dXJlXSkgY3VsdHVyZUluZm8gPSBjdWx0dXJlc1tjdWx0dXJlXTtcblxuICBDdWx0dXJlSW5mby5iYXNlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgXCJDdWx0dXJlSW5mb1wiLCBjdWx0dXJlSW5mbyk7XG5cbn1cblxuZXh0ZW5kKEN1bHR1cmVJbmZvLCBDYW52YXNKU09iamVjdCk7XG5cbmV4cG9ydCBkZWZhdWx0IEN1bHR1cmVJbmZvO1xuIiwiXG5pbXBvcnQgQ2FudmFzSlNPYmplY3QgZnJvbSAnLi9jYW52YXNqcyc7XG5pbXBvcnQge2V4dGVuZCwgZ2V0UHJvcGVydHl9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5mdW5jdGlvbiBEYXRhU2VyaWVzKGNoYXJ0LCBvcHRpb25zLCB0aGVtZSwgaW5kZXgsIGlkKSB7XG4gIERhdGFTZXJpZXMuYmFzZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIFwiRGF0YVNlcmllc1wiLCBvcHRpb25zLCB0aGVtZSk7XG5cbiAgdGhpcy5jaGFydCA9IGNoYXJ0O1xuICB0aGlzLmNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcbiAgdGhpcy5fY3R4ID0gY2hhcnQuY2FudmFzLmN0eDtcbiAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB0aGlzLm5vRGF0YVBvaW50c0luUGxvdEFyZWEgPSAwO1xuICAvL3RoaXMubWF4V2lkdGhJblggPSAwO1xuICB0aGlzLmlkID0gaWQ7XG4gIHRoaXMuY2hhcnQuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdID0ge1xuICAgIGlkOiBpZCwgb2JqZWN0VHlwZTogXCJkYXRhU2VyaWVzXCIsIGRhdGFTZXJpZXNJbmRleDogaW5kZXhcbiAgfVxuICB0aGlzLmRhdGFQb2ludElkcyA9IFtdO1xuICB0aGlzLnBsb3RVbml0ID0gW107XG5cbiAgdGhpcy5heGlzWCA9IG51bGw7XG4gIHRoaXMuYXhpc1kgPSBudWxsO1xuXG4gIGlmICh0aGlzLmZpbGxPcGFjaXR5ID09PSBudWxsKSB7XG4gICAgaWYgKHRoaXMudHlwZS5tYXRjaCgvYXJlYS9pKSlcbiAgICAgIHRoaXMuZmlsbE9wYWNpdHkgPSAuNztcbiAgICBlbHNlXG4gICAgICB0aGlzLmZpbGxPcGFjaXR5ID0gMTtcbiAgfVxuXG5cbiAgdGhpcy5heGlzUGxhY2VtZW50ID0gdGhpcy5nZXREZWZhdWx0QXhpc1BsYWNlbWVudCgpO1xuXG4gIGlmICh0eXBlb2YgKHRoaXMuX29wdGlvbnMuaW5kZXhMYWJlbEZvbnRTaXplKSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXG4gICAgdGhpcy5pbmRleExhYmVsRm9udFNpemUgPSB0aGlzLmNoYXJ0LmdldEF1dG9Gb250U2l6ZSh0aGlzLmluZGV4TGFiZWxGb250U2l6ZSk7XG4gIH1cbn1cblxuZXh0ZW5kKERhdGFTZXJpZXMsIENhbnZhc0pTT2JqZWN0KTtcblxuLy9TdGF0aWMgTWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgYXhpc1BsYWNlbWVudCBmb3IgYSBnaXZlbiBDaGFydFR5cGUuIFJldHVybnMgb25lIG9mIFwibm9ybWFsXCIsIFwieHlTd2FwcGVkXCIsIFwibm9uZVwiXG5EYXRhU2VyaWVzLnByb3RvdHlwZS5nZXREZWZhdWx0QXhpc1BsYWNlbWVudCA9IGZ1bmN0aW9uICgpIHtcblxuICAvL2lmICghdGhpcy52aXNpYmxlKVxuICAvL1x0cmV0dXJuIFwibm9uZVwiO1xuXG4gIC8vdHlwZSA9IHRoaXMudHlwZS50b0xvd2VyQ2FzZSgpO1xuICB2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuICBpZiAodHlwZSA9PT0gXCJjb2x1bW5cIiB8fCB0eXBlID09PSBcImxpbmVcIiB8fCB0eXBlID09PSBcInN0ZXBMaW5lXCIgfHwgdHlwZSA9PT0gXCJzcGxpbmVcIiB8fCB0eXBlID09PSBcImFyZWFcIiB8fCB0eXBlID09PSBcInN0ZXBBcmVhXCIgfHwgdHlwZSA9PT0gXCJzcGxpbmVBcmVhXCIgfHwgdHlwZSA9PT0gXCJzdGFja2VkQ29sdW1uXCIgfHwgdHlwZSA9PT0gXCJzdGFja2VkTGluZVwiIHx8IHR5cGUgPT09IFwiYnViYmxlXCIgfHwgdHlwZSA9PT0gXCJzY2F0dGVyXCJcbiAgICB8fCB0eXBlID09PSBcInN0YWNrZWRBcmVhXCIgfHwgdHlwZSA9PT0gXCJzdGFja2VkQ29sdW1uMTAwXCIgfHwgdHlwZSA9PT0gXCJzdGFja2VkTGluZTEwMFwiIHx8IHR5cGUgPT09IFwic3RhY2tlZEFyZWExMDBcIlxuICAgIHx8IHR5cGUgPT09IFwiY2FuZGxlc3RpY2tcIiB8fCB0eXBlID09PSBcIm9obGNcIiB8fCB0eXBlID09PSBcInJhbmdlQ29sdW1uXCIgfHwgdHlwZSA9PT0gXCJyYW5nZUFyZWFcIiB8fCB0eXBlID09PSBcInJhbmdlU3BsaW5lQXJlYVwiKSB7XG4gICAgcmV0dXJuIFwibm9ybWFsXCI7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gXCJiYXJcIiB8fCB0eXBlID09PSBcInN0YWNrZWRCYXJcIiB8fCB0eXBlID09PSBcInN0YWNrZWRCYXIxMDBcIiB8fCB0eXBlID09PSBcInJhbmdlQmFyXCIpIHtcblxuICAgIHJldHVybiBcInh5U3dhcHBlZFwiO1xuICB9XG4gIGVsc2UgaWYgKHR5cGUgPT09IFwicGllXCIgfHwgdHlwZSA9PT0gXCJkb3VnaG51dFwiIHx8IHR5cGUgPT09IFwiZnVubmVsXCIpIHtcbiAgICByZXR1cm4gXCJub25lXCI7XG4gIH0gZWxzZSB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKFwiVW5rbm93biBDaGFydCBUeXBlOiBcIiArIHR5cGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbkRhdGFTZXJpZXMuZ2V0RGVmYXVsdExlZ2VuZE1hcmtlciA9IGZ1bmN0aW9uICh0eXBlKSB7XG5cbiAgLy90eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICh0eXBlID09PSBcImNvbHVtblwiIHx8IHR5cGUgPT09IFwic3RhY2tlZENvbHVtblwiIHx8IHR5cGUgPT09IFwic3RhY2tlZExpbmVcIiB8fCB0eXBlID09PSBcImJhclwiIHx8IHR5cGUgPT09IFwic3RhY2tlZEJhclwiIHx8IHR5cGUgPT09IFwic3RhY2tlZEJhcjEwMFwiXG4gICAgfHwgdHlwZSA9PT0gXCJidWJibGVcIiB8fCB0eXBlID09PSBcInNjYXR0ZXJcIlxuICAgIHx8IHR5cGUgPT09IFwic3RhY2tlZENvbHVtbjEwMFwiIHx8IHR5cGUgPT09IFwic3RhY2tlZExpbmUxMDBcIiB8fCB0eXBlID09PSBcInN0ZXBBcmVhXCJcbiAgICB8fCB0eXBlID09PSBcImNhbmRsZXN0aWNrXCIgfHwgdHlwZSA9PT0gXCJvaGxjXCIgfHwgdHlwZSA9PT0gXCJyYW5nZUNvbHVtblwiIHx8IHR5cGUgPT09IFwicmFuZ2VCYXJcIiB8fCB0eXBlID09PSBcInJhbmdlQXJlYVwiIHx8IHR5cGUgPT09IFwicmFuZ2VTcGxpbmVBcmVhXCIpIHtcbiAgICByZXR1cm4gXCJzcXVhcmVcIjtcbiAgfVxuICBlbHNlIGlmICh0eXBlID09PSBcImxpbmVcIiB8fCB0eXBlID09PSBcInN0ZXBMaW5lXCIgfHwgdHlwZSA9PT0gXCJzcGxpbmVcIiB8fCB0eXBlID09PSBcInBpZVwiIHx8IHR5cGUgPT09IFwiZG91Z2hudXRcIiB8fCB0eXBlID09PSBcImZ1bm5lbFwiKSB7XG4gICAgcmV0dXJuIFwiY2lyY2xlXCI7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJhcmVhXCIgfHwgdHlwZSA9PT0gXCJzcGxpbmVBcmVhXCIgfHwgdHlwZSA9PT0gXCJzdGFja2VkQXJlYVwiIHx8IHR5cGUgPT09IFwic3RhY2tlZEFyZWExMDBcIikge1xuICAgIHJldHVybiBcInRyaWFuZ2xlXCJcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cuY29uc29sZS5sb2coXCJVbmtub3duIENoYXJ0IFR5cGU6IFwiICsgdHlwZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLy9GaW5kcyBkYXRhUG9pbnQgd2l0aCB0aGUgZ2l2ZW4geCB2YWx1ZS4gSWYgZmluZENsb3Nlc3QgaXMgc2V0LCBmaW5kcyBkYXRhUG9pbnQgd2l0aCBjbG9zZXN0IHggdmFsdWUuXG4vL1JldHVybnMgc2VhcmNoUmVzdWx0IG9iamVjdCBpZiBmb3VuZCwgZWxzZSByZXR1cm5zIG51bGxcbkRhdGFTZXJpZXMucHJvdG90eXBlLmdldERhdGFQb2ludEF0WCA9IGZ1bmN0aW9uICh4LCBmaW5kQ2xvc2VzdCkge1xuXG4gIGlmICghdGhpcy5kYXRhUG9pbnRzIHx8IHRoaXMuZGF0YVBvaW50cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gIHZhciBzZWFyY2hSZXN1bHQgPSB7XG4gICAgZGF0YVBvaW50OiBudWxsLCBkaXN0YW5jZTogSW5maW5pdHksIGluZGV4OiBOYU5cbiAgfTtcbiAgdmFyIGRhdGFQb2ludCA9IG51bGw7XG5cbiAgdmFyIGogPSAwO1xuICB2YXIgaSA9IDA7XG4gIHZhciBkaXJlY3Rpb24gPSAxOyAvLyArMSBmb3IgZm93YXJkIGFuZCAtMSBmb3IgYmFja3dhcmQuXG5cbiAgdmFyIG1pbmltdW1YRGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgdmFyIGZvcndhcmRNaXNzQ291bnQgPSAwLCBiYWNrd2FyZE1pc3NDb3VudCA9IDA7XG4gIHZhciBtYXhNaXNzQ291bnQgPSAxMDAwO1xuICB2YXIgc2VhcmNoU3RhcnRJbmRleCA9IDA7XG5cbiAgaWYgKHRoaXMuY2hhcnQucGxvdEluZm8uYXhpc1BsYWNlbWVudCAhPT0gXCJub25lXCIpIHtcblxuICAgIC8vdmFyIHhSYW5nZSA9ICh0aGlzLmRhdGFQb2ludHNbdGhpcy5kYXRhUG9pbnRzLmxlbmd0aCAtIDFdLnggLSB0aGlzLmRhdGFQb2ludHNbMF0ueCk7XG5cbiAgICAvL2lmICh4UmFuZ2UgPiAwKVxuICAgIC8vXHRzZWFyY2hTdGFydEluZGV4ID0gKCh0aGlzLmRhdGFQb2ludHMubGVuZ3RoIC0gMSkgLyB4UmFuZ2UgKiAoeCAtIHRoaXMuZGF0YVBvaW50c1swXS54KSkgPj4gMDtcbiAgICAvL2Vsc2VcbiAgICAvL1x0c2VhcmNoU3RhcnRJbmRleCA9IDA7XG5cbiAgICB2YXIgeFJhbmdlID0gKHRoaXMuZGF0YVBvaW50c1t0aGlzLmRhdGFQb2ludHMubGVuZ3RoIC0gMV0ueCAtIHRoaXMuZGF0YVBvaW50c1swXS54KTtcblxuICAgIGlmICh4UmFuZ2UgPiAwKVxuICAgICAgc2VhcmNoU3RhcnRJbmRleCA9IE1hdGgubWluKE1hdGgubWF4KCgodGhpcy5kYXRhUG9pbnRzLmxlbmd0aCAtIDEpIC8geFJhbmdlICogKHggLSB0aGlzLmRhdGFQb2ludHNbMF0ueCkpID4+IDAsIDApLCB0aGlzLmRhdGFQb2ludHMubGVuZ3RoKTtcbiAgICBlbHNlXG4gICAgICBzZWFyY2hTdGFydEluZGV4ID0gMDtcblxuICAgIC8vc2VhcmNoU3RhcnRJbmRleCA9ICgodGhpcy5kYXRhUG9pbnRzW3RoaXMuZGF0YVBvaW50cy5sZW5ndGggLSAxXS54IC0gdGhpcy5kYXRhUG9pbnRzWzBdLngpIC8gdGhpcy5kYXRhUG9pbnRzLmxlbmd0aCAqICh4IC0gdGhpcy5kYXRhUG9pbnRzWzBdLngpKSA+PiAwO1xuICB9XG5cbiAgd2hpbGUgKHRydWUpIHtcblxuICAgIGkgPSAoZGlyZWN0aW9uID4gMCkgPyBzZWFyY2hTdGFydEluZGV4ICsgaiA6IHNlYXJjaFN0YXJ0SW5kZXggLSBqO1xuXG4gICAgaWYgKGkgPj0gMCAmJiBpIDwgdGhpcy5kYXRhUG9pbnRzLmxlbmd0aCkge1xuXG4gICAgICBkYXRhUG9pbnQgPSB0aGlzLmRhdGFQb2ludHNbaV07XG5cbiAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguYWJzKGRhdGFQb2ludC54IC0geCk7XG5cbiAgICAgIGlmIChkaXN0YW5jZSA8IHNlYXJjaFJlc3VsdC5kaXN0YW5jZSkge1xuICAgICAgICBzZWFyY2hSZXN1bHQuZGF0YVBvaW50ID0gZGF0YVBvaW50O1xuICAgICAgICBzZWFyY2hSZXN1bHQuZGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgc2VhcmNoUmVzdWx0LmluZGV4ID0gaTtcbiAgICAgIH1cblxuICAgICAgdmFyIHhEaXN0YW5jZSA9IE1hdGguYWJzKGRhdGFQb2ludC54IC0geCk7XG4gICAgICBpZiAoeERpc3RhbmNlIDw9IG1pbmltdW1YRGlzdGFuY2UpXG4gICAgICAgIG1pbmltdW1YRGlzdGFuY2UgPSB4RGlzdGFuY2U7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA+IDApXG4gICAgICAgICAgZm9yd2FyZE1pc3NDb3VudCsrO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgYmFja3dhcmRNaXNzQ291bnQrKztcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcndhcmRNaXNzQ291bnQgPiBtYXhNaXNzQ291bnQgJiYgYmFja3dhcmRNaXNzQ291bnQgPiBtYXhNaXNzQ291bnQpXG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICB9IGVsc2UgaWYgKHNlYXJjaFN0YXJ0SW5kZXggLSBqIDwgMCAmJiBzZWFyY2hTdGFydEluZGV4ICsgaiA+PSB0aGlzLmRhdGFQb2ludHMubGVuZ3RoKVxuICAgICAgYnJlYWs7XG5cbiAgICBpZiAoZGlyZWN0aW9uID09PSAtMSkge1xuICAgICAgaisrO1xuICAgICAgZGlyZWN0aW9uID0gMTtcbiAgICB9IGVsc2VcbiAgICAgIGRpcmVjdGlvbiA9IC0xO1xuICB9XG5cblxuICBpZiAoIWZpbmRDbG9zZXN0ICYmIHNlYXJjaFJlc3VsdC5kYXRhUG9pbnQueCA9PT0geClcbiAgICByZXR1cm4gc2VhcmNoUmVzdWx0O1xuICBlbHNlIGlmIChmaW5kQ2xvc2VzdCAmJiBzZWFyY2hSZXN1bHQuZGF0YVBvaW50ICE9PSBudWxsKVxuICAgIHJldHVybiBzZWFyY2hSZXN1bHQ7XG4gIGVsc2VcbiAgICByZXR1cm4gbnVsbDtcbn1cblxuLy8geCAmIHkgc2hvdWxkIGJlIGluIHBpeGVscy4gQ2FuIGJlIHVzZWQgb25seSBhZnRlciByZW5kZXJpbmcgdGhlIGNoYXJ0LlxuRGF0YVNlcmllcy5wcm90b3R5cGUuZ2V0RGF0YVBvaW50QXRYWSA9IGZ1bmN0aW9uICh4LCB5LCBnZXRDbG9zZXN0KSB7XG5cbiAgaWYgKCF0aGlzLmRhdGFQb2ludHMgfHwgdGhpcy5kYXRhUG9pbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgZ2V0Q2xvc2VzdCA9IGdldENsb3Nlc3QgfHwgZmFsc2U7XG4gIHZhciByZXN1bHRzID0gW107XG4gIHZhciBqID0gMCwgaSA9IDA7XG4gIHZhciBkaXJlY3Rpb24gPSAxOyAvLyArMSBmb3IgZm93YXJkIGFuZCAtMSBmb3IgYmFja3dhcmQuXG4gIHZhciBmb3VuZERhdGFQb2ludCA9IGZhbHNlO1xuICB2YXIgbWluaW11bVhEaXN0YW5jZSA9IEluZmluaXR5O1xuICB2YXIgZm9yd2FyZE1pc3NDb3VudCA9IDAsIGJhY2t3YXJkTWlzc0NvdW50ID0gMDtcbiAgdmFyIG1heE1pc3NDb3VudCA9IDEwMDA7XG4gIHZhciBzZWFyY2hTdGFydEluZGV4ID0gMDtcblxuICBpZiAodGhpcy5jaGFydC5wbG90SW5mby5heGlzUGxhY2VtZW50ICE9PSBcIm5vbmVcIikge1xuICAgIHZhciB4dmFsID0gdGhpcy5jaGFydC5heGlzWC5nZXRYVmFsdWVBdCh7IHg6IHgsIHk6IHkgfSk7XG5cbiAgICB2YXIgeFJhbmdlID0gKHRoaXMuZGF0YVBvaW50c1t0aGlzLmRhdGFQb2ludHMubGVuZ3RoIC0gMV0ueCAtIHRoaXMuZGF0YVBvaW50c1swXS54KTtcblxuICAgIGlmICh4UmFuZ2UgPiAwKVxuICAgICAgc2VhcmNoU3RhcnRJbmRleCA9IE1hdGgubWluKE1hdGgubWF4KCgodGhpcy5kYXRhUG9pbnRzLmxlbmd0aCAtIDEpIC8geFJhbmdlICogKHh2YWwgLSB0aGlzLmRhdGFQb2ludHNbMF0ueCkpID4+IDAsIDApLCB0aGlzLmRhdGFQb2ludHMubGVuZ3RoKTtcbiAgICBlbHNlXG4gICAgICBzZWFyY2hTdGFydEluZGV4ID0gMDtcblxuICAgIC8vdmFyIHhSYW5nZSA9ICh0aGlzLmF4aXNYLl9hYnNvbHV0ZU1heGltdW0gLSB0aGlzLmF4aXNYLl9hYnNvbHV0ZU1pbmltdW0pO1xuXG4gICAgLy9pZiAoeFJhbmdlID4gMClcbiAgICAvL1x0c2VhcmNoU3RhcnRJbmRleCA9IE1hdGgubWluKE1hdGgubWF4KCgodGhpcy5kYXRhUG9pbnRzLmxlbmd0aCAtIDEpIC8geFJhbmdlICogKHh2YWwgLSB0aGlzLmF4aXNYLl9hYnNvbHV0ZU1pbmltdW0pKSA+PiAwLCAwKSwgdGhpcy5kYXRhUG9pbnRzLmxlbmd0aCk7XG4gICAgLy9lbHNlXG4gICAgLy9cdHNlYXJjaFN0YXJ0SW5kZXggPSAwO1xuICB9XG5cbiAgd2hpbGUgKHRydWUpIHtcblxuICAgIC8vaSA9IHNlYXJjaFN0YXJ0SW5kZXggKyAoaiAqIGRpcmVjdGlvbik7XG4gICAgaSA9IChkaXJlY3Rpb24gPiAwKSA/IHNlYXJjaFN0YXJ0SW5kZXggKyBqIDogc2VhcmNoU3RhcnRJbmRleCAtIGo7XG5cbiAgICBpZiAoaSA+PSAwICYmIGkgPCB0aGlzLmRhdGFQb2ludHMubGVuZ3RoKSB7XG5cbiAgICAgIHZhciBpZCA9IHRoaXMuZGF0YVBvaW50SWRzW2ldO1xuICAgICAgdmFyIHZpc3VhbEluZm8gPSB0aGlzLmNoYXJ0Ll9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXTtcbiAgICAgIHZhciBkYXRhUG9pbnQgPSB0aGlzLmRhdGFQb2ludHNbaV07XG4gICAgICB2YXIgZGlzdGFuY2UgPSBudWxsO1xuXG4gICAgICBpZiAodmlzdWFsSW5mbykge1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG5cbiAgICAgICAgICBjYXNlIFwiY29sdW1uXCI6XG4gICAgICAgICAgY2FzZSBcInN0YWNrZWRDb2x1bW5cIjpcbiAgICAgICAgICBjYXNlIFwic3RhY2tlZENvbHVtbjEwMFwiOlxuICAgICAgICAgIGNhc2UgXCJiYXJcIjpcbiAgICAgICAgICBjYXNlIFwic3RhY2tlZEJhclwiOlxuICAgICAgICAgIGNhc2UgXCJzdGFja2VkQmFyMTAwXCI6XG4gICAgICAgICAgY2FzZSBcInJhbmdlQ29sdW1uXCI6XG4gICAgICAgICAgY2FzZSBcInJhbmdlQmFyXCI6XG5cbiAgICAgICAgICAgIGlmICh4ID49IHZpc3VhbEluZm8ueDEgJiYgeCA8PSB2aXN1YWxJbmZvLngyICYmIHkgPj0gdmlzdWFsSW5mby55MSAmJiB5IDw9IHZpc3VhbEluZm8ueTIpIHtcbiAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnQ6IGRhdGFQb2ludCxcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnRJbmRleDogaSxcbiAgICAgICAgICAgICAgICBkYXRhU2VyaWVzOiB0aGlzLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlOiBNYXRoLm1pbihNYXRoLmFicyh2aXN1YWxJbmZvLngxIC0geCksIE1hdGguYWJzKHZpc3VhbEluZm8ueDIgLSB4KSwgTWF0aC5hYnModmlzdWFsSW5mby55MSAtIHkpLCBNYXRoLmFicyh2aXN1YWxJbmZvLnkyIC0geSkpXG4gICAgICAgICAgICAgICAgLy9kaXN0YW5jZTowXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGZvdW5kRGF0YVBvaW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImxpbmVcIjpcbiAgICAgICAgICBjYXNlIFwic3RlcExpbmVcIjpcbiAgICAgICAgICBjYXNlIFwic3BsaW5lXCI6XG4gICAgICAgICAgY2FzZSBcImFyZWFcIjpcbiAgICAgICAgICBjYXNlIFwic3RlcEFyZWFcIjpcbiAgICAgICAgICBjYXNlIFwic3RhY2tlZEFyZWFcIjpcbiAgICAgICAgICBjYXNlIFwic3RhY2tlZEFyZWExMDBcIjpcbiAgICAgICAgICBjYXNlIFwic3BsaW5lQXJlYVwiOlxuICAgICAgICAgIGNhc2UgXCJzY2F0dGVyXCI6XG4gICAgICAgICAgICB2YXIgbWFya2VyU2l6ZSA9IGdldFByb3BlcnR5KFwibWFya2VyU2l6ZVwiLCBkYXRhUG9pbnQsIHRoaXMpIHx8IDQ7XG4gICAgICAgICAgICB2YXIgc25hcERpc3RhbmNlID0gZ2V0Q2xvc2VzdCA/IDIwIDogbWFya2VyU2l6ZTtcblxuICAgICAgICAgICAgZGlzdGFuY2UgPSBNYXRoLnNxcnQoTWF0aC5wb3codmlzdWFsSW5mby54MSAtIHgsIDIpICsgTWF0aC5wb3codmlzdWFsSW5mby55MSAtIHksIDIpKTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8PSBzbmFwRGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnQ6IGRhdGFQb2ludCxcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnRJbmRleDogaSxcbiAgICAgICAgICAgICAgICBkYXRhU2VyaWVzOiB0aGlzLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHhEaXN0YW5jZSA9IE1hdGguYWJzKHZpc3VhbEluZm8ueDEgLSB4KTtcbiAgICAgICAgICAgIGlmICh4RGlzdGFuY2UgPD0gbWluaW11bVhEaXN0YW5jZSlcbiAgICAgICAgICAgICAgbWluaW11bVhEaXN0YW5jZSA9IHhEaXN0YW5jZTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID4gMClcbiAgICAgICAgICAgICAgICBmb3J3YXJkTWlzc0NvdW50Kys7XG4gICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBiYWNrd2FyZE1pc3NDb3VudCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPD0gbWFya2VyU2l6ZSAvIDIpIHtcbiAgICAgICAgICAgICAgZm91bmREYXRhUG9pbnQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJyYW5nZUFyZWFcIjpcbiAgICAgICAgICBjYXNlIFwicmFuZ2VTcGxpbmVBcmVhXCI6XG5cbiAgICAgICAgICAgIHZhciBtYXJrZXJTaXplID0gZ2V0UHJvcGVydHkoXCJtYXJrZXJTaXplXCIsIGRhdGFQb2ludCwgdGhpcykgfHwgNDtcbiAgICAgICAgICAgIHZhciBzbmFwRGlzdGFuY2UgPSBnZXRDbG9zZXN0ID8gMjAgOiBtYXJrZXJTaXplO1xuXG4gICAgICAgICAgICBkaXN0YW5jZSA9IE1hdGgubWluKE1hdGguc3FydChNYXRoLnBvdyh2aXN1YWxJbmZvLngxIC0geCwgMikgKyBNYXRoLnBvdyh2aXN1YWxJbmZvLnkxIC0geSwgMikpLCBNYXRoLnNxcnQoTWF0aC5wb3codmlzdWFsSW5mby54MSAtIHgsIDIpICsgTWF0aC5wb3codmlzdWFsSW5mby55MiAtIHksIDIpKSk7XG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPD0gc25hcERpc3RhbmNlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgZGF0YVBvaW50OiBkYXRhUG9pbnQsXG4gICAgICAgICAgICAgICAgZGF0YVBvaW50SW5kZXg6IGksXG4gICAgICAgICAgICAgICAgZGF0YVNlcmllczogdGhpcyxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2VcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciB4RGlzdGFuY2UgPSBNYXRoLmFicyh2aXN1YWxJbmZvLngxIC0geCk7XG4gICAgICAgICAgICBpZiAoeERpc3RhbmNlIDw9IG1pbmltdW1YRGlzdGFuY2UpXG4gICAgICAgICAgICAgIG1pbmltdW1YRGlzdGFuY2UgPSB4RGlzdGFuY2U7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA+IDApXG4gICAgICAgICAgICAgICAgZm9yd2FyZE1pc3NDb3VudCsrO1xuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYmFja3dhcmRNaXNzQ291bnQrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDw9IG1hcmtlclNpemUgLyAyKSB7XG4gICAgICAgICAgICAgIGZvdW5kRGF0YVBvaW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiYnViYmxlXCI6XG4gICAgICAgICAgICB2YXIgbWFya2VyU2l6ZSA9IHZpc3VhbEluZm8uc2l6ZTtcbiAgICAgICAgICAgIGRpc3RhbmNlID0gTWF0aC5zcXJ0KE1hdGgucG93KHZpc3VhbEluZm8ueDEgLSB4LCAyKSArIE1hdGgucG93KHZpc3VhbEluZm8ueTEgLSB5LCAyKSk7XG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPD0gbWFya2VyU2l6ZSAvIDIpIHtcbiAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnQ6IGRhdGFQb2ludCxcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnRJbmRleDogaSxcbiAgICAgICAgICAgICAgICBkYXRhU2VyaWVzOiB0aGlzLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBmb3VuZERhdGFQb2ludCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJwaWVcIjpcbiAgICAgICAgICBjYXNlIFwiZG91Z2hudXRcIjpcbiAgICAgICAgICAgIHZhciBjZW50ZXIgPSB2aXN1YWxJbmZvLmNlbnRlcjtcbiAgICAgICAgICAgIHZhciBpbm5lclJhZGl1cyA9IHRoaXMudHlwZSA9PT0gXCJkb3VnaG51dFwiID8gdmlzdWFsSW5mby5wZXJjZW50SW5uZXJSYWRpdXMgKiB2aXN1YWxJbmZvLnJhZGl1cyA6IDA7XG5cbiAgICAgICAgICAgIGRpc3RhbmNlID0gTWF0aC5zcXJ0KE1hdGgucG93KGNlbnRlci54IC0geCwgMikgKyBNYXRoLnBvdyhjZW50ZXIueSAtIHksIDIpKTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8IHZpc3VhbEluZm8ucmFkaXVzICYmIGRpc3RhbmNlID4gaW5uZXJSYWRpdXMpIHtcblxuICAgICAgICAgICAgICB2YXIgZGVsdGFZID0geSAtIGNlbnRlci55O1xuICAgICAgICAgICAgICB2YXIgZGVsdGFYID0geCAtIGNlbnRlci54O1xuICAgICAgICAgICAgICB2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKGRlbHRhWSwgZGVsdGFYKTtcblxuICAgICAgICAgICAgICBpZiAoYW5nbGUgPCAwKVxuICAgICAgICAgICAgICAgIGFuZ2xlICs9IE1hdGguUEkgKiAyO1xuXG4gICAgICAgICAgICAgIGFuZ2xlID0gTnVtYmVyKCgoKGFuZ2xlIC8gTWF0aC5QSSAqIDE4MCAlIDM2MCkgKyAzNjApICUgMzYwKS50b0ZpeGVkKDEyKSk7XG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coYW5nbGUpO1xuXG5cbiAgICAgICAgICAgICAgdmFyIHN0YXJ0QW5nbGUgPSBOdW1iZXIoKCgodmlzdWFsSW5mby5zdGFydEFuZ2xlIC8gTWF0aC5QSSAqIDE4MCAlIDM2MCkgKyAzNjApICUgMzYwKS50b0ZpeGVkKDEyKSk7XG4gICAgICAgICAgICAgIHZhciBlbmRBbmdsZSA9IE51bWJlcigoKCh2aXN1YWxJbmZvLmVuZEFuZ2xlIC8gTWF0aC5QSSAqIDE4MCAlIDM2MCkgKyAzNjApICUgMzYwKS50b0ZpeGVkKDEyKSk7XG5cbiAgICAgICAgICAgICAgLy9TbyB0aGF0IGRhdGEgcG9pbnQgaXMgZGV0ZWN0ZWQgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBkYXRhUG9pbnRcbiAgICAgICAgICAgICAgaWYgKGVuZEFuZ2xlID09PSAwICYmIHZpc3VhbEluZm8uZW5kQW5nbGUgPiAxKSB7XG4gICAgICAgICAgICAgICAgZW5kQW5nbGUgPSAzNjA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoc3RhcnRBbmdsZSA+PSBlbmRBbmdsZSAmJiBkYXRhUG9pbnQueSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGVuZEFuZ2xlICs9IDM2MDtcblxuICAgICAgICAgICAgICAgIGlmIChhbmdsZSA8IHN0YXJ0QW5nbGUpXG4gICAgICAgICAgICAgICAgICBhbmdsZSArPSAzNjA7XG4gICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgIGlmIChhbmdsZSA+IHN0YXJ0QW5nbGUgJiYgYW5nbGUgPCBlbmRBbmdsZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBkYXRhUG9pbnQ6IGRhdGFQb2ludCxcbiAgICAgICAgICAgICAgICAgIGRhdGFQb2ludEluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgZGF0YVNlcmllczogdGhpcyxcbiAgICAgICAgICAgICAgICAgIGRpc3RhbmNlOiAwXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBmb3VuZERhdGFQb2ludCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJjYW5kbGVzdGlja1wiOlxuICAgICAgICAgICAgaWYgKCgoeCA+PSAodmlzdWFsSW5mby54MSAtIHZpc3VhbEluZm8uYm9yZGVyVGhpY2tuZXNzIC8gMikpICYmICh4IDw9ICh2aXN1YWxJbmZvLngyICsgdmlzdWFsSW5mby5ib3JkZXJUaGlja25lc3MgLyAyKSlcbiAgICAgICAgICAgICAgJiYgKHkgPj0gdmlzdWFsSW5mby55MiAtIHZpc3VhbEluZm8uYm9yZGVyVGhpY2tuZXNzIC8gMikgJiYgKHkgPD0gdmlzdWFsSW5mby55MyArIHZpc3VhbEluZm8uYm9yZGVyVGhpY2tuZXNzIC8gMikpXG4gICAgICAgICAgICAgIHx8IChNYXRoLmFicyh2aXN1YWxJbmZvLngyIC0geCArIHZpc3VhbEluZm8ueDEgLSB4KSA8IHZpc3VhbEluZm8uYm9yZGVyVGhpY2tuZXNzICYmICh5ID49IHZpc3VhbEluZm8ueTEgJiYgeSA8PSB2aXN1YWxJbmZvLnk0KSkpIHtcbiAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnQ6IGRhdGFQb2ludCxcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnRJbmRleDogaSxcbiAgICAgICAgICAgICAgICBkYXRhU2VyaWVzOiB0aGlzLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlOiBNYXRoLm1pbihNYXRoLmFicyh2aXN1YWxJbmZvLngxIC0geCksIE1hdGguYWJzKHZpc3VhbEluZm8ueDIgLSB4KSwgTWF0aC5hYnModmlzdWFsSW5mby55MiAtIHkpLCBNYXRoLmFicyh2aXN1YWxJbmZvLnkzIC0geSkpXG4gICAgICAgICAgICAgICAgLy9kaXN0YW5jZTowXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGZvdW5kRGF0YVBvaW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm9obGNcIjpcblxuICAgICAgICAgICAgaWYgKChNYXRoLmFicyh2aXN1YWxJbmZvLngyIC0geCArIHZpc3VhbEluZm8ueDEgLSB4KSA8IHZpc3VhbEluZm8uYm9yZGVyVGhpY2tuZXNzICYmICh5ID49IHZpc3VhbEluZm8ueTIgJiYgeSA8PSB2aXN1YWxJbmZvLnkzKSlcblxuICAgICAgICAgICAgICB8fCAoeCA+PSB2aXN1YWxJbmZvLngxICYmICh4IDw9ICh2aXN1YWxJbmZvLngyICsgdmlzdWFsSW5mby54MSkgLyAyKVxuICAgICAgICAgICAgICAgICYmICh5ID49IHZpc3VhbEluZm8ueTEgLSB2aXN1YWxJbmZvLmJvcmRlclRoaWNrbmVzcyAvIDIpICYmICh5IDw9IHZpc3VhbEluZm8ueTEgKyB2aXN1YWxJbmZvLmJvcmRlclRoaWNrbmVzcyAvIDIpKVxuXG4gICAgICAgICAgICAgIHx8ICgoeCA+PSAodmlzdWFsSW5mby54MSArIHZpc3VhbEluZm8ueDIpIC8gMikgJiYgKHggPD0gdmlzdWFsSW5mby54MilcbiAgICAgICAgICAgICAgICAmJiAoeSA+PSB2aXN1YWxJbmZvLnk0IC0gdmlzdWFsSW5mby5ib3JkZXJUaGlja25lc3MgLyAyKSAmJiAoeSA8PSB2aXN1YWxJbmZvLnk0ICsgdmlzdWFsSW5mby5ib3JkZXJUaGlja25lc3MgLyAyKSkpIHtcblxuICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGRhdGFQb2ludDogZGF0YVBvaW50LFxuICAgICAgICAgICAgICAgIGRhdGFQb2ludEluZGV4OiBpLFxuICAgICAgICAgICAgICAgIGRhdGFTZXJpZXM6IHRoaXMsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2U6IE1hdGgubWluKE1hdGguYWJzKHZpc3VhbEluZm8ueDEgLSB4KSwgTWF0aC5hYnModmlzdWFsSW5mby54MiAtIHgpLCBNYXRoLmFicyh2aXN1YWxJbmZvLnkyIC0geSksIE1hdGguYWJzKHZpc3VhbEluZm8ueTMgLSB5KSlcbiAgICAgICAgICAgICAgICAvL2Rpc3RhbmNlOjBcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgZm91bmREYXRhUG9pbnQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3VuZERhdGFQb2ludCB8fCAoZm9yd2FyZE1pc3NDb3VudCA+IG1heE1pc3NDb3VudCAmJiBiYWNrd2FyZE1pc3NDb3VudCA+IG1heE1pc3NDb3VudCkpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHNlYXJjaFN0YXJ0SW5kZXggLSBqIDwgMCAmJiBzZWFyY2hTdGFydEluZGV4ICsgaiA+PSB0aGlzLmRhdGFQb2ludHMubGVuZ3RoKVxuICAgICAgYnJlYWs7XG5cbiAgICBpZiAoZGlyZWN0aW9uID09PSAtMSkge1xuICAgICAgaisrO1xuICAgICAgZGlyZWN0aW9uID0gMTtcbiAgICB9IGVsc2VcbiAgICAgIGRpcmVjdGlvbiA9IC0xO1xuXG4gIH1cblxuXG5cbiAgdmFyIGNsb3Nlc3RSZXN1bHQgPSBudWxsO1xuXG4gIGZvciAodmFyIG0gPSAwOyBtIDwgcmVzdWx0cy5sZW5ndGg7IG0rKykge1xuICAgIGlmICghY2xvc2VzdFJlc3VsdCkge1xuICAgICAgY2xvc2VzdFJlc3VsdCA9IHJlc3VsdHNbbV07XG4gICAgfSBlbHNlIGlmIChyZXN1bHRzW21dLmRpc3RhbmNlIDw9IGNsb3Nlc3RSZXN1bHQuZGlzdGFuY2UpIHtcbiAgICAgIGNsb3Nlc3RSZXN1bHQgPSByZXN1bHRzW21dO1xuICAgIH1cbiAgfVxuXG4gIC8vaWYgKHdpbmRvdy5jb25zb2xlKVxuICAvL1x0d2luZG93LmNvbnNvbGUubG9nKFwiZm9yd2FyZE1pc3NDb3VudDogXCIgKyBmb3J3YXJkTWlzc0NvdW50ICsgXCI7IGJhY2t3YXJkTWlzc0NvdW50OiBcIiArIGJhY2t3YXJkTWlzc0NvdW50ICsgXCI7IGdldENsb3Nlc3Q6IFwiICsgZ2V0Q2xvc2VzdCk7XG5cbiAgLy9pZiAod2luZG93LmNvbnNvbGUgJiYgY2xvc2VzdFJlc3VsdClcbiAgLy8gICAgd2luZG93LmNvbnNvbGUubG9nKGogKyBcIjogZGlzdGFuY2UgPSBcIiArIGNsb3Nlc3RSZXN1bHQuZGlzdGFuY2UpO1xuXG4gIHJldHVybiBjbG9zZXN0UmVzdWx0O1xufVxuXG5EYXRhU2VyaWVzLnByb3RvdHlwZS5nZXRNYXJrZXJQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGluZGV4LCB4LCB5LCBjdHgpIHtcbiAgdmFyIGRhdGFQb2ludHMgPSB0aGlzLmRhdGFQb2ludHM7XG4gIHZhciBkYXRhU2VyaWVzID0gdGhpcztcblxuICB2YXIgbWFya2VyQ29sb3IgPSBkYXRhUG9pbnRzW2luZGV4XS5tYXJrZXJDb2xvciA/IGRhdGFQb2ludHNbaW5kZXhdLm1hcmtlckNvbG9yIDogZGF0YVNlcmllcy5tYXJrZXJDb2xvciA/IGRhdGFTZXJpZXMubWFya2VyQ29sb3IgOiBkYXRhUG9pbnRzW2luZGV4XS5jb2xvciA/IGRhdGFQb2ludHNbaW5kZXhdLmNvbG9yIDogZGF0YVNlcmllcy5jb2xvciA/IGRhdGFTZXJpZXMuY29sb3IgOiBkYXRhU2VyaWVzLl9jb2xvclNldFtpbmRleCAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG4gIHZhciBtYXJrZXJCb3JkZXJDb2xvciA9IGRhdGFQb2ludHNbaW5kZXhdLm1hcmtlckJvcmRlckNvbG9yID8gZGF0YVBvaW50c1tpbmRleF0ubWFya2VyQm9yZGVyQ29sb3IgOiBkYXRhU2VyaWVzLm1hcmtlckJvcmRlckNvbG9yID8gZGF0YVNlcmllcy5tYXJrZXJCb3JkZXJDb2xvciA6IG51bGw7XG4gIHZhciBtYXJrZXJCb3JkZXJUaGlja25lc3MgPSBkYXRhUG9pbnRzW2luZGV4XS5tYXJrZXJCb3JkZXJUaGlja25lc3MgPyBkYXRhUG9pbnRzW2luZGV4XS5tYXJrZXJCb3JkZXJUaGlja25lc3MgOiBkYXRhU2VyaWVzLm1hcmtlckJvcmRlclRoaWNrbmVzcyA/IGRhdGFTZXJpZXMubWFya2VyQm9yZGVyVGhpY2tuZXNzIDogbnVsbDtcbiAgdmFyIG1hcmtlclR5cGUgPSBkYXRhUG9pbnRzW2luZGV4XS5tYXJrZXJUeXBlID8gZGF0YVBvaW50c1tpbmRleF0ubWFya2VyVHlwZSA6IGRhdGFTZXJpZXMubWFya2VyVHlwZTtcbiAgdmFyIG1hcmtlclNpemUgPSBkYXRhUG9pbnRzW2luZGV4XS5tYXJrZXJTaXplID8gZGF0YVBvaW50c1tpbmRleF0ubWFya2VyU2l6ZSA6IGRhdGFTZXJpZXMubWFya2VyU2l6ZTtcblxuXG4gIHJldHVybiB7XG4gICAgeDogeCwgeTogeSwgY3R4OiBjdHgsXG4gICAgdHlwZTogbWFya2VyVHlwZSxcbiAgICBzaXplOiBtYXJrZXJTaXplLFxuICAgIGNvbG9yOiBtYXJrZXJDb2xvcixcbiAgICBib3JkZXJDb2xvcjogbWFya2VyQm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyVGhpY2tuZXNzOiBtYXJrZXJCb3JkZXJUaGlja25lc3NcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRhU2VyaWVzO1xuIiwiXG5pbXBvcnQge2NyZWF0ZUNhbnZhcywgZ2V0TW91c2VDb29yZGluYXRlcywgaXNDYW52YXNTdXBwb3J0ZWR9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5mdW5jdGlvbiBFdmVudE1hbmFnZXIoY2hhcnQpIHtcbiAgdGhpcy5jaGFydCA9IGNoYXJ0O1xuICB0aGlzLmxhc3RPYmplY3RJZCA9IDA7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIHRoaXMub2JqZWN0TWFwID0gW107XG4gIHRoaXMucmVjdGFuZ3VsYXJSZWdpb25FdmVudFN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgdGhpcy5wcmV2aW91c0RhdGFQb2ludEV2ZW50T2JqZWN0ID0gbnVsbDtcbiAgLy90aGlzLnByZXZpb3VzRGF0YVNlcmllc0V2ZW50T2JqZWN0ID0gbnVsbDtcblxuICB0aGlzLmdob3N0Q2FudmFzID0gY3JlYXRlQ2FudmFzKHRoaXMuY2hhcnQud2lkdGgsIHRoaXMuY2hhcnQuaGVpZ2h0KTtcbiAgLy90aGlzLmdob3N0Q2FudmFzLndpZHRoID0gdGhpcy5jaGFydC53aWR0aDtcbiAgLy90aGlzLmdob3N0Q2FudmFzLmhlaWdodCA9IHRoaXMuY2hhcnQuaGVpZ2h0O1xuXG4gIHRoaXMuZ2hvc3RDdHggPSB0aGlzLmdob3N0Q2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcblxuICB2YXIgZXZlbnRIYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgX3RoaXMubW91c2VFdmVudEhhbmRsZXIuY2FsbChfdGhpcywgZXYpO1xuICB9O1xuXG4gIHRoaXMubW91c2VvdmVyZWRPYmplY3RNYXBzID0gW107XG4gIC8vdGhpcy5jaGFydC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCBldmVudEhhbmRsZXIpO1xuICAvL3RoaXMuY2hhcnQuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgZXZlbnRIYW5kbGVyKTtcbiAgLy90aGlzLmNoYXJ0LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIiwgZXZlbnRIYW5kbGVyKTtcbiAgLy90aGlzLmNoYXJ0LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZXZlbnRIYW5kbGVyKTtcbn1cblxuRXZlbnRNYW5hZ2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5sYXN0T2JqZWN0SWQgPSAwO1xuICB0aGlzLm9iamVjdE1hcCA9IFtdO1xuICB0aGlzLnJlY3Rhbmd1bGFyUmVnaW9uRXZlbnRTdWJzY3JpcHRpb25zID0gW107XG4gIHRoaXMucHJldmlvdXNEYXRhUG9pbnRFdmVudE9iamVjdCA9IG51bGw7XG5cbiAgdGhpcy5ldmVudE9iamVjdHMgPSBbXTtcbiAgLy90aGlzLmdob3N0Q2FudmFzLndpZHRoID0gdGhpcy5jaGFydC53aWR0aDtcbiAgLy90aGlzLmdob3N0Q2FudmFzLmhlaWdodCA9IHRoaXMuY2hhcnQuaGVpZ2h0O1xuXG4gIGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuICAgIHRoaXMuZ2hvc3RDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2hhcnQud2lkdGgsIHRoaXMuY2hhcnQuaGVpZ2h0KTtcbiAgICB0aGlzLmdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuICB9XG59XG5cbkV2ZW50TWFuYWdlci5wcm90b3R5cGUuZ2V0TmV3T2JqZWN0VHJhY2tpbmdJZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICsrdGhpcy5sYXN0T2JqZWN0SWQ7XG59XG5cbkV2ZW50TWFuYWdlci5wcm90b3R5cGUubW91c2VFdmVudEhhbmRsZXIgPSBmdW5jdGlvbiAoZXYpIHtcblxuICBpZiAoZXYudHlwZSAhPT0gXCJtb3VzZW1vdmVcIiAmJiBldi50eXBlICE9PSBcImNsaWNrXCIpXG4gICAgcmV0dXJuO1xuXG4gIHZhciBldmVudE9iamVjdE1hcHMgPSBbXTtcbiAgdmFyIHh5ID0gZ2V0TW91c2VDb29yZGluYXRlcyhldik7XG4gIHZhciBpZCA9IG51bGw7XG5cbiAgLy92YXIgZGF0YVBvaW50SW5mbyA9IHRoaXMuY2hhcnQuZ2V0RGF0YVBvaW50QXRYWSh4eS54LCB4eS55LCBmYWxzZSk7XG5cbiAgLy9pZiAoZGF0YVBvaW50SW5mbykge1xuICAvL1x0aWQgPSBkYXRhUG9pbnRJbmZvLmRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2RhdGFQb2ludEluZm8uZGF0YVBvaW50SW5kZXhdO1xuICAvL30gZWxzZSBpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHsvL0lFOStcbiAgLy9cdGlkID0gZ2V0T2JqZWN0SWQoeHkueCwgeHkueSwgdGhpcy5naG9zdEN0eCk7XG4gIC8vfVxuICBpZCA9IHRoaXMuY2hhcnQuZ2V0T2JqZWN0QXRYWSh4eS54LCB4eS55LCBmYWxzZSk7XG5cbiAgaWYgKGlkICYmIHR5cGVvZiAodGhpcy5vYmplY3RNYXBbaWRdKSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXG4gICAgdmFyIGV2ZW50T2JqZWN0TWFwID0gdGhpcy5vYmplY3RNYXBbaWRdO1xuXG4gICAgaWYgKGV2ZW50T2JqZWN0TWFwLm9iamVjdFR5cGUgPT09IFwiZGF0YVBvaW50XCIpIHtcbiAgICAgIHZhciBkYXRhU2VyaWVzID0gdGhpcy5jaGFydC5kYXRhW2V2ZW50T2JqZWN0TWFwLmRhdGFTZXJpZXNJbmRleF07XG4gICAgICB2YXIgZGF0YVBvaW50ID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2V2ZW50T2JqZWN0TWFwLmRhdGFQb2ludEluZGV4XTtcbiAgICAgIHZhciBkYXRhUG9pbnRJbmRleCA9IGV2ZW50T2JqZWN0TWFwLmRhdGFQb2ludEluZGV4O1xuXG4gICAgICAvL0V2ZW50IFBhcmFtZXRlciBzaG91bGQgbm90IGNvbnRhaW4gcmVmZXJlbmNlIHRvIGRhdGFTZXJpZXMgZGlyZWN0bHkuIEJ1dCB0byBpdHMgb3B0aW9ucy5cbiAgICAgIGV2ZW50T2JqZWN0TWFwLmV2ZW50UGFyYW1ldGVyID0ge1xuICAgICAgICB4OiB4eS54LCB5OiB4eS55LCBkYXRhUG9pbnQ6IGRhdGFQb2ludCxcbiAgICAgICAgZGF0YVNlcmllczogZGF0YVNlcmllcy5fb3B0aW9ucywgZGF0YVBvaW50SW5kZXg6IGRhdGFQb2ludEluZGV4LCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXMuaW5kZXgsXG4gICAgICAgIGNoYXJ0OiB0aGlzLmNoYXJ0Ll9wdWJsaWNDaGFydFJlZmVyZW5jZVxuICAgICAgfTtcbiAgICAgIGV2ZW50T2JqZWN0TWFwLmV2ZW50Q29udGV4dCA9IHtcbiAgICAgICAgY29udGV4dDogZGF0YVBvaW50LCB1c2VyQ29udGV4dDogZGF0YVBvaW50LCBtb3VzZW92ZXI6IFwibW91c2VvdmVyXCIsIG1vdXNlbW92ZTogXCJtb3VzZW1vdmVcIiwgbW91c2VvdXQ6IFwibW91c2VvdXRcIiwgY2xpY2s6IFwiY2xpY2tcIlxuICAgICAgfTtcbiAgICAgIGV2ZW50T2JqZWN0TWFwcy5wdXNoKGV2ZW50T2JqZWN0TWFwKTtcblxuICAgICAgLy9BZGQgRGF0YXNlcmllcyB0b28gYmVjYXVzZSBtb3VzZSBldmVudCBvbiBkYXRhUG9pbnQgYWxzbyBtZWFucyB0aGVyZSBpcyBhbiBldmVudCBvbiBkYXRhU2VyaWVzLiBEYXRhU2VyaWVzIGlzIG5vdCBwcmVzZW50IG9uIGdob3N0IGNhbnZhc1xuICAgICAgZXZlbnRPYmplY3RNYXAgPSB0aGlzLm9iamVjdE1hcFtkYXRhU2VyaWVzLmlkXTtcblxuICAgICAgLy9FdmVudCBQYXJhbWV0ZXIgc2hvdWxkIG5vdCBjb250YWluIHJlZmVyZW5jZSB0byBkYXRhU2VyaWVzIGRpcmVjdGx5LiBCdXQgdG8gaXRzIG9wdGlvbnMuXG4gICAgICBldmVudE9iamVjdE1hcC5ldmVudFBhcmFtZXRlciA9IHtcbiAgICAgICAgeDogeHkueCwgeTogeHkueSxcbiAgICAgICAgZGF0YVBvaW50OiBkYXRhUG9pbnQsIGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMuX29wdGlvbnMsIGRhdGFQb2ludEluZGV4OiBkYXRhUG9pbnRJbmRleCwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzLmluZGV4LFxuICAgICAgICBjaGFydDogdGhpcy5jaGFydC5fcHVibGljQ2hhcnRSZWZlcmVuY2VcbiAgICAgIH07XG5cbiAgICAgIGV2ZW50T2JqZWN0TWFwLmV2ZW50Q29udGV4dCA9IHtcbiAgICAgICAgY29udGV4dDogZGF0YVNlcmllcywgdXNlckNvbnRleHQ6IGRhdGFTZXJpZXMuX29wdGlvbnMsIG1vdXNlb3ZlcjogXCJtb3VzZW92ZXJcIiwgbW91c2Vtb3ZlOiBcIm1vdXNlbW92ZVwiLCBtb3VzZW91dDogXCJtb3VzZW91dFwiLCBjbGljazogXCJjbGlja1wiXG4gICAgICB9O1xuICAgICAgZXZlbnRPYmplY3RNYXBzLnB1c2godGhpcy5vYmplY3RNYXBbZGF0YVNlcmllcy5pZF0pO1xuICAgIH1cbiAgICAgIC8vZWxzZSBpZiAoZXZlbnRPYmplY3RNYXAub2JqZWN0VHlwZSA9PT0gXCJzdHJpcExpbmVcIikge1xuXG4gICAgICAvL1x0Ly9FdmVudCBQYXJhbWV0ZXIgc2hvdWxkIG5vdCBjb250YWluIHJlZmVyZW5jZSB0byBzdHJpcExpbmUgZGlyZWN0bHkuIEJ1dCB0byBpdHMgb3B0aW9ucy5cbiAgICAgIC8vXHRldmVudE9iamVjdE1hcC5ldmVudFBhcmFtZXRlciA9IHsgeDogeHkueCwgeTogeHkueSwgc3RyaXBMaW5lOiBldmVudE9iamVjdE1hcC5zdHJpcExpbmUuX29wdGlvbnMsIGF4aXM6IGV2ZW50T2JqZWN0TWFwLmF4aXMuX29wdGlvbnMsIHN0cmlwTGluZUluZGV4OiBldmVudE9iamVjdE1hcC5zdHJpcExpbmVJbmRleCB9O1xuICAgICAgLy9cdGV2ZW50T2JqZWN0TWFwLmV2ZW50Q29udGV4dCA9IHsgY29udGV4dDogZXZlbnRPYmplY3RNYXAuc3RyaXBMaW5lLCB1c2VyQ29udGV4dDogZXZlbnRPYmplY3RNYXAuc3RyaXBMaW5lLl9vcHRpb25zLCBtb3VzZW92ZXI6IFwibW91c2VvdmVyXCIsIG1vdXNlbW92ZTogXCJtb3VzZW1vdmVcIiwgbW91c2VvdXQ6IFwibW91c2VvdXRcIiwgY2xpY2s6IFwiY2xpY2tcIiB9O1xuXG4gICAgICAvL1x0ZXZlbnRPYmplY3RNYXBzLnB1c2goZXZlbnRPYmplY3RNYXApO1xuICAgICAgLy99XG4gICAgZWxzZSBpZiAoZXZlbnRPYmplY3RNYXAub2JqZWN0VHlwZSA9PT0gXCJsZWdlbmRJdGVtXCIpIHtcblxuICAgICAgdmFyIGRhdGFTZXJpZXMgPSB0aGlzLmNoYXJ0LmRhdGFbZXZlbnRPYmplY3RNYXAuZGF0YVNlcmllc0luZGV4XTtcbiAgICAgIHZhciBkYXRhUG9pbnQgPSBldmVudE9iamVjdE1hcC5kYXRhUG9pbnRJbmRleCAhPT0gbnVsbCA/IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tldmVudE9iamVjdE1hcC5kYXRhUG9pbnRJbmRleF0gOiBudWxsO1xuXG4gICAgICAvL0V2ZW50IFBhcmFtZXRlciBzaG91bGQgbm90IGNvbnRhaW4gcmVmZXJlbmNlIHRvIERhdGFTZXJpZXMgZGlyZWN0bHkuIEJ1dCB0byBpdHMgb3B0aW9ucy5cbiAgICAgIGV2ZW50T2JqZWN0TWFwLmV2ZW50UGFyYW1ldGVyID0ge1xuICAgICAgICB4OiB4eS54LCB5OiB4eS55LFxuICAgICAgICBkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLl9vcHRpb25zLCBkYXRhUG9pbnQ6IGRhdGFQb2ludCwgZGF0YVBvaW50SW5kZXg6IGV2ZW50T2JqZWN0TWFwLmRhdGFQb2ludEluZGV4LCBkYXRhU2VyaWVzSW5kZXg6IGV2ZW50T2JqZWN0TWFwLmRhdGFTZXJpZXNJbmRleCxcbiAgICAgICAgY2hhcnQ6IHRoaXMuY2hhcnQuX3B1YmxpY0NoYXJ0UmVmZXJlbmNlXG4gICAgICB9O1xuICAgICAgZXZlbnRPYmplY3RNYXAuZXZlbnRDb250ZXh0ID0ge1xuICAgICAgICBjb250ZXh0OiB0aGlzLmNoYXJ0LmxlZ2VuZCwgdXNlckNvbnRleHQ6IHRoaXMuY2hhcnQubGVnZW5kLl9vcHRpb25zLCBtb3VzZW92ZXI6IFwiaXRlbW1vdXNlb3ZlclwiLCBtb3VzZW1vdmU6IFwiaXRlbW1vdXNlbW92ZVwiLCBtb3VzZW91dDogXCJpdGVtbW91c2VvdXRcIiwgY2xpY2s6IFwiaXRlbWNsaWNrXCJcbiAgICAgIH07XG4gICAgICBldmVudE9iamVjdE1hcHMucHVzaChldmVudE9iamVjdE1hcCk7XG4gICAgfVxuICB9XG5cbiAgLy9GaXJlIG1vdXNlb3V0IGlmIGV4aXN0aW5nIG1vdXNlb3ZlcmVkIG9iamVjdHMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvYmplY3RtYXAuXG4gIHZhciBtb3VzZU91dE9iamVjdE1hcHNFeGNsdWRlZCA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubW91c2VvdmVyZWRPYmplY3RNYXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1vdXNlT3V0ID0gdHJ1ZTtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgZXZlbnRPYmplY3RNYXBzLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoZXZlbnRPYmplY3RNYXBzW2pdLmlkID09PSB0aGlzLm1vdXNlb3ZlcmVkT2JqZWN0TWFwc1tpXS5pZCkge1xuICAgICAgICBtb3VzZU91dCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW91c2VPdXQpIHtcbiAgICAgIHRoaXMuZmlyZUV2ZW50KHRoaXMubW91c2VvdmVyZWRPYmplY3RNYXBzW2ldLCBcIm1vdXNlb3V0XCIsIGV2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW91c2VPdXRPYmplY3RNYXBzRXhjbHVkZWQucHVzaCh0aGlzLm1vdXNlb3ZlcmVkT2JqZWN0TWFwc1tpXSk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5tb3VzZW92ZXJlZE9iamVjdE1hcHMgPSBtb3VzZU91dE9iamVjdE1hcHNFeGNsdWRlZDtcblxuICAvL1Byb2Nlc3MgbmV3IGV2ZW50T2JlY3RNYXBzXG4gIC8vSWYgdGhleSBhbHJlYWR5IGRvbid0IGV4aXN0LCBhZGQgdGhlbSBhbmQgZmlyZSBtb3VzZW92ZXJcbiAgLy9JZiBldi50eXBlIGlzIG1vdXNlbW92ZSwgdGhlbiBqdXN0IGZpcmUgbW91c2Vtb3ZlXG4gIC8vSWYgZXYudHlwZSBpcyBjbGljaywgdGhlbiBmaXJlIHR3byBldmVudHMgLSBjbGljayBmb2xsb3dlZCBieSBtb3VzZW1vdmVcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudE9iamVjdE1hcHMubGVuZ3RoOyBpKyspIHtcblxuICAgIHZhciBleGlzdGluZyA9IGZhbHNlO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLm1vdXNlb3ZlcmVkT2JqZWN0TWFwcy5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKGV2ZW50T2JqZWN0TWFwc1tpXS5pZCA9PT0gdGhpcy5tb3VzZW92ZXJlZE9iamVjdE1hcHNbal0uaWQpIHtcbiAgICAgICAgZXhpc3RpbmcgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICB0aGlzLmZpcmVFdmVudChldmVudE9iamVjdE1hcHNbaV0sIFwibW91c2VvdmVyXCIsIGV2KTtcbiAgICAgIHRoaXMubW91c2VvdmVyZWRPYmplY3RNYXBzLnB1c2goZXZlbnRPYmplY3RNYXBzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAoZXYudHlwZSA9PT0gXCJjbGlja1wiKSB7XG4gICAgICB0aGlzLmZpcmVFdmVudChldmVudE9iamVjdE1hcHNbaV0sIFwiY2xpY2tcIiwgZXYpO1xuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgdGhpcy5maXJlRXZlbnQoZXZlbnRPYmplY3RNYXBzW2ldLCBcIm1vdXNlbW92ZVwiLCBldik7XG4gICAgfVxuICB9XG59XG5cbkV2ZW50TWFuYWdlci5wcm90b3R5cGUuZmlyZUV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50T2JqZWN0TWFwLCBldmVudFR5cGUsIGV2KSB7XG5cbiAgaWYgKCFldmVudE9iamVjdE1hcCB8fCAhZXZlbnRUeXBlKVxuICAgIHJldHVybjtcblxuICB2YXIgZXZlbnRQYXJhbWV0ZXIgPSBldmVudE9iamVjdE1hcC5ldmVudFBhcmFtZXRlcjtcbiAgdmFyIGV2ZW50Q29udGV4dCA9IGV2ZW50T2JqZWN0TWFwLmV2ZW50Q29udGV4dDtcbiAgLy92YXIgY29udGV4dCA9IGV2ZW50T2JqZWN0TWFwLmV2ZW50Q29udGV4dC5jb250ZXh0O1xuICB2YXIgdXNlckNvbnRleHQgPSBldmVudE9iamVjdE1hcC5ldmVudENvbnRleHQudXNlckNvbnRleHRcblxuICBpZiAodXNlckNvbnRleHQgJiYgZXZlbnRDb250ZXh0ICYmIHVzZXJDb250ZXh0W2V2ZW50Q29udGV4dFtldmVudFR5cGVdXSlcbiAgICB1c2VyQ29udGV4dFtldmVudENvbnRleHRbZXZlbnRUeXBlXV0uY2FsbCh1c2VyQ29udGV4dCwgZXZlbnRQYXJhbWV0ZXIpO1xuXG4gIGlmIChldmVudFR5cGUgIT09IFwibW91c2VvdXRcIikge1xuICAgIGlmICh1c2VyQ29udGV4dC5jdXJzb3IgJiYgdXNlckNvbnRleHQuY3Vyc29yICE9PSBldi50YXJnZXQuc3R5bGUuY3Vyc29yKSB7XG4gICAgICBldi50YXJnZXQuc3R5bGUuY3Vyc29yID0gdXNlckNvbnRleHQuY3Vyc29yO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBldi50YXJnZXQuc3R5bGUuY3Vyc29yID0gdGhpcy5jaGFydC5fZGVmYXVsdEN1cnNvcjtcbiAgICBkZWxldGUgZXZlbnRPYmplY3RNYXAuZXZlbnRQYXJhbWV0ZXI7IC8vIHJlZmVyZW5jZSBubyBsb25nZXIgcmVxdWlyZWQuXG4gICAgZGVsZXRlIGV2ZW50T2JqZWN0TWFwLmV2ZW50Q29udGV4dDsgLy8gcmVmZXJlbmNlIG5vIGxvbmdlciByZXF1aXJlZC5cbiAgfVxuXG4gIC8vVGhpcyBpcyBqdXN0IGEgcXVpY2sgZml4LiBOZWVkIHRvIGZpbmQgYSBiZXR0ZXIgd2F5IG9mIGNhbGxpbmcgaW50ZXJuYWwgZXZlbnQgaGFuZGxlcnMuXG4gIGlmIChldmVudFR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudE9iamVjdE1hcC5vYmplY3RUeXBlID09PSBcImRhdGFQb2ludFwiICYmIHRoaXMuY2hhcnQucGllRG91Z2hudXRDbGlja0hhbmRsZXIpIHtcbiAgICB0aGlzLmNoYXJ0LnBpZURvdWdobnV0Q2xpY2tIYW5kbGVyLmNhbGwodGhpcy5jaGFydC5kYXRhW2V2ZW50T2JqZWN0TWFwLmRhdGFTZXJpZXNJbmRleF0sIGV2ZW50UGFyYW1ldGVyKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFdmVudE1hbmFnZXI7XG4iLCJmdW5jdGlvbiBMYXlvdXRNYW5hZ2VyKHgxLCB5MSwgeDIsIHkyLCBwYWRkaW5nKSB7XG5cbiAgaWYgKHR5cGVvZiAocGFkZGluZykgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgcGFkZGluZyA9IDA7XG5cbiAgdGhpcy5fcGFkZGluZyA9IHBhZGRpbmc7XG5cbiAgdGhpcy5feDEgPSB4MTtcbiAgdGhpcy5feTEgPSB5MTtcbiAgdGhpcy5feDIgPSB4MjtcbiAgdGhpcy5feTIgPSB5MjtcblxuICB0aGlzLl90b3BPY2N1cGllZCA9IHRoaXMuX3BhZGRpbmc7XG4gIHRoaXMuX2JvdHRvbU9jY3VwaWVkID0gdGhpcy5fcGFkZGluZztcbiAgdGhpcy5fbGVmdE9jY3VwaWVkID0gdGhpcy5fcGFkZGluZztcbiAgdGhpcy5fcmlnaHRPY2N1cGllZCA9IHRoaXMuX3BhZGRpbmc7XG59XG5cbkxheW91dE1hbmFnZXIucHJvdG90eXBlLnJlZ2lzdGVyU3BhY2UgPSBmdW5jdGlvbiAocG9zaXRpb24sIHNpemUpIHtcbiAgaWYgKHBvc2l0aW9uID09PSBcInRvcFwiKSB7XG4gICAgdGhpcy5fdG9wT2NjdXBpZWQgKz0gc2l6ZS5oZWlnaHQ7XG4gIH1cbiAgZWxzZSBpZiAocG9zaXRpb24gPT09IFwiYm90dG9tXCIpIHtcbiAgICB0aGlzLl9ib3R0b21PY2N1cGllZCArPSBzaXplLmhlaWdodDtcbiAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICB0aGlzLl9sZWZ0T2NjdXBpZWQgKz0gc2l6ZS53aWR0aDsgLy8gdGhpcyBpcyB3aWR0aCB3aGVuIHNlZW4gdXByaWdodC92ZXJ0aWNhbGx5XG4gIH0gZWxzZSBpZiAocG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuICAgIHRoaXMuX3JpZ2h0T2NjdXBpZWQgKz0gc2l6ZS53aWR0aDsvLyB0aGlzIGlzIHdpZHRoIHdoZW4gc2VlbiB1cHJpZ2h0L3ZlcnRpY2FsbHlcbiAgfVxufVxuXG5MYXlvdXRNYW5hZ2VyLnByb3RvdHlwZS51blJlZ2lzdGVyU3BhY2UgPSBmdW5jdGlvbiAocG9zaXRpb24sIHNpemUpIHtcbiAgaWYgKHBvc2l0aW9uID09PSBcInRvcFwiKSB7XG4gICAgdGhpcy5fdG9wT2NjdXBpZWQgLT0gc2l6ZS5oZWlnaHQ7XG4gIH1cbiAgZWxzZSBpZiAocG9zaXRpb24gPT09IFwiYm90dG9tXCIpIHtcbiAgICB0aGlzLl9ib3R0b21PY2N1cGllZCAtPSBzaXplLmhlaWdodDtcbiAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICB0aGlzLl9sZWZ0T2NjdXBpZWQgLT0gc2l6ZS53aWR0aDsvLyB0aGlzIGlzIHdpZHRoIHdoZW4gc2VlbiB1cHJpZ2h0L3ZlcnRpY2FsbHlcbiAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgdGhpcy5fcmlnaHRPY2N1cGllZCAtPSBzaXplLndpZHRoOy8vIHRoaXMgaXMgd2lkdGggd2hlbiBzZWVuIHVwcmlnaHQvdmVydGljYWxseVxuICB9XG59XG5cbkxheW91dE1hbmFnZXIucHJvdG90eXBlLmdldEZyZWVTcGFjZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8vPHNpZ25hdHVyZT5cbiAgLy8vPHN1bW1hcnk+UmV0dXJucyBhdmFpbGFibGUgZnJlZSBzcGFjZSB7eDE6bnVtYmVyLCB5MTpudW1iZXIsIHgyOm51bWJlciwgeTI6bnVtYmVyfTwvc3VtbWFyeT5cbiAgLy8vPC9zaWduYXR1cmU+XG5cbiAgcmV0dXJuIHtcbiAgICB4MTogdGhpcy5feDEgKyB0aGlzLl9sZWZ0T2NjdXBpZWQsXG4gICAgeTE6IHRoaXMuX3kxICsgdGhpcy5fdG9wT2NjdXBpZWQsXG4gICAgeDI6IHRoaXMuX3gyIC0gdGhpcy5fcmlnaHRPY2N1cGllZCxcbiAgICB5MjogdGhpcy5feTIgLSB0aGlzLl9ib3R0b21PY2N1cGllZCxcbiAgICB3aWR0aDogKHRoaXMuX3gyIC0gdGhpcy5feDEpIC0gdGhpcy5fcmlnaHRPY2N1cGllZCAtIHRoaXMuX2xlZnRPY2N1cGllZCxcbiAgICBoZWlnaHQ6ICh0aGlzLl95MiAtIHRoaXMuX3kxKSAtIHRoaXMuX2JvdHRvbU9jY3VwaWVkIC0gdGhpcy5fdG9wT2NjdXBpZWRcbiAgfTtcbn1cblxuTGF5b3V0TWFuYWdlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIC8vc28gdGhhdCB0aGVyZSBpcyBlbm91Z2ggcGFkZGluZy5cbiAgdGhpcy5fdG9wT2NjdXBpZWQgPSB0aGlzLl9wYWRkaW5nO1xuICB0aGlzLl9ib3R0b21PY2N1cGllZCA9IHRoaXMuX3BhZGRpbmc7XG4gIHRoaXMuX2xlZnRPY2N1cGllZCA9IHRoaXMuX3BhZGRpbmc7XG4gIHRoaXMuX3JpZ2h0T2NjdXBpZWQgPSB0aGlzLl9wYWRkaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMYXlvdXRNYW5hZ2VyO1xuIiwiXG5pbXBvcnQgRGF0YVNlcmllcyBmcm9tICcuL2RhdGFfc2VyaWVzJztcbmltcG9ydCBDYW52YXNKU09iamVjdCBmcm9tICcuL2NhbnZhc2pzJztcbmltcG9ydCBUZXh0QmxvY2sgZnJvbSAnLi90ZXh0X2Jsb2NrJztcbmltcG9ydCBSZW5kZXJIZWxwZXIgZnJvbSAnLi4vaGVscGVycy9yZW5kZXInO1xuaW1wb3J0IHtleHRlbmQsIGdldEZvbnRIZWlnaHRJblBpeGVsc30gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmZ1bmN0aW9uIExlZ2VuZChjaGFydCwgb3B0aW9ucywgdGhlbWUpIHtcbiAgTGVnZW5kLmJhc2UuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBcIkxlZ2VuZFwiLCBvcHRpb25zLCB0aGVtZSk7XG5cbiAgdGhpcy5jaGFydCA9IGNoYXJ0O1xuICB0aGlzLmNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcbiAgdGhpcy5jdHggPSB0aGlzLmNoYXJ0LmN0eDtcbiAgdGhpcy5naG9zdEN0eCA9IHRoaXMuY2hhcnQuX2V2ZW50TWFuYWdlci5naG9zdEN0eDtcbiAgdGhpcy5pdGVtcyA9IFtdO1xuXG4gIHRoaXMud2lkdGggPSAwLFxuICAvL3RoaXMuZm9udFNpemUgPSAxMixcbiAgdGhpcy5oZWlnaHQgPSAwLFxuICB0aGlzLm9yaWVudGF0aW9uID0gbnVsbCxcbiAgdGhpcy5kYXRhU2VyaWVzID0gW107XG4gIHRoaXMuYm91bmRzID0ge1xuICAgIHgxOiBudWxsLCB5MTogbnVsbCwgeDI6IG51bGwsIHkyOiBudWxsXG4gIH07XG5cbiAgaWYgKHR5cGVvZiAodGhpcy5fb3B0aW9ucy5mb250U2l6ZSkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB0aGlzLmZvbnRTaXplID0gdGhpcy5jaGFydC5nZXRBdXRvRm9udFNpemUodGhpcy5mb250U2l6ZSk7XG4gICAgLy93aW5kb3cuY29uc29sZS5sb2coXCJmb250U2l6ZTogXCIgKyB0aGlzLmZvbnRTaXplKTtcbiAgfVxuXG4gIHRoaXMubGluZUhlaWdodCA9IGdldEZvbnRIZWlnaHRJblBpeGVscyh0aGlzLmZvbnRGYW1pbHksIHRoaXMuZm9udFNpemUsIHRoaXMuZm9udFdlaWdodCk7XG5cbiAgdGhpcy5ob3Jpem9udGFsU3BhY2luZyA9IHRoaXMuZm9udFNpemU7XG59XG5cbmV4dGVuZChMZWdlbmQsIENhbnZhc0pTT2JqZWN0KTtcblxuTGVnZW5kLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG5cbiAgdmFyIGNvbnRhaW5lciA9ICghdGhpcy5kb2NrSW5zaWRlUGxvdEFyZWEgPyB0aGlzLmNoYXJ0IDogdGhpcy5jaGFydC5wbG90QXJlYSk7XG4gIHZhciBmcmVlU3BhY2UgPSBjb250YWluZXIubGF5b3V0TWFuYWdlci5nZXRGcmVlU3BhY2UoKTtcbiAgdmFyIHBvc2l0aW9uID0gbnVsbDtcbiAgdmFyIHRvcCA9IDA7XG4gIHZhciBsZWZ0ID0gMDtcbiAgdmFyIG1heFdpZHRoID0gMDtcbiAgdmFyIG1heEhlaWdodCA9IDA7XG4gIHZhciBpdGVtTWFyZ2luID0gNTtcblxuICB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIHJvd3MgPSBbXTtcblxuICAvL3RoaXMuY3R4LmZvbnQgPSBnZXRGb250U3RyaW5nKFwiXCIsIHRoaXMsIG51bGwpO1xuICAvL3RoaXMuY3R4LmZvbnRDb2xvciA9IHRoaXMuZm9udENvbG9yO1xuXG4gIGlmICh0aGlzLnZlcnRpY2FsQWxpZ24gPT09IFwidG9wXCIgfHwgdGhpcy52ZXJ0aWNhbEFsaWduID09PSBcImJvdHRvbVwiKSB7XG4gICAgdGhpcy5vcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiO1xuICAgIHBvc2l0aW9uID0gdGhpcy52ZXJ0aWNhbEFsaWduO1xuXG4gICAgbWF4V2lkdGggPSB0aGlzLm1heFdpZHRoICE9PSBudWxsID8gdGhpcy5tYXhXaWR0aCA6IGZyZWVTcGFjZS53aWR0aCAqIC43O1xuICAgIG1heEhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICE9PSBudWxsID8gdGhpcy5tYXhIZWlnaHQgOiBmcmVlU3BhY2UuaGVpZ2h0ICogLjU7XG4gIH1cbiAgZWxzZSBpZiAodGhpcy52ZXJ0aWNhbEFsaWduID09PSBcImNlbnRlclwiKSB7XG4gICAgdGhpcy5vcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjtcbiAgICBwb3NpdGlvbiA9IHRoaXMuaG9yaXpvbnRhbEFsaWduO1xuXG4gICAgbWF4V2lkdGggPSB0aGlzLm1heFdpZHRoICE9PSBudWxsID8gdGhpcy5tYXhXaWR0aCA6IGZyZWVTcGFjZS53aWR0aCAqIC41O1xuICAgIG1heEhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ICE9PSBudWxsID8gdGhpcy5tYXhIZWlnaHQgOiBmcmVlU3BhY2UuaGVpZ2h0ICogLjc7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YVNlcmllcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhU2VyaWVzW2ldO1xuXG5cbiAgICBpZiAoZGF0YVNlcmllcy50eXBlICE9PSBcInBpZVwiICYmIGRhdGFTZXJpZXMudHlwZSAhPT0gXCJkb3VnaG51dFwiICYmIGRhdGFTZXJpZXMudHlwZSAhPT0gXCJmdW5uZWxcIikge1xuXG4gICAgICB2YXIgbWFya2VyVHlwZSA9IGRhdGFTZXJpZXMubGVnZW5kTWFya2VyVHlwZSA/IGRhdGFTZXJpZXMubGVnZW5kTWFya2VyVHlwZSA6IChkYXRhU2VyaWVzLnR5cGUgPT09IFwibGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGVwTGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzcGxpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic2NhdHRlclwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJidWJibGVcIikgJiYgZGF0YVNlcmllcy5tYXJrZXJUeXBlID8gZGF0YVNlcmllcy5tYXJrZXJUeXBlIDogRGF0YVNlcmllcy5nZXREZWZhdWx0TGVnZW5kTWFya2VyKGRhdGFTZXJpZXMudHlwZSk7XG4gICAgICB2YXIgbGVnZW5kVGV4dCA9IGRhdGFTZXJpZXMubGVnZW5kVGV4dCA/IGRhdGFTZXJpZXMubGVnZW5kVGV4dCA6IHRoaXMuaXRlbVRleHRGb3JtYXR0ZXIgPyB0aGlzLml0ZW1UZXh0Rm9ybWF0dGVyKHsgY2hhcnQ6IHRoaXMuY2hhcnQsIGxlZ2VuZDogdGhpcy5fb3B0aW9ucywgZGF0YVNlcmllczogZGF0YVNlcmllcywgZGF0YVBvaW50OiBudWxsIH0pXG4gICAgICAgIDogZGF0YVNlcmllcy5uYW1lO1xuICAgICAgdmFyIG1hcmtlckNvbG9yID0gZGF0YVNlcmllcy5sZWdlbmRNYXJrZXJDb2xvciA/IGRhdGFTZXJpZXMubGVnZW5kTWFya2VyQ29sb3IgOiBkYXRhU2VyaWVzLm1hcmtlckNvbG9yID8gZGF0YVNlcmllcy5tYXJrZXJDb2xvciA6IGRhdGFTZXJpZXMuX2NvbG9yU2V0WzBdO1xuICAgICAgdmFyIG1hcmtlclNpemUgPSAoIWRhdGFTZXJpZXMubWFya2VyU2l6ZSAmJiAoZGF0YVNlcmllcy50eXBlID09PSBcImxpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RlcExpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3BsaW5lXCIpKSA/IDAgOiB0aGlzLmxpbmVIZWlnaHQgKiAuNjtcbiAgICAgIHZhciBtYXJrZXJCb3JkZXJDb2xvciA9IGRhdGFTZXJpZXMubGVnZW5kTWFya2VyQm9yZGVyQ29sb3IgPyBkYXRhU2VyaWVzLmxlZ2VuZE1hcmtlckJvcmRlckNvbG9yIDogZGF0YVNlcmllcy5tYXJrZXJCb3JkZXJDb2xvcjtcbiAgICAgIHZhciBtYXJrZXJCb3JkZXJUaGlja25lc3MgPSBkYXRhU2VyaWVzLmxlZ2VuZE1hcmtlckJvcmRlclRoaWNrbmVzcyA/IGRhdGFTZXJpZXMubGVnZW5kTWFya2VyQm9yZGVyVGhpY2tuZXNzIDogZGF0YVNlcmllcy5tYXJrZXJCb3JkZXJUaGlja25lc3MgPyBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKG1hcmtlclNpemUgKiAuMikpIDogMDtcbiAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhU2VyaWVzLl9jb2xvclNldFswXTtcblxuICAgICAgbGVnZW5kVGV4dCA9IHRoaXMuY2hhcnQucmVwbGFjZUtleXdvcmRzV2l0aFZhbHVlKGxlZ2VuZFRleHQsIGRhdGFTZXJpZXMuZGF0YVBvaW50c1swXSwgZGF0YVNlcmllcywgaSk7XG4gICAgICB2YXIgaXRlbSA9IHtcbiAgICAgICAgbWFya2VyVHlwZTogbWFya2VyVHlwZSwgbWFya2VyQ29sb3I6IG1hcmtlckNvbG9yLCB0ZXh0OiBsZWdlbmRUZXh0LCB0ZXh0QmxvY2s6IG51bGwsIGNoYXJ0VHlwZTogZGF0YVNlcmllcy50eXBlLCBtYXJrZXJTaXplOiBtYXJrZXJTaXplLCBsaW5lQ29sb3I6IGRhdGFTZXJpZXMuX2NvbG9yU2V0WzBdLFxuICAgICAgICBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXMuaW5kZXgsIGRhdGFQb2ludEluZGV4OiBudWxsLCBtYXJrZXJCb3JkZXJDb2xvcjogbWFya2VyQm9yZGVyQ29sb3IsIG1hcmtlckJvcmRlclRoaWNrbmVzczogbWFya2VyQm9yZGVyVGhpY2tuZXNzXG4gICAgICB9O1xuXG4gICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBkYXRhUG9pbnRJbmRleCA9IDA7IGRhdGFQb2ludEluZGV4IDwgZGF0YVNlcmllcy5kYXRhUG9pbnRzLmxlbmd0aDsgZGF0YVBvaW50SW5kZXgrKykge1xuXG4gICAgICAgIHZhciBkYXRhUG9pbnQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbZGF0YVBvaW50SW5kZXhdO1xuXG4gICAgICAgIHZhciBtYXJrZXJUeXBlID0gZGF0YVBvaW50LmxlZ2VuZE1hcmtlclR5cGUgPyBkYXRhUG9pbnQubGVnZW5kTWFya2VyVHlwZSA6IGRhdGFTZXJpZXMubGVnZW5kTWFya2VyVHlwZSA/IGRhdGFTZXJpZXMubGVnZW5kTWFya2VyVHlwZSA6IERhdGFTZXJpZXMuZ2V0RGVmYXVsdExlZ2VuZE1hcmtlcihkYXRhU2VyaWVzLnR5cGUpO1xuICAgICAgICB2YXIgbGVnZW5kVGV4dCA9IGRhdGFQb2ludC5sZWdlbmRUZXh0ID8gZGF0YVBvaW50LmxlZ2VuZFRleHQgOiBkYXRhU2VyaWVzLmxlZ2VuZFRleHQgPyBkYXRhU2VyaWVzLmxlZ2VuZFRleHQgOiB0aGlzLml0ZW1UZXh0Rm9ybWF0dGVyID8gdGhpcy5pdGVtVGV4dEZvcm1hdHRlcih7IGNoYXJ0OiB0aGlzLmNoYXJ0LCBsZWdlbmQ6IHRoaXMuX29wdGlvbnMsIGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsIGRhdGFQb2ludDogZGF0YVBvaW50IH0pXG4gICAgICAgICAgOiBkYXRhUG9pbnQubmFtZSA/IGRhdGFQb2ludC5uYW1lIDogXCJEYXRhUG9pbnQ6IFwiICsgKGRhdGFQb2ludEluZGV4ICsgMSk7XG4gICAgICAgIHZhciBtYXJrZXJDb2xvciA9IGRhdGFQb2ludC5sZWdlbmRNYXJrZXJDb2xvciA/IGRhdGFQb2ludC5sZWdlbmRNYXJrZXJDb2xvciA6IGRhdGFTZXJpZXMubGVnZW5kTWFya2VyQ29sb3IgPyBkYXRhU2VyaWVzLmxlZ2VuZE1hcmtlckNvbG9yIDogZGF0YVBvaW50LmNvbG9yID8gZGF0YVBvaW50LmNvbG9yIDogZGF0YVNlcmllcy5jb2xvciA/IGRhdGFTZXJpZXMuY29sb3IgOiBkYXRhU2VyaWVzLl9jb2xvclNldFtkYXRhUG9pbnRJbmRleCAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG4gICAgICAgIHZhciBtYXJrZXJTaXplID0gdGhpcy5saW5lSGVpZ2h0ICogLjY7XG4gICAgICAgIHZhciBtYXJrZXJCb3JkZXJDb2xvciA9IGRhdGFQb2ludC5sZWdlbmRNYXJrZXJCb3JkZXJDb2xvciA/IGRhdGFQb2ludC5sZWdlbmRNYXJrZXJCb3JkZXJDb2xvciA6IGRhdGFTZXJpZXMubGVnZW5kTWFya2VyQm9yZGVyQ29sb3IgPyBkYXRhU2VyaWVzLmxlZ2VuZE1hcmtlckJvcmRlckNvbG9yIDogZGF0YVBvaW50Lm1hcmtlckJvcmRlckNvbG9yID8gZGF0YVBvaW50Lm1hcmtlckJvcmRlckNvbG9yIDogZGF0YVNlcmllcy5tYXJrZXJCb3JkZXJDb2xvcjtcbiAgICAgICAgdmFyIG1hcmtlckJvcmRlclRoaWNrbmVzcyA9IGRhdGFQb2ludC5sZWdlbmRNYXJrZXJCb3JkZXJUaGlja25lc3MgPyBkYXRhUG9pbnQubGVnZW5kTWFya2VyQm9yZGVyVGhpY2tuZXNzIDogZGF0YVNlcmllcy5sZWdlbmRNYXJrZXJCb3JkZXJUaGlja25lc3MgPyBkYXRhU2VyaWVzLmxlZ2VuZE1hcmtlckJvcmRlclRoaWNrbmVzcyA6IGRhdGFQb2ludC5tYXJrZXJCb3JkZXJUaGlja25lc3MgfHwgZGF0YVNlcmllcy5tYXJrZXJCb3JkZXJUaGlja25lc3MgPyBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKG1hcmtlclNpemUgKiAuMikpIDogMDtcblxuICAgICAgICBsZWdlbmRUZXh0ID0gdGhpcy5jaGFydC5yZXBsYWNlS2V5d29yZHNXaXRoVmFsdWUobGVnZW5kVGV4dCwgZGF0YVBvaW50LCBkYXRhU2VyaWVzLCBkYXRhUG9pbnRJbmRleCk7XG5cbiAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgbWFya2VyVHlwZTogbWFya2VyVHlwZSwgbWFya2VyQ29sb3I6IG1hcmtlckNvbG9yLCB0ZXh0OiBsZWdlbmRUZXh0LCB0ZXh0QmxvY2s6IG51bGwsIGNoYXJ0VHlwZTogZGF0YVNlcmllcy50eXBlLCBtYXJrZXJTaXplOiBtYXJrZXJTaXplLFxuICAgICAgICAgIGRhdGFTZXJpZXNJbmRleDogaSwgZGF0YVBvaW50SW5kZXg6IGRhdGFQb2ludEluZGV4LCBtYXJrZXJCb3JkZXJDb2xvcjogbWFya2VyQm9yZGVyQ29sb3IsIG1hcmtlckJvcmRlclRoaWNrbmVzczogbWFya2VyQm9yZGVyVGhpY2tuZXNzXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGRhdGFQb2ludC5zaG93SW5MZWdlbmQgfHwgKGRhdGFTZXJpZXMuc2hvd0luTGVnZW5kICYmIGRhdGFQb2ludC5zaG93SW5MZWdlbmQgIT09IGZhbHNlKSkge1xuICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaXRlbSA9IG51bGw7XG4gIH1cbiAgaWYgKHRoaXMucmV2ZXJzZWQgPT09IHRydWUpIHtcbiAgICBpdGVtcy5yZXZlcnNlKCk7XG4gIH1cblxuICAvLyBGaW5kIG91dCB0aGUgcmVxdWlyZWQgd2lkdGggYW5kIGhlaWdodCBvZiBMZWdlbmQgYW5kIHBvc2l0aW9uIHRoZSBpdGVtcyByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyXG4gIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHJvdyA9IG51bGw7XG4gICAgdmFyIHJvd0luZGV4ID0gMDsgLy8gcmVxdWlyZWQgZm9yIHZlcnRpY2FsIG9yaWVudGF0aW9uXG4gICAgdmFyIHRleHRNYXhXaWR0aCA9IDA7XG4gICAgdmFyIGNvbHVtbkhlaWdodCA9IDA7XG5cbiAgICBpZiAodGhpcy5pdGVtV2lkdGggIT09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLml0ZW1NYXhXaWR0aCAhPT0gbnVsbCkge1xuICAgICAgICB0ZXh0TWF4V2lkdGggPSBNYXRoLm1pbih0aGlzLml0ZW1XaWR0aCwgdGhpcy5pdGVtTWF4V2lkdGgsIG1heFdpZHRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHRNYXhXaWR0aCA9IE1hdGgubWluKHRoaXMuaXRlbVdpZHRoLCBtYXhXaWR0aCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLml0ZW1NYXhXaWR0aCAhPT0gbnVsbCkge1xuICAgICAgICB0ZXh0TWF4V2lkdGggPSBNYXRoLm1pbih0aGlzLml0ZW1NYXhXaWR0aCwgbWF4V2lkdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dE1heFdpZHRoID0gbWF4V2lkdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWFya2VyU2l6ZSA9IChtYXJrZXJTaXplID09PSAwID8gdGhpcy5saW5lSGVpZ2h0ICogLjYgOiBtYXJrZXJTaXplKTtcbiAgICB0ZXh0TWF4V2lkdGggPSB0ZXh0TWF4V2lkdGggLSAobWFya2VyU2l6ZSArIHRoaXMuaG9yaXpvbnRhbFNwYWNpbmcgKiAuMSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xuXG4gICAgICBpZiAoaXRlbS5jaGFydFR5cGUgPT09IFwibGluZVwiIHx8IGl0ZW0uY2hhcnRUeXBlID09PSBcInNwbGluZVwiIHx8IGl0ZW0uY2hhcnRUeXBlID09PSBcInN0ZXBMaW5lXCIpIHtcbiAgICAgICAgdGV4dE1heFdpZHRoID0gdGV4dE1heFdpZHRoIC0gMiAqICh0aGlzLmxpbmVIZWlnaHQgKiAuMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXhIZWlnaHQgPD0gMCB8fCB0eXBlb2YgKG1heEhlaWdodCkgPT09IFwidW5kZWZpbmVkXCIgfHwgdGV4dE1heFdpZHRoIDw9IDAgfHwgdHlwZW9mICh0ZXh0TWF4V2lkdGgpID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcblxuICAgICAgICBpdGVtLnRleHRCbG9jayA9IG5ldyBUZXh0QmxvY2sodGhpcy5jdHgsIHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsLy9UQklcbiAgICAgICAgICBtYXhXaWR0aDogdGV4dE1heFdpZHRoLFxuICAgICAgICAgIG1heEhlaWdodDogdGhpcy5pdGVtV3JhcCA/IG1heEhlaWdodCA6IHRoaXMubGluZUhlaWdodCwgLy9UQkk6IEZvbnRTaXplXG4gICAgICAgICAgYW5nbGU6IDAsXG4gICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgIGhvcml6b250YWxBbGlnbjogXCJsZWZ0XCIsLy9sZWZ0LCBjZW50ZXIsIHJpZ2h0XG4gICAgICAgICAgZm9udFNpemU6IHRoaXMuZm9udFNpemUsLy9pbiBwaXhlbHNcbiAgICAgICAgICBmb250RmFtaWx5OiB0aGlzLmZvbnRGYW1pbHksXG4gICAgICAgICAgZm9udFdlaWdodDogdGhpcy5mb250V2VpZ2h0LCAvL25vcm1hbCwgYm9sZCwgYm9sZGVyLCBsaWdodGVyLFxuICAgICAgICAgIGZvbnRDb2xvcjogdGhpcy5mb250Q29sb3IsXG4gICAgICAgICAgZm9udFN0eWxlOiB0aGlzLmZvbnRTdHlsZSwgLy8gbm9ybWFsLCBpdGFsaWMsIG9ibGlxdWVcbiAgICAgICAgICB0ZXh0QmFzZWxpbmU6IFwidG9wXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGl0ZW0udGV4dEJsb2NrLm1lYXN1cmVUZXh0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXRlbVdpZHRoICE9PSBudWxsKSB7XG4gICAgICAgICAgaXRlbS50ZXh0QmxvY2sud2lkdGggPSB0aGlzLml0ZW1XaWR0aCAtIChtYXJrZXJTaXplICsgdGhpcy5ob3Jpem9udGFsU3BhY2luZyAqIC4xICsgKChpdGVtLmNoYXJ0VHlwZSA9PT0gXCJsaW5lXCIgfHwgaXRlbS5jaGFydFR5cGUgPT09IFwic3BsaW5lXCIgfHwgaXRlbS5jaGFydFR5cGUgPT09IFwic3RlcExpbmVcIikgPyAyICogKHRoaXMubGluZUhlaWdodCAqIC4xKSA6IDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcm93IHx8IHJvdy53aWR0aCArIE1hdGgucm91bmQoaXRlbS50ZXh0QmxvY2sud2lkdGggKyB0aGlzLmhvcml6b250YWxTcGFjaW5nICogLjEgKyBtYXJrZXJTaXplICsgKHJvdy53aWR0aCA9PT0gMCA/IDAgOiAodGhpcy5ob3Jpem9udGFsU3BhY2luZykpICsgKChpdGVtLmNoYXJ0VHlwZSA9PT0gXCJsaW5lXCIgfHwgaXRlbS5jaGFydFR5cGUgPT09IFwic3BsaW5lXCIgfHwgaXRlbS5jaGFydFR5cGUgPT09IFwic3RlcExpbmVcIikgPyAyICogKHRoaXMubGluZUhlaWdodCAqIC4xKSA6IDApKSA+IG1heFdpZHRoKSB7XG4gICAgICAgICAgcm93ID0ge1xuICAgICAgICAgICAgaXRlbXM6IFtdLCB3aWR0aDogMFxuICAgICAgICAgIH07XG4gICAgICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgICAgICAgdGhpcy5oZWlnaHQgKz0gY29sdW1uSGVpZ2h0O1xuICAgICAgICAgIGNvbHVtbkhlaWdodCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb2x1bW5IZWlnaHQgPSBNYXRoLm1heChjb2x1bW5IZWlnaHQsIGl0ZW0udGV4dEJsb2NrLmhlaWdodCk7XG5cbiAgICAgICAgaXRlbS50ZXh0QmxvY2sueCA9IHJvdy53aWR0aDtcbiAgICAgICAgaXRlbS50ZXh0QmxvY2sueSA9IDA7XG5cbiAgICAgICAgcm93LndpZHRoICs9IE1hdGgucm91bmQoaXRlbS50ZXh0QmxvY2sud2lkdGggKyB0aGlzLmhvcml6b250YWxTcGFjaW5nICogLjEgKyBtYXJrZXJTaXplICsgKHJvdy53aWR0aCA9PT0gMCA/IDAgOiB0aGlzLmhvcml6b250YWxTcGFjaW5nKSArICgoaXRlbS5jaGFydFR5cGUgPT09IFwibGluZVwiIHx8IGl0ZW0uY2hhcnRUeXBlID09PSBcInNwbGluZVwiIHx8IGl0ZW0uY2hhcnRUeXBlID09PSBcInN0ZXBMaW5lXCIpID8gMiAqICh0aGlzLmxpbmVIZWlnaHQgKiAuMSkgOiAwKSk7XG4gICAgICAgIHJvdy5pdGVtcy5wdXNoKGl0ZW0pO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSBNYXRoLm1heChyb3cud2lkdGgsIHRoaXMud2lkdGgpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBpdGVtLnRleHRCbG9jayA9IG5ldyBUZXh0QmxvY2sodGhpcy5jdHgsIHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsLy9UQklcbiAgICAgICAgICBtYXhXaWR0aDogdGV4dE1heFdpZHRoLFxuICAgICAgICAgIG1heEhlaWdodDogdGhpcy5pdGVtV3JhcCA9PT0gdHJ1ZSA/IG1heEhlaWdodCA6IHRoaXMuZm9udFNpemUgKiAxLjUsIC8vVEJJOiBGb250U2l6ZVxuICAgICAgICAgIGFuZ2xlOiAwLFxuICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICBob3Jpem9udGFsQWxpZ246IFwibGVmdFwiLC8vbGVmdCwgY2VudGVyLCByaWdodFxuICAgICAgICAgIGZvbnRTaXplOiB0aGlzLmZvbnRTaXplLC8vaW4gcGl4ZWxzXG4gICAgICAgICAgZm9udEZhbWlseTogdGhpcy5mb250RmFtaWx5LFxuICAgICAgICAgIGZvbnRXZWlnaHQ6IHRoaXMuZm9udFdlaWdodCwgLy9ub3JtYWwsIGJvbGQsIGJvbGRlciwgbGlnaHRlcixcbiAgICAgICAgICBmb250Q29sb3I6IHRoaXMuZm9udENvbG9yLFxuICAgICAgICAgIGZvbnRTdHlsZTogdGhpcy5mb250U3R5bGUsIC8vIG5vcm1hbCwgaXRhbGljLCBvYmxpcXVlXG4gICAgICAgICAgdGV4dEJhc2VsaW5lOiBcInRvcFwiXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0ZW0udGV4dEJsb2NrLm1lYXN1cmVUZXh0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXRlbVdpZHRoICE9PSBudWxsKSB7XG4gICAgICAgICAgaXRlbS50ZXh0QmxvY2sud2lkdGggPSB0aGlzLml0ZW1XaWR0aCAtIChtYXJrZXJTaXplICsgdGhpcy5ob3Jpem9udGFsU3BhY2luZyAqIC4xICsgKChpdGVtLmNoYXJ0VHlwZSA9PT0gXCJsaW5lXCIgfHwgaXRlbS5jaGFydFR5cGUgPT09IFwic3BsaW5lXCIgfHwgaXRlbS5jaGFydFR5cGUgPT09IFwic3RlcExpbmVcIikgPyAyICogKHRoaXMubGluZUhlaWdodCAqIC4xKSA6IDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhlaWdodCA8PSBtYXhIZWlnaHQpIHtcbiAgICAgICAgICByb3cgPSB7XG4gICAgICAgICAgICBpdGVtczogW10sIHdpZHRoOiAwXG4gICAgICAgICAgfTtcbiAgICAgICAgICByb3dzLnB1c2gocm93KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3cgPSByb3dzW3Jvd0luZGV4XTtcbiAgICAgICAgICByb3dJbmRleCA9IChyb3dJbmRleCArIDEpICUgcm93cy5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhlaWdodCArPSBpdGVtLnRleHRCbG9jay5oZWlnaHQ7XG5cbiAgICAgICAgaXRlbS50ZXh0QmxvY2sueCA9IHJvdy53aWR0aDsgLy8gcmVsYXRpdmUgdG8gdGhlIHJvd1xuICAgICAgICBpdGVtLnRleHRCbG9jay55ID0gMDsgLy8gcmVsYXRpdmUgdG8gdGhlIHJvd1xuXG4gICAgICAgIHJvdy53aWR0aCArPSBNYXRoLnJvdW5kKGl0ZW0udGV4dEJsb2NrLndpZHRoICsgdGhpcy5ob3Jpem9udGFsU3BhY2luZyAqIC4xICsgbWFya2VyU2l6ZSArIChyb3cud2lkdGggPT09IDAgPyAwIDogdGhpcy5ob3Jpem9udGFsU3BhY2luZykgKyAoKGl0ZW0uY2hhcnRUeXBlID09PSBcImxpbmVcIiB8fCBpdGVtLmNoYXJ0VHlwZSA9PT0gXCJzcGxpbmVcIiB8fCBpdGVtLmNoYXJ0VHlwZSA9PT0gXCJzdGVwTGluZVwiKSA/IDIgKiAodGhpcy5saW5lSGVpZ2h0ICogLjEpIDogMCkpO1xuICAgICAgICByb3cuaXRlbXMucHVzaChpdGVtKTtcblxuICAgICAgICB0aGlzLndpZHRoID0gTWF0aC5tYXgocm93LndpZHRoLCB0aGlzLndpZHRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pdGVtV3JhcCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gcm93cy5sZW5ndGggKiAodGhpcy5saW5lSGVpZ2h0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWlnaHQgKz0gY29sdW1uSGVpZ2h0O1xuICAgIH1cblxuICAgIHRoaXMuaGVpZ2h0ID0gTWF0aC5taW4obWF4SGVpZ2h0LCB0aGlzLmhlaWdodCk7XG4gICAgdGhpcy53aWR0aCA9IE1hdGgubWluKG1heFdpZHRoLCB0aGlzLndpZHRoKTtcbiAgfVxuXG4gIGlmICh0aGlzLnZlcnRpY2FsQWxpZ24gPT09IFwidG9wXCIpIHtcbiAgICBpZiAodGhpcy5ob3Jpem9udGFsQWxpZ24gPT09IFwibGVmdFwiKVxuICAgICAgbGVmdCA9IGZyZWVTcGFjZS54MTtcbiAgICBlbHNlIGlmICh0aGlzLmhvcml6b250YWxBbGlnbiA9PT0gXCJyaWdodFwiKVxuICAgICAgbGVmdCA9IGZyZWVTcGFjZS54MiAtIHRoaXMud2lkdGg7XG4gICAgZWxzZVxuICAgICAgbGVmdCA9IGZyZWVTcGFjZS54MSArIGZyZWVTcGFjZS53aWR0aCAvIDIgLSB0aGlzLndpZHRoIC8gMjtcblxuICAgIHRvcCA9IGZyZWVTcGFjZS55MTtcbiAgfSBlbHNlIGlmICh0aGlzLnZlcnRpY2FsQWxpZ24gPT09IFwiY2VudGVyXCIpIHtcbiAgICBpZiAodGhpcy5ob3Jpem9udGFsQWxpZ24gPT09IFwibGVmdFwiKVxuICAgICAgbGVmdCA9IGZyZWVTcGFjZS54MTtcbiAgICBlbHNlIGlmICh0aGlzLmhvcml6b250YWxBbGlnbiA9PT0gXCJyaWdodFwiKVxuICAgICAgbGVmdCA9IGZyZWVTcGFjZS54MiAtIHRoaXMud2lkdGg7XG4gICAgZWxzZVxuICAgICAgbGVmdCA9IGZyZWVTcGFjZS54MSArIGZyZWVTcGFjZS53aWR0aCAvIDIgLSB0aGlzLndpZHRoIC8gMjtcblxuICAgIHRvcCA9IGZyZWVTcGFjZS55MSArIGZyZWVTcGFjZS5oZWlnaHQgLyAyIC0gdGhpcy5oZWlnaHQgLyAyO1xuICB9IGVsc2UgaWYgKHRoaXMudmVydGljYWxBbGlnbiA9PT0gXCJib3R0b21cIikge1xuICAgIGlmICh0aGlzLmhvcml6b250YWxBbGlnbiA9PT0gXCJsZWZ0XCIpXG4gICAgICBsZWZ0ID0gZnJlZVNwYWNlLngxO1xuICAgIGVsc2UgaWYgKHRoaXMuaG9yaXpvbnRhbEFsaWduID09PSBcInJpZ2h0XCIpXG4gICAgICBsZWZ0ID0gZnJlZVNwYWNlLngyIC0gdGhpcy53aWR0aDtcbiAgICBlbHNlXG4gICAgICBsZWZ0ID0gZnJlZVNwYWNlLngxICsgZnJlZVNwYWNlLndpZHRoIC8gMiAtIHRoaXMud2lkdGggLyAyO1xuXG4gICAgdG9wID0gZnJlZVNwYWNlLnkyIC0gdGhpcy5oZWlnaHQ7XG4gIH1cblxuICB0aGlzLml0ZW1zID0gaXRlbXM7XG5cbiAgLy9Bc3NpZ24gaWRzIHRvIGFsbCBsZWdlbmRJdGVtc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcblxuICAgIHZhciBpdGVtID0gaXRlbXNbaV07XG5cbiAgICBpdGVtLmlkID0gKyt0aGlzLmNoYXJ0Ll9ldmVudE1hbmFnZXIubGFzdE9iamVjdElkO1xuICAgIHRoaXMuY2hhcnQuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaXRlbS5pZF0gPSB7XG4gICAgICBpZDogaXRlbS5pZCwgb2JqZWN0VHlwZTogXCJsZWdlbmRJdGVtXCIsIGxlZ2VuZEl0ZW1JbmRleDogaSwgZGF0YVNlcmllc0luZGV4OiBpdGVtLmRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGl0ZW0uZGF0YVBvaW50SW5kZXhcbiAgICB9O1xuICAgIC8vZGVsZXRlIGl0ZW0udGV4dEJsb2NrOy8vIE5vdCBSZXF1aXJlZCBhbnltb3JlXG4gIH1cblxuICB2YXIgcm93SGVpZ2h0ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgdmFyIGNvbHVtbkhlaWdodCA9IDA7XG4gICAgZm9yICh2YXIgaXRlbUluZGV4ID0gMDsgaXRlbUluZGV4IDwgcm93Lml0ZW1zLmxlbmd0aDsgaXRlbUluZGV4KyspIHtcbiAgICAgIHZhciBpdGVtID0gcm93Lml0ZW1zW2l0ZW1JbmRleF07XG5cbiAgICAgIHZhciBpdGVtWCA9IGl0ZW0udGV4dEJsb2NrLnggKyBsZWZ0ICsgKGl0ZW1JbmRleCA9PT0gMCA/IG1hcmtlclNpemUgKiAuMiA6IHRoaXMuaG9yaXpvbnRhbFNwYWNpbmcpO1xuICAgICAgdmFyIGl0ZW1ZID0gdG9wICsgcm93SGVpZ2h0O1xuXG4gICAgICB2YXIgZ2hvc3RYID0gaXRlbVg7XG5cbiAgICAgIGlmICghdGhpcy5jaGFydC5kYXRhW2l0ZW0uZGF0YVNlcmllc0luZGV4XS52aXNpYmxlKVxuICAgICAgICB0aGlzLmN0eC5nbG9iYWxBbHBoYSA9IC41O1xuXG4gICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICB0aGlzLmN0eC5yZWN0KGxlZnQsIHRvcCwgbWF4V2lkdGgsIG1heEhlaWdodCk7XG4gICAgICB0aGlzLmN0eC5jbGlwKCk7XG5cbiAgICAgIGlmIChpdGVtLmNoYXJ0VHlwZSA9PT0gXCJsaW5lXCIgfHwgaXRlbS5jaGFydFR5cGUgPT09IFwic3RlcExpbmVcIiB8fCBpdGVtLmNoYXJ0VHlwZSA9PT0gXCJzcGxpbmVcIikge1xuICAgICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9IGl0ZW0ubGluZUNvbG9yO1xuICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSBNYXRoLmNlaWwodGhpcy5saW5lSGVpZ2h0IC8gOCk7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5tb3ZlVG8oaXRlbVggLSB0aGlzLmxpbmVIZWlnaHQgKiAuMSwgaXRlbVkgKyB0aGlzLmxpbmVIZWlnaHQgLyAyKTtcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKGl0ZW1YICsgdGhpcy5saW5lSGVpZ2h0ICogLjcsIGl0ZW1ZICsgdGhpcy5saW5lSGVpZ2h0IC8gMik7XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuXG4gICAgICAgIGdob3N0WCAtPSB0aGlzLmxpbmVIZWlnaHQgKiAuMTtcbiAgICAgIH1cblxuICAgICAgUmVuZGVySGVscGVyLmRyYXdNYXJrZXIoaXRlbVggKyBtYXJrZXJTaXplIC8gMiwgaXRlbVkgKyAodGhpcy5saW5lSGVpZ2h0IC8gMiksIHRoaXMuY3R4LCBpdGVtLm1hcmtlclR5cGUsIGl0ZW0ubWFya2VyU2l6ZSwgaXRlbS5tYXJrZXJDb2xvciwgaXRlbS5tYXJrZXJCb3JkZXJDb2xvciwgaXRlbS5tYXJrZXJCb3JkZXJUaGlja25lc3MpO1xuXG4gICAgICBpdGVtLnRleHRCbG9jay54ID0gaXRlbVggKyB0aGlzLmhvcml6b250YWxTcGFjaW5nICogLjEgKyBtYXJrZXJTaXplO1xuXG4gICAgICBpZiAoaXRlbS5jaGFydFR5cGUgPT09IFwibGluZVwiIHx8IGl0ZW0uY2hhcnRUeXBlID09PSBcInN0ZXBMaW5lXCIgfHwgaXRlbS5jaGFydFR5cGUgPT09IFwic3BsaW5lXCIpIHtcbiAgICAgICAgaXRlbS50ZXh0QmxvY2sueCA9IGl0ZW0udGV4dEJsb2NrLnggKyB0aGlzLmxpbmVIZWlnaHQgKiAuMTtcbiAgICAgIH1cblxuICAgICAgaXRlbS50ZXh0QmxvY2sueSA9IGl0ZW1ZO1xuXG4gICAgICBpdGVtLnRleHRCbG9jay5yZW5kZXIodHJ1ZSk7XG5cbiAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcblxuICAgICAgaWYgKGl0ZW1JbmRleCA+IDApIHtcbiAgICAgICAgY29sdW1uSGVpZ2h0ID0gTWF0aC5tYXgoY29sdW1uSGVpZ2h0LCBpdGVtLnRleHRCbG9jay5oZWlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sdW1uSGVpZ2h0ID0gaXRlbS50ZXh0QmxvY2suaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuY2hhcnQuZGF0YVtpdGVtLmRhdGFTZXJpZXNJbmRleF0udmlzaWJsZSlcbiAgICAgICAgdGhpcy5jdHguZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgICB2YXIgaGV4Q29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGl0ZW0uaWQpO1xuICAgICAgdGhpcy5naG9zdEN0eC5maWxsU3R5bGUgPSBoZXhDb2xvcjtcbiAgICAgIHRoaXMuZ2hvc3RDdHguYmVnaW5QYXRoKCk7XG4gICAgICB0aGlzLmdob3N0Q3R4LmZpbGxSZWN0KGdob3N0WCwgaXRlbS50ZXh0QmxvY2sueSwgaXRlbS50ZXh0QmxvY2sueCArIGl0ZW0udGV4dEJsb2NrLndpZHRoIC0gZ2hvc3RYLCBpdGVtLnRleHRCbG9jay5oZWlnaHQpO1xuXG4gICAgICBpdGVtLngxID0gdGhpcy5jaGFydC5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpdGVtLmlkXS54MSA9IGdob3N0WDtcbiAgICAgIGl0ZW0ueTEgPSB0aGlzLmNoYXJ0Ll9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2l0ZW0uaWRdLnkxID0gaXRlbS50ZXh0QmxvY2sueTtcbiAgICAgIGl0ZW0ueDIgPSB0aGlzLmNoYXJ0Ll9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2l0ZW0uaWRdLngyID0gaXRlbS50ZXh0QmxvY2sueCArIGl0ZW0udGV4dEJsb2NrLndpZHRoO1xuICAgICAgaXRlbS55MiA9IHRoaXMuY2hhcnQuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaXRlbS5pZF0ueTIgPSBpdGVtLnRleHRCbG9jay55ICsgaXRlbS50ZXh0QmxvY2suaGVpZ2h0O1xuICAgIH1cbiAgICByb3dIZWlnaHQgPSByb3dIZWlnaHQgKyBjb2x1bW5IZWlnaHQ7XG4gIH1cblxuICAvL3RoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAvL3RoaXMuY3R4LmxpbmVXaWR0aCA9IDI7XG4gIC8vdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBcInJlZFwiO1xuICAvL3RoaXMuY3R4LnJlY3QobGVmdCwgdG9wLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gIC8vdGhpcy5jdHguc3Ryb2tlKCk7XG5cbiAgY29udGFpbmVyLmxheW91dE1hbmFnZXIucmVnaXN0ZXJTcGFjZShwb3NpdGlvbiwgeyB3aWR0aDogdGhpcy53aWR0aCArIDIgKyAyLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0ICsgNSArIDUgfSk7XG5cbiAgdGhpcy5ib3VuZHMgPSB7XG4gICAgeDE6IGxlZnQsIHkxOiB0b3AsIHgyOiBsZWZ0ICsgdGhpcy53aWR0aCwgeTI6IHRvcCArIHRoaXMuaGVpZ2h0XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IExlZ2VuZDtcbiIsIlxuaW1wb3J0IENhbnZhc0pTT2JqZWN0IGZyb20gJy4vY2FudmFzanMnO1xuaW1wb3J0IHtleHRlbmQsIGdldEZvbnRIZWlnaHRJblBpeGVscywgdHJpbVN0cmluZywgZ2V0Rm9udFN0cmluZ30gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmZ1bmN0aW9uIFRleHRCbG9jayhjdHgsIG9wdGlvbnMpIHtcblxuICBUZXh0QmxvY2suYmFzZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIFwiVGV4dEJsb2NrXCIsIG9wdGlvbnMpO1xuXG4gIHRoaXMuY3R4ID0gY3R4O1xuICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTtcbiAgdGhpcy5fd3JhcHBlZFRleHQgPSBudWxsO1xuICB0aGlzLl9saW5lSGVpZ2h0ID0gZ2V0Rm9udEhlaWdodEluUGl4ZWxzKHRoaXMuZm9udEZhbWlseSwgdGhpcy5mb250U2l6ZSwgdGhpcy5mb250V2VpZ2h0KTtcbn1cblxuZXh0ZW5kKFRleHRCbG9jaywgQ2FudmFzSlNPYmplY3QpO1xuXG5UZXh0QmxvY2sucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChwcmVzZXJ2ZUNvbnRleHQpIHtcbiAgaWYgKHByZXNlcnZlQ29udGV4dClcbiAgICB0aGlzLmN0eC5zYXZlKCk7XG5cbiAgdmFyIGZvbnQgPSB0aGlzLmN0eC5mb250O1xuICB0aGlzLmN0eC50ZXh0QmFzZWxpbmUgPSB0aGlzLnRleHRCYXNlbGluZTtcblxuICB2YXIgb2Zmc2V0WSA9IDA7XG5cbiAgaWYgKHRoaXMuX2lzRGlydHkpXG4gICAgdGhpcy5tZWFzdXJlVGV4dCh0aGlzLmN0eCk7XG5cbiAgdGhpcy5jdHgudHJhbnNsYXRlKHRoaXMueCwgdGhpcy55ICsgb2Zmc2V0WSk7XG5cbiAgaWYgKHRoaXMudGV4dEJhc2VsaW5lID09PSBcIm1pZGRsZVwiKSB7XG4gICAgb2Zmc2V0WSA9IC10aGlzLl9saW5lSGVpZ2h0IC8gMjtcbiAgfVxuXG4gIHRoaXMuY3R4LmZvbnQgPSB0aGlzLl9nZXRGb250U3RyaW5nKCk7XG5cbiAgdGhpcy5jdHgucm90YXRlKE1hdGguUEkgLyAxODAgKiB0aGlzLmFuZ2xlKTtcblxuICB2YXIgdGV4dExlZnQgPSAwO1xuICB2YXIgdGV4dFRvcCA9IHRoaXMucGFkZGluZztcbiAgLy92YXIgdGV4dFRvcCA9IHRoaXMucGFkZGluZztcbiAgdmFyIGxpbmUgPSBudWxsO1xuXG4gIGlmICgodGhpcy5ib3JkZXJUaGlja25lc3MgPiAwICYmIHRoaXMuYm9yZGVyQ29sb3IpIHx8IHRoaXMuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgdGhpcy5jdHgucm91bmRSZWN0KDAsIG9mZnNldFksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLmNvcm5lclJhZGl1cywgdGhpcy5ib3JkZXJUaGlja25lc3MsIHRoaXMuYmFja2dyb3VuZENvbG9yLCB0aGlzLmJvcmRlckNvbG9yKTtcblxuICAgIC8vaWYgKHRoaXMudGV4dEJhc2VsaW5lID09PSBcIm1pZGRsZVwiKSB7XG4gICAgLy9cdC8vdGV4dFRvcCArPSB0aGlzLmZvbnRTaXplIC8gMjtcbiAgICAvL1x0dGV4dFRvcCArPSB0aGlzLl9saW5lSGVpZ2h0IC8gMjtcbiAgICAvL31cbiAgfVxuXG4gIHRoaXMuY3R4LmZpbGxTdHlsZSA9IHRoaXMuZm9udENvbG9yO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fd3JhcHBlZFRleHQubGluZXMubGVuZ3RoOyBpKyspIHtcblxuICAgIGxpbmUgPSB0aGlzLl93cmFwcGVkVGV4dC5saW5lc1tpXTtcbiAgICBpZiAodGhpcy5ob3Jpem9udGFsQWxpZ24gPT09IFwicmlnaHRcIilcbiAgICAgIHRleHRMZWZ0ID0gdGhpcy53aWR0aCAtIGxpbmUud2lkdGggLSB0aGlzLnBhZGRpbmc7XG4gICAgZWxzZSBpZiAodGhpcy5ob3Jpem9udGFsQWxpZ24gPT09IFwibGVmdFwiKVxuICAgICAgdGV4dExlZnQgPSB0aGlzLnBhZGRpbmc7XG4gICAgZWxzZSBpZiAodGhpcy5ob3Jpem9udGFsQWxpZ24gPT09IFwiY2VudGVyXCIpXG4gICAgICB0ZXh0TGVmdCA9ICh0aGlzLndpZHRoIC0gdGhpcy5wYWRkaW5nICogMikgLyAyIC0gbGluZS53aWR0aCAvIDIgKyB0aGlzLnBhZGRpbmc7XG5cbiAgICB0aGlzLmN0eC5maWxsVGV4dChsaW5lLnRleHQsIHRleHRMZWZ0LCB0ZXh0VG9wKTtcblxuICAgIHRleHRUb3AgKz0gbGluZS5oZWlnaHQ7XG4gIH1cblxuICB0aGlzLmN0eC5mb250ID0gZm9udDtcblxuICBpZiAocHJlc2VydmVDb250ZXh0KVxuICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbn1cblxuVGV4dEJsb2NrLnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgdGhpcy5faXNEaXJ0eSA9IHRydWU7XG4gIHRoaXMuX3dyYXBwZWRUZXh0ID0gbnVsbDtcbn1cblxuVGV4dEJsb2NrLnByb3RvdHlwZS5tZWFzdXJlVGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMubWF4V2lkdGggPT09IG51bGwpIHtcbiAgICB0aHJvdyAoXCJQbGVhc2Ugc2V0IG1heFdpZHRoIGFuZCBoZWlnaHQgZm9yIFRleHRCbG9ja1wiKTtcbiAgfVxuXG4gIHRoaXMuX3dyYXBUZXh0KHRoaXMuY3R4KTtcbiAgdGhpcy5faXNEaXJ0eSA9IGZhbHNlO1xuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHRoaXMud2lkdGgsIGhlaWdodDogdGhpcy5oZWlnaHRcbiAgfVxufVxuXG5UZXh0QmxvY2sucHJvdG90eXBlLl9nZXRMaW5lV2l0aFdpZHRoID0gZnVuY3Rpb24gKHRleHQsIHdpZHRoLCBjbGlwV29yZCkge1xuICB0ZXh0ID0gU3RyaW5nKHRleHQpO1xuICBjbGlwV29yZCA9IGNsaXBXb3JkIHx8IGZhbHNlO1xuXG4gIGlmICghdGV4dClcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dDogXCJcIiwgd2lkdGg6IDBcbiAgICB9O1xuXG4gIHZhciB0ZXh0V2lkdGggPSAwLFxuICAgIG1pbiA9IDAsXG4gICAgbWF4ID0gdGV4dC5sZW5ndGggLSAxLFxuICAgIG1pZCA9IEluZmluaXR5O1xuXG4gIHRoaXMuY3R4LmZvbnQgPSB0aGlzLl9nZXRGb250U3RyaW5nKCk7XG5cbiAgd2hpbGUgKG1pbiA8PSBtYXgpIHtcbiAgICBtaWQgPSBNYXRoLmZsb29yKChtaW4gKyBtYXgpIC8gMik7XG4gICAgdmFyIHRlbXBUZXh0ID0gdGV4dC5zdWJzdHIoMCwgbWlkICsgMSk7XG5cbiAgICB0ZXh0V2lkdGggPSB0aGlzLmN0eC5tZWFzdXJlVGV4dCh0ZW1wVGV4dCkud2lkdGg7XG5cbiAgICBpZiAodGV4dFdpZHRoIDwgd2lkdGgpIHtcbiAgICAgIG1pbiA9IG1pZCArIDE7XG4gICAgfSBlbHNlIGlmICh0ZXh0V2lkdGggPiB3aWR0aCkge1xuICAgICAgbWF4ID0gbWlkIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy9lZGdlIGNhc2VzXG4gIGlmICh0ZXh0V2lkdGggPiB3aWR0aCAmJiB0ZW1wVGV4dC5sZW5ndGggPiAxKSB7XG4gICAgdGVtcFRleHQgPSB0ZW1wVGV4dC5zdWJzdHIoMCwgdGVtcFRleHQubGVuZ3RoIC0gMSk7XG4gICAgdGV4dFdpZHRoID0gdGhpcy5jdHgubWVhc3VyZVRleHQodGVtcFRleHQpLndpZHRoO1xuICB9XG5cbiAgdmFyIGlzQ2xpcHBlZCA9IHRydWU7XG5cbiAgaWYgKHRlbXBUZXh0Lmxlbmd0aCA9PT0gdGV4dC5sZW5ndGggfHwgdGV4dFt0ZW1wVGV4dC5sZW5ndGhdID09PSBcIiBcIilcbiAgICBpc0NsaXBwZWQgPSBmYWxzZTtcblxuICBpZiAoaXNDbGlwcGVkKSB7XG4gICAgdmFyIHJlc3VsdFdvcmRzID0gdGVtcFRleHQuc3BsaXQoXCIgXCIpO1xuICAgIGlmIChyZXN1bHRXb3Jkcy5sZW5ndGggPiAxKVxuICAgICAgcmVzdWx0V29yZHMucG9wKCk7XG5cbiAgICB0ZW1wVGV4dCA9IHJlc3VsdFdvcmRzLmpvaW4oXCIgXCIpO1xuICAgIHRleHRXaWR0aCA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRlbXBUZXh0KS53aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGV4dDogdGVtcFRleHQsIHdpZHRoOiB0ZXh0V2lkdGhcbiAgfTtcbn1cblxuVGV4dEJsb2NrLnByb3RvdHlwZS5fd3JhcFRleHQgPSBmdW5jdGlvbiB3cmFwVGV4dCgpIHtcbiAgLy90aGlzLmN0eC5zYXZlKCk7XG4gIHZhciB0ZXh0ID0gbmV3IFN0cmluZyh0cmltU3RyaW5nKFN0cmluZyh0aGlzLnRleHQpKSk7XG4gIHZhciBsaW5lcyA9IFtdO1xuICB2YXIgZm9udCA9IHRoaXMuY3R4LmZvbnQ7IC8vIFNhdmUgdGhlIGN1cnJlbnQgRm9udFxuICB2YXIgaGVpZ2h0ID0gMDtcbiAgdmFyIHdpZHRoID0gMDtcblxuICB0aGlzLmN0eC5mb250ID0gdGhpcy5fZ2V0Rm9udFN0cmluZygpO1xuXG4gIHdoaWxlICh0ZXh0Lmxlbmd0aCA+IDApIHtcblxuICAgIHZhciBtYXhXaWR0aCA9IHRoaXMubWF4V2lkdGggLSB0aGlzLnBhZGRpbmcgKiAyO1xuICAgIHZhciBtYXhIZWlnaHQgPSB0aGlzLm1heEhlaWdodCAtIHRoaXMucGFkZGluZyAqIDI7XG5cbiAgICB2YXIgbGluZSA9IHRoaXMuX2dldExpbmVXaXRoV2lkdGgodGV4dCwgbWF4V2lkdGgsIGZhbHNlKTtcbiAgICBsaW5lLmhlaWdodCA9IHRoaXMuX2xpbmVIZWlnaHQ7XG5cbiAgICBsaW5lcy5wdXNoKGxpbmUpO1xuXG4gICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgbGluZS53aWR0aCk7XG4gICAgaGVpZ2h0ICs9IGxpbmUuaGVpZ2h0O1xuICAgIHRleHQgPSB0cmltU3RyaW5nKHRleHQuc2xpY2UobGluZS50ZXh0Lmxlbmd0aCwgdGV4dC5sZW5ndGgpKTtcblxuICAgIGlmIChtYXhIZWlnaHQgJiYgaGVpZ2h0ID4gbWF4SGVpZ2h0KSB7XG4gICAgICB2YXIgbGluZSA9IGxpbmVzLnBvcCgpO1xuICAgICAgaGVpZ2h0IC09IGxpbmUuaGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuX3dyYXBwZWRUZXh0ID0ge1xuICAgIGxpbmVzOiBsaW5lcywgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodFxuICB9O1xuICB0aGlzLndpZHRoID0gd2lkdGggKyB0aGlzLnBhZGRpbmcgKiAyO1xuICB0aGlzLmhlaWdodCA9IGhlaWdodCArIHRoaXMucGFkZGluZyAqIDI7XG5cbiAgdGhpcy5jdHguZm9udCA9IGZvbnQ7IC8vIFJlc3RvcmUgdGhlIGZvbnRcbn1cblxuVGV4dEJsb2NrLnByb3RvdHlwZS5fZ2V0Rm9udFN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgLy9yZXR1cm4gdGhpcy5mb250U3R5bGUgKyBcIiBcIiArIHRoaXMuZm9udFdlaWdodCArIFwiIFwiICsgdGhpcy5mb250U2l6ZSArIFwicHggXCIgKyB0aGlzLmZvbnRGYW1pbHlcbiAgcmV0dXJuIGdldEZvbnRTdHJpbmcoXCJcIiwgdGhpcywgbnVsbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRCbG9jaztcbiIsIlxuaW1wb3J0IENhbnZhc0pTT2JqZWN0IGZyb20gJy4vY2FudmFzanMnO1xuaW1wb3J0IFRleHRCbG9jayBmcm9tICcuL3RleHRfYmxvY2snO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5mdW5jdGlvbiBUaXRsZShjaGFydCwgb3B0aW9ucykge1xuXHRUaXRsZS5iYXNlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgXCJUaXRsZVwiLCBvcHRpb25zLCBjaGFydC50aGVtZSk7XG5cblx0dGhpcy5jaGFydCA9IGNoYXJ0O1xuXHR0aGlzLmNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcblx0dGhpcy5jdHggPSB0aGlzLmNoYXJ0LmN0eDtcblxuXG5cdGlmICh0eXBlb2YgKHRoaXMuX29wdGlvbnMuZm9udFNpemUpID09PSBcInVuZGVmaW5lZFwiKSB7XG5cblx0XHR0aGlzLmZvbnRTaXplID0gdGhpcy5jaGFydC5nZXRBdXRvRm9udFNpemUodGhpcy5mb250U2l6ZSk7XG5cblx0XHQvL3dpbmRvdy5jb25zb2xlLmxvZyhcIkNoYXJ0IFRpdGxlIGZvbnRTaXplOiBcIiArIHRoaXMuZm9udFNpemUpO1xuXHR9XG5cblx0dGhpcy53aWR0aCA9IG51bGwsLy9yZWFkIG9ubHlcblx0dGhpcy5oZWlnaHQgPSBudWxsLy9yZWFkIG9ubHlcblx0dGhpcy5ib3VuZHMgPSB7XG5cdFx0eDE6IG51bGwsIHkxOiBudWxsLCB4MjogbnVsbCwgeTI6IG51bGxcblx0fTtcbn1cblxuZXh0ZW5kKFRpdGxlLCBDYW52YXNKU09iamVjdCk7XG5cblRpdGxlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG5cblx0aWYgKCF0aGlzLnRleHQpIHJldHVybjtcblxuXHR2YXIgY29udGFpbmVyID0gKCF0aGlzLmRvY2tJbnNpZGVQbG90QXJlYSA/IHRoaXMuY2hhcnQgOiB0aGlzLmNoYXJ0LnBsb3RBcmVhKTtcblx0dmFyIGZyZWVzcGFjZSA9IGNvbnRhaW5lci5sYXlvdXRNYW5hZ2VyLmdldEZyZWVTcGFjZSgpO1xuXHR2YXIgbGVmdCA9IGZyZWVzcGFjZS54MTtcblx0dmFyIHRvcCA9IGZyZWVzcGFjZS55MTtcblx0dmFyIGFuZ2xlID0gMDtcblx0dmFyIG1heEhlaWdodCA9IDA7XG5cdHZhciBjb250YWluZXJNYXJnaW4gPSAyOyAvL01hcmdpbiB0b3dhcmRzIHRoZSBjb250YWluZXJcblx0dmFyIHJpZ2h0T2Zmc2V0ID0gdGhpcy5jaGFydC5fbWVudUJ1dHRvbiAmJiB0aGlzLmNoYXJ0LmV4cG9ydEVuYWJsZWQgJiYgdGhpcy52ZXJ0aWNhbEFsaWduID09PSBcInRvcFwiID8gMjIgOiAwOyAvL1NvIHRoYXQgVGl0bGUgZG9lc24ndCBvdmVybGFwIG1lbnUgYnV0dG9uLlxuXG5cdHZhciB0ZXh0QmxvY2tIb3Jpem9udGFsQWxpZ247XG5cdHZhciBwb3NpdGlvbjtcblxuXHRpZiAodGhpcy52ZXJ0aWNhbEFsaWduID09PSBcInRvcFwiIHx8IHRoaXMudmVydGljYWxBbGlnbiA9PT0gXCJib3R0b21cIikge1xuXHRcdGlmICh0aGlzLm1heFdpZHRoID09PSBudWxsKVxuXHRcdFx0dGhpcy5tYXhXaWR0aCA9IGZyZWVzcGFjZS53aWR0aCAtIGNvbnRhaW5lck1hcmdpbiAqIDIgLSByaWdodE9mZnNldCAqICh0aGlzLmhvcml6b250YWxBbGlnbiA9PT0gXCJjZW50ZXJcIiA/IDIgOiAxKTtcblxuXHRcdG1heEhlaWdodCA9IGZyZWVzcGFjZS5oZWlnaHQgKiAuNSAtIHRoaXMubWFyZ2luIC0gY29udGFpbmVyTWFyZ2luO1xuXHRcdGFuZ2xlID0gMDtcblx0fVxuXHRlbHNlIGlmICh0aGlzLnZlcnRpY2FsQWxpZ24gPT09IFwiY2VudGVyXCIpIHtcblxuXHRcdGlmICh0aGlzLmhvcml6b250YWxBbGlnbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5ob3Jpem9udGFsQWxpZ24gPT09IFwicmlnaHRcIikge1xuXHRcdFx0aWYgKHRoaXMubWF4V2lkdGggPT09IG51bGwpXG5cdFx0XHRcdHRoaXMubWF4V2lkdGggPSBmcmVlc3BhY2UuaGVpZ2h0IC0gY29udGFpbmVyTWFyZ2luICogMjtcblxuXHRcdFx0bWF4SGVpZ2h0ID0gZnJlZXNwYWNlLndpZHRoICogLjUgLSB0aGlzLm1hcmdpbiAtIGNvbnRhaW5lck1hcmdpbjtcblx0XHR9IGVsc2UgaWYgKHRoaXMuaG9yaXpvbnRhbEFsaWduID09PSBcImNlbnRlclwiKSB7XG5cdFx0XHRpZiAodGhpcy5tYXhXaWR0aCA9PT0gbnVsbClcblx0XHRcdFx0dGhpcy5tYXhXaWR0aCA9IGZyZWVzcGFjZS53aWR0aCAtIGNvbnRhaW5lck1hcmdpbiAqIDI7XG5cblx0XHRcdG1heEhlaWdodCA9IGZyZWVzcGFjZS5oZWlnaHQgKiAuNSAtIGNvbnRhaW5lck1hcmdpbiAqIDI7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCF0aGlzLndyYXApXG5cdFx0bWF4SGVpZ2h0ID0gTWF0aC5taW4obWF4SGVpZ2h0LCBNYXRoLm1heCh0aGlzLmZvbnRTaXplICogMS41LCB0aGlzLmZvbnRTaXplICsgdGhpcy5wYWRkaW5nICogMi41KSk7XG5cdC8vY29uc29sZS5sb2codGhpcy5tYXhXaWR0aCk7XG5cblx0dmFyIHRleHRCbG9jayA9IG5ldyBUZXh0QmxvY2sodGhpcy5jdHgsIHtcblx0XHRmb250U2l6ZTogdGhpcy5mb250U2l6ZSwgZm9udEZhbWlseTogdGhpcy5mb250RmFtaWx5LCBmb250Q29sb3I6IHRoaXMuZm9udENvbG9yLFxuXHRcdGZvbnRTdHlsZTogdGhpcy5mb250U3R5bGUsIGZvbnRXZWlnaHQ6IHRoaXMuZm9udFdlaWdodCxcblx0XHRob3Jpem9udGFsQWxpZ246IHRoaXMuaG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWduOiB0aGlzLnZlcnRpY2FsQWxpZ24sXG5cdFx0Ym9yZGVyQ29sb3I6IHRoaXMuYm9yZGVyQ29sb3IsIGJvcmRlclRoaWNrbmVzczogdGhpcy5ib3JkZXJUaGlja25lc3MsXG5cdFx0YmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmRDb2xvcixcblx0XHRtYXhXaWR0aDogdGhpcy5tYXhXaWR0aCwgbWF4SGVpZ2h0OiBtYXhIZWlnaHQsXG5cdFx0Y29ybmVyUmFkaXVzOiB0aGlzLmNvcm5lclJhZGl1cyxcblx0XHR0ZXh0OiB0aGlzLnRleHQsXG5cdFx0cGFkZGluZzogdGhpcy5wYWRkaW5nLFxuXHRcdHRleHRCYXNlbGluZTogXCJ0b3BcIlxuXHR9KTtcblxuXHR2YXIgdGV4dEJsb2NrU2l6ZSA9IHRleHRCbG9jay5tZWFzdXJlVGV4dCgpO1xuXG5cdGlmICh0aGlzLnZlcnRpY2FsQWxpZ24gPT09IFwidG9wXCIgfHwgdGhpcy52ZXJ0aWNhbEFsaWduID09PSBcImJvdHRvbVwiKSB7XG5cblx0XHRpZiAodGhpcy52ZXJ0aWNhbEFsaWduID09PSBcInRvcFwiKSB7XG5cdFx0XHR0b3AgPSBmcmVlc3BhY2UueTEgKyBjb250YWluZXJNYXJnaW47XG5cdFx0XHRwb3NpdGlvbiA9IFwidG9wXCI7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHRoaXMudmVydGljYWxBbGlnbiA9PT0gXCJib3R0b21cIikge1xuXHRcdFx0dG9wID0gZnJlZXNwYWNlLnkyIC0gY29udGFpbmVyTWFyZ2luIC0gdGV4dEJsb2NrU2l6ZS5oZWlnaHQ7XG5cdFx0XHRwb3NpdGlvbiA9IFwiYm90dG9tXCI7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaG9yaXpvbnRhbEFsaWduID09PSBcImxlZnRcIikge1xuXHRcdFx0bGVmdCA9IGZyZWVzcGFjZS54MSArIGNvbnRhaW5lck1hcmdpbjtcblx0XHR9XG5cdFx0ZWxzZSBpZiAodGhpcy5ob3Jpem9udGFsQWxpZ24gPT09IFwiY2VudGVyXCIpIHtcblx0XHRcdGxlZnQgPSBmcmVlc3BhY2UueDEgKyBmcmVlc3BhY2Uud2lkdGggLyAyIC0gdGV4dEJsb2NrU2l6ZS53aWR0aCAvIDI7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHRoaXMuaG9yaXpvbnRhbEFsaWduID09PSBcInJpZ2h0XCIpIHtcblx0XHRcdGxlZnQgPSBmcmVlc3BhY2UueDIgLSBjb250YWluZXJNYXJnaW4gLSB0ZXh0QmxvY2tTaXplLndpZHRoIC0gcmlnaHRPZmZzZXQ7XG5cdFx0fVxuXG5cdFx0dGV4dEJsb2NrSG9yaXpvbnRhbEFsaWduID0gdGhpcy5ob3Jpem9udGFsQWxpZ247XG5cblx0XHR0aGlzLndpZHRoID0gdGV4dEJsb2NrU2l6ZS53aWR0aDtcblx0XHR0aGlzLmhlaWdodCA9IHRleHRCbG9ja1NpemUuaGVpZ2h0O1xuXHR9XG5cdGVsc2UgaWYgKHRoaXMudmVydGljYWxBbGlnbiA9PT0gXCJjZW50ZXJcIikge1xuXG5cdFx0aWYgKHRoaXMuaG9yaXpvbnRhbEFsaWduID09PSBcImxlZnRcIikge1xuXG5cdFx0XHRsZWZ0ID0gZnJlZXNwYWNlLngxICsgY29udGFpbmVyTWFyZ2luO1xuXHRcdFx0dG9wID0gZnJlZXNwYWNlLnkyIC0gY29udGFpbmVyTWFyZ2luIC0gKHRoaXMubWF4V2lkdGggLyAyIC0gdGV4dEJsb2NrU2l6ZS53aWR0aCAvIDIpO1xuXHRcdFx0YW5nbGUgPSAtOTA7XG5cblx0XHRcdHBvc2l0aW9uID0gXCJsZWZ0XCI7XG5cdFx0XHR0aGlzLndpZHRoID0gdGV4dEJsb2NrU2l6ZS5oZWlnaHQ7XG5cdFx0XHR0aGlzLmhlaWdodCA9IHRleHRCbG9ja1NpemUud2lkdGg7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHRoaXMuaG9yaXpvbnRhbEFsaWduID09PSBcInJpZ2h0XCIpIHtcblx0XHRcdGxlZnQgPSBmcmVlc3BhY2UueDIgLSBjb250YWluZXJNYXJnaW47XG5cdFx0XHR0b3AgPSBmcmVlc3BhY2UueTEgKyBjb250YWluZXJNYXJnaW4gKyAodGhpcy5tYXhXaWR0aCAvIDIgLSB0ZXh0QmxvY2tTaXplLndpZHRoIC8gMik7XG5cdFx0XHRhbmdsZSA9IDkwO1xuXG5cdFx0XHRwb3NpdGlvbiA9IFwicmlnaHRcIjtcblx0XHRcdHRoaXMud2lkdGggPSB0ZXh0QmxvY2tTaXplLmhlaWdodDtcblx0XHRcdHRoaXMuaGVpZ2h0ID0gdGV4dEJsb2NrU2l6ZS53aWR0aDtcblx0XHR9XG5cdFx0ZWxzZSBpZiAodGhpcy5ob3Jpem9udGFsQWxpZ24gPT09IFwiY2VudGVyXCIpIHtcblx0XHRcdHRvcCA9IGNvbnRhaW5lci55MSArIChjb250YWluZXIuaGVpZ2h0IC8gMiAtIHRleHRCbG9ja1NpemUuaGVpZ2h0IC8gMik7XG5cdFx0XHRsZWZ0ID0gY29udGFpbmVyLngxICsgKGNvbnRhaW5lci53aWR0aCAvIDIgLSB0ZXh0QmxvY2tTaXplLndpZHRoIC8gMik7XG5cblx0XHRcdHBvc2l0aW9uID0gXCJjZW50ZXJcIjtcblx0XHRcdHRoaXMud2lkdGggPSB0ZXh0QmxvY2tTaXplLndpZHRoO1xuXHRcdFx0dGhpcy5oZWlnaHQgPSB0ZXh0QmxvY2tTaXplLmhlaWdodDtcblx0XHR9XG5cblx0XHR0ZXh0QmxvY2tIb3Jpem9udGFsQWxpZ24gPSBcImNlbnRlclwiO1xuXHR9XG5cblx0dGV4dEJsb2NrLnggPSBsZWZ0O1xuXHR0ZXh0QmxvY2sueSA9IHRvcDtcblx0dGV4dEJsb2NrLmFuZ2xlID0gYW5nbGU7XG5cdHRleHRCbG9jay5ob3Jpem9udGFsQWxpZ24gPSB0ZXh0QmxvY2tIb3Jpem9udGFsQWxpZ247XG5cdHRleHRCbG9jay5yZW5kZXIodHJ1ZSk7XG5cblx0Y29udGFpbmVyLmxheW91dE1hbmFnZXIucmVnaXN0ZXJTcGFjZShwb3NpdGlvbiwge1xuXHRcdHdpZHRoOiB0aGlzLndpZHRoICsgKHBvc2l0aW9uID09PSBcImxlZnRcIiB8fCBwb3NpdGlvbiA9PT0gXCJyaWdodFwiID8gdGhpcy5tYXJnaW4gKyBjb250YWluZXJNYXJnaW4gOiAwKSxcblx0XHRoZWlnaHQ6IHRoaXMuaGVpZ2h0ICsgKHBvc2l0aW9uID09PSBcInRvcFwiIHx8IHBvc2l0aW9uID09PSBcImJvdHRvbVwiID8gdGhpcy5tYXJnaW4gKyBjb250YWluZXJNYXJnaW4gOiAwKVxuXHR9KTtcblxuXHR0aGlzLmJvdW5kcyA9IHtcblx0XHR4MTogbGVmdCwgeTE6IHRvcCwgeDI6IGxlZnQgKyB0aGlzLndpZHRoLCB5MjogdG9wICsgdGhpcy5oZWlnaHRcblx0fTtcblxuXHR0aGlzLmN0eC50ZXh0QmFzZWxpbmUgPSBcInRvcFwiO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUaXRsZTtcbiIsIlxuaW1wb3J0IEFuaW1hdGlvbkhlbHBlciBmcm9tICcuLi9oZWxwZXJzL2FuaW1hdG9yJztcbmltcG9ydCBSZW5kZXJIZWxwZXIgZnJvbSAnLi4vaGVscGVycy9yZW5kZXInO1xuaW1wb3J0IENhbnZhc0pTT2JqZWN0IGZyb20gJy4vY2FudmFzanMnO1xuaW1wb3J0IHtleHRlbmQsIGlzQ2FudmFzU3VwcG9ydGVkLCBnZXRPYmplY3RJZCwgZHJhd1JlY3QsIGRyYXdTZWdtZW50fSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZnVuY3Rpb24gVG9vbFRpcChjaGFydCwgb3B0aW9ucywgdGhlbWUpIHtcblxuICBUb29sVGlwLmJhc2UuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBcIlRvb2xUaXBcIiwgb3B0aW9ucywgdGhlbWUpO1xuXG4gIHRoaXMuY2hhcnQgPSBjaGFydDtcbiAgdGhpcy5jYW52YXMgPSBjaGFydC5jYW52YXM7XG4gIHRoaXMuY3R4ID0gdGhpcy5jaGFydC5jdHg7XG4gIHRoaXMuY3VycmVudFNlcmllc0luZGV4ID0gLTE7XG4gIHRoaXMuY3VycmVudERhdGFQb2ludEluZGV4ID0gLTE7XG4gIHRoaXMuX3RpbWVySWQgPSAwO1xuICB0aGlzLl9wcmV2WCA9IE5hTjtcbiAgdGhpcy5fcHJldlkgPSBOYU47XG5cbiAgdGhpcy5faW5pdGlhbGl6ZSgpO1xufVxuXG5leHRlbmQoVG9vbFRpcCwgQ2FudmFzSlNPYmplY3QpO1xuXG5Ub29sVGlwLnByb3RvdHlwZS5faW5pdGlhbGl6ZSA9IGZ1bmN0aW9uICgpIHtcblxuICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwiY2FudmFzanMtY2hhcnQtdG9vbHRpcFwiKTtcbiAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBcImF1dG9cIjtcbiAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5ib3hTaGFkb3cgPSBcIjFweCAxcHggMnB4IDJweCByZ2JhKDAsMCwwLDAuMSlcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS56SW5kZXggPSBcIjEwMDBcIjtcbiAgICAvL3RoaXMuY29udGFpbmVyLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgLy90aGlzLmNvbnRhaW5lci5zdHlsZS53aGl0ZVNwYWNlID0gXCJuby13cmFwXCI7XG5cbiAgICB2YXIgdG9vbFRpcEh0bWwgPSBcIjxkaXYgc3R5bGU9XFxcIiB3aWR0aDogYXV0bztcIjtcbiAgICB0b29sVGlwSHRtbCArPSBcImhlaWdodDogYXV0bztcIjtcbiAgICB0b29sVGlwSHRtbCArPSBcIm1pbi13aWR0aDogNTBweDtcIjtcbiAgICB0b29sVGlwSHRtbCArPSBcImxpbmUtaGVpZ2h0OiBhdXRvO1wiO1xuICAgIHRvb2xUaXBIdG1sICs9IFwibWFyZ2luOiAwcHggMHB4IDBweCAwcHg7XCI7XG4gICAgdG9vbFRpcEh0bWwgKz0gXCJwYWRkaW5nOiA1cHg7XCI7XG4gICAgdG9vbFRpcEh0bWwgKz0gXCJmb250LWZhbWlseTogQ2FsaWJyaSwgQXJpYWwsIEdlb3JnaWEsIHNlcmlmO1wiO1xuICAgIHRvb2xUaXBIdG1sICs9IFwiZm9udC13ZWlnaHQ6IG5vcm1hbDtcIjtcbiAgICB0b29sVGlwSHRtbCArPSBcImZvbnQtc3R5bGU6IFwiICsgKGlzQ2FudmFzU3VwcG9ydGVkID8gXCJpdGFsaWM7XCIgOiBcIm5vcm1hbDtcIik7XG4gICAgdG9vbFRpcEh0bWwgKz0gXCJmb250LXNpemU6IDE0cHg7XCI7XG4gICAgdG9vbFRpcEh0bWwgKz0gXCJjb2xvcjogIzAwMDAwMDtcIjtcbiAgICB0b29sVGlwSHRtbCArPSBcInRleHQtc2hhZG93OiAxcHggMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMSk7XCI7XG4gICAgdG9vbFRpcEh0bWwgKz0gXCJ0ZXh0LWFsaWduOiBsZWZ0O1wiO1xuICAgIHRvb2xUaXBIdG1sICs9IFwiYm9yZGVyOiAycHggc29saWQgZ3JheTtcIjtcblxuICAgIC8vT2xkZXIgYnJvd3NlcnMgbGlrZSBJRTgtIGRvbid0IHN1cHBvcnQgYWxwaGEgdmFsdWVzXG4gICAgdG9vbFRpcEh0bWwgKz0gaXNDYW52YXNTdXBwb3J0ZWQgPyBcImJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsLjkpO1wiIDogXCJiYWNrZ3JvdW5kOiByZ2IoMjU1LDI1NSwyNTUpO1wiO1xuXG4gICAgdG9vbFRpcEh0bWwgKz0gXCJ0ZXh0LWluZGVudDogMHB4O1wiO1xuICAgIHRvb2xUaXBIdG1sICs9IFwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIjtcbiAgICAvL3Rvb2xUaXBIdG1sICs9IFwicG9pbnRlci1ldmVudHM6bm9uZTtcIjtcbiAgICB0b29sVGlwSHRtbCArPSBcImJvcmRlci1yYWRpdXM6IDVweDtcIjtcblxuICAgIC8vRGlzYWJsZSBUZXh0IFNlbGVjdGlvblxuICAgIHRvb2xUaXBIdG1sICs9IFwiLW1vei11c2VyLXNlbGVjdDpub25lO1wiO1xuICAgIHRvb2xUaXBIdG1sICs9IFwiLWtodG1sLXVzZXItc2VsZWN0OiBub25lO1wiO1xuICAgIHRvb2xUaXBIdG1sICs9IFwiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcIjtcbiAgICB0b29sVGlwSHRtbCArPSBcIi1tcy11c2VyLXNlbGVjdDogbm9uZTtcIjtcbiAgICB0b29sVGlwSHRtbCArPSBcInVzZXItc2VsZWN0OiBub25lO1wiO1xuXG4gICAgLy90b29sVGlwSHRtbCArPSBcIm9wYWNpdHk6IDA7XCI7XG4gICAgLy90b29sVGlwSHRtbCArPSBcImZpbHRlcjogcHJvZ2lkOiBEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChHcmFkaWVudFR5cGUgPSAwLCBzdGFydENvbG9yc3RyID0gJyM0Y2ZmZmZmZicsIGVuZENvbG9yc3RyID0gJyM0Y2ZmZmZmZicpO1wiO1xuXG4gICAgaWYgKCFpc0NhbnZhc1N1cHBvcnRlZCkge1xuICAgICAgLy90b29sVGlwSHRtbCArPSBcIi1tcy1maWx0ZXI6J3Byb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PTkwKSdcIjtcbiAgICAgIC8vLW1zLWZpbHRlcjogXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuU2hhZG93KFN0cmVuZ3RoPTQsIERpcmVjdGlvbj0xMzUsIENvbG9yPScjMDAwMDAwJylcIjtcbiAgICAgIC8qIEZvciBJRSA1LjUgLSA3ICovXG4gICAgICB0b29sVGlwSHRtbCArPSBcImZpbHRlcjogYWxwaGEob3BhY2l0eSA9IDkwKTtcIjtcbiAgICAgIHRvb2xUaXBIdG1sICs9IFwiZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuU2hhZG93KFN0cmVuZ3RoPTMsIERpcmVjdGlvbj0xMzUsIENvbG9yPScjNjY2NjY2Jyk7XCI7XG4gICAgfVxuXG4gICAgdG9vbFRpcEh0bWwgKz0gXCJ9IFxcXCI+IFNhbXBsZSBUb29sdGlwPC9kaXY+XCI7XG5cbiAgICB0aGlzLmNvbnRhaW5lci5pbm5lckhUTUwgPSB0b29sVGlwSHRtbDtcbiAgICB0aGlzLmNvbnRlbnREaXYgPSB0aGlzLmNvbnRhaW5lci5maXJzdENoaWxkO1xuXG5cbiAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5ib3JkZXJSYWRpdXMgPSB0aGlzLmNvbnRlbnREaXYuc3R5bGUuYm9yZGVyUmFkaXVzO1xuICAgIHRoaXMuY2hhcnQuX2NhbnZhc0pTQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtcbiAgfVxufVxuXG5Ub29sVGlwLnByb3RvdHlwZS5tb3VzZU1vdmVIYW5kbGVyID0gZnVuY3Rpb24gKHgsIHkpIHtcblxuICBpZiAoISh0aGlzLl9sYXN0VXBkYXRlZCAmJiAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSB0aGlzLl9sYXN0VXBkYXRlZCkgPCA0MCkpIHtcbiAgICB0aGlzLl9sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIHRoaXMuX3VwZGF0ZVRvb2xUaXAoeCwgeSk7XG4gIH1cbn1cblxuVG9vbFRpcC5wcm90b3R5cGUuX3VwZGF0ZVRvb2xUaXAgPSBmdW5jdGlvbiAobW91c2VYLCBtb3VzZVkpIHtcbiAgLy9yZXR1cm47XG5cbiAgaWYgKHRoaXMuY2hhcnQuZGlzYWJsZVRvb2xUaXApIC8vIERpc2FibGVkIGR1cmluZyBhbmltYXRpb24sIGV0Y1xuICAgIHJldHVybjtcblxuICBpZiAodHlwZW9mIChtb3VzZVgpID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiAobW91c2VZKSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGlmIChpc05hTih0aGlzLl9wcmV2WCkgfHwgaXNOYU4odGhpcy5fcHJldlkpKVxuICAgICAgcmV0dXJuO1xuICAgIGVsc2Uge1xuICAgICAgbW91c2VYID0gdGhpcy5fcHJldlg7XG4gICAgICBtb3VzZVkgPSB0aGlzLl9wcmV2WTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fcHJldlggPSBtb3VzZVg7XG4gICAgdGhpcy5fcHJldlkgPSBtb3VzZVk7XG4gIH1cblxuXG4gIHZhciBkYXRhUG9pbnQgPSBudWxsO1xuICB2YXIgZGF0YVNlcmllcyA9IG51bGw7XG4gIHZhciB0b29sVGlwQ29udGVudCA9IFwiXCI7XG4gIHZhciBlbnRyaWVzID0gW107XG4gIHZhciB0b29sVGlwUmlnaHQ7XG4gIHZhciB0b29sVGlwQm90dG9tO1xuICB2YXIgeCA9IDA7XG5cbiAgaWYgKHRoaXMuc2hhcmVkICYmIHRoaXMuZW5hYmxlZCAmJiB0aGlzLmNoYXJ0LnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgIT09IFwibm9uZVwiKSB7XG4gICAgLy8gJiYgdGhpcy5jaGFydC5wbG90SW5mby5heGlzUGxhY2VtZW50ICE9PSBcIm5vbmVcIlxuICAgIGlmICh0aGlzLmNoYXJ0LnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwieHlTd2FwcGVkXCIpIHtcbiAgICAgIHggPSAodGhpcy5jaGFydC5heGlzWC52aWV3cG9ydE1heGltdW0gLSB0aGlzLmNoYXJ0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkgLyB0aGlzLmNoYXJ0LmF4aXNYLmxpbmVDb29yZGluYXRlcy5oZWlnaHQgKiAoKHRoaXMuY2hhcnQuYXhpc1gubGluZUNvb3JkaW5hdGVzLnkyIC0gbW91c2VZKSkgKyB0aGlzLmNoYXJ0LmF4aXNYLnZpZXdwb3J0TWluaW11bTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB4ID0gKHRoaXMuY2hhcnQuYXhpc1gudmlld3BvcnRNYXhpbXVtIC0gdGhpcy5jaGFydC5heGlzWC52aWV3cG9ydE1pbmltdW0pIC8gdGhpcy5jaGFydC5heGlzWC5saW5lQ29vcmRpbmF0ZXMud2lkdGggKiAobW91c2VYIC0gdGhpcy5jaGFydC5heGlzWC5saW5lQ29vcmRpbmF0ZXMueDEpICsgdGhpcy5jaGFydC5heGlzWC52aWV3cG9ydE1pbmltdW07XG4gICAgfVxuXG4gICAgdmFyIG5lYXJieUVudHJpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGFydC5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZW50cnkgPSB0aGlzLmNoYXJ0LmRhdGFbaV0uZ2V0RGF0YVBvaW50QXRYKHgsIHRydWUpO1xuXG4gICAgICBpZiAoZW50cnkgJiYgZW50cnkuaW5kZXggPj0gMCkge1xuICAgICAgICBlbnRyeS5kYXRhU2VyaWVzID0gdGhpcy5jaGFydC5kYXRhW2ldO1xuXG4gICAgICAgIGlmIChlbnRyeS5kYXRhUG9pbnQueSAhPT0gbnVsbClcbiAgICAgICAgICBuZWFyYnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWFyYnlFbnRyaWVzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybjtcblxuICAgIG5lYXJieUVudHJpZXMuc29ydChmdW5jdGlvbiAoZW50cnkxLCBlbnRyeTIpIHtcbiAgICAgIHJldHVybiBlbnRyeTEuZGlzdGFuY2UgLSBlbnRyeTIuZGlzdGFuY2U7XG4gICAgfSk7XG5cbiAgICB2YXIgY2xvc2VzdCA9IG5lYXJieUVudHJpZXNbMF07XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbmVhcmJ5RW50cmllcy5sZW5ndGg7IGkrKykge1xuXG4gICAgICBpZiAobmVhcmJ5RW50cmllc1tpXS5kYXRhUG9pbnQueC52YWx1ZU9mKCkgPT09IGNsb3Nlc3QuZGF0YVBvaW50LngudmFsdWVPZigpKVxuICAgICAgICBlbnRyaWVzLnB1c2gobmVhcmJ5RW50cmllc1tpXSk7XG4gICAgfVxuXG4gICAgbmVhcmJ5RW50cmllcyA9IG51bGw7XG5cbiAgfSBlbHNlIHtcblxuICAgIHZhciBkYXRhUG9pbnRJbmZvID0gdGhpcy5jaGFydC5nZXREYXRhUG9pbnRBdFhZKG1vdXNlWCwgbW91c2VZLCB0cnVlKTtcbiAgICAvL2RhdGFQb2ludEluZm8gPSBudWxsO1xuXG4gICAgaWYgKGRhdGFQb2ludEluZm8pIHtcbiAgICAgIHRoaXMuY3VycmVudERhdGFQb2ludEluZGV4ID0gZGF0YVBvaW50SW5mby5kYXRhUG9pbnRJbmRleDtcbiAgICAgIHRoaXMuY3VycmVudFNlcmllc0luZGV4ID0gZGF0YVBvaW50SW5mby5kYXRhU2VyaWVzLmluZGV4O1xuICAgIH0gZWxzZSBpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblxuICAgICAgdmFyIGlkID0gZ2V0T2JqZWN0SWQobW91c2VYLCBtb3VzZVksIHRoaXMuY2hhcnQuX2V2ZW50TWFuYWdlci5naG9zdEN0eCk7XG4gICAgICBpZiAoaWQgPiAwICYmIHR5cGVvZiB0aGlzLmNoYXJ0Ll9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSAhPT0gXCJ1bmRlZmluZWRcIikgey8vRGF0YVBvaW50L0RhdGFTZXJpZXMgZXZlbnRcbiAgICAgICAgdmFyIGV2ZW50T2JqZWN0ID0gdGhpcy5jaGFydC5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF07XG5cbiAgICAgICAgaWYgKGV2ZW50T2JqZWN0Lm9iamVjdFR5cGUgPT09IFwibGVnZW5kSXRlbVwiKVxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAvL2lmICh0aGlzLmN1cnJlbnRTZXJpZXNJbmRleCA9PT0gZXZlbnRPYmplY3QuZGF0YVNlcmllc0luZGV4ICYmIHRoaXMuY3VycmVudERhdGFQb2ludEluZGV4ID09PSBldmVudE9iamVjdC5kYXRhUG9pbnRJbmRleClcbiAgICAgICAgLy8gIHJldHVybjtcbiAgICAgICAgLy9lbHNlIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U2VyaWVzSW5kZXggPSBldmVudE9iamVjdC5kYXRhU2VyaWVzSW5kZXg7XG4gICAgICAgIHRoaXMuY3VycmVudERhdGFQb2ludEluZGV4ID0gZXZlbnRPYmplY3QuZGF0YVBvaW50SW5kZXggPj0gMCA/IGV2ZW50T2JqZWN0LmRhdGFQb2ludEluZGV4IDogLTE7XG4gICAgICAgIC8vfVxuXG4gICAgICAgIC8vd2luZG93LmNvbnNvbGUubG9nKFwiaWQ6IFwiICsgaWQgKyBcIjsgaGV4OiBcIiArIGludFRvSGV4Q29sb3JTdHJpbmcoaWQpKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICB0aGlzLmN1cnJlbnREYXRhUG9pbnRJbmRleCA9IC0xO1xuXG4gICAgfSBlbHNlXG4gICAgICB0aGlzLmN1cnJlbnREYXRhUG9pbnRJbmRleCA9IC0xO1xuXG5cbiAgICBpZiAodGhpcy5jdXJyZW50U2VyaWVzSW5kZXggPj0gMCkge1xuXG4gICAgICBkYXRhU2VyaWVzID0gdGhpcy5jaGFydC5kYXRhW3RoaXMuY3VycmVudFNlcmllc0luZGV4XTtcblxuICAgICAgdmFyIGVudHJ5ID0ge1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuY3VycmVudERhdGFQb2ludEluZGV4ID49IDApIHtcbiAgICAgICAgZGF0YVBvaW50ID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW3RoaXMuY3VycmVudERhdGFQb2ludEluZGV4XTtcblxuICAgICAgICBlbnRyeS5kYXRhU2VyaWVzID0gZGF0YVNlcmllcztcbiAgICAgICAgZW50cnkuZGF0YVBvaW50ID0gZGF0YVBvaW50O1xuICAgICAgICBlbnRyeS5pbmRleCA9IHRoaXMuY3VycmVudERhdGFQb2ludEluZGV4O1xuICAgICAgICBlbnRyeS5kaXN0YW5jZSA9IE1hdGguYWJzKGRhdGFQb2ludC54IC0geCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZW5hYmxlZCAmJiAoZGF0YVNlcmllcy50eXBlID09PSBcImxpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RlcExpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3BsaW5lXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcImFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RlcEFyZWFcIlxuICAgICAgICAgIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzcGxpbmVBcmVhXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRBcmVhXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRBcmVhMTAwXCJcbiAgICAgICAgICB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwicmFuZ2VBcmVhXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInJhbmdlU3BsaW5lQXJlYVwiXG4gICAgICAgICAgfHwgZGF0YVNlcmllcy50eXBlID09PSBcImNhbmRsZXN0aWNrXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcIm9obGNcIikpIHtcblxuICAgICAgICAvL3ZhciB4ID0gKHRoaXMuY2hhcnQuYXhpc1gudmlld3BvcnRNYXhpbXVtIC0gdGhpcy5jaGFydC5heGlzWC52aWV3cG9ydE1pbmltdW0pIC8gdGhpcy5jaGFydC5heGlzWC5saW5lQ29vcmRpbmF0ZXMud2lkdGggKiAobW91c2VYIC0gdGhpcy5jaGFydC5heGlzWC5saW5lQ29vcmRpbmF0ZXMueDEpICsgdGhpcy5jaGFydC5heGlzWC52aWV3cG9ydE1pbmltdW0udmFsdWVPZigpO1xuICAgICAgICB2YXIgeCA9IGRhdGFTZXJpZXMuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSArIChtb3VzZVggLSBkYXRhU2VyaWVzLmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSkgLyBkYXRhU2VyaWVzLmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdDtcblxuXG4gICAgICAgIGVudHJ5ID0gZGF0YVNlcmllcy5nZXREYXRhUG9pbnRBdFgoeCwgdHJ1ZSk7XG4gICAgICAgIGVudHJ5LmRhdGFTZXJpZXMgPSBkYXRhU2VyaWVzO1xuICAgICAgICB0aGlzLmN1cnJlbnREYXRhUG9pbnRJbmRleCA9IGVudHJ5LmluZGV4O1xuICAgICAgICBkYXRhUG9pbnQgPSBlbnRyeS5kYXRhUG9pbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvL3RoaXMuaGlkZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChlbnRyeS5kYXRhUG9pbnQueSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoZW50cnkuZGF0YVNlcmllcy5heGlzWSkge1xuICAgICAgICAgIGlmIChlbnRyeS5kYXRhUG9pbnQueS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgdW5ib3VuZFRvVmlld3BvcnQgPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyeS5kYXRhUG9pbnQueS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgaWYgKGVudHJ5LmRhdGFQb2ludC55W2ldIDwgZW50cnkuZGF0YVNlcmllcy5heGlzWS52aWV3cG9ydE1pbmltdW0pXG4gICAgICAgICAgICAgICAgdW5ib3VuZFRvVmlld3BvcnQtLTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAoZW50cnkuZGF0YVBvaW50LnlbaV0gPiBlbnRyeS5kYXRhU2VyaWVzLmF4aXNZLnZpZXdwb3J0TWF4aW11bSlcbiAgICAgICAgICAgICAgICB1bmJvdW5kVG9WaWV3cG9ydCsrO1xuICAgICAgICAgICAgaWYgKHVuYm91bmRUb1ZpZXdwb3J0IDwgZW50cnkuZGF0YVBvaW50LnkubGVuZ3RoICYmIHVuYm91bmRUb1ZpZXdwb3J0ID4gLWVudHJ5LmRhdGFQb2ludC55Lmxlbmd0aClcbiAgICAgICAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGVudHJ5LmRhdGFQb2ludC55ID49IGVudHJ5LmRhdGFTZXJpZXMuYXhpc1kudmlld3BvcnRNaW5pbXVtICYmIGVudHJ5LmRhdGFQb2ludC55IDw9IGVudHJ5LmRhdGFTZXJpZXMuYXhpc1kudmlld3BvcnRNYXhpbXVtKVxuICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlXG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgfVxuICB9XG5cblxuICBpZiAoZW50cmllcy5sZW5ndGggPiAwKSB7XG5cbiAgICB0aGlzLmhpZ2hsaWdodE9iamVjdHMoZW50cmllcyk7XG5cbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG5cbiAgICAgIHZhciB0b29sVGlwSW5uZXJIdG1sID0gXCJcIjtcblxuICAgICAgdG9vbFRpcElubmVySHRtbCA9IHRoaXMuZ2V0VG9vbFRpcElubmVySFRNTCh7IGVudHJpZXM6IGVudHJpZXMgfSk7XG5cbiAgICAgIGlmICh0b29sVGlwSW5uZXJIdG1sICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29udGVudERpdi5pbm5lckhUTUwgPSB0b29sVGlwSW5uZXJIdG1sO1xuXG4gICAgICAgIHRoaXMuY29udGVudERpdi5pbm5lckhUTUwgPSB0b29sVGlwSW5uZXJIdG1sO1xuXG4gICAgICAgIHZhciBwcmV2aW91c2x5SGlkZGVuID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgICAgIHByZXZpb3VzbHlIaWRkZW4gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuY29udGVudERpdi5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPyB0aGlzLmJhY2tncm91bmRDb2xvciA6IGlzQ2FudmFzU3VwcG9ydGVkID8gXCJyZ2JhKDI1NSwyNTUsMjU1LC45KVwiIDogXCJyZ2IoMjU1LDI1NSwyNTUpXCI7XG5cbiAgICAgICAgICB0aGlzLmNvbnRlbnREaXYuc3R5bGUuYm9yZGVyUmlnaHRDb2xvciA9IHRoaXMuY29udGVudERpdi5zdHlsZS5ib3JkZXJMZWZ0Q29sb3IgPSB0aGlzLmNvbnRlbnREaXYuc3R5bGUuYm9yZGVyQ29sb3IgPSB0aGlzLmJvcmRlckNvbG9yID8gdGhpcy5ib3JkZXJDb2xvciA6IGVudHJpZXNbMF0uZGF0YVBvaW50LmNvbG9yID8gZW50cmllc1swXS5kYXRhUG9pbnQuY29sb3IgOiBlbnRyaWVzWzBdLmRhdGFTZXJpZXMuY29sb3IgPyBlbnRyaWVzWzBdLmRhdGFTZXJpZXMuY29sb3IgOiBlbnRyaWVzWzBdLmRhdGFTZXJpZXMuX2NvbG9yU2V0W2VudHJpZXNbMF0uaW5kZXggJSBlbnRyaWVzWzBdLmRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cbiAgICAgICAgICB0aGlzLmNvbnRlbnREaXYuc3R5bGUuYm9yZGVyV2lkdGggPSAodGhpcy5ib3JkZXJUaGlja25lc3MgfHwgdGhpcy5ib3JkZXJUaGlja25lc3MgPT09IDApID8gdGhpcy5ib3JkZXJUaGlja25lc3MgKyBcInB4XCIgOiAyICsgXCJweFwiO1xuXG4gICAgICAgICAgdGhpcy5jb250ZW50RGl2LnN0eWxlLmJvcmRlclJhZGl1cyA9ICh0aGlzLmNvcm5lclJhZGl1cyB8fCB0aGlzLmNvcm5lclJhZGl1cyA9PT0gMCkgPyB0aGlzLmNvcm5lclJhZGl1cyArIFwicHhcIiA6IDUgKyBcInB4XCI7XG4gICAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuYm9yZGVyUmFkaXVzID0gdGhpcy5jb250ZW50RGl2LnN0eWxlLmJvcmRlclJhZGl1cztcblxuXG4gICAgICAgICAgdGhpcy5jb250ZW50RGl2LnN0eWxlLmZvbnRTaXplID0gKHRoaXMuZm9udFNpemUgfHwgdGhpcy5mb250U2l6ZSA9PT0gMCkgPyB0aGlzLmZvbnRTaXplICsgXCJweFwiIDogMTQgKyBcInB4XCI7XG4gICAgICAgICAgdGhpcy5jb250ZW50RGl2LnN0eWxlLmNvbG9yID0gdGhpcy5mb250Q29sb3IgPyB0aGlzLmZvbnRDb2xvciA6IFwiIzAwMDAwMFwiO1xuICAgICAgICAgIHRoaXMuY29udGVudERpdi5zdHlsZS5mb250RmFtaWx5ID0gdGhpcy5mb250RmFtaWx5ID8gdGhpcy5mb250RmFtaWx5IDogXCJDYWxpYnJpLCBBcmlhbCwgR2VvcmdpYSwgc2VyaWY7XCI7XG4gICAgICAgICAgdGhpcy5jb250ZW50RGl2LnN0eWxlLmZvbnRXZWlnaHQgPSB0aGlzLmZvbnRXZWlnaHQgPyB0aGlzLmZvbnRXZWlnaHQgOiBcIm5vcm1hbFwiO1xuICAgICAgICAgIHRoaXMuY29udGVudERpdi5zdHlsZS5mb250U3R5bGUgPSB0aGlzLmZvbnRTdHlsZSA/IHRoaXMuZm9udFN0eWxlIDogaXNDYW52YXNTdXBwb3J0ZWQgPyBcIml0YWxpY1wiIDogXCJub3JtYWxcIjtcblxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdG9vbFRpcExlZnQ7XG5cbiAgICAgICAgaWYgKGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcInBpZVwiIHx8IGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcImRvdWdobnV0XCIgfHwgZW50cmllc1swXS5kYXRhU2VyaWVzLnR5cGUgPT09IFwiZnVubmVsXCIgfHwgZW50cmllc1swXS5kYXRhU2VyaWVzLnR5cGUgPT09IFwiYmFyXCIgfHwgZW50cmllc1swXS5kYXRhU2VyaWVzLnR5cGUgPT09IFwicmFuZ2VCYXJcIiB8fCBlbnRyaWVzWzBdLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQmFyXCIgfHwgZW50cmllc1swXS5kYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEJhcjEwMFwiKSB7XG4gICAgICAgICAgdG9vbFRpcExlZnQgPSBtb3VzZVggLSAxMCAtIHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vdG9vbFRpcExlZnQgPSAoKCh0aGlzLmNoYXJ0LmF4aXNYLmxpbmVDb29yZGluYXRlcy53aWR0aCAvIE1hdGguYWJzKHRoaXMuY2hhcnQuYXhpc1gudmlld3BvcnRNYXhpbXVtIC0gdGhpcy5jaGFydC5heGlzWC52aWV3cG9ydE1pbmltdW0pKSAqIE1hdGguYWJzKGVudHJpZXNbMF0uZGF0YVBvaW50LnggLSB0aGlzLmNoYXJ0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkpICsgdGhpcy5jaGFydC5heGlzWC5saW5lQ29vcmRpbmF0ZXMueDEgKyAuNSkgLSB0aGlzLmNvbnRhaW5lci5jbGllbnRXaWR0aCA8PCAwO1xuICAgICAgICAgIHRvb2xUaXBMZWZ0ID0gZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIGVudHJpZXNbMF0uZGF0YVNlcmllcy5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZW50cmllc1swXS5kYXRhUG9pbnQueCAtIGVudHJpZXNbMF0uZGF0YVNlcmllcy5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSAtIHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoIDw8IDA7XG4gICAgICAgICAgdG9vbFRpcExlZnQgLT0gMTA7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGlmICh0b29sVGlwTGVmdCA8IDApIHtcbiAgICAgICAgICB0b29sVGlwTGVmdCArPSB0aGlzLmNvbnRhaW5lci5jbGllbnRXaWR0aCArIDIwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRvb2xUaXBMZWZ0ICsgdGhpcy5jb250YWluZXIuY2xpZW50V2lkdGggPiB0aGlzLmNoYXJ0Ll9jb250YWluZXIuY2xpZW50V2lkdGgpXG4gICAgICAgICAgdG9vbFRpcExlZnQgPSBNYXRoLm1heCgwLCB0aGlzLmNoYXJ0Ll9jb250YWluZXIuY2xpZW50V2lkdGggLSB0aGlzLmNvbnRhaW5lci5jbGllbnRXaWR0aCk7XG5cbiAgICAgICAgdG9vbFRpcExlZnQgKz0gXCJweFwiO1xuXG4gICAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMSAmJiAhdGhpcy5zaGFyZWQgJiYgKGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcImxpbmVcIiB8fCBlbnRyaWVzWzBdLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGVwTGluZVwiIHx8IGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcInNwbGluZVwiIHx8IGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcImFyZWFcIiB8fCBlbnRyaWVzWzBdLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGVwQXJlYVwiIHx8IGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcInNwbGluZUFyZWFcIiB8fCBlbnRyaWVzWzBdLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQXJlYVwiIHx8IGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRBcmVhMTAwXCIpKSB7XG4gICAgICAgICAgLy90b29sVGlwQm90dG9tID0gKGVudHJpZXNbMF0uZGF0YVNlcmllcy5heGlzWS5saW5lQ29vcmRpbmF0ZXMueTIgLSBlbnRyaWVzWzBdLmRhdGFTZXJpZXMuYXhpc1kubGluZUNvb3JkaW5hdGVzLmhlaWdodCAvIE1hdGguYWJzKGVudHJpZXNbMF0uZGF0YVNlcmllcy5heGlzWS5tYXhpbXVtIC0gZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNZLnZpZXdwb3J0TWluaW11bSkgKiBNYXRoLmFicyhlbnRyaWVzWzBdLmRhdGFQb2ludC55IC0gZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNZLnZpZXdwb3J0TWluaW11bSkgKyAuNSkgPDwgMDtcbiAgICAgICAgICB0b29sVGlwQm90dG9tID0gZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIGVudHJpZXNbMF0uZGF0YVNlcmllcy5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZW50cmllc1swXS5kYXRhUG9pbnQueSAtIGVudHJpZXNbMF0uZGF0YVNlcmllcy5heGlzWS52aWV3cG9ydE1pbmltdW0pICsgLjUgPDwgMDtcbiAgICAgICAgfSBlbHNlIGlmIChlbnRyaWVzWzBdLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJiYXJcIiB8fCBlbnRyaWVzWzBdLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJyYW5nZUJhclwiIHx8IGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRCYXJcIiB8fCBlbnRyaWVzWzBdLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQmFyMTAwXCIpIHtcbiAgICAgICAgICAvL3Rvb2xUaXBCb3R0b20gPSAoZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNYLmxpbmVDb29yZGluYXRlcy55MiAtIGVudHJpZXNbMF0uZGF0YVNlcmllcy5heGlzWC5saW5lQ29vcmRpbmF0ZXMuaGVpZ2h0IC8gTWF0aC5hYnMoZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNYLm1heGltdW0gLSBlbnRyaWVzWzBdLmRhdGFTZXJpZXMuYXhpc1gudmlld3BvcnRNaW5pbXVtKSAqIE1hdGguYWJzKGVudHJpZXNbMF0uZGF0YVBvaW50LnggLSBlbnRyaWVzWzBdLmRhdGFTZXJpZXMuYXhpc1gudmlld3BvcnRNaW5pbXVtKSArIC41KSA8PCAwO1xuICAgICAgICAgIHRvb2xUaXBCb3R0b20gPSBlbnRyaWVzWzBdLmRhdGFTZXJpZXMuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChlbnRyaWVzWzBdLmRhdGFQb2ludC54IC0gZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNYLnZpZXdwb3J0TWluaW11bSkgKyAuNSA8PCAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRvb2xUaXBCb3R0b20gPSBtb3VzZVk7XG4gICAgICAgIH1cblxuICAgICAgICB0b29sVGlwQm90dG9tID0gKC10b29sVGlwQm90dG9tICsgMTApO1xuXG4gICAgICAgIGlmICh0b29sVGlwQm90dG9tICsgdGhpcy5jb250YWluZXIuY2xpZW50SGVpZ2h0ICsgNSA+IDApIHtcbiAgICAgICAgICB0b29sVGlwQm90dG9tIC09IHRvb2xUaXBCb3R0b20gKyB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyA1IC0gMFxuICAgICAgICB9XG5cbiAgICAgICAgdG9vbFRpcEJvdHRvbSArPSBcInB4XCI7XG5cbiAgICAgICAgLy90aGlzLmNvbnRhaW5lci5zdHlsZS5yaWdodCA9IHRvb2xUaXBSaWdodDtcbiAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUubGVmdCA9IHRvb2xUaXBMZWZ0O1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5ib3R0b20gPSB0b29sVGlwQm90dG9tO1xuXG4gICAgICAgIGlmICghdGhpcy5hbmltYXRpb25FbmFibGVkIHx8IHByZXZpb3VzbHlIaWRkZW4pIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVBbmltYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhpcy5lbmFibGVBbmltYXRpb24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGlkZShmYWxzZSk7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICAvL2lmIChpc0RlYnVnTW9kZSlcbiAgICAvLyAgY29uc29sZS5sb2coXCJzZWFyY2hYOiBcIiArIHggKyBcIiB4OiBcIiArIHNlYXJjaFJlc3VsdC5kYXRhUG9pbnQueCArIFwiOyB5OiBcIiArIHNlYXJjaFJlc3VsdC5kYXRhUG9pbnQueSArIFwiOyBkaXN0YW5jZTogXCIgKyBzZWFyY2hSZXN1bHQuZGlzdGFuY2UgKyBcIjsgc3RlcHM6IFwiICsgc3RlcHMpO1xuICB9XG59XG5cblxuVG9vbFRpcC5wcm90b3R5cGUuaGlnaGxpZ2h0T2JqZWN0cyA9IGZ1bmN0aW9uIChlbnRyaWVzKSB7XG4gIC8vaWYgKCF0aGlzLmVuYWJsZWQpXG4gIC8vXHRyZXR1cm47XG5cbiAgLy90aGlzLmNoYXJ0Lm92ZXJsYWlkQ2FudmFzQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNoYXJ0Lm92ZXJsYWlkQ2FudmFzLndpZHRoLCB0aGlzLmNoYXJ0Lm92ZXJsYWlkQ2FudmFzLmhlaWdodCk7XG4gIHZhciBvdmVybGFpZENhbnZhc0N0eCA9IHRoaXMuY2hhcnQub3ZlcmxhaWRDYW52YXNDdHg7XG4gIHRoaXMuY2hhcnQucmVzZXRPdmVybGF5ZWRDYW52YXMoKTtcblxuICBvdmVybGFpZENhbnZhc0N0eC5jbGVhclJlY3QoMCwwLHRoaXMuY2hhcnQud2lkdGgsIHRoaXMuY2hhcnQuaGVpZ2h0KTtcbiAgb3ZlcmxhaWRDYW52YXNDdHguc2F2ZSgpO1xuXG5cbiAgdmFyIHBsb3RBcmVhID0gdGhpcy5jaGFydC5wbG90QXJlYTtcbiAgdmFyIG9mZnNldCA9IDA7XG5cbiAgb3ZlcmxhaWRDYW52YXNDdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLngyIC0gcGxvdEFyZWEueDEsIHBsb3RBcmVhLnkyIC0gcGxvdEFyZWEueTEpO1xuICBvdmVybGFpZENhbnZhc0N0eC5jbGlwKCk7XG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcblxuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XG5cbiAgICB2YXIgZXZlbnRPYmplY3QgPSB0aGlzLmNoYXJ0Ll9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2VudHJ5LmRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2VudHJ5LmluZGV4XV07XG5cbiAgICBpZiAoIWV2ZW50T2JqZWN0IHx8ICFldmVudE9iamVjdC5vYmplY3RUeXBlIHx8IGV2ZW50T2JqZWN0Lm9iamVjdFR5cGUgIT09IFwiZGF0YVBvaW50XCIpXG4gICAgICBjb250aW51ZTtcblxuICAgIHZhciBkYXRhU2VyaWVzID0gdGhpcy5jaGFydC5kYXRhW2V2ZW50T2JqZWN0LmRhdGFTZXJpZXNJbmRleF07XG4gICAgdmFyIGRhdGFQb2ludCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tldmVudE9iamVjdC5kYXRhUG9pbnRJbmRleF07XG4gICAgdmFyIGluZGV4ID0gZXZlbnRPYmplY3QuZGF0YVBvaW50SW5kZXg7XG5cbiAgICBpZiAoZGF0YVBvaW50LmhpZ2hsaWdodEVuYWJsZWQgIT09IGZhbHNlICYmIChkYXRhU2VyaWVzLmhpZ2hsaWdodEVuYWJsZWQgPT09IHRydWUgfHwgZGF0YVBvaW50LmhpZ2hsaWdodEVuYWJsZWQgPT09IHRydWUpKSB7XG5cbiAgICAgIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwibGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGVwTGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzcGxpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic2NhdHRlclwiXG4gICAgICAgIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJhcmVhXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0ZXBBcmVhXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInNwbGluZUFyZWFcIlxuICAgICAgICB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEFyZWExMDBcIlxuICAgICAgICB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwicmFuZ2VBcmVhXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInJhbmdlU3BsaW5lQXJlYVwiKSB7XG4gICAgICAgIHZhciBtYXJrZXJQcm9wcyA9IGRhdGFTZXJpZXMuZ2V0TWFya2VyUHJvcGVydGllcyhpbmRleCwgZXZlbnRPYmplY3QueDEsIGV2ZW50T2JqZWN0LnkxLCB0aGlzLmNoYXJ0Lm92ZXJsYWlkQ2FudmFzQ3R4KTtcbiAgICAgICAgbWFya2VyUHJvcHMuc2l6ZSA9IE1hdGgubWF4KG1hcmtlclByb3BzLnNpemUgKiAxLjUgPDwgMCwgMTApO1xuXG4gICAgICAgIG1hcmtlclByb3BzLmJvcmRlckNvbG9yID0gbWFya2VyUHJvcHMuYm9yZGVyQ29sb3IgfHwgXCIjRkZGRkZGXCI7XG4gICAgICAgIG1hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzcyA9IG1hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzcyB8fCBNYXRoLmNlaWwobWFya2VyUHJvcHMuc2l6ZSAqIC4xKTtcblxuICAgICAgICAvL292ZXJsYWlkQ2FudmFzQ3R4Lmdsb2JhbEFscGhhID0gLjg7XG4gICAgICAgIFJlbmRlckhlbHBlci5kcmF3TWFya2VycyhbbWFya2VyUHJvcHNdKTtcbiAgICAgICAgLy9vdmVybGFpZENhbnZhc0N0eC5nbG9iYWxBbHBoYSA9IC44O1xuXG4gICAgICAgIGlmICh0eXBlb2YgKGV2ZW50T2JqZWN0LnkyKSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXG4gICAgICAgICAgdmFyIG1hcmtlclByb3BzID0gZGF0YVNlcmllcy5nZXRNYXJrZXJQcm9wZXJ0aWVzKGluZGV4LCBldmVudE9iamVjdC54MSwgZXZlbnRPYmplY3QueTIsIHRoaXMuY2hhcnQub3ZlcmxhaWRDYW52YXNDdHgpO1xuICAgICAgICAgIG1hcmtlclByb3BzLnNpemUgPSBNYXRoLm1heChtYXJrZXJQcm9wcy5zaXplICogMS41IDw8IDAsIDEwKTtcblxuICAgICAgICAgIG1hcmtlclByb3BzLmJvcmRlckNvbG9yID0gbWFya2VyUHJvcHMuYm9yZGVyQ29sb3IgfHwgXCIjRkZGRkZGXCI7XG4gICAgICAgICAgbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzID0gbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzIHx8IE1hdGguY2VpbChtYXJrZXJQcm9wcy5zaXplICogLjEpO1xuXG4gICAgICAgICAgLy9vdmVybGFpZENhbnZhc0N0eC5nbG9iYWxBbHBoYSA9IC44O1xuICAgICAgICAgIFJlbmRlckhlbHBlci5kcmF3TWFya2VycyhbbWFya2VyUHJvcHNdKTtcbiAgICAgICAgICAvL292ZXJsYWlkQ2FudmFzQ3R4Lmdsb2JhbEFscGhhID0gLjg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YVNlcmllcy50eXBlID09PSBcImJ1YmJsZVwiKSB7XG4gICAgICAgIHZhciBtYXJrZXJQcm9wcyA9IGRhdGFTZXJpZXMuZ2V0TWFya2VyUHJvcGVydGllcyhpbmRleCwgZXZlbnRPYmplY3QueDEsIGV2ZW50T2JqZWN0LnkxLCB0aGlzLmNoYXJ0Lm92ZXJsYWlkQ2FudmFzQ3R4KTtcbiAgICAgICAgbWFya2VyUHJvcHMuc2l6ZSA9IGV2ZW50T2JqZWN0LnNpemU7XG4gICAgICAgIG1hcmtlclByb3BzLmNvbG9yID0gXCJ3aGl0ZVwiO1xuICAgICAgICBtYXJrZXJQcm9wcy5ib3JkZXJDb2xvciA9IFwid2hpdGVcIjtcbiAgICAgICAgLy9tYXJrZXJQcm9wcy5ib3JkZXJUaGlja25lc3MgPSAyO1xuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5nbG9iYWxBbHBoYSA9IC4zO1xuICAgICAgICBSZW5kZXJIZWxwZXIuZHJhd01hcmtlcnMoW21hcmtlclByb3BzXSk7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YVNlcmllcy50eXBlID09PSBcImNvbHVtblwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQ29sdW1uXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRDb2x1bW4xMDBcIlxuICAgICAgICB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwiYmFyXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInJhbmdlQmFyXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRCYXJcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEJhcjEwMFwiXG4gICAgICAgIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJyYW5nZUNvbHVtblwiKSB7XG4gICAgICAgIGRyYXdSZWN0KG92ZXJsYWlkQ2FudmFzQ3R4LCBldmVudE9iamVjdC54MSwgZXZlbnRPYmplY3QueTEsIGV2ZW50T2JqZWN0LngyLCBldmVudE9iamVjdC55MiwgXCJ3aGl0ZVwiLCAwLCBudWxsLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgLjMpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZGF0YVNlcmllcy50eXBlID09PSBcInBpZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJkb3VnaG51dFwiKSB7XG4gICAgICAgIGRyYXdTZWdtZW50KG92ZXJsYWlkQ2FudmFzQ3R4LCBldmVudE9iamVjdC5jZW50ZXIsIGV2ZW50T2JqZWN0LnJhZGl1cywgXCJ3aGl0ZVwiLCBkYXRhU2VyaWVzLnR5cGUsIGV2ZW50T2JqZWN0LnN0YXJ0QW5nbGUsIGV2ZW50T2JqZWN0LmVuZEFuZ2xlLCAuMywgZXZlbnRPYmplY3QucGVyY2VudElubmVyUmFkaXVzKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YVNlcmllcy50eXBlID09PSBcImNhbmRsZXN0aWNrXCIpIHtcblxuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5nbG9iYWxBbHBoYSA9IDE7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4LnN0cm9rZVN0eWxlID0gZXZlbnRPYmplY3QuY29sb3I7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4LmxpbmVXaWR0aCA9IGV2ZW50T2JqZWN0LmJvcmRlclRoaWNrbmVzcyAqIDI7XG4gICAgICAgIG9mZnNldCA9IChvdmVybGFpZENhbnZhc0N0eC5saW5lV2lkdGgpICUgMiA9PT0gMCA/IDAgOiAuNTtcblxuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHgubW92ZVRvKGV2ZW50T2JqZWN0LngzIC0gb2Zmc2V0LCBldmVudE9iamVjdC55Mik7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4LmxpbmVUbyhldmVudE9iamVjdC54MyAtIG9mZnNldCwgTWF0aC5taW4oZXZlbnRPYmplY3QueTEsIGV2ZW50T2JqZWN0Lnk0KSk7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4LnN0cm9rZSgpO1xuXG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5tb3ZlVG8oZXZlbnRPYmplY3QueDMgLSBvZmZzZXQsIE1hdGgubWF4KGV2ZW50T2JqZWN0LnkxLCBldmVudE9iamVjdC55NCkpO1xuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5saW5lVG8oZXZlbnRPYmplY3QueDMgLSBvZmZzZXQsIGV2ZW50T2JqZWN0LnkzKTtcbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHguc3Ryb2tlKCk7XG5cbiAgICAgICAgZHJhd1JlY3Qob3ZlcmxhaWRDYW52YXNDdHgsIGV2ZW50T2JqZWN0LngxLCBNYXRoLm1pbihldmVudE9iamVjdC55MSwgZXZlbnRPYmplY3QueTQpLCBldmVudE9iamVjdC54MiwgTWF0aC5tYXgoZXZlbnRPYmplY3QueTEsIGV2ZW50T2JqZWN0Lnk0KSwgXCJ0cmFuc3BhcmVudFwiLCBldmVudE9iamVjdC5ib3JkZXJUaGlja25lc3MgKiAyLCBldmVudE9iamVjdC5jb2xvciwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICAgIH0gZWxzZSBpZiAoZGF0YVNlcmllcy50eXBlID09PSBcIm9obGNcIikge1xuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHguc3Ryb2tlU3R5bGUgPSBldmVudE9iamVjdC5jb2xvcjtcbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHgubGluZVdpZHRoID0gZXZlbnRPYmplY3QuYm9yZGVyVGhpY2tuZXNzICogMjtcblxuICAgICAgICBvZmZzZXQgPSAob3ZlcmxhaWRDYW52YXNDdHgubGluZVdpZHRoKSAlIDIgPT09IDAgPyAwIDogLjU7XG5cbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4Lm1vdmVUbyhldmVudE9iamVjdC54MyAtIG9mZnNldCwgZXZlbnRPYmplY3QueTIpO1xuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5saW5lVG8oZXZlbnRPYmplY3QueDMgLSBvZmZzZXQsIGV2ZW50T2JqZWN0LnkzKTtcbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHguc3Ryb2tlKCk7XG5cbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4Lm1vdmVUbyhldmVudE9iamVjdC54MywgZXZlbnRPYmplY3QueTEpO1xuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5saW5lVG8oZXZlbnRPYmplY3QueDEsIGV2ZW50T2JqZWN0LnkxKTtcbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHguc3Ryb2tlKCk7XG5cbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4Lm1vdmVUbyhldmVudE9iamVjdC54MywgZXZlbnRPYmplY3QueTQpO1xuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5saW5lVG8oZXZlbnRPYmplY3QueDIsIGV2ZW50T2JqZWN0Lnk0KTtcbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHguc3Ryb2tlKCk7XG5cbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHguZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3ZlcmxhaWRDYW52YXNDdHgucmVzdG9yZSgpO1xuICBvdmVybGFpZENhbnZhc0N0eC5nbG9iYWxBbHBoYSA9IDE7XG4gIG92ZXJsYWlkQ2FudmFzQ3R4LmJlZ2luUGF0aCgpO1xuXG4gIHJldHVybjtcbn1cblxuVG9vbFRpcC5wcm90b3R5cGUuZ2V0VG9vbFRpcElubmVySFRNTCA9IGZ1bmN0aW9uIChlKSB7XG4gIHZhciBlbnRyaWVzID0gZS5lbnRyaWVzO1xuICB2YXIgdG9vbFRpcElubmVySHRtbCA9IG51bGw7XG4gIHZhciBkYXRhU2VyaWVzID0gbnVsbDtcbiAgdmFyIGRhdGFQb2ludCA9IG51bGw7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBjb2xvciA9IG51bGw7XG4gIHZhciB0b29sVGlwQ29udGVudCA9IFwiXCI7XG5cbiAgdmFyIGlzVG9vbFRpcERlZmluZWRJbkRhdGEgPSB0cnVlO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZW50cmllc1tpXS5kYXRhU2VyaWVzLnRvb2xUaXBDb250ZW50IHx8IGVudHJpZXNbaV0uZGF0YVBvaW50LnRvb2xUaXBDb250ZW50KSB7XG4gICAgICBpc1Rvb2xUaXBEZWZpbmVkSW5EYXRhID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoaXNUb29sVGlwRGVmaW5lZEluRGF0YSAmJiAoKHRoaXMuY29udGVudCAmJiB0eXBlb2YgKHRoaXMuY29udGVudCkgPT09IFwiZnVuY3Rpb25cIikgfHwgdGhpcy5jb250ZW50Rm9ybWF0dGVyKSkge1xuXG4gICAgdmFyIHBhcmFtID0ge1xuICAgICAgY2hhcnQ6IHRoaXMuY2hhcnQsIHRvb2xUaXA6IHRoaXMuX29wdGlvbnMsIGVudHJpZXM6IGVudHJpZXNcbiAgICB9O1xuICAgIHRvb2xUaXBJbm5lckh0bWwgPSB0aGlzLmNvbnRlbnRGb3JtYXR0ZXIgPyB0aGlzLmNvbnRlbnRGb3JtYXR0ZXIocGFyYW0pIDogdGhpcy5jb250ZW50KHBhcmFtKTtcblxuICB9IGVsc2Uge1xuXG4gICAgaWYgKHRoaXMuc2hhcmVkICYmIHRoaXMuY2hhcnQucGxvdEluZm8uYXhpc1BsYWNlbWVudCAhPT0gXCJub25lXCIpIHtcblxuICAgICAgdmFyIHRvb2xUaXBJbm5lckh0bWxQcmVmaXggPSBcIlwiO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGF0YVNlcmllcyA9IGVudHJpZXNbaV0uZGF0YVNlcmllcztcbiAgICAgICAgZGF0YVBvaW50ID0gZW50cmllc1tpXS5kYXRhUG9pbnQ7XG4gICAgICAgIGluZGV4ID0gZW50cmllc1tpXS5pbmRleDtcblxuICAgICAgICB0b29sVGlwQ29udGVudCA9IFwiXCI7XG5cbiAgICAgICAgaWYgKGkgPT09IDAgJiYgaXNUb29sVGlwRGVmaW5lZEluRGF0YSAmJiAhdGhpcy5jb250ZW50KSB7XG4gICAgICAgICAgdG9vbFRpcElubmVySHRtbFByZWZpeCArPSB0eXBlb2YgKHRoaXMuY2hhcnQuYXhpc1gubGFiZWxzW2RhdGFQb2ludC54XSkgIT09IFwidW5kZWZpbmVkXCIgPyB0aGlzLmNoYXJ0LmF4aXNYLmxhYmVsc1tkYXRhUG9pbnQueF0gOiBcInt4fVwiO1xuICAgICAgICAgIHRvb2xUaXBJbm5lckh0bWxQcmVmaXggKz0gXCI8L2JyPlwiO1xuICAgICAgICAgIHRvb2xUaXBJbm5lckh0bWxQcmVmaXggPSB0aGlzLmNoYXJ0LnJlcGxhY2VLZXl3b3Jkc1dpdGhWYWx1ZSh0b29sVGlwSW5uZXJIdG1sUHJlZml4LCBkYXRhUG9pbnQsIGRhdGFTZXJpZXMsIGluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vQWxsb3dzIGRpc2FibGluZyBvZiB0b29sVGlwIGZvciBpbmRpdmlkdWFsIGRhdGFQb2ludHMvZGF0YVNlcmllc1xuICAgICAgICBpZiAoZGF0YVBvaW50LnRvb2xUaXBDb250ZW50ID09PSBudWxsIHx8ICh0eXBlb2YgKGRhdGFQb2ludC50b29sVGlwQ29udGVudCkgPT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YVNlcmllcy5fb3B0aW9ucy50b29sVGlwQ29udGVudCA9PT0gbnVsbCkpXG4gICAgICAgICAgY29udGludWU7XG5cblxuICAgICAgICBpZiAoZGF0YVNlcmllcy50eXBlID09PSBcImxpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RlcExpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3BsaW5lXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcImFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RlcEFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3BsaW5lQXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJjb2x1bW5cIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwiYmFyXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInNjYXR0ZXJcIlxuICAgICAgICB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZENvbHVtblwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQ29sdW1uMTAwXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRCYXJcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEJhcjEwMFwiXG4gICAgICAgIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQXJlYTEwMFwiKSB7XG4gICAgICAgICAgdG9vbFRpcENvbnRlbnQgKz0gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50ID8gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50IDogZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA/IGRhdGFTZXJpZXMudG9vbFRpcENvbnRlbnQgOiB0aGlzLmNvbnRlbnQgJiYgdHlwZW9mICh0aGlzLmNvbnRlbnQpICE9PSBcImZ1bmN0aW9uXCIgPyB0aGlzLmNvbnRlbnQgOiBcIjxzcGFuIHN0eWxlPSdcXFwiJ2NvbG9yOntjb2xvcn07J1xcXCInPntuYW1lfTo8L3NwYW4+Jm5ic3A7Jm5ic3A7e3l9XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YVNlcmllcy50eXBlID09PSBcImJ1YmJsZVwiKSB7XG4gICAgICAgICAgdG9vbFRpcENvbnRlbnQgKz0gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50ID8gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50IDogZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA/IGRhdGFTZXJpZXMudG9vbFRpcENvbnRlbnQgOiB0aGlzLmNvbnRlbnQgJiYgdHlwZW9mICh0aGlzLmNvbnRlbnQpICE9PSBcImZ1bmN0aW9uXCIgPyB0aGlzLmNvbnRlbnQgOiBcIjxzcGFuIHN0eWxlPSdcXFwiJ2NvbG9yOntjb2xvcn07J1xcXCInPntuYW1lfTo8L3NwYW4+Jm5ic3A7Jm5ic3A7e3l9LCAmbmJzcDsmbmJzcDt7en1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwicGllXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcImRvdWdobnV0XCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcImZ1bm5lbFwiKSB7XG4gICAgICAgICAgdG9vbFRpcENvbnRlbnQgKz0gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50ID8gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50IDogZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA/IGRhdGFTZXJpZXMudG9vbFRpcENvbnRlbnQgOiB0aGlzLmNvbnRlbnQgJiYgdHlwZW9mICh0aGlzLmNvbnRlbnQpICE9PSBcImZ1bmN0aW9uXCIgPyB0aGlzLmNvbnRlbnQgOiBcIiZuYnNwOyZuYnNwO3t5fVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFTZXJpZXMudHlwZSA9PT0gXCJyYW5nZUNvbHVtblwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJyYW5nZUJhclwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJyYW5nZUFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwicmFuZ2VTcGxpbmVBcmVhXCIpIHtcbiAgICAgICAgICB0b29sVGlwQ29udGVudCArPSBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgPyBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgOiBkYXRhU2VyaWVzLnRvb2xUaXBDb250ZW50ID8gZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA6IHRoaXMuY29udGVudCAmJiB0eXBlb2YgKHRoaXMuY29udGVudCkgIT09IFwiZnVuY3Rpb25cIiA/IHRoaXMuY29udGVudCA6IFwiPHNwYW4gc3R5bGU9J1xcXCInY29sb3I6e2NvbG9yfTsnXFxcIic+e25hbWV9Ojwvc3Bhbj4mbmJzcDsmbmJzcDt7eVswXX0sJm5ic3A7e3lbMV19XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YVNlcmllcy50eXBlID09PSBcImNhbmRsZXN0aWNrXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcIm9obGNcIikge1xuICAgICAgICAgIHRvb2xUaXBDb250ZW50ICs9IGRhdGFQb2ludC50b29sVGlwQ29udGVudCA/IGRhdGFQb2ludC50b29sVGlwQ29udGVudCA6IGRhdGFTZXJpZXMudG9vbFRpcENvbnRlbnQgPyBkYXRhU2VyaWVzLnRvb2xUaXBDb250ZW50IDogdGhpcy5jb250ZW50ICYmIHR5cGVvZiAodGhpcy5jb250ZW50KSAhPT0gXCJmdW5jdGlvblwiID8gdGhpcy5jb250ZW50IDogXCI8c3BhbiBzdHlsZT0nXFxcIidjb2xvcjp7Y29sb3J9OydcXFwiJz57bmFtZX06PC9zcGFuPlwiXG4gICAgICAgICAgICAgICAgICArIFwiPGJyLz5PcGVuOiAmbmJzcDsmbmJzcDt7eVswXX1cIlxuICAgICAgICAgICAgICAgICAgKyBcIjxici8+SGlnaDogJm5ic3A7Jm5ic3A7Jm5ic3A7e3lbMV19XCJcbiAgICAgICAgICAgICAgICAgICsgXCI8YnIvPkxvdzombmJzcDsmbmJzcDsmbmJzcDt7eVsyXX1cIlxuICAgICAgICAgICAgICAgICAgKyBcIjxici8+Q2xvc2U6ICZuYnNwOyZuYnNwO3t5WzNdfVwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRvb2xUaXBJbm5lckh0bWwgPT09IG51bGwpXG4gICAgICAgICAgdG9vbFRpcElubmVySHRtbCA9IFwiXCI7XG5cblxuICAgICAgICBpZiAodGhpcy5yZXZlcnNlZCA9PT0gdHJ1ZSkge1xuXG4gICAgICAgICAgdG9vbFRpcElubmVySHRtbCA9IHRoaXMuY2hhcnQucmVwbGFjZUtleXdvcmRzV2l0aFZhbHVlKHRvb2xUaXBDb250ZW50LCBkYXRhUG9pbnQsIGRhdGFTZXJpZXMsIGluZGV4KSArIHRvb2xUaXBJbm5lckh0bWw7XG5cbiAgICAgICAgICBpZiAoaSA8IGVudHJpZXMubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIHRvb2xUaXBJbm5lckh0bWwgPSBcIjwvYnI+XCIgKyB0b29sVGlwSW5uZXJIdG1sO1xuXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICB0b29sVGlwSW5uZXJIdG1sICs9IHRoaXMuY2hhcnQucmVwbGFjZUtleXdvcmRzV2l0aFZhbHVlKHRvb2xUaXBDb250ZW50LCBkYXRhUG9pbnQsIGRhdGFTZXJpZXMsIGluZGV4KTtcblxuICAgICAgICAgIGlmIChpIDwgZW50cmllcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgdG9vbFRpcElubmVySHRtbCArPSBcIjwvYnI+XCI7XG5cbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIGlmICh0b29sVGlwSW5uZXJIdG1sICE9PSBudWxsKVxuICAgICAgICB0b29sVGlwSW5uZXJIdG1sID0gdG9vbFRpcElubmVySHRtbFByZWZpeCArIHRvb2xUaXBJbm5lckh0bWw7XG5cbiAgICB9IGVsc2Uge1xuXG4gICAgICBkYXRhU2VyaWVzID0gZW50cmllc1swXS5kYXRhU2VyaWVzO1xuICAgICAgZGF0YVBvaW50ID0gZW50cmllc1swXS5kYXRhUG9pbnQ7XG4gICAgICBpbmRleCA9IGVudHJpZXNbMF0uaW5kZXg7XG5cbiAgICAgIC8vQWxsb3dzIGRpc2FibGluZyBvZiB0b29sVGlwIGZvciBpbmRpdmlkdWFsIGRhdGFQb2ludHMvZGF0YVNlcmllc1xuICAgICAgaWYgKGRhdGFQb2ludC50b29sVGlwQ29udGVudCA9PT0gbnVsbCB8fCAodHlwZW9mIChkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQpID09PSBcInVuZGVmaW5lZFwiICYmIGRhdGFTZXJpZXMuX29wdGlvbnMudG9vbFRpcENvbnRlbnQgPT09IG51bGwpKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuXG4gICAgICBpZiAoZGF0YVNlcmllcy50eXBlID09PSBcImxpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RlcExpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3BsaW5lXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcImFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RlcEFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3BsaW5lQXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJjb2x1bW5cIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwiYmFyXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInNjYXR0ZXJcIlxuICAgICAgICB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZENvbHVtblwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQ29sdW1uMTAwXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRCYXJcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEJhcjEwMFwiXG4gICAgICAgIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQXJlYTEwMFwiKSB7XG4gICAgICAgIHRvb2xUaXBDb250ZW50ID0gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50ID8gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50IDogZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA/IGRhdGFTZXJpZXMudG9vbFRpcENvbnRlbnQgOiB0aGlzLmNvbnRlbnQgJiYgdHlwZW9mICh0aGlzLmNvbnRlbnQpICE9PSBcImZ1bmN0aW9uXCIgPyB0aGlzLmNvbnRlbnQgOiBcIjxzcGFuIHN0eWxlPSdcXFwiJ2NvbG9yOntjb2xvcn07J1xcXCInPlwiICsgKGRhdGFQb2ludC5sYWJlbCA/IFwie2xhYmVsfVwiIDogXCJ7eH1cIikgKyBcIiA6PC9zcGFuPiZuYnNwOyZuYnNwO3t5fVwiO1xuICAgICAgfSBlbHNlIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwiYnViYmxlXCIpIHtcbiAgICAgICAgdG9vbFRpcENvbnRlbnQgPSBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgPyBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgOiBkYXRhU2VyaWVzLnRvb2xUaXBDb250ZW50ID8gZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA6IHRoaXMuY29udGVudCAmJiB0eXBlb2YgKHRoaXMuY29udGVudCkgIT09IFwiZnVuY3Rpb25cIiA/IHRoaXMuY29udGVudCA6IFwiPHNwYW4gc3R5bGU9J1xcXCInY29sb3I6e2NvbG9yfTsnXFxcIic+XCIgKyAoZGF0YVBvaW50LmxhYmVsID8gXCJ7bGFiZWx9XCIgOiBcInt4fVwiKSArIFwiOjwvc3Bhbj4mbmJzcDsmbmJzcDt7eX0sICZuYnNwOyZuYnNwO3t6fVwiO1xuICAgICAgfSBlbHNlIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwicGllXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcImRvdWdobnV0XCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcImZ1bm5lbFwiKSB7XG4gICAgICAgIHRvb2xUaXBDb250ZW50ID0gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50ID8gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50IDogZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA/IGRhdGFTZXJpZXMudG9vbFRpcENvbnRlbnQgOiB0aGlzLmNvbnRlbnQgJiYgdHlwZW9mICh0aGlzLmNvbnRlbnQpICE9PSBcImZ1bmN0aW9uXCIgPyB0aGlzLmNvbnRlbnQgOiAoZGF0YVBvaW50Lm5hbWUgPyBcIntuYW1lfTombmJzcDsmbmJzcDtcIiA6IGRhdGFQb2ludC5sYWJlbCA/IFwie2xhYmVsfTombmJzcDsmbmJzcDtcIiA6IFwiXCIpICsgXCJ7eX1cIjtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YVNlcmllcy50eXBlID09PSBcInJhbmdlQ29sdW1uXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInJhbmdlQmFyXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInJhbmdlQXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJyYW5nZVNwbGluZUFyZWFcIikge1xuICAgICAgICB0b29sVGlwQ29udGVudCA9IGRhdGFQb2ludC50b29sVGlwQ29udGVudCA/IGRhdGFQb2ludC50b29sVGlwQ29udGVudCA6IGRhdGFTZXJpZXMudG9vbFRpcENvbnRlbnQgPyBkYXRhU2VyaWVzLnRvb2xUaXBDb250ZW50IDogdGhpcy5jb250ZW50ICYmIHR5cGVvZiAodGhpcy5jb250ZW50KSAhPT0gXCJmdW5jdGlvblwiID8gdGhpcy5jb250ZW50IDogXCI8c3BhbiBzdHlsZT0nXFxcIidjb2xvcjp7Y29sb3J9OydcXFwiJz5cIiArIChkYXRhUG9pbnQubGFiZWwgPyBcIntsYWJlbH1cIiA6IFwie3h9XCIpICsgXCIgOjwvc3Bhbj4mbmJzcDsmbmJzcDt7eVswXX0sICZuYnNwO3t5WzFdfVwiO1xuICAgICAgfSBlbHNlIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwiY2FuZGxlc3RpY2tcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwib2hsY1wiKSB7XG4gICAgICAgIHRvb2xUaXBDb250ZW50ID0gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50ID8gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50IDogZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA/IGRhdGFTZXJpZXMudG9vbFRpcENvbnRlbnQgOiB0aGlzLmNvbnRlbnQgJiYgdHlwZW9mICh0aGlzLmNvbnRlbnQpICE9PSBcImZ1bmN0aW9uXCIgPyB0aGlzLmNvbnRlbnQgOiBcIjxzcGFuIHN0eWxlPSdcXFwiJ2NvbG9yOntjb2xvcn07J1xcXCInPlwiICsgKGRhdGFQb2ludC5sYWJlbCA/IFwie2xhYmVsfVwiIDogXCJ7eH1cIikgKyBcIjwvc3Bhbj5cIlxuICAgICAgICAgICsgXCI8YnIvPk9wZW46ICZuYnNwOyZuYnNwO3t5WzBdfVwiXG4gICAgICAgICAgKyBcIjxici8+SGlnaDogJm5ic3A7Jm5ic3A7Jm5ic3A7e3lbMV19XCJcbiAgICAgICAgICArIFwiPGJyLz5Mb3c6ICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3t5WzJdfVwiXG4gICAgICAgICAgKyBcIjxici8+Q2xvc2U6ICZuYnNwOyZuYnNwO3t5WzNdfVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9vbFRpcElubmVySHRtbCA9PT0gbnVsbClcbiAgICAgICAgdG9vbFRpcElubmVySHRtbCA9IFwiXCI7XG5cbiAgICAgIHRvb2xUaXBJbm5lckh0bWwgKz0gdGhpcy5jaGFydC5yZXBsYWNlS2V5d29yZHNXaXRoVmFsdWUodG9vbFRpcENvbnRlbnQsIGRhdGFQb2ludCwgZGF0YVNlcmllcywgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0b29sVGlwSW5uZXJIdG1sO1xufVxuXG5Ub29sVGlwLnByb3RvdHlwZS5lbmFibGVBbmltYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNvbnRhaW5lci5zdHlsZS5XZWJraXRUcmFuc2l0aW9uKVxuICAgIHJldHVybjtcblxuICB0aGlzLmNvbnRhaW5lci5zdHlsZS5XZWJraXRUcmFuc2l0aW9uID0gXCJsZWZ0IC4ycyBlYXNlLW91dCwgYm90dG9tIC4ycyBlYXNlLW91dFwiO1xuICB0aGlzLmNvbnRhaW5lci5zdHlsZS5Nb3pUcmFuc2l0aW9uID0gXCJsZWZ0IC4ycyBlYXNlLW91dCwgYm90dG9tIC4ycyBlYXNlLW91dFwiO1xuICB0aGlzLmNvbnRhaW5lci5zdHlsZS5Nc1RyYW5zaXRpb24gPSBcImxlZnQgLjJzIGVhc2Utb3V0LCBib3R0b20gLjJzIGVhc2Utb3V0XCI7XG4gIHRoaXMuY29udGFpbmVyLnN0eWxlLnRyYW5zaXRpb24gPSBcImxlZnQgLjJzIGVhc2Utb3V0LCBib3R0b20gLjJzIGVhc2Utb3V0XCI7XG59XG5cblRvb2xUaXAucHJvdG90eXBlLmRpc2FibGVBbmltYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5jb250YWluZXIuc3R5bGUuV2Via2l0VHJhbnNpdGlvbilcbiAgICByZXR1cm47XG5cbiAgdGhpcy5jb250YWluZXIuc3R5bGUuV2Via2l0VHJhbnNpdGlvbiA9IFwiXCI7XG4gIHRoaXMuY29udGFpbmVyLnN0eWxlLk1velRyYW5zaXRpb24gPSBcIlwiO1xuICB0aGlzLmNvbnRhaW5lci5zdHlsZS5Nc1RyYW5zaXRpb24gPSBcIlwiO1xuICB0aGlzLmNvbnRhaW5lci5zdHlsZS50cmFuc2l0aW9uID0gXCJcIjtcbn1cblxuVG9vbFRpcC5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uIChyZXNldE92ZXJsYXllZENhbnZhcykge1xuICBpZiAoIXRoaXMuZW5hYmxlZClcbiAgICByZXR1cm47XG5cbiAgcmVzZXRPdmVybGF5ZWRDYW52YXMgPSB0eXBlb2YgKHJlc2V0T3ZlcmxheWVkQ2FudmFzKSA9PT0gXCJ1bmRlZmluZWRcIiA/IHRydWUgOiByZXNldE92ZXJsYXllZENhbnZhcztcblxuICB0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gIHRoaXMuY3VycmVudFNlcmllc0luZGV4ID0gLTE7XG4gIHRoaXMuX3ByZXZYID0gTmFOO1xuICB0aGlzLl9wcmV2WSA9IE5hTjtcbiAgLy90aGlzLmNoYXJ0Lm92ZXJsYWlkQ2FudmFzQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNoYXJ0Lm92ZXJsYWlkQ2FudmFzLndpZHRoLCB0aGlzLmNoYXJ0Lm92ZXJsYWlkQ2FudmFzLmhlaWdodCk7XG4gIGlmIChyZXNldE92ZXJsYXllZENhbnZhcylcbiAgICB0aGlzLmNoYXJ0LnJlc2V0T3ZlcmxheWVkQ2FudmFzKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvb2xUaXA7XG4iLCJcbmZ1bmN0aW9uIHlTY2FsZUFuaW1hdGlvbihmcmFjdGlvbkNvbXBsZXRlLCBhbmltYXRpb25JbmZvKSB7XG5cbiAgaWYgKGZyYWN0aW9uQ29tcGxldGUgPT09IDApIHJldHVybjtcblxuICBjb25zdCBjdHggPSBhbmltYXRpb25JbmZvLmRlc3Q7XG4gIGNvbnN0IHNvdXJjZUNhbnZhcyA9IGFuaW1hdGlvbkluZm8uc291cmNlLmNhbnZhcztcbiAgY29uc3QgYmFzZSA9IGFuaW1hdGlvbkluZm8uYW5pbWF0aW9uQmFzZTtcblxuICBjb25zdCBvZmZzZXRZID0gKGJhc2UgLSBiYXNlICogZnJhY3Rpb25Db21wbGV0ZSk7XG5cbiAgY3R4LmRyYXdJbWFnZShzb3VyY2VDYW52YXMsIDAsIDAsIHNvdXJjZUNhbnZhcy53aWR0aCwgc291cmNlQ2FudmFzLmhlaWdodCwgMCwgb2Zmc2V0WSxcbiAgICAgY3R4LmNhbnZhcy53aWR0aCAvIGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW8sIGZyYWN0aW9uQ29tcGxldGUgKiBjdHguY2FudmFzLmhlaWdodCAvIGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW8pO1xufVxuXG5mdW5jdGlvbiB4U2NhbGVBbmltYXRpb24oZnJhY3Rpb25Db21wbGV0ZSwgYW5pbWF0aW9uSW5mbykge1xuXG4gIGlmIChmcmFjdGlvbkNvbXBsZXRlID09PSAwKSByZXR1cm47XG5cbiAgY29uc3QgY3R4ID0gYW5pbWF0aW9uSW5mby5kZXN0O1xuICBjb25zdCBzb3VyY2VDYW52YXMgPSBhbmltYXRpb25JbmZvLnNvdXJjZS5jYW52YXM7XG4gIGNvbnN0IGJhc2UgPSBhbmltYXRpb25JbmZvLmFuaW1hdGlvbkJhc2U7XG5cbiAgY29uc3Qgb2Zmc2V0WCA9IChiYXNlIC0gYmFzZSAqIGZyYWN0aW9uQ29tcGxldGUpO1xuXG4gIGN0eC5kcmF3SW1hZ2Uoc291cmNlQ2FudmFzLCAwLCAwLCBzb3VyY2VDYW52YXMud2lkdGgsIHNvdXJjZUNhbnZhcy5oZWlnaHQsIG9mZnNldFgsIDAsXG4gICAgZnJhY3Rpb25Db21wbGV0ZSAqIGN0eC5jYW52YXMud2lkdGggLyBkZXZpY2VQaXhlbEJhY2tpbmdTdG9yZVJhdGlvLCBjdHguY2FudmFzLmhlaWdodCAvIGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW8pO1xufVxuXG5mdW5jdGlvbiB4Q2xpcEFuaW1hdGlvbihmcmFjdGlvbkNvbXBsZXRlLCBhbmltYXRpb25JbmZvKSB7XG5cbiAgaWYgKGZyYWN0aW9uQ29tcGxldGUgPT09IDApIHJldHVybjtcblxuICBjb25zdCBjdHggPSBhbmltYXRpb25JbmZvLmRlc3Q7XG4gIGNvbnN0IHNvdXJjZUNhbnZhcyA9IGFuaW1hdGlvbkluZm8uc291cmNlLmNhbnZhcztcblxuICBjdHguc2F2ZSgpO1xuXG4gIGlmIChmcmFjdGlvbkNvbXBsZXRlID4gMClcbiAgICBjdHguZHJhd0ltYWdlKHNvdXJjZUNhbnZhcywgMCwgMCwgc291cmNlQ2FudmFzLndpZHRoICogZnJhY3Rpb25Db21wbGV0ZSwgc291cmNlQ2FudmFzLmhlaWdodCwgMCwgMCxcbiAgICAgIHNvdXJjZUNhbnZhcy53aWR0aCAqIGZyYWN0aW9uQ29tcGxldGUgLyBkZXZpY2VQaXhlbEJhY2tpbmdTdG9yZVJhdGlvLCBzb3VyY2VDYW52YXMuaGVpZ2h0IC8gZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbyk7XG5cbiAgY3R4LnJlc3RvcmUoKTtcbn1cblxuZnVuY3Rpb24gZmFkZUluQW5pbWF0aW9uKGZyYWN0aW9uQ29tcGxldGUsIGFuaW1hdGlvbkluZm8pIHtcblxuICBpZiAoZnJhY3Rpb25Db21wbGV0ZSA9PT0gMCkgcmV0dXJuO1xuXG4gIGNvbnN0IGN0eCA9IGFuaW1hdGlvbkluZm8uZGVzdDtcbiAgY29uc3Qgc291cmNlQ2FudmFzID0gYW5pbWF0aW9uSW5mby5zb3VyY2UuY2FudmFzO1xuXG4gIGN0eC5zYXZlKCk7XG5cbiAgY3R4Lmdsb2JhbEFscGhhID0gZnJhY3Rpb25Db21wbGV0ZTtcblxuICBjdHguZHJhd0ltYWdlKHNvdXJjZUNhbnZhcywgMCwgMCwgc291cmNlQ2FudmFzLndpZHRoLCBzb3VyY2VDYW52YXMuaGVpZ2h0LCAwLCAwLFxuICAgIGN0eC5jYW52YXMud2lkdGggLyBkZXZpY2VQaXhlbEJhY2tpbmdTdG9yZVJhdGlvLCBjdHguY2FudmFzLmhlaWdodCAvIGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW8pO1xuXG4gIGN0eC5yZXN0b3JlKCk7XG5cbn1cblxuY29uc3QgZWFzaW5nID0ge1xuXG4gIGxpbmVhcih0LCBiLCBjLCBkKSB7XG4gICAgcmV0dXJuIGMgKiB0IC8gZCArIGI7XG4gIH0sXG5cbiAgZWFzZU91dFF1YWQodCwgYiwgYywgZCkge1xuICAgIHJldHVybiAtYyAqICh0IC89IGQpICogKHQgLSAyKSArIGI7XG4gIH0sXG5cbiAgZWFzZU91dFF1YXJ0ICh0LCBiLCBjLCBkKSB7XG4gICAgcmV0dXJuIC1jICogKCh0ID0gdCAvIGQgLSAxKSAqIHQgKiB0ICogdCAtIDEpICsgYjtcbiAgfSxcblxuICBlYXNlSW5RdWFkKHQsIGIsIGMsIGQpIHtcbiAgICByZXR1cm4gYyAqICh0IC89IGQpICogdCArIGI7XG4gIH0sXG5cbiAgZWFzZUluUXVhcnQodCwgYiwgYywgZCkge1xuICAgIHJldHVybiBjICogKHQgLz0gZCkgKiB0ICogdCAqIHQgKyBiO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcblxuICB5U2NhbGVBbmltYXRpb24sXG4gIHhTY2FsZUFuaW1hdGlvbixcbiAgeENsaXBBbmltYXRpb24sXG4gIGZhZGVJbkFuaW1hdGlvbixcbiAgZWFzaW5nXG5cbn1cbiIsImNvbnN0IFJlbmRlckhlbHBlciA9IHtcblxuICBkcmF3TWFya2VyOiBmdW5jdGlvbiAoeCwgeSwgY3R4LCBtYXJrZXJUeXBlLCBtYXJrZXJTaXplLCBtYXJrZXJDb2xvciwgbWFya2VyQm9yZGVyQ29sb3IsIG1hcmtlckJvcmRlclRoaWNrbmVzcykge1xuXG4gICAgaWYgKCFjdHgpXG4gICAgICByZXR1cm47XG5cbiAgICB2YXIgYWxwaGEgPSAxO1xuXG4gICAgY3R4LmZpbGxTdHlsZSA9IG1hcmtlckNvbG9yID8gbWFya2VyQ29sb3IgOiBcIiMwMDAwMDBcIjtcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSBtYXJrZXJCb3JkZXJDb2xvciA/IG1hcmtlckJvcmRlckNvbG9yIDogXCIjMDAwMDAwXCI7XG4gICAgY3R4LmxpbmVXaWR0aCA9IG1hcmtlckJvcmRlclRoaWNrbmVzcyA/IG1hcmtlckJvcmRlclRoaWNrbmVzcyA6IDA7XG5cblxuICAgIGlmIChtYXJrZXJUeXBlID09PSBcImNpcmNsZVwiKSB7XG5cbiAgICAgIGN0eC5tb3ZlVG8oeCwgeSk7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAvL3JldHVybjtcblxuICAgICAgY3R4LmFyYyh4LCB5LCBtYXJrZXJTaXplIC8gMiwgMCwgTWF0aC5QSSAqIDIsIGZhbHNlKTtcblxuICAgICAgaWYgKG1hcmtlckNvbG9yKVxuICAgICAgICBjdHguZmlsbCgpO1xuXG4gICAgICBpZiAobWFya2VyQm9yZGVyVGhpY2tuZXNzKSB7XG5cbiAgICAgICAgaWYgKCFtYXJrZXJCb3JkZXJDb2xvcikge1xuICAgICAgICAgIGFscGhhID0gY3R4Lmdsb2JhbEFscGhhO1xuICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IC4xNTtcbiAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcImJsYWNrXCI7XG4gICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IGFscGhhO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAobWFya2VyVHlwZSA9PT0gXCJzcXVhcmVcIikge1xuXG4gICAgICAvL2N0eC5tb3ZlVG8oeCAtIG1hcmtlclNpemUgLyAyLCB5IC0gbWFya2VyU2l6ZSAvIDIpO1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY3R4LnJlY3QoeCAtIG1hcmtlclNpemUgLyAyLCB5IC0gbWFya2VyU2l6ZSAvIDIsIG1hcmtlclNpemUsIG1hcmtlclNpemUpO1xuXG4gICAgICBpZiAobWFya2VyQ29sb3IpXG4gICAgICAgIGN0eC5maWxsKCk7XG5cbiAgICAgIGlmIChtYXJrZXJCb3JkZXJUaGlja25lc3MpIHtcblxuICAgICAgICBpZiAoIW1hcmtlckJvcmRlckNvbG9yKSB7XG4gICAgICAgICAgYWxwaGEgPSBjdHguZ2xvYmFsQWxwaGE7XG4gICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gLjE1O1xuICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IFwiYmxhY2tcIjtcbiAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gYWxwaGE7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGN0eC5zdHJva2UoKTtcblxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWFya2VyVHlwZSA9PT0gXCJ0cmlhbmdsZVwiKSB7XG5cbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGN0eC5tb3ZlVG8oeCAtIG1hcmtlclNpemUgLyAyLCB5ICsgbWFya2VyU2l6ZSAvIDIpO1xuICAgICAgY3R4LmxpbmVUbyh4ICsgbWFya2VyU2l6ZSAvIDIsIHkgKyBtYXJrZXJTaXplIC8gMik7XG4gICAgICBjdHgubGluZVRvKHgsIHkgLSBtYXJrZXJTaXplIC8gMik7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG5cbiAgICAgIGlmIChtYXJrZXJDb2xvcilcbiAgICAgICAgY3R4LmZpbGwoKTtcblxuICAgICAgaWYgKG1hcmtlckJvcmRlclRoaWNrbmVzcykge1xuXG4gICAgICAgIGlmICghbWFya2VyQm9yZGVyQ29sb3IpIHtcbiAgICAgICAgICBhbHBoYSA9IGN0eC5nbG9iYWxBbHBoYTtcbiAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAuMTU7XG4gICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCJibGFja1wiO1xuICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSBhbHBoYTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICB9XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgfSBlbHNlIGlmIChtYXJrZXJUeXBlID09PSBcImNyb3NzXCIpIHtcblxuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gbWFya2VyQ29sb3I7XG4gICAgICBtYXJrZXJCb3JkZXJUaGlja25lc3MgPSBtYXJrZXJTaXplIC8gNDtcbiAgICAgIGN0eC5saW5lV2lkdGggPSBtYXJrZXJCb3JkZXJUaGlja25lc3M7XG5cbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGN0eC5tb3ZlVG8oeCAtIG1hcmtlclNpemUgLyAyLCB5IC0gbWFya2VyU2l6ZSAvIDIpO1xuICAgICAgY3R4LmxpbmVUbyh4ICsgbWFya2VyU2l6ZSAvIDIsIHkgKyBtYXJrZXJTaXplIC8gMik7XG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIGN0eC5tb3ZlVG8oeCArIG1hcmtlclNpemUgLyAyLCB5IC0gbWFya2VyU2l6ZSAvIDIpO1xuICAgICAgY3R4LmxpbmVUbyh4IC0gbWFya2VyU2l6ZSAvIDIsIHkgKyBtYXJrZXJTaXplIC8gMik7XG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICB9XG5cblxuICB9LFxuICBkcmF3TWFya2VyczogZnVuY3Rpb24gKG1hcmtlcnMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJzW2ldO1xuXG4gICAgICBSZW5kZXJIZWxwZXIuZHJhd01hcmtlcihtYXJrZXIueCwgbWFya2VyLnksIG1hcmtlci5jdHgsIG1hcmtlci50eXBlLCBtYXJrZXIuc2l6ZSwgbWFya2VyLmNvbG9yLCBtYXJrZXIuYm9yZGVyQ29sb3IsIG1hcmtlci5ib3JkZXJUaGlja25lc3MpO1xuICAgIH1cbiAgfVxuICAvLyxcbiAgLy9kcmF3MXB4TGluZTogZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgY3R4KSB7XG4gIC8vXHRjdHguYmVnaW5QYXRoKCk7XG4gIC8vXHRjdHguZHJhd1JlY3QoeDEsIHkxLCB4MiAtIHgxLCB5MiAtIHkxKTtcbiAgLy9cdGN0eC5zdHJva2UoKTtcbiAgLy99XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlbmRlckhlbHBlcjtcbiIsIlxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChkZXJpdmVkLCBiYXNlKSB7XG5cdGRlcml2ZWQucHJvdG90eXBlID0gaW5oZXJpdChiYXNlLnByb3RvdHlwZSk7XG5cdGRlcml2ZWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZGVyaXZlZDtcblx0ZGVyaXZlZC5iYXNlID0gYmFzZS5wcm90b3R5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmhlcml0KHByb3RvKSB7XG5cdGZ1bmN0aW9uIEYoKSB7IH1cblx0Ri5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBGKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb0RhdGVUaW1lKGRhdGVUaW1lLCBudW0sIHR5cGUpIHtcblxuXHRpZiAodHlwZSA9PT0gXCJtaWxsaXNlY29uZFwiKVxuXHRcdGRhdGVUaW1lLnNldE1pbGxpc2Vjb25kcyhkYXRlVGltZS5nZXRNaWxsaXNlY29uZHMoKSArIDEgKiBudW0pO1xuXHRlbHNlIGlmICh0eXBlID09PSBcInNlY29uZFwiKVxuXHRcdGRhdGVUaW1lLnNldFNlY29uZHMoZGF0ZVRpbWUuZ2V0U2Vjb25kcygpICsgMSAqIG51bSk7XG5cdGVsc2UgaWYgKHR5cGUgPT09IFwibWludXRlXCIpXG5cdFx0ZGF0ZVRpbWUuc2V0TWludXRlcyhkYXRlVGltZS5nZXRNaW51dGVzKCkgKyAxICogbnVtKTtcblx0ZWxzZSBpZiAodHlwZSA9PT0gXCJob3VyXCIpXG5cdFx0ZGF0ZVRpbWUuc2V0SG91cnMoZGF0ZVRpbWUuZ2V0SG91cnMoKSArIDEgKiBudW0pO1xuXHRlbHNlIGlmICh0eXBlID09PSBcImRheVwiKVxuXHRcdGRhdGVUaW1lLnNldERhdGUoZGF0ZVRpbWUuZ2V0RGF0ZSgpICsgMSAqIG51bSk7XG5cdGVsc2UgaWYgKHR5cGUgPT09IFwid2Vla1wiKVxuXHRcdGRhdGVUaW1lLnNldERhdGUoZGF0ZVRpbWUuZ2V0RGF0ZSgpICsgNyAqIG51bSk7XG5cdGVsc2UgaWYgKHR5cGUgPT09IFwibW9udGhcIilcblx0XHRkYXRlVGltZS5zZXRNb250aChkYXRlVGltZS5nZXRNb250aCgpICsgMSAqIG51bSk7XG5cdGVsc2UgaWYgKHR5cGUgPT09IFwieWVhclwiKVxuXHRcdGRhdGVUaW1lLnNldEZ1bGxZZWFyKGRhdGVUaW1lLmdldEZ1bGxZZWFyKCkgKyAxICogbnVtKTtcblxuXHRyZXR1cm4gZGF0ZVRpbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9OdW1iZXIobnVtLCB0eXBlKSB7XG5cdHJldHVybiBjb25zdGFudHNbdHlwZSArIFwiRHVyYXRpb25cIl0gKiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWQodmFsdWUsIGxlbmd0aCkge1xuXHR2YXIgaXNOZWdhdGl2ZSA9IGZhbHNlO1xuXHRpZiAodmFsdWUgPCAwKSB7XG5cdFx0aXNOZWdhdGl2ZSA9IHRydWU7XG5cdFx0dmFsdWUgKj0gLTE7XG5cdH1cblxuXHR2YWx1ZSA9IFwiXCIgKyB2YWx1ZTtcblx0bGVuZ3RoID0gIWxlbmd0aCA/IDEgOiBsZW5ndGg7XG5cblx0d2hpbGUgKHZhbHVlLmxlbmd0aCA8IGxlbmd0aCkgdmFsdWUgPSBcIjBcIiArIHZhbHVlO1xuXG5cdHJldHVybiBpc05lZ2F0aXZlID8gXCItXCIgKyB2YWx1ZSA6IHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJpbVN0cmluZyhzdHIpIHtcblx0aWYgKCFzdHIpXG5cdFx0cmV0dXJuIHN0cjtcblxuXHRzdHIgPSBzdHIucmVwbGFjZSgvXlxcc1xccyovLCAnJyk7XG5cdHZhciB3cyA9IC9cXHMvO1xuXHR2YXIgaSA9IHN0ci5sZW5ndGg7XG5cdHdoaWxlICh3cy50ZXN0KHN0ci5jaGFyQXQoLS1pKSkpIHsgfVxuXHRyZXR1cm4gc3RyLnNsaWNlKDAsIGkgKyAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZEN0eChjb250ZXh0KSB7XG5cdGNvbnRleHQucm91bmRSZWN0ID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cywgYm9yZGVyVGhpY2tuZXNzLCBiYWNrZ3JvdW5kQ29sb3IsIGJvcmRlckNvbG9yKSB7XG5cdFx0Ly8vPHNpZ25hdHVyZT5cblx0XHQvLy88c3VtbWFyeT5DcmVhdGVzIGEgcm91bmRlZCByZWN0YW5nbGUgd2l0aCBnaXZlbiBmaWxsL3N0cm9rZSBwYXJhbWV0ZXJzPC9zdW1tYXJ5PlxuXHRcdC8vLzxwYXJhbSBuYW1lPVwieFwiIHR5cGU9XCJudW1iZXJcIj54IHZhbHVlPC9wYXJhbT5cblx0XHQvLy88cGFyYW0gbmFtZT1cInlcIiB0eXBlPVwibnVtYmVyXCI+eSB2YWx1ZTwvcGFyYW0+XG5cdFx0Ly8vPHBhcmFtIG5hbWU9XCJ3aWR0aFwiIHR5cGU9XCJudW1iZXJcIj5Cb3JkZXIgV2lkdGg8L3BhcmFtPlxuXHRcdC8vLzxwYXJhbSBuYW1lPVwiaGVpZ2h0XCIgdHlwZT1cIm51bWJlclwiPkJvcmRlciBIZWlnaHQ8L3BhcmFtPlxuXHRcdC8vLzxwYXJhbSBuYW1lPVwicmFkaXVzXCIgdHlwZT1cIm51bWJlclwiPkJvcmRlciBDb3JuZXJSYWRpdXM8L3BhcmFtPlxuXHRcdC8vLzxwYXJhbSBuYW1lPVwiYm9yZGVyVGhpY2tuZXNzXCIgdHlwZT1cIm51bWJlclwiPkJvcmRlciBUaGlja2VzczwvcGFyYW0+XG5cdFx0Ly8vPHBhcmFtIG5hbWU9XCJiYWNrZ3JvdW5kQ29sb3JcIiB0eXBlPVwibnVtYmVyXCI+QmFja2dyb3VuZCBDb2xvcjwvcGFyYW0+XG5cdFx0Ly8vPHBhcmFtIG5hbWU9XCJib3JkZXJDb2xvclwiIHR5cGU9XCJudW1iZXJcIj5Cb3JkZXIgQ29sb3I8L3BhcmFtPlxuXHRcdC8vLzwvc2lnbmF0dXJlPlxuXG5cdFx0aWYgKGJhY2tncm91bmRDb2xvcikge1xuXHRcdFx0dGhpcy5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kQ29sb3I7XG5cdFx0fVxuXG5cdFx0aWYgKGJvcmRlckNvbG9yKSB7XG5cdFx0XHR0aGlzLnN0cm9rZVN0eWxlID0gYm9yZGVyQ29sb3I7XG5cdFx0fVxuXG5cdFx0Ly9pZiAodHlwZW9mIHN0cm9rZSA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0Ly9cdHN0cm9rZSA9IHRydWU7XG5cdFx0Ly99XG5cblx0XHRpZiAodHlwZW9mIHJhZGl1cyA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0cmFkaXVzID0gNTtcblx0XHR9XG5cblx0XHR0aGlzLmxpbmVXaWR0aCA9IGJvcmRlclRoaWNrbmVzcztcblxuXHRcdHRoaXMuYmVnaW5QYXRoKCk7XG5cdFx0dGhpcy5tb3ZlVG8oeCArIHJhZGl1cywgeSk7XG5cdFx0dGhpcy5saW5lVG8oeCArIHdpZHRoIC0gcmFkaXVzLCB5KTtcblx0XHR0aGlzLnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5LCB4ICsgd2lkdGgsIHkgKyByYWRpdXMpO1xuXHRcdHRoaXMubGluZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cyk7XG5cdFx0dGhpcy5xdWFkcmF0aWNDdXJ2ZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0KTtcblx0XHR0aGlzLmxpbmVUbyh4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0KTtcblx0XHR0aGlzLnF1YWRyYXRpY0N1cnZlVG8oeCwgeSArIGhlaWdodCwgeCwgeSArIGhlaWdodCAtIHJhZGl1cyk7XG5cdFx0dGhpcy5saW5lVG8oeCwgeSArIHJhZGl1cyk7XG5cdFx0dGhpcy5xdWFkcmF0aWNDdXJ2ZVRvKHgsIHksIHggKyByYWRpdXMsIHkpO1xuXHRcdHRoaXMuY2xvc2VQYXRoKCk7XG5cblx0XHRpZiAoYmFja2dyb3VuZENvbG9yKSB7XG5cdFx0XHR0aGlzLmZpbGwoKTtcblx0XHR9XG5cblx0XHRpZiAoYm9yZGVyQ29sb3IgJiYgYm9yZGVyVGhpY2tuZXNzID4gMCkge1xuXHRcdFx0dGhpcy5zdHJva2UoKTtcblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlTnVtYmVycyhhLCBiKSB7XG5cdHJldHVybiBhIC0gYjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVEYXRhUG9pbnRYKGRhdGFQb2ludDEsIGRhdGFQb2ludDIpIHtcblx0cmV0dXJuIGRhdGFQb2ludDEueCAtIGRhdGFQb2ludDIueDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludFRvSGV4Q29sb3JTdHJpbmcobnVtKSB7XG5cdHZhciByID0gKChudW0gJiAweEZGMDAwMCkgPj4gMTYpLnRvU3RyaW5nKDE2KTtcblx0dmFyIGcgPSAoKG51bSAmIDB4MDBGRjAwKSA+PiA4KS50b1N0cmluZygxNik7XG5cdHZhciBiID0gKChudW0gJiAweDAwMDBGRikgPj4gMCkudG9TdHJpbmcoMTYpO1xuXG5cdHIgPSByLmxlbmd0aCA8IDIgPyBcIjBcIiArIHIgOiByO1xuXHRnID0gZy5sZW5ndGggPCAyID8gXCIwXCIgKyBnIDogZztcblx0YiA9IGIubGVuZ3RoIDwgMiA/IFwiMFwiICsgYiA6IGI7XG5cblx0cmV0dXJuIFwiI1wiICsgciArIGcgKyBiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUkdCVG9JbnQociwgZywgYikge1xuXHR2YXIgbnVtID0gKHIgPDwgMTYpIHwgKGcgPDwgOCkgfCAoYik7XG5cblx0cmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludFRvUkdCKG51bSkge1xuXHR2YXIgcmdiID0gW107XG5cdHZhciByID0gKChudW0gJiAweEZGMDAwMCkgPj4gMTYpO1xuXHR2YXIgZyA9ICgobnVtICYgMHgwMEZGMDApID4+IDgpO1xuXHR2YXIgYiA9ICgobnVtICYgMHgwMDAwRkYpID4+IDApO1xuXG5cdC8vciA9IHIubGVuZ3RoIDwgMiA/IFwiMFwiICsgciA6IHI7XG5cdC8vZyA9IGcubGVuZ3RoIDwgMiA/IFwiMFwiICsgZyA6IGc7XG5cdC8vYiA9IGIubGVuZ3RoIDwgMiA/IFwiMFwiICsgYiA6IGI7XG5cblx0cmdiWzBdID0gcjtcblx0cmdiWzFdID0gZztcblx0cmdiWzJdID0gYjtcblxuXHRyZXR1cm4gcmdiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlJbmRleE9mKGVsdCAvKiwgZnJvbSovKSB7XG5cdHZhciBsZW4gPSB0aGlzLmxlbmd0aCA+Pj4gMDtcblxuXHR2YXIgZnJvbSA9IE51bWJlcihhcmd1bWVudHNbMV0pIHx8IDA7XG5cdGZyb20gPSAoZnJvbSA8IDApXG5cdFx0ID8gTWF0aC5jZWlsKGZyb20pXG5cdFx0IDogTWF0aC5mbG9vcihmcm9tKTtcblx0aWYgKGZyb20gPCAwKVxuXHRcdGZyb20gKz0gbGVuO1xuXG5cdGZvciAoOyBmcm9tIDwgbGVuOyBmcm9tKyspIHtcblx0XHRpZiAoZnJvbSBpbiB0aGlzICYmXG5cdFx0XHR0aGlzW2Zyb21dID09PSBlbHQpXG5cdFx0XHRyZXR1cm4gZnJvbTtcblx0fVxuXHRyZXR1cm4gLTE7XG59O1xuXG4vL0lFOC0gRml4OiBpbmRleE9mIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSUU4LSBmb3IgYXJyYXlzXG5leHBvcnQgZnVuY3Rpb24gYWRkQXJyYXlJbmRleE9mKG9iaikge1xuaWYgKCFvYmouaW5kZXhPZikge1xuXHRvYmouaW5kZXhPZiA9IGFycmF5SW5kZXhPZjtcbn1cblxucmV0dXJuIG9iajtcbn1cblxudmFyIGZvbnRIZWlnaHRJblBpeGVscyA9IHt9O1xudmFyIHRleHRNZWFzdXJlRWwgPSBudWxsO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9udEhlaWdodEluUGl4ZWxzKGZvbnRGYW1pbHksIGZvbnRTaXplLCBmb250V2VpZ2h0KSB7XG5cblx0Ly9yZXR1cm4gZm9udFNpemU7XG5cblx0Zm9udFdlaWdodCA9IGZvbnRXZWlnaHQgfHwgXCJub3JtYWxcIjtcblxuXHR2YXIgZW50cnkgPSBmb250RmFtaWx5ICsgXCJfXCIgKyBmb250U2l6ZSArIFwiX1wiICsgZm9udFdlaWdodDtcblx0dmFyIGhlaWdodCA9IGZvbnRIZWlnaHRJblBpeGVsc1tlbnRyeV07XG5cblx0aWYgKGlzTmFOKGhlaWdodCkpIHtcblx0XHR0cnkge1xuXHRcdFx0dmFyIHN0eWxlID0gXCJwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowcHg7IHRvcDotMjAwMDBweDsgcGFkZGluZzowcHg7bWFyZ2luOjBweDtib3JkZXI6bm9uZTt3aGl0ZS1zcGFjZTpwcmU7bGluZS1oZWlnaHQ6bm9ybWFsO1wiICsgXCJmb250LWZhbWlseTpcIiArIGZvbnRGYW1pbHkgKyBcIjsgXCIgKyBcImZvbnQtc2l6ZTpcIiArIGZvbnRTaXplICsgXCJweDsgZm9udC13ZWlnaHQ6XCIgKyBmb250V2VpZ2h0ICsgXCI7XCI7XG5cdFx0XHQvL2NvbnNvbGUubG9nKHN0eWxlKTtcblx0XHRcdGlmICghdGV4dE1lYXN1cmVFbCkge1xuXHRcdFx0XHR2YXIgYm9keSA9IGRvY3VtZW50LmJvZHk7XG5cdFx0XHRcdHRleHRNZWFzdXJlRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcblx0XHRcdFx0dGV4dE1lYXN1cmVFbC5pbm5lckhUTUwgPSBcIlwiO1xuXHRcdFx0XHR2YXIgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIk1wZ3lpXCIpO1xuXHRcdFx0XHR0ZXh0TWVhc3VyZUVsLmFwcGVuZENoaWxkKHRleHROb2RlKTtcblx0XHRcdFx0Ym9keS5hcHBlbmRDaGlsZCh0ZXh0TWVhc3VyZUVsKTtcblx0XHRcdH1cblxuXHRcdFx0dGV4dE1lYXN1cmVFbC5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdHRleHRNZWFzdXJlRWwuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgc3R5bGUpO1xuXG5cdFx0XHRoZWlnaHQgPSBNYXRoLnJvdW5kKHRleHRNZWFzdXJlRWwub2Zmc2V0SGVpZ2h0KTtcblx0XHRcdHRleHRNZWFzdXJlRWwuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRcdFx0Ly9ib2R5LnJlbW92ZUNoaWxkKHRlbXBEaXYpO1xuXG5cdFx0XHQvL2lmICh3aW5kb3cuY29uc29sZSlcblx0XHRcdC8vXHR3aW5kb3cuY29uc29sZS5sb2coZm9udFNpemUgKyBcIjogXCIgKyBoZWlnaHQpO1xuXHRcdH1cblx0XHRjYXRjaCAoZSkge1xuXHRcdFx0aGVpZ2h0ID0gTWF0aC5jZWlsKGZvbnRTaXplICogMS4xKTtcblx0XHR9XG5cblx0XHRoZWlnaHQgPSBNYXRoLm1heChoZWlnaHQsIGZvbnRTaXplKTtcblxuXHRcdGZvbnRIZWlnaHRJblBpeGVsc1tlbnRyeV0gPSBoZWlnaHQ7XG5cdH1cblxuXHRyZXR1cm4gaGVpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGluZURhc2hBcnJheShsaW5lRGFzaFR5cGUsIGxpbmVUaGlja25lc3MpIHtcblx0bGluZURhc2hUeXBlID0gbGluZURhc2hUeXBlIHx8IFwic29saWRcIjtcblxuXHR2YXIgbGluZURhc2hBcnJheSA9IFtdO1xuXG5cdHZhciBsaW5lRGFzaFR5cGVNYXAgPSB7XG5cdFx0XCJzb2xpZFwiOiBbXSxcblx0XHRcInNob3J0RGFzaFwiOiBbMywgMV0sXG5cdFx0XCJzaG9ydERvdFwiOiBbMSwgMV0sXG5cdFx0XCJzaG9ydERhc2hEb3RcIjogWzMsIDEsIDEsIDFdLFxuXHRcdFwic2hvcnREYXNoRG90RG90XCI6IFszLCAxLCAxLCAxLCAxLCAxXSxcblx0XHRcImRvdFwiOiBbMSwgMl0sXG5cdFx0XCJkYXNoXCI6IFs0LCAyXSxcblx0XHRcImRhc2hEb3RcIjogWzQsIDIsIDEsIDJdLFxuXHRcdFwibG9uZ0Rhc2hcIjogWzgsIDJdLFxuXHRcdFwibG9uZ0Rhc2hEb3RcIjogWzgsIDIsIDEsIDJdLFxuXHRcdFwibG9uZ0Rhc2hEb3REb3RcIjogWzgsIDIsIDEsIDIsIDEsIDJdXG5cdH07XG5cblx0bGluZURhc2hBcnJheSA9IGxpbmVEYXNoVHlwZU1hcFtsaW5lRGFzaFR5cGVdO1xuXG5cdGlmIChsaW5lRGFzaEFycmF5KSB7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVEYXNoQXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxpbmVEYXNoQXJyYXlbaV0gKj0gbGluZVRoaWNrbmVzcztcblx0XHR9XG5cdH0gZWxzZVxuXHRcdGxpbmVEYXNoQXJyYXkgPSBbXTtcblxuXHRyZXR1cm4gbGluZURhc2hBcnJheTtcbn1cblxuLy91c2VyQ2FwdHVyZSBpcyBvcHRpb25hbC4gRGVmYXVsdHMgdG8gZmFsc2VcbmV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudChvYmosIGV2ZW50VHlwZSwgZm4sIHVzZUNhcHR1cmUpIHtcblx0aWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7XG5cdFx0b2JqLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBmbiwgdXNlQ2FwdHVyZSB8fCBmYWxzZSk7XG5cdH1cblx0ZWxzZSBpZiAob2JqLmF0dGFjaEV2ZW50KSB7XG5cdFx0b2JqLmF0dGFjaEV2ZW50KFwib25cIiArIGV2ZW50VHlwZSwgZnVuY3Rpb24gKGUpIHtcblx0XHRcdGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcblx0XHRcdGUucHJldmVudERlZmF1bHQgPSBlLnByZXZlbnREZWZhdWx0IHx8IGZ1bmN0aW9uICgpIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9O1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24gPSBlLnN0b3BQcm9wYWdhdGlvbiB8fCBmdW5jdGlvbiAoKSB7IGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsgfTtcblx0XHRcdGZuLmNhbGwob2JqLCBlKTtcblx0XHR9KTtcblx0fSBlbHNlXG5cdFx0cmV0dXJuIGZhbHNlO1xufVxuXG4vLyNyZWdpb24gZm9ybWF0dGluZyBmdW5jdGlvbnMvbWV0aG9kc1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGVGb3JtYXQoKSB7XG5cblx0dmFyIHJlZyA9IC9EezEsNH18TXsxLDR9fFl7MSw0fXxoezEsMn18SHsxLDJ9fG17MSwyfXxzezEsMn18ZnsxLDN9fHR7MSwyfXxUezEsMn18S3x6ezEsM318XCJbXlwiXSpcInwnW14nXSonL2c7XG5cblx0dmFyIGRlZkRheXMgPSBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXTtcblx0dmFyIGRlZlNob3J0RGF5cyA9IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXTtcblxuXHR2YXIgZGVmTW9udGhzID0gW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl07XG5cdHZhciBkZWZTaG9ydE1vbnRocyA9IFtcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLCBcIk1heVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiXTtcblxuXHR2YXIgdGltZXpvbmUgPSAvXFxiKD86W1BNQ0VBXVtTRFBdVHwoPzpQYWNpZmljfE1vdW50YWlufENlbnRyYWx8RWFzdGVybnxBdGxhbnRpYykgKD86U3RhbmRhcmR8RGF5bGlnaHR8UHJldmFpbGluZykgVGltZXwoPzpHTVR8VVRDKSg/OlstK11cXGR7NH0pPylcXGIvZztcblx0dmFyIHRpbWV6b25lQ2xpcCA9IC9bXi0rXFxkQS1aXS9nO1xuXG5cdHJldHVybiBmdW5jdGlvbiAoZHQsIGZvcm1hdFN0cmluZywgY3VsdHVyZUluZm8pIHtcblxuXHRcdHZhciBkYXlzID0gY3VsdHVyZUluZm8gPyBjdWx0dXJlSW5mby5kYXlzIDogZGVmRGF5cztcblx0XHR2YXIgbW9udGhzID0gY3VsdHVyZUluZm8gPyBjdWx0dXJlSW5mby5tb250aHMgOiBkZWZNb250aHM7XG5cblx0XHR2YXIgc2hvcnREYXlzID0gY3VsdHVyZUluZm8gPyBjdWx0dXJlSW5mby5zaG9ydERheXMgOiBkZWZTaG9ydERheXM7XG5cdFx0dmFyIHNob3J0TW9udGhzID0gY3VsdHVyZUluZm8gPyBjdWx0dXJlSW5mby5zaG9ydE1vbnRocyA6IGRlZlNob3J0TW9udGhzO1xuXG5cdFx0dmFyIHJlc3VsdCA9IFwiXCI7XG5cdFx0dmFyIHV0YyA9IGZhbHNlO1xuXG5cdFx0ZHQgPSBkdCAmJiBkdC5nZXRUaW1lID8gZHQgOiBkdCA/IG5ldyBEYXRlKGR0KSA6IG5ldyBEYXRlO1xuXHRcdGlmIChpc05hTihkdCkpIHRocm93IFN5bnRheEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXG5cdFx0aWYgKGZvcm1hdFN0cmluZy5zbGljZSgwLCA0KSA9PT0gXCJVVEM6XCIpIHtcblx0XHRcdGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zbGljZSg0KTtcblx0XHRcdHV0YyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0dmFyIHByZSA9IHV0YyA/IFwiZ2V0VVRDXCIgOiBcImdldFwiO1xuXHRcdHZhciBkYXRlID0gZHRbcHJlICsgXCJEYXRlXCJdKCk7XG5cdFx0dmFyIGRheSA9IGR0W3ByZSArIFwiRGF5XCJdKCk7XG5cdFx0dmFyIG1vbnRoID0gZHRbcHJlICsgXCJNb250aFwiXSgpO1xuXHRcdHZhciB5ZWFyID0gZHRbcHJlICsgXCJGdWxsWWVhclwiXSgpO1xuXHRcdHZhciBob3VycyA9IGR0W3ByZSArIFwiSG91cnNcIl0oKTtcblx0XHR2YXIgbWludXRlcyA9IGR0W3ByZSArIFwiTWludXRlc1wiXSgpO1xuXHRcdHZhciBzZWNvbmRzID0gZHRbcHJlICsgXCJTZWNvbmRzXCJdKCk7XG5cdFx0dmFyIG1pbGxpc2Vjb25kcyA9IGR0W3ByZSArIFwiTWlsbGlzZWNvbmRzXCJdKCk7XG5cdFx0dmFyIG9mZnNldCA9IHV0YyA/IDAgOiBkdC5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG5cdFx0cmVzdWx0ID0gZm9ybWF0U3RyaW5nLnJlcGxhY2UocmVnLCBmdW5jdGlvbiAoa2V5KSB7XG5cblx0XHRcdHN3aXRjaCAoa2V5KSB7XG5cblx0XHRcdFx0Y2FzZSBcIkRcIjpcblx0XHRcdFx0XHRyZXR1cm4gZGF0ZTtcblx0XHRcdFx0Y2FzZSBcIkREXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHBhZChkYXRlLCAyKTtcblx0XHRcdFx0Y2FzZSBcIkRERFwiOlxuXHRcdFx0XHRcdHJldHVybiBzaG9ydERheXNbZGF5XTtcblx0XHRcdFx0Y2FzZSBcIkRERERcIjpcblx0XHRcdFx0XHRyZXR1cm4gZGF5c1tkYXldO1xuXG5cblx0XHRcdFx0Y2FzZSBcIk1cIjpcblx0XHRcdFx0XHRyZXR1cm4gbW9udGggKyAxO1xuXHRcdFx0XHRjYXNlIFwiTU1cIjpcblx0XHRcdFx0XHRyZXR1cm4gcGFkKG1vbnRoICsgMSwgMik7XG5cdFx0XHRcdGNhc2UgXCJNTU1cIjpcblx0XHRcdFx0XHRyZXR1cm4gc2hvcnRNb250aHNbbW9udGhdO1xuXHRcdFx0XHRjYXNlIFwiTU1NTVwiOlxuXHRcdFx0XHRcdHJldHVybiBtb250aHNbbW9udGhdO1xuXG5cblx0XHRcdFx0Y2FzZSBcIllcIjpcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoU3RyaW5nKHllYXIpLnNsaWNlKC0yKSk7XG5cdFx0XHRcdGNhc2UgXCJZWVwiOlxuXHRcdFx0XHRcdHJldHVybiBwYWQoU3RyaW5nKHllYXIpLnNsaWNlKC0yKSwgMik7XG5cdFx0XHRcdGNhc2UgXCJZWVlcIjpcblx0XHRcdFx0XHRyZXR1cm4gcGFkKFN0cmluZyh5ZWFyKS5zbGljZSgtMyksIDMpO1xuXHRcdFx0XHRjYXNlIFwiWVlZWVwiOlxuXHRcdFx0XHRcdHJldHVybiBwYWQoeWVhciwgNCk7XG5cblxuXHRcdFx0XHRjYXNlIFwiaFwiOlxuXHRcdFx0XHRcdHJldHVybiBob3VycyAlIDEyIHx8IDEyO1xuXHRcdFx0XHRjYXNlIFwiaGhcIjpcblx0XHRcdFx0XHRyZXR1cm4gcGFkKGhvdXJzICUgMTIgfHwgMTIsIDIpO1xuXG5cblx0XHRcdFx0Y2FzZSBcIkhcIjpcblx0XHRcdFx0XHRyZXR1cm4gaG91cnM7XG5cdFx0XHRcdGNhc2UgXCJISFwiOlxuXHRcdFx0XHRcdHJldHVybiBwYWQoaG91cnMsIDIpO1xuXG5cdFx0XHRcdGNhc2UgXCJtXCI6XG5cdFx0XHRcdFx0cmV0dXJuIG1pbnV0ZXM7XG5cdFx0XHRcdGNhc2UgXCJtbVwiOlxuXHRcdFx0XHRcdHJldHVybiBwYWQobWludXRlcywgMik7XG5cblxuXHRcdFx0XHRjYXNlIFwic1wiOlxuXHRcdFx0XHRcdHJldHVybiBzZWNvbmRzO1xuXHRcdFx0XHRjYXNlIFwic3NcIjpcblx0XHRcdFx0XHRyZXR1cm4gcGFkKHNlY29uZHMsIDIpO1xuXG5cdFx0XHRcdGNhc2UgXCJmXCI6XG5cdFx0XHRcdFx0cmV0dXJuIFN0cmluZyhtaWxsaXNlY29uZHMpLnNsaWNlKDAsIDEpO1xuXHRcdFx0XHRjYXNlIFwiZmZcIjpcblx0XHRcdFx0XHRyZXR1cm4gcGFkKFN0cmluZyhtaWxsaXNlY29uZHMpLnNsaWNlKDAsIDIpLCAyKTtcblx0XHRcdFx0Y2FzZSBcImZmZlwiOlxuXHRcdFx0XHRcdHJldHVybiBwYWQoU3RyaW5nKG1pbGxpc2Vjb25kcykuc2xpY2UoMCwgMyksIDMpO1xuXG5cblx0XHRcdFx0Y2FzZSBcInRcIjpcblx0XHRcdFx0XHRyZXR1cm4gaG91cnMgPCAxMiA/IFwiYVwiIDogXCJwXCI7XG5cdFx0XHRcdGNhc2UgXCJ0dFwiOlxuXHRcdFx0XHRcdHJldHVybiBob3VycyA8IDEyID8gXCJhbVwiIDogXCJwbVwiO1xuXHRcdFx0XHRjYXNlIFwiVFwiOlxuXHRcdFx0XHRcdHJldHVybiBob3VycyA8IDEyID8gXCJBXCIgOiBcIlBcIjtcblx0XHRcdFx0Y2FzZSBcIlRUXCI6XG5cdFx0XHRcdFx0cmV0dXJuIGhvdXJzIDwgMTIgPyBcIkFNXCIgOiBcIlBNXCI7XG5cblxuXHRcdFx0XHRjYXNlIFwiS1wiOlxuXHRcdFx0XHRcdHJldHVybiB1dGMgPyBcIlVUQ1wiIDogKFN0cmluZyhkdCkubWF0Y2godGltZXpvbmUpIHx8IFtcIlwiXSkucG9wKCkucmVwbGFjZSh0aW1lem9uZUNsaXAsIFwiXCIpOyAvLyBUaW1lIFpvbmU7XG5cdFx0XHRcdGNhc2UgXCJ6XCI6XG5cdFx0XHRcdFx0cmV0dXJuIChvZmZzZXQgPiAwID8gXCItXCIgOiBcIitcIikgKyBNYXRoLmZsb29yKE1hdGguYWJzKG9mZnNldCkgLyA2MCk7IC8vIEhvdXIgT2Zmc2V0IGZyb20gVVRDIHdpdGhvdXQgcGFkZGluZ1xuXHRcdFx0XHRjYXNlIFwienpcIjpcblx0XHRcdFx0XHRyZXR1cm4gKG9mZnNldCA+IDAgPyBcIi1cIiA6IFwiK1wiKSArIHBhZChNYXRoLmZsb29yKE1hdGguYWJzKG9mZnNldCkgLyA2MCksIDIpOyAvLyBIb3VyIE9mZnNldCBmcm9tIFVUQyB3aXRoIHBhZGRpbmdcblx0XHRcdFx0Y2FzZSBcInp6elwiOlxuXHRcdFx0XHRcdHJldHVybiAob2Zmc2V0ID4gMCA/IFwiLVwiIDogXCIrXCIpICsgcGFkKE1hdGguZmxvb3IoTWF0aC5hYnMob2Zmc2V0KSAvIDYwKSwgMikgKyBwYWQoTWF0aC5hYnMob2Zmc2V0KSAlIDYwLCAyKTsgLy8gSG91ciBhbmQgTWludXRlIE9mZnNldCBmcm9tIFVUQyB3aXRoIHBhZGRpbmdcblxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHJldHVybiBrZXkuc2xpY2UoMSwga2V5Lmxlbmd0aCAtIDEpO1xuXG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlckZvcm1hdCh2LCBmcywgY3VsdHVyZUluZm8pIHtcblx0aWYgKHYgPT09IG51bGwpXG5cdFx0cmV0dXJuIFwiXCI7XG5cblx0diA9IE51bWJlcih2KTtcblx0dmFyIGlzTmVnYXRpdmUgPSB2IDwgMCA/IHRydWUgOiBmYWxzZTtcblx0aWYgKGlzTmVnYXRpdmUpIHYgKj0gLTE7XG5cblx0dmFyIGRlY2ltYWxTZXBhcmF0b3IgPSBjdWx0dXJlSW5mbyA/IGN1bHR1cmVJbmZvLmRlY2ltYWxTZXBhcmF0b3IgOiBcIi5cIjtcblx0dmFyIGRpZ2l0R3JvdXBTZXBhcmF0b3IgPSBjdWx0dXJlSW5mbyA/IGN1bHR1cmVJbmZvLmRpZ2l0R3JvdXBTZXBhcmF0b3IgOiBcIixcIjtcblxuXHR2YXIgdlN0cmluZyA9IFwiXCI7XG5cdGZzID0gU3RyaW5nKGZzKTtcblx0dmFyIG11bHRpcGxpZXIgPSAxO1xuXHR2YXIgdGVtcDtcblx0dmFyIHJlc3VsdCA9IFwiXCI7XG5cblx0dmFyIG1hdGNoZXMgPSBcIlwiO1xuXHR2YXIgZGVjaW1hbFBvc2l0aW9uID0gLTE7XG5cdHZhciBmc0JlZm9yZURlY2ltYWwgPSBbXTtcblx0dmFyIGZzQWZ0ZXJEZWNpbWFsID0gW107XG5cdHZhciBub1BoQmVmb3JlRGVjaW1hbCA9IDA7IC8vIE51bWJlciBvZiBQbGFjZWhvbGRlcnMgYmVmb3JlIERlY2ltYWxcblx0dmFyIG5vUGhBZnRlckRlY2ltYWwgPSAwOyAvLyBOdW1iZXIgb2YgUGxhY2Vob2xkZXJzIGFmdGVyIERlY2ltYWxcblx0dmFyIG5vQ29tbWEgPSAwO1xuXHR2YXIgaXNTY2llbnRpZmljTm90YXRpb24gPSBmYWxzZTtcblx0dmFyIGV4cG9uZW50ID0gMDtcblxuXHRtYXRjaGVzID0gZnMubWF0Y2goL1wiW15cIl0qXCJ8J1teJ10qJ3xbZUVdWystXSpbMF0rfFssXStbLl184oCwfC4vZyk7XG5cdC8vd2luZG93LmNvbnNvbGUubG9nKG1hdGNoZXMgKyBcIiA9IFwiICsgbWF0Y2hlcy5sZW5ndGgpO1xuXHR2YXIgbWF0Y2ggPSBudWxsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBtYXRjaGVzICYmIGkgPCBtYXRjaGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0bWF0Y2ggPSBtYXRjaGVzW2ldO1xuXG5cdFx0aWYgKG1hdGNoID09PSBcIi5cIiAmJiBkZWNpbWFsUG9zaXRpb24gPCAwKSB7XG5cdFx0XHRkZWNpbWFsUG9zaXRpb24gPSBpO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fSBlbHNlIGlmIChtYXRjaCA9PT0gXCIlXCIpIHtcblx0XHRcdG11bHRpcGxpZXIgKj0gMTAwO1xuXHRcdH0gZWxzZSBpZiAobWF0Y2ggPT09IFwi4oCwXCIpIHtcblx0XHRcdG11bHRpcGxpZXIgKj0gMTAwMDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH0gZWxzZSBpZiAobWF0Y2hbMF0gPT09IFwiLFwiICYmIG1hdGNoW21hdGNoLmxlbmd0aCAtIDFdID09PSBcIi5cIikge1xuXHRcdFx0bXVsdGlwbGllciAvPSBNYXRoLnBvdygxMDAwLCBtYXRjaC5sZW5ndGggLSAxKTtcblx0XHRcdGRlY2ltYWxQb3NpdGlvbiA9IGkgKyBtYXRjaC5sZW5ndGggLSAxO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fSBlbHNlIGlmICgobWF0Y2hbMF0gPT09IFwiRVwiIHx8IG1hdGNoWzBdID09PSBcImVcIikgJiYgbWF0Y2hbbWF0Y2gubGVuZ3RoIC0gMV0gPT09IFwiMFwiKSB7XG5cdFx0XHRpc1NjaWVudGlmaWNOb3RhdGlvbiA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGRlY2ltYWxQb3NpdGlvbiA8IDApIHtcblx0XHRcdGZzQmVmb3JlRGVjaW1hbC5wdXNoKG1hdGNoKTtcblx0XHRcdGlmIChtYXRjaCA9PT0gXCIjXCIgfHwgbWF0Y2ggPT09IFwiMFwiKVxuXHRcdFx0XHRub1BoQmVmb3JlRGVjaW1hbCsrO1xuXHRcdFx0ZWxzZSBpZiAobWF0Y2ggPT09IFwiLFwiKVxuXHRcdFx0XHRub0NvbW1hKys7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0ZnNBZnRlckRlY2ltYWwucHVzaChtYXRjaCk7XG5cdFx0XHRpZiAobWF0Y2ggPT09IFwiI1wiIHx8IG1hdGNoID09PSBcIjBcIilcblx0XHRcdFx0bm9QaEFmdGVyRGVjaW1hbCsrO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpc1NjaWVudGlmaWNOb3RhdGlvbikge1xuXHRcdHZhciBpbnRlZ2VyID0gTWF0aC5mbG9vcih2KTtcblx0XHRleHBvbmVudCA9IChpbnRlZ2VyID09PSAwID8gXCJcIiA6IFN0cmluZyhpbnRlZ2VyKSkubGVuZ3RoIC0gbm9QaEJlZm9yZURlY2ltYWw7XG5cdFx0bXVsdGlwbGllciAvPSBNYXRoLnBvdygxMCwgZXhwb25lbnQpO1xuXHR9XG5cblx0diAqPSBtdWx0aXBsaWVyO1xuXG5cdGlmIChkZWNpbWFsUG9zaXRpb24gPCAwKVxuXHRcdGRlY2ltYWxQb3NpdGlvbiA9IGk7XG5cblx0dlN0cmluZyA9IHYudG9GaXhlZChub1BoQWZ0ZXJEZWNpbWFsKTtcblx0dmFyIHNwbGl0ID0gdlN0cmluZy5zcGxpdChcIi5cIik7XG5cdC8vd2luZG93LmNvbnNvbGUubG9nKHNwbGl0KTtcblx0dmFyIHZTdHJpbmdCZWZvcmVEZWNpbWFsID0gKHNwbGl0WzBdICsgXCJcIikuc3BsaXQoXCJcIik7XG5cdHZhciB2U3RyaW5nQWZ0ZXJEZWNpbWFsID0gKHNwbGl0WzFdICsgXCJcIikuc3BsaXQoXCJcIik7XG5cblx0aWYgKHZTdHJpbmdCZWZvcmVEZWNpbWFsICYmIHZTdHJpbmdCZWZvcmVEZWNpbWFsWzBdID09PSBcIjBcIilcblx0XHR2U3RyaW5nQmVmb3JlRGVjaW1hbC5zaGlmdCgpO1xuXG5cdC8vd2luZG93LmNvbnNvbGUubG9nKGZzQmVmb3JlRGVjaW1hbCArIFwiPC0tLS0tLS0tLS0+XCIgKyBmc0FmdGVyRGVjaW1hbCArIFwiICYgICAgICAgIFwiICsgdlN0cmluZ0JlZm9yZURlY2ltYWwgKyBcIjwtLS0tLS0tLS0tPlwiICsgdlN0cmluZ0FmdGVyRGVjaW1hbCk7XG5cblx0dmFyIG5vUGhQcm9jZXNzZWQgPSAwO1xuXHR2YXIgbm9EaWdpdHNBZGRlZCA9IDA7XG5cdHZhciBub0NvbW1hQWRkZWQgPSAwO1xuXHR2YXIgY29tbWFEaXN0YW5jZSA9IDA7XG5cdHZhciBkaXN0YW5jZUZyb21MYXN0Q29tbWEgPSAwO1xuXG5cdHdoaWxlIChmc0JlZm9yZURlY2ltYWwubGVuZ3RoID4gMCkge1xuXHRcdG1hdGNoID0gZnNCZWZvcmVEZWNpbWFsLnBvcCgpO1xuXG5cdFx0aWYgKG1hdGNoID09PSBcIiNcIiB8fCBtYXRjaCA9PT0gXCIwXCIpIHtcblx0XHRcdG5vUGhQcm9jZXNzZWQrKztcblxuXHRcdFx0aWYgKG5vUGhQcm9jZXNzZWQgPT09IG5vUGhCZWZvcmVEZWNpbWFsKSB7XG5cdFx0XHRcdHZhciBkaWdpdHMgPSB2U3RyaW5nQmVmb3JlRGVjaW1hbDtcblx0XHRcdFx0dlN0cmluZ0JlZm9yZURlY2ltYWwgPSBbXTtcblxuXHRcdFx0XHRpZiAobWF0Y2ggPT09IFwiMFwiKSB7XG5cdFx0XHRcdFx0Ly92YXIgdG90YWxEaWdpdHMgPSByZXN1bHQubWF0Y2goL1swLTldL2cpLmxlbmd0aDtcblx0XHRcdFx0XHR2YXIgdG9QYWQgPSBub1BoQmVmb3JlRGVjaW1hbCAtIG5vRGlnaXRzQWRkZWQgLSAoZGlnaXRzID8gZGlnaXRzLmxlbmd0aCA6IDApO1xuXG5cdFx0XHRcdFx0d2hpbGUgKHRvUGFkID4gMCkge1xuXHRcdFx0XHRcdFx0ZGlnaXRzLnVuc2hpZnQoXCIwXCIpO1xuXHRcdFx0XHRcdFx0dG9QYWQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3aGlsZSAoZGlnaXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRyZXN1bHQgPSBkaWdpdHMucG9wKCkgKyByZXN1bHQ7XG5cdFx0XHRcdFx0ZGlzdGFuY2VGcm9tTGFzdENvbW1hKys7XG5cblx0XHRcdFx0XHRpZiAoZGlzdGFuY2VGcm9tTGFzdENvbW1hICUgY29tbWFEaXN0YW5jZSA9PT0gMCAmJiBub0NvbW1hQWRkZWQgPT09IG5vQ29tbWEgJiYgZGlnaXRzLmxlbmd0aCA+IDApXG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBkaWdpdEdyb3VwU2VwYXJhdG9yICsgcmVzdWx0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzTmVnYXRpdmUpXG5cdFx0XHRcdFx0cmVzdWx0ID0gXCItXCIgKyByZXN1bHQ7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICh2U3RyaW5nQmVmb3JlRGVjaW1hbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gdlN0cmluZ0JlZm9yZURlY2ltYWwucG9wKCkgKyByZXN1bHQ7XG5cdFx0XHRcdFx0bm9EaWdpdHNBZGRlZCsrO1xuXHRcdFx0XHRcdGRpc3RhbmNlRnJvbUxhc3RDb21tYSsrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKG1hdGNoID09PSBcIjBcIikge1xuXHRcdFx0XHRcdHJlc3VsdCA9IFwiMFwiICsgcmVzdWx0O1xuXHRcdFx0XHRcdG5vRGlnaXRzQWRkZWQrKztcblx0XHRcdFx0XHRkaXN0YW5jZUZyb21MYXN0Q29tbWErKztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkaXN0YW5jZUZyb21MYXN0Q29tbWEgJSBjb21tYURpc3RhbmNlID09PSAwICYmIG5vQ29tbWFBZGRlZCA9PT0gbm9Db21tYSAmJiB2U3RyaW5nQmVmb3JlRGVjaW1hbC5sZW5ndGggPiAwKVxuXHRcdFx0XHRcdHJlc3VsdCA9IGRpZ2l0R3JvdXBTZXBhcmF0b3IgKyByZXN1bHQ7XG5cdFx0XHR9XG5cblxuXHRcdH0gZWxzZSBpZiAoKG1hdGNoWzBdID09PSBcIkVcIiB8fCBtYXRjaFswXSA9PT0gXCJlXCIpICYmIG1hdGNoW21hdGNoLmxlbmd0aCAtIDFdID09PSBcIjBcIiAmJiAvW2VFXVsrLV0qWzBdKy8udGVzdChtYXRjaCkpIHtcblx0XHRcdGlmIChleHBvbmVudCA8IDApXG5cdFx0XHRcdG1hdGNoID0gbWF0Y2gucmVwbGFjZShcIitcIiwgXCJcIikucmVwbGFjZShcIi1cIiwgXCJcIik7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdG1hdGNoID0gbWF0Y2gucmVwbGFjZShcIi1cIiwgXCJcIik7XG5cblx0XHRcdHJlc3VsdCArPSBtYXRjaC5yZXBsYWNlKC9bMF0rLywgZnVuY3Rpb24gKCQwKSB7XG5cdFx0XHRcdHJldHVybiBwYWQoZXhwb25lbnQsICQwLmxlbmd0aCk7XG5cdFx0XHR9KTtcblxuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChtYXRjaCA9PT0gXCIsXCIpIHtcblx0XHRcdFx0bm9Db21tYUFkZGVkKys7XG5cdFx0XHRcdGNvbW1hRGlzdGFuY2UgPSBkaXN0YW5jZUZyb21MYXN0Q29tbWE7XG5cdFx0XHRcdGRpc3RhbmNlRnJvbUxhc3RDb21tYSA9IDA7XG5cblx0XHRcdFx0aWYgKHZTdHJpbmdCZWZvcmVEZWNpbWFsLmxlbmd0aCA+IDApXG5cdFx0XHRcdFx0cmVzdWx0ID0gZGlnaXRHcm91cFNlcGFyYXRvciArIHJlc3VsdDtcblx0XHRcdH0gZWxzZSBpZiAobWF0Y2gubGVuZ3RoID4gMSAmJiAoKG1hdGNoWzBdID09PSBcIlxcXCJcIiAmJiBtYXRjaFttYXRjaC5sZW5ndGggLSAxXSA9PT0gXCJcXFwiXCIpIHx8IChtYXRjaFswXSA9PT0gXCInXCIgJiYgbWF0Y2hbbWF0Y2gubGVuZ3RoIC0gMV0gPT09IFwiJ1wiKSkpIHtcblx0XHRcdFx0cmVzdWx0ID0gbWF0Y2guc2xpY2UoMSwgbWF0Y2gubGVuZ3RoIC0gMSkgKyByZXN1bHQ7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJlc3VsdCA9IG1hdGNoICsgcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdHZhciBjaGFyQ291bnQgPSAwO1xuXHR2YXIgcmVzdWx0QWZ0ZXJEZWNpbWFsID0gXCJcIjtcblx0dmFyIGFkZERlY2ltYWxTZXBhcmF0b3IgPSBmYWxzZTtcblxuXHR3aGlsZSAoZnNBZnRlckRlY2ltYWwubGVuZ3RoID4gMCkge1xuXHRcdG1hdGNoID0gZnNBZnRlckRlY2ltYWwuc2hpZnQoKTtcblxuXHRcdGlmIChtYXRjaCA9PT0gXCIjXCIgfHwgbWF0Y2ggPT09IFwiMFwiKSB7XG5cdFx0XHRpZiAodlN0cmluZ0FmdGVyRGVjaW1hbC5sZW5ndGggPiAwICYmIE51bWJlcih2U3RyaW5nQWZ0ZXJEZWNpbWFsLmpvaW4oXCJcIikpICE9PSAwKSB7XG5cdFx0XHRcdHJlc3VsdEFmdGVyRGVjaW1hbCArPSB2U3RyaW5nQWZ0ZXJEZWNpbWFsLnNoaWZ0KCk7XG5cdFx0XHRcdGFkZERlY2ltYWxTZXBhcmF0b3IgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAobWF0Y2ggPT09IFwiMFwiKSB7XG5cdFx0XHRcdHJlc3VsdEFmdGVyRGVjaW1hbCArPSBcIjBcIjtcblx0XHRcdFx0YWRkRGVjaW1hbFNlcGFyYXRvciA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChtYXRjaC5sZW5ndGggPiAxICYmICgobWF0Y2hbMF0gPT09IFwiXFxcIlwiICYmIG1hdGNoW21hdGNoLmxlbmd0aCAtIDFdID09PSBcIlxcXCJcIikgfHwgKG1hdGNoWzBdID09PSBcIidcIiAmJiBtYXRjaFttYXRjaC5sZW5ndGggLSAxXSA9PT0gXCInXCIpKSkge1xuXHRcdFx0cmVzdWx0QWZ0ZXJEZWNpbWFsICs9IG1hdGNoLnNsaWNlKDEsIG1hdGNoLmxlbmd0aCAtIDEpO1xuXHRcdFx0Ly9hZGREZWNpbWFsU2VwYXJhdG9yID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKChtYXRjaFswXSA9PT0gXCJFXCIgfHwgbWF0Y2hbMF0gPT09IFwiZVwiKSAmJiBtYXRjaFttYXRjaC5sZW5ndGggLSAxXSA9PT0gXCIwXCIgJiYgL1tlRV1bKy1dKlswXSsvLnRlc3QobWF0Y2gpKSB7XG5cdFx0XHRpZiAoZXhwb25lbnQgPCAwKVxuXHRcdFx0XHRtYXRjaCA9IG1hdGNoLnJlcGxhY2UoXCIrXCIsIFwiXCIpLnJlcGxhY2UoXCItXCIsIFwiXCIpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRtYXRjaCA9IG1hdGNoLnJlcGxhY2UoXCItXCIsIFwiXCIpO1xuXHRcdFx0cmVzdWx0QWZ0ZXJEZWNpbWFsICs9IG1hdGNoLnJlcGxhY2UoL1swXSsvLCBmdW5jdGlvbiAoJDApIHtcblx0XHRcdFx0cmV0dXJuIHBhZChleHBvbmVudCwgJDAubGVuZ3RoKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHRBZnRlckRlY2ltYWwgKz0gbWF0Y2g7XG5cdFx0XHQvL2FkZERlY2ltYWxTZXBhcmF0b3IgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHJlc3VsdCArPSAoYWRkRGVjaW1hbFNlcGFyYXRvciA/IGRlY2ltYWxTZXBhcmF0b3IgOiBcIlwiKSArIHJlc3VsdEFmdGVyRGVjaW1hbDtcblx0Ly93aW5kb3cuY29uc29sZS5sb2cocmVzdWx0KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vI2VuZHJlZ2lvbiBmb3JtYXR0aW5nIGZ1bmN0aW9ucy9tZXRob2RzXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPYmplY3RJZCh4LCB5LCBjdHgpIHtcblx0eCAqPSBkZXZpY2VQaXhlbEJhY2tpbmdTdG9yZVJhdGlvO1xuXHR5ICo9IGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW87XG5cdHZhciBwaXhlbHMgPSBjdHguZ2V0SW1hZ2VEYXRhKHgsIHksIDIsIDIpLmRhdGE7XG5cdHZhciBpc09iamVjdCA9IHRydWU7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblxuXHRcdGlmIChwaXhlbHNbaV0gIT09IHBpeGVsc1tpICsgNF0gfCBwaXhlbHNbaV0gIT09IHBpeGVsc1tpICsgOF0gfCBwaXhlbHNbaV0gIT09IHBpeGVsc1tpICsgMTJdKSB7XG5cdFx0XHRpc09iamVjdCA9IGZhbHNlO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGlzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIFJHQlRvSW50KHBpeGVsc1swXSwgcGl4ZWxzWzFdLCBwaXhlbHNbMl0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Ly93aW5kb3cuY29uc29sZS5sb2cocGl4ZWxzKTtcbn1cblxuLy9leHRyYWN0cyBtb3VzZSBjb29yZGluYXRlcyBmcm9tIHRoZSBldmVudCBwYXJhbWV0ZXJzXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW91c2VDb29yZGluYXRlcyhldikge1xuXHR2YXIgeCA9IDA7XG5cdHZhciB5ID0gMDtcblxuXHRldiA9IGV2IHx8IHdpbmRvdy5ldmVudDtcblxuXHRpZiAoZXYub2Zmc2V0WCB8fCBldi5vZmZzZXRYID09PSAwKSB7XG5cdFx0eCA9IGV2Lm9mZnNldFg7XG5cdFx0eSA9IGV2Lm9mZnNldFk7XG5cdH0gZWxzZSBpZiAoZXYubGF5ZXJYIHx8IGV2LmxheWVyWCA9PSAwKSB7IC8vIEZpcmVmb3hcblx0XHR4ID0gZXYubGF5ZXJYO1xuXHRcdHkgPSBldi5sYXllclk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0eCA9IGV2LnBhZ2VYIC0gZXYudGFyZ2V0Lm9mZnNldExlZnQ7XG5cdFx0eSA9IGV2LnBhZ2VZIC0gZXYudGFyZ2V0Lm9mZnNldFRvcDtcblx0fVxuXG5cdHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb250U3RyaW5nKHByZWZpeCwgb2JqZWN0LCBmYWxsYmFja09iamVjdCkge1xuXHR2YXIgZm9udFN0cmluZyA9IFwiXCI7XG5cblx0dmFyIGZvbnRTdHlsZVN0cmluZyA9IHByZWZpeCA/IHByZWZpeCArIFwiRm9udFN0eWxlXCIgOiBcImZvbnRTdHlsZVwiO1xuXHR2YXIgZm9udFdlaWdodFN0cmluZyA9IHByZWZpeCA/IHByZWZpeCArIFwiRm9udFdlaWdodFwiIDogXCJmb250V2VpZ2h0XCI7XG5cdHZhciBmb250U2l6ZVN0cmluZyA9IHByZWZpeCA/IHByZWZpeCArIFwiRm9udFNpemVcIiA6IFwiZm9udFNpemVcIjtcblx0dmFyIGZvbnRGYW1pbHlTdHJpbmcgPSBwcmVmaXggPyBwcmVmaXggKyBcIkZvbnRGYW1pbHlcIiA6IFwiZm9udEZhbWlseVwiO1xuXG5cblxuXHRmb250U3RyaW5nICs9IG9iamVjdFtmb250U3R5bGVTdHJpbmddID8gb2JqZWN0W2ZvbnRTdHlsZVN0cmluZ10gKyBcIiBcIiA6IChmYWxsYmFja09iamVjdCAmJiBmYWxsYmFja09iamVjdFtmb250U3R5bGVTdHJpbmddKSA/IChmYWxsYmFja09iamVjdFtmb250U3R5bGVTdHJpbmddICsgXCIgXCIpIDogXCJcIjtcblx0Zm9udFN0cmluZyArPSBvYmplY3RbZm9udFdlaWdodFN0cmluZ10gPyBvYmplY3RbZm9udFdlaWdodFN0cmluZ10gKyBcIiBcIiA6IChmYWxsYmFja09iamVjdCAmJiBmYWxsYmFja09iamVjdFtmb250V2VpZ2h0U3RyaW5nXSkgPyAoZmFsbGJhY2tPYmplY3RbZm9udFdlaWdodFN0cmluZ10gKyBcIiBcIikgOiBcIlwiO1xuXHRmb250U3RyaW5nICs9IG9iamVjdFtmb250U2l6ZVN0cmluZ10gPyBvYmplY3RbZm9udFNpemVTdHJpbmddICsgXCJweCBcIiA6IChmYWxsYmFja09iamVjdCAmJiBmYWxsYmFja09iamVjdFtmb250U2l6ZVN0cmluZ10pID8gKGZhbGxiYWNrT2JqZWN0W2ZvbnRTaXplU3RyaW5nXSArIFwicHggXCIpIDogXCJcIjtcblxuXG5cdHZhciBmb250RmFtaWx5ID0gb2JqZWN0W2ZvbnRGYW1pbHlTdHJpbmddID8gb2JqZWN0W2ZvbnRGYW1pbHlTdHJpbmddICsgXCJcIiA6IChmYWxsYmFja09iamVjdCAmJiBmYWxsYmFja09iamVjdFtmb250RmFtaWx5U3RyaW5nXSkgPyAoZmFsbGJhY2tPYmplY3RbZm9udEZhbWlseVN0cmluZ10gKyBcIlwiKSA6IFwiXCI7XG5cblx0aWYgKCFpc0NhbnZhc1N1cHBvcnRlZCAmJiBmb250RmFtaWx5KSB7XG5cdFx0dmFyIGZpcnN0Rm9udEZhbWlseSA9IGZvbnRGYW1pbHkuc3BsaXQoXCIsXCIpWzBdO1xuXG5cdFx0aWYgKGZpcnN0Rm9udEZhbWlseVswXSAhPT0gXCInXCIgJiYgZmlyc3RGb250RmFtaWx5WzBdICE9PSBcIlxcXCJcIilcblx0XHRcdGZpcnN0Rm9udEZhbWlseSA9IFwiJ1wiICsgZmlyc3RGb250RmFtaWx5ICsgXCInXCI7XG5cblx0XHRmb250U3RyaW5nICs9IGZpcnN0Rm9udEZhbWlseTtcblx0fSBlbHNlXG5cdFx0Zm9udFN0cmluZyArPSBmb250RmFtaWx5O1xuXG5cdHJldHVybiBmb250U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBvYmplY3QsIGZhbGxiYWNrT2JqZWN0KSB7XG5cblx0dmFyIHZhbHVlID0gcHJvcGVydHlOYW1lIGluIG9iamVjdCA/IG9iamVjdFtwcm9wZXJ0eU5hbWVdIDogZmFsbGJhY2tPYmplY3RbcHJvcGVydHlOYW1lXTtcblxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbnZhciBvcHRpbWl6ZUZvckhpRFBJID0gdHJ1ZTtcbi8vb3B0aW1pemVGb3JIaURQSSA9IGZhbHNlO1xuXG52YXIgZGV2aWNlUGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG52YXIgYmFja2luZ1N0b3JlUmF0aW8gPSAxO1xudmFyIGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW8gPSBvcHRpbWl6ZUZvckhpRFBJID8gZGV2aWNlUGl4ZWxSYXRpbyAvIGJhY2tpbmdTdG9yZVJhdGlvIDogMTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldENhbnZhc1NpemUoY2FudmFzLCB3aWR0aCwgaGVpZ2h0KSB7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkICYmICEhb3B0aW1pemVGb3JIaURQSSkge1xuXHRcdHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuXHRcdGJhY2tpbmdTdG9yZVJhdGlvID0gY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcblx0XHRcdFx0XHRcdFx0Y3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcblx0XHRcdFx0XHRcdFx0Y3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuXHRcdFx0XHRcdFx0XHRjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcblx0XHRcdFx0XHRcdFx0Y3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgMTtcblxuXG5cdFx0ZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbyA9IGRldmljZVBpeGVsUmF0aW8gLyBiYWNraW5nU3RvcmVSYXRpbztcblxuXHRcdGNhbnZhcy53aWR0aCA9IHdpZHRoICogZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbztcblx0XHRjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbztcblxuXHRcdGlmIChkZXZpY2VQaXhlbFJhdGlvICE9PSBiYWNraW5nU3RvcmVSYXRpbykge1xuXG5cdFx0XHRjYW52YXMuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG5cdFx0XHRjYW52YXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcblxuXHRcdFx0Y3R4LnNjYWxlKGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW8sIGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW8pO1xuXG5cdFx0fVxuXG5cdFx0Ly93aW5kb3cuYWxlcnQoYmFja2luZ1N0b3JlUmF0aW8pO1xuXHRcdC8vd2luZG93LmFsZXJ0KGRldmljZVBpeGVsUmF0aW8pO1xuXG5cdH0gZWxzZSB7XG5cdFx0Y2FudmFzLndpZHRoID0gd2lkdGg7XG5cdFx0Y2FudmFzLmhlaWdodCA9IGhlaWdodDtcblx0fVxuXG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KSB7XG5cdHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuXHRjYW52YXMuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJjYW52YXNqcy1jaGFydC1jYW52YXNcIik7XG5cblx0c2V0Q2FudmFzU2l6ZShjYW52YXMsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdGlmICghaXNDYW52YXNTdXBwb3J0ZWQgJiYgdHlwZW9mIChHX3ZtbENhbnZhc01hbmFnZXIpICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0R192bWxDYW52YXNNYW5hZ2VyLmluaXRFbGVtZW50KGNhbnZhcyk7XG5cdH1cblxuXHRyZXR1cm4gY2FudmFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0Q2FudmFzKGNhbnZhcywgZm9ybWF0LCBmaWxlTmFtZSkge1xuXHRpZiAoIWNhbnZhcyB8fCAhZm9ybWF0IHx8ICFmaWxlTmFtZSlcblx0XHRyZXR1cm47XG5cblx0dmFyIGZ1bGxGaWxlTmFtZSA9IGZpbGVOYW1lICsgXCIuXCIgKyAoZm9ybWF0ID09PSBcImpwZWdcIiA/IFwianBnXCIgOiBmb3JtYXQpO1xuXHR2YXIgbWltZVR5cGUgPSBcImltYWdlL1wiICsgZm9ybWF0O1xuXHR2YXIgaW1nID0gY2FudmFzLnRvRGF0YVVSTChtaW1lVHlwZSk7XG5cdHZhciBzYXZlZCA9IGZhbHNlO1xuXG5cdHZhciBkb3dubG9hZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcblx0ZG93bmxvYWRMaW5rLmRvd25sb2FkID0gZnVsbEZpbGVOYW1lO1xuXHRkb3dubG9hZExpbmsuaHJlZiA9IGltZztcblx0ZG93bmxvYWRMaW5rLnRhcmdldCA9IFwiX2JsYW5rXCI7XG5cdHZhciBlO1xuXG5cblx0aWYgKHR5cGVvZiAoQmxvYikgIT09IFwidW5kZWZpbmVkXCIgJiYgISFuZXcgQmxvYigpKSB7XG5cblx0XHQvL2FsZXJ0KFwiYmxvYlwiKTtcblx0XHR2YXIgaW1nRGF0YSA9IGltZy5yZXBsYWNlKC9eZGF0YTpbYS16L10qO2Jhc2U2NCwvLCAnJyk7XG5cblx0XHR2YXIgYnl0ZVN0cmluZyA9IGF0b2IoaW1nRGF0YSk7XG5cdFx0dmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XG5cdFx0dmFyIGludEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcblx0XHRcdGludEFycmF5W2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuXHRcdH1cblxuXHRcdHZhciBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogXCJpbWFnZS9cIiArIGZvcm1hdCB9KTtcblxuXHRcdC8vIFNhdmUgdGhlIGJsb2Jcblx0XHR0cnkge1xuXHRcdFx0d2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKGJsb2IsIGZ1bGxGaWxlTmFtZSk7XG5cdFx0XHRzYXZlZCA9IHRydWU7XG5cdFx0fVxuXHRcdGNhdGNoIChlKSB7XG5cdFx0XHRkb3dubG9hZExpbmsuZGF0YXNldC5kb3dubG9hZHVybCA9IFttaW1lVHlwZSwgZG93bmxvYWRMaW5rLmRvd25sb2FkLCBkb3dubG9hZExpbmsuaHJlZl0uam9pbignOicpO1xuXHRcdFx0ZG93bmxvYWRMaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIXNhdmVkKSB7XG5cblx0XHR0cnkge1xuXG5cdFx0XHRldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudHNcIik7XG5cblx0XHRcdGV2ZW50LmluaXRNb3VzZUV2ZW50KFwiY2xpY2tcIiwgdHJ1ZSwgZmFsc2UsIHdpbmRvdyxcblx0XHRcdFx0XHRcdFx0IDAsIDAsIDAsIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsXG5cdFx0XHRcdFx0XHRcdCBmYWxzZSwgMCwgbnVsbCk7XG5cblx0XHRcdGlmIChkb3dubG9hZExpbmsuZGlzcGF0Y2hFdmVudCkge1xuXHRcdFx0XHQvL2FsZXJ0KFwiZGlzcGF0Y2hFdmVudFwiKTtcblx0XHRcdFx0ZG93bmxvYWRMaW5rLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoZG93bmxvYWRMaW5rLmZpcmVFdmVudCkge1xuXHRcdFx0XHQvL2FsZXJ0KFwiZmlyZUV2ZW50XCIpO1xuXHRcdFx0XHRkb3dubG9hZExpbmsuZmlyZUV2ZW50KFwib25jbGlja1wiKTtcblx0XHRcdH1cblxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHZhciB3aW4gPSB3aW5kb3cub3BlbigpO1xuXHRcdFx0Ly9hbGVydChcIjxJRTEwXCIpO1xuXHRcdFx0Ly93aW5kb3cuY29uc29sZS5sb2coXCJJRVwiKTtcblx0XHRcdHdpbi5kb2N1bWVudC53cml0ZShcIjxpbWcgc3JjPSdcIiArIGltZyArIFwiJz48L2ltZz48ZGl2PlBsZWFzZSByaWdodCBjbGljayBvbiB0aGUgaW1hZ2UgYW5kIHNhdmUgaXQgdG8geW91ciBkZXZpY2U8L2Rpdj5cIik7XG5cdFx0XHR3aW4uZG9jdW1lbnQuY2xvc2UoKTtcblx0XHR9XG5cdH1cbn1cblxudmFyIGJhc2U2NEltYWdlcyA9IHtcblx0cmVzZXQ6IHtcblx0XHRpbWFnZTogXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQWNDQVlBQUFBQXdyMGlBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQUxFZ0FBQ3hJQjB0MSsvQUFBQUJ4MFJWaDBVMjltZEhkaGNtVUFRV1J2WW1VZ1JtbHlaWGR2Y210eklFTlROdWk4c293QUFBS1JTVVJCVkVpSnJkWS9pRjFGRk1meHp3blpyR0lTVVNSL0pMR0lob2gvUWlSTkJMV3hNTElXRWt3YmdpQW9GZ29XMm1obFk2ZGdwWTJJbFJCUnhCU0toU0FLSWtsV0pSWXVNWktBaGl5b3BBaWFUWTdGdlJ0bVorL2VkOS96SFJqZXpMdzV2L085ZDg2Y3VaR1pwbVVSQWZkbjVvOURmZFpOTFhwanorTHppUGd5SWw2TWlHMGpQVEp6WkJ1eURyUDRCVm0wUC9BS2JsalRiNFRvWS9nR2V3WUE3S3lDbCsxYjNEVVlBTnZ3YmlIdzBnQ0FHUnpCT3pqVEFYRU91MGNDNENoK3I1eC9IcnBkcmNabXZJREZTdWNNdG5ZQ1lDKys2SG1ORHc4RktEVDM0RVRyZjYzOS9hek9yNXZ3UmsvZzVmYmV1QUJ0Z0MwNFhXazlWUUxjaU1QNEVILzNBRnpFclJOQzdNWGxRbXNlc1NvSHNHUEUyM2htRW9CVys2MUs2NkhNWEZtSU12TjhteWlsWFMzNlIwMXViK0tmWXZ3NDNaWHdZRFgrQUhQNEJBY2k0cEZKb21mbXIvaWhtTm9mRVNzQkltSkdrN21sbmNyTTQ1bjVKUGJoejBrQVdwc3YranV4YVgyMVlJUG1WSlMydU56Sk1TNlpOZXhDMGQrSTdmVVdYTEZ5ejJrU1pscFdQdkFTbG1xQWYvRlhOWGYzRkFGMkYvMUx1RmlmQWxpb25CNmRSdVNJMkl3SGk2bHptWG1wNnhSOFhZMGZpSWg3cHNBd2grM0Z1RGtSSFFWamwrYThsa1hqbzBrTFVLSDdYYVY1b084NlBtWjFGVHp5UDRLL1hHbDl2L3p3ZmJXN0JyaWl1RVRHQ1A1Y2g5YmM5Zjk3SEYvdmNGekNhNWdkRVBnV3ErdC80djBWNjNvRTF1RjRoMERpRko3SG5TV01wcERkaDFkeHRzUHZKMndjQk5BS2JzSlhhMENrNW9wZGFCUHNSTnUvdXNiYTA5aTFLc2FBVnptTHQzc2doclJqdUsxVGY0eGtlZ0lueHd5OGdLZjdkS01WSDJRUnNWNXpYUi9DZnR5dSthS2FLYmJrUXJzZEgrUFR6THpjcXprT1FBVnpNKzdGSGRpcXFlMi9ZVDR6Ri90OFMvc1BtYXd5dkM5NzR2Y0FBQUFBU1VWT1JLNUNZSUk9XCJcblx0fSxcblx0cGFuOiB7XG5cdFx0aW1hZ2U6IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFnQ0FZQUFBQnplbnIwQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFMRWdBQUN4SUIwdDErL0FBQUFCeDBSVmgwVTI5bWRIZGhjbVVBUVdSdlltVWdSbWx5WlhkdmNtdHpJRU5UTnVpOHNvd0FBQUpWU1VSQlZGaUZ2WmU3YTFSQkdNVi94MmhXSTRKcGZLQ0lpU0JLT29PQ2tJRC93UDRCRnFJSUZrRTAyQ2hJaUM4UURLbFNpSTNZcVJCc0JWR3dVTkFVZGlJRVVnamlBelFJSXN1S0pzZml6c1hyNXQ3ZCs4am13TERmekh6M25MT3pjNytaeFRabEd5RGdaaVdPQ3VKOXdIMmdDVXl1cVFGZ0YvQUdjS0pOcllrQllCajQwQ0lldCttdUdRaS85NmtNNFdTN0MvVG01VlVnN3doSmc4QmtFR2tDUjRCRFlmb2RzQURVZ1A2d0VyTzVpQ3Rzd3N1SmIzMmhkYlh5OHF6TDVUSWRtekppbkhkWm9aSUJaY1NGa0dsQUtzMVozWUNrZXRaY0J0b3V1YVFOa3JibE1pQnBCcmhtZTdtQWdVNHdNQ3ZwY0ZzRGtxNEM1NERGVlJUSDloK2k2dmxFMHI1VUE1SW1nQ3VoMjhqQjI4aUlzN0JJVkNPZVN0b1pENjRQNHVQQWpVVHlnS1N4MkZzSzJUSXdrdWdmazlRa2ZkL0UreU1XSFFDZVNScXgvUjNnT3AzTGF6ZmFTMkM0QjVnSERnRDdVOXgzRTN1QUg3S05wQzNBSEhBd1RMNEZIZ005R1E4dkFhUEEwZEIvQWJ4cWsyL2dCTEE5TVhiYTlyMWsvZDRMZkEzSnR3dWVCZU01OHVjUytlZFhuQVcyM3dQMTBOM2FkdkVpOUNYaXpUbnlONGJQUzdabjRzSC9kcTN0MThBWTRlMVlMWVN5M2cvY3NqMlZuRnNoWlB1T3BPZVNLSENvZFVJTnVHajdZZXRFNmplMVBWOVFvTlBKOVN0TkhLb2R4N25SYmlXckdIQkdYQWk1RFVpcXRRd3RwY1dLMEp1YnQ4Q2x0QTVNRVYxSWZ3TzcrVmZmUHdHZmlhNW0zNENUNGJYdWpJSVgwUW5hMS9jR01OcVYvd1VKRTJjenhEOENRNFg1U2w3Sno3U0lMd0NEcGJqS1BCUk1IQWQrRXRYNEhXVjVTcGRjMnc4a0RRR1BiSDhweS9NWE15Z002OS9GS3o0QUFBQUFTVVZPUks1Q1lJST1cIlxuXHR9LFxuXHR6b29tOiB7XG5cdFx0aW1hZ2U6IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFnQ0FZQUFBQnplbnIwQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFLNndBQUN1c0Jnb3NOV2dBQUFCeDBSVmgwVTI5bWRIZGhjbVVBUVdSdlltVWdSbWx5WlhkdmNtdHpJRU5UTnVpOHNvd0FBQU1xU1VSQlZGaUZ2ZGZiajkxVEZNRHh6NTdVNkdVRU1TMWFZenlNdENTU0RoV2pDWk1JbnBBSTNraEUvUUh0Z3pkUmtYZ1NDUzhTRVM5ZXBLTGkwb1JLTkVUalJhaFJFcTJLUzFzdGRSdWp0RFB0YkE5N241emRuOSs1ekp4VEs5azV2M1BPWG10OTkxcDdyNzErSWNhb0d3a2hUT0llYk1ScXpPQlR2SUczWTR6VFhSbXFTb3l4NWNBS2JNSk9ITUZKbk1aOC9qeUZhWHlNUjdHNm5iMWFIMjJjUDRCdmNCeHppRzNHS2Z5VElSOUQ2QllnMUtVZ2hQQkNEdmVGbGIvMjRBdjhpdVVZdzQxWVZzejVHN3V4S2NaNGFNRXB3R3Q1TlkzVi9ZYkhzUTZyY0FIT3cva1l4aWdld3I1Q1p3NGZZR3hCS2NDTE9GRVllaFhyTWRSaHI1eUxFVHhWU2NzT0xPa0tBUGZuMVRZTVBJdkxGclNoVWxTMkZEWm04WFJIQUN6RkFXbDNSMnhicVBNQ1lobWVMQ0FPWUVNbmdBY3piY1R2dUhZeHpndUl5L0Zlc1I5ZTZnU3dVL09vUFlIQkhnSGd2aUlLWDJGbHE3azM0S2htY1ZuYmkvUEM4Slg0TWdNY3hiMTE4d1p3ZHo1YUlTc2NxeDdWUmNveDdNclBRN2krYnRJQUpyQWtmOStiSTlFUG1aWTJJQXhpVFN1QWxkTHE0WTkrQWNTVWg3OEtQMHRiQWN3VTM1Y1hNRDFKQ0lGVW9HaWVobHFBejZUTkIxZjFDMERLKzBoK25zTlByUUMyYTRicUdtbEQ5a09HY1d0K1BvNnBWZ0R2U3hmSmFTa0ZkNFVRQnZvQXNCWWJDb0IzYTJmbE03c2xBMFI4aXl0NnJBRkRlRFBibThlT1RwVndHRDlxVnE3bkxiSWFabm1rc1BVMUp0c0NaTVhObXBkUnhGYXNXSVR6aDZYajNMQ3pyYTFPeGNEMlFqSGlHVnpkcGZPUm5NcVppbzJQY0YyM0FCZEpGMU5wNEJQcHRseVBpNld6UFlCenBKWnRIZTdBNnhXOWNueVA4VHFBLy9TRUlZUkw4Qnh1bDdyaWh2d2d0Vm43OFdjR0daWGE5SEdkNVREdWpESHVPZVBYTmlIZEtqV2daWC9ZYnN4THgva3RxYmpWelRsY2pVU252STVKcmRsVVZwNldlc1paNlIxaFJycHE5K0VWVEdTOWpUallBdUtJb3VHcGJjdXJFa0lZeEMwNTFLTlNhbWF6c2MreEs4YjRTMFZuRWkvajBocVRQK00yN08yNThlZ1F3WnV6czdwSTdNZjRXUVhJRURjNXM5c3V4KzUrMVB5MkVtUDhVT3E2R3ZXaElTY3hmZFlqVUVSaUF0OUpkODRKNmExNnpmOEpFS1QzeUNtOGcxVXhSdjhDQzRweVJoelIxdVVBQUFBQVNVVk9SSzVDWUlJPVwiXG5cdH0sXG5cdG1lbnU6IHtcblx0XHRpbWFnZTogXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQWdDQVlBQUFBYmlmak1BQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQUs2d0FBQ3VzQmdvc05XZ0FBQUJ4MFJWaDBVMjltZEhkaGNtVUFRV1J2WW1VZ1JtbHlaWGR2Y210eklFTlROdWk4c293QUFBQVdkRVZZZEVOeVpXRjBhVzl1SUZScGJXVUFNRGN2TVRVdk1UVFBzdlUwQUFBQVAwbEVRVlJJaWUyU01Rb0FJQkREVXZIL1g2NjdnOHNKSjlLT2hZWU9rVzBxR2FVMU1QZEMwdkdTYlYxOUVBQ28zWU1QQUZINUJVQlVqc3FmQVBwVlh0TmdHRGZ4RURDdEFBQUFBRWxGVGtTdVFtQ0NcIlxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRCdXR0b25TdGF0ZShjaGFydCwgYnV0dG9uLCBzdGF0ZSkge1xuXHRpZiAoYnV0dG9uLmdldEF0dHJpYnV0ZShcInN0YXRlXCIpICE9PSBzdGF0ZSkge1xuXG5cdFx0YnV0dG9uLnNldEF0dHJpYnV0ZShcInN0YXRlXCIsIHN0YXRlKTtcblx0XHRidXR0b24uc2V0QXR0cmlidXRlKFwidHlwZVwiLCAnYnV0dG9uJyk7XG5cdFx0YnV0dG9uLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuXHRcdGJ1dHRvbi5zdHlsZS5tYXJnaW4gPSBcIjBweCAwcHggMHB4IDBweFwiO1xuXHQgICAgYnV0dG9uLnN0eWxlLnBhZGRpbmcgPSBcIjNweCA0cHggMHB4IDRweFwiO1xuXHQgICAgYnV0dG9uLnN0eWxlLmNzc0Zsb2F0ID0gXCJsZWZ0XCI7XG5cdFx0YnV0dG9uLnNldEF0dHJpYnV0ZShcInRpdGxlXCIsIGNoYXJ0Ll9jdWx0dXJlSW5mb1tzdGF0ZSArIFwiVGV4dFwiXSk7XG5cdCAgICBidXR0b24uaW5uZXJIVE1MID0gXCI8aW1nIHN0eWxlPSdoZWlnaHQ6MTZweDsnIHNyYz0nXCIgKyBiYXNlNjRJbWFnZXNbc3RhdGVdLmltYWdlICsgXCInIGFsdD0nXCIgKyBjaGFydC5fY3VsdHVyZUluZm9bc3RhdGUgKyBcIlRleHRcIl0gKyBcIicgLz5cIjtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdygpIHtcblxuXHR2YXIgZWxlbWVudCA9IG51bGw7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRlbGVtZW50ID0gYXJndW1lbnRzW2ldO1xuXHRcdGlmIChlbGVtZW50LnN0eWxlKVxuXHRcdFx0ZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmVcIjtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlkZSgpIHtcblxuXHR2YXIgZWxlbWVudCA9IG51bGw7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRlbGVtZW50ID0gYXJndW1lbnRzW2ldO1xuXHRcdGlmIChlbGVtZW50ICYmIGVsZW1lbnQuc3R5bGUpXG5cdFx0XHRlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0fVxufVxuXG5leHBvcnQgY29uc3QgaXNDYW52YXNTdXBwb3J0ZWQgPSAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIikuZ2V0Q29udGV4dDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJlemllclBvaW50cyhwb2ludHMsIHRlbnNpb24pIHtcblxuXHR2YXIgYmV6aWVyUG9pbnRzID0gW107XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdGlmIChpID09IDApIHtcblx0XHRcdGJlemllclBvaW50cy5wdXNoKHBvaW50c1swXSk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHR2YXIgaTEsIGkyLCBwb2ludEluZGV4O1xuXG5cdFx0cG9pbnRJbmRleCA9IGkgLSAxO1xuXHRcdGkxID0gcG9pbnRJbmRleCA9PT0gMCA/IDAgOiBwb2ludEluZGV4IC0gMTtcblx0XHRpMiA9IHBvaW50SW5kZXggPT09IHBvaW50cy5sZW5ndGggLSAxID8gcG9pbnRJbmRleCA6IHBvaW50SW5kZXggKyAxO1xuXG5cdFx0dmFyIGRydjEgPSB7XG5cdFx0XHR4OiAocG9pbnRzW2kyXS54IC0gcG9pbnRzW2kxXS54KSAvIHRlbnNpb24sIHk6IChwb2ludHNbaTJdLnkgLSBwb2ludHNbaTFdLnkpIC8gdGVuc2lvblxuXHRcdH1cblx0XHR2YXIgY3AxID0ge1xuXHRcdFx0eDogcG9pbnRzW3BvaW50SW5kZXhdLnggKyBkcnYxLnggLyAzLCB5OiBwb2ludHNbcG9pbnRJbmRleF0ueSArIGRydjEueSAvIDNcblx0XHR9XG5cdFx0YmV6aWVyUG9pbnRzW2JlemllclBvaW50cy5sZW5ndGhdID0gY3AxO1xuXG5cblx0XHRwb2ludEluZGV4ID0gaTtcblx0XHRpMSA9IHBvaW50SW5kZXggPT09IDAgPyAwIDogcG9pbnRJbmRleCAtIDE7XG5cdFx0aTIgPSBwb2ludEluZGV4ID09PSBwb2ludHMubGVuZ3RoIC0gMSA/IHBvaW50SW5kZXggOiBwb2ludEluZGV4ICsgMTtcblxuXHRcdHZhciBkcnYyID0ge1xuXHRcdFx0eDogKHBvaW50c1tpMl0ueCAtIHBvaW50c1tpMV0ueCkgLyB0ZW5zaW9uLCB5OiAocG9pbnRzW2kyXS55IC0gcG9pbnRzW2kxXS55KSAvIHRlbnNpb25cblx0XHR9XG5cdFx0dmFyIGNwMiA9IHtcblx0XHRcdHg6IHBvaW50c1twb2ludEluZGV4XS54IC0gZHJ2Mi54IC8gMywgeTogcG9pbnRzW3BvaW50SW5kZXhdLnkgLSBkcnYyLnkgLyAzXG5cdFx0fVxuXHRcdGJlemllclBvaW50c1tiZXppZXJQb2ludHMubGVuZ3RoXSA9IGNwMjtcblxuXHRcdGJlemllclBvaW50c1tiZXppZXJQb2ludHMubGVuZ3RoXSA9IHBvaW50c1tpXTtcblx0fVxuXG5cdHJldHVybiBiZXppZXJQb2ludHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UGVyY2VudFRvVmFsdWUoaW5wdXQsIHJlZmVyZW5jZVZhbHVlKSB7XG5cdC8vaW5wdXQgY2FuIGJlIGEgbnVtYmVyIG9yIHN0cmluZ1xuXHRpZiAoaW5wdXQgPT09IG51bGwgfHwgdHlwZW9mIChpbnB1dCkgPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0cmV0dXJuIHJlZmVyZW5jZVZhbHVlO1xuXG5cdHZhciByZXN1bHQgPSBwYXJzZUZsb2F0KGlucHV0LnRvU3RyaW5nKCkpICogKGlucHV0LnRvU3RyaW5nKCkuaW5kZXhPZihcIiVcIikgPj0gMCA/IHJlZmVyZW5jZVZhbHVlIC8gMTAwIDogMSk7XG5cblx0Ly8gbGltaXQgdG8gcGxvdCBhcmVhXG5cdGlmICghaXNOYU4ocmVzdWx0KSAmJiByZXN1bHQgPD0gcmVmZXJlbmNlVmFsdWUgJiYgcmVzdWx0ID49IDApXG5cdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRyZXR1cm4gcmVmZXJlbmNlVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3UmVjdChjdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgYm9yZGVyVGhpY2tuZXNzLCBib3JkZXJDb2xvciwgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0LCBmaWxsT3BhY2l0eSkge1xuXHRpZiAodHlwZW9mIChmaWxsT3BhY2l0eSkgPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0ZmlsbE9wYWNpdHkgPSAxO1xuXG5cdGJvcmRlclRoaWNrbmVzcyA9IGJvcmRlclRoaWNrbmVzcyB8fCAwO1xuXHRib3JkZXJDb2xvciA9IGJvcmRlckNvbG9yIHx8IFwiYmxhY2tcIjtcblx0Ly9hbGVydChcInRvcFwiKyB0b3AgKyBcImJvdHRvbVwiICsgYm90dG9tICsgXCIgbHRcIiArIGxlZnQrIFwicnRcIiArIHJpZ2h0IClcblx0dmFyIGExID0geDEsIGEyID0geDIsIGIxID0geTEsIGIyID0geTIsIGVkZ2VZLCBlZGdlWDtcblx0aWYgKHgyIC0geDEgPiAxNSAmJiB5MiAtIHkxID4gMTUpXG5cdFx0dmFyIGJldmVsRGVwdGggPSA4O1xuXHRlbHNlXG5cdFx0dmFyIGJldmVsRGVwdGggPSAwLjM1ICogTWF0aC5taW4oKHgyIC0geDEpLCAoeTIgLSB5MSkpO1xuXHQvL2FsZXJ0KGExICsgXCJcIiArIGEyKTtcblx0dmFyIGNvbG9yMiA9IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAuNClcIjtcblx0dmFyIGNvbG9yMyA9IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpXCI7XG5cdC8vY29sb3IxID0gXCJyZ2JhKFwiICsgciArIFwiLFwiICsgZyArIFwiLCBcIiArIGIgKyBcIiwxKVwiO1xuXHR2YXIgY29sb3IxID0gY29sb3I7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgubW92ZVRvKHgxLCB5MSk7XG5cdGN0eC5zYXZlKCk7XG5cdGN0eC5maWxsU3R5bGUgPSBjb2xvcjE7XG5cblx0Y3R4Lmdsb2JhbEFscGhhID0gZmlsbE9wYWNpdHk7XG5cdGN0eC5maWxsUmVjdCh4MSwgeTEsIHgyIC0geDEsIHkyIC0geTEpO1xuXHRjdHguZ2xvYmFsQWxwaGEgPSAxO1xuXG5cdGlmIChib3JkZXJUaGlja25lc3MgPiAwKSB7XG5cdFx0dmFyIG9mZnNldCA9IGJvcmRlclRoaWNrbmVzcyAlIDIgPT09IDAgPyAwIDogLjU7XG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdGN0eC5saW5lV2lkdGggPSBib3JkZXJUaGlja25lc3M7XG5cdFx0Y3R4LnN0cm9rZVN0eWxlID0gYm9yZGVyQ29sb3I7XG5cdFx0Y3R4Lm1vdmVUbyh4MSwgeTEpO1xuXHRcdGN0eC5yZWN0KHgxIC0gb2Zmc2V0LCB5MSAtIG9mZnNldCwgeDIgLSB4MSArIDIgKiBvZmZzZXQsIHkyIC0geTEgKyAyICogb2Zmc2V0KTtcblx0XHRjdHguc3Ryb2tlKCk7XG5cdH1cblxuXHRjdHgucmVzdG9yZSgpO1xuXHQvLyAgIGN0eC5iZWdpblBhdGgoKTtcblx0aWYgKHRvcCA9PT0gdHJ1ZSkge1xuXHRcdC8vIGFsZXJ0KHgxICsgXCJcIiArIHgyICsgXCIgXCIgKyBiZXZlbERlcHRoKTtcblx0XHRjdHguc2F2ZSgpO1xuXHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRjdHgubW92ZVRvKHgxLCB5MSk7XG5cdFx0Y3R4LmxpbmVUbyh4MSArIGJldmVsRGVwdGgsIHkxICsgYmV2ZWxEZXB0aCk7XG5cdFx0Y3R4LmxpbmVUbyh4MiAtIGJldmVsRGVwdGgsIHkxICsgYmV2ZWxEZXB0aCk7XG5cdFx0Y3R4LmxpbmVUbyh4MiwgeTEpO1xuXHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHR2YXIgZ3JkID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KCh4MiArIHgxKSAvIDIsIGIxICsgYmV2ZWxEZXB0aCwgKHgyICsgeDEpIC8gMiwgYjEpO1xuXHRcdGdyZC5hZGRDb2xvclN0b3AoMCwgY29sb3IxKTtcblx0XHRncmQuYWRkQ29sb3JTdG9wKDEsIGNvbG9yMik7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IGdyZDtcblx0XHRjdHguZmlsbCgpO1xuXHRcdC8vICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG5cdFx0Y3R4LnJlc3RvcmUoKTtcblx0fVxuXG5cblx0aWYgKGJvdHRvbSA9PT0gdHJ1ZSkge1xuXHRcdGN0eC5zYXZlKCk7XG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdGN0eC5tb3ZlVG8oeDEsIHkyKTtcblx0XHRjdHgubGluZVRvKHgxICsgYmV2ZWxEZXB0aCwgeTIgLSBiZXZlbERlcHRoKTtcblx0XHRjdHgubGluZVRvKHgyIC0gYmV2ZWxEZXB0aCwgeTIgLSBiZXZlbERlcHRoKTtcblx0XHRjdHgubGluZVRvKHgyLCB5Mik7XG5cdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdHZhciBncmQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoKHgyICsgeDEpIC8gMiwgYjIgLSBiZXZlbERlcHRoLCAoeDIgKyB4MSkgLyAyLCBiMik7XG5cdFx0Z3JkLmFkZENvbG9yU3RvcCgwLCBjb2xvcjEpO1xuXHRcdGdyZC5hZGRDb2xvclN0b3AoMSwgY29sb3IyKTtcblx0XHRjdHguZmlsbFN0eWxlID0gZ3JkO1xuXHRcdC8vICAgICAgIGN0eC5zdHJva2UoKTtcblx0XHRjdHguZmlsbCgpO1xuXHRcdGN0eC5yZXN0b3JlKCk7XG5cdH1cblxuXHRpZiAobGVmdCA9PT0gdHJ1ZSkge1xuXHRcdC8vICAgYWxlcnQoeDEpXG5cdFx0Y3R4LnNhdmUoKTtcblx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0Y3R4Lm1vdmVUbyh4MSwgeTEpXG5cdFx0Y3R4LmxpbmVUbyh4MSArIGJldmVsRGVwdGgsIHkxICsgYmV2ZWxEZXB0aCk7XG5cdFx0Y3R4LmxpbmVUbyh4MSArIGJldmVsRGVwdGgsIHkyIC0gYmV2ZWxEZXB0aCk7XG5cdFx0Y3R4LmxpbmVUbyh4MSwgeTIpO1xuXHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHR2YXIgZ3JkID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KGExICsgYmV2ZWxEZXB0aCwgKHkyICsgeTEpIC8gMiwgYTEsICh5MiArIHkxKSAvIDIpO1xuXHRcdGdyZC5hZGRDb2xvclN0b3AoMCwgY29sb3IxKTtcblx0XHRncmQuYWRkQ29sb3JTdG9wKDEsIGNvbG9yMyk7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IGdyZDtcblx0XHRjdHguZmlsbCgpO1xuXHRcdC8vICAgICBjdHguc3Ryb2tlKCk7XG5cdFx0Y3R4LnJlc3RvcmUoKTtcblx0fVxuXG5cblx0aWYgKHJpZ2h0ID09PSB0cnVlKSB7XG5cdFx0Y3R4LnNhdmUoKTtcblx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0Y3R4Lm1vdmVUbyh4MiwgeTEpXG5cdFx0Y3R4LmxpbmVUbyh4MiAtIGJldmVsRGVwdGgsIHkxICsgYmV2ZWxEZXB0aCk7XG5cdFx0Y3R4LmxpbmVUbyh4MiAtIGJldmVsRGVwdGgsIHkyIC0gYmV2ZWxEZXB0aCk7XG5cdFx0Y3R4LmxpbmVUbyh4MiwgeTIpO1xuXHRcdHZhciBncmQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoYTIgLSBiZXZlbERlcHRoLCAoeTIgKyB5MSkgLyAyLCBhMiwgKHkyICsgeTEpIC8gMik7XG5cdFx0Z3JkLmFkZENvbG9yU3RvcCgwLCBjb2xvcjEpO1xuXHRcdGdyZC5hZGRDb2xvclN0b3AoMSwgY29sb3IzKTtcblx0XHRjdHguZmlsbFN0eWxlID0gZ3JkO1xuXHRcdGdyZC5hZGRDb2xvclN0b3AoMCwgY29sb3IxKTtcblx0XHRncmQuYWRkQ29sb3JTdG9wKDEsIGNvbG9yMyk7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IGdyZDtcblx0XHRjdHguZmlsbCgpO1xuXHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHQvLyAgICAgICAgICBjdHguc3Ryb2tlKCk7XG5cdFx0Y3R4LnJlc3RvcmUoKTtcblx0fVxuXHQvL1xuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3U2VnbWVudChjdHgsIGNlbnRlciwgcmFkaXVzLCBjb2xvciwgdHlwZSwgdGhldGExLCB0aGV0YTIsIGZpbGxPcGFjaXR5LCBwZXJjZW50SW5uZXJSYWRpdXMpIHtcblxuXHRpZiAodHlwZW9mIChmaWxsT3BhY2l0eSkgPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0ZmlsbE9wYWNpdHkgPSAxO1xuXG5cdC8vSUU4LSBGSVg6IEluIElFOC0gc2VnbWVudCBkb2Vzbid0IGdldCBkcmF3IGlmIHRoZXRhMiBpcyBlcXVhbCB0byB0aGV0YTEgKyAyKlBJLlxuXHRpZiAoIWlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0dmFyIHRoZXRhMk1vZCA9IE51bWJlcigodGhldGEyICUgKDIgKiBNYXRoLlBJKSkudG9GaXhlZCg4KSk7XG5cdFx0dmFyIHRoZXRhMU1vZCA9IE51bWJlcigodGhldGExICUgKDIgKiBNYXRoLlBJKSkudG9GaXhlZCg4KSk7XG5cdFx0aWYgKHRoZXRhMU1vZCA9PT0gdGhldGEyTW9kKVxuXHRcdFx0dGhldGEyIC09IC4wMDAxO1xuXHR9XG5cblx0Y3R4LnNhdmUoKTtcblx0Y3R4Lmdsb2JhbEFscGhhID0gZmlsbE9wYWNpdHk7XG5cblx0aWYgKHR5cGUgPT09IFwicGllXCIpIHtcblx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0Y3R4Lm1vdmVUbyhjZW50ZXIueCwgY2VudGVyLnkpO1xuXHRcdGN0eC5hcmMoY2VudGVyLngsIGNlbnRlci55LCByYWRpdXMsIHRoZXRhMSwgdGhldGEyLCBmYWxzZSk7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuXHRcdGN0eC5zdHJva2VTdHlsZSA9IFwid2hpdGVcIjtcblx0XHRjdHgubGluZVdpZHRoID0gMjtcblx0XHQvLyAgICBjdHguc2hhZG93T2Zmc2V0WCA9IDI7XG5cdFx0Ly8gICAgY3R4LnNoYWRvd09mZnNldFkgPSAxO1xuXHRcdC8vICAgICBjdHguc2hhZG93Qmx1ciA9IDI7XG5cdFx0Ly8gICAgY3R4LnNoYWRvd0NvbG9yID0gJyNCRkJGQkYnO1xuXHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHQvL2N0eC5zdHJva2UoKTtcblx0XHRjdHguZmlsbCgpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGUgPT09IFwiZG91Z2hudXRcIikge1xuXHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRjdHguYXJjKGNlbnRlci54LCBjZW50ZXIueSwgcmFkaXVzLCB0aGV0YTEsIHRoZXRhMiwgZmFsc2UpO1xuXHRcdGN0eC5hcmMoY2VudGVyLngsIGNlbnRlci55LCBwZXJjZW50SW5uZXJSYWRpdXMgKiByYWRpdXMsIHRoZXRhMiwgdGhldGExLCB0cnVlKTtcblx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuXHRcdGN0eC5zdHJva2VTdHlsZSA9IFwid2hpdGVcIjtcblx0XHRjdHgubGluZVdpZHRoID0gMjtcblx0XHQvLyBzaGFkb3cgcHJvcGVydGllc1xuXHRcdC8vICAgICBjdHguc2hhZG93T2Zmc2V0WCA9IDE7XG5cdFx0Ly8gICAgY3R4LnNoYWRvd09mZnNldFkgPSAxO1xuXHRcdC8vICAgICBjdHguc2hhZG93Qmx1ciA9IDE7XG5cdFx0Ly8gICAgY3R4LnNoYWRvd0NvbG9yID0gJyNCRkJGQkYnOyAgLy9ncmV5IHNoYWRvd1xuXHRcdC8vY3R4LnN0cm9rZSgpO1xuXHRcdGN0eC5maWxsKCk7XG5cdH1cblxuXHRjdHguZ2xvYmFsQWxwaGEgPSAxO1xuXG5cdGN0eC5yZXN0b3JlKCk7XG59O1xuIiwiLyoqXG4qIEBwcmVzZXJ2ZSBDYW52YXNKUyBIVE1MNSAmIEphdmFTY3JpcHQgQ2hhcnRzIC0gdjEuOC4wIEJldGEgMiAtIGh0dHA6Ly9jYW52YXNqcy5jb20vXG4qIENhbnZhc0pTIENoYXJ0cyBmb2xsb3dzIER1YWwgTGljZW5zaW5nIE1vZGVsIGFzIG1lbnRpb25lZCBiZWxvdy5cbipcbiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tRnJlZSBmb3IgTm9uLUNvbW1lcmNpYWwgVXNlLS0tLS0tLS0tLS0tLS0tLS0tLS1cbipcbiogRm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIHlvdSBjYW4gdXNlIHRoZSBzb2Z0d2FyZSBmb3IgZnJlZSB1bmRlciBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwgMy4wIExpY2Vuc2UuIFJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgbGluayBmb3IgZnVydGhlciBkZXRhaWxzIG9uIHRoZSBzYW1lLlxuKiBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy8zLjAvZGVlZC5lbl9VU1xuKlxuKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS1Db21tZXJjaWFsIExpY2Vuc2UtLS0tLS0tLS0tLS0tLS0tLS0tLVxuKiBDb21tZXJjaWFsIHVzZSBvZiBDYW52YXNKUyByZXF1aXJlcyB5b3UgdG8gcHVyY2hhc2UgYSBsaWNlbnNlLiBXaXRob3V0IGEgY29tbWVyY2lhbCBsaWNlbnNlIHlvdSBjYW4gdXNlIGl0IGZvciBldmFsdWF0aW9uIHB1cnBvc2VzIG9ubHkuIFBsZWFzZSByZWZlciB0byB0aGUgZm9sbG93aW5nIGxpbmsgZm9yIGZ1cnRoZXIgZGV0YWlscy5cbiogaHR0cDovL2NhbnZhc2pzLmNvbS9cbipcbioqL1xuaW1wb3J0IENoYXJ0cyBmcm9tICcuLi9jb3JlL2NoYXJ0cyc7XG5pbXBvcnQgQ3VsdHVyZUluZm8gZnJvbSAnLi4vY29yZS9jdWx0dXJlX2luZm8nO1xuaW1wb3J0IHtjb2xvclNldHN9IGZyb20gJy4uL2NvbnN0YW50cy90aGVtZXMnO1xuaW1wb3J0IHtjdWx0dXJlc30gZnJvbSAnLi4vY29uc3RhbnRzL2N1bHR1cmUnO1xuaW1wb3J0IHtudW1iZXJGb3JtYXQsIGRhdGVGb3JtYXR9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gQ2hhcnQoY29udGFpbmVySWQsIG9wdGlvbnMpIHtcblxuICBjb25zdCBfY2hhcnQgPSBuZXcgQ2hhcnRzKGNvbnRhaW5lcklkLCBvcHRpb25zLCB0aGlzKTtcblxuICB0aGlzLnJlbmRlciA9ICgpID0+ICBfY2hhcnQucmVuZGVyKHRoaXMub3B0aW9ucyk7XG5cbiAgdGhpcy5vcHRpb25zID0gX2NoYXJ0Ll9vcHRpb25zO1xufTtcblxuXG5leHBvcnQgY29uc3QgYWRkQ29sb3JTZXQgPSAobmFtZSwgY29sb3JTZXQpID0+IHtcblxuICAgIGNvbG9yU2V0c1tuYW1lXSA9IGNvbG9yU2V0O1xuXG59O1xuXG5leHBvcnQgY29uc3QgYWRkQ3VsdHVyZUluZm8gPSAobmFtZSwgY3VsdHVyZUluZm8pID0+IHtcblxuICAgIGN1bHR1cmVzW25hbWVdID0gY3VsdHVyZUluZm87XG5cbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXROdW1iZXIgPSAobnVtYmVyLCBmb3JtYXRTdHJpbmcsIGN1bHR1cmUpID0+IHtcblxuICAgIGN1bHR1cmUgPSBjdWx0dXJlIHx8IFwiZW5cIjtcbiAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcgfHwgXCIjLCMjMC4jI1wiO1xuXG4gICAgaWYgKCFjdWx0dXJlc1tjdWx0dXJlXSl0aHJvdyBcIlVua25vd24gQ3VsdHVyZSBOYW1lXCI7XG4gICAgZWxzZSBudW1iZXJGb3JtYXQobnVtYmVyLCBmb3JtYXRTdHJpbmcsIG5ldyBDdWx0dXJlSW5mbyhjdWx0dXJlKSk7XG5cbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXREYXRlID0gKGRhdGUsIGZvcm1hdFN0cmluZywgY3VsdHVyZSkgPT4ge1xuXG4gICAgY3VsdHVyZSA9IGN1bHR1cmUgfHwgXCJlblwiO1xuICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZyB8fCBcIkREIE1NTSBZWVlZXCI7XG5cbiAgICBpZiAoIWN1bHR1cmVzW2N1bHR1cmVdKXRocm93IFwiVW5rbm93biBDdWx0dXJlIE5hbWVcIjtcbiAgICBlbHNlIGRhdGVGb3JtYXQoZGF0ZSwgZm9ybWF0U3RyaW5nLCBuZXcgQ3VsdHVyZUluZm8oY3VsdHVyZSkpO1xuXG59O1xuXG5DaGFydC52ZXJzaW9uID0gXCJ2MS44LjJcIjtcbiJdfQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvY2hhcnRzL2FyZWEuanMiLCJzcmMvY2hhcnRzL2Jhci5qcyIsInNyYy9jaGFydHMvYnViYmxlLmpzIiwic3JjL2NoYXJ0cy9jYW5kbGVzdGljay5qcyIsInNyYy9jaGFydHMvY29sdW1uLmpzIiwic3JjL2NoYXJ0cy9pbmRleC5qcyIsInNyYy9jaGFydHMvcGllLmpzIiwic3JjL2NoYXJ0cy9yYW5nZV9hcmVhLmpzIiwic3JjL2NoYXJ0cy9yYW5nZV9iYXIuanMiLCJzcmMvY2hhcnRzL3JhbmdlX2NvbHVtbi5qcyIsInNyYy9jaGFydHMvcmFuZ2Vfc3BsaW5lX2FyZWEuanMiLCJzcmMvY2hhcnRzL3NjYXR0ZXIuanMiLCJzcmMvY2hhcnRzL3NwbGluZS5qcyIsInNyYy9jaGFydHMvc3BsaW5lX2FyZWEuanMiLCJzcmMvY2hhcnRzL3N0YWNrZWRfYXJlYS5qcyIsInNyYy9jaGFydHMvc3RhY2tlZF9hcmVhXzEwMC5qcyIsInNyYy9jaGFydHMvc3RhY2tlZF9iYXIuanMiLCJzcmMvY2hhcnRzL3N0YWNrZWRfYmFyXzEwMC5qcyIsInNyYy9jaGFydHMvc3RhY2tlZF9jb2x1bW4uanMiLCJzcmMvY2hhcnRzL3N0YWNrZWRfY29sdW1uXzEwMC5qcyIsInNyYy9jaGFydHMvc3RlcF9hcmVhLmpzIiwic3JjL2NvbnN0YW50cy9jdWx0dXJlLmpzIiwic3JjL2NvbnN0YW50cy9vcHRpb25zLmpzIiwic3JjL2NvbnN0YW50cy90aGVtZXMuanMiLCJzcmMvY29yZS9hbmltYXRvci5qcyIsInNyYy9jb3JlL2F4aXMuanMiLCJzcmMvY29yZS9jYW52YXNqcy5qcyIsInNyYy9jb3JlL2NoYXJ0cy5qcyIsInNyYy9jb3JlL2N1bHR1cmVfaW5mby5qcyIsInNyYy9jb3JlL2RhdGFfc2VyaWVzLmpzIiwic3JjL2NvcmUvZXZlbnRfbWFuYWdlci5qcyIsInNyYy9jb3JlL2xheW91dF9tYW5hZ2VyLmpzIiwic3JjL2NvcmUvbGVnZW5kLmpzIiwic3JjL2NvcmUvdGV4dF9ibG9jay5qcyIsInNyYy9jb3JlL3RpdGxlLmpzIiwic3JjL2NvcmUvdG9vbHRpcC5qcyIsInNyYy9oZWxwZXJzL2FuaW1hdG9yLmpzIiwic3JjL2hlbHBlcnMvcmVuZGVyLmpzIiwic3JjL2hlbHBlcnMvdXRpbHMuanMiLCJzcmMvbWFpbi9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztrQkNLZSxVQUFVLFFBQVYsRUFBb0I7QUFDbEMsS0FBSSxNQUFNLFNBQVMsZUFBVCxJQUE0QixLQUFLLFFBQUwsQ0FBYyxHQUFwRDs7QUFFQSxLQUFJLGtCQUFrQixTQUFTLGlCQUFULENBQTJCLE1BQWpEOztBQUVBLEtBQUksbUJBQW1CLENBQXZCLEVBQ0M7O0FBRUQsS0FBSSxXQUFXLEtBQUssYUFBTCxDQUFtQixRQUFsQzs7QUFFQSxLQUFJLGFBQWEsU0FBUyxLQUFULENBQWUsZUFBaEM7QUFDQSxLQUFJLGFBQWEsU0FBUyxLQUFULENBQWUsZUFBaEM7QUFDQSxLQUFJLFVBQVUsRUFBZDs7QUFFQSxLQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLEtBQUksSUFBSjs7QUFFQSwrQkFDQyxTQUFTLElBQVQ7O0FBRUQsS0FBSSxTQUFKO0FBQ0EsS0FBSSxJQUFKLENBQVMsU0FBUyxFQUFsQixFQUFzQixTQUFTLEVBQS9CLEVBQW1DLFNBQVMsS0FBNUMsRUFBbUQsU0FBUyxNQUE1RDtBQUNBLEtBQUksSUFBSjs7QUFFQSwrQkFBdUI7QUFDdEIsV0FBUyxTQUFUO0FBQ0EsV0FBUyxJQUFULENBQWMsU0FBUyxFQUF2QixFQUEyQixTQUFTLEVBQXBDLEVBQXdDLFNBQVMsS0FBakQsRUFBd0QsU0FBUyxNQUFqRTtBQUNBLFdBQVMsSUFBVDtBQUNBOztBQUVELE1BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxTQUFTLGlCQUFULENBQTJCLE1BQS9DLEVBQXVELEdBQXZELEVBQTREOztBQUUzRCxNQUFJLGtCQUFrQixT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U0FBSyxRQUFMLEdBQWdCLENBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLGFBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxJQUFJLEVBQWIsS0FBb0IsT0FBeEIsRUFBaUM7QUFDdkMsU0FBSyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLGFBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxJQUFJLEVBQWIsS0FBb0IsT0FBeEIsRUFBaUM7QUFDdkMsU0FBSyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLGFBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxJQUFJLEVBQWIsS0FBb0IsT0FBeEIsRUFBaUM7QUFDdkMsU0FBSyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLGFBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxJQUFJLEdBQWIsS0FBcUIsT0FBekIsRUFBa0M7QUFDeEMsU0FBSyxRQUFMLEdBQWdCLEdBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLGFBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxJQUFJLEdBQWIsS0FBcUIsT0FBekIsRUFBa0M7QUFDeEMsU0FBSyxRQUFMLEdBQWdCLEdBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLGFBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxJQUFJLEdBQWIsS0FBcUIsT0FBekIsRUFBa0M7QUFDeEMsU0FBSyxRQUFMLEdBQWdCLEdBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLGFBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxJQUFJLEdBQWIsS0FBcUIsT0FBekIsRUFBa0M7QUFDeEMsU0FBSyxRQUFMLEdBQWdCLEdBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLGFBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxJQUFJLEdBQWIsS0FBcUIsT0FBekIsRUFBa0M7QUFDeEMsU0FBSyxRQUFMLEdBQWdCLEdBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLGFBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxJQUFJLEdBQWIsS0FBcUIsT0FBekIsRUFBa0M7QUFDeEMsU0FBSyxRQUFMLEdBQWdCLEdBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLGFBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxtQkFBVSxjQUFWLEdBQTJCLENBQXBDLEtBQTBDLE9BQTlDLEVBQXVEO0FBQzdELFNBQUssUUFBTCxHQUFnQixDQUFoQjtBQUNBLFNBQUssWUFBTCxHQUFvQixRQUFwQjtBQUNBLElBSE0sTUFHQSxJQUFJLFNBQVMsbUJBQVUsY0FBVixHQUEyQixDQUFwQyxLQUEwQyxPQUE5QyxFQUF1RDtBQUM3RCxTQUFLLFFBQUwsR0FBZ0IsQ0FBaEI7QUFDQSxTQUFLLFlBQUwsR0FBb0IsUUFBcEI7QUFDQSxJQUhNLE1BR0EsSUFBSSxTQUFTLG1CQUFVLGNBQVYsR0FBMkIsQ0FBcEMsS0FBMEMsT0FBOUMsRUFBdUQ7QUFDN0QsU0FBSyxRQUFMLEdBQWdCLENBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLFFBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxtQkFBVSxjQUFWLEdBQTJCLEVBQXBDLEtBQTJDLE9BQS9DLEVBQXdEO0FBQzlELFNBQUssUUFBTCxHQUFnQixFQUFoQjtBQUNBLFNBQUssWUFBTCxHQUFvQixRQUFwQjtBQUNBLElBSE0sTUFHQSxJQUFJLFNBQVMsbUJBQVUsY0FBVixHQUEyQixFQUFwQyxLQUEyQyxPQUEvQyxFQUF3RDtBQUM5RCxTQUFLLFFBQUwsR0FBZ0IsRUFBaEI7QUFDQSxTQUFLLFlBQUwsR0FBb0IsUUFBcEI7QUFDQSxJQUhNLE1BR0EsSUFBSSxTQUFTLG1CQUFVLGNBQVYsR0FBMkIsRUFBcEMsS0FBMkMsT0FBL0MsRUFBd0Q7QUFDOUQsU0FBSyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLFFBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxtQkFBVSxjQUFWLEdBQTJCLEVBQXBDLEtBQTJDLE9BQS9DLEVBQXdEO0FBQzlELFNBQUssUUFBTCxHQUFnQixFQUFoQjtBQUNBLFNBQUssWUFBTCxHQUFvQixRQUFwQjtBQUNBLElBSE0sTUFHQSxJQUFJLFNBQVMsbUJBQVUsY0FBVixHQUEyQixDQUFwQyxLQUEwQyxPQUE5QyxFQUF1RDtBQUM3RCxTQUFLLFFBQUwsR0FBZ0IsQ0FBaEI7QUFDQSxTQUFLLFlBQUwsR0FBb0IsUUFBcEI7QUFDQSxJQUhNLE1BR0EsSUFBSSxTQUFTLG1CQUFVLGNBQVYsR0FBMkIsQ0FBcEMsS0FBMEMsT0FBOUMsRUFBdUQ7QUFDN0QsU0FBSyxRQUFMLEdBQWdCLENBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLFFBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxtQkFBVSxjQUFWLEdBQTJCLENBQXBDLEtBQTBDLE9BQTlDLEVBQXVEO0FBQzdELFNBQUssUUFBTCxHQUFnQixDQUFoQjtBQUNBLFNBQUssWUFBTCxHQUFvQixRQUFwQjtBQUNBLElBSE0sTUFHQSxJQUFJLFNBQVMsbUJBQVUsY0FBVixHQUEyQixFQUFwQyxLQUEyQyxPQUEvQyxFQUF3RDtBQUM5RCxTQUFLLFFBQUwsR0FBZ0IsRUFBaEI7QUFDQSxTQUFLLFlBQUwsR0FBb0IsUUFBcEI7QUFDQSxJQUhNLE1BR0EsSUFBSSxTQUFTLG1CQUFVLGNBQVYsR0FBMkIsRUFBcEMsS0FBMkMsT0FBL0MsRUFBd0Q7QUFDOUQsU0FBSyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLFFBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxtQkFBVSxjQUFWLEdBQTJCLEVBQXBDLEtBQTJDLE9BQS9DLEVBQXdEO0FBQzlELFNBQUssUUFBTCxHQUFnQixFQUFoQjtBQUNBLFNBQUssWUFBTCxHQUFvQixRQUFwQjtBQUNBLElBSE0sTUFHQSxJQUFJLFNBQVMsbUJBQVUsY0FBVixHQUEyQixFQUFwQyxLQUEyQyxPQUEvQyxFQUF3RDtBQUM5RCxTQUFLLFFBQUwsR0FBZ0IsRUFBaEI7QUFDQSxTQUFLLFlBQUwsR0FBb0IsUUFBcEI7QUFDQSxJQUhNLE1BR0EsSUFBSSxTQUFTLG1CQUFVLFlBQVYsR0FBeUIsQ0FBbEMsS0FBd0MsT0FBNUMsRUFBcUQ7QUFDM0QsU0FBSyxRQUFMLEdBQWdCLENBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLE1BQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxtQkFBVSxZQUFWLEdBQXlCLENBQWxDLEtBQXdDLE9BQTVDLEVBQXFEO0FBQzNELFNBQUssUUFBTCxHQUFnQixDQUFoQjtBQUNBLFNBQUssWUFBTCxHQUFvQixNQUFwQjtBQUNBLElBSE0sTUFHQSxJQUFJLFNBQVMsbUJBQVUsWUFBVixHQUF5QixDQUFsQyxLQUF3QyxPQUE1QyxFQUFxRDtBQUMzRCxTQUFLLFFBQUwsR0FBZ0IsQ0FBaEI7QUFDQSxTQUFLLFlBQUwsR0FBb0IsTUFBcEI7QUFDQSxJQUhNLE1BR0EsSUFBSSxTQUFTLG1CQUFVLFlBQVYsR0FBeUIsQ0FBbEMsS0FBd0MsT0FBNUMsRUFBcUQ7QUFDM0QsU0FBSyxRQUFMLEdBQWdCLENBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLE1BQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxtQkFBVSxXQUFWLEdBQXdCLENBQWpDLEtBQXVDLE9BQTNDLEVBQW9EO0FBQzFELFNBQUssUUFBTCxHQUFnQixDQUFoQjtBQUNBLFNBQUssWUFBTCxHQUFvQixLQUFwQjtBQUNBLElBSE0sTUFHQSxJQUFJLFNBQVMsbUJBQVUsV0FBVixHQUF3QixDQUFqQyxLQUF1QyxPQUEzQyxFQUFvRDtBQUMxRCxTQUFLLFFBQUwsR0FBZ0IsQ0FBaEI7QUFDQSxTQUFLLFlBQUwsR0FBb0IsS0FBcEI7QUFDQSxJQUhNLE1BR0EsSUFBSSxTQUFTLG1CQUFVLFdBQVYsR0FBd0IsQ0FBakMsS0FBdUMsT0FBM0MsRUFBb0Q7QUFDMUQsU0FBSyxRQUFMLEdBQWdCLENBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLEtBQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxtQkFBVSxZQUFWLEdBQXlCLENBQWxDLEtBQXdDLE9BQTVDLEVBQXFEO0FBQzNELFNBQUssUUFBTCxHQUFnQixDQUFoQjtBQUNBLFNBQUssWUFBTCxHQUFvQixNQUFwQjtBQUNBLElBSE0sTUFHQSxJQUFJLFNBQVMsbUJBQVUsWUFBVixHQUF5QixDQUFsQyxLQUF3QyxPQUE1QyxFQUFxRDtBQUMzRCxTQUFLLFFBQUwsR0FBZ0IsQ0FBaEI7QUFDQSxTQUFLLFlBQUwsR0FBb0IsTUFBcEI7QUFDQSxJQUhNLE1BR0EsSUFBSSxTQUFTLG1CQUFVLFlBQVYsR0FBeUIsQ0FBbEMsS0FBd0MsT0FBNUMsRUFBcUQ7QUFDM0QsU0FBSyxRQUFMLEdBQWdCLENBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLE1BQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxtQkFBVSxhQUFWLEdBQTBCLENBQW5DLEtBQXlDLE9BQTdDLEVBQXNEO0FBQzVELFNBQUssUUFBTCxHQUFnQixDQUFoQjtBQUNBLFNBQUssWUFBTCxHQUFvQixPQUFwQjtBQUNBLElBSE0sTUFHQSxJQUFJLFNBQVMsbUJBQVUsYUFBVixHQUEwQixDQUFuQyxLQUF5QyxPQUE3QyxFQUFzRDtBQUM1RCxTQUFLLFFBQUwsR0FBZ0IsQ0FBaEI7QUFDQSxTQUFLLFlBQUwsR0FBb0IsT0FBcEI7QUFDQSxJQUhNLE1BR0EsSUFBSSxTQUFTLG1CQUFVLGFBQVYsR0FBMEIsQ0FBbkMsS0FBeUMsT0FBN0MsRUFBc0Q7QUFDNUQsU0FBSyxRQUFMLEdBQWdCLENBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLE9BQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxtQkFBVSxhQUFWLEdBQTBCLENBQW5DLEtBQXlDLE9BQTdDLEVBQXNEO0FBQzVELFNBQUssUUFBTCxHQUFnQixDQUFoQjtBQUNBLFNBQUssWUFBTCxHQUFvQixPQUFwQjtBQUNBLElBSE0sTUFHQSxJQUFJLFNBQVMsbUJBQVUsWUFBVixHQUF5QixDQUFsQyxLQUF3QyxPQUE1QyxFQUFxRDtBQUMzRCxTQUFLLFFBQUwsR0FBZ0IsQ0FBaEI7QUFDQSxTQUFLLFlBQUwsR0FBb0IsTUFBcEI7QUFDQSxJQUhNLE1BR0EsSUFBSSxTQUFTLG1CQUFVLFlBQVYsR0FBeUIsQ0FBbEMsS0FBd0MsT0FBNUMsRUFBcUQ7QUFDM0QsU0FBSyxRQUFMLEdBQWdCLENBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLE1BQXBCO0FBQ0EsSUFITSxNQUdBLElBQUksU0FBUyxtQkFBVSxZQUFWLEdBQXlCLENBQWxDLEtBQXdDLE9BQTVDLEVBQXFEO0FBQzNELFNBQUssUUFBTCxHQUFnQixDQUFoQjtBQUNBLFNBQUssWUFBTCxHQUFvQixNQUFwQjtBQUNBLElBSE0sTUFHQTtBQUNOLFNBQUssUUFBTCxHQUFnQixLQUFLLEtBQUwsQ0FBVyxLQUFLLGFBQUwsQ0FBbUIsU0FBUyxVQUFVLENBQW5CLENBQW5CLEVBQTBDLElBQTFDLElBQWtELG1CQUFVLFlBQXZFLENBQWhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLE1BQXBCO0FBQ0E7QUFFRDs7QUFFRCxNQUFJLEtBQUssZUFBTCxLQUF5QixJQUF6QixJQUFpQyxNQUFNLEtBQUssZUFBWCxDQUFyQyxFQUNDLEtBQUssZUFBTCxHQUF1QixNQUFNLFVBQVUsQ0FBdkM7O0FBRUQsTUFBSSxLQUFLLGVBQUwsS0FBeUIsSUFBekIsSUFBaUMsTUFBTSxLQUFLLGVBQVgsQ0FBckMsRUFDQyxLQUFLLGVBQUwsR0FBdUIsTUFBTSxVQUFVLENBQXZDOztBQUdELE1BQUksQ0FBQyxLQUFLLGlCQUFWLEVBQTZCO0FBQzVCLE9BQUksdUJBQUosRUFBNkI7QUFDNUIsU0FBSyxpQkFBTCxHQUF5QixtQkFBekI7QUFDQSxJQUZELE1BRU8sSUFBSSxLQUFLLFlBQUwsS0FBc0IsTUFBMUIsRUFBa0M7QUFDeEMsU0FBSyxpQkFBTCxHQUF5QixNQUF6QjtBQUNBLElBRk0sTUFFQSxJQUFJLEtBQUssWUFBTCxLQUFzQixPQUExQixFQUFtQztBQUN6QyxTQUFLLGlCQUFMLEdBQXlCLFVBQXpCO0FBQ0EsSUFGTSxNQUVBLElBQUksS0FBSyxZQUFMLEtBQXNCLE1BQTFCLEVBQWtDO0FBQ3hDLFNBQUssaUJBQUwsR0FBeUIsYUFBekI7QUFDQSxJQUZNLE1BRUEsSUFBSSxLQUFLLFlBQUwsS0FBc0IsS0FBMUIsRUFBaUM7QUFDdkMsU0FBSyxpQkFBTCxHQUF5QixhQUF6QjtBQUNBLElBRk0sTUFFQSxJQUFJLEtBQUssWUFBTCxLQUFzQixNQUExQixFQUFrQztBQUN4QyxTQUFLLGlCQUFMLEdBQXlCLFVBQXpCO0FBQ0EsSUFGTSxNQUVBLElBQUksS0FBSyxZQUFMLEtBQXNCLFFBQTFCLEVBQW9DO0FBQzFDLFNBQUssaUJBQUwsR0FBeUIsVUFBekI7QUFDQSxJQUZNLE1BRUEsSUFBSSxLQUFLLFlBQUwsS0FBc0IsUUFBMUIsRUFBb0M7QUFDMUMsU0FBSyxpQkFBTCxHQUF5QixhQUF6QjtBQUNBLElBRk0sTUFFQSxJQUFJLEtBQUssWUFBTCxLQUFzQixhQUExQixFQUF5QztBQUMvQyxTQUFLLGlCQUFMLEdBQXlCLFNBQXpCO0FBQ0E7QUFDRDtBQUVELEVBektELE1BeUtPOztBQUVOLE9BQUssWUFBTCxHQUFvQixRQUFwQjs7QUFFQSxVQUFRLEtBQUssYUFBTCxDQUFtQixLQUFuQixFQUEwQixLQUExQixDQUFSOztBQUVBLE1BQUksS0FBSyxRQUFMLElBQWlCLEtBQUssUUFBTCxDQUFjLFFBQW5DLEVBQ0MsS0FBSyxRQUFMLEdBQWdCLEtBQUssUUFBTCxDQUFjLFFBQTlCLENBREQsS0FFSztBQUNKLFFBQUssUUFBTCxHQUFnQixLQUFLLGFBQUwsQ0FBbUIsU0FBUyxVQUFVLENBQW5CLENBQW5CLEVBQTBDLElBQTFDLENBQWhCO0FBQ0E7O0FBRUQsTUFBSSxLQUFLLGVBQUwsS0FBeUIsSUFBekIsSUFBaUMsTUFBTSxLQUFLLGVBQVgsQ0FBckMsRUFBa0U7QUFDakUsT0FBSSxLQUFLLElBQUwsS0FBYyxPQUFsQixFQUNDLEtBQUssZUFBTCxHQUF1QixNQUFNLFVBQVUsQ0FBdkMsQ0FERCxLQUdDLEtBQUssZUFBTCxHQUF1QixLQUFLLEtBQUwsQ0FBVyxNQUFNLEtBQUssUUFBdEIsSUFBa0MsS0FBSyxRQUE5RDtBQUNEOztBQUVELE1BQUksS0FBSyxlQUFMLEtBQXlCLElBQXpCLElBQWlDLE1BQU0sS0FBSyxlQUFYLENBQXJDLEVBQWtFO0FBQ2pFLE9BQUksS0FBSyxJQUFMLEtBQWMsT0FBbEIsRUFDQyxLQUFLLGVBQUwsR0FBdUIsTUFBTSxVQUFVLENBQXZDLENBREQsS0FHQyxLQUFLLGVBQUwsR0FBdUIsS0FBSyxJQUFMLENBQVUsTUFBTSxLQUFLLFFBQXJCLElBQWlDLEtBQUssUUFBN0Q7QUFDRDs7QUFFRCxNQUFJLEtBQUssZUFBTCxLQUF5QixDQUF6QixJQUE4QixLQUFLLGVBQUwsS0FBeUIsQ0FBM0QsRUFBOEQ7O0FBRTdELE9BQUksS0FBSyxRQUFMLENBQWMsZUFBZCxLQUFrQyxDQUF0QyxFQUF5QztBQUN4QyxTQUFLLGVBQUwsSUFBd0IsRUFBeEI7QUFDQSxJQUZELE1BR0ssSUFBSSxLQUFLLFFBQUwsQ0FBYyxlQUFkLEtBQWtDLENBQXRDLEVBQXlDO0FBQzdDLFNBQUssZUFBTCxJQUF3QixFQUF4QjtBQUNBOztBQUVELE9BQUksS0FBSyxRQUFMLElBQWlCLE9BQVEsS0FBSyxRQUFMLENBQWMsUUFBdEIsS0FBb0MsV0FBekQsRUFBc0U7QUFDckUsU0FBSyxRQUFMLEdBQWdCLEtBQUssYUFBTCxDQUFtQixDQUFDLEtBQUssZUFBTCxHQUF1QixLQUFLLGVBQTdCLEtBQWlELFVBQVUsQ0FBM0QsQ0FBbkIsRUFBa0YsSUFBbEYsQ0FBaEI7QUFDQTtBQUNEO0FBQ0Q7O0FBRUQ7QUFDQSxLQUFJLEtBQUssT0FBTCxLQUFpQixJQUFqQixJQUF5QixLQUFLLE9BQUwsS0FBaUIsSUFBOUMsRUFBb0Q7QUFDbkQsTUFBSSxLQUFLLElBQUwsS0FBYyxPQUFsQixFQUEyQjtBQUMxQixTQUFPLEtBQUssT0FBTCxLQUFpQixJQUFsQixHQUEwQixLQUFLLE9BQS9CLEdBQXlDLEtBQUssUUFBTCxDQUFjLEdBQTdEO0FBQ0EsU0FBTyxLQUFLLE9BQUwsS0FBaUIsSUFBbEIsR0FBMEIsS0FBSyxPQUEvQixHQUF5QyxLQUFLLFFBQUwsQ0FBYyxHQUE3RDs7QUFFQSxPQUFJLE1BQU0sR0FBTixLQUFjLENBQWxCLEVBQXFCO0FBQ3BCLG1CQUFlLE9BQVEsS0FBSyxRQUFMLENBQWMsUUFBdEIsS0FBb0MsV0FBcEMsR0FBa0QsRUFBbEQsR0FBdUQsS0FBSyxRQUFMLENBQWMsUUFBcEY7O0FBRUEsV0FBTyxZQUFQO0FBQ0EsV0FBTyxZQUFQO0FBQ0E7O0FBRUQsT0FBSSxLQUFLLFFBQUwsQ0FBYyxPQUFkLEtBQTBCLFFBQTlCLEVBQ0MsVUFBVSxLQUFLLFFBQUwsQ0FBYyxPQUF4QixDQURELEtBRUssSUFBSSxNQUFNLEdBQU4sR0FBWSxDQUFoQixFQUFtQjtBQUN2QixjQUFVLEtBQUssR0FBTCxDQUFTLE1BQU0sR0FBZixJQUFzQixFQUFoQztBQUNBLElBRkksTUFHQTtBQUNKLGNBQVUsQ0FBVjtBQUNBO0FBRUQsR0FwQkQsTUFvQk8sSUFBSSxLQUFLLElBQUwsS0FBYyxPQUFsQixFQUEyQjs7QUFFakMsU0FBTyxLQUFLLE9BQUwsS0FBaUIsSUFBbEIsR0FBMEIsS0FBSyxPQUEvQixHQUF5QyxLQUFLLFFBQUwsQ0FBYyxHQUE3RDtBQUNBLFNBQU8sS0FBSyxPQUFMLEtBQWlCLElBQWxCLEdBQTBCLEtBQUssT0FBL0IsR0FBeUMsS0FBSyxRQUFMLENBQWMsR0FBN0Q7O0FBRUEsT0FBSSxDQUFDLFNBQVMsR0FBVCxDQUFELElBQWtCLENBQUMsU0FBUyxHQUFULENBQXZCLEVBQXNDO0FBQ3JDLFVBQU0sT0FBUSxLQUFLLFFBQUwsQ0FBYyxRQUF0QixLQUFvQyxXQUFwQyxHQUFrRCxDQUFDLFFBQW5ELEdBQThELEtBQUssUUFBTCxDQUFjLFFBQWxGO0FBQ0EsVUFBTSxDQUFOO0FBQ0EsSUFIRCxNQUtDLElBQUksUUFBUSxDQUFSLElBQWEsUUFBUSxDQUF6QixFQUE0QjtBQUFDO0FBQzVCLFdBQU8sQ0FBUDtBQUNBLFVBQU0sQ0FBTjtBQUNBLElBSEQsTUFJSyxJQUFJLE1BQU0sR0FBTixLQUFjLENBQWxCLEVBQXFCO0FBQUM7QUFDMUIsbUJBQWUsS0FBSyxHQUFMLENBQVMsS0FBSyxHQUFMLENBQVMsS0FBSyxHQUFMLENBQVMsR0FBVCxJQUFnQixHQUF6QixDQUFULEVBQXdDLENBQXhDLENBQWY7QUFDQSxXQUFPLFlBQVA7QUFDQSxXQUFPLFlBQVA7QUFDQSxJQUpJLE1BS0EsSUFBSSxNQUFNLEdBQVYsRUFBZTtBQUNuQixtQkFBZSxLQUFLLEdBQUwsQ0FBUyxLQUFLLEdBQUwsQ0FBUyxLQUFLLEdBQUwsQ0FBUyxNQUFNLEdBQWYsSUFBc0IsR0FBL0IsQ0FBVCxFQUE4QyxDQUE5QyxDQUFmOztBQUVBLFFBQUksT0FBTyxDQUFYLEVBQ0MsTUFBTSxNQUFNLFlBQVosQ0FERCxLQUdDLE1BQU0sTUFBTSxZQUFaO0FBQ0QsSUFQSSxNQVFBOztBQUVKLG1CQUFlLEtBQUssR0FBTCxDQUFTLEtBQUssR0FBTCxDQUFTLEtBQUssR0FBTCxDQUFTLE1BQU0sR0FBZixJQUFzQixHQUEvQixDQUFULEVBQThDLEdBQTlDLENBQWY7O0FBRUEsUUFBSSxRQUFRLENBQVosRUFDQyxPQUFPLFlBQVA7QUFDRCxRQUFJLFFBQVEsQ0FBWixFQUNDLE9BQU8sWUFBUDtBQUNEOztBQUVGLE9BQUksS0FBSyxRQUFMLENBQWMsT0FBZCxLQUEwQixRQUE5QixFQUNDLFVBQVUsS0FBSyxRQUFMLENBQWMsT0FBeEIsQ0FERCxLQUVLLElBQUksTUFBTSxHQUFOLEdBQVksQ0FBaEIsRUFBbUI7QUFDdkIsY0FBVSxLQUFLLEdBQUwsQ0FBUyxNQUFNLEdBQWYsSUFBc0IsRUFBaEM7QUFDQSxJQUZJLE1BR0E7QUFDSixjQUFVLENBQVY7QUFDQTs7QUFHRDtBQUNBLE9BQUksS0FBSyxXQUFMLEtBQXFCLEtBQUssT0FBTCxLQUFpQixJQUFqQixJQUF5QixNQUFNLEtBQUssT0FBWCxDQUE5QyxDQUFKLEVBQXdFO0FBQ3ZFLFFBQUksTUFBTSxDQUFWLEVBQ0MsTUFBTSxDQUFOO0FBQ0Q7QUFDRCxPQUFJLEtBQUssV0FBTCxLQUFxQixLQUFLLE9BQUwsS0FBaUIsSUFBakIsSUFBeUIsTUFBTSxLQUFLLE9BQVgsQ0FBOUMsQ0FBSixFQUF3RTtBQUN2RSxRQUFJLE1BQU0sQ0FBVixFQUNDLE1BQU0sQ0FBTjtBQUNEO0FBQ0Q7O0FBRUQsVUFBUSxNQUFNLEdBQWQ7O0FBRUEsTUFBSSxLQUFLLElBQUwsS0FBYyxPQUFkLElBQXlCLEtBQUssS0FBTCxDQUFXLFFBQVgsQ0FBb0IsY0FBcEIsS0FBdUMsVUFBcEUsRUFBZ0Y7O0FBRS9FLE9BQUksS0FBSyxPQUFMLEtBQWlCLElBQWpCLElBQXlCLE1BQU0sS0FBSyxPQUFYLENBQTdCLEVBQ0MsS0FBSyxPQUFMLEdBQWUsTUFBTSxVQUFVLENBQS9COztBQUVELE9BQUksS0FBSyxPQUFMLEtBQWlCLElBQWpCLElBQXlCLE1BQU0sS0FBSyxPQUFYLENBQTdCLEVBQ0MsS0FBSyxPQUFMLEdBQWUsTUFBTSxVQUFVLENBQS9CO0FBRUQsR0FSRCxNQVFPOztBQUVOLFFBQUssWUFBTCxHQUFvQixRQUFwQjs7QUFFQSxPQUFJLEtBQUssT0FBTCxLQUFpQixJQUFyQixFQUEyQjtBQUMxQixRQUFJLEtBQUssSUFBTCxLQUFjLE9BQWxCLEVBQ0MsS0FBSyxPQUFMLEdBQWUsTUFBTSxVQUFVLENBQS9CLENBREQsS0FHRCxLQUFLLE9BQUwsR0FBZSxLQUFLLEtBQUwsQ0FBVyxNQUFNLEtBQUssUUFBdEIsSUFBa0MsS0FBSyxRQUF0RDs7QUFFQyxTQUFLLE9BQUwsR0FBZSxLQUFLLEdBQUwsQ0FBUyxLQUFLLE9BQWQsRUFBdUIsS0FBSyxnQkFBTCxDQUFzQixlQUF0QixLQUEwQyxJQUExQyxJQUFrRCxNQUFNLEtBQUssZ0JBQUwsQ0FBc0IsZUFBNUIsQ0FBbEQsR0FBaUcsUUFBakcsR0FBNEcsS0FBSyxnQkFBTCxDQUFzQixlQUF6SixDQUFmO0FBQ0E7O0FBRUQsT0FBSSxLQUFLLE9BQUwsS0FBaUIsSUFBckIsRUFBMkI7QUFDMUIsUUFBSSxLQUFLLElBQUwsS0FBYyxPQUFsQixFQUNDLEtBQUssT0FBTCxHQUFlLE1BQU0sVUFBVSxDQUEvQixDQURELEtBR0QsS0FBSyxPQUFMLEdBQWUsS0FBSyxJQUFMLENBQVUsTUFBTSxLQUFLLFFBQXJCLElBQWlDLEtBQUssUUFBckQ7O0FBRUMsU0FBSyxPQUFMLEdBQWUsS0FBSyxHQUFMLENBQVMsS0FBSyxPQUFkLEVBQXVCLEtBQUssZ0JBQUwsQ0FBc0IsZUFBdEIsS0FBMEMsSUFBMUMsSUFBa0QsTUFBTSxLQUFLLGdCQUFMLENBQXNCLGVBQTVCLENBQWxELEdBQWlHLENBQUMsUUFBbEcsR0FBNkcsS0FBSyxnQkFBTCxDQUFzQixlQUExSixDQUFmO0FBQ0E7O0FBRUY7OztBQUdBLE9BQUksS0FBSyxPQUFMLEtBQWlCLENBQWpCLElBQXNCLEtBQUssT0FBTCxLQUFpQixDQUEzQyxFQUE4Qzs7QUFFN0MsUUFBSSxLQUFLLFFBQUwsQ0FBYyxPQUFkLEtBQTBCLENBQTlCLEVBQWlDO0FBQ2hDLFVBQUssT0FBTCxJQUFnQixFQUFoQjtBQUNBLEtBRkQsTUFHSyxJQUFJLEtBQUssUUFBTCxDQUFjLE9BQWQsS0FBMEIsQ0FBOUIsRUFBaUM7QUFDckMsVUFBSyxPQUFMLElBQWdCLEVBQWhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Q7O0FBRUYsTUFBSyxlQUFMLEdBQXVCLEtBQUssR0FBTCxDQUFTLEtBQUssZUFBZCxFQUErQixLQUFLLE9BQXBDLENBQXZCO0FBQ0EsTUFBSyxlQUFMLEdBQXVCLEtBQUssR0FBTCxDQUFTLEtBQUssZUFBZCxFQUErQixLQUFLLE9BQXBDLENBQXZCOztBQUVBLEtBQUksS0FBSyxJQUFMLEtBQWMsT0FBZCxJQUF5QixLQUFLLEtBQUwsQ0FBVyxRQUFYLENBQW9CLGNBQXBCLEtBQXVDLFVBQXBFLEVBQ0MsS0FBSyxxQkFBTCxHQUE2QixLQUFLLGtCQUFMLENBQXdCLElBQUksSUFBSixDQUFTLEtBQUssZUFBZCxDQUF4QixFQUF3RCxLQUFLLFlBQTdELEVBQTJFLEtBQUssUUFBaEYsQ0FBN0IsQ0FERCxLQUdDLEtBQUsscUJBQUwsR0FBNkIsS0FBSyxLQUFMLENBQVcsQ0FBQyxLQUFLLGVBQUwsR0FBd0IsS0FBSyxRQUFMLEdBQWdCLEVBQXpDLElBQWdELEtBQUssUUFBaEUsSUFBNEUsS0FBSyxRQUE5Rzs7QUFFRDtBQUNBLEtBQUksQ0FBQyxLQUFLLGlCQUFWLEVBQTZCO0FBQzVCLE9BQUssaUJBQUwsR0FBeUIsVUFBekI7O0FBRUEsVUFBUSxLQUFLLEdBQUwsQ0FBUyxLQUFLLGVBQUwsR0FBdUIsS0FBSyxlQUFyQyxDQUFSOztBQUVBLE1BQUksUUFBUSxDQUFaLEVBQWU7QUFDZCxPQUFJLG1CQUFtQixLQUFLLEtBQUwsQ0FBVyxLQUFLLEdBQUwsQ0FBUyxLQUFLLEdBQUwsQ0FBUyxLQUFULElBQWtCLEtBQUssSUFBaEMsQ0FBWCxJQUFvRCxDQUEzRTs7QUFFQSxPQUFJLE1BQU0sZ0JBQU4sS0FBMkIsQ0FBQyxTQUFTLGdCQUFULENBQWhDLEVBQ0MsbUJBQW1CLENBQW5COztBQUVELE9BQUksbUJBQW1CLENBQXZCLEVBQTBCO0FBQ3pCLFNBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxtQkFBbUIsQ0FBdkMsRUFBMEMsR0FBMUM7QUFDQyxVQUFLLGlCQUFMLElBQTBCLEdBQTFCO0FBREQ7QUFFQTtBQUNEO0FBRUQ7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBdmVEOztBQXllQSxLQUFLLGFBQUwsR0FBcUIsVUFBVSxDQUFWLEVBQWEsS0FBYixFQUFvQjs7QUFFeEMsS0FBSSxNQUFNLEtBQUssS0FBTCxDQUFXLEtBQUssR0FBTCxDQUFTLENBQVQsSUFBYyxLQUFLLElBQTlCLENBQVY7QUFDQSxLQUFJLElBQUksSUFBSSxLQUFLLEdBQUwsQ0FBUyxFQUFULEVBQWEsR0FBYixDQUFaO0FBQ0EsS0FBSSxFQUFKOztBQUVBLEtBQUksS0FBSixFQUFXO0FBQ1YsTUFBSSxJQUFJLEdBQVIsRUFDQyxLQUFLLENBQUwsQ0FERCxLQUVLLElBQUksSUFBSSxDQUFSLEVBQ0osS0FBSyxDQUFMLENBREksS0FFQSxJQUFJLElBQUksQ0FBUixFQUNKLEtBQUssQ0FBTCxDQURJLEtBR0osS0FBSyxFQUFMO0FBQ0QsRUFURCxNQVVLO0FBQ0osTUFBSSxLQUFLLENBQVQsRUFDQyxLQUFLLENBQUwsQ0FERCxLQUVLLElBQUksS0FBSyxDQUFULEVBQ0osS0FBSyxDQUFMLENBREksS0FFQSxJQUFJLEtBQUssQ0FBVCxFQUNKLEtBQUssQ0FBTCxDQURJLEtBRUEsS0FBSyxFQUFMO0FBQ0w7O0FBRUQsUUFBTyxPQUFPLENBQUMsS0FBSyxLQUFLLEdBQUwsQ0FBUyxFQUFULEVBQWEsR0FBYixDQUFOLEVBQXlCLE9BQXpCLENBQWlDLEVBQWpDLENBQVAsQ0FBUDtBQUNBLENBM0JEOztBQTZCQSxLQUFLLFNBQUwsQ0FBZSxrQkFBZixHQUFvQyxZQUFZOztBQUUvQyxLQUFJLHlCQUF5Qiw0QkFBZ0IsS0FBSyxRQUFyQixFQUErQixLQUFLLFlBQXBDLENBQTdCO0FBQ0EsS0FBSSxVQUFVLEtBQUssS0FBTCxDQUFZLEtBQUssZUFBTixHQUF5QixzQkFBcEMsSUFBOEQsc0JBQTVFO0FBQ0EsS0FBSSxXQUFXLElBQUksSUFBSixDQUFTLE9BQVQsQ0FBZjs7QUFFQSxLQUFJLEtBQUssWUFBTCxLQUFzQixhQUExQixFQUF5QztBQUN4QztBQUNBO0FBQ0EsRUFIRCxNQUlLLElBQUksS0FBSyxZQUFMLEtBQXNCLFFBQTFCLEVBQW9DO0FBQ3hDLE1BQUksU0FBUyxlQUFULEtBQTZCLENBQWpDLEVBQW9DO0FBQ25DLFlBQVMsVUFBVCxDQUFvQixTQUFTLFVBQVQsS0FBd0IsQ0FBNUM7QUFDQSxZQUFTLGVBQVQsQ0FBeUIsQ0FBekI7QUFDQTtBQUNELEVBTEksTUFNQSxJQUFJLEtBQUssWUFBTCxLQUFzQixRQUExQixFQUFvQztBQUN4QyxNQUFJLFNBQVMsVUFBVCxLQUF3QixDQUF4QixJQUE2QixTQUFTLGVBQVQsS0FBNkIsQ0FBOUQsRUFBaUU7QUFDaEUsWUFBUyxVQUFULENBQW9CLFNBQVMsVUFBVCxLQUF3QixDQUE1QztBQUNBLFlBQVMsVUFBVCxDQUFvQixDQUFwQjtBQUNBLFlBQVMsZUFBVCxDQUF5QixDQUF6QjtBQUNBO0FBQ0QsRUFOSSxNQU9BLElBQUksS0FBSyxZQUFMLEtBQXNCLE1BQTFCLEVBQWtDO0FBQ3RDLE1BQUksU0FBUyxVQUFULEtBQXdCLENBQXhCLElBQTZCLFNBQVMsVUFBVCxLQUF3QixDQUFyRCxJQUEwRCxTQUFTLGVBQVQsS0FBNkIsQ0FBM0YsRUFBOEY7QUFDN0YsWUFBUyxRQUFULENBQWtCLFNBQVMsUUFBVCxLQUFzQixDQUF4QztBQUNBLFlBQVMsVUFBVCxDQUFvQixDQUFwQjtBQUNBLFlBQVMsVUFBVCxDQUFvQixDQUFwQjtBQUNBLFlBQVMsZUFBVCxDQUF5QixDQUF6QjtBQUNBO0FBQ0QsRUFQSSxNQVFBLElBQUksS0FBSyxZQUFMLEtBQXNCLEtBQTFCLEVBQWlDO0FBQ3JDLE1BQUksU0FBUyxRQUFULEtBQXNCLENBQXRCLElBQTJCLFNBQVMsVUFBVCxLQUF3QixDQUFuRCxJQUF3RCxTQUFTLFVBQVQsS0FBd0IsQ0FBaEYsSUFBcUYsU0FBUyxlQUFULEtBQTZCLENBQXRILEVBQXlIO0FBQ3hILFlBQVMsT0FBVCxDQUFpQixTQUFTLE9BQVQsS0FBcUIsQ0FBdEM7QUFDQSxZQUFTLFFBQVQsQ0FBa0IsQ0FBbEI7QUFDQSxZQUFTLFVBQVQsQ0FBb0IsQ0FBcEI7QUFDQSxZQUFTLFVBQVQsQ0FBb0IsQ0FBcEI7QUFDQSxZQUFTLGVBQVQsQ0FBeUIsQ0FBekI7QUFDQTtBQUNELEVBUkksTUFTQSxJQUFJLEtBQUssWUFBTCxLQUFzQixNQUExQixFQUFrQztBQUN0QyxNQUFJLFNBQVMsTUFBVCxLQUFvQixDQUFwQixJQUF5QixTQUFTLFFBQVQsS0FBc0IsQ0FBL0MsSUFBb0QsU0FBUyxVQUFULEtBQXdCLENBQTVFLElBQWlGLFNBQVMsVUFBVCxLQUF3QixDQUF6RyxJQUE4RyxTQUFTLGVBQVQsS0FBNkIsQ0FBL0ksRUFBa0o7QUFDakosWUFBUyxPQUFULENBQWlCLFNBQVMsT0FBVCxNQUFzQixJQUFJLFNBQVMsTUFBVCxFQUExQixDQUFqQjtBQUNBLFlBQVMsUUFBVCxDQUFrQixDQUFsQjtBQUNBLFlBQVMsVUFBVCxDQUFvQixDQUFwQjtBQUNBLFlBQVMsVUFBVCxDQUFvQixDQUFwQjtBQUNBLFlBQVMsZUFBVCxDQUF5QixDQUF6QjtBQUNBO0FBQ0QsRUFSSSxNQVNBLElBQUksS0FBSyxZQUFMLEtBQXNCLE9BQTFCLEVBQW1DO0FBQ3ZDLE1BQUksU0FBUyxPQUFULEtBQXFCLENBQXJCLElBQTBCLFNBQVMsUUFBVCxLQUFzQixDQUFoRCxJQUFxRCxTQUFTLFVBQVQsS0FBd0IsQ0FBN0UsSUFBa0YsU0FBUyxVQUFULEtBQXdCLENBQTFHLElBQStHLFNBQVMsZUFBVCxLQUE2QixDQUFoSixFQUFtSjtBQUNsSixZQUFTLFFBQVQsQ0FBa0IsU0FBUyxRQUFULEtBQXNCLENBQXhDO0FBQ0EsWUFBUyxPQUFULENBQWlCLENBQWpCO0FBQ0EsWUFBUyxRQUFULENBQWtCLENBQWxCO0FBQ0EsWUFBUyxVQUFULENBQW9CLENBQXBCO0FBQ0EsWUFBUyxVQUFULENBQW9CLENBQXBCO0FBQ0EsWUFBUyxlQUFULENBQXlCLENBQXpCO0FBQ0E7QUFDRCxFQVRJLE1BVUEsSUFBSSxLQUFLLFlBQUwsS0FBc0IsTUFBMUIsRUFBa0M7QUFDdEMsTUFBSSxTQUFTLFFBQVQsS0FBc0IsQ0FBdEIsSUFBMkIsU0FBUyxPQUFULEtBQXFCLENBQWhELElBQXFELFNBQVMsUUFBVCxLQUFzQixDQUEzRSxJQUFnRixTQUFTLFVBQVQsS0FBd0IsQ0FBeEcsSUFBNkcsU0FBUyxVQUFULEtBQXdCLENBQXJJLElBQTBJLFNBQVMsZUFBVCxLQUE2QixDQUEzSyxFQUE4SztBQUM3SyxZQUFTLFdBQVQsQ0FBcUIsU0FBUyxXQUFULEtBQXlCLENBQTlDO0FBQ0EsWUFBUyxRQUFULENBQWtCLENBQWxCO0FBQ0EsWUFBUyxPQUFULENBQWlCLENBQWpCO0FBQ0EsWUFBUyxRQUFULENBQWtCLENBQWxCO0FBQ0EsWUFBUyxVQUFULENBQW9CLENBQXBCO0FBQ0EsWUFBUyxVQUFULENBQW9CLENBQXBCO0FBQ0EsWUFBUyxlQUFULENBQXlCLENBQXpCO0FBQ0E7QUFDRDs7QUFFRCxRQUFPLFFBQVA7QUFDQSxDQXhFRDs7a0JBMEVlLEk7Ozs7Ozs7OztBQ3g1RGY7O0FBQ0E7O0FBRUEsU0FBUyxjQUFULENBQXdCLFdBQXhCLEVBQXFDLE9BQXJDLEVBQThDLEtBQTlDLEVBQXFELE1BQXJELEVBQTZEO0FBQzNELE9BQUssWUFBTCxHQUFvQixXQUFwQjs7QUFFQSxPQUFLLE1BQUwsR0FBYyxNQUFkOztBQUVBLE9BQUssZUFBTCxHQUF1QixFQUF2QixDQUwyRCxDQUtqQzs7QUFFMUIsTUFBSSxzQkFBc0IsRUFBMUI7O0FBRUEsTUFBSSxTQUFTLGVBQU8sS0FBUCxDQUFULElBQTBCLGVBQU8sS0FBUCxFQUFjLFdBQWQsQ0FBOUIsRUFDRSxzQkFBc0IsZUFBTyxLQUFQLEVBQWMsV0FBZCxDQUF0Qjs7QUFFRixPQUFLLFFBQUwsR0FBZ0IsVUFBVSxPQUFWLEdBQW9CLEVBQXBDO0FBQ0EsT0FBSyxVQUFMLENBQWdCLEtBQUssUUFBckIsRUFBK0IsbUJBQS9CO0FBQ0Q7O0FBRUQsZUFBZSxTQUFmLENBQXlCLFVBQXpCLEdBQXNDLFVBQVUsT0FBVixFQUFtQixtQkFBbkIsRUFBd0M7O0FBRTVFLE1BQUksQ0FBQyx3QkFBZSxLQUFLLFlBQXBCLENBQUwsRUFBd0M7QUFDdEMsUUFBSSx3QkFBZSxPQUFPLE9BQTFCLEVBQ0UsUUFBUSxHQUFSLENBQVksa0JBQVo7QUFDSCxHQUhELE1BSUs7QUFDSCxRQUFJLFdBQVcsd0JBQWUsS0FBSyxZQUFwQixDQUFmOztBQUVBLFNBQUssSUFBSSxJQUFULElBQWlCLFFBQWpCLEVBQTJCOztBQUV6QixVQUFJLFNBQVMsY0FBVCxDQUF3QixJQUF4QixDQUFKLEVBQW1DO0FBQ25DLFlBQUksV0FBVyxRQUFRLE9BQXZCLEVBQ0UsS0FBSyxJQUFMLElBQWEsUUFBUSxJQUFSLENBQWIsQ0FERixLQUVLLElBQUksdUJBQXVCLFFBQVEsbUJBQW5DLEVBQ0gsS0FBSyxJQUFMLElBQWEsb0JBQW9CLElBQXBCLENBQWIsQ0FERyxLQUVBLEtBQUssSUFBTCxJQUFhLFNBQVMsSUFBVCxDQUFiOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0Q7QUFFRjtBQUNBO0FBQ0YsQ0ExQkQ7O0FBNEJBO0FBQ0EsZUFBZSxTQUFmLENBQXlCLFlBQXpCLEdBQXdDLFVBQVUsSUFBVixFQUFnQjs7QUFFdEQsTUFBSSxDQUFDLHdCQUFlLEtBQUssWUFBcEIsQ0FBRCw0QkFBcUQsT0FBTyxPQUFoRSxFQUNFLFFBQVEsR0FBUixDQUFZLGtCQUFaOztBQUVGLE1BQUksV0FBVyx3QkFBZSxLQUFLLFlBQXBCLENBQWY7QUFDQSxNQUFJLFFBQVEsS0FBSyxRQUFMLENBQWMsS0FBZCxHQUFzQixLQUFLLFFBQUwsQ0FBYyxLQUFwQyxHQUE2QyxLQUFLLEtBQUwsSUFBYyxLQUFLLEtBQUwsQ0FBVyxRQUFYLENBQW9CLEtBQW5DLEdBQTRDLEtBQUssS0FBTCxDQUFXLFFBQVgsQ0FBb0IsS0FBaEUsR0FBd0UsUUFBaEk7O0FBRUEsTUFBSSxzQkFBc0IsRUFBMUI7QUFDQSxNQUFJLFdBQVcsS0FBSyxJQUFMLENBQWY7O0FBRUEsTUFBSSxTQUFTLGVBQU8sS0FBUCxDQUFULElBQTBCLGVBQU8sS0FBUCxFQUFjLEtBQUssWUFBbkIsQ0FBOUIsRUFDRSxzQkFBc0IsZUFBTyxLQUFQLEVBQWMsS0FBSyxZQUFuQixDQUF0Qjs7QUFFRixNQUFJLFFBQVEsUUFBWixFQUFzQjtBQUNwQixRQUFJLFFBQVEsS0FBSyxRQUFqQixFQUNFLFdBQVcsS0FBSyxRQUFMLENBQWMsSUFBZCxDQUFYLENBREYsS0FFSyxJQUFJLHVCQUF1QixRQUFRLG1CQUFuQyxFQUNILFdBQVcsb0JBQW9CLElBQXBCLENBQVgsQ0FERyxLQUVBLFdBQVcsU0FBUyxJQUFULENBQVg7QUFDTjs7QUFFRCxNQUFJLGFBQWEsS0FBSyxJQUFMLENBQWpCLEVBQ0UsT0FBTyxLQUFQOztBQUVGLE9BQUssSUFBTCxJQUFhLFFBQWI7QUFDQSxTQUFPLElBQVA7QUFDRCxDQTNCRDs7QUE2QkE7QUFDQSxlQUFlLFNBQWYsQ0FBeUIsWUFBekIsR0FBd0MsVUFBVSxNQUFWLEVBQWtCO0FBQ3hELE1BQUksQ0FBQyxLQUFLLGdCQUFWLEVBQ0UsTUFBTSxnQ0FBTjs7QUFFRixPQUFLLGdCQUFMLENBQXNCLE1BQXRCLElBQWdDLEtBQUssUUFBTCxDQUFjLE1BQWQsQ0FBaEM7QUFDRCxDQUxEOztBQU9BLGVBQWUsU0FBZixDQUF5QixjQUF6QixHQUEwQyxVQUFVLE1BQVYsRUFBa0I7QUFDMUQsTUFBSSxDQUFDLEtBQUssUUFBTCxDQUFjLFdBQW5CLEVBQ0UsS0FBSyxRQUFMLENBQWMsV0FBZCxHQUE0QixFQUE1Qjs7QUFFRixNQUFJLEtBQUssUUFBTCxDQUFjLFdBQWQsQ0FBMEIsTUFBMUIsQ0FBSixFQUNFLE9BQU8sSUFBUCxDQURGLEtBR0UsT0FBTyxLQUFQO0FBQ0gsQ0FSRDs7QUFVQSxlQUFlLFNBQWYsQ0FBeUIsZ0JBQXpCLEdBQTRDLFVBQVUsTUFBVixFQUFrQjtBQUM1RCxNQUFJLENBQUMsS0FBSyxnQkFBVixFQUNFLE1BQU0sZ0NBQU47O0FBRUYsTUFBSSxhQUFhLEVBQUUsS0FBSyxnQkFBTCxDQUFzQixNQUF0QixNQUFrQyxLQUFLLFFBQUwsQ0FBYyxNQUFkLENBQXBDLENBQWpCOztBQUVBLFNBQU8sVUFBUDtBQUNELENBUEQ7O0FBU0EsZUFBZSxTQUFmLENBQXlCLGdCQUF6QixHQUE0QyxVQUFVLFNBQVYsRUFBcUIsWUFBckIsRUFBbUMsT0FBbkMsRUFBNEM7QUFDdEYsTUFBSSxDQUFDLFNBQUQsSUFBYyxDQUFDLFlBQW5CLEVBQ0U7O0FBRUYsWUFBVSxXQUFXLElBQXJCOztBQUVBLE9BQUssZUFBTCxDQUFxQixTQUFyQixJQUFrQyxLQUFLLGVBQUwsQ0FBcUIsU0FBckIsS0FBbUMsRUFBckU7O0FBRUEsT0FBSyxlQUFMLENBQXFCLFNBQXJCLEVBQWdDLElBQWhDLENBQXFDLEVBQUUsU0FBUyxPQUFYLEVBQW9CLGNBQWMsWUFBbEMsRUFBckM7QUFDRCxDQVREOztBQVdBLGVBQWUsU0FBZixDQUF5QixtQkFBekIsR0FBK0MsVUFBVSxTQUFWLEVBQXFCLFlBQXJCLEVBQW1DO0FBQ2hGLE1BQUksQ0FBQyxTQUFELElBQWMsQ0FBQyxZQUFmLElBQStCLENBQUMsS0FBSyxlQUFMLENBQXFCLFNBQXJCLENBQXBDLEVBQ0U7O0FBRUYsTUFBSSxZQUFZLEtBQUssZUFBTCxDQUFxQixTQUFyQixDQUFoQjtBQUNBLE9BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxVQUFVLE1BQTlCLEVBQXNDLEdBQXRDLEVBQTJDOztBQUV6QyxRQUFJLFVBQVUsQ0FBVixFQUFhLFlBQWIsS0FBOEIsWUFBbEMsRUFBZ0Q7QUFDOUMsZ0JBQVUsQ0FBVixFQUFhLE1BQWIsQ0FBb0IsQ0FBcEIsRUFBdUIsQ0FBdkI7QUFDQTtBQUNEO0FBQ0Y7QUFDRixDQVpEOztBQWNBLGVBQWUsU0FBZixDQUF5Qix1QkFBekIsR0FBbUQsWUFBWTtBQUM3RCxPQUFLLGVBQUwsR0FBdUIsRUFBdkI7QUFDRCxDQUZEOztBQUlBLGVBQWUsU0FBZixDQUF5QixhQUF6QixHQUF5QyxVQUFVLFNBQVYsRUFBcUIsY0FBckIsRUFBcUMsT0FBckMsRUFBOEM7O0FBRXJGO0FBQ0EsTUFBSSxhQUFhLEtBQUssZUFBTCxDQUFxQixTQUFyQixDQUFqQixFQUFrRDs7QUFFbEQscUJBQWlCLGtCQUFrQixFQUFuQzs7QUFFQSxRQUFJLFlBQVksS0FBSyxlQUFMLENBQXFCLFNBQXJCLENBQWhCO0FBQ0EsU0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFVBQVUsTUFBOUIsRUFBc0MsR0FBdEMsRUFBMkM7O0FBRXpDLGdCQUFVLENBQVYsRUFBYSxZQUFiLENBQTBCLElBQTFCLENBQStCLFVBQVUsQ0FBVixFQUFhLE9BQTVDLEVBQXFELGNBQXJEO0FBQ0Q7QUFDRjs7QUFFQztBQUNBLE1BQUksT0FBUSxLQUFLLFNBQUwsQ0FBUixLQUE2QixVQUFqQyxFQUE2QztBQUMzQyxTQUFLLFNBQUwsRUFBZ0IsSUFBaEIsQ0FBcUIsV0FBVyxLQUFLLEtBQUwsQ0FBVyxxQkFBM0MsRUFBa0UsY0FBbEU7QUFDRDtBQUNGLENBbEJEOztrQkFvQmUsYzs7Ozs7Ozs7O0FDeEpmOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBc0JBOzs7OztBQXhCQTs7QUErQ0EsU0FBUyxLQUFULENBQWUsV0FBZixFQUE0QixPQUE1QixFQUFxQyxvQkFBckMsRUFBMkQ7O0FBRTFELE1BQUsscUJBQUwsR0FBNkIsb0JBQTdCOztBQUVBLFdBQVUsV0FBVyxFQUFyQjs7QUFFQSxPQUFNLElBQU4sQ0FBVyxXQUFYLENBQXVCLElBQXZCLENBQTRCLElBQTVCLEVBQWtDLE9BQWxDLEVBQTJDLE9BQTNDLEVBQW9ELFFBQVEsS0FBUixHQUFnQixRQUFRLEtBQXhCLEdBQWdDLFFBQXBGOztBQUVBLEtBQUksUUFBUSxJQUFaOztBQUVBLE1BQUssWUFBTCxHQUFvQixXQUFwQjtBQUNBLE1BQUssbUJBQUwsR0FBMkIsS0FBM0I7QUFDQSxNQUFLLEdBQUwsR0FBVyxJQUFYO0FBQ0EsTUFBSyxpQkFBTCxHQUF5QixJQUF6QjtBQUNBLE1BQUssWUFBTCxHQUFvQixFQUFwQjtBQUNBLE1BQUssV0FBTCxHQUFtQixDQUFuQjtBQUNBLE1BQUssbUJBQUwsR0FBMkIsRUFBM0I7QUFDQSxNQUFLLGNBQUwsR0FBc0IsSUFBdEI7QUFDQSxNQUFLLFdBQUwsR0FBbUIsS0FBbkI7QUFDQSxNQUFLLFdBQUwsR0FBbUIsQ0FBbkI7QUFDQSxNQUFLLGNBQUwsR0FBc0IsS0FBdEI7QUFDQSxNQUFLLGNBQUwsR0FBc0IsS0FBdEI7O0FBR0EsTUFBSyxVQUFMLEdBQWtCLEtBQWxCO0FBQ0EsTUFBSyxjQUFMLEdBQXNCLFNBQXRCO0FBQ0EsTUFBSyxRQUFMLEdBQWdCLEVBQUUsUUFBUSxJQUFWLEVBQWdCLEtBQUssSUFBckIsRUFBMkIsSUFBSSxDQUEvQixFQUFrQyxJQUFJLENBQXRDLEVBQXlDLElBQUksQ0FBN0MsRUFBZ0QsSUFBSSxDQUFwRCxFQUF1RCxPQUFPLENBQTlELEVBQWlFLFFBQVEsQ0FBekUsRUFBaEI7QUFDQSxNQUFLLG9CQUFMLEdBQTRCLEVBQTVCOztBQUVBLE1BQUssVUFBTCxHQUFrQixPQUFRLEtBQUssWUFBYixLQUErQixRQUEvQixHQUEwQyxTQUFTLGNBQVQsQ0FBd0IsS0FBSyxZQUE3QixDQUExQyxHQUF1RixLQUFLLFlBQTlHOztBQUVBLEtBQUksQ0FBQyxLQUFLLFVBQVYsRUFBc0I7QUFDckIsTUFBSSxPQUFPLE9BQVgsRUFDQyxPQUFPLE9BQVAsQ0FBZSxHQUFmLENBQW1CLCtDQUErQyxLQUFLLFlBQXBELEdBQW1FLGtCQUF0RjtBQUNEO0FBQ0E7O0FBRUQsTUFBSyxVQUFMLENBQWdCLFNBQWhCLEdBQTRCLEVBQTVCOztBQUVBLEtBQUksUUFBUSxDQUFaO0FBQ0EsS0FBSSxTQUFTLENBQWI7O0FBRUEsS0FBSSxLQUFLLFFBQUwsQ0FBYyxLQUFsQixFQUNDLFFBQVEsS0FBSyxLQUFiLENBREQsS0FHQyxRQUFRLEtBQUssVUFBTCxDQUFnQixXQUFoQixHQUE4QixDQUE5QixHQUFrQyxLQUFLLFVBQUwsQ0FBZ0IsV0FBbEQsR0FBZ0UsS0FBSyxLQUE3RTs7QUFFRCxLQUFJLEtBQUssUUFBTCxDQUFjLE1BQWxCLEVBQ0MsU0FBUyxLQUFLLE1BQWQsQ0FERCxLQUdDLFNBQVMsS0FBSyxVQUFMLENBQWdCLFlBQWhCLEdBQStCLENBQS9CLEdBQW1DLEtBQUssVUFBTCxDQUFnQixZQUFuRCxHQUFrRSxLQUFLLE1BQWhGOztBQUVELE1BQUssS0FBTCxHQUFhLEtBQWI7QUFDQSxNQUFLLE1BQUwsR0FBYyxNQUFkOztBQUVBLE1BQUssRUFBTCxHQUFVLEtBQUssRUFBTCxHQUFVLENBQXBCO0FBQ0EsTUFBSyxFQUFMLEdBQVUsS0FBSyxLQUFmO0FBQ0EsTUFBSyxFQUFMLEdBQVUsS0FBSyxNQUFmOztBQUdBLE1BQUssaUJBQUwsR0FBeUIsT0FBUSxrQkFBVSxLQUFLLFFBQWYsQ0FBUixLQUFzQyxXQUF0QyxHQUFvRCxrQkFBVSxLQUFLLFFBQWYsQ0FBcEQsR0FBK0Usa0JBQVUsV0FBVixDQUF4Rzs7QUFFQSxNQUFLLGtCQUFMLEdBQTBCLFNBQVMsYUFBVCxDQUF1QixLQUF2QixDQUExQjtBQUNBLE1BQUssa0JBQUwsQ0FBd0IsWUFBeEIsQ0FBcUMsT0FBckMsRUFBOEMsMEJBQTlDOztBQUVBLE1BQUssa0JBQUwsQ0FBd0IsS0FBeEIsQ0FBOEIsUUFBOUIsR0FBeUMsVUFBekM7QUFDQSxNQUFLLGtCQUFMLENBQXdCLEtBQXhCLENBQThCLFNBQTlCLEdBQTBDLE1BQTFDO0FBQ0EsTUFBSyxrQkFBTCxDQUF3QixLQUF4QixDQUE4QixNQUE5QixHQUF1QyxNQUF2Qzs7QUFFQSxLQUFJLHlCQUFKLEVBQXdCO0FBQ3ZCLE9BQUssa0JBQUwsQ0FBd0IsS0FBeEIsQ0FBOEIsTUFBOUIsR0FBdUMsS0FBdkMsQ0FEdUIsQ0FDc0I7QUFDN0M7QUFDRCxNQUFLLFVBQUwsQ0FBZ0IsV0FBaEIsQ0FBNEIsS0FBSyxrQkFBakM7O0FBR0EsTUFBSyxNQUFMLEdBQWMseUJBQWEsS0FBYixFQUFvQixNQUFwQixDQUFkOztBQUVBLE1BQUssTUFBTCxDQUFZLEtBQVosQ0FBa0IsUUFBbEIsR0FBNkIsVUFBN0I7QUFDQSxLQUFJLEtBQUssTUFBTCxDQUFZLFVBQWhCLEVBQTRCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLE9BQUssa0JBQUwsQ0FBd0IsV0FBeEIsQ0FBb0MsS0FBSyxNQUF6QztBQUNBLE9BQUssR0FBTCxHQUFXLEtBQUssTUFBTCxDQUFZLFVBQVosQ0FBdUIsSUFBdkIsQ0FBWDtBQUNBLE9BQUssR0FBTCxDQUFTLFlBQVQsR0FBd0IsS0FBeEI7QUFDQSx3QkFBVSxLQUFLLEdBQWY7QUFFQSxFQVRELE1BU087O0FBRVA7O0FBRUEsS0FBSSx5QkFBSixFQUF3QjtBQUN2QixPQUFLLFFBQUwsQ0FBYyxNQUFkLEdBQXVCLHlCQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBdkI7QUFDQSxPQUFLLFFBQUwsQ0FBYyxNQUFkLENBQXFCLEtBQXJCLENBQTJCLFFBQTNCLEdBQXNDLFVBQXRDO0FBQ0EsT0FBSyxRQUFMLENBQWMsTUFBZCxDQUFxQixZQUFyQixDQUFrQyxPQUFsQyxFQUEyQyxnQkFBM0M7QUFDQSxPQUFLLGtCQUFMLENBQXdCLFdBQXhCLENBQW9DLEtBQUssUUFBTCxDQUFjLE1BQWxEOztBQUVBLE9BQUssUUFBTCxDQUFjLEdBQWQsR0FBb0IsS0FBSyxRQUFMLENBQWMsTUFBZCxDQUFxQixVQUFyQixDQUFnQyxJQUFoQyxDQUFwQjtBQUNBLEVBUEQsTUFPTztBQUNOLE9BQUssUUFBTCxDQUFjLEdBQWQsR0FBb0IsS0FBSyxHQUF6QjtBQUNBOztBQUVELE1BQUssY0FBTCxHQUFzQix5QkFBYSxLQUFiLEVBQW9CLE1BQXBCLENBQXRCO0FBQ0EsTUFBSyxjQUFMLENBQW9CLEtBQXBCLENBQTBCLFFBQTFCLEdBQXFDLFVBQXJDO0FBQ0EsTUFBSyxrQkFBTCxDQUF3QixXQUF4QixDQUFvQyxLQUFLLGNBQXpDO0FBQ0EsTUFBSyxpQkFBTCxHQUF5QixLQUFLLGNBQUwsQ0FBb0IsVUFBcEIsQ0FBK0IsSUFBL0IsQ0FBekI7QUFDQSxNQUFLLGlCQUFMLENBQXVCLFlBQXZCLEdBQXNDLEtBQXRDOztBQUVBLE1BQUssYUFBTCxHQUFxQiw0QkFBaUIsSUFBakIsQ0FBckI7O0FBRUEsc0JBQVMsTUFBVCxFQUFpQixRQUFqQixFQUEyQixZQUFZO0FBQ3RDOztBQUVBLE1BQUksTUFBTSxXQUFOLEVBQUosRUFDQyxNQUFNLE1BQU47QUFDRCxFQUxEOztBQVFBLE1BQUssUUFBTCxHQUFnQixTQUFTLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBaEI7QUFDQSxNQUFLLFFBQUwsQ0FBYyxZQUFkLENBQTJCLE9BQTNCLEVBQW9DLHdCQUFwQztBQUNBLE1BQUssUUFBTCxDQUFjLEtBQWQsQ0FBb0IsT0FBcEIsR0FBOEIsMkNBQTlCO0FBQ0EsTUFBSyxrQkFBTCxDQUF3QixXQUF4QixDQUFvQyxLQUFLLFFBQXpDOztBQUdBLE1BQUssTUFBTCxHQUFjLEVBQUUsSUFBSSxDQUFOLEVBQVMsSUFBSSxDQUFiLEVBQWdCLElBQUksS0FBSyxLQUF6QixFQUFnQyxJQUFJLEtBQUssTUFBekMsRUFBZDs7QUFFQSxzQkFBUyxLQUFLLGNBQWQsRUFBOEIsT0FBOUIsRUFBdUMsVUFBVSxDQUFWLEVBQWE7QUFDbkQsUUFBTSxrQkFBTixDQUF5QixDQUF6QjtBQUNBLEVBRkQ7O0FBSUEsc0JBQVMsS0FBSyxjQUFkLEVBQThCLFdBQTlCLEVBQTJDLFVBQVUsQ0FBVixFQUFhO0FBQ3ZELFFBQU0sa0JBQU4sQ0FBeUIsQ0FBekI7QUFDQSxFQUZEOztBQUlBLHNCQUFTLEtBQUssY0FBZCxFQUE4QixTQUE5QixFQUF5QyxVQUFVLENBQVYsRUFBYTtBQUNyRCxRQUFNLGtCQUFOLENBQXlCLENBQXpCO0FBQ0EsRUFGRDs7QUFJQSxzQkFBUyxLQUFLLGNBQWQsRUFBOEIsV0FBOUIsRUFBMkMsVUFBVSxDQUFWLEVBQWE7QUFDdkQsUUFBTSxrQkFBTixDQUF5QixDQUF6QjtBQUNBLG1CQUFLLE1BQU0sYUFBWDtBQUNBLEVBSEQ7O0FBS0Esc0JBQVMsS0FBSyxjQUFkLEVBQThCLFVBQTlCLEVBQTBDLFVBQVUsQ0FBVixFQUFhO0FBQ3RELFFBQU0sa0JBQU4sQ0FBeUIsQ0FBekI7QUFDQSxFQUZEOztBQUtBLHNCQUFTLEtBQUssY0FBZCxFQUE4QixPQUFPLFNBQVAsQ0FBaUIsZ0JBQWpCLEdBQW9DLGVBQXBDLEdBQXNELFlBQXBGLEVBQWtHLFVBQVUsQ0FBVixFQUFhO0FBQzlHLFFBQU0sa0JBQU4sQ0FBeUIsQ0FBekI7QUFDQSxFQUZEOztBQUlBLHNCQUFTLEtBQUssY0FBZCxFQUE4QixPQUFPLFNBQVAsQ0FBaUIsZ0JBQWpCLEdBQW9DLGVBQXBDLEdBQXNELFdBQXBGLEVBQWlHLFVBQVUsQ0FBVixFQUFhO0FBQzdHLFFBQU0sa0JBQU4sQ0FBeUIsQ0FBekI7QUFDQSxFQUZEOztBQUlBLHNCQUFTLEtBQUssY0FBZCxFQUE4QixPQUFPLFNBQVAsQ0FBaUIsZ0JBQWpCLEdBQW9DLGFBQXBDLEdBQW9ELFVBQWxGLEVBQThGLFVBQVUsQ0FBVixFQUFhO0FBQzFHLFFBQU0sa0JBQU4sQ0FBeUIsQ0FBekI7QUFDQSxFQUZEOztBQUlBLHNCQUFTLEtBQUssY0FBZCxFQUE4QixPQUFPLFNBQVAsQ0FBaUIsZ0JBQWpCLEdBQW9DLGlCQUFwQyxHQUF3RCxhQUF0RixFQUFxRyxVQUFVLENBQVYsRUFBYTtBQUNqSCxRQUFNLGtCQUFOLENBQXlCLENBQXpCO0FBQ0EsRUFGRDs7QUFJQSxLQUFJLENBQUMsS0FBSyxXQUFWLEVBQXVCOztBQUV0QixPQUFLLFdBQUwsR0FBbUIsU0FBUyxhQUFULENBQXVCLEdBQXZCLENBQW5CO0FBQ0EsT0FBSyxXQUFMLENBQWlCLFlBQWpCLENBQThCLE9BQTlCLEVBQXVDLHVCQUF2QztBQUNBLE9BQUssV0FBTCxDQUFpQixZQUFqQixDQUE4QixPQUE5QixFQUF1Qyw4REFBOEQsS0FBSyxNQUFMLEdBQWMsRUFBNUUsSUFBa0Ysd0hBQXpIOztBQUVBLE9BQUssV0FBTCxDQUFpQixZQUFqQixDQUE4QixVQUE5QixFQUEwQyxDQUFDLENBQTNDOztBQUVBLE9BQUssV0FBTCxDQUFpQixZQUFqQixDQUE4QixRQUE5QixFQUF3QyxRQUF4QztBQUNBOztBQUVELE1BQUssUUFBTCxHQUFnQixzQkFBWSxJQUFaLEVBQWtCLEtBQUssUUFBTCxDQUFjLE9BQWhDLEVBQXlDLEtBQUssS0FBOUMsQ0FBaEI7O0FBRUEsTUFBSyxJQUFMLEdBQVksSUFBWjtBQUNBLE1BQUssS0FBTCxHQUFhLElBQWI7QUFDQSxNQUFLLEtBQUwsR0FBYSxJQUFiO0FBQ0EsTUFBSyxNQUFMLEdBQWMsSUFBZDs7QUFFQSxNQUFLLGdCQUFMLEdBQXdCO0FBQ3ZCLFNBQU8sRUFEZ0I7QUFFdkIsU0FBTyxFQUZnQjtBQUd2QixVQUFRO0FBSGUsRUFBeEI7QUFLQTs7QUFFRCxtQkFBTyxLQUFQOztBQUVBO0FBQ0EsTUFBTSxTQUFOLENBQWdCLGNBQWhCLEdBQWlDLFlBQVk7O0FBRTVDLEtBQUksUUFBUSxJQUFaOztBQUVBLE1BQUssWUFBTCxDQUFrQixPQUFsQjtBQUNBLE1BQUssWUFBTCxDQUFrQixRQUFsQjtBQUNBLE1BQUssWUFBTCxDQUFrQixtQkFBbEI7QUFDQSxNQUFLLFlBQUwsQ0FBa0Isc0JBQWxCO0FBQ0EsTUFBSyxZQUFMLENBQWtCLE9BQWxCOztBQUVBLEtBQUksS0FBSyxZQUFMLENBQWtCLFVBQWxCLENBQUosRUFDQyxLQUFLLGlCQUFMLEdBQXlCLE9BQVEsa0JBQVUsS0FBSyxRQUFmLENBQVIsS0FBc0MsV0FBdEMsR0FBb0Qsa0JBQVUsS0FBSyxRQUFmLENBQXBELEdBQStFLGtCQUFVLFdBQVYsQ0FBeEc7O0FBRUQsTUFBSyxZQUFMLENBQWtCLGlCQUFsQjtBQUNBLEtBQUksQ0FBQyxLQUFLLGVBQVYsRUFDQyxLQUFLLGVBQUwsR0FBdUIsZUFBdkI7O0FBRUQsTUFBSyxZQUFMLENBQWtCLFNBQWxCO0FBQ0EsTUFBSyxZQUFMLEdBQW9CLDJCQUFnQixLQUFLLFFBQUwsQ0FBYyxPQUE5QixDQUFwQjs7QUFFQSxNQUFLLFlBQUwsQ0FBa0Isa0JBQWxCO0FBQ0EsTUFBSyxnQkFBTCxHQUF3QixLQUFLLGdCQUFMLDRCQUF4QjtBQUNBLE1BQUssWUFBTCxDQUFrQixtQkFBbEI7O0FBRUEsTUFBSyxZQUFMLENBQWtCLGVBQWxCO0FBQ0EsTUFBSyxZQUFMLENBQWtCLGNBQWxCOztBQUVBO0FBQ0EsS0FBSSxLQUFLLFFBQUwsQ0FBYyxXQUFsQixFQUErQjs7QUFFOUIsTUFBSSxDQUFDLEtBQUssV0FBVixFQUF1Qjs7QUFFdEIsb0JBQUssS0FBSyxXQUFMLEdBQW1CLFNBQVMsYUFBVCxDQUF1QixRQUF2QixDQUF4Qjs7QUFFQSxrQkFBZSxJQUFmLEVBQXFCLEtBQUssV0FBMUIsRUFBdUMsS0FBdkM7O0FBRUEsUUFBSyxRQUFMLENBQWMsV0FBZCxDQUEwQixLQUFLLFdBQS9CO0FBQ0Esd0JBQVMsS0FBSyxXQUFkLEVBQTJCLE9BQTNCLEVBQW9DLFlBQVk7QUFDL0MsUUFBSSxNQUFNLFdBQVYsRUFBdUI7QUFDdEIsV0FBTSxXQUFOLEdBQW9CLEtBQXBCO0FBQ0EsV0FBTSxVQUFOLEdBQW1CLElBQW5COztBQUVBLG9CQUFlLEtBQWYsRUFBc0IsTUFBTSxXQUE1QixFQUF5QyxNQUF6QztBQUVBLEtBTkQsTUFNTztBQUNOLFdBQU0sV0FBTixHQUFvQixJQUFwQjtBQUNBLFdBQU0sVUFBTixHQUFtQixLQUFuQjs7QUFFQSxvQkFBZSxLQUFmLEVBQXNCLE1BQU0sV0FBNUIsRUFBeUMsS0FBekM7QUFDQTs7QUFFRCxVQUFNLE1BQU47QUFDQSxJQWZEO0FBZ0JBOztBQUdELE1BQUksQ0FBQyxLQUFLLFlBQVYsRUFBd0I7QUFDdkIsb0JBQUssS0FBSyxZQUFMLEdBQW9CLFNBQVMsYUFBVCxDQUF1QixRQUF2QixDQUF6QjtBQUNBLGtCQUFlLElBQWYsRUFBcUIsS0FBSyxZQUExQixFQUF3QyxPQUF4QztBQUNBLFFBQUssUUFBTCxDQUFjLFdBQWQsQ0FBMEIsS0FBSyxZQUEvQjs7QUFFQSx3QkFBUyxLQUFLLFlBQWQsRUFBNEIsT0FBNUIsRUFBcUMsWUFBWTs7QUFFaEQsVUFBTSxRQUFOLENBQWUsSUFBZjs7QUFFQSxRQUFJLE1BQU0sV0FBTixJQUFxQixNQUFNLFVBQS9CLEVBQTJDO0FBQzFDLFdBQU0sV0FBTixHQUFvQixJQUFwQjtBQUNBLFdBQU0sVUFBTixHQUFtQixLQUFuQjtBQUNBLG9CQUFlLEtBQWYsRUFBc0IsTUFBTSxXQUE1QixFQUF5QyxLQUF6Qzs7QUFFQSxXQUFNLGNBQU4sR0FBdUIsU0FBdkI7QUFDQSxXQUFNLGNBQU4sQ0FBcUIsS0FBckIsQ0FBMkIsTUFBM0IsR0FBb0MsTUFBTSxjQUExQztBQUNBLEtBUEQsTUFPTztBQUNOLFdBQU0sV0FBTixHQUFvQixLQUFwQjtBQUNBLFdBQU0sVUFBTixHQUFtQixLQUFuQjtBQUNBO0FBQ0Q7QUFDQSxRQUFJLE1BQU0sZ0JBQU4sQ0FBdUIsS0FBM0IsRUFBa0M7QUFDakMsV0FBTSxnQkFBTixDQUF1QixLQUF2QixDQUE2QixrQkFBN0IsR0FBa0QsSUFBbEQ7QUFDQSxXQUFNLGdCQUFOLENBQXVCLEtBQXZCLENBQTZCLGtCQUE3QixHQUFrRCxJQUFsRDtBQUNBOztBQUVEO0FBQ0EsUUFBSSxNQUFNLGdCQUFOLENBQXVCLEtBQTNCLEVBQWtDO0FBQ2pDLFdBQU0sZ0JBQU4sQ0FBdUIsS0FBdkIsQ0FBNkIsa0JBQTdCLEdBQWtELElBQWxEO0FBQ0EsV0FBTSxnQkFBTixDQUF1QixLQUF2QixDQUE2QixrQkFBN0IsR0FBa0QsSUFBbEQ7QUFDQTs7QUFFRDtBQUNBLFFBQUksTUFBTSxnQkFBTixDQUF1QixNQUEzQixFQUFtQztBQUNsQyxXQUFNLGdCQUFOLENBQXVCLE1BQXZCLENBQThCLGtCQUE5QixHQUFtRCxJQUFuRDtBQUNBLFdBQU0sZ0JBQU4sQ0FBdUIsTUFBdkIsQ0FBOEIsa0JBQTlCLEdBQW1ELElBQW5EO0FBQ0E7O0FBRUQsVUFBTSxvQkFBTjs7QUFFQSxxQkFBSyxNQUFNLFdBQVgsRUFBd0IsTUFBTSxZQUE5Qjs7QUFFQSxVQUFNLG1CQUFOLENBQTBCLGVBQTFCLEVBQTJDLE9BQTNDO0FBQ0EsVUFBTSxNQUFOO0FBQ0EsVUFBTSxtQkFBTixDQUEwQixjQUExQixFQUEwQyxPQUExQztBQUNBLElBeENEOztBQTBDQSxRQUFLLGNBQUwsQ0FBb0IsS0FBcEIsQ0FBMEIsTUFBMUIsR0FBbUMsTUFBTSxjQUF6QztBQUNBOztBQUVELE1BQUksQ0FBQyxLQUFLLFdBQU4sSUFBcUIsQ0FBQyxLQUFLLFVBQS9CLEVBQTJDO0FBQzFDLE9BQUksQ0FBQyxLQUFLLFdBQVYsRUFBdUI7QUFDdEIsU0FBSyxXQUFMLEdBQW1CLElBQW5CO0FBQ0EsU0FBSyxVQUFMLEdBQWtCLEtBQWxCO0FBQ0EsSUFIRCxNQUdPOztBQUVOLFFBQUksTUFBTSxXQUFOLENBQWtCLFlBQWxCLENBQStCLE9BQS9CLE1BQTRDLE1BQU0sWUFBTixDQUFtQixRQUFuRSxFQUE2RTtBQUM1RSxVQUFLLFVBQUwsR0FBa0IsSUFBbEI7QUFDQSxVQUFLLFdBQUwsR0FBbUIsS0FBbkI7QUFDQSxLQUhELE1BSUs7QUFDSixVQUFLLFdBQUwsR0FBbUIsSUFBbkI7QUFDQSxVQUFLLFVBQUwsR0FBa0IsS0FBbEI7QUFDQTs7QUFFRCxxQkFBSyxNQUFNLFdBQVgsRUFBd0IsTUFBTSxZQUE5QjtBQUNBO0FBQ0Q7QUFJRCxFQW5HRCxNQW1HTztBQUNOLE9BQUssV0FBTCxHQUFtQixLQUFuQjtBQUNBLE9BQUssVUFBTCxHQUFrQixLQUFsQjtBQUNBOztBQUlELEtBQUksS0FBSyxXQUFULEVBQXNCO0FBQ3JCLE1BQUksS0FBSyxhQUFULEVBQ0MsaUJBQUssS0FBSyxXQUFWLEVBREQsS0FHQyxpQkFBSyxLQUFLLFdBQVY7QUFDRCxFQUxELE1BS08sSUFBSSxLQUFLLGFBQUwsNEJBQUosRUFBNkM7QUFDbkQsT0FBSyxXQUFMLEdBQW1CLFNBQVMsYUFBVCxDQUF1QixRQUF2QixDQUFuQjtBQUNBLGlCQUFlLElBQWYsRUFBcUIsS0FBSyxXQUExQixFQUF1QyxNQUF2QztBQUNBLE9BQUssUUFBTCxDQUFjLFdBQWQsQ0FBMEIsS0FBSyxXQUEvQjs7QUFFQSx1QkFBUyxLQUFLLFdBQWQsRUFBMkIsT0FBM0IsRUFBb0MsWUFBWTtBQUMvQyxPQUFJLE1BQU0sYUFBTixDQUFvQixLQUFwQixDQUEwQixPQUExQixLQUFzQyxNQUExQyxFQUFrRDs7QUFFakQsUUFBSSxNQUFNLGtCQUFOLElBQThCLElBQUksSUFBSixFQUFELENBQWEsT0FBYixLQUF5QixNQUFNLGtCQUFOLENBQXlCLE9BQXpCLEVBQXpCLElBQStELEdBQWhHLEVBQ0M7O0FBRUQsVUFBTSxhQUFOLENBQW9CLEtBQXBCLENBQTBCLE9BQTFCLEdBQW9DLE9BQXBDO0FBQ0EsVUFBTSxXQUFOLENBQWtCLElBQWxCO0FBQ0EsVUFBTSxhQUFOLENBQW9CLEtBQXBCO0FBQ0E7QUFFRCxHQVhELEVBV0csSUFYSDtBQVlBOztBQUdELEtBQUksQ0FBQyxLQUFLLGFBQU4sSUFBdUIsS0FBSyxhQUE1Qiw0QkFBSixFQUFvRTtBQUNuRSxPQUFLLGFBQUwsR0FBcUIsU0FBUyxhQUFULENBQXVCLEtBQXZCLENBQXJCO0FBQ0EsT0FBSyxhQUFMLENBQW1CLFlBQW5CLENBQWdDLFVBQWhDLEVBQTRDLENBQUMsQ0FBN0M7QUFDQSxPQUFLLGFBQUwsQ0FBbUIsS0FBbkIsQ0FBeUIsT0FBekIsR0FBbUMsMlhBQW5DO0FBQ0EsUUFBTSxhQUFOLENBQW9CLEtBQXBCLENBQTBCLE9BQTFCLEdBQW9DLE1BQXBDO0FBQ0EsT0FBSyxRQUFMLENBQWMsV0FBZCxDQUEwQixLQUFLLGFBQS9COztBQUVBLHVCQUFTLEtBQUssYUFBZCxFQUE2QixNQUE3QixFQUFxQyxZQUFZO0FBQ2hELG9CQUFLLE1BQU0sYUFBWDs7QUFFQSxTQUFNLGtCQUFOLEdBQTJCLElBQUksSUFBSixFQUEzQjtBQUNBLEdBSkQsRUFJRyxJQUpIOztBQU1BLE1BQUksZUFBZSxTQUFTLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBbkI7QUFDQSxlQUFhLEtBQWIsQ0FBbUIsT0FBbkIsR0FBNkIsNEJBQTdCO0FBQ0EsZUFBYSxTQUFiLEdBQXlCLEtBQUssWUFBTCxDQUFrQixXQUEzQztBQUNBLE9BQUssYUFBTCxDQUFtQixXQUFuQixDQUErQixZQUEvQjs7QUFFQSx1QkFBUyxZQUFULEVBQXVCLFdBQXZCLEVBQW9DLFlBQVk7QUFDL0MsUUFBSyxLQUFMLENBQVcsZUFBWCxHQUE2QixTQUE3QjtBQUNBLEdBRkQsRUFFRyxJQUZIOztBQUlBLHVCQUFTLFlBQVQsRUFBdUIsVUFBdkIsRUFBbUMsWUFBWTtBQUM5QyxRQUFLLEtBQUwsQ0FBVyxlQUFYLEdBQTZCLGFBQTdCO0FBQ0EsR0FGRCxFQUVHLElBRkg7O0FBSUEsdUJBQVMsWUFBVCxFQUF1QixPQUF2QixFQUFnQyxZQUFZO0FBQzNDLGdCQUFhLE1BQU0sTUFBbkIsRUFBMkIsS0FBM0IsRUFBa0MsTUFBTSxjQUF4QztBQUNBLG9CQUFLLE1BQU0sYUFBWDtBQUNBLEdBSEQsRUFHRyxJQUhIOztBQUtBLE1BQUksZUFBZSxTQUFTLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBbkI7QUFDQSxlQUFhLEtBQWIsQ0FBbUIsT0FBbkIsR0FBNkIsNEJBQTdCO0FBQ0EsZUFBYSxTQUFiLEdBQXlCLEtBQUssWUFBTCxDQUFrQixXQUEzQztBQUNBLE9BQUssYUFBTCxDQUFtQixXQUFuQixDQUErQixZQUEvQjs7QUFFQSx1QkFBUyxZQUFULEVBQXVCLFdBQXZCLEVBQW9DLFlBQVk7QUFDL0MsUUFBSyxLQUFMLENBQVcsZUFBWCxHQUE2QixTQUE3QjtBQUNBLEdBRkQsRUFFRyxJQUZIOztBQUlBLHVCQUFTLFlBQVQsRUFBdUIsVUFBdkIsRUFBbUMsWUFBWTtBQUM5QyxRQUFLLEtBQUwsQ0FBVyxlQUFYLEdBQTZCLGFBQTdCO0FBQ0EsR0FGRCxFQUVHLElBRkg7O0FBSUEsdUJBQVMsWUFBVCxFQUF1QixPQUF2QixFQUFnQyxZQUFZO0FBQzNDLGdCQUFhLE1BQU0sTUFBbkIsRUFBMkIsS0FBM0IsRUFBa0MsTUFBTSxjQUF4QztBQUNBLG9CQUFLLE1BQU0sYUFBWDtBQUNBLEdBSEQsRUFHRyxJQUhIO0FBSUE7O0FBR0QsS0FBSSxLQUFLLFFBQUwsQ0FBYyxLQUFkLENBQW9CLE9BQXBCLEtBQWdDLE1BQWhDLElBQTBDLEtBQUssV0FBbkQsRUFBZ0U7O0FBRS9ELE9BQUssVUFBTCxHQUFrQixlQUFlLEtBQWYsRUFBc0IsTUFBTSxXQUE1QixFQUF5QyxNQUF6QyxDQUFsQixHQUFxRSxlQUFlLEtBQWYsRUFBc0IsTUFBTSxXQUE1QixFQUF5QyxLQUF6QyxDQUFyRTs7QUFHQSxNQUFJLE1BQU0sWUFBTixDQUFtQixZQUFuQixDQUFnQyxPQUFoQyxNQUE2QyxNQUFNLFlBQU4sQ0FBbUIsU0FBcEUsRUFDQyxlQUFlLEtBQWYsRUFBc0IsTUFBTSxZQUE1QixFQUEwQyxPQUExQztBQUNEOztBQUVELEtBQUksT0FBUSx3QkFBZSxLQUFmLENBQXFCLFVBQTdCLEtBQTZDLFdBQWpELEVBQThEO0FBQzdELE9BQUssVUFBTCxHQUFrQixzQkFBbEI7QUFDQSxPQUFLLFVBQUwsR0FBa0IsY0FBbEI7QUFDQSxFQUhELE1BR087QUFDTixNQUFJLG9CQUFvQixLQUFLLFlBQUwsQ0FBa0IsWUFBbEIsQ0FBeEI7QUFDQSxNQUFJLG9CQUFvQixLQUFLLFlBQUwsQ0FBa0IsWUFBbEIsQ0FBeEI7QUFDQTs7QUFFRCxLQUFJLEtBQUssV0FBTCxLQUFxQixDQUFyQixJQUEyQixxQkFBcUIsaUJBQXBELEVBQXdFO0FBQ3ZFLE9BQUssV0FBTCxDQUFpQixZQUFqQixDQUE4QixNQUE5QixFQUFzQyxLQUFLLFVBQTNDO0FBQ0EsT0FBSyxXQUFMLENBQWlCLFNBQWpCLEdBQTZCLEtBQUssVUFBbEM7QUFDQTs7QUFFRCxLQUFJLEtBQUssVUFBTCxJQUFtQixLQUFLLFVBQTVCLEVBQXdDO0FBQ3ZDLE1BQUksQ0FBQyxLQUFLLFdBQUwsQ0FBaUIsYUFBdEIsRUFDQyxLQUFLLGtCQUFMLENBQXdCLFdBQXhCLENBQW9DLEtBQUssV0FBekM7QUFDRCxFQUhELE1BSUssSUFBSSxLQUFLLFdBQUwsQ0FBaUIsYUFBckIsRUFDSixLQUFLLGtCQUFMLENBQXdCLFdBQXhCLENBQW9DLEtBQUssV0FBekM7O0FBRUQsS0FBSSxLQUFLLFFBQUwsQ0FBYyxPQUFkLElBQXlCLEtBQUssUUFBTCxDQUFjLFFBQWQsS0FBMkIsS0FBSyxRQUFMLENBQWMsT0FBdEUsRUFDQyxLQUFLLFFBQUwsQ0FBYyxRQUFkLEdBQXlCLEtBQUssUUFBTCxDQUFjLE9BQXZDOztBQUVELE1BQUssSUFBSSxJQUFULElBQWlCLEtBQUssUUFBTCxDQUFjLFFBQS9CLEVBQXlDOztBQUV4QyxNQUFJLEtBQUssUUFBTCxDQUFjLFFBQWQsQ0FBdUIsY0FBdkIsQ0FBc0MsSUFBdEMsQ0FBSixFQUFpRDtBQUNoRCxRQUFLLFFBQUwsQ0FBYyxZQUFkLENBQTJCLElBQTNCO0FBQ0E7QUFDRDtBQUVELENBelBEOztBQTJQQSxNQUFNLFNBQU4sQ0FBZ0IsV0FBaEIsR0FBOEIsWUFBWTtBQUN6QyxLQUFJLFFBQVEsQ0FBWjtBQUNBLEtBQUksU0FBUyxDQUFiOztBQUVBLEtBQUksS0FBSyxRQUFMLENBQWMsS0FBbEIsRUFDQyxRQUFRLEtBQUssS0FBYixDQURELEtBR0MsS0FBSyxLQUFMLEdBQWEsUUFBUSxLQUFLLFVBQUwsQ0FBZ0IsV0FBaEIsR0FBOEIsQ0FBOUIsR0FBa0MsS0FBSyxVQUFMLENBQWdCLFdBQWxELEdBQWdFLEtBQUssS0FBMUY7O0FBRUQsS0FBSSxLQUFLLFFBQUwsQ0FBYyxNQUFsQixFQUNDLFNBQVMsS0FBSyxNQUFkLENBREQsS0FHQyxLQUFLLE1BQUwsR0FBYyxTQUFTLEtBQUssVUFBTCxDQUFnQixZQUFoQixHQUErQixDQUEvQixHQUFtQyxLQUFLLFVBQUwsQ0FBZ0IsWUFBbkQsR0FBa0UsS0FBSyxNQUE5Rjs7QUFFRCxLQUFJLEtBQUssTUFBTCxDQUFZLEtBQVosS0FBc0IsMkNBQXRCLElBQThELEtBQUssTUFBTCxDQUFZLE1BQVosS0FBdUIsNENBQXpGLEVBQWdJO0FBQy9ILDRCQUFjLEtBQUssTUFBbkIsRUFBMkIsS0FBM0IsRUFBa0MsTUFBbEM7O0FBRUEsNEJBQWMsS0FBSyxjQUFuQixFQUFtQyxLQUFuQyxFQUEwQyxNQUExQztBQUNBLDRCQUFjLEtBQUssYUFBTCxDQUFtQixXQUFqQyxFQUE4QyxLQUE5QyxFQUFxRCxNQUFyRDs7QUFFQSxTQUFPLElBQVA7QUFDQTs7QUFFRCxRQUFPLEtBQVA7QUFDQSxDQXhCRDs7QUEwQkE7QUFDQSxNQUFNLFNBQU4sQ0FBZ0IsV0FBaEIsR0FBOEIsWUFBWTtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFJLENBQUMsS0FBSyxTQUFWLEVBQ0MsS0FBSyxTQUFMLEdBQWlCLHVCQUFhLElBQWIsQ0FBakIsQ0FERCxLQUVLO0FBQ0osT0FBSyxTQUFMLENBQWUsbUJBQWY7QUFDQTs7QUFFRCxNQUFLLHVCQUFMOztBQUVBLE1BQUssY0FBTCxHQUFzQixLQUF0Qjs7QUFFQSxNQUFLLEtBQUwsR0FBYSxFQUFiOztBQUVBLE1BQUssdUJBQUwsR0FBK0IsSUFBL0I7QUFDQTs7QUFFQSxLQUFJLEtBQUssa0JBQVQsRUFDQyxLQUFLLHNCQUFMLENBQTRCLElBQTVCLENBQWlDLE1BQWpDLEVBQXlDLEtBQUssa0JBQTlDOztBQUVELE1BQUssY0FBTDs7QUFFQSxNQUFLLGNBQUwsR0FBc0IsNEJBQXFCLEtBQUssZ0JBQTFCLElBQStDLEtBQUssV0FBTCxLQUFxQixDQUExRjs7QUFFQSxNQUFLLFdBQUw7O0FBRUE7O0FBRUE7QUFDQSxNQUFLLFdBQUw7QUFDQSxNQUFLLEdBQUwsQ0FBUyxTQUFUOztBQUVBLE1BQUssS0FBTCxHQUFhLElBQWI7QUFDQSxNQUFLLEtBQUwsR0FBYSxJQUFiO0FBQ0EsTUFBSyxNQUFMLEdBQWMsSUFBZDtBQUNBLE1BQUssWUFBTCxHQUFvQixFQUFwQjtBQUNBLE1BQUssb0JBQUwsR0FBNEIsRUFBNUI7O0FBRUEsTUFBSyxPQUFMLEdBQWUsRUFBZjtBQUNBLEtBQUksS0FBSyxhQUFULEVBQ0MsS0FBSyxhQUFMLENBQW1CLEtBQW5COztBQUVELE1BQUssUUFBTCxHQUFnQjtBQUNmLGlCQUFlLElBREE7QUFFZixrQkFBZ0IsSUFGRDtBQUdmLGFBQVcsRUFISSxDQUdGO0FBSEUsRUFBaEI7O0FBTUEsTUFBSyxhQUFMLEdBQXFCLDZCQUFrQixDQUFsQixFQUFxQixDQUFyQixFQUF3QixLQUFLLEtBQTdCLEVBQW9DLEtBQUssTUFBekMsRUFBaUQsQ0FBakQsQ0FBckI7O0FBRUEsS0FBSSxLQUFLLFFBQUwsQ0FBYyxhQUFsQixFQUNDLEtBQUssUUFBTCxDQUFjLGFBQWQsQ0FBNEIsS0FBNUI7O0FBR0QsTUFBSyxJQUFMLEdBQVksRUFBWjtBQUNBLEtBQUksa0JBQWtCLENBQXRCOztBQUVBLE1BQUssSUFBSSxTQUFTLENBQWxCLEVBQXFCLFNBQVMsS0FBSyxRQUFMLENBQWMsSUFBZCxDQUFtQixNQUFqRCxFQUF5RCxRQUF6RCxFQUFtRTtBQUNsRTs7QUFFQTs7QUFFQSxNQUFJLEVBQUUsQ0FBQyxLQUFLLFFBQUwsQ0FBYyxJQUFkLENBQW1CLE1BQW5CLEVBQTJCLElBQTVCLElBQW9DLE1BQU0sb0JBQU4sQ0FBMkIsT0FBM0IsQ0FBbUMsS0FBSyxRQUFMLENBQWMsSUFBZCxDQUFtQixNQUFuQixFQUEyQixJQUE5RCxLQUF1RSxDQUE3RyxDQUFKLEVBQ0M7O0FBRUQsTUFBSSxhQUFhLDBCQUFlLElBQWYsRUFBcUIsS0FBSyxRQUFMLENBQWMsSUFBZCxDQUFtQixNQUFuQixDQUFyQixFQUFpRCxLQUFLLEtBQXRELEVBQTZELGtCQUFrQixDQUEvRSxFQUFrRixFQUFFLEtBQUssYUFBTCxDQUFtQixZQUF2RyxDQUFqQjtBQUNBLE1BQUksV0FBVyxJQUFYLEtBQW9CLElBQXhCLEVBQ0MsV0FBVyxJQUFYLEdBQWtCLGdCQUFpQixlQUFuQzs7QUFFRCxNQUFJLFdBQVcsS0FBWCxLQUFxQixJQUF6QixFQUErQjtBQUM5QixPQUFJLEtBQUssUUFBTCxDQUFjLElBQWQsQ0FBbUIsTUFBbkIsR0FBNEIsQ0FBaEMsRUFBbUM7QUFDbEMsZUFBVyxTQUFYLEdBQXVCLENBQUMsS0FBSyxpQkFBTCxDQUF1QixXQUFXLEtBQVgsR0FBbUIsS0FBSyxpQkFBTCxDQUF1QixNQUFqRSxDQUFELENBQXZCO0FBQ0EsZUFBVyxLQUFYLEdBQW1CLEtBQUssaUJBQUwsQ0FBdUIsV0FBVyxLQUFYLEdBQW1CLEtBQUssaUJBQUwsQ0FBdUIsTUFBakUsQ0FBbkI7QUFDQSxJQUhELE1BR087QUFDTixRQUFJLFdBQVcsSUFBWCxLQUFvQixNQUFwQixJQUE4QixXQUFXLElBQVgsS0FBb0IsVUFBbEQsSUFBZ0UsV0FBVyxJQUFYLEtBQW9CLFFBQXBGLElBQWdHLFdBQVcsSUFBWCxLQUFvQixNQUFwSCxJQUNBLFdBQVcsSUFBWCxLQUFvQixVQURwQixJQUNrQyxXQUFXLElBQVgsS0FBb0IsWUFEdEQsSUFDc0UsV0FBVyxJQUFYLEtBQW9CLGFBRDFGLElBQzJHLFdBQVcsSUFBWCxLQUFvQixnQkFEL0gsSUFFQSxXQUFXLElBQVgsS0FBb0IsV0FGcEIsSUFFbUMsV0FBVyxJQUFYLEtBQW9CLGlCQUZ2RCxJQUU0RSxXQUFXLElBQVgsS0FBb0IsYUFGaEcsSUFFaUgsV0FBVyxJQUFYLEtBQW9CLE1BRnpJLEVBRWlKO0FBQ2hKLGdCQUFXLFNBQVgsR0FBdUIsQ0FBQyxLQUFLLGlCQUFMLENBQXVCLENBQXZCLENBQUQsQ0FBdkI7QUFDQSxLQUpELE1BTUMsV0FBVyxTQUFYLEdBQXVCLEtBQUssaUJBQTVCO0FBQ0Q7QUFDRCxHQWJELE1BYU87QUFDTixjQUFXLFNBQVgsR0FBdUIsQ0FBQyxXQUFXLEtBQVosQ0FBdkI7QUFDQTs7QUFFRCxNQUFJLFdBQVcsVUFBWCxLQUEwQixJQUE5QixFQUFvQztBQUNuQyxPQUFLLENBQUMsV0FBVyxJQUFYLEtBQW9CLE1BQXBCLElBQThCLFdBQVcsSUFBWCxLQUFvQixVQUFsRCxJQUFnRSxXQUFXLElBQVgsS0FBb0IsUUFBckYsS0FBa0csV0FBVyxVQUE3RyxJQUEySCxXQUFXLFVBQVgsQ0FBc0IsTUFBdEIsR0FBK0IsS0FBSyxLQUFMLEdBQWEsRUFBeEssSUFBK0ssV0FBVyxJQUFYLEtBQW9CLFNBQXZNLEVBQWtOO0FBQ2pOO0FBQ0EsZUFBVyxVQUFYLEdBQXdCLENBQXhCO0FBQ0E7QUFDRDs7QUFFRCxNQUFJLENBQUMsV0FBVyxJQUFYLEtBQW9CLFFBQXBCLElBQWdDLFdBQVcsSUFBWCxLQUFvQixTQUFyRCxLQUFtRSxXQUFXLFVBQWxGLEVBQThGO0FBQzdGLGNBQVcsVUFBWCxDQUFzQixJQUF0QjtBQUNBOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQUssSUFBTCxDQUFVLElBQVYsQ0FBZSxVQUFmOztBQUVBLE1BQUksc0JBQXNCLFdBQVcsYUFBckM7O0FBRUE7QUFDQTs7QUFFQSxNQUFJLFlBQUo7O0FBRUEsTUFBSSx3QkFBd0IsUUFBNUIsRUFBc0M7O0FBRXJDLE9BQUksS0FBSyxRQUFMLENBQWMsYUFBZCxLQUFnQyxXQUFwQyxFQUFpRDtBQUNoRCxtQkFBZSwwQkFBMEIsV0FBVyxJQUFyQyxHQUE0QyxtQkFBM0Q7QUFDQSxJQUZELE1BRU8sSUFBSSxLQUFLLFFBQUwsQ0FBYyxhQUFkLEtBQWdDLE1BQXBDLEVBQTRDO0FBQ2xELG1CQUFlLDBCQUEwQixXQUFXLElBQXJDLEdBQTRDLG1CQUEzRDtBQUNBLElBRk0sTUFFQSxJQUFJLEtBQUssUUFBTCxDQUFjLGFBQWQsS0FBZ0MsSUFBcEMsRUFDTixLQUFLLFFBQUwsQ0FBYyxhQUFkLEdBQThCLFFBQTlCO0FBQ0QsR0FSRCxNQVNLLElBQUksd0JBQXdCLFdBQTVCLEVBQXlDOztBQUU3QyxPQUFJLEtBQUssUUFBTCxDQUFjLGFBQWQsS0FBZ0MsUUFBcEMsRUFBOEM7QUFDN0MsbUJBQWUsMEJBQTBCLFdBQVcsSUFBckMsR0FBNEMseUNBQTNEO0FBQ0EsSUFGRCxNQUVPLElBQUksS0FBSyxRQUFMLENBQWMsYUFBZCxLQUFnQyxNQUFwQyxFQUE0QztBQUNsRCxtQkFBZSwwQkFBMEIsV0FBVyxJQUFyQyxHQUE0QyxtQkFBM0Q7QUFDQSxJQUZNLE1BRUEsSUFBSSxLQUFLLFFBQUwsQ0FBYyxhQUFkLEtBQWdDLElBQXBDLEVBQ04sS0FBSyxRQUFMLENBQWMsYUFBZCxHQUE4QixXQUE5QjtBQUNELEdBUkksTUFTQSxJQUFJLHVCQUF1QixNQUEzQixFQUFtQzs7QUFFdkMsT0FBSSxLQUFLLFFBQUwsQ0FBYyxhQUFkLEtBQWdDLFFBQXBDLEVBQThDO0FBQzdDLG1CQUFlLDBCQUEwQixXQUFXLElBQXJDLEdBQTRDLHlDQUEzRDtBQUNBLElBRkQsTUFFTyxJQUFJLEtBQUssUUFBTCxDQUFjLGFBQWQsS0FBZ0MsV0FBcEMsRUFBaUQ7QUFDdkQsbUJBQWUsMEJBQTBCLFdBQVcsSUFBckMsR0FBNEMsbUJBQTNEO0FBQ0EsSUFGTSxNQUVBLElBQUksS0FBSyxRQUFMLENBQWMsYUFBZCxLQUFnQyxJQUFwQyxFQUNOLEtBQUssUUFBTCxDQUFjLGFBQWQsR0FBOEIsTUFBOUI7QUFDRDs7QUFFRCxNQUFJLGdCQUFnQixPQUFPLE9BQTNCLEVBQW9DO0FBQ25DLFVBQU8sT0FBUCxDQUFlLEdBQWYsQ0FBbUIsWUFBbkI7QUFDQTtBQUNBO0FBQ0Q7O0FBRUQ7QUFDQTtBQUNBOztBQUVBLE1BQUssbUJBQUwsR0FBMkIsSUFBM0I7QUFDQSxDQS9KRDs7QUFpS0E7QUFDQSxNQUFNLG9CQUFOLEdBQTZCLDRCQUFnQixDQUFDLE1BQUQsRUFBUyxVQUFULEVBQXFCLFFBQXJCLEVBQStCLFFBQS9CLEVBQXlDLE1BQXpDLEVBQWlELFVBQWpELEVBQTZELFlBQTdELEVBQTJFLEtBQTNFLEVBQWtGLFFBQWxGLEVBQTRGLFNBQTVGLEVBQzVDLGVBRDRDLEVBQzNCLGtCQUQyQixFQUNQLFlBRE8sRUFDTyxlQURQLEVBRTVDLGFBRjRDLEVBRTdCLGdCQUY2QixFQUc1QyxhQUg0QyxFQUk1QyxNQUo0QyxFQUs1QyxhQUw0QyxFQU01QyxVQU40QyxFQU81QyxXQVA0QyxFQVE1QyxpQkFSNEMsRUFTNUMsS0FUNEMsRUFTckMsVUFUcUMsRUFTekIsUUFUeUIsQ0FBaEIsQ0FBN0I7O0FBWUEsTUFBTSxTQUFOLENBQWdCLE1BQWhCLEdBQXlCLFVBQVUsT0FBVixFQUFtQjs7QUFFM0MsS0FBSSxPQUFKLEVBQ0MsS0FBSyxRQUFMLEdBQWdCLE9BQWhCOztBQUVELE1BQUssV0FBTDtBQUNBLEtBQUksbUJBQW1CLEVBQXZCLENBTjJDLENBTWhCOztBQUUzQjtBQUNBLE1BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLElBQUwsQ0FBVSxNQUE5QixFQUFzQyxHQUF0QyxFQUEyQzs7QUFFMUMsTUFBSSxLQUFLLFFBQUwsQ0FBYyxhQUFkLEtBQWdDLFFBQWhDLElBQTRDLEtBQUssUUFBTCxDQUFjLGFBQWQsS0FBZ0MsV0FBaEYsRUFBNkY7QUFDNUYsT0FBSSxDQUFDLEtBQUssSUFBTCxDQUFVLENBQVYsRUFBYSxTQUFkLElBQTJCLEtBQUssSUFBTCxDQUFVLENBQVYsRUFBYSxTQUFiLEtBQTJCLFNBQTFELEVBQXFFO0FBQ3BFLFFBQUksQ0FBQyxLQUFLLEtBQVYsRUFBaUI7O0FBRWhCLFNBQUksS0FBSyxRQUFMLENBQWMsYUFBZCxLQUFnQyxRQUFwQyxFQUE4QztBQUM3QyxXQUFLLEtBQUwsQ0FBVyxJQUFYLENBQWdCLEtBQUssS0FBTCxHQUFhLG1CQUFTLElBQVQsRUFBZSxLQUFLLFFBQUwsQ0FBYyxLQUE3QixFQUFvQyxPQUFwQyxFQUE2QyxNQUE3QyxDQUE3QjtBQUNBLE1BRkQsTUFHSyxJQUFJLEtBQUssUUFBTCxDQUFjLGFBQWQsS0FBZ0MsV0FBcEMsRUFBaUQ7QUFDckQsV0FBSyxLQUFMLENBQVcsSUFBWCxDQUFnQixLQUFLLEtBQUwsR0FBYSxtQkFBUyxJQUFULEVBQWUsS0FBSyxRQUFMLENBQWMsS0FBN0IsRUFBb0MsT0FBcEMsRUFBNkMsUUFBN0MsQ0FBN0I7QUFDQTtBQUNEO0FBQ0QsU0FBSyxJQUFMLENBQVUsQ0FBVixFQUFhLEtBQWIsR0FBcUIsS0FBSyxLQUExQjtBQUNBLElBWEQsTUFZSyxJQUFJLEtBQUssSUFBTCxDQUFVLENBQVYsRUFBYSxTQUFiLEtBQTJCLFdBQS9CLEVBQTRDO0FBQ2hELFFBQUksQ0FBQyxLQUFLLE1BQVYsRUFBa0I7QUFDakIsU0FBSSxLQUFLLFFBQUwsQ0FBYyxhQUFkLEtBQWdDLFFBQXBDLEVBQThDO0FBQzdDLFdBQUssS0FBTCxDQUFXLElBQVgsQ0FBZ0IsS0FBSyxNQUFMLEdBQWMsbUJBQVMsSUFBVCxFQUFlLEtBQUssUUFBTCxDQUFjLE1BQTdCLEVBQXFDLE9BQXJDLEVBQThDLE9BQTlDLENBQTlCO0FBQ0EsTUFGRCxNQUdLLElBQUksS0FBSyxRQUFMLENBQWMsYUFBZCxLQUFnQyxXQUFwQyxFQUFpRDtBQUNyRCxXQUFLLEtBQUwsQ0FBVyxJQUFYLENBQWdCLEtBQUssTUFBTCxHQUFjLG1CQUFTLElBQVQsRUFBZSxLQUFLLFFBQUwsQ0FBYyxNQUE3QixFQUFxQyxPQUFyQyxFQUE4QyxLQUE5QyxDQUE5QjtBQUNBO0FBQ0Q7QUFDRCxTQUFLLElBQUwsQ0FBVSxDQUFWLEVBQWEsS0FBYixHQUFxQixLQUFLLE1BQTFCO0FBQ0E7O0FBRUQsT0FBSSxDQUFDLEtBQUssS0FBVixFQUFpQjtBQUNoQixRQUFJLEtBQUssUUFBTCxDQUFjLGFBQWQsS0FBZ0MsUUFBcEMsRUFBOEM7QUFDN0MsVUFBSyxLQUFMLENBQVcsSUFBWCxDQUFnQixLQUFLLEtBQUwsR0FBYSxtQkFBUyxJQUFULEVBQWUsS0FBSyxRQUFMLENBQWMsS0FBN0IsRUFBb0MsT0FBcEMsRUFBNkMsUUFBN0MsQ0FBN0I7QUFDQSxLQUZELE1BRU8sSUFBSSxLQUFLLFFBQUwsQ0FBYyxhQUFkLEtBQWdDLFdBQXBDLEVBQWlEO0FBQ3ZELFVBQUssS0FBTCxDQUFXLElBQVgsQ0FBZ0IsS0FBSyxLQUFMLEdBQWEsbUJBQVMsSUFBVCxFQUFlLEtBQUssUUFBTCxDQUFjLEtBQTdCLEVBQW9DLE9BQXBDLEVBQTZDLE1BQTdDLENBQTdCO0FBQ0E7QUFDRDs7QUFFRCxRQUFLLElBQUwsQ0FBVSxDQUFWLEVBQWEsS0FBYixHQUFxQixLQUFLLEtBQTFCO0FBQ0E7QUFDRDs7QUFFRDtBQUNBLEtBQUksS0FBSyxLQUFMLElBQWMsS0FBSyxNQUF2QixFQUErQjtBQUM5QixNQUFJLEtBQUssS0FBTCxDQUFXLGFBQVgsR0FBMkIsQ0FBM0IsSUFBZ0MsT0FBUSxLQUFLLE1BQUwsQ0FBWSxRQUFaLENBQXFCLGFBQTdCLEtBQWdELFdBQXBGLEVBQ0MsS0FBSyxNQUFMLENBQVksYUFBWixHQUE0QixDQUE1QixDQURELEtBRUssSUFBSSxLQUFLLE1BQUwsQ0FBWSxhQUFaLEdBQTRCLENBQTVCLElBQWlDLE9BQVEsS0FBSyxLQUFMLENBQVcsUUFBWCxDQUFvQixhQUE1QixLQUErQyxXQUFwRixFQUNKLEtBQUssS0FBTCxDQUFXLGFBQVgsR0FBMkIsQ0FBM0I7QUFDRDs7QUFHRDtBQUNBLEtBQUksY0FBYyxLQUFsQjtBQUNBLEtBQUksS0FBSyxLQUFMLENBQVcsTUFBWCxHQUFvQixDQUFwQixLQUEwQixLQUFLLFdBQUwsSUFBb0IsS0FBSyxVQUFuRCxDQUFKLEVBQW9FO0FBQ25FLE9BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLEtBQUwsQ0FBVyxNQUEvQixFQUF1QyxHQUF2QyxFQUE0QztBQUMzQyxPQUFJLEtBQUssS0FBTCxDQUFXLENBQVgsRUFBYyxlQUFkLEtBQWtDLElBQWxDLElBQTBDLEtBQUssS0FBTCxDQUFXLENBQVgsRUFBYyxlQUFkLEtBQWtDLElBQWhGLEVBQXNGO0FBQ3JGLGtCQUFjLElBQWQ7QUFDQTtBQUNBO0FBQ0Q7QUFDRDs7QUFFRCxLQUFJLFdBQUosRUFBaUI7QUFDaEIsbUJBQUssS0FBSyxXQUFWLEVBQXVCLEtBQUssWUFBNUI7QUFDQSxFQUZELE1BRU87QUFDTixtQkFBSyxLQUFLLFdBQVYsRUFBdUIsS0FBSyxZQUE1QjtBQUNBOztBQUdELE1BQUssWUFBTCxHQTNFMkMsQ0EyRXZCOztBQUVwQixLQUFJLEtBQUssUUFBTCxDQUFjLEtBQWxCLEVBQXlCO0FBQ3hCLE9BQUssTUFBTCxHQUFjLG9CQUFVLElBQVYsRUFBZ0IsS0FBSyxRQUFMLENBQWMsS0FBOUIsQ0FBZDs7QUFFQSxNQUFJLENBQUMsS0FBSyxNQUFMLENBQVksa0JBQWpCLEVBQ0MsS0FBSyxNQUFMLENBQVksTUFBWixHQURELEtBR0MsaUJBQWlCLElBQWpCLENBQXNCLEtBQUssTUFBM0I7QUFDRDs7QUFFRCxLQUFJLEtBQUssUUFBTCxDQUFjLFNBQWxCLEVBQTZCO0FBQzVCLE9BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLFFBQUwsQ0FBYyxTQUFkLENBQXdCLE1BQTVDLEVBQW9ELEdBQXBELEVBQXlEOztBQUV4RCxRQUFLLFNBQUwsR0FBaUIsRUFBakI7O0FBRUEsT0FBSSxXQUFXLElBQUksUUFBSixDQUFhLElBQWIsRUFBbUIsS0FBSyxRQUFMLENBQWMsU0FBZCxDQUF3QixDQUF4QixDQUFuQixDQUFmO0FBQ0EsUUFBSyxTQUFMLENBQWUsSUFBZixDQUFvQixRQUFwQjs7QUFFQSxPQUFJLENBQUMsU0FBUyxrQkFBZCxFQUNDLFNBQVMsTUFBVCxHQURELEtBR0MsaUJBQWlCLElBQWpCLENBQXNCLFFBQXRCO0FBQ0Q7QUFDRDs7QUFFRCxNQUFLLE1BQUwsR0FBYyxxQkFBVyxJQUFYLEVBQWlCLEtBQUssUUFBTCxDQUFjLE1BQS9CLEVBQXVDLEtBQUssS0FBNUMsQ0FBZDtBQUNBLE1BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLElBQUwsQ0FBVSxNQUE5QixFQUFzQyxHQUF0QyxFQUEyQztBQUMxQyxNQUFJLEtBQUssSUFBTCxDQUFVLENBQVYsRUFBYSxZQUFiLElBQTZCLEtBQUssSUFBTCxDQUFVLENBQVYsRUFBYSxJQUFiLEtBQXNCLEtBQW5ELElBQTRELEtBQUssSUFBTCxDQUFVLENBQVYsRUFBYSxJQUFiLEtBQXNCLFVBQXRGLEVBQWtHO0FBQ2pHLFFBQUssTUFBTCxDQUFZLFVBQVosQ0FBdUIsSUFBdkIsQ0FBNEIsS0FBSyxJQUFMLENBQVUsQ0FBVixDQUE1QjtBQUNBO0FBQ0Q7O0FBRUQsS0FBSSxDQUFDLEtBQUssTUFBTCxDQUFZLGtCQUFqQixFQUNDLEtBQUssTUFBTCxDQUFZLE1BQVosR0FERCxLQUdDLGlCQUFpQixJQUFqQixDQUFzQixLQUFLLE1BQTNCOztBQUVEO0FBQ0EsS0FBSSxLQUFLLFFBQUwsQ0FBYyxhQUFkLEtBQWdDLFFBQWhDLElBQTRDLEtBQUssUUFBTCxDQUFjLGFBQWQsS0FBZ0MsV0FBaEYsRUFBNkY7O0FBRTVGOztBQUVBLGlCQUFLLGtCQUFMLENBQXdCLEtBQUssS0FBN0IsRUFBb0MsS0FBSyxLQUF6QyxFQUFnRCxLQUFLLE1BQXJELEVBQTZELEtBQUssUUFBTCxDQUFjLGFBQTNFLEVBQTBGLEtBQUssYUFBTCxDQUFtQixZQUFuQixFQUExRjtBQUNBLEVBTEQsTUFLTyxJQUFJLEtBQUssUUFBTCxDQUFjLGFBQWQsS0FBZ0MsTUFBcEMsRUFBNEM7QUFDbEQ7QUFDQSxPQUFLLGVBQUw7QUFDQSxFQUhNLE1BSUY7QUFDSjtBQUNBOztBQUVELEtBQUksUUFBUSxDQUFaO0FBQ0EsTUFBSyxLQUFMLElBQWMsZ0JBQWQsRUFBZ0M7QUFDL0IsTUFBRyxpQkFBaUIsY0FBakIsQ0FBZ0MsS0FBaEMsQ0FBSCxFQUNBLGlCQUFpQixLQUFqQixFQUF3QixNQUF4QjtBQUNBOztBQUVELEtBQUksYUFBYSxFQUFqQjtBQUNBLEtBQUksS0FBSyxjQUFULEVBQXlCO0FBQ3hCLE1BQUksZUFBZSx5QkFBYSxLQUFLLEtBQWxCLEVBQXlCLEtBQUssTUFBOUIsQ0FBbkI7QUFDQSxNQUFJLGtCQUFrQixhQUFhLFVBQWIsQ0FBd0IsSUFBeEIsQ0FBdEI7QUFDQSxrQkFBZ0IsU0FBaEIsQ0FBMEIsS0FBSyxNQUEvQixFQUF1QyxDQUF2QyxFQUEwQyxDQUExQyxFQUE2QyxLQUFLLEtBQWxELEVBQXlELEtBQUssTUFBOUQ7QUFDQTs7QUFFRCxNQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksS0FBSyxRQUFMLENBQWMsU0FBZCxDQUF3QixNQUE1QyxFQUFvRCxHQUFwRCxFQUF5RDtBQUN4RCxNQUFJLFdBQVcsS0FBSyxRQUFMLENBQWMsU0FBZCxDQUF3QixDQUF4QixDQUFmOztBQUVBLE9BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxTQUFTLFNBQVQsQ0FBbUIsTUFBdkMsRUFBK0MsR0FBL0MsRUFBb0Q7O0FBRW5ELE9BQUksV0FBVyxTQUFTLFNBQVQsQ0FBbUIsQ0FBbkIsQ0FBZjtBQUNBLE9BQUksZ0JBQWdCLElBQXBCOztBQUVBLFlBQVMsWUFBVCxHQUF3QixJQUF4QixDQUxtRCxDQUtyQjs7QUFFOUIsT0FBSSxLQUFLLGNBQVQsRUFBeUI7QUFDeEIsYUFBUyxZQUFULEdBQXdCLHlCQUFhLEtBQUssS0FBbEIsRUFBeUIsS0FBSyxNQUE5QixDQUF4QjtBQUNBLGFBQVMsZUFBVCxHQUEyQixTQUFTLFlBQVQsQ0FBc0IsVUFBdEIsQ0FBaUMsSUFBakMsQ0FBM0I7QUFDQTs7QUFFRCxPQUFJLFNBQVMsSUFBVCxLQUFrQixNQUF0QixFQUNDLGdCQUFnQixLQUFLLFVBQUwsQ0FBZ0IsUUFBaEIsQ0FBaEIsQ0FERCxLQUVLLElBQUksU0FBUyxJQUFULEtBQWtCLFVBQXRCLEVBQ0osZ0JBQWdCLEtBQUssY0FBTCxDQUFvQixRQUFwQixDQUFoQixDQURJLEtBRUEsSUFBSSxTQUFTLElBQVQsS0FBa0IsUUFBdEIsRUFDSixnQkFBZ0IsS0FBSyxZQUFMLENBQWtCLFFBQWxCLENBQWhCLENBREksS0FFQSxJQUFJLFNBQVMsSUFBVCxLQUFrQixRQUF0QixFQUNKLGdCQUFnQixLQUFLLFlBQUwsQ0FBa0IsUUFBbEIsQ0FBaEIsQ0FESSxLQUVBLElBQUksU0FBUyxJQUFULEtBQWtCLEtBQXRCLEVBQ0osZ0JBQWdCLEtBQUssU0FBTCxDQUFlLFFBQWYsQ0FBaEIsQ0FESSxLQUVBLElBQUksU0FBUyxJQUFULEtBQWtCLE1BQXRCLEVBQ0osZ0JBQWdCLEtBQUssVUFBTCxDQUFnQixRQUFoQixDQUFoQixDQURJLEtBRUEsSUFBSSxTQUFTLElBQVQsS0FBa0IsVUFBdEIsRUFDSixnQkFBZ0IsS0FBSyxjQUFMLENBQW9CLFFBQXBCLENBQWhCLENBREksS0FFQSxJQUFJLFNBQVMsSUFBVCxLQUFrQixZQUF0QixFQUNKLGdCQUFnQixLQUFLLGdCQUFMLENBQXNCLFFBQXRCLENBQWhCLENBREksS0FFQSxJQUFJLFNBQVMsSUFBVCxLQUFrQixlQUF0QixFQUNKLGdCQUFnQixLQUFLLG1CQUFMLENBQXlCLFFBQXpCLENBQWhCLENBREksS0FFQSxJQUFJLFNBQVMsSUFBVCxLQUFrQixrQkFBdEIsRUFDSixnQkFBZ0IsS0FBSyxzQkFBTCxDQUE0QixRQUE1QixDQUFoQixDQURJLEtBRUEsSUFBSSxTQUFTLElBQVQsS0FBa0IsWUFBdEIsRUFDSixnQkFBZ0IsS0FBSyxnQkFBTCxDQUFzQixRQUF0QixDQUFoQixDQURJLEtBRUEsSUFBSSxTQUFTLElBQVQsS0FBa0IsZUFBdEIsRUFDSixnQkFBZ0IsS0FBSyxtQkFBTCxDQUF5QixRQUF6QixDQUFoQixDQURJLEtBRUEsSUFBSSxTQUFTLElBQVQsS0FBa0IsYUFBdEIsRUFDSixnQkFBZ0IsS0FBSyxpQkFBTCxDQUF1QixRQUF2QixDQUFoQixDQURJLEtBRUEsSUFBSSxTQUFTLElBQVQsS0FBa0IsZ0JBQXRCLEVBQ0osZ0JBQWdCLEtBQUssb0JBQUwsQ0FBMEIsUUFBMUIsQ0FBaEIsQ0FESSxLQUVBLElBQUksU0FBUyxJQUFULEtBQWtCLFFBQXRCLEVBQ0osZ0JBQWdCLGdCQUFnQixLQUFLLFlBQUwsQ0FBa0IsUUFBbEIsQ0FBaEMsQ0FESSxLQUVBLElBQUksU0FBUyxJQUFULEtBQWtCLFNBQXRCLEVBQ0osZ0JBQWdCLEtBQUssYUFBTCxDQUFtQixRQUFuQixDQUFoQixDQURJLEtBRUEsSUFBSSxTQUFTLElBQVQsS0FBa0IsS0FBdEIsRUFDSixLQUFLLFNBQUwsQ0FBZSxRQUFmLEVBREksS0FFQSxJQUFJLFNBQVMsSUFBVCxLQUFrQixVQUF0QixFQUNKLEtBQUssU0FBTCxDQUFlLFFBQWYsRUFESSxLQUVBLElBQUksU0FBUyxJQUFULEtBQWtCLGFBQXRCLEVBQ0osZ0JBQWdCLEtBQUssaUJBQUwsQ0FBdUIsUUFBdkIsQ0FBaEIsQ0FESSxLQUVBLElBQUksU0FBUyxJQUFULEtBQWtCLE1BQXRCLEVBQ0osZ0JBQWdCLEtBQUssaUJBQUwsQ0FBdUIsUUFBdkIsQ0FBaEIsQ0FESSxLQUVBLElBQUksU0FBUyxJQUFULEtBQWtCLGFBQXRCLEVBQ0osZ0JBQWdCLEtBQUssaUJBQUwsQ0FBdUIsUUFBdkIsQ0FBaEIsQ0FESSxLQUVBLElBQUksU0FBUyxJQUFULEtBQWtCLFVBQXRCLEVBQ0osZ0JBQWdCLEtBQUssY0FBTCxDQUFvQixRQUFwQixDQUFoQixDQURJLEtBRUEsSUFBSSxTQUFTLElBQVQsS0FBa0IsV0FBdEIsRUFDSixnQkFBZ0IsS0FBSyxlQUFMLENBQXFCLFFBQXJCLENBQWhCLENBREksS0FFQSxJQUFJLFNBQVMsSUFBVCxLQUFrQixpQkFBdEIsRUFDSixnQkFBZ0IsS0FBSyxxQkFBTCxDQUEyQixRQUEzQixDQUFoQjs7QUFFRCxRQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksU0FBUyxpQkFBVCxDQUEyQixNQUEvQyxFQUF1RCxHQUF2RCxFQUE0RDtBQUMzRCxTQUFLLG9CQUFMLENBQTBCLElBQTFCLENBQStCLEtBQUssSUFBTCxDQUFVLFNBQVMsaUJBQVQsQ0FBMkIsQ0FBM0IsQ0FBVixDQUEvQjtBQUNBOztBQUVELE9BQUksS0FBSyxjQUFMLElBQXVCLGFBQTNCLEVBQ0MsV0FBVyxJQUFYLENBQWdCLGFBQWhCO0FBQ0Q7QUFDRDs7QUFFRCxLQUFJLEtBQUssY0FBTCxJQUF1QixLQUFLLFlBQUwsQ0FBa0IsTUFBbEIsR0FBMkIsQ0FBdEQsRUFBeUQ7QUFDeEQsTUFBSSxtQkFBbUIseUJBQWEsS0FBSyxLQUFsQixFQUF5QixLQUFLLE1BQTlCLENBQXZCO0FBQ0EsTUFBSSxzQkFBc0IsaUJBQWlCLFVBQWpCLENBQTRCLElBQTVCLENBQTFCO0FBQ0EsYUFBVyxJQUFYLENBQWdCLEtBQUssaUJBQUwsQ0FBdUIsbUJBQXZCLENBQWhCO0FBQ0E7O0FBRUQsS0FBSSxRQUFRLElBQVo7O0FBRUEsS0FBSSxXQUFXLE1BQVgsR0FBb0IsQ0FBeEIsRUFBMkI7QUFDMUI7QUFDQSxRQUFNLGNBQU4sR0FBdUIsSUFBdkI7QUFDQSxRQUFNLFNBQU4sQ0FBZ0IsT0FBaEIsQ0FBd0IsR0FBeEIsRUFBNkIsTUFBTSxpQkFBbkMsRUFBc0QsVUFBVSxnQkFBVixFQUE0Qjs7QUFFakY7QUFDQTs7QUFFQSxTQUFNLEdBQU4sQ0FBVSxTQUFWLENBQW9CLENBQXBCLEVBQXVCLENBQXZCLEVBQTBCLE1BQU0sS0FBaEMsRUFBdUMsTUFBTSxNQUE3Qzs7QUFHQTtBQUNBLFNBQU0sR0FBTixDQUFVLFNBQVYsQ0FBb0IsWUFBcEIsRUFBa0MsQ0FBbEMsRUFBcUMsQ0FBckMsRUFBd0MsS0FBSyxLQUFMLENBQVcsTUFBTSxLQUFOLHNDQUFYLENBQXhDLEVBQWdHLEtBQUssS0FBTCxDQUFXLE1BQU0sTUFBTixzQ0FBWCxDQUFoRyxFQUF5SixDQUF6SixFQUE0SixDQUE1SixFQUErSixNQUFNLEtBQXJLLEVBQTRLLE1BQU0sTUFBbEw7O0FBRUEsUUFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFdBQVcsTUFBL0IsRUFBdUMsR0FBdkMsRUFBNEM7O0FBRTNDLG9CQUFnQixXQUFXLENBQVgsQ0FBaEI7O0FBRUEsUUFBSSxtQkFBbUIsQ0FBbkIsSUFBd0IsT0FBUSxjQUFjLGdCQUF0QixLQUE0QyxXQUF4RSxFQUFxRjtBQUNwRixTQUFJLG9CQUFvQixjQUFjLGdCQUF0QyxFQUF3RDtBQUN2RDs7QUFFQSxvQkFBYyxpQkFBZCxDQUFnQyxjQUFjLGNBQWQsQ0FBNkIsbUJBQW1CLGNBQWMsZ0JBQTlELEVBQWdGLENBQWhGLEVBQW1GLENBQW5GLEVBQXNGLElBQUksY0FBYyxnQkFBeEcsQ0FBaEMsRUFBMkosYUFBM0o7QUFDQTtBQUNELEtBTkQsTUFNTzs7QUFFTixtQkFBYyxpQkFBZCxDQUFnQyxjQUFjLGNBQWQsQ0FBNkIsZ0JBQTdCLEVBQStDLENBQS9DLEVBQWtELENBQWxELEVBQXFELENBQXJELENBQWhDLEVBQXlGLGFBQXpGO0FBQ0E7QUFDRDs7QUFFRCxTQUFNLGFBQU4sQ0FBb0IsMkJBQXBCLEVBQ0s7QUFDQyxXQUFPO0FBRFIsSUFETDtBQUtBLEdBaENELEVBZ0NHLFlBQVk7O0FBRWQsZ0JBQWEsRUFBYjs7QUFFQSxPQUFJLFFBQVEsQ0FBWjs7QUFFQTtBQUNBLFFBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxNQUFNLFFBQU4sQ0FBZSxTQUFmLENBQXlCLE1BQTdDLEVBQXFELEdBQXJELEVBQTBEO0FBQ3pELFFBQUksV0FBVyxNQUFNLFFBQU4sQ0FBZSxTQUFmLENBQXlCLENBQXpCLENBQWY7O0FBRUEsU0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFNBQVMsU0FBVCxDQUFtQixNQUF2QyxFQUErQyxHQUEvQyxFQUFvRDtBQUNuRCxTQUFJLFdBQVcsU0FBUyxTQUFULENBQW1CLENBQW5CLENBQWY7QUFDQSxjQUFTLFlBQVQsR0FBd0IsSUFBeEI7QUFDQTtBQUNEOztBQUVELGtCQUFlLElBQWY7QUFDQSxTQUFNLGNBQU4sR0FBdUIsS0FBdkI7QUFDQTtBQUVBLEdBcEREO0FBcURBLEVBeERELE1Bd0RPO0FBQ04sTUFBSSxNQUFNLFlBQU4sQ0FBbUIsTUFBbkIsR0FBNEIsQ0FBaEMsRUFDQyxNQUFNLGlCQUFOOztBQUVELFFBQU0sYUFBTixDQUFvQiwyQkFBcEIsRUFDRTtBQUNDLFVBQU87QUFEUixHQURGO0FBSUE7O0FBRUQsTUFBSywyQkFBTDs7QUFFQSxLQUFJLENBQUMsS0FBSyxXQUFOLElBQXFCLENBQUMsS0FBSyxVQUEzQixJQUF5QyxLQUFLLFdBQTlDLElBQTZELEtBQUssV0FBTCxDQUFpQixLQUFqQixDQUF1QixPQUF2QixLQUFtQyxNQUFwRyxFQUE0RztBQUMzRyxtQkFBSyxLQUFLLFdBQVYsRUFBdUIsS0FBSyxZQUE1QjtBQUNBOztBQUVELE1BQUssUUFBTCxDQUFjLGNBQWQ7O0FBRUEsTUFBSyxXQUFMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBaUI7O0FBRWhCLE1BQUksUUFBUSxJQUFaO0FBQ0EsYUFBVyxZQUFZO0FBQ3RCLE9BQUksa0JBQWtCLFNBQVMsY0FBVCxDQUF3QixpQkFBeEIsQ0FBdEI7O0FBRUEsT0FBSSxlQUFKLEVBQXFCO0FBQ3BCO0FBQ0EsOEJBQWMsZUFBZCxFQUErQixNQUFNLEtBQXJDLEVBQTRDLE1BQU0sTUFBbEQ7QUFDQSxRQUFJLHFCQUFxQixnQkFBZ0IsVUFBaEIsQ0FBMkIsSUFBM0IsQ0FBekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQW1CLFNBQW5CLENBQTZCLE1BQU0sYUFBTixDQUFvQixXQUFqRCxFQUE4RCxDQUE5RCxFQUFpRSxDQUFqRTtBQUNBO0FBQ0E7QUFDQTtBQUNELEdBakJELEVBaUJHLElBakJIO0FBa0JBO0FBQ0QsQ0FuVUQ7O0FBcVVBLE1BQU0sU0FBTixDQUFnQiwyQkFBaEIsR0FBOEMsWUFBWTtBQUFBOztBQUV6RDs7QUFFQSxNQUFLLFdBQUw7QUFDQyxXQUFTLElBRFY7QUFFQyxTQUFPLElBRlI7QUFHQyxhQUFXLEtBQUssa0JBSGpCO0FBSUMsV0FBUyxLQUFLLGdCQUpmO0FBS0MsYUFBVyxLQUFLLGtCQUxqQjtBQU1DLFVBQVEsS0FBSyxXQUFMLEdBQW1CLFlBQW5CLEdBQWtDO0FBTjNDLDRDQU9TLEtBQUssVUFBTCxHQUFrQixNQUFsQixHQUEyQixTQVBwQyw0Q0FRVSxJQVJWLDJDQVNTLEtBQUssUUFUZDtBQVlBLENBaEJEOztBQWtCQSxNQUFNLFNBQU4sQ0FBZ0Isb0JBQWhCLEdBQXVDLFlBQVk7QUFDbEQsS0FBSSxhQUFhLEVBQWpCOztBQUVBLE1BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLElBQUwsQ0FBVSxNQUE5QixFQUFzQyxHQUF0QyxFQUEyQztBQUMxQyxlQUFhLEtBQUssSUFBTCxDQUFVLENBQVYsQ0FBYjtBQUNBLE1BQUksQ0FBQyxXQUFXLFVBQVosSUFBMEIsV0FBVyxVQUFYLENBQXNCLE1BQXRCLEtBQWlDLENBQTNELElBQWdFLENBQUMsV0FBVyxPQUFoRixFQUNDOztBQUVELE1BQUksTUFBTSxvQkFBTixDQUEyQixPQUEzQixDQUFtQyxXQUFXLElBQTlDLEtBQXVELENBQTNELEVBQThEOztBQUU3RCxPQUFJLFdBQVcsSUFBZjtBQUNBLE9BQUksaUJBQWlCLEtBQXJCOztBQUVBLE9BQUksV0FBVyxJQUFmO0FBQ0EsT0FBSSxpQkFBaUIsS0FBckI7O0FBRUEsUUFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLEtBQUssUUFBTCxDQUFjLFNBQWQsQ0FBd0IsTUFBNUMsRUFBb0QsR0FBcEQsRUFBeUQ7QUFDeEQsUUFBSSxLQUFLLFFBQUwsQ0FBYyxTQUFkLENBQXdCLENBQXhCLEVBQTJCLElBQTNCLEtBQW9DLFdBQVcsSUFBbkQsRUFBeUQ7QUFDeEQsc0JBQWlCLElBQWpCO0FBQ0EsU0FBSSxXQUFXLEtBQUssUUFBTCxDQUFjLFNBQWQsQ0FBd0IsQ0FBeEIsQ0FBZjtBQUNBO0FBQ0E7QUFDRDs7QUFFRCxPQUFJLENBQUMsY0FBTCxFQUFxQjtBQUNwQixlQUFXO0FBQ1YsV0FBTSxXQUFXLElBRFA7QUFFVixzQkFBaUIsQ0FGUDtBQUdWLGdCQUFXO0FBSEQsS0FBWDtBQUtBLFNBQUssUUFBTCxDQUFjLFNBQWQsQ0FBd0IsSUFBeEIsQ0FBNkIsUUFBN0I7QUFDQTs7QUFFRCxRQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksU0FBUyxTQUFULENBQW1CLE1BQXZDLEVBQStDLEdBQS9DLEVBQW9EO0FBQ25ELFFBQUksU0FBUyxTQUFULENBQW1CLENBQW5CLEVBQXNCLFNBQXRCLEtBQW9DLFdBQVcsU0FBbkQsRUFBOEQ7QUFDN0Qsc0JBQWlCLElBQWpCO0FBQ0EsU0FBSSxXQUFXLFNBQVMsU0FBVCxDQUFtQixDQUFuQixDQUFmO0FBQ0E7QUFDQTtBQUNEOztBQUVELE9BQUksQ0FBQyxjQUFMLEVBQXFCO0FBQ3BCLGVBQVc7QUFDVixXQUFNLFdBQVcsSUFEUDtBQUVWLDhCQUF5QixDQUZmLEVBRWtCO0FBQzVCLFlBQU8sU0FBUyxTQUFULENBQW1CLE1BSGhCO0FBSVYsZUFBVSxRQUpBO0FBS1YsZ0JBQVcsV0FBVyxTQUxaO0FBTVYsWUFBTyxXQUFXLFNBQVgsS0FBeUIsU0FBekIsR0FBcUMsS0FBSyxLQUExQyxHQUFrRCxLQUFLLE1BTnBEO0FBT1YsWUFBTyxLQUFLLEtBUEY7QUFRVix3QkFBbUIsRUFSVCxFQVFhO0FBQ3ZCLGNBQVM7QUFUQyxLQUFYO0FBV0EsYUFBUyxTQUFULENBQW1CLElBQW5CLENBQXdCLFFBQXhCO0FBQ0E7O0FBRUQsWUFBUyxlQUFUOztBQUVBLFlBQVMsaUJBQVQsQ0FBMkIsSUFBM0IsQ0FBZ0MsQ0FBaEM7O0FBRUEsY0FBVyxRQUFYLEdBQXNCLFFBQXRCO0FBQ0E7QUFDRDs7QUFFRCxNQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksS0FBSyxRQUFMLENBQWMsU0FBZCxDQUF3QixNQUE1QyxFQUFvRCxHQUFwRCxFQUF5RDtBQUN4RCxNQUFJLFdBQVcsS0FBSyxRQUFMLENBQWMsU0FBZCxDQUF3QixDQUF4QixDQUFmO0FBQ0EsTUFBSSwwQkFBMEIsQ0FBOUI7O0FBRUEsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFNBQVMsU0FBVCxDQUFtQixNQUF2QyxFQUErQyxHQUEvQyxFQUFvRDs7QUFFbkQsWUFBUyxTQUFULENBQW1CLENBQW5CLEVBQXNCLHVCQUF0QixHQUFnRCx1QkFBaEQ7O0FBRUEsOEJBQTJCLFNBQVMsU0FBVCxDQUFtQixDQUFuQixFQUFzQixpQkFBdEIsQ0FBd0MsTUFBbkU7QUFDQTtBQUNEO0FBQ0QsQ0EzRUQ7O0FBNkVBLE1BQU0sU0FBTixDQUFnQixvQkFBaEIsR0FBdUMsWUFBWTs7QUFFbEQsTUFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLEtBQUssSUFBTCxDQUFVLE1BQTlCLEVBQXNDLEdBQXRDLEVBQTJDO0FBQzFDLE1BQUksYUFBYSxLQUFLLElBQUwsQ0FBVSxDQUFWLENBQWpCOztBQUVBLE1BQUksQ0FBQyxXQUFXLFVBQWhCLEVBQ0M7O0FBRUQsTUFBSSxTQUFTLFdBQVcsVUFBWCxDQUFzQixNQUFuQzs7QUFFQSxPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksTUFBcEIsRUFBNEIsR0FBNUIsRUFBaUM7QUFDaEMsY0FBVyxZQUFYLENBQXdCLENBQXhCLElBQTZCLEVBQUUsS0FBSyxhQUFMLENBQW1CLFlBQWxEO0FBQ0E7QUFDRDtBQUNELENBZEQ7O0FBZ0JBLE1BQU0sU0FBTixDQUFnQixZQUFoQixHQUErQixZQUFZO0FBQzFDLE1BQUssb0JBQUw7QUFDQSxNQUFLLG9CQUFMOztBQUVBLE1BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLFFBQUwsQ0FBYyxTQUFkLENBQXdCLE1BQTVDLEVBQW9ELEdBQXBELEVBQXlEO0FBQ3hELE1BQUksV0FBVyxLQUFLLFFBQUwsQ0FBYyxTQUFkLENBQXdCLENBQXhCLENBQWY7O0FBRUEsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFNBQVMsU0FBVCxDQUFtQixNQUF2QyxFQUErQyxHQUEvQyxFQUFvRDs7QUFFbkQsT0FBSSxXQUFXLFNBQVMsU0FBVCxDQUFtQixDQUFuQixDQUFmOztBQUVBLE9BQUksU0FBUyxJQUFULEtBQWtCLE1BQWxCLElBQTRCLFNBQVMsSUFBVCxLQUFrQixVQUE5QyxJQUE0RCxTQUFTLElBQVQsS0FBa0IsUUFBOUUsSUFBMEYsU0FBUyxJQUFULEtBQWtCLFFBQTVHLElBQXdILFNBQVMsSUFBVCxLQUFrQixNQUExSSxJQUFvSixTQUFTLElBQVQsS0FBa0IsVUFBdEssSUFBb0wsU0FBUyxJQUFULEtBQWtCLFlBQXRNLElBQXNOLFNBQVMsSUFBVCxLQUFrQixLQUF4TyxJQUFpUCxTQUFTLElBQVQsS0FBa0IsUUFBblEsSUFBK1EsU0FBUyxJQUFULEtBQWtCLFNBQXJTLEVBQ0MsS0FBSywyQkFBTCxDQUFpQyxRQUFqQyxFQURELEtBRUssSUFBSSxTQUFTLElBQVQsS0FBa0IsZUFBbEIsSUFBcUMsU0FBUyxJQUFULEtBQWtCLFlBQXZELElBQXVFLFNBQVMsSUFBVCxLQUFrQixhQUE3RixFQUNKLEtBQUssdUJBQUwsQ0FBNkIsUUFBN0IsRUFESSxLQUVBLElBQUksU0FBUyxJQUFULEtBQWtCLGtCQUFsQixJQUF3QyxTQUFTLElBQVQsS0FBa0IsZUFBMUQsSUFBNkUsU0FBUyxJQUFULEtBQWtCLGdCQUFuRyxFQUNKLEtBQUssMEJBQUwsQ0FBZ0MsUUFBaEMsRUFESSxLQUVBLElBQUksU0FBUyxJQUFULEtBQWtCLGFBQWxCLElBQW1DLFNBQVMsSUFBVCxLQUFrQixNQUFyRCxJQUErRCxTQUFTLElBQVQsS0FBa0IsYUFBakYsSUFBa0csU0FBUyxJQUFULEtBQWtCLFVBQXBILElBQWtJLFNBQVMsSUFBVCxLQUFrQixXQUFwSixJQUFtSyxTQUFTLElBQVQsS0FBa0IsaUJBQXpMLEVBQ0osS0FBSyxzQkFBTCxDQUE0QixRQUE1QjtBQUNEO0FBQ0Q7QUFFRCxDQXRCRDs7QUF3QkEsTUFBTSxTQUFOLENBQWdCLDJCQUFoQixHQUE4QyxVQUFVLFFBQVYsRUFBb0I7QUFDakUsS0FBSSxDQUFDLFNBQVMsaUJBQVYsSUFBK0IsU0FBUyxpQkFBVCxDQUEyQixNQUEzQixHQUFvQyxDQUF2RSxFQUNDOztBQUVELEtBQUksZ0JBQWdCLFNBQVMsS0FBVCxDQUFlLFFBQW5DO0FBQ0EsS0FBSSxnQkFBZ0IsU0FBUyxLQUFULENBQWUsUUFBbkM7QUFDQSxLQUFJLFVBQUosRUFBZ0IsVUFBaEI7QUFDQSxLQUFJLGFBQWEsS0FBakI7O0FBR0EsTUFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFNBQVMsaUJBQVQsQ0FBMkIsTUFBL0MsRUFBdUQsR0FBdkQsRUFBNEQ7QUFDM0QsTUFBSSxhQUFhLEtBQUssSUFBTCxDQUFVLFNBQVMsaUJBQVQsQ0FBMkIsQ0FBM0IsQ0FBVixDQUFqQjtBQUNBLE1BQUksSUFBSSxDQUFSO0FBQ0EsTUFBSSxzQkFBc0IsS0FBMUI7QUFDQSxNQUFJLHFCQUFxQixLQUF6Qjs7QUFFQSxNQUFJLFdBQVcsYUFBWCxLQUE2QixRQUE3QixJQUF5QyxXQUFXLGFBQVgsS0FBNkIsV0FBMUUsRUFBdUY7O0FBRXRGLE9BQUksZUFBZSxLQUFLLGdCQUFMLENBQXNCLEtBQXRCLENBQTRCLGtCQUE1QixHQUFpRCxLQUFLLGdCQUFMLENBQXNCLEtBQXRCLENBQTRCLGtCQUE3RSxHQUFtRyxLQUFLLFFBQUwsQ0FBYyxLQUFkLElBQXVCLEtBQUssUUFBTCxDQUFjLEtBQWQsQ0FBb0IsZUFBNUMsR0FDcEgsS0FBSyxRQUFMLENBQWMsS0FBZCxDQUFvQixlQURnRyxHQUM3RSxLQUFLLFFBQUwsQ0FBYyxLQUFkLElBQXVCLEtBQUssUUFBTCxDQUFjLEtBQWQsQ0FBb0IsT0FBNUMsR0FBdUQsS0FBSyxRQUFMLENBQWMsS0FBZCxDQUFvQixPQUEzRSxHQUFxRixDQUFDLFFBRDdIOztBQUdBLE9BQUksZUFBZSxLQUFLLGdCQUFMLENBQXNCLEtBQXRCLENBQTRCLGtCQUE1QixHQUFpRCxLQUFLLGdCQUFMLENBQXNCLEtBQXRCLENBQTRCLGtCQUE3RSxHQUFtRyxLQUFLLFFBQUwsQ0FBYyxLQUFkLElBQXVCLEtBQUssUUFBTCxDQUFjLEtBQWQsQ0FBb0IsZUFBNUMsR0FDcEgsS0FBSyxRQUFMLENBQWMsS0FBZCxDQUFvQixlQURnRyxHQUM3RSxLQUFLLFFBQUwsQ0FBYyxLQUFkLElBQXVCLEtBQUssUUFBTCxDQUFjLEtBQWQsQ0FBb0IsT0FBNUMsR0FBdUQsS0FBSyxRQUFMLENBQWMsS0FBZCxDQUFvQixPQUEzRSxHQUFxRixRQUQ1SDtBQUVBOztBQUdELE1BQUksV0FBVyxVQUFYLENBQXNCLENBQXRCLEVBQXlCLENBQXpCLElBQThCLFdBQVcsVUFBWCxDQUFzQixDQUF0QixFQUF5QixDQUF6QixDQUEyQixPQUF6RCxJQUFvRSxXQUFXLFVBQVgsS0FBMEIsVUFBbEcsRUFBOEc7QUFDN0csZ0JBQWEsSUFBYjtBQUNBOztBQUVELE9BQUssSUFBSSxDQUFULEVBQVksSUFBSSxXQUFXLFVBQVgsQ0FBc0IsTUFBdEMsRUFBOEMsR0FBOUMsRUFBbUQ7O0FBRWxELE9BQUksT0FBTyxXQUFXLFVBQVgsQ0FBc0IsQ0FBdEIsRUFBeUIsQ0FBaEMsS0FBc0MsV0FBMUMsRUFBdUQ7QUFDdEQsZUFBVyxVQUFYLENBQXNCLENBQXRCLEVBQXlCLENBQXpCLEdBQTZCLENBQTdCO0FBQ0E7O0FBRUQsT0FBSSxXQUFXLFVBQVgsQ0FBc0IsQ0FBdEIsRUFBeUIsQ0FBekIsQ0FBMkIsT0FBL0IsRUFBd0M7QUFDdkMsaUJBQWEsSUFBYjtBQUNBLGlCQUFhLFdBQVcsVUFBWCxDQUFzQixDQUF0QixFQUF5QixDQUF6QixDQUEyQixPQUEzQixFQUFiLENBRnVDLENBRVc7QUFDbEQsSUFIRCxNQUtDLGFBQWEsV0FBVyxVQUFYLENBQXNCLENBQXRCLEVBQXlCLENBQXRDOztBQUVELGdCQUFhLFdBQVcsVUFBWCxDQUFzQixDQUF0QixFQUF5QixDQUF0Qzs7QUFHQSxPQUFJLGFBQWEsY0FBYyxHQUEvQixFQUNDLGNBQWMsR0FBZCxHQUFvQixVQUFwQjtBQUNELE9BQUksYUFBYSxjQUFjLEdBQS9CLEVBQ0MsY0FBYyxHQUFkLEdBQW9CLFVBQXBCOztBQUVELE9BQUksYUFBYSxjQUFjLEdBQS9CLEVBQ0MsY0FBYyxHQUFkLEdBQW9CLFVBQXBCOztBQUVELE9BQUksYUFBYSxjQUFjLEdBQS9CLEVBQ0MsY0FBYyxHQUFkLEdBQW9CLFVBQXBCOztBQUdELE9BQUksSUFBSSxDQUFSLEVBQVc7QUFDVixRQUFJLFFBQVEsYUFBYSxXQUFXLFVBQVgsQ0FBc0IsSUFBSSxDQUExQixFQUE2QixDQUF0RDtBQUNBLFlBQVEsQ0FBUixLQUFjLFFBQVEsUUFBUSxDQUFDLENBQS9CLEVBRlUsQ0FFeUI7O0FBRW5DLFFBQUksY0FBYyxPQUFkLEdBQXdCLEtBQXhCLElBQWlDLFVBQVUsQ0FBL0MsRUFBa0Q7QUFDakQsbUJBQWMsT0FBZCxHQUF3QixLQUF4QjtBQUNBOztBQUVELFFBQUksZUFBZSxJQUFmLElBQXVCLFdBQVcsVUFBWCxDQUFzQixJQUFJLENBQTFCLEVBQTZCLENBQTdCLEtBQW1DLElBQTlELEVBQW9FO0FBQ25FLFNBQUksUUFBUSxhQUFhLFdBQVcsVUFBWCxDQUFzQixJQUFJLENBQTFCLEVBQTZCLENBQXREO0FBQ0EsYUFBUSxDQUFSLEtBQWMsUUFBUSxRQUFRLENBQUMsQ0FBL0IsRUFGbUUsQ0FFaEM7O0FBRW5DLFNBQUksY0FBYyxPQUFkLEdBQXdCLEtBQXhCLElBQWlDLFVBQVUsQ0FBL0MsRUFBa0Q7QUFDakQsb0JBQWMsT0FBZCxHQUF3QixLQUF4QjtBQUNGO0FBQ0M7QUFDRDs7QUFFRDtBQUNBLE9BQUksYUFBYSxZQUFiLElBQTZCLENBQUMsbUJBQWxDLEVBQXVEO0FBQ3REO0FBQ0EsSUFGRCxNQUVPLElBQUksQ0FBQyxtQkFBTCxFQUEwQjtBQUNoQywwQkFBc0IsSUFBdEI7O0FBRUEsUUFBSSxJQUFJLENBQVIsRUFBVztBQUNWLFVBQUssQ0FBTDtBQUNBO0FBQ0E7QUFDRDs7QUFFRDtBQUNBLE9BQUksYUFBYSxZQUFiLElBQTZCLENBQUMsa0JBQWxDLEVBQXNEO0FBQ3JELHlCQUFxQixJQUFyQjtBQUNBLElBRkQsTUFFTyxJQUFJLGFBQWEsWUFBYixJQUE2QixrQkFBakMsRUFBcUQ7QUFDM0Q7QUFDQTs7QUFFRCxPQUFJLFdBQVcsVUFBWCxDQUFzQixDQUF0QixFQUF5QixLQUE3QixFQUNDLFNBQVMsS0FBVCxDQUFlLE1BQWYsQ0FBc0IsVUFBdEIsSUFBb0MsV0FBVyxVQUFYLENBQXNCLENBQXRCLEVBQXlCLEtBQTdEOztBQUdELE9BQUksYUFBYSxjQUFjLFdBQS9CLEVBQ0MsY0FBYyxXQUFkLEdBQTRCLFVBQTVCO0FBQ0QsT0FBSSxhQUFhLGNBQWMsV0FBL0IsRUFDQyxjQUFjLFdBQWQsR0FBNEIsVUFBNUI7O0FBRUQsT0FBSSxlQUFlLElBQW5CLEVBQ0M7O0FBRUQsT0FBSSxhQUFhLGNBQWMsV0FBL0IsRUFDQyxjQUFjLFdBQWQsR0FBNEIsVUFBNUI7QUFDRCxPQUFJLGFBQWEsY0FBYyxXQUEvQixFQUNDLGNBQWMsV0FBZCxHQUE0QixVQUE1QjtBQUNEOztBQUVELE9BQUssUUFBTCxDQUFjLGNBQWQsR0FBK0IsV0FBVyxVQUFYLEdBQXdCLGFBQWEsVUFBYixHQUEwQixRQUFqRjtBQUNBOztBQUVEO0FBQ0E7QUFDQSxDQXRIRDs7QUF3SEEsTUFBTSxTQUFOLENBQWdCLHVCQUFoQixHQUEwQyxVQUFVLFFBQVYsRUFBb0I7O0FBRTdELEtBQUksQ0FBQyxTQUFTLGlCQUFWLElBQStCLFNBQVMsaUJBQVQsQ0FBMkIsTUFBM0IsR0FBb0MsQ0FBdkUsRUFDQzs7QUFFRCxLQUFJLGdCQUFnQixTQUFTLEtBQVQsQ0FBZSxRQUFuQztBQUNBLEtBQUksZ0JBQWdCLFNBQVMsS0FBVCxDQUFlLFFBQW5DOztBQUVBLEtBQUksVUFBSixFQUFnQixVQUFoQjtBQUNBLEtBQUksYUFBYSxLQUFqQjs7QUFFQSxLQUFJLHlCQUF5QixFQUE3QjtBQUNBLEtBQUkseUJBQXlCLEVBQTdCOztBQUVBLE1BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxTQUFTLGlCQUFULENBQTJCLE1BQS9DLEVBQXVELEdBQXZELEVBQTREO0FBQzNELE1BQUksYUFBYSxLQUFLLElBQUwsQ0FBVSxTQUFTLGlCQUFULENBQTJCLENBQTNCLENBQVYsQ0FBakI7QUFDQSxNQUFJLElBQUksQ0FBUjtBQUNBLE1BQUksc0JBQXNCLEtBQTFCO0FBQ0EsTUFBSSxxQkFBcUIsS0FBekI7O0FBRUEsTUFBSSxXQUFXLGFBQVgsS0FBNkIsUUFBN0IsSUFBeUMsV0FBVyxhQUFYLEtBQTZCLFdBQTFFLEVBQXVGOztBQUV0RixPQUFJLGVBQWUsS0FBSyxnQkFBTCxDQUFzQixLQUF0QixDQUE0QixrQkFBNUIsR0FBaUQsS0FBSyxnQkFBTCxDQUFzQixLQUF0QixDQUE0QixrQkFBN0UsR0FBbUcsS0FBSyxRQUFMLENBQWMsS0FBZCxJQUF1QixLQUFLLFFBQUwsQ0FBYyxLQUFkLENBQW9CLGVBQTVDLEdBQ3BILEtBQUssUUFBTCxDQUFjLEtBQWQsQ0FBb0IsZUFEZ0csR0FDN0UsS0FBSyxRQUFMLENBQWMsS0FBZCxJQUF1QixLQUFLLFFBQUwsQ0FBYyxLQUFkLENBQW9CLE9BQTVDLEdBQXVELEtBQUssUUFBTCxDQUFjLEtBQWQsQ0FBb0IsT0FBM0UsR0FBcUYsQ0FBQyxRQUQ3SDs7QUFHQSxPQUFJLGVBQWUsS0FBSyxnQkFBTCxDQUFzQixLQUF0QixDQUE0QixrQkFBNUIsR0FBaUQsS0FBSyxnQkFBTCxDQUFzQixLQUF0QixDQUE0QixrQkFBN0UsR0FBbUcsS0FBSyxRQUFMLENBQWMsS0FBZCxJQUF1QixLQUFLLFFBQUwsQ0FBYyxLQUFkLENBQW9CLGVBQTVDLEdBQ3BILEtBQUssUUFBTCxDQUFjLEtBQWQsQ0FBb0IsZUFEZ0csR0FDN0UsS0FBSyxRQUFMLENBQWMsS0FBZCxJQUF1QixLQUFLLFFBQUwsQ0FBYyxLQUFkLENBQW9CLE9BQTVDLEdBQXVELEtBQUssUUFBTCxDQUFjLEtBQWQsQ0FBb0IsT0FBM0UsR0FBcUYsUUFENUg7QUFFQTs7QUFHRCxNQUFJLFdBQVcsVUFBWCxDQUFzQixDQUF0QixFQUF5QixDQUF6QixJQUE4QixXQUFXLFVBQVgsQ0FBc0IsQ0FBdEIsRUFBeUIsQ0FBekIsQ0FBMkIsT0FBekQsSUFBb0UsV0FBVyxVQUFYLEtBQTBCLFVBQWxHLEVBQThHO0FBQzdHLGdCQUFhLElBQWI7QUFDQTs7QUFFRCxPQUFLLElBQUksQ0FBVCxFQUFZLElBQUksV0FBVyxVQUFYLENBQXNCLE1BQXRDLEVBQThDLEdBQTlDLEVBQW1EOztBQUVsRDtBQUNBLE9BQUksT0FBTyxXQUFXLFVBQVgsQ0FBc0IsQ0FBdEIsRUFBeUIsQ0FBaEMsS0FBc0MsV0FBMUMsRUFBdUQ7QUFDdEQsZUFBVyxVQUFYLENBQXNCLENBQXRCLEVBQXlCLENBQXpCLEdBQTZCLENBQTdCO0FBQ0E7O0FBRUQsT0FBSSxXQUFXLFVBQVgsQ0FBc0IsQ0FBdEIsRUFBeUIsQ0FBekIsQ0FBMkIsT0FBL0IsRUFBd0M7QUFDdkMsaUJBQWEsSUFBYjtBQUNBLGlCQUFhLFdBQVcsVUFBWCxDQUFzQixDQUF0QixFQUF5QixDQUF6QixDQUEyQixPQUEzQixFQUFiLENBRnVDLENBRVc7QUFDbEQsSUFIRCxNQUtDLGFBQWEsV0FBVyxVQUFYLENBQXNCLENBQXRCLEVBQXlCLENBQXRDOztBQUVELGdCQUFhLFdBQVcsVUFBWCxDQUFzQixDQUF0QixFQUF5QixDQUF0Qzs7QUFJQSxPQUFJLGFBQWEsY0FBYyxHQUEvQixFQUNDLGNBQWMsR0FBZCxHQUFvQixVQUFwQjtBQUNELE9BQUksYUFBYSxjQUFjLEdBQS9CLEVBQ0MsY0FBYyxHQUFkLEdBQW9CLFVBQXBCOztBQUVELE9BQUksSUFBSSxDQUFSLEVBQVc7QUFDVixRQUFJLFFBQVEsYUFBYSxXQUFXLFVBQVgsQ0FBc0IsSUFBSSxDQUExQixFQUE2QixDQUF0RDtBQUNBLFlBQVEsQ0FBUixLQUFjLFFBQVEsUUFBUSxDQUFDLENBQS9CLEVBRlUsQ0FFeUI7O0FBRW5DLFFBQUksY0FBYyxPQUFkLEdBQXdCLEtBQXhCLElBQWlDLFVBQVUsQ0FBL0MsRUFBa0Q7QUFDakQsbUJBQWMsT0FBZCxHQUF3QixLQUF4QjtBQUNBOztBQUVELFFBQUksZUFBZSxJQUFmLElBQXVCLFdBQVcsVUFBWCxDQUFzQixJQUFJLENBQTFCLEVBQTZCLENBQTdCLEtBQW1DLElBQTlELEVBQW9FO0FBQ25FLFNBQUksUUFBUSxhQUFhLFdBQVcsVUFBWCxDQUFzQixJQUFJLENBQTFCLEVBQTZCLENBQXREO0FBQ0EsYUFBUSxDQUFSLEtBQWMsUUFBUSxRQUFRLENBQUMsQ0FBL0IsRUFGbUUsQ0FFaEM7O0FBRW5DLFNBQUksY0FBYyxPQUFkLEdBQXdCLEtBQXhCLElBQWlDLFVBQVUsQ0FBL0MsRUFBa0Q7QUFDakQsb0JBQWMsT0FBZCxHQUF3QixLQUF4QjtBQUNGO0FBQ0M7QUFDRDs7QUFFRDtBQUNBLE9BQUksYUFBYSxZQUFiLElBQTZCLENBQUMsbUJBQWxDLEVBQXVEO0FBQ3REO0FBQ0EsSUFGRCxNQUVPLElBQUksQ0FBQyxtQkFBTCxFQUEwQjtBQUNoQywwQkFBc0IsSUFBdEI7O0FBRUEsUUFBSSxJQUFJLENBQVIsRUFBVztBQUNWLFVBQUssQ0FBTDtBQUNBO0FBQ0E7QUFDRDs7QUFFRDtBQUNBLE9BQUksYUFBYSxZQUFiLElBQTZCLENBQUMsa0JBQWxDLEVBQXNEO0FBQ3JELHlCQUFxQixJQUFyQjtBQUNBLElBRkQsTUFFTyxJQUFJLGFBQWEsWUFBYixJQUE2QixrQkFBakMsRUFBcUQ7QUFDM0Q7QUFDQTs7QUFHRCxPQUFJLFdBQVcsVUFBWCxDQUFzQixDQUF0QixFQUF5QixLQUE3QixFQUNDLFNBQVMsS0FBVCxDQUFlLE1BQWYsQ0FBc0IsVUFBdEIsSUFBb0MsV0FBVyxVQUFYLENBQXNCLENBQXRCLEVBQXlCLEtBQTdEOztBQUVELE9BQUksYUFBYSxjQUFjLFdBQS9CLEVBQ0MsY0FBYyxXQUFkLEdBQTRCLFVBQTVCO0FBQ0QsT0FBSSxhQUFhLGNBQWMsV0FBL0IsRUFDQyxjQUFjLFdBQWQsR0FBNEIsVUFBNUI7O0FBRUQsT0FBSSxlQUFlLElBQW5CLEVBQ0M7O0FBRUQsWUFBUyxPQUFULENBQWlCLFVBQWpCLElBQStCLENBQUMsQ0FBQyxTQUFTLE9BQVQsQ0FBaUIsVUFBakIsQ0FBRCxHQUFnQyxDQUFoQyxHQUFvQyxTQUFTLE9BQVQsQ0FBaUIsVUFBakIsQ0FBckMsSUFBcUUsS0FBSyxHQUFMLENBQVMsVUFBVCxDQUFwRzs7QUFFQSxPQUFJLGNBQWMsQ0FBbEIsRUFBcUI7QUFDcEIsUUFBSSx1QkFBdUIsVUFBdkIsQ0FBSixFQUNDLHVCQUF1QixVQUF2QixLQUFzQyxVQUF0QyxDQURELEtBR0MsdUJBQXVCLFVBQXZCLElBQXFDLFVBQXJDO0FBQ0QsSUFMRCxNQUtPO0FBQ04sUUFBSSx1QkFBdUIsVUFBdkIsQ0FBSixFQUNDLHVCQUF1QixVQUF2QixLQUFzQyxVQUF0QyxDQURELEtBR0MsdUJBQXVCLFVBQXZCLElBQXFDLFVBQXJDO0FBQ0Q7QUFDRDs7QUFFRCxPQUFLLFFBQUwsQ0FBYyxjQUFkLEdBQStCLFdBQVcsVUFBWCxHQUF3QixhQUFhLFVBQWIsR0FBMEIsUUFBakY7QUFDQTs7QUFFRCxNQUFLLENBQUwsSUFBVSxzQkFBVixFQUFrQztBQUNqQyxNQUFJLHVCQUF1QixjQUF2QixDQUFzQyxDQUF0QyxDQUFKLEVBQThDO0FBQzlDLE9BQUksTUFBTSxDQUFOLENBQUosRUFBYztBQUNiO0FBQ0E7QUFDRCxPQUFJLE9BQU8sdUJBQXVCLENBQXZCLENBQVg7O0FBRUEsT0FBSSxPQUFPLGNBQWMsR0FBekIsRUFDQyxjQUFjLEdBQWQsR0FBb0IsSUFBcEI7O0FBRUQsT0FBSSxPQUFPLGNBQWMsR0FBekIsRUFDQyxjQUFjLEdBQWQsR0FBb0IsSUFBcEI7O0FBRUQsT0FBSSxJQUFJLGNBQWMsV0FBbEIsSUFBaUMsSUFBSSxjQUFjLFdBQXZELEVBQ0M7O0FBRUQsT0FBSSxPQUFPLGNBQWMsV0FBekIsRUFDQyxjQUFjLFdBQWQsR0FBNEIsSUFBNUI7QUFDRCxPQUFJLE9BQU8sY0FBYyxXQUF6QixFQUNDLGNBQWMsV0FBZCxHQUE0QixJQUE1QjtBQUNEO0FBRUE7O0FBRUQsTUFBSyxDQUFMLElBQVUsc0JBQVYsRUFBa0M7O0FBRWpDLE1BQUksdUJBQXVCLGNBQXZCLENBQXNDLENBQXRDLENBQUosRUFBOEM7QUFDOUMsT0FBSSxNQUFNLENBQU4sQ0FBSixFQUFjO0FBQ2I7QUFDQTs7QUFFRCxPQUFJLE9BQU8sdUJBQXVCLENBQXZCLENBQVg7O0FBRUEsT0FBSSxPQUFPLGNBQWMsR0FBekIsRUFDQyxjQUFjLEdBQWQsR0FBb0IsSUFBcEI7O0FBRUQsT0FBSSxPQUFPLGNBQWMsR0FBekIsRUFDQyxjQUFjLEdBQWQsR0FBb0IsSUFBcEI7O0FBRUQsT0FBSSxJQUFJLGNBQWMsV0FBbEIsSUFBaUMsSUFBSSxjQUFjLFdBQXZELEVBQ0M7O0FBRUQsT0FBSSxPQUFPLGNBQWMsV0FBekIsRUFDQyxjQUFjLFdBQWQsR0FBNEIsSUFBNUI7QUFDRCxPQUFJLE9BQU8sY0FBYyxXQUF6QixFQUNDLGNBQWMsV0FBZCxHQUE0QixJQUE1QjtBQUNEO0FBRUE7O0FBR0Q7QUFDQTs7QUFFQTtBQUNBLENBbkxEOztBQXFMQSxNQUFNLFNBQU4sQ0FBZ0IsMEJBQWhCLEdBQTZDLFVBQVUsUUFBVixFQUFvQjtBQUNoRSxLQUFJLENBQUMsU0FBUyxpQkFBVixJQUErQixTQUFTLGlCQUFULENBQTJCLE1BQTNCLEdBQW9DLENBQXZFLEVBQ0M7O0FBRUQsS0FBSSxnQkFBZ0IsU0FBUyxLQUFULENBQWUsUUFBbkM7QUFDQSxLQUFJLGdCQUFnQixTQUFTLEtBQVQsQ0FBZSxRQUFuQzs7QUFFQSxLQUFJLFVBQUosRUFBZ0IsVUFBaEI7QUFDQSxLQUFJLGFBQWEsS0FBakI7QUFDQSxLQUFJLG9CQUFvQixLQUF4QjtBQUNBLEtBQUksb0JBQW9CLEtBQXhCOztBQUVBLEtBQUksaUJBQWlCLEVBQXJCOztBQUVBLE1BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxTQUFTLGlCQUFULENBQTJCLE1BQS9DLEVBQXVELEdBQXZELEVBQTREO0FBQzNELE1BQUksYUFBYSxLQUFLLElBQUwsQ0FBVSxTQUFTLGlCQUFULENBQTJCLENBQTNCLENBQVYsQ0FBakI7QUFDQSxNQUFJLElBQUksQ0FBUjtBQUNBLE1BQUksc0JBQXNCLEtBQTFCO0FBQ0EsTUFBSSxxQkFBcUIsS0FBekI7O0FBRUEsTUFBSSxXQUFXLGFBQVgsS0FBNkIsUUFBN0IsSUFBeUMsV0FBVyxhQUFYLEtBQTZCLFdBQTFFLEVBQXVGOztBQUV0RixPQUFJLGVBQWUsS0FBSyxnQkFBTCxDQUFzQixLQUF0QixDQUE0QixrQkFBNUIsR0FBaUQsS0FBSyxnQkFBTCxDQUFzQixLQUF0QixDQUE0QixrQkFBN0UsR0FBbUcsS0FBSyxRQUFMLENBQWMsS0FBZCxJQUF1QixLQUFLLFFBQUwsQ0FBYyxLQUFkLENBQW9CLGVBQTVDLEdBQ3BILEtBQUssUUFBTCxDQUFjLEtBQWQsQ0FBb0IsZUFEZ0csR0FDN0UsS0FBSyxRQUFMLENBQWMsS0FBZCxJQUF1QixLQUFLLFFBQUwsQ0FBYyxLQUFkLENBQW9CLE9BQTVDLEdBQXVELEtBQUssUUFBTCxDQUFjLEtBQWQsQ0FBb0IsT0FBM0UsR0FBcUYsQ0FBQyxRQUQ3SDs7QUFHQSxPQUFJLGVBQWUsS0FBSyxnQkFBTCxDQUFzQixLQUF0QixDQUE0QixrQkFBNUIsR0FBaUQsS0FBSyxnQkFBTCxDQUFzQixLQUF0QixDQUE0QixrQkFBN0UsR0FBbUcsS0FBSyxRQUFMLENBQWMsS0FBZCxJQUF1QixLQUFLLFFBQUwsQ0FBYyxLQUFkLENBQW9CLGVBQTVDLEdBQ3BILEtBQUssUUFBTCxDQUFjLEtBQWQsQ0FBb0IsZUFEZ0csR0FDN0UsS0FBSyxRQUFMLENBQWMsS0FBZCxJQUF1QixLQUFLLFFBQUwsQ0FBYyxLQUFkLENBQW9CLE9BQTVDLEdBQXVELEtBQUssUUFBTCxDQUFjLEtBQWQsQ0FBb0IsT0FBM0UsR0FBcUYsUUFENUg7QUFFQTs7QUFHRCxNQUFJLFdBQVcsVUFBWCxDQUFzQixDQUF0QixFQUF5QixDQUF6QixJQUE4QixXQUFXLFVBQVgsQ0FBc0IsQ0FBdEIsRUFBeUIsQ0FBekIsQ0FBMkIsT0FBekQsSUFBb0UsV0FBVyxVQUFYLEtBQTBCLFVBQWxHLEVBQThHO0FBQzdHLGdCQUFhLElBQWI7QUFDQTs7QUFFRCxPQUFLLElBQUksQ0FBVCxFQUFZLElBQUksV0FBVyxVQUFYLENBQXNCLE1BQXRDLEVBQThDLEdBQTlDLEVBQW1EOztBQUVsRDtBQUNBLE9BQUksT0FBTyxXQUFXLFVBQVgsQ0FBc0IsQ0FBdEIsRUFBeUIsQ0FBaEMsS0FBc0MsV0FBMUMsRUFBdUQ7QUFDdEQsZUFBVyxVQUFYLENBQXNCLENBQXRCLEVBQXlCLENBQXpCLEdBQTZCLENBQTdCO0FBQ0E7O0FBRUQsT0FBSSxXQUFXLFVBQVgsQ0FBc0IsQ0FBdEIsRUFBeUIsQ0FBekIsQ0FBMkIsT0FBL0IsRUFBd0M7QUFDdkMsaUJBQWEsSUFBYjtBQUNBLGlCQUFhLFdBQVcsVUFBWCxDQUFzQixDQUF0QixFQUF5QixDQUF6QixDQUEyQixPQUEzQixFQUFiLENBRnVDLENBRVc7QUFDbEQsSUFIRCxNQUtDLGFBQWEsV0FBVyxVQUFYLENBQXNCLENBQXRCLEVBQXlCLENBQXRDOztBQUVELGdCQUFhLFdBQVcsVUFBWCxDQUFzQixDQUF0QixFQUF5QixDQUF0Qzs7QUFJQSxPQUFJLGFBQWEsY0FBYyxHQUEvQixFQUNDLGNBQWMsR0FBZCxHQUFvQixVQUFwQjtBQUNELE9BQUksYUFBYSxjQUFjLEdBQS9CLEVBQ0MsY0FBYyxHQUFkLEdBQW9CLFVBQXBCOztBQUVELE9BQUksSUFBSSxDQUFSLEVBQVc7QUFDVixRQUFJLFFBQVEsYUFBYSxXQUFXLFVBQVgsQ0FBc0IsSUFBSSxDQUExQixFQUE2QixDQUF0RDtBQUNBLFlBQVEsQ0FBUixLQUFjLFFBQVEsUUFBUSxDQUFDLENBQS9CLEVBRlUsQ0FFeUI7O0FBRW5DLFFBQUksY0FBYyxPQUFkLEdBQXdCLEtBQXhCLElBQWlDLFVBQVUsQ0FBL0MsRUFBa0Q7QUFDakQsbUJBQWMsT0FBZCxHQUF3QixLQUF4QjtBQUNBOztBQUVELFFBQUksZUFBZSxJQUFmLElBQXVCLFdBQVcsVUFBWCxDQUFzQixJQUFJLENBQTFCLEVBQTZCLENBQTdCLEtBQW1DLElBQTlELEVBQW9FO0FBQ25FLFNBQUksUUFBUSxhQUFhLFdBQVcsVUFBWCxDQUFzQixJQUFJLENBQTFCLEVBQTZCLENBQXREO0FBQ0EsYUFBUSxDQUFSLEtBQWMsUUFBUSxRQUFRLENBQUMsQ0FBL0IsRUFGbUUsQ0FFaEM7O0FBRW5DLFNBQUksY0FBYyxPQUFkLEdBQXdCLEtBQXhCLElBQWlDLFVBQVUsQ0FBL0MsRUFBa0Q7QUFDakQsb0JBQWMsT0FBZCxHQUF3QixLQUF4QjtBQUNGO0FBQ0M7QUFDRDs7QUFFRDtBQUNBLE9BQUksYUFBYSxZQUFiLElBQTZCLENBQUMsbUJBQWxDLEVBQXVEO0FBQ3REO0FBQ0EsSUFGRCxNQUVPLElBQUksQ0FBQyxtQkFBTCxFQUEwQjtBQUNoQywwQkFBc0IsSUFBdEI7O0FBRUEsUUFBSSxJQUFJLENBQVIsRUFBVztBQUNWLFVBQUssQ0FBTDtBQUNBO0FBQ0E7QUFDRDs7QUFFRDtBQUNBLE9BQUksYUFBYSxZQUFiLElBQTZCLENBQUMsa0JBQWxDLEVBQXNEO0FBQ3JELHlCQUFxQixJQUFyQjtBQUNBLElBRkQsTUFFTyxJQUFJLGFBQWEsWUFBYixJQUE2QixrQkFBakMsRUFBcUQ7QUFDM0Q7QUFDQTs7QUFFRCxPQUFJLFdBQVcsVUFBWCxDQUFzQixDQUF0QixFQUF5QixLQUE3QixFQUNDLFNBQVMsS0FBVCxDQUFlLE1BQWYsQ0FBc0IsVUFBdEIsSUFBb0MsV0FBVyxVQUFYLENBQXNCLENBQXRCLEVBQXlCLEtBQTdEOztBQUVELE9BQUksYUFBYSxjQUFjLFdBQS9CLEVBQ0MsY0FBYyxXQUFkLEdBQTRCLFVBQTVCO0FBQ0QsT0FBSSxhQUFhLGNBQWMsV0FBL0IsRUFDQyxjQUFjLFdBQWQsR0FBNEIsVUFBNUI7O0FBRUQsT0FBSSxlQUFlLElBQW5CLEVBQ0M7O0FBRUQsWUFBUyxPQUFULENBQWlCLFVBQWpCLElBQStCLENBQUMsQ0FBQyxTQUFTLE9BQVQsQ0FBaUIsVUFBakIsQ0FBRCxHQUFnQyxDQUFoQyxHQUFvQyxTQUFTLE9BQVQsQ0FBaUIsVUFBakIsQ0FBckMsSUFBcUUsS0FBSyxHQUFMLENBQVMsVUFBVCxDQUFwRzs7QUFFQSxPQUFJLGNBQWMsQ0FBbEIsRUFBcUI7QUFDcEIsd0JBQW9CLElBQXBCO0FBQ0EsSUFGRCxNQUVPO0FBQ04sd0JBQW9CLElBQXBCO0FBQ0E7O0FBRUQsT0FBSSxlQUFlLFVBQWYsQ0FBSixFQUNDLGVBQWUsVUFBZixLQUE4QixLQUFLLEdBQUwsQ0FBUyxVQUFULENBQTlCLENBREQsS0FHQyxlQUFlLFVBQWYsSUFBNkIsS0FBSyxHQUFMLENBQVMsVUFBVCxDQUE3QjtBQUNEOztBQUVELE9BQUssUUFBTCxDQUFjLGNBQWQsR0FBK0IsV0FBVyxVQUFYLEdBQXdCLGFBQWEsVUFBYixHQUEwQixRQUFqRjtBQUNBOztBQUdELEtBQUkscUJBQXFCLENBQUMsaUJBQTFCLEVBQTZDO0FBQzVDLGdCQUFjLEdBQWQsR0FBb0IsRUFBcEI7QUFDQSxnQkFBYyxHQUFkLEdBQW9CLENBQXBCO0FBQ0EsRUFIRCxNQUdPLElBQUkscUJBQXFCLGlCQUF6QixFQUE0QztBQUNsRCxnQkFBYyxHQUFkLEdBQW9CLEVBQXBCO0FBQ0EsZ0JBQWMsR0FBZCxHQUFvQixDQUFDLEVBQXJCO0FBQ0EsRUFITSxNQUdBLElBQUksQ0FBQyxpQkFBRCxJQUFzQixpQkFBMUIsRUFBNkM7QUFDbkQsZ0JBQWMsR0FBZCxHQUFvQixDQUFDLENBQXJCO0FBQ0EsZ0JBQWMsR0FBZCxHQUFvQixDQUFDLEVBQXJCO0FBQ0E7O0FBRUQsZUFBYyxXQUFkLEdBQTRCLGNBQWMsR0FBMUM7QUFDQSxlQUFjLFdBQWQsR0FBNEIsY0FBYyxHQUExQzs7QUFFQSxVQUFTLGNBQVQsR0FBMEIsY0FBMUI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBL0lEOztBQWlKQSxNQUFNLFNBQU4sQ0FBZ0Isc0JBQWhCLEdBQXlDLFVBQVUsUUFBVixFQUFvQjtBQUM1RCxLQUFJLENBQUMsU0FBUyxpQkFBVixJQUErQixTQUFTLGlCQUFULENBQTJCLE1BQTNCLEdBQW9DLENBQXZFLEVBQ0M7O0FBRUQsS0FBSSxnQkFBZ0IsU0FBUyxLQUFULENBQWUsUUFBbkM7QUFDQSxLQUFJLGdCQUFnQixTQUFTLEtBQVQsQ0FBZSxRQUFuQztBQUNBLEtBQUksVUFBSixFQUFnQixVQUFoQixFQUE0QixhQUE1QixFQUEyQyxhQUEzQztBQUNBLEtBQUksYUFBYSxLQUFqQjs7QUFHQSxNQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksU0FBUyxpQkFBVCxDQUEyQixNQUEvQyxFQUF1RCxHQUF2RCxFQUE0RDtBQUMzRCxNQUFJLGFBQWEsS0FBSyxJQUFMLENBQVUsU0FBUyxpQkFBVCxDQUEyQixDQUEzQixDQUFWLENBQWpCO0FBQ0EsTUFBSSxJQUFJLENBQVI7QUFDQSxNQUFJLHNCQUFzQixLQUExQjtBQUNBLE1BQUkscUJBQXFCLEtBQXpCOztBQUVBLE1BQUksV0FBVyxhQUFYLEtBQTZCLFFBQTdCLElBQXlDLFdBQVcsYUFBWCxLQUE2QixXQUExRSxFQUF1Rjs7QUFFdEYsT0FBSSxlQUFlLEtBQUssZ0JBQUwsQ0FBc0IsS0FBdEIsQ0FBNEIsa0JBQTVCLEdBQWlELEtBQUssZ0JBQUwsQ0FBc0IsS0FBdEIsQ0FBNEIsa0JBQTdFLEdBQW1HLEtBQUssUUFBTCxDQUFjLEtBQWQsSUFBdUIsS0FBSyxRQUFMLENBQWMsS0FBZCxDQUFvQixlQUE1QyxHQUNwSCxLQUFLLFFBQUwsQ0FBYyxLQUFkLENBQW9CLGVBRGdHLEdBQzdFLEtBQUssUUFBTCxDQUFjLEtBQWQsSUFBdUIsS0FBSyxRQUFMLENBQWMsS0FBZCxDQUFvQixPQUE1QyxHQUF1RCxLQUFLLFFBQUwsQ0FBYyxLQUFkLENBQW9CLE9BQTNFLEdBQXFGLENBQUMsUUFEN0g7O0FBR0EsT0FBSSxlQUFlLEtBQUssZ0JBQUwsQ0FBc0IsS0FBdEIsQ0FBNEIsa0JBQTVCLEdBQWlELEtBQUssZ0JBQUwsQ0FBc0IsS0FBdEIsQ0FBNEIsa0JBQTdFLEdBQW1HLEtBQUssUUFBTCxDQUFjLEtBQWQsSUFBdUIsS0FBSyxRQUFMLENBQWMsS0FBZCxDQUFvQixlQUE1QyxHQUNwSCxLQUFLLFFBQUwsQ0FBYyxLQUFkLENBQW9CLGVBRGdHLEdBQzdFLEtBQUssUUFBTCxDQUFjLEtBQWQsSUFBdUIsS0FBSyxRQUFMLENBQWMsS0FBZCxDQUFvQixPQUE1QyxHQUF1RCxLQUFLLFFBQUwsQ0FBYyxLQUFkLENBQW9CLE9BQTNFLEdBQXFGLFFBRDVIO0FBRUE7O0FBR0QsTUFBSSxXQUFXLFVBQVgsQ0FBc0IsQ0FBdEIsRUFBeUIsQ0FBekIsSUFBOEIsV0FBVyxVQUFYLENBQXNCLENBQXRCLEVBQXlCLENBQXpCLENBQTJCLE9BQXpELElBQW9FLFdBQVcsVUFBWCxLQUEwQixVQUFsRyxFQUE4RztBQUM3RyxnQkFBYSxJQUFiO0FBQ0E7O0FBRUQsT0FBSyxJQUFJLENBQVQsRUFBWSxJQUFJLFdBQVcsVUFBWCxDQUFzQixNQUF0QyxFQUE4QyxHQUE5QyxFQUFtRDs7QUFFbEQsT0FBSSxPQUFPLFdBQVcsVUFBWCxDQUFzQixDQUF0QixFQUF5QixDQUFoQyxLQUFzQyxXQUExQyxFQUF1RDtBQUN0RCxlQUFXLFVBQVgsQ0FBc0IsQ0FBdEIsRUFBeUIsQ0FBekIsR0FBNkIsQ0FBN0I7QUFDQTs7QUFFRCxPQUFJLFdBQVcsVUFBWCxDQUFzQixDQUF0QixFQUF5QixDQUF6QixDQUEyQixPQUEvQixFQUF3QztBQUN2QyxpQkFBYSxJQUFiO0FBQ0EsaUJBQWEsV0FBVyxVQUFYLENBQXNCLENBQXRCLEVBQXlCLENBQXpCLENBQTJCLE9BQTNCLEVBQWIsQ0FGdUMsQ0FFVztBQUNsRCxJQUhELE1BS0MsYUFBYSxXQUFXLFVBQVgsQ0FBc0IsQ0FBdEIsRUFBeUIsQ0FBdEM7O0FBRUQsZ0JBQWEsV0FBVyxVQUFYLENBQXNCLENBQXRCLEVBQXlCLENBQXRDOztBQUVBLE9BQUksY0FBYyxXQUFXLE1BQTdCLEVBQXFDO0FBQ3BDLG9CQUFnQixLQUFLLEdBQUwsQ0FBUyxLQUFULENBQWUsSUFBZixFQUFxQixVQUFyQixDQUFoQjtBQUNBLG9CQUFnQixLQUFLLEdBQUwsQ0FBUyxLQUFULENBQWUsSUFBZixFQUFxQixVQUFyQixDQUFoQjtBQUNBOztBQUdELE9BQUksYUFBYSxjQUFjLEdBQS9CLEVBQ0MsY0FBYyxHQUFkLEdBQW9CLFVBQXBCO0FBQ0QsT0FBSSxhQUFhLGNBQWMsR0FBL0IsRUFDQyxjQUFjLEdBQWQsR0FBb0IsVUFBcEI7O0FBRUQsT0FBSSxnQkFBZ0IsY0FBYyxHQUFsQyxFQUNDLGNBQWMsR0FBZCxHQUFvQixhQUFwQjs7QUFFRCxPQUFJLGdCQUFnQixjQUFjLEdBQWxDLEVBQ0MsY0FBYyxHQUFkLEdBQW9CLGFBQXBCOztBQUdELE9BQUksSUFBSSxDQUFSLEVBQVc7QUFDVixRQUFJLFFBQVEsYUFBYSxXQUFXLFVBQVgsQ0FBc0IsSUFBSSxDQUExQixFQUE2QixDQUF0RDtBQUNBLFlBQVEsQ0FBUixLQUFjLFFBQVEsUUFBUSxDQUFDLENBQS9CLEVBRlUsQ0FFeUI7O0FBRW5DLFFBQUksY0FBYyxPQUFkLEdBQXdCLEtBQXhCLElBQWlDLFVBQVUsQ0FBL0MsRUFBa0Q7QUFDakQsbUJBQWMsT0FBZCxHQUF3QixLQUF4QjtBQUNBOztBQUVELFFBQUksV0FBVyxDQUFYLE1BQWtCLElBQWxCLElBQTBCLFdBQVcsVUFBWCxDQUFzQixJQUFJLENBQTFCLEVBQTZCLENBQTdCLENBQStCLENBQS9CLE1BQXNDLElBQXBFLEVBQTBFO0FBQ3pFLFNBQUksUUFBUSxXQUFXLENBQVgsSUFBZ0IsV0FBVyxVQUFYLENBQXNCLElBQUksQ0FBMUIsRUFBNkIsQ0FBN0IsQ0FBK0IsQ0FBL0IsQ0FBNUI7QUFDQSxhQUFRLENBQVIsS0FBYyxRQUFRLFFBQVEsQ0FBQyxDQUEvQixFQUZ5RSxDQUV0Qzs7QUFFbkMsU0FBSSxjQUFjLE9BQWQsR0FBd0IsS0FBeEIsSUFBaUMsVUFBVSxDQUEvQyxFQUFrRDtBQUNqRCxvQkFBYyxPQUFkLEdBQXdCLEtBQXhCO0FBQ0Y7QUFDQztBQUNEOztBQUVEO0FBQ0EsT0FBSSxhQUFhLFlBQWIsSUFBNkIsQ0FBQyxtQkFBbEMsRUFBdUQ7QUFDdEQ7QUFDQSxJQUZELE1BRU8sSUFBSSxDQUFDLG1CQUFMLEVBQTBCO0FBQ2hDLDBCQUFzQixJQUF0Qjs7QUFFQSxRQUFJLElBQUksQ0FBUixFQUFXO0FBQ1YsVUFBSyxDQUFMO0FBQ0E7QUFDQTtBQUNEOztBQUVEO0FBQ0EsT0FBSSxhQUFhLFlBQWIsSUFBNkIsQ0FBQyxrQkFBbEMsRUFBc0Q7QUFDckQseUJBQXFCLElBQXJCO0FBQ0EsSUFGRCxNQUVPLElBQUksYUFBYSxZQUFiLElBQTZCLGtCQUFqQyxFQUFxRDtBQUMzRDtBQUNBOztBQUVELE9BQUksV0FBVyxVQUFYLENBQXNCLENBQXRCLEVBQXlCLEtBQTdCLEVBQ0MsU0FBUyxLQUFULENBQWUsTUFBZixDQUFzQixVQUF0QixJQUFvQyxXQUFXLFVBQVgsQ0FBc0IsQ0FBdEIsRUFBeUIsS0FBN0Q7O0FBR0QsT0FBSSxhQUFhLGNBQWMsV0FBL0IsRUFDQyxjQUFjLFdBQWQsR0FBNEIsVUFBNUI7QUFDRCxPQUFJLGFBQWEsY0FBYyxXQUEvQixFQUNDLGNBQWMsV0FBZCxHQUE0QixVQUE1Qjs7QUFFRCxPQUFJLGVBQWUsSUFBbkIsRUFDQzs7QUFFRCxPQUFJLGdCQUFnQixjQUFjLFdBQWxDLEVBQ0MsY0FBYyxXQUFkLEdBQTRCLGFBQTVCO0FBQ0QsT0FBSSxnQkFBZ0IsY0FBYyxXQUFsQyxFQUNDLGNBQWMsV0FBZCxHQUE0QixhQUE1QjtBQUNEOztBQUVELE9BQUssUUFBTCxDQUFjLGNBQWQsR0FBK0IsV0FBVyxVQUFYLEdBQXdCLGFBQWEsVUFBYixHQUEwQixRQUFqRjtBQUNBOztBQUVEO0FBQ0E7QUFDQSxDQTNIRDs7QUE2SEE7QUFDQSxNQUFNLFNBQU4sQ0FBZ0IsZ0JBQWhCLEdBQW1DLFVBQVUsTUFBVixFQUFrQixNQUFsQixFQUEwQixVQUExQixFQUFzQzs7QUFFeEUsY0FBYSxjQUFjLEtBQTNCO0FBQ0EsS0FBSSxVQUFVLEVBQWQ7O0FBRUEsTUFBSyxJQUFJLElBQUksS0FBSyxvQkFBTCxDQUEwQixNQUExQixHQUFtQyxDQUFoRCxFQUFtRCxLQUFLLENBQXhELEVBQTJELEdBQTNELEVBQWdFO0FBQy9ELE1BQUksYUFBYSxLQUFLLG9CQUFMLENBQTBCLENBQTFCLENBQWpCOztBQUVBLE1BQUksU0FBUyxJQUFiOztBQUVBLFdBQVMsV0FBVyxnQkFBWCxDQUE0QixNQUE1QixFQUFvQyxNQUFwQyxFQUE0QyxVQUE1QyxDQUFUO0FBQ0EsTUFBSSxNQUFKLEVBQ0MsUUFBUSxJQUFSLENBQWEsTUFBYjtBQUNEOztBQUVELEtBQUksZ0JBQWdCLElBQXBCO0FBQ0EsS0FBSSxvQkFBb0IsS0FBeEI7O0FBRUEsTUFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7O0FBRXhDLE1BQUksUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixJQUF0QixLQUErQixNQUEvQixJQUF5QyxRQUFRLENBQVIsRUFBVyxVQUFYLENBQXNCLElBQXRCLEtBQStCLFVBQXhFLElBQXNGLFFBQVEsQ0FBUixFQUFXLFVBQVgsQ0FBc0IsSUFBdEIsS0FBK0IsTUFBckgsSUFBK0gsUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixJQUF0QixLQUErQixVQUFsSyxFQUE4SztBQUM3SyxPQUFJLGFBQWEsd0JBQVksWUFBWixFQUEwQixRQUFRLENBQVIsRUFBVyxTQUFyQyxFQUFnRCxRQUFRLENBQVIsRUFBVyxVQUEzRCxLQUEwRSxDQUEzRjtBQUNBLE9BQUksUUFBUSxDQUFSLEVBQVcsUUFBWCxJQUF1QixhQUFhLENBQXhDLEVBQTJDO0FBQzFDLHdCQUFvQixJQUFwQjtBQUNBO0FBQ0E7QUFDRDtBQUNEOztBQUVELE1BQUssSUFBSSxDQUFULEVBQVksSUFBSSxRQUFRLE1BQXhCLEVBQWdDLEdBQWhDLEVBQXFDOztBQUVwQyxNQUFJLHFCQUFxQixRQUFRLENBQVIsRUFBVyxVQUFYLENBQXNCLElBQXRCLEtBQStCLE1BQXBELElBQThELFFBQVEsQ0FBUixFQUFXLFVBQVgsQ0FBc0IsSUFBdEIsS0FBK0IsVUFBN0YsSUFBMkcsUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixJQUF0QixLQUErQixNQUExSSxJQUFvSixRQUFRLENBQVIsRUFBVyxVQUFYLENBQXNCLElBQXRCLEtBQStCLFVBQXZMLEVBQ0M7O0FBRUQsTUFBSSxDQUFDLGFBQUwsRUFBb0I7QUFDbkIsbUJBQWdCLFFBQVEsQ0FBUixDQUFoQjtBQUNBLEdBRkQsTUFFTyxJQUFJLFFBQVEsQ0FBUixFQUFXLFFBQVgsSUFBdUIsY0FBYyxRQUF6QyxFQUFtRDtBQUN6RCxtQkFBZ0IsUUFBUSxDQUFSLENBQWhCO0FBQ0E7QUFDRDs7QUFFRCxRQUFPLGFBQVA7QUFDQSxDQTFDRDs7QUE0Q0EsTUFBTSxTQUFOLENBQWdCLGFBQWhCLEdBQWdDLFVBQVUsTUFBVixFQUFrQixNQUFsQixFQUEwQixVQUExQixFQUFzQztBQUNyRSxjQUFhLGNBQWMsS0FBM0I7O0FBRUEsS0FBSSxLQUFLLElBQVQ7O0FBRUEsS0FBSSxnQkFBZ0IsS0FBSyxnQkFBTCxDQUFzQixNQUF0QixFQUE4QixNQUE5QixFQUFzQyxVQUF0QyxDQUFwQjs7QUFFQSxLQUFJLGFBQUosRUFBbUI7QUFDbEIsT0FBSyxjQUFjLFVBQWQsQ0FBeUIsWUFBekIsQ0FBc0MsY0FBYyxjQUFwRCxDQUFMO0FBQ0EsRUFGRCxNQUVPLDhCQUF1QjtBQUFDO0FBQzlCLE9BQUssd0JBQVksTUFBWixFQUFvQixNQUFwQixFQUE0QixLQUFLLGFBQUwsQ0FBbUIsUUFBL0MsQ0FBTDtBQUNBLEVBRk0sTUFHRjtBQUNKLE9BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQUwsQ0FBWSxLQUFaLENBQWtCLE1BQXRDLEVBQThDLEdBQTlDLEVBQW1EO0FBQ2xELE9BQUksT0FBTyxLQUFLLE1BQUwsQ0FBWSxLQUFaLENBQWtCLENBQWxCLENBQVg7O0FBRUEsT0FBSSxVQUFVLEtBQUssRUFBZixJQUFxQixVQUFVLEtBQUssRUFBcEMsSUFBMEMsVUFBVSxLQUFLLEVBQXpELElBQStELFVBQVUsS0FBSyxFQUFsRixFQUFzRjtBQUNyRixTQUFLLEtBQUssRUFBVjtBQUNBO0FBQ0Q7QUFDRDs7QUFFRCxRQUFPLEVBQVA7QUFDQSxDQXZCRDs7QUF5QkE7QUFDQTtBQUNBO0FBQ0EsTUFBTSxTQUFOLENBQWdCLGVBQWhCLEdBQWtDLFVBQVUsWUFBVixFQUF3QixLQUF4QixFQUErQixNQUEvQixFQUF1Qzs7QUFFeEUsU0FBUSxTQUFTLEtBQUssS0FBdEI7QUFDQSxVQUFTLFVBQVUsS0FBSyxNQUF4Qjs7QUFFQSxLQUFJLHNCQUFzQixlQUFlLEdBQXpDOztBQUVBLFFBQU8sS0FBSyxLQUFMLENBQVcsS0FBSyxHQUFMLENBQVMsS0FBSyxLQUFkLEVBQXFCLEtBQUssTUFBMUIsSUFBb0MsbUJBQS9DLENBQVA7QUFDQSxDQVJEOztBQVVBOztBQUVBLE1BQU0sU0FBTixDQUFnQixvQkFBaEIsR0FBdUMsWUFBWTtBQUNsRDtBQUNBO0FBQ0E7QUFDQSxNQUFLLGlCQUFMLENBQXVCLFNBQXZCLENBQWlDLENBQWpDLEVBQW9DLENBQXBDLEVBQXVDLEtBQUssS0FBNUMsRUFBbUQsS0FBSyxNQUF4RDtBQUNBLENBTEQ7O0FBT0EsTUFBTSxTQUFOLENBQWdCLFdBQWhCLEdBQThCLFlBQVk7QUFDekMsTUFBSyxHQUFMLENBQVMsU0FBVCxDQUFtQixDQUFuQixFQUFzQixDQUF0QixFQUF5QixLQUFLLEtBQTlCLEVBQXFDLEtBQUssTUFBMUM7O0FBRUEsS0FBSSxLQUFLLGVBQVQsRUFBMEI7QUFDekIsT0FBSyxHQUFMLENBQVMsU0FBVCxHQUFxQixLQUFLLGVBQTFCO0FBQ0EsT0FBSyxHQUFMLENBQVMsUUFBVCxDQUFrQixDQUFsQixFQUFxQixDQUFyQixFQUF3QixLQUFLLEtBQTdCLEVBQW9DLEtBQUssTUFBekM7QUFDQTtBQUNELENBUEQ7O0FBU0EsTUFBTSxTQUFOLENBQWdCLFdBQWhCLEdBQThCLFVBQVUsS0FBVixFQUFpQjtBQUM5QyxNQUFLLE9BQUwsQ0FBYSxJQUFiLENBQWtCLEtBQWxCO0FBQ0EsQ0FGRDs7QUFJQSxNQUFNLFNBQU4sQ0FBZ0Isa0JBQWhCLEdBQXFDLFVBQVUsRUFBVixFQUFjO0FBQ2xELEtBQUksQ0FBQyxHQUFHLGNBQUosSUFBc0IsQ0FBQyxLQUFLLG9CQUFoQyxFQUNDOztBQUVELEtBQUksY0FBYyxFQUFsQjtBQUNBLEtBQUksVUFBVSxHQUFHLGNBQWpCO0FBQ0EsS0FBSSxRQUFRLFVBQVUsUUFBUSxDQUFSLENBQVYsR0FBdUIsRUFBbkM7QUFDQSxLQUFJLDBCQUEwQixJQUE5Qjs7QUFFQTs7QUFFQSxTQUFRLEdBQUcsSUFBWDtBQUNDLE9BQUssWUFBTCxDQUFtQixLQUFLLGVBQUw7QUFDbEIsaUJBQWMsQ0FBQyxXQUFELEVBQWMsV0FBZCxDQUFkO0FBQ0EsUUFBSyxjQUFMLEdBQXNCLGdDQUFvQixLQUFwQixDQUF0QjtBQUNBLFFBQUssY0FBTCxDQUFvQixJQUFwQixHQUEyQixJQUFJLElBQUosRUFBM0I7QUFDQTtBQUNELE9BQUssV0FBTCxDQUFrQixLQUFLLGVBQUw7QUFBc0IsaUJBQWMsQ0FBQyxXQUFELENBQWQsQ0FBNkI7QUFDckUsT0FBSyxVQUFMLENBQWlCLEtBQUssYUFBTDtBQUFvQixpQkFBZSxLQUFLLG1CQUFMLEtBQTZCLFlBQTdCLElBQTZDLEtBQUssbUJBQUwsS0FBNkIsZUFBM0UsR0FBOEYsQ0FBQyxTQUFELEVBQVksT0FBWixDQUE5RixHQUFxSCxDQUFDLFNBQUQsQ0FBbkk7QUFDcEM7QUFDRDtBQUFTO0FBVFY7O0FBWUEsS0FBSSxXQUFXLFFBQVEsTUFBUixHQUFpQixDQUFoQyxFQUFtQzs7QUFHbkMsMkJBQTBCLGdDQUFvQixLQUFwQixDQUExQjtBQUNBLHlCQUF3QixJQUF4QixHQUErQixJQUFJLElBQUosRUFBL0I7QUFDQSxLQUFJO0FBQ0gsTUFBSSxLQUFLLHdCQUF3QixDQUF4QixHQUE0QixLQUFLLGNBQUwsQ0FBb0IsQ0FBekQ7QUFDQSxNQUFJLEtBQUssd0JBQXdCLENBQXhCLEdBQTRCLEtBQUssY0FBTCxDQUFvQixDQUF6RDtBQUNBLE1BQUksS0FBSyx3QkFBd0IsSUFBeEIsR0FBK0IsS0FBSyxjQUFMLENBQW9CLElBQTVEOztBQUVBLE1BQUksS0FBSyxHQUFMLENBQVMsRUFBVCxJQUFlLEVBQWYsS0FBc0IsQ0FBQyxDQUFDLEtBQUssY0FBTCxDQUFvQixNQUF0QixJQUFnQyxLQUFLLEdBQTNELENBQUosRUFBcUU7QUFDcEU7QUFDQSxRQUFLLGNBQUwsQ0FBb0IsTUFBcEIsR0FBNkIsSUFBN0I7O0FBRUEsT0FBSSxNQUFNLE9BQU8sTUFBUCxJQUFpQixNQUEzQjtBQUNBLE9BQUksT0FBTyxJQUFJLFFBQWYsRUFDQyxJQUFJLFFBQUosQ0FBYSxDQUFiLEVBQWdCLENBQUMsRUFBakI7QUFDRDtBQUNELEVBYkQsQ0FhRSxPQUFPLENBQVAsRUFBVSxDQUFHOztBQUVmLE1BQUssbUJBQUwsR0FBMkIsR0FBRyxJQUE5Qjs7QUFFQSxLQUFJLENBQUMsQ0FBQyxLQUFLLGNBQUwsQ0FBb0IsTUFBdEIsSUFBZ0MsS0FBSyxXQUF6QyxFQUFzRDtBQUNyRCxNQUFJLEtBQUssTUFBVCxFQUNDLEtBQUssb0JBQUw7O0FBRUQsT0FBSyxNQUFMLEdBQWMsS0FBZDtBQUNBO0FBQ0E7O0FBRUQsTUFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFlBQVksTUFBaEMsRUFBd0MsR0FBeEMsRUFBNkM7O0FBRTVDLE1BQUksT0FBTyxZQUFZLENBQVosQ0FBWDtBQUNBLE1BQUksaUJBQWlCLFNBQVMsV0FBVCxDQUFxQixZQUFyQixDQUFyQjtBQUNBLGlCQUFlLGNBQWYsQ0FBOEIsSUFBOUIsRUFBb0MsSUFBcEMsRUFBMEMsSUFBMUMsRUFBZ0QsTUFBaEQsRUFBd0QsQ0FBeEQsRUFDUSxNQUFNLE9BRGQsRUFDdUIsTUFBTSxPQUQ3QixFQUVRLE1BQU0sT0FGZCxFQUV1QixNQUFNLE9BRjdCLEVBRXNDLEtBRnRDLEVBR1EsS0FIUixFQUdlLEtBSGYsRUFHc0IsS0FIdEIsRUFHNkIsQ0FIN0IsRUFHZ0MsSUFIaEM7O0FBS0EsUUFBTSxNQUFOLENBQWEsYUFBYixDQUEyQixjQUEzQjs7QUFFQSxNQUFJLEdBQUcsbUJBQVAsRUFBNEI7QUFDM0I7QUFDQSxNQUFHLG1CQUFIO0FBQ0E7O0FBRUQsTUFBSSxHQUFHLGNBQVAsRUFBdUI7QUFDdEI7QUFDQSxNQUFHLGNBQUg7QUFDQTtBQUNEO0FBQ0QsQ0ExRUQ7O0FBNEVBLE1BQU0sU0FBTixDQUFnQixtQkFBaEIsR0FBc0MsVUFBVSxTQUFWLEVBQXFCLGFBQXJCLEVBQW9DO0FBQ3pFLEtBQUksaUJBQWlCLEVBQXJCOztBQUVBLGdCQUFlLEtBQWYsR0FBdUIsS0FBSyxxQkFBNUI7QUFDQSxnQkFBZSxJQUFmLEdBQXNCLFNBQXRCO0FBQ0EsZ0JBQWUsT0FBZixHQUF5QixhQUF6Qjs7QUFFQSxLQUFJLE9BQU8sRUFBWDs7QUFFQSxLQUFJLEtBQUssS0FBVCxFQUNDLEtBQUssSUFBTCxDQUFVLE9BQVY7QUFDRCxLQUFJLEtBQUssS0FBVCxFQUNDLEtBQUssSUFBTCxDQUFVLE9BQVY7QUFDRCxLQUFJLEtBQUssTUFBVCxFQUNDLEtBQUssSUFBTCxDQUFVLFFBQVY7O0FBRUQsTUFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDckMsaUJBQWUsS0FBSyxDQUFMLENBQWYsSUFBMEI7QUFDekIsb0JBQWlCLEtBQUssS0FBSyxDQUFMLENBQUwsRUFBYyxnQkFBZCxDQUErQixrQkFEdkI7QUFFekIsb0JBQWlCLEtBQUssS0FBSyxDQUFMLENBQUwsRUFBYyxnQkFBZCxDQUErQjtBQUZ2QixHQUExQjtBQUlBOztBQUVELE1BQUssYUFBTCxDQUFtQixTQUFuQixFQUE4QixjQUE5QixFQUE4QyxLQUFLLHFCQUFuRDtBQUNBLENBeEJEOztBQTBCQSxNQUFNLFNBQU4sQ0FBZ0Isa0JBQWhCLEdBQXFDLFVBQVUsRUFBVixFQUFjOztBQUVsRCxLQUFJLENBQUMsS0FBSyxvQkFBVixFQUNDOztBQUVELEtBQUksS0FBSyxnQkFBVCxFQUEyQjtBQUMxQixPQUFLLGdCQUFMLEdBQXdCLEtBQXhCO0FBQ0E7QUFDQTs7QUFFRDtBQUNBLEtBQUksR0FBRyxtQkFBUCxFQUE0QjtBQUMzQjtBQUNBLEtBQUcsbUJBQUg7QUFDQTs7QUFFRDtBQUNBLEtBQUksR0FBRyxjQUFQLEVBQXVCO0FBQ3RCO0FBQ0EsS0FBRyxjQUFIO0FBQ0E7O0FBRUQ7QUFDQSxLQUFJLE9BQVEsR0FBRyxNQUFYLEtBQXVCLFdBQXZCLElBQXNDLEdBQUcsVUFBN0MsRUFDQyxHQUFHLE1BQUgsR0FBWSxHQUFHLFVBQWY7O0FBRUQ7O0FBRUEsS0FBSSxLQUFLLGdDQUFvQixFQUFwQixDQUFUO0FBQ0EsS0FBSSxPQUFPLEdBQUcsSUFBZDtBQUNBLEtBQUksVUFBSjtBQUNBLEtBQUksVUFBSjs7QUFFQSxLQUFJLENBQUMsRUFBTCxFQUFTLElBQUksSUFBSSxPQUFPLEtBQWY7QUFDVCxLQUFJLEdBQUcsS0FBUCxFQUFjLGFBQWMsR0FBRyxLQUFILElBQVksQ0FBMUIsQ0FBZCxLQUNLLElBQUksR0FBRyxNQUFQLEVBQWUsYUFBYyxHQUFHLE1BQUgsSUFBYSxDQUEzQjs7QUFFcEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEtBQUksd0JBQWUsT0FBTyxPQUExQixFQUFtQztBQUNsQyxTQUFPLE9BQVAsQ0FBZSxHQUFmLENBQW1CLE9BQU8sVUFBUCxHQUFvQixHQUFHLENBQXZCLEdBQTJCLE1BQTNCLEdBQW9DLEdBQUcsQ0FBMUQ7QUFDQSxNQUFJLFVBQUosRUFDQyxPQUFPLE9BQVAsQ0FBZSxHQUFmLENBQW1CLEdBQUcsS0FBdEI7O0FBRUQsTUFBSSxTQUFTLFNBQWIsRUFDQyxPQUFPLE9BQVAsQ0FBZSxHQUFmLENBQW1CLFNBQW5CO0FBQ0Q7O0FBRUQsS0FBSSxVQUFKLEVBQ0M7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUksTUFBTSxrQkFBVixFQUE4QjtBQUM3QixlQUFhLE1BQU0sa0JBQW5COztBQUVBLE1BQUksU0FBUyxTQUFiLEVBQXdCO0FBQ3ZCLFNBQU0sa0JBQU4sR0FBMkIsSUFBM0I7O0FBRUEsT0FBSSxXQUFXLEtBQVgsQ0FBaUIsY0FBakIsQ0FBZ0MsY0FBcEMsRUFDQyxXQUFXLEtBQVgsQ0FBaUIsY0FBakIsQ0FBZ0MsY0FBaEMsR0FERCxLQUdDLFNBQVMsSUFBVCxDQUFjLG1CQUFkLENBQWtDLFNBQWxDLEVBQTZDLFdBQVcsS0FBWCxDQUFpQixrQkFBOUQsRUFBa0YsS0FBbEY7QUFFRDs7QUFFRCxNQUFJLFdBQVcsY0FBWCxDQUEwQixJQUExQixDQUFKLEVBQ0MsV0FBVyxJQUFYLEVBQWlCLElBQWpCLENBQXNCLFdBQVcsT0FBakMsRUFBMEMsR0FBRyxDQUE3QyxFQUFnRCxHQUFHLENBQW5EO0FBSUQsRUFsQkQsTUFtQkssSUFBSSxLQUFLLE9BQVQsRUFBa0I7O0FBRXRCLE9BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE9BQUwsQ0FBYSxNQUFqQyxFQUF5QyxHQUF6QyxFQUE4QztBQUM3QyxPQUFJLENBQUMsS0FBSyxPQUFMLENBQWEsQ0FBYixFQUFnQixjQUFoQixDQUErQixJQUEvQixDQUFMLEVBQ0M7O0FBRUQsZ0JBQWEsS0FBSyxPQUFMLENBQWEsQ0FBYixDQUFiO0FBQ0EsT0FBSSxTQUFTLFdBQVcsTUFBeEI7O0FBRUEsT0FBSSxHQUFHLENBQUgsSUFBUSxPQUFPLEVBQWYsSUFBcUIsR0FBRyxDQUFILElBQVEsT0FBTyxFQUFwQyxJQUEwQyxHQUFHLENBQUgsSUFBUSxPQUFPLEVBQXpELElBQStELEdBQUcsQ0FBSCxJQUFRLE9BQU8sRUFBbEYsRUFBc0Y7QUFDckYsZUFBVyxJQUFYLEVBQWlCLElBQWpCLENBQXNCLFdBQVcsT0FBakMsRUFBMEMsR0FBRyxDQUE3QyxFQUFnRCxHQUFHLENBQW5EOztBQUVBLFFBQUksU0FBUyxXQUFULElBQXdCLFdBQVcsT0FBWCxLQUF1QixJQUFuRCxFQUF5RDtBQUN4RCxXQUFNLGtCQUFOLEdBQTJCLFVBQTNCOztBQUVBLFNBQUksS0FBSyxjQUFMLENBQW9CLFVBQXhCLEVBQ0MsS0FBSyxjQUFMLENBQW9CLFVBQXBCLEdBREQsS0FFSztBQUNKLGVBQVMsSUFBVCxDQUFjLGdCQUFkLENBQStCLFNBQS9CLEVBQTBDLEtBQUssa0JBQS9DLEVBQW1FLEtBQW5FO0FBQ0E7QUFDQTtBQUNELEtBVEQsTUFTTyxJQUFJLFNBQVMsU0FBYixFQUF3QjtBQUM5QixTQUFJLFdBQVcsS0FBWCxDQUFpQixjQUFqQixDQUFnQyxjQUFwQyxFQUNDLFdBQVcsS0FBWCxDQUFpQixjQUFqQixDQUFnQyxjQUFoQyxHQURELEtBR0MsU0FBUyxJQUFULENBQWMsbUJBQWQsQ0FBa0MsU0FBbEMsRUFBNkMsS0FBSyxrQkFBbEQsRUFBc0UsS0FBdEU7QUFDRDs7QUFFRDtBQUNBLElBcEJELE1Bc0JDLGFBQWEsSUFBYjtBQUNEOztBQUVELE1BQUksY0FBYyxXQUFXLE1BQTdCLEVBQXFDO0FBQ3BDLE1BQUcsTUFBSCxDQUFVLEtBQVYsQ0FBZ0IsTUFBaEIsR0FBeUIsV0FBVyxNQUFwQztBQUNBLEdBRkQsTUFJQyxHQUFHLE1BQUgsQ0FBVSxLQUFWLENBQWdCLE1BQWhCLEdBQXlCLEtBQUssY0FBOUI7O0FBRUQ7QUFDQTs7QUFFRCxLQUFJLEtBQUssUUFBTCxJQUFpQixLQUFLLFFBQUwsQ0FBYyxPQUFuQyxFQUE0Qzs7QUFFM0MsTUFBSSxXQUFXLEtBQUssUUFBcEI7O0FBRUEsTUFBSSxHQUFHLENBQUgsR0FBTyxTQUFTLEVBQWhCLElBQXNCLEdBQUcsQ0FBSCxHQUFPLFNBQVMsRUFBdEMsSUFBNEMsR0FBRyxDQUFILEdBQU8sU0FBUyxFQUE1RCxJQUFrRSxHQUFHLENBQUgsR0FBTyxTQUFTLEVBQXRGLEVBQ0MsS0FBSyxRQUFMLENBQWMsSUFBZDtBQUNEOztBQUdELEtBQUksQ0FBQyxDQUFDLEtBQUssTUFBTixJQUFnQixDQUFDLEtBQUssV0FBdkIsS0FBdUMsS0FBSyxhQUFoRCxFQUErRDs7QUFFOUQsT0FBSyxhQUFMLENBQW1CLGlCQUFuQixDQUFxQyxFQUFyQztBQUNBO0FBQ0E7O0FBRUQ7QUFDQTtBQUNBLENBN0lEOztBQStJQSxNQUFNLFNBQU4sQ0FBZ0Isa0JBQWhCLEdBQXFDLFVBQVUsQ0FBVixFQUFhLENBQWIsRUFBZ0I7QUFDcEQsTUFBSyxNQUFMLEdBQWMsSUFBZDs7QUFFQSxLQUFJLEtBQUssUUFBTCxDQUFjLGFBQWQsS0FBZ0MsTUFBcEMsRUFBNEM7QUFDM0MsT0FBSyxjQUFMLEdBQXNCLEVBQUUsR0FBRyxDQUFMLEVBQVEsR0FBRyxDQUFYLEVBQXRCO0FBQ0EsRUFGRCxNQUVPO0FBQ04sT0FBSyxjQUFMLEdBQXNCLEVBQUUsR0FBRyxDQUFMLEVBQVEsR0FBRyxDQUFYLEVBQXRCO0FBQ0E7QUFDRCxDQVJEOztBQVVBLE1BQU0sU0FBTixDQUFnQixnQkFBaEIsR0FBbUMsVUFBVSxDQUFWLEVBQWEsQ0FBYixFQUFnQjs7QUFFbEQsS0FBSSxLQUFLLFFBQUwsQ0FBYyxhQUFkLEtBQWdDLFFBQWhDLElBQTRDLEtBQUssUUFBTCxDQUFjLGFBQWQsS0FBZ0MsV0FBaEYsRUFBNkY7QUFDNUYsTUFBSSxLQUFLLE1BQVQsRUFBaUI7QUFDaEIsT0FBSSxZQUFZLENBQWhCO0FBQUEsT0FDQyxjQUFjLElBQUksS0FBSyxjQUFMLENBQW9CLENBRHZDO0FBQUEsT0FFQyxjQUFjLElBQUksS0FBSyxjQUFMLENBQW9CLENBRnZDO0FBQUEsT0FHQyxTQUFTLEtBQUssUUFBTCxDQUFjLE9BQWQsQ0FBc0IsR0FBdEIsS0FBOEIsQ0FIeEM7QUFBQSxPQUcyQztBQUMxQyxZQUFTLEtBQUssUUFBTCxDQUFjLE9BQWQsQ0FBc0IsR0FBdEIsS0FBOEIsQ0FKeEM7QUFBQSxPQUkyQztBQUMxQyxjQUFXLEtBTFo7O0FBT0EsUUFBSyxvQkFBTDs7QUFFQSxPQUFJLEtBQUssUUFBTCxDQUFjLGFBQWQsS0FBZ0MsV0FBcEMsRUFBaUQ7QUFDaEQsUUFBSSxPQUFPLE1BQVg7QUFDQSxhQUFTLE1BQVQ7QUFDQSxhQUFTLElBQVQ7QUFDQTs7QUFFRCxPQUFJLEtBQUssVUFBTCxJQUFtQixLQUFLLFdBQTVCLEVBQXlDO0FBQ3hDLFFBQUksS0FBSyxVQUFULEVBQXFCOztBQUVwQixTQUFJLFdBQVcsQ0FBZjs7QUFFQSxVQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksS0FBSyxLQUFMLENBQVcsTUFBL0IsRUFBdUMsR0FBdkMsRUFBNEM7QUFDM0MsVUFBSSxPQUFPLEtBQUssS0FBTCxDQUFXLENBQVgsQ0FBWDs7QUFFQSxVQUFJLEtBQUssZUFBTCxHQUF1QixLQUFLLE9BQWhDLEVBQXlDOztBQUV4QyxrQkFBVyxLQUFLLE9BQUwsR0FBZSxLQUFLLGVBQS9COztBQUVBLFlBQUssZ0JBQUwsQ0FBc0Isa0JBQXRCLEdBQTJDLEtBQUssZUFBTCxHQUF1QixRQUFsRTtBQUNBLFlBQUssZ0JBQUwsQ0FBc0Isa0JBQXRCLEdBQTJDLEtBQUssZUFBTCxHQUF1QixRQUFsRTs7QUFFRCxrQkFBVyxJQUFYO0FBQ0MsT0FSRCxNQVFPLElBQUksS0FBSyxlQUFMLEdBQXVCLEtBQUssT0FBaEMsRUFBeUM7O0FBRS9DLGtCQUFXLEtBQUssZUFBTCxHQUF1QixLQUFLLE9BQXZDO0FBQ0EsWUFBSyxnQkFBTCxDQUFzQixrQkFBdEIsR0FBMkMsS0FBSyxlQUFMLEdBQXVCLFFBQWxFO0FBQ0EsWUFBSyxnQkFBTCxDQUFzQixrQkFBdEIsR0FBMkMsS0FBSyxlQUFMLEdBQXVCLFFBQWxFOztBQUVELGtCQUFXLElBQVg7QUFDQTtBQUNBO0FBRUQsS0F6QkQsTUEwQkssSUFBSyxDQUFDLENBQUMsTUFBRCxJQUFXLEtBQUssR0FBTCxDQUFTLFdBQVQsSUFBd0IsQ0FBcEMsTUFBMkMsQ0FBQyxNQUFELElBQVcsS0FBSyxHQUFMLENBQVMsV0FBVCxJQUF3QixDQUE5RSxDQUFELElBQXNGLEtBQUssV0FBL0YsRUFBNEc7O0FBRWhILFNBQUksQ0FBQyxLQUFLLGNBQVYsRUFDQzs7QUFFRCxTQUFJLGlCQUFpQjtBQUNwQixVQUFJLFNBQVMsS0FBSyxjQUFMLENBQW9CLENBQTdCLEdBQWlDLEtBQUssUUFBTCxDQUFjLEVBRC9CO0FBRXBCLFVBQUksU0FBUyxLQUFLLGNBQUwsQ0FBb0IsQ0FBN0IsR0FBaUMsS0FBSyxRQUFMLENBQWMsRUFGL0I7QUFHcEIsVUFBSSxTQUFTLENBQVQsR0FBYSxLQUFLLFFBQUwsQ0FBYyxFQUhYO0FBSXBCLFVBQUksU0FBUyxDQUFULEdBQWEsS0FBSyxRQUFMLENBQWM7QUFKWCxNQUFyQjs7QUFPQSxTQUFJLEtBQUssR0FBTCxDQUFTLGVBQWUsRUFBZixHQUFvQixlQUFlLEVBQTVDLElBQWtELENBQWxELElBQXVELEtBQUssR0FBTCxDQUFTLGVBQWUsRUFBZixHQUFvQixlQUFlLEVBQTVDLElBQWtELENBQTdHLEVBQWdIOztBQUUvRyxVQUFJLEtBQUssd0JBQUwsQ0FBOEIsZUFBZSxFQUE3QyxFQUFpRCxlQUFlLEVBQWhFLEVBQW9FLGVBQWUsRUFBbkYsRUFBdUYsZUFBZSxFQUF0RyxDQUFKLEVBQStHOztBQUU5RyxrQkFBVyxJQUFYO0FBRUU7QUFDRDtBQUNEOztBQUVILFFBQUksUUFBSixFQUFjO0FBQ2IsVUFBSyxnQkFBTCxHQUF3QixJQUF4QixDQURhLENBQ2dCOztBQUU3QixVQUFLLG1CQUFMLENBQXlCLGVBQXpCLEVBQTBDLE1BQTFDO0FBQ0csVUFBSyxNQUFMO0FBQ0gsVUFBSyxtQkFBTCxDQUF5QixjQUF6QixFQUF5QyxNQUF6Qzs7QUFFQSxTQUFJLFlBQVksS0FBSyxXQUFqQixJQUFnQyxLQUFLLFdBQUwsQ0FBaUIsS0FBakIsQ0FBdUIsT0FBdkIsS0FBbUMsTUFBdkUsRUFBK0U7QUFDL0UsdUJBQUssS0FBSyxXQUFWLEVBQXVCLEtBQUssWUFBNUI7QUFDQSxxQkFBZSxJQUFmLEVBQXFCLEtBQUssV0FBMUIsRUFBdUMsS0FBdkM7QUFDQSxxQkFBZSxJQUFmLEVBQXFCLEtBQUssWUFBMUIsRUFBd0MsT0FBeEM7QUFDQTtBQUNEO0FBQ0Q7QUFDQTtBQUVEOztBQUVELE1BQUssTUFBTCxHQUFjLEtBQWQ7QUFDQSxDQXZGRDs7QUF5RkEsTUFBTSxTQUFOLENBQWdCLGtCQUFoQixHQUFxQyxVQUFVLENBQVYsRUFBYSxDQUFiLEVBQWdCO0FBQ3BELEtBQUksS0FBSyxNQUFMLElBQWUsS0FBSyxRQUFMLENBQWMsYUFBZCxLQUFnQyxNQUFuRCxFQUEyRDs7QUFFMUQsTUFBSSxjQUFjLENBQWxCO0FBQUEsTUFDQyxjQUFjLENBRGY7QUFBQSxNQUVDLFFBQVEsSUFGVDtBQUFBLE1BR0MsaUJBQWlCLElBSGxCO0FBQUEsTUFJQyxTQUFTLEtBQUssUUFBTCxDQUFjLE9BQWQsQ0FBc0IsR0FBdEIsS0FBOEIsQ0FKeEM7QUFBQSxNQUkyQztBQUMxQyxXQUFTLEtBQUssUUFBTCxDQUFjLE9BQWQsQ0FBc0IsR0FBdEIsS0FBOEIsQ0FMeEM7QUFBQSxNQUsyQztBQUMxQyxVQUFRLElBTlQ7O0FBUUEsTUFBSSxLQUFLLFFBQUwsQ0FBYyxhQUFkLEtBQWdDLFdBQXBDLEVBQWlEO0FBQ2hELE9BQUksT0FBTyxNQUFYO0FBQ0EsWUFBUyxNQUFUO0FBQ0EsWUFBUyxJQUFUO0FBQ0E7O0FBRUQsZ0JBQWMsS0FBSyxjQUFMLENBQW9CLENBQXBCLEdBQXdCLENBQXRDO0FBQ0EsZ0JBQWMsS0FBSyxjQUFMLENBQW9CLENBQXBCLEdBQXdCLENBQXRDOztBQUVBLE1BQUksS0FBSyxHQUFMLENBQVMsV0FBVCxJQUF3QixDQUF4QixJQUE2QixLQUFLLEdBQUwsQ0FBUyxXQUFULElBQXdCLENBQXJELEtBQTJELEtBQUssVUFBTCxJQUFtQixLQUFLLFdBQW5GLENBQUosRUFBcUc7QUFDcEcsUUFBSyxRQUFMLENBQWMsSUFBZDtBQUNBLEdBRkQsTUFFTyxJQUFJLENBQUMsS0FBSyxVQUFOLElBQW9CLENBQUMsS0FBSyxXQUE5QixFQUEyQztBQUNqRCxRQUFLLFFBQUwsQ0FBYyxnQkFBZCxDQUErQixDQUEvQixFQUFrQyxDQUFsQztBQUNBOztBQUVELE1BQUksQ0FBRSxDQUFDLE1BQUQsSUFBVyxLQUFLLEdBQUwsQ0FBUyxXQUFULElBQXdCLENBQXBDLElBQTJDLENBQUMsTUFBRCxJQUFXLEtBQUssR0FBTCxDQUFTLFdBQVQsSUFBd0IsQ0FBL0UsTUFBdUYsS0FBSyxVQUFMLElBQW1CLEtBQUssV0FBL0csQ0FBSixFQUFpSTtBQUNoSSxPQUFJLEtBQUssVUFBVCxFQUFxQjs7QUFFcEIscUJBQ0M7QUFDQyxTQUFJLFNBQVMsS0FBSyxRQUFMLENBQWMsRUFBZCxHQUFtQixXQUE1QixHQUEwQyxLQUFLLFFBQUwsQ0FBYyxFQUQ3RDtBQUVDLFNBQUksU0FBUyxLQUFLLFFBQUwsQ0FBYyxFQUFkLEdBQW1CLFdBQTVCLEdBQTBDLEtBQUssUUFBTCxDQUFjLEVBRjdEO0FBR0MsU0FBSSxTQUFTLEtBQUssUUFBTCxDQUFjLEVBQWQsR0FBbUIsV0FBNUIsR0FBMEMsS0FBSyxRQUFMLENBQWMsRUFIN0Q7QUFJQyxTQUFJLFNBQVMsS0FBSyxRQUFMLENBQWMsRUFBZCxHQUFtQixXQUE1QixHQUEwQyxLQUFLLFFBQUwsQ0FBYztBQUo3RCxLQUREOztBQVFBLFFBQUksS0FBSyx3QkFBTCxDQUE4QixlQUFlLEVBQTdDLEVBQWlELGVBQWUsRUFBaEUsRUFBb0UsZUFBZSxFQUFuRixFQUF1RixlQUFlLEVBQXRHLEVBQTBHLElBQTFHLENBQUosRUFBcUg7QUFDcEgsVUFBSyxtQkFBTCxDQUF5QixlQUF6QixFQUEwQyxLQUExQztBQUNBLFVBQUssTUFBTDtBQUNBLFVBQUssbUJBQUwsQ0FBeUIsY0FBekIsRUFBeUMsS0FBekM7O0FBRUEsVUFBSyxjQUFMLENBQW9CLENBQXBCLEdBQXdCLENBQXhCO0FBQ0EsVUFBSyxjQUFMLENBQW9CLENBQXBCLEdBQXdCLENBQXhCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUQsSUExQkQsTUEwQk8sSUFBSSxLQUFLLFdBQVQsRUFBc0I7O0FBRTVCLFNBQUssb0JBQUw7O0FBRUEsWUFBUSxLQUFLLGlCQUFMLENBQXVCLFdBQS9COztBQUVBLFNBQUssaUJBQUwsQ0FBdUIsV0FBdkIsR0FBcUMsRUFBckM7QUFDQSxTQUFLLGlCQUFMLENBQXVCLFNBQXZCLEdBQW1DLFNBQW5DOztBQUVBLFFBQUksT0FBTztBQUNWLFNBQUksU0FBUyxLQUFLLGNBQUwsQ0FBb0IsQ0FBN0IsR0FBaUMsS0FBSyxRQUFMLENBQWMsRUFEekM7QUFFVixTQUFJLFNBQVMsS0FBSyxjQUFMLENBQW9CLENBQTdCLEdBQWlDLEtBQUssUUFBTCxDQUFjLEVBRnpDO0FBR1YsU0FBSSxTQUFTLElBQUksS0FBSyxjQUFMLENBQW9CLENBQWpDLEdBQXFDLEtBQUssUUFBTCxDQUFjLEVBQWQsR0FBbUIsS0FBSyxRQUFMLENBQWMsRUFIaEU7QUFJVixTQUFJLFNBQVMsSUFBSSxLQUFLLGNBQUwsQ0FBb0IsQ0FBakMsR0FBcUMsS0FBSyxRQUFMLENBQWMsRUFBZCxHQUFtQixLQUFLLFFBQUwsQ0FBYztBQUpoRSxLQUFYOztBQU9BLFNBQUssaUJBQUwsQ0FBdUIsUUFBdkIsQ0FBZ0MsS0FBSyxFQUFyQyxFQUF5QyxLQUFLLEVBQTlDLEVBQWtELEtBQUssRUFBdkQsRUFBMkQsS0FBSyxFQUFoRTs7QUFFQSxTQUFLLGlCQUFMLENBQXVCLFdBQXZCLEdBQXFDLEtBQXJDO0FBQ0E7QUFDRDtBQUVELEVBMUVELE1BMkVDLEtBQUssUUFBTCxDQUFjLGdCQUFkLENBQStCLENBQS9CLEVBQWtDLENBQWxDO0FBQ0QsQ0E3RUQ7O0FBK0VBOztBQUVBO0FBQ0EsTUFBTSxTQUFOLENBQWdCLHdCQUFoQixHQUEyQyxVQUFVLEdBQVYsRUFBZSxHQUFmLEVBQW9CLEdBQXBCLEVBQXlCLEdBQXpCLEVBQThCLG1CQUE5QixFQUFtRDs7QUFFN0YsdUJBQXNCLHVCQUF1QixLQUE3Qzs7QUFFQSxLQUFJLFNBQVMsS0FBSyxRQUFMLENBQWMsT0FBZCxDQUFzQixHQUF0QixLQUE4QixDQUEzQztBQUFBLEtBQThDO0FBQzdDLFVBQVMsS0FBSyxRQUFMLENBQWMsT0FBZCxDQUFzQixHQUF0QixLQUE4QixDQUR4QztBQUFBLEtBQzJDO0FBQzFDLGVBQWMsS0FGZjs7QUFJQSxLQUFJLE9BQU8sRUFBWDtBQUFBLEtBQWUscUJBQXFCLEVBQXBDO0FBQ0EsS0FBSSxLQUFLLEtBQUwsSUFBYyxNQUFsQixFQUNDLEtBQUssSUFBTCxDQUFVLEtBQUssS0FBZjtBQUNELEtBQUksS0FBSyxLQUFMLElBQWMsTUFBbEIsRUFDQyxLQUFLLElBQUwsQ0FBVSxLQUFLLEtBQWY7QUFDRCxLQUFJLEtBQUssTUFBTCxJQUFlLE1BQW5CLEVBQ0MsS0FBSyxJQUFMLENBQVUsS0FBSyxNQUFmOztBQUVELEtBQUksU0FBUyxFQUFiOztBQUVBLE1BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQ3JDLE1BQUksT0FBTyxLQUFLLENBQUwsQ0FBWDtBQUNBOztBQUVBLE1BQUksT0FBTyxLQUFLLG1CQUFMLENBQXlCLEVBQUUsR0FBRyxHQUFMLEVBQVUsR0FBRyxHQUFiLEVBQXpCLENBQVg7QUFDQSxNQUFJLE9BQU8sS0FBSyxtQkFBTCxDQUF5QixFQUFFLEdBQUcsR0FBTCxFQUFVLEdBQUcsR0FBYixFQUF6QixDQUFYOztBQUVBLE1BQUksT0FBTyxJQUFYLEVBQWlCO0FBQ2hCLE9BQUksT0FBTyxJQUFYO0FBQ0EsVUFBTyxJQUFQO0FBQ0EsVUFBTyxJQUFQO0FBQ0E7O0FBRUQsTUFBSSxTQUFTLEtBQUssUUFBTCxDQUFjLE9BQXZCLENBQUosRUFBcUM7QUFDcEMsT0FBSSxFQUFFLEtBQUssR0FBTCxDQUFTLE9BQU8sSUFBaEIsSUFBd0IsSUFBSSxLQUFLLEdBQUwsQ0FBUyxLQUFLLFFBQUwsQ0FBYyxPQUF2QixDQUE1QixJQUNGLE9BQU8sS0FBSyxPQURWLElBQ3VCLE9BQU8sS0FBSyxPQURyQyxDQUFKLEVBQ29EO0FBQ25ELHVCQUFtQixJQUFuQixDQUF3QixJQUF4QjtBQUNBLFdBQU8sSUFBUCxDQUFZLEVBQUUsTUFBTSxJQUFSLEVBQWMsTUFBTSxJQUFwQixFQUFaOztBQUVBLGtCQUFjLElBQWQ7QUFDQSxJQU5ELE1BTU8sSUFBSSxDQUFDLG1CQUFMLEVBQTBCO0FBQ2hDLGtCQUFjLEtBQWQ7QUFDQTtBQUNBO0FBQ0Q7QUFDRDs7QUFFRCxLQUFJLFdBQUosRUFBaUI7QUFDaEIsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLG1CQUFtQixNQUF2QyxFQUErQyxHQUEvQyxFQUFvRDtBQUNuRCxPQUFJLE9BQU8sbUJBQW1CLENBQW5CLENBQVg7QUFDQSxPQUFJLFFBQVEsT0FBTyxDQUFQLENBQVo7O0FBRUEsUUFBSyxnQkFBTCxDQUFzQixNQUFNLElBQTVCLEVBQWtDLE1BQU0sSUFBeEM7QUFDQTtBQUNEOztBQUVELFFBQU8sV0FBUDtBQUNBLENBdkREOztBQXlEQSxNQUFNLFNBQU4sQ0FBZ0IsZUFBaEIsR0FBa0MsWUFBWTs7QUFFN0MsS0FBSSxXQUFXLEtBQUssUUFBcEI7O0FBRUEsS0FBSSxRQUFRLEtBQUssS0FBTCxHQUFhLEtBQUssS0FBbEIsR0FBMEIsS0FBSyxNQUEzQzs7QUFFQSxLQUFJLDhCQUF1QixTQUFTLEVBQVQsR0FBYyxDQUFkLElBQW1CLFNBQVMsRUFBVCxHQUFjLENBQXhELENBQUosRUFBZ0U7QUFDL0QsV0FBUyxHQUFULENBQWEsU0FBYixDQUF1QixTQUFTLEVBQWhDLEVBQW9DLFNBQVMsRUFBN0M7QUFDQTs7QUFFRCxLQUFJLEtBQUssS0FBTCxJQUFjLEtBQWxCLEVBQXlCO0FBQ3hCLFdBQVMsRUFBVCxHQUFjLEtBQUssS0FBTCxDQUFXLGVBQVgsQ0FBMkIsRUFBM0IsR0FBZ0MsS0FBSyxLQUFMLENBQVcsZUFBWCxDQUEyQixFQUEzRCxHQUFnRSxLQUFLLEtBQUwsQ0FBVyxlQUFYLENBQTJCLEVBQTNGLEdBQWdHLE1BQU0sZUFBTixDQUFzQixFQUFwSTtBQUNBLFdBQVMsRUFBVCxHQUFlLEtBQUssS0FBTCxDQUFXLGVBQVgsQ0FBMkIsRUFBM0IsR0FBZ0MsTUFBTSxlQUFOLENBQXNCLEVBQXRELEdBQTJELEtBQUssS0FBTCxDQUFXLGVBQVgsQ0FBMkIsRUFBdEYsR0FBMkYsTUFBTSxlQUFOLENBQXNCLEVBQWhJOztBQUVBLFdBQVMsRUFBVCxHQUFlLEtBQUssS0FBTCxDQUFXLGVBQVgsQ0FBMkIsRUFBM0IsR0FBZ0MsTUFBTSxlQUFOLENBQXNCLEVBQXRELEdBQTJELEtBQUssS0FBTCxDQUFXLGVBQVgsQ0FBMkIsRUFBdEYsR0FBMkYsTUFBTSxlQUFOLENBQXNCLEVBQWhJO0FBQ0EsV0FBUyxFQUFULEdBQWMsS0FBSyxLQUFMLENBQVcsZUFBWCxDQUEyQixFQUEzQixHQUFnQyxLQUFLLEtBQUwsQ0FBVyxlQUFYLENBQTJCLEVBQTNELEdBQWdFLEtBQUssS0FBTCxDQUFXLGVBQVgsQ0FBMkIsRUFBM0YsR0FBZ0csTUFBTSxlQUFOLENBQXNCLEVBQXBJOztBQUVBLFdBQVMsS0FBVCxHQUFpQixTQUFTLEVBQVQsR0FBYyxTQUFTLEVBQXhDO0FBQ0EsV0FBUyxNQUFULEdBQWtCLFNBQVMsRUFBVCxHQUFjLFNBQVMsRUFBekM7QUFDQTtBQUNBLEVBVkQsTUFVTztBQUNOO0FBQ0EsTUFBSSxZQUFZLEtBQUssYUFBTCxDQUFtQixZQUFuQixFQUFoQjtBQUNBLFdBQVMsRUFBVCxHQUFjLFVBQVUsRUFBeEI7QUFDQSxXQUFTLEVBQVQsR0FBYyxVQUFVLEVBQXhCO0FBQ0EsV0FBUyxFQUFULEdBQWMsVUFBVSxFQUF4QjtBQUNBLFdBQVMsRUFBVCxHQUFjLFVBQVUsRUFBeEI7O0FBRUEsV0FBUyxLQUFULEdBQWlCLFVBQVUsS0FBM0I7QUFDQSxXQUFTLE1BQVQsR0FBa0IsVUFBVSxNQUE1QjtBQUNBOztBQUVELEtBQUkseUJBQUosRUFBd0I7O0FBRXZCLFdBQVMsTUFBVCxDQUFnQixLQUFoQixHQUF3QixTQUFTLEtBQWpDO0FBQ0EsV0FBUyxNQUFULENBQWdCLE1BQWhCLEdBQXlCLFNBQVMsTUFBbEM7O0FBRUEsV0FBUyxNQUFULENBQWdCLEtBQWhCLENBQXNCLElBQXRCLEdBQTZCLFNBQVMsRUFBVCxHQUFjLElBQTNDO0FBQ0EsV0FBUyxNQUFULENBQWdCLEtBQWhCLENBQXNCLEdBQXRCLEdBQTRCLFNBQVMsRUFBVCxHQUFjLElBQTFDOztBQUVBLE1BQUksU0FBUyxFQUFULEdBQWMsQ0FBZCxJQUFtQixTQUFTLEVBQVQsR0FBYyxDQUFyQyxFQUF3QztBQUN2QyxZQUFTLEdBQVQsQ0FBYSxTQUFiLENBQXVCLENBQUMsU0FBUyxFQUFqQyxFQUFxQyxDQUFDLFNBQVMsRUFBL0M7QUFDQTtBQUNEOztBQUVELFVBQVMsYUFBVCxHQUF5Qiw2QkFBa0IsU0FBUyxFQUEzQixFQUErQixTQUFTLEVBQXhDLEVBQTRDLFNBQVMsRUFBckQsRUFBeUQsU0FBUyxFQUFsRSxFQUFzRSxDQUF0RSxDQUF6QjtBQUNBLENBOUNEOztBQWdEQSxNQUFNLFNBQU4sQ0FBZ0IsNkJBQWhCLEdBQWdELFVBQVUsQ0FBVixFQUFhLENBQWIsRUFBZ0I7QUFDL0QsUUFBTztBQUNOLEtBQUcsS0FBSyxLQUFMLENBQVcseUJBQVgsQ0FBcUMsQ0FBckMsRUFBd0MsQ0FEckMsRUFDd0MsR0FBRyxLQUFLLEtBQUwsQ0FBVyx5QkFBWCxDQUFxQyxDQUFyQyxFQUF3QztBQURuRixFQUFQO0FBR0E7QUFDQSxDQUxEOztBQU9BOztBQUVBLE1BQU0sU0FBTixDQUFnQixpQkFBaEIsR0FBb0MsVUFBVSxTQUFWLEVBQXFCO0FBQ3hELEtBQUksTUFBTSxhQUFhLEtBQUssUUFBTCxDQUFjLEdBQXJDOztBQUVBLEtBQUksV0FBVyxLQUFLLFFBQXBCOztBQUVBLEtBQUksTUFBTSxDQUFWO0FBQ0EsS0FBSSxZQUFZLENBQWhCO0FBQ0EsS0FBSSxZQUFZLENBQWhCO0FBQ0EsS0FBSSxZQUFZLENBQWhCO0FBQ0EsS0FBSSxZQUFZLENBQWhCO0FBQ0EsS0FBSSxVQUFVLENBQWQ7QUFBQSxLQUFpQixVQUFVLENBQTNCLENBVndELENBVTFCO0FBQzlCLEtBQUksVUFBVSxDQUFkO0FBQUEsS0FBaUIsVUFBVSxDQUEzQixDQVh3RCxDQVcxQjtBQUM5QixLQUFJLGVBQWUsQ0FBbkI7QUFDQSxLQUFJLGdCQUFnQixDQUFwQjs7QUFFQSxNQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksS0FBSyxZQUFMLENBQWtCLE1BQXRDLEVBQThDLEdBQTlDLEVBQW1EOztBQUVsRCxNQUFJLGFBQWEsS0FBSyxZQUFMLENBQWtCLENBQWxCLENBQWpCO0FBQ0EsTUFBSSxpQkFBaUIsV0FBVyxTQUFYLENBQXFCLFdBQXJCLEVBQXJCOztBQUVBLE1BQUksQ0FBSixFQUFPLENBQVAsRUFBVSxLQUFWOztBQUVBLE1BQUksWUFBWSx3QkFBWSxxQkFBWixFQUFtQyxXQUFXLFNBQTlDLEVBQXlELFdBQVcsVUFBcEUsQ0FBaEI7QUFDQSxNQUFJLFdBQVcsd0JBQVksb0JBQVosRUFBa0MsV0FBVyxTQUE3QyxFQUF3RCxXQUFXLFVBQW5FLENBQWY7QUFDQSxNQUFJLGFBQWEsd0JBQVksc0JBQVosRUFBb0MsV0FBVyxTQUEvQyxFQUEwRCxXQUFXLFVBQXJFLENBQWpCO0FBQ0EsTUFBSSxZQUFZLHdCQUFZLHFCQUFaLEVBQW1DLFdBQVcsU0FBOUMsRUFBeUQsV0FBVyxVQUFwRSxDQUFoQjtBQUNBLE1BQUksYUFBYSx3QkFBWSxzQkFBWixFQUFvQyxXQUFXLFNBQS9DLEVBQTBELFdBQVcsVUFBckUsQ0FBakI7QUFDQSxNQUFJLGtCQUFrQix3QkFBWSwyQkFBWixFQUF5QyxXQUFXLFNBQXBELEVBQStELFdBQVcsVUFBMUUsQ0FBdEI7QUFDQSxNQUFJLFdBQVcsd0JBQVksb0JBQVosRUFBa0MsV0FBVyxTQUE3QyxFQUF3RCxXQUFXLFVBQW5FLENBQWY7QUFDQSxNQUFJLGlCQUFpQix3QkFBWSxnQkFBWixFQUE4QixXQUFXLFNBQXpDLEVBQW9ELFdBQVcsVUFBL0QsQ0FBckI7O0FBRUEsTUFBSSxrQkFBa0I7QUFDckIsWUFBUyxJQURZLEVBQ04sT0FBTztBQURELEdBQXRCO0FBR0EsTUFBSSxxQkFBcUIsSUFBekI7O0FBRUEsTUFBSSxXQUFXLFVBQVgsQ0FBc0IsSUFBdEIsQ0FBMkIsT0FBM0IsQ0FBbUMsU0FBbkMsS0FBaUQsQ0FBakQsSUFBc0QsV0FBVyxVQUFYLENBQXNCLElBQXRCLEtBQStCLEtBQXJGLElBQThGLFdBQVcsVUFBWCxDQUFzQixJQUF0QixLQUErQixVQUFqSSxFQUNDLGtCQUFrQixLQUFLLGtCQUFMLENBQXdCLFdBQVcsVUFBbkMsRUFBK0MsV0FBVyxTQUExRCxDQUFsQjs7QUFFRCxNQUFJLFdBQVcsVUFBWCxDQUFzQixtQkFBdEIsSUFBNkMsV0FBVyxTQUFYLENBQXFCLG1CQUF0RSxFQUNDLHFCQUFxQjtBQUNwQixVQUFPLEtBQUssUUFEUSxFQUNFLFlBQVksV0FBVyxVQUR6QixFQUNxQyxXQUFXLFdBQVcsU0FEM0QsRUFDc0UsT0FBTyxXQUFXLFlBRHhGLEVBQ3NHLE9BQU8sZ0JBQWdCLEtBRDdILEVBQ29JLFNBQVMsZ0JBQWdCO0FBRDdKLEdBQXJCOztBQUtELE1BQUksaUJBQWlCLFdBQVcsU0FBWCxDQUFxQixtQkFBckIsR0FBMkMsV0FBVyxTQUFYLENBQXFCLG1CQUFyQixDQUF5QyxrQkFBekMsQ0FBM0MsR0FDbEIsV0FBVyxTQUFYLENBQXFCLFVBQXJCLEdBQWtDLEtBQUssd0JBQUwsQ0FBOEIsV0FBVyxTQUFYLENBQXFCLFVBQW5ELEVBQStELFdBQVcsU0FBMUUsRUFBcUYsV0FBVyxVQUFoRyxFQUE0RyxJQUE1RyxFQUFrSCxXQUFXLFlBQTdILENBQWxDLEdBQ0EsV0FBVyxVQUFYLENBQXNCLG1CQUF0QixHQUE0QyxXQUFXLFVBQVgsQ0FBc0IsbUJBQXRCLENBQTBDLGtCQUExQyxDQUE1QyxHQUNBLFdBQVcsVUFBWCxDQUFzQixVQUF0QixHQUFtQyxLQUFLLHdCQUFMLENBQThCLFdBQVcsVUFBWCxDQUFzQixVQUFwRCxFQUFnRSxXQUFXLFNBQTNFLEVBQXNGLFdBQVcsVUFBakcsRUFBNkcsSUFBN0csRUFBbUgsV0FBVyxZQUE5SCxDQUFuQyxHQUFpTCxJQUhwTDs7QUFLQSxNQUFJLG1CQUFtQixJQUFuQixJQUEyQixtQkFBbUIsRUFBbEQsRUFDQzs7QUFFRCxNQUFJLFlBQVksd0JBQVkscUJBQVosRUFBbUMsV0FBVyxTQUE5QyxFQUF5RCxXQUFXLFVBQXBFLENBQWhCO0FBQ0EsTUFBSSxjQUFjLHdCQUFZLHVCQUFaLEVBQXFDLFdBQVcsU0FBaEQsRUFBMkQsV0FBVyxVQUF0RSxDQUFsQjtBQUNBLE1BQUksUUFBUSxDQUFaOztBQUVBLE1BQUksWUFBWSxXQUFXLFNBQTNCLENBMUNrRCxDQTBDWjs7QUFFdEMsTUFBSSxRQUFRLFdBQVcsVUFBWCxDQUFzQixLQUFsQztBQUNBLE1BQUksUUFBUSxXQUFXLFVBQVgsQ0FBc0IsS0FBbEM7O0FBR0EsTUFBSSxZQUFZLHlCQUFjLEdBQWQsRUFBbUI7QUFDbEMsTUFBRyxDQUQrQjtBQUVsQyxNQUFHLENBRitCO0FBR2xDLGFBQVUsV0FBVyxRQUFYLEdBQXNCLEtBQUssS0FBTCxHQUFhLEVBSFg7QUFJbEMsY0FBVyxpQkFBaUIsV0FBVyxDQUE1QixHQUFnQyxXQUFXLEdBSnBCO0FBS2xDLFVBQU8sZ0JBQWdCLFlBQWhCLEdBQStCLENBQS9CLEdBQW1DLENBQUMsRUFMVDtBQU1sQyxTQUFNLGNBTjRCO0FBT2xDLFlBQVMsQ0FQeUI7QUFRbEMsb0JBQWlCLGVBUmlCO0FBU2xDLG9CQUFpQixNQVRpQixFQVNWO0FBQ3hCLGFBQVUsUUFWd0IsRUFVZjtBQUNuQixlQUFZLFVBWHNCO0FBWWxDLGVBQVksVUFac0IsRUFZVjtBQUN4QixjQUFXLFNBYnVCO0FBY2xDLGNBQVcsU0FkdUIsRUFjWjtBQUN0QixpQkFBYztBQWZvQixHQUFuQixDQUFoQjs7QUFrQkEsTUFBSSxXQUFXLFVBQVUsV0FBVixFQUFmOztBQUVBO0FBQ0E7O0FBRUEsTUFBSSxlQUFlLE9BQWYsQ0FBdUIsTUFBdkIsS0FBa0MsQ0FBbEMsSUFBdUMsZUFBZSxPQUFmLENBQXVCLE1BQXZCLEtBQWtDLENBQXpFLElBQ0MsZUFBZSxPQUFmLENBQXVCLFFBQXZCLEtBQW9DLENBRHJDLElBQzBDLGVBQWUsT0FBZixDQUF1QixTQUF2QixLQUFxQyxDQURuRixFQUNzRjs7QUFFckYsT0FBSSxXQUFXLFNBQVgsQ0FBcUIsQ0FBckIsR0FBeUIsTUFBTSxlQUEvQixJQUFrRCxXQUFXLFNBQVgsQ0FBcUIsQ0FBckIsR0FBeUIsTUFBTSxlQUFqRixJQUFvRyxXQUFXLFNBQVgsQ0FBcUIsQ0FBckIsR0FBeUIsTUFBTSxlQUFuSSxJQUFzSixXQUFXLFNBQVgsQ0FBcUIsQ0FBckIsR0FBeUIsTUFBTSxlQUF6TCxFQUNDO0FBQ0QsR0FMRCxNQU1LO0FBQ0osT0FBSSxXQUFXLFNBQVgsQ0FBcUIsQ0FBckIsR0FBeUIsTUFBTSxlQUEvQixJQUFrRCxXQUFXLFNBQVgsQ0FBcUIsQ0FBckIsR0FBeUIsTUFBTSxlQUFyRixFQUNDO0FBQ0Q7O0FBRUQsWUFBVSxDQUFWO0FBQ0EsWUFBVSxDQUFWOztBQUVBLE1BQUksZ0JBQWdCLFlBQXBCLEVBQWtDO0FBQ2pDLGtCQUFlLFVBQVUsS0FBekI7QUFDQSxtQkFBZ0IsVUFBVSxNQUExQjtBQUNBLEdBSEQsTUFHTztBQUNOLG1CQUFnQixVQUFVLEtBQTFCO0FBQ0Esa0JBQWUsVUFBVSxNQUF6QjtBQUNBOztBQUVELE1BQUksS0FBSyxRQUFMLENBQWMsYUFBZCxLQUFnQyxRQUFwQyxFQUE4Qzs7QUFFN0MsT0FBSSxlQUFlLE9BQWYsQ0FBdUIsTUFBdkIsS0FBa0MsQ0FBbEMsSUFBdUMsZUFBZSxPQUFmLENBQXVCLE1BQXZCLEtBQWtDLENBQTdFLEVBQWdGOztBQUUvRSxnQkFBWSxNQUFaO0FBQ0EsY0FBVSxDQUFWO0FBRUEsSUFMRCxNQUtPLElBQUksZUFBZSxPQUFmLENBQXVCLFNBQXZCLEtBQXFDLENBQXpDLEVBQTRDOztBQUVsRCxRQUFJLGNBQWMsTUFBbEIsRUFDQyxZQUFZLFFBQVo7QUFFRCxJQUxNLE1BS0EsSUFBSSxtQkFBbUIsUUFBbkIsSUFBK0IsbUJBQW1CLFNBQXRELEVBQWlFOztBQUV2RSxnQkFBWSxRQUFaO0FBRUE7O0FBRUQsT0FBSSxXQUFXLEtBQVgsQ0FBaUIsQ0FBakIsR0FBcUIsZUFBZSxDQUF4Qzs7QUFFQSxPQUFJLGNBQWMsUUFBbEIsRUFBNEI7QUFBRTs7QUFFN0IsZ0JBQVksU0FBUyxFQUFyQjtBQUNBLGdCQUFZLFNBQVMsRUFBckI7O0FBRUEsUUFBSSxZQUFZLENBQWhCLEVBQW1CO0FBQ2xCLFNBQUksV0FBVyxLQUFYLENBQWlCLENBQWpCLEdBQXFCLGFBQXJCLEdBQXFDLE9BQXpDOztBQUVBLFNBQUksSUFBSSxTQUFSLEVBQW1CO0FBQ2xCLFVBQUksY0FBYyxNQUFsQixFQUEwQjtBQUN6QixXQUFJLEtBQUssR0FBTCxDQUFTLFdBQVcsS0FBWCxDQUFpQixDQUExQixFQUE2QixTQUE3QixJQUEwQyxPQUE5QztBQUNBLE9BRkQsTUFHSztBQUNKLFdBQUksWUFBWSxPQUFoQjtBQUNBO0FBQ0Q7QUFDRCxLQVhELE1BWUs7QUFDSixTQUFJLFdBQVcsS0FBWCxDQUFpQixDQUFqQixHQUFxQixPQUF6Qjs7QUFFQSxTQUFJLElBQUksWUFBWSxhQUFaLEdBQTRCLE9BQXBDLEVBQTZDO0FBQzVDLFVBQUksY0FBYyxNQUFsQixFQUEwQjtBQUN6QixXQUFJLEtBQUssR0FBTCxDQUFTLFdBQVcsS0FBWCxDQUFpQixDQUExQixFQUE2QixTQUE3QixJQUEwQyxhQUExQyxHQUEwRCxPQUE5RDtBQUNBLE9BRkQsTUFHSztBQUNKLFdBQUksWUFBWSxhQUFaLEdBQTRCLE9BQWhDO0FBQ0E7QUFDRDtBQUNEO0FBRUQsSUE5QkQsTUE4Qk87O0FBR04sZ0JBQVksS0FBSyxHQUFMLENBQVMsV0FBVyxNQUFYLENBQWtCLEVBQTNCLEVBQStCLFNBQVMsRUFBeEMsQ0FBWjtBQUNBLGdCQUFZLEtBQUssR0FBTCxDQUFTLFdBQVcsTUFBWCxDQUFrQixFQUEzQixFQUErQixTQUFTLEVBQXhDLENBQVo7O0FBR0EsUUFBSSxlQUFlLE9BQWYsQ0FBdUIsT0FBdkIsS0FBbUMsQ0FBdkMsRUFBMEM7QUFDekMsU0FBSSxZQUFZLENBQWhCLEVBQ0MsTUFBTSxLQUFLLEdBQUwsQ0FBUyxXQUFXLE1BQVgsQ0FBa0IsRUFBM0IsRUFBK0IsU0FBUyxFQUF4QyxJQUE4QyxnQkFBZ0IsQ0FBOUQsR0FBa0UsT0FBeEUsQ0FERCxLQUdDLE1BQU0sS0FBSyxHQUFMLENBQVMsV0FBVyxNQUFYLENBQWtCLEVBQTNCLEVBQStCLFNBQVMsRUFBeEMsSUFBOEMsZ0JBQWdCLENBQTlELEdBQWtFLE9BQXhFO0FBQ0QsS0FMRCxNQU9DLE1BQU0sQ0FBQyxLQUFLLEdBQUwsQ0FBUyxXQUFXLE1BQVgsQ0FBa0IsRUFBM0IsRUFBK0IsU0FBUyxFQUF4QyxJQUE4QyxLQUFLLEdBQUwsQ0FBUyxXQUFXLE1BQVgsQ0FBa0IsRUFBM0IsRUFBK0IsU0FBUyxFQUF4QyxDQUEvQyxJQUE4RixDQUFwRzs7QUFFRCxRQUFJLFlBQVksQ0FBaEIsRUFBbUI7QUFDbEIsU0FBSSxLQUFLLEdBQUwsQ0FBUyxXQUFXLEtBQVgsQ0FBaUIsQ0FBMUIsRUFBNkIsR0FBN0IsSUFBb0MsZ0JBQWdCLENBQXhEOztBQUVBLFNBQUksSUFBSSxTQUFKLEtBQWtCLG1CQUFtQixRQUFuQixJQUErQixtQkFBbUIsU0FBcEUsQ0FBSixFQUFvRjtBQUNuRixVQUFJLEtBQUssR0FBTCxDQUFTLFdBQVcsS0FBWCxDQUFpQixDQUFqQixHQUFxQixhQUFyQixHQUFxQyxPQUE5QyxFQUF1RCxTQUFTLEVBQVQsR0FBYyxPQUFyRSxDQUFKO0FBQ0E7QUFDRCxLQU5ELE1BT0s7QUFDSixTQUFJLEtBQUssR0FBTCxDQUFTLFdBQVcsS0FBWCxDQUFpQixDQUExQixFQUE2QixHQUE3QixJQUFvQyxnQkFBZ0IsQ0FBeEQ7O0FBRUEsU0FBSSxJQUFJLFlBQVksYUFBWixHQUE0QixPQUFoQyxLQUE0QyxtQkFBbUIsUUFBbkIsSUFBK0IsbUJBQW1CLFNBQTlGLENBQUosRUFBOEc7QUFDN0csVUFBSSxLQUFLLEdBQUwsQ0FBUyxXQUFXLEtBQVgsQ0FBaUIsQ0FBakIsR0FBcUIsT0FBOUIsRUFBdUMsU0FBUyxFQUFULEdBQWMsYUFBZCxHQUE4QixPQUFyRSxDQUFKO0FBQ0E7QUFDRDs7QUFFYTtBQUNkLFFBQUksS0FBSyxHQUFMLENBQVMsQ0FBVCxFQUFZLFlBQVksYUFBeEIsQ0FBSjtBQUNBO0FBQ0QsR0FwRkQsTUFxRks7O0FBRUosT0FBSSxlQUFlLE9BQWYsQ0FBdUIsTUFBdkIsS0FBa0MsQ0FBbEMsSUFBdUMsZUFBZSxPQUFmLENBQXVCLE1BQXZCLEtBQWtDLENBQXpFLElBQ0EsZUFBZSxPQUFmLENBQXVCLFNBQXZCLEtBQXFDLENBRHpDLEVBQzRDOztBQUUzQyxnQkFBWSxNQUFaO0FBQ0EsY0FBVSxDQUFWO0FBRUEsSUFORCxNQU1PLElBQUksZUFBZSxPQUFmLENBQXVCLFNBQXZCLEtBQXFDLENBQXpDLEVBQTRDOztBQUVsRCxRQUFJLGNBQWMsTUFBbEIsRUFDQyxZQUFZLFFBQVo7QUFFRCxJQUxNLE1BS0EsSUFBSSxtQkFBbUIsUUFBdkIsRUFBaUM7O0FBRXZDLGdCQUFZLFFBQVo7QUFFQTs7QUFFRCxPQUFJLFdBQVcsS0FBWCxDQUFpQixDQUFqQixHQUFxQixnQkFBZ0IsQ0FBekM7O0FBRUEsT0FBSSxjQUFjLFFBQWxCLEVBQTRCO0FBQUU7O0FBRTdCLGdCQUFZLFNBQVMsRUFBckI7QUFDQSxnQkFBWSxTQUFTLEVBQXJCOztBQUVBLFFBQUksWUFBWSxDQUFoQixFQUFtQjtBQUNsQixTQUFJLFdBQVcsS0FBWCxDQUFpQixDQUFqQixHQUFxQixZQUFyQixHQUFvQyxPQUF4Qzs7QUFFQSxTQUFJLElBQUksU0FBUixFQUFtQjtBQUNsQixVQUFJLGNBQWMsTUFBbEIsRUFBMEI7QUFDekIsV0FBSSxLQUFLLEdBQUwsQ0FBUyxXQUFXLEtBQVgsQ0FBaUIsQ0FBMUIsRUFBNkIsU0FBN0IsSUFBMEMsT0FBOUM7QUFDQSxPQUZELE1BR0s7QUFDSixXQUFJLFlBQVksT0FBaEI7QUFDQTtBQUNEO0FBQ0QsS0FYRCxNQVlLO0FBQ0osU0FBSSxXQUFXLEtBQVgsQ0FBaUIsQ0FBakIsR0FBcUIsT0FBekI7O0FBRUEsU0FBSSxJQUFJLFlBQVksWUFBWixHQUEyQixPQUFuQyxFQUE0QztBQUMzQyxVQUFJLGNBQWMsTUFBbEIsRUFBMEI7QUFDekIsV0FBSSxLQUFLLEdBQUwsQ0FBUyxXQUFXLEtBQVgsQ0FBaUIsQ0FBMUIsRUFBNkIsU0FBN0IsSUFBMEMsWUFBMUMsR0FBeUQsT0FBN0Q7QUFDQSxPQUZELE1BR0s7QUFDSixXQUFJLFlBQVksWUFBWixHQUEyQixPQUEvQjtBQUNBO0FBQ0Q7QUFDRDtBQUVELElBOUJELE1BOEJPOztBQUVOLGdCQUFZLEtBQUssR0FBTCxDQUFTLFdBQVcsTUFBWCxDQUFrQixFQUEzQixFQUErQixTQUFTLEVBQXhDLENBQVo7QUFDQSxnQkFBWSxLQUFLLEdBQUwsQ0FBUyxXQUFXLE1BQVgsQ0FBa0IsRUFBM0IsRUFBK0IsU0FBUyxFQUF4QyxDQUFaOztBQUVBLFFBQUksZUFBZSxPQUFmLENBQXVCLE9BQXZCLEtBQW1DLENBQXZDLEVBQTBDO0FBQ3pDLFNBQUksWUFBWSxDQUFoQixFQUNDLE1BQU0sS0FBSyxHQUFMLENBQVMsV0FBVyxNQUFYLENBQWtCLEVBQTNCLEVBQStCLFNBQVMsRUFBeEMsSUFBOEMsZUFBZSxDQUE3RCxHQUFpRSxPQUF2RSxDQURELEtBR0MsTUFBTSxLQUFLLEdBQUwsQ0FBUyxXQUFXLE1BQVgsQ0FBa0IsRUFBM0IsRUFBK0IsU0FBUyxFQUF4QyxJQUE4QyxlQUFlLENBQTdELEdBQWlFLE9BQXZFO0FBQ0QsS0FMRCxNQU9DLElBQUksTUFBTSxDQUFDLEtBQUssR0FBTCxDQUFTLFdBQVcsTUFBWCxDQUFrQixFQUEzQixFQUErQixTQUFTLEVBQXhDLElBQThDLEtBQUssR0FBTCxDQUFTLFdBQVcsTUFBWCxDQUFrQixFQUEzQixFQUErQixTQUFTLEVBQXhDLENBQS9DLElBQThGLENBQXhHOztBQUVELFFBQUksWUFBWSxDQUFoQixFQUFtQjtBQUNsQixTQUFJLEtBQUssR0FBTCxDQUFTLFdBQVcsS0FBWCxDQUFpQixDQUExQixFQUE2QixHQUE3QixJQUFvQyxlQUFlLENBQXZEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBTkQsTUFPSztBQUNKLFNBQUksS0FBSyxHQUFMLENBQVMsV0FBVyxLQUFYLENBQWlCLENBQTFCLEVBQTZCLEdBQTdCLElBQW9DLGVBQWUsQ0FBdkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUU7QUFDQSxRQUFJLEtBQUssR0FBTCxDQUFTLENBQVQsRUFBWSxTQUFaLENBQUo7QUFDSDtBQUNEOztBQUdELE1BQUksZ0JBQWdCLFVBQXBCLEVBQWdDO0FBQy9CLFFBQUssYUFBTDtBQUNBOztBQUVELFlBQVUsQ0FBVixHQUFjLENBQWQ7QUFDQSxZQUFVLENBQVYsR0FBYyxDQUFkOztBQUVBOztBQUVBLFlBQVUsTUFBVixDQUFpQixJQUFqQjtBQUNBOztBQUVEO0FBQ0EsS0FBSSxnQkFBZ0I7QUFDbkIsVUFBUSxHQURXLEVBQ04sTUFBTSxLQUFLLFFBQUwsQ0FBYyxHQURkLEVBQ21CLG1CQUFtQixtQkFBZ0IsZUFEdEQsRUFDdUUsZ0JBQWdCLG1CQUFnQixNQUFoQixDQUF1QixVQUQ5RyxFQUMwSCxlQUFlLENBRHpJLEVBQzRJLGtCQUFrQjtBQUQ5SixFQUFwQjtBQUdBLFFBQU8sYUFBUDtBQUNBLENBeFNEOztBQTBTQSxNQUFNLFNBQU4sQ0FBZ0IsVUFBaEIsR0FBNkIsVUFBVSxRQUFWLEVBQW9COztBQUVoRCxLQUFJLE1BQU0sU0FBUyxlQUFULElBQTRCLEtBQUssUUFBTCxDQUFjLEdBQXBEOztBQUVBLEtBQUksa0JBQWtCLFNBQVMsaUJBQVQsQ0FBMkIsTUFBakQ7QUFDQSxLQUFJLG1CQUFtQixDQUF2QixFQUNDOztBQUVELEtBQUksV0FBVyxLQUFLLGFBQUwsQ0FBbUIsUUFBbEM7QUFDQTs7QUFFQSxLQUFJLElBQUo7O0FBRUEsS0FBSSxXQUFXLEtBQUssUUFBcEI7O0FBRUEsS0FBSSxTQUFKO0FBQ0EsS0FBSSxJQUFKLENBQVMsU0FBUyxFQUFsQixFQUFzQixTQUFTLEVBQS9CLEVBQW1DLFNBQVMsS0FBNUMsRUFBbUQsU0FBUyxNQUE1RDtBQUNBLEtBQUksSUFBSjs7QUFFQSxLQUFJLFVBQVUsRUFBZDs7QUFFQSxNQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksU0FBUyxpQkFBVCxDQUEyQixNQUEvQyxFQUF1RCxHQUF2RCxFQUE0RDs7QUFFM0QsTUFBSSxrQkFBa0IsU0FBUyxpQkFBVCxDQUEyQixDQUEzQixDQUF0Qjs7QUFFQSxNQUFJLGFBQWEsS0FBSyxJQUFMLENBQVUsZUFBVixDQUFqQjtBQUNBLE1BQUksU0FBSixHQUFnQixXQUFXLGFBQTNCO0FBQ0EsTUFBSSxhQUFhLFdBQVcsVUFBNUI7O0FBR0EsTUFBSSxJQUFJLFdBQVIsRUFBcUI7QUFDcEIsT0FBSSxXQUFKLENBQWdCLDZCQUFpQixXQUFXLFlBQTVCLEVBQTBDLFdBQVcsYUFBckQsQ0FBaEI7QUFDQTs7QUFFRCxNQUFJLFdBQVcsV0FBVyxFQUExQjtBQUNBLE9BQUssYUFBTCxDQUFtQixTQUFuQixDQUE2QixRQUE3QixJQUF5QztBQUN4QyxlQUFZLFlBRDRCLEVBQ2QsaUJBQWlCO0FBREgsR0FBekM7QUFHQSxNQUFJLFdBQVcsZ0NBQW9CLFFBQXBCLENBQWY7QUFDQSxXQUFTLFdBQVQsR0FBdUIsUUFBdkI7QUFDQTtBQUNBLFdBQVMsU0FBVCxHQUFxQixXQUFXLGFBQVgsR0FBMkIsQ0FBM0IsR0FBK0IsS0FBSyxHQUFMLENBQVMsV0FBVyxhQUFwQixFQUFtQyxDQUFuQyxDQUEvQixHQUF1RSxDQUE1Rjs7QUFFQSxNQUFJLFdBQVcsV0FBVyxTQUExQjtBQUNBLE1BQUksUUFBUSxTQUFTLENBQVQsQ0FBWjtBQUNBLE1BQUksV0FBSixHQUFrQixLQUFsQjs7QUFFQSxNQUFJLDZCQUE2QixJQUFqQztBQUNBLE1BQUksSUFBSSxDQUFSO0FBQUEsTUFBVyxDQUFYO0FBQUEsTUFBYyxDQUFkO0FBQ0EsTUFBSSxVQUFKLENBNUIyRCxDQTRCM0M7O0FBRWhCO0FBQ0E7QUFDQSxNQUFJLFNBQUo7QUFDQSxNQUFJLFdBQVcsTUFBWCxHQUFvQixDQUF4QixFQUEyQjtBQUMxQjs7QUFFQTtBQUNBLE9BQUksZUFBZSxLQUFuQjtBQUNBLFFBQUssSUFBSSxDQUFULEVBQVksSUFBSSxXQUFXLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDOztBQUV2QyxpQkFBYSxXQUFXLENBQVgsRUFBYyxDQUFkLENBQWdCLE9BQWhCLEdBQTBCLFdBQVcsQ0FBWCxFQUFjLENBQWQsQ0FBZ0IsT0FBaEIsRUFBMUIsR0FBc0QsV0FBVyxDQUFYLEVBQWMsQ0FBakY7O0FBRUEsUUFBSSxhQUFhLFNBQVMsS0FBVCxDQUFlLFFBQWYsQ0FBd0IsV0FBckMsSUFBb0QsYUFBYSxTQUFTLEtBQVQsQ0FBZSxRQUFmLENBQXdCLFdBQTdGLEVBQ0M7O0FBRUQ7QUFDQTs7QUFFQSxRQUFJLE9BQVEsV0FBVyxDQUFYLEVBQWMsQ0FBdEIsS0FBNkIsUUFBakMsRUFBMkM7QUFDMUMsU0FBSSxJQUFJLENBQVIsRUFBVztBQUFDO0FBQ1gsVUFBSSxNQUFKOztBQUVBLG9DQUF1QjtBQUN0QixnQkFBUyxNQUFUO0FBQ0E7QUFDRDs7QUFHRCxvQkFBZSxJQUFmO0FBQ0E7QUFDQTs7QUFFRCxRQUFLLFNBQVMsS0FBVCxDQUFlLG9CQUFmLENBQW9DLFNBQXBDLEdBQWdELFNBQVMsS0FBVCxDQUFlLG9CQUFmLENBQW9DLFlBQXBDLElBQW9ELGFBQWEsU0FBUyxLQUFULENBQWUsb0JBQWYsQ0FBb0MsT0FBckcsQ0FBaEQsR0FBZ0ssRUFBakssSUFBd0ssQ0FBNUs7QUFDQSxRQUFLLFNBQVMsS0FBVCxDQUFlLG9CQUFmLENBQW9DLFNBQXBDLEdBQWdELFNBQVMsS0FBVCxDQUFlLG9CQUFmLENBQW9DLFlBQXBDLElBQW9ELFdBQVcsQ0FBWCxFQUFjLENBQWQsR0FBa0IsU0FBUyxLQUFULENBQWUsb0JBQWYsQ0FBb0MsT0FBMUcsQ0FBaEQsR0FBcUssRUFBdEssSUFBNkssQ0FBakw7O0FBRUEsUUFBSSxLQUFLLFdBQVcsWUFBWCxDQUF3QixDQUF4QixDQUFUO0FBQ0EsU0FBSyxhQUFMLENBQW1CLFNBQW5CLENBQTZCLEVBQTdCLElBQW1DO0FBQ2xDLFNBQUksRUFEOEIsRUFDMUIsWUFBWSxXQURjLEVBQ0QsaUJBQWlCLGVBRGhCLEVBQ2lDLGdCQUFnQixDQURqRCxFQUNvRCxJQUFJLENBRHhELEVBQzJELElBQUk7QUFEL0QsS0FBbkM7O0FBS0E7O0FBRUEsUUFBSSw4QkFBOEIsWUFBbEMsRUFBZ0Q7QUFDL0MsU0FBSSxTQUFKO0FBQ0EsU0FBSSxNQUFKLENBQVcsQ0FBWCxFQUFjLENBQWQ7O0FBR0EsbUNBQXVCO0FBQ3RCLGVBQVMsU0FBVDtBQUNBLGVBQVMsTUFBVCxDQUFnQixDQUFoQixFQUFtQixDQUFuQjtBQUNBOztBQUVELGtDQUE2QixLQUE3QjtBQUNBLG9CQUFlLEtBQWY7QUFDQSxLQVpELE1BWU87O0FBRU4sU0FBSSxNQUFKLENBQVcsQ0FBWCxFQUFjLENBQWQ7O0FBRUEsbUNBQ0MsU0FBUyxNQUFULENBQWdCLENBQWhCLEVBQW1CLENBQW5COztBQUVELFNBQUksSUFBSSxHQUFKLElBQVcsQ0FBZixFQUFrQjtBQUNqQixVQUFJLE1BQUo7QUFDQSxVQUFJLFNBQUo7QUFDQSxVQUFJLE1BQUosQ0FBVyxDQUFYLEVBQWMsQ0FBZDs7QUFFQSxvQ0FBdUI7QUFDdEIsZ0JBQVMsTUFBVDtBQUNBLGdCQUFTLFNBQVQ7QUFDQSxnQkFBUyxNQUFULENBQWdCLENBQWhCLEVBQW1CLENBQW5CO0FBQ0E7QUFDRDtBQUNEOztBQUVEO0FBQ0EsUUFBSSxXQUFXLENBQVgsRUFBYyxVQUFkLEdBQTJCLENBQTNCLElBQWdDLFdBQVcsVUFBWCxHQUF3QixDQUE1RCxFQUErRDs7QUFFOUQsU0FBSSxjQUFjLFdBQVcsbUJBQVgsQ0FBK0IsQ0FBL0IsRUFBa0MsQ0FBbEMsRUFBcUMsQ0FBckMsRUFBd0MsR0FBeEMsQ0FBbEI7QUFDQSxhQUFRLElBQVIsQ0FBYSxXQUFiOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFJLGNBQWMsZ0NBQW9CLEVBQXBCLENBQWxCOztBQUVBOztBQUVBLG1DQUF1QjtBQUN0QixjQUFRLElBQVIsQ0FBYTtBQUNaLFVBQUcsQ0FEUyxFQUNOLEdBQUcsQ0FERyxFQUNBLEtBQUssUUFETDtBQUVaLGFBQU0sWUFBWSxJQUZOO0FBR1osYUFBTSxZQUFZLElBSE47QUFJWixjQUFPLFdBSks7QUFLWixvQkFBYSxXQUxEO0FBTVosd0JBQWlCLFlBQVk7QUFOakIsT0FBYjtBQVFBO0FBQ0Q7O0FBRUQsUUFBSSxXQUFXLENBQVgsRUFBYyxVQUFkLElBQTRCLFdBQVcsVUFBdkMsSUFBcUQsV0FBVyxDQUFYLEVBQWMsbUJBQW5FLElBQTBGLFdBQVcsbUJBQXpHLEVBQThIOztBQUU3SCxVQUFLLFlBQUwsQ0FBa0IsSUFBbEIsQ0FBdUI7QUFDdEIsaUJBQVcsTUFEVztBQUV0QixpQkFBVyxXQUFXLENBQVgsQ0FGVztBQUd0QixrQkFBWSxVQUhVO0FBSXRCLGFBQU87QUFDTixVQUFHLENBREcsRUFDQSxHQUFHO0FBREgsT0FKZTtBQU90QixpQkFBVyxXQUFXLENBQVgsRUFBYyxDQUFkLElBQW1CLENBQW5CLEdBQXVCLENBQXZCLEdBQTJCLENBQUMsQ0FQakI7QUFRdEIsYUFBTztBQVJlLE1BQXZCO0FBV0E7QUFFRDs7QUFFRCxPQUFJLE1BQUo7O0FBRUEsaUNBQ0MsU0FBUyxNQUFUO0FBQ0Q7QUFFRDs7QUFHRCxrQkFBYSxXQUFiLENBQXlCLE9BQXpCO0FBQ0EsS0FBSSxPQUFKOztBQUVBLEtBQUksU0FBSjs7QUFFQSwrQkFDQyxTQUFTLFNBQVQ7O0FBRUQ7QUFDQSxLQUFJLGdCQUFnQjtBQUNuQixVQUFRLEdBRFcsRUFDTixNQUFNLEtBQUssUUFBTCxDQUFjLEdBRGQsRUFDbUIsbUJBQW1CLG1CQUFnQixjQUR0RCxFQUNzRSxnQkFBZ0IsbUJBQWdCLE1BQWhCLENBQXVCLE1BRDdHLEVBQ3FILGVBQWU7QUFEcEksRUFBcEI7QUFHQSxRQUFPLGFBQVA7QUFDQSxDQS9MRDs7QUFpTUEsTUFBTSxTQUFOLENBQWdCLGNBQWhCLEdBQWlDLFVBQVUsUUFBVixFQUFvQjtBQUNwRCxLQUFJLE1BQU0sU0FBUyxlQUFULElBQTRCLEtBQUssUUFBTCxDQUFjLEdBQXBEOztBQUVBLEtBQUksa0JBQWtCLFNBQVMsaUJBQVQsQ0FBMkIsTUFBakQ7QUFDQSxLQUFJLG1CQUFtQixDQUF2QixFQUNDOztBQUVELEtBQUksV0FBVyxLQUFLLGFBQUwsQ0FBbUIsUUFBbEM7QUFDQTs7QUFFQSxLQUFJLElBQUo7O0FBRUEsS0FBSSxXQUFXLEtBQUssUUFBcEI7O0FBRUEsS0FBSSxTQUFKO0FBQ0EsS0FBSSxJQUFKLENBQVMsU0FBUyxFQUFsQixFQUFzQixTQUFTLEVBQS9CLEVBQW1DLFNBQVMsS0FBNUMsRUFBbUQsU0FBUyxNQUE1RDtBQUNBLEtBQUksSUFBSjs7QUFFQSxLQUFJLFVBQVUsRUFBZDs7QUFFQSxNQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksU0FBUyxpQkFBVCxDQUEyQixNQUEvQyxFQUF1RCxHQUF2RCxFQUE0RDs7QUFFM0QsTUFBSSxrQkFBa0IsU0FBUyxpQkFBVCxDQUEyQixDQUEzQixDQUF0Qjs7QUFFQSxNQUFJLGFBQWEsS0FBSyxJQUFMLENBQVUsZUFBVixDQUFqQjtBQUNBLE1BQUksU0FBSixHQUFnQixXQUFXLGFBQTNCO0FBQ0EsTUFBSSxhQUFhLFdBQVcsVUFBNUI7O0FBRUEsTUFBSSxJQUFJLFdBQVIsRUFBcUI7QUFDcEIsT0FBSSxXQUFKLENBQWdCLDZCQUFpQixXQUFXLFlBQTVCLEVBQTBDLFdBQVcsYUFBckQsQ0FBaEI7QUFDQTs7QUFFRCxNQUFJLFdBQVcsV0FBVyxFQUExQjtBQUNBLE9BQUssYUFBTCxDQUFtQixTQUFuQixDQUE2QixRQUE3QixJQUF5QztBQUN4QyxlQUFZLFlBRDRCLEVBQ2QsaUJBQWlCO0FBREgsR0FBekM7QUFHQSxNQUFJLFdBQVcsZ0NBQW9CLFFBQXBCLENBQWY7QUFDQSxXQUFTLFdBQVQsR0FBdUIsUUFBdkI7QUFDQTtBQUNBLFdBQVMsU0FBVCxHQUFxQixXQUFXLGFBQVgsR0FBMkIsQ0FBM0IsR0FBK0IsS0FBSyxHQUFMLENBQVMsV0FBVyxhQUFwQixFQUFtQyxDQUFuQyxDQUEvQixHQUF1RSxDQUE1Rjs7QUFFQSxNQUFJLFdBQVcsV0FBVyxTQUExQjtBQUNBLE1BQUksUUFBUSxTQUFTLENBQVQsQ0FBWjtBQUNBLE1BQUksV0FBSixHQUFrQixLQUFsQjs7QUFFQSxNQUFJLDZCQUE2QixJQUFqQztBQUNBLE1BQUksSUFBSSxDQUFSO0FBQUEsTUFBVyxDQUFYO0FBQUEsTUFBYyxDQUFkO0FBQ0EsTUFBSSxVQUFKLENBM0IyRCxDQTJCM0M7O0FBRWhCO0FBQ0E7QUFDQSxNQUFJLFNBQUo7QUFDQSxNQUFJLFdBQVcsTUFBWCxHQUFvQixDQUF4QixFQUEyQjtBQUMxQjs7QUFFQTtBQUNBLE9BQUksZUFBZSxLQUFuQjtBQUNBLFFBQUssSUFBSSxDQUFULEVBQVksSUFBSSxXQUFXLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDOztBQUV2QyxpQkFBYSxXQUFXLENBQVgsRUFBYyxPQUFkLEdBQXdCLFdBQVcsQ0FBWCxFQUFjLENBQWQsQ0FBZ0IsT0FBaEIsRUFBeEIsR0FBb0QsV0FBVyxDQUFYLEVBQWMsQ0FBL0U7O0FBRUEsUUFBSSxhQUFhLFNBQVMsS0FBVCxDQUFlLFFBQWYsQ0FBd0IsV0FBckMsSUFBb0QsYUFBYSxTQUFTLEtBQVQsQ0FBZSxRQUFmLENBQXdCLFdBQTdGLEVBQ0M7O0FBRUQ7QUFDQTs7QUFFQSxRQUFJLE9BQVEsV0FBVyxDQUFYLEVBQWMsQ0FBdEIsS0FBNkIsUUFBakMsRUFBMkM7QUFDMUMsU0FBSSxJQUFJLENBQVIsRUFBVztBQUFDO0FBQ1gsVUFBSSxNQUFKOztBQUVBLG9DQUF1QjtBQUN0QixnQkFBUyxNQUFUO0FBQ0E7QUFDRDs7QUFFRCxvQkFBZSxJQUFmO0FBQ0E7QUFDQTs7QUFFRCxRQUFJLFFBQVEsQ0FBWjs7QUFFQSxRQUFLLFNBQVMsS0FBVCxDQUFlLG9CQUFmLENBQW9DLFNBQXBDLEdBQWdELFNBQVMsS0FBVCxDQUFlLG9CQUFmLENBQW9DLFlBQXBDLElBQW9ELGFBQWEsU0FBUyxLQUFULENBQWUsb0JBQWYsQ0FBb0MsT0FBckcsQ0FBaEQsR0FBZ0ssRUFBakssSUFBd0ssQ0FBNUs7QUFDQSxRQUFLLFNBQVMsS0FBVCxDQUFlLG9CQUFmLENBQW9DLFNBQXBDLEdBQWdELFNBQVMsS0FBVCxDQUFlLG9CQUFmLENBQW9DLFlBQXBDLElBQW9ELFdBQVcsQ0FBWCxFQUFjLENBQWQsR0FBa0IsU0FBUyxLQUFULENBQWUsb0JBQWYsQ0FBb0MsT0FBMUcsQ0FBaEQsR0FBcUssRUFBdEssSUFBNkssQ0FBakw7O0FBRUEsUUFBSSxLQUFLLFdBQVcsWUFBWCxDQUF3QixDQUF4QixDQUFUO0FBQ0EsU0FBSyxhQUFMLENBQW1CLFNBQW5CLENBQTZCLEVBQTdCLElBQW1DO0FBQ2xDLFNBQUksRUFEOEIsRUFDMUIsWUFBWSxXQURjLEVBQ0QsaUJBQWlCLGVBRGhCLEVBQ2lDLGdCQUFnQixDQURqRCxFQUNvRCxJQUFJLENBRHhELEVBQzJELElBQUk7QUFEL0QsS0FBbkM7O0FBS0E7O0FBRUEsUUFBSSw4QkFBOEIsWUFBbEMsRUFBZ0Q7QUFDL0MsU0FBSSxTQUFKO0FBQ0EsU0FBSSxNQUFKLENBQVcsQ0FBWCxFQUFjLENBQWQ7O0FBRUEsbUNBQXVCO0FBQ3RCLGVBQVMsU0FBVDtBQUNBLGVBQVMsTUFBVCxDQUFnQixDQUFoQixFQUFtQixDQUFuQjtBQUNBOztBQUVELGtDQUE2QixLQUE3QjtBQUNBLG9CQUFlLEtBQWY7QUFDQSxLQVhELE1BV087O0FBRU4sU0FBSSxNQUFKLENBQVcsQ0FBWCxFQUFjLEtBQWQ7QUFDQSxtQ0FDQyxTQUFTLE1BQVQsQ0FBZ0IsQ0FBaEIsRUFBbUIsS0FBbkI7O0FBRUQsU0FBSSxNQUFKLENBQVcsQ0FBWCxFQUFjLENBQWQ7QUFDQSxtQ0FDQyxTQUFTLE1BQVQsQ0FBZ0IsQ0FBaEIsRUFBbUIsQ0FBbkI7O0FBRUQsU0FBSSxJQUFJLEdBQUosSUFBVyxDQUFmLEVBQWtCO0FBQ2pCLFVBQUksTUFBSjtBQUNBLFVBQUksU0FBSjtBQUNBLFVBQUksTUFBSixDQUFXLENBQVgsRUFBYyxDQUFkOztBQUVBLG9DQUF1QjtBQUN0QixnQkFBUyxNQUFUO0FBQ0EsZ0JBQVMsU0FBVDtBQUNBLGdCQUFTLE1BQVQsQ0FBZ0IsQ0FBaEIsRUFBbUIsQ0FBbkI7QUFDQTtBQUNEO0FBQ0Q7O0FBRUQ7QUFDQSxRQUFJLFdBQVcsQ0FBWCxFQUFjLFVBQWQsR0FBMkIsQ0FBM0IsSUFBZ0MsV0FBVyxVQUFYLEdBQXdCLENBQTVELEVBQStEOztBQUU5RCxTQUFJLGNBQWMsV0FBVyxtQkFBWCxDQUErQixDQUEvQixFQUFrQyxDQUFsQyxFQUFxQyxDQUFyQyxFQUF3QyxHQUF4QyxDQUFsQjtBQUNBLGFBQVEsSUFBUixDQUFhLFdBQWI7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFNBQUksY0FBYyxnQ0FBb0IsRUFBcEIsQ0FBbEI7O0FBRUE7QUFDQSxtQ0FBdUI7QUFDdEIsY0FBUSxJQUFSLENBQWE7QUFDWixVQUFHLENBRFMsRUFDTixHQUFHLENBREcsRUFDQSxLQUFLLFFBREw7QUFFWixhQUFNLFlBQVksSUFGTjtBQUdaLGFBQU0sWUFBWSxJQUhOO0FBSVosY0FBTyxXQUpLO0FBS1osb0JBQWEsV0FMRDtBQU1aLHdCQUFpQixZQUFZO0FBTmpCLE9BQWI7QUFRQTtBQUNEOztBQUVELFFBQUksV0FBVyxDQUFYLEVBQWMsVUFBZCxJQUE0QixXQUFXLFVBQXZDLElBQXFELFdBQVcsQ0FBWCxFQUFjLG1CQUFuRSxJQUEwRixXQUFXLG1CQUF6RyxFQUE4SDs7QUFFN0gsVUFBSyxZQUFMLENBQWtCLElBQWxCLENBQXVCO0FBQ3RCLGlCQUFXLFVBRFc7QUFFdEIsaUJBQVcsV0FBVyxDQUFYLENBRlc7QUFHdEIsa0JBQVksVUFIVTtBQUl0QixhQUFPO0FBQ04sVUFBRyxDQURHLEVBQ0EsR0FBRztBQURILE9BSmU7QUFPdEIsaUJBQVcsV0FBVyxDQUFYLEVBQWMsQ0FBZCxJQUFtQixDQUFuQixHQUF1QixDQUF2QixHQUEyQixDQUFDLENBUGpCO0FBUXRCLGFBQU87QUFSZSxNQUF2QjtBQVdBO0FBRUQ7O0FBRUQsT0FBSSxNQUFKO0FBQ0EsaUNBQ0MsU0FBUyxNQUFUO0FBQ0Q7QUFDRDs7QUFHRCxrQkFBYSxXQUFiLENBQXlCLE9BQXpCO0FBQ0EsS0FBSSxPQUFKOztBQUVBLEtBQUksU0FBSjs7QUFFQSwrQkFDQyxTQUFTLFNBQVQ7O0FBRUQ7QUFDQSxLQUFJLGdCQUFnQjtBQUNuQixVQUFRLEdBRFcsRUFDTixNQUFNLEtBQUssUUFBTCxDQUFjLEdBRGQsRUFDbUIsbUJBQW1CLG1CQUFnQixjQUR0RCxFQUNzRSxnQkFBZ0IsbUJBQWdCLE1BQWhCLENBQXVCLE1BRDdHLEVBQ3FILGVBQWU7QUFEcEksRUFBcEI7QUFHQSxRQUFPLGFBQVA7QUFDQSxDQTdMRDs7QUErTEEsTUFBTSxTQUFOLENBQWdCLGtCQUFoQixHQUFxQyxJQUFyQzs7QUFFQSxNQUFNLFNBQU4sQ0FBZ0IsZ0JBQWhCLEdBQW9DLFlBQVk7QUFDL0MsUUFBTyxPQUFPLHFCQUFQLElBQ0wsT0FBTywyQkFERixJQUVMLE9BQU8sd0JBRkYsSUFHTCxPQUFPLHNCQUhGLElBSUwsT0FBTyx1QkFKRixJQUtMLFVBQVUsUUFBVixFQUFvQjtBQUNuQixTQUFPLFVBQVAsQ0FBa0IsUUFBbEIsRUFBNEIsT0FBTyxFQUFuQztBQUNBLEVBUEg7QUFRQSxDQVRrQyxFQUFuQzs7QUFXQSxNQUFNLFNBQU4sQ0FBZ0Isc0JBQWhCLEdBQTBDLFlBQVk7QUFDckQsUUFBTyxPQUFPLG9CQUFQLElBQ04sT0FBTyxpQ0FERCxJQUVOLE9BQU8sOEJBRkQsSUFHTixPQUFPLDRCQUhELElBSU4sT0FBTyw2QkFKRCxJQUtOLFlBTEQ7QUFNQSxDQVB3QyxFQUF6Qzs7QUFTQSxNQUFNLFNBQU4sQ0FBZ0Isa0JBQWhCLEdBQXFDLFVBQVUsRUFBVixFQUFjLEVBQWQsRUFBa0I7O0FBRXRELEtBQUksTUFBTSxJQUFWO0FBQ0EsS0FBSSxRQUFRLElBQVo7QUFDQSxLQUFJLFVBQVUsSUFBZDs7QUFFQSxLQUFJLEdBQUcsSUFBSCxDQUFRLE9BQVIsQ0FBZ0IsU0FBaEIsS0FBOEIsQ0FBbEMsRUFBcUM7QUFDcEMsVUFBUSxDQUFSO0FBQ0EsUUFBTSxHQUFHLENBQUgsQ0FBSyxPQUFMLEdBQWUsR0FBRyxDQUFILENBQUssT0FBTCxFQUFmLEdBQWdDLEdBQUcsQ0FBekM7QUFDQSxNQUFJLE9BQU8sR0FBRyxRQUFILENBQVksT0FBdkIsRUFBZ0M7QUFDL0IsV0FBUSxHQUFHLFFBQUgsQ0FBWSxPQUFaLENBQW9CLEdBQXBCLENBQVI7O0FBRUEsT0FBSSxDQUFDLE1BQU0sR0FBRyxDQUFULENBQUwsRUFBa0I7QUFDZCxRQUFJLFVBQVUsQ0FBZCxFQUNJLFVBQVUsQ0FBVixDQURKLEtBR0ksVUFBVyxHQUFHLENBQUgsR0FBTyxLQUFSLEdBQWlCLEdBQTNCO0FBQ1AsSUFMRCxNQU9JLFVBQVUsQ0FBVjtBQUNKO0FBQ0QsRUFmRCxNQWVPLElBQUksR0FBRyxJQUFILEtBQVksS0FBWixJQUFxQixHQUFHLElBQUgsS0FBWSxVQUFyQyxFQUFpRDtBQUN2RCxVQUFRLENBQVI7QUFDQSxPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksR0FBRyxVQUFILENBQWMsTUFBbEMsRUFBMEMsR0FBMUMsRUFBK0M7O0FBRTlDLE9BQUksQ0FBQyxNQUFNLEdBQUcsVUFBSCxDQUFjLENBQWQsRUFBaUIsQ0FBdkIsQ0FBTCxFQUNDLFNBQVMsR0FBRyxVQUFILENBQWMsQ0FBZCxFQUFpQixDQUExQjtBQUNEOztBQUVELE1BQUksQ0FBQyxNQUFNLEdBQUcsQ0FBVCxDQUFMLEVBQ0MsVUFBVyxHQUFHLENBQUgsR0FBTyxLQUFSLEdBQWlCLEdBQTNCLENBREQsS0FHQyxVQUFVLENBQVY7QUFDRDs7QUFFRCxRQUFPO0FBQ04sV0FBUyxPQURILEVBQ1ksT0FBTztBQURuQixFQUFQO0FBR0EsQ0F0Q0Q7O0FBd0NBLE1BQU0sU0FBTixDQUFnQix3QkFBaEIsR0FBMkMsVUFBVSxHQUFWLEVBQWUsRUFBZixFQUFtQixFQUFuQixFQUF1QixPQUF2QixFQUFnQyxpQkFBaEMsRUFBbUQ7QUFDN0Y7QUFDQSxLQUFJLFFBQVEsMEJBQVo7QUFDQSxLQUFJLFFBQVEsSUFBWjtBQUNBLHFCQUFvQixPQUFRLGlCQUFSLEtBQStCLFdBQS9CLEdBQTZDLENBQTdDLEdBQWlELGlCQUFyRTs7QUFFQSxLQUFJLENBQUMsR0FBRyxJQUFILENBQVEsT0FBUixDQUFnQixTQUFoQixLQUE4QixDQUE5QixJQUFvQyxHQUFHLElBQUgsS0FBWSxLQUFaLElBQXFCLEdBQUcsSUFBSCxLQUFZLFVBQXRFLE1BQXVGLElBQUksT0FBSixDQUFZLFVBQVosS0FBMkIsQ0FBM0IsSUFBZ0MsSUFBSSxPQUFKLENBQVksUUFBWixLQUF5QixDQUFoSixDQUFKLEVBQXdKO0FBQ3ZKLE1BQUksVUFBVSxVQUFkO0FBQ0EsTUFBSSxRQUFRLFFBQVo7QUFDQSxNQUFJLE1BQU0sSUFBVjs7QUFFQSxNQUFJLGtCQUFrQixLQUFLLGtCQUFMLENBQXdCLEVBQXhCLEVBQTRCLEVBQTVCLENBQXRCOztBQUVBLFVBQVEsTUFBTSxnQkFBZ0IsS0FBdEIsSUFBK0IsS0FBL0IsR0FBdUMsZ0JBQWdCLEtBQS9EO0FBQ0EsWUFBVSxNQUFNLGdCQUFnQixPQUF0QixJQUFpQyxPQUFqQyxHQUEyQyxnQkFBZ0IsT0FBckU7O0FBRUEsS0FBRztBQUNGLE9BQUksc0JBQXNCLEVBQTFCO0FBQ0EsT0FBSSxHQUFHLG1CQUFQLEVBQ0Msc0JBQXNCLEdBQUcsbUJBQXpCLENBREQsS0FFSztBQUNKLDBCQUFzQixRQUF0QjtBQUNBLFFBQUksbUJBQW1CLEtBQUssR0FBTCxDQUFTLEtBQUssSUFBTCxDQUFVLEtBQUssR0FBTCxDQUFTLElBQUksS0FBSyxHQUFMLENBQVMsT0FBVCxDQUFiLElBQWtDLEtBQUssSUFBakQsQ0FBVCxFQUFpRSxDQUFqRSxDQUF2Qjs7QUFFQSxRQUFJLE1BQU0sZ0JBQU4sS0FBMkIsQ0FBQyxTQUFTLGdCQUFULENBQWhDLEVBQ0MsbUJBQW1CLENBQW5COztBQUVELFNBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxnQkFBcEIsRUFBc0MsR0FBdEMsRUFBMkM7QUFDMUMsNEJBQXVCLEdBQXZCO0FBQ0E7QUFDRDs7QUFFRCxTQUFNLElBQUksT0FBSixDQUFZLFVBQVosRUFBd0IseUJBQWEsT0FBYixFQUFzQixtQkFBdEIsRUFBMkMsTUFBTSxZQUFqRCxDQUF4QixDQUFOO0FBQ0EsU0FBTSxJQUFJLE9BQUosQ0FBWSxRQUFaLEVBQXNCLHlCQUFhLEtBQWIsRUFBb0IsR0FBRyxrQkFBSCxHQUF3QixHQUFHLGtCQUEzQixHQUFnRCxnQkFBcEUsQ0FBdEIsQ0FBTjtBQUNBLEdBbEJELFFBa0JTLElBQUksT0FBSixDQUFZLFVBQVosS0FBMkIsQ0FBM0IsSUFBZ0MsSUFBSSxPQUFKLENBQVksUUFBWixLQUF5QixDQWxCbEU7QUFtQkE7O0FBR0QsS0FBSSxNQUFNLFNBQU4sR0FBTSxDQUFVLEVBQVYsRUFBYztBQUN2QixNQUFLLEdBQUcsQ0FBSCxNQUFVLElBQVYsSUFBa0IsR0FBRyxHQUFHLE1BQUgsR0FBWSxDQUFmLE1BQXNCLElBQXpDLElBQW1ELEdBQUcsQ0FBSCxNQUFVLElBQVYsSUFBa0IsR0FBRyxHQUFHLE1BQUgsR0FBWSxDQUFmLE1BQXNCLElBQS9GLEVBQ0MsT0FBTyxHQUFHLEtBQUgsQ0FBUyxDQUFULEVBQVksR0FBRyxNQUFILEdBQVksQ0FBeEIsQ0FBUDs7QUFFRCxNQUFJLE1BQU0sdUJBQVcsR0FBRyxLQUFILENBQVMsQ0FBVCxFQUFZLEdBQUcsTUFBSCxHQUFZLENBQXhCLENBQVgsQ0FBVjtBQUNBLFFBQU0sSUFBSSxPQUFKLENBQVksUUFBWixFQUFzQixpQkFBdEIsQ0FBTjs7QUFFQSxNQUFJLFFBQVEsSUFBWjs7QUFFQSxNQUFJO0FBQ0gsT0FBSSxRQUFRLElBQUksS0FBSixDQUFVLHlCQUFWLENBQVo7QUFDQSxPQUFJLFNBQVMsTUFBTSxNQUFOLEdBQWUsQ0FBNUIsRUFBK0I7QUFDOUIsWUFBUSx1QkFBVyxNQUFNLENBQU4sQ0FBWCxDQUFSO0FBQ0EsVUFBTSx1QkFBVyxNQUFNLENBQU4sQ0FBWCxDQUFOO0FBQ0E7QUFDRCxHQU5ELENBTUUsT0FBTyxDQUFQLEVBQVUsQ0FDWDs7QUFHRCxNQUFJLE1BQU0sSUFBVjs7QUFFQSxNQUFJLFFBQVEsT0FBWixFQUFxQjtBQUNwQixVQUFPLEdBQUcsS0FBSCxHQUFXLEdBQUcsS0FBZCxHQUFzQixHQUFHLEtBQUgsR0FBVyxHQUFHLEtBQWQsR0FBc0IsR0FBRyxTQUFILENBQWEsVUFBVSxHQUFHLFNBQUgsQ0FBYSxNQUFwQyxDQUFuRDtBQUNBOztBQUVELE1BQUksR0FBRyxjQUFILENBQWtCLEdBQWxCLENBQUosRUFDQyxNQUFNLEVBQU4sQ0FERCxLQUVLLElBQUksR0FBRyxjQUFILENBQWtCLEdBQWxCLENBQUosRUFDSixNQUFNLEVBQU4sQ0FESSxLQUVBLE9BQU8sRUFBUDs7QUFFTCxNQUFJLFFBQVEsSUFBSSxHQUFKLENBQVo7QUFDQSxNQUFJLFVBQVUsSUFBZCxFQUNDLFFBQVEsTUFBTSxLQUFOLENBQVI7O0FBRUQsTUFBSSxRQUFRLEdBQVosRUFBaUI7QUFDaEIsT0FBSSxNQUFNLEtBQU4sSUFBZSxNQUFNLFFBQU4sQ0FBZSxjQUFmLEtBQWtDLFVBQXJELEVBQ0MsT0FBTyx1QkFBVyxLQUFYLEVBQWtCLEdBQUcsa0JBQUgsR0FBd0IsR0FBRyxrQkFBM0IsR0FBZ0QsR0FBRyxrQkFBSCxHQUF3QixHQUFHLGtCQUEzQixHQUFnRCxNQUFNLEtBQU4sSUFBZSxNQUFNLEtBQU4sQ0FBWSxpQkFBM0IsR0FBK0MsTUFBTSxLQUFOLENBQVksaUJBQTNELEdBQStFLFdBQWpNLEVBQThNLE1BQU0sWUFBcE4sQ0FBUCxDQURELEtBR0MsT0FBTyx5QkFBYSxLQUFiLEVBQW9CLEdBQUcsa0JBQUgsR0FBd0IsR0FBRyxrQkFBM0IsR0FBZ0QsR0FBRyxrQkFBSCxHQUF3QixHQUFHLGtCQUEzQixHQUFnRCxnQkFBcEgsRUFBc0ksTUFBTSxZQUE1SSxDQUFQO0FBQ0QsR0FMRCxNQUtPLElBQUksUUFBUSxHQUFaLEVBQ04sT0FBTyx5QkFBYSxLQUFiLEVBQW9CLEdBQUcsa0JBQUgsR0FBd0IsR0FBRyxrQkFBM0IsR0FBZ0QsR0FBRyxrQkFBSCxHQUF3QixHQUFHLGtCQUEzQixHQUFnRCxnQkFBcEgsRUFBc0ksTUFBTSxZQUE1SSxDQUFQLENBRE0sS0FFRixJQUFJLFFBQVEsR0FBWixFQUNKLE9BQU8seUJBQWEsS0FBYixFQUFvQixHQUFHLGtCQUFILEdBQXdCLEdBQUcsa0JBQTNCLEdBQWdELEdBQUcsa0JBQUgsR0FBd0IsR0FBRyxrQkFBM0IsR0FBZ0QsZ0JBQXBILEVBQXNJLE1BQU0sWUFBNUksQ0FBUCxDQURJLEtBR0osT0FBTyxLQUFQO0FBQ0QsRUE5Q0Q7O0FBZ0RBLFFBQU8sSUFBSSxPQUFKLENBQVksS0FBWixFQUFtQixHQUFuQixDQUFQO0FBQ0EsQ0F2RkQ7O0FBMEZBLE1BQU0sU0FBTixDQUFnQixZQUFoQjs7QUFFQSxNQUFNLFNBQU4sQ0FBZ0IsWUFBaEI7O0FBRUEsTUFBTSxTQUFOLENBQWdCLG1CQUFoQjs7QUFFQSxNQUFNLFNBQU4sQ0FBZ0Isc0JBQWhCOztBQUVBLE1BQU0sU0FBTixDQUFnQixTQUFoQjs7QUFFQSxNQUFNLFNBQU4sQ0FBZ0IsZ0JBQWhCOztBQUVBLE1BQU0sU0FBTixDQUFnQixtQkFBaEI7O0FBRUEsTUFBTSxTQUFOLENBQWdCLFVBQWhCOztBQUVBLE1BQU0sU0FBTixDQUFnQixnQkFBaEI7O0FBRUEsTUFBTSxTQUFOLENBQWdCLGNBQWhCOztBQUVBLE1BQU0sU0FBTixDQUFnQixpQkFBaEI7O0FBRUEsTUFBTSxTQUFOLENBQWdCLG9CQUFoQjs7QUFFQSxNQUFNLFNBQU4sQ0FBZ0IsWUFBaEI7O0FBRUEsTUFBTSxTQUFOLENBQWdCLGFBQWhCOztBQUVBLE1BQU0sU0FBTixDQUFnQixpQkFBaEI7O0FBRUEsTUFBTSxTQUFOLENBQWdCLGlCQUFoQjs7QUFFQSxNQUFNLFNBQU4sQ0FBZ0IsY0FBaEI7O0FBRUEsTUFBTSxTQUFOLENBQWdCLGVBQWhCOztBQUVBLE1BQU0sU0FBTixDQUFnQixxQkFBaEI7O0FBRUEsTUFBTSxTQUFOLENBQWdCLFNBQWhCOztrQkFFZSxLOzs7Ozs7Ozs7QUN4ckdmOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxTQUFTLFdBQVQsQ0FBcUIsT0FBckIsRUFBOEI7O0FBRTVCLE1BQUksV0FBSjs7QUFFQSxNQUFJLFdBQVcsa0JBQVMsT0FBVCxDQUFmLEVBQWtDLGNBQWMsa0JBQVMsT0FBVCxDQUFkOztBQUVsQyxjQUFZLElBQVosQ0FBaUIsV0FBakIsQ0FBNkIsSUFBN0IsQ0FBa0MsSUFBbEMsRUFBd0MsYUFBeEMsRUFBdUQsV0FBdkQ7QUFFRDs7QUFFRCxtQkFBTyxXQUFQOztrQkFFZSxXOzs7Ozs7Ozs7QUNoQmY7Ozs7QUFDQTs7OztBQUVBLFNBQVMsVUFBVCxDQUFvQixLQUFwQixFQUEyQixPQUEzQixFQUFvQyxLQUFwQyxFQUEyQyxLQUEzQyxFQUFrRCxFQUFsRCxFQUFzRDtBQUNwRCxhQUFXLElBQVgsQ0FBZ0IsV0FBaEIsQ0FBNEIsSUFBNUIsQ0FBaUMsSUFBakMsRUFBdUMsWUFBdkMsRUFBcUQsT0FBckQsRUFBOEQsS0FBOUQ7O0FBRUEsT0FBSyxLQUFMLEdBQWEsS0FBYjtBQUNBLE9BQUssTUFBTCxHQUFjLE1BQU0sTUFBcEI7QUFDQSxPQUFLLElBQUwsR0FBWSxNQUFNLE1BQU4sQ0FBYSxHQUF6QjtBQUNBLE9BQUssS0FBTCxHQUFhLEtBQWI7QUFDQSxPQUFLLHNCQUFMLEdBQThCLENBQTlCO0FBQ0E7QUFDQSxPQUFLLEVBQUwsR0FBVSxFQUFWO0FBQ0EsT0FBSyxLQUFMLENBQVcsYUFBWCxDQUF5QixTQUF6QixDQUFtQyxFQUFuQyxJQUF5QztBQUN2QyxRQUFJLEVBRG1DLEVBQy9CLFlBQVksWUFEbUIsRUFDTCxpQkFBaUI7QUFEWixHQUF6QztBQUdBLE9BQUssWUFBTCxHQUFvQixFQUFwQjtBQUNBLE9BQUssUUFBTCxHQUFnQixFQUFoQjs7QUFFQSxPQUFLLEtBQUwsR0FBYSxJQUFiO0FBQ0EsT0FBSyxLQUFMLEdBQWEsSUFBYjs7QUFFQSxNQUFJLEtBQUssV0FBTCxLQUFxQixJQUF6QixFQUErQjtBQUM3QixRQUFJLEtBQUssSUFBTCxDQUFVLEtBQVYsQ0FBZ0IsT0FBaEIsQ0FBSixFQUNFLEtBQUssV0FBTCxHQUFtQixFQUFuQixDQURGLEtBR0UsS0FBSyxXQUFMLEdBQW1CLENBQW5CO0FBQ0g7O0FBR0QsT0FBSyxhQUFMLEdBQXFCLEtBQUssdUJBQUwsRUFBckI7O0FBRUEsTUFBSSxPQUFRLEtBQUssUUFBTCxDQUFjLGtCQUF0QixLQUE4QyxXQUFsRCxFQUErRDs7QUFFN0QsU0FBSyxrQkFBTCxHQUEwQixLQUFLLEtBQUwsQ0FBVyxlQUFYLENBQTJCLEtBQUssa0JBQWhDLENBQTFCO0FBQ0Q7QUFDRjs7QUFFRCxtQkFBTyxVQUFQOztBQUVBO0FBQ0EsV0FBVyxTQUFYLENBQXFCLHVCQUFyQixHQUErQyxZQUFZOztBQUV6RDtBQUNBOztBQUVBO0FBQ0EsTUFBSSxPQUFPLEtBQUssSUFBaEI7O0FBRUEsTUFBSSxTQUFTLFFBQVQsSUFBcUIsU0FBUyxNQUE5QixJQUF3QyxTQUFTLFVBQWpELElBQStELFNBQVMsUUFBeEUsSUFBb0YsU0FBUyxNQUE3RixJQUF1RyxTQUFTLFVBQWhILElBQThILFNBQVMsWUFBdkksSUFBdUosU0FBUyxlQUFoSyxJQUFtTCxTQUFTLGFBQTVMLElBQTZNLFNBQVMsUUFBdE4sSUFBa08sU0FBUyxTQUEzTyxJQUNDLFNBQVMsYUFEVixJQUMyQixTQUFTLGtCQURwQyxJQUMwRCxTQUFTLGdCQURuRSxJQUN1RixTQUFTLGdCQURoRyxJQUVDLFNBQVMsYUFGVixJQUUyQixTQUFTLE1BRnBDLElBRThDLFNBQVMsYUFGdkQsSUFFd0UsU0FBUyxXQUZqRixJQUVnRyxTQUFTLGlCQUY3RyxFQUVnSTtBQUM5SCxXQUFPLFFBQVA7QUFDRCxHQUpELE1BS0ssSUFBSSxTQUFTLEtBQVQsSUFBa0IsU0FBUyxZQUEzQixJQUEyQyxTQUFTLGVBQXBELElBQXVFLFNBQVMsVUFBcEYsRUFBZ0c7O0FBRW5HLFdBQU8sV0FBUDtBQUNELEdBSEksTUFJQSxJQUFJLFNBQVMsS0FBVCxJQUFrQixTQUFTLFVBQTNCLElBQXlDLFNBQVMsUUFBdEQsRUFBZ0U7QUFDbkUsV0FBTyxNQUFQO0FBQ0QsR0FGSSxNQUVFO0FBQ0wsV0FBTyxPQUFQLENBQWUsR0FBZixDQUFtQix5QkFBeUIsSUFBNUM7QUFDQSxXQUFPLElBQVA7QUFDRDtBQUNGLENBdkJEOztBQXlCQSxXQUFXLHNCQUFYLEdBQW9DLFVBQVUsSUFBVixFQUFnQjs7QUFFbEQ7O0FBRUEsTUFBSSxTQUFTLFFBQVQsSUFBcUIsU0FBUyxlQUE5QixJQUFpRCxTQUFTLGFBQTFELElBQTJFLFNBQVMsS0FBcEYsSUFBNkYsU0FBUyxZQUF0RyxJQUFzSCxTQUFTLGVBQS9ILElBQ0MsU0FBUyxRQURWLElBQ3NCLFNBQVMsU0FEL0IsSUFFQyxTQUFTLGtCQUZWLElBRWdDLFNBQVMsZ0JBRnpDLElBRTZELFNBQVMsVUFGdEUsSUFHQyxTQUFTLGFBSFYsSUFHMkIsU0FBUyxNQUhwQyxJQUc4QyxTQUFTLGFBSHZELElBR3dFLFNBQVMsVUFIakYsSUFHK0YsU0FBUyxXQUh4RyxJQUd1SCxTQUFTLGlCQUhwSSxFQUd1SjtBQUNySixXQUFPLFFBQVA7QUFDRCxHQUxELE1BTUssSUFBSSxTQUFTLE1BQVQsSUFBbUIsU0FBUyxVQUE1QixJQUEwQyxTQUFTLFFBQW5ELElBQStELFNBQVMsS0FBeEUsSUFBaUYsU0FBUyxVQUExRixJQUF3RyxTQUFTLFFBQXJILEVBQStIO0FBQ2xJLFdBQU8sUUFBUDtBQUNELEdBRkksTUFFRSxJQUFJLFNBQVMsTUFBVCxJQUFtQixTQUFTLFlBQTVCLElBQTRDLFNBQVMsYUFBckQsSUFBc0UsU0FBUyxnQkFBbkYsRUFBcUc7QUFDMUcsV0FBTyxVQUFQO0FBQ0QsR0FGTSxNQUVBO0FBQ0wsV0FBTyxPQUFQLENBQWUsR0FBZixDQUFtQix5QkFBeUIsSUFBNUM7QUFDQSxXQUFPLElBQVA7QUFDRDtBQUNGLENBbEJEOztBQW9CQTtBQUNBO0FBQ0EsV0FBVyxTQUFYLENBQXFCLGVBQXJCLEdBQXVDLFVBQVUsQ0FBVixFQUFhLFdBQWIsRUFBMEI7O0FBRS9ELE1BQUksQ0FBQyxLQUFLLFVBQU4sSUFBb0IsS0FBSyxVQUFMLENBQWdCLE1BQWhCLEtBQTJCLENBQW5ELEVBQXNELE9BQU8sSUFBUDs7QUFFdEQsTUFBSSxlQUFlO0FBQ2pCLGVBQVcsSUFETSxFQUNBLFVBQVUsUUFEVixFQUNvQixPQUFPO0FBRDNCLEdBQW5CO0FBR0EsTUFBSSxZQUFZLElBQWhCOztBQUVBLE1BQUksSUFBSSxDQUFSO0FBQ0EsTUFBSSxJQUFJLENBQVI7QUFDQSxNQUFJLFlBQVksQ0FBaEIsQ0FYK0QsQ0FXNUM7O0FBRW5CLE1BQUksbUJBQW1CLFFBQXZCO0FBQ0EsTUFBSSxtQkFBbUIsQ0FBdkI7QUFBQSxNQUEwQixvQkFBb0IsQ0FBOUM7QUFDQSxNQUFJLGVBQWUsSUFBbkI7QUFDQSxNQUFJLG1CQUFtQixDQUF2Qjs7QUFFQSxNQUFJLEtBQUssS0FBTCxDQUFXLFFBQVgsQ0FBb0IsYUFBcEIsS0FBc0MsTUFBMUMsRUFBa0Q7O0FBRWhEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQUksU0FBVSxLQUFLLFVBQUwsQ0FBZ0IsS0FBSyxVQUFMLENBQWdCLE1BQWhCLEdBQXlCLENBQXpDLEVBQTRDLENBQTVDLEdBQWdELEtBQUssVUFBTCxDQUFnQixDQUFoQixFQUFtQixDQUFqRjs7QUFFQSxRQUFJLFNBQVMsQ0FBYixFQUNFLG1CQUFtQixLQUFLLEdBQUwsQ0FBUyxLQUFLLEdBQUwsQ0FBVSxDQUFDLEtBQUssVUFBTCxDQUFnQixNQUFoQixHQUF5QixDQUExQixJQUErQixNQUEvQixJQUF5QyxJQUFJLEtBQUssVUFBTCxDQUFnQixDQUFoQixFQUFtQixDQUFoRSxDQUFELElBQXdFLENBQWpGLEVBQW9GLENBQXBGLENBQVQsRUFBaUcsS0FBSyxVQUFMLENBQWdCLE1BQWpILENBQW5CLENBREYsS0FHRSxtQkFBbUIsQ0FBbkI7O0FBRUY7QUFDRDs7QUFFRCxTQUFPLElBQVAsRUFBYTs7QUFFWCxRQUFLLFlBQVksQ0FBYixHQUFrQixtQkFBbUIsQ0FBckMsR0FBeUMsbUJBQW1CLENBQWhFOztBQUVBLFFBQUksS0FBSyxDQUFMLElBQVUsSUFBSSxLQUFLLFVBQUwsQ0FBZ0IsTUFBbEMsRUFBMEM7O0FBRXhDLGtCQUFZLEtBQUssVUFBTCxDQUFnQixDQUFoQixDQUFaOztBQUVBLFVBQUksV0FBVyxLQUFLLEdBQUwsQ0FBUyxVQUFVLENBQVYsR0FBYyxDQUF2QixDQUFmOztBQUVBLFVBQUksV0FBVyxhQUFhLFFBQTVCLEVBQXNDO0FBQ3BDLHFCQUFhLFNBQWIsR0FBeUIsU0FBekI7QUFDQSxxQkFBYSxRQUFiLEdBQXdCLFFBQXhCO0FBQ0EscUJBQWEsS0FBYixHQUFxQixDQUFyQjtBQUNEOztBQUVELFVBQUksWUFBWSxLQUFLLEdBQUwsQ0FBUyxVQUFVLENBQVYsR0FBYyxDQUF2QixDQUFoQjtBQUNBLFVBQUksYUFBYSxnQkFBakIsRUFDRSxtQkFBbUIsU0FBbkIsQ0FERixLQUVLO0FBQ0gsWUFBSSxZQUFZLENBQWhCLEVBQ0UsbUJBREYsS0FHRTtBQUNIOztBQUVELFVBQUksbUJBQW1CLFlBQW5CLElBQW1DLG9CQUFvQixZQUEzRCxFQUNFO0FBR0gsS0ExQkQsTUEwQk8sSUFBSSxtQkFBbUIsQ0FBbkIsR0FBdUIsQ0FBdkIsSUFBNEIsbUJBQW1CLENBQW5CLElBQXdCLEtBQUssVUFBTCxDQUFnQixNQUF4RSxFQUNMOztBQUVGLFFBQUksY0FBYyxDQUFDLENBQW5CLEVBQXNCO0FBQ3BCO0FBQ0Esa0JBQVksQ0FBWjtBQUNELEtBSEQsTUFJRSxZQUFZLENBQUMsQ0FBYjtBQUNIOztBQUdELE1BQUksQ0FBQyxXQUFELElBQWdCLGFBQWEsU0FBYixDQUF1QixDQUF2QixLQUE2QixDQUFqRCxFQUNFLE9BQU8sWUFBUCxDQURGLEtBRUssSUFBSSxlQUFlLGFBQWEsU0FBYixLQUEyQixJQUE5QyxFQUNILE9BQU8sWUFBUCxDQURHLEtBR0gsT0FBTyxJQUFQO0FBQ0gsQ0FwRkQ7O0FBc0ZBO0FBQ0EsV0FBVyxTQUFYLENBQXFCLGdCQUFyQixHQUF3QyxVQUFVLENBQVYsRUFBYSxDQUFiLEVBQWdCLFVBQWhCLEVBQTRCOztBQUVsRSxNQUFJLENBQUMsS0FBSyxVQUFOLElBQW9CLEtBQUssVUFBTCxDQUFnQixNQUFoQixLQUEyQixDQUFuRCxFQUFzRCxPQUFPLElBQVA7O0FBRXRELGVBQWEsY0FBYyxLQUEzQjtBQUNBLE1BQUksVUFBVSxFQUFkO0FBQ0EsTUFBSSxJQUFJLENBQVI7QUFBQSxNQUFXLElBQUksQ0FBZjtBQUNBLE1BQUksWUFBWSxDQUFoQixDQVBrRSxDQU8vQztBQUNuQixNQUFJLGlCQUFpQixLQUFyQjtBQUNBLE1BQUksbUJBQW1CLFFBQXZCO0FBQ0EsTUFBSSxtQkFBbUIsQ0FBdkI7QUFBQSxNQUEwQixvQkFBb0IsQ0FBOUM7QUFDQSxNQUFJLGVBQWUsSUFBbkI7QUFDQSxNQUFJLG1CQUFtQixDQUF2Qjs7QUFFQSxNQUFJLEtBQUssS0FBTCxDQUFXLFFBQVgsQ0FBb0IsYUFBcEIsS0FBc0MsTUFBMUMsRUFBa0Q7QUFDaEQsUUFBSSxPQUFPLEtBQUssS0FBTCxDQUFXLEtBQVgsQ0FBaUIsV0FBakIsQ0FBNkIsRUFBRSxHQUFHLENBQUwsRUFBUSxHQUFHLENBQVgsRUFBN0IsQ0FBWDs7QUFFQSxRQUFJLFNBQVUsS0FBSyxVQUFMLENBQWdCLEtBQUssVUFBTCxDQUFnQixNQUFoQixHQUF5QixDQUF6QyxFQUE0QyxDQUE1QyxHQUFnRCxLQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsRUFBbUIsQ0FBakY7O0FBRUEsUUFBSSxTQUFTLENBQWIsRUFDRSxtQkFBbUIsS0FBSyxHQUFMLENBQVMsS0FBSyxHQUFMLENBQVUsQ0FBQyxLQUFLLFVBQUwsQ0FBZ0IsTUFBaEIsR0FBeUIsQ0FBMUIsSUFBK0IsTUFBL0IsSUFBeUMsT0FBTyxLQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsRUFBbUIsQ0FBbkUsQ0FBRCxJQUEyRSxDQUFwRixFQUF1RixDQUF2RixDQUFULEVBQW9HLEtBQUssVUFBTCxDQUFnQixNQUFwSCxDQUFuQixDQURGLEtBR0UsbUJBQW1CLENBQW5COztBQUVGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Q7O0FBRUQsU0FBTyxJQUFQLEVBQWE7O0FBRVg7QUFDQSxRQUFLLFlBQVksQ0FBYixHQUFrQixtQkFBbUIsQ0FBckMsR0FBeUMsbUJBQW1CLENBQWhFOztBQUVBLFFBQUksS0FBSyxDQUFMLElBQVUsSUFBSSxLQUFLLFVBQUwsQ0FBZ0IsTUFBbEMsRUFBMEM7O0FBRXhDLFVBQUksS0FBSyxLQUFLLFlBQUwsQ0FBa0IsQ0FBbEIsQ0FBVDtBQUNBLFVBQUksYUFBYSxLQUFLLEtBQUwsQ0FBVyxhQUFYLENBQXlCLFNBQXpCLENBQW1DLEVBQW5DLENBQWpCO0FBQ0EsVUFBSSxZQUFZLEtBQUssVUFBTCxDQUFnQixDQUFoQixDQUFoQjtBQUNBLFVBQUksV0FBVyxJQUFmOztBQUVBLFVBQUksVUFBSixFQUFnQjs7QUFFZCxnQkFBUSxLQUFLLElBQWI7O0FBRUUsZUFBSyxRQUFMO0FBQ0EsZUFBSyxlQUFMO0FBQ0EsZUFBSyxrQkFBTDtBQUNBLGVBQUssS0FBTDtBQUNBLGVBQUssWUFBTDtBQUNBLGVBQUssZUFBTDtBQUNBLGVBQUssYUFBTDtBQUNBLGVBQUssVUFBTDs7QUFFRSxnQkFBSSxLQUFLLFdBQVcsRUFBaEIsSUFBc0IsS0FBSyxXQUFXLEVBQXRDLElBQTRDLEtBQUssV0FBVyxFQUE1RCxJQUFrRSxLQUFLLFdBQVcsRUFBdEYsRUFBMEY7QUFDeEYsc0JBQVEsSUFBUixDQUFhO0FBQ1gsMkJBQVcsU0FEQTtBQUVYLGdDQUFnQixDQUZMO0FBR1gsNEJBQVksSUFIRDtBQUlYLDBCQUFVLEtBQUssR0FBTCxDQUFTLEtBQUssR0FBTCxDQUFTLFdBQVcsRUFBWCxHQUFnQixDQUF6QixDQUFULEVBQXNDLEtBQUssR0FBTCxDQUFTLFdBQVcsRUFBWCxHQUFnQixDQUF6QixDQUF0QyxFQUFtRSxLQUFLLEdBQUwsQ0FBUyxXQUFXLEVBQVgsR0FBZ0IsQ0FBekIsQ0FBbkUsRUFBZ0csS0FBSyxHQUFMLENBQVMsV0FBVyxFQUFYLEdBQWdCLENBQXpCLENBQWhHO0FBQ1Y7QUFMVyxlQUFiOztBQVFBLCtCQUFpQixJQUFqQjtBQUNEO0FBQ0Q7O0FBRUYsZUFBSyxNQUFMO0FBQ0EsZUFBSyxVQUFMO0FBQ0EsZUFBSyxRQUFMO0FBQ0EsZUFBSyxNQUFMO0FBQ0EsZUFBSyxVQUFMO0FBQ0EsZUFBSyxhQUFMO0FBQ0EsZUFBSyxnQkFBTDtBQUNBLGVBQUssWUFBTDtBQUNBLGVBQUssU0FBTDtBQUNFLGdCQUFJLGFBQWEsd0JBQVksWUFBWixFQUEwQixTQUExQixFQUFxQyxJQUFyQyxLQUE4QyxDQUEvRDtBQUNBLGdCQUFJLGVBQWUsYUFBYSxFQUFiLEdBQWtCLFVBQXJDOztBQUVBLHVCQUFXLEtBQUssSUFBTCxDQUFVLEtBQUssR0FBTCxDQUFTLFdBQVcsRUFBWCxHQUFnQixDQUF6QixFQUE0QixDQUE1QixJQUFpQyxLQUFLLEdBQUwsQ0FBUyxXQUFXLEVBQVgsR0FBZ0IsQ0FBekIsRUFBNEIsQ0FBNUIsQ0FBM0MsQ0FBWDtBQUNBLGdCQUFJLFlBQVksWUFBaEIsRUFBOEI7QUFDNUIsc0JBQVEsSUFBUixDQUFhO0FBQ1gsMkJBQVcsU0FEQTtBQUVYLGdDQUFnQixDQUZMO0FBR1gsNEJBQVksSUFIRDtBQUlYLDBCQUFVO0FBSkMsZUFBYjtBQU1EOztBQUVELGdCQUFJLFlBQVksS0FBSyxHQUFMLENBQVMsV0FBVyxFQUFYLEdBQWdCLENBQXpCLENBQWhCO0FBQ0EsZ0JBQUksYUFBYSxnQkFBakIsRUFDRSxtQkFBbUIsU0FBbkIsQ0FERixLQUVLO0FBQ0gsa0JBQUksWUFBWSxDQUFoQixFQUNFLG1CQURGLEtBR0U7QUFDSDs7QUFFRCxnQkFBSSxZQUFZLGFBQWEsQ0FBN0IsRUFBZ0M7QUFDOUIsK0JBQWlCLElBQWpCO0FBQ0Q7O0FBRUQ7O0FBRUYsZUFBSyxXQUFMO0FBQ0EsZUFBSyxpQkFBTDs7QUFFRSxnQkFBSSxhQUFhLHdCQUFZLFlBQVosRUFBMEIsU0FBMUIsRUFBcUMsSUFBckMsS0FBOEMsQ0FBL0Q7QUFDQSxnQkFBSSxlQUFlLGFBQWEsRUFBYixHQUFrQixVQUFyQzs7QUFFQSx1QkFBVyxLQUFLLEdBQUwsQ0FBUyxLQUFLLElBQUwsQ0FBVSxLQUFLLEdBQUwsQ0FBUyxXQUFXLEVBQVgsR0FBZ0IsQ0FBekIsRUFBNEIsQ0FBNUIsSUFBaUMsS0FBSyxHQUFMLENBQVMsV0FBVyxFQUFYLEdBQWdCLENBQXpCLEVBQTRCLENBQTVCLENBQTNDLENBQVQsRUFBcUYsS0FBSyxJQUFMLENBQVUsS0FBSyxHQUFMLENBQVMsV0FBVyxFQUFYLEdBQWdCLENBQXpCLEVBQTRCLENBQTVCLElBQWlDLEtBQUssR0FBTCxDQUFTLFdBQVcsRUFBWCxHQUFnQixDQUF6QixFQUE0QixDQUE1QixDQUEzQyxDQUFyRixDQUFYO0FBQ0EsZ0JBQUksWUFBWSxZQUFoQixFQUE4QjtBQUM1QixzQkFBUSxJQUFSLENBQWE7QUFDWCwyQkFBVyxTQURBO0FBRVgsZ0NBQWdCLENBRkw7QUFHWCw0QkFBWSxJQUhEO0FBSVgsMEJBQVU7QUFKQyxlQUFiO0FBTUQ7O0FBRUQsZ0JBQUksWUFBWSxLQUFLLEdBQUwsQ0FBUyxXQUFXLEVBQVgsR0FBZ0IsQ0FBekIsQ0FBaEI7QUFDQSxnQkFBSSxhQUFhLGdCQUFqQixFQUNFLG1CQUFtQixTQUFuQixDQURGLEtBRUs7QUFDSCxrQkFBSSxZQUFZLENBQWhCLEVBQ0UsbUJBREYsS0FHRTtBQUNIOztBQUVELGdCQUFJLFlBQVksYUFBYSxDQUE3QixFQUFnQztBQUM5QiwrQkFBaUIsSUFBakI7QUFDRDs7QUFFRDs7QUFFRixlQUFLLFFBQUw7QUFDRSxnQkFBSSxhQUFhLFdBQVcsSUFBNUI7QUFDQSx1QkFBVyxLQUFLLElBQUwsQ0FBVSxLQUFLLEdBQUwsQ0FBUyxXQUFXLEVBQVgsR0FBZ0IsQ0FBekIsRUFBNEIsQ0FBNUIsSUFBaUMsS0FBSyxHQUFMLENBQVMsV0FBVyxFQUFYLEdBQWdCLENBQXpCLEVBQTRCLENBQTVCLENBQTNDLENBQVg7QUFDQSxnQkFBSSxZQUFZLGFBQWEsQ0FBN0IsRUFBZ0M7QUFDOUIsc0JBQVEsSUFBUixDQUFhO0FBQ1gsMkJBQVcsU0FEQTtBQUVYLGdDQUFnQixDQUZMO0FBR1gsNEJBQVksSUFIRDtBQUlYLDBCQUFVO0FBSkMsZUFBYjs7QUFPQSwrQkFBaUIsSUFBakI7QUFDRDtBQUNEOztBQUVGLGVBQUssS0FBTDtBQUNBLGVBQUssVUFBTDtBQUNFLGdCQUFJLFNBQVMsV0FBVyxNQUF4QjtBQUNBLGdCQUFJLGNBQWMsS0FBSyxJQUFMLEtBQWMsVUFBZCxHQUEyQixXQUFXLGtCQUFYLEdBQWdDLFdBQVcsTUFBdEUsR0FBK0UsQ0FBakc7O0FBRUEsdUJBQVcsS0FBSyxJQUFMLENBQVUsS0FBSyxHQUFMLENBQVMsT0FBTyxDQUFQLEdBQVcsQ0FBcEIsRUFBdUIsQ0FBdkIsSUFBNEIsS0FBSyxHQUFMLENBQVMsT0FBTyxDQUFQLEdBQVcsQ0FBcEIsRUFBdUIsQ0FBdkIsQ0FBdEMsQ0FBWDtBQUNBLGdCQUFJLFdBQVcsV0FBVyxNQUF0QixJQUFnQyxXQUFXLFdBQS9DLEVBQTREOztBQUUxRCxrQkFBSSxTQUFTLElBQUksT0FBTyxDQUF4QjtBQUNBLGtCQUFJLFNBQVMsSUFBSSxPQUFPLENBQXhCO0FBQ0Esa0JBQUksUUFBUSxLQUFLLEtBQUwsQ0FBVyxNQUFYLEVBQW1CLE1BQW5CLENBQVo7O0FBRUEsa0JBQUksUUFBUSxDQUFaLEVBQ0UsU0FBUyxLQUFLLEVBQUwsR0FBVSxDQUFuQjs7QUFFRixzQkFBUSxPQUFPLENBQUMsQ0FBRSxRQUFRLEtBQUssRUFBYixHQUFrQixHQUFsQixHQUF3QixHQUF6QixHQUFnQyxHQUFqQyxJQUF3QyxHQUF6QyxFQUE4QyxPQUE5QyxDQUFzRCxFQUF0RCxDQUFQLENBQVI7QUFDQTs7O0FBR0Esa0JBQUksYUFBYSxPQUFPLENBQUMsQ0FBRSxXQUFXLFVBQVgsR0FBd0IsS0FBSyxFQUE3QixHQUFrQyxHQUFsQyxHQUF3QyxHQUF6QyxHQUFnRCxHQUFqRCxJQUF3RCxHQUF6RCxFQUE4RCxPQUE5RCxDQUFzRSxFQUF0RSxDQUFQLENBQWpCO0FBQ0Esa0JBQUksV0FBVyxPQUFPLENBQUMsQ0FBRSxXQUFXLFFBQVgsR0FBc0IsS0FBSyxFQUEzQixHQUFnQyxHQUFoQyxHQUFzQyxHQUF2QyxHQUE4QyxHQUEvQyxJQUFzRCxHQUF2RCxFQUE0RCxPQUE1RCxDQUFvRSxFQUFwRSxDQUFQLENBQWY7O0FBRUE7QUFDQSxrQkFBSSxhQUFhLENBQWIsSUFBa0IsV0FBVyxRQUFYLEdBQXNCLENBQTVDLEVBQStDO0FBQzdDLDJCQUFXLEdBQVg7QUFDRDs7QUFFRCxrQkFBSSxjQUFjLFFBQWQsSUFBMEIsVUFBVSxDQUFWLEtBQWdCLENBQTlDLEVBQWlEO0FBQy9DLDRCQUFZLEdBQVo7O0FBRUEsb0JBQUksUUFBUSxVQUFaLEVBQ0UsU0FBUyxHQUFUO0FBQ0g7O0FBR0Qsa0JBQUksUUFBUSxVQUFSLElBQXNCLFFBQVEsUUFBbEMsRUFBNEM7QUFDMUMsd0JBQVEsSUFBUixDQUFhO0FBQ1gsNkJBQVcsU0FEQTtBQUVYLGtDQUFnQixDQUZMO0FBR1gsOEJBQVksSUFIRDtBQUlYLDRCQUFVO0FBSkMsaUJBQWI7O0FBT0EsaUNBQWlCLElBQWpCO0FBQ0Q7QUFFRjs7QUFFRDs7QUFFRixlQUFLLGFBQUw7QUFDRSxnQkFBTSxLQUFNLFdBQVcsRUFBWCxHQUFnQixXQUFXLGVBQVgsR0FBNkIsQ0FBcEQsSUFBNEQsS0FBTSxXQUFXLEVBQVgsR0FBZ0IsV0FBVyxlQUFYLEdBQTZCLENBQS9HLElBQ0MsS0FBSyxXQUFXLEVBQVgsR0FBZ0IsV0FBVyxlQUFYLEdBQTZCLENBRG5ELElBQzBELEtBQUssV0FBVyxFQUFYLEdBQWdCLFdBQVcsZUFBWCxHQUE2QixDQUQ3RyxJQUVFLEtBQUssR0FBTCxDQUFTLFdBQVcsRUFBWCxHQUFnQixDQUFoQixHQUFvQixXQUFXLEVBQS9CLEdBQW9DLENBQTdDLElBQWtELFdBQVcsZUFBN0QsSUFBaUYsS0FBSyxXQUFXLEVBQWhCLElBQXNCLEtBQUssV0FBVyxFQUY3SCxFQUVtSTtBQUNqSSxzQkFBUSxJQUFSLENBQWE7QUFDWCwyQkFBVyxTQURBO0FBRVgsZ0NBQWdCLENBRkw7QUFHWCw0QkFBWSxJQUhEO0FBSVgsMEJBQVUsS0FBSyxHQUFMLENBQVMsS0FBSyxHQUFMLENBQVMsV0FBVyxFQUFYLEdBQWdCLENBQXpCLENBQVQsRUFBc0MsS0FBSyxHQUFMLENBQVMsV0FBVyxFQUFYLEdBQWdCLENBQXpCLENBQXRDLEVBQW1FLEtBQUssR0FBTCxDQUFTLFdBQVcsRUFBWCxHQUFnQixDQUF6QixDQUFuRSxFQUFnRyxLQUFLLEdBQUwsQ0FBUyxXQUFXLEVBQVgsR0FBZ0IsQ0FBekIsQ0FBaEc7QUFDVjtBQUxXLGVBQWI7O0FBUUEsK0JBQWlCLElBQWpCO0FBQ0Q7QUFDRDs7QUFFRixlQUFLLE1BQUw7O0FBRUUsZ0JBQUssS0FBSyxHQUFMLENBQVMsV0FBVyxFQUFYLEdBQWdCLENBQWhCLEdBQW9CLFdBQVcsRUFBL0IsR0FBb0MsQ0FBN0MsSUFBa0QsV0FBVyxlQUE3RCxJQUFpRixLQUFLLFdBQVcsRUFBaEIsSUFBc0IsS0FBSyxXQUFXLEVBQXhILElBRUUsS0FBSyxXQUFXLEVBQWhCLElBQXVCLEtBQUssQ0FBQyxXQUFXLEVBQVgsR0FBZ0IsV0FBVyxFQUE1QixJQUFrQyxDQUE5RCxJQUNFLEtBQUssV0FBVyxFQUFYLEdBQWdCLFdBQVcsZUFBWCxHQUE2QixDQURwRCxJQUMyRCxLQUFLLFdBQVcsRUFBWCxHQUFnQixXQUFXLGVBQVgsR0FBNkIsQ0FIL0csSUFLRyxLQUFLLENBQUMsV0FBVyxFQUFYLEdBQWdCLFdBQVcsRUFBNUIsSUFBa0MsQ0FBeEMsSUFBK0MsS0FBSyxXQUFXLEVBQS9ELElBQ0UsS0FBSyxXQUFXLEVBQVgsR0FBZ0IsV0FBVyxlQUFYLEdBQTZCLENBRHBELElBQzJELEtBQUssV0FBVyxFQUFYLEdBQWdCLFdBQVcsZUFBWCxHQUE2QixDQU5uSCxFQU13SDs7QUFFdEgsc0JBQVEsSUFBUixDQUFhO0FBQ1gsMkJBQVcsU0FEQTtBQUVYLGdDQUFnQixDQUZMO0FBR1gsNEJBQVksSUFIRDtBQUlYLDBCQUFVLEtBQUssR0FBTCxDQUFTLEtBQUssR0FBTCxDQUFTLFdBQVcsRUFBWCxHQUFnQixDQUF6QixDQUFULEVBQXNDLEtBQUssR0FBTCxDQUFTLFdBQVcsRUFBWCxHQUFnQixDQUF6QixDQUF0QyxFQUFtRSxLQUFLLEdBQUwsQ0FBUyxXQUFXLEVBQVgsR0FBZ0IsQ0FBekIsQ0FBbkUsRUFBZ0csS0FBSyxHQUFMLENBQVMsV0FBVyxFQUFYLEdBQWdCLENBQXpCLENBQWhHO0FBQ1Y7QUFMVyxlQUFiOztBQVFBLCtCQUFpQixJQUFqQjtBQUNEO0FBQ0Q7O0FBbk1KOztBQXVNQSxZQUFJLGtCQUFtQixtQkFBbUIsWUFBbkIsSUFBbUMsb0JBQW9CLFlBQTlFLEVBQ0U7QUFDSDtBQUVGLEtBcE5ELE1Bb05PLElBQUksbUJBQW1CLENBQW5CLEdBQXVCLENBQXZCLElBQTRCLG1CQUFtQixDQUFuQixJQUF3QixLQUFLLFVBQUwsQ0FBZ0IsTUFBeEUsRUFDTDs7QUFFRixRQUFJLGNBQWMsQ0FBQyxDQUFuQixFQUFzQjtBQUNwQjtBQUNBLGtCQUFZLENBQVo7QUFDRCxLQUhELE1BSUUsWUFBWSxDQUFDLENBQWI7QUFFSDs7QUFJRCxNQUFJLGdCQUFnQixJQUFwQjs7QUFFQSxPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUN2QyxRQUFJLENBQUMsYUFBTCxFQUFvQjtBQUNsQixzQkFBZ0IsUUFBUSxDQUFSLENBQWhCO0FBQ0QsS0FGRCxNQUVPLElBQUksUUFBUSxDQUFSLEVBQVcsUUFBWCxJQUF1QixjQUFjLFFBQXpDLEVBQW1EO0FBQ3hELHNCQUFnQixRQUFRLENBQVIsQ0FBaEI7QUFDRDtBQUNGOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxTQUFPLGFBQVA7QUFDRCxDQXZSRDs7QUF5UkEsV0FBVyxTQUFYLENBQXFCLG1CQUFyQixHQUEyQyxVQUFVLEtBQVYsRUFBaUIsQ0FBakIsRUFBb0IsQ0FBcEIsRUFBdUIsR0FBdkIsRUFBNEI7QUFDckUsTUFBSSxhQUFhLEtBQUssVUFBdEI7QUFDQSxNQUFJLGFBQWEsSUFBakI7O0FBRUEsTUFBSSxjQUFjLFdBQVcsS0FBWCxFQUFrQixXQUFsQixHQUFnQyxXQUFXLEtBQVgsRUFBa0IsV0FBbEQsR0FBZ0UsV0FBVyxXQUFYLEdBQXlCLFdBQVcsV0FBcEMsR0FBa0QsV0FBVyxLQUFYLEVBQWtCLEtBQWxCLEdBQTBCLFdBQVcsS0FBWCxFQUFrQixLQUE1QyxHQUFvRCxXQUFXLEtBQVgsR0FBbUIsV0FBVyxLQUE5QixHQUFzQyxXQUFXLFNBQVgsQ0FBcUIsUUFBUSxXQUFXLFNBQVgsQ0FBcUIsTUFBbEQsQ0FBOU47QUFDQSxNQUFJLG9CQUFvQixXQUFXLEtBQVgsRUFBa0IsaUJBQWxCLEdBQXNDLFdBQVcsS0FBWCxFQUFrQixpQkFBeEQsR0FBNEUsV0FBVyxpQkFBWCxHQUErQixXQUFXLGlCQUExQyxHQUE4RCxJQUFsSztBQUNBLE1BQUksd0JBQXdCLFdBQVcsS0FBWCxFQUFrQixxQkFBbEIsR0FBMEMsV0FBVyxLQUFYLEVBQWtCLHFCQUE1RCxHQUFvRixXQUFXLHFCQUFYLEdBQW1DLFdBQVcscUJBQTlDLEdBQXNFLElBQXRMO0FBQ0EsTUFBSSxhQUFhLFdBQVcsS0FBWCxFQUFrQixVQUFsQixHQUErQixXQUFXLEtBQVgsRUFBa0IsVUFBakQsR0FBOEQsV0FBVyxVQUExRjtBQUNBLE1BQUksYUFBYSxXQUFXLEtBQVgsRUFBa0IsVUFBbEIsR0FBK0IsV0FBVyxLQUFYLEVBQWtCLFVBQWpELEdBQThELFdBQVcsVUFBMUY7O0FBR0EsU0FBTztBQUNMLE9BQUcsQ0FERSxFQUNDLEdBQUcsQ0FESixFQUNPLEtBQUssR0FEWjtBQUVMLFVBQU0sVUFGRDtBQUdMLFVBQU0sVUFIRDtBQUlMLFdBQU8sV0FKRjtBQUtMLGlCQUFhLGlCQUxSO0FBTUwscUJBQWlCO0FBTlosR0FBUDtBQVFELENBbkJEOztrQkFxQmUsVTs7Ozs7Ozs7O0FDN2RmOztBQUVBLFNBQVMsWUFBVCxDQUFzQixLQUF0QixFQUE2QjtBQUMzQixPQUFLLEtBQUwsR0FBYSxLQUFiO0FBQ0EsT0FBSyxZQUFMLEdBQW9CLENBQXBCO0FBQ0EsTUFBSSxRQUFRLElBQVo7QUFDQSxPQUFLLFNBQUwsR0FBaUIsRUFBakI7QUFDQSxPQUFLLG1DQUFMLEdBQTJDLEVBQTNDO0FBQ0EsT0FBSyw0QkFBTCxHQUFvQyxJQUFwQztBQUNBOztBQUVBLE9BQUssV0FBTCxHQUFtQix5QkFBYSxLQUFLLEtBQUwsQ0FBVyxLQUF4QixFQUErQixLQUFLLEtBQUwsQ0FBVyxNQUExQyxDQUFuQjtBQUNBO0FBQ0E7O0FBRUEsT0FBSyxRQUFMLEdBQWdCLEtBQUssV0FBTCxDQUFpQixVQUFqQixDQUE0QixJQUE1QixDQUFoQjs7QUFFQSxNQUFJLGVBQWUsU0FBZixZQUFlLENBQVUsRUFBVixFQUFjO0FBQy9CLFVBQU0saUJBQU4sQ0FBd0IsSUFBeEIsQ0FBNkIsS0FBN0IsRUFBb0MsRUFBcEM7QUFDRCxHQUZEOztBQUlBLE9BQUsscUJBQUwsR0FBNkIsRUFBN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNEOztBQUVELGFBQWEsU0FBYixDQUF1QixLQUF2QixHQUErQixZQUFZO0FBQ3pDLE9BQUssWUFBTCxHQUFvQixDQUFwQjtBQUNBLE9BQUssU0FBTCxHQUFpQixFQUFqQjtBQUNBLE9BQUssbUNBQUwsR0FBMkMsRUFBM0M7QUFDQSxPQUFLLDRCQUFMLEdBQW9DLElBQXBDOztBQUVBLE9BQUssWUFBTCxHQUFvQixFQUFwQjtBQUNBO0FBQ0E7O0FBRUEsZ0NBQXVCO0FBQ3JCLFNBQUssUUFBTCxDQUFjLFNBQWQsQ0FBd0IsQ0FBeEIsRUFBMkIsQ0FBM0IsRUFBOEIsS0FBSyxLQUFMLENBQVcsS0FBekMsRUFBZ0QsS0FBSyxLQUFMLENBQVcsTUFBM0Q7QUFDQSxTQUFLLFFBQUwsQ0FBYyxTQUFkO0FBQ0Q7QUFDRixDQWREOztBQWdCQSxhQUFhLFNBQWIsQ0FBdUIsc0JBQXZCLEdBQWdELFlBQVk7QUFDMUQsU0FBTyxFQUFFLEtBQUssWUFBZDtBQUNELENBRkQ7O0FBSUEsYUFBYSxTQUFiLENBQXVCLGlCQUF2QixHQUEyQyxVQUFVLEVBQVYsRUFBYzs7QUFFdkQsTUFBSSxHQUFHLElBQUgsS0FBWSxXQUFaLElBQTJCLEdBQUcsSUFBSCxLQUFZLE9BQTNDLEVBQ0U7O0FBRUYsTUFBSSxrQkFBa0IsRUFBdEI7QUFDQSxNQUFJLEtBQUssZ0NBQW9CLEVBQXBCLENBQVQ7QUFDQSxNQUFJLEtBQUssSUFBVDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBSyxLQUFLLEtBQUwsQ0FBVyxhQUFYLENBQXlCLEdBQUcsQ0FBNUIsRUFBK0IsR0FBRyxDQUFsQyxFQUFxQyxLQUFyQyxDQUFMOztBQUVBLE1BQUksTUFBTSxPQUFRLEtBQUssU0FBTCxDQUFlLEVBQWYsQ0FBUixLQUFnQyxXQUExQyxFQUF1RDs7QUFFckQsUUFBSSxpQkFBaUIsS0FBSyxTQUFMLENBQWUsRUFBZixDQUFyQjs7QUFFQSxRQUFJLGVBQWUsVUFBZixLQUE4QixXQUFsQyxFQUErQztBQUM3QyxVQUFJLGFBQWEsS0FBSyxLQUFMLENBQVcsSUFBWCxDQUFnQixlQUFlLGVBQS9CLENBQWpCO0FBQ0EsVUFBSSxZQUFZLFdBQVcsVUFBWCxDQUFzQixlQUFlLGNBQXJDLENBQWhCO0FBQ0EsVUFBSSxpQkFBaUIsZUFBZSxjQUFwQzs7QUFFQTtBQUNBLHFCQUFlLGNBQWYsR0FBZ0M7QUFDOUIsV0FBRyxHQUFHLENBRHdCLEVBQ3JCLEdBQUcsR0FBRyxDQURlLEVBQ1osV0FBVyxTQURDO0FBRTlCLG9CQUFZLFdBQVcsUUFGTyxFQUVHLGdCQUFnQixjQUZuQixFQUVtQyxpQkFBaUIsV0FBVyxLQUYvRDtBQUc5QixlQUFPLEtBQUssS0FBTCxDQUFXO0FBSFksT0FBaEM7QUFLQSxxQkFBZSxZQUFmLEdBQThCO0FBQzVCLGlCQUFTLFNBRG1CLEVBQ1IsYUFBYSxTQURMLEVBQ2dCLFdBQVcsV0FEM0IsRUFDd0MsV0FBVyxXQURuRCxFQUNnRSxVQUFVLFVBRDFFLEVBQ3NGLE9BQU87QUFEN0YsT0FBOUI7QUFHQSxzQkFBZ0IsSUFBaEIsQ0FBcUIsY0FBckI7O0FBRUE7QUFDQSx1QkFBaUIsS0FBSyxTQUFMLENBQWUsV0FBVyxFQUExQixDQUFqQjs7QUFFQTtBQUNBLHFCQUFlLGNBQWYsR0FBZ0M7QUFDOUIsV0FBRyxHQUFHLENBRHdCLEVBQ3JCLEdBQUcsR0FBRyxDQURlO0FBRTlCLG1CQUFXLFNBRm1CLEVBRVIsWUFBWSxXQUFXLFFBRmYsRUFFeUIsZ0JBQWdCLGNBRnpDLEVBRXlELGlCQUFpQixXQUFXLEtBRnJGO0FBRzlCLGVBQU8sS0FBSyxLQUFMLENBQVc7QUFIWSxPQUFoQzs7QUFNQSxxQkFBZSxZQUFmLEdBQThCO0FBQzVCLGlCQUFTLFVBRG1CLEVBQ1AsYUFBYSxXQUFXLFFBRGpCLEVBQzJCLFdBQVcsV0FEdEMsRUFDbUQsV0FBVyxXQUQ5RCxFQUMyRSxVQUFVLFVBRHJGLEVBQ2lHLE9BQU87QUFEeEcsT0FBOUI7QUFHQSxzQkFBZ0IsSUFBaEIsQ0FBcUIsS0FBSyxTQUFMLENBQWUsV0FBVyxFQUExQixDQUFyQjtBQUNEO0FBQ0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUF0Q0YsU0F1Q0ssSUFBSSxlQUFlLFVBQWYsS0FBOEIsWUFBbEMsRUFBZ0Q7O0FBRW5ELFlBQUksYUFBYSxLQUFLLEtBQUwsQ0FBVyxJQUFYLENBQWdCLGVBQWUsZUFBL0IsQ0FBakI7QUFDQSxZQUFJLFlBQVksZUFBZSxjQUFmLEtBQWtDLElBQWxDLEdBQXlDLFdBQVcsVUFBWCxDQUFzQixlQUFlLGNBQXJDLENBQXpDLEdBQWdHLElBQWhIOztBQUVBO0FBQ0EsdUJBQWUsY0FBZixHQUFnQztBQUM5QixhQUFHLEdBQUcsQ0FEd0IsRUFDckIsR0FBRyxHQUFHLENBRGU7QUFFOUIsc0JBQVksV0FBVyxRQUZPLEVBRUcsV0FBVyxTQUZkLEVBRXlCLGdCQUFnQixlQUFlLGNBRnhELEVBRXdFLGlCQUFpQixlQUFlLGVBRnhHO0FBRzlCLGlCQUFPLEtBQUssS0FBTCxDQUFXO0FBSFksU0FBaEM7QUFLQSx1QkFBZSxZQUFmLEdBQThCO0FBQzVCLG1CQUFTLEtBQUssS0FBTCxDQUFXLE1BRFEsRUFDQSxhQUFhLEtBQUssS0FBTCxDQUFXLE1BQVgsQ0FBa0IsUUFEL0IsRUFDeUMsV0FBVyxlQURwRCxFQUNxRSxXQUFXLGVBRGhGLEVBQ2lHLFVBQVUsY0FEM0csRUFDMkgsT0FBTztBQURsSSxTQUE5QjtBQUdBLHdCQUFnQixJQUFoQixDQUFxQixjQUFyQjtBQUNEO0FBQ0Y7O0FBRUQ7QUFDQSxNQUFJLDZCQUE2QixFQUFqQztBQUNBLE9BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLHFCQUFMLENBQTJCLE1BQS9DLEVBQXVELEdBQXZELEVBQTREO0FBQzFELFFBQUksV0FBVyxJQUFmOztBQUVBLFNBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxnQkFBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDL0MsVUFBSSxnQkFBZ0IsQ0FBaEIsRUFBbUIsRUFBbkIsS0FBMEIsS0FBSyxxQkFBTCxDQUEyQixDQUEzQixFQUE4QixFQUE1RCxFQUFnRTtBQUM5RCxtQkFBVyxLQUFYO0FBQ0E7QUFDRDtBQUNGOztBQUVELFFBQUksUUFBSixFQUFjO0FBQ1osV0FBSyxTQUFMLENBQWUsS0FBSyxxQkFBTCxDQUEyQixDQUEzQixDQUFmLEVBQThDLFVBQTlDLEVBQTBELEVBQTFEO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsaUNBQTJCLElBQTNCLENBQWdDLEtBQUsscUJBQUwsQ0FBMkIsQ0FBM0IsQ0FBaEM7QUFDRDtBQUNGOztBQUVELE9BQUsscUJBQUwsR0FBNkIsMEJBQTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLGdCQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDs7QUFFL0MsUUFBSSxXQUFXLEtBQWY7O0FBRUEsU0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLEtBQUsscUJBQUwsQ0FBMkIsTUFBL0MsRUFBdUQsR0FBdkQsRUFBNEQ7QUFDMUQsVUFBSSxnQkFBZ0IsQ0FBaEIsRUFBbUIsRUFBbkIsS0FBMEIsS0FBSyxxQkFBTCxDQUEyQixDQUEzQixFQUE4QixFQUE1RCxFQUFnRTtBQUM5RCxtQkFBVyxJQUFYO0FBQ0E7QUFDRDtBQUNGOztBQUVELFFBQUksQ0FBQyxRQUFMLEVBQWU7QUFDYixXQUFLLFNBQUwsQ0FBZSxnQkFBZ0IsQ0FBaEIsQ0FBZixFQUFtQyxXQUFuQyxFQUFnRCxFQUFoRDtBQUNBLFdBQUsscUJBQUwsQ0FBMkIsSUFBM0IsQ0FBZ0MsZ0JBQWdCLENBQWhCLENBQWhDO0FBQ0Q7O0FBRUQsUUFBSSxHQUFHLElBQUgsS0FBWSxPQUFoQixFQUF5QjtBQUN2QixXQUFLLFNBQUwsQ0FBZSxnQkFBZ0IsQ0FBaEIsQ0FBZixFQUFtQyxPQUFuQyxFQUE0QyxFQUE1QztBQUNELEtBRkQsTUFFTyxJQUFJLEdBQUcsSUFBSCxLQUFZLFdBQWhCLEVBQTZCO0FBQ2xDLFdBQUssU0FBTCxDQUFlLGdCQUFnQixDQUFoQixDQUFmLEVBQW1DLFdBQW5DLEVBQWdELEVBQWhEO0FBQ0Q7QUFDRjtBQUNGLENBOUhEOztBQWdJQSxhQUFhLFNBQWIsQ0FBdUIsU0FBdkIsR0FBbUMsVUFBVSxjQUFWLEVBQTBCLFNBQTFCLEVBQXFDLEVBQXJDLEVBQXlDOztBQUUxRSxNQUFJLENBQUMsY0FBRCxJQUFtQixDQUFDLFNBQXhCLEVBQ0U7O0FBRUYsTUFBSSxpQkFBaUIsZUFBZSxjQUFwQztBQUNBLE1BQUksZUFBZSxlQUFlLFlBQWxDO0FBQ0E7QUFDQSxNQUFJLGNBQWMsZUFBZSxZQUFmLENBQTRCLFdBQTlDOztBQUVBLE1BQUksZUFBZSxZQUFmLElBQStCLFlBQVksYUFBYSxTQUFiLENBQVosQ0FBbkMsRUFDRSxZQUFZLGFBQWEsU0FBYixDQUFaLEVBQXFDLElBQXJDLENBQTBDLFdBQTFDLEVBQXVELGNBQXZEOztBQUVGLE1BQUksY0FBYyxVQUFsQixFQUE4QjtBQUM1QixRQUFJLFlBQVksTUFBWixJQUFzQixZQUFZLE1BQVosS0FBdUIsR0FBRyxNQUFILENBQVUsS0FBVixDQUFnQixNQUFqRSxFQUF5RTtBQUN2RSxTQUFHLE1BQUgsQ0FBVSxLQUFWLENBQWdCLE1BQWhCLEdBQXlCLFlBQVksTUFBckM7QUFDRDtBQUNGLEdBSkQsTUFJTztBQUNMLE9BQUcsTUFBSCxDQUFVLEtBQVYsQ0FBZ0IsTUFBaEIsR0FBeUIsS0FBSyxLQUFMLENBQVcsY0FBcEM7QUFDQSxXQUFPLGVBQWUsY0FBdEIsQ0FGSyxDQUVpQztBQUN0QyxXQUFPLGVBQWUsWUFBdEIsQ0FISyxDQUcrQjtBQUNyQzs7QUFFRDtBQUNBLE1BQUksY0FBYyxPQUFkLElBQXlCLGVBQWUsVUFBZixLQUE4QixXQUF2RCxJQUFzRSxLQUFLLEtBQUwsQ0FBVyx1QkFBckYsRUFBOEc7QUFDNUcsU0FBSyxLQUFMLENBQVcsdUJBQVgsQ0FBbUMsSUFBbkMsQ0FBd0MsS0FBSyxLQUFMLENBQVcsSUFBWCxDQUFnQixlQUFlLGVBQS9CLENBQXhDLEVBQXlGLGNBQXpGO0FBQ0Q7QUFDRixDQTNCRDs7a0JBNkJlLFk7Ozs7Ozs7O0FDOU1mLFNBQVMsYUFBVCxDQUF1QixFQUF2QixFQUEyQixFQUEzQixFQUErQixFQUEvQixFQUFtQyxFQUFuQyxFQUF1QyxPQUF2QyxFQUFnRDs7QUFFOUMsTUFBSSxPQUFRLE9BQVIsS0FBcUIsV0FBekIsRUFDRSxVQUFVLENBQVY7O0FBRUYsT0FBSyxRQUFMLEdBQWdCLE9BQWhCOztBQUVBLE9BQUssR0FBTCxHQUFXLEVBQVg7QUFDQSxPQUFLLEdBQUwsR0FBVyxFQUFYO0FBQ0EsT0FBSyxHQUFMLEdBQVcsRUFBWDtBQUNBLE9BQUssR0FBTCxHQUFXLEVBQVg7O0FBRUEsT0FBSyxZQUFMLEdBQW9CLEtBQUssUUFBekI7QUFDQSxPQUFLLGVBQUwsR0FBdUIsS0FBSyxRQUE1QjtBQUNBLE9BQUssYUFBTCxHQUFxQixLQUFLLFFBQTFCO0FBQ0EsT0FBSyxjQUFMLEdBQXNCLEtBQUssUUFBM0I7QUFDRDs7QUFFRCxjQUFjLFNBQWQsQ0FBd0IsYUFBeEIsR0FBd0MsVUFBVSxRQUFWLEVBQW9CLElBQXBCLEVBQTBCO0FBQ2hFLE1BQUksYUFBYSxLQUFqQixFQUF3QjtBQUN0QixTQUFLLFlBQUwsSUFBcUIsS0FBSyxNQUExQjtBQUNELEdBRkQsTUFHSyxJQUFJLGFBQWEsUUFBakIsRUFBMkI7QUFDOUIsU0FBSyxlQUFMLElBQXdCLEtBQUssTUFBN0I7QUFDRCxHQUZJLE1BRUUsSUFBSSxhQUFhLE1BQWpCLEVBQXlCO0FBQzlCLFNBQUssYUFBTCxJQUFzQixLQUFLLEtBQTNCLENBRDhCLENBQ0k7QUFDbkMsR0FGTSxNQUVBLElBQUksYUFBYSxPQUFqQixFQUEwQjtBQUMvQixTQUFLLGNBQUwsSUFBdUIsS0FBSyxLQUE1QixDQUQrQixDQUNHO0FBQ25DO0FBQ0YsQ0FYRDs7QUFhQSxjQUFjLFNBQWQsQ0FBd0IsZUFBeEIsR0FBMEMsVUFBVSxRQUFWLEVBQW9CLElBQXBCLEVBQTBCO0FBQ2xFLE1BQUksYUFBYSxLQUFqQixFQUF3QjtBQUN0QixTQUFLLFlBQUwsSUFBcUIsS0FBSyxNQUExQjtBQUNELEdBRkQsTUFHSyxJQUFJLGFBQWEsUUFBakIsRUFBMkI7QUFDOUIsU0FBSyxlQUFMLElBQXdCLEtBQUssTUFBN0I7QUFDRCxHQUZJLE1BRUUsSUFBSSxhQUFhLE1BQWpCLEVBQXlCO0FBQzlCLFNBQUssYUFBTCxJQUFzQixLQUFLLEtBQTNCLENBRDhCLENBQ0c7QUFDbEMsR0FGTSxNQUVBLElBQUksYUFBYSxPQUFqQixFQUEwQjtBQUMvQixTQUFLLGNBQUwsSUFBdUIsS0FBSyxLQUE1QixDQUQrQixDQUNHO0FBQ25DO0FBQ0YsQ0FYRDs7QUFhQSxjQUFjLFNBQWQsQ0FBd0IsWUFBeEIsR0FBdUMsWUFBWTtBQUNqRDtBQUNBO0FBQ0E7O0FBRUEsU0FBTztBQUNMLFFBQUksS0FBSyxHQUFMLEdBQVcsS0FBSyxhQURmO0FBRUwsUUFBSSxLQUFLLEdBQUwsR0FBVyxLQUFLLFlBRmY7QUFHTCxRQUFJLEtBQUssR0FBTCxHQUFXLEtBQUssY0FIZjtBQUlMLFFBQUksS0FBSyxHQUFMLEdBQVcsS0FBSyxlQUpmO0FBS0wsV0FBUSxLQUFLLEdBQUwsR0FBVyxLQUFLLEdBQWpCLEdBQXdCLEtBQUssY0FBN0IsR0FBOEMsS0FBSyxhQUxyRDtBQU1MLFlBQVMsS0FBSyxHQUFMLEdBQVcsS0FBSyxHQUFqQixHQUF3QixLQUFLLGVBQTdCLEdBQStDLEtBQUs7QUFOdkQsR0FBUDtBQVFELENBYkQ7O0FBZUEsY0FBYyxTQUFkLENBQXdCLEtBQXhCLEdBQWdDLFlBQVk7QUFDMUM7QUFDQSxPQUFLLFlBQUwsR0FBb0IsS0FBSyxRQUF6QjtBQUNBLE9BQUssZUFBTCxHQUF1QixLQUFLLFFBQTVCO0FBQ0EsT0FBSyxhQUFMLEdBQXFCLEtBQUssUUFBMUI7QUFDQSxPQUFLLGNBQUwsR0FBc0IsS0FBSyxRQUEzQjtBQUNELENBTkQ7O2tCQVFlLGE7Ozs7Ozs7OztBQ2xFZjs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBRUEsU0FBUyxNQUFULENBQWdCLEtBQWhCLEVBQXVCLE9BQXZCLEVBQWdDLEtBQWhDLEVBQXVDO0FBQ3JDLFNBQU8sSUFBUCxDQUFZLFdBQVosQ0FBd0IsSUFBeEIsQ0FBNkIsSUFBN0IsRUFBbUMsUUFBbkMsRUFBNkMsT0FBN0MsRUFBc0QsS0FBdEQ7O0FBRUEsT0FBSyxLQUFMLEdBQWEsS0FBYjtBQUNBLE9BQUssTUFBTCxHQUFjLE1BQU0sTUFBcEI7QUFDQSxPQUFLLEdBQUwsR0FBVyxLQUFLLEtBQUwsQ0FBVyxHQUF0QjtBQUNBLE9BQUssUUFBTCxHQUFnQixLQUFLLEtBQUwsQ0FBVyxhQUFYLENBQXlCLFFBQXpDO0FBQ0EsT0FBSyxLQUFMLEdBQWEsRUFBYjs7QUFFQSxPQUFLLEtBQUwsR0FBYSxDQUFiO0FBQ0E7QUFDQSxPQUFLLE1BQUwsR0FBYyxDQUZkLEVBR0EsS0FBSyxXQUFMLEdBQW1CLElBSG5CLEVBSUEsS0FBSyxVQUFMLEdBQWtCLEVBSmxCO0FBS0EsT0FBSyxNQUFMLEdBQWM7QUFDWixRQUFJLElBRFEsRUFDRixJQUFJLElBREYsRUFDUSxJQUFJLElBRFosRUFDa0IsSUFBSTtBQUR0QixHQUFkOztBQUlBLE1BQUksT0FBUSxLQUFLLFFBQUwsQ0FBYyxRQUF0QixLQUFvQyxXQUF4QyxFQUFxRDtBQUNuRCxTQUFLLFFBQUwsR0FBZ0IsS0FBSyxLQUFMLENBQVcsZUFBWCxDQUEyQixLQUFLLFFBQWhDLENBQWhCO0FBQ0E7QUFDRDs7QUFFRCxPQUFLLFVBQUwsR0FBa0Isa0NBQXNCLEtBQUssVUFBM0IsRUFBdUMsS0FBSyxRQUE1QyxFQUFzRCxLQUFLLFVBQTNELENBQWxCOztBQUVBLE9BQUssaUJBQUwsR0FBeUIsS0FBSyxRQUE5QjtBQUNEOztBQUVELG1CQUFPLE1BQVA7O0FBRUEsT0FBTyxTQUFQLENBQWlCLE1BQWpCLEdBQTBCLFlBQVk7O0FBRXBDLE1BQUksWUFBYSxDQUFDLEtBQUssa0JBQU4sR0FBMkIsS0FBSyxLQUFoQyxHQUF3QyxLQUFLLEtBQUwsQ0FBVyxRQUFwRTtBQUNBLE1BQUksWUFBWSxVQUFVLGFBQVYsQ0FBd0IsWUFBeEIsRUFBaEI7QUFDQSxNQUFJLFdBQVcsSUFBZjtBQUNBLE1BQUksTUFBTSxDQUFWO0FBQ0EsTUFBSSxPQUFPLENBQVg7QUFDQSxNQUFJLFdBQVcsQ0FBZjtBQUNBLE1BQUksWUFBWSxDQUFoQjtBQUNBLE1BQUksYUFBYSxDQUFqQjs7QUFFQSxNQUFJLFFBQVEsRUFBWjtBQUNBLE1BQUksT0FBTyxFQUFYOztBQUVBO0FBQ0E7O0FBRUEsTUFBSSxLQUFLLGFBQUwsS0FBdUIsS0FBdkIsSUFBZ0MsS0FBSyxhQUFMLEtBQXVCLFFBQTNELEVBQXFFO0FBQ25FLFNBQUssV0FBTCxHQUFtQixZQUFuQjtBQUNBLGVBQVcsS0FBSyxhQUFoQjs7QUFFQSxlQUFXLEtBQUssUUFBTCxLQUFrQixJQUFsQixHQUF5QixLQUFLLFFBQTlCLEdBQXlDLFVBQVUsS0FBVixHQUFrQixFQUF0RTtBQUNBLGdCQUFZLEtBQUssU0FBTCxLQUFtQixJQUFuQixHQUEwQixLQUFLLFNBQS9CLEdBQTJDLFVBQVUsTUFBVixHQUFtQixFQUExRTtBQUNELEdBTkQsTUFPSyxJQUFJLEtBQUssYUFBTCxLQUF1QixRQUEzQixFQUFxQztBQUN4QyxTQUFLLFdBQUwsR0FBbUIsVUFBbkI7QUFDQSxlQUFXLEtBQUssZUFBaEI7O0FBRUEsZUFBVyxLQUFLLFFBQUwsS0FBa0IsSUFBbEIsR0FBeUIsS0FBSyxRQUE5QixHQUF5QyxVQUFVLEtBQVYsR0FBa0IsRUFBdEU7QUFDQSxnQkFBWSxLQUFLLFNBQUwsS0FBbUIsSUFBbkIsR0FBMEIsS0FBSyxTQUEvQixHQUEyQyxVQUFVLE1BQVYsR0FBbUIsRUFBMUU7QUFDRDs7QUFFRCxPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksS0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQy9DLFFBQUksYUFBYSxLQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FBakI7O0FBR0EsUUFBSSxXQUFXLElBQVgsS0FBb0IsS0FBcEIsSUFBNkIsV0FBVyxJQUFYLEtBQW9CLFVBQWpELElBQStELFdBQVcsSUFBWCxLQUFvQixRQUF2RixFQUFpRzs7QUFFL0YsVUFBSSxhQUFhLFdBQVcsZ0JBQVgsR0FBOEIsV0FBVyxnQkFBekMsR0FBNEQsQ0FBQyxXQUFXLElBQVgsS0FBb0IsTUFBcEIsSUFBOEIsV0FBVyxJQUFYLEtBQW9CLFVBQWxELElBQWdFLFdBQVcsSUFBWCxLQUFvQixRQUFwRixJQUFnRyxXQUFXLElBQVgsS0FBb0IsU0FBcEgsSUFBaUksV0FBVyxJQUFYLEtBQW9CLFFBQXRKLEtBQW1LLFdBQVcsVUFBOUssR0FBMkwsV0FBVyxVQUF0TSxHQUFtTixzQkFBVyxzQkFBWCxDQUFrQyxXQUFXLElBQTdDLENBQWhTO0FBQ0EsVUFBSSxhQUFhLFdBQVcsVUFBWCxHQUF3QixXQUFXLFVBQW5DLEdBQWdELEtBQUssaUJBQUwsR0FBeUIsS0FBSyxpQkFBTCxDQUF1QixFQUFFLE9BQU8sS0FBSyxLQUFkLEVBQXFCLFFBQVEsS0FBSyxRQUFsQyxFQUE0QyxZQUFZLFVBQXhELEVBQW9FLFdBQVcsSUFBL0UsRUFBdkIsQ0FBekIsR0FDN0QsV0FBVyxJQURmO0FBRUEsVUFBSSxjQUFjLFdBQVcsaUJBQVgsR0FBK0IsV0FBVyxpQkFBMUMsR0FBOEQsV0FBVyxXQUFYLEdBQXlCLFdBQVcsV0FBcEMsR0FBa0QsV0FBVyxTQUFYLENBQXFCLENBQXJCLENBQWxJO0FBQ0EsVUFBSSxhQUFjLENBQUMsV0FBVyxVQUFaLEtBQTJCLFdBQVcsSUFBWCxLQUFvQixNQUFwQixJQUE4QixXQUFXLElBQVgsS0FBb0IsVUFBbEQsSUFBZ0UsV0FBVyxJQUFYLEtBQW9CLFFBQS9HLENBQUQsR0FBNkgsQ0FBN0gsR0FBaUksS0FBSyxVQUFMLEdBQWtCLEVBQXBLO0FBQ0EsVUFBSSxvQkFBb0IsV0FBVyx1QkFBWCxHQUFxQyxXQUFXLHVCQUFoRCxHQUEwRSxXQUFXLGlCQUE3RztBQUNBLFVBQUksd0JBQXdCLFdBQVcsMkJBQVgsR0FBeUMsV0FBVywyQkFBcEQsR0FBa0YsV0FBVyxxQkFBWCxHQUFtQyxLQUFLLEdBQUwsQ0FBUyxDQUFULEVBQVksS0FBSyxLQUFMLENBQVcsYUFBYSxFQUF4QixDQUFaLENBQW5DLEdBQThFLENBQTVMO0FBQ0EsVUFBSSxZQUFZLFdBQVcsU0FBWCxDQUFxQixDQUFyQixDQUFoQjs7QUFFQSxtQkFBYSxLQUFLLEtBQUwsQ0FBVyx3QkFBWCxDQUFvQyxVQUFwQyxFQUFnRCxXQUFXLFVBQVgsQ0FBc0IsQ0FBdEIsQ0FBaEQsRUFBMEUsVUFBMUUsRUFBc0YsQ0FBdEYsQ0FBYjtBQUNBLFVBQUksT0FBTztBQUNULG9CQUFZLFVBREgsRUFDZSxhQUFhLFdBRDVCLEVBQ3lDLE1BQU0sVUFEL0MsRUFDMkQsV0FBVyxJQUR0RSxFQUM0RSxXQUFXLFdBQVcsSUFEbEcsRUFDd0csWUFBWSxVQURwSCxFQUNnSSxXQUFXLFdBQVcsU0FBWCxDQUFxQixDQUFyQixDQUQzSTtBQUVULHlCQUFpQixXQUFXLEtBRm5CLEVBRTBCLGdCQUFnQixJQUYxQyxFQUVnRCxtQkFBbUIsaUJBRm5FLEVBRXNGLHVCQUF1QjtBQUY3RyxPQUFYOztBQUtBLFlBQU0sSUFBTixDQUFXLElBQVg7QUFDRCxLQWxCRCxNQWtCTztBQUNMLFdBQUssSUFBSSxpQkFBaUIsQ0FBMUIsRUFBNkIsaUJBQWlCLFdBQVcsVUFBWCxDQUFzQixNQUFwRSxFQUE0RSxnQkFBNUUsRUFBOEY7O0FBRTVGLFlBQUksWUFBWSxXQUFXLFVBQVgsQ0FBc0IsY0FBdEIsQ0FBaEI7O0FBRUEsWUFBSSxhQUFhLFVBQVUsZ0JBQVYsR0FBNkIsVUFBVSxnQkFBdkMsR0FBMEQsV0FBVyxnQkFBWCxHQUE4QixXQUFXLGdCQUF6QyxHQUE0RCxzQkFBVyxzQkFBWCxDQUFrQyxXQUFXLElBQTdDLENBQXZJO0FBQ0EsWUFBSSxhQUFhLFVBQVUsVUFBVixHQUF1QixVQUFVLFVBQWpDLEdBQThDLFdBQVcsVUFBWCxHQUF3QixXQUFXLFVBQW5DLEdBQWdELEtBQUssaUJBQUwsR0FBeUIsS0FBSyxpQkFBTCxDQUF1QixFQUFFLE9BQU8sS0FBSyxLQUFkLEVBQXFCLFFBQVEsS0FBSyxRQUFsQyxFQUE0QyxZQUFZLFVBQXhELEVBQW9FLFdBQVcsU0FBL0UsRUFBdkIsQ0FBekIsR0FDM0csVUFBVSxJQUFWLEdBQWlCLFVBQVUsSUFBM0IsR0FBa0MsaUJBQWlCLGlCQUFpQixDQUFsQyxDQUR0QztBQUVBLFlBQUksY0FBYyxVQUFVLGlCQUFWLEdBQThCLFVBQVUsaUJBQXhDLEdBQTRELFdBQVcsaUJBQVgsR0FBK0IsV0FBVyxpQkFBMUMsR0FBOEQsVUFBVSxLQUFWLEdBQWtCLFVBQVUsS0FBNUIsR0FBb0MsV0FBVyxLQUFYLEdBQW1CLFdBQVcsS0FBOUIsR0FBc0MsV0FBVyxTQUFYLENBQXFCLGlCQUFpQixXQUFXLFNBQVgsQ0FBcUIsTUFBM0QsQ0FBdE47QUFDQSxZQUFJLGFBQWEsS0FBSyxVQUFMLEdBQWtCLEVBQW5DO0FBQ0EsWUFBSSxvQkFBb0IsVUFBVSx1QkFBVixHQUFvQyxVQUFVLHVCQUE5QyxHQUF3RSxXQUFXLHVCQUFYLEdBQXFDLFdBQVcsdUJBQWhELEdBQTBFLFVBQVUsaUJBQVYsR0FBOEIsVUFBVSxpQkFBeEMsR0FBNEQsV0FBVyxpQkFBalA7QUFDQSxZQUFJLHdCQUF3QixVQUFVLDJCQUFWLEdBQXdDLFVBQVUsMkJBQWxELEdBQWdGLFdBQVcsMkJBQVgsR0FBeUMsV0FBVywyQkFBcEQsR0FBa0YsVUFBVSxxQkFBVixJQUFtQyxXQUFXLHFCQUE5QyxHQUFzRSxLQUFLLEdBQUwsQ0FBUyxDQUFULEVBQVksS0FBSyxLQUFMLENBQVcsYUFBYSxFQUF4QixDQUFaLENBQXRFLEdBQWlILENBQS9TOztBQUVBLHFCQUFhLEtBQUssS0FBTCxDQUFXLHdCQUFYLENBQW9DLFVBQXBDLEVBQWdELFNBQWhELEVBQTJELFVBQTNELEVBQXVFLGNBQXZFLENBQWI7O0FBRUEsWUFBSSxPQUFPO0FBQ1Qsc0JBQVksVUFESCxFQUNlLGFBQWEsV0FENUIsRUFDeUMsTUFBTSxVQUQvQyxFQUMyRCxXQUFXLElBRHRFLEVBQzRFLFdBQVcsV0FBVyxJQURsRyxFQUN3RyxZQUFZLFVBRHBIO0FBRVQsMkJBQWlCLENBRlIsRUFFVyxnQkFBZ0IsY0FGM0IsRUFFMkMsbUJBQW1CLGlCQUY5RCxFQUVpRix1QkFBdUI7QUFGeEcsU0FBWDs7QUFLQSxZQUFJLFVBQVUsWUFBVixJQUEyQixXQUFXLFlBQVgsSUFBMkIsVUFBVSxZQUFWLEtBQTJCLEtBQXJGLEVBQTZGO0FBQzNGLGdCQUFNLElBQU4sQ0FBVyxJQUFYO0FBQ0Q7QUFDRjtBQUNGO0FBQ0QsV0FBTyxJQUFQO0FBQ0Q7QUFDRCxNQUFJLEtBQUssUUFBTCxLQUFrQixJQUF0QixFQUE0QjtBQUMxQixVQUFNLE9BQU47QUFDRDs7QUFFRDtBQUNBLE1BQUksTUFBTSxNQUFOLEdBQWUsQ0FBbkIsRUFBc0I7QUFDcEIsUUFBSSxNQUFNLElBQVY7QUFDQSxRQUFJLFdBQVcsQ0FBZixDQUZvQixDQUVGO0FBQ2xCLFFBQUksZUFBZSxDQUFuQjtBQUNBLFFBQUksZUFBZSxDQUFuQjs7QUFFQSxRQUFJLEtBQUssU0FBTCxLQUFtQixJQUF2QixFQUE2QjtBQUMzQixVQUFJLEtBQUssWUFBTCxLQUFzQixJQUExQixFQUFnQztBQUM5Qix1QkFBZSxLQUFLLEdBQUwsQ0FBUyxLQUFLLFNBQWQsRUFBeUIsS0FBSyxZQUE5QixFQUE0QyxRQUE1QyxDQUFmO0FBQ0QsT0FGRCxNQUVPO0FBQ0wsdUJBQWUsS0FBSyxHQUFMLENBQVMsS0FBSyxTQUFkLEVBQXlCLFFBQXpCLENBQWY7QUFDRDtBQUNGLEtBTkQsTUFNTztBQUNMLFVBQUksS0FBSyxZQUFMLEtBQXNCLElBQTFCLEVBQWdDO0FBQzlCLHVCQUFlLEtBQUssR0FBTCxDQUFTLEtBQUssWUFBZCxFQUE0QixRQUE1QixDQUFmO0FBQ0QsT0FGRCxNQUVPO0FBQ0wsdUJBQWUsUUFBZjtBQUNEO0FBQ0Y7O0FBRUQsaUJBQWMsZUFBZSxDQUFmLEdBQW1CLEtBQUssVUFBTCxHQUFrQixFQUFyQyxHQUEwQyxVQUF4RDtBQUNBLG1CQUFlLGdCQUFnQixhQUFhLEtBQUssaUJBQUwsR0FBeUIsRUFBdEQsQ0FBZjs7QUFFQSxTQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUNyQyxVQUFJLE9BQU8sTUFBTSxDQUFOLENBQVg7O0FBRUEsVUFBSSxLQUFLLFNBQUwsS0FBbUIsTUFBbkIsSUFBNkIsS0FBSyxTQUFMLEtBQW1CLFFBQWhELElBQTRELEtBQUssU0FBTCxLQUFtQixVQUFuRixFQUErRjtBQUM3Rix1QkFBZSxlQUFlLEtBQUssS0FBSyxVQUFMLEdBQWtCLEVBQXZCLENBQTlCO0FBQ0Q7O0FBRUQsVUFBSSxhQUFhLENBQWIsSUFBa0IsT0FBUSxTQUFSLEtBQXVCLFdBQXpDLElBQXdELGdCQUFnQixDQUF4RSxJQUE2RSxPQUFRLFlBQVIsS0FBMEIsV0FBM0csRUFBd0g7QUFDdEg7QUFDRDs7QUFFRCxVQUFJLEtBQUssV0FBTCxLQUFxQixZQUF6QixFQUF1Qzs7QUFFckMsYUFBSyxTQUFMLEdBQWlCLHlCQUFjLEtBQUssR0FBbkIsRUFBd0I7QUFDdkMsYUFBRyxDQURvQztBQUV2QyxhQUFHLENBRm9DLEVBRWxDO0FBQ0wsb0JBQVUsWUFINkI7QUFJdkMscUJBQVcsS0FBSyxRQUFMLEdBQWdCLFNBQWhCLEdBQTRCLEtBQUssVUFKTCxFQUlpQjtBQUN4RCxpQkFBTyxDQUxnQztBQU12QyxnQkFBTSxLQUFLLElBTjRCO0FBT3ZDLDJCQUFpQixNQVBzQixFQU9mO0FBQ3hCLG9CQUFVLEtBQUssUUFSd0IsRUFRZjtBQUN4QixzQkFBWSxLQUFLLFVBVHNCO0FBVXZDLHNCQUFZLEtBQUssVUFWc0IsRUFVVjtBQUM3QixxQkFBVyxLQUFLLFNBWHVCO0FBWXZDLHFCQUFXLEtBQUssU0FadUIsRUFZWjtBQUMzQix3QkFBYztBQWJ5QixTQUF4QixDQUFqQjtBQWVBLGFBQUssU0FBTCxDQUFlLFdBQWY7O0FBRUEsWUFBSSxLQUFLLFNBQUwsS0FBbUIsSUFBdkIsRUFBNkI7QUFDM0IsZUFBSyxTQUFMLENBQWUsS0FBZixHQUF1QixLQUFLLFNBQUwsSUFBa0IsYUFBYSxLQUFLLGlCQUFMLEdBQXlCLEVBQXRDLElBQTZDLEtBQUssU0FBTCxLQUFtQixNQUFuQixJQUE2QixLQUFLLFNBQUwsS0FBbUIsUUFBaEQsSUFBNEQsS0FBSyxTQUFMLEtBQW1CLFVBQWhGLEdBQThGLEtBQUssS0FBSyxVQUFMLEdBQWtCLEVBQXZCLENBQTlGLEdBQTJILENBQXZLLENBQWxCLENBQXZCO0FBQ0Q7O0FBRUQsWUFBSSxDQUFDLEdBQUQsSUFBUSxJQUFJLEtBQUosR0FBWSxLQUFLLEtBQUwsQ0FBVyxLQUFLLFNBQUwsQ0FBZSxLQUFmLEdBQXVCLEtBQUssaUJBQUwsR0FBeUIsRUFBaEQsR0FBcUQsVUFBckQsSUFBbUUsSUFBSSxLQUFKLEtBQWMsQ0FBZCxHQUFrQixDQUFsQixHQUF1QixLQUFLLGlCQUEvRixLQUF1SCxLQUFLLFNBQUwsS0FBbUIsTUFBbkIsSUFBNkIsS0FBSyxTQUFMLEtBQW1CLFFBQWhELElBQTRELEtBQUssU0FBTCxLQUFtQixVQUFoRixHQUE4RixLQUFLLEtBQUssVUFBTCxHQUFrQixFQUF2QixDQUE5RixHQUEySCxDQUFqUCxDQUFYLENBQVosR0FBOFEsUUFBMVIsRUFBb1M7QUFDbFMsZ0JBQU07QUFDSixtQkFBTyxFQURILEVBQ08sT0FBTztBQURkLFdBQU47QUFHQSxlQUFLLElBQUwsQ0FBVSxHQUFWO0FBQ0EsZUFBSyxNQUFMLElBQWUsWUFBZjtBQUNBLHlCQUFlLENBQWY7QUFDRDs7QUFFRCx1QkFBZSxLQUFLLEdBQUwsQ0FBUyxZQUFULEVBQXVCLEtBQUssU0FBTCxDQUFlLE1BQXRDLENBQWY7O0FBRUEsYUFBSyxTQUFMLENBQWUsQ0FBZixHQUFtQixJQUFJLEtBQXZCO0FBQ0EsYUFBSyxTQUFMLENBQWUsQ0FBZixHQUFtQixDQUFuQjs7QUFFQSxZQUFJLEtBQUosSUFBYSxLQUFLLEtBQUwsQ0FBVyxLQUFLLFNBQUwsQ0FBZSxLQUFmLEdBQXVCLEtBQUssaUJBQUwsR0FBeUIsRUFBaEQsR0FBcUQsVUFBckQsSUFBbUUsSUFBSSxLQUFKLEtBQWMsQ0FBZCxHQUFrQixDQUFsQixHQUFzQixLQUFLLGlCQUE5RixLQUFxSCxLQUFLLFNBQUwsS0FBbUIsTUFBbkIsSUFBNkIsS0FBSyxTQUFMLEtBQW1CLFFBQWhELElBQTRELEtBQUssU0FBTCxLQUFtQixVQUFoRixHQUE4RixLQUFLLEtBQUssVUFBTCxHQUFrQixFQUF2QixDQUE5RixHQUEySCxDQUEvTyxDQUFYLENBQWI7QUFDQSxZQUFJLEtBQUosQ0FBVSxJQUFWLENBQWUsSUFBZjs7QUFFQSxhQUFLLEtBQUwsR0FBYSxLQUFLLEdBQUwsQ0FBUyxJQUFJLEtBQWIsRUFBb0IsS0FBSyxLQUF6QixDQUFiO0FBQ0QsT0F6Q0QsTUF5Q087O0FBRUwsYUFBSyxTQUFMLEdBQWlCLHlCQUFjLEtBQUssR0FBbkIsRUFBd0I7QUFDdkMsYUFBRyxDQURvQztBQUV2QyxhQUFHLENBRm9DLEVBRWxDO0FBQ0wsb0JBQVUsWUFINkI7QUFJdkMscUJBQVcsS0FBSyxRQUFMLEtBQWtCLElBQWxCLEdBQXlCLFNBQXpCLEdBQXFDLEtBQUssUUFBTCxHQUFnQixHQUp6QixFQUk4QjtBQUNyRSxpQkFBTyxDQUxnQztBQU12QyxnQkFBTSxLQUFLLElBTjRCO0FBT3ZDLDJCQUFpQixNQVBzQixFQU9mO0FBQ3hCLG9CQUFVLEtBQUssUUFSd0IsRUFRZjtBQUN4QixzQkFBWSxLQUFLLFVBVHNCO0FBVXZDLHNCQUFZLEtBQUssVUFWc0IsRUFVVjtBQUM3QixxQkFBVyxLQUFLLFNBWHVCO0FBWXZDLHFCQUFXLEtBQUssU0FadUIsRUFZWjtBQUMzQix3QkFBYztBQWJ5QixTQUF4QixDQUFqQjs7QUFnQkEsYUFBSyxTQUFMLENBQWUsV0FBZjs7QUFFQSxZQUFJLEtBQUssU0FBTCxLQUFtQixJQUF2QixFQUE2QjtBQUMzQixlQUFLLFNBQUwsQ0FBZSxLQUFmLEdBQXVCLEtBQUssU0FBTCxJQUFrQixhQUFhLEtBQUssaUJBQUwsR0FBeUIsRUFBdEMsSUFBNkMsS0FBSyxTQUFMLEtBQW1CLE1BQW5CLElBQTZCLEtBQUssU0FBTCxLQUFtQixRQUFoRCxJQUE0RCxLQUFLLFNBQUwsS0FBbUIsVUFBaEYsR0FBOEYsS0FBSyxLQUFLLFVBQUwsR0FBa0IsRUFBdkIsQ0FBOUYsR0FBMkgsQ0FBdkssQ0FBbEIsQ0FBdkI7QUFDRDs7QUFFRCxZQUFJLEtBQUssTUFBTCxJQUFlLFNBQW5CLEVBQThCO0FBQzVCLGdCQUFNO0FBQ0osbUJBQU8sRUFESCxFQUNPLE9BQU87QUFEZCxXQUFOO0FBR0EsZUFBSyxJQUFMLENBQVUsR0FBVjtBQUNELFNBTEQsTUFLTztBQUNMLGdCQUFNLEtBQUssUUFBTCxDQUFOO0FBQ0EscUJBQVcsQ0FBQyxXQUFXLENBQVosSUFBaUIsS0FBSyxNQUFqQztBQUNEOztBQUVELGFBQUssTUFBTCxJQUFlLEtBQUssU0FBTCxDQUFlLE1BQTlCOztBQUVBLGFBQUssU0FBTCxDQUFlLENBQWYsR0FBbUIsSUFBSSxLQUF2QixDQXBDSyxDQW9DeUI7QUFDOUIsYUFBSyxTQUFMLENBQWUsQ0FBZixHQUFtQixDQUFuQixDQXJDSyxDQXFDaUI7O0FBRXRCLFlBQUksS0FBSixJQUFhLEtBQUssS0FBTCxDQUFXLEtBQUssU0FBTCxDQUFlLEtBQWYsR0FBdUIsS0FBSyxpQkFBTCxHQUF5QixFQUFoRCxHQUFxRCxVQUFyRCxJQUFtRSxJQUFJLEtBQUosS0FBYyxDQUFkLEdBQWtCLENBQWxCLEdBQXNCLEtBQUssaUJBQTlGLEtBQXFILEtBQUssU0FBTCxLQUFtQixNQUFuQixJQUE2QixLQUFLLFNBQUwsS0FBbUIsUUFBaEQsSUFBNEQsS0FBSyxTQUFMLEtBQW1CLFVBQWhGLEdBQThGLEtBQUssS0FBSyxVQUFMLEdBQWtCLEVBQXZCLENBQTlGLEdBQTJILENBQS9PLENBQVgsQ0FBYjtBQUNBLFlBQUksS0FBSixDQUFVLElBQVYsQ0FBZSxJQUFmOztBQUVBLGFBQUssS0FBTCxHQUFhLEtBQUssR0FBTCxDQUFTLElBQUksS0FBYixFQUFvQixLQUFLLEtBQXpCLENBQWI7QUFDRDtBQUNGOztBQUVELFFBQUksS0FBSyxRQUFMLEtBQWtCLEtBQXRCLEVBQTZCO0FBQzNCLFdBQUssTUFBTCxHQUFjLEtBQUssTUFBTCxHQUFlLEtBQUssVUFBbEM7QUFDRCxLQUZELE1BRU87QUFDTCxXQUFLLE1BQUwsSUFBZSxZQUFmO0FBQ0Q7O0FBRUQsU0FBSyxNQUFMLEdBQWMsS0FBSyxHQUFMLENBQVMsU0FBVCxFQUFvQixLQUFLLE1BQXpCLENBQWQ7QUFDQSxTQUFLLEtBQUwsR0FBYSxLQUFLLEdBQUwsQ0FBUyxRQUFULEVBQW1CLEtBQUssS0FBeEIsQ0FBYjtBQUNEOztBQUVELE1BQUksS0FBSyxhQUFMLEtBQXVCLEtBQTNCLEVBQWtDO0FBQ2hDLFFBQUksS0FBSyxlQUFMLEtBQXlCLE1BQTdCLEVBQ0UsT0FBTyxVQUFVLEVBQWpCLENBREYsS0FFSyxJQUFJLEtBQUssZUFBTCxLQUF5QixPQUE3QixFQUNILE9BQU8sVUFBVSxFQUFWLEdBQWUsS0FBSyxLQUEzQixDQURHLEtBR0gsT0FBTyxVQUFVLEVBQVYsR0FBZSxVQUFVLEtBQVYsR0FBa0IsQ0FBakMsR0FBcUMsS0FBSyxLQUFMLEdBQWEsQ0FBekQ7O0FBRUYsVUFBTSxVQUFVLEVBQWhCO0FBQ0QsR0FURCxNQVNPLElBQUksS0FBSyxhQUFMLEtBQXVCLFFBQTNCLEVBQXFDO0FBQzFDLFFBQUksS0FBSyxlQUFMLEtBQXlCLE1BQTdCLEVBQ0UsT0FBTyxVQUFVLEVBQWpCLENBREYsS0FFSyxJQUFJLEtBQUssZUFBTCxLQUF5QixPQUE3QixFQUNILE9BQU8sVUFBVSxFQUFWLEdBQWUsS0FBSyxLQUEzQixDQURHLEtBR0gsT0FBTyxVQUFVLEVBQVYsR0FBZSxVQUFVLEtBQVYsR0FBa0IsQ0FBakMsR0FBcUMsS0FBSyxLQUFMLEdBQWEsQ0FBekQ7O0FBRUYsVUFBTSxVQUFVLEVBQVYsR0FBZSxVQUFVLE1BQVYsR0FBbUIsQ0FBbEMsR0FBc0MsS0FBSyxNQUFMLEdBQWMsQ0FBMUQ7QUFDRCxHQVRNLE1BU0EsSUFBSSxLQUFLLGFBQUwsS0FBdUIsUUFBM0IsRUFBcUM7QUFDMUMsUUFBSSxLQUFLLGVBQUwsS0FBeUIsTUFBN0IsRUFDRSxPQUFPLFVBQVUsRUFBakIsQ0FERixLQUVLLElBQUksS0FBSyxlQUFMLEtBQXlCLE9BQTdCLEVBQ0gsT0FBTyxVQUFVLEVBQVYsR0FBZSxLQUFLLEtBQTNCLENBREcsS0FHSCxPQUFPLFVBQVUsRUFBVixHQUFlLFVBQVUsS0FBVixHQUFrQixDQUFqQyxHQUFxQyxLQUFLLEtBQUwsR0FBYSxDQUF6RDs7QUFFRixVQUFNLFVBQVUsRUFBVixHQUFlLEtBQUssTUFBMUI7QUFDRDs7QUFFRCxPQUFLLEtBQUwsR0FBYSxLQUFiOztBQUVBO0FBQ0EsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLEtBQUssS0FBTCxDQUFXLE1BQS9CLEVBQXVDLEdBQXZDLEVBQTRDOztBQUUxQyxRQUFJLE9BQU8sTUFBTSxDQUFOLENBQVg7O0FBRUEsU0FBSyxFQUFMLEdBQVUsRUFBRSxLQUFLLEtBQUwsQ0FBVyxhQUFYLENBQXlCLFlBQXJDO0FBQ0EsU0FBSyxLQUFMLENBQVcsYUFBWCxDQUF5QixTQUF6QixDQUFtQyxLQUFLLEVBQXhDLElBQThDO0FBQzVDLFVBQUksS0FBSyxFQURtQyxFQUMvQixZQUFZLFlBRG1CLEVBQ0wsaUJBQWlCLENBRFosRUFDZSxpQkFBaUIsS0FBSyxlQURyQyxFQUNzRCxnQkFBZ0IsS0FBSztBQUQzRSxLQUE5QztBQUdBO0FBQ0Q7O0FBRUQsTUFBSSxZQUFZLENBQWhCO0FBQ0EsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDcEMsUUFBSSxNQUFNLEtBQUssQ0FBTCxDQUFWO0FBQ0EsUUFBSSxlQUFlLENBQW5CO0FBQ0EsU0FBSyxJQUFJLFlBQVksQ0FBckIsRUFBd0IsWUFBWSxJQUFJLEtBQUosQ0FBVSxNQUE5QyxFQUFzRCxXQUF0RCxFQUFtRTtBQUNqRSxVQUFJLE9BQU8sSUFBSSxLQUFKLENBQVUsU0FBVixDQUFYOztBQUVBLFVBQUksUUFBUSxLQUFLLFNBQUwsQ0FBZSxDQUFmLEdBQW1CLElBQW5CLElBQTJCLGNBQWMsQ0FBZCxHQUFrQixhQUFhLEVBQS9CLEdBQW9DLEtBQUssaUJBQXBFLENBQVo7QUFDQSxVQUFJLFFBQVEsTUFBTSxTQUFsQjs7QUFFQSxVQUFJLFNBQVMsS0FBYjs7QUFFQSxVQUFJLENBQUMsS0FBSyxLQUFMLENBQVcsSUFBWCxDQUFnQixLQUFLLGVBQXJCLEVBQXNDLE9BQTNDLEVBQ0UsS0FBSyxHQUFMLENBQVMsV0FBVCxHQUF1QixFQUF2Qjs7QUFFRixXQUFLLEdBQUwsQ0FBUyxJQUFUO0FBQ0EsV0FBSyxHQUFMLENBQVMsSUFBVCxDQUFjLElBQWQsRUFBb0IsR0FBcEIsRUFBeUIsUUFBekIsRUFBbUMsU0FBbkM7QUFDQSxXQUFLLEdBQUwsQ0FBUyxJQUFUOztBQUVBLFVBQUksS0FBSyxTQUFMLEtBQW1CLE1BQW5CLElBQTZCLEtBQUssU0FBTCxLQUFtQixVQUFoRCxJQUE4RCxLQUFLLFNBQUwsS0FBbUIsUUFBckYsRUFBK0Y7QUFDN0YsYUFBSyxHQUFMLENBQVMsV0FBVCxHQUF1QixLQUFLLFNBQTVCO0FBQ0EsYUFBSyxHQUFMLENBQVMsU0FBVCxHQUFxQixLQUFLLElBQUwsQ0FBVSxLQUFLLFVBQUwsR0FBa0IsQ0FBNUIsQ0FBckI7QUFDQSxhQUFLLEdBQUwsQ0FBUyxTQUFUO0FBQ0EsYUFBSyxHQUFMLENBQVMsTUFBVCxDQUFnQixRQUFRLEtBQUssVUFBTCxHQUFrQixFQUExQyxFQUE4QyxRQUFRLEtBQUssVUFBTCxHQUFrQixDQUF4RTtBQUNBLGFBQUssR0FBTCxDQUFTLE1BQVQsQ0FBZ0IsUUFBUSxLQUFLLFVBQUwsR0FBa0IsRUFBMUMsRUFBOEMsUUFBUSxLQUFLLFVBQUwsR0FBa0IsQ0FBeEU7QUFDQSxhQUFLLEdBQUwsQ0FBUyxNQUFUOztBQUVBLGtCQUFVLEtBQUssVUFBTCxHQUFrQixFQUE1QjtBQUNEOztBQUVELHVCQUFhLFVBQWIsQ0FBd0IsUUFBUSxhQUFhLENBQTdDLEVBQWdELFFBQVMsS0FBSyxVQUFMLEdBQWtCLENBQTNFLEVBQStFLEtBQUssR0FBcEYsRUFBeUYsS0FBSyxVQUE5RixFQUEwRyxLQUFLLFVBQS9HLEVBQTJILEtBQUssV0FBaEksRUFBNkksS0FBSyxpQkFBbEosRUFBcUssS0FBSyxxQkFBMUs7O0FBRUEsV0FBSyxTQUFMLENBQWUsQ0FBZixHQUFtQixRQUFRLEtBQUssaUJBQUwsR0FBeUIsRUFBakMsR0FBc0MsVUFBekQ7O0FBRUEsVUFBSSxLQUFLLFNBQUwsS0FBbUIsTUFBbkIsSUFBNkIsS0FBSyxTQUFMLEtBQW1CLFVBQWhELElBQThELEtBQUssU0FBTCxLQUFtQixRQUFyRixFQUErRjtBQUM3RixhQUFLLFNBQUwsQ0FBZSxDQUFmLEdBQW1CLEtBQUssU0FBTCxDQUFlLENBQWYsR0FBbUIsS0FBSyxVQUFMLEdBQWtCLEVBQXhEO0FBQ0Q7O0FBRUQsV0FBSyxTQUFMLENBQWUsQ0FBZixHQUFtQixLQUFuQjs7QUFFQSxXQUFLLFNBQUwsQ0FBZSxNQUFmLENBQXNCLElBQXRCOztBQUVBLFdBQUssR0FBTCxDQUFTLE9BQVQ7O0FBRUEsVUFBSSxZQUFZLENBQWhCLEVBQW1CO0FBQ2pCLHVCQUFlLEtBQUssR0FBTCxDQUFTLFlBQVQsRUFBdUIsS0FBSyxTQUFMLENBQWUsTUFBdEMsQ0FBZjtBQUNELE9BRkQsTUFFTztBQUNMLHVCQUFlLEtBQUssU0FBTCxDQUFlLE1BQTlCO0FBQ0Q7O0FBRUQsVUFBSSxDQUFDLEtBQUssS0FBTCxDQUFXLElBQVgsQ0FBZ0IsS0FBSyxlQUFyQixFQUFzQyxPQUEzQyxFQUNFLEtBQUssR0FBTCxDQUFTLFdBQVQsR0FBdUIsQ0FBdkI7O0FBRUYsVUFBSSxXQUFXLG9CQUFvQixLQUFLLEVBQXpCLENBQWY7QUFDQSxXQUFLLFFBQUwsQ0FBYyxTQUFkLEdBQTBCLFFBQTFCO0FBQ0EsV0FBSyxRQUFMLENBQWMsU0FBZDtBQUNBLFdBQUssUUFBTCxDQUFjLFFBQWQsQ0FBdUIsTUFBdkIsRUFBK0IsS0FBSyxTQUFMLENBQWUsQ0FBOUMsRUFBaUQsS0FBSyxTQUFMLENBQWUsQ0FBZixHQUFtQixLQUFLLFNBQUwsQ0FBZSxLQUFsQyxHQUEwQyxNQUEzRixFQUFtRyxLQUFLLFNBQUwsQ0FBZSxNQUFsSDs7QUFFQSxXQUFLLEVBQUwsR0FBVSxLQUFLLEtBQUwsQ0FBVyxhQUFYLENBQXlCLFNBQXpCLENBQW1DLEtBQUssRUFBeEMsRUFBNEMsRUFBNUMsR0FBaUQsTUFBM0Q7QUFDQSxXQUFLLEVBQUwsR0FBVSxLQUFLLEtBQUwsQ0FBVyxhQUFYLENBQXlCLFNBQXpCLENBQW1DLEtBQUssRUFBeEMsRUFBNEMsRUFBNUMsR0FBaUQsS0FBSyxTQUFMLENBQWUsQ0FBMUU7QUFDQSxXQUFLLEVBQUwsR0FBVSxLQUFLLEtBQUwsQ0FBVyxhQUFYLENBQXlCLFNBQXpCLENBQW1DLEtBQUssRUFBeEMsRUFBNEMsRUFBNUMsR0FBaUQsS0FBSyxTQUFMLENBQWUsQ0FBZixHQUFtQixLQUFLLFNBQUwsQ0FBZSxLQUE3RjtBQUNBLFdBQUssRUFBTCxHQUFVLEtBQUssS0FBTCxDQUFXLGFBQVgsQ0FBeUIsU0FBekIsQ0FBbUMsS0FBSyxFQUF4QyxFQUE0QyxFQUE1QyxHQUFpRCxLQUFLLFNBQUwsQ0FBZSxDQUFmLEdBQW1CLEtBQUssU0FBTCxDQUFlLE1BQTdGO0FBQ0Q7QUFDRCxnQkFBWSxZQUFZLFlBQXhCO0FBQ0Q7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFVLGFBQVYsQ0FBd0IsYUFBeEIsQ0FBc0MsUUFBdEMsRUFBZ0QsRUFBRSxPQUFPLEtBQUssS0FBTCxHQUFhLENBQWIsR0FBaUIsQ0FBMUIsRUFBNkIsUUFBUSxLQUFLLE1BQUwsR0FBYyxDQUFkLEdBQWtCLENBQXZELEVBQWhEOztBQUVBLE9BQUssTUFBTCxHQUFjO0FBQ1osUUFBSSxJQURRLEVBQ0YsSUFBSSxHQURGLEVBQ08sSUFBSSxPQUFPLEtBQUssS0FEdkIsRUFDOEIsSUFBSSxNQUFNLEtBQUs7QUFEN0MsR0FBZDtBQUdELENBalZEOztrQkFtVmUsTTs7Ozs7Ozs7O0FDdlhmOzs7O0FBQ0E7Ozs7QUFFQSxTQUFTLFNBQVQsQ0FBbUIsR0FBbkIsRUFBd0IsT0FBeEIsRUFBaUM7O0FBRS9CLFlBQVUsSUFBVixDQUFlLFdBQWYsQ0FBMkIsSUFBM0IsQ0FBZ0MsSUFBaEMsRUFBc0MsV0FBdEMsRUFBbUQsT0FBbkQ7O0FBRUEsT0FBSyxHQUFMLEdBQVcsR0FBWDtBQUNBLE9BQUssUUFBTCxHQUFnQixJQUFoQjtBQUNBLE9BQUssWUFBTCxHQUFvQixJQUFwQjtBQUNBLE9BQUssV0FBTCxHQUFtQixrQ0FBc0IsS0FBSyxVQUEzQixFQUF1QyxLQUFLLFFBQTVDLEVBQXNELEtBQUssVUFBM0QsQ0FBbkI7QUFDRDs7QUFFRCxtQkFBTyxTQUFQOztBQUVBLFVBQVUsU0FBVixDQUFvQixNQUFwQixHQUE2QixVQUFVLGVBQVYsRUFBMkI7QUFDdEQsTUFBSSxlQUFKLEVBQ0UsS0FBSyxHQUFMLENBQVMsSUFBVDs7QUFFRixNQUFJLE9BQU8sS0FBSyxHQUFMLENBQVMsSUFBcEI7QUFDQSxPQUFLLEdBQUwsQ0FBUyxZQUFULEdBQXdCLEtBQUssWUFBN0I7O0FBRUEsTUFBSSxVQUFVLENBQWQ7O0FBRUEsTUFBSSxLQUFLLFFBQVQsRUFDRSxLQUFLLFdBQUwsQ0FBaUIsS0FBSyxHQUF0Qjs7QUFFRixPQUFLLEdBQUwsQ0FBUyxTQUFULENBQW1CLEtBQUssQ0FBeEIsRUFBMkIsS0FBSyxDQUFMLEdBQVMsT0FBcEM7O0FBRUEsTUFBSSxLQUFLLFlBQUwsS0FBc0IsUUFBMUIsRUFBb0M7QUFDbEMsY0FBVSxDQUFDLEtBQUssV0FBTixHQUFvQixDQUE5QjtBQUNEOztBQUVELE9BQUssR0FBTCxDQUFTLElBQVQsR0FBZ0IsS0FBSyxjQUFMLEVBQWhCOztBQUVBLE9BQUssR0FBTCxDQUFTLE1BQVQsQ0FBZ0IsS0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixLQUFLLEtBQXJDOztBQUVBLE1BQUksV0FBVyxDQUFmO0FBQ0EsTUFBSSxVQUFVLEtBQUssT0FBbkI7QUFDQTtBQUNBLE1BQUksT0FBTyxJQUFYOztBQUVBLE1BQUssS0FBSyxlQUFMLEdBQXVCLENBQXZCLElBQTRCLEtBQUssV0FBbEMsSUFBa0QsS0FBSyxlQUEzRCxFQUE0RTtBQUMxRSxTQUFLLEdBQUwsQ0FBUyxTQUFULENBQW1CLENBQW5CLEVBQXNCLE9BQXRCLEVBQStCLEtBQUssS0FBcEMsRUFBMkMsS0FBSyxNQUFoRCxFQUF3RCxLQUFLLFlBQTdELEVBQTJFLEtBQUssZUFBaEYsRUFBaUcsS0FBSyxlQUF0RyxFQUF1SCxLQUFLLFdBQTVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Q7O0FBRUQsT0FBSyxHQUFMLENBQVMsU0FBVCxHQUFxQixLQUFLLFNBQTFCOztBQUVBLE9BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLFlBQUwsQ0FBa0IsS0FBbEIsQ0FBd0IsTUFBNUMsRUFBb0QsR0FBcEQsRUFBeUQ7O0FBRXZELFdBQU8sS0FBSyxZQUFMLENBQWtCLEtBQWxCLENBQXdCLENBQXhCLENBQVA7QUFDQSxRQUFJLEtBQUssZUFBTCxLQUF5QixPQUE3QixFQUNFLFdBQVcsS0FBSyxLQUFMLEdBQWEsS0FBSyxLQUFsQixHQUEwQixLQUFLLE9BQTFDLENBREYsS0FFSyxJQUFJLEtBQUssZUFBTCxLQUF5QixNQUE3QixFQUNILFdBQVcsS0FBSyxPQUFoQixDQURHLEtBRUEsSUFBSSxLQUFLLGVBQUwsS0FBeUIsUUFBN0IsRUFDSCxXQUFXLENBQUMsS0FBSyxLQUFMLEdBQWEsS0FBSyxPQUFMLEdBQWUsQ0FBN0IsSUFBa0MsQ0FBbEMsR0FBc0MsS0FBSyxLQUFMLEdBQWEsQ0FBbkQsR0FBdUQsS0FBSyxPQUF2RTs7QUFFRixTQUFLLEdBQUwsQ0FBUyxRQUFULENBQWtCLEtBQUssSUFBdkIsRUFBNkIsUUFBN0IsRUFBdUMsT0FBdkM7O0FBRUEsZUFBVyxLQUFLLE1BQWhCO0FBQ0Q7O0FBRUQsT0FBSyxHQUFMLENBQVMsSUFBVCxHQUFnQixJQUFoQjs7QUFFQSxNQUFJLGVBQUosRUFDRSxLQUFLLEdBQUwsQ0FBUyxPQUFUO0FBQ0gsQ0F6REQ7O0FBMkRBLFVBQVUsU0FBVixDQUFvQixPQUFwQixHQUE4QixVQUFVLElBQVYsRUFBZ0I7QUFDNUMsT0FBSyxJQUFMLEdBQVksSUFBWjtBQUNBLE9BQUssUUFBTCxHQUFnQixJQUFoQjtBQUNBLE9BQUssWUFBTCxHQUFvQixJQUFwQjtBQUNELENBSkQ7O0FBTUEsVUFBVSxTQUFWLENBQW9CLFdBQXBCLEdBQWtDLFlBQVk7QUFDNUMsTUFBSSxLQUFLLFFBQUwsS0FBa0IsSUFBdEIsRUFBNEI7QUFDMUIsVUFBTyw4Q0FBUDtBQUNEOztBQUVELE9BQUssU0FBTCxDQUFlLEtBQUssR0FBcEI7QUFDQSxPQUFLLFFBQUwsR0FBZ0IsS0FBaEI7O0FBRUEsU0FBTztBQUNMLFdBQU8sS0FBSyxLQURQLEVBQ2MsUUFBUSxLQUFLO0FBRDNCLEdBQVA7QUFHRCxDQVhEOztBQWFBLFVBQVUsU0FBVixDQUFvQixpQkFBcEIsR0FBd0MsVUFBVSxJQUFWLEVBQWdCLEtBQWhCLEVBQXVCLFFBQXZCLEVBQWlDO0FBQ3ZFLFNBQU8sT0FBTyxJQUFQLENBQVA7QUFDQSxhQUFXLFlBQVksS0FBdkI7O0FBRUEsTUFBSSxDQUFDLElBQUwsRUFDRSxPQUFPO0FBQ0wsVUFBTSxFQURELEVBQ0ssT0FBTztBQURaLEdBQVA7O0FBSUYsTUFBSSxZQUFZLENBQWhCO0FBQUEsTUFDRSxNQUFNLENBRFI7QUFBQSxNQUVFLE1BQU0sS0FBSyxNQUFMLEdBQWMsQ0FGdEI7QUFBQSxNQUdFLE1BQU0sUUFIUjs7QUFLQSxPQUFLLEdBQUwsQ0FBUyxJQUFULEdBQWdCLEtBQUssY0FBTCxFQUFoQjs7QUFFQSxTQUFPLE9BQU8sR0FBZCxFQUFtQjtBQUNqQixVQUFNLEtBQUssS0FBTCxDQUFXLENBQUMsTUFBTSxHQUFQLElBQWMsQ0FBekIsQ0FBTjtBQUNBLFFBQUksV0FBVyxLQUFLLE1BQUwsQ0FBWSxDQUFaLEVBQWUsTUFBTSxDQUFyQixDQUFmOztBQUVBLGdCQUFZLEtBQUssR0FBTCxDQUFTLFdBQVQsQ0FBcUIsUUFBckIsRUFBK0IsS0FBM0M7O0FBRUEsUUFBSSxZQUFZLEtBQWhCLEVBQXVCO0FBQ3JCLFlBQU0sTUFBTSxDQUFaO0FBQ0QsS0FGRCxNQUVPLElBQUksWUFBWSxLQUFoQixFQUF1QjtBQUM1QixZQUFNLE1BQU0sQ0FBWjtBQUNELEtBRk0sTUFFQTtBQUNMO0FBQ0Q7QUFDRjs7QUFFRDtBQUNBLE1BQUksWUFBWSxLQUFaLElBQXFCLFNBQVMsTUFBVCxHQUFrQixDQUEzQyxFQUE4QztBQUM1QyxlQUFXLFNBQVMsTUFBVCxDQUFnQixDQUFoQixFQUFtQixTQUFTLE1BQVQsR0FBa0IsQ0FBckMsQ0FBWDtBQUNBLGdCQUFZLEtBQUssR0FBTCxDQUFTLFdBQVQsQ0FBcUIsUUFBckIsRUFBK0IsS0FBM0M7QUFDRDs7QUFFRCxNQUFJLFlBQVksSUFBaEI7O0FBRUEsTUFBSSxTQUFTLE1BQVQsS0FBb0IsS0FBSyxNQUF6QixJQUFtQyxLQUFLLFNBQVMsTUFBZCxNQUEwQixHQUFqRSxFQUNFLFlBQVksS0FBWjs7QUFFRixNQUFJLFNBQUosRUFBZTtBQUNiLFFBQUksY0FBYyxTQUFTLEtBQVQsQ0FBZSxHQUFmLENBQWxCO0FBQ0EsUUFBSSxZQUFZLE1BQVosR0FBcUIsQ0FBekIsRUFDRSxZQUFZLEdBQVo7O0FBRUYsZUFBVyxZQUFZLElBQVosQ0FBaUIsR0FBakIsQ0FBWDtBQUNBLGdCQUFZLEtBQUssR0FBTCxDQUFTLFdBQVQsQ0FBcUIsUUFBckIsRUFBK0IsS0FBM0M7QUFDRDs7QUFFRCxTQUFPO0FBQ0wsVUFBTSxRQURELEVBQ1csT0FBTztBQURsQixHQUFQO0FBR0QsQ0F0REQ7O0FBd0RBLFVBQVUsU0FBVixDQUFvQixTQUFwQixHQUFnQyxTQUFTLFFBQVQsR0FBb0I7QUFDbEQ7QUFDQSxNQUFJLE9BQU8sSUFBSSxNQUFKLENBQVcsdUJBQVcsT0FBTyxLQUFLLElBQVosQ0FBWCxDQUFYLENBQVg7QUFDQSxNQUFJLFFBQVEsRUFBWjtBQUNBLE1BQUksT0FBTyxLQUFLLEdBQUwsQ0FBUyxJQUFwQixDQUprRCxDQUl4QjtBQUMxQixNQUFJLFNBQVMsQ0FBYjtBQUNBLE1BQUksUUFBUSxDQUFaOztBQUVBLE9BQUssR0FBTCxDQUFTLElBQVQsR0FBZ0IsS0FBSyxjQUFMLEVBQWhCOztBQUVBLFNBQU8sS0FBSyxNQUFMLEdBQWMsQ0FBckIsRUFBd0I7O0FBRXRCLFFBQUksV0FBVyxLQUFLLFFBQUwsR0FBZ0IsS0FBSyxPQUFMLEdBQWUsQ0FBOUM7QUFDQSxRQUFJLFlBQVksS0FBSyxTQUFMLEdBQWlCLEtBQUssT0FBTCxHQUFlLENBQWhEOztBQUVBLFFBQUksT0FBTyxLQUFLLGlCQUFMLENBQXVCLElBQXZCLEVBQTZCLFFBQTdCLEVBQXVDLEtBQXZDLENBQVg7QUFDQSxTQUFLLE1BQUwsR0FBYyxLQUFLLFdBQW5COztBQUVBLFVBQU0sSUFBTixDQUFXLElBQVg7O0FBRUEsWUFBUSxLQUFLLEdBQUwsQ0FBUyxLQUFULEVBQWdCLEtBQUssS0FBckIsQ0FBUjtBQUNBLGNBQVUsS0FBSyxNQUFmO0FBQ0EsV0FBTyx1QkFBVyxLQUFLLEtBQUwsQ0FBVyxLQUFLLElBQUwsQ0FBVSxNQUFyQixFQUE2QixLQUFLLE1BQWxDLENBQVgsQ0FBUDs7QUFFQSxRQUFJLGFBQWEsU0FBUyxTQUExQixFQUFxQztBQUNuQyxVQUFJLE9BQU8sTUFBTSxHQUFOLEVBQVg7QUFDQSxnQkFBVSxLQUFLLE1BQWY7QUFDRDtBQUNGOztBQUVELE9BQUssWUFBTCxHQUFvQjtBQUNsQixXQUFPLEtBRFcsRUFDSixPQUFPLEtBREgsRUFDVSxRQUFRO0FBRGxCLEdBQXBCO0FBR0EsT0FBSyxLQUFMLEdBQWEsUUFBUSxLQUFLLE9BQUwsR0FBZSxDQUFwQztBQUNBLE9BQUssTUFBTCxHQUFjLFNBQVMsS0FBSyxPQUFMLEdBQWUsQ0FBdEM7O0FBRUEsT0FBSyxHQUFMLENBQVMsSUFBVCxHQUFnQixJQUFoQixDQXBDa0QsQ0FvQzVCO0FBQ3ZCLENBckNEOztBQXVDQSxVQUFVLFNBQVYsQ0FBb0IsY0FBcEIsR0FBcUMsWUFBWTtBQUMvQztBQUNBLFNBQU8sMEJBQWMsRUFBZCxFQUFrQixJQUFsQixFQUF3QixJQUF4QixDQUFQO0FBQ0QsQ0FIRDs7a0JBS2UsUzs7Ozs7Ozs7O0FDak1mOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBLFNBQVMsS0FBVCxDQUFlLEtBQWYsRUFBc0IsT0FBdEIsRUFBK0I7QUFDOUIsT0FBTSxJQUFOLENBQVcsV0FBWCxDQUF1QixJQUF2QixDQUE0QixJQUE1QixFQUFrQyxPQUFsQyxFQUEyQyxPQUEzQyxFQUFvRCxNQUFNLEtBQTFEOztBQUVBLE1BQUssS0FBTCxHQUFhLEtBQWI7QUFDQSxNQUFLLE1BQUwsR0FBYyxNQUFNLE1BQXBCO0FBQ0EsTUFBSyxHQUFMLEdBQVcsS0FBSyxLQUFMLENBQVcsR0FBdEI7O0FBR0EsS0FBSSxPQUFRLEtBQUssUUFBTCxDQUFjLFFBQXRCLEtBQW9DLFdBQXhDLEVBQXFEOztBQUVwRCxPQUFLLFFBQUwsR0FBZ0IsS0FBSyxLQUFMLENBQVcsZUFBWCxDQUEyQixLQUFLLFFBQWhDLENBQWhCOztBQUVBO0FBQ0E7O0FBRUQsTUFBSyxLQUFMLEdBQWEsSUFBYixFQUFrQjtBQUNsQixNQUFLLE1BQUwsR0FBYyxJQURkLENBZjhCLENBZ0JaO0FBQ2xCLE1BQUssTUFBTCxHQUFjO0FBQ2IsTUFBSSxJQURTLEVBQ0gsSUFBSSxJQURELEVBQ08sSUFBSSxJQURYLEVBQ2lCLElBQUk7QUFEckIsRUFBZDtBQUdBOztBQUVELG1CQUFPLEtBQVA7O0FBRUEsTUFBTSxTQUFOLENBQWdCLE1BQWhCLEdBQXlCLFlBQVk7O0FBRXBDLEtBQUksQ0FBQyxLQUFLLElBQVYsRUFBZ0I7O0FBRWhCLEtBQUksWUFBYSxDQUFDLEtBQUssa0JBQU4sR0FBMkIsS0FBSyxLQUFoQyxHQUF3QyxLQUFLLEtBQUwsQ0FBVyxRQUFwRTtBQUNBLEtBQUksWUFBWSxVQUFVLGFBQVYsQ0FBd0IsWUFBeEIsRUFBaEI7QUFDQSxLQUFJLE9BQU8sVUFBVSxFQUFyQjtBQUNBLEtBQUksTUFBTSxVQUFVLEVBQXBCO0FBQ0EsS0FBSSxRQUFRLENBQVo7QUFDQSxLQUFJLFlBQVksQ0FBaEI7QUFDQSxLQUFJLGtCQUFrQixDQUF0QixDQVZvQyxDQVVYO0FBQ3pCLEtBQUksY0FBYyxLQUFLLEtBQUwsQ0FBVyxXQUFYLElBQTBCLEtBQUssS0FBTCxDQUFXLGFBQXJDLElBQXNELEtBQUssYUFBTCxLQUF1QixLQUE3RSxHQUFxRixFQUFyRixHQUEwRixDQUE1RyxDQVhvQyxDQVcyRTs7QUFFL0csS0FBSSx3QkFBSjtBQUNBLEtBQUksUUFBSjs7QUFFQSxLQUFJLEtBQUssYUFBTCxLQUF1QixLQUF2QixJQUFnQyxLQUFLLGFBQUwsS0FBdUIsUUFBM0QsRUFBcUU7QUFDcEUsTUFBSSxLQUFLLFFBQUwsS0FBa0IsSUFBdEIsRUFDQyxLQUFLLFFBQUwsR0FBZ0IsVUFBVSxLQUFWLEdBQWtCLGtCQUFrQixDQUFwQyxHQUF3QyxlQUFlLEtBQUssZUFBTCxLQUF5QixRQUF6QixHQUFvQyxDQUFwQyxHQUF3QyxDQUF2RCxDQUF4RDs7QUFFRCxjQUFZLFVBQVUsTUFBVixHQUFtQixFQUFuQixHQUF3QixLQUFLLE1BQTdCLEdBQXNDLGVBQWxEO0FBQ0EsVUFBUSxDQUFSO0FBQ0EsRUFORCxNQU9LLElBQUksS0FBSyxhQUFMLEtBQXVCLFFBQTNCLEVBQXFDOztBQUV6QyxNQUFJLEtBQUssZUFBTCxLQUF5QixNQUF6QixJQUFtQyxLQUFLLGVBQUwsS0FBeUIsT0FBaEUsRUFBeUU7QUFDeEUsT0FBSSxLQUFLLFFBQUwsS0FBa0IsSUFBdEIsRUFDQyxLQUFLLFFBQUwsR0FBZ0IsVUFBVSxNQUFWLEdBQW1CLGtCQUFrQixDQUFyRDs7QUFFRCxlQUFZLFVBQVUsS0FBVixHQUFrQixFQUFsQixHQUF1QixLQUFLLE1BQTVCLEdBQXFDLGVBQWpEO0FBQ0EsR0FMRCxNQUtPLElBQUksS0FBSyxlQUFMLEtBQXlCLFFBQTdCLEVBQXVDO0FBQzdDLE9BQUksS0FBSyxRQUFMLEtBQWtCLElBQXRCLEVBQ0MsS0FBSyxRQUFMLEdBQWdCLFVBQVUsS0FBVixHQUFrQixrQkFBa0IsQ0FBcEQ7O0FBRUQsZUFBWSxVQUFVLE1BQVYsR0FBbUIsRUFBbkIsR0FBd0Isa0JBQWtCLENBQXREO0FBQ0E7QUFDRDs7QUFFRCxLQUFJLENBQUMsS0FBSyxJQUFWLEVBQ0MsWUFBWSxLQUFLLEdBQUwsQ0FBUyxTQUFULEVBQW9CLEtBQUssR0FBTCxDQUFTLEtBQUssUUFBTCxHQUFnQixHQUF6QixFQUE4QixLQUFLLFFBQUwsR0FBZ0IsS0FBSyxPQUFMLEdBQWUsR0FBN0QsQ0FBcEIsQ0FBWjtBQUNEOztBQUVBLEtBQUksWUFBWSx5QkFBYyxLQUFLLEdBQW5CLEVBQXdCO0FBQ3ZDLFlBQVUsS0FBSyxRQUR3QixFQUNkLFlBQVksS0FBSyxVQURILEVBQ2UsV0FBVyxLQUFLLFNBRC9CO0FBRXZDLGFBQVcsS0FBSyxTQUZ1QixFQUVaLFlBQVksS0FBSyxVQUZMO0FBR3ZDLG1CQUFpQixLQUFLLGVBSGlCLEVBR0EsZUFBZSxLQUFLLGFBSHBCO0FBSXZDLGVBQWEsS0FBSyxXQUpxQixFQUlSLGlCQUFpQixLQUFLLGVBSmQ7QUFLdkMsbUJBQWlCLEtBQUssZUFMaUI7QUFNdkMsWUFBVSxLQUFLLFFBTndCLEVBTWQsV0FBVyxTQU5HO0FBT3ZDLGdCQUFjLEtBQUssWUFQb0I7QUFRdkMsUUFBTSxLQUFLLElBUjRCO0FBU3ZDLFdBQVMsS0FBSyxPQVR5QjtBQVV2QyxnQkFBYztBQVZ5QixFQUF4QixDQUFoQjs7QUFhQSxLQUFJLGdCQUFnQixVQUFVLFdBQVYsRUFBcEI7O0FBRUEsS0FBSSxLQUFLLGFBQUwsS0FBdUIsS0FBdkIsSUFBZ0MsS0FBSyxhQUFMLEtBQXVCLFFBQTNELEVBQXFFOztBQUVwRSxNQUFJLEtBQUssYUFBTCxLQUF1QixLQUEzQixFQUFrQztBQUNqQyxTQUFNLFVBQVUsRUFBVixHQUFlLGVBQXJCO0FBQ0EsY0FBVyxLQUFYO0FBQ0EsR0FIRCxNQUlLLElBQUksS0FBSyxhQUFMLEtBQXVCLFFBQTNCLEVBQXFDO0FBQ3pDLFNBQU0sVUFBVSxFQUFWLEdBQWUsZUFBZixHQUFpQyxjQUFjLE1BQXJEO0FBQ0EsY0FBVyxRQUFYO0FBQ0E7O0FBRUQsTUFBSSxLQUFLLGVBQUwsS0FBeUIsTUFBN0IsRUFBcUM7QUFDcEMsVUFBTyxVQUFVLEVBQVYsR0FBZSxlQUF0QjtBQUNBLEdBRkQsTUFHSyxJQUFJLEtBQUssZUFBTCxLQUF5QixRQUE3QixFQUF1QztBQUMzQyxVQUFPLFVBQVUsRUFBVixHQUFlLFVBQVUsS0FBVixHQUFrQixDQUFqQyxHQUFxQyxjQUFjLEtBQWQsR0FBc0IsQ0FBbEU7QUFDQSxHQUZJLE1BR0EsSUFBSSxLQUFLLGVBQUwsS0FBeUIsT0FBN0IsRUFBc0M7QUFDMUMsVUFBTyxVQUFVLEVBQVYsR0FBZSxlQUFmLEdBQWlDLGNBQWMsS0FBL0MsR0FBdUQsV0FBOUQ7QUFDQTs7QUFFRCw2QkFBMkIsS0FBSyxlQUFoQzs7QUFFQSxPQUFLLEtBQUwsR0FBYSxjQUFjLEtBQTNCO0FBQ0EsT0FBSyxNQUFMLEdBQWMsY0FBYyxNQUE1QjtBQUNBLEVBekJELE1BMEJLLElBQUksS0FBSyxhQUFMLEtBQXVCLFFBQTNCLEVBQXFDOztBQUV6QyxNQUFJLEtBQUssZUFBTCxLQUF5QixNQUE3QixFQUFxQzs7QUFFcEMsVUFBTyxVQUFVLEVBQVYsR0FBZSxlQUF0QjtBQUNBLFNBQU0sVUFBVSxFQUFWLEdBQWUsZUFBZixJQUFrQyxLQUFLLFFBQUwsR0FBZ0IsQ0FBaEIsR0FBb0IsY0FBYyxLQUFkLEdBQXNCLENBQTVFLENBQU47QUFDQSxXQUFRLENBQUMsRUFBVDs7QUFFQSxjQUFXLE1BQVg7QUFDQSxRQUFLLEtBQUwsR0FBYSxjQUFjLE1BQTNCO0FBQ0EsUUFBSyxNQUFMLEdBQWMsY0FBYyxLQUE1QjtBQUNBLEdBVEQsTUFVSyxJQUFJLEtBQUssZUFBTCxLQUF5QixPQUE3QixFQUFzQztBQUMxQyxVQUFPLFVBQVUsRUFBVixHQUFlLGVBQXRCO0FBQ0EsU0FBTSxVQUFVLEVBQVYsR0FBZSxlQUFmLElBQWtDLEtBQUssUUFBTCxHQUFnQixDQUFoQixHQUFvQixjQUFjLEtBQWQsR0FBc0IsQ0FBNUUsQ0FBTjtBQUNBLFdBQVEsRUFBUjs7QUFFQSxjQUFXLE9BQVg7QUFDQSxRQUFLLEtBQUwsR0FBYSxjQUFjLE1BQTNCO0FBQ0EsUUFBSyxNQUFMLEdBQWMsY0FBYyxLQUE1QjtBQUNBLEdBUkksTUFTQSxJQUFJLEtBQUssZUFBTCxLQUF5QixRQUE3QixFQUF1QztBQUMzQyxTQUFNLFVBQVUsRUFBVixJQUFnQixVQUFVLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUIsY0FBYyxNQUFkLEdBQXVCLENBQTlELENBQU47QUFDQSxVQUFPLFVBQVUsRUFBVixJQUFnQixVQUFVLEtBQVYsR0FBa0IsQ0FBbEIsR0FBc0IsY0FBYyxLQUFkLEdBQXNCLENBQTVELENBQVA7O0FBRUEsY0FBVyxRQUFYO0FBQ0EsUUFBSyxLQUFMLEdBQWEsY0FBYyxLQUEzQjtBQUNBLFFBQUssTUFBTCxHQUFjLGNBQWMsTUFBNUI7QUFDQTs7QUFFRCw2QkFBMkIsUUFBM0I7QUFDQTs7QUFFRCxXQUFVLENBQVYsR0FBYyxJQUFkO0FBQ0EsV0FBVSxDQUFWLEdBQWMsR0FBZDtBQUNBLFdBQVUsS0FBVixHQUFrQixLQUFsQjtBQUNBLFdBQVUsZUFBVixHQUE0Qix3QkFBNUI7QUFDQSxXQUFVLE1BQVYsQ0FBaUIsSUFBakI7O0FBRUEsV0FBVSxhQUFWLENBQXdCLGFBQXhCLENBQXNDLFFBQXRDLEVBQWdEO0FBQy9DLFNBQU8sS0FBSyxLQUFMLElBQWMsYUFBYSxNQUFiLElBQXVCLGFBQWEsT0FBcEMsR0FBOEMsS0FBSyxNQUFMLEdBQWMsZUFBNUQsR0FBOEUsQ0FBNUYsQ0FEd0M7QUFFL0MsVUFBUSxLQUFLLE1BQUwsSUFBZSxhQUFhLEtBQWIsSUFBc0IsYUFBYSxRQUFuQyxHQUE4QyxLQUFLLE1BQUwsR0FBYyxlQUE1RCxHQUE4RSxDQUE3RjtBQUZ1QyxFQUFoRDs7QUFLQSxNQUFLLE1BQUwsR0FBYztBQUNiLE1BQUksSUFEUyxFQUNILElBQUksR0FERCxFQUNNLElBQUksT0FBTyxLQUFLLEtBRHRCLEVBQzZCLElBQUksTUFBTSxLQUFLO0FBRDVDLEVBQWQ7O0FBSUEsTUFBSyxHQUFMLENBQVMsWUFBVCxHQUF3QixLQUF4QjtBQUNBLENBcElEOztrQkFzSWUsSzs7Ozs7Ozs7O0FDbEtmOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBRUEsU0FBUyxPQUFULENBQWlCLEtBQWpCLEVBQXdCLE9BQXhCLEVBQWlDLEtBQWpDLEVBQXdDOztBQUV0QyxVQUFRLElBQVIsQ0FBYSxXQUFiLENBQXlCLElBQXpCLENBQThCLElBQTlCLEVBQW9DLFNBQXBDLEVBQStDLE9BQS9DLEVBQXdELEtBQXhEOztBQUVBLE9BQUssS0FBTCxHQUFhLEtBQWI7QUFDQSxPQUFLLE1BQUwsR0FBYyxNQUFNLE1BQXBCO0FBQ0EsT0FBSyxHQUFMLEdBQVcsS0FBSyxLQUFMLENBQVcsR0FBdEI7QUFDQSxPQUFLLGtCQUFMLEdBQTBCLENBQUMsQ0FBM0I7QUFDQSxPQUFLLHFCQUFMLEdBQTZCLENBQUMsQ0FBOUI7QUFDQSxPQUFLLFFBQUwsR0FBZ0IsQ0FBaEI7QUFDQSxPQUFLLE1BQUwsR0FBYyxHQUFkO0FBQ0EsT0FBSyxNQUFMLEdBQWMsR0FBZDs7QUFFQSxPQUFLLFdBQUw7QUFDRDs7QUFFRCxtQkFBTyxPQUFQOztBQUVBLFFBQVEsU0FBUixDQUFrQixXQUFsQixHQUFnQyxZQUFZOztBQUUxQyxNQUFJLEtBQUssT0FBVCxFQUFrQjtBQUNoQixTQUFLLFNBQUwsR0FBaUIsU0FBUyxhQUFULENBQXVCLEtBQXZCLENBQWpCO0FBQ0EsU0FBSyxTQUFMLENBQWUsWUFBZixDQUE0QixPQUE1QixFQUFxQyx3QkFBckM7QUFDQSxTQUFLLFNBQUwsQ0FBZSxLQUFmLENBQXFCLFFBQXJCLEdBQWdDLFVBQWhDO0FBQ0EsU0FBSyxTQUFMLENBQWUsS0FBZixDQUFxQixNQUFyQixHQUE4QixNQUE5QjtBQUNBLFNBQUssU0FBTCxDQUFlLEtBQWYsQ0FBcUIsU0FBckIsR0FBaUMsaUNBQWpDO0FBQ0EsU0FBSyxTQUFMLENBQWUsS0FBZixDQUFxQixNQUFyQixHQUE4QixNQUE5QjtBQUNBO0FBQ0EsU0FBSyxTQUFMLENBQWUsS0FBZixDQUFxQixPQUFyQixHQUErQixNQUEvQjtBQUNBOztBQUVBLFFBQUksY0FBYyw0QkFBbEI7QUFDQSxtQkFBZSxlQUFmO0FBQ0EsbUJBQWUsa0JBQWY7QUFDQSxtQkFBZSxvQkFBZjtBQUNBLG1CQUFlLDBCQUFmO0FBQ0EsbUJBQWUsZUFBZjtBQUNBLG1CQUFlLDhDQUFmO0FBQ0EsbUJBQWUsc0JBQWY7QUFDQSxtQkFBZSxrQkFBa0IsMkJBQW9CLFNBQXBCLEdBQWdDLFNBQWxELENBQWY7QUFDQSxtQkFBZSxrQkFBZjtBQUNBLG1CQUFlLGlCQUFmO0FBQ0EsbUJBQWUsOENBQWY7QUFDQSxtQkFBZSxtQkFBZjtBQUNBLG1CQUFlLHlCQUFmOztBQUVBO0FBQ0EsbUJBQWUsMkJBQW9CLG1DQUFwQixHQUEwRCwrQkFBekU7O0FBRUEsbUJBQWUsbUJBQWY7QUFDQSxtQkFBZSxzQkFBZjtBQUNBO0FBQ0EsbUJBQWUscUJBQWY7O0FBRUE7QUFDQSxtQkFBZSx3QkFBZjtBQUNBLG1CQUFlLDJCQUFmO0FBQ0EsbUJBQWUsNEJBQWY7QUFDQSxtQkFBZSx3QkFBZjtBQUNBLG1CQUFlLG9CQUFmOztBQUVBO0FBQ0E7O0FBRUEsUUFBSSx5QkFBSixFQUF3QjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxxQkFBZSw4QkFBZjtBQUNBLHFCQUFlLCtGQUFmO0FBQ0Q7O0FBRUQsbUJBQWUsNEJBQWY7O0FBRUEsU0FBSyxTQUFMLENBQWUsU0FBZixHQUEyQixXQUEzQjtBQUNBLFNBQUssVUFBTCxHQUFrQixLQUFLLFNBQUwsQ0FBZSxVQUFqQzs7QUFHQSxTQUFLLFNBQUwsQ0FBZSxLQUFmLENBQXFCLFlBQXJCLEdBQW9DLEtBQUssVUFBTCxDQUFnQixLQUFoQixDQUFzQixZQUExRDtBQUNBLFNBQUssS0FBTCxDQUFXLGtCQUFYLENBQThCLFdBQTlCLENBQTBDLEtBQUssU0FBL0M7QUFDRDtBQUNGLENBL0REOztBQWlFQSxRQUFRLFNBQVIsQ0FBa0IsZ0JBQWxCLEdBQXFDLFVBQVUsQ0FBVixFQUFhLENBQWIsRUFBZ0I7O0FBRW5ELE1BQUksRUFBRSxLQUFLLFlBQUwsSUFBc0IsSUFBSSxJQUFKLEdBQVcsT0FBWCxLQUF1QixLQUFLLFlBQTdCLEdBQTZDLEVBQXBFLENBQUosRUFBNkU7QUFDM0UsU0FBSyxZQUFMLEdBQW9CLElBQUksSUFBSixHQUFXLE9BQVgsRUFBcEI7QUFDQSxTQUFLLGNBQUwsQ0FBb0IsQ0FBcEIsRUFBdUIsQ0FBdkI7QUFDRDtBQUNGLENBTkQ7O0FBUUEsUUFBUSxTQUFSLENBQWtCLGNBQWxCLEdBQW1DLFVBQVUsTUFBVixFQUFrQixNQUFsQixFQUEwQjtBQUMzRDs7QUFFQSxNQUFJLEtBQUssS0FBTCxDQUFXLGNBQWYsRUFBK0I7QUFDN0I7O0FBRUYsTUFBSSxPQUFRLE1BQVIsS0FBb0IsV0FBcEIsSUFBbUMsT0FBUSxNQUFSLEtBQW9CLFdBQTNELEVBQXdFO0FBQ3RFLFFBQUksTUFBTSxLQUFLLE1BQVgsS0FBc0IsTUFBTSxLQUFLLE1BQVgsQ0FBMUIsRUFDRSxPQURGLEtBRUs7QUFDSCxlQUFTLEtBQUssTUFBZDtBQUNBLGVBQVMsS0FBSyxNQUFkO0FBQ0Q7QUFDRixHQVBELE1BT087QUFDTCxTQUFLLE1BQUwsR0FBYyxNQUFkO0FBQ0EsU0FBSyxNQUFMLEdBQWMsTUFBZDtBQUNEOztBQUdELE1BQUksWUFBWSxJQUFoQjtBQUNBLE1BQUksYUFBYSxJQUFqQjtBQUNBLE1BQUksaUJBQWlCLEVBQXJCO0FBQ0EsTUFBSSxVQUFVLEVBQWQ7QUFDQSxNQUFJLFlBQUo7QUFDQSxNQUFJLGFBQUo7QUFDQSxNQUFJLElBQUksQ0FBUjs7QUFFQSxNQUFJLEtBQUssTUFBTCxJQUFlLEtBQUssT0FBcEIsSUFBK0IsS0FBSyxLQUFMLENBQVcsUUFBWCxDQUFvQixhQUFwQixLQUFzQyxNQUF6RSxFQUFpRjtBQUMvRTtBQUNBLFFBQUksS0FBSyxLQUFMLENBQVcsUUFBWCxDQUFvQixhQUFwQixLQUFzQyxXQUExQyxFQUF1RDtBQUNyRCxVQUFJLENBQUMsS0FBSyxLQUFMLENBQVcsS0FBWCxDQUFpQixlQUFqQixHQUFtQyxLQUFLLEtBQUwsQ0FBVyxLQUFYLENBQWlCLGVBQXJELElBQXdFLEtBQUssS0FBTCxDQUFXLEtBQVgsQ0FBaUIsZUFBakIsQ0FBaUMsTUFBekcsSUFBb0gsS0FBSyxLQUFMLENBQVcsS0FBWCxDQUFpQixlQUFqQixDQUFpQyxFQUFqQyxHQUFzQyxNQUExSixJQUFxSyxLQUFLLEtBQUwsQ0FBVyxLQUFYLENBQWlCLGVBQTFMO0FBQ0QsS0FGRCxNQUdLO0FBQ0gsVUFBSSxDQUFDLEtBQUssS0FBTCxDQUFXLEtBQVgsQ0FBaUIsZUFBakIsR0FBbUMsS0FBSyxLQUFMLENBQVcsS0FBWCxDQUFpQixlQUFyRCxJQUF3RSxLQUFLLEtBQUwsQ0FBVyxLQUFYLENBQWlCLGVBQWpCLENBQWlDLEtBQXpHLElBQWtILFNBQVMsS0FBSyxLQUFMLENBQVcsS0FBWCxDQUFpQixlQUFqQixDQUFpQyxFQUE1SixJQUFrSyxLQUFLLEtBQUwsQ0FBVyxLQUFYLENBQWlCLGVBQXZMO0FBQ0Q7O0FBRUQsUUFBSSxnQkFBZ0IsRUFBcEI7O0FBRUEsU0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLEtBQUssS0FBTCxDQUFXLElBQVgsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDL0MsVUFBSSxRQUFRLEtBQUssS0FBTCxDQUFXLElBQVgsQ0FBZ0IsQ0FBaEIsRUFBbUIsZUFBbkIsQ0FBbUMsQ0FBbkMsRUFBc0MsSUFBdEMsQ0FBWjs7QUFFQSxVQUFJLFNBQVMsTUFBTSxLQUFOLElBQWUsQ0FBNUIsRUFBK0I7QUFDN0IsY0FBTSxVQUFOLEdBQW1CLEtBQUssS0FBTCxDQUFXLElBQVgsQ0FBZ0IsQ0FBaEIsQ0FBbkI7O0FBRUEsWUFBSSxNQUFNLFNBQU4sQ0FBZ0IsQ0FBaEIsS0FBc0IsSUFBMUIsRUFDRSxjQUFjLElBQWQsQ0FBbUIsS0FBbkI7QUFDSDtBQUNGOztBQUVELFFBQUksY0FBYyxNQUFkLEtBQXlCLENBQTdCLEVBQ0U7O0FBRUYsa0JBQWMsSUFBZCxDQUFtQixVQUFVLE1BQVYsRUFBa0IsTUFBbEIsRUFBMEI7QUFDM0MsYUFBTyxPQUFPLFFBQVAsR0FBa0IsT0FBTyxRQUFoQztBQUNELEtBRkQ7O0FBSUEsUUFBSSxVQUFVLGNBQWMsQ0FBZCxDQUFkOztBQUVBLFNBQUssSUFBSSxDQUFULEVBQVksSUFBSSxjQUFjLE1BQTlCLEVBQXNDLEdBQXRDLEVBQTJDOztBQUV6QyxVQUFJLGNBQWMsQ0FBZCxFQUFpQixTQUFqQixDQUEyQixDQUEzQixDQUE2QixPQUE3QixPQUEyQyxRQUFRLFNBQVIsQ0FBa0IsQ0FBbEIsQ0FBb0IsT0FBcEIsRUFBL0MsRUFDRSxRQUFRLElBQVIsQ0FBYSxjQUFjLENBQWQsQ0FBYjtBQUNIOztBQUVELG9CQUFnQixJQUFoQjtBQUVELEdBdkNELE1BdUNPOztBQUVMLFFBQUksZ0JBQWdCLEtBQUssS0FBTCxDQUFXLGdCQUFYLENBQTRCLE1BQTVCLEVBQW9DLE1BQXBDLEVBQTRDLElBQTVDLENBQXBCO0FBQ0E7O0FBRUEsUUFBSSxhQUFKLEVBQW1CO0FBQ2pCLFdBQUsscUJBQUwsR0FBNkIsY0FBYyxjQUEzQztBQUNBLFdBQUssa0JBQUwsR0FBMEIsY0FBYyxVQUFkLENBQXlCLEtBQW5EO0FBQ0QsS0FIRCxNQUdPLDhCQUF1Qjs7QUFFNUIsVUFBSSxLQUFLLHdCQUFZLE1BQVosRUFBb0IsTUFBcEIsRUFBNEIsS0FBSyxLQUFMLENBQVcsYUFBWCxDQUF5QixRQUFyRCxDQUFUO0FBQ0EsVUFBSSxLQUFLLENBQUwsSUFBVSxPQUFPLEtBQUssS0FBTCxDQUFXLGFBQVgsQ0FBeUIsU0FBekIsQ0FBbUMsRUFBbkMsQ0FBUCxLQUFrRCxXQUFoRSxFQUE2RTtBQUFDO0FBQzVFLFlBQUksY0FBYyxLQUFLLEtBQUwsQ0FBVyxhQUFYLENBQXlCLFNBQXpCLENBQW1DLEVBQW5DLENBQWxCOztBQUVBLFlBQUksWUFBWSxVQUFaLEtBQTJCLFlBQS9CLEVBQ0U7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsYUFBSyxrQkFBTCxHQUEwQixZQUFZLGVBQXRDO0FBQ0EsYUFBSyxxQkFBTCxHQUE2QixZQUFZLGNBQVosSUFBOEIsQ0FBOUIsR0FBa0MsWUFBWSxjQUE5QyxHQUErRCxDQUFDLENBQTdGO0FBQ0E7O0FBRUE7QUFDRCxPQWRELE1BZUUsS0FBSyxxQkFBTCxHQUE2QixDQUFDLENBQTlCO0FBRUgsS0FwQk0sTUFxQkwsS0FBSyxxQkFBTCxHQUE2QixDQUFDLENBQTlCOztBQUdGLFFBQUksS0FBSyxrQkFBTCxJQUEyQixDQUEvQixFQUFrQzs7QUFFaEMsbUJBQWEsS0FBSyxLQUFMLENBQVcsSUFBWCxDQUFnQixLQUFLLGtCQUFyQixDQUFiOztBQUVBLFVBQUksUUFBUSxFQUFaOztBQUdBLFVBQUksS0FBSyxxQkFBTCxJQUE4QixDQUFsQyxFQUFxQztBQUNuQyxvQkFBWSxXQUFXLFVBQVgsQ0FBc0IsS0FBSyxxQkFBM0IsQ0FBWjs7QUFFQSxjQUFNLFVBQU4sR0FBbUIsVUFBbkI7QUFDQSxjQUFNLFNBQU4sR0FBa0IsU0FBbEI7QUFDQSxjQUFNLEtBQU4sR0FBYyxLQUFLLHFCQUFuQjtBQUNBLGNBQU0sUUFBTixHQUFpQixLQUFLLEdBQUwsQ0FBUyxVQUFVLENBQVYsR0FBYyxDQUF2QixDQUFqQjtBQUNELE9BUEQsTUFPTyxJQUFJLEtBQUssT0FBTCxLQUFpQixXQUFXLElBQVgsS0FBb0IsTUFBcEIsSUFBOEIsV0FBVyxJQUFYLEtBQW9CLFVBQWxELElBQWdFLFdBQVcsSUFBWCxLQUFvQixRQUFwRixJQUFnRyxXQUFXLElBQVgsS0FBb0IsTUFBcEgsSUFBOEgsV0FBVyxJQUFYLEtBQW9CLFVBQWxKLElBQ3JCLFdBQVcsSUFBWCxLQUFvQixZQURDLElBQ2UsV0FBVyxJQUFYLEtBQW9CLGFBRG5DLElBQ29ELFdBQVcsSUFBWCxLQUFvQixnQkFEeEUsSUFFckIsV0FBVyxJQUFYLEtBQW9CLFdBRkMsSUFFYyxXQUFXLElBQVgsS0FBb0IsaUJBRmxDLElBR3JCLFdBQVcsSUFBWCxLQUFvQixhQUhDLElBR2dCLFdBQVcsSUFBWCxLQUFvQixNQUhyRCxDQUFKLEVBR2tFOztBQUV2RTtBQUNBLFlBQUksSUFBSSxXQUFXLEtBQVgsQ0FBaUIsb0JBQWpCLENBQXNDLE9BQXRDLEdBQWdELENBQUMsU0FBUyxXQUFXLEtBQVgsQ0FBaUIsb0JBQWpCLENBQXNDLFNBQWhELElBQTZELFdBQVcsS0FBWCxDQUFpQixvQkFBakIsQ0FBc0MsWUFBM0o7O0FBR0EsZ0JBQVEsV0FBVyxlQUFYLENBQTJCLENBQTNCLEVBQThCLElBQTlCLENBQVI7QUFDQSxjQUFNLFVBQU4sR0FBbUIsVUFBbkI7QUFDQSxhQUFLLHFCQUFMLEdBQTZCLE1BQU0sS0FBbkM7QUFDQSxvQkFBWSxNQUFNLFNBQWxCO0FBQ0QsT0FiTSxNQWFBO0FBQ0w7QUFDQTtBQUNEOztBQUVELFVBQUksTUFBTSxTQUFOLENBQWdCLENBQWhCLEtBQXNCLElBQTFCLEVBQWdDO0FBQzlCLFlBQUksTUFBTSxVQUFOLENBQWlCLEtBQXJCLEVBQTRCO0FBQzFCLGNBQUksTUFBTSxTQUFOLENBQWdCLENBQWhCLENBQWtCLE1BQWxCLEdBQTJCLENBQS9CLEVBQWtDO0FBQ2hDLGdCQUFJLG9CQUFvQixDQUF4QjtBQUNBLGlCQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksTUFBTSxTQUFOLENBQWdCLENBQWhCLENBQWtCLE1BQXRDLEVBQThDLEdBQTlDO0FBQ0Usa0JBQUksTUFBTSxTQUFOLENBQWdCLENBQWhCLENBQWtCLENBQWxCLElBQXVCLE1BQU0sVUFBTixDQUFpQixLQUFqQixDQUF1QixlQUFsRCxFQUNFLG9CQURGLEtBRUssSUFBSSxNQUFNLFNBQU4sQ0FBZ0IsQ0FBaEIsQ0FBa0IsQ0FBbEIsSUFBdUIsTUFBTSxVQUFOLENBQWlCLEtBQWpCLENBQXVCLGVBQWxELEVBQ0g7QUFKSixhQUtBLElBQUksb0JBQW9CLE1BQU0sU0FBTixDQUFnQixDQUFoQixDQUFrQixNQUF0QyxJQUFnRCxvQkFBb0IsQ0FBQyxNQUFNLFNBQU4sQ0FBZ0IsQ0FBaEIsQ0FBa0IsTUFBM0YsRUFDRSxRQUFRLElBQVIsQ0FBYSxLQUFiO0FBQ0gsV0FURCxNQVNPO0FBQ0wsZ0JBQUksTUFBTSxTQUFOLENBQWdCLENBQWhCLElBQXFCLE1BQU0sVUFBTixDQUFpQixLQUFqQixDQUF1QixlQUE1QyxJQUErRCxNQUFNLFNBQU4sQ0FBZ0IsQ0FBaEIsSUFBcUIsTUFBTSxVQUFOLENBQWlCLEtBQWpCLENBQXVCLGVBQS9HLEVBQ0UsUUFBUSxJQUFSLENBQWEsS0FBYjtBQUNIO0FBQ0YsU0FkRCxNQWVBLFFBQVEsSUFBUixDQUFhLEtBQWI7QUFDSDtBQUVBO0FBQ0Y7O0FBR0QsTUFBSSxRQUFRLE1BQVIsR0FBaUIsQ0FBckIsRUFBd0I7O0FBRXRCLFNBQUssZ0JBQUwsQ0FBc0IsT0FBdEI7O0FBRUEsUUFBSSxLQUFLLE9BQVQsRUFBa0I7O0FBRWhCLFVBQUksbUJBQW1CLEVBQXZCOztBQUVBLHlCQUFtQixLQUFLLG1CQUFMLENBQXlCLEVBQUUsU0FBUyxPQUFYLEVBQXpCLENBQW5COztBQUVBLFVBQUkscUJBQXFCLElBQXpCLEVBQStCO0FBQzdCLGFBQUssVUFBTCxDQUFnQixTQUFoQixHQUE0QixnQkFBNUI7O0FBRUEsYUFBSyxVQUFMLENBQWdCLFNBQWhCLEdBQTRCLGdCQUE1Qjs7QUFFQSxZQUFJLG1CQUFtQixLQUF2QjtBQUNBLFlBQUksS0FBSyxTQUFMLENBQWUsS0FBZixDQUFxQixPQUFyQixLQUFpQyxNQUFyQyxFQUE2QztBQUMzQyw2QkFBbUIsSUFBbkI7QUFDQSxlQUFLLFNBQUwsQ0FBZSxLQUFmLENBQXFCLE9BQXJCLEdBQStCLE9BQS9CO0FBQ0Q7O0FBRUQsWUFBSTtBQUNGLGVBQUssVUFBTCxDQUFnQixLQUFoQixDQUFzQixVQUF0QixHQUFtQyxLQUFLLGVBQUwsR0FBdUIsS0FBSyxlQUE1QixHQUE4QywyQkFBb0Isc0JBQXBCLEdBQTZDLGtCQUE5SDs7QUFFQSxlQUFLLFVBQUwsQ0FBZ0IsS0FBaEIsQ0FBc0IsZ0JBQXRCLEdBQXlDLEtBQUssVUFBTCxDQUFnQixLQUFoQixDQUFzQixlQUF0QixHQUF3QyxLQUFLLFVBQUwsQ0FBZ0IsS0FBaEIsQ0FBc0IsV0FBdEIsR0FBb0MsS0FBSyxXQUFMLEdBQW1CLEtBQUssV0FBeEIsR0FBc0MsUUFBUSxDQUFSLEVBQVcsU0FBWCxDQUFxQixLQUFyQixHQUE2QixRQUFRLENBQVIsRUFBVyxTQUFYLENBQXFCLEtBQWxELEdBQTBELFFBQVEsQ0FBUixFQUFXLFVBQVgsQ0FBc0IsS0FBdEIsR0FBOEIsUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixLQUFwRCxHQUE0RCxRQUFRLENBQVIsRUFBVyxVQUFYLENBQXNCLFNBQXRCLENBQWdDLFFBQVEsQ0FBUixFQUFXLEtBQVgsR0FBbUIsUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixTQUF0QixDQUFnQyxNQUFuRixDQUFqUjs7QUFFQSxlQUFLLFVBQUwsQ0FBZ0IsS0FBaEIsQ0FBc0IsV0FBdEIsR0FBcUMsS0FBSyxlQUFMLElBQXdCLEtBQUssZUFBTCxLQUF5QixDQUFsRCxHQUF1RCxLQUFLLGVBQUwsR0FBdUIsSUFBOUUsR0FBcUYsSUFBSSxJQUE3SDs7QUFFQSxlQUFLLFVBQUwsQ0FBZ0IsS0FBaEIsQ0FBc0IsWUFBdEIsR0FBc0MsS0FBSyxZQUFMLElBQXFCLEtBQUssWUFBTCxLQUFzQixDQUE1QyxHQUFpRCxLQUFLLFlBQUwsR0FBb0IsSUFBckUsR0FBNEUsSUFBSSxJQUFySDtBQUNBLGVBQUssU0FBTCxDQUFlLEtBQWYsQ0FBcUIsWUFBckIsR0FBb0MsS0FBSyxVQUFMLENBQWdCLEtBQWhCLENBQXNCLFlBQTFEOztBQUdBLGVBQUssVUFBTCxDQUFnQixLQUFoQixDQUFzQixRQUF0QixHQUFrQyxLQUFLLFFBQUwsSUFBaUIsS0FBSyxRQUFMLEtBQWtCLENBQXBDLEdBQXlDLEtBQUssUUFBTCxHQUFnQixJQUF6RCxHQUFnRSxLQUFLLElBQXRHO0FBQ0EsZUFBSyxVQUFMLENBQWdCLEtBQWhCLENBQXNCLEtBQXRCLEdBQThCLEtBQUssU0FBTCxHQUFpQixLQUFLLFNBQXRCLEdBQWtDLFNBQWhFO0FBQ0EsZUFBSyxVQUFMLENBQWdCLEtBQWhCLENBQXNCLFVBQXRCLEdBQW1DLEtBQUssVUFBTCxHQUFrQixLQUFLLFVBQXZCLEdBQW9DLGlDQUF2RTtBQUNBLGVBQUssVUFBTCxDQUFnQixLQUFoQixDQUFzQixVQUF0QixHQUFtQyxLQUFLLFVBQUwsR0FBa0IsS0FBSyxVQUF2QixHQUFvQyxRQUF2RTtBQUNBLGVBQUssVUFBTCxDQUFnQixLQUFoQixDQUFzQixTQUF0QixHQUFrQyxLQUFLLFNBQUwsR0FBaUIsS0FBSyxTQUF0QixHQUFrQywyQkFBb0IsUUFBcEIsR0FBK0IsUUFBbkc7QUFFRCxTQWpCRCxDQWlCRSxPQUFPLENBQVAsRUFBVSxDQUNYOztBQUVELFlBQUksV0FBSjs7QUFFQSxZQUFJLFFBQVEsQ0FBUixFQUFXLFVBQVgsQ0FBc0IsSUFBdEIsS0FBK0IsS0FBL0IsSUFBd0MsUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixJQUF0QixLQUErQixVQUF2RSxJQUFxRixRQUFRLENBQVIsRUFBVyxVQUFYLENBQXNCLElBQXRCLEtBQStCLFFBQXBILElBQWdJLFFBQVEsQ0FBUixFQUFXLFVBQVgsQ0FBc0IsSUFBdEIsS0FBK0IsS0FBL0osSUFBd0ssUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixJQUF0QixLQUErQixVQUF2TSxJQUFxTixRQUFRLENBQVIsRUFBVyxVQUFYLENBQXNCLElBQXRCLEtBQStCLFlBQXBQLElBQW9RLFFBQVEsQ0FBUixFQUFXLFVBQVgsQ0FBc0IsSUFBdEIsS0FBK0IsZUFBdlMsRUFBd1Q7QUFDdFQsd0JBQWMsU0FBUyxFQUFULEdBQWMsS0FBSyxTQUFMLENBQWUsV0FBM0M7QUFDRCxTQUZELE1BRU87QUFDTDtBQUNBLHdCQUFjLFFBQVEsQ0FBUixFQUFXLFVBQVgsQ0FBc0IsS0FBdEIsQ0FBNEIsb0JBQTVCLENBQWlELFNBQWpELEdBQTZELFFBQVEsQ0FBUixFQUFXLFVBQVgsQ0FBc0IsS0FBdEIsQ0FBNEIsb0JBQTVCLENBQWlELFlBQWpELElBQWlFLFFBQVEsQ0FBUixFQUFXLFNBQVgsQ0FBcUIsQ0FBckIsR0FBeUIsUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixLQUF0QixDQUE0QixvQkFBNUIsQ0FBaUQsT0FBM0ksQ0FBN0QsR0FBbU4sS0FBSyxTQUFMLENBQWUsV0FBbE8sSUFBaVAsQ0FBL1A7QUFDQSx5QkFBZSxFQUFmO0FBQ0Q7O0FBR0QsWUFBSSxjQUFjLENBQWxCLEVBQXFCO0FBQ25CLHlCQUFlLEtBQUssU0FBTCxDQUFlLFdBQWYsR0FBNkIsRUFBNUM7QUFDRDs7QUFFRCxZQUFJLGNBQWMsS0FBSyxTQUFMLENBQWUsV0FBN0IsR0FBMkMsS0FBSyxLQUFMLENBQVcsVUFBWCxDQUFzQixXQUFyRSxFQUNFLGNBQWMsS0FBSyxHQUFMLENBQVMsQ0FBVCxFQUFZLEtBQUssS0FBTCxDQUFXLFVBQVgsQ0FBc0IsV0FBdEIsR0FBb0MsS0FBSyxTQUFMLENBQWUsV0FBL0QsQ0FBZDs7QUFFRix1QkFBZSxJQUFmOztBQUVBLFlBQUksUUFBUSxNQUFSLEtBQW1CLENBQW5CLElBQXdCLENBQUMsS0FBSyxNQUE5QixLQUF5QyxRQUFRLENBQVIsRUFBVyxVQUFYLENBQXNCLElBQXRCLEtBQStCLE1BQS9CLElBQXlDLFFBQVEsQ0FBUixFQUFXLFVBQVgsQ0FBc0IsSUFBdEIsS0FBK0IsVUFBeEUsSUFBc0YsUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixJQUF0QixLQUErQixRQUFySCxJQUFpSSxRQUFRLENBQVIsRUFBVyxVQUFYLENBQXNCLElBQXRCLEtBQStCLE1BQWhLLElBQTBLLFFBQVEsQ0FBUixFQUFXLFVBQVgsQ0FBc0IsSUFBdEIsS0FBK0IsVUFBek0sSUFBdU4sUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixJQUF0QixLQUErQixZQUF0UCxJQUFzUSxRQUFRLENBQVIsRUFBVyxVQUFYLENBQXNCLElBQXRCLEtBQStCLGFBQXJTLElBQXNULFFBQVEsQ0FBUixFQUFXLFVBQVgsQ0FBc0IsSUFBdEIsS0FBK0IsZ0JBQTlYLENBQUosRUFBcVo7QUFDblo7QUFDQSwwQkFBZ0IsUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixLQUF0QixDQUE0QixvQkFBNUIsQ0FBaUQsU0FBakQsR0FBNkQsUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixLQUF0QixDQUE0QixvQkFBNUIsQ0FBaUQsWUFBakQsSUFBaUUsUUFBUSxDQUFSLEVBQVcsU0FBWCxDQUFxQixDQUFyQixHQUF5QixRQUFRLENBQVIsRUFBVyxVQUFYLENBQXNCLEtBQXRCLENBQTRCLGVBQXRILENBQTdELEdBQXNNLEVBQXRNLElBQTRNLENBQTVOO0FBQ0QsU0FIRCxNQUdPLElBQUksUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixJQUF0QixLQUErQixLQUEvQixJQUF3QyxRQUFRLENBQVIsRUFBVyxVQUFYLENBQXNCLElBQXRCLEtBQStCLFVBQXZFLElBQXFGLFFBQVEsQ0FBUixFQUFXLFVBQVgsQ0FBc0IsSUFBdEIsS0FBK0IsWUFBcEgsSUFBb0ksUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixJQUF0QixLQUErQixlQUF2SyxFQUF3TDtBQUM3TDtBQUNBLDBCQUFnQixRQUFRLENBQVIsRUFBVyxVQUFYLENBQXNCLEtBQXRCLENBQTRCLG9CQUE1QixDQUFpRCxTQUFqRCxHQUE2RCxRQUFRLENBQVIsRUFBVyxVQUFYLENBQXNCLEtBQXRCLENBQTRCLG9CQUE1QixDQUFpRCxZQUFqRCxJQUFpRSxRQUFRLENBQVIsRUFBVyxTQUFYLENBQXFCLENBQXJCLEdBQXlCLFFBQVEsQ0FBUixFQUFXLFVBQVgsQ0FBc0IsS0FBdEIsQ0FBNEIsZUFBdEgsQ0FBN0QsR0FBc00sRUFBdE0sSUFBNE0sQ0FBNU47QUFDRCxTQUhNLE1BSUY7QUFDSCwwQkFBZ0IsTUFBaEI7QUFDRDs7QUFFRCx3QkFBaUIsQ0FBQyxhQUFELEdBQWlCLEVBQWxDOztBQUVBLFlBQUksZ0JBQWdCLEtBQUssU0FBTCxDQUFlLFlBQS9CLEdBQThDLENBQTlDLEdBQWtELENBQXRELEVBQXlEO0FBQ3ZELDJCQUFpQixnQkFBZ0IsS0FBSyxTQUFMLENBQWUsWUFBL0IsR0FBOEMsQ0FBOUMsR0FBa0QsQ0FBbkU7QUFDRDs7QUFFRCx5QkFBaUIsSUFBakI7O0FBRUE7QUFDQSxhQUFLLFNBQUwsQ0FBZSxLQUFmLENBQXFCLElBQXJCLEdBQTRCLFdBQTVCO0FBQ0EsYUFBSyxTQUFMLENBQWUsS0FBZixDQUFxQixNQUFyQixHQUE4QixhQUE5Qjs7QUFFQSxZQUFJLENBQUMsS0FBSyxnQkFBTixJQUEwQixnQkFBOUIsRUFBZ0Q7QUFDOUMsZUFBSyxnQkFBTDtBQUNELFNBRkQsTUFJRSxLQUFLLGVBQUw7QUFDSCxPQS9FRCxNQStFTztBQUNMLGFBQUssSUFBTCxDQUFVLEtBQVY7QUFDRDtBQUVGOztBQUVEO0FBQ0E7QUFDRDtBQUNGLENBM1BEOztBQThQQSxRQUFRLFNBQVIsQ0FBa0IsZ0JBQWxCLEdBQXFDLFVBQVUsT0FBVixFQUFtQjtBQUN0RDtBQUNBOztBQUVBO0FBQ0EsTUFBSSxvQkFBb0IsS0FBSyxLQUFMLENBQVcsaUJBQW5DO0FBQ0EsT0FBSyxLQUFMLENBQVcsb0JBQVg7O0FBRUEsb0JBQWtCLFNBQWxCLENBQTRCLENBQTVCLEVBQThCLENBQTlCLEVBQWdDLEtBQUssS0FBTCxDQUFXLEtBQTNDLEVBQWtELEtBQUssS0FBTCxDQUFXLE1BQTdEO0FBQ0Esb0JBQWtCLElBQWxCOztBQUdBLE1BQUksV0FBVyxLQUFLLEtBQUwsQ0FBVyxRQUExQjtBQUNBLE1BQUksU0FBUyxDQUFiOztBQUVBLG9CQUFrQixJQUFsQixDQUF1QixTQUFTLEVBQWhDLEVBQW9DLFNBQVMsRUFBN0MsRUFBaUQsU0FBUyxFQUFULEdBQWMsU0FBUyxFQUF4RSxFQUE0RSxTQUFTLEVBQVQsR0FBYyxTQUFTLEVBQW5HO0FBQ0Esb0JBQWtCLElBQWxCOztBQUdBLE9BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDOztBQUV2QyxRQUFJLFFBQVEsUUFBUSxDQUFSLENBQVo7O0FBRUEsUUFBSSxjQUFjLEtBQUssS0FBTCxDQUFXLGFBQVgsQ0FBeUIsU0FBekIsQ0FBbUMsTUFBTSxVQUFOLENBQWlCLFlBQWpCLENBQThCLE1BQU0sS0FBcEMsQ0FBbkMsQ0FBbEI7O0FBRUEsUUFBSSxDQUFDLFdBQUQsSUFBZ0IsQ0FBQyxZQUFZLFVBQTdCLElBQTJDLFlBQVksVUFBWixLQUEyQixXQUExRSxFQUNFOztBQUVGLFFBQUksYUFBYSxLQUFLLEtBQUwsQ0FBVyxJQUFYLENBQWdCLFlBQVksZUFBNUIsQ0FBakI7QUFDQSxRQUFJLFlBQVksV0FBVyxVQUFYLENBQXNCLFlBQVksY0FBbEMsQ0FBaEI7QUFDQSxRQUFJLFFBQVEsWUFBWSxjQUF4Qjs7QUFFQSxRQUFJLFVBQVUsZ0JBQVYsS0FBK0IsS0FBL0IsS0FBeUMsV0FBVyxnQkFBWCxLQUFnQyxJQUFoQyxJQUF3QyxVQUFVLGdCQUFWLEtBQStCLElBQWhILENBQUosRUFBMkg7O0FBRXpILFVBQUksV0FBVyxJQUFYLEtBQW9CLE1BQXBCLElBQThCLFdBQVcsSUFBWCxLQUFvQixVQUFsRCxJQUFnRSxXQUFXLElBQVgsS0FBb0IsUUFBcEYsSUFBZ0csV0FBVyxJQUFYLEtBQW9CLFNBQXBILElBQ0MsV0FBVyxJQUFYLEtBQW9CLE1BRHJCLElBQytCLFdBQVcsSUFBWCxLQUFvQixVQURuRCxJQUNpRSxXQUFXLElBQVgsS0FBb0IsWUFEckYsSUFFQyxXQUFXLElBQVgsS0FBb0IsYUFGckIsSUFFc0MsV0FBVyxJQUFYLEtBQW9CLGdCQUYxRCxJQUdDLFdBQVcsSUFBWCxLQUFvQixXQUhyQixJQUdvQyxXQUFXLElBQVgsS0FBb0IsaUJBSDVELEVBRytFO0FBQzdFLFlBQUksY0FBYyxXQUFXLG1CQUFYLENBQStCLEtBQS9CLEVBQXNDLFlBQVksRUFBbEQsRUFBc0QsWUFBWSxFQUFsRSxFQUFzRSxLQUFLLEtBQUwsQ0FBVyxpQkFBakYsQ0FBbEI7QUFDQSxvQkFBWSxJQUFaLEdBQW1CLEtBQUssR0FBTCxDQUFTLFlBQVksSUFBWixHQUFtQixHQUFuQixJQUEwQixDQUFuQyxFQUFzQyxFQUF0QyxDQUFuQjs7QUFFQSxvQkFBWSxXQUFaLEdBQTBCLFlBQVksV0FBWixJQUEyQixTQUFyRDtBQUNBLG9CQUFZLGVBQVosR0FBOEIsWUFBWSxlQUFaLElBQStCLEtBQUssSUFBTCxDQUFVLFlBQVksSUFBWixHQUFtQixFQUE3QixDQUE3RDs7QUFFQTtBQUNBLHlCQUFhLFdBQWIsQ0FBeUIsQ0FBQyxXQUFELENBQXpCO0FBQ0E7O0FBRUEsWUFBSSxPQUFRLFlBQVksRUFBcEIsS0FBNEIsV0FBaEMsRUFBNkM7O0FBRTNDLGNBQUksY0FBYyxXQUFXLG1CQUFYLENBQStCLEtBQS9CLEVBQXNDLFlBQVksRUFBbEQsRUFBc0QsWUFBWSxFQUFsRSxFQUFzRSxLQUFLLEtBQUwsQ0FBVyxpQkFBakYsQ0FBbEI7QUFDQSxzQkFBWSxJQUFaLEdBQW1CLEtBQUssR0FBTCxDQUFTLFlBQVksSUFBWixHQUFtQixHQUFuQixJQUEwQixDQUFuQyxFQUFzQyxFQUF0QyxDQUFuQjs7QUFFQSxzQkFBWSxXQUFaLEdBQTBCLFlBQVksV0FBWixJQUEyQixTQUFyRDtBQUNBLHNCQUFZLGVBQVosR0FBOEIsWUFBWSxlQUFaLElBQStCLEtBQUssSUFBTCxDQUFVLFlBQVksSUFBWixHQUFtQixFQUE3QixDQUE3RDs7QUFFQTtBQUNBLDJCQUFhLFdBQWIsQ0FBeUIsQ0FBQyxXQUFELENBQXpCO0FBQ0E7QUFDRDtBQUNGLE9BMUJELE1BMEJPLElBQUksV0FBVyxJQUFYLEtBQW9CLFFBQXhCLEVBQWtDO0FBQ3ZDLFlBQUksY0FBYyxXQUFXLG1CQUFYLENBQStCLEtBQS9CLEVBQXNDLFlBQVksRUFBbEQsRUFBc0QsWUFBWSxFQUFsRSxFQUFzRSxLQUFLLEtBQUwsQ0FBVyxpQkFBakYsQ0FBbEI7QUFDQSxvQkFBWSxJQUFaLEdBQW1CLFlBQVksSUFBL0I7QUFDQSxvQkFBWSxLQUFaLEdBQW9CLE9BQXBCO0FBQ0Esb0JBQVksV0FBWixHQUEwQixPQUExQjtBQUNBO0FBQ0EsMEJBQWtCLFdBQWxCLEdBQWdDLEVBQWhDO0FBQ0EseUJBQWEsV0FBYixDQUF5QixDQUFDLFdBQUQsQ0FBekI7QUFDQSwwQkFBa0IsV0FBbEIsR0FBZ0MsQ0FBaEM7QUFDRCxPQVRNLE1BU0EsSUFBSSxXQUFXLElBQVgsS0FBb0IsUUFBcEIsSUFBZ0MsV0FBVyxJQUFYLEtBQW9CLGVBQXBELElBQXVFLFdBQVcsSUFBWCxLQUFvQixrQkFBM0YsSUFDTixXQUFXLElBQVgsS0FBb0IsS0FEZCxJQUN1QixXQUFXLElBQVgsS0FBb0IsVUFEM0MsSUFDeUQsV0FBVyxJQUFYLEtBQW9CLFlBRDdFLElBQzZGLFdBQVcsSUFBWCxLQUFvQixlQURqSCxJQUVOLFdBQVcsSUFBWCxLQUFvQixhQUZsQixFQUVpQztBQUN0Qyw2QkFBUyxpQkFBVCxFQUE0QixZQUFZLEVBQXhDLEVBQTRDLFlBQVksRUFBeEQsRUFBNEQsWUFBWSxFQUF4RSxFQUE0RSxZQUFZLEVBQXhGLEVBQTRGLE9BQTVGLEVBQXFHLENBQXJHLEVBQXdHLElBQXhHLEVBQThHLEtBQTlHLEVBQXFILEtBQXJILEVBQTRILEtBQTVILEVBQW1JLEtBQW5JLEVBQTBJLEVBQTFJO0FBQ0QsT0FKTSxNQUtGLElBQUksV0FBVyxJQUFYLEtBQW9CLEtBQXBCLElBQTZCLFdBQVcsSUFBWCxLQUFvQixVQUFyRCxFQUFpRTtBQUNwRSxnQ0FBWSxpQkFBWixFQUErQixZQUFZLE1BQTNDLEVBQW1ELFlBQVksTUFBL0QsRUFBdUUsT0FBdkUsRUFBZ0YsV0FBVyxJQUEzRixFQUFpRyxZQUFZLFVBQTdHLEVBQXlILFlBQVksUUFBckksRUFBK0ksRUFBL0ksRUFBbUosWUFBWSxrQkFBL0o7QUFDRCxPQUZJLE1BRUUsSUFBSSxXQUFXLElBQVgsS0FBb0IsYUFBeEIsRUFBdUM7O0FBRTVDLDBCQUFrQixXQUFsQixHQUFnQyxDQUFoQztBQUNBLDBCQUFrQixXQUFsQixHQUFnQyxZQUFZLEtBQTVDO0FBQ0EsMEJBQWtCLFNBQWxCLEdBQThCLFlBQVksZUFBWixHQUE4QixDQUE1RDtBQUNBLGlCQUFVLGtCQUFrQixTQUFuQixHQUFnQyxDQUFoQyxLQUFzQyxDQUF0QyxHQUEwQyxDQUExQyxHQUE4QyxFQUF2RDs7QUFFQSwwQkFBa0IsU0FBbEI7QUFDQSwwQkFBa0IsTUFBbEIsQ0FBeUIsWUFBWSxFQUFaLEdBQWlCLE1BQTFDLEVBQWtELFlBQVksRUFBOUQ7QUFDQSwwQkFBa0IsTUFBbEIsQ0FBeUIsWUFBWSxFQUFaLEdBQWlCLE1BQTFDLEVBQWtELEtBQUssR0FBTCxDQUFTLFlBQVksRUFBckIsRUFBeUIsWUFBWSxFQUFyQyxDQUFsRDtBQUNBLDBCQUFrQixNQUFsQjs7QUFFQSwwQkFBa0IsU0FBbEI7QUFDQSwwQkFBa0IsTUFBbEIsQ0FBeUIsWUFBWSxFQUFaLEdBQWlCLE1BQTFDLEVBQWtELEtBQUssR0FBTCxDQUFTLFlBQVksRUFBckIsRUFBeUIsWUFBWSxFQUFyQyxDQUFsRDtBQUNBLDBCQUFrQixNQUFsQixDQUF5QixZQUFZLEVBQVosR0FBaUIsTUFBMUMsRUFBa0QsWUFBWSxFQUE5RDtBQUNBLDBCQUFrQixNQUFsQjs7QUFFQSw2QkFBUyxpQkFBVCxFQUE0QixZQUFZLEVBQXhDLEVBQTRDLEtBQUssR0FBTCxDQUFTLFlBQVksRUFBckIsRUFBeUIsWUFBWSxFQUFyQyxDQUE1QyxFQUFzRixZQUFZLEVBQWxHLEVBQXNHLEtBQUssR0FBTCxDQUFTLFlBQVksRUFBckIsRUFBeUIsWUFBWSxFQUFyQyxDQUF0RyxFQUFnSixhQUFoSixFQUErSixZQUFZLGVBQVosR0FBOEIsQ0FBN0wsRUFBZ00sWUFBWSxLQUE1TSxFQUFtTixLQUFuTixFQUEwTixLQUExTixFQUFpTyxLQUFqTyxFQUF3TyxLQUF4TztBQUNBLDBCQUFrQixXQUFsQixHQUFnQyxDQUFoQztBQUVELE9BcEJNLE1Bb0JBLElBQUksV0FBVyxJQUFYLEtBQW9CLE1BQXhCLEVBQWdDO0FBQ3JDLDBCQUFrQixXQUFsQixHQUFnQyxDQUFoQzs7QUFFQSwwQkFBa0IsV0FBbEIsR0FBZ0MsWUFBWSxLQUE1QztBQUNBLDBCQUFrQixTQUFsQixHQUE4QixZQUFZLGVBQVosR0FBOEIsQ0FBNUQ7O0FBRUEsaUJBQVUsa0JBQWtCLFNBQW5CLEdBQWdDLENBQWhDLEtBQXNDLENBQXRDLEdBQTBDLENBQTFDLEdBQThDLEVBQXZEOztBQUVBLDBCQUFrQixTQUFsQjtBQUNBLDBCQUFrQixNQUFsQixDQUF5QixZQUFZLEVBQVosR0FBaUIsTUFBMUMsRUFBa0QsWUFBWSxFQUE5RDtBQUNBLDBCQUFrQixNQUFsQixDQUF5QixZQUFZLEVBQVosR0FBaUIsTUFBMUMsRUFBa0QsWUFBWSxFQUE5RDtBQUNBLDBCQUFrQixNQUFsQjs7QUFFQSwwQkFBa0IsU0FBbEI7QUFDQSwwQkFBa0IsTUFBbEIsQ0FBeUIsWUFBWSxFQUFyQyxFQUF5QyxZQUFZLEVBQXJEO0FBQ0EsMEJBQWtCLE1BQWxCLENBQXlCLFlBQVksRUFBckMsRUFBeUMsWUFBWSxFQUFyRDtBQUNBLDBCQUFrQixNQUFsQjs7QUFFQSwwQkFBa0IsU0FBbEI7QUFDQSwwQkFBa0IsTUFBbEIsQ0FBeUIsWUFBWSxFQUFyQyxFQUF5QyxZQUFZLEVBQXJEO0FBQ0EsMEJBQWtCLE1BQWxCLENBQXlCLFlBQVksRUFBckMsRUFBeUMsWUFBWSxFQUFyRDtBQUNBLDBCQUFrQixNQUFsQjs7QUFFQSwwQkFBa0IsV0FBbEIsR0FBZ0MsQ0FBaEM7QUFFRDtBQUNGO0FBQ0Y7O0FBRUQsb0JBQWtCLE9BQWxCO0FBQ0Esb0JBQWtCLFdBQWxCLEdBQWdDLENBQWhDO0FBQ0Esb0JBQWtCLFNBQWxCOztBQUVBO0FBQ0QsQ0FsSUQ7O0FBb0lBLFFBQVEsU0FBUixDQUFrQixtQkFBbEIsR0FBd0MsVUFBVSxDQUFWLEVBQWE7QUFDbkQsTUFBSSxVQUFVLEVBQUUsT0FBaEI7QUFDQSxNQUFJLG1CQUFtQixJQUF2QjtBQUNBLE1BQUksYUFBYSxJQUFqQjtBQUNBLE1BQUksWUFBWSxJQUFoQjtBQUNBLE1BQUksUUFBUSxDQUFaO0FBQ0EsTUFBSSxRQUFRLElBQVo7QUFDQSxNQUFJLGlCQUFpQixFQUFyQjs7QUFFQSxNQUFJLHlCQUF5QixJQUE3QjtBQUNBLE9BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ3ZDLFFBQUksUUFBUSxDQUFSLEVBQVcsVUFBWCxDQUFzQixjQUF0QixJQUF3QyxRQUFRLENBQVIsRUFBVyxTQUFYLENBQXFCLGNBQWpFLEVBQWlGO0FBQy9FLCtCQUF5QixLQUF6QjtBQUNBO0FBQ0Q7QUFDRjs7QUFFRCxNQUFJLDJCQUE0QixLQUFLLE9BQUwsSUFBZ0IsT0FBUSxLQUFLLE9BQWIsS0FBMEIsVUFBM0MsSUFBMEQsS0FBSyxnQkFBMUYsQ0FBSixFQUFpSDs7QUFFL0csUUFBSSxRQUFRO0FBQ1YsYUFBTyxLQUFLLEtBREYsRUFDUyxTQUFTLEtBQUssUUFEdkIsRUFDaUMsU0FBUztBQUQxQyxLQUFaO0FBR0EsdUJBQW1CLEtBQUssZ0JBQUwsR0FBd0IsS0FBSyxnQkFBTCxDQUFzQixLQUF0QixDQUF4QixHQUF1RCxLQUFLLE9BQUwsQ0FBYSxLQUFiLENBQTFFO0FBRUQsR0FQRCxNQU9POztBQUVMLFFBQUksS0FBSyxNQUFMLElBQWUsS0FBSyxLQUFMLENBQVcsUUFBWCxDQUFvQixhQUFwQixLQUFzQyxNQUF6RCxFQUFpRTs7QUFFL0QsVUFBSSx5QkFBeUIsRUFBN0I7O0FBRUEsV0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDdkMscUJBQWEsUUFBUSxDQUFSLEVBQVcsVUFBeEI7QUFDQSxvQkFBWSxRQUFRLENBQVIsRUFBVyxTQUF2QjtBQUNBLGdCQUFRLFFBQVEsQ0FBUixFQUFXLEtBQW5COztBQUVBLHlCQUFpQixFQUFqQjs7QUFFQSxZQUFJLE1BQU0sQ0FBTixJQUFXLHNCQUFYLElBQXFDLENBQUMsS0FBSyxPQUEvQyxFQUF3RDtBQUN0RCxvQ0FBMEIsT0FBUSxLQUFLLEtBQUwsQ0FBVyxLQUFYLENBQWlCLE1BQWpCLENBQXdCLFVBQVUsQ0FBbEMsQ0FBUixLQUFrRCxXQUFsRCxHQUFnRSxLQUFLLEtBQUwsQ0FBVyxLQUFYLENBQWlCLE1BQWpCLENBQXdCLFVBQVUsQ0FBbEMsQ0FBaEUsR0FBdUcsS0FBakk7QUFDQSxvQ0FBMEIsT0FBMUI7QUFDQSxtQ0FBeUIsS0FBSyxLQUFMLENBQVcsd0JBQVgsQ0FBb0Msc0JBQXBDLEVBQTRELFNBQTVELEVBQXVFLFVBQXZFLEVBQW1GLEtBQW5GLENBQXpCO0FBQ0Q7O0FBRUQ7QUFDQSxZQUFJLFVBQVUsY0FBVixLQUE2QixJQUE3QixJQUFzQyxPQUFRLFVBQVUsY0FBbEIsS0FBc0MsV0FBdEMsSUFBcUQsV0FBVyxRQUFYLENBQW9CLGNBQXBCLEtBQXVDLElBQXRJLEVBQ0U7O0FBR0YsWUFBSSxXQUFXLElBQVgsS0FBb0IsTUFBcEIsSUFBOEIsV0FBVyxJQUFYLEtBQW9CLFVBQWxELElBQWdFLFdBQVcsSUFBWCxLQUFvQixRQUFwRixJQUFnRyxXQUFXLElBQVgsS0FBb0IsTUFBcEgsSUFBOEgsV0FBVyxJQUFYLEtBQW9CLFVBQWxKLElBQWdLLFdBQVcsSUFBWCxLQUFvQixZQUFwTCxJQUFvTSxXQUFXLElBQVgsS0FBb0IsUUFBeE4sSUFBb08sV0FBVyxJQUFYLEtBQW9CLEtBQXhQLElBQWlRLFdBQVcsSUFBWCxLQUFvQixTQUFyUixJQUNELFdBQVcsSUFBWCxLQUFvQixlQURuQixJQUNzQyxXQUFXLElBQVgsS0FBb0Isa0JBRDFELElBQ2dGLFdBQVcsSUFBWCxLQUFvQixZQURwRyxJQUNvSCxXQUFXLElBQVgsS0FBb0IsZUFEeEksSUFFRCxXQUFXLElBQVgsS0FBb0IsYUFGbkIsSUFFb0MsV0FBVyxJQUFYLEtBQW9CLGdCQUY1RCxFQUU4RTtBQUM1RSw0QkFBa0IsVUFBVSxjQUFWLEdBQTJCLFVBQVUsY0FBckMsR0FBc0QsV0FBVyxjQUFYLEdBQTRCLFdBQVcsY0FBdkMsR0FBd0QsS0FBSyxPQUFMLElBQWdCLE9BQVEsS0FBSyxPQUFiLEtBQTBCLFVBQTFDLEdBQXVELEtBQUssT0FBNUQsR0FBc0Usa0VBQXRNO0FBQ0QsU0FKRCxNQUtLLElBQUksV0FBVyxJQUFYLEtBQW9CLFFBQXhCLEVBQWtDO0FBQ3JDLDRCQUFrQixVQUFVLGNBQVYsR0FBMkIsVUFBVSxjQUFyQyxHQUFzRCxXQUFXLGNBQVgsR0FBNEIsV0FBVyxjQUF2QyxHQUF3RCxLQUFLLE9BQUwsSUFBZ0IsT0FBUSxLQUFLLE9BQWIsS0FBMEIsVUFBMUMsR0FBdUQsS0FBSyxPQUE1RCxHQUFzRSxtRkFBdE07QUFDRCxTQUZJLE1BRUUsSUFBSSxXQUFXLElBQVgsS0FBb0IsS0FBcEIsSUFBNkIsV0FBVyxJQUFYLEtBQW9CLFVBQWpELElBQStELFdBQVcsSUFBWCxLQUFvQixRQUF2RixFQUFpRztBQUN0Ryw0QkFBa0IsVUFBVSxjQUFWLEdBQTJCLFVBQVUsY0FBckMsR0FBc0QsV0FBVyxjQUFYLEdBQTRCLFdBQVcsY0FBdkMsR0FBd0QsS0FBSyxPQUFMLElBQWdCLE9BQVEsS0FBSyxPQUFiLEtBQTBCLFVBQTFDLEdBQXVELEtBQUssT0FBNUQsR0FBc0UsaUJBQXRNO0FBQ0QsU0FGTSxNQUVBLElBQUksV0FBVyxJQUFYLEtBQW9CLGFBQXBCLElBQXFDLFdBQVcsSUFBWCxLQUFvQixVQUF6RCxJQUF1RSxXQUFXLElBQVgsS0FBb0IsV0FBM0YsSUFBMEcsV0FBVyxJQUFYLEtBQW9CLGlCQUFsSSxFQUFxSjtBQUMxSiw0QkFBa0IsVUFBVSxjQUFWLEdBQTJCLFVBQVUsY0FBckMsR0FBc0QsV0FBVyxjQUFYLEdBQTRCLFdBQVcsY0FBdkMsR0FBd0QsS0FBSyxPQUFMLElBQWdCLE9BQVEsS0FBSyxPQUFiLEtBQTBCLFVBQTFDLEdBQXVELEtBQUssT0FBNUQsR0FBc0Usa0ZBQXRNO0FBQ0QsU0FGTSxNQUVBLElBQUksV0FBVyxJQUFYLEtBQW9CLGFBQXBCLElBQXFDLFdBQVcsSUFBWCxLQUFvQixNQUE3RCxFQUFxRTtBQUMxRSw0QkFBa0IsVUFBVSxjQUFWLEdBQTJCLFVBQVUsY0FBckMsR0FBc0QsV0FBVyxjQUFYLEdBQTRCLFdBQVcsY0FBdkMsR0FBd0QsS0FBSyxPQUFMLElBQWdCLE9BQVEsS0FBSyxPQUFiLEtBQTBCLFVBQTFDLEdBQXVELEtBQUssT0FBNUQsR0FBc0Usc0RBQzVMLCtCQUQ0TCxHQUU1TCxxQ0FGNEwsR0FHNUwsbUNBSDRMLEdBSTVMLGdDQUpWO0FBS0Q7O0FBRUQsWUFBSSxxQkFBcUIsSUFBekIsRUFDRSxtQkFBbUIsRUFBbkI7O0FBR0YsWUFBSSxLQUFLLFFBQUwsS0FBa0IsSUFBdEIsRUFBNEI7O0FBRTFCLDZCQUFtQixLQUFLLEtBQUwsQ0FBVyx3QkFBWCxDQUFvQyxjQUFwQyxFQUFvRCxTQUFwRCxFQUErRCxVQUEvRCxFQUEyRSxLQUEzRSxJQUFvRixnQkFBdkc7O0FBRUEsY0FBSSxJQUFJLFFBQVEsTUFBUixHQUFpQixDQUF6QixFQUNFLG1CQUFtQixVQUFVLGdCQUE3QjtBQUVILFNBUEQsTUFPTzs7QUFFTCw4QkFBb0IsS0FBSyxLQUFMLENBQVcsd0JBQVgsQ0FBb0MsY0FBcEMsRUFBb0QsU0FBcEQsRUFBK0QsVUFBL0QsRUFBMkUsS0FBM0UsQ0FBcEI7O0FBRUEsY0FBSSxJQUFJLFFBQVEsTUFBUixHQUFpQixDQUF6QixFQUNFLG9CQUFvQixPQUFwQjtBQUVIO0FBRUY7O0FBRUQsVUFBSSxxQkFBcUIsSUFBekIsRUFDRSxtQkFBbUIseUJBQXlCLGdCQUE1QztBQUVILEtBbEVELE1Ba0VPOztBQUVMLG1CQUFhLFFBQVEsQ0FBUixFQUFXLFVBQXhCO0FBQ0Esa0JBQVksUUFBUSxDQUFSLEVBQVcsU0FBdkI7QUFDQSxjQUFRLFFBQVEsQ0FBUixFQUFXLEtBQW5COztBQUVBO0FBQ0EsVUFBSSxVQUFVLGNBQVYsS0FBNkIsSUFBN0IsSUFBc0MsT0FBUSxVQUFVLGNBQWxCLEtBQXNDLFdBQXRDLElBQXFELFdBQVcsUUFBWCxDQUFvQixjQUFwQixLQUF1QyxJQUF0SSxFQUNFLE9BQU8sSUFBUDs7QUFHRixVQUFJLFdBQVcsSUFBWCxLQUFvQixNQUFwQixJQUE4QixXQUFXLElBQVgsS0FBb0IsVUFBbEQsSUFBZ0UsV0FBVyxJQUFYLEtBQW9CLFFBQXBGLElBQWdHLFdBQVcsSUFBWCxLQUFvQixNQUFwSCxJQUE4SCxXQUFXLElBQVgsS0FBb0IsVUFBbEosSUFBZ0ssV0FBVyxJQUFYLEtBQW9CLFlBQXBMLElBQW9NLFdBQVcsSUFBWCxLQUFvQixRQUF4TixJQUFvTyxXQUFXLElBQVgsS0FBb0IsS0FBeFAsSUFBaVEsV0FBVyxJQUFYLEtBQW9CLFNBQXJSLElBQ0MsV0FBVyxJQUFYLEtBQW9CLGVBRHJCLElBQ3dDLFdBQVcsSUFBWCxLQUFvQixrQkFENUQsSUFDa0YsV0FBVyxJQUFYLEtBQW9CLFlBRHRHLElBQ3NILFdBQVcsSUFBWCxLQUFvQixlQUQxSSxJQUVDLFdBQVcsSUFBWCxLQUFvQixhQUZyQixJQUVzQyxXQUFXLElBQVgsS0FBb0IsZ0JBRjlELEVBRWdGO0FBQzlFLHlCQUFpQixVQUFVLGNBQVYsR0FBMkIsVUFBVSxjQUFyQyxHQUFzRCxXQUFXLGNBQVgsR0FBNEIsV0FBVyxjQUF2QyxHQUF3RCxLQUFLLE9BQUwsSUFBZ0IsT0FBUSxLQUFLLE9BQWIsS0FBMEIsVUFBMUMsR0FBdUQsS0FBSyxPQUE1RCxHQUFzRSx5Q0FBeUMsVUFBVSxLQUFWLEdBQWtCLFNBQWxCLEdBQThCLEtBQXZFLElBQWdGLDBCQUFyUjtBQUNELE9BSkQsTUFJTyxJQUFJLFdBQVcsSUFBWCxLQUFvQixRQUF4QixFQUFrQztBQUN2Qyx5QkFBaUIsVUFBVSxjQUFWLEdBQTJCLFVBQVUsY0FBckMsR0FBc0QsV0FBVyxjQUFYLEdBQTRCLFdBQVcsY0FBdkMsR0FBd0QsS0FBSyxPQUFMLElBQWdCLE9BQVEsS0FBSyxPQUFiLEtBQTBCLFVBQTFDLEdBQXVELEtBQUssT0FBNUQsR0FBc0UseUNBQXlDLFVBQVUsS0FBVixHQUFrQixTQUFsQixHQUE4QixLQUF2RSxJQUFnRiwwQ0FBclI7QUFDRCxPQUZNLE1BRUEsSUFBSSxXQUFXLElBQVgsS0FBb0IsS0FBcEIsSUFBNkIsV0FBVyxJQUFYLEtBQW9CLFVBQWpELElBQStELFdBQVcsSUFBWCxLQUFvQixRQUF2RixFQUFpRztBQUN0Ryx5QkFBaUIsVUFBVSxjQUFWLEdBQTJCLFVBQVUsY0FBckMsR0FBc0QsV0FBVyxjQUFYLEdBQTRCLFdBQVcsY0FBdkMsR0FBd0QsS0FBSyxPQUFMLElBQWdCLE9BQVEsS0FBSyxPQUFiLEtBQTBCLFVBQTFDLEdBQXVELEtBQUssT0FBNUQsR0FBc0UsQ0FBQyxVQUFVLElBQVYsR0FBaUIscUJBQWpCLEdBQXlDLFVBQVUsS0FBVixHQUFrQixzQkFBbEIsR0FBMkMsRUFBckYsSUFBMkYsS0FBaFM7QUFDRCxPQUZNLE1BRUEsSUFBSSxXQUFXLElBQVgsS0FBb0IsYUFBcEIsSUFBcUMsV0FBVyxJQUFYLEtBQW9CLFVBQXpELElBQXVFLFdBQVcsSUFBWCxLQUFvQixXQUEzRixJQUEwRyxXQUFXLElBQVgsS0FBb0IsaUJBQWxJLEVBQXFKO0FBQzFKLHlCQUFpQixVQUFVLGNBQVYsR0FBMkIsVUFBVSxjQUFyQyxHQUFzRCxXQUFXLGNBQVgsR0FBNEIsV0FBVyxjQUF2QyxHQUF3RCxLQUFLLE9BQUwsSUFBZ0IsT0FBUSxLQUFLLE9BQWIsS0FBMEIsVUFBMUMsR0FBdUQsS0FBSyxPQUE1RCxHQUFzRSx5Q0FBeUMsVUFBVSxLQUFWLEdBQWtCLFNBQWxCLEdBQThCLEtBQXZFLElBQWdGLDJDQUFyUjtBQUNELE9BRk0sTUFFQSxJQUFJLFdBQVcsSUFBWCxLQUFvQixhQUFwQixJQUFxQyxXQUFXLElBQVgsS0FBb0IsTUFBN0QsRUFBcUU7QUFDMUUseUJBQWlCLFVBQVUsY0FBVixHQUEyQixVQUFVLGNBQXJDLEdBQXNELFdBQVcsY0FBWCxHQUE0QixXQUFXLGNBQXZDLEdBQXdELEtBQUssT0FBTCxJQUFnQixPQUFRLEtBQUssT0FBYixLQUEwQixVQUExQyxHQUF1RCxLQUFLLE9BQTVELEdBQXNFLHlDQUF5QyxVQUFVLEtBQVYsR0FBa0IsU0FBbEIsR0FBOEIsS0FBdkUsSUFBZ0YsU0FBaEYsR0FDak0sK0JBRGlNLEdBRWpNLHFDQUZpTSxHQUdqTSwwQ0FIaU0sR0FJak0sZ0NBSko7QUFLRDs7QUFFRCxVQUFJLHFCQUFxQixJQUF6QixFQUNFLG1CQUFtQixFQUFuQjs7QUFFRiwwQkFBb0IsS0FBSyxLQUFMLENBQVcsd0JBQVgsQ0FBb0MsY0FBcEMsRUFBb0QsU0FBcEQsRUFBK0QsVUFBL0QsRUFBMkUsS0FBM0UsQ0FBcEI7QUFDRDtBQUNGOztBQUVELFNBQU8sZ0JBQVA7QUFDRCxDQWpJRDs7QUFtSUEsUUFBUSxTQUFSLENBQWtCLGVBQWxCLEdBQW9DLFlBQVk7QUFDOUMsTUFBSSxLQUFLLFNBQUwsQ0FBZSxLQUFmLENBQXFCLGdCQUF6QixFQUNFOztBQUVGLE9BQUssU0FBTCxDQUFlLEtBQWYsQ0FBcUIsZ0JBQXJCLEdBQXdDLHdDQUF4QztBQUNBLE9BQUssU0FBTCxDQUFlLEtBQWYsQ0FBcUIsYUFBckIsR0FBcUMsd0NBQXJDO0FBQ0EsT0FBSyxTQUFMLENBQWUsS0FBZixDQUFxQixZQUFyQixHQUFvQyx3Q0FBcEM7QUFDQSxPQUFLLFNBQUwsQ0FBZSxLQUFmLENBQXFCLFVBQXJCLEdBQWtDLHdDQUFsQztBQUNELENBUkQ7O0FBVUEsUUFBUSxTQUFSLENBQWtCLGdCQUFsQixHQUFxQyxZQUFZO0FBQy9DLE1BQUksQ0FBQyxLQUFLLFNBQUwsQ0FBZSxLQUFmLENBQXFCLGdCQUExQixFQUNFOztBQUVGLE9BQUssU0FBTCxDQUFlLEtBQWYsQ0FBcUIsZ0JBQXJCLEdBQXdDLEVBQXhDO0FBQ0EsT0FBSyxTQUFMLENBQWUsS0FBZixDQUFxQixhQUFyQixHQUFxQyxFQUFyQztBQUNBLE9BQUssU0FBTCxDQUFlLEtBQWYsQ0FBcUIsWUFBckIsR0FBb0MsRUFBcEM7QUFDQSxPQUFLLFNBQUwsQ0FBZSxLQUFmLENBQXFCLFVBQXJCLEdBQWtDLEVBQWxDO0FBQ0QsQ0FSRDs7QUFVQSxRQUFRLFNBQVIsQ0FBa0IsSUFBbEIsR0FBeUIsVUFBVSxvQkFBVixFQUFnQztBQUN2RCxNQUFJLENBQUMsS0FBSyxPQUFWLEVBQ0U7O0FBRUYseUJBQXVCLE9BQVEsb0JBQVIsS0FBa0MsV0FBbEMsR0FBZ0QsSUFBaEQsR0FBdUQsb0JBQTlFOztBQUVBLE9BQUssU0FBTCxDQUFlLEtBQWYsQ0FBcUIsT0FBckIsR0FBK0IsTUFBL0I7QUFDQSxPQUFLLGtCQUFMLEdBQTBCLENBQUMsQ0FBM0I7QUFDQSxPQUFLLE1BQUwsR0FBYyxHQUFkO0FBQ0EsT0FBSyxNQUFMLEdBQWMsR0FBZDtBQUNBO0FBQ0EsTUFBSSxvQkFBSixFQUNFLEtBQUssS0FBTCxDQUFXLG9CQUFYO0FBQ0gsQ0FiRDs7a0JBZWUsTzs7Ozs7Ozs7O0FDeG9CZixTQUFTLGVBQVQsQ0FBeUIsZ0JBQXpCLEVBQTJDLGFBQTNDLEVBQTBEOztBQUV4RCxNQUFJLHFCQUFxQixDQUF6QixFQUE0Qjs7QUFFNUIsTUFBTSxNQUFNLGNBQWMsSUFBMUI7QUFDQSxNQUFNLGVBQWUsY0FBYyxNQUFkLENBQXFCLE1BQTFDO0FBQ0EsTUFBTSxPQUFPLGNBQWMsYUFBM0I7O0FBRUEsTUFBTSxVQUFXLE9BQU8sT0FBTyxnQkFBL0I7O0FBRUEsTUFBSSxTQUFKLENBQWMsWUFBZCxFQUE0QixDQUE1QixFQUErQixDQUEvQixFQUFrQyxhQUFhLEtBQS9DLEVBQXNELGFBQWEsTUFBbkUsRUFBMkUsQ0FBM0UsRUFBOEUsT0FBOUUsRUFDRyxJQUFJLE1BQUosQ0FBVyxLQUFYLEdBQW1CLDRCQUR0QixFQUNvRCxtQkFBbUIsSUFBSSxNQUFKLENBQVcsTUFBOUIsR0FBdUMsNEJBRDNGO0FBRUQ7O0FBRUQsU0FBUyxlQUFULENBQXlCLGdCQUF6QixFQUEyQyxhQUEzQyxFQUEwRDs7QUFFeEQsTUFBSSxxQkFBcUIsQ0FBekIsRUFBNEI7O0FBRTVCLE1BQU0sTUFBTSxjQUFjLElBQTFCO0FBQ0EsTUFBTSxlQUFlLGNBQWMsTUFBZCxDQUFxQixNQUExQztBQUNBLE1BQU0sT0FBTyxjQUFjLGFBQTNCOztBQUVBLE1BQU0sVUFBVyxPQUFPLE9BQU8sZ0JBQS9COztBQUVBLE1BQUksU0FBSixDQUFjLFlBQWQsRUFBNEIsQ0FBNUIsRUFBK0IsQ0FBL0IsRUFBa0MsYUFBYSxLQUEvQyxFQUFzRCxhQUFhLE1BQW5FLEVBQTJFLE9BQTNFLEVBQW9GLENBQXBGLEVBQ0UsbUJBQW1CLElBQUksTUFBSixDQUFXLEtBQTlCLEdBQXNDLDRCQUR4QyxFQUNzRSxJQUFJLE1BQUosQ0FBVyxNQUFYLEdBQW9CLDRCQUQxRjtBQUVEOztBQUVELFNBQVMsY0FBVCxDQUF3QixnQkFBeEIsRUFBMEMsYUFBMUMsRUFBeUQ7O0FBRXZELE1BQUkscUJBQXFCLENBQXpCLEVBQTRCOztBQUU1QixNQUFNLE1BQU0sY0FBYyxJQUExQjtBQUNBLE1BQU0sZUFBZSxjQUFjLE1BQWQsQ0FBcUIsTUFBMUM7O0FBRUEsTUFBSSxJQUFKOztBQUVBLE1BQUksbUJBQW1CLENBQXZCLEVBQ0UsSUFBSSxTQUFKLENBQWMsWUFBZCxFQUE0QixDQUE1QixFQUErQixDQUEvQixFQUFrQyxhQUFhLEtBQWIsR0FBcUIsZ0JBQXZELEVBQXlFLGFBQWEsTUFBdEYsRUFBOEYsQ0FBOUYsRUFBaUcsQ0FBakcsRUFDRSxhQUFhLEtBQWIsR0FBcUIsZ0JBQXJCLEdBQXdDLDRCQUQxQyxFQUN3RSxhQUFhLE1BQWIsR0FBc0IsNEJBRDlGOztBQUdGLE1BQUksT0FBSjtBQUNEOztBQUVELFNBQVMsZUFBVCxDQUF5QixnQkFBekIsRUFBMkMsYUFBM0MsRUFBMEQ7O0FBRXhELE1BQUkscUJBQXFCLENBQXpCLEVBQTRCOztBQUU1QixNQUFNLE1BQU0sY0FBYyxJQUExQjtBQUNBLE1BQU0sZUFBZSxjQUFjLE1BQWQsQ0FBcUIsTUFBMUM7O0FBRUEsTUFBSSxJQUFKOztBQUVBLE1BQUksV0FBSixHQUFrQixnQkFBbEI7O0FBRUEsTUFBSSxTQUFKLENBQWMsWUFBZCxFQUE0QixDQUE1QixFQUErQixDQUEvQixFQUFrQyxhQUFhLEtBQS9DLEVBQXNELGFBQWEsTUFBbkUsRUFBMkUsQ0FBM0UsRUFBOEUsQ0FBOUUsRUFDRSxJQUFJLE1BQUosQ0FBVyxLQUFYLEdBQW1CLDRCQURyQixFQUNtRCxJQUFJLE1BQUosQ0FBVyxNQUFYLEdBQW9CLDRCQUR2RTs7QUFHQSxNQUFJLE9BQUo7QUFFRDs7QUFFRCxJQUFNLFNBQVM7QUFFYixRQUZhLGtCQUVOLENBRk0sRUFFSCxDQUZHLEVBRUEsQ0FGQSxFQUVHLENBRkgsRUFFTTtBQUNqQixXQUFPLElBQUksQ0FBSixHQUFRLENBQVIsR0FBWSxDQUFuQjtBQUNELEdBSlk7QUFNYixhQU5hLHVCQU1ELENBTkMsRUFNRSxDQU5GLEVBTUssQ0FOTCxFQU1RLENBTlIsRUFNVztBQUN0QixXQUFPLENBQUMsQ0FBRCxJQUFNLEtBQUssQ0FBWCxLQUFpQixJQUFJLENBQXJCLElBQTBCLENBQWpDO0FBQ0QsR0FSWTtBQVViLGNBVmEsd0JBVUMsQ0FWRCxFQVVJLENBVkosRUFVTyxDQVZQLEVBVVUsQ0FWVixFQVVhO0FBQ3hCLFdBQU8sQ0FBQyxDQUFELElBQU0sQ0FBQyxJQUFJLElBQUksQ0FBSixHQUFRLENBQWIsSUFBa0IsQ0FBbEIsR0FBc0IsQ0FBdEIsR0FBMEIsQ0FBMUIsR0FBOEIsQ0FBcEMsSUFBeUMsQ0FBaEQ7QUFDRCxHQVpZO0FBY2IsWUFkYSxzQkFjRixDQWRFLEVBY0MsQ0FkRCxFQWNJLENBZEosRUFjTyxDQWRQLEVBY1U7QUFDckIsV0FBTyxLQUFLLEtBQUssQ0FBVixJQUFlLENBQWYsR0FBbUIsQ0FBMUI7QUFDRCxHQWhCWTtBQWtCYixhQWxCYSx1QkFrQkQsQ0FsQkMsRUFrQkUsQ0FsQkYsRUFrQkssQ0FsQkwsRUFrQlEsQ0FsQlIsRUFrQlc7QUFDdEIsV0FBTyxLQUFLLEtBQUssQ0FBVixJQUFlLENBQWYsR0FBbUIsQ0FBbkIsR0FBdUIsQ0FBdkIsR0FBMkIsQ0FBbEM7QUFDRDtBQXBCWSxDQUFmOztrQkF1QmU7O0FBRWIsa0NBRmE7QUFHYixrQ0FIYTtBQUliLGdDQUphO0FBS2Isa0NBTGE7QUFNYjs7QUFOYSxDOzs7Ozs7OztBQ3RGZixJQUFNLGVBQWU7O0FBRW5CLGNBQVksb0JBQVUsQ0FBVixFQUFhLENBQWIsRUFBZ0IsR0FBaEIsRUFBcUIsVUFBckIsRUFBaUMsVUFBakMsRUFBNkMsV0FBN0MsRUFBMEQsaUJBQTFELEVBQTZFLHFCQUE3RSxFQUFvRzs7QUFFOUcsUUFBSSxDQUFDLEdBQUwsRUFDRTs7QUFFRixRQUFJLFFBQVEsQ0FBWjs7QUFFQSxRQUFJLFNBQUosR0FBZ0IsY0FBYyxXQUFkLEdBQTRCLFNBQTVDO0FBQ0EsUUFBSSxXQUFKLEdBQWtCLG9CQUFvQixpQkFBcEIsR0FBd0MsU0FBMUQ7QUFDQSxRQUFJLFNBQUosR0FBZ0Isd0JBQXdCLHFCQUF4QixHQUFnRCxDQUFoRTs7QUFHQSxRQUFJLGVBQWUsUUFBbkIsRUFBNkI7O0FBRTNCLFVBQUksTUFBSixDQUFXLENBQVgsRUFBYyxDQUFkO0FBQ0EsVUFBSSxTQUFKO0FBQ0E7O0FBRUEsVUFBSSxHQUFKLENBQVEsQ0FBUixFQUFXLENBQVgsRUFBYyxhQUFhLENBQTNCLEVBQThCLENBQTlCLEVBQWlDLEtBQUssRUFBTCxHQUFVLENBQTNDLEVBQThDLEtBQTlDOztBQUVBLFVBQUksV0FBSixFQUNFLElBQUksSUFBSjs7QUFFRixVQUFJLHFCQUFKLEVBQTJCOztBQUV6QixZQUFJLENBQUMsaUJBQUwsRUFBd0I7QUFDdEIsa0JBQVEsSUFBSSxXQUFaO0FBQ0EsY0FBSSxXQUFKLEdBQWtCLEdBQWxCO0FBQ0EsY0FBSSxXQUFKLEdBQWtCLE9BQWxCO0FBQ0EsY0FBSSxNQUFKO0FBQ0EsY0FBSSxXQUFKLEdBQWtCLEtBQWxCO0FBQ0QsU0FORCxNQU9FLElBQUksTUFBSjtBQUVIO0FBQ0YsS0F2QkQsTUF3QkssSUFBSSxlQUFlLFFBQW5CLEVBQTZCOztBQUVoQztBQUNBLFVBQUksU0FBSjtBQUNBLFVBQUksSUFBSixDQUFTLElBQUksYUFBYSxDQUExQixFQUE2QixJQUFJLGFBQWEsQ0FBOUMsRUFBaUQsVUFBakQsRUFBNkQsVUFBN0Q7O0FBRUEsVUFBSSxXQUFKLEVBQ0UsSUFBSSxJQUFKOztBQUVGLFVBQUkscUJBQUosRUFBMkI7O0FBRXpCLFlBQUksQ0FBQyxpQkFBTCxFQUF3QjtBQUN0QixrQkFBUSxJQUFJLFdBQVo7QUFDQSxjQUFJLFdBQUosR0FBa0IsR0FBbEI7QUFDQSxjQUFJLFdBQUosR0FBa0IsT0FBbEI7QUFDQSxjQUFJLE1BQUo7QUFDQSxjQUFJLFdBQUosR0FBa0IsS0FBbEI7QUFDRCxTQU5ELE1BT0UsSUFBSSxNQUFKO0FBRUg7QUFDRixLQXJCSSxNQXFCRSxJQUFJLGVBQWUsVUFBbkIsRUFBK0I7O0FBRXBDLFVBQUksU0FBSjtBQUNBLFVBQUksTUFBSixDQUFXLElBQUksYUFBYSxDQUE1QixFQUErQixJQUFJLGFBQWEsQ0FBaEQ7QUFDQSxVQUFJLE1BQUosQ0FBVyxJQUFJLGFBQWEsQ0FBNUIsRUFBK0IsSUFBSSxhQUFhLENBQWhEO0FBQ0EsVUFBSSxNQUFKLENBQVcsQ0FBWCxFQUFjLElBQUksYUFBYSxDQUEvQjtBQUNBLFVBQUksU0FBSjs7QUFFQSxVQUFJLFdBQUosRUFDRSxJQUFJLElBQUo7O0FBRUYsVUFBSSxxQkFBSixFQUEyQjs7QUFFekIsWUFBSSxDQUFDLGlCQUFMLEVBQXdCO0FBQ3RCLGtCQUFRLElBQUksV0FBWjtBQUNBLGNBQUksV0FBSixHQUFrQixHQUFsQjtBQUNBLGNBQUksV0FBSixHQUFrQixPQUFsQjtBQUNBLGNBQUksTUFBSjtBQUNBLGNBQUksV0FBSixHQUFrQixLQUFsQjtBQUNELFNBTkQsTUFPRSxJQUFJLE1BQUo7QUFFSDtBQUNELFVBQUksU0FBSjtBQUNELEtBeEJNLE1Bd0JBLElBQUksZUFBZSxPQUFuQixFQUE0Qjs7QUFFakMsVUFBSSxXQUFKLEdBQWtCLFdBQWxCO0FBQ0EsOEJBQXdCLGFBQWEsQ0FBckM7QUFDQSxVQUFJLFNBQUosR0FBZ0IscUJBQWhCOztBQUVBLFVBQUksU0FBSjtBQUNBLFVBQUksTUFBSixDQUFXLElBQUksYUFBYSxDQUE1QixFQUErQixJQUFJLGFBQWEsQ0FBaEQ7QUFDQSxVQUFJLE1BQUosQ0FBVyxJQUFJLGFBQWEsQ0FBNUIsRUFBK0IsSUFBSSxhQUFhLENBQWhEO0FBQ0EsVUFBSSxNQUFKOztBQUVBLFVBQUksTUFBSixDQUFXLElBQUksYUFBYSxDQUE1QixFQUErQixJQUFJLGFBQWEsQ0FBaEQ7QUFDQSxVQUFJLE1BQUosQ0FBVyxJQUFJLGFBQWEsQ0FBNUIsRUFBK0IsSUFBSSxhQUFhLENBQWhEO0FBQ0EsVUFBSSxNQUFKO0FBRUQ7QUFHRixHQXJHa0I7QUFzR25CLGVBQWEscUJBQVUsT0FBVixFQUFtQjtBQUM5QixTQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUN2QyxVQUFJLFNBQVMsUUFBUSxDQUFSLENBQWI7O0FBRUEsbUJBQWEsVUFBYixDQUF3QixPQUFPLENBQS9CLEVBQWtDLE9BQU8sQ0FBekMsRUFBNEMsT0FBTyxHQUFuRCxFQUF3RCxPQUFPLElBQS9ELEVBQXFFLE9BQU8sSUFBNUUsRUFBa0YsT0FBTyxLQUF6RixFQUFnRyxPQUFPLFdBQXZHLEVBQW9ILE9BQU8sZUFBM0g7QUFDRDtBQUNGO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbEhtQixDQUFyQjs7a0JBcUhlLFk7Ozs7Ozs7OztRQ2xIQyxNLEdBQUEsTTtRQU1BLE8sR0FBQSxPO1FBTUEsYSxHQUFBLGE7UUFzQkEsZSxHQUFBLGU7UUFJQSxHLEdBQUEsRztRQWVBLFUsR0FBQSxVO1FBV0EsUyxHQUFBLFM7UUFzREEsYyxHQUFBLGM7UUFJQSxpQixHQUFBLGlCO1FBSUEsbUIsR0FBQSxtQjtRQVlBLFEsR0FBQSxRO1FBTUEsUSxHQUFBLFE7UUFpQkEsWSxHQUFBLFk7UUFtQkEsZSxHQUFBLGU7UUFXQSxxQixHQUFBLHFCO1FBNENBLGdCLEdBQUEsZ0I7UUFpQ0EsUSxHQUFBLFE7UUEwSkEsWSxHQUFBLFk7UUErTUEsVyxHQUFBLFc7UUF3QkEsbUIsR0FBQSxtQjtRQXFCQSxhLEdBQUEsYTtRQThCQSxXLEdBQUEsVztRQWNBLGEsR0FBQSxhO1FBb0NBLFksR0FBQSxZO1FBYUEsWSxHQUFBLFk7UUFxRkEsYyxHQUFBLGM7UUFjQSxJLEdBQUEsSTtRQVdBLEksR0FBQSxJO1FBYUEsZSxHQUFBLGU7UUE0Q0EscUIsR0FBQSxxQjtRQWNBLFEsR0FBQSxRO1FBcUhBLFcsR0FBQSxXOztBQTNpQ2hCOztBQUVPLFNBQVMsTUFBVCxDQUFnQixPQUFoQixFQUF5QixJQUF6QixFQUErQjtBQUNyQyxTQUFRLFNBQVIsR0FBb0IsUUFBUSxLQUFLLFNBQWIsQ0FBcEI7QUFDQSxTQUFRLFNBQVIsQ0FBa0IsV0FBbEIsR0FBZ0MsT0FBaEM7QUFDQSxTQUFRLElBQVIsR0FBZSxLQUFLLFNBQXBCO0FBQ0E7O0FBRU0sU0FBUyxPQUFULENBQWlCLEtBQWpCLEVBQXdCO0FBQzlCLFVBQVMsQ0FBVCxHQUFhLENBQUc7QUFDaEIsR0FBRSxTQUFGLEdBQWMsS0FBZDtBQUNBLFFBQU8sSUFBSSxDQUFKLEVBQVA7QUFDQTs7QUFFTSxTQUFTLGFBQVQsQ0FBdUIsUUFBdkIsRUFBaUMsR0FBakMsRUFBc0MsSUFBdEMsRUFBNEM7O0FBRWxELEtBQUksU0FBUyxhQUFiLEVBQ0MsU0FBUyxlQUFULENBQXlCLFNBQVMsZUFBVCxLQUE2QixJQUFJLEdBQTFELEVBREQsS0FFSyxJQUFJLFNBQVMsUUFBYixFQUNKLFNBQVMsVUFBVCxDQUFvQixTQUFTLFVBQVQsS0FBd0IsSUFBSSxHQUFoRCxFQURJLEtBRUEsSUFBSSxTQUFTLFFBQWIsRUFDSixTQUFTLFVBQVQsQ0FBb0IsU0FBUyxVQUFULEtBQXdCLElBQUksR0FBaEQsRUFESSxLQUVBLElBQUksU0FBUyxNQUFiLEVBQ0osU0FBUyxRQUFULENBQWtCLFNBQVMsUUFBVCxLQUFzQixJQUFJLEdBQTVDLEVBREksS0FFQSxJQUFJLFNBQVMsS0FBYixFQUNKLFNBQVMsT0FBVCxDQUFpQixTQUFTLE9BQVQsS0FBcUIsSUFBSSxHQUExQyxFQURJLEtBRUEsSUFBSSxTQUFTLE1BQWIsRUFDSixTQUFTLE9BQVQsQ0FBaUIsU0FBUyxPQUFULEtBQXFCLElBQUksR0FBMUMsRUFESSxLQUVBLElBQUksU0FBUyxPQUFiLEVBQ0osU0FBUyxRQUFULENBQWtCLFNBQVMsUUFBVCxLQUFzQixJQUFJLEdBQTVDLEVBREksS0FFQSxJQUFJLFNBQVMsTUFBYixFQUNKLFNBQVMsV0FBVCxDQUFxQixTQUFTLFdBQVQsS0FBeUIsSUFBSSxHQUFsRDs7QUFFRCxRQUFPLFFBQVA7QUFDQTs7QUFFTSxTQUFTLGVBQVQsQ0FBeUIsR0FBekIsRUFBOEIsSUFBOUIsRUFBb0M7QUFDMUMsUUFBTyxtQkFBVSxPQUFPLFVBQWpCLElBQStCLEdBQXRDO0FBQ0E7O0FBRU0sU0FBUyxHQUFULENBQWEsS0FBYixFQUFvQixNQUFwQixFQUE0QjtBQUNsQyxLQUFJLGFBQWEsS0FBakI7QUFDQSxLQUFJLFFBQVEsQ0FBWixFQUFlO0FBQ2QsZUFBYSxJQUFiO0FBQ0EsV0FBUyxDQUFDLENBQVY7QUFDQTs7QUFFRCxTQUFRLEtBQUssS0FBYjtBQUNBLFVBQVMsQ0FBQyxNQUFELEdBQVUsQ0FBVixHQUFjLE1BQXZCOztBQUVBLFFBQU8sTUFBTSxNQUFOLEdBQWUsTUFBdEI7QUFBOEIsVUFBUSxNQUFNLEtBQWQ7QUFBOUIsRUFFQSxPQUFPLGFBQWEsTUFBTSxLQUFuQixHQUEyQixLQUFsQztBQUNBOztBQUVNLFNBQVMsVUFBVCxDQUFvQixHQUFwQixFQUF5QjtBQUMvQixLQUFJLENBQUMsR0FBTCxFQUNDLE9BQU8sR0FBUDs7QUFFRCxPQUFNLElBQUksT0FBSixDQUFZLFFBQVosRUFBc0IsRUFBdEIsQ0FBTjtBQUNBLEtBQUksS0FBSyxJQUFUO0FBQ0EsS0FBSSxJQUFJLElBQUksTUFBWjtBQUNBLFFBQU8sR0FBRyxJQUFILENBQVEsSUFBSSxNQUFKLENBQVcsRUFBRSxDQUFiLENBQVIsQ0FBUCxFQUFpQyxDQUFHO0FBQ3BDLFFBQU8sSUFBSSxLQUFKLENBQVUsQ0FBVixFQUFhLElBQUksQ0FBakIsQ0FBUDtBQUNBOztBQUVNLFNBQVMsU0FBVCxDQUFtQixPQUFuQixFQUE0QjtBQUNsQyxTQUFRLFNBQVIsR0FBb0IsVUFBVSxDQUFWLEVBQWEsQ0FBYixFQUFnQixLQUFoQixFQUF1QixNQUF2QixFQUErQixNQUEvQixFQUF1QyxlQUF2QyxFQUF3RCxlQUF4RCxFQUF5RSxXQUF6RSxFQUFzRjtBQUN6RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQUksZUFBSixFQUFxQjtBQUNwQixRQUFLLFNBQUwsR0FBaUIsZUFBakI7QUFDQTs7QUFFRCxNQUFJLFdBQUosRUFBaUI7QUFDaEIsUUFBSyxXQUFMLEdBQW1CLFdBQW5CO0FBQ0E7O0FBRUQ7QUFDQTtBQUNBOztBQUVBLE1BQUksT0FBTyxNQUFQLEtBQWtCLFdBQXRCLEVBQW1DO0FBQ2xDLFlBQVMsQ0FBVDtBQUNBOztBQUVELE9BQUssU0FBTCxHQUFpQixlQUFqQjs7QUFFQSxPQUFLLFNBQUw7QUFDQSxPQUFLLE1BQUwsQ0FBWSxJQUFJLE1BQWhCLEVBQXdCLENBQXhCO0FBQ0EsT0FBSyxNQUFMLENBQVksSUFBSSxLQUFKLEdBQVksTUFBeEIsRUFBZ0MsQ0FBaEM7QUFDQSxPQUFLLGdCQUFMLENBQXNCLElBQUksS0FBMUIsRUFBaUMsQ0FBakMsRUFBb0MsSUFBSSxLQUF4QyxFQUErQyxJQUFJLE1BQW5EO0FBQ0EsT0FBSyxNQUFMLENBQVksSUFBSSxLQUFoQixFQUF1QixJQUFJLE1BQUosR0FBYSxNQUFwQztBQUNBLE9BQUssZ0JBQUwsQ0FBc0IsSUFBSSxLQUExQixFQUFpQyxJQUFJLE1BQXJDLEVBQTZDLElBQUksS0FBSixHQUFZLE1BQXpELEVBQWlFLElBQUksTUFBckU7QUFDQSxPQUFLLE1BQUwsQ0FBWSxJQUFJLE1BQWhCLEVBQXdCLElBQUksTUFBNUI7QUFDQSxPQUFLLGdCQUFMLENBQXNCLENBQXRCLEVBQXlCLElBQUksTUFBN0IsRUFBcUMsQ0FBckMsRUFBd0MsSUFBSSxNQUFKLEdBQWEsTUFBckQ7QUFDQSxPQUFLLE1BQUwsQ0FBWSxDQUFaLEVBQWUsSUFBSSxNQUFuQjtBQUNBLE9BQUssZ0JBQUwsQ0FBc0IsQ0FBdEIsRUFBeUIsQ0FBekIsRUFBNEIsSUFBSSxNQUFoQyxFQUF3QyxDQUF4QztBQUNBLE9BQUssU0FBTDs7QUFFQSxNQUFJLGVBQUosRUFBcUI7QUFDcEIsUUFBSyxJQUFMO0FBQ0E7O0FBRUQsTUFBSSxlQUFlLGtCQUFrQixDQUFyQyxFQUF3QztBQUN2QyxRQUFLLE1BQUw7QUFDQTtBQUNELEVBbEREO0FBbURBOztBQUVNLFNBQVMsY0FBVCxDQUF3QixDQUF4QixFQUEyQixDQUEzQixFQUE4QjtBQUNwQyxRQUFPLElBQUksQ0FBWDtBQUNBOztBQUVNLFNBQVMsaUJBQVQsQ0FBMkIsVUFBM0IsRUFBdUMsVUFBdkMsRUFBbUQ7QUFDekQsUUFBTyxXQUFXLENBQVgsR0FBZSxXQUFXLENBQWpDO0FBQ0E7O0FBRU0sU0FBUyxtQkFBVCxDQUE2QixHQUE3QixFQUFrQztBQUN4QyxLQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sUUFBUCxLQUFvQixFQUFyQixFQUF5QixRQUF6QixDQUFrQyxFQUFsQyxDQUFSO0FBQ0EsS0FBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLFFBQVAsS0FBb0IsQ0FBckIsRUFBd0IsUUFBeEIsQ0FBaUMsRUFBakMsQ0FBUjtBQUNBLEtBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxRQUFQLEtBQW9CLENBQXJCLEVBQXdCLFFBQXhCLENBQWlDLEVBQWpDLENBQVI7O0FBRUEsS0FBSSxFQUFFLE1BQUYsR0FBVyxDQUFYLEdBQWUsTUFBTSxDQUFyQixHQUF5QixDQUE3QjtBQUNBLEtBQUksRUFBRSxNQUFGLEdBQVcsQ0FBWCxHQUFlLE1BQU0sQ0FBckIsR0FBeUIsQ0FBN0I7QUFDQSxLQUFJLEVBQUUsTUFBRixHQUFXLENBQVgsR0FBZSxNQUFNLENBQXJCLEdBQXlCLENBQTdCOztBQUVBLFFBQU8sTUFBTSxDQUFOLEdBQVUsQ0FBVixHQUFjLENBQXJCO0FBQ0E7O0FBRU0sU0FBUyxRQUFULENBQWtCLENBQWxCLEVBQXFCLENBQXJCLEVBQXdCLENBQXhCLEVBQTJCO0FBQ2pDLEtBQUksTUFBTyxLQUFLLEVBQU4sR0FBYSxLQUFLLENBQWxCLEdBQXdCLENBQWxDOztBQUVBLFFBQU8sR0FBUDtBQUNBOztBQUVNLFNBQVMsUUFBVCxDQUFrQixHQUFsQixFQUF1QjtBQUM3QixLQUFJLE1BQU0sRUFBVjtBQUNBLEtBQUksSUFBSyxDQUFDLE1BQU0sUUFBUCxLQUFvQixFQUE3QjtBQUNBLEtBQUksSUFBSyxDQUFDLE1BQU0sUUFBUCxLQUFvQixDQUE3QjtBQUNBLEtBQUksSUFBSyxDQUFDLE1BQU0sUUFBUCxLQUFvQixDQUE3Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSSxDQUFKLElBQVMsQ0FBVDtBQUNBLEtBQUksQ0FBSixJQUFTLENBQVQ7QUFDQSxLQUFJLENBQUosSUFBUyxDQUFUOztBQUVBLFFBQU8sR0FBUDtBQUNBOztBQUVNLFNBQVMsWUFBVCxDQUFzQixHQUF0QixDQUEwQixVQUExQixFQUFzQztBQUM1QyxLQUFJLE1BQU0sS0FBSyxNQUFMLEtBQWdCLENBQTFCOztBQUVBLEtBQUksT0FBTyxPQUFPLFVBQVUsQ0FBVixDQUFQLEtBQXdCLENBQW5DO0FBQ0EsUUFBUSxPQUFPLENBQVIsR0FDSCxLQUFLLElBQUwsQ0FBVSxJQUFWLENBREcsR0FFSCxLQUFLLEtBQUwsQ0FBVyxJQUFYLENBRko7QUFHQSxLQUFJLE9BQU8sQ0FBWCxFQUNDLFFBQVEsR0FBUjs7QUFFRCxRQUFPLE9BQU8sR0FBZCxFQUFtQixNQUFuQixFQUEyQjtBQUMxQixNQUFJLFFBQVEsSUFBUixJQUNILEtBQUssSUFBTCxNQUFlLEdBRGhCLEVBRUMsT0FBTyxJQUFQO0FBQ0Q7QUFDRCxRQUFPLENBQUMsQ0FBUjtBQUNBOztBQUVEO0FBQ08sU0FBUyxlQUFULENBQXlCLEdBQXpCLEVBQThCO0FBQ3JDLEtBQUksQ0FBQyxJQUFJLE9BQVQsRUFBa0I7QUFDakIsTUFBSSxPQUFKLEdBQWMsWUFBZDtBQUNBOztBQUVELFFBQU8sR0FBUDtBQUNDOztBQUVELElBQUkscUJBQXFCLEVBQXpCO0FBQ0EsSUFBSSxnQkFBZ0IsSUFBcEI7O0FBRU8sU0FBUyxxQkFBVCxDQUErQixVQUEvQixFQUEyQyxRQUEzQyxFQUFxRCxVQUFyRCxFQUFpRTs7QUFFdkU7O0FBRUEsY0FBYSxjQUFjLFFBQTNCOztBQUVBLEtBQUksUUFBUSxhQUFhLEdBQWIsR0FBbUIsUUFBbkIsR0FBOEIsR0FBOUIsR0FBb0MsVUFBaEQ7QUFDQSxLQUFJLFNBQVMsbUJBQW1CLEtBQW5CLENBQWI7O0FBRUEsS0FBSSxNQUFNLE1BQU4sQ0FBSixFQUFtQjtBQUNsQixNQUFJO0FBQ0gsT0FBSSxRQUFRLHNIQUFzSCxjQUF0SCxHQUF1SSxVQUF2SSxHQUFvSixJQUFwSixHQUEySixZQUEzSixHQUEwSyxRQUExSyxHQUFxTCxrQkFBckwsR0FBME0sVUFBMU0sR0FBdU4sR0FBbk87QUFDQTtBQUNBLE9BQUksQ0FBQyxhQUFMLEVBQW9CO0FBQ25CLFFBQUksT0FBTyxTQUFTLElBQXBCO0FBQ0Esb0JBQWdCLFNBQVMsYUFBVCxDQUF1QixNQUF2QixDQUFoQjtBQUNBLGtCQUFjLFNBQWQsR0FBMEIsRUFBMUI7QUFDQSxRQUFJLFdBQVcsU0FBUyxjQUFULENBQXdCLE9BQXhCLENBQWY7QUFDQSxrQkFBYyxXQUFkLENBQTBCLFFBQTFCO0FBQ0EsU0FBSyxXQUFMLENBQWlCLGFBQWpCO0FBQ0E7O0FBRUQsaUJBQWMsS0FBZCxDQUFvQixPQUFwQixHQUE4QixFQUE5QjtBQUNBLGlCQUFjLFlBQWQsQ0FBMkIsT0FBM0IsRUFBb0MsS0FBcEM7O0FBRUEsWUFBUyxLQUFLLEtBQUwsQ0FBVyxjQUFjLFlBQXpCLENBQVQ7QUFDQSxpQkFBYyxLQUFkLENBQW9CLE9BQXBCLEdBQThCLE1BQTlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBckJELENBc0JBLE9BQU8sQ0FBUCxFQUFVO0FBQ1QsWUFBUyxLQUFLLElBQUwsQ0FBVSxXQUFXLEdBQXJCLENBQVQ7QUFDQTs7QUFFRCxXQUFTLEtBQUssR0FBTCxDQUFTLE1BQVQsRUFBaUIsUUFBakIsQ0FBVDs7QUFFQSxxQkFBbUIsS0FBbkIsSUFBNEIsTUFBNUI7QUFDQTs7QUFFRCxRQUFPLE1BQVA7QUFDQTs7QUFFTSxTQUFTLGdCQUFULENBQTBCLFlBQTFCLEVBQXdDLGFBQXhDLEVBQXVEO0FBQzdELGdCQUFlLGdCQUFnQixPQUEvQjs7QUFFQSxLQUFJLGdCQUFnQixFQUFwQjs7QUFFQSxLQUFJLGtCQUFrQjtBQUNyQixXQUFTLEVBRFk7QUFFckIsZUFBYSxDQUFDLENBQUQsRUFBSSxDQUFKLENBRlE7QUFHckIsY0FBWSxDQUFDLENBQUQsRUFBSSxDQUFKLENBSFM7QUFJckIsa0JBQWdCLENBQUMsQ0FBRCxFQUFJLENBQUosRUFBTyxDQUFQLEVBQVUsQ0FBVixDQUpLO0FBS3JCLHFCQUFtQixDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUCxFQUFVLENBQVYsRUFBYSxDQUFiLEVBQWdCLENBQWhCLENBTEU7QUFNckIsU0FBTyxDQUFDLENBQUQsRUFBSSxDQUFKLENBTmM7QUFPckIsVUFBUSxDQUFDLENBQUQsRUFBSSxDQUFKLENBUGE7QUFRckIsYUFBVyxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUCxFQUFVLENBQVYsQ0FSVTtBQVNyQixjQUFZLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FUUztBQVVyQixpQkFBZSxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUCxFQUFVLENBQVYsQ0FWTTtBQVdyQixvQkFBa0IsQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLENBQVAsRUFBVSxDQUFWLEVBQWEsQ0FBYixFQUFnQixDQUFoQjtBQVhHLEVBQXRCOztBQWNBLGlCQUFnQixnQkFBZ0IsWUFBaEIsQ0FBaEI7O0FBRUEsS0FBSSxhQUFKLEVBQW1COztBQUVsQixPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksY0FBYyxNQUFsQyxFQUEwQyxHQUExQyxFQUErQztBQUM5QyxpQkFBYyxDQUFkLEtBQW9CLGFBQXBCO0FBQ0E7QUFDRCxFQUxELE1BTUMsZ0JBQWdCLEVBQWhCOztBQUVELFFBQU8sYUFBUDtBQUNBOztBQUVEO0FBQ08sU0FBUyxRQUFULENBQWtCLEdBQWxCLEVBQXVCLFNBQXZCLEVBQWtDLEVBQWxDLEVBQXNDLFVBQXRDLEVBQWtEO0FBQ3hELEtBQUksSUFBSSxnQkFBUixFQUEwQjtBQUN6QixNQUFJLGdCQUFKLENBQXFCLFNBQXJCLEVBQWdDLEVBQWhDLEVBQW9DLGNBQWMsS0FBbEQ7QUFDQSxFQUZELE1BR0ssSUFBSSxJQUFJLFdBQVIsRUFBcUI7QUFDekIsTUFBSSxXQUFKLENBQWdCLE9BQU8sU0FBdkIsRUFBa0MsVUFBVSxDQUFWLEVBQWE7QUFDOUMsT0FBSSxLQUFLLE9BQU8sS0FBaEI7QUFDQSxLQUFFLGNBQUYsR0FBbUIsRUFBRSxjQUFGLElBQW9CLFlBQVk7QUFBRSxNQUFFLFdBQUYsR0FBZ0IsS0FBaEI7QUFBd0IsSUFBN0U7QUFDQSxLQUFFLGVBQUYsR0FBb0IsRUFBRSxlQUFGLElBQXFCLFlBQVk7QUFBRSxNQUFFLFlBQUYsR0FBaUIsSUFBakI7QUFBd0IsSUFBL0U7QUFDQSxNQUFHLElBQUgsQ0FBUSxHQUFSLEVBQWEsQ0FBYjtBQUNBLEdBTEQ7QUFNQSxFQVBJLE1BUUosT0FBTyxLQUFQO0FBQ0Q7O0FBRUQ7QUFDQSxTQUFTLFdBQVQsR0FBdUI7O0FBRXRCLEtBQUksTUFBTSxpR0FBVjs7QUFFQSxLQUFJLFVBQVUsQ0FBQyxRQUFELEVBQVcsUUFBWCxFQUFxQixTQUFyQixFQUFnQyxXQUFoQyxFQUE2QyxVQUE3QyxFQUF5RCxRQUF6RCxFQUFtRSxVQUFuRSxDQUFkO0FBQ0EsS0FBSSxlQUFlLENBQUMsS0FBRCxFQUFRLEtBQVIsRUFBZSxLQUFmLEVBQXNCLEtBQXRCLEVBQTZCLEtBQTdCLEVBQW9DLEtBQXBDLEVBQTJDLEtBQTNDLENBQW5COztBQUVBLEtBQUksWUFBWSxDQUFDLFNBQUQsRUFBWSxVQUFaLEVBQXdCLE9BQXhCLEVBQWlDLE9BQWpDLEVBQTBDLEtBQTFDLEVBQWlELE1BQWpELEVBQXlELE1BQXpELEVBQWlFLFFBQWpFLEVBQTJFLFdBQTNFLEVBQXdGLFNBQXhGLEVBQW1HLFVBQW5HLEVBQStHLFVBQS9HLENBQWhCO0FBQ0EsS0FBSSxpQkFBaUIsQ0FBQyxLQUFELEVBQVEsS0FBUixFQUFlLEtBQWYsRUFBc0IsS0FBdEIsRUFBNkIsS0FBN0IsRUFBb0MsS0FBcEMsRUFBMkMsS0FBM0MsRUFBa0QsS0FBbEQsRUFBeUQsS0FBekQsRUFBZ0UsS0FBaEUsRUFBdUUsS0FBdkUsRUFBOEUsS0FBOUUsQ0FBckI7O0FBRUEsS0FBSSxXQUFXLHNJQUFmO0FBQ0EsS0FBSSxlQUFlLGFBQW5COztBQUVBLFFBQU8sVUFBVSxFQUFWLEVBQWMsWUFBZCxFQUE0QixXQUE1QixFQUF5Qzs7QUFFL0MsTUFBSSxPQUFPLGNBQWMsWUFBWSxJQUExQixHQUFpQyxPQUE1QztBQUNBLE1BQUksU0FBUyxjQUFjLFlBQVksTUFBMUIsR0FBbUMsU0FBaEQ7O0FBRUEsTUFBSSxZQUFZLGNBQWMsWUFBWSxTQUExQixHQUFzQyxZQUF0RDtBQUNBLE1BQUksY0FBYyxjQUFjLFlBQVksV0FBMUIsR0FBd0MsY0FBMUQ7O0FBRUEsTUFBSSxTQUFTLEVBQWI7QUFDQSxNQUFJLE1BQU0sS0FBVjs7QUFFQSxPQUFLLE1BQU0sR0FBRyxPQUFULEdBQW1CLEVBQW5CLEdBQXdCLEtBQUssSUFBSSxJQUFKLENBQVMsRUFBVCxDQUFMLEdBQW9CLElBQUksSUFBSixFQUFqRDtBQUNBLE1BQUksTUFBTSxFQUFOLENBQUosRUFBZSxNQUFNLFlBQVksY0FBWixDQUFOOztBQUVmLE1BQUksYUFBYSxLQUFiLENBQW1CLENBQW5CLEVBQXNCLENBQXRCLE1BQTZCLE1BQWpDLEVBQXlDO0FBQ3hDLGtCQUFlLGFBQWEsS0FBYixDQUFtQixDQUFuQixDQUFmO0FBQ0EsU0FBTSxJQUFOO0FBQ0E7O0FBRUQsTUFBSSxNQUFNLE1BQU0sUUFBTixHQUFpQixLQUEzQjtBQUNBLE1BQUksT0FBTyxHQUFHLE1BQU0sTUFBVCxHQUFYO0FBQ0EsTUFBSSxNQUFNLEdBQUcsTUFBTSxLQUFULEdBQVY7QUFDQSxNQUFJLFFBQVEsR0FBRyxNQUFNLE9BQVQsR0FBWjtBQUNBLE1BQUksT0FBTyxHQUFHLE1BQU0sVUFBVCxHQUFYO0FBQ0EsTUFBSSxRQUFRLEdBQUcsTUFBTSxPQUFULEdBQVo7QUFDQSxNQUFJLFVBQVUsR0FBRyxNQUFNLFNBQVQsR0FBZDtBQUNBLE1BQUksVUFBVSxHQUFHLE1BQU0sU0FBVCxHQUFkO0FBQ0EsTUFBSSxlQUFlLEdBQUcsTUFBTSxjQUFULEdBQW5CO0FBQ0EsTUFBSSxTQUFTLE1BQU0sQ0FBTixHQUFVLEdBQUcsaUJBQUgsRUFBdkI7O0FBRUEsV0FBUyxhQUFhLE9BQWIsQ0FBcUIsR0FBckIsRUFBMEIsVUFBVSxHQUFWLEVBQWU7O0FBRWpELFdBQVEsR0FBUjs7QUFFQyxTQUFLLEdBQUw7QUFDQyxZQUFPLElBQVA7QUFDRCxTQUFLLElBQUw7QUFDQyxZQUFPLElBQUksSUFBSixFQUFVLENBQVYsQ0FBUDtBQUNELFNBQUssS0FBTDtBQUNDLFlBQU8sVUFBVSxHQUFWLENBQVA7QUFDRCxTQUFLLE1BQUw7QUFDQyxZQUFPLEtBQUssR0FBTCxDQUFQOztBQUdELFNBQUssR0FBTDtBQUNDLFlBQU8sUUFBUSxDQUFmO0FBQ0QsU0FBSyxJQUFMO0FBQ0MsWUFBTyxJQUFJLFFBQVEsQ0FBWixFQUFlLENBQWYsQ0FBUDtBQUNELFNBQUssS0FBTDtBQUNDLFlBQU8sWUFBWSxLQUFaLENBQVA7QUFDRCxTQUFLLE1BQUw7QUFDQyxZQUFPLE9BQU8sS0FBUCxDQUFQOztBQUdELFNBQUssR0FBTDtBQUNDLFlBQU8sU0FBUyxPQUFPLElBQVAsRUFBYSxLQUFiLENBQW1CLENBQUMsQ0FBcEIsQ0FBVCxDQUFQO0FBQ0QsU0FBSyxJQUFMO0FBQ0MsWUFBTyxJQUFJLE9BQU8sSUFBUCxFQUFhLEtBQWIsQ0FBbUIsQ0FBQyxDQUFwQixDQUFKLEVBQTRCLENBQTVCLENBQVA7QUFDRCxTQUFLLEtBQUw7QUFDQyxZQUFPLElBQUksT0FBTyxJQUFQLEVBQWEsS0FBYixDQUFtQixDQUFDLENBQXBCLENBQUosRUFBNEIsQ0FBNUIsQ0FBUDtBQUNELFNBQUssTUFBTDtBQUNDLFlBQU8sSUFBSSxJQUFKLEVBQVUsQ0FBVixDQUFQOztBQUdELFNBQUssR0FBTDtBQUNDLFlBQU8sUUFBUSxFQUFSLElBQWMsRUFBckI7QUFDRCxTQUFLLElBQUw7QUFDQyxZQUFPLElBQUksUUFBUSxFQUFSLElBQWMsRUFBbEIsRUFBc0IsQ0FBdEIsQ0FBUDs7QUFHRCxTQUFLLEdBQUw7QUFDQyxZQUFPLEtBQVA7QUFDRCxTQUFLLElBQUw7QUFDQyxZQUFPLElBQUksS0FBSixFQUFXLENBQVgsQ0FBUDs7QUFFRCxTQUFLLEdBQUw7QUFDQyxZQUFPLE9BQVA7QUFDRCxTQUFLLElBQUw7QUFDQyxZQUFPLElBQUksT0FBSixFQUFhLENBQWIsQ0FBUDs7QUFHRCxTQUFLLEdBQUw7QUFDQyxZQUFPLE9BQVA7QUFDRCxTQUFLLElBQUw7QUFDQyxZQUFPLElBQUksT0FBSixFQUFhLENBQWIsQ0FBUDs7QUFFRCxTQUFLLEdBQUw7QUFDQyxZQUFPLE9BQU8sWUFBUCxFQUFxQixLQUFyQixDQUEyQixDQUEzQixFQUE4QixDQUE5QixDQUFQO0FBQ0QsU0FBSyxJQUFMO0FBQ0MsWUFBTyxJQUFJLE9BQU8sWUFBUCxFQUFxQixLQUFyQixDQUEyQixDQUEzQixFQUE4QixDQUE5QixDQUFKLEVBQXNDLENBQXRDLENBQVA7QUFDRCxTQUFLLEtBQUw7QUFDQyxZQUFPLElBQUksT0FBTyxZQUFQLEVBQXFCLEtBQXJCLENBQTJCLENBQTNCLEVBQThCLENBQTlCLENBQUosRUFBc0MsQ0FBdEMsQ0FBUDs7QUFHRCxTQUFLLEdBQUw7QUFDQyxZQUFPLFFBQVEsRUFBUixHQUFhLEdBQWIsR0FBbUIsR0FBMUI7QUFDRCxTQUFLLElBQUw7QUFDQyxZQUFPLFFBQVEsRUFBUixHQUFhLElBQWIsR0FBb0IsSUFBM0I7QUFDRCxTQUFLLEdBQUw7QUFDQyxZQUFPLFFBQVEsRUFBUixHQUFhLEdBQWIsR0FBbUIsR0FBMUI7QUFDRCxTQUFLLElBQUw7QUFDQyxZQUFPLFFBQVEsRUFBUixHQUFhLElBQWIsR0FBb0IsSUFBM0I7O0FBR0QsU0FBSyxHQUFMO0FBQ0MsWUFBTyxNQUFNLEtBQU4sR0FBYyxDQUFDLE9BQU8sRUFBUCxFQUFXLEtBQVgsQ0FBaUIsUUFBakIsS0FBOEIsQ0FBQyxFQUFELENBQS9CLEVBQXFDLEdBQXJDLEdBQTJDLE9BQTNDLENBQW1ELFlBQW5ELEVBQWlFLEVBQWpFLENBQXJCLENBekVGLENBeUU2RjtBQUM1RixTQUFLLEdBQUw7QUFDQyxZQUFPLENBQUMsU0FBUyxDQUFULEdBQWEsR0FBYixHQUFtQixHQUFwQixJQUEyQixLQUFLLEtBQUwsQ0FBVyxLQUFLLEdBQUwsQ0FBUyxNQUFULElBQW1CLEVBQTlCLENBQWxDLENBM0VGLENBMkV1RTtBQUN0RSxTQUFLLElBQUw7QUFDQyxZQUFPLENBQUMsU0FBUyxDQUFULEdBQWEsR0FBYixHQUFtQixHQUFwQixJQUEyQixJQUFJLEtBQUssS0FBTCxDQUFXLEtBQUssR0FBTCxDQUFTLE1BQVQsSUFBbUIsRUFBOUIsQ0FBSixFQUF1QyxDQUF2QyxDQUFsQyxDQTdFRixDQTZFK0U7QUFDOUUsU0FBSyxLQUFMO0FBQ0MsWUFBTyxDQUFDLFNBQVMsQ0FBVCxHQUFhLEdBQWIsR0FBbUIsR0FBcEIsSUFBMkIsSUFBSSxLQUFLLEtBQUwsQ0FBVyxLQUFLLEdBQUwsQ0FBUyxNQUFULElBQW1CLEVBQTlCLENBQUosRUFBdUMsQ0FBdkMsQ0FBM0IsR0FBdUUsSUFBSSxLQUFLLEdBQUwsQ0FBUyxNQUFULElBQW1CLEVBQXZCLEVBQTJCLENBQTNCLENBQTlFLENBL0VGLENBK0UrRzs7QUFFOUc7QUFDQyxZQUFPLElBQUksS0FBSixDQUFVLENBQVYsRUFBYSxJQUFJLE1BQUosR0FBYSxDQUExQixDQUFQOztBQWxGRjtBQXFGQSxHQXZGUSxDQUFUOztBQXlGQSxTQUFPLE1BQVA7QUFDQSxFQXhIRDtBQXlIQTs7QUFFTSxJQUFNLGtDQUFhLGFBQW5COztBQUVBLFNBQVMsWUFBVCxDQUFzQixDQUF0QixFQUF5QixFQUF6QixFQUE2QixXQUE3QixFQUEwQztBQUNoRCxLQUFJLE1BQU0sSUFBVixFQUNDLE9BQU8sRUFBUDs7QUFFRCxLQUFJLE9BQU8sQ0FBUCxDQUFKO0FBQ0EsS0FBSSxhQUFhLElBQUksQ0FBSixHQUFRLElBQVIsR0FBZSxLQUFoQztBQUNBLEtBQUksVUFBSixFQUFnQixLQUFLLENBQUMsQ0FBTjs7QUFFaEIsS0FBSSxtQkFBbUIsY0FBYyxZQUFZLGdCQUExQixHQUE2QyxHQUFwRTtBQUNBLEtBQUksc0JBQXNCLGNBQWMsWUFBWSxtQkFBMUIsR0FBZ0QsR0FBMUU7O0FBRUEsS0FBSSxVQUFVLEVBQWQ7QUFDQSxNQUFLLE9BQU8sRUFBUCxDQUFMO0FBQ0EsS0FBSSxhQUFhLENBQWpCO0FBQ0EsS0FBSSxJQUFKO0FBQ0EsS0FBSSxTQUFTLEVBQWI7O0FBRUEsS0FBSSxVQUFVLEVBQWQ7QUFDQSxLQUFJLGtCQUFrQixDQUFDLENBQXZCO0FBQ0EsS0FBSSxrQkFBa0IsRUFBdEI7QUFDQSxLQUFJLGlCQUFpQixFQUFyQjtBQUNBLEtBQUksb0JBQW9CLENBQXhCLENBckJnRCxDQXFCckI7QUFDM0IsS0FBSSxtQkFBbUIsQ0FBdkIsQ0F0QmdELENBc0J0QjtBQUMxQixLQUFJLFVBQVUsQ0FBZDtBQUNBLEtBQUksdUJBQXVCLEtBQTNCO0FBQ0EsS0FBSSxXQUFXLENBQWY7O0FBRUEsV0FBVSxHQUFHLEtBQUgsQ0FBUyw0Q0FBVCxDQUFWO0FBQ0E7QUFDQSxLQUFJLFFBQVEsSUFBWjs7QUFFQSxNQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLFdBQVcsSUFBSSxRQUFRLE1BQXZDLEVBQStDLEdBQS9DLEVBQW9EO0FBQ25ELFVBQVEsUUFBUSxDQUFSLENBQVI7O0FBRUEsTUFBSSxVQUFVLEdBQVYsSUFBaUIsa0JBQWtCLENBQXZDLEVBQTBDO0FBQ3pDLHFCQUFrQixDQUFsQjtBQUNBO0FBQ0EsR0FIRCxNQUdPLElBQUksVUFBVSxHQUFkLEVBQW1CO0FBQ3pCLGlCQUFjLEdBQWQ7QUFDQSxHQUZNLE1BRUEsSUFBSSxVQUFVLEdBQWQsRUFBbUI7QUFDekIsaUJBQWMsSUFBZDtBQUNBO0FBQ0EsR0FITSxNQUdBLElBQUksTUFBTSxDQUFOLE1BQWEsR0FBYixJQUFvQixNQUFNLE1BQU0sTUFBTixHQUFlLENBQXJCLE1BQTRCLEdBQXBELEVBQXlEO0FBQy9ELGlCQUFjLEtBQUssR0FBTCxDQUFTLElBQVQsRUFBZSxNQUFNLE1BQU4sR0FBZSxDQUE5QixDQUFkO0FBQ0EscUJBQWtCLElBQUksTUFBTSxNQUFWLEdBQW1CLENBQXJDO0FBQ0E7QUFDQSxHQUpNLE1BSUEsSUFBSSxDQUFDLE1BQU0sQ0FBTixNQUFhLEdBQWIsSUFBb0IsTUFBTSxDQUFOLE1BQWEsR0FBbEMsS0FBMEMsTUFBTSxNQUFNLE1BQU4sR0FBZSxDQUFyQixNQUE0QixHQUExRSxFQUErRTtBQUNyRiwwQkFBdUIsSUFBdkI7QUFDQTs7QUFFRCxNQUFJLGtCQUFrQixDQUF0QixFQUF5QjtBQUN4QixtQkFBZ0IsSUFBaEIsQ0FBcUIsS0FBckI7QUFDQSxPQUFJLFVBQVUsR0FBVixJQUFpQixVQUFVLEdBQS9CLEVBQ0Msb0JBREQsS0FFSyxJQUFJLFVBQVUsR0FBZCxFQUNKO0FBQ0QsR0FORCxNQU9LO0FBQ0osa0JBQWUsSUFBZixDQUFvQixLQUFwQjtBQUNBLE9BQUksVUFBVSxHQUFWLElBQWlCLFVBQVUsR0FBL0IsRUFDQztBQUNEO0FBQ0Q7O0FBRUQsS0FBSSxvQkFBSixFQUEwQjtBQUN6QixNQUFJLFVBQVUsS0FBSyxLQUFMLENBQVcsQ0FBWCxDQUFkO0FBQ0EsYUFBVyxDQUFDLFlBQVksQ0FBWixHQUFnQixFQUFoQixHQUFxQixPQUFPLE9BQVAsQ0FBdEIsRUFBdUMsTUFBdkMsR0FBZ0QsaUJBQTNEO0FBQ0EsZ0JBQWMsS0FBSyxHQUFMLENBQVMsRUFBVCxFQUFhLFFBQWIsQ0FBZDtBQUNBOztBQUVELE1BQUssVUFBTDs7QUFFQSxLQUFJLGtCQUFrQixDQUF0QixFQUNDLGtCQUFrQixDQUFsQjs7QUFFRCxXQUFVLEVBQUUsT0FBRixDQUFVLGdCQUFWLENBQVY7QUFDQSxLQUFJLFFBQVEsUUFBUSxLQUFSLENBQWMsR0FBZCxDQUFaO0FBQ0E7QUFDQSxLQUFJLHVCQUF1QixDQUFDLE1BQU0sQ0FBTixJQUFXLEVBQVosRUFBZ0IsS0FBaEIsQ0FBc0IsRUFBdEIsQ0FBM0I7QUFDQSxLQUFJLHNCQUFzQixDQUFDLE1BQU0sQ0FBTixJQUFXLEVBQVosRUFBZ0IsS0FBaEIsQ0FBc0IsRUFBdEIsQ0FBMUI7O0FBRUEsS0FBSSx3QkFBd0IscUJBQXFCLENBQXJCLE1BQTRCLEdBQXhELEVBQ0MscUJBQXFCLEtBQXJCOztBQUVEOztBQUVBLEtBQUksZ0JBQWdCLENBQXBCO0FBQ0EsS0FBSSxnQkFBZ0IsQ0FBcEI7QUFDQSxLQUFJLGVBQWUsQ0FBbkI7QUFDQSxLQUFJLGdCQUFnQixDQUFwQjtBQUNBLEtBQUksd0JBQXdCLENBQTVCOztBQUVBLFFBQU8sZ0JBQWdCLE1BQWhCLEdBQXlCLENBQWhDLEVBQW1DO0FBQ2xDLFVBQVEsZ0JBQWdCLEdBQWhCLEVBQVI7O0FBRUEsTUFBSSxVQUFVLEdBQVYsSUFBaUIsVUFBVSxHQUEvQixFQUFvQztBQUNuQzs7QUFFQSxPQUFJLGtCQUFrQixpQkFBdEIsRUFBeUM7QUFDeEMsUUFBSSxTQUFTLG9CQUFiO0FBQ0EsMkJBQXVCLEVBQXZCOztBQUVBLFFBQUksVUFBVSxHQUFkLEVBQW1CO0FBQ2xCO0FBQ0EsU0FBSSxRQUFRLG9CQUFvQixhQUFwQixJQUFxQyxTQUFTLE9BQU8sTUFBaEIsR0FBeUIsQ0FBOUQsQ0FBWjs7QUFFQSxZQUFPLFFBQVEsQ0FBZixFQUFrQjtBQUNqQixhQUFPLE9BQVAsQ0FBZSxHQUFmO0FBQ0E7QUFDQTtBQUNEOztBQUVELFdBQU8sT0FBTyxNQUFQLEdBQWdCLENBQXZCLEVBQTBCO0FBQ3pCLGNBQVMsT0FBTyxHQUFQLEtBQWUsTUFBeEI7QUFDQTs7QUFFQSxTQUFJLHdCQUF3QixhQUF4QixLQUEwQyxDQUExQyxJQUErQyxpQkFBaUIsT0FBaEUsSUFBMkUsT0FBTyxNQUFQLEdBQWdCLENBQS9GLEVBQ0MsU0FBUyxzQkFBc0IsTUFBL0I7QUFDRDs7QUFFRCxRQUFJLFVBQUosRUFDQyxTQUFTLE1BQU0sTUFBZjtBQUVELElBekJELE1BeUJPO0FBQ04sUUFBSSxxQkFBcUIsTUFBckIsR0FBOEIsQ0FBbEMsRUFBcUM7QUFDcEMsY0FBUyxxQkFBcUIsR0FBckIsS0FBNkIsTUFBdEM7QUFDQTtBQUNBO0FBQ0EsS0FKRCxNQUtLLElBQUksVUFBVSxHQUFkLEVBQW1CO0FBQ3ZCLGNBQVMsTUFBTSxNQUFmO0FBQ0E7QUFDQTtBQUNBOztBQUVELFFBQUksd0JBQXdCLGFBQXhCLEtBQTBDLENBQTFDLElBQStDLGlCQUFpQixPQUFoRSxJQUEyRSxxQkFBcUIsTUFBckIsR0FBOEIsQ0FBN0csRUFDQyxTQUFTLHNCQUFzQixNQUEvQjtBQUNEO0FBR0QsR0E3Q0QsTUE2Q08sSUFBSSxDQUFDLE1BQU0sQ0FBTixNQUFhLEdBQWIsSUFBb0IsTUFBTSxDQUFOLE1BQWEsR0FBbEMsS0FBMEMsTUFBTSxNQUFNLE1BQU4sR0FBZSxDQUFyQixNQUE0QixHQUF0RSxJQUE2RSxnQkFBZ0IsSUFBaEIsQ0FBcUIsS0FBckIsQ0FBakYsRUFBOEc7QUFDcEgsT0FBSSxXQUFXLENBQWYsRUFDQyxRQUFRLE1BQU0sT0FBTixDQUFjLEdBQWQsRUFBbUIsRUFBbkIsRUFBdUIsT0FBdkIsQ0FBK0IsR0FBL0IsRUFBb0MsRUFBcEMsQ0FBUixDQURELEtBR0MsUUFBUSxNQUFNLE9BQU4sQ0FBYyxHQUFkLEVBQW1CLEVBQW5CLENBQVI7O0FBRUQsYUFBVSxNQUFNLE9BQU4sQ0FBYyxNQUFkLEVBQXNCLFVBQVUsRUFBVixFQUFjO0FBQzdDLFdBQU8sSUFBSSxRQUFKLEVBQWMsR0FBRyxNQUFqQixDQUFQO0FBQ0EsSUFGUyxDQUFWO0FBS0EsR0FYTSxNQVdBO0FBQ04sT0FBSSxVQUFVLEdBQWQsRUFBbUI7QUFDbEI7QUFDQSxvQkFBZ0IscUJBQWhCO0FBQ0EsNEJBQXdCLENBQXhCOztBQUVBLFFBQUkscUJBQXFCLE1BQXJCLEdBQThCLENBQWxDLEVBQ0MsU0FBUyxzQkFBc0IsTUFBL0I7QUFDRCxJQVBELE1BT08sSUFBSSxNQUFNLE1BQU4sR0FBZSxDQUFmLEtBQXNCLE1BQU0sQ0FBTixNQUFhLElBQWIsSUFBcUIsTUFBTSxNQUFNLE1BQU4sR0FBZSxDQUFyQixNQUE0QixJQUFsRCxJQUE0RCxNQUFNLENBQU4sTUFBYSxHQUFiLElBQW9CLE1BQU0sTUFBTSxNQUFOLEdBQWUsQ0FBckIsTUFBNEIsR0FBakksQ0FBSixFQUE0STtBQUNsSixhQUFTLE1BQU0sS0FBTixDQUFZLENBQVosRUFBZSxNQUFNLE1BQU4sR0FBZSxDQUE5QixJQUFtQyxNQUE1QztBQUNBLElBRk0sTUFJTixTQUFTLFFBQVEsTUFBakI7QUFDRDtBQUNEOztBQUVELEtBQUksWUFBWSxDQUFoQjtBQUNBLEtBQUkscUJBQXFCLEVBQXpCO0FBQ0EsS0FBSSxzQkFBc0IsS0FBMUI7O0FBRUEsUUFBTyxlQUFlLE1BQWYsR0FBd0IsQ0FBL0IsRUFBa0M7QUFDakMsVUFBUSxlQUFlLEtBQWYsRUFBUjs7QUFFQSxNQUFJLFVBQVUsR0FBVixJQUFpQixVQUFVLEdBQS9CLEVBQW9DO0FBQ25DLE9BQUksb0JBQW9CLE1BQXBCLEdBQTZCLENBQTdCLElBQWtDLE9BQU8sb0JBQW9CLElBQXBCLENBQXlCLEVBQXpCLENBQVAsTUFBeUMsQ0FBL0UsRUFBa0Y7QUFDakYsMEJBQXNCLG9CQUFvQixLQUFwQixFQUF0QjtBQUNBLDBCQUFzQixJQUF0QjtBQUNBLElBSEQsTUFJSyxJQUFJLFVBQVUsR0FBZCxFQUFtQjtBQUN2QiwwQkFBc0IsR0FBdEI7QUFDQSwwQkFBc0IsSUFBdEI7QUFDQTtBQUNELEdBVEQsTUFTTyxJQUFJLE1BQU0sTUFBTixHQUFlLENBQWYsS0FBc0IsTUFBTSxDQUFOLE1BQWEsSUFBYixJQUFxQixNQUFNLE1BQU0sTUFBTixHQUFlLENBQXJCLE1BQTRCLElBQWxELElBQTRELE1BQU0sQ0FBTixNQUFhLEdBQWIsSUFBb0IsTUFBTSxNQUFNLE1BQU4sR0FBZSxDQUFyQixNQUE0QixHQUFqSSxDQUFKLEVBQTRJO0FBQ2xKLHlCQUFzQixNQUFNLEtBQU4sQ0FBWSxDQUFaLEVBQWUsTUFBTSxNQUFOLEdBQWUsQ0FBOUIsQ0FBdEI7QUFDQTtBQUNBLEdBSE0sTUFHQSxJQUFJLENBQUMsTUFBTSxDQUFOLE1BQWEsR0FBYixJQUFvQixNQUFNLENBQU4sTUFBYSxHQUFsQyxLQUEwQyxNQUFNLE1BQU0sTUFBTixHQUFlLENBQXJCLE1BQTRCLEdBQXRFLElBQTZFLGdCQUFnQixJQUFoQixDQUFxQixLQUFyQixDQUFqRixFQUE4RztBQUNwSCxPQUFJLFdBQVcsQ0FBZixFQUNDLFFBQVEsTUFBTSxPQUFOLENBQWMsR0FBZCxFQUFtQixFQUFuQixFQUF1QixPQUF2QixDQUErQixHQUEvQixFQUFvQyxFQUFwQyxDQUFSLENBREQsS0FHQyxRQUFRLE1BQU0sT0FBTixDQUFjLEdBQWQsRUFBbUIsRUFBbkIsQ0FBUjtBQUNELHlCQUFzQixNQUFNLE9BQU4sQ0FBYyxNQUFkLEVBQXNCLFVBQVUsRUFBVixFQUFjO0FBQ3pELFdBQU8sSUFBSSxRQUFKLEVBQWMsR0FBRyxNQUFqQixDQUFQO0FBQ0EsSUFGcUIsQ0FBdEI7QUFHQSxHQVJNLE1BUUE7QUFDTix5QkFBc0IsS0FBdEI7QUFDQTtBQUNBO0FBQ0Q7O0FBRUQsV0FBVSxDQUFDLHNCQUFzQixnQkFBdEIsR0FBeUMsRUFBMUMsSUFBZ0Qsa0JBQTFEO0FBQ0E7QUFDQSxRQUFPLE1BQVA7QUFDQTs7QUFFRDs7QUFFTyxTQUFTLFdBQVQsQ0FBcUIsQ0FBckIsRUFBd0IsQ0FBeEIsRUFBMkIsR0FBM0IsRUFBZ0M7QUFDdEMsTUFBSyw0QkFBTDtBQUNBLE1BQUssNEJBQUw7QUFDQSxLQUFJLFNBQVMsSUFBSSxZQUFKLENBQWlCLENBQWpCLEVBQW9CLENBQXBCLEVBQXVCLENBQXZCLEVBQTBCLENBQTFCLEVBQTZCLElBQTFDO0FBQ0EsS0FBSSxXQUFXLElBQWY7O0FBRUEsTUFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLENBQXBCLEVBQXVCLEdBQXZCLEVBQTRCOztBQUUzQixNQUFJLE9BQU8sQ0FBUCxNQUFjLE9BQU8sSUFBSSxDQUFYLENBQWQsR0FBOEIsT0FBTyxDQUFQLE1BQWMsT0FBTyxJQUFJLENBQVgsQ0FBNUMsR0FBNEQsT0FBTyxDQUFQLE1BQWMsT0FBTyxJQUFJLEVBQVgsQ0FBOUUsRUFBOEY7QUFDN0YsY0FBVyxLQUFYO0FBQ0E7QUFDQTtBQUNEOztBQUVELEtBQUksUUFBSixFQUFjO0FBQ2IsU0FBTyxTQUFTLE9BQU8sQ0FBUCxDQUFULEVBQW9CLE9BQU8sQ0FBUCxDQUFwQixFQUErQixPQUFPLENBQVAsQ0FBL0IsQ0FBUDtBQUNBLEVBRkQsTUFFTztBQUNOLFNBQU8sQ0FBUDtBQUNBOztBQUVEO0FBQ0E7O0FBRUQ7QUFDTyxTQUFTLG1CQUFULENBQTZCLEVBQTdCLEVBQWlDO0FBQ3ZDLEtBQUksSUFBSSxDQUFSO0FBQ0EsS0FBSSxJQUFJLENBQVI7O0FBRUEsTUFBSyxNQUFNLE9BQU8sS0FBbEI7O0FBRUEsS0FBSSxHQUFHLE9BQUgsSUFBYyxHQUFHLE9BQUgsS0FBZSxDQUFqQyxFQUFvQztBQUNuQyxNQUFJLEdBQUcsT0FBUDtBQUNBLE1BQUksR0FBRyxPQUFQO0FBQ0EsRUFIRCxNQUdPLElBQUksR0FBRyxNQUFILElBQWEsR0FBRyxNQUFILElBQWEsQ0FBOUIsRUFBaUM7QUFBRTtBQUN6QyxNQUFJLEdBQUcsTUFBUDtBQUNBLE1BQUksR0FBRyxNQUFQO0FBQ0EsRUFITSxNQUlGO0FBQ0osTUFBSSxHQUFHLEtBQUgsR0FBVyxHQUFHLE1BQUgsQ0FBVSxVQUF6QjtBQUNBLE1BQUksR0FBRyxLQUFILEdBQVcsR0FBRyxNQUFILENBQVUsU0FBekI7QUFDQTs7QUFFRCxRQUFPLEVBQUUsR0FBRyxDQUFMLEVBQVEsR0FBRyxDQUFYLEVBQVA7QUFDQTs7QUFFTSxTQUFTLGFBQVQsQ0FBdUIsTUFBdkIsRUFBK0IsTUFBL0IsRUFBdUMsY0FBdkMsRUFBdUQ7QUFDN0QsS0FBSSxhQUFhLEVBQWpCOztBQUVBLEtBQUksa0JBQWtCLFNBQVMsU0FBUyxXQUFsQixHQUFnQyxXQUF0RDtBQUNBLEtBQUksbUJBQW1CLFNBQVMsU0FBUyxZQUFsQixHQUFpQyxZQUF4RDtBQUNBLEtBQUksaUJBQWlCLFNBQVMsU0FBUyxVQUFsQixHQUErQixVQUFwRDtBQUNBLEtBQUksbUJBQW1CLFNBQVMsU0FBUyxZQUFsQixHQUFpQyxZQUF4RDs7QUFJQSxlQUFjLE9BQU8sZUFBUCxJQUEwQixPQUFPLGVBQVAsSUFBMEIsR0FBcEQsR0FBMkQsa0JBQWtCLGVBQWUsZUFBZixDQUFuQixHQUF1RCxlQUFlLGVBQWYsSUFBa0MsR0FBekYsR0FBZ0csRUFBeEs7QUFDQSxlQUFjLE9BQU8sZ0JBQVAsSUFBMkIsT0FBTyxnQkFBUCxJQUEyQixHQUF0RCxHQUE2RCxrQkFBa0IsZUFBZSxnQkFBZixDQUFuQixHQUF3RCxlQUFlLGdCQUFmLElBQW1DLEdBQTNGLEdBQWtHLEVBQTVLO0FBQ0EsZUFBYyxPQUFPLGNBQVAsSUFBeUIsT0FBTyxjQUFQLElBQXlCLEtBQWxELEdBQTJELGtCQUFrQixlQUFlLGNBQWYsQ0FBbkIsR0FBc0QsZUFBZSxjQUFmLElBQWlDLEtBQXZGLEdBQWdHLEVBQXhLOztBQUdBLEtBQUksYUFBYSxPQUFPLGdCQUFQLElBQTJCLE9BQU8sZ0JBQVAsSUFBMkIsRUFBdEQsR0FBNEQsa0JBQWtCLGVBQWUsZ0JBQWYsQ0FBbkIsR0FBd0QsZUFBZSxnQkFBZixJQUFtQyxFQUEzRixHQUFpRyxFQUE3Szs7QUFFQSxLQUFJLENBQUMsaUJBQUQsSUFBc0IsVUFBMUIsRUFBc0M7QUFDckMsTUFBSSxrQkFBa0IsV0FBVyxLQUFYLENBQWlCLEdBQWpCLEVBQXNCLENBQXRCLENBQXRCOztBQUVBLE1BQUksZ0JBQWdCLENBQWhCLE1BQXVCLEdBQXZCLElBQThCLGdCQUFnQixDQUFoQixNQUF1QixJQUF6RCxFQUNDLGtCQUFrQixNQUFNLGVBQU4sR0FBd0IsR0FBMUM7O0FBRUQsZ0JBQWMsZUFBZDtBQUNBLEVBUEQsTUFRQyxjQUFjLFVBQWQ7O0FBRUQsUUFBTyxVQUFQO0FBQ0E7O0FBRU0sU0FBUyxXQUFULENBQXFCLFlBQXJCLEVBQW1DLE1BQW5DLEVBQTJDLGNBQTNDLEVBQTJEOztBQUVqRSxLQUFJLFFBQVEsZ0JBQWdCLE1BQWhCLEdBQXlCLE9BQU8sWUFBUCxDQUF6QixHQUFnRCxlQUFlLFlBQWYsQ0FBNUQ7O0FBRUEsUUFBTyxLQUFQO0FBQ0E7O0FBRUQsSUFBSSxtQkFBbUIsSUFBdkI7QUFDQTs7QUFFQSxJQUFJLG1CQUFtQixPQUFPLGdCQUFQLElBQTJCLENBQWxEO0FBQ0EsSUFBSSxvQkFBb0IsQ0FBeEI7QUFDQSxJQUFJLCtCQUErQixtQkFBbUIsbUJBQW1CLGlCQUF0QyxHQUEwRCxDQUE3Rjs7QUFFTyxTQUFTLGFBQVQsQ0FBdUIsTUFBdkIsRUFBK0IsS0FBL0IsRUFBc0MsTUFBdEMsRUFBOEM7O0FBRXBELEtBQUkscUJBQXFCLENBQUMsQ0FBQyxnQkFBM0IsRUFBNkM7QUFDNUMsTUFBSSxNQUFNLE9BQU8sVUFBUCxDQUFrQixJQUFsQixDQUFWO0FBQ0Esc0JBQW9CLElBQUksNEJBQUosSUFDZixJQUFJLHlCQURXLElBRWYsSUFBSSx3QkFGVyxJQUdmLElBQUksdUJBSFcsSUFJZixJQUFJLHNCQUpXLElBSWUsQ0FKbkM7O0FBT0EsaUNBQStCLG1CQUFtQixpQkFBbEQ7O0FBRUEsU0FBTyxLQUFQLEdBQWUsUUFBUSw0QkFBdkI7QUFDQSxTQUFPLE1BQVAsR0FBZ0IsU0FBUyw0QkFBekI7O0FBRUEsTUFBSSxxQkFBcUIsaUJBQXpCLEVBQTRDOztBQUUzQyxVQUFPLEtBQVAsQ0FBYSxLQUFiLEdBQXFCLFFBQVEsSUFBN0I7QUFDQSxVQUFPLEtBQVAsQ0FBYSxNQUFiLEdBQXNCLFNBQVMsSUFBL0I7O0FBRUEsT0FBSSxLQUFKLENBQVUsNEJBQVYsRUFBd0MsNEJBQXhDO0FBRUE7O0FBRUQ7QUFDQTtBQUVBLEVBMUJELE1BMEJPO0FBQ04sU0FBTyxLQUFQLEdBQWUsS0FBZjtBQUNBLFNBQU8sTUFBUCxHQUFnQixNQUFoQjtBQUNBO0FBRUQ7O0FBR00sU0FBUyxZQUFULENBQXNCLEtBQXRCLEVBQTZCLE1BQTdCLEVBQXFDO0FBQzNDLEtBQUksU0FBUyxTQUFTLGFBQVQsQ0FBdUIsUUFBdkIsQ0FBYjtBQUNBLFFBQU8sWUFBUCxDQUFvQixPQUFwQixFQUE2Qix1QkFBN0I7O0FBRUEsZUFBYyxNQUFkLEVBQXNCLEtBQXRCLEVBQTZCLE1BQTdCOztBQUVBLEtBQUksQ0FBQyxpQkFBRCxJQUFzQixPQUFRLGtCQUFSLEtBQWdDLFdBQTFELEVBQXVFO0FBQ3RFLHFCQUFtQixXQUFuQixDQUErQixNQUEvQjtBQUNBOztBQUVELFFBQU8sTUFBUDtBQUNBOztBQUVNLFNBQVMsWUFBVCxDQUFzQixNQUF0QixFQUE4QixNQUE5QixFQUFzQyxRQUF0QyxFQUFnRDtBQUN0RCxLQUFJLENBQUMsTUFBRCxJQUFXLENBQUMsTUFBWixJQUFzQixDQUFDLFFBQTNCLEVBQ0M7O0FBRUQsS0FBSSxlQUFlLFdBQVcsR0FBWCxJQUFrQixXQUFXLE1BQVgsR0FBb0IsS0FBcEIsR0FBNEIsTUFBOUMsQ0FBbkI7QUFDQSxLQUFJLFdBQVcsV0FBVyxNQUExQjtBQUNBLEtBQUksTUFBTSxPQUFPLFNBQVAsQ0FBaUIsUUFBakIsQ0FBVjtBQUNBLEtBQUksUUFBUSxLQUFaOztBQUVBLEtBQUksZUFBZSxTQUFTLGFBQVQsQ0FBdUIsR0FBdkIsQ0FBbkI7QUFDQSxjQUFhLFFBQWIsR0FBd0IsWUFBeEI7QUFDQSxjQUFhLElBQWIsR0FBb0IsR0FBcEI7QUFDQSxjQUFhLE1BQWIsR0FBc0IsUUFBdEI7QUFDQSxLQUFJLENBQUo7O0FBR0EsS0FBSSxPQUFRLElBQVIsS0FBa0IsV0FBbEIsSUFBaUMsQ0FBQyxDQUFDLElBQUksSUFBSixFQUF2QyxFQUFtRDs7QUFFbEQ7QUFDQSxNQUFJLFVBQVUsSUFBSSxPQUFKLENBQVksdUJBQVosRUFBcUMsRUFBckMsQ0FBZDs7QUFFQSxNQUFJLGFBQWEsS0FBSyxPQUFMLENBQWpCO0FBQ0EsTUFBSSxTQUFTLElBQUksV0FBSixDQUFnQixXQUFXLE1BQTNCLENBQWI7QUFDQSxNQUFJLFdBQVcsSUFBSSxVQUFKLENBQWUsTUFBZixDQUFmO0FBQ0EsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFdBQVcsTUFBL0IsRUFBdUMsR0FBdkMsRUFBNEM7QUFDM0MsWUFBUyxDQUFULElBQWMsV0FBVyxVQUFYLENBQXNCLENBQXRCLENBQWQ7QUFDQTs7QUFFRCxNQUFJLE9BQU8sSUFBSSxJQUFKLENBQVMsQ0FBQyxNQUFELENBQVQsRUFBbUIsRUFBRSxNQUFNLFdBQVcsTUFBbkIsRUFBbkIsQ0FBWDs7QUFFQTtBQUNBLE1BQUk7QUFDSCxVQUFPLFNBQVAsQ0FBaUIsVUFBakIsQ0FBNEIsSUFBNUIsRUFBa0MsWUFBbEM7QUFDQSxXQUFRLElBQVI7QUFDQSxHQUhELENBSUEsT0FBTyxDQUFQLEVBQVU7QUFDVCxnQkFBYSxPQUFiLENBQXFCLFdBQXJCLEdBQW1DLENBQUMsUUFBRCxFQUFXLGFBQWEsUUFBeEIsRUFBa0MsYUFBYSxJQUEvQyxFQUFxRCxJQUFyRCxDQUEwRCxHQUExRCxDQUFuQztBQUNBLGdCQUFhLElBQWIsR0FBb0IsT0FBTyxHQUFQLENBQVcsZUFBWCxDQUEyQixJQUEzQixDQUFwQjtBQUNBO0FBQ0Q7O0FBRUQsS0FBSSxDQUFDLEtBQUwsRUFBWTs7QUFFWCxNQUFJOztBQUVILFdBQVEsU0FBUyxXQUFULENBQXFCLGFBQXJCLENBQVI7O0FBRUEsU0FBTSxjQUFOLENBQXFCLE9BQXJCLEVBQThCLElBQTlCLEVBQW9DLEtBQXBDLEVBQTJDLE1BQTNDLEVBQ0ssQ0FETCxFQUNRLENBRFIsRUFDVyxDQURYLEVBQ2MsQ0FEZCxFQUNpQixDQURqQixFQUNvQixLQURwQixFQUMyQixLQUQzQixFQUNrQyxLQURsQyxFQUVLLEtBRkwsRUFFWSxDQUZaLEVBRWUsSUFGZjs7QUFJQSxPQUFJLGFBQWEsYUFBakIsRUFBZ0M7QUFDL0I7QUFDQSxpQkFBYSxhQUFiLENBQTJCLEtBQTNCO0FBQ0EsSUFIRCxNQUlLLElBQUksYUFBYSxTQUFqQixFQUE0QjtBQUNoQztBQUNBLGlCQUFhLFNBQWIsQ0FBdUIsU0FBdkI7QUFDQTtBQUVELEdBakJELENBaUJFLE9BQU8sQ0FBUCxFQUFVO0FBQ1gsT0FBSSxNQUFNLE9BQU8sSUFBUCxFQUFWO0FBQ0E7QUFDQTtBQUNBLE9BQUksUUFBSixDQUFhLEtBQWIsQ0FBbUIsZUFBZSxHQUFmLEdBQXFCLCtFQUF4QztBQUNBLE9BQUksUUFBSixDQUFhLEtBQWI7QUFDQTtBQUNEO0FBQ0Q7O0FBRUQsSUFBSSxlQUFlO0FBQ2xCLFFBQU87QUFDTixTQUFPO0FBREQsRUFEVztBQUlsQixNQUFLO0FBQ0osU0FBTztBQURILEVBSmE7QUFPbEIsT0FBTTtBQUNMLFNBQU87QUFERixFQVBZO0FBVWxCLE9BQU07QUFDTCxTQUFPO0FBREY7QUFWWSxDQUFuQjs7QUFlTyxTQUFTLGNBQVQsQ0FBd0IsS0FBeEIsRUFBK0IsTUFBL0IsRUFBdUMsS0FBdkMsRUFBOEM7QUFDcEQsS0FBSSxPQUFPLFlBQVAsQ0FBb0IsT0FBcEIsTUFBaUMsS0FBckMsRUFBNEM7O0FBRTNDLFNBQU8sWUFBUCxDQUFvQixPQUFwQixFQUE2QixLQUE3QjtBQUNBLFNBQU8sWUFBUCxDQUFvQixNQUFwQixFQUE0QixRQUE1QjtBQUNBLFNBQU8sS0FBUCxDQUFhLFFBQWIsR0FBd0IsVUFBeEI7QUFDQSxTQUFPLEtBQVAsQ0FBYSxNQUFiLEdBQXNCLGlCQUF0QjtBQUNHLFNBQU8sS0FBUCxDQUFhLE9BQWIsR0FBdUIsaUJBQXZCO0FBQ0EsU0FBTyxLQUFQLENBQWEsUUFBYixHQUF3QixNQUF4QjtBQUNILFNBQU8sWUFBUCxDQUFvQixPQUFwQixFQUE2QixNQUFNLFlBQU4sQ0FBbUIsUUFBUSxNQUEzQixDQUE3QjtBQUNHLFNBQU8sU0FBUCxHQUFtQixvQ0FBb0MsYUFBYSxLQUFiLEVBQW9CLEtBQXhELEdBQWdFLFNBQWhFLEdBQTRFLE1BQU0sWUFBTixDQUFtQixRQUFRLE1BQTNCLENBQTVFLEdBQWlILE1BQXBJO0FBQ0g7QUFDRDs7QUFFTSxTQUFTLElBQVQsR0FBZ0I7O0FBRXRCLEtBQUksVUFBVSxJQUFkOztBQUVBLE1BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxVQUFVLE1BQTlCLEVBQXNDLEdBQXRDLEVBQTJDO0FBQzFDLFlBQVUsVUFBVSxDQUFWLENBQVY7QUFDQSxNQUFJLFFBQVEsS0FBWixFQUNDLFFBQVEsS0FBUixDQUFjLE9BQWQsR0FBd0IsUUFBeEI7QUFDRDtBQUNEOztBQUVNLFNBQVMsSUFBVCxHQUFnQjs7QUFFdEIsS0FBSSxVQUFVLElBQWQ7O0FBRUEsTUFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFVBQVUsTUFBOUIsRUFBc0MsR0FBdEMsRUFBMkM7QUFDMUMsWUFBVSxVQUFVLENBQVYsQ0FBVjtBQUNBLE1BQUksV0FBVyxRQUFRLEtBQXZCLEVBQ0MsUUFBUSxLQUFSLENBQWMsT0FBZCxHQUF3QixNQUF4QjtBQUNEO0FBQ0Q7O0FBRU0sSUFBTSxnREFBb0IsQ0FBQyxDQUFDLFNBQVMsYUFBVCxDQUF1QixRQUF2QixFQUFpQyxVQUE3RDs7QUFFQSxTQUFTLGVBQVQsQ0FBeUIsTUFBekIsRUFBaUMsT0FBakMsRUFBMEM7O0FBRWhELEtBQUksZUFBZSxFQUFuQjs7QUFFQSxNQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3Qzs7QUFFdkMsTUFBSSxLQUFLLENBQVQsRUFBWTtBQUNYLGdCQUFhLElBQWIsQ0FBa0IsT0FBTyxDQUFQLENBQWxCO0FBQ0E7QUFDQTs7QUFFRCxNQUFJLEVBQUosRUFBUSxFQUFSLEVBQVksVUFBWjs7QUFFQSxlQUFhLElBQUksQ0FBakI7QUFDQSxPQUFLLGVBQWUsQ0FBZixHQUFtQixDQUFuQixHQUF1QixhQUFhLENBQXpDO0FBQ0EsT0FBSyxlQUFlLE9BQU8sTUFBUCxHQUFnQixDQUEvQixHQUFtQyxVQUFuQyxHQUFnRCxhQUFhLENBQWxFOztBQUVBLE1BQUksT0FBTztBQUNWLE1BQUcsQ0FBQyxPQUFPLEVBQVAsRUFBVyxDQUFYLEdBQWUsT0FBTyxFQUFQLEVBQVcsQ0FBM0IsSUFBZ0MsT0FEekIsRUFDa0MsR0FBRyxDQUFDLE9BQU8sRUFBUCxFQUFXLENBQVgsR0FBZSxPQUFPLEVBQVAsRUFBVyxDQUEzQixJQUFnQztBQURyRSxHQUFYO0FBR0EsTUFBSSxNQUFNO0FBQ1QsTUFBRyxPQUFPLFVBQVAsRUFBbUIsQ0FBbkIsR0FBdUIsS0FBSyxDQUFMLEdBQVMsQ0FEMUIsRUFDNkIsR0FBRyxPQUFPLFVBQVAsRUFBbUIsQ0FBbkIsR0FBdUIsS0FBSyxDQUFMLEdBQVM7QUFEaEUsR0FBVjtBQUdBLGVBQWEsYUFBYSxNQUExQixJQUFvQyxHQUFwQzs7QUFHQSxlQUFhLENBQWI7QUFDQSxPQUFLLGVBQWUsQ0FBZixHQUFtQixDQUFuQixHQUF1QixhQUFhLENBQXpDO0FBQ0EsT0FBSyxlQUFlLE9BQU8sTUFBUCxHQUFnQixDQUEvQixHQUFtQyxVQUFuQyxHQUFnRCxhQUFhLENBQWxFOztBQUVBLE1BQUksT0FBTztBQUNWLE1BQUcsQ0FBQyxPQUFPLEVBQVAsRUFBVyxDQUFYLEdBQWUsT0FBTyxFQUFQLEVBQVcsQ0FBM0IsSUFBZ0MsT0FEekIsRUFDa0MsR0FBRyxDQUFDLE9BQU8sRUFBUCxFQUFXLENBQVgsR0FBZSxPQUFPLEVBQVAsRUFBVyxDQUEzQixJQUFnQztBQURyRSxHQUFYO0FBR0EsTUFBSSxNQUFNO0FBQ1QsTUFBRyxPQUFPLFVBQVAsRUFBbUIsQ0FBbkIsR0FBdUIsS0FBSyxDQUFMLEdBQVMsQ0FEMUIsRUFDNkIsR0FBRyxPQUFPLFVBQVAsRUFBbUIsQ0FBbkIsR0FBdUIsS0FBSyxDQUFMLEdBQVM7QUFEaEUsR0FBVjtBQUdBLGVBQWEsYUFBYSxNQUExQixJQUFvQyxHQUFwQzs7QUFFQSxlQUFhLGFBQWEsTUFBMUIsSUFBb0MsT0FBTyxDQUFQLENBQXBDO0FBQ0E7O0FBRUQsUUFBTyxZQUFQO0FBQ0E7O0FBRU0sU0FBUyxxQkFBVCxDQUErQixLQUEvQixFQUFzQyxjQUF0QyxFQUFzRDtBQUM1RDtBQUNBLEtBQUksVUFBVSxJQUFWLElBQWtCLE9BQVEsS0FBUixLQUFtQixXQUF6QyxFQUNDLE9BQU8sY0FBUDs7QUFFRCxLQUFJLFNBQVMsV0FBVyxNQUFNLFFBQU4sRUFBWCxLQUFnQyxNQUFNLFFBQU4sR0FBaUIsT0FBakIsQ0FBeUIsR0FBekIsS0FBaUMsQ0FBakMsR0FBcUMsaUJBQWlCLEdBQXRELEdBQTRELENBQTVGLENBQWI7O0FBRUE7QUFDQSxLQUFJLENBQUMsTUFBTSxNQUFOLENBQUQsSUFBa0IsVUFBVSxjQUE1QixJQUE4QyxVQUFVLENBQTVELEVBQ0MsT0FBTyxNQUFQOztBQUVELFFBQU8sY0FBUDtBQUNBOztBQUVNLFNBQVMsUUFBVCxDQUFrQixHQUFsQixFQUF1QixFQUF2QixFQUEyQixFQUEzQixFQUErQixFQUEvQixFQUFtQyxFQUFuQyxFQUF1QyxLQUF2QyxFQUE4QyxlQUE5QyxFQUErRCxXQUEvRCxFQUE0RSxHQUE1RSxFQUFpRixNQUFqRixFQUF5RixJQUF6RixFQUErRixLQUEvRixFQUFzRyxXQUF0RyxFQUFtSDtBQUN6SCxLQUFJLE9BQVEsV0FBUixLQUF5QixXQUE3QixFQUNDLGNBQWMsQ0FBZDs7QUFFRCxtQkFBa0IsbUJBQW1CLENBQXJDO0FBQ0EsZUFBYyxlQUFlLE9BQTdCO0FBQ0E7QUFDQSxLQUFJLEtBQUssRUFBVDtBQUFBLEtBQWEsS0FBSyxFQUFsQjtBQUFBLEtBQXNCLEtBQUssRUFBM0I7QUFBQSxLQUErQixLQUFLLEVBQXBDO0FBQUEsS0FBd0MsS0FBeEM7QUFBQSxLQUErQyxLQUEvQztBQUNBLEtBQUksS0FBSyxFQUFMLEdBQVUsRUFBVixJQUFnQixLQUFLLEVBQUwsR0FBVSxFQUE5QixFQUNDLElBQUksYUFBYSxDQUFqQixDQURELEtBR0MsSUFBSSxhQUFhLE9BQU8sS0FBSyxHQUFMLENBQVUsS0FBSyxFQUFmLEVBQXFCLEtBQUssRUFBMUIsQ0FBeEI7QUFDRDtBQUNBLEtBQUksU0FBUyx5QkFBYjtBQUNBLEtBQUksU0FBUywwQkFBYjtBQUNBO0FBQ0EsS0FBSSxTQUFTLEtBQWI7O0FBRUEsS0FBSSxTQUFKO0FBQ0EsS0FBSSxNQUFKLENBQVcsRUFBWCxFQUFlLEVBQWY7QUFDQSxLQUFJLElBQUo7QUFDQSxLQUFJLFNBQUosR0FBZ0IsTUFBaEI7O0FBRUEsS0FBSSxXQUFKLEdBQWtCLFdBQWxCO0FBQ0EsS0FBSSxRQUFKLENBQWEsRUFBYixFQUFpQixFQUFqQixFQUFxQixLQUFLLEVBQTFCLEVBQThCLEtBQUssRUFBbkM7QUFDQSxLQUFJLFdBQUosR0FBa0IsQ0FBbEI7O0FBRUEsS0FBSSxrQkFBa0IsQ0FBdEIsRUFBeUI7QUFDeEIsTUFBSSxTQUFTLGtCQUFrQixDQUFsQixLQUF3QixDQUF4QixHQUE0QixDQUE1QixHQUFnQyxFQUE3QztBQUNBLE1BQUksU0FBSjtBQUNBLE1BQUksU0FBSixHQUFnQixlQUFoQjtBQUNBLE1BQUksV0FBSixHQUFrQixXQUFsQjtBQUNBLE1BQUksTUFBSixDQUFXLEVBQVgsRUFBZSxFQUFmO0FBQ0EsTUFBSSxJQUFKLENBQVMsS0FBSyxNQUFkLEVBQXNCLEtBQUssTUFBM0IsRUFBbUMsS0FBSyxFQUFMLEdBQVUsSUFBSSxNQUFqRCxFQUF5RCxLQUFLLEVBQUwsR0FBVSxJQUFJLE1BQXZFO0FBQ0EsTUFBSSxNQUFKO0FBQ0E7O0FBRUQsS0FBSSxPQUFKO0FBQ0E7QUFDQSxLQUFJLFFBQVEsSUFBWixFQUFrQjtBQUNqQjtBQUNBLE1BQUksSUFBSjtBQUNBLE1BQUksU0FBSjtBQUNBLE1BQUksTUFBSixDQUFXLEVBQVgsRUFBZSxFQUFmO0FBQ0EsTUFBSSxNQUFKLENBQVcsS0FBSyxVQUFoQixFQUE0QixLQUFLLFVBQWpDO0FBQ0EsTUFBSSxNQUFKLENBQVcsS0FBSyxVQUFoQixFQUE0QixLQUFLLFVBQWpDO0FBQ0EsTUFBSSxNQUFKLENBQVcsRUFBWCxFQUFlLEVBQWY7QUFDQSxNQUFJLFNBQUo7QUFDQSxNQUFJLE1BQU0sSUFBSSxvQkFBSixDQUF5QixDQUFDLEtBQUssRUFBTixJQUFZLENBQXJDLEVBQXdDLEtBQUssVUFBN0MsRUFBeUQsQ0FBQyxLQUFLLEVBQU4sSUFBWSxDQUFyRSxFQUF3RSxFQUF4RSxDQUFWO0FBQ0EsTUFBSSxZQUFKLENBQWlCLENBQWpCLEVBQW9CLE1BQXBCO0FBQ0EsTUFBSSxZQUFKLENBQWlCLENBQWpCLEVBQW9CLE1BQXBCO0FBQ0EsTUFBSSxTQUFKLEdBQWdCLEdBQWhCO0FBQ0EsTUFBSSxJQUFKO0FBQ0E7QUFDQSxNQUFJLE9BQUo7QUFDQTs7QUFHRCxLQUFJLFdBQVcsSUFBZixFQUFxQjtBQUNwQixNQUFJLElBQUo7QUFDQSxNQUFJLFNBQUo7QUFDQSxNQUFJLE1BQUosQ0FBVyxFQUFYLEVBQWUsRUFBZjtBQUNBLE1BQUksTUFBSixDQUFXLEtBQUssVUFBaEIsRUFBNEIsS0FBSyxVQUFqQztBQUNBLE1BQUksTUFBSixDQUFXLEtBQUssVUFBaEIsRUFBNEIsS0FBSyxVQUFqQztBQUNBLE1BQUksTUFBSixDQUFXLEVBQVgsRUFBZSxFQUFmO0FBQ0EsTUFBSSxTQUFKO0FBQ0EsTUFBSSxNQUFNLElBQUksb0JBQUosQ0FBeUIsQ0FBQyxLQUFLLEVBQU4sSUFBWSxDQUFyQyxFQUF3QyxLQUFLLFVBQTdDLEVBQXlELENBQUMsS0FBSyxFQUFOLElBQVksQ0FBckUsRUFBd0UsRUFBeEUsQ0FBVjtBQUNBLE1BQUksWUFBSixDQUFpQixDQUFqQixFQUFvQixNQUFwQjtBQUNBLE1BQUksWUFBSixDQUFpQixDQUFqQixFQUFvQixNQUFwQjtBQUNBLE1BQUksU0FBSixHQUFnQixHQUFoQjtBQUNBO0FBQ0EsTUFBSSxJQUFKO0FBQ0EsTUFBSSxPQUFKO0FBQ0E7O0FBRUQsS0FBSSxTQUFTLElBQWIsRUFBbUI7QUFDbEI7QUFDQSxNQUFJLElBQUo7QUFDQSxNQUFJLFNBQUo7QUFDQSxNQUFJLE1BQUosQ0FBVyxFQUFYLEVBQWUsRUFBZjtBQUNBLE1BQUksTUFBSixDQUFXLEtBQUssVUFBaEIsRUFBNEIsS0FBSyxVQUFqQztBQUNBLE1BQUksTUFBSixDQUFXLEtBQUssVUFBaEIsRUFBNEIsS0FBSyxVQUFqQztBQUNBLE1BQUksTUFBSixDQUFXLEVBQVgsRUFBZSxFQUFmO0FBQ0EsTUFBSSxTQUFKO0FBQ0EsTUFBSSxNQUFNLElBQUksb0JBQUosQ0FBeUIsS0FBSyxVQUE5QixFQUEwQyxDQUFDLEtBQUssRUFBTixJQUFZLENBQXRELEVBQXlELEVBQXpELEVBQTZELENBQUMsS0FBSyxFQUFOLElBQVksQ0FBekUsQ0FBVjtBQUNBLE1BQUksWUFBSixDQUFpQixDQUFqQixFQUFvQixNQUFwQjtBQUNBLE1BQUksWUFBSixDQUFpQixDQUFqQixFQUFvQixNQUFwQjtBQUNBLE1BQUksU0FBSixHQUFnQixHQUFoQjtBQUNBLE1BQUksSUFBSjtBQUNBO0FBQ0EsTUFBSSxPQUFKO0FBQ0E7O0FBR0QsS0FBSSxVQUFVLElBQWQsRUFBb0I7QUFDbkIsTUFBSSxJQUFKO0FBQ0EsTUFBSSxTQUFKO0FBQ0EsTUFBSSxNQUFKLENBQVcsRUFBWCxFQUFlLEVBQWY7QUFDQSxNQUFJLE1BQUosQ0FBVyxLQUFLLFVBQWhCLEVBQTRCLEtBQUssVUFBakM7QUFDQSxNQUFJLE1BQUosQ0FBVyxLQUFLLFVBQWhCLEVBQTRCLEtBQUssVUFBakM7QUFDQSxNQUFJLE1BQUosQ0FBVyxFQUFYLEVBQWUsRUFBZjtBQUNBLE1BQUksTUFBTSxJQUFJLG9CQUFKLENBQXlCLEtBQUssVUFBOUIsRUFBMEMsQ0FBQyxLQUFLLEVBQU4sSUFBWSxDQUF0RCxFQUF5RCxFQUF6RCxFQUE2RCxDQUFDLEtBQUssRUFBTixJQUFZLENBQXpFLENBQVY7QUFDQSxNQUFJLFlBQUosQ0FBaUIsQ0FBakIsRUFBb0IsTUFBcEI7QUFDQSxNQUFJLFlBQUosQ0FBaUIsQ0FBakIsRUFBb0IsTUFBcEI7QUFDQSxNQUFJLFNBQUosR0FBZ0IsR0FBaEI7QUFDQSxNQUFJLFlBQUosQ0FBaUIsQ0FBakIsRUFBb0IsTUFBcEI7QUFDQSxNQUFJLFlBQUosQ0FBaUIsQ0FBakIsRUFBb0IsTUFBcEI7QUFDQSxNQUFJLFNBQUosR0FBZ0IsR0FBaEI7QUFDQSxNQUFJLElBQUo7QUFDQSxNQUFJLFNBQUo7QUFDQTtBQUNBLE1BQUksT0FBSjtBQUNBO0FBQ0Q7QUFFQTs7QUFFTSxTQUFTLFdBQVQsQ0FBcUIsR0FBckIsRUFBMEIsTUFBMUIsRUFBa0MsTUFBbEMsRUFBMEMsS0FBMUMsRUFBaUQsSUFBakQsRUFBdUQsTUFBdkQsRUFBK0QsTUFBL0QsRUFBdUUsV0FBdkUsRUFBb0Ysa0JBQXBGLEVBQXdHOztBQUU5RyxLQUFJLE9BQVEsV0FBUixLQUF5QixXQUE3QixFQUNDLGNBQWMsQ0FBZDs7QUFFRDtBQUNBLEtBQUksQ0FBQyxpQkFBTCxFQUF3QjtBQUN2QixNQUFJLFlBQVksT0FBTyxDQUFDLFVBQVUsSUFBSSxLQUFLLEVBQW5CLENBQUQsRUFBeUIsT0FBekIsQ0FBaUMsQ0FBakMsQ0FBUCxDQUFoQjtBQUNBLE1BQUksWUFBWSxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUssRUFBbkIsQ0FBRCxFQUF5QixPQUF6QixDQUFpQyxDQUFqQyxDQUFQLENBQWhCO0FBQ0EsTUFBSSxjQUFjLFNBQWxCLEVBQ0MsVUFBVSxLQUFWO0FBQ0Q7O0FBRUQsS0FBSSxJQUFKO0FBQ0EsS0FBSSxXQUFKLEdBQWtCLFdBQWxCOztBQUVBLEtBQUksU0FBUyxLQUFiLEVBQW9CO0FBQ25CLE1BQUksU0FBSjtBQUNBLE1BQUksTUFBSixDQUFXLE9BQU8sQ0FBbEIsRUFBcUIsT0FBTyxDQUE1QjtBQUNBLE1BQUksR0FBSixDQUFRLE9BQU8sQ0FBZixFQUFrQixPQUFPLENBQXpCLEVBQTRCLE1BQTVCLEVBQW9DLE1BQXBDLEVBQTRDLE1BQTVDLEVBQW9ELEtBQXBEO0FBQ0EsTUFBSSxTQUFKLEdBQWdCLEtBQWhCO0FBQ0EsTUFBSSxXQUFKLEdBQWtCLE9BQWxCO0FBQ0EsTUFBSSxTQUFKLEdBQWdCLENBQWhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFJLFNBQUo7QUFDQTtBQUNBLE1BQUksSUFBSjtBQUNBLEVBZEQsTUFlSyxJQUFJLFNBQVMsVUFBYixFQUF5QjtBQUM3QixNQUFJLFNBQUo7QUFDQSxNQUFJLEdBQUosQ0FBUSxPQUFPLENBQWYsRUFBa0IsT0FBTyxDQUF6QixFQUE0QixNQUE1QixFQUFvQyxNQUFwQyxFQUE0QyxNQUE1QyxFQUFvRCxLQUFwRDtBQUNBLE1BQUksR0FBSixDQUFRLE9BQU8sQ0FBZixFQUFrQixPQUFPLENBQXpCLEVBQTRCLHFCQUFxQixNQUFqRCxFQUF5RCxNQUF6RCxFQUFpRSxNQUFqRSxFQUF5RSxJQUF6RTtBQUNBLE1BQUksU0FBSjtBQUNBLE1BQUksU0FBSixHQUFnQixLQUFoQjtBQUNBLE1BQUksV0FBSixHQUFrQixPQUFsQjtBQUNBLE1BQUksU0FBSixHQUFnQixDQUFoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUksSUFBSjtBQUNBOztBQUVELEtBQUksV0FBSixHQUFrQixDQUFsQjs7QUFFQSxLQUFJLE9BQUo7QUFDQTs7Ozs7Ozs7O1FDM2tDZSxLLEdBQUEsSzs7QUFOaEI7Ozs7QUFDQTs7OztBQUNBOztBQUNBOztBQUNBOzs7O0FBRU8sU0FBUyxLQUFULENBQWUsV0FBZixFQUE0QixPQUE1QixFQUFxQztBQUFBOztBQUUxQyxRQUFNLFNBQVMscUJBQVcsV0FBWCxFQUF3QixPQUF4QixFQUFpQyxJQUFqQyxDQUFmOztBQUVBLFNBQUssTUFBTCxHQUFjO0FBQUEsZUFBTyxPQUFPLE1BQVAsQ0FBYyxNQUFLLE9BQW5CLENBQVA7QUFBQSxLQUFkOztBQUVBLFNBQUssT0FBTCxHQUFlLE9BQU8sUUFBdEI7QUFDRCxDLENBM0JEOzs7Ozs7Ozs7Ozs7OztBQTJCQzs7QUFHTSxJQUFNLG9DQUFjLFNBQWQsV0FBYyxDQUFDLElBQUQsRUFBTyxRQUFQLEVBQW9COztBQUUzQyxzQkFBVSxJQUFWLElBQWtCLFFBQWxCO0FBRUgsQ0FKTTs7QUFNQSxJQUFNLDBDQUFpQixTQUFqQixjQUFpQixDQUFDLElBQUQsRUFBTyxXQUFQLEVBQXVCOztBQUVqRCxzQkFBUyxJQUFULElBQWlCLFdBQWpCO0FBRUgsQ0FKTTs7QUFNQSxJQUFNLHNDQUFlLFNBQWYsWUFBZSxDQUFDLE1BQUQsRUFBUyxZQUFULEVBQXVCLE9BQXZCLEVBQW1DOztBQUUzRCxjQUFVLFdBQVcsSUFBckI7QUFDQSxtQkFBZSxnQkFBZ0IsVUFBL0I7O0FBRUEsUUFBSSxDQUFDLGtCQUFTLE9BQVQsQ0FBTCxFQUF1QixNQUFNLHNCQUFOLENBQXZCLEtBQ0sseUJBQWEsTUFBYixFQUFxQixZQUFyQixFQUFtQywyQkFBZ0IsT0FBaEIsQ0FBbkM7QUFFUixDQVJNOztBQVVBLElBQU0sa0NBQWEsU0FBYixVQUFhLENBQUMsSUFBRCxFQUFPLFlBQVAsRUFBcUIsT0FBckIsRUFBaUM7O0FBRXZELGNBQVUsV0FBVyxJQUFyQjtBQUNBLG1CQUFlLGdCQUFnQixhQUEvQjs7QUFFQSxRQUFJLENBQUMsa0JBQVMsT0FBVCxDQUFMLEVBQXVCLE1BQU0sc0JBQU4sQ0FBdkIsS0FDSyx1QkFBVyxJQUFYLEVBQWlCLFlBQWpCLEVBQStCLDJCQUFnQixPQUFoQixDQUEvQjtBQUVSLENBUk07O0FBVVAsTUFBTSxPQUFOLEdBQWdCLFFBQWhCIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuaW1wb3J0IFJlbmRlckhlbHBlciBmcm9tICcuLi9oZWxwZXJzL3JlbmRlcic7XG5pbXBvcnQgQW5pbWF0aW9uSGVscGVyIGZyb20gJy4uL2hlbHBlcnMvYW5pbWF0b3InO1xuaW1wb3J0IHtpc0NhbnZhc1N1cHBvcnRlZCwgZ2V0TGluZURhc2hBcnJheSwgaW50VG9IZXhDb2xvclN0cmluZ30gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXHR2YXIgY3R4ID0gcGxvdFVuaXQudGFyZ2V0Q2FudmFzQ3R4IHx8IHRoaXMucGxvdEFyZWEuY3R4O1xuXG5cdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgZ2hvc3RDdHggPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHg7XG5cblx0dmFyIGF4aXNYUHJvcHMgPSBwbG90VW5pdC5heGlzWC5saW5lQ29vcmRpbmF0ZXM7XG5cdHZhciBheGlzWVByb3BzID0gcGxvdFVuaXQuYXhpc1kubGluZUNvb3JkaW5hdGVzO1xuXHR2YXIgbWFya2VycyA9IFtdO1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cdGN0eC5zYXZlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdGdob3N0Q3R4LnNhdmUoKTtcblxuXHRjdHguYmVnaW5QYXRoKCk7XG5cdGN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdGN0eC5jbGlwKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0Z2hvc3RDdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRcdGdob3N0Q3R4LmNsaXAoKTtcblx0fVxuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblxuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cblx0XHR2YXIgZGF0YVBvaW50cyA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cztcblxuXHRcdHZhciBzZXJpZXNJZCA9IGRhdGFTZXJpZXMuaWQ7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtzZXJpZXNJZF0gPSB7XG5cdFx0XHRvYmplY3RUeXBlOiBcImRhdGFTZXJpZXNcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXhcblx0XHR9O1xuXG5cdFx0dmFyIGhleENvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhzZXJpZXNJZCk7XG5cdFx0Z2hvc3RDdHguZmlsbFN0eWxlID0gaGV4Q29sb3I7XG5cdFx0Ly9naG9zdEN0eC5saW5lV2lkdGggPSBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3M7XG5cdFx0Ly9naG9zdEN0eC5saW5lV2lkdGggPSAyMDtcblxuXHRcdG1hcmtlcnMgPSBbXTtcblxuXHRcdHZhciBpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IHRydWU7XG5cdFx0dmFyIGkgPSAwLCB4LCB5O1xuXHRcdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgYmFjayBhbmQgZm9ydGguXG5cblx0XHR2YXIgeVplcm9Ub1BpeGVsID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICgwIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHR2YXIgYmFzZVk7XG5cblx0XHR2YXIgc3RhcnRQb2ludCA9IG51bGw7XG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL2N0eC5zdHJva2VTdHlsZSA9IFwiIzQ1NzJBNyBcIjtcblx0XHRcdHZhciBjb2xvciA9IGRhdGFTZXJpZXMuX2NvbG9yU2V0W2kgJSBkYXRhU2VyaWVzLl9jb2xvclNldC5sZW5ndGhdO1xuXHRcdFx0Ly9jdHguc3Ryb2tlU3R5bGUgPSBcInJlZFwiO1xuXHRcdFx0Y3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuXHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gY29sb3I7XG5cdFx0XHRjdHgubGluZVdpZHRoID0gZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzO1xuXG5cdFx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XG5cdFx0XHRcdGN0eC5zZXRMaW5lRGFzaChnZXRMaW5lRGFzaEFycmF5KGRhdGFTZXJpZXMubGluZURhc2hUeXBlLCBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MpKTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHByZXZEYXRhTnVsbCA9IHRydWU7XG5cdFx0XHRmb3IgKDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54LmdldFRpbWUgPyBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZW9mIChkYXRhUG9pbnRzW2ldLnkpICE9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdFx0Y2xvc2VBcmVhKCk7XG5cblx0XHRcdFx0XHRwcmV2RGF0YU51bGwgPSB0cnVlO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0eCA9IChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50WCAtIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHkgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cblx0XHRcdFx0aWYgKGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhIHx8IHByZXZEYXRhTnVsbCkge1xuXHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRjdHgubW92ZVRvKHgsIHkpO1xuXHRcdFx0XHRcdHN0YXJ0UG9pbnQgPSB7XG5cdFx0XHRcdFx0XHR4OiB4LCB5OiB5XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oeCwgeSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSBmYWxzZTtcblx0XHRcdFx0XHRwcmV2RGF0YU51bGwgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblxuXHRcdFx0XHRcdGN0eC5saW5lVG8oeCwgeSk7XG5cblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5saW5lVG8oeCwgeSk7XG5cblx0XHRcdFx0XHRpZiAoaSAlIDI1MCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRjbG9zZUFyZWEoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXG5cdFx0XHRcdHZhciBpZCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2ldO1xuXHRcdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSA9IHtcblx0XHRcdFx0XHRpZDogaWQsIG9iamVjdFR5cGU6IFwiZGF0YVBvaW50XCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleDogaSwgeDE6IHgsIHkxOiB5XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly9SZW5kZXIgTWFya2VyXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLm1hcmtlclNpemUgIT09IDApIHtcblx0XHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5tYXJrZXJTaXplID4gMCB8fCBkYXRhU2VyaWVzLm1hcmtlclNpemUgPiAwKSB7XG5cdFx0XHRcdFx0XHR2YXIgbWFya2VyUHJvcHMgPSBkYXRhU2VyaWVzLmdldE1hcmtlclByb3BlcnRpZXMoaSwgeCwgeSwgY3R4KTtcblx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaChtYXJrZXJQcm9wcyk7XG5cblx0XHRcdFx0XHRcdC8vaWYgKCFkYXRhU2VyaWVzLm1heFdpZHRoSW5YIHx8IG1hcmtlclByb3BzLnNpemUgPiBkYXRhU2VyaWVzLm1heFdpZHRoSW5YKSB7XG5cdFx0XHRcdFx0XHQvL1x0ZGF0YVNlcmllcy5tYXhXaWR0aEluWCA9IG1hcmtlclByb3BzLnNpemUgLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXHRcdFx0XHRcdFx0Ly99XG5cblx0XHRcdFx0XHRcdHZhciBtYXJrZXJDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdFx0bWFya2Vycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHR4OiB4LCB5OiB5LCBjdHg6IGdob3N0Q3R4LFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IG1hcmtlclByb3BzLnR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0c2l6ZTogbWFya2VyUHJvcHMuc2l6ZSxcblx0XHRcdFx0XHRcdFx0XHRjb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQ29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclRoaWNrbmVzczogbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpIHtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcImFyZWFcIixcblx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50c1tpXSxcblx0XHRcdFx0XHRcdGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsXG5cdFx0XHRcdFx0XHRwb2ludDoge1xuXHRcdFx0XHRcdFx0XHR4OiB4LCB5OiB5XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkYXRhUG9pbnRzW2ldLnkgPj0gMCA/IDEgOiAtMSxcblx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y2xvc2VBcmVhKCk7XG5cblx0XHRcdC8vc3RhcnRQb2ludCA9IHsgeDogeCwgeTogeSB9O1xuXHRcdFx0UmVuZGVySGVscGVyLmRyYXdNYXJrZXJzKG1hcmtlcnMpO1xuXHRcdH1cblx0fVxuXG5cdGN0eC5yZXN0b3JlKCk7XG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVzdG9yZSgpO1xuXG5cdGZ1bmN0aW9uIGNsb3NlQXJlYSgpIHtcblxuXHRcdGlmICghc3RhcnRQb2ludClcblx0XHRcdHJldHVybjtcblxuXHRcdGlmIChkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MgPiAwKVxuXHRcdFx0Y3R4LnN0cm9rZSgpO1xuXG5cdFx0aWYgKHBsb3RVbml0LmF4aXNZLnZpZXdwb3J0TWluaW11bSA8PSAwICYmIHBsb3RVbml0LmF4aXNZLnZpZXdwb3J0TWF4aW11bSA+PSAwKSB7XG5cdFx0XHRiYXNlWSA9IHlaZXJvVG9QaXhlbDtcblx0XHR9XG5cdFx0ZWxzZSBpZiAocGxvdFVuaXQuYXhpc1kudmlld3BvcnRNYXhpbXVtIDwgMClcblx0XHRcdGJhc2VZID0gYXhpc1lQcm9wcy55MTtcblx0XHRlbHNlIGlmIChwbG90VW5pdC5heGlzWS52aWV3cG9ydE1pbmltdW0gPiAwKVxuXHRcdFx0YmFzZVkgPSBheGlzWFByb3BzLnkyO1xuXG5cdFx0Y3R4LmxpbmVUbyh4LCBiYXNlWSk7XG5cdFx0Y3R4LmxpbmVUbyhzdGFydFBvaW50LngsIGJhc2VZKTtcblx0XHRjdHguY2xvc2VQYXRoKCk7XG5cblx0XHRjdHguZ2xvYmFsQWxwaGEgPSBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5O1xuXHRcdGN0eC5maWxsKCk7XG5cdFx0Y3R4Lmdsb2JhbEFscGhhID0gMTtcblxuXHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0Z2hvc3RDdHgubGluZVRvKHgsIGJhc2VZKTtcblx0XHRcdGdob3N0Q3R4LmxpbmVUbyhzdGFydFBvaW50LngsIGJhc2VZKTtcblx0XHRcdGdob3N0Q3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0Z2hvc3RDdHguZmlsbCgpO1xuXHRcdH1cblxuXHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRjdHgubW92ZVRvKHgsIHkpO1xuXHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdGdob3N0Q3R4Lm1vdmVUbyh4LCB5KTtcblxuXHRcdHN0YXJ0UG9pbnQgPSB7XG5cdFx0XHR4OiB4LCB5OiB5XG5cdFx0fTtcblx0fVxuXG5cdC8vc291cmNlIGFuZCBkZXN0IHdvdWxkIGJlIHNhbWUgd2hlbiBhbmltYXRpb24gaXMgbm90IGVuYWJsZWRcblx0dmFyIGFuaW1hdGlvbkluZm8gPSB7XG5cdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLnhDbGlwQW5pbWF0aW9uLCBlYXNpbmdGdW5jdGlvbjogQW5pbWF0aW9uSGVscGVyLmVhc2luZy5saW5lYXIsIGFuaW1hdGlvbkJhc2U6IDBcblx0fTtcblx0cmV0dXJuIGFuaW1hdGlvbkluZm87XG59XG4iLCJcbmltcG9ydCBBbmltYXRpb25IZWxwZXIgZnJvbSAnLi4vaGVscGVycy9hbmltYXRvcic7XG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkLCBkcmF3UmVjdCwgaW50VG9IZXhDb2xvclN0cmluZ30gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXHR2YXIgY3R4ID0gcGxvdFVuaXQudGFyZ2V0Q2FudmFzQ3R4IHx8IHRoaXMucGxvdEFyZWEuY3R4O1xuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGNvbG9yID0gbnVsbDtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdHZhciBpID0gMCwgeCwgeTtcblx0dmFyIGRhdGFQb2ludFg7IC8vVXNlZCBzbyB0aGF0IHdoZW4gZGF0YVBvaW50LnggaXMgYSBEYXRlVGltZSB2YWx1ZSwgaXQgZG9lc24ndCBnZXQgY29udmVydGVkIHRvIG51bWJlciBmcm9tIGRhdGFUaW1lIGV2ZXJ5dGltZSBpdCBpcyB1c2VkLlxuXG5cdC8vSW4gY2FzZSBvZiBCYXIgQ2hhcnQsIHlaZXJvVG9QaXhlbCBpcyB4IGNvLW9yZGluYXRlIVxuXHR2YXIgeVplcm9Ub1BpeGVsID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICgwIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkpIDw8IDA7XG5cblx0dmFyIG1heEJhcldpZHRoID0gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA/IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggOiBNYXRoLm1pbigodGhpcy5oZWlnaHQgKiAuMTUpLCB0aGlzLnBsb3RBcmVhLmhlaWdodCAvIHBsb3RVbml0LnBsb3RUeXBlLnRvdGFsRGF0YVNlcmllcyAqIC45KSA8PCAwO1xuXHR2YXIgeE1pbkRpZmYgPSBwbG90VW5pdC5heGlzWC5kYXRhSW5mby5taW5EaWZmO1xuXHQvL3ZhciBiYXJXaWR0aCA9ICgoKHBsb3RBcmVhLmhlaWdodCAvIE1hdGguYWJzKHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWF4aW11bSAtIHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkpICogTWF0aC5hYnMoeE1pbkRpZmYpKSAvIHRvdGFsRGF0YVNlcmllcyAqIC45KSA8PCAwO1xuXG5cdHZhciBiYXJXaWR0aCA9ICgoKHBsb3RBcmVhLmhlaWdodCAvIE1hdGguYWJzKHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWF4aW11bSAtIHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkpICogTWF0aC5hYnMoeE1pbkRpZmYpKSAvIHBsb3RVbml0LnBsb3RUeXBlLnRvdGFsRGF0YVNlcmllcyAqIC45KSA8PCAwO1xuXG5cdGlmIChiYXJXaWR0aCA+IG1heEJhcldpZHRoKVxuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cdGVsc2UgaWYgKHhNaW5EaWZmID09PSBJbmZpbml0eSkge1xuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGggLyBwbG90VW5pdC5wbG90VHlwZS50b3RhbERhdGFTZXJpZXMgKiAuOTtcblx0fSBlbHNlIGlmIChiYXJXaWR0aCA8IDEpXG5cdFx0YmFyV2lkdGggPSAxO1xuXG5cdGN0eC5zYXZlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5zYXZlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LmNsaXAoKTtcblx0fVxuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblxuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblxuXG5cdFx0Ly9kYXRhU2VyaWVzLm1heFdpZHRoSW5YID0gYmFyV2lkdGggLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL3ZhciB4eSA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uUGxvdEFyZWEoZGF0YVBvaW50c1swXS54LCBkYXRhUG9pbnRzWzBdLnkpO1xuXG5cdFx0XHR2YXIgYmV2ZWxFbmFibGVkID0gKGJhcldpZHRoID4gNSkgJiYgZGF0YVNlcmllcy5iZXZlbEVuYWJsZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IFwiIzQ1NzJBNyBcIjtcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRzW2ldLmdldFRpbWUgPyBkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKSA6IGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLng7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1pbiB8fCBkYXRhUG9pbnRYID4gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNYXgpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgKGRhdGFQb2ludHNbaV0ueSkgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0Ly94IGFuZCB5IGFyZSBwaXhlbCBjby1vcmRpbmF0ZXMgb2YgcG9pbnQgYW5kIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aCBYIGFuZCBZIHZhbHVlc1xuXHRcdFx0XHR5ID0gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRYIC0gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0eCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55IC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblxuXG5cdFx0XHRcdHZhciB5MSA9ICh5IC0gKHBsb3RVbml0LnBsb3RUeXBlLnRvdGFsRGF0YVNlcmllcyAqIGJhcldpZHRoIC8gMikgKyAoKHBsb3RVbml0LnByZXZpb3VzRGF0YVNlcmllc0NvdW50ICsgaikgKiBiYXJXaWR0aCkpIDw8IDA7XG5cdFx0XHRcdHZhciB5MiA9IHkxICsgYmFyV2lkdGggPDwgMDtcblx0XHRcdFx0dmFyIHgxO1xuXHRcdFx0XHR2YXIgeDI7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ueSA+PSAwKSB7XG5cdFx0XHRcdFx0eDEgPSB5WmVyb1RvUGl4ZWw7XG5cdFx0XHRcdFx0eDIgPSB4O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHgxID0geDtcblx0XHRcdFx0XHR4MiA9IHlaZXJvVG9QaXhlbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vZHJhd1JlY3QoY3R4LCB4MSwgeTEsIHBsb3RBcmVhLngyLCB5MiwgXCIjRUVFRUVFXCIsIDAsIG51bGwsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0Ly9kcmF3UmVjdChjdHgsIHgxLCB5MSwgcGxvdEFyZWEueDIsIHkyLCBcIiNCRENFRDNcIiwgMCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG5cdFx0XHRcdGNvbG9yID0gZGF0YVBvaW50c1tpXS5jb2xvciA/IGRhdGFQb2ludHNbaV0uY29sb3IgOiBkYXRhU2VyaWVzLl9jb2xvclNldFtpICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcblx0XHRcdFx0Ly9jb2xvciA9IFwiIzFCNDk2MlwiO1xuXHRcdFx0XHRkcmF3UmVjdChjdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgYmV2ZWxFbmFibGVkLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5KTtcblxuXG5cdFx0XHRcdHZhciBpZCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2ldO1xuXHRcdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSA9IHtcblx0XHRcdFx0XHRpZDogaWQsIG9iamVjdFR5cGU6IFwiZGF0YVBvaW50XCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleDogaSwgeDE6IHgxLCB5MTogeTEsIHgyOiB4MiwgeTI6IHkyXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cblx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdGRyYXdSZWN0KHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eCwgeDEsIHkxLCB4MiwgeTIsIGNvbG9yLCAwLCBudWxsLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbCB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWwgfHwgZGF0YVBvaW50c1tpXS5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcilcblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJiYXJcIixcblx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50c1tpXSxcblx0XHRcdFx0XHRcdGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsXG5cdFx0XHRcdFx0XHRwb2ludDoge1xuXHRcdFx0XHRcdFx0XHR4OiBkYXRhUG9pbnRzW2ldLnkgPj0gMCA/IHgyIDogeDEsIHk6IHkxICsgKHkyIC0geTEpIC8gMlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55ID49IDAgPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRib3VuZHM6IHtcblx0XHRcdFx0XHRcdFx0eDE6IE1hdGgubWluKHgxLCB4MiksIHkxOiB5MSwgeDI6IE1hdGgubWF4KHgxLCB4MiksIHkyOiB5MlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGN0eC5yZXN0b3JlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZXN0b3JlKCk7XG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uQmFzZSA9IE1hdGgubWF4KHlaZXJvVG9QaXhlbCwgcGxvdFVuaXQuYXhpc1guYm91bmRpbmdSZWN0LngyKTtcblx0dmFyIGFuaW1hdGlvbkluZm8gPSB7XG5cdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLnhTY2FsZUFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcuZWFzZU91dFF1YXJ0LCBhbmltYXRpb25CYXNlOiBhbmltYXRpb25CYXNlXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuIiwiXG5pbXBvcnQgUmVuZGVySGVscGVyIGZyb20gJy4uL2hlbHBlcnMvcmVuZGVyJztcbmltcG9ydCBBbmltYXRpb25IZWxwZXIgZnJvbSAnLi4vaGVscGVycy9hbmltYXRvcic7XG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkLCBpbnRUb0hleENvbG9yU3RyaW5nfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblxuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGNvbG9yID0gbnVsbDtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdHZhciBpID0gMCwgeCwgeTtcblx0dmFyIGRhdGFQb2ludFg7IC8vVXNlZCBzbyB0aGF0IHdoZW4gZGF0YVBvaW50LnggaXMgYSBEYXRlVGltZSB2YWx1ZSwgaXQgZG9lc24ndCBnZXQgY29udmVydGVkIHRvIG51bWJlciBmcm9tIGRhdGFUaW1lIGV2ZXJ5dGltZSBpdCBpcyB1c2VkLlxuXG5cdHZhciB5WmVyb1RvUGl4ZWwgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKDAgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSkgPDwgMDtcblxuXHR2YXIgbWF4QmFyV2lkdGggPSB0aGlzLmRhdGFQb2ludE1heFdpZHRoID8gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA6IHRoaXMud2lkdGggKiAuMTUgPDwgMDtcblx0dmFyIHhNaW5EaWZmID0gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8ubWluRGlmZjtcblx0dmFyIGJhcldpZHRoID0gKCgocGxvdEFyZWEud2lkdGggLyBNYXRoLmFicyhwbG90VW5pdC5heGlzWC52aWV3cG9ydE1heGltdW0gLSBwbG90VW5pdC5heGlzWC52aWV3cG9ydE1pbmltdW0pKSAqIE1hdGguYWJzKHhNaW5EaWZmKSkgLyB0b3RhbERhdGFTZXJpZXMgKiAuOSkgPDwgMDtcblxuXG5cdGN0eC5zYXZlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5zYXZlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LmNsaXAoKTtcblx0fVxuXG5cdHZhciBtYXhaID0gLUluZmluaXR5O1xuXHR2YXIgbWluWiA9IEluZmluaXR5O1xuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXHRcdHZhciB6ID0gMDtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS5nZXRUaW1lID8gZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heCkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHR5cGVvZiAoZGF0YVBvaW50c1tpXS56KSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXG5cdFx0XHRcdHogPSBkYXRhUG9pbnRzW2ldLno7XG5cblx0XHRcdFx0aWYgKHogPiBtYXhaKVxuXHRcdFx0XHRcdG1heFogPSB6O1xuXG5cdFx0XHRcdGlmICh6IDwgbWluWilcblx0XHRcdFx0XHRtaW5aID0gejtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgbWluQXJlYSA9IE1hdGguUEkgKiA1ICogNTtcblx0dmFyIG1heEFyZWEgPSBNYXRoLm1heChNYXRoLnBvdyhNYXRoLm1pbihwbG90QXJlYS5oZWlnaHQsIHBsb3RBcmVhLndpZHRoKSAqIC4yNSAvIDIsIDIpICogTWF0aC5QSSwgbWluQXJlYSk7XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXG5cdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblx0XHR2YXIgZGF0YVBvaW50cyA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cztcblx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXG5cdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID09IDEpXG5cdFx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoO1xuXG5cdFx0aWYgKGJhcldpZHRoIDwgMSlcblx0XHRcdGJhcldpZHRoID0gMTtcblx0XHRlbHNlIGlmIChiYXJXaWR0aCA+IG1heEJhcldpZHRoKVxuXHRcdFx0YmFyV2lkdGggPSBtYXhCYXJXaWR0aDtcblxuXHRcdGlmIChkYXRhUG9pbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vdmFyIHh5ID0gdGhpcy5nZXRQaXhlbENvb3JkaW5hdGVzT25QbG90QXJlYShkYXRhUG9pbnRzWzBdLngsIGRhdGFQb2ludHNbMF0ueSk7XG5cdFx0XHQvL3ZhciBiZXZlbEVuYWJsZWQgPSAoYmFyV2lkdGggPiA1KSA/IGZhbHNlIDogZmFsc2U7XG5cblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IFwiIzQ1NzJBNyBcIjtcblxuXG5cblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLmdldFRpbWUgPyBkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKSA6IGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLng7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1pbiB8fCBkYXRhUG9pbnRYID4gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNYXgpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgKGRhdGFQb2ludHNbaV0ueSkgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0eCA9IChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50WCAtIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHkgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cblx0XHRcdFx0dmFyIHogPSBkYXRhUG9pbnRzW2ldLno7XG5cblx0XHRcdFx0dmFyIGFyZWEgPSAobWF4WiA9PT0gbWluWikgPyBtYXhBcmVhIC8gMiA6IG1pbkFyZWEgKyAobWF4QXJlYSAtIG1pbkFyZWEpIC8gKG1heFogLSBtaW5aKSAqICh6IC0gbWluWik7XG5cdFx0XHRcdHZhciByYWRpdXMgPSBNYXRoLm1heChNYXRoLnNxcnQoYXJlYSAvIE1hdGguUEkpIDw8IDAsIDEpO1xuXG5cdFx0XHRcdHZhciBtYXJrZXJTaXplID0gcmFkaXVzICogMjtcblx0XHRcdFx0dmFyIG1hcmtlclByb3BzID0gZGF0YVNlcmllcy5nZXRNYXJrZXJQcm9wZXJ0aWVzKGksIGN0eCk7XG5cdFx0XHRcdG1hcmtlclByb3BzLnNpemUgPSBtYXJrZXJTaXplO1xuXG5cblx0XHRcdFx0Y3R4Lmdsb2JhbEFscGhhID0gZGF0YVNlcmllcy5maWxsT3BhY2l0eTtcblx0XHRcdFx0UmVuZGVySGVscGVyLmRyYXdNYXJrZXIoeCwgeSwgY3R4LCBtYXJrZXJQcm9wcy50eXBlLCBtYXJrZXJQcm9wcy5zaXplLCBtYXJrZXJQcm9wcy5jb2xvciwgbWFya2VyUHJvcHMuYm9yZGVyQ29sb3IsIG1hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzcyk7XG5cdFx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IDE7XG5cblx0XHRcdFx0dmFyIGlkID0gZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbaV07XG5cdFx0XHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdID0ge1xuXHRcdFx0XHRcdGlkOiBpZCwgb2JqZWN0VHlwZTogXCJkYXRhUG9pbnRcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXgsIGRhdGFQb2ludEluZGV4OiBpLCB4MTogeCwgeTE6IHksIHNpemU6IG1hcmtlclNpemVcblx0XHRcdFx0fTtcblx0XHRcdFx0dmFyIG1hcmtlckNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cdFx0XHRcdC8vUmVuZGVySGVscGVyLmRyYXdNYXJrZXIoeCwgeSwgdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LCBtYXJrZXJUeXBlLCBtYXJrZXJTaXplLCBtYXJrZXJDb2xvciwgbWFya2VyQ29sb3IsIGRhdGFTZXJpZXMubWFya2VyQm9yZGVyVGhpY2tuZXNzKTtcblx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdFJlbmRlckhlbHBlci5kcmF3TWFya2VyKHgsIHksIHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eCwgbWFya2VyUHJvcHMudHlwZSwgbWFya2VyUHJvcHMuc2l6ZSwgbWFya2VyQ29sb3IsIG1hcmtlckNvbG9yLCBtYXJrZXJQcm9wcy5ib3JkZXJUaGlja25lc3MpO1xuXG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbCB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWwgfHwgZGF0YVBvaW50c1tpXS5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcikge1xuXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwiYnViYmxlXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeCwgeTogeVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogMSxcblx0XHRcdFx0XHRcdGJvdW5kczoge1xuXHRcdFx0XHRcdFx0XHR4MTogeCAtIG1hcmtlclByb3BzLnNpemUgLyAyLCB5MTogeSAtIG1hcmtlclByb3BzLnNpemUgLyAyLCB4MjogeCArIG1hcmtlclByb3BzLnNpemUgLyAyLCB5MjogeSArIG1hcmtlclByb3BzLnNpemUgLyAyXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjdHgucmVzdG9yZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVzdG9yZSgpO1xuXG5cdC8vc291cmNlIGFuZCBkZXN0IHdvdWxkIGJlIHNhbWUgd2hlbiBhbmltYXRpb24gaXMgbm90IGVuYWJsZWRcblx0dmFyIGFuaW1hdGlvbkluZm8gPSB7XG5cdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLmZhZGVJbkFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcuZWFzZUluUXVhZCwgYW5pbWF0aW9uQmFzZTogMFxuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cbiIsIlxuaW1wb3J0IHtpc0NhbnZhc1N1cHBvcnRlZH0gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXHR2YXIgY3R4ID0gcGxvdFVuaXQudGFyZ2V0Q2FudmFzQ3R4IHx8IHRoaXMucGxvdEFyZWEuY3R4O1xuXHR2YXIgZ2hvc3RDdHggPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHg7XG5cblx0dmFyIHRvdGFsRGF0YVNlcmllcyA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDtcblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgY29sb3IgPSBudWxsO1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cblx0dmFyIGkgPSAwLCB4LCB5MSwgeTIsIHkzLCB5NDtcblx0dmFyIGRhdGFQb2ludFg7IC8vVXNlZCBzbyB0aGF0IHdoZW4gZGF0YVBvaW50LnggaXMgYSBEYXRlVGltZSB2YWx1ZSwgaXQgZG9lc24ndCBnZXQgY29udmVydGVkIHRvIG51bWJlciBmcm9tIGRhdGFUaW1lIGV2ZXJ5dGltZSBpdCBpcyB1c2VkLlxuXG5cdHZhciB5WmVyb1RvUGl4ZWwgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKDAgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSkgPDwgMDtcblxuXHR2YXIgbWF4QmFyV2lkdGggPSB0aGlzLmRhdGFQb2ludE1heFdpZHRoID8gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA6ICh0aGlzLndpZHRoICogLjAxNSk7XG5cdHZhciB4TWluRGlmZiA9IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLm1pbkRpZmY7XG5cdHZhciBiYXJXaWR0aCA9ICgoKHBsb3RBcmVhLndpZHRoIC8gTWF0aC5hYnMocGxvdFVuaXQuYXhpc1gudmlld3BvcnRNYXhpbXVtIC0gcGxvdFVuaXQuYXhpc1gudmlld3BvcnRNaW5pbXVtKSkgKiBNYXRoLmFicyh4TWluRGlmZikpICogLjcpIDw8IDA7XG5cblx0aWYgKGJhcldpZHRoID4gbWF4QmFyV2lkdGgpXG5cdFx0YmFyV2lkdGggPSBtYXhCYXJXaWR0aDtcblx0ZWxzZSBpZiAoeE1pbkRpZmYgPT09IEluZmluaXR5KSB7XG5cdFx0YmFyV2lkdGggPSBtYXhCYXJXaWR0aDtcblx0fSBlbHNlIGlmIChiYXJXaWR0aCA8IDEpXG5cdFx0YmFyV2lkdGggPSAxO1xuXG5cdGN0eC5zYXZlKCk7XG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRnaG9zdEN0eC5zYXZlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdGdob3N0Q3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0XHRnaG9zdEN0eC5jbGlwKCk7XG5cdH1cblx0Ly9jdHguYmVnaW5QYXRoKCk7XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXG5cdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblx0XHR2YXIgZGF0YVBvaW50cyA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cztcblx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXG5cblx0XHQvLyBSZWR1Y2luZyBwaXhlbFBlclVuaXQgYnkgMSBqdXN0IHRvIG92ZXJjb21lIGFueSBwcm9ibGVtcyBkdWUgdG8gcm91bmRpbmcgb2ZmIG9mIHBpeGVscy5cblx0XHQvL2RhdGFTZXJpZXMubWF4V2lkdGhJblggPSBiYXJXaWR0aCAvIChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgPiAxID8gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0IC0gMSA6IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCk7XG5cblx0XHQvL3ZhciBvZmZzZXRYID0gYmFyV2lkdGggKiBwbG90VW5pdC5pbmRleCA8PCAwO1xuXG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL3ZhciB4eSA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uUGxvdEFyZWEoZGF0YVBvaW50c1swXS54LCBkYXRhUG9pbnRzWzBdLnkpO1xuXG5cdFx0XHR2YXIgYmV2ZWxFbmFibGVkID0gKGJhcldpZHRoID4gNSkgJiYgZGF0YVNlcmllcy5iZXZlbEVuYWJsZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0ZGF0YVBvaW50c1tpXS5nZXRUaW1lID8gZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS55ID09PSBudWxsIHx8ICFkYXRhUG9pbnRzW2ldLnkubGVuZ3RoXG5cdFx0XHRcdFx0fHwgdHlwZW9mIChkYXRhUG9pbnRzW2ldLnlbMF0pICE9PSBcIm51bWJlclwiIHx8IHR5cGVvZiAoZGF0YVBvaW50c1tpXS55WzFdKSAhPT0gXCJudW1iZXJcIlxuXHRcdFx0XHRcdHx8IHR5cGVvZiAoZGF0YVBvaW50c1tpXS55WzJdKSAhPT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgKGRhdGFQb2ludHNbaV0ueVszXSkgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0eCA9IChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50WCAtIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHkxID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnlbMF0gLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5MiA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55WzFdIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblxuXHRcdFx0XHR5MyA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55WzJdIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0eTQgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueVszXSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cblx0XHRcdFx0dmFyIHgxID0gKHggLSBiYXJXaWR0aCAvIDIpIDw8IDA7XG5cdFx0XHRcdHZhciB4MiA9ICh4MSArIGJhcldpZHRoKSA8PCAwO1xuXG5cblx0XHRcdFx0Y29sb3IgPSBkYXRhUG9pbnRzW2ldLmNvbG9yID8gZGF0YVBvaW50c1tpXS5jb2xvciA6IGRhdGFTZXJpZXMuX2NvbG9yU2V0WzBdO1xuXG5cblx0XHRcdFx0Ly92YXIgYm9yZGVyVGhpY2tuZXNzID0gTWF0aC5tYXgoMiwgKChiYXJXaWR0aCAqIC4xKSAvIDIgPDwgMCkgKiAyKTsgLy8gU2V0IG9ubHkgZXZlbiBudW1iZXJzIGZvciBib3JkZXJcblx0XHRcdFx0dmFyIGJvcmRlclRoaWNrbmVzcyA9IE1hdGgucm91bmQoTWF0aC5tYXgoMSwgKGJhcldpZHRoICogLjE1KSkpO1xuXHRcdFx0XHQvL2JvcmRlclRoaWNrbmVzcyA9IChib3JkZXJUaGlja25lc3MgLyAyIDw8IDApICogMjtcblx0XHRcdFx0Ly9ib3JkZXJUaGlja25lc3MgPSAyO1xuXHRcdFx0XHR2YXIgb2Zmc2V0ID0gYm9yZGVyVGhpY2tuZXNzICUgMiA9PT0gMCA/IDAgOiAuNTtcblxuXG5cdFx0XHRcdHZhciBpZCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2ldO1xuXHRcdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSA9IHtcblx0XHRcdFx0XHRpZDogaWQsIG9iamVjdFR5cGU6IFwiZGF0YVBvaW50XCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleDogaSwgeDE6IHgxLCB5MTogeTEsIHgyOiB4MiwgeTI6IHkyLFxuXHRcdFx0XHRcdHgzOiB4LCB5MzogeTMsIHg0OiB4LCB5NDogeTQsIGJvcmRlclRoaWNrbmVzczogYm9yZGVyVGhpY2tuZXNzLCBjb2xvcjogY29sb3Jcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcblx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRjdHgubGluZVdpZHRoID0gYm9yZGVyVGhpY2tuZXNzO1xuXHRcdFx0XHRnaG9zdEN0eC5saW5lV2lkdGggPSBNYXRoLm1heChib3JkZXJUaGlja25lc3MsIDQpO1xuXG5cdFx0XHRcdGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwiY2FuZGxlc3RpY2tcIikge1xuXG5cdFx0XHRcdFx0Y3R4Lm1vdmVUbyh4IC0gb2Zmc2V0LCB5Mik7XG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyh4IC0gb2Zmc2V0LCBNYXRoLm1pbih5MSwgeTQpKTtcblx0XHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0XHRcdFx0Y3R4Lm1vdmVUbyh4IC0gb2Zmc2V0LCBNYXRoLm1heCh5MSwgeTQpKTtcblx0XHRcdFx0XHRjdHgubGluZVRvKHggLSBvZmZzZXQsIHkzKTtcblx0XHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cblx0XHRcdFx0XHRkcmF3UmVjdChjdHgsIHgxLCBNYXRoLm1pbih5MSwgeTQpLCB4MiwgTWF0aC5tYXgoeTEsIHk0KSwgZGF0YVBvaW50c1tpXS55WzBdIDw9IGRhdGFQb2ludHNbaV0ueVszXSA/IGRhdGFTZXJpZXMucmlzaW5nQ29sb3IgOiBjb2xvciwgYm9yZGVyVGhpY2tuZXNzLCBjb2xvciwgYmV2ZWxFbmFibGVkLCBiZXZlbEVuYWJsZWQsIGZhbHNlLCBmYWxzZSwgZGF0YVNlcmllcy5maWxsT3BhY2l0eSk7XG5cblxuXHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0Y29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGlkKTtcblx0XHRcdFx0XHRcdGdob3N0Q3R4LnN0cm9rZVN0eWxlID0gY29sb3I7XG5cblx0XHRcdFx0XHRcdGdob3N0Q3R4Lm1vdmVUbyh4IC0gb2Zmc2V0LCB5Mik7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5saW5lVG8oeCAtIG9mZnNldCwgTWF0aC5taW4oeTEsIHk0KSk7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5zdHJva2UoKTtcblx0XHRcdFx0XHRcdGdob3N0Q3R4Lm1vdmVUbyh4IC0gb2Zmc2V0LCBNYXRoLm1heCh5MSwgeTQpKTtcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmxpbmVUbyh4IC0gb2Zmc2V0LCB5Myk7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5zdHJva2UoKTtcblx0XHRcdFx0XHRcdGRyYXdSZWN0KGdob3N0Q3R4LCB4MSwgTWF0aC5taW4oeTEsIHk0KSwgeDIsIE1hdGgubWF4KHkxLCB5NCksIGNvbG9yLCAwLCBudWxsLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKGRhdGFTZXJpZXMudHlwZSA9PT0gXCJvaGxjXCIpIHtcblxuXHRcdFx0XHRcdGN0eC5tb3ZlVG8oeCAtIG9mZnNldCwgeTIpO1xuXHRcdFx0XHRcdGN0eC5saW5lVG8oeCAtIG9mZnNldCwgeTMpO1xuXHRcdFx0XHRcdGN0eC5zdHJva2UoKTtcblxuXHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRjdHgubW92ZVRvKHgsIHkxKTtcblx0XHRcdFx0XHRjdHgubGluZVRvKHgxLCB5MSk7XG5cdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXG5cdFx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdGN0eC5tb3ZlVG8oeCwgeTQpO1xuXHRcdFx0XHRcdGN0eC5saW5lVG8oeDIsIHk0KTtcblx0XHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblxuXHRcdFx0XHRcdFx0Y29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGlkKTtcblx0XHRcdFx0XHRcdGdob3N0Q3R4LnN0cm9rZVN0eWxlID0gY29sb3I7XG5cblx0XHRcdFx0XHRcdGdob3N0Q3R4Lm1vdmVUbyh4IC0gb2Zmc2V0LCB5Mik7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5saW5lVG8oeCAtIG9mZnNldCwgeTMpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHguc3Ryb2tlKCk7XG5cblx0XHRcdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubW92ZVRvKHgsIHkxKTtcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmxpbmVUbyh4MSwgeTEpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHguc3Ryb2tlKCk7XG5cblx0XHRcdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubW92ZVRvKHgsIHk0KTtcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmxpbmVUbyh4MiwgeTQpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHguc3Ryb2tlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbCB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWwgfHwgZGF0YVBvaW50c1tpXS5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcikge1xuXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IGRhdGFTZXJpZXMudHlwZSxcblx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50c1tpXSxcblx0XHRcdFx0XHRcdGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsXG5cdFx0XHRcdFx0XHRwb2ludDoge1xuXHRcdFx0XHRcdFx0XHR4OiB4MSArICh4MiAtIHgxKSAvIDIsIHk6IHkyXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiAxLFxuXHRcdFx0XHRcdFx0Ym91bmRzOiB7XG5cdFx0XHRcdFx0XHRcdHgxOiB4MSwgeTE6IE1hdGgubWluKHkyLCB5MyksIHgyOiB4MiwgeTI6IE1hdGgubWF4KHkyLCB5Mylcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y3R4LnJlc3RvcmUoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0Z2hvc3RDdHgucmVzdG9yZSgpO1xuXG5cdC8vc291cmNlIGFuZCBkZXN0IHdvdWxkIGJlIHNhbWUgd2hlbiBhbmltYXRpb24gaXMgbm90IGVuYWJsZWRcblx0dmFyIGFuaW1hdGlvbkluZm8gPSB7XG5cdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLmZhZGVJbkFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcuZWFzZUluUXVhZCwgYW5pbWF0aW9uQmFzZTogMFxuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cbiIsIlxuaW1wb3J0IEFuaW1hdGlvbkhlbHBlciBmcm9tICcuLi9oZWxwZXJzL2FuaW1hdG9yJztcbmltcG9ydCB7aXNDYW52YXNTdXBwb3J0ZWQsIGRyYXdSZWN0LCBpbnRUb0hleENvbG9yU3RyaW5nfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblxuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGNvbG9yID0gbnVsbDtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdHZhciBpID0gMCwgeCwgeTtcblx0dmFyIGRhdGFQb2ludFg7IC8vVXNlZCBzbyB0aGF0IHdoZW4gZGF0YVBvaW50LnggaXMgYSBEYXRlVGltZSB2YWx1ZSwgaXQgZG9lc24ndCBnZXQgY29udmVydGVkIHRvIG51bWJlciBmcm9tIGRhdGFUaW1lIGV2ZXJ5dGltZSBpdCBpcyB1c2VkLlxuXG5cdHZhciB5WmVyb1RvUGl4ZWwgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKDAgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSkgPDwgMDtcblxuXHR2YXIgbWF4QmFyV2lkdGggPSB0aGlzLmRhdGFQb2ludE1heFdpZHRoID8gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA6IE1hdGgubWluKCh0aGlzLndpZHRoICogLjE1KSwgdGhpcy5wbG90QXJlYS53aWR0aCAvIHBsb3RVbml0LnBsb3RUeXBlLnRvdGFsRGF0YVNlcmllcyAqIC45KSA8PCAwO1xuXHR2YXIgeE1pbkRpZmYgPSBwbG90VW5pdC5heGlzWC5kYXRhSW5mby5taW5EaWZmO1xuXHR2YXIgYmFyV2lkdGggPSAoKChwbG90QXJlYS53aWR0aCAvIE1hdGguYWJzKHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWF4aW11bSAtIHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkpICogTWF0aC5hYnMoeE1pbkRpZmYpKSAvIHBsb3RVbml0LnBsb3RUeXBlLnRvdGFsRGF0YVNlcmllcyAqIC45KSA8PCAwO1xuXG5cdGlmIChiYXJXaWR0aCA+IG1heEJhcldpZHRoKVxuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cdGVsc2UgaWYgKHhNaW5EaWZmID09PSBJbmZpbml0eSkge1xuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGggLyBwbG90VW5pdC5wbG90VHlwZS50b3RhbERhdGFTZXJpZXMgKiAuOTtcblx0fSBlbHNlIGlmIChiYXJXaWR0aCA8IDEpXG5cdFx0YmFyV2lkdGggPSAxO1xuXG5cdGN0eC5zYXZlKCk7XG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHguc2F2ZSgpO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5jbGlwKCk7XG5cdH1cblx0Ly9jdHguYmVnaW5QYXRoKCk7XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXG5cdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblx0XHR2YXIgZGF0YVBvaW50cyA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cztcblx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXG5cblx0XHQvLyBSZWR1Y2luZyBwaXhlbFBlclVuaXQgYnkgMSBqdXN0IHRvIG92ZXJjb21lIGFueSBwcm9ibGVtcyBkdWUgdG8gcm91bmRpbmcgb2ZmIG9mIHBpeGVscy5cblx0XHQvL2RhdGFTZXJpZXMubWF4V2lkdGhJblggPSBiYXJXaWR0aCAvIChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgPiAxID8gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0IC0gMSA6IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCk7XG5cblx0XHQvL3ZhciBvZmZzZXRYID0gYmFyV2lkdGggKiBwbG90VW5pdC5pbmRleCA8PCAwO1xuXG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL3ZhciB4eSA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uUGxvdEFyZWEoZGF0YVBvaW50c1swXS54LCBkYXRhUG9pbnRzWzBdLnkpO1xuXG5cdFx0XHR2YXIgYmV2ZWxFbmFibGVkID0gKGJhcldpZHRoID4gNSkgJiYgZGF0YVNlcmllcy5iZXZlbEVuYWJsZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0ZGF0YVBvaW50c1tpXS5nZXRUaW1lID8gZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZW9mIChkYXRhUG9pbnRzW2ldLnkpICE9PSBcIm51bWJlclwiKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHggPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5ID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnkgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXG5cdFx0XHRcdHZhciB4MSA9IHggLSAocGxvdFVuaXQucGxvdFR5cGUudG90YWxEYXRhU2VyaWVzICogYmFyV2lkdGggLyAyKSArICgocGxvdFVuaXQucHJldmlvdXNEYXRhU2VyaWVzQ291bnQgKyBqKSAqIGJhcldpZHRoKSA8PCAwO1xuXHRcdFx0XHR2YXIgeDIgPSB4MSArIGJhcldpZHRoIDw8IDA7XG5cdFx0XHRcdHZhciB5MTtcblx0XHRcdFx0dmFyIHkyO1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLnkgPj0gMCkge1xuXHRcdFx0XHRcdHkxID0geTtcblxuXHRcdFx0XHRcdHkyID0geVplcm9Ub1BpeGVsO1xuXG5cdFx0XHRcdFx0aWYgKHkxID4geTIpIHtcblx0XHRcdFx0XHRcdHZhciB0ZW1wID0geTE7XG5cdFx0XHRcdFx0XHR5MSA9IHkyO1xuXHRcdFx0XHRcdFx0eTIgPSB5MTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR5MiA9IHk7XG5cblx0XHRcdFx0XHR5MSA9IHlaZXJvVG9QaXhlbDtcblxuXHRcdFx0XHRcdGlmICh5MSA+IHkyKSB7XG5cdFx0XHRcdFx0XHR2YXIgdGVtcCA9IHkxO1xuXHRcdFx0XHRcdFx0eTEgPSB5Mjtcblx0XHRcdFx0XHRcdHkyID0geTE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29sb3IgPSBkYXRhUG9pbnRzW2ldLmNvbG9yID8gZGF0YVBvaW50c1tpXS5jb2xvciA6IGRhdGFTZXJpZXMuX2NvbG9yU2V0W2kgJSBkYXRhU2VyaWVzLl9jb2xvclNldC5sZW5ndGhdO1xuXHRcdFx0XHRkcmF3UmVjdChjdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgYmV2ZWxFbmFibGVkICYmIChkYXRhUG9pbnRzW2ldLnkgPj0gMCksIChkYXRhUG9pbnRzW2ldLnkgPCAwKSAmJiBiZXZlbEVuYWJsZWQsIGZhbHNlLCBmYWxzZSwgZGF0YVNlcmllcy5maWxsT3BhY2l0eSk7XG5cblx0XHRcdFx0Ly9pZiAoZGF0YVNlcmllcy5tYXJrZXJUeXBlICYmIGRhdGFTZXJpZXMubWFya2VyU2l6ZSA+IDApIHtcblx0XHRcdFx0Ly8gICAgUmVuZGVySGVscGVyLmRyYXdNYXJrZXIoeDEgKyAoeDIgLSB4MSkgLyAyLCB5LCBjdHgsIGRhdGFTZXJpZXMubWFya2VyVHlwZSwgZGF0YVNlcmllcy5tYXJrZXJTaXplLCBjb2xvciwgZGF0YVNlcmllcy5tYXJrZXJCb3JkZXJDb2xvciwgZGF0YVNlcmllcy5tYXJrZXJCb3JkZXJUaGlja25lc3MgPyBkYXRhU2VyaWVzLm1hcmtlckJvcmRlclRoaWNrbmVzcyA6IDEpO1xuXHRcdFx0XHQvL31cblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5MlxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRkcmF3UmVjdCh0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpIHtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcImNvbHVtblwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnRzW2ldLFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IHgxICsgKHgyIC0geDEpIC8gMiwgeTogZGF0YVBvaW50c1tpXS55ID49IDAgPyB5MSA6IHkyXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkYXRhUG9pbnRzW2ldLnkgPj0gMCA/IDEgOiAtMSxcblx0XHRcdFx0XHRcdGJvdW5kczoge1xuXHRcdFx0XHRcdFx0XHR4MTogeDEsIHkxOiBNYXRoLm1pbih5MSwgeTIpLCB4MjogeDIsIHkyOiBNYXRoLm1heCh5MSwgeTIpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGN0eC5yZXN0b3JlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZXN0b3JlKCk7XG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uQmFzZSA9IE1hdGgubWluKHlaZXJvVG9QaXhlbCwgcGxvdFVuaXQuYXhpc1kuYm91bmRpbmdSZWN0LnkyKTtcblx0dmFyIGFuaW1hdGlvbkluZm8gPSB7XG5cdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLnlTY2FsZUFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcuZWFzZU91dFF1YXJ0LCBhbmltYXRpb25CYXNlOiBhbmltYXRpb25CYXNlXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuIiwiZXhwb3J0IFNwbGluZUNoYXJ0IGZyb20gJy4uL2NoYXJ0cy9zcGxpbmUnO1xuZXhwb3J0IENvbHVtbkNoYXJ0IGZyb20gJy4uL2NoYXJ0cy9jb2x1bW4nO1xuZXhwb3J0IFN0YWNrZWRDb2x1bW5DaGFydCBmcm9tICcuLi9jaGFydHMvc3RhY2tlZF9jb2x1bW4nO1xuZXhwb3J0IFN0YWNrZWRDb2x1bW4xMDBDaGFydCBmcm9tICcuLi9jaGFydHMvc3RhY2tlZF9jb2x1bW5fMTAwJztcbmV4cG9ydCBCYXJDaGFydCBmcm9tICcuLi9jaGFydHMvYmFyJztcbmV4cG9ydCBTdGFja2VkQmFyQ2hhcnQgZnJvbSAnLi4vY2hhcnRzL3N0YWNrZWRfYmFyJztcbmV4cG9ydCBTdGFja2VkQmFyMTAwQ2hhcnQgZnJvbSAnLi4vY2hhcnRzL3N0YWNrZWRfYmFyXzEwMCc7XG5leHBvcnQgQXJlYUNoYXJ0IGZyb20gJy4uL2NoYXJ0cy9hcmVhJztcbmV4cG9ydCBTcGxpbmVBcmVhQ2hhcnQgZnJvbSAnLi4vY2hhcnRzL3NwbGluZV9hcmVhJztcbmV4cG9ydCBTdGVwQXJlYUNoYXJ0IGZyb20gJy4uL2NoYXJ0cy9zdGVwX2FyZWEnO1xuZXhwb3J0IFN0YWNrZWRBcmVhQ2hhcnQgZnJvbSAnLi4vY2hhcnRzL3N0YWNrZWRfYXJlYSc7XG5leHBvcnQgU3RhY2tlZEFyZWExMDBDaGFydCBmcm9tICcuLi9jaGFydHMvc3RhY2tlZF9hcmVhXzEwMCc7XG5leHBvcnQgQnViYmxlQ2hhcnQgZnJvbSAnLi4vY2hhcnRzL2J1YmJsZSc7XG5leHBvcnQgU2NhdHRlckNoYXJ0IGZyb20gJy4uL2NoYXJ0cy9zY2F0dGVyJztcbmV4cG9ydCBDYW5kbGVzdGlja0NoYXJ0IGZyb20gJy4uL2NoYXJ0cy9jYW5kbGVzdGljayc7XG5leHBvcnQgUmFuZ2VDb2x1bW5DaGFydCBmcm9tICcuLi9jaGFydHMvcmFuZ2VfY29sdW1uJztcbmV4cG9ydCBSYW5nZUJhckNoYXJ0IGZyb20gJy4uL2NoYXJ0cy9yYW5nZV9iYXInO1xuZXhwb3J0IFJhbmdlQXJlYUNoYXJ0IGZyb20gJy4uL2NoYXJ0cy9yYW5nZV9hcmVhJztcbmV4cG9ydCBSYW5nZVNwbGluZUFyZWFDaGFydCBmcm9tICcuLi9jaGFydHMvcmFuZ2Vfc3BsaW5lX2FyZWEnO1xuZXhwb3J0IFBpZUNoYXJ0IGZyb20gJy4uL2NoYXJ0cy9waWUnO1xuIiwiXG5pbXBvcnQgVGV4dEJsb2NrIGZyb20gJy4uL2NvcmUvdGV4dF9ibG9jayc7XG5pbXBvcnQge2NvbnZlcnRQZXJjZW50VG9WYWx1ZSwgaXNDYW52YXNTdXBwb3J0ZWQsIGRyYXdTZWdtZW50LCBnZXRMaW5lRGFzaEFycmF5fSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cblx0dmFyIF90aGlzID0gdGhpcztcblx0dmFyIHRvdGFsRGF0YVNlcmllcyA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDtcblxuXHRpZiAodG90YWxEYXRhU2VyaWVzIDw9IDApXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1swXTtcblx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cdHZhciBpbmRleExhYmVsTGluZUVkZ2VMZW5ndGggPSAxMDtcblx0dmFyIGV4cGxvZGVEdXJhdGlvbiA9IDUwMDtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdC8vdmFyIG1heEZyYW1lID0gaXNDYW52YXNTdXBwb3J0ZWQgPyAzMDAgOiA0O1xuXHQvL3ZhciB0b3RhbFJlY3Vyc2lvbnMgPSAwO1xuXHR2YXIgZGF0YVBvaW50RU9zID0gW107IC8vZGF0YVBvaW50IEV4dGVuc2lvbiBPYmplY3RzIEJlaGF2ZXMgbGlrZSBhIHN0b3JhZ2UgcGxhY2UgZm9yIGFsbCBhZGRpdGlvbmFsIGRhdGEgcmVsYXRpbmcgdG8gZGF0YVBvaW50cy4gUmVxdXJlZCBiZWNhdXNlIGFjdHVhbCBkYXRhUG9pbnRzIHNob3VsZCBub3QgYmUgbW9kaWZpZWQuXG5cblx0dmFyIG1pbkRpc3RhbmNlQmV0d2VlbkxhYmVscyA9IDI7XG5cdHZhciBpbmRleExhYmVsUmFkaXVzVG9SYWRpdXNSYXRpbyA9IDEuMztcblx0dmFyIHBvbGVBbmdsdWxhckRpc3RhbmNlID0gKDIwIC8gMTgwKSAqIE1hdGguUEk7IC8vQW5nbHVsYXIgRGlzdGFuY2UgZnJvbSA5MCAmIDI3MCB0byBiZSBjb25zaWRlcmVkIHBvbGVcblx0dmFyIHByZWNpc2lvbiA9IDY7XG5cblx0dmFyIGNlbnRlciA9IHtcblx0XHR4OiAocGxvdEFyZWEueDIgKyBwbG90QXJlYS54MSkgLyAyLCB5OiAocGxvdEFyZWEueTIgKyBwbG90QXJlYS55MSkgLyAyXG5cdH07XG5cblx0dmFyIHN1bSA9IDA7XG5cdHZhciBpc0luZGV4TGFiZWxQcmVzZW50ID0gZmFsc2U7XG5cdGZvciAodmFyIGogPSAwOyBqIDwgZGF0YVBvaW50cy5sZW5ndGg7IGorKykge1xuXHRcdHN1bSArPSBNYXRoLmFicyhkYXRhUG9pbnRzW2pdLnkpO1xuXG5cdFx0aWYgKCFpc0luZGV4TGFiZWxQcmVzZW50ICYmIHR5cGVvZiAoZGF0YVBvaW50c1tqXS5pbmRleExhYmVsKSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhUG9pbnRzW2pdLmluZGV4TGFiZWwgIT09IG51bGwgJiYgZGF0YVBvaW50c1tqXS5pbmRleExhYmVsLnRvU3RyaW5nKCkubGVuZ3RoID4gMClcblx0XHRcdGlzSW5kZXhMYWJlbFByZXNlbnQgPSB0cnVlO1xuXG5cdFx0aWYgKCFpc0luZGV4TGFiZWxQcmVzZW50ICYmIHR5cGVvZiAoZGF0YVBvaW50c1tqXS5sYWJlbCkgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YVBvaW50c1tqXS5sYWJlbCAhPT0gbnVsbCAmJiBkYXRhUG9pbnRzW2pdLmxhYmVsLnRvU3RyaW5nKCkubGVuZ3RoID4gMClcblx0XHRcdGlzSW5kZXhMYWJlbFByZXNlbnQgPSB0cnVlO1xuXHR9XG5cblx0aWYgKHN1bSA9PT0gMClcblx0XHRyZXR1cm47XG5cblx0aXNJbmRleExhYmVsUHJlc2VudCA9IGlzSW5kZXhMYWJlbFByZXNlbnQgfHwgKHR5cGVvZiAoZGF0YVNlcmllcy5pbmRleExhYmVsKSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhU2VyaWVzLmluZGV4TGFiZWwgIT09IG51bGwgJiYgZGF0YVNlcmllcy5pbmRleExhYmVsLnRvU3RyaW5nKCkubGVuZ3RoID4gMCk7XG5cblx0dmFyIG91dGVyUmFkaXVzID0gZGF0YVNlcmllcy5pbmRleExhYmVsUGxhY2VtZW50ICE9PSBcImluc2lkZVwiICYmIGlzSW5kZXhMYWJlbFByZXNlbnQgPyAoTWF0aC5taW4ocGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCkgKiAwLjc1KSAvIDIgOiAoTWF0aC5taW4ocGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCkgKiAuOTIpIC8gMjtcblxuXHRpZiAoZGF0YVNlcmllcy5yYWRpdXMpXG5cdFx0b3V0ZXJSYWRpdXMgPSBjb252ZXJ0UGVyY2VudFRvVmFsdWUoZGF0YVNlcmllcy5yYWRpdXMsIG91dGVyUmFkaXVzKTtcblxuXG5cdHZhciBpbm5lclJhZGl1cyA9ICh0eXBlb2YgZGF0YVNlcmllcy5pbm5lclJhZGl1cyAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YVNlcmllcy5pbm5lclJhZGl1cyAhPT0gbnVsbCkgPyBjb252ZXJ0UGVyY2VudFRvVmFsdWUoZGF0YVNlcmllcy5pbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMpIDogMC43ICogb3V0ZXJSYWRpdXM7XG5cblx0dmFyIHBlcmNlbnRJbm5lclJhZGl1cyA9IE1hdGgubWluKGlubmVyUmFkaXVzIC8gb3V0ZXJSYWRpdXMsIChvdXRlclJhZGl1cyAtIDEpIC8gb3V0ZXJSYWRpdXMpO1xuXG5cdGZ1bmN0aW9uIGluaXRMYWJlbHMoKSB7XG5cblx0XHRpZiAoIWRhdGFTZXJpZXMgfHwgIWRhdGFQb2ludHMpXG5cdFx0XHRyZXR1cm47XG5cblxuXHRcdHZhciBub0RQTmVhclNvdXRoUG9sZSA9IDA7XG5cdFx0dmFyIG5vRFBOZWFyTm9ydGhQb2xlID0gMDtcblx0XHR2YXIgZmlyc3REUENsb3NlVG9Tb3V0aCA9IDA7XG5cdFx0dmFyIGZpcnN0RFBDbG9zZVRvTm9ydGggPSAwO1xuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGRhdGFQb2ludHMubGVuZ3RoOyBqKyspIHtcblxuXHRcdFx0dmFyIGRhdGFQb2ludCA9IGRhdGFQb2ludHNbal07XG5cdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tqXTtcblxuXHRcdFx0dmFyIGRhdGFQb2ludEVPID0ge1xuXHRcdFx0XHRpZDogaWQsIG9iamVjdFR5cGU6IFwiZGF0YVBvaW50XCIsIGRhdGFQb2ludEluZGV4OiBqLCBkYXRhU2VyaWVzSW5kZXg6IDBcblx0XHRcdH07XG5cdFx0XHRkYXRhUG9pbnRFT3MucHVzaChkYXRhUG9pbnRFTyk7XG5cblx0XHRcdHZhciBwZXJjZW50QW5kVG90YWwgPSB7XG5cdFx0XHRcdHBlcmNlbnQ6IG51bGwsIHRvdGFsOiBudWxsXG5cdFx0XHR9O1xuXHRcdFx0dmFyIGZvcm1hdHRlclBhcmFtZXRlciA9IG51bGw7XG5cblx0XHRcdHBlcmNlbnRBbmRUb3RhbCA9IF90aGlzLmdldFBlcmNlbnRBbmRUb3RhbChkYXRhU2VyaWVzLCBkYXRhUG9pbnQpO1xuXG5cdFx0XHRpZiAoZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFQb2ludC5pbmRleExhYmVsRm9ybWF0dGVyKVxuXHRcdFx0XHRmb3JtYXR0ZXJQYXJhbWV0ZXIgPSB7XG5cdFx0XHRcdFx0Y2hhcnQ6IF90aGlzLl9vcHRpb25zLCBkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLCBkYXRhUG9pbnQ6IGRhdGFQb2ludCwgdG90YWw6IHBlcmNlbnRBbmRUb3RhbC50b3RhbCwgcGVyY2VudDogcGVyY2VudEFuZFRvdGFsLnBlcmNlbnRcblx0XHRcdFx0fTtcblxuXHRcdFx0dmFyIGluZGV4TGFiZWxUZXh0ID0gZGF0YVBvaW50LmluZGV4TGFiZWxGb3JtYXR0ZXIgPyBkYXRhUG9pbnQuaW5kZXhMYWJlbEZvcm1hdHRlcihmb3JtYXR0ZXJQYXJhbWV0ZXIpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IGRhdGFQb2ludC5pbmRleExhYmVsID8gX3RoaXMucmVwbGFjZUtleXdvcmRzV2l0aFZhbHVlKGRhdGFQb2ludC5pbmRleExhYmVsLCBkYXRhUG9pbnQsIGRhdGFTZXJpZXMsIGopXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlciA/IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcihmb3JtYXR0ZXJQYXJhbWV0ZXIpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IGRhdGFTZXJpZXMuaW5kZXhMYWJlbCA/IF90aGlzLnJlcGxhY2VLZXl3b3Jkc1dpdGhWYWx1ZShkYXRhU2VyaWVzLmluZGV4TGFiZWwsIGRhdGFQb2ludCwgZGF0YVNlcmllcywgaikgOiBkYXRhUG9pbnQubGFiZWwgPyBkYXRhUG9pbnQubGFiZWwgOiAnJztcblxuXG5cdFx0XHRfdGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSBkYXRhUG9pbnRFTztcblxuXHRcdFx0Ly9kYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dCA9IGoudG9TdHJpbmcoKSArIFwiIFwiICsgXCJraW5nZmlzaGVyOiBcIiArIGRhdGFQb2ludC55LnRvU3RyaW5nKCk7O1xuXHRcdFx0ZGF0YVBvaW50RU8uY2VudGVyID0ge1xuXHRcdFx0XHR4OiBjZW50ZXIueCwgeTogY2VudGVyLnlcblx0XHRcdH07XG5cdFx0XHRkYXRhUG9pbnRFTy55ID0gZGF0YVBvaW50Lnk7XG5cdFx0XHRkYXRhUG9pbnRFTy5yYWRpdXMgPSBvdXRlclJhZGl1cztcblx0XHRcdGRhdGFQb2ludEVPLnBlcmNlbnRJbm5lclJhZGl1cyA9IHBlcmNlbnRJbm5lclJhZGl1cztcblx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0ID0gaW5kZXhMYWJlbFRleHQ7XG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsUGxhY2VtZW50ID0gZGF0YVNlcmllcy5pbmRleExhYmVsUGxhY2VtZW50O1xuXHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbExpbmVDb2xvciA9IGRhdGFQb2ludC5pbmRleExhYmVsTGluZUNvbG9yID8gZGF0YVBvaW50LmluZGV4TGFiZWxMaW5lQ29sb3IgOiBkYXRhU2VyaWVzLmluZGV4TGFiZWxMaW5lQ29sb3IgPyBkYXRhU2VyaWVzLmluZGV4TGFiZWxMaW5lQ29sb3IgOiBkYXRhUG9pbnQuY29sb3IgPyBkYXRhUG9pbnQuY29sb3IgOiBkYXRhU2VyaWVzLl9jb2xvclNldFtqICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcblx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxMaW5lVGhpY2tuZXNzID0gZGF0YVBvaW50LmluZGV4TGFiZWxMaW5lVGhpY2tuZXNzID8gZGF0YVBvaW50LmluZGV4TGFiZWxMaW5lVGhpY2tuZXNzIDogZGF0YVNlcmllcy5pbmRleExhYmVsTGluZVRoaWNrbmVzcztcblx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxMaW5lRGFzaFR5cGUgPSBkYXRhUG9pbnQuaW5kZXhMYWJlbExpbmVEYXNoVHlwZSA/IGRhdGFQb2ludC5pbmRleExhYmVsTGluZURhc2hUeXBlIDogZGF0YVNlcmllcy5pbmRleExhYmVsTGluZURhc2hUeXBlO1xuXHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbEZvbnRDb2xvciA9IGRhdGFQb2ludC5pbmRleExhYmVsRm9udENvbG9yID8gZGF0YVBvaW50LmluZGV4TGFiZWxGb250Q29sb3IgOiBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb250Q29sb3I7XG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsRm9udFN0eWxlID0gZGF0YVBvaW50LmluZGV4TGFiZWxGb250U3R5bGUgPyBkYXRhUG9pbnQuaW5kZXhMYWJlbEZvbnRTdHlsZSA6IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvbnRTdHlsZTtcblx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxGb250V2VpZ2h0ID0gZGF0YVBvaW50LmluZGV4TGFiZWxGb250V2VpZ2h0ID8gZGF0YVBvaW50LmluZGV4TGFiZWxGb250V2VpZ2h0IDogZGF0YVNlcmllcy5pbmRleExhYmVsRm9udFdlaWdodDtcblx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxGb250U2l6ZSA9IGRhdGFQb2ludC5pbmRleExhYmVsRm9udFNpemUgPyBkYXRhUG9pbnQuaW5kZXhMYWJlbEZvbnRTaXplIDogZGF0YVNlcmllcy5pbmRleExhYmVsRm9udFNpemU7XG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsRm9udEZhbWlseSA9IGRhdGFQb2ludC5pbmRleExhYmVsRm9udEZhbWlseSA/IGRhdGFQb2ludC5pbmRleExhYmVsRm9udEZhbWlseSA6IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvbnRGYW1pbHk7XG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsQmFja2dyb3VuZENvbG9yID0gZGF0YVBvaW50LmluZGV4TGFiZWxCYWNrZ3JvdW5kQ29sb3IgPyBkYXRhUG9pbnQuaW5kZXhMYWJlbEJhY2tncm91bmRDb2xvciA6IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEJhY2tncm91bmRDb2xvciA/IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEJhY2tncm91bmRDb2xvciA6IG51bGw7XG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsTWF4V2lkdGggPSBkYXRhUG9pbnQuaW5kZXhMYWJlbE1heFdpZHRoID8gZGF0YVBvaW50LmluZGV4TGFiZWxNYXhXaWR0aCA6IGRhdGFTZXJpZXMuaW5kZXhMYWJlbE1heFdpZHRoID8gZGF0YVNlcmllcy5pbmRleExhYmVsTWF4V2lkdGggOiBwbG90QXJlYS53aWR0aCAqIC4zMztcblx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxXcmFwID0gdHlwZW9mIChkYXRhUG9pbnQuaW5kZXhMYWJlbFdyYXApICE9PSBcInVuZGVmaW5lZFwiID8gZGF0YVBvaW50LmluZGV4TGFiZWxXcmFwIDogZGF0YVNlcmllcy5pbmRleExhYmVsV3JhcDtcblxuXHRcdFx0ZGF0YVBvaW50RU8uc3RhcnRBbmdsZSA9IGogPT09IDAgPyBkYXRhU2VyaWVzLnN0YXJ0QW5nbGUgPyAoZGF0YVNlcmllcy5zdGFydEFuZ2xlIC8gMTgwKSAqIE1hdGguUEkgOiAwIDogZGF0YVBvaW50RU9zW2ogLSAxXS5lbmRBbmdsZTtcblxuXHRcdFx0ZGF0YVBvaW50RU8uc3RhcnRBbmdsZSA9IChkYXRhUG9pbnRFTy5zdGFydEFuZ2xlICsgKDIgKiBNYXRoLlBJKSkgJSAoMiAqIE1hdGguUEkpO1xuXG5cdFx0XHRkYXRhUG9pbnRFTy5lbmRBbmdsZSA9IGRhdGFQb2ludEVPLnN0YXJ0QW5nbGUgKyAoKDIgKiBNYXRoLlBJIC8gc3VtKSAqIE1hdGguYWJzKGRhdGFQb2ludC55KSk7XG5cblx0XHRcdC8vdmFyIG1pZEFuZ2xlID0gZGF0YVBvaW50RU8uc3RhcnRBbmdsZSArIE1hdGguYWJzKGRhdGFQb2ludEVPLmVuZEFuZ2xlIC0gZGF0YVBvaW50RU8uc3RhcnRBbmdsZSkgLyAyO1xuXHRcdFx0dmFyIG1pZEFuZ2xlID0gKGRhdGFQb2ludEVPLmVuZEFuZ2xlICsgZGF0YVBvaW50RU8uc3RhcnRBbmdsZSkgLyAyO1xuXG5cdFx0XHQvL3ZhciBtaWRBbmdsZSA9ICgxODAgLyBNYXRoLlBJICogbWlkQW5nbGUpO1xuXG5cdFx0XHRtaWRBbmdsZSA9IChtaWRBbmdsZSArICgyICogTWF0aC5QSSkpICUgKDIgKiBNYXRoLlBJKTtcblxuXHRcdFx0ZGF0YVBvaW50RU8ubWlkQW5nbGUgPSBtaWRBbmdsZTtcblxuXHRcdFx0aWYgKGRhdGFQb2ludEVPLm1pZEFuZ2xlID4gKE1hdGguUEkgLyAyKSAtIHBvbGVBbmdsdWxhckRpc3RhbmNlICYmIGRhdGFQb2ludEVPLm1pZEFuZ2xlIDwgKE1hdGguUEkgLyAyKSArIHBvbGVBbmdsdWxhckRpc3RhbmNlKSB7XG5cdFx0XHRcdGlmIChub0RQTmVhclNvdXRoUG9sZSA9PT0gMCB8fCBkYXRhUG9pbnRFT3NbZmlyc3REUENsb3NlVG9Tb3V0aF0ubWlkQW5nbGUgPiBkYXRhUG9pbnRFTy5taWRBbmdsZSlcblx0XHRcdFx0XHRmaXJzdERQQ2xvc2VUb1NvdXRoID0gajtcblxuXHRcdFx0XHRub0RQTmVhclNvdXRoUG9sZSsrO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoZGF0YVBvaW50RU8ubWlkQW5nbGUgPiAoMyAqIE1hdGguUEkgLyAyKSAtIHBvbGVBbmdsdWxhckRpc3RhbmNlICYmIGRhdGFQb2ludEVPLm1pZEFuZ2xlIDwgKDMgKiBNYXRoLlBJIC8gMikgKyBwb2xlQW5nbHVsYXJEaXN0YW5jZSkge1xuXHRcdFx0XHRpZiAobm9EUE5lYXJOb3J0aFBvbGUgPT09IDAgfHwgZGF0YVBvaW50RU9zW2ZpcnN0RFBDbG9zZVRvTm9ydGhdLm1pZEFuZ2xlID4gZGF0YVBvaW50RU8ubWlkQW5nbGUpXG5cdFx0XHRcdFx0Zmlyc3REUENsb3NlVG9Ob3J0aCA9IGo7XG5cblx0XHRcdFx0bm9EUE5lYXJOb3J0aFBvbGUrKztcblx0XHRcdH1cblxuXG5cdFx0XHRpZiAobWlkQW5nbGUgPiAoTWF0aC5QSSAvIDIpICYmIG1pZEFuZ2xlIDw9ICgzICogTWF0aC5QSSAvIDIpKVxuXHRcdFx0XHRkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID0gXCJsZWZ0XCI7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgPSBcInJpZ2h0XCI7XG5cblx0XHRcdC8vZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHQgPSBqLnRvU3RyaW5nKCkgKyBcIjsgXCIgKyBkYXRhUG9pbnQueS50b1N0cmluZygpICsgXCI7IFwiICsgbWlkQW5nbGUudG9TdHJpbmcoKSArIFwiOyBqdW5rXCI7XG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrID0gbmV3IFRleHRCbG9jayhfdGhpcy5wbG90QXJlYS5jdHgsIHtcblx0XHRcdFx0Zm9udFNpemU6IGRhdGFQb2ludEVPLmluZGV4TGFiZWxGb250U2l6ZSwgZm9udEZhbWlseTogZGF0YVBvaW50RU8uaW5kZXhMYWJlbEZvbnRGYW1pbHksIGZvbnRDb2xvcjogZGF0YVBvaW50RU8uaW5kZXhMYWJlbEZvbnRDb2xvcixcblx0XHRcdFx0Zm9udFN0eWxlOiBkYXRhUG9pbnRFTy5pbmRleExhYmVsRm9udFN0eWxlLCBmb250V2VpZ2h0OiBkYXRhUG9pbnRFTy5pbmRleExhYmVsRm9udFdlaWdodCxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBcImxlZnRcIixcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBkYXRhUG9pbnRFTy5pbmRleExhYmVsQmFja2dyb3VuZENvbG9yLFxuXHRcdFx0XHRtYXhXaWR0aDogZGF0YVBvaW50RU8uaW5kZXhMYWJlbE1heFdpZHRoLCBtYXhIZWlnaHQ6IGRhdGFQb2ludEVPLmluZGV4TGFiZWxXcmFwID8gZGF0YVBvaW50RU8uaW5kZXhMYWJlbEZvbnRTaXplICogNSA6IGRhdGFQb2ludEVPLmluZGV4TGFiZWxGb250U2l6ZSAqIDEuNSxcblx0XHRcdFx0dGV4dDogZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHQsXG5cdFx0XHRcdHBhZGRpbmc6IDAsXG5cdFx0XHRcdC8vdGV4dEJhc2VsaW5lOiBkYXRhUG9pbnRFTy5pbmRleExhYmVsQmFja2dyb3VuZENvbG9yID8gXCJtaWRkbGVcIiA6IFwidG9wXCJcblx0XHRcdFx0dGV4dEJhc2VsaW5lOiBcInRvcFwiXG5cdFx0XHR9KTtcblxuXHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5tZWFzdXJlVGV4dCgpO1xuXG5cdFx0XHQvL2RhdGFQb2ludC5sYWJlbFdpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KGoudG9TdHJpbmcoKSArIFwiOyBcIiArIGRhdGFQb2ludC5sYWJlbCkud2lkdGg7XG5cblx0XHRcdC8vY29uc29sZS5sb2coZGF0YVBvaW50LmxhYmVsKTtcblx0XHR9XG5cblx0XHR2YXIgbm9PZkRQVG9SaWdodE9mU291dGhQb2xlID0gMDtcblx0XHR2YXIgbm9PZkRQVG9MZWZ0T2ZOb3J0aFBvbGUgPSAwO1xuXHRcdHZhciBrZWVwU2FtZURpcmVjdGlvbiA9IGZhbHNlOyAvLyBvbmNlIGEgZGF0YVBvaW50J3MgaGVtaXNwaGVyZSBpcyBjaGFuZ2VkLCBvdGhlcnMgc2hvdWxkIGZvbGxvdyB0aGUgc2FtZSBzbyB0aGF0IHRoZXJlIGFyZSBubyBsYWJlcyBuZWFyIHBvbGUgcG9pbnRpbmcgaW4gb3Bwb3NpdGUgZGlyZWN0aW9uLlxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGRhdGFQb2ludHMubGVuZ3RoOyBqKyspIHtcblxuXHRcdFx0dmFyIGRhdGFQb2ludEVPID0gZGF0YVBvaW50RU9zWyhmaXJzdERQQ2xvc2VUb1NvdXRoICsgaikgJSBkYXRhUG9pbnRzLmxlbmd0aF07XG5cblx0XHRcdGlmIChub0RQTmVhclNvdXRoUG9sZSA+IDEgJiYgZGF0YVBvaW50RU8ubWlkQW5nbGUgPiAoTWF0aC5QSSAvIDIpIC0gcG9sZUFuZ2x1bGFyRGlzdGFuY2UgJiYgZGF0YVBvaW50RU8ubWlkQW5nbGUgPCAoTWF0aC5QSSAvIDIpICsgcG9sZUFuZ2x1bGFyRGlzdGFuY2UpIHtcblxuXHRcdFx0XHRpZiAobm9PZkRQVG9SaWdodE9mU291dGhQb2xlIDw9IG5vRFBOZWFyU291dGhQb2xlIC8gMiAmJiAha2VlcFNhbWVEaXJlY3Rpb24pIHtcblx0XHRcdFx0XHRkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID0gXCJyaWdodFwiO1xuXHRcdFx0XHRcdG5vT2ZEUFRvUmlnaHRPZlNvdXRoUG9sZSsrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgPSBcImxlZnRcIjtcblx0XHRcdFx0XHRrZWVwU2FtZURpcmVjdGlvbiA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRrZWVwU2FtZURpcmVjdGlvbiA9IGZhbHNlO1xuXHRcdGZvciAoaiA9IDA7IGogPCBkYXRhUG9pbnRzLmxlbmd0aDsgaisrKSB7XG5cblx0XHRcdHZhciBkYXRhUG9pbnRFTyA9IGRhdGFQb2ludEVPc1soZmlyc3REUENsb3NlVG9Ob3J0aCArIGopICUgZGF0YVBvaW50cy5sZW5ndGhdO1xuXG5cdFx0XHQvL2lmIChkYXRhUG9pbnQuaGVtaXNwaGVyZSA9IFwicmlnaHRcIilcblx0XHRcdC8vXHRicmVhaztcblxuXHRcdFx0aWYgKG5vRFBOZWFyTm9ydGhQb2xlID4gMSAmJiBkYXRhUG9pbnRFTy5taWRBbmdsZSA+ICgzICogTWF0aC5QSSAvIDIpIC0gcG9sZUFuZ2x1bGFyRGlzdGFuY2UgJiYgZGF0YVBvaW50RU8ubWlkQW5nbGUgPCAoMyAqIE1hdGguUEkgLyAyKSArIHBvbGVBbmdsdWxhckRpc3RhbmNlKSB7XG5cblx0XHRcdFx0aWYgKG5vT2ZEUFRvTGVmdE9mTm9ydGhQb2xlIDw9IG5vRFBOZWFyTm9ydGhQb2xlIC8gMiAmJiAha2VlcFNhbWVEaXJlY3Rpb24pIHtcblx0XHRcdFx0XHRkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID0gXCJsZWZ0XCI7XG5cdFx0XHRcdFx0bm9PZkRQVG9MZWZ0T2ZOb3J0aFBvbGUrKztcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID0gXCJyaWdodFwiO1xuXHRcdFx0XHRcdGtlZXBTYW1lRGlyZWN0aW9uID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fS8vRW5kIG9mIGluaXRMYWJlbHMoKVxuXG5cdGZ1bmN0aW9uIHJlbmRlckxhYmVscygpIHtcblxuXHRcdHZhciBjdHggPSBfdGhpcy5wbG90QXJlYS5jdHg7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IFwiYmxhY2tcIjtcblx0XHRjdHguc3Ryb2tlU3R5bGUgPSBcImdyZXlcIjtcblx0XHR2YXIgZm9udFNpemUgPSAxNjtcblx0XHQvL2N0eC5mb250ID0gZm9udFNpemUgKyBcInB4IEFyaWFsXCI7XG5cdFx0Y3R4LnRleHRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG5cdFx0Y3R4LmxpbmVKb2luID0gXCJyb3VuZFwiO1xuXHRcdHZhciBpID0gMCwgaiA9IDA7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGRhdGFQb2ludEVPID0gZGF0YVBvaW50RU9zW2ldO1xuXG5cdFx0XHRpZiAoIWRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55IC09IGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMjtcblxuXHRcdFx0dmFyIHhPZmZzZXQgPSAwO1xuXG5cdFx0XHRpZiAoZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA9PT0gXCJsZWZ0XCIpIHtcblx0XHRcdFx0dmFyIHhPZmZzZXQgPSBkYXRhU2VyaWVzLmluZGV4TGFiZWxQbGFjZW1lbnQgIT09IFwiaW5zaWRlXCIgPyAtKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sud2lkdGggKyBpbmRleExhYmVsTGluZUVkZ2VMZW5ndGgpIDogLWRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sud2lkdGggLyAyO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHZhciB4T2Zmc2V0ID0gZGF0YVNlcmllcy5pbmRleExhYmVsUGxhY2VtZW50ICE9PSBcImluc2lkZVwiID8gaW5kZXhMYWJlbExpbmVFZGdlTGVuZ3RoIDogLWRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sud2lkdGggLyAyO1xuXHRcdFx0fVxuXG5cdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnggKz0geE9mZnNldDtcblx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sucmVuZGVyKHRydWUpO1xuXHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay54IC09IHhPZmZzZXQ7XG5cblx0XHRcdC8vaWYgKGkgPCA0KVxuXHRcdFx0Ly9cdGN1c3RvbVByb21wdChpICsgXCI7IFwiICsgY2VudGVyLnkgKyBcIjsgXCIgKyBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkudG9GaXhlZCgyKSk7XG5cblx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSArPSBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDI7XG5cblx0XHRcdGlmIChkYXRhUG9pbnRFTy5pbmRleExhYmVsUGxhY2VtZW50ICE9PSBcImluc2lkZVwiKSB7XG5cdFx0XHRcdHZhciBpbmRleExhYmVsTGluZVN0YXJ0WCA9IGRhdGFQb2ludEVPLmNlbnRlci54ICsgb3V0ZXJSYWRpdXMgKiBNYXRoLmNvcyhkYXRhUG9pbnRFTy5taWRBbmdsZSk7XG5cdFx0XHRcdHZhciBpbmRleExhYmVsTGluZVN0YXJ0WSA9IGRhdGFQb2ludEVPLmNlbnRlci55ICsgb3V0ZXJSYWRpdXMgKiBNYXRoLnNpbihkYXRhUG9pbnRFTy5taWRBbmdsZSk7XG5cblx0XHRcdFx0Ly9jdHguc3Ryb2tlU3R5bGUgPSBkYXRhUG9pbnRzW2ldLmNvbG9yID8gZGF0YVBvaW50c1tpXS5jb2xvciA6IGRhdGFTZXJpZXMuX2NvbG9yU2V0W2kgJSBkYXRhU2VyaWVzLl9jb2xvclNldC5sZW5ndGhdO1xuXHRcdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBkYXRhUG9pbnRFTy5pbmRleExhYmVsTGluZUNvbG9yO1xuXHRcdFx0XHRjdHgubGluZVdpZHRoID0gZGF0YVBvaW50RU8uaW5kZXhMYWJlbExpbmVUaGlja25lc3M7XG5cblx0XHRcdFx0aWYgKGN0eC5zZXRMaW5lRGFzaCkge1xuXHRcdFx0XHRcdGN0eC5zZXRMaW5lRGFzaChnZXRMaW5lRGFzaEFycmF5KGRhdGFQb2ludEVPLmluZGV4TGFiZWxMaW5lRGFzaFR5cGUsIGRhdGFQb2ludEVPLmluZGV4TGFiZWxMaW5lVGhpY2tuZXNzKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL2N0eC5saW5lV2lkdGggPSA0O1xuXHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdGN0eC5tb3ZlVG8oaW5kZXhMYWJlbExpbmVTdGFydFgsIGluZGV4TGFiZWxMaW5lU3RhcnRZKTtcblx0XHRcdFx0Y3R4LmxpbmVUbyhkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLngsIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSk7XG5cdFx0XHRcdGN0eC5saW5lVG8oZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay54ICsgKGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgPT09IFwibGVmdFwiID8gLWluZGV4TGFiZWxMaW5lRWRnZUxlbmd0aCA6IGluZGV4TGFiZWxMaW5lRWRnZUxlbmd0aCksIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSk7XG5cdFx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHRcdFx0Ly9jdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRcdC8vd2luZG93LmFsZXJ0KFwiY29udGluZT8/XCIpO1xuXHRcdFx0XHQvL2FuaW1hdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0Y3R4LmxpbmVKb2luID0gXCJtaXRlclwiO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFuaW1hdGUoZnJhY3Rpb25Db21wbGV0ZSkge1xuXG5cdFx0dmFyIGN0eCA9IF90aGlzLnBsb3RBcmVhLmN0eDtcblxuXHRcdGN0eC5jbGVhclJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0XHRjdHguZmlsbFN0eWxlID0gX3RoaXMuYmFja2dyb3VuZENvbG9yO1xuXHRcdGN0eC5maWxsUmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXG5cdFx0dmFyIG1heEFuZ2xlID0gZGF0YVBvaW50RU9zWzBdLnN0YXJ0QW5nbGUgKyAoMiAqIE1hdGguUEkgKiBmcmFjdGlvbkNvbXBsZXRlKTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHR2YXIgc3RhcnRBbmdsZSA9IGkgPT09IDAgPyBkYXRhUG9pbnRFT3NbaV0uc3RhcnRBbmdsZSA6IGVuZEFuZ2xlO1xuXHRcdFx0dmFyIGVuZEFuZ2xlID0gc3RhcnRBbmdsZSArIChkYXRhUG9pbnRFT3NbaV0uZW5kQW5nbGUgLSBkYXRhUG9pbnRFT3NbaV0uc3RhcnRBbmdsZSk7XG5cblx0XHRcdHZhciBzaG91bGRCcmVhayA9IGZhbHNlO1xuXG5cdFx0XHRpZiAoZW5kQW5nbGUgPiBtYXhBbmdsZSkge1xuXHRcdFx0XHRlbmRBbmdsZSA9IG1heEFuZ2xlO1xuXHRcdFx0XHRzaG91bGRCcmVhayA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBjb2xvciA9IGRhdGFQb2ludHNbaV0uY29sb3IgPyBkYXRhUG9pbnRzW2ldLmNvbG9yIDogZGF0YVNlcmllcy5fY29sb3JTZXRbaSAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cblx0XHRcdGlmIChlbmRBbmdsZSA+IHN0YXJ0QW5nbGUpXG5cdFx0XHRcdGRyYXdTZWdtZW50KF90aGlzLnBsb3RBcmVhLmN0eCwgZGF0YVBvaW50RU9zW2ldLmNlbnRlciwgZGF0YVBvaW50RU9zW2ldLnJhZGl1cywgY29sb3IsIGRhdGFTZXJpZXMudHlwZSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGRhdGFTZXJpZXMuZmlsbE9wYWNpdHksIGRhdGFQb2ludEVPc1tpXS5wZXJjZW50SW5uZXJSYWRpdXMpO1xuXG5cdFx0XHRpZiAoc2hvdWxkQnJlYWspXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGV4cGxvZGVUb2dnbGUoZnJhY3Rpb25Db21wbGV0ZSkge1xuXG5cdFx0dmFyIGN0eCA9IF90aGlzLnBsb3RBcmVhLmN0eDtcblxuXHRcdGN0eC5jbGVhclJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0XHRjdHguZmlsbFN0eWxlID0gX3RoaXMuYmFja2dyb3VuZENvbG9yO1xuXHRcdGN0eC5maWxsUmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdHZhciBzdGFydEFuZ2xlID0gZGF0YVBvaW50RU9zW2ldLnN0YXJ0QW5nbGU7XG5cdFx0XHR2YXIgZW5kQW5nbGUgPSBkYXRhUG9pbnRFT3NbaV0uZW5kQW5nbGU7XG5cblx0XHRcdGlmIChlbmRBbmdsZSA+IHN0YXJ0QW5nbGUpIHtcblxuXG5cdFx0XHRcdHZhciBvZmZzZXRYID0gKG91dGVyUmFkaXVzICogLjA3ICogTWF0aC5jb3MoZGF0YVBvaW50RU9zW2ldLm1pZEFuZ2xlKSk7XG5cdFx0XHRcdHZhciBvZmZzZXRZID0gKG91dGVyUmFkaXVzICogLjA3ICogTWF0aC5zaW4oZGF0YVBvaW50RU9zW2ldLm1pZEFuZ2xlKSk7XG5cdFx0XHRcdHZhciBpc0luVHJhbnNpdGlvbiA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmV4cGxvZGVkKSB7XG5cdFx0XHRcdFx0aWYgKE1hdGguYWJzKGRhdGFQb2ludEVPc1tpXS5jZW50ZXIueCAtIChjZW50ZXIueCArIG9mZnNldFgpKSA+IDAuMDAwMDAwMDAxIHx8IE1hdGguYWJzKGRhdGFQb2ludEVPc1tpXS5jZW50ZXIueSAtIChjZW50ZXIueSArIG9mZnNldFkpKSA+IDAuMDAwMDAwMDAxKSB7XG5cblx0XHRcdFx0XHRcdGRhdGFQb2ludEVPc1tpXS5jZW50ZXIueCA9IGNlbnRlci54ICsgb2Zmc2V0WCAqIGZyYWN0aW9uQ29tcGxldGU7XG5cdFx0XHRcdFx0XHRkYXRhUG9pbnRFT3NbaV0uY2VudGVyLnkgPSBjZW50ZXIueSArIG9mZnNldFkgKiBmcmFjdGlvbkNvbXBsZXRlO1xuXG5cdFx0XHRcdFx0XHRpc0luVHJhbnNpdGlvbiA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKE1hdGguYWJzKGRhdGFQb2ludEVPc1tpXS5jZW50ZXIueCAtIGNlbnRlci54KSA+IDAgfHwgTWF0aC5hYnMoZGF0YVBvaW50RU9zW2ldLmNlbnRlci55IC0gY2VudGVyLnkpID4gMCkge1xuXHRcdFx0XHRcdGRhdGFQb2ludEVPc1tpXS5jZW50ZXIueCA9IGNlbnRlci54ICsgb2Zmc2V0WCAqICgxIC0gZnJhY3Rpb25Db21wbGV0ZSk7XG5cdFx0XHRcdFx0ZGF0YVBvaW50RU9zW2ldLmNlbnRlci55ID0gY2VudGVyLnkgKyBvZmZzZXRZICogKDEgLSBmcmFjdGlvbkNvbXBsZXRlKTtcblxuXHRcdFx0XHRcdGlzSW5UcmFuc2l0aW9uID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc0luVHJhbnNpdGlvbikge1xuXHRcdFx0XHRcdHZhciBlbnRyeSA9IHtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGVudHJ5LmRhdGFTZXJpZXMgPSBkYXRhU2VyaWVzO1xuXHRcdFx0XHRcdGVudHJ5LmRhdGFQb2ludCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXTtcblx0XHRcdFx0XHRlbnRyeS5pbmRleCA9IGk7XG5cdFx0XHRcdFx0X3RoaXMuX3Rvb2xUaXAuaGlnaGxpZ2h0T2JqZWN0cyhbZW50cnldKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBjb2xvciA9IGRhdGFQb2ludHNbaV0uY29sb3IgPyBkYXRhUG9pbnRzW2ldLmNvbG9yIDogZGF0YVNlcmllcy5fY29sb3JTZXRbaSAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cblx0XHRcdFx0ZHJhd1NlZ21lbnQoX3RoaXMucGxvdEFyZWEuY3R4LCBkYXRhUG9pbnRFT3NbaV0uY2VudGVyLCBkYXRhUG9pbnRFT3NbaV0ucmFkaXVzLCBjb2xvciwgZGF0YVNlcmllcy50eXBlLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgZGF0YVNlcmllcy5maWxsT3BhY2l0eSwgZGF0YVBvaW50RU9zW2ldLnBlcmNlbnRJbm5lclJhZGl1cyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly93aW5kb3cuYWxlcnQoXCJuZXh0Pz9cIik7XG5cdFx0cmVuZGVyTGFiZWxzKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBhcmVEYXRhUG9pbnRzVG9vQ2xvc2UoZmlyc3QsIHNlY29uZCkge1xuXG5cdFx0dmFyIGxhYmVsMSA9IHtcblx0XHRcdHgxOiBmaXJzdC5pbmRleExhYmVsVGV4dEJsb2NrLngsIHkxOiBmaXJzdC5pbmRleExhYmVsVGV4dEJsb2NrLnkgLSBmaXJzdC5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIsIHgyOiBmaXJzdC5pbmRleExhYmVsVGV4dEJsb2NrLnggKyBmaXJzdC5pbmRleExhYmVsVGV4dEJsb2NrLndpZHRoLCB5MjogZmlyc3QuaW5kZXhMYWJlbFRleHRCbG9jay55ICsgZmlyc3QuaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyXG5cdFx0fTtcblx0XHR2YXIgbGFiZWwyID0ge1xuXHRcdFx0eDE6IHNlY29uZC5pbmRleExhYmVsVGV4dEJsb2NrLngsIHkxOiBzZWNvbmQuaW5kZXhMYWJlbFRleHRCbG9jay55IC0gc2Vjb25kLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMiwgeDI6IHNlY29uZC5pbmRleExhYmVsVGV4dEJsb2NrLnggKyBzZWNvbmQuaW5kZXhMYWJlbFRleHRCbG9jay53aWR0aCwgeTI6IHNlY29uZC5pbmRleExhYmVsVGV4dEJsb2NrLnkgKyBzZWNvbmQuaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyXG5cdFx0fTtcblxuXHRcdGlmIChsYWJlbDEueDIgPCBsYWJlbDIueDEgLSBpbmRleExhYmVsTGluZUVkZ2VMZW5ndGggfHwgbGFiZWwxLngxID4gbGFiZWwyLngyICsgaW5kZXhMYWJlbExpbmVFZGdlTGVuZ3RoIHx8IGxhYmVsMS55MSA+IGxhYmVsMi55MiArIGluZGV4TGFiZWxMaW5lRWRnZUxlbmd0aCB8fCBsYWJlbDEueTIgPCBsYWJlbDIueTEgLSBpbmRleExhYmVsTGluZUVkZ2VMZW5ndGgpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldFZlcnRpY2FsRGlzdGFuY2VCZXR3ZWVuTGFiZWxzKGZpcnN0LCBzZWNvbmQpIHtcblxuXHRcdHZhciBkaXN0YW5jZSA9IDA7XG5cdFx0dmFyIGxhYmVsMSA9IHtcblx0XHRcdHk6IGZpcnN0LmluZGV4TGFiZWxUZXh0QmxvY2sueSwgeTE6IGZpcnN0LmluZGV4TGFiZWxUZXh0QmxvY2sueSAtIGZpcnN0LmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMiwgeTI6IGZpcnN0LmluZGV4TGFiZWxUZXh0QmxvY2sueSArIGZpcnN0LmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMlxuXHRcdH07XG5cdFx0dmFyIGxhYmVsMiA9IHtcblx0XHRcdHk6IHNlY29uZC5pbmRleExhYmVsVGV4dEJsb2NrLnksIHkxOiBzZWNvbmQuaW5kZXhMYWJlbFRleHRCbG9jay55IC0gc2Vjb25kLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMiwgeTI6IHNlY29uZC5pbmRleExhYmVsVGV4dEJsb2NrLnkgKyBzZWNvbmQuaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyXG5cdFx0fTtcblxuXHRcdGlmIChsYWJlbDIueSA+IGxhYmVsMS55KSB7XG5cdFx0XHRkaXN0YW5jZSA9IGxhYmVsMi55MSAtIGxhYmVsMS55Mjtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRkaXN0YW5jZSA9IGxhYmVsMS55MSAtIGxhYmVsMi55Mjtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGlzdGFuY2U7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXROZXh0TGFiZWxJbmRleChjdXJyZW50TGFiZWxJbmRleCkge1xuXHRcdHZhciBuZXh0TGFiZWxJbmRleCA9IG51bGw7XG5cblx0XHRmb3IgKHZhciBpID0gMTsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0bmV4dExhYmVsSW5kZXggPSAoY3VycmVudExhYmVsSW5kZXggKyBpICsgZGF0YVBvaW50RU9zLmxlbmd0aCkgJSBkYXRhUG9pbnRFT3MubGVuZ3RoO1xuXG5cdFx0XHRpZiAoZGF0YVBvaW50RU9zW25leHRMYWJlbEluZGV4XS5oZW1pc3BoZXJlICE9PSBkYXRhUG9pbnRFT3NbY3VycmVudExhYmVsSW5kZXhdLmhlbWlzcGhlcmUpIHtcblx0XHRcdFx0bmV4dExhYmVsSW5kZXggPSBudWxsO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKChkYXRhUG9pbnRFT3NbbmV4dExhYmVsSW5kZXhdLmluZGV4TGFiZWxUZXh0KSAmJiAobmV4dExhYmVsSW5kZXggIT09IGN1cnJlbnRMYWJlbEluZGV4KVxuXHRcdFx0XHQmJiAoKGdldFZlcnRpY2FsRGlzdGFuY2VCZXR3ZWVuTGFiZWxzKGRhdGFQb2ludEVPc1tuZXh0TGFiZWxJbmRleF0sIGRhdGFQb2ludEVPc1tjdXJyZW50TGFiZWxJbmRleF0pIDwgMCkgfHwgKGRhdGFQb2ludEVPc1tjdXJyZW50TGFiZWxJbmRleF0uaGVtaXNwaGVyZSA9PT0gXCJyaWdodFwiID8gZGF0YVBvaW50RU9zW25leHRMYWJlbEluZGV4XS5pbmRleExhYmVsVGV4dEJsb2NrLnkgPj0gZGF0YVBvaW50RU9zW2N1cnJlbnRMYWJlbEluZGV4XS5pbmRleExhYmVsVGV4dEJsb2NrLnkgOiBkYXRhUG9pbnRFT3NbbmV4dExhYmVsSW5kZXhdLmluZGV4TGFiZWxUZXh0QmxvY2sueSA8PSBkYXRhUG9pbnRFT3NbY3VycmVudExhYmVsSW5kZXhdLmluZGV4TGFiZWxUZXh0QmxvY2sueSkpKVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRuZXh0TGFiZWxJbmRleCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5leHRMYWJlbEluZGV4O1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UHJldmlvdXNMYWJlbEluZGV4KGN1cnJlbnRMYWJlbEluZGV4KSB7XG5cdFx0dmFyIHByZXZMYWJlbEluZGV4ID0gbnVsbDtcblxuXHRcdGZvciAodmFyIGkgPSAxOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRwcmV2TGFiZWxJbmRleCA9IChjdXJyZW50TGFiZWxJbmRleCAtIGkgKyBkYXRhUG9pbnRFT3MubGVuZ3RoKSAlIGRhdGFQb2ludEVPcy5sZW5ndGg7XG5cblx0XHRcdGlmIChkYXRhUG9pbnRFT3NbcHJldkxhYmVsSW5kZXhdLmhlbWlzcGhlcmUgIT09IGRhdGFQb2ludEVPc1tjdXJyZW50TGFiZWxJbmRleF0uaGVtaXNwaGVyZSkge1xuXHRcdFx0XHRwcmV2TGFiZWxJbmRleCA9IG51bGw7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoKGRhdGFQb2ludEVPc1twcmV2TGFiZWxJbmRleF0uaW5kZXhMYWJlbFRleHQpICYmIChkYXRhUG9pbnRFT3NbcHJldkxhYmVsSW5kZXhdLmhlbWlzcGhlcmUgPT09IGRhdGFQb2ludEVPc1tjdXJyZW50TGFiZWxJbmRleF0uaGVtaXNwaGVyZSkgJiYgKHByZXZMYWJlbEluZGV4ICE9PSBjdXJyZW50TGFiZWxJbmRleClcblx0XHRcdFx0JiYgKChnZXRWZXJ0aWNhbERpc3RhbmNlQmV0d2VlbkxhYmVscyhkYXRhUG9pbnRFT3NbcHJldkxhYmVsSW5kZXhdLCBkYXRhUG9pbnRFT3NbY3VycmVudExhYmVsSW5kZXhdKSA8IDApIHx8IChkYXRhUG9pbnRFT3NbY3VycmVudExhYmVsSW5kZXhdLmhlbWlzcGhlcmUgPT09IFwicmlnaHRcIiA/IGRhdGFQb2ludEVPc1twcmV2TGFiZWxJbmRleF0uaW5kZXhMYWJlbFRleHRCbG9jay55IDw9IGRhdGFQb2ludEVPc1tjdXJyZW50TGFiZWxJbmRleF0uaW5kZXhMYWJlbFRleHRCbG9jay55IDogZGF0YVBvaW50RU9zW3ByZXZMYWJlbEluZGV4XS5pbmRleExhYmVsVGV4dEJsb2NrLnkgPj0gZGF0YVBvaW50RU9zW2N1cnJlbnRMYWJlbEluZGV4XS5pbmRleExhYmVsVGV4dEJsb2NrLnkpKSlcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0cHJldkxhYmVsSW5kZXggPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByZXZMYWJlbEluZGV4O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVQb3NpdGlvbkxhYmVscyhkYXRhUG9pbnRJbmRleCwgb2Zmc2V0KSB7XG5cdFx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0XHR2YXIgYWN0dWFsT2Zmc2V0ID0gMDtcblxuXHRcdC8vdmFyIGxhYmVsWU1pbiA9IDI7XG5cdFx0Ly92YXIgbGFiZWxZTWF4ID0gY3R4LmNhbnZhcy5oZWlnaHQgLSAyO1xuXHRcdC8vdmFyIGxhYmVsWU1pbiA9IF90aGlzLnBsb3RBcmVhLmN0eC5jYW52YXMuaGVpZ2h0IC8gMiAtIGluZGV4TGFiZWxSYWRpdXMgKiAxO1xuXHRcdC8vdmFyIGxhYmVsWU1heCA9IF90aGlzLnBsb3RBcmVhLmN0eC5jYW52YXMuaGVpZ2h0IC8gMiArIGluZGV4TGFiZWxSYWRpdXMgKiAxO1xuXG5cdFx0dmFyIGxhYmVsWU1pbiA9IGNlbnRlci55IC0gaW5kZXhMYWJlbFJhZGl1cyAqIDE7XG5cdFx0dmFyIGxhYmVsWU1heCA9IGNlbnRlci55ICsgaW5kZXhMYWJlbFJhZGl1cyAqIDE7XG5cblx0XHQvL2NvbnNvbGUubG9nKHRvdGFsUmVjdXJzaW9ucyk7XG5cblx0XHRpZiAoZGF0YVBvaW50SW5kZXggPj0gMCAmJiBkYXRhUG9pbnRJbmRleCA8IGRhdGFQb2ludHMubGVuZ3RoKSB7XG5cblx0XHRcdHZhciBkYXRhUG9pbnRFTyA9IGRhdGFQb2ludEVPc1tkYXRhUG9pbnRJbmRleF07XG5cdFx0XHQvL2lmIChkYXRhUG9pbnRJbmRleCA9PT0gMClcblx0XHRcdC8vXHRjdXN0b21Qcm9tcHQobGFiZWxZTWluLnRvRml4ZWQoMikgKyBcIjsgXCIgKyBsYWJlbFlNYXgudG9GaXhlZCgyKSArIFwiOyBcIiArIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueS50b0ZpeGVkKDIpKTtcblxuXHRcdFx0Ly8gSWYgbGFiZWwgaXMgYWxyZWFkeSBvdXRzaWRlIHRoZSBib3VuZHMsIHJldHVyblxuXHRcdFx0aWYgKChvZmZzZXQgPCAwICYmIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSA8IGxhYmVsWU1pbikgfHwgKG9mZnNldCA+IDAgJiYgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55ID4gbGFiZWxZTWF4KSlcblx0XHRcdFx0cmV0dXJuIDA7XG5cblxuXHRcdFx0dmFyIHZhbGlkT2Zmc2V0ID0gb2Zmc2V0O1xuXG5cblx0XHRcdC8vQ2hlY2sgaWYgdGhlIG9mZnNldCBmYWxscyB3aXRoaW4gdGhlIGJvdW5kcyAobGFiZWxZTWluLCBsYWJlbFlNYXgsIHRhbmdlbnRpYWwgYm91bmRzKSB3aXRob3V0IGNvbnNpZGVyaW5nIG92ZXJsYXAuIEVsc2UgdXNlIHRoZSBjbG9zZXN0IG9mZnNldCB0aGF0IGlzIHBvc3NpYmxlIC0gdmFsaWRPZmZzZXQuXG5cdFx0XHR7XG5cdFx0XHRcdHZhciBkaXN0RnJvbUluZGV4TGluZVN0YXJ0ID0gMDtcblx0XHRcdFx0dmFyIGluZGV4TGFiZWxMaW5lU3RhcnRYID0gMDtcblx0XHRcdFx0dmFyIGluZGV4TGFiZWxMaW5lU3RhcnRZID0gMDtcblx0XHRcdFx0dmFyIGluZGV4TGFiZWxBbmdsZSA9IDA7XG5cdFx0XHRcdHZhciBpbmRleExhYmVsQW5nbGVXaGVuVGFuZ2VudCA9IDA7XG5cblx0XHRcdFx0aWYgKHZhbGlkT2Zmc2V0IDwgMCkge1xuXHRcdFx0XHRcdGlmIChkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgLSBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIgPiBsYWJlbFlNaW4gJiYgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55IC0gZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyICsgdmFsaWRPZmZzZXQgPCBsYWJlbFlNaW4pXG5cdFx0XHRcdFx0XHR2YWxpZE9mZnNldCA9IC0obGFiZWxZTWluIC0gKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSAtIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMiArIHZhbGlkT2Zmc2V0KSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSArIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMiA8IGxhYmVsWU1pbiAmJiBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgKyBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIgKyB2YWxpZE9mZnNldCA+IGxhYmVsWU1heClcblx0XHRcdFx0XHRcdHZhbGlkT2Zmc2V0ID0gKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSArIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMiArIHZhbGlkT2Zmc2V0KSAtIGxhYmVsWU1heDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBuZXdsYWJlbFkgPSBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgKyB2YWxpZE9mZnNldDtcblx0XHRcdFx0dmFyIG5ld2xhYmVsWCA9IDA7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgPT09IFwicmlnaHRcIikge1xuXHRcdFx0XHRcdG5ld2xhYmVsWCA9IGNlbnRlci54ICsgTWF0aC5zcXJ0KE1hdGgucG93KGluZGV4TGFiZWxSYWRpdXMsIDIpIC0gTWF0aC5wb3cobmV3bGFiZWxZIC0gY2VudGVyLnksIDIpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0bmV3bGFiZWxYID0gY2VudGVyLnggLSBNYXRoLnNxcnQoTWF0aC5wb3coaW5kZXhMYWJlbFJhZGl1cywgMikgLSBNYXRoLnBvdyhuZXdsYWJlbFkgLSBjZW50ZXIueSwgMikpO1xuXG5cblx0XHRcdFx0aW5kZXhMYWJlbExpbmVTdGFydFggPSBjZW50ZXIueCArIG91dGVyUmFkaXVzICogTWF0aC5jb3MoZGF0YVBvaW50RU8ubWlkQW5nbGUpO1xuXHRcdFx0XHRpbmRleExhYmVsTGluZVN0YXJ0WSA9IGNlbnRlci55ICsgb3V0ZXJSYWRpdXMgKiBNYXRoLnNpbihkYXRhUG9pbnRFTy5taWRBbmdsZSk7XG5cblx0XHRcdFx0ZGlzdEZyb21JbmRleExpbmVTdGFydCA9IE1hdGguc3FydChNYXRoLnBvdyhuZXdsYWJlbFggLSBpbmRleExhYmVsTGluZVN0YXJ0WCwgMikgKyBNYXRoLnBvdyhuZXdsYWJlbFkgLSBpbmRleExhYmVsTGluZVN0YXJ0WSwgMikpO1xuXG5cdFx0XHRcdGluZGV4TGFiZWxBbmdsZVdoZW5UYW5nZW50ID0gTWF0aC5hY29zKG91dGVyUmFkaXVzIC8gaW5kZXhMYWJlbFJhZGl1cyk7XG5cblx0XHRcdFx0Ly9pbmRleExhYmVsQW5nbGUgPSBNYXRoLmFjb3MoKG91dGVyUmFkaXVzICogb3V0ZXJSYWRpdXMgKyBkaXN0RnJvbUluZGV4TGluZVN0YXJ0ICogZGlzdEZyb21JbmRleExpbmVTdGFydCAtIGluZGV4TGFiZWxSYWRpdXMgKiBpbmRleExhYmVsUmFkaXVzKSAvICgyICogb3V0ZXJSYWRpdXMgKiBkaXN0RnJvbUluZGV4TGluZVN0YXJ0KSk7XG5cdFx0XHRcdGluZGV4TGFiZWxBbmdsZSA9IE1hdGguYWNvcygoaW5kZXhMYWJlbFJhZGl1cyAqIGluZGV4TGFiZWxSYWRpdXMgKyBvdXRlclJhZGl1cyAqIG91dGVyUmFkaXVzIC0gZGlzdEZyb21JbmRleExpbmVTdGFydCAqIGRpc3RGcm9tSW5kZXhMaW5lU3RhcnQpIC8gKDIgKiBvdXRlclJhZGl1cyAqIGluZGV4TGFiZWxSYWRpdXMpKTtcblxuXHRcdFx0XHRpZiAoaW5kZXhMYWJlbEFuZ2xlIDwgaW5kZXhMYWJlbEFuZ2xlV2hlblRhbmdlbnQpIHtcblx0XHRcdFx0XHR2YWxpZE9mZnNldCA9IG5ld2xhYmVsWSAtIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueTtcblx0XHRcdFx0XHQvL2RhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueCA9IG5ld2xhYmVsWDtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblxuXHRcdFx0XHRcdHZhbGlkT2Zmc2V0ID0gMDtcblxuXHRcdFx0XHRcdC8vZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay54ID0gbmV3bGFiZWxYO1xuXG5cdFx0XHRcdFx0Ly9JbmRleCBMaW5lIGlzIG92ZXJsYXBwaW5nIHRoZSBwaWUuIFNvIGxldHMgZmluZCBvdXQgdGhlIHBvaW50IHdoZXJlIGluZGV4bGluZSBiZWNvbWVzIGEgdGFuZ2VudC5cblxuXHRcdFx0XHRcdC8vZGlzdEZyb21JbmRleExpbmVTdGFydCA9IE1hdGguc3FydChpbmRleExhYmVsUmFkaXVzICogaW5kZXhMYWJlbFJhZGl1cyAtIG91dGVyUmFkaXVzICogb3V0ZXJSYWRpdXMpO1xuXHRcdFx0XHRcdC8vLy9kaXN0RnJvbUluZGV4TGluZVN0YXJ0ICo9IG9mZnNldCA8IDAgPyAtMSA6IDE7XG5cdFx0XHRcdFx0Ly8vL2luZGV4TGFiZWxBbmdsZSA9IE1hdGguYWNvcygoaW5kZXhMYWJlbFJhZGl1cyAqIGluZGV4TGFiZWxSYWRpdXMgKyBvdXRlclJhZGl1cyAqIG91dGVyUmFkaXVzIC0gZGlzdEZyb21JbmRleExpbmVTdGFydCAqIGRpc3RGcm9tSW5kZXhMaW5lU3RhcnQpIC8gKDIgKiBvdXRlclJhZGl1cyAqIGluZGV4TGFiZWxSYWRpdXMpKTtcblx0XHRcdFx0XHQvL2luZGV4TGFiZWxBbmdsZSA9IE1hdGguYXRhbjIoZGlzdEZyb21JbmRleExpbmVTdGFydCwgb3V0ZXJSYWRpdXMpO1xuXG5cdFx0XHRcdFx0Ly9uZXdsYWJlbFggPSBjZW50ZXIueCArIGluZGV4TGFiZWxSYWRpdXMgKiBNYXRoLmNvcyhpbmRleExhYmVsQW5nbGUpO1xuXHRcdFx0XHRcdC8vbmV3bGFiZWxZID0gY2VudGVyLnkgKyBpbmRleExhYmVsUmFkaXVzICogTWF0aC5zaW4oaW5kZXhMYWJlbEFuZ2xlKTtcblxuXHRcdFx0XHRcdC8vYWN0dWFsT2Zmc2V0ID0gbmV3bGFiZWxZIC0gZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55O1xuXG5cdFx0XHRcdFx0Ly9kYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgPSBuZXdsYWJlbFk7XG5cdFx0XHRcdFx0Ly9kYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnggPSBuZXdsYWJlbFg7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdC8vdmFyIHRlbXBJbmRleCA9IChkYXRhUG9pbnRJbmRleCArIGRhdGFQb2ludEVPcy5sZW5ndGggLSAxKSAlIGRhdGFQb2ludEVPcy5sZW5ndGg7XG5cblx0XHRcdC8vdmFyIHByZXZEYXRhUG9pbnRJbmRleCA9IGRhdGFQb2ludEVPc1t0ZW1wSW5kZXhdLmhlbWlzcGhlcmUgPT09IGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgPyB0ZW1wSW5kZXggOiBudWxsO1xuXG5cdFx0XHR2YXIgcHJldkRhdGFQb2ludEluZGV4ID0gZ2V0UHJldmlvdXNMYWJlbEluZGV4KGRhdGFQb2ludEluZGV4KTtcblxuXHRcdFx0Ly90ZW1wSW5kZXggPSAoZGF0YVBvaW50SW5kZXggKyBkYXRhUG9pbnRFT3MubGVuZ3RoICsgMSkgJSBkYXRhUG9pbnRFT3MubGVuZ3RoO1xuXG5cdFx0XHQvL3ZhciBuZXh0RGF0YVBvaW50SW5kZXggPSBkYXRhUG9pbnRFT3NbdGVtcEluZGV4XS5oZW1pc3BoZXJlID09PSBkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID8gdGVtcEluZGV4IDogbnVsbDtcblxuXHRcdFx0dmFyIG5leHREYXRhUG9pbnRJbmRleCA9IGdldE5leHRMYWJlbEluZGV4KGRhdGFQb2ludEluZGV4KTtcblxuXHRcdFx0dmFyIG90aGVyZGF0YVBvaW50RU8sIG90aGVyRGF0YVBvaW50SW5kZXgsIGRpc3RhbmNlRnJvbU90aGVyTGFiZWw7XG5cdFx0XHR2YXIgb3RoZXJEYXRhUG9pbnRPZmZzZXQgPSAwO1xuXHRcdFx0dmFyIG90aGVyRGF0YVBvaW50QWN0dWFsT2Zmc2V0ID0gMDtcblxuXG5cdFx0XHRpZiAodmFsaWRPZmZzZXQgPCAwKSB7XG5cblx0XHRcdFx0b3RoZXJEYXRhUG9pbnRJbmRleCA9IGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgPT09IFwicmlnaHRcIiA/IHByZXZEYXRhUG9pbnRJbmRleCA6IG5leHREYXRhUG9pbnRJbmRleDtcblxuXHRcdFx0XHRhY3R1YWxPZmZzZXQgPSB2YWxpZE9mZnNldDtcblxuXHRcdFx0XHRpZiAob3RoZXJEYXRhUG9pbnRJbmRleCAhPT0gbnVsbCkge1xuXG5cdFx0XHRcdFx0Ly9pZiAoZGF0YVBvaW50SW5kZXggPCA0KVxuXHRcdFx0XHRcdC8vXHRjdXN0b21Qcm9tcHQoXCJ2YWxpZDogXCIgKyB2YWxpZE9mZnNldCk7XG5cblx0XHRcdFx0XHR2YXIgdGVtcE9mZnNldCA9IC12YWxpZE9mZnNldDtcblxuXHRcdFx0XHRcdHZhciBkaXN0YW5jZUZyb21PdGhlckxhYmVsID0gKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSAtIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMikgLSAoZGF0YVBvaW50RU9zW290aGVyRGF0YVBvaW50SW5kZXhdLmluZGV4TGFiZWxUZXh0QmxvY2sueSArIGRhdGFQb2ludEVPc1tvdGhlckRhdGFQb2ludEluZGV4XS5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIpO1xuXG5cdFx0XHRcdFx0aWYgKGRpc3RhbmNlRnJvbU90aGVyTGFiZWwgLSB0ZW1wT2Zmc2V0IDwgbWluRGlzdGFuY2VCZXR3ZWVuTGFiZWxzKSB7XG5cdFx0XHRcdFx0XHRvdGhlckRhdGFQb2ludE9mZnNldCA9IC10ZW1wT2Zmc2V0O1xuXHRcdFx0XHRcdFx0Ly90b3RhbFJlY3Vyc2lvbnMrKztcblx0XHRcdFx0XHRcdG90aGVyRGF0YVBvaW50QWN0dWFsT2Zmc2V0ID0gcmVQb3NpdGlvbkxhYmVscyhvdGhlckRhdGFQb2ludEluZGV4LCBvdGhlckRhdGFQb2ludE9mZnNldCwgcmVjdXJzaW9uQ291bnQgKyAxKTtcblxuXHRcdFx0XHRcdFx0Ly9pZiAoZGF0YVBvaW50SW5kZXggPCA0KVxuXHRcdFx0XHRcdFx0Ly9cdGN1c3RvbVByb21wdChkYXRhUG9pbnRJbmRleCArIFwiOyBcIiArIFwib2Zmc2V0OiBcIiArIG90aGVyRGF0YVBvaW50T2Zmc2V0KTtcblxuXG5cdFx0XHRcdFx0XHRpZiAoK290aGVyRGF0YVBvaW50QWN0dWFsT2Zmc2V0LnRvRml4ZWQocHJlY2lzaW9uKSA+ICtvdGhlckRhdGFQb2ludE9mZnNldC50b0ZpeGVkKHByZWNpc2lvbikpIHtcblxuXHRcdFx0XHRcdFx0XHRpZiAoZGlzdGFuY2VGcm9tT3RoZXJMYWJlbCA+IG1pbkRpc3RhbmNlQmV0d2VlbkxhYmVscylcblx0XHRcdFx0XHRcdFx0XHRhY3R1YWxPZmZzZXQgPSAtKGRpc3RhbmNlRnJvbU90aGVyTGFiZWwgLSBtaW5EaXN0YW5jZUJldHdlZW5MYWJlbHMpO1xuXHRcdFx0XHRcdFx0XHRcdC8vZWxzZVxuXHRcdFx0XHRcdFx0XHRcdC8vXHRhY3R1YWxPZmZzZXQgPSAwO1xuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0YWN0dWFsT2Zmc2V0ID0gLSh0ZW1wT2Zmc2V0IC0gKG90aGVyRGF0YVBvaW50QWN0dWFsT2Zmc2V0IC0gb3RoZXJEYXRhUG9pbnRPZmZzZXQpKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly9pZiAoZGF0YVBvaW50SW5kZXggPCA0KVxuXHRcdFx0XHRcdFx0Ly9cdGN1c3RvbVByb21wdChcImFjdHVhbDogXCIgKyBhY3R1YWxPZmZzZXQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAodmFsaWRPZmZzZXQgPiAwKSB7XG5cblx0XHRcdFx0b3RoZXJEYXRhUG9pbnRJbmRleCA9IGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgPT09IFwicmlnaHRcIiA/IG5leHREYXRhUG9pbnRJbmRleCA6IHByZXZEYXRhUG9pbnRJbmRleDtcblxuXHRcdFx0XHRhY3R1YWxPZmZzZXQgPSB2YWxpZE9mZnNldDtcblxuXHRcdFx0XHRpZiAob3RoZXJEYXRhUG9pbnRJbmRleCAhPT0gbnVsbCkge1xuXG5cdFx0XHRcdFx0dmFyIHRlbXBPZmZzZXQgPSB2YWxpZE9mZnNldDtcblxuXHRcdFx0XHRcdHZhciBkaXN0YW5jZUZyb21PdGhlckxhYmVsID0gKGRhdGFQb2ludEVPc1tvdGhlckRhdGFQb2ludEluZGV4XS5pbmRleExhYmVsVGV4dEJsb2NrLnkgLSBkYXRhUG9pbnRFT3Nbb3RoZXJEYXRhUG9pbnRJbmRleF0uaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyKSAtIChkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgKyBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIpO1xuXG5cdFx0XHRcdFx0aWYgKGRpc3RhbmNlRnJvbU90aGVyTGFiZWwgLSB0ZW1wT2Zmc2V0IDwgbWluRGlzdGFuY2VCZXR3ZWVuTGFiZWxzKSB7XG5cdFx0XHRcdFx0XHRvdGhlckRhdGFQb2ludE9mZnNldCA9IHRlbXBPZmZzZXQ7XG5cdFx0XHRcdFx0XHQvL3RvdGFsUmVjdXJzaW9ucysrO1xuXHRcdFx0XHRcdFx0b3RoZXJEYXRhUG9pbnRBY3R1YWxPZmZzZXQgPSByZVBvc2l0aW9uTGFiZWxzKG90aGVyRGF0YVBvaW50SW5kZXgsIG90aGVyRGF0YVBvaW50T2Zmc2V0LCByZWN1cnNpb25Db3VudCArIDEpO1xuXG5cdFx0XHRcdFx0XHRpZiAoK290aGVyRGF0YVBvaW50QWN0dWFsT2Zmc2V0LnRvRml4ZWQocHJlY2lzaW9uKSA8ICtvdGhlckRhdGFQb2ludE9mZnNldC50b0ZpeGVkKHByZWNpc2lvbikpIHtcblxuXHRcdFx0XHRcdFx0XHRpZiAoZGlzdGFuY2VGcm9tT3RoZXJMYWJlbCA+IG1pbkRpc3RhbmNlQmV0d2VlbkxhYmVscylcblx0XHRcdFx0XHRcdFx0XHRhY3R1YWxPZmZzZXQgPSBkaXN0YW5jZUZyb21PdGhlckxhYmVsIC0gbWluRGlzdGFuY2VCZXR3ZWVuTGFiZWxzO1xuXHRcdFx0XHRcdFx0XHRcdC8vZWxzZVxuXHRcdFx0XHRcdFx0XHRcdC8vXHRhY3R1YWxPZmZzZXQgPSAwO1xuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0YWN0dWFsT2Zmc2V0ID0gdGVtcE9mZnNldCAtIChvdGhlckRhdGFQb2ludE9mZnNldCAtIG90aGVyRGF0YVBvaW50QWN0dWFsT2Zmc2V0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vaWYgKCEoZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55ICsgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyICsgYWN0dWFsT2Zmc2V0IDwgbGFiZWxZTWF4KSkge1xuXHRcdFx0XHQvL1x0aWYgKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSArIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMiA8IGxhYmVsWU1heCkge1xuXHRcdFx0XHQvL1x0XHRhY3R1YWxPZmZzZXQgPSBsYWJlbFlNYXggLSAoZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55ICsgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyKTtcblx0XHRcdFx0Ly9cdH1cblx0XHRcdFx0Ly9cdGVsc2Uge1xuXHRcdFx0XHQvL1x0XHRhY3R1YWxPZmZzZXQgPSAwO1xuXHRcdFx0XHQvL1x0fVxuXHRcdFx0XHQvL31cblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWN0dWFsT2Zmc2V0KSB7XG5cblx0XHRcdFx0dmFyIG5ld0xhYmVsWSA9IGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSArIGFjdHVhbE9mZnNldDtcblxuXG5cblxuXHRcdFx0XHR2YXIgbmV3TGFiZWxYID0gMDtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA9PT0gXCJyaWdodFwiKSB7XG5cdFx0XHRcdFx0bmV3TGFiZWxYID0gY2VudGVyLnggKyBNYXRoLnNxcnQoTWF0aC5wb3coaW5kZXhMYWJlbFJhZGl1cywgMikgLSBNYXRoLnBvdyhuZXdMYWJlbFkgLSBjZW50ZXIueSwgMikpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRuZXdMYWJlbFggPSBjZW50ZXIueCAtIE1hdGguc3FydChNYXRoLnBvdyhpbmRleExhYmVsUmFkaXVzLCAyKSAtIE1hdGgucG93KG5ld0xhYmVsWSAtIGNlbnRlci55LCAyKSk7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludEVPLm1pZEFuZ2xlID4gKE1hdGguUEkgLyAyKSAtIHBvbGVBbmdsdWxhckRpc3RhbmNlICYmIGRhdGFQb2ludEVPLm1pZEFuZ2xlIDwgKE1hdGguUEkgLyAyKSArIHBvbGVBbmdsdWxhckRpc3RhbmNlKSB7XG5cblx0XHRcdFx0XHR2YXIgcHJldkRQSW5kZXggPSAoZGF0YVBvaW50SW5kZXggLSAxICsgZGF0YVBvaW50RU9zLmxlbmd0aCkgJSBkYXRhUG9pbnRFT3MubGVuZ3RoO1xuXHRcdFx0XHRcdHZhciBwcmV2RFAgPSBkYXRhUG9pbnRFT3NbcHJldkRQSW5kZXhdO1xuXHRcdFx0XHRcdHZhciBuZXh0RFAgPSBkYXRhUG9pbnRFT3NbKGRhdGFQb2ludEluZGV4ICsgMSArIGRhdGFQb2ludEVPcy5sZW5ndGgpICUgZGF0YVBvaW50RU9zLmxlbmd0aF07XG5cblx0XHRcdFx0XHRpZiAoZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA9PT0gXCJsZWZ0XCIgJiYgcHJldkRQLmhlbWlzcGhlcmUgPT09IFwicmlnaHRcIiAmJiBuZXdMYWJlbFggPiBwcmV2RFAuaW5kZXhMYWJlbFRleHRCbG9jay54KSB7XG5cdFx0XHRcdFx0XHRuZXdMYWJlbFggPSBwcmV2RFAuaW5kZXhMYWJlbFRleHRCbG9jay54IC0gMTU7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID09PSBcInJpZ2h0XCIgJiYgbmV4dERQLmhlbWlzcGhlcmUgPT09IFwibGVmdFwiICYmIG5ld0xhYmVsWCA8IG5leHREUC5pbmRleExhYmVsVGV4dEJsb2NrLngpIHtcblx0XHRcdFx0XHRcdG5ld0xhYmVsWCA9IG5leHREUC5pbmRleExhYmVsVGV4dEJsb2NrLnggKyAxNTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoZGF0YVBvaW50RU8ubWlkQW5nbGUgPiAoMyAqIE1hdGguUEkgLyAyKSAtIHBvbGVBbmdsdWxhckRpc3RhbmNlICYmIGRhdGFQb2ludEVPLm1pZEFuZ2xlIDwgKDMgKiBNYXRoLlBJIC8gMikgKyBwb2xlQW5nbHVsYXJEaXN0YW5jZSkge1xuXG5cdFx0XHRcdFx0dmFyIHByZXZEUEluZGV4ID0gKGRhdGFQb2ludEluZGV4IC0gMSArIGRhdGFQb2ludEVPcy5sZW5ndGgpICUgZGF0YVBvaW50RU9zLmxlbmd0aDtcblx0XHRcdFx0XHR2YXIgcHJldkRQID0gZGF0YVBvaW50RU9zW3ByZXZEUEluZGV4XTtcblx0XHRcdFx0XHR2YXIgbmV4dERQID0gZGF0YVBvaW50RU9zWyhkYXRhUG9pbnRJbmRleCArIDEgKyBkYXRhUG9pbnRFT3MubGVuZ3RoKSAlIGRhdGFQb2ludEVPcy5sZW5ndGhdO1xuXG5cdFx0XHRcdFx0aWYgKGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgPT09IFwicmlnaHRcIiAmJiBwcmV2RFAuaGVtaXNwaGVyZSA9PT0gXCJsZWZ0XCIgJiYgbmV3TGFiZWxYIDwgcHJldkRQLmluZGV4TGFiZWxUZXh0QmxvY2sueCkge1xuXHRcdFx0XHRcdFx0bmV3TGFiZWxYID0gcHJldkRQLmluZGV4TGFiZWxUZXh0QmxvY2sueCArIDE1O1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA9PT0gXCJsZWZ0XCIgJiYgbmV4dERQLmhlbWlzcGhlcmUgPT09IFwicmlnaHRcIiAmJiBuZXdMYWJlbFggPiBuZXh0RFAuaW5kZXhMYWJlbFRleHRCbG9jay54KSB7XG5cdFx0XHRcdFx0XHRuZXdMYWJlbFggPSBuZXh0RFAuaW5kZXhMYWJlbFRleHRCbG9jay54IC0gMTU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly9pZiAoYWN0dWFsT2Zmc2V0IDwgMCAmJiBkYXRhUG9pbnRJbmRleCA8IDQpXG5cdFx0XHRcdC8vXHRjdXN0b21Qcm9tcHQoYWN0dWFsT2Zmc2V0LnRvRml4ZWQoMikgKyBcIjsgXCIgKyBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkudG9GaXhlZCgyKSArIFwiOyBcIiArIG5ld0xhYmVsWS50b0ZpeGVkKDIpKTtcblxuXHRcdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgPSBuZXdMYWJlbFk7XG5cblx0XHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay54ID0gbmV3TGFiZWxYO1xuXG5cdFx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxBbmdsZSA9IE1hdGguYXRhbjIoKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSAtIGNlbnRlci55KSwgKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueCAtIGNlbnRlci54KSk7XG5cblx0XHRcdH1cblxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFjdHVhbE9mZnNldDtcblx0fVxuXG5cblx0ZnVuY3Rpb24gcG9zaXRpb25MYWJlbHMoKSB7XG5cdFx0dmFyIGN0eCA9IF90aGlzLnBsb3RBcmVhLmN0eDtcblxuXHRcdGN0eC5maWxsU3R5bGUgPSBcImdyZXlcIjtcblx0XHRjdHguc3Ryb2tlU3R5bGUgPSBcImdyZXlcIjtcblx0XHR2YXIgZm9udFNpemUgPSAxNjtcblx0XHRjdHguZm9udCA9IGZvbnRTaXplICsgXCJweCBBcmlhbFwiO1xuXHRcdGN0eC50ZXh0QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuXHRcdHZhciBpID0gMCwgaiA9IDA7XG5cdFx0dmFyIGRlbHRhUiA9IDA7XG5cblx0XHR2YXIgcmVzaXplRmxhZyA9IHRydWU7XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgMTAgJiYgKGogPCAxIHx8IGRlbHRhUiA+IDApIDsgaisrKSB7XG5cblx0XHRcdGlmIChkYXRhU2VyaWVzLnJhZGl1cyB8fCAoIWRhdGFTZXJpZXMucmFkaXVzICYmIHR5cGVvZiBkYXRhU2VyaWVzLmlubmVyUmFkaXVzICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhU2VyaWVzLmlubmVyUmFkaXVzICE9PSBudWxsICYmIG91dGVyUmFkaXVzIC0gZGVsdGFSIDw9IGlubmVyUmFkaXVzKSlcblx0XHRcdFx0cmVzaXplRmxhZyA9IGZhbHNlO1xuXG5cdFx0XHRpZiAocmVzaXplRmxhZylcblx0XHRcdG91dGVyUmFkaXVzIC09IGRlbHRhUjtcblxuXHRcdFx0ZGVsdGFSID0gMDtcblxuXHRcdFx0aWYgKGRhdGFTZXJpZXMuaW5kZXhMYWJlbFBsYWNlbWVudCAhPT0gXCJpbnNpZGVcIikge1xuXG5cdFx0XHRcdHZhciBpbmRleExhYmVsUmFkaXVzID0gb3V0ZXJSYWRpdXMgKiBpbmRleExhYmVsUmFkaXVzVG9SYWRpdXNSYXRpbztcblxuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBkYXRhUG9pbnRFTyA9IGRhdGFQb2ludEVPc1tpXTtcblxuXHRcdFx0XHRcdGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueCA9IGNlbnRlci54ICsgaW5kZXhMYWJlbFJhZGl1cyAqIE1hdGguY29zKGRhdGFQb2ludEVPLm1pZEFuZ2xlKTtcblx0XHRcdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgPSBjZW50ZXIueSArIGluZGV4TGFiZWxSYWRpdXMgKiBNYXRoLnNpbihkYXRhUG9pbnRFTy5taWRBbmdsZSk7XG5cblx0XHRcdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsQW5nbGUgPSBkYXRhUG9pbnRFTy5taWRBbmdsZTtcblx0XHRcdFx0XHRkYXRhUG9pbnRFTy5yYWRpdXMgPSBvdXRlclJhZGl1cztcblx0XHRcdFx0XHRkYXRhUG9pbnRFTy5wZXJjZW50SW5uZXJSYWRpdXMgPSBwZXJjZW50SW5uZXJSYWRpdXM7XG5cdFx0XHRcdFx0Ly9kYXRhUG9pbnRFTy5pbmRleExhYmVsRm9udFNpemUgPSBkYXRhUG9pbnQuaW5kZXhMYWJlbEZvbnRTaXplID8gZGF0YVBvaW50LmluZGV4TGFiZWxGb250U2l6ZSA6IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvbnRTaXplO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGN1cnJlbnREYXRhUG9pbnQsIG5leHREYXRhUG9pbnQ7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0XHR2YXIgZGF0YVBvaW50RU8gPSBkYXRhUG9pbnRFT3NbaV07XG5cdFx0XHRcdFx0Ly9kYXRhUG9pbnRFTy5sYWJcblx0XHRcdFx0XHQvL3Jlc2V0QW5pbWF0aW9uRnJhbWUoKTtcblx0XHRcdFx0XHQvL2FuaW1hdGUoKTtcblx0XHRcdFx0XHQvL3JlbmRlckxhYmVscygpO1xuXG5cdFx0XHRcdFx0Ly92YXIgcHJldkRhdGFQb2ludEluZGV4ID0gKGkgLSAxICsgZGF0YVBvaW50RU9zLmxlbmd0aCkgJSBkYXRhUG9pbnRFT3MubGVuZ3RoO1xuXG5cdFx0XHRcdFx0Ly92YXIgbmV4dERhdGFQb2ludEluZGV4ID0gKGkgKyAxICsgZGF0YVBvaW50RU9zLmxlbmd0aCkgJSBkYXRhUG9pbnRFT3MubGVuZ3RoO1xuXHRcdFx0XHRcdC8vbmV4dERhdGFQb2ludEluZGV4ID0gZGF0YVBvaW50RU9zW25leHREYXRhUG9pbnRJbmRleF0uaGVtaXNwaGVyZSA9PT0gZGF0YVBvaW50RU8uaGVtaXNwaGVyZSAmJiBuZXh0RGF0YVBvaW50SW5kZXggIT09IGkgPyBuZXh0RGF0YVBvaW50SW5kZXggOiBudWxsO1xuXG5cdFx0XHRcdFx0dmFyIG5leHREYXRhUG9pbnRJbmRleCA9IGdldE5leHRMYWJlbEluZGV4KGkpO1xuXG5cdFx0XHRcdFx0aWYgKG5leHREYXRhUG9pbnRJbmRleCA9PT0gbnVsbClcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0Y3VycmVudERhdGFQb2ludCA9IGRhdGFQb2ludEVPc1tpXTtcblx0XHRcdFx0XHRuZXh0RGF0YVBvaW50ID0gZGF0YVBvaW50RU9zW25leHREYXRhUG9pbnRJbmRleF07XG5cblxuXHRcdFx0XHRcdHZhciBkaXN0YW5jZUZyb21OZXh0TGFiZWwgPSAwO1xuXG5cdFx0XHRcdFx0Ly9pZiAoZGF0YVBvaW50RU8uaGVtaXNwaGVyZSA9PT0gXCJyaWdodFwiKVxuXHRcdFx0XHRcdC8vXHRkaXN0YW5jZUZyb21OZXh0TGFiZWwgPSAobmV4dERhdGFQb2ludC5pbmRleExhYmVsVGV4dEJsb2NrLnkgLSBuZXh0RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMikgLSAoY3VycmVudERhdGFQb2ludC5pbmRleExhYmVsVGV4dEJsb2NrLnkgKyBjdXJyZW50RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMikgLSBtaW5EaXN0YW5jZUJldHdlZW5MYWJlbHM7XG5cdFx0XHRcdFx0Ly9lbHNlXG5cdFx0XHRcdFx0Ly9cdGRpc3RhbmNlRnJvbU5leHRMYWJlbCA9IChjdXJyZW50RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2sueSAtIGN1cnJlbnREYXRhUG9pbnQuaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyKSAtIChuZXh0RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2sueSArIG5leHREYXRhUG9pbnQuaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyKSAtIG1pbkRpc3RhbmNlQmV0d2VlbkxhYmVscztcblxuXHRcdFx0XHRcdGRpc3RhbmNlRnJvbU5leHRMYWJlbCA9IGdldFZlcnRpY2FsRGlzdGFuY2VCZXR3ZWVuTGFiZWxzKGN1cnJlbnREYXRhUG9pbnQsIG5leHREYXRhUG9pbnQpIC0gbWluRGlzdGFuY2VCZXR3ZWVuTGFiZWxzO1xuXG5cblx0XHRcdFx0XHRpZiAoZGlzdGFuY2VGcm9tTmV4dExhYmVsIDwgMCkge1xuXG5cdFx0XHRcdFx0XHR2YXIgZGF0YVBvaW50c0Fib3ZlID0gMDtcblx0XHRcdFx0XHRcdHZhciBkYXRhUG9pbnRzQmVsb3cgPSAwO1xuXHRcdFx0XHRcdFx0Ly92YXIgaW5kZXhMYWJlbEFuZ2xlV2hlblRhbmdlbnQgPSBNYXRoLmFjb3Mob3V0ZXJSYWRpdXMgLyBpbmRleExhYmVsUmFkaXVzKSAvIE1hdGguUEkgKiAxODA7XG5cblxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaysrKSB7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGsgPT09IGkpXG5cdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHRcdFx0Ly9pZiAoZGF0YVBvaW50RU9zW2tdLmhlbWlzcGhlcmUgIT09IGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgfHwgTWF0aC5hYnMoZGF0YVBvaW50RU9zW2tdLm1pZEFuZ2xlIC0gZGF0YVBvaW50RU8ubWlkQW5nbGUpID4gMzApXG5cdFx0XHRcdFx0XHRcdC8vXHRjb250aW51ZTtcblx0XHRcdFx0XHRcdFx0Ly9pZiAoZGF0YVBvaW50RU9zW2tdLmhlbWlzcGhlcmUgIT09IGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgfHwgTWF0aC5hYnMoZGF0YVBvaW50RU9zW2tdLmxhYmVsQW5nbGUgLSBkYXRhUG9pbnRFTy5pbmRleExhYmVsQW5nbGUpID4gMzApXG5cdFx0XHRcdFx0XHRcdC8vXHRjb250aW51ZTtcblx0XHRcdFx0XHRcdFx0Ly9pZiAoZGF0YVBvaW50RU9zW2tdLmhlbWlzcGhlcmUgIT09IGRhdGFQb2ludEVPLmhlbWlzcGhlcmUgfHwgTWF0aC5hYnMoZGF0YVBvaW50RU9zW2tdLm1pZEFuZ2xlIC0gZGF0YVBvaW50RU8ubWlkQW5nbGUpID4gaW5kZXhMYWJlbEFuZ2xlV2hlblRhbmdlbnQpXG5cdFx0XHRcdFx0XHRcdC8vXHRjb250aW51ZTtcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGFQb2ludEVPc1trXS5oZW1pc3BoZXJlICE9PSBkYXRhUG9pbnRFTy5oZW1pc3BoZXJlKVxuXHRcdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhUG9pbnRFT3Nba10uaW5kZXhMYWJlbFRleHRCbG9jay55IDwgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55KVxuXHRcdFx0XHRcdFx0XHRcdGRhdGFQb2ludHNBYm92ZSsrO1xuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YVBvaW50c0JlbG93Kys7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vdmFyIHVwV2FyZHNPZmZzZXQgPSAoZGlzdGFuY2VGcm9tTmV4dExhYmVsKSAvIGRhdGFQb2ludHMubGVuZ3RoICogKGRhdGFQb2ludHNCZWxvdyk7XG5cdFx0XHRcdFx0XHR2YXIgdXBXYXJkc09mZnNldCA9IChkaXN0YW5jZUZyb21OZXh0TGFiZWwpIC8gKGRhdGFQb2ludHNBYm92ZSArIGRhdGFQb2ludHNCZWxvdyB8fCAxKSAqIChkYXRhUG9pbnRzQmVsb3cpO1xuXHRcdFx0XHRcdFx0dmFyIGRvd25XYXJkc09mZnNldCA9IC0xICogKGRpc3RhbmNlRnJvbU5leHRMYWJlbCAtIHVwV2FyZHNPZmZzZXQpO1xuXG5cdFx0XHRcdFx0XHR2YXIgYWN0dWFsVXB3YXJkT2Zmc2V0ID0gMDtcblx0XHRcdFx0XHRcdHZhciBhY3R1YWxEb3dud2FyZE9mZnNldCA9IDA7XG5cblx0XHRcdFx0XHRcdGlmIChkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID09PSBcInJpZ2h0XCIpIHtcblx0XHRcdFx0XHRcdFx0YWN0dWFsVXB3YXJkT2Zmc2V0ID0gcmVQb3NpdGlvbkxhYmVscyhpLCB1cFdhcmRzT2Zmc2V0KTtcblxuXHRcdFx0XHRcdFx0XHQvL2lmIChpIDwgNCAmJiBhY3R1YWxEb3dud2FyZE9mZnNldCAhPT0gdXBXYXJkc09mZnNldClcblx0XHRcdFx0XHRcdFx0Ly9cdGN1c3RvbVByb21wdChpICsgXCI7IFwiICsgdXBXYXJkc09mZnNldC50b0ZpeGVkKDIpICsgXCI7IFwiICsgYWN0dWFsVXB3YXJkT2Zmc2V0LnRvRml4ZWQoMikpO1xuXG5cblx0XHRcdFx0XHRcdFx0ZG93bldhcmRzT2Zmc2V0ID0gLTEgKiAoZGlzdGFuY2VGcm9tTmV4dExhYmVsIC0gYWN0dWFsVXB3YXJkT2Zmc2V0KTtcblxuXHRcdFx0XHRcdFx0XHRhY3R1YWxEb3dud2FyZE9mZnNldCA9IHJlUG9zaXRpb25MYWJlbHMobmV4dERhdGFQb2ludEluZGV4LCBkb3duV2FyZHNPZmZzZXQpO1xuXG5cdFx0XHRcdFx0XHRcdC8vd2luZG93LmFsZXJ0KHR5cGVvZiArZG93bldhcmRzT2Zmc2V0LnRvRml4ZWQocHJlY2lzaW9uKSk7XG5cdFx0XHRcdFx0XHRcdC8vU2V0dGluZyBwcmVjaXNpb24gdG8gbWFrZSBzdXJlIHRoYXQgdGhleSBkb24ndCBiZWNvbWUgbm90IGVxdWFsIGJlY29tZSBvZiBtaW5vciBkaWZmZXJlbmNlcyAtIGxpa2UgYSBkaWZmZXJlbmNlIG9mIC4wMDAwMDFcblx0XHRcdFx0XHRcdFx0aWYgKCthY3R1YWxEb3dud2FyZE9mZnNldC50b0ZpeGVkKHByZWNpc2lvbikgPCArZG93bldhcmRzT2Zmc2V0LnRvRml4ZWQocHJlY2lzaW9uKSAmJiArYWN0dWFsVXB3YXJkT2Zmc2V0LnRvRml4ZWQocHJlY2lzaW9uKSA8PSArdXBXYXJkc09mZnNldC50b0ZpeGVkKHByZWNpc2lvbikpXG5cdFx0XHRcdFx0XHRcdFx0cmVQb3NpdGlvbkxhYmVscyhpLCAtKGRvd25XYXJkc09mZnNldCAtIGFjdHVhbERvd253YXJkT2Zmc2V0KSk7XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFjdHVhbFVwd2FyZE9mZnNldCA9IHJlUG9zaXRpb25MYWJlbHMobmV4dERhdGFQb2ludEluZGV4LCB1cFdhcmRzT2Zmc2V0KTtcblxuXHRcdFx0XHRcdFx0XHRkb3duV2FyZHNPZmZzZXQgPSAtMSAqIChkaXN0YW5jZUZyb21OZXh0TGFiZWwgLSBhY3R1YWxVcHdhcmRPZmZzZXQpO1xuXG5cdFx0XHRcdFx0XHRcdGFjdHVhbERvd253YXJkT2Zmc2V0ID0gcmVQb3NpdGlvbkxhYmVscyhpLCBkb3duV2FyZHNPZmZzZXQpO1xuXG5cdFx0XHRcdFx0XHRcdC8vU2V0dGluZyBwcmVjaXNpb24gdG8gbWFrZSBzdXJlIHRoYXQgdGhleSBkb24ndCBiZWNvbWUgbm90IGVxdWFsIGJlY29tZSBvZiBtaW5vciBkaWZmZXJlbmNlcyAtIGxpa2UgYSBkaWZmZXJlbmNlIG9mIC4wMDAwMDFcblx0XHRcdFx0XHRcdFx0aWYgKCthY3R1YWxEb3dud2FyZE9mZnNldC50b0ZpeGVkKHByZWNpc2lvbikgPCArZG93bldhcmRzT2Zmc2V0LnRvRml4ZWQocHJlY2lzaW9uKSAmJiArYWN0dWFsVXB3YXJkT2Zmc2V0LnRvRml4ZWQocHJlY2lzaW9uKSA8PSArdXBXYXJkc09mZnNldC50b0ZpeGVkKHByZWNpc2lvbikpXG5cdFx0XHRcdFx0XHRcdFx0cmVQb3NpdGlvbkxhYmVscyhuZXh0RGF0YVBvaW50SW5kZXgsIC0oZG93bldhcmRzT2Zmc2V0IC0gYWN0dWFsRG93bndhcmRPZmZzZXQpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblxuXHRcdFx0XHRcdC8vcmVzZXRBbmltYXRpb25GcmFtZSgpO1xuXHRcdFx0XHRcdC8vYW5pbWF0ZSgpO1xuXHRcdFx0XHRcdC8vcmVuZGVyTGFiZWxzKCk7XG5cdFx0XHRcdFx0Ly93aW5kb3cuYWxlcnQoXCJuZXh0Pz9cIik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0XHR2YXIgZGF0YVBvaW50RU8gPSBkYXRhUG9pbnRFT3NbaV07XG5cdFx0XHRcdFx0aW5kZXhMYWJlbFJhZGl1cyA9IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJwaWVcIiA/IG91dGVyUmFkaXVzICogLjcgOiBvdXRlclJhZGl1cyAqIC44O1xuXG5cblx0XHRcdFx0XHR2YXIgZHggPSBjZW50ZXIueCArIGluZGV4TGFiZWxSYWRpdXMgKiAoTWF0aC5jb3MoKGRhdGFQb2ludEVPLm1pZEFuZ2xlKSkpO1xuXHRcdFx0XHRcdHZhciBkeSA9IGNlbnRlci55ICsgaW5kZXhMYWJlbFJhZGl1cyAqIChNYXRoLnNpbigoZGF0YVBvaW50RU8ubWlkQW5nbGUpKSk7XG5cblx0XHRcdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnggPSBkeDtcblx0XHRcdFx0XHRkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgPSBkeTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNpemUgUGllIGJhc2VkIG9uIHRoZSBsYWJlbCBsZW5ndGguXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdGRhdGFQb2ludEVPID0gZGF0YVBvaW50RU9zW2ldO1xuXG5cdFx0XHRcdHZhciBzaXplID0gZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5tZWFzdXJlVGV4dCgpO1xuXHRcdFx0XHQvLyBUbyBtYWtlIHN1cmUgdGhhdCBudWxsIHRleHQgb3IgZW1wdHkgc3RyaW5ncyBkb24ndCBhZmZlY3QgdGhlIHJhZGl1cy4gUmVxdWlyZWQgd2hlbiB1c2VyIGlzIG5vdCBzaG93aW5nIGFueSBsYWJlbHNcblx0XHRcdFx0aWYgKHNpemUuaGVpZ2h0ID09PSAwIHx8IHNpemUud2lkdGggPT09IDApXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0dmFyIHhPdmVyZmxvdyA9IDA7XG5cdFx0XHRcdHZhciB4ZHIgPSAwO1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID09PSBcInJpZ2h0XCIpIHtcblx0XHRcdFx0XHR4T3ZlcmZsb3cgPSBwbG90QXJlYS54MiAtIChkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnggKyBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLndpZHRoICsgaW5kZXhMYWJlbExpbmVFZGdlTGVuZ3RoKTtcblx0XHRcdFx0XHR4T3ZlcmZsb3cgKj0gLTE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eE92ZXJmbG93ID0gcGxvdEFyZWEueDEgLSAoZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay54IC0gZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay53aWR0aCAtIGluZGV4TGFiZWxMaW5lRWRnZUxlbmd0aCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHhPdmVyZmxvdyA+IDApIHtcblx0XHRcdFx0XHRpZiAoIXJlc2l6ZUZsYWcgJiYgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHQpIHtcblx0XHRcdFx0XHRcdHZhciBuZXdJbmRleExhYmVsTWF4V2lkdGggPSBkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID09PSBcInJpZ2h0XCIgPyBwbG90QXJlYS54MiAtIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueCA6IGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueCAtIHBsb3RBcmVhLngxO1xuXHRcdFx0XHRcdFx0ZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5tYXhXaWR0aCAqIC4zID4gbmV3SW5kZXhMYWJlbE1heFdpZHRoID8gZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHQgPSBcIlwiIDogZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5tYXhXaWR0aCA9IG5ld0luZGV4TGFiZWxNYXhXaWR0aCAqIC44NTtcblx0XHRcdFx0XHRcdGlmIChkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLm1heFdpZHRoICogLjMgPCBuZXdJbmRleExhYmVsTWF4V2lkdGgpIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueCAtPSBkYXRhUG9pbnRFTy5oZW1pc3BoZXJlID09PSBcInJpZ2h0XCIgPyAyIDogLTI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChNYXRoLmFicyhkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLnkgLSBkYXRhUG9pbnRFTy5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIgLSBjZW50ZXIueSkgPCBvdXRlclJhZGl1c1xuXHRcdFx0XHRcdFx0fHwgTWF0aC5hYnMoZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55ICsgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyIC0gY2VudGVyLnkpIDwgb3V0ZXJSYWRpdXMpIHtcblxuXHRcdFx0XHRcdFx0eGRyID0geE92ZXJmbG93IC8gTWF0aC5hYnMoTWF0aC5jb3MoZGF0YVBvaW50RU8uaW5kZXhMYWJlbEFuZ2xlKSk7XG5cblx0XHRcdFx0XHRcdGlmICh4ZHIgPiA5KVxuXHRcdFx0XHRcdFx0XHR4ZHIgPSB4ZHIgKiAuMztcblxuXHRcdFx0XHRcdFx0aWYgKHhkciA+IGRlbHRhUilcblx0XHRcdFx0XHRcdFx0ZGVsdGFSID0geGRyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciB5T3ZlcmZsb3cgPSAwO1xuXHRcdFx0XHR2YXIgeWRyID0gMDtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50RU8uaW5kZXhMYWJlbEFuZ2xlID4gMCAmJiBkYXRhUG9pbnRFTy5pbmRleExhYmVsQW5nbGUgPCBNYXRoLlBJKSB7XG5cdFx0XHRcdFx0eU92ZXJmbG93ID0gcGxvdEFyZWEueTIgLSAoZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay55ICsgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyICsgNSk7XG5cdFx0XHRcdFx0eU92ZXJmbG93ICo9IC0xO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHlPdmVyZmxvdyA9IHBsb3RBcmVhLnkxIC0gKGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2sueSAtIGRhdGFQb2ludEVPLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMiAtIDUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHlPdmVyZmxvdyA+IDApIHtcblx0XHRcdFx0XHRpZiAoIXJlc2l6ZUZsYWcgJiYgZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHQpIHtcblx0XHRcdFx0XHRcdHZhciBwb3NpdGlvbk11bHRpcGxpZXIgPSBkYXRhUG9pbnRFTy5pbmRleExhYmVsQW5nbGUgPiAwICYmIGRhdGFQb2ludEVPLmluZGV4TGFiZWxBbmdsZSA8IE1hdGguUEkgPyAtMSA6IDE7XG5cdFx0XHRcdFx0XHRpZiAocmVQb3NpdGlvbkxhYmVscyhpLCB5T3ZlcmZsb3cgKiBwb3NpdGlvbk11bHRpcGxpZXIpID09PSAwKVxuXHRcdFx0XHRcdFx0XHRyZVBvc2l0aW9uTGFiZWxzKGksIDIgKiBwb3NpdGlvbk11bHRpcGxpZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoTWF0aC5hYnMoZGF0YVBvaW50RU8uaW5kZXhMYWJlbFRleHRCbG9jay54IC0gY2VudGVyLngpIDwgb3V0ZXJSYWRpdXMpIHtcblxuXHRcdFx0XHRcdFx0eWRyID0geU92ZXJmbG93IC8gTWF0aC5hYnMoTWF0aC5zaW4oZGF0YVBvaW50RU8uaW5kZXhMYWJlbEFuZ2xlKSk7XG5cblx0XHRcdFx0XHRcdGlmICh5ZHIgPiA5KVxuXHRcdFx0XHRcdFx0XHR5ZHIgPSB5ZHIgKiAuMztcblxuXHRcdFx0XHRcdFx0aWYgKHlkciA+IGRlbHRhUilcblx0XHRcdFx0XHRcdFx0ZGVsdGFSID0geWRyO1xuXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gcmVtb3ZlTGFiZWxzRm9yU21hbGxTZWdtZW50cyh0b3RhbE92ZXJsYXAsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSB7XG5cblx0XHRcdFx0dmFyIGRwRU9zID0gW107XG5cdFx0XHRcdHZhciB0b3RhbFJlbW92ZWRMYWJlbEhlaWdodCA9IDA7XG5cblx0XHRcdFx0Zm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IHRydWU7IGkgPSAoaSArIDEgKyBkYXRhUG9pbnRzLmxlbmd0aCkgJSBkYXRhUG9pbnRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGRwRU9zLnB1c2goZGF0YVBvaW50RU9zW2ldKTtcblxuXHRcdFx0XHRcdGlmIChpID09PSBlbmRJbmRleClcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZHBFT3Muc29ydChmdW5jdGlvbiAoZW50cnkxLCBlbnRyeTIpIHtcblx0XHRcdFx0XHRyZXR1cm4gZW50cnkxLnkgLSBlbnRyeTIueTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGRwRU9zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGRwRU8gPSBkcEVPc1tpXTtcblxuXHRcdFx0XHRcdGlmICh0b3RhbFJlbW92ZWRMYWJlbEhlaWdodCA8IHRvdGFsT3ZlcmxhcCAqIC43KSB7XG5cdFx0XHRcdFx0XHR0b3RhbFJlbW92ZWRMYWJlbEhlaWdodCArPSBkcEVPLmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0O1xuXHRcdFx0XHRcdFx0ZHBFTy5pbmRleExhYmVsVGV4dEJsb2NrLnRleHQgPSBcIlwiO1xuXHRcdFx0XHRcdFx0ZHBFTy5pbmRleExhYmVsVGV4dCA9IFwiXCI7XG5cdFx0XHRcdFx0XHRkcEVPLmluZGV4TGFiZWxUZXh0QmxvY2subWVhc3VyZVRleHQoKTtcblx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Ly9yZXNldEFuaW1hdGlvbkZyYW1lKDEpO1xuXHRcdFx0Ly9hbmltYXRlKCk7XG5cdFx0XHQvL3dpbmRvdy5hbGVydChcIm5leHQ/P1wiKTtcblx0XHRcdGZ1bmN0aW9uIHNraXBMYWJlbHMoKSB7XG5cdFx0XHR2YXIgb3ZlcmxhcFN0YXJ0SW5kZXggPSAtMTtcblx0XHRcdHZhciBvdmVybGFwRW5kSW5kZXggPSAtMTtcblx0XHRcdHZhciB0b3RhbE92ZXJsYXAgPSAwO1xuXHRcdFx0XHR2YXIgcmVtb3ZlTGFiZWxzID0gZmFsc2U7XG5cblx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgZGF0YVBvaW50cy5sZW5ndGg7IGsrKykge1xuXHRcdFx0XHRcdHJlbW92ZUxhYmVscyA9IGZhbHNlO1xuXHRcdFx0XHRjdXJyZW50RGF0YVBvaW50ID0gZGF0YVBvaW50RU9zW2tdO1xuXG5cdFx0XHRcdGlmICghY3VycmVudERhdGFQb2ludC5pbmRleExhYmVsVGV4dClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR2YXIgbmV4dExhYmVsSW5kZXggPSBnZXROZXh0TGFiZWxJbmRleChrKTtcblx0XHRcdFx0aWYgKG5leHRMYWJlbEluZGV4ID09PSBudWxsKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHZhciBuZXh0RGF0YVBvaW50ID0gZGF0YVBvaW50RU9zW25leHRMYWJlbEluZGV4XTtcblxuXHRcdFx0XHRkaXN0YW5jZUZyb21OZXh0TGFiZWwgPSAwO1xuXG5cdFx0XHRcdC8vaWYgKG5leHREYXRhUG9pbnQuaW5kZXhMYWJlbFRleHRCbG9jay55ID4gY3VycmVudERhdGFQb2ludC5pbmRleExhYmVsVGV4dEJsb2NrLnkpXG5cdFx0XHRcdC8vXHRkaXN0YW5jZUZyb21OZXh0TGFiZWwgPSAobmV4dERhdGFQb2ludC5pbmRleExhYmVsVGV4dEJsb2NrLnkgLSAobmV4dERhdGFQb2ludC5pbmRleExhYmVsVGV4dEJsb2NrLmhlaWdodCAvIDIpKSAtIChjdXJyZW50RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2sueSArIChjdXJyZW50RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMikpO1xuXHRcdFx0XHQvL2Vsc2Vcblx0XHRcdFx0Ly9cdGRpc3RhbmNlRnJvbU5leHRMYWJlbCA9IChjdXJyZW50RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2sueSAtIChjdXJyZW50RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0QmxvY2suaGVpZ2h0IC8gMikpIC0gKG5leHREYXRhUG9pbnQuaW5kZXhMYWJlbFRleHRCbG9jay55ICsgKG5leHREYXRhUG9pbnQuaW5kZXhMYWJlbFRleHRCbG9jay5oZWlnaHQgLyAyKSk7XG5cblx0XHRcdFx0ZGlzdGFuY2VGcm9tTmV4dExhYmVsID0gZ2V0VmVydGljYWxEaXN0YW5jZUJldHdlZW5MYWJlbHMoY3VycmVudERhdGFQb2ludCwgbmV4dERhdGFQb2ludCk7XG5cblx0XHRcdFx0aWYgKGRpc3RhbmNlRnJvbU5leHRMYWJlbCA8IDAgJiYgYXJlRGF0YVBvaW50c1Rvb0Nsb3NlKGN1cnJlbnREYXRhUG9pbnQsIG5leHREYXRhUG9pbnQpKSB7XG5cdFx0XHRcdFx0XHQvL2lmIChkaXN0YW5jZUZyb21OZXh0TGFiZWwgPCAwICYmIGFyZURhdGFQb2ludHNUb29DbG9zZShjdXJyZW50RGF0YVBvaW50LCBuZXh0RGF0YVBvaW50KSApIHtcblx0XHRcdFx0XHRpZiAob3ZlcmxhcFN0YXJ0SW5kZXggPCAwKVxuXHRcdFx0XHRcdFx0b3ZlcmxhcFN0YXJ0SW5kZXggPSBrO1xuXG5cdFx0XHRcdFx0XHRpZiAobmV4dExhYmVsSW5kZXggIT09IG92ZXJsYXBTdGFydEluZGV4KSB7XG5cdFx0XHRcdFx0XHRvdmVybGFwRW5kSW5kZXggPSBuZXh0TGFiZWxJbmRleDtcblxuXHRcdFx0XHRcdHRvdGFsT3ZlcmxhcCArPSAtZGlzdGFuY2VGcm9tTmV4dExhYmVsO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoayAlIE1hdGgubWF4KGRhdGFQb2ludHMubGVuZ3RoIC8gMTAsIDMpID09PSAwKVxuXHRcdFx0XHRcdFx0XHRyZW1vdmVMYWJlbHMgPSB0cnVlO1xuXG5cdFx0XHRcdFx0Ly9uZXh0RGF0YVBvaW50LmluZGV4TGFiZWxUZXh0ID0gXCJcIjtcblx0XHRcdFx0XHQvL25leHREYXRhUG9pbnQuaW5kZXhMYWJlbFRleHRCbG9jay50ZXh0ID0gXCJcIjtcblx0XHRcdFx0XHQvL25leHREYXRhUG9pbnQuaW5kZXhMYWJlbFRleHRCbG9jay5tZWFzdXJlVGV4dCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRyZW1vdmVMYWJlbHMgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChyZW1vdmVMYWJlbHMpIHtcblxuXHRcdFx0XHRcdFx0aWYgKHRvdGFsT3ZlcmxhcCA+IDAgJiYgb3ZlcmxhcFN0YXJ0SW5kZXggPj0gMCAmJiBvdmVybGFwRW5kSW5kZXggPj0gMCkge1xuXHRcdFx0XHRcdFx0cmVtb3ZlTGFiZWxzRm9yU21hbGxTZWdtZW50cyh0b3RhbE92ZXJsYXAsIG92ZXJsYXBTdGFydEluZGV4LCBvdmVybGFwRW5kSW5kZXgpO1xuXG5cdFx0XHRcdFx0XHRvdmVybGFwU3RhcnRJbmRleCA9IC0xO1xuXHRcdFx0XHRcdFx0b3ZlcmxhcEVuZEluZGV4ID0gLTE7XG5cdFx0XHRcdFx0XHR0b3RhbE92ZXJsYXAgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodG90YWxPdmVybGFwID4gMClcblx0XHRcdFx0cmVtb3ZlTGFiZWxzRm9yU21hbGxTZWdtZW50cyh0b3RhbE92ZXJsYXAsIG92ZXJsYXBTdGFydEluZGV4LCBvdmVybGFwRW5kSW5kZXgpO1xuXHRcdFx0fVxuXG5cdFx0XHRza2lwTGFiZWxzKCk7XG5cblxuXHRcdH1cblx0XHQvL3dpbmRvdy5hbGVydChcIm5leHQ/P1wiKTtcblxuXG5cdFx0Ly9yZXNldEFuaW1hdGlvbkZyYW1lKF90aGlzLmFuaW1hdGlvbkVuYWJsZWQgJiYgX3RoaXMucmVuZGVyQ291bnQgPT09IDAgPyBpc0NhbnZhc1N1cHBvcnRlZCA/IDYwIDogMzAgOiAxKTtcblx0XHQvL2FuaW1hdGUoKTtcblxuXHRcdC8vY29uc29sZS5sb2coXCJ0b3RhbFJlY3Vyc2lvbnM6IFwiICsgdG90YWxSZWN1cnNpb25zKTtcblx0fVxuXG5cblx0dGhpcy5waWVEb3VnaG51dENsaWNrSGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XG5cblx0XHRpZiAoX3RoaXMuaXNBbmltYXRpbmcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgaSA9IGUuZGF0YVBvaW50SW5kZXg7XG5cdFx0dmFyIGRhdGFQb2ludCA9IGUuZGF0YVBvaW50O1xuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcztcblxuXG5cdFx0dmFyIGlkID0gZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbaV07XG5cblx0XHQvL2RhdGFQb2ludEVPID0gX3RoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdO1xuXG5cdFx0aWYgKGRhdGFQb2ludC5leHBsb2RlZClcblx0XHRcdGRhdGFQb2ludC5leHBsb2RlZCA9IGZhbHNlO1xuXHRcdGVsc2Vcblx0XHRcdGRhdGFQb2ludC5leHBsb2RlZCA9IHRydWU7XG5cblxuXHRcdC8vIFNvIHRoYXQgaXQgZG9lc24ndCB0cnkgdG8gZXhwbG9kZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIHNlZ21lbnRcblx0XHRpZiAoZGF0YVNlcmllcy5kYXRhUG9pbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdF90aGlzLl9hbmltYXRvci5hbmltYXRlKDAsIGV4cGxvZGVEdXJhdGlvbiwgZnVuY3Rpb24gKGZyYWN0aW9uQ29tcGxldGUpIHtcblxuXHRcdFx0XHRleHBsb2RlVG9nZ2xlKGZyYWN0aW9uQ29tcGxldGUpO1xuXHRcdFx0XHRyZW5kZXJDaGFydEVsZW1lbnRzSW5QbG90QXJlYSgpO1xuXHRcdFx0XHQvL2NvbnNvbGUubG9nKFwiRXhwbG9kZSBTdGFydFwiKTtcblxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aW5pdExhYmVscygpO1xuXG5cdHBvc2l0aW9uTGFiZWxzKCk7XG5cdHBvc2l0aW9uTGFiZWxzKCk7XG5cdHBvc2l0aW9uTGFiZWxzKCk7XG5cdHBvc2l0aW9uTGFiZWxzKCk7XG5cblx0dGhpcy5kaXNhYmxlVG9vbFRpcCA9IHRydWU7XG5cdHRoaXMuX2FuaW1hdG9yLmFuaW1hdGUoMCwgdGhpcy5hbmltYXRlZFJlbmRlciA/IHRoaXMuYW5pbWF0aW9uRHVyYXRpb24gOiAwLCBmdW5jdGlvbiAoZnJhY3Rpb25Db21wbGV0ZSkge1xuXG5cdFx0YW5pbWF0ZShmcmFjdGlvbkNvbXBsZXRlKTtcblx0XHRyZW5kZXJDaGFydEVsZW1lbnRzSW5QbG90QXJlYSgpO1xuXG5cdH0sIGZ1bmN0aW9uICgpIHtcblxuXHRcdF90aGlzLmRpc2FibGVUb29sVGlwID0gZmFsc2U7XG5cdFx0X3RoaXMuX2FuaW1hdG9yLmFuaW1hdGUoMCwgX3RoaXMuYW5pbWF0ZWRSZW5kZXIgPyBleHBsb2RlRHVyYXRpb24gOiAwLCBmdW5jdGlvbiAoZnJhY3Rpb25Db21wbGV0ZSkge1xuXG5cdFx0XHRleHBsb2RlVG9nZ2xlKGZyYWN0aW9uQ29tcGxldGUpO1xuXHRcdFx0cmVuZGVyQ2hhcnRFbGVtZW50c0luUGxvdEFyZWEoKTtcblxuXHRcdH0pO1xuXG5cdFx0Ly9jb25zb2xlLmxvZyhcIkFuaW1hdGlvbiBDb21wbGV0ZVwiKTtcblx0fSk7XG5cblx0ZnVuY3Rpb24gcmVuZGVyQ2hhcnRFbGVtZW50c0luUGxvdEFyZWEoKSB7XG5cblx0XHRfdGhpcy5wbG90QXJlYS5sYXlvdXRNYW5hZ2VyLnJlc2V0KCk7XG5cblx0XHRpZiAoX3RoaXMuX3RpdGxlKSB7XG5cdFx0XHRpZiAoX3RoaXMuX3RpdGxlLmRvY2tJbnNpZGVQbG90QXJlYSB8fCAoX3RoaXMuX3RpdGxlLmhvcml6b250YWxBbGlnbiA9PT0gXCJjZW50ZXJcIiAmJiBfdGhpcy5fdGl0bGUudmVydGljYWxBbGlnbiA9PT0gXCJjZW50ZXJcIikpXG5cdFx0XHRcdF90aGlzLl90aXRsZS5yZW5kZXIoKTtcblxuXHRcdH1cblxuXHRcdGlmIChfdGhpcy5zdWJ0aXRsZXMpXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IF90aGlzLnN1YnRpdGxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgc3VidGl0bGUgPSBfdGhpcy5zdWJ0aXRsZXNbaV07XG5cdFx0XHRcdGlmIChzdWJ0aXRsZS5kb2NrSW5zaWRlUGxvdEFyZWEgfHwgKHN1YnRpdGxlLmhvcml6b250YWxBbGlnbiA9PT0gXCJjZW50ZXJcIiAmJiBzdWJ0aXRsZS52ZXJ0aWNhbEFsaWduID09PSBcImNlbnRlclwiKSlcblx0XHRcdFx0XHRzdWJ0aXRsZS5yZW5kZXIoKTtcblx0XHRcdH1cblxuXHRcdGlmIChfdGhpcy5sZWdlbmQpIHtcblx0XHRcdGlmIChfdGhpcy5sZWdlbmQuZG9ja0luc2lkZVBsb3RBcmVhIHx8IChfdGhpcy5sZWdlbmQuaG9yaXpvbnRhbEFsaWduID09PSBcImNlbnRlclwiICYmIF90aGlzLmxlZ2VuZC52ZXJ0aWNhbEFsaWduID09PSBcImNlbnRlclwiKSlcblx0XHRcdFx0X3RoaXMubGVnZW5kLnJlbmRlcigpO1xuXHRcdH1cblx0fVxuXG5cdC8vdGhpcy5jdHguc3Ryb2tlUmVjdChwbG90QXJlYS54MSArIDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCAtIDIsIHBsb3RBcmVhLmhlaWdodCk7XG59XG4iLCJcbmltcG9ydCB7aXNDYW52YXNTdXBwb3J0ZWR9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblx0dmFyIHRvdGFsRGF0YVNlcmllcyA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDtcblxuXHRpZiAodG90YWxEYXRhU2VyaWVzIDw9IDApXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBnaG9zdEN0eCA9IHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eDtcblxuXHR2YXIgYXhpc1hQcm9wcyA9IHBsb3RVbml0LmF4aXNYLmxpbmVDb29yZGluYXRlcztcblx0dmFyIGF4aXNZUHJvcHMgPSBwbG90VW5pdC5heGlzWS5saW5lQ29vcmRpbmF0ZXM7XG5cdHZhciBtYXJrZXJzID0gW107XG5cblx0dmFyIHBsb3RBcmVhID0gdGhpcy5wbG90QXJlYTtcblx0Y3R4LnNhdmUoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0Z2hvc3RDdHguc2F2ZSgpO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRnaG9zdEN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0Z2hvc3RDdHguY2xpcCgpO1xuXHR9XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXG5cdFx0dmFyIGNsb3NpbmdQYXRoID0gW107XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cblx0XHR2YXIgc2VyaWVzSWQgPSBkYXRhU2VyaWVzLmlkO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbc2VyaWVzSWRdID0ge1xuXHRcdFx0b2JqZWN0VHlwZTogXCJkYXRhU2VyaWVzXCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4XG5cdFx0fTtcblxuXHRcdHZhciBoZXhDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoc2VyaWVzSWQpO1xuXHRcdGdob3N0Q3R4LmZpbGxTdHlsZSA9IGhleENvbG9yO1xuXHRcdC8vZ2hvc3RDdHgubGluZVdpZHRoID0gZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzO1xuXHRcdC8vZ2hvc3RDdHgubGluZVdpZHRoID0gMjA7XG5cblx0XHRtYXJrZXJzID0gW107XG5cblx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXHRcdHZhciBpID0gMCwgeCwgeTEsIHkyO1xuXHRcdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgYmFjayBhbmQgZm9ydGguXG5cblx0XHR2YXIgeVplcm9Ub1BpeGVsID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICgwIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHR2YXIgYmFzZVk7XG5cblx0XHR2YXIgc3RhcnRQb2ludCA9IG51bGw7XG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL2N0eC5zdHJva2VTdHlsZSA9IFwiIzQ1NzJBNyBcIjtcblx0XHRcdHZhciBjb2xvciA9IGRhdGFTZXJpZXMuX2NvbG9yU2V0W2kgJSBkYXRhU2VyaWVzLl9jb2xvclNldC5sZW5ndGhdO1xuXHRcdFx0Ly9jdHguc3Ryb2tlU3R5bGUgPSBcInJlZFwiO1xuXHRcdFx0Y3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuXHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gY29sb3I7XG5cdFx0XHRjdHgubGluZVdpZHRoID0gZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzO1xuXG5cdFx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XG5cdFx0XHRcdGN0eC5zZXRMaW5lRGFzaChnZXRMaW5lRGFzaEFycmF5KGRhdGFTZXJpZXMubGluZURhc2hUeXBlLCBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MpKTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHByZXZEYXRhTnVsbCA9IHRydWU7XG5cdFx0XHRmb3IgKDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54LmdldFRpbWUgPyBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS55ID09PSBudWxsIHx8ICFkYXRhUG9pbnRzW2ldLnkubGVuZ3RoXG5cdFx0XHRcdFx0fHwgdHlwZW9mIChkYXRhUG9pbnRzW2ldLnlbMF0pICE9PSBcIm51bWJlclwiIHx8IHR5cGVvZiAoZGF0YVBvaW50c1tpXS55WzFdKSAhPT0gXCJudW1iZXJcIikge1xuXG5cdFx0XHRcdFx0Y2xvc2VBcmVhKCk7XG5cblx0XHRcdFx0XHRwcmV2RGF0YU51bGwgPSB0cnVlO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0eCA9IChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50WCAtIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cblx0XHRcdFx0eTEgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueVswXSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHkyID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnlbMV0gLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXG5cdFx0XHRcdGlmIChpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSB8fCBwcmV2RGF0YU51bGwpIHtcblx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0Y3R4Lm1vdmVUbyh4LCB5MSk7XG5cdFx0XHRcdFx0c3RhcnRQb2ludCA9IHtcblx0XHRcdFx0XHRcdHg6IHgsIHk6IHkxXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjbG9zaW5nUGF0aCA9IFtdO1xuXHRcdFx0XHRcdGNsb3NpbmdQYXRoLnB1c2goeyB4OiB4LCB5OiB5MiB9KTtcblxuXHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oeCwgeTEpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gZmFsc2U7XG5cdFx0XHRcdFx0cHJldkRhdGFOdWxsID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cblx0XHRcdFx0XHRjdHgubGluZVRvKHgsIHkxKTtcblx0XHRcdFx0XHRjbG9zaW5nUGF0aC5wdXNoKHsgeDogeCwgeTogeTIgfSk7XG5cblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5saW5lVG8oeCwgeTEpO1xuXG5cdFx0XHRcdFx0aWYgKGkgJSAyNTAgPT0gMCkge1xuXHRcdFx0XHRcdFx0Y2xvc2VBcmVhKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4LCB5MTogeTEsIHkyOiB5MlxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vUmVuZGVyIE1hcmtlclxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5tYXJrZXJTaXplICE9PSAwKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ubWFya2VyU2l6ZSA+IDAgfHwgZGF0YVNlcmllcy5tYXJrZXJTaXplID4gMCkge1xuXHRcdFx0XHRcdFx0dmFyIG1hcmtlclByb3BzID0gZGF0YVNlcmllcy5nZXRNYXJrZXJQcm9wZXJ0aWVzKGksIHgsIHkyLCBjdHgpO1xuXHRcdFx0XHRcdFx0bWFya2Vycy5wdXNoKG1hcmtlclByb3BzKTtcblxuXHRcdFx0XHRcdFx0Ly9pZiAoIWRhdGFTZXJpZXMubWF4V2lkdGhJblggfHwgbWFya2VyUHJvcHMuc2l6ZSA+IGRhdGFTZXJpZXMubWF4V2lkdGhJblgpIHtcblx0XHRcdFx0XHRcdC8vXHRkYXRhU2VyaWVzLm1heFdpZHRoSW5YID0gbWFya2VyUHJvcHMuc2l6ZSAvIChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgPiAxID8gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0IC0gMSA6IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCk7XG5cdFx0XHRcdFx0XHQvL31cblxuXHRcdFx0XHRcdFx0dmFyIG1hcmtlckNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0XHRtYXJrZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHkyLCBjdHg6IGdob3N0Q3R4LFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IG1hcmtlclByb3BzLnR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0c2l6ZTogbWFya2VyUHJvcHMuc2l6ZSxcblx0XHRcdFx0XHRcdFx0XHRjb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQ29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclRoaWNrbmVzczogbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRtYXJrZXJQcm9wcyA9IGRhdGFTZXJpZXMuZ2V0TWFya2VyUHJvcGVydGllcyhpLCB4LCB5MSwgY3R4KTtcblx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaChtYXJrZXJQcm9wcyk7XG5cblxuXG5cdFx0XHRcdFx0XHR2YXIgbWFya2VyQ29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGlkKTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0eDogeCwgeTogeTEsIGN0eDogZ2hvc3RDdHgsXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogbWFya2VyUHJvcHMudHlwZSxcblx0XHRcdFx0XHRcdFx0XHRzaXplOiBtYXJrZXJQcm9wcy5zaXplLFxuXHRcdFx0XHRcdFx0XHRcdGNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJDb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyVGhpY2tuZXNzOiBtYXJrZXJQcm9wcy5ib3JkZXJUaGlja25lc3Ncblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbCB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWwgfHwgZGF0YVBvaW50c1tpXS5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcikge1xuXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwicmFuZ2VBcmVhXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0aW5kZXhLZXl3b3JkOiAwLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeCwgeTogeTFcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IGRhdGFQb2ludHNbaV0ueVswXSA8PSBkYXRhUG9pbnRzW2ldLnlbMV0gPyAtMSA6IDEsXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcInJhbmdlQXJlYVwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnRzW2ldLFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdGluZGV4S2V5d29yZDogMSxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHkyXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkYXRhUG9pbnRzW2ldLnlbMF0gPD0gZGF0YVBvaW50c1tpXS55WzFdID8gMSA6IC0xLFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vYWxlcnQoXCJoaVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y2xvc2VBcmVhKCk7XG5cblx0XHRcdC8vc3RhcnRQb2ludCA9IHsgeDogeCwgeTogeSB9O1xuXHRcdFx0UmVuZGVySGVscGVyLmRyYXdNYXJrZXJzKG1hcmtlcnMpO1xuXHRcdH1cblx0fVxuXG5cdGN0eC5yZXN0b3JlKCk7XG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVzdG9yZSgpO1xuXG5cdGZ1bmN0aW9uIGNsb3NlQXJlYSgpIHtcblxuXHRcdGlmICghc3RhcnRQb2ludClcblx0XHRcdHJldHVybjtcblxuXHRcdHZhciBwb2ludCA9IG51bGw7XG5cblx0XHRpZiAoZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzID4gMClcblx0XHRcdGN0eC5zdHJva2UoKTtcblxuXHRcdGZvciAodmFyIGkgPSBjbG9zaW5nUGF0aC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0cG9pbnQgPSBjbG9zaW5nUGF0aFtpXTtcblx0XHRcdGN0eC5saW5lVG8ocG9pbnQueCwgcG9pbnQueSk7XG5cdFx0XHRnaG9zdEN0eC5saW5lVG8ocG9pbnQueCwgcG9pbnQueSk7XG5cdFx0fVxuXG5cblxuXHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHQvL2N0eC5saW5lVG8oc3RhcnRQb2ludC54LCBzdGFydFBvaW50LnkpO1xuXG5cdFx0Y3R4Lmdsb2JhbEFscGhhID0gZGF0YVNlcmllcy5maWxsT3BhY2l0eTtcblx0XHRjdHguZmlsbCgpO1xuXHRcdGN0eC5nbG9iYWxBbHBoYSA9IDE7XG5cblx0XHRnaG9zdEN0eC5maWxsKCk7XG5cblx0XHQvL2lmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdC8vXHRnaG9zdEN0eC5saW5lVG8oeCwgYmFzZVkpO1xuXHRcdC8vXHRnaG9zdEN0eC5saW5lVG8oc3RhcnRQb2ludC54LCBiYXNlWSk7XG5cdFx0Ly9cdGdob3N0Q3R4LmNsb3NlUGF0aCgpO1xuXHRcdC8vXHRnaG9zdEN0eC5maWxsKCk7XG5cdFx0Ly99XG5cblx0XHRpZiAoZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzID4gMCkge1xuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0Y3R4Lm1vdmVUbyhwb2ludC54LCBwb2ludC55KTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2xvc2luZ1BhdGgubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0cG9pbnQgPSBjbG9zaW5nUGF0aFtpXTtcblx0XHRcdFx0Y3R4LmxpbmVUbyhwb2ludC54LCBwb2ludC55KTtcblx0XHRcdH1cblxuXHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdH1cblxuXG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdGN0eC5tb3ZlVG8oeCwgeTEpO1xuXHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdGdob3N0Q3R4Lm1vdmVUbyh4LCB5MSk7XG5cblx0XHRzdGFydFBvaW50ID0ge1xuXHRcdFx0eDogeCwgeTogeTFcblx0XHR9O1xuXHRcdGNsb3NpbmdQYXRoID0gW107XG5cdFx0Y2xvc2luZ1BhdGgucHVzaCh7IHg6IHgsIHk6IHkyIH0pO1xuXHR9XG5cblx0Ly9jdHguYmVnaW5QYXRoKCk7XG5cdC8vc291cmNlIGFuZCBkZXN0IHdvdWxkIGJlIHNhbWUgd2hlbiBhbmltYXRpb24gaXMgbm90IGVuYWJsZWRcblx0dmFyIGFuaW1hdGlvbkluZm8gPSB7XG5cdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLnhDbGlwQW5pbWF0aW9uLCBlYXNpbmdGdW5jdGlvbjogQW5pbWF0aW9uSGVscGVyLmVhc2luZy5saW5lYXIsIGFuaW1hdGlvbkJhc2U6IDBcblx0fTtcblx0cmV0dXJuIGFuaW1hdGlvbkluZm87XG59XG4iLCJcbmltcG9ydCB7aXNDYW52YXNTdXBwb3J0ZWR9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblx0dmFyIHRvdGFsRGF0YVNlcmllcyA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDtcblxuXHRpZiAodG90YWxEYXRhU2VyaWVzIDw9IDApXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBjb2xvciA9IG51bGw7XG5cblx0dmFyIHBsb3RBcmVhID0gdGhpcy5wbG90QXJlYTtcblxuXHR2YXIgaSA9IDAsIHgxLCB4MiwgeTtcblx0dmFyIGRhdGFQb2ludFg7IC8vVXNlZCBzbyB0aGF0IHdoZW4gZGF0YVBvaW50LnggaXMgYSBEYXRlVGltZSB2YWx1ZSwgaXQgZG9lc24ndCBnZXQgY29udmVydGVkIHRvIG51bWJlciBmcm9tIGRhdGFUaW1lIGV2ZXJ5dGltZSBpdCBpcyB1c2VkLlxuXG5cdC8vSW4gY2FzZSBvZiBCYXIgQ2hhcnQsIHlaZXJvVG9QaXhlbCBpcyB4IGNvLW9yZGluYXRlIVxuXHR2YXIgeVplcm9Ub1BpeGVsID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICgwIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkpIDw8IDA7XG5cblx0dmFyIG1heEJhcldpZHRoID0gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA/IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggOiBNYXRoLm1pbigodGhpcy5oZWlnaHQgKiAuMTUpLCB0aGlzLnBsb3RBcmVhLmhlaWdodCAvIHBsb3RVbml0LnBsb3RUeXBlLnRvdGFsRGF0YVNlcmllcyAqIC45KSA8PCAwO1xuXHR2YXIgeE1pbkRpZmYgPSBwbG90VW5pdC5heGlzWC5kYXRhSW5mby5taW5EaWZmO1xuXHQvL3ZhciBiYXJXaWR0aCA9ICgoKHBsb3RBcmVhLmhlaWdodCAvIE1hdGguYWJzKHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWF4aW11bSAtIHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkpICogTWF0aC5hYnMoeE1pbkRpZmYpKSAvIHRvdGFsRGF0YVNlcmllcyAqIC45KSA8PCAwO1xuXG5cdHZhciBiYXJXaWR0aCA9ICgoKHBsb3RBcmVhLmhlaWdodCAvIE1hdGguYWJzKHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWF4aW11bSAtIHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkpICogTWF0aC5hYnMoeE1pbkRpZmYpKSAvIHBsb3RVbml0LnBsb3RUeXBlLnRvdGFsRGF0YVNlcmllcyAqIC45KSA8PCAwO1xuXG5cdGlmIChiYXJXaWR0aCA+IG1heEJhcldpZHRoKVxuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cdGVsc2UgaWYgKHhNaW5EaWZmID09PSBJbmZpbml0eSkge1xuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGggLyBwbG90VW5pdC5wbG90VHlwZS50b3RhbERhdGFTZXJpZXMgKiAuOTtcblx0fSBlbHNlIGlmIChiYXJXaWR0aCA8IDEpXG5cdFx0YmFyV2lkdGggPSAxO1xuXG5cdGN0eC5zYXZlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5zYXZlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LmNsaXAoKTtcblx0fVxuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblxuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblxuXG5cdFx0Ly9kYXRhU2VyaWVzLm1heFdpZHRoSW5YID0gYmFyV2lkdGggLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL3ZhciB4eSA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uUGxvdEFyZWEoZGF0YVBvaW50c1swXS54LCBkYXRhUG9pbnRzWzBdLnkpO1xuXG5cdFx0XHR2YXIgYmV2ZWxFbmFibGVkID0gKGJhcldpZHRoID4gNSkgJiYgZGF0YVNlcmllcy5iZXZlbEVuYWJsZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IFwiIzQ1NzJBNyBcIjtcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRzW2ldLmdldFRpbWUgPyBkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKSA6IGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLng7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1pbiB8fCBkYXRhUG9pbnRYID4gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNYXgpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLnkgPT09IG51bGwgfHwgIWRhdGFQb2ludHNbaV0ueS5sZW5ndGhcblx0XHRcdFx0XHR8fCB0eXBlb2YgKGRhdGFQb2ludHNbaV0ueVswXSkgIT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIChkYXRhUG9pbnRzW2ldLnlbMV0pICE9PSBcIm51bWJlclwiKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdC8veCBhbmQgeSBhcmUgcGl4ZWwgY28tb3JkaW5hdGVzIG9mIHBvaW50IGFuZCBzaG91bGQgbm90IGJlIGNvbmZ1c2VkIHdpdGggWCBhbmQgWSB2YWx1ZXNcblx0XHRcdFx0eDEgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueVswXSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHgyID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnlbMV0gLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXG5cdFx0XHRcdHkgPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXG5cblx0XHRcdFx0dmFyIHkxID0gKHkgLSAocGxvdFVuaXQucGxvdFR5cGUudG90YWxEYXRhU2VyaWVzICogYmFyV2lkdGggLyAyKSArICgocGxvdFVuaXQucHJldmlvdXNEYXRhU2VyaWVzQ291bnQgKyBqKSAqIGJhcldpZHRoKSkgPDwgMDtcblx0XHRcdFx0dmFyIHkyID0geTEgKyBiYXJXaWR0aCA8PCAwO1xuXG5cdFx0XHRcdGlmICh4MSA+IHgyKSB7XG5cdFx0XHRcdFx0dmFyIHRlbXAgPSB4MTtcblx0XHRcdFx0XHR4MSA9IHgyO1xuXHRcdFx0XHRcdHgyID0gdGVtcDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vZHJhd1JlY3QoY3R4LCB4MSwgeTEsIHBsb3RBcmVhLngyLCB5MiwgXCIjRUVFRUVFXCIsIDAsIG51bGwsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0Ly9kcmF3UmVjdChjdHgsIHgxLCB5MSwgcGxvdEFyZWEueDIsIHkyLCBcIiNCRENFRDNcIiwgMCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG5cdFx0XHRcdGNvbG9yID0gZGF0YVBvaW50c1tpXS5jb2xvciA/IGRhdGFQb2ludHNbaV0uY29sb3IgOiBkYXRhU2VyaWVzLl9jb2xvclNldFtpICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcblx0XHRcdFx0Ly9jb2xvciA9IFwiIzFCNDk2MlwiO1xuXHRcdFx0XHRkcmF3UmVjdChjdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgYmV2ZWxFbmFibGVkLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5KTtcblxuXG5cdFx0XHRcdHZhciBpZCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2ldO1xuXHRcdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSA9IHtcblx0XHRcdFx0XHRpZDogaWQsIG9iamVjdFR5cGU6IFwiZGF0YVBvaW50XCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleDogaSwgeDE6IHgxLCB5MTogeTEsIHgyOiB4MiwgeTI6IHkyXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cblx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdGRyYXdSZWN0KHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eCwgeDEsIHkxLCB4MiwgeTIsIGNvbG9yLCAwLCBudWxsLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5pbmRleExhYmVsIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbCB8fCBkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWxGb3JtYXR0ZXIgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyKSB7XG5cblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJyYW5nZUJhclwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnRzW2ldLFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdGluZGV4S2V5d29yZDogMCxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IGRhdGFQb2ludHNbaV0ueVsxXSA+PSBkYXRhUG9pbnRzW2ldLnlbMF0gPyB4MSA6IHgyLCB5OiB5MSArICh5MiAtIHkxKSAvIDJcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IGRhdGFQb2ludHNbaV0ueVsxXSA+PSBkYXRhUG9pbnRzW2ldLnlbMF0gPyAtMSA6IDEsXG5cdFx0XHRcdFx0XHRib3VuZHM6IHtcblx0XHRcdFx0XHRcdFx0eDE6IE1hdGgubWluKHgxLCB4MiksIHkxOiB5MSwgeDI6IE1hdGgubWF4KHgxLCB4MiksIHkyOiB5MlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwicmFuZ2VCYXJcIixcblx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50c1tpXSxcblx0XHRcdFx0XHRcdGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsXG5cdFx0XHRcdFx0XHRpbmRleEtleXdvcmQ6IDEsXG5cdFx0XHRcdFx0XHRwb2ludDoge1xuXHRcdFx0XHRcdFx0XHR4OiBkYXRhUG9pbnRzW2ldLnlbMV0gPj0gZGF0YVBvaW50c1tpXS55WzBdID8geDIgOiB4MSwgeTogeTEgKyAoeTIgLSB5MSkgLyAyXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkYXRhUG9pbnRzW2ldLnlbMV0gPj0gZGF0YVBvaW50c1tpXS55WzBdID8gMSA6IC0xLFxuXHRcdFx0XHRcdFx0Ym91bmRzOiB7XG5cdFx0XHRcdFx0XHRcdHgxOiBNYXRoLm1pbih4MSwgeDIpLCB5MTogeTEsIHgyOiBNYXRoLm1heCh4MSwgeDIpLCB5MjogeTJcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGN0eC5yZXN0b3JlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZXN0b3JlKCk7XG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uSW5mbyA9IHtcblx0XHRzb3VyY2U6IGN0eCwgZGVzdDogdGhpcy5wbG90QXJlYS5jdHgsIGFuaW1hdGlvbkNhbGxiYWNrOiBBbmltYXRpb25IZWxwZXIuZmFkZUluQW5pbWF0aW9uLCBlYXNpbmdGdW5jdGlvbjogQW5pbWF0aW9uSGVscGVyLmVhc2luZy5lYXNlSW5RdWFkLCBhbmltYXRpb25CYXNlOiAwXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuIiwiXG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cdHZhciBjdHggPSBwbG90VW5pdC50YXJnZXRDYW52YXNDdHggfHwgdGhpcy5wbG90QXJlYS5jdHg7XG5cdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgY29sb3IgPSBudWxsO1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cblx0dmFyIGkgPSAwLCB4LCB5MSwgeTI7XG5cdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgZnJvbSBkYXRhVGltZSBldmVyeXRpbWUgaXQgaXMgdXNlZC5cblxuXHR2YXIgeVplcm9Ub1BpeGVsID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICgwIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkpIDw8IDA7XG5cblx0dmFyIG1heEJhcldpZHRoID0gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA/IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggOiAodGhpcy53aWR0aCAqIC4wMyk7XG5cdC8vdmFyIG1heEJhcldpZHRoID0gKHRoaXMud2lkdGggKiAuMDE1KTtcblx0dmFyIHhNaW5EaWZmID0gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8ubWluRGlmZjtcblx0Ly92YXIgYmFyV2lkdGggPSAoKChwbG90QXJlYS53aWR0aCAvIE1hdGguYWJzKHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWF4aW11bSAtIHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkpICogTWF0aC5hYnMoeE1pbkRpZmYpKSAqIC45KSA8PCAwO1xuXHR2YXIgYmFyV2lkdGggPSAoKChwbG90QXJlYS53aWR0aCAvIE1hdGguYWJzKHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWF4aW11bSAtIHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkpICogTWF0aC5hYnMoeE1pbkRpZmYpKSAvIHBsb3RVbml0LnBsb3RUeXBlLnRvdGFsRGF0YVNlcmllcyAqIC45KSA8PCAwO1xuXG5cdGlmIChiYXJXaWR0aCA+IG1heEJhcldpZHRoKVxuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cdGVsc2UgaWYgKHhNaW5EaWZmID09PSBJbmZpbml0eSkge1xuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGggLyBwbG90VW5pdC5wbG90VHlwZS50b3RhbERhdGFTZXJpZXMgKiAuOTtcblx0fSBlbHNlIGlmIChiYXJXaWR0aCA8IDEpXG5cdFx0YmFyV2lkdGggPSAxO1xuXG5cdGN0eC5zYXZlKCk7XG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHguc2F2ZSgpO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5jbGlwKCk7XG5cdH1cblx0Ly9jdHguYmVnaW5QYXRoKCk7XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXG5cdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblx0XHR2YXIgZGF0YVBvaW50cyA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cztcblx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXG5cblx0XHQvLyBSZWR1Y2luZyBwaXhlbFBlclVuaXQgYnkgMSBqdXN0IHRvIG92ZXJjb21lIGFueSBwcm9ibGVtcyBkdWUgdG8gcm91bmRpbmcgb2ZmIG9mIHBpeGVscy5cblx0XHQvL2RhdGFTZXJpZXMubWF4V2lkdGhJblggPSBiYXJXaWR0aCAvIChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgPiAxID8gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0IC0gMSA6IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCk7XG5cblx0XHQvL3ZhciBvZmZzZXRYID0gYmFyV2lkdGggKiBwbG90VW5pdC5pbmRleCA8PCAwO1xuXG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL3ZhciB4eSA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uUGxvdEFyZWEoZGF0YVBvaW50c1swXS54LCBkYXRhUG9pbnRzWzBdLnkpO1xuXG5cdFx0XHR2YXIgYmV2ZWxFbmFibGVkID0gKGJhcldpZHRoID4gNSkgJiYgZGF0YVNlcmllcy5iZXZlbEVuYWJsZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0ZGF0YVBvaW50c1tpXS5nZXRUaW1lID8gZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS55ID09PSBudWxsIHx8ICFkYXRhUG9pbnRzW2ldLnkubGVuZ3RoXG5cdFx0XHRcdFx0fHwgdHlwZW9mIChkYXRhUG9pbnRzW2ldLnlbMF0pICE9PSBcIm51bWJlclwiIHx8IHR5cGVvZiAoZGF0YVBvaW50c1tpXS55WzFdKSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR4ID0gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRYIC0gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0eTEgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueVswXSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHkyID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnlbMV0gLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXG5cdFx0XHRcdC8vdmFyIHgxID0geCAtIGJhcldpZHRoIC8gMiA8PCAwO1xuXHRcdFx0XHR2YXIgeDEgPSB4IC0gKHBsb3RVbml0LnBsb3RUeXBlLnRvdGFsRGF0YVNlcmllcyAqIGJhcldpZHRoIC8gMikgKyAoKHBsb3RVbml0LnByZXZpb3VzRGF0YVNlcmllc0NvdW50ICsgaikgKiBiYXJXaWR0aCkgPDwgMDtcblx0XHRcdFx0dmFyIHgyID0geDEgKyBiYXJXaWR0aCA8PCAwO1xuXHRcdFx0XHR2YXIgeTE7XG5cdFx0XHRcdHZhciB5MjtcblxuXG5cdFx0XHRcdGNvbG9yID0gZGF0YVBvaW50c1tpXS5jb2xvciA/IGRhdGFQb2ludHNbaV0uY29sb3IgOiBkYXRhU2VyaWVzLl9jb2xvclNldFtpICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcblxuXHRcdFx0XHRpZiAoeTEgPiB5Mikge1xuXHRcdFx0XHRcdHZhciB0ZW1wID0geTE7XG5cdFx0XHRcdFx0eTEgPSB5Mjtcblx0XHRcdFx0XHR5MiA9IHRlbXA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5MlxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vdmFyIGJvcmRlclRoaWNrbmVzcyA9IE1hdGgubWF4KDEsIChiYXJXaWR0aCAqIC4xIDw8IDApKTtcblx0XHRcdFx0dmFyIGJvcmRlclRoaWNrbmVzcyA9IDA7XG5cblx0XHRcdFx0ZHJhd1JlY3QoY3R4LCB4MSwgeTEsIHgyLCB5MiwgY29sb3IsIGJvcmRlclRoaWNrbmVzcywgY29sb3IsIGJldmVsRW5hYmxlZCwgYmV2ZWxFbmFibGVkLCBmYWxzZSwgZmFsc2UsIGRhdGFTZXJpZXMuZmlsbE9wYWNpdHkpO1xuXHRcdFx0XHRjb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRkcmF3UmVjdCh0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbCB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWwgfHwgZGF0YVBvaW50c1tpXS5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcikge1xuXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwicmFuZ2VDb2x1bW5cIixcblx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50c1tpXSxcblx0XHRcdFx0XHRcdGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsXG5cdFx0XHRcdFx0XHRpbmRleEtleXdvcmQ6IDAsXG5cdFx0XHRcdFx0XHRwb2ludDoge1xuXHRcdFx0XHRcdFx0XHR4OiB4MSArICh4MiAtIHgxKSAvIDIsIHk6IGRhdGFQb2ludHNbaV0ueVsxXSA+PSBkYXRhUG9pbnRzW2ldLnlbMF0gPyB5MiA6IHkxXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkYXRhUG9pbnRzW2ldLnlbMV0gPj0gZGF0YVBvaW50c1tpXS55WzBdID8gLTEgOiAxLFxuXHRcdFx0XHRcdFx0Ym91bmRzOiB7XG5cdFx0XHRcdFx0XHRcdHgxOiB4MSwgeTE6IE1hdGgubWluKHkxLCB5MiksIHgyOiB4MiwgeTI6IE1hdGgubWF4KHkxLCB5Milcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcInJhbmdlQ29sdW1uXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0aW5kZXhLZXl3b3JkOiAxLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeDEgKyAoeDIgLSB4MSkgLyAyLCB5OiBkYXRhUG9pbnRzW2ldLnlbMV0gPj0gZGF0YVBvaW50c1tpXS55WzBdID8geTEgOiB5MlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55WzFdID49IGRhdGFQb2ludHNbaV0ueVswXSA/IDEgOiAtMSxcblx0XHRcdFx0XHRcdGJvdW5kczoge1xuXHRcdFx0XHRcdFx0XHR4MTogeDEsIHkxOiBNYXRoLm1pbih5MSwgeTIpLCB4MjogeDIsIHkyOiBNYXRoLm1heCh5MSwgeTIpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGN0eC5yZXN0b3JlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZXN0b3JlKCk7XG5cblxuXHQvL3NvdXJjZSBhbmQgZGVzdCB3b3VsZCBiZSBzYW1lIHdoZW4gYW5pbWF0aW9uIGlzIG5vdCBlbmFibGVkXG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci5mYWRlSW5BbmltYXRpb24sIGVhc2luZ0Z1bmN0aW9uOiBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmVhc2VJblF1YWQsIGFuaW1hdGlvbkJhc2U6IDBcblx0fTtcblx0cmV0dXJuIGFuaW1hdGlvbkluZm87XG59XG4iLCJcbmltcG9ydCB7aXNDYW52YXNTdXBwb3J0ZWR9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwbG90VW5pdCkge1xuXHR2YXIgY3R4ID0gcGxvdFVuaXQudGFyZ2V0Q2FudmFzQ3R4IHx8IHRoaXMucGxvdEFyZWEuY3R4O1xuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGdob3N0Q3R4ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4O1xuXG5cdHZhciBheGlzWFByb3BzID0gcGxvdFVuaXQuYXhpc1gubGluZUNvb3JkaW5hdGVzO1xuXHR2YXIgYXhpc1lQcm9wcyA9IHBsb3RVbml0LmF4aXNZLmxpbmVDb29yZGluYXRlcztcblx0dmFyIG1hcmtlcnMgPSBbXTtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXHRjdHguc2F2ZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRnaG9zdEN0eC5zYXZlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdGdob3N0Q3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0XHRnaG9zdEN0eC5jbGlwKCk7XG5cdH1cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cblx0XHR2YXIgc2VyaWVzSWQgPSBkYXRhU2VyaWVzLmlkO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbc2VyaWVzSWRdID0ge1xuXHRcdFx0b2JqZWN0VHlwZTogXCJkYXRhU2VyaWVzXCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4XG5cdFx0fTtcblxuXHRcdHZhciBoZXhDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoc2VyaWVzSWQpO1xuXHRcdGdob3N0Q3R4LmZpbGxTdHlsZSA9IGhleENvbG9yO1xuXHRcdC8vZ2hvc3RDdHgubGluZVdpZHRoID0gZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzO1xuXHRcdC8vZ2hvc3RDdHgubGluZVdpZHRoID0gMjA7XG5cblx0XHRtYXJrZXJzID0gW107XG5cblx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXHRcdHZhciBpID0gMCwgeCwgeTEsIHkyO1xuXHRcdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgYmFjayBhbmQgZm9ydGguXG5cblx0XHR2YXIgeVplcm9Ub1BpeGVsID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICgwIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHR2YXIgYmFzZVk7XG5cblx0XHR2YXIgc3RhcnRQb2ludCA9IG51bGw7XG5cblx0XHR2YXIgcGl4ZWxzWTEgPSBbXTtcblx0XHR2YXIgcGl4ZWxzWTIgPSBbXTtcblxuXHRcdGlmIChkYXRhUG9pbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vY3R4LnN0cm9rZVN0eWxlID0gXCIjNDU3MkE3IFwiO1xuXHRcdFx0Y29sb3IgPSBkYXRhU2VyaWVzLl9jb2xvclNldFtpICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcblx0XHRcdC8vY3R4LnN0cm9rZVN0eWxlID0gXCJyZWRcIjtcblx0XHRcdGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuXHRcdFx0Y3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblxuXHRcdFx0aWYgKGN0eC5zZXRMaW5lRGFzaCkge1xuXHRcdFx0XHRjdHguc2V0TGluZURhc2goZ2V0TGluZURhc2hBcnJheShkYXRhU2VyaWVzLmxpbmVEYXNoVHlwZSwgZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzKSk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSA/IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRzW2ldLng7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1pbiB8fCBkYXRhUG9pbnRYID4gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNYXgpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLnkgPT09IG51bGwgfHwgIWRhdGFQb2ludHNbaV0ueS5sZW5ndGggfHwgdHlwZW9mIChkYXRhUG9pbnRzW2ldLnlbMF0pICE9PSBcIm51bWJlclwiIHx8IHR5cGVvZiAoZGF0YVBvaW50c1tpXS55WzFdKSAhPT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHRcdFx0cmVuZGVyQmV6aWVyQXJlYSgpO1xuXHRcdFx0XHRcdFx0cGl4ZWxzWTEgPSBbXTtcblx0XHRcdFx0XHRcdHBpeGVsc1kyID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0eCA9IChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50WCAtIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHkxID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnlbMF0gLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5MiA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55WzFdIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblxuXG5cdFx0XHRcdHZhciBpZCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2ldO1xuXHRcdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSA9IHtcblx0XHRcdFx0XHRpZDogaWQsIG9iamVjdFR5cGU6IFwiZGF0YVBvaW50XCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleDogaSwgeDE6IHgsIHkxOiB5MSwgeTI6IHkyXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0cGl4ZWxzWTFbcGl4ZWxzWTEubGVuZ3RoXSA9IHtcblx0XHRcdFx0XHR4OiB4LCB5OiB5MVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRwaXhlbHNZMltwaXhlbHNZMi5sZW5ndGhdID0ge1xuXHRcdFx0XHRcdHg6IHgsIHk6IHkyXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly9SZW5kZXIgTWFya2VyXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLm1hcmtlclNpemUgIT09IDApIHtcblx0XHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5tYXJrZXJTaXplID4gMCB8fCBkYXRhU2VyaWVzLm1hcmtlclNpemUgPiAwKSB7XG5cdFx0XHRcdFx0XHR2YXIgbWFya2VyUHJvcHMgPSBkYXRhU2VyaWVzLmdldE1hcmtlclByb3BlcnRpZXMoaSwgeCwgeTEsIGN0eCk7XG5cdFx0XHRcdFx0XHRtYXJrZXJzLnB1c2gobWFya2VyUHJvcHMpO1xuXG5cdFx0XHRcdFx0XHQvL2lmICghZGF0YVNlcmllcy5tYXhXaWR0aEluWCB8fCBtYXJrZXJQcm9wcy5zaXplID4gZGF0YVNlcmllcy5tYXhXaWR0aEluWCkge1xuXHRcdFx0XHRcdFx0Ly9cdGRhdGFTZXJpZXMubWF4V2lkdGhJblggPSBtYXJrZXJQcm9wcy5zaXplIC8gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA+IDEgPyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgLSAxIDogcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0KTtcblx0XHRcdFx0XHRcdC8vfVxuXG5cdFx0XHRcdFx0XHR2YXIgbWFya2VyQ29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGlkKTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0eDogeCwgeTogeTEsIGN0eDogZ2hvc3RDdHgsXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogbWFya2VyUHJvcHMudHlwZSxcblx0XHRcdFx0XHRcdFx0XHRzaXplOiBtYXJrZXJQcm9wcy5zaXplLFxuXHRcdFx0XHRcdFx0XHRcdGNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJDb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyVGhpY2tuZXNzOiBtYXJrZXJQcm9wcy5ib3JkZXJUaGlja25lc3Ncblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHZhciBtYXJrZXJQcm9wcyA9IGRhdGFTZXJpZXMuZ2V0TWFya2VyUHJvcGVydGllcyhpLCB4LCB5MiwgY3R4KTtcblx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaChtYXJrZXJQcm9wcyk7XG5cblx0XHRcdFx0XHRcdC8vaWYgKCFkYXRhU2VyaWVzLm1heFdpZHRoSW5YIHx8IG1hcmtlclByb3BzLnNpemUgPiBkYXRhU2VyaWVzLm1heFdpZHRoSW5YKSB7XG5cdFx0XHRcdFx0XHQvL1x0ZGF0YVNlcmllcy5tYXhXaWR0aEluWCA9IG1hcmtlclByb3BzLnNpemUgLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXHRcdFx0XHRcdFx0Ly99XG5cblx0XHRcdFx0XHRcdHZhciBtYXJrZXJDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdFx0bWFya2Vycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHR4OiB4LCB5OiB5MiwgY3R4OiBnaG9zdEN0eCxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBtYXJrZXJQcm9wcy50eXBlLFxuXHRcdFx0XHRcdFx0XHRcdHNpemU6IG1hcmtlclByb3BzLnNpemUsXG5cdFx0XHRcdFx0XHRcdFx0Y29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlckNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJUaGlja25lc3M6IG1hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzc1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXG5cdFx0XHRcdC8vUmVuZGVyIEluZGV4IExhYmVsc1xuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5pbmRleExhYmVsIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbCB8fCBkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWxGb3JtYXR0ZXIgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyKSB7XG5cblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJzcGxpbmVBcmVhXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0aW5kZXhLZXl3b3JkOiAwLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeCwgeTogeTFcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IGRhdGFQb2ludHNbaV0ueVswXSA8PSBkYXRhUG9pbnRzW2ldLnlbMV0gPyAtMSA6IDEsXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcInNwbGluZUFyZWFcIixcblx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50c1tpXSxcblx0XHRcdFx0XHRcdGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsXG5cdFx0XHRcdFx0XHRpbmRleEtleXdvcmQ6IDEsXG5cdFx0XHRcdFx0XHRwb2ludDoge1xuXHRcdFx0XHRcdFx0XHR4OiB4LCB5OiB5MlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55WzBdIDw9IGRhdGFQb2ludHNbaV0ueVsxXSA/IDEgOiAtMSxcblx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmVuZGVyQmV6aWVyQXJlYSgpO1xuXG5cdFx0XHRSZW5kZXJIZWxwZXIuZHJhd01hcmtlcnMobWFya2Vycyk7XG5cdFx0fVxuXHR9XG5cblx0Y3R4LnJlc3RvcmUoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnJlc3RvcmUoKTtcblxuXHRmdW5jdGlvbiByZW5kZXJCZXppZXJBcmVhKCkge1xuXHRcdHZhciBicCA9IGdldEJlemllclBvaW50cyhwaXhlbHNZMSwgMik7XG5cblx0XHRpZiAoYnAubGVuZ3RoID4gMCkge1xuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0Y3R4Lm1vdmVUbyhicFswXS54LCBicFswXS55KTtcblxuXHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oYnBbMF0ueCwgYnBbMF0ueSk7XG5cdFx0XHR9XG5cblxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBicC5sZW5ndGggLSAzOyBpICs9IDMpIHtcblxuXHRcdFx0XHRjdHguYmV6aWVyQ3VydmVUbyhicFtpICsgMV0ueCwgYnBbaSArIDFdLnksIGJwW2kgKyAyXS54LCBicFtpICsgMl0ueSwgYnBbaSArIDNdLngsIGJwW2kgKyAzXS55KTtcblxuXHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0Z2hvc3RDdHguYmV6aWVyQ3VydmVUbyhicFtpICsgMV0ueCwgYnBbaSArIDFdLnksIGJwW2kgKyAyXS54LCBicFtpICsgMl0ueSwgYnBbaSArIDNdLngsIGJwW2kgKyAzXS55KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcyA+IDApXG5cdFx0XHRcdGN0eC5zdHJva2UoKTtcblxuXHRcdFx0YnAgPSBnZXRCZXppZXJQb2ludHMocGl4ZWxzWTIsIDIpO1xuXG5cdFx0XHRjdHgubGluZVRvKHBpeGVsc1kyW3BpeGVsc1kyLmxlbmd0aCAtIDFdLngsIHBpeGVsc1kyW3BpeGVsc1kyLmxlbmd0aCAtIDFdLnkpO1xuXG5cdFx0XHRmb3IgKHZhciBpID0gYnAubGVuZ3RoIC0gMTsgaSA+IDI7IGkgLT0gMykge1xuXG5cdFx0XHRcdGN0eC5iZXppZXJDdXJ2ZVRvKGJwW2kgLSAxXS54LCBicFtpIC0gMV0ueSwgYnBbaSAtIDJdLngsIGJwW2kgLSAyXS55LCBicFtpIC0gM10ueCwgYnBbaSAtIDNdLnkpO1xuXG5cdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRnaG9zdEN0eC5iZXppZXJDdXJ2ZVRvKGJwW2kgLSAxXS54LCBicFtpIC0gMV0ueSwgYnBbaSAtIDJdLngsIGJwW2kgLSAyXS55LCBicFtpIC0gM10ueCwgYnBbaSAtIDNdLnkpO1xuXHRcdFx0fVxuXG5cdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cblx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IGRhdGFTZXJpZXMuZmlsbE9wYWNpdHk7XG5cdFx0XHRjdHguZmlsbCgpO1xuXHRcdFx0Y3R4Lmdsb2JhbEFscGhhID0gMTtcblxuXG5cdFx0XHRpZiAoZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzID4gMCkge1xuXHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdGN0eC5tb3ZlVG8ocGl4ZWxzWTJbcGl4ZWxzWTIubGVuZ3RoIC0gMV0ueCwgcGl4ZWxzWTJbcGl4ZWxzWTIubGVuZ3RoIC0gMV0ueSk7XG5cblx0XHRcdFx0Zm9yICh2YXIgaSA9IGJwLmxlbmd0aCAtIDE7IGkgPiAyOyBpIC09IDMpIHtcblxuXHRcdFx0XHRcdGN0eC5iZXppZXJDdXJ2ZVRvKGJwW2kgLSAxXS54LCBicFtpIC0gMV0ueSwgYnBbaSAtIDJdLngsIGJwW2kgLSAyXS55LCBicFtpIC0gM10ueCwgYnBbaSAtIDNdLnkpO1xuXG5cdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdFx0Z2hvc3RDdHguYmV6aWVyQ3VydmVUbyhicFtpIC0gMV0ueCwgYnBbaSAtIDFdLnksIGJwW2kgLSAyXS54LCBicFtpIC0gMl0ueSwgYnBbaSAtIDNdLngsIGJwW2kgLSAzXS55KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0XHR9XG5cblx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblxuXG5cdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0Z2hvc3RDdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRcdGdob3N0Q3R4LmZpbGwoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvL3NvdXJjZSBhbmQgZGVzdCB3b3VsZCBiZSBzYW1lIHdoZW4gYW5pbWF0aW9uIGlzIG5vdCBlbmFibGVkXG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci54Q2xpcEFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcubGluZWFyLCBhbmltYXRpb25CYXNlOiAwXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuLy8jcmVnaW9uIHBpZUNoYXJ0XG5cbnZhciBkcmF3U2VnbWVudCA9IGZ1bmN0aW9uIChjdHgsIGNlbnRlciwgcmFkaXVzLCBjb2xvciwgdHlwZSwgdGhldGExLCB0aGV0YTIsIGZpbGxPcGFjaXR5LCBwZXJjZW50SW5uZXJSYWRpdXMpIHtcblxuXHRpZiAodHlwZW9mIChmaWxsT3BhY2l0eSkgPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0ZmlsbE9wYWNpdHkgPSAxO1xuXG5cdC8vSUU4LSBGSVg6IEluIElFOC0gc2VnbWVudCBkb2Vzbid0IGdldCBkcmF3IGlmIHRoZXRhMiBpcyBlcXVhbCB0byB0aGV0YTEgKyAyKlBJLlxuXHRpZiAoIWlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0dmFyIHRoZXRhMk1vZCA9IE51bWJlcigodGhldGEyICUgKDIgKiBNYXRoLlBJKSkudG9GaXhlZCg4KSk7XG5cdFx0dmFyIHRoZXRhMU1vZCA9IE51bWJlcigodGhldGExICUgKDIgKiBNYXRoLlBJKSkudG9GaXhlZCg4KSk7XG5cdFx0aWYgKHRoZXRhMU1vZCA9PT0gdGhldGEyTW9kKVxuXHRcdFx0dGhldGEyIC09IC4wMDAxO1xuXHR9XG5cblx0Y3R4LnNhdmUoKTtcblx0Y3R4Lmdsb2JhbEFscGhhID0gZmlsbE9wYWNpdHk7XG5cblx0aWYgKHR5cGUgPT09IFwicGllXCIpIHtcblx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0Y3R4Lm1vdmVUbyhjZW50ZXIueCwgY2VudGVyLnkpO1xuXHRcdGN0eC5hcmMoY2VudGVyLngsIGNlbnRlci55LCByYWRpdXMsIHRoZXRhMSwgdGhldGEyLCBmYWxzZSk7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuXHRcdGN0eC5zdHJva2VTdHlsZSA9IFwid2hpdGVcIjtcblx0XHRjdHgubGluZVdpZHRoID0gMjtcblx0XHQvLyAgICBjdHguc2hhZG93T2Zmc2V0WCA9IDI7XG5cdFx0Ly8gICAgY3R4LnNoYWRvd09mZnNldFkgPSAxO1xuXHRcdC8vICAgICBjdHguc2hhZG93Qmx1ciA9IDI7XG5cdFx0Ly8gICAgY3R4LnNoYWRvd0NvbG9yID0gJyNCRkJGQkYnO1xuXHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHQvL2N0eC5zdHJva2UoKTtcblx0XHRjdHguZmlsbCgpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGUgPT09IFwiZG91Z2hudXRcIikge1xuXHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRjdHguYXJjKGNlbnRlci54LCBjZW50ZXIueSwgcmFkaXVzLCB0aGV0YTEsIHRoZXRhMiwgZmFsc2UpO1xuXHRcdGN0eC5hcmMoY2VudGVyLngsIGNlbnRlci55LCBwZXJjZW50SW5uZXJSYWRpdXMgKiByYWRpdXMsIHRoZXRhMiwgdGhldGExLCB0cnVlKTtcblx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuXHRcdGN0eC5zdHJva2VTdHlsZSA9IFwid2hpdGVcIjtcblx0XHRjdHgubGluZVdpZHRoID0gMjtcblx0XHQvLyBzaGFkb3cgcHJvcGVydGllc1xuXHRcdC8vICAgICBjdHguc2hhZG93T2Zmc2V0WCA9IDE7XG5cdFx0Ly8gICAgY3R4LnNoYWRvd09mZnNldFkgPSAxO1xuXHRcdC8vICAgICBjdHguc2hhZG93Qmx1ciA9IDE7XG5cdFx0Ly8gICAgY3R4LnNoYWRvd0NvbG9yID0gJyNCRkJGQkYnOyAgLy9ncmV5IHNoYWRvd1xuXHRcdC8vY3R4LnN0cm9rZSgpO1xuXHRcdGN0eC5maWxsKCk7XG5cdH1cblxuXHRjdHguZ2xvYmFsQWxwaGEgPSAxO1xuXG5cdGN0eC5yZXN0b3JlKCk7XG59O1xuIiwiXG5pbXBvcnQgUmVuZGVySGVscGVyIGZyb20gJy4uL2hlbHBlcnMvcmVuZGVyJztcbmltcG9ydCBBbmltYXRpb25IZWxwZXIgZnJvbSAnLi4vaGVscGVycy9hbmltYXRvcic7XG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkLCBpbnRUb0hleENvbG9yU3RyaW5nfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cdHZhciBjdHggPSBwbG90VW5pdC50YXJnZXRDYW52YXNDdHggfHwgdGhpcy5wbG90QXJlYS5jdHg7XG5cdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgY29sb3IgPSBudWxsO1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cblx0dmFyIGkgPSAwLCB4LCB5O1xuXHR2YXIgZGF0YVBvaW50WDsgLy9Vc2VkIHNvIHRoYXQgd2hlbiBkYXRhUG9pbnQueCBpcyBhIERhdGVUaW1lIHZhbHVlLCBpdCBkb2Vzbid0IGdldCBjb252ZXJ0ZWQgdG8gbnVtYmVyIGZyb20gZGF0YVRpbWUgZXZlcnl0aW1lIGl0IGlzIHVzZWQuXG5cblx0dmFyIHlaZXJvVG9QaXhlbCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoMCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pKSA8PCAwO1xuXG5cdHZhciBtYXhCYXJXaWR0aCA9IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggPyB0aGlzLmRhdGFQb2ludE1heFdpZHRoIDogdGhpcy53aWR0aCAqIC4xNSA8PCAwO1xuXHR2YXIgeE1pbkRpZmYgPSBwbG90VW5pdC5heGlzWC5kYXRhSW5mby5taW5EaWZmO1xuXHR2YXIgYmFyV2lkdGggPSAoKChwbG90QXJlYS53aWR0aCAvIE1hdGguYWJzKHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWF4aW11bSAtIHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkpICogTWF0aC5hYnMoeE1pbkRpZmYpKSAvIHRvdGFsRGF0YVNlcmllcyAqIC45KSA8PCAwO1xuXG5cblx0Y3R4LnNhdmUoKTtcblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5zYXZlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LmNsaXAoKTtcblx0fVxuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblxuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblxuXHRcdGlmIChkYXRhUG9pbnRzLmxlbmd0aCA9PSAxKVxuXHRcdFx0YmFyV2lkdGggPSBtYXhCYXJXaWR0aDtcblxuXHRcdGlmIChiYXJXaWR0aCA8IDEpXG5cdFx0XHRiYXJXaWR0aCA9IDE7XG5cdFx0ZWxzZSBpZiAoYmFyV2lkdGggPiBtYXhCYXJXaWR0aClcblx0XHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL3ZhciBiZXZlbEVuYWJsZWQgPSAoYmFyV2lkdGggPiA1KSA/IGZhbHNlIDogZmFsc2U7XG5cblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IFwiIzQ1NzJBNyBcIjtcblxuXHRcdFx0dmFyIG1heEFyZWEgPSBNYXRoLnBvdyhNYXRoLm1pbihwbG90QXJlYS5oZWlnaHQsIHBsb3RBcmVhLndpZHRoKSAqIC4zIC8gMiwgMikgKiBNYXRoLlBJO1xuXG5cdFx0XHR2YXIgcHJldkRhdGFQb2ludFggPSAwO1xuXHRcdFx0dmFyIHByZXZEYXRhUG9pbnRZID0gMDtcblxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0uZ2V0VGltZSA/IGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueDtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGVvZiAoZGF0YVBvaW50c1tpXS55KSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR4ID0gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRYIC0gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0eSA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55IC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblxuXHRcdFx0XHR2YXIgbWFya2VyUHJvcHMgPSBkYXRhU2VyaWVzLmdldE1hcmtlclByb3BlcnRpZXMoaSwgeCwgeSwgY3R4KTtcblxuXHRcdFx0XHRjdHguZ2xvYmFsQWxwaGEgPSBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5O1xuXHRcdFx0XHRSZW5kZXJIZWxwZXIuZHJhd01hcmtlcihtYXJrZXJQcm9wcy54LCBtYXJrZXJQcm9wcy55LCBtYXJrZXJQcm9wcy5jdHgsIG1hcmtlclByb3BzLnR5cGUsIG1hcmtlclByb3BzLnNpemUsIG1hcmtlclByb3BzLmNvbG9yLCBtYXJrZXJQcm9wcy5ib3JkZXJDb2xvciwgbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzKTtcblx0XHRcdFx0Y3R4Lmdsb2JhbEFscGhhID0gMTtcblxuXG5cdFx0XHRcdC8vaWYgKE1hdGguYWJzKHByZXZEYXRhUG9pbnRYIC0geCkgPCBtYXJrZXJQcm9wcy5zaXplIC8gMiAmJiBNYXRoLmFicyhwcmV2RGF0YVBvaW50WSAtIHkpIDwgbWFya2VyUHJvcHMuc2l6ZSAvIDIpIHtcblx0XHRcdFx0Ly8gICAgY29udGludWU7XG5cdFx0XHRcdC8vfVxuXG5cdFx0XHRcdC8vaWYgKCFkYXRhU2VyaWVzLm1heFdpZHRoSW5YIHx8IG1hcmtlclByb3BzLnNpemUgPiBkYXRhU2VyaWVzLm1heFdpZHRoSW5YKSB7XG5cdFx0XHRcdC8vXHRkYXRhU2VyaWVzLm1heFdpZHRoSW5YID0gbWFya2VyUHJvcHMuc2l6ZSAvIChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgPiAxID8gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0IC0gMSA6IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCk7XG5cdFx0XHRcdC8vfVxuXG5cdFx0XHRcdGlmICgoTWF0aC5zcXJ0KChwcmV2RGF0YVBvaW50WCAtIHgpICogKHByZXZEYXRhUG9pbnRYIC0geCkgKyAocHJldkRhdGFQb2ludFkgLSB5KSAqIChwcmV2RGF0YVBvaW50WSAtIHkpKSA8IE1hdGgubWluKG1hcmtlclByb3BzLnNpemUsIDUpKVxuXHRcdFx0XHRcdCYmIGRhdGFQb2ludHMubGVuZ3RoID4gKE1hdGgubWluKHRoaXMucGxvdEFyZWEud2lkdGgsIHRoaXMucGxvdEFyZWEuaGVpZ2h0KSkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vUmVuZGVyIElEIG9uIEdob3N0IENhbnZhcyAtIGZvciBldmVudCBoYW5kbGluZ1xuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4LCB5MTogeVxuXHRcdFx0XHR9O1xuXHRcdFx0XHR2YXIgbWFya2VyQ29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGlkKTtcblxuXHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRSZW5kZXJIZWxwZXIuZHJhd01hcmtlcihcblx0XHRcdFx0XHRcdFx0bWFya2VyUHJvcHMueCwgbWFya2VyUHJvcHMueSwgdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LFxuXHRcdFx0XHRcdFx0XHRtYXJrZXJQcm9wcy50eXBlLFxuXHRcdFx0XHRcdFx0XHRtYXJrZXJQcm9wcy5zaXplLFxuXHRcdFx0XHRcdFx0XHRtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0bWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdG1hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzc1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvL21hcmtlcnMucHVzaCgpO1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpIHtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcInNjYXR0ZXJcIixcblx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50c1tpXSxcblx0XHRcdFx0XHRcdGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsXG5cdFx0XHRcdFx0XHRwb2ludDoge1xuXHRcdFx0XHRcdFx0XHR4OiB4LCB5OiB5XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiAxLFxuXHRcdFx0XHRcdFx0Ym91bmRzOiB7XG5cdFx0XHRcdFx0XHRcdHgxOiB4IC0gbWFya2VyUHJvcHMuc2l6ZSAvIDIsIHkxOiB5IC0gbWFya2VyUHJvcHMuc2l6ZSAvIDIsIHgyOiB4ICsgbWFya2VyUHJvcHMuc2l6ZSAvIDIsIHkyOiB5ICsgbWFya2VyUHJvcHMuc2l6ZSAvIDJcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHByZXZEYXRhUG9pbnRYID0geDtcblx0XHRcdFx0cHJldkRhdGFQb2ludFkgPSB5O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGN0eC5yZXN0b3JlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZXN0b3JlKCk7XG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uSW5mbyA9IHtcblx0XHRzb3VyY2U6IGN0eCwgZGVzdDogdGhpcy5wbG90QXJlYS5jdHgsIGFuaW1hdGlvbkNhbGxiYWNrOiBBbmltYXRpb25IZWxwZXIuZmFkZUluQW5pbWF0aW9uLCBlYXNpbmdGdW5jdGlvbjogQW5pbWF0aW9uSGVscGVyLmVhc2luZy5lYXNlSW5RdWFkLCBhbmltYXRpb25CYXNlOiAwXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuIiwiXG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cdFx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblxuXHRcdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cdFx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dmFyIGdob3N0Q3R4ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4O1xuXG5cdFx0Y3R4LnNhdmUoKTtcblxuXHRcdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cblx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0XHRjdHguY2xpcCgpO1xuXG5cdFx0dmFyIG1hcmtlcnMgPSBbXTtcblxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXG5cdFx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXHRcdFx0Y3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblx0XHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXG5cdFx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XG5cdFx0XHRcdGN0eC5zZXRMaW5lRGFzaChnZXRMaW5lRGFzaEFycmF5KGRhdGFTZXJpZXMubGluZURhc2hUeXBlLCBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MpKTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHNlcmllc0lkID0gZGF0YVNlcmllcy5pZDtcblx0XHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbc2VyaWVzSWRdID0ge1xuXHRcdFx0XHRvYmplY3RUeXBlOiBcImRhdGFTZXJpZXNcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXhcblx0XHRcdH07XG5cdFx0XHR2YXIgaGV4Q29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKHNlcmllc0lkKTtcblx0XHRcdGdob3N0Q3R4LnN0cm9rZVN0eWxlID0gaGV4Q29sb3I7XG5cdFx0XHQvL2dob3N0Q3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblx0XHRcdGdob3N0Q3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcyA+IDAgPyBNYXRoLm1heChkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MsIDQpIDogMDtcblxuXHRcdFx0dmFyIGNvbG9yU2V0ID0gZGF0YVNlcmllcy5fY29sb3JTZXQ7XG5cdFx0XHR2YXIgY29sb3IgPSBjb2xvclNldFswXTtcblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuXG5cdFx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXHRcdFx0dmFyIGkgPSAwLCB4LCB5O1xuXHRcdFx0dmFyIGRhdGFQb2ludFg7IC8vVXNlZCBzbyB0aGF0IHdoZW4gZGF0YVBvaW50LnggaXMgYSBEYXRlVGltZSB2YWx1ZSwgaXQgZG9lc24ndCBnZXQgY29udmVydGVkIHRvIG51bWJlciBiYWNrIGFuZCBmb3J0aC5cblxuXHRcdFx0Ly9pZiAoIWRhdGFTZXJpZXMuX29wdGlvbnMubWFya2VyU2l6ZSAmJiBkYXRhU2VyaWVzLmRhdGFQb2ludHMubGVuZ3RoIDwgMTAwMClcblx0XHRcdC8vICAgIGRhdGFTZXJpZXMubWFya2VyU2l6ZSA9IDg7XG5cblx0XHRcdHZhciBwaXhlbHMgPSBbXTtcblxuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuXG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS5nZXRUaW1lID8gZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKSA6IGRhdGFQb2ludHNbaV0ueDtcblxuXHRcdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHQvL2lmICghaXNGaW5pdGUoZGF0YVBvaW50c1tpXS55KSlcblx0XHRcdFx0XHQvLyAgICBjb250aW51ZTtcblxuXHRcdFx0XHRcdGlmICh0eXBlb2YgKGRhdGFQb2ludHNbaV0ueSkgIT09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRcdGlmIChpID4gMCkgey8vIGlmIGZpcnN0IGRhdGFQb2ludCBpcyBudWxsIHRoZW4gbm8gbmVlZCB0byBjYWxsIHN0cm9rZSBtZXRob2Rcblx0XHRcdFx0XHRcdFx0cmVuZGVyQmV6aWVyKHBpeGVscyk7XG5cdFx0XHRcdFx0XHRcdHBpeGVscyA9IFtdO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR4ID0gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRYIC0gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0XHR5ID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnkgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXG5cdFx0XHRcdFx0dmFyIGlkID0gZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbaV07XG5cdFx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0XHRpZDogaWQsIG9iamVjdFR5cGU6IFwiZGF0YVBvaW50XCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleDogaSwgeDE6IHgsIHkxOiB5XG5cdFx0XHRcdFx0fTtcblxuXG5cdFx0XHRcdFx0cGl4ZWxzW3BpeGVscy5sZW5ndGhdID0ge1xuXHRcdFx0XHRcdFx0eDogeCwgeTogeVxuXHRcdFx0XHRcdH07XG5cblxuXHRcdFx0XHRcdC8vQWRkIE1hcmtlcnNcblx0XHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5tYXJrZXJTaXplID4gMCB8fCBkYXRhU2VyaWVzLm1hcmtlclNpemUgPiAwKSB7XG5cblx0XHRcdFx0XHRcdHZhciBtYXJrZXJQcm9wcyA9IGRhdGFTZXJpZXMuZ2V0TWFya2VyUHJvcGVydGllcyhpLCB4LCB5LCBjdHgpO1xuXHRcdFx0XHRcdFx0bWFya2Vycy5wdXNoKG1hcmtlclByb3BzKTtcblxuXHRcdFx0XHRcdFx0Ly9pZiAoIWRhdGFTZXJpZXMubWF4V2lkdGhJblggfHwgbWFya2VyUHJvcHMuc2l6ZSA+IGRhdGFTZXJpZXMubWF4V2lkdGhJblgpIHtcblx0XHRcdFx0XHRcdC8vXHRkYXRhU2VyaWVzLm1heFdpZHRoSW5YID0gbWFya2VyUHJvcHMuc2l6ZSAvIChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgPiAxID8gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0IC0gMSA6IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCk7XG5cdFx0XHRcdFx0XHQvL31cblxuXHRcdFx0XHRcdFx0dmFyIG1hcmtlckNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cblx0XHRcdFx0XHRcdC8vd2luZG93LmNvbnNvbGUubG9nKFwiaW5kZXg6IFwiICsgaSArIFwiOyBpZDogXCIgKyBpZCArIFwiOyBoZXg6IFwiICsgbWFya2VyQ29sb3IpO1xuXHRcdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0eDogeCwgeTogeSwgY3R4OiBnaG9zdEN0eCxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBtYXJrZXJQcm9wcy50eXBlLFxuXHRcdFx0XHRcdFx0XHRcdHNpemU6IG1hcmtlclByb3BzLnNpemUsXG5cdFx0XHRcdFx0XHRcdFx0Y29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlckNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJUaGlja25lc3M6IG1hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzc1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvL0FkZCBMYWJlbHNcblx0XHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5pbmRleExhYmVsIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbCB8fCBkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWxGb3JtYXR0ZXIgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyKSB7XG5cblx0XHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwic3BsaW5lXCIsXG5cdFx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50c1tpXSxcblx0XHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0XHR4OiB4LCB5OiB5XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55ID49IDAgPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZW5kZXJCZXppZXIocGl4ZWxzKTtcblx0XHR9XG5cblx0XHRSZW5kZXJIZWxwZXIuZHJhd01hcmtlcnMobWFya2Vycyk7XG5cdFx0Y3R4LnJlc3RvcmUoKTtcblxuXHRcdGN0eC5iZWdpblBhdGgoKTtcblxuXHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXG5cdFx0ZnVuY3Rpb24gcmVuZGVyQmV6aWVyKHBpeGVscykge1xuXG5cdFx0XHR2YXIgYnAgPSBnZXRCZXppZXJQb2ludHMocGl4ZWxzLCAyKTtcblxuXHRcdFx0aWYgKGJwLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cblx0XHRcdFx0Y3R4Lm1vdmVUbyhicFswXS54LCBicFswXS55KTtcblx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdGdob3N0Q3R4Lm1vdmVUbyhicFswXS54LCBicFswXS55KTtcblxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGJwLmxlbmd0aCAtIDM7IGkgKz0gMykge1xuXG5cdFx0XHRcdFx0Y3R4LmJlemllckN1cnZlVG8oYnBbaSArIDFdLngsIGJwW2kgKyAxXS55LCBicFtpICsgMl0ueCwgYnBbaSArIDJdLnksIGJwW2kgKyAzXS54LCBicFtpICsgM10ueSk7XG5cblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5iZXppZXJDdXJ2ZVRvKGJwW2kgKyAxXS54LCBicFtpICsgMV0ueSwgYnBbaSArIDJdLngsIGJwW2kgKyAyXS55LCBicFtpICsgM10ueCwgYnBbaSArIDNdLnkpO1xuXG5cdFx0XHRcdFx0aWYgKGkgPiAwICYmIGkgJSAzMDAwID09PSAwKSB7XG5cdFx0XHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRjdHgubW92ZVRvKGJwW2kgKyAzXS54LCBicFtpICsgM10ueSk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5zdHJva2UoKTtcblx0XHRcdFx0XHRcdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRcdGdob3N0Q3R4Lm1vdmVUbyhicFtpICsgM10ueCwgYnBbaSArIDNdLnkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGN0eC5zdHJva2UoKTtcblxuXHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0Z2hvc3RDdHguc3Ryb2tlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHRcdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLnhDbGlwQW5pbWF0aW9uLCBlYXNpbmdGdW5jdGlvbjogQW5pbWF0aW9uSGVscGVyLmVhc2luZy5saW5lYXIsIGFuaW1hdGlvbkJhc2U6IDBcblx0XHR9O1xuXHRcdHJldHVybiBhbmltYXRpb25JbmZvO1xuXHR9XG5cblx0dmFyIGRyYXdSZWN0ID0gZnVuY3Rpb24gKGN0eCwgeDEsIHkxLCB4MiwgeTIsIGNvbG9yLCBib3JkZXJUaGlja25lc3MsIGJvcmRlckNvbG9yLCB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQsIGZpbGxPcGFjaXR5KSB7XG5cdFx0aWYgKHR5cGVvZiAoZmlsbE9wYWNpdHkpID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdFx0ZmlsbE9wYWNpdHkgPSAxO1xuXG5cdFx0Ym9yZGVyVGhpY2tuZXNzID0gYm9yZGVyVGhpY2tuZXNzIHx8IDA7XG5cdFx0Ym9yZGVyQ29sb3IgPSBib3JkZXJDb2xvciB8fCBcImJsYWNrXCI7XG5cdFx0Ly9hbGVydChcInRvcFwiKyB0b3AgKyBcImJvdHRvbVwiICsgYm90dG9tICsgXCIgbHRcIiArIGxlZnQrIFwicnRcIiArIHJpZ2h0IClcblx0XHR2YXIgYTEgPSB4MSwgYTIgPSB4MiwgYjEgPSB5MSwgYjIgPSB5MiwgZWRnZVksIGVkZ2VYO1xuXHRcdGlmICh4MiAtIHgxID4gMTUgJiYgeTIgLSB5MSA+IDE1KVxuXHRcdFx0dmFyIGJldmVsRGVwdGggPSA4O1xuXHRcdGVsc2Vcblx0XHRcdHZhciBiZXZlbERlcHRoID0gMC4zNSAqIE1hdGgubWluKCh4MiAtIHgxKSwgKHkyIC0geTEpKTtcblx0XHQvL2FsZXJ0KGExICsgXCJcIiArIGEyKTtcblx0XHR2YXIgY29sb3IyID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIC40KVwiO1xuXHRcdHZhciBjb2xvcjMgPSBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKVwiO1xuXHRcdC8vY29sb3IxID0gXCJyZ2JhKFwiICsgciArIFwiLFwiICsgZyArIFwiLCBcIiArIGIgKyBcIiwxKVwiO1xuXHRcdHZhciBjb2xvcjEgPSBjb2xvcjtcblxuXHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRjdHgubW92ZVRvKHgxLCB5MSk7XG5cdFx0Y3R4LnNhdmUoKTtcblx0XHRjdHguZmlsbFN0eWxlID0gY29sb3IxO1xuXG5cdFx0Y3R4Lmdsb2JhbEFscGhhID0gZmlsbE9wYWNpdHk7XG5cdFx0Y3R4LmZpbGxSZWN0KHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSk7XG5cdFx0Y3R4Lmdsb2JhbEFscGhhID0gMTtcblxuXHRcdGlmIChib3JkZXJUaGlja25lc3MgPiAwKSB7XG5cdFx0XHR2YXIgb2Zmc2V0ID0gYm9yZGVyVGhpY2tuZXNzICUgMiA9PT0gMCA/IDAgOiAuNTtcblx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdGN0eC5saW5lV2lkdGggPSBib3JkZXJUaGlja25lc3M7XG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBib3JkZXJDb2xvcjtcblx0XHRcdGN0eC5tb3ZlVG8oeDEsIHkxKTtcblx0XHRcdGN0eC5yZWN0KHgxIC0gb2Zmc2V0LCB5MSAtIG9mZnNldCwgeDIgLSB4MSArIDIgKiBvZmZzZXQsIHkyIC0geTEgKyAyICogb2Zmc2V0KTtcblx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHR9XG5cblx0XHRjdHgucmVzdG9yZSgpO1xuXHRcdC8vICAgY3R4LmJlZ2luUGF0aCgpO1xuXHRcdGlmICh0b3AgPT09IHRydWUpIHtcblx0XHRcdC8vIGFsZXJ0KHgxICsgXCJcIiArIHgyICsgXCIgXCIgKyBiZXZlbERlcHRoKTtcblx0XHRcdGN0eC5zYXZlKCk7XG5cdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRjdHgubW92ZVRvKHgxLCB5MSk7XG5cdFx0XHRjdHgubGluZVRvKHgxICsgYmV2ZWxEZXB0aCwgeTEgKyBiZXZlbERlcHRoKTtcblx0XHRcdGN0eC5saW5lVG8oeDIgLSBiZXZlbERlcHRoLCB5MSArIGJldmVsRGVwdGgpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4MiwgeTEpO1xuXHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0dmFyIGdyZCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgoeDIgKyB4MSkgLyAyLCBiMSArIGJldmVsRGVwdGgsICh4MiArIHgxKSAvIDIsIGIxKTtcblx0XHRcdGdyZC5hZGRDb2xvclN0b3AoMCwgY29sb3IxKTtcblx0XHRcdGdyZC5hZGRDb2xvclN0b3AoMSwgY29sb3IyKTtcblx0XHRcdGN0eC5maWxsU3R5bGUgPSBncmQ7XG5cdFx0XHRjdHguZmlsbCgpO1xuXHRcdFx0Ly8gICAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcblx0XHRcdGN0eC5yZXN0b3JlKCk7XG5cdFx0fVxuXG5cblx0XHRpZiAoYm90dG9tID09PSB0cnVlKSB7XG5cdFx0XHRjdHguc2F2ZSgpO1xuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0Y3R4Lm1vdmVUbyh4MSwgeTIpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4MSArIGJldmVsRGVwdGgsIHkyIC0gYmV2ZWxEZXB0aCk7XG5cdFx0XHRjdHgubGluZVRvKHgyIC0gYmV2ZWxEZXB0aCwgeTIgLSBiZXZlbERlcHRoKTtcblx0XHRcdGN0eC5saW5lVG8oeDIsIHkyKTtcblx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHRcdHZhciBncmQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoKHgyICsgeDEpIC8gMiwgYjIgLSBiZXZlbERlcHRoLCAoeDIgKyB4MSkgLyAyLCBiMik7XG5cdFx0XHRncmQuYWRkQ29sb3JTdG9wKDAsIGNvbG9yMSk7XG5cdFx0XHRncmQuYWRkQ29sb3JTdG9wKDEsIGNvbG9yMik7XG5cdFx0XHRjdHguZmlsbFN0eWxlID0gZ3JkO1xuXHRcdFx0Ly8gICAgICAgY3R4LnN0cm9rZSgpO1xuXHRcdFx0Y3R4LmZpbGwoKTtcblx0XHRcdGN0eC5yZXN0b3JlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGxlZnQgPT09IHRydWUpIHtcblx0XHRcdC8vICAgYWxlcnQoeDEpXG5cdFx0XHRjdHguc2F2ZSgpO1xuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0Y3R4Lm1vdmVUbyh4MSwgeTEpXG5cdFx0XHRjdHgubGluZVRvKHgxICsgYmV2ZWxEZXB0aCwgeTEgKyBiZXZlbERlcHRoKTtcblx0XHRcdGN0eC5saW5lVG8oeDEgKyBiZXZlbERlcHRoLCB5MiAtIGJldmVsRGVwdGgpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4MSwgeTIpO1xuXHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0dmFyIGdyZCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudChhMSArIGJldmVsRGVwdGgsICh5MiArIHkxKSAvIDIsIGExLCAoeTIgKyB5MSkgLyAyKTtcblx0XHRcdGdyZC5hZGRDb2xvclN0b3AoMCwgY29sb3IxKTtcblx0XHRcdGdyZC5hZGRDb2xvclN0b3AoMSwgY29sb3IzKTtcblx0XHRcdGN0eC5maWxsU3R5bGUgPSBncmQ7XG5cdFx0XHRjdHguZmlsbCgpO1xuXHRcdFx0Ly8gICAgIGN0eC5zdHJva2UoKTtcblx0XHRcdGN0eC5yZXN0b3JlKCk7XG5cdFx0fVxuXG5cblx0XHRpZiAocmlnaHQgPT09IHRydWUpIHtcblx0XHRcdGN0eC5zYXZlKCk7XG5cdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRjdHgubW92ZVRvKHgyLCB5MSlcblx0XHRcdGN0eC5saW5lVG8oeDIgLSBiZXZlbERlcHRoLCB5MSArIGJldmVsRGVwdGgpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4MiAtIGJldmVsRGVwdGgsIHkyIC0gYmV2ZWxEZXB0aCk7XG5cdFx0XHRjdHgubGluZVRvKHgyLCB5Mik7XG5cdFx0XHR2YXIgZ3JkID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KGEyIC0gYmV2ZWxEZXB0aCwgKHkyICsgeTEpIC8gMiwgYTIsICh5MiArIHkxKSAvIDIpO1xuXHRcdFx0Z3JkLmFkZENvbG9yU3RvcCgwLCBjb2xvcjEpO1xuXHRcdFx0Z3JkLmFkZENvbG9yU3RvcCgxLCBjb2xvcjMpO1xuXHRcdFx0Y3R4LmZpbGxTdHlsZSA9IGdyZDtcblx0XHRcdGdyZC5hZGRDb2xvclN0b3AoMCwgY29sb3IxKTtcblx0XHRcdGdyZC5hZGRDb2xvclN0b3AoMSwgY29sb3IzKTtcblx0XHRcdGN0eC5maWxsU3R5bGUgPSBncmQ7XG5cdFx0XHRjdHguZmlsbCgpO1xuXHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0Ly8gICAgICAgICAgY3R4LnN0cm9rZSgpO1xuXHRcdFx0Y3R4LnJlc3RvcmUoKTtcblx0XHR9XG5cdFx0Ly9cblxuXHR9XG4iLCJcbmltcG9ydCB7aXNDYW52YXNTdXBwb3J0ZWR9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblxuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGdob3N0Q3R4ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4O1xuXG5cdHZhciBheGlzWFByb3BzID0gcGxvdFVuaXQuYXhpc1gubGluZUNvb3JkaW5hdGVzO1xuXHR2YXIgYXhpc1lQcm9wcyA9IHBsb3RVbml0LmF4aXNZLmxpbmVDb29yZGluYXRlcztcblx0dmFyIG1hcmtlcnMgPSBbXTtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXHRjdHguc2F2ZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRnaG9zdEN0eC5zYXZlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdGdob3N0Q3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0XHRnaG9zdEN0eC5jbGlwKCk7XG5cdH1cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cblx0XHR2YXIgc2VyaWVzSWQgPSBkYXRhU2VyaWVzLmlkO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbc2VyaWVzSWRdID0ge1xuXHRcdFx0b2JqZWN0VHlwZTogXCJkYXRhU2VyaWVzXCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4XG5cdFx0fTtcblxuXHRcdHZhciBoZXhDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoc2VyaWVzSWQpO1xuXHRcdGdob3N0Q3R4LmZpbGxTdHlsZSA9IGhleENvbG9yO1xuXHRcdC8vZ2hvc3RDdHgubGluZVdpZHRoID0gZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzO1xuXHRcdC8vZ2hvc3RDdHgubGluZVdpZHRoID0gMjA7XG5cblx0XHRtYXJrZXJzID0gW107XG5cblx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXHRcdHZhciBpID0gMCwgeCwgeTtcblx0XHR2YXIgZGF0YVBvaW50WDsgLy9Vc2VkIHNvIHRoYXQgd2hlbiBkYXRhUG9pbnQueCBpcyBhIERhdGVUaW1lIHZhbHVlLCBpdCBkb2Vzbid0IGdldCBjb252ZXJ0ZWQgdG8gbnVtYmVyIGJhY2sgYW5kIGZvcnRoLlxuXG5cdFx0dmFyIHlaZXJvVG9QaXhlbCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoMCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0dmFyIGJhc2VZO1xuXG5cdFx0dmFyIHN0YXJ0UG9pbnQgPSBudWxsO1xuXG5cdFx0dmFyIHBpeGVscyA9IFtdO1xuXG5cdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly9jdHguc3Ryb2tlU3R5bGUgPSBcIiM0NTcyQTcgXCI7XG5cdFx0XHRjb2xvciA9IGRhdGFTZXJpZXMuX2NvbG9yU2V0W2kgJSBkYXRhU2VyaWVzLl9jb2xvclNldC5sZW5ndGhdO1xuXHRcdFx0Y3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuXHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gY29sb3I7XG5cdFx0XHRjdHgubGluZVdpZHRoID0gZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzO1xuXG5cdFx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XG5cdFx0XHRcdGN0eC5zZXRMaW5lRGFzaChnZXRMaW5lRGFzaEFycmF5KGRhdGFTZXJpZXMubGluZURhc2hUeXBlLCBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MpKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yICg7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lID8gZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKSA6IGRhdGFQb2ludHNbaV0ueDtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGVvZiAoZGF0YVBvaW50c1tpXS55KSAhPT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHRcdFx0cmVuZGVyQmV6aWVyQXJlYSgpO1xuXHRcdFx0XHRcdFx0cGl4ZWxzID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0eCA9IChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50WCAtIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHkgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4LCB5MTogeVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHBpeGVsc1twaXhlbHMubGVuZ3RoXSA9IHtcblx0XHRcdFx0XHR4OiB4LCB5OiB5XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly9SZW5kZXIgTWFya2VyXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLm1hcmtlclNpemUgIT09IDApIHtcblx0XHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5tYXJrZXJTaXplID4gMCB8fCBkYXRhU2VyaWVzLm1hcmtlclNpemUgPiAwKSB7XG5cdFx0XHRcdFx0XHR2YXIgbWFya2VyUHJvcHMgPSBkYXRhU2VyaWVzLmdldE1hcmtlclByb3BlcnRpZXMoaSwgeCwgeSwgY3R4KTtcblx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaChtYXJrZXJQcm9wcyk7XG5cblx0XHRcdFx0XHRcdC8vaWYgKCFkYXRhU2VyaWVzLm1heFdpZHRoSW5YIHx8IG1hcmtlclByb3BzLnNpemUgPiBkYXRhU2VyaWVzLm1heFdpZHRoSW5YKSB7XG5cdFx0XHRcdFx0XHQvL1x0ZGF0YVNlcmllcy5tYXhXaWR0aEluWCA9IG1hcmtlclByb3BzLnNpemUgLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXHRcdFx0XHRcdFx0Ly99XG5cblx0XHRcdFx0XHRcdHZhciBtYXJrZXJDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdFx0bWFya2Vycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHR4OiB4LCB5OiB5LCBjdHg6IGdob3N0Q3R4LFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IG1hcmtlclByb3BzLnR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0c2l6ZTogbWFya2VyUHJvcHMuc2l6ZSxcblx0XHRcdFx0XHRcdFx0XHRjb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQ29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclRoaWNrbmVzczogbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0Ly9SZW5kZXIgSW5kZXggTGFiZWxzXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpIHtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcInNwbGluZUFyZWFcIixcblx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50c1tpXSxcblx0XHRcdFx0XHRcdGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMsXG5cdFx0XHRcdFx0XHRwb2ludDoge1xuXHRcdFx0XHRcdFx0XHR4OiB4LCB5OiB5XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkYXRhUG9pbnRzW2ldLnkgPj0gMCA/IDEgOiAtMSxcblx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmVuZGVyQmV6aWVyQXJlYSgpO1xuXG5cdFx0XHRSZW5kZXJIZWxwZXIuZHJhd01hcmtlcnMobWFya2Vycyk7XG5cdFx0fVxuXHR9XG5cblx0Y3R4LnJlc3RvcmUoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnJlc3RvcmUoKTtcblxuXHRmdW5jdGlvbiByZW5kZXJCZXppZXJBcmVhKCkge1xuXHRcdHZhciBicCA9IGdldEJlemllclBvaW50cyhwaXhlbHMsIDIpO1xuXG5cdFx0aWYgKGJwLmxlbmd0aCA+IDApIHtcblx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdGN0eC5tb3ZlVG8oYnBbMF0ueCwgYnBbMF0ueSk7XG5cblx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0Z2hvc3RDdHgubW92ZVRvKGJwWzBdLngsIGJwWzBdLnkpO1xuXHRcdFx0fVxuXG5cblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYnAubGVuZ3RoIC0gMzsgaSArPSAzKSB7XG5cblx0XHRcdFx0Y3R4LmJlemllckN1cnZlVG8oYnBbaSArIDFdLngsIGJwW2kgKyAxXS55LCBicFtpICsgMl0ueCwgYnBbaSArIDJdLnksIGJwW2kgKyAzXS54LCBicFtpICsgM10ueSk7XG5cblx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdGdob3N0Q3R4LmJlemllckN1cnZlVG8oYnBbaSArIDFdLngsIGJwW2kgKyAxXS55LCBicFtpICsgMl0ueCwgYnBbaSArIDJdLnksIGJwW2kgKyAzXS54LCBicFtpICsgM10ueSk7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcyA+IDApXG5cdFx0XHRcdGN0eC5zdHJva2UoKTtcblxuXHRcdFx0aWYgKHBsb3RVbml0LmF4aXNZLnZpZXdwb3J0TWluaW11bSA8PSAwICYmIHBsb3RVbml0LmF4aXNZLnZpZXdwb3J0TWF4aW11bSA+PSAwKSB7XG5cdFx0XHRcdGJhc2VZID0geVplcm9Ub1BpeGVsO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQuYXhpc1kudmlld3BvcnRNYXhpbXVtIDwgMClcblx0XHRcdFx0YmFzZVkgPSBheGlzWVByb3BzLnkxO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQuYXhpc1kudmlld3BvcnRNaW5pbXVtID4gMClcblx0XHRcdFx0YmFzZVkgPSBheGlzWFByb3BzLnkyO1xuXG5cdFx0XHRzdGFydFBvaW50ID0ge1xuXHRcdFx0XHR4OiBicFswXS54LCB5OiBicFswXS55XG5cdFx0XHR9O1xuXG5cdFx0XHRjdHgubGluZVRvKGJwW2JwLmxlbmd0aCAtIDFdLngsIGJhc2VZKTtcblx0XHRcdGN0eC5saW5lVG8oc3RhcnRQb2ludC54LCBiYXNlWSk7XG5cdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cblx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IGRhdGFTZXJpZXMuZmlsbE9wYWNpdHk7XG5cdFx0XHRjdHguZmlsbCgpO1xuXHRcdFx0Y3R4Lmdsb2JhbEFscGhhID0gMTtcblxuXHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdGdob3N0Q3R4LmxpbmVUbyhicFticC5sZW5ndGggLSAxXS54LCBiYXNlWSk7XG5cdFx0XHRcdGdob3N0Q3R4LmxpbmVUbyhzdGFydFBvaW50LngsIGJhc2VZKTtcblx0XHRcdFx0Z2hvc3RDdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRcdGdob3N0Q3R4LmZpbGwoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvL3NvdXJjZSBhbmQgZGVzdCB3b3VsZCBiZSBzYW1lIHdoZW4gYW5pbWF0aW9uIGlzIG5vdCBlbmFibGVkXG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci54Q2xpcEFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcubGluZWFyLCBhbmltYXRpb25CYXNlOiAwXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuIiwiXG5pbXBvcnQgUmVuZGVySGVscGVyIGZyb20gJy4uL2hlbHBlcnMvcmVuZGVyJztcbmltcG9ydCBBbmltYXRpb25IZWxwZXIgZnJvbSAnLi4vaGVscGVycy9hbmltYXRvcic7XG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkLCBjb21wYXJlTnVtYmVycywgaW50VG9IZXhDb2xvclN0cmluZywgZ2V0TGluZURhc2hBcnJheX0gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXHR2YXIgY3R4ID0gcGxvdFVuaXQudGFyZ2V0Q2FudmFzQ3R4IHx8IHRoaXMucGxvdEFyZWEuY3R4O1xuXG5cdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgY29sb3IgPSBudWxsO1xuXHR2YXIgbWFya2VycyA9IFtdO1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cblx0dmFyIG9mZnNldFkgPSBbXTtcblxuXHR2YXIgYWxsWFZhbHVlcyA9IFtdO1xuXHQvL3ZhciBvZmZzZXROZWdhdGl2ZVkgPSBbXTtcblxuXHR2YXIgaSA9IDAsIHgsIHk7XG5cdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgZXZlcnl0aW1lIGl0IGlzIGFjY2Vzc2VkLlxuXG5cdC8vdmFyIHlaZXJvVG9QaXhlbCA9IChheGlzWVByb3BzLnkyIC0gYXhpc1lQcm9wcy5oZWlnaHQgLyByYW5nZVkgKiBNYXRoLmFicygwIC0gcGxvdFVuaXQuYXhpc1kudmlld3BvcnRNaW5pbXVtKSArIC41KSA8PCAwO1xuXHR2YXIgeVplcm9Ub1BpeGVsID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICgwIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkpIDw8IDA7XG5cblx0dmFyIHhNaW5EaWZmID0gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8ubWluRGlmZjtcblxuXHR2YXIgZ2hvc3RDdHggPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHg7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXG5cdGN0eC5zYXZlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdGdob3N0Q3R4LnNhdmUoKTtcblxuXHRjdHguYmVnaW5QYXRoKCk7XG5cdGN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdGN0eC5jbGlwKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0Z2hvc3RDdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRcdGdob3N0Q3R4LmNsaXAoKTtcblx0fVxuXG5cdHZhciB4VmFsdWVQcmVzZW50ID0gW107XG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXHRcdHZhciB4VmFsdWU7XG5cblx0XHRkYXRhU2VyaWVzLmRhdGFQb2ludEluZGV4ZXMgPSBbXTtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR4VmFsdWUgPSBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSA/IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRzW2ldLng7XG5cdFx0XHRkYXRhU2VyaWVzLmRhdGFQb2ludEluZGV4ZXNbeFZhbHVlXSA9IGk7XG5cblx0XHRcdGlmICgheFZhbHVlUHJlc2VudFt4VmFsdWVdKSB7XG5cdFx0XHRcdGFsbFhWYWx1ZXMucHVzaCh4VmFsdWUpO1xuXHRcdFx0XHR4VmFsdWVQcmVzZW50W3hWYWx1ZV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGFsbFhWYWx1ZXMuc29ydChjb21wYXJlTnVtYmVycyk7XG5cdH1cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXHRcdHZhciBpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IHRydWU7XG5cblx0XHR2YXIgY3VycmVudEJhc2VWYWx1ZXMgPSBbXTtcblxuXG5cdFx0dmFyIHNlcmllc0lkID0gZGF0YVNlcmllcy5pZDtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW3Nlcmllc0lkXSA9IHtcblx0XHRcdG9iamVjdFR5cGU6IFwiZGF0YVNlcmllc1wiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleFxuXHRcdH07XG5cdFx0dmFyIGhleENvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhzZXJpZXNJZCk7XG5cdFx0Z2hvc3RDdHguZmlsbFN0eWxlID0gaGV4Q29sb3I7XG5cblxuXG5cdFx0aWYgKGFsbFhWYWx1ZXMubGVuZ3RoID4gMCkge1xuXG5cdFx0XHRjb2xvciA9IGRhdGFTZXJpZXMuX2NvbG9yU2V0WzBdO1xuXHRcdFx0Ly9jdHguc3Ryb2tlU3R5bGUgPSBcInJlZFwiO1xuXHRcdFx0Y3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuXHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gY29sb3I7XG5cdFx0XHRjdHgubGluZVdpZHRoID0gZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzO1xuXG5cdFx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XG5cdFx0XHRcdGN0eC5zZXRMaW5lRGFzaChnZXRMaW5lRGFzaEFycmF5KGRhdGFTZXJpZXMubGluZURhc2hUeXBlLCBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MpKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGFsbFhWYWx1ZXMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRYID0gYWxsWFZhbHVlc1tpXTtcblx0XHRcdFx0dmFyIGRhdGFQb2ludCA9IG51bGw7XG5cblx0XHRcdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50SW5kZXhlc1tkYXRhUG9pbnRYXSA+PSAwKVxuXHRcdFx0XHRcdGRhdGFQb2ludCA9IGRhdGFQb2ludHNbZGF0YVNlcmllcy5kYXRhUG9pbnRJbmRleGVzW2RhdGFQb2ludFhdXTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdGRhdGFQb2ludCA9IHtcblx0XHRcdFx0XHRcdHg6IGRhdGFQb2ludFgsIHk6IDBcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZW9mIChkYXRhUG9pbnQueSkgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0dmFyIHggPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHQvL3ZhciB5ID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnQueSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHZhciB5ID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnQueSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pKTtcblxuXHRcdFx0XHR2YXIgb2Zmc2V0ID0gb2Zmc2V0WVtkYXRhUG9pbnRYXSA/IG9mZnNldFlbZGF0YVBvaW50WF0gOiAwO1xuXG5cdFx0XHRcdHkgPSB5IC0gb2Zmc2V0O1xuXHRcdFx0XHRjdXJyZW50QmFzZVZhbHVlcy5wdXNoKHsgeDogeCwgeTogeVplcm9Ub1BpeGVsIC0gb2Zmc2V0IH0pO1xuXHRcdFx0XHRvZmZzZXRZW2RhdGFQb2ludFhdID0geVplcm9Ub1BpeGVsIC0geTtcblxuXHRcdFx0XHRpZiAoaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEpIHtcblx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0Y3R4Lm1vdmVUbyh4LCB5KTtcblxuXHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oeCwgeSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblxuXHRcdFx0XHRcdGN0eC5saW5lVG8oeCwgeSk7XG5cblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5saW5lVG8oeCwgeSk7XG5cblx0XHRcdFx0XHRpZiAoaSAlIDI1MCA9PSAwKSB7XG5cblx0XHRcdFx0XHRcdGlmIChkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MgPiAwKVxuXHRcdFx0XHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cblx0XHRcdFx0XHRcdHdoaWxlIChjdXJyZW50QmFzZVZhbHVlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBwb2ludCA9IGN1cnJlbnRCYXNlVmFsdWVzLnBvcCgpO1xuXHRcdFx0XHRcdFx0XHRjdHgubGluZVRvKHBvaW50LngsIHBvaW50LnkpO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5saW5lVG8ocG9pbnQueCwgcG9pbnQueSk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXG5cdFx0XHRcdFx0XHRjdHguZ2xvYmFsQWxwaGEgPSBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5O1xuXHRcdFx0XHRcdFx0Y3R4LmZpbGwoKTtcblx0XHRcdFx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IDE7XG5cblx0XHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdGN0eC5tb3ZlVG8oeCwgeSk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5jbG9zZVBhdGgoKTtcblx0XHRcdFx0XHRcdFx0Z2hvc3RDdHguZmlsbCgpO1xuXG5cdFx0XHRcdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oeCwgeSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGN1cnJlbnRCYXNlVmFsdWVzLnB1c2goeyB4OiB4LCB5OiB5WmVyb1RvUGl4ZWwgLSBvZmZzZXQgfSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVNlcmllcy5kYXRhUG9pbnRJbmRleGVzW2RhdGFQb2ludFhdID49IDApIHtcblx0XHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tkYXRhU2VyaWVzLmRhdGFQb2ludEluZGV4ZXNbZGF0YVBvaW50WF1dO1xuXHRcdFx0XHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdID0ge1xuXHRcdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGRhdGFTZXJpZXMuZGF0YVBvaW50SW5kZXhlc1tkYXRhUG9pbnRYXSwgeDE6IHgsIHkxOiB5XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vUmVuZGVyIE1hcmtlclxuXHRcdFx0XHRpZiAoZGF0YVNlcmllcy5kYXRhUG9pbnRJbmRleGVzW2RhdGFQb2ludFhdID49IDAgJiYgZGF0YVBvaW50Lm1hcmtlclNpemUgIT09IDApIHtcblx0XHRcdFx0XHRpZiAoZGF0YVBvaW50Lm1hcmtlclNpemUgPiAwIHx8IGRhdGFTZXJpZXMubWFya2VyU2l6ZSA+IDApIHtcblxuXHRcdFx0XHRcdFx0dmFyIG1hcmtlclByb3BzID0gZGF0YVNlcmllcy5nZXRNYXJrZXJQcm9wZXJ0aWVzKGksIHgsIHksIGN0eCk7XG5cdFx0XHRcdFx0XHRtYXJrZXJzLnB1c2gobWFya2VyUHJvcHMpO1xuXG5cdFx0XHRcdFx0XHQvL2lmICghZGF0YVNlcmllcy5tYXhXaWR0aEluWCB8fCBtYXJrZXJQcm9wcy5zaXplID4gZGF0YVNlcmllcy5tYXhXaWR0aEluWCkge1xuXHRcdFx0XHRcdFx0Ly9cdGRhdGFTZXJpZXMubWF4V2lkdGhJblggPSBtYXJrZXJQcm9wcy5zaXplIC8gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA+IDEgPyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgLSAxIDogcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0KTtcblx0XHRcdFx0XHRcdC8vfVxuXG5cdFx0XHRcdFx0XHRtYXJrZXJDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdFx0bWFya2Vycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHR4OiB4LCB5OiB5LCBjdHg6IGdob3N0Q3R4LFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IG1hcmtlclByb3BzLnR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0c2l6ZTogbWFya2VyUHJvcHMuc2l6ZSxcblx0XHRcdFx0XHRcdFx0XHRjb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQ29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclRoaWNrbmVzczogbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnQuaW5kZXhMYWJlbCB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWwgfHwgZGF0YVBvaW50LmluZGV4TGFiZWxGb3JtYXR0ZXIgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyKSB7XG5cblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJzdGFja2VkQXJlYVwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnQsXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeCwgeTogeVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55ID49IDAgPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MgPiAwKVxuXHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cblx0XHRcdHdoaWxlIChjdXJyZW50QmFzZVZhbHVlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHZhciBwb2ludCA9IGN1cnJlbnRCYXNlVmFsdWVzLnBvcCgpO1xuXHRcdFx0XHRjdHgubGluZVRvKHBvaW50LngsIHBvaW50LnkpO1xuXG5cdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRnaG9zdEN0eC5saW5lVG8ocG9pbnQueCwgcG9pbnQueSk7XG5cdFx0XHR9XG5cblx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblxuXHRcdFx0Y3R4Lmdsb2JhbEFscGhhID0gZGF0YVNlcmllcy5maWxsT3BhY2l0eTtcblx0XHRcdGN0eC5maWxsKCk7XG5cdFx0XHRjdHguZ2xvYmFsQWxwaGEgPSAxO1xuXG5cdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRjdHgubW92ZVRvKHgsIHkpO1xuXG5cdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0Z2hvc3RDdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRcdGdob3N0Q3R4LmZpbGwoKTtcblx0XHRcdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdGdob3N0Q3R4Lm1vdmVUbyh4LCB5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRkZWxldGUgKGRhdGFTZXJpZXMuZGF0YVBvaW50SW5kZXhlcyk7XG5cdH1cblxuXHRSZW5kZXJIZWxwZXIuZHJhd01hcmtlcnMobWFya2Vycyk7XG5cblxuXHRjdHgucmVzdG9yZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRnaG9zdEN0eC5yZXN0b3JlKCk7XG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uSW5mbyA9IHtcblx0XHRzb3VyY2U6IGN0eCwgZGVzdDogdGhpcy5wbG90QXJlYS5jdHgsIGFuaW1hdGlvbkNhbGxiYWNrOiBBbmltYXRpb25IZWxwZXIueENsaXBBbmltYXRpb24sIGVhc2luZ0Z1bmN0aW9uOiBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmxpbmVhciwgYW5pbWF0aW9uQmFzZTogMFxuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cbiIsIlxuaW1wb3J0IFJlbmRlckhlbHBlciBmcm9tICcuLi9oZWxwZXJzL3JlbmRlcic7XG5pbXBvcnQgQW5pbWF0aW9uSGVscGVyIGZyb20gJy4uL2hlbHBlcnMvYW5pbWF0b3InO1xuaW1wb3J0IHtpc0NhbnZhc1N1cHBvcnRlZCwgY29tcGFyZU51bWJlcnMsIGludFRvSGV4Q29sb3JTdHJpbmcsIGdldExpbmVEYXNoQXJyYXl9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwbG90VW5pdCkge1xuXHR2YXIgY3R4ID0gcGxvdFVuaXQudGFyZ2V0Q2FudmFzQ3R4IHx8IHRoaXMucGxvdEFyZWEuY3R4O1xuXG5cdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgY29sb3IgPSBudWxsO1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cdHZhciBtYXJrZXJzID0gW107XG5cblx0dmFyIG9mZnNldFkgPSBbXTtcblxuXHR2YXIgYWxsWFZhbHVlcyA9IFtdO1xuXHQvL3ZhciBvZmZzZXROZWdhdGl2ZVkgPSBbXTtcblxuXHR2YXIgaSA9IDAsIHgsIHk7XG5cdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgZXZlcnl0aW1lIGl0IGlzIGFjY2Vzc2VkLlxuXG5cblx0Ly92YXIgeVplcm9Ub1BpeGVsID0gKGF4aXNZUHJvcHMueTIgLSBheGlzWVByb3BzLmhlaWdodCAvIHJhbmdlWSAqIE1hdGguYWJzKDAgLSBwbG90VW5pdC5heGlzWS52aWV3cG9ydE1pbmltdW0pICsgLjUpIDw8IDA7XG5cdHZhciB5WmVyb1RvUGl4ZWwgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKDAgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSkgPDwgMDtcblxuXHR2YXIgbWF4QmFyV2lkdGggPSB0aGlzLmRhdGFQb2ludE1heFdpZHRoID8gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA6IHRoaXMud2lkdGggKiAuMTUgPDwgMDtcblx0dmFyIHhNaW5EaWZmID0gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8ubWluRGlmZjtcblx0dmFyIGJhcldpZHRoID0gKCgocGxvdEFyZWEud2lkdGggLyBNYXRoLmFicyhwbG90VW5pdC5heGlzWC52aWV3cG9ydE1heGltdW0gLSBwbG90VW5pdC5heGlzWC52aWV3cG9ydE1pbmltdW0pKSAqIE1hdGguYWJzKHhNaW5EaWZmKSkgKiAuOSkgPDwgMDtcblxuXHR2YXIgZ2hvc3RDdHggPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHg7XG5cblx0Y3R4LnNhdmUoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0Z2hvc3RDdHguc2F2ZSgpO1xuXG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdGdob3N0Q3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0XHRnaG9zdEN0eC5jbGlwKCk7XG5cdH1cblxuXHR2YXIgeFZhbHVlUHJlc2VudCA9IFtdO1xuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblx0XHR2YXIgZGF0YVBvaW50cyA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cztcblx0XHR2YXIgeFZhbHVlO1xuXG5cdFx0ZGF0YVNlcmllcy5kYXRhUG9pbnRJbmRleGVzID0gW107XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0eFZhbHVlID0gZGF0YVBvaW50c1tpXS54LmdldFRpbWUgPyBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50c1tpXS54O1xuXHRcdFx0ZGF0YVNlcmllcy5kYXRhUG9pbnRJbmRleGVzW3hWYWx1ZV0gPSBpO1xuXG5cdFx0XHRpZiAoIXhWYWx1ZVByZXNlbnRbeFZhbHVlXSkge1xuXHRcdFx0XHRhbGxYVmFsdWVzLnB1c2goeFZhbHVlKTtcblx0XHRcdFx0eFZhbHVlUHJlc2VudFt4VmFsdWVdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRhbGxYVmFsdWVzLnNvcnQoY29tcGFyZU51bWJlcnMpO1xuXHR9XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXG5cdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblx0XHR2YXIgZGF0YVBvaW50cyA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cztcblx0XHR2YXIgaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSB0cnVlO1xuXG5cblx0XHR2YXIgc2VyaWVzSWQgPSBkYXRhU2VyaWVzLmlkO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbc2VyaWVzSWRdID0ge1xuXHRcdFx0b2JqZWN0VHlwZTogXCJkYXRhU2VyaWVzXCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4XG5cdFx0fTtcblx0XHR2YXIgaGV4Q29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKHNlcmllc0lkKTtcblx0XHRnaG9zdEN0eC5maWxsU3R5bGUgPSBoZXhDb2xvcjtcblxuXHRcdGlmIChkYXRhUG9pbnRzLmxlbmd0aCA9PSAxKVxuXHRcdFx0YmFyV2lkdGggPSBtYXhCYXJXaWR0aDtcblxuXHRcdGlmIChiYXJXaWR0aCA8IDEpXG5cdFx0XHRiYXJXaWR0aCA9IDE7XG5cdFx0ZWxzZSBpZiAoYmFyV2lkdGggPiBtYXhCYXJXaWR0aClcblx0XHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cblx0XHR2YXIgY3VycmVudEJhc2VWYWx1ZXMgPSBbXTtcblxuXHRcdGlmIChhbGxYVmFsdWVzLmxlbmd0aCA+IDApIHtcblxuXHRcdFx0Y29sb3IgPSBkYXRhU2VyaWVzLl9jb2xvclNldFtpICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcblx0XHRcdC8vY3R4LnN0cm9rZVN0eWxlID0gXCJyZWRcIjtcblx0XHRcdGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuXHRcdFx0Y3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblxuXHRcdFx0aWYgKGN0eC5zZXRMaW5lRGFzaCkge1xuXHRcdFx0XHRjdHguc2V0TGluZURhc2goZ2V0TGluZURhc2hBcnJheShkYXRhU2VyaWVzLmxpbmVEYXNoVHlwZSwgZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzKSk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBiZXZlbEVuYWJsZWQgPSAoYmFyV2lkdGggPiA1KSA/IGZhbHNlIDogZmFsc2U7XG5cblx0XHRcdC8vY3R4LnN0cm9rZVN0eWxlID0gXCIjNDU3MkE3IFwiO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgYWxsWFZhbHVlcy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdGRhdGFQb2ludFggPSBhbGxYVmFsdWVzW2ldO1xuXHRcdFx0XHR2YXIgZGF0YVBvaW50ID0gbnVsbDtcblxuXHRcdFx0XHRpZiAoZGF0YVNlcmllcy5kYXRhUG9pbnRJbmRleGVzW2RhdGFQb2ludFhdID49IDApXG5cdFx0XHRcdFx0ZGF0YVBvaW50ID0gZGF0YVBvaW50c1tkYXRhU2VyaWVzLmRhdGFQb2ludEluZGV4ZXNbZGF0YVBvaW50WF1dO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0ZGF0YVBvaW50ID0ge1xuXHRcdFx0XHRcdFx0eDogZGF0YVBvaW50WCwgeTogMFxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1pbiB8fCBkYXRhUG9pbnRYID4gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNYXgpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgKGRhdGFQb2ludC55KSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR2YXIgeVBlcmNlbnQ7XG5cdFx0XHRcdGlmIChwbG90VW5pdC5kYXRhUG9pbnRZU3Vtc1tkYXRhUG9pbnRYXSAhPT0gMClcblx0XHRcdFx0XHR5UGVyY2VudCA9IGRhdGFQb2ludC55IC8gcGxvdFVuaXQuZGF0YVBvaW50WVN1bXNbZGF0YVBvaW50WF0gKiAxMDA7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR5UGVyY2VudCA9IDA7XG5cblx0XHRcdFx0dmFyIHggPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR2YXIgeSA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoeVBlcmNlbnQgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSk7XG5cblx0XHRcdFx0dmFyIG9mZnNldCA9IG9mZnNldFlbZGF0YVBvaW50WF0gPyBvZmZzZXRZW2RhdGFQb2ludFhdIDogMDtcblxuXHRcdFx0XHR5ID0geSAtIG9mZnNldDtcblx0XHRcdFx0Y3VycmVudEJhc2VWYWx1ZXMucHVzaCh7IHg6IHgsIHk6IHlaZXJvVG9QaXhlbCAtIG9mZnNldCB9KTtcblx0XHRcdFx0b2Zmc2V0WVtkYXRhUG9pbnRYXSA9IHlaZXJvVG9QaXhlbCAtIHk7XG5cblx0XHRcdFx0aWYgKGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhKSB7XG5cdFx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdGN0eC5tb3ZlVG8oeCwgeSk7XG5cblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubW92ZVRvKHgsIHkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cblx0XHRcdFx0XHRjdHgubGluZVRvKHgsIHkpO1xuXG5cdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubGluZVRvKHgsIHkpO1xuXG5cdFx0XHRcdFx0aWYgKGkgJSAyNTAgPT0gMCkge1xuXG5cdFx0XHRcdFx0XHRpZiAoZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzID4gMClcblx0XHRcdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXG5cdFx0XHRcdFx0XHR3aGlsZSAoY3VycmVudEJhc2VWYWx1ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgcG9pbnQgPSBjdXJyZW50QmFzZVZhbHVlcy5wb3AoKTtcblx0XHRcdFx0XHRcdFx0Y3R4LmxpbmVUbyhwb2ludC54LCBwb2ludC55KTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0XHRcdFx0Z2hvc3RDdHgubGluZVRvKHBvaW50LngsIHBvaW50LnkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cblx0XHRcdFx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IGRhdGFTZXJpZXMuZmlsbE9wYWNpdHk7XG5cdFx0XHRcdFx0XHRjdHguZmlsbCgpO1xuXHRcdFx0XHRcdFx0Y3R4Lmdsb2JhbEFscGhhID0gMTtcblxuXHRcdFx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0Y3R4Lm1vdmVUbyh4LCB5KTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRcdGdob3N0Q3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5maWxsKCk7XG5cdFx0XHRcdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oeCwgeSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGN1cnJlbnRCYXNlVmFsdWVzLnB1c2goeyB4OiB4LCB5OiB5WmVyb1RvUGl4ZWwgLSBvZmZzZXQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblxuXHRcdFx0XHRpZiAoZGF0YVNlcmllcy5kYXRhUG9pbnRJbmRleGVzW2RhdGFQb2ludFhdID49IDApIHtcblx0XHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tkYXRhU2VyaWVzLmRhdGFQb2ludEluZGV4ZXNbZGF0YVBvaW50WF1dO1xuXHRcdFx0XHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdID0ge1xuXHRcdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGRhdGFTZXJpZXMuZGF0YVBvaW50SW5kZXhlc1tkYXRhUG9pbnRYXSwgeDE6IHgsIHkxOiB5XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vUmVuZGVyIE1hcmtlclxuXHRcdFx0XHRpZiAoZGF0YVNlcmllcy5kYXRhUG9pbnRJbmRleGVzW2RhdGFQb2ludFhdID49IDAgJiYgZGF0YVBvaW50Lm1hcmtlclNpemUgIT09IDApIHtcblx0XHRcdFx0XHRpZiAoZGF0YVBvaW50Lm1hcmtlclNpemUgPiAwIHx8IGRhdGFTZXJpZXMubWFya2VyU2l6ZSA+IDApIHtcblx0XHRcdFx0XHRcdHZhciBtYXJrZXJQcm9wcyA9IGRhdGFTZXJpZXMuZ2V0TWFya2VyUHJvcGVydGllcyhpLCB4LCB5LCBjdHgpO1xuXHRcdFx0XHRcdFx0bWFya2Vycy5wdXNoKG1hcmtlclByb3BzKTtcblxuXHRcdFx0XHRcdFx0Ly9pZiAoIWRhdGFTZXJpZXMubWF4V2lkdGhJblggfHwgbWFya2VyUHJvcHMuc2l6ZSA+IGRhdGFTZXJpZXMubWF4V2lkdGhJblgpIHtcblx0XHRcdFx0XHRcdC8vXHRkYXRhU2VyaWVzLm1heFdpZHRoSW5YID0gbWFya2VyUHJvcHMuc2l6ZSAvIChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgPiAxID8gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0IC0gMSA6IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCk7XG5cdFx0XHRcdFx0XHQvL31cblxuXHRcdFx0XHRcdFx0bWFya2VyQ29sb3IgPSBpbnRUb0hleENvbG9yU3RyaW5nKGlkKTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0eDogeCwgeTogeSwgY3R4OiBnaG9zdEN0eCxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBtYXJrZXJQcm9wcy50eXBlLFxuXHRcdFx0XHRcdFx0XHRcdHNpemU6IG1hcmtlclByb3BzLnNpemUsXG5cdFx0XHRcdFx0XHRcdFx0Y29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlckNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJUaGlja25lc3M6IG1hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzc1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50LmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludC5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcikge1xuXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwic3RhY2tlZEFyZWExMDBcIixcblx0XHRcdFx0XHRcdGRhdGFQb2ludDogZGF0YVBvaW50LFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IHgsIHk6IHlcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkaXJlY3Rpb246IGRhdGFQb2ludHNbaV0ueSA+PSAwID8gMSA6IC0xLFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzID4gMClcblx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXG5cdFx0XHR3aGlsZSAoY3VycmVudEJhc2VWYWx1ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR2YXIgcG9pbnQgPSBjdXJyZW50QmFzZVZhbHVlcy5wb3AoKTtcblx0XHRcdFx0Y3R4LmxpbmVUbyhwb2ludC54LCBwb2ludC55KTtcblxuXHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0Z2hvc3RDdHgubGluZVRvKHBvaW50LngsIHBvaW50LnkpO1xuXHRcdFx0fVxuXG5cdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cblx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IGRhdGFTZXJpZXMuZmlsbE9wYWNpdHk7XG5cdFx0XHRjdHguZmlsbCgpO1xuXHRcdFx0Y3R4Lmdsb2JhbEFscGhhID0gMTtcblxuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0Y3R4Lm1vdmVUbyh4LCB5KTtcblxuXHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdGdob3N0Q3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHRnaG9zdEN0eC5maWxsKCk7XG5cdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oeCwgeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIChkYXRhU2VyaWVzLmRhdGFQb2ludEluZGV4ZXMpO1xuXHR9XG5cblx0UmVuZGVySGVscGVyLmRyYXdNYXJrZXJzKG1hcmtlcnMpO1xuXG5cdGN0eC5yZXN0b3JlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdGdob3N0Q3R4LnJlc3RvcmUoKTtcblxuXHQvL3NvdXJjZSBhbmQgZGVzdCB3b3VsZCBiZSBzYW1lIHdoZW4gYW5pbWF0aW9uIGlzIG5vdCBlbmFibGVkXG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci54Q2xpcEFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcubGluZWFyLCBhbmltYXRpb25CYXNlOiAwXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuIiwiXG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cdHZhciBjdHggPSBwbG90VW5pdC50YXJnZXRDYW52YXNDdHggfHwgdGhpcy5wbG90QXJlYS5jdHg7XG5cdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgY29sb3IgPSBudWxsO1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cblx0dmFyIG9mZnNldFBvc2l0aXZlWSA9IFtdO1xuXHR2YXIgb2Zmc2V0TmVnYXRpdmVZID0gW107XG5cblx0dmFyIGkgPSAwLCB4LCB5O1xuXHR2YXIgZGF0YVBvaW50WDsgLy9Vc2VkIHNvIHRoYXQgd2hlbiBkYXRhUG9pbnQueCBpcyBhIERhdGVUaW1lIHZhbHVlLCBpdCBkb2Vzbid0IGdldCBjb252ZXJ0ZWQgdG8gbnVtYmVyIGV2ZXJ5dGltZSBpdCBpcyBhY2Nlc3NlZC5cblxuXHQvL3ZhciB5WmVyb1RvUGl4ZWwgPSAoYXhpc1lQcm9wcy55MiAtIGF4aXNZUHJvcHMuaGVpZ2h0IC8gcmFuZ2VZICogTWF0aC5hYnMoMCAtIHBsb3RVbml0LmF4aXNZLnZpZXdwb3J0TWluaW11bSkgKyAuNSkgPDwgMDtcblx0dmFyIHlaZXJvVG9QaXhlbCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoMCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pKSA8PCAwO1xuXG5cdHZhciBtYXhCYXJXaWR0aCA9IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggPyB0aGlzLmRhdGFQb2ludE1heFdpZHRoIDogdGhpcy5oZWlnaHQgKiAuMTUgPDwgMDtcblx0dmFyIHhNaW5EaWZmID0gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8ubWluRGlmZjtcblx0dmFyIGJhcldpZHRoID0gKCgocGxvdEFyZWEuaGVpZ2h0IC8gTWF0aC5hYnMocGxvdFVuaXQuYXhpc1gudmlld3BvcnRNYXhpbXVtIC0gcGxvdFVuaXQuYXhpc1gudmlld3BvcnRNaW5pbXVtKSkgKiBNYXRoLmFicyh4TWluRGlmZikpIC8gcGxvdFVuaXQucGxvdFR5cGUucGxvdFVuaXRzLmxlbmd0aCAqIC45KSA8PCAwO1xuXG5cdGlmIChiYXJXaWR0aCA+IG1heEJhcldpZHRoKVxuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cdGVsc2UgaWYgKHhNaW5EaWZmID09PSBJbmZpbml0eSkge1xuXHRcdGJhcldpZHRoID0gbWF4QmFyV2lkdGg7XG5cdH0gZWxzZSBpZiAoYmFyV2lkdGggPCAxKVxuXHRcdGJhcldpZHRoID0gMTtcblxuXHRjdHguc2F2ZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHguc2F2ZSgpO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0Y3R4LmNsaXAoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5jbGlwKCk7XG5cdH1cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXHRcdHZhciBpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IHRydWU7XG5cblx0XHQvL2RhdGFTZXJpZXMubWF4V2lkdGhJblggPSBiYXJXaWR0aCAvIChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgPiAxID8gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0IC0gMSA6IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCk7XG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL3ZhciB4eSA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uUGxvdEFyZWEoZGF0YVBvaW50c1swXS54LCBkYXRhUG9pbnRzWzBdLnkpO1xuXG5cdFx0XHR2YXIgYmV2ZWxFbmFibGVkID0gKGJhcldpZHRoID4gNSkgJiYgZGF0YVNlcmllcy5iZXZlbEVuYWJsZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IFwiIzQ1NzJBNyBcIjtcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54LmdldFRpbWUgPyBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50c1tpXS54O1xuXG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1pbiB8fCBkYXRhUG9pbnRYID4gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNYXgpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgKGRhdGFQb2ludHNbaV0ueSkgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0eSA9IChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50WCAtIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdC8veCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55IC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHRcdFx0eCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50c1tpXS55IC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkpO1xuXG5cdFx0XHRcdC8vdmFyIHgxID0geCAtIChwbG90VW5pdC5wbG90VHlwZS5wbG90VW5pdHMubGVuZ3RoICogYmFyV2lkdGggLyAyKSArIChwbG90VW5pdC5pbmRleCAqIGJhcldpZHRoKSA8PCAwO1xuXG5cdFx0XHRcdHZhciB5MSA9IHkgLSAocGxvdFVuaXQucGxvdFR5cGUucGxvdFVuaXRzLmxlbmd0aCAqIGJhcldpZHRoIC8gMikgKyAocGxvdFVuaXQuaW5kZXggKiBiYXJXaWR0aCkgPDwgMDtcblx0XHRcdFx0dmFyIHkyID0geTEgKyBiYXJXaWR0aCA8PCAwO1xuXHRcdFx0XHR2YXIgeDE7XG5cdFx0XHRcdHZhciB4MjtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS55ID49IDApIHtcblx0XHRcdFx0XHR2YXIgb2Zmc2V0ID0gb2Zmc2V0UG9zaXRpdmVZW2RhdGFQb2ludFhdID8gb2Zmc2V0UG9zaXRpdmVZW2RhdGFQb2ludFhdIDogMDtcblxuXHRcdFx0XHRcdHgxID0geVplcm9Ub1BpeGVsICsgb2Zmc2V0O1xuXHRcdFx0XHRcdHgyID0geCArIG9mZnNldDtcblxuXHRcdFx0XHRcdG9mZnNldFBvc2l0aXZlWVtkYXRhUG9pbnRYXSA9IG9mZnNldCArICh4MiAtIHgxKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBvZmZzZXQgPSBvZmZzZXROZWdhdGl2ZVlbZGF0YVBvaW50WF0gPyBvZmZzZXROZWdhdGl2ZVlbZGF0YVBvaW50WF0gOiAwO1xuXG5cdFx0XHRcdFx0eDEgPSB4IC0gb2Zmc2V0O1xuXHRcdFx0XHRcdHgyID0geVplcm9Ub1BpeGVsIC0gb2Zmc2V0O1xuXG5cdFx0XHRcdFx0b2Zmc2V0TmVnYXRpdmVZW2RhdGFQb2ludFhdID0gb2Zmc2V0ICsgKHgyIC0geDEpO1xuXHRcdFx0XHR9XG5cblxuXHRcdFx0XHRjb2xvciA9IGRhdGFQb2ludHNbaV0uY29sb3IgPyBkYXRhUG9pbnRzW2ldLmNvbG9yIDogZGF0YVNlcmllcy5fY29sb3JTZXRbaSAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cdFx0XHRcdGRyYXdSZWN0KGN0eCwgeDEsIHkxLCB4MiwgeTIsIGNvbG9yLCAwLCBudWxsLCBiZXZlbEVuYWJsZWQsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGRhdGFTZXJpZXMuZmlsbE9wYWNpdHkpO1xuXG5cdFx0XHRcdHZhciBpZCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2ldO1xuXHRcdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSA9IHtcblx0XHRcdFx0XHRpZDogaWQsIG9iamVjdFR5cGU6IFwiZGF0YVBvaW50XCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleDogaSwgeDE6IHgxLCB5MTogeTEsIHgyOiB4MiwgeTI6IHkyXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cblx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdGRyYXdSZWN0KHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eCwgeDEsIHkxLCB4MiwgeTIsIGNvbG9yLCAwLCBudWxsLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbCB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWwgfHwgZGF0YVBvaW50c1tpXS5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcilcblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJzdGFja2VkQmFyXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogZGF0YVBvaW50c1tpXS55ID49IDAgPyB4MiA6IHgxLCB5OiB5XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkYXRhUG9pbnRzW2ldLnkgPj0gMCA/IDEgOiAtMSxcblx0XHRcdFx0XHRcdGJvdW5kczoge1xuXHRcdFx0XHRcdFx0XHR4MTogTWF0aC5taW4oeDEsIHgyKSwgeTE6IHkxLCB4MjogTWF0aC5tYXgoeDEsIHgyKSwgeTI6IHkyXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y3R4LnJlc3RvcmUoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnJlc3RvcmUoKTtcblxuXHQvL3NvdXJjZSBhbmQgZGVzdCB3b3VsZCBiZSBzYW1lIHdoZW4gYW5pbWF0aW9uIGlzIG5vdCBlbmFibGVkXG5cdHZhciBhbmltYXRpb25CYXNlID0gTWF0aC5tYXgoeVplcm9Ub1BpeGVsLCBwbG90VW5pdC5heGlzWC5ib3VuZGluZ1JlY3QueDIpO1xuXHR2YXIgYW5pbWF0aW9uSW5mbyA9IHtcblx0XHRzb3VyY2U6IGN0eCwgZGVzdDogdGhpcy5wbG90QXJlYS5jdHgsIGFuaW1hdGlvbkNhbGxiYWNrOiBBbmltYXRpb25IZWxwZXIueFNjYWxlQW5pbWF0aW9uLCBlYXNpbmdGdW5jdGlvbjogQW5pbWF0aW9uSGVscGVyLmVhc2luZy5lYXNlT3V0UXVhcnQsIGFuaW1hdGlvbkJhc2U6IGFuaW1hdGlvbkJhc2Vcblx0fTtcblx0cmV0dXJuIGFuaW1hdGlvbkluZm87XG59XG4iLCJcbmltcG9ydCB7aXNDYW52YXNTdXBwb3J0ZWR9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblx0dmFyIHRvdGFsRGF0YVNlcmllcyA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDtcblxuXHRpZiAodG90YWxEYXRhU2VyaWVzIDw9IDApXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBjb2xvciA9IG51bGw7XG5cblx0dmFyIHBsb3RBcmVhID0gdGhpcy5wbG90QXJlYTtcblxuXHR2YXIgb2Zmc2V0UG9zaXRpdmVZID0gW107XG5cdHZhciBvZmZzZXROZWdhdGl2ZVkgPSBbXTtcblxuXHR2YXIgaSA9IDAsIHgsIHk7XG5cdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgZXZlcnl0aW1lIGl0IGlzIGFjY2Vzc2VkLlxuXG5cdC8vdmFyIHlaZXJvVG9QaXhlbCA9IChheGlzWVByb3BzLnkyIC0gYXhpc1lQcm9wcy5oZWlnaHQgLyByYW5nZVkgKiBNYXRoLmFicygwIC0gcGxvdFVuaXQuYXhpc1kudmlld3BvcnRNaW5pbXVtKSArIC41KSA8PCAwO1xuXHR2YXIgeVplcm9Ub1BpeGVsID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICgwIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkpIDw8IDA7XG5cblx0dmFyIG1heEJhcldpZHRoID0gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA/IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggOiB0aGlzLmhlaWdodCAqIC4xNSA8PCAwO1xuXHR2YXIgeE1pbkRpZmYgPSBwbG90VW5pdC5heGlzWC5kYXRhSW5mby5taW5EaWZmO1xuXHR2YXIgYmFyV2lkdGggPSAoKChwbG90QXJlYS5oZWlnaHQgLyBNYXRoLmFicyhwbG90VW5pdC5heGlzWC52aWV3cG9ydE1heGltdW0gLSBwbG90VW5pdC5heGlzWC52aWV3cG9ydE1pbmltdW0pKSAqIE1hdGguYWJzKHhNaW5EaWZmKSkgLyBwbG90VW5pdC5wbG90VHlwZS5wbG90VW5pdHMubGVuZ3RoICogLjkpIDw8IDA7XG5cblx0aWYgKGJhcldpZHRoID4gbWF4QmFyV2lkdGgpXG5cdFx0YmFyV2lkdGggPSBtYXhCYXJXaWR0aDtcblx0ZWxzZSBpZiAoeE1pbkRpZmYgPT09IEluZmluaXR5KSB7XG5cdFx0YmFyV2lkdGggPSBtYXhCYXJXaWR0aDtcblx0fSBlbHNlIGlmIChiYXJXaWR0aCA8IDEpXG5cdFx0YmFyV2lkdGggPSAxO1xuXG5cdGN0eC5zYXZlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5zYXZlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LmNsaXAoKTtcblx0fVxuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblxuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblxuXHRcdC8vZGF0YVNlcmllcy5tYXhXaWR0aEluWCA9IGJhcldpZHRoIC8gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA+IDEgPyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgLSAxIDogcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0KTtcblxuXHRcdGlmIChkYXRhUG9pbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vdmFyIHh5ID0gdGhpcy5nZXRQaXhlbENvb3JkaW5hdGVzT25QbG90QXJlYShkYXRhUG9pbnRzWzBdLngsIGRhdGFQb2ludHNbMF0ueSk7XG5cblx0XHRcdHZhciBiZXZlbEVuYWJsZWQgPSAoYmFyV2lkdGggPiA1KSAmJiBkYXRhU2VyaWVzLmJldmVsRW5hYmxlZCA/IHRydWUgOiBmYWxzZTtcblxuXHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gXCIjNDU3MkE3IFwiO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSA/IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRzW2ldLng7XG5cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGVvZiAoZGF0YVBvaW50c1tpXS55KSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR5ID0gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRYIC0gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblxuXHRcdFx0XHR2YXIgeVBlcmNlbnQ7XG5cdFx0XHRcdGlmIChwbG90VW5pdC5kYXRhUG9pbnRZU3Vtc1tkYXRhUG9pbnRYXSAhPT0gMClcblx0XHRcdFx0XHR5UGVyY2VudCA9IGRhdGFQb2ludHNbaV0ueSAvIHBsb3RVbml0LmRhdGFQb2ludFlTdW1zW2RhdGFQb2ludFhdICogMTAwO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0eVBlcmNlbnQgPSAwO1xuXG5cdFx0XHRcdC8veCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoeVBlcmNlbnQgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR4ID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICh5UGVyY2VudCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pKTtcblxuXHRcdFx0XHR2YXIgeTEgPSB5IC0gKHBsb3RVbml0LnBsb3RUeXBlLnBsb3RVbml0cy5sZW5ndGggKiBiYXJXaWR0aCAvIDIpICsgKHBsb3RVbml0LmluZGV4ICogYmFyV2lkdGgpIDw8IDA7XG5cdFx0XHRcdHZhciB5MiA9IHkxICsgYmFyV2lkdGggPDwgMDtcblx0XHRcdFx0dmFyIHgxO1xuXHRcdFx0XHR2YXIgeDI7XG5cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS55ID49IDApIHtcblx0XHRcdFx0XHR2YXIgb2Zmc2V0ID0gb2Zmc2V0UG9zaXRpdmVZW2RhdGFQb2ludFhdID8gb2Zmc2V0UG9zaXRpdmVZW2RhdGFQb2ludFhdIDogMDtcblxuXHRcdFx0XHRcdHgxID0geVplcm9Ub1BpeGVsICsgb2Zmc2V0O1xuXHRcdFx0XHRcdHgyID0geCArIG9mZnNldDtcblxuXHRcdFx0XHRcdG9mZnNldFBvc2l0aXZlWVtkYXRhUG9pbnRYXSA9IG9mZnNldCArICh4MiAtIHgxKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBvZmZzZXQgPSBvZmZzZXROZWdhdGl2ZVlbZGF0YVBvaW50WF0gPyBvZmZzZXROZWdhdGl2ZVlbZGF0YVBvaW50WF0gOiAwO1xuXG5cdFx0XHRcdFx0eDEgPSB4IC0gb2Zmc2V0O1xuXHRcdFx0XHRcdHgyID0geVplcm9Ub1BpeGVsIC0gb2Zmc2V0O1xuXG5cdFx0XHRcdFx0b2Zmc2V0TmVnYXRpdmVZW2RhdGFQb2ludFhdID0gb2Zmc2V0ICsgKHgyIC0geDEpO1xuXHRcdFx0XHR9XG5cblxuXHRcdFx0XHRjb2xvciA9IGRhdGFQb2ludHNbaV0uY29sb3IgPyBkYXRhUG9pbnRzW2ldLmNvbG9yIDogZGF0YVNlcmllcy5fY29sb3JTZXRbaSAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cdFx0XHRcdGRyYXdSZWN0KGN0eCwgeDEsIHkxLCB4MiwgeTIsIGNvbG9yLCAwLCBudWxsLCBiZXZlbEVuYWJsZWQsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGRhdGFTZXJpZXMuZmlsbE9wYWNpdHkpO1xuXG5cdFx0XHRcdHZhciBpZCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2ldO1xuXHRcdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSA9IHtcblx0XHRcdFx0XHRpZDogaWQsIG9iamVjdFR5cGU6IFwiZGF0YVBvaW50XCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleDogaSwgeDE6IHgxLCB5MTogeTEsIHgyOiB4MiwgeTI6IHkyXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cblx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdGRyYXdSZWN0KHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eCwgeDEsIHkxLCB4MiwgeTIsIGNvbG9yLCAwLCBudWxsLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbCB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWwgfHwgZGF0YVBvaW50c1tpXS5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcilcblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJzdGFja2VkQmFyMTAwXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogZGF0YVBvaW50c1tpXS55ID49IDAgPyB4MiA6IHgxLCB5OiB5XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkYXRhUG9pbnRzW2ldLnkgPj0gMCA/IDEgOiAtMSxcblx0XHRcdFx0XHRcdGJvdW5kczoge1xuXHRcdFx0XHRcdFx0XHR4MTogTWF0aC5taW4oeDEsIHgyKSwgeTE6IHkxLCB4MjogTWF0aC5tYXgoeDEsIHgyKSwgeTI6IHkyXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y3R4LnJlc3RvcmUoKTtcblxuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnJlc3RvcmUoKTtcblxuXHQvL3NvdXJjZSBhbmQgZGVzdCB3b3VsZCBiZSBzYW1lIHdoZW4gYW5pbWF0aW9uIGlzIG5vdCBlbmFibGVkXG5cdHZhciBhbmltYXRpb25CYXNlID0gTWF0aC5tYXgoeVplcm9Ub1BpeGVsLCBwbG90VW5pdC5heGlzWC5ib3VuZGluZ1JlY3QueDIpO1xuXHR2YXIgYW5pbWF0aW9uSW5mbyA9IHtcblx0XHRzb3VyY2U6IGN0eCwgZGVzdDogdGhpcy5wbG90QXJlYS5jdHgsIGFuaW1hdGlvbkNhbGxiYWNrOiBBbmltYXRpb25IZWxwZXIueFNjYWxlQW5pbWF0aW9uLCBlYXNpbmdGdW5jdGlvbjogQW5pbWF0aW9uSGVscGVyLmVhc2luZy5lYXNlT3V0UXVhcnQsIGFuaW1hdGlvbkJhc2U6IGFuaW1hdGlvbkJhc2Vcblx0fTtcblx0cmV0dXJuIGFuaW1hdGlvbkluZm87XG59XG4iLCJcbmltcG9ydCB7aXNDYW52YXNTdXBwb3J0ZWR9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblxuXHR2YXIgY3R4ID0gcGxvdFVuaXQudGFyZ2V0Q2FudmFzQ3R4IHx8IHRoaXMucGxvdEFyZWEuY3R4O1xuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXG5cdGlmICh0b3RhbERhdGFTZXJpZXMgPD0gMClcblx0XHRyZXR1cm47XG5cblx0dmFyIGNvbG9yID0gbnVsbDtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdHZhciBvZmZzZXRQb3NpdGl2ZVkgPSBbXTtcblx0dmFyIG9mZnNldE5lZ2F0aXZlWSA9IFtdO1xuXG5cdHZhciBpID0gMCwgeCwgeTtcblx0dmFyIGRhdGFQb2ludFg7IC8vVXNlZCBzbyB0aGF0IHdoZW4gZGF0YVBvaW50LnggaXMgYSBEYXRlVGltZSB2YWx1ZSwgaXQgZG9lc24ndCBnZXQgY29udmVydGVkIHRvIG51bWJlciBldmVyeXRpbWUgaXQgaXMgYWNjZXNzZWQuXG5cblx0Ly92YXIgeVplcm9Ub1BpeGVsID0gKGF4aXNZUHJvcHMueTIgLSBheGlzWVByb3BzLmhlaWdodCAvIHJhbmdlWSAqIE1hdGguYWJzKDAgLSBwbG90VW5pdC5heGlzWS52aWV3cG9ydE1pbmltdW0pICsgLjUpIDw8IDA7XG5cdHZhciB5WmVyb1RvUGl4ZWwgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKDAgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSkgPDwgMDtcblxuXHR2YXIgbWF4QmFyV2lkdGggPSB0aGlzLmRhdGFQb2ludE1heFdpZHRoID8gdGhpcy5kYXRhUG9pbnRNYXhXaWR0aCA6IHRoaXMud2lkdGggKiAuMTUgPDwgMDtcblx0dmFyIHhNaW5EaWZmID0gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8ubWluRGlmZjtcblx0dmFyIGJhcldpZHRoID0gKCgocGxvdEFyZWEud2lkdGggLyBNYXRoLmFicyhwbG90VW5pdC5heGlzWC52aWV3cG9ydE1heGltdW0gLSBwbG90VW5pdC5heGlzWC52aWV3cG9ydE1pbmltdW0pKSAqIE1hdGguYWJzKHhNaW5EaWZmKSkgLyBwbG90VW5pdC5wbG90VHlwZS5wbG90VW5pdHMubGVuZ3RoICogLjkpIDw8IDA7XG5cblx0aWYgKGJhcldpZHRoID4gbWF4QmFyV2lkdGgpXG5cdFx0YmFyV2lkdGggPSBtYXhCYXJXaWR0aDtcblx0ZWxzZSBpZiAoeE1pbkRpZmYgPT09IEluZmluaXR5KSB7XG5cdFx0YmFyV2lkdGggPSBtYXhCYXJXaWR0aDtcblx0fSBlbHNlIGlmIChiYXJXaWR0aCA8IDEpXG5cdFx0YmFyV2lkdGggPSAxO1xuXG5cblxuXHRjdHguc2F2ZSgpO1xuXHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnNhdmUoKTtcblxuXHRjdHguYmVnaW5QYXRoKCk7XG5cdGN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdGN0eC5jbGlwKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS53aWR0aCwgcGxvdEFyZWEuaGVpZ2h0KTtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHguY2xpcCgpO1xuXHR9XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXG5cdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblxuXHRcdC8vIFJlZHVjaW5nIHBpeGVsUGVyVW5pdCBieSAxIGp1c3QgdG8gb3ZlcmNvbWUgYW55IHByb2JsZW1zIGR1ZSB0byByb3VuZGluZyBvZmYgb2YgcGl4ZWxzLlxuXHRcdC8vZGF0YVNlcmllcy5tYXhXaWR0aEluWCA9IGJhcldpZHRoIC8gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA+IDEgPyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgLSAxIDogcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0KTtcblxuXG5cdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly92YXIgeHkgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPblBsb3RBcmVhKGRhdGFQb2ludHNbMF0ueCwgZGF0YVBvaW50c1swXS55KTtcblxuXHRcdFx0dmFyIGJldmVsRW5hYmxlZCA9IChiYXJXaWR0aCA+IDUpICYmIGRhdGFTZXJpZXMuYmV2ZWxFbmFibGVkID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBcIiM0NTcyQTcgXCI7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lID8gZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKSA6IGRhdGFQb2ludHNbaV0ueDtcblxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZW9mIChkYXRhUG9pbnRzW2ldLnkpICE9PSBcIm51bWJlclwiKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHggPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5ID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnkgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSk7XG5cblx0XHRcdFx0dmFyIHgxID0geCAtIChwbG90VW5pdC5wbG90VHlwZS5wbG90VW5pdHMubGVuZ3RoICogYmFyV2lkdGggLyAyKSArIChwbG90VW5pdC5pbmRleCAqIGJhcldpZHRoKSA8PCAwO1xuXHRcdFx0XHR2YXIgeDIgPSB4MSArIGJhcldpZHRoIDw8IDA7XG5cdFx0XHRcdHZhciB5MTtcblx0XHRcdFx0dmFyIHkyO1xuXG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ueSA+PSAwKSB7XG5cdFx0XHRcdFx0dmFyIG9mZnNldCA9IG9mZnNldFBvc2l0aXZlWVtkYXRhUG9pbnRYXSA/IG9mZnNldFBvc2l0aXZlWVtkYXRhUG9pbnRYXSA6IDA7XG5cblx0XHRcdFx0XHR5MSA9IHkgLSBvZmZzZXQ7XG5cdFx0XHRcdFx0eTIgPSB5WmVyb1RvUGl4ZWwgLSBvZmZzZXQ7XG5cblx0XHRcdFx0XHRvZmZzZXRQb3NpdGl2ZVlbZGF0YVBvaW50WF0gPSBvZmZzZXQgKyAoeTIgLSB5MSk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgb2Zmc2V0ID0gb2Zmc2V0TmVnYXRpdmVZW2RhdGFQb2ludFhdID8gb2Zmc2V0TmVnYXRpdmVZW2RhdGFQb2ludFhdIDogMDtcblxuXHRcdFx0XHRcdHkyID0geSArIG9mZnNldDtcblx0XHRcdFx0XHR5MSA9IHlaZXJvVG9QaXhlbCArIG9mZnNldDtcblxuXHRcdFx0XHRcdG9mZnNldE5lZ2F0aXZlWVtkYXRhUG9pbnRYXSA9IG9mZnNldCArICh5MiAtIHkxKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbG9yID0gZGF0YVBvaW50c1tpXS5jb2xvciA/IGRhdGFQb2ludHNbaV0uY29sb3IgOiBkYXRhU2VyaWVzLl9jb2xvclNldFtpICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcblxuXHRcdFx0XHRkcmF3UmVjdChjdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgYmV2ZWxFbmFibGVkICYmIChkYXRhUG9pbnRzW2ldLnkgPj0gMCksIChkYXRhUG9pbnRzW2ldLnkgPCAwKSAmJiBiZXZlbEVuYWJsZWQsIGZhbHNlLCBmYWxzZSwgZGF0YVNlcmllcy5maWxsT3BhY2l0eSk7XG5cblx0XHRcdFx0Ly9pZiAoZGF0YVNlcmllcy5tYXJrZXJUeXBlICYmIGRhdGFTZXJpZXMubWFya2VyU2l6ZSA+IDApIHtcblx0XHRcdFx0Ly8gICAgUmVuZGVySGVscGVyLmRyYXdNYXJrZXIoeDEgKyAoeDIgLSB4MSkvMiwgeTEsIGN0eCwgZGF0YVNlcmllcy5tYXJrZXJUeXBlLCBkYXRhU2VyaWVzLm1hcmtlclNpemUsIGNvbG9yLCBkYXRhU2VyaWVzLm1hcmtlckJvcmRlckNvbG9yLCBkYXRhU2VyaWVzLm1hcmtlckJvcmRlclRoaWNrbmVzcyA/IGRhdGFTZXJpZXMubWFya2VyQm9yZGVyVGhpY2tuZXNzIDogMSk7XG5cdFx0XHRcdC8vfVxuXG5cdFx0XHRcdHZhciBpZCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2ldO1xuXHRcdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSA9IHtcblx0XHRcdFx0XHRpZDogaWQsIG9iamVjdFR5cGU6IFwiZGF0YVBvaW50XCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleDogaSwgeDE6IHgxLCB5MTogeTEsIHgyOiB4MiwgeTI6IHkyXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cblx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdGRyYXdSZWN0KHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eCwgeDEsIHkxLCB4MiwgeTIsIGNvbG9yLCAwLCBudWxsLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5pbmRleExhYmVsIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbCB8fCBkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWxGb3JtYXR0ZXIgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyKSB7XG5cblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJzdGFja2VkQ29sdW1uXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeCwgeTogZGF0YVBvaW50c1tpXS55ID49IDAgPyB5MSA6IHkyXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBkYXRhUG9pbnRzW2ldLnkgPj0gMCA/IDEgOiAtMSxcblx0XHRcdFx0XHRcdGJvdW5kczoge1xuXHRcdFx0XHRcdFx0XHR4MTogeDEsIHkxOiBNYXRoLm1pbih5MSwgeTIpLCB4MjogeDIsIHkyOiBNYXRoLm1heCh5MSwgeTIpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGN0eC5yZXN0b3JlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZXN0b3JlKCk7XG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uQmFzZSA9IE1hdGgubWluKHlaZXJvVG9QaXhlbCwgcGxvdFVuaXQuYXhpc1kuYm91bmRpbmdSZWN0LnkyKTtcblx0dmFyIGFuaW1hdGlvbkluZm8gPSB7XG5cdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLnlTY2FsZUFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcuZWFzZU91dFF1YXJ0LCBhbmltYXRpb25CYXNlOiBhbmltYXRpb25CYXNlXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuIiwiXG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cdHZhciBjdHggPSBwbG90VW5pdC50YXJnZXRDYW52YXNDdHggfHwgdGhpcy5wbG90QXJlYS5jdHg7XG5cdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgY29sb3IgPSBudWxsO1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cblx0dmFyIG9mZnNldFBvc2l0aXZlWSA9IFtdO1xuXHR2YXIgb2Zmc2V0TmVnYXRpdmVZID0gW107XG5cblx0dmFyIGkgPSAwLCB4LCB5O1xuXHR2YXIgZGF0YVBvaW50WDsgLy9Vc2VkIHNvIHRoYXQgd2hlbiBkYXRhUG9pbnQueCBpcyBhIERhdGVUaW1lIHZhbHVlLCBpdCBkb2Vzbid0IGdldCBjb252ZXJ0ZWQgdG8gbnVtYmVyIGV2ZXJ5dGltZSBpdCBpcyBhY2Nlc3NlZC5cblxuXHQvL3ZhciB5WmVyb1RvUGl4ZWwgPSAoYXhpc1lQcm9wcy55MiAtIGF4aXNZUHJvcHMuaGVpZ2h0IC8gcmFuZ2VZICogTWF0aC5hYnMoMCAtIHBsb3RVbml0LmF4aXNZLnZpZXdwb3J0TWluaW11bSkgKyAuNSkgPDwgMDtcblx0dmFyIHlaZXJvVG9QaXhlbCA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoMCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pKSA8PCAwO1xuXG5cdHZhciBtYXhCYXJXaWR0aCA9IHRoaXMuZGF0YVBvaW50TWF4V2lkdGggPyB0aGlzLmRhdGFQb2ludE1heFdpZHRoIDogdGhpcy53aWR0aCAqIC4xNSA8PCAwO1xuXHR2YXIgeE1pbkRpZmYgPSBwbG90VW5pdC5heGlzWC5kYXRhSW5mby5taW5EaWZmO1xuXHR2YXIgYmFyV2lkdGggPSAoKChwbG90QXJlYS53aWR0aCAvIE1hdGguYWJzKHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWF4aW11bSAtIHBsb3RVbml0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkpICogTWF0aC5hYnMoeE1pbkRpZmYpKSAvIHBsb3RVbml0LnBsb3RUeXBlLnBsb3RVbml0cy5sZW5ndGggKiAuOSkgPDwgMDtcblxuXHRpZiAoYmFyV2lkdGggPiBtYXhCYXJXaWR0aClcblx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoO1xuXHRlbHNlIGlmICh4TWluRGlmZiA9PT0gSW5maW5pdHkpIHtcblx0XHRiYXJXaWR0aCA9IG1heEJhcldpZHRoO1xuXHR9IGVsc2UgaWYgKGJhcldpZHRoIDwgMSlcblx0XHRiYXJXaWR0aCA9IDE7XG5cblx0Y3R4LnNhdmUoKTtcblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5zYXZlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LmNsaXAoKTtcblx0fVxuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblxuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cdFx0dmFyIGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gdHJ1ZTtcblxuXG5cdFx0Ly9kYXRhU2VyaWVzLm1heFdpZHRoSW5YID0gYmFyV2lkdGggLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXG5cblx0XHRpZiAoZGF0YVBvaW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvL3ZhciB4eSA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uUGxvdEFyZWEoZGF0YVBvaW50c1swXS54LCBkYXRhUG9pbnRzWzBdLnkpO1xuXG5cdFx0XHR2YXIgYmV2ZWxFbmFibGVkID0gKGJhcldpZHRoID4gNSkgJiYgZGF0YVNlcmllcy5iZXZlbEVuYWJsZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRcdC8vY3R4LnN0cm9rZVN0eWxlID0gXCIjNDU3MkE3IFwiO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSA/IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRzW2ldLng7XG5cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGVvZiAoZGF0YVBvaW50c1tpXS55KSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR4ID0gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRYIC0gcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblxuXHRcdFx0XHR2YXIgeVBlcmNlbnQ7XG5cdFx0XHRcdGlmIChwbG90VW5pdC5kYXRhUG9pbnRZU3Vtc1tkYXRhUG9pbnRYXSAhPT0gMClcblx0XHRcdFx0XHR5UGVyY2VudCA9IGRhdGFQb2ludHNbaV0ueSAvIHBsb3RVbml0LmRhdGFQb2ludFlTdW1zW2RhdGFQb2ludFhdICogMTAwO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0eVBlcmNlbnQgPSAwO1xuXG5cdFx0XHRcdC8veSA9IChwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoeVBlcmNlbnQgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5ID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICh5UGVyY2VudCAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pKTtcblxuXHRcdFx0XHR2YXIgeDEgPSB4IC0gKHBsb3RVbml0LnBsb3RUeXBlLnBsb3RVbml0cy5sZW5ndGggKiBiYXJXaWR0aCAvIDIpICsgKHBsb3RVbml0LmluZGV4ICogYmFyV2lkdGgpIDw8IDA7XG5cdFx0XHRcdHZhciB4MiA9IHgxICsgYmFyV2lkdGggPDwgMDtcblx0XHRcdFx0dmFyIHkxO1xuXHRcdFx0XHR2YXIgeTI7XG5cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS55ID49IDApIHtcblx0XHRcdFx0XHR2YXIgb2Zmc2V0ID0gb2Zmc2V0UG9zaXRpdmVZW2RhdGFQb2ludFhdID8gb2Zmc2V0UG9zaXRpdmVZW2RhdGFQb2ludFhdIDogMDtcblxuXHRcdFx0XHRcdHkxID0geSAtIG9mZnNldDtcblx0XHRcdFx0XHR5MiA9IHlaZXJvVG9QaXhlbCAtIG9mZnNldDtcblxuXHRcdFx0XHRcdG9mZnNldFBvc2l0aXZlWVtkYXRhUG9pbnRYXSA9IG9mZnNldCArICh5MiAtIHkxKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBvZmZzZXQgPSBvZmZzZXROZWdhdGl2ZVlbZGF0YVBvaW50WF0gPyBvZmZzZXROZWdhdGl2ZVlbZGF0YVBvaW50WF0gOiAwO1xuXG5cdFx0XHRcdFx0eTIgPSB5ICsgb2Zmc2V0O1xuXHRcdFx0XHRcdHkxID0geVplcm9Ub1BpeGVsICsgb2Zmc2V0O1xuXG5cdFx0XHRcdFx0b2Zmc2V0TmVnYXRpdmVZW2RhdGFQb2ludFhdID0gb2Zmc2V0ICsgKHkyIC0geTEpO1xuXHRcdFx0XHR9XG5cblxuXHRcdFx0XHRjb2xvciA9IGRhdGFQb2ludHNbaV0uY29sb3IgPyBkYXRhUG9pbnRzW2ldLmNvbG9yIDogZGF0YVNlcmllcy5fY29sb3JTZXRbaSAlIGRhdGFTZXJpZXMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cdFx0XHRcdGRyYXdSZWN0KGN0eCwgeDEsIHkxLCB4MiwgeTIsIGNvbG9yLCAwLCBudWxsLCBiZXZlbEVuYWJsZWQgJiYgKGRhdGFQb2ludHNbaV0ueSA+PSAwKSwgKGRhdGFQb2ludHNbaV0ueSA8IDApICYmIGJldmVsRW5hYmxlZCwgZmFsc2UsIGZhbHNlLCBkYXRhU2VyaWVzLmZpbGxPcGFjaXR5KTtcblxuXHRcdFx0XHR2YXIgaWQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludElkc1tpXTtcblx0XHRcdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG5cdFx0XHRcdFx0aWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFQb2ludFwiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXg6IGksIHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5MlxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRkcmF3UmVjdCh0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgsIHgxLCB5MSwgeDIsIHkyLCBjb2xvciwgMCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbCB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWwgfHwgZGF0YVBvaW50c1tpXS5pbmRleExhYmVsRm9ybWF0dGVyIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbEZvcm1hdHRlcikge1xuXG5cdFx0XHRcdFx0dGhpcy5faW5kZXhMYWJlbHMucHVzaCh7XG5cdFx0XHRcdFx0XHRjaGFydFR5cGU6IFwic3RhY2tlZENvbHVtbjEwMFwiLFxuXHRcdFx0XHRcdFx0ZGF0YVBvaW50OiBkYXRhUG9pbnRzW2ldLFxuXHRcdFx0XHRcdFx0ZGF0YVNlcmllczogZGF0YVNlcmllcyxcblx0XHRcdFx0XHRcdHBvaW50OiB7XG5cdFx0XHRcdFx0XHRcdHg6IHgsIHk6IGRhdGFQb2ludHNbaV0ueSA+PSAwID8geTEgOiB5MlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55ID49IDAgPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRib3VuZHM6IHtcblx0XHRcdFx0XHRcdFx0eDE6IHgxLCB5MTogTWF0aC5taW4oeTEsIHkyKSwgeDI6IHgyLCB5MjogTWF0aC5tYXgoeTEsIHkyKVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjdHgucmVzdG9yZSgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgucmVzdG9yZSgpO1xuXG5cdC8vc291cmNlIGFuZCBkZXN0IHdvdWxkIGJlIHNhbWUgd2hlbiBhbmltYXRpb24gaXMgbm90IGVuYWJsZWRcblx0dmFyIGFuaW1hdGlvbkJhc2UgPSBNYXRoLm1pbih5WmVyb1RvUGl4ZWwsIHBsb3RVbml0LmF4aXNZLmJvdW5kaW5nUmVjdC55Mik7XG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci55U2NhbGVBbmltYXRpb24sIGVhc2luZ0Z1bmN0aW9uOiBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmVhc2VPdXRRdWFydCwgYW5pbWF0aW9uQmFzZTogYW5pbWF0aW9uQmFzZVxuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cbiIsIlxuaW1wb3J0IHtpc0NhbnZhc1N1cHBvcnRlZH0gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXHR2YXIgY3R4ID0gcGxvdFVuaXQudGFyZ2V0Q2FudmFzQ3R4IHx8IHRoaXMucGxvdEFyZWEuY3R4O1xuXG5cdHZhciB0b3RhbERhdGFTZXJpZXMgPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7XG5cblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgZ2hvc3RDdHggPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHg7XG5cblx0dmFyIGF4aXNYUHJvcHMgPSBwbG90VW5pdC5heGlzWC5saW5lQ29vcmRpbmF0ZXM7XG5cdHZhciBheGlzWVByb3BzID0gcGxvdFVuaXQuYXhpc1kubGluZUNvb3JkaW5hdGVzO1xuXHR2YXIgbWFya2VycyA9IFtdO1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cdGN0eC5zYXZlKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdGdob3N0Q3R4LnNhdmUoKTtcblxuXHRjdHguYmVnaW5QYXRoKCk7XG5cdGN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdGN0eC5jbGlwKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0Z2hvc3RDdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRcdGdob3N0Q3R4LmNsaXAoKTtcblx0fVxuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblxuXHRcdHZhciBkYXRhU2VyaWVzSW5kZXggPSBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXTtcblxuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW2RhdGFTZXJpZXNJbmRleF07XG5cblx0XHR2YXIgZGF0YVBvaW50cyA9IGRhdGFTZXJpZXMuZGF0YVBvaW50cztcblxuXHRcdHZhciBzZXJpZXNJZCA9IGRhdGFTZXJpZXMuaWQ7XG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtzZXJpZXNJZF0gPSB7XG5cdFx0XHRvYmplY3RUeXBlOiBcImRhdGFTZXJpZXNcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXhcblx0XHR9O1xuXG5cdFx0dmFyIGhleENvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhzZXJpZXNJZCk7XG5cdFx0Z2hvc3RDdHguZmlsbFN0eWxlID0gaGV4Q29sb3I7XG5cdFx0Ly9naG9zdEN0eC5saW5lV2lkdGggPSBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3M7XG5cdFx0Ly9naG9zdEN0eC5saW5lV2lkdGggPSAyMDtcblxuXHRcdG1hcmtlcnMgPSBbXTtcblxuXHRcdHZhciBpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IHRydWU7XG5cdFx0dmFyIGkgPSAwLCB4LCB5O1xuXHRcdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgYmFjayBhbmQgZm9ydGguXG5cblx0XHR2YXIgeVplcm9Ub1BpeGVsID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqICgwIC0gcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSkgKyAuNSkgPDwgMDtcblx0XHR2YXIgYmFzZVk7XG5cblx0XHR2YXIgc3RhcnRQb2ludCA9IG51bGw7XG5cblx0XHR2YXIgcHJldkRhdGFOdWxsID0gZmFsc2U7XG5cdFx0aWYgKGRhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly9jdHguc3Ryb2tlU3R5bGUgPSBcIiM0NTcyQTcgXCI7XG5cdFx0XHR2YXIgY29sb3IgPSBkYXRhU2VyaWVzLl9jb2xvclNldFtpICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcblx0XHRcdC8vY3R4LnN0cm9rZVN0eWxlID0gXCJyZWRcIjtcblx0XHRcdGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuXHRcdFx0Y3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblxuXHRcdFx0aWYgKGN0eC5zZXRMaW5lRGFzaCkge1xuXHRcdFx0XHRjdHguc2V0TGluZURhc2goZ2V0TGluZURhc2hBcnJheShkYXRhU2VyaWVzLmxpbmVEYXNoVHlwZSwgZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzKSk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoOyBpIDwgZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRcdGRhdGFQb2ludFggPSBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSA/IGRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCkgOiBkYXRhUG9pbnRzW2ldLng7XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1pbiB8fCBkYXRhUG9pbnRYID4gcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNYXgpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBwcmV2WSA9IHk7XG5cblx0XHRcdFx0aWYgKHR5cGVvZiAoZGF0YVBvaW50c1tpXS55KSAhPT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHRcdGNsb3NlQXJlYSgpO1xuXG5cdFx0XHRcdFx0cHJldkRhdGFOdWxsID0gdHJ1ZTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHggPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5ID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnkgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXG5cblxuXHRcdFx0XHRpZiAoaXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgfHwgcHJldkRhdGFOdWxsKSB7XG5cdFx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdGN0eC5tb3ZlVG8oeCwgeSk7XG5cdFx0XHRcdFx0c3RhcnRQb2ludCA9IHtcblx0XHRcdFx0XHRcdHg6IHgsIHk6IHlcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdGdob3N0Q3R4Lm1vdmVUbyh4LCB5KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IGZhbHNlO1xuXHRcdFx0XHRcdHByZXZEYXRhTnVsbCA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyh4LCBwcmV2WSk7XG5cdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubGluZVRvKHgsIHByZXZZKTtcblxuXHRcdFx0XHRcdGN0eC5saW5lVG8oeCwgeSk7XG5cblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5saW5lVG8oeCwgeSk7XG5cblx0XHRcdFx0XHRpZiAoaSAlIDI1MCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRjbG9zZUFyZWEoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXG5cdFx0XHRcdHZhciBpZCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2ldO1xuXHRcdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSA9IHtcblx0XHRcdFx0XHRpZDogaWQsIG9iamVjdFR5cGU6IFwiZGF0YVBvaW50XCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleDogaSwgeDE6IHgsIHkxOiB5XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly9SZW5kZXIgTWFya2VyXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLm1hcmtlclNpemUgIT09IDApIHtcblx0XHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5tYXJrZXJTaXplID4gMCB8fCBkYXRhU2VyaWVzLm1hcmtlclNpemUgPiAwKSB7XG5cdFx0XHRcdFx0XHR2YXIgbWFya2VyUHJvcHMgPSBkYXRhU2VyaWVzLmdldE1hcmtlclByb3BlcnRpZXMoaSwgeCwgeSwgY3R4KTtcblx0XHRcdFx0XHRcdG1hcmtlcnMucHVzaChtYXJrZXJQcm9wcyk7XG5cblx0XHRcdFx0XHRcdC8vaWYgKCFkYXRhU2VyaWVzLm1heFdpZHRoSW5YIHx8IG1hcmtlclByb3BzLnNpemUgPiBkYXRhU2VyaWVzLm1heFdpZHRoSW5YKSB7XG5cdFx0XHRcdFx0XHQvL1x0ZGF0YVNlcmllcy5tYXhXaWR0aEluWCA9IG1hcmtlclByb3BzLnNpemUgLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXHRcdFx0XHRcdFx0Ly99XG5cblx0XHRcdFx0XHRcdHZhciBtYXJrZXJDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdFx0bWFya2Vycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHR4OiB4LCB5OiB5LCBjdHg6IGdob3N0Q3R4LFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IG1hcmtlclByb3BzLnR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0c2l6ZTogbWFya2VyUHJvcHMuc2l6ZSxcblx0XHRcdFx0XHRcdFx0XHRjb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQ29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclRoaWNrbmVzczogbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpIHtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcInN0ZXBBcmVhXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeCwgeTogeVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55ID49IDAgPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNsb3NlQXJlYSgpO1xuXG5cdFx0XHRSZW5kZXJIZWxwZXIuZHJhd01hcmtlcnMobWFya2Vycyk7XG5cdFx0fVxuXHR9XG5cblx0Y3R4LnJlc3RvcmUoKTtcblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5yZXN0b3JlKCk7XG5cblx0ZnVuY3Rpb24gY2xvc2VBcmVhKCkge1xuXG5cdFx0aWYgKCFzdGFydFBvaW50KVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0aWYgKGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcyA+IDApXG5cdFx0XHRjdHguc3Ryb2tlKCk7XG5cblx0XHRpZiAocGxvdFVuaXQuYXhpc1kudmlld3BvcnRNaW5pbXVtIDw9IDAgJiYgcGxvdFVuaXQuYXhpc1kudmlld3BvcnRNYXhpbXVtID49IDApIHtcblx0XHRcdGJhc2VZID0geVplcm9Ub1BpeGVsO1xuXHRcdH1cblx0XHRlbHNlIGlmIChwbG90VW5pdC5heGlzWS52aWV3cG9ydE1heGltdW0gPCAwKVxuXHRcdFx0YmFzZVkgPSBheGlzWVByb3BzLnkxO1xuXHRcdGVsc2UgaWYgKHBsb3RVbml0LmF4aXNZLnZpZXdwb3J0TWluaW11bSA+IDApXG5cdFx0XHRiYXNlWSA9IGF4aXNYUHJvcHMueTI7XG5cblx0XHRjdHgubGluZVRvKHgsIGJhc2VZKTtcblx0XHRjdHgubGluZVRvKHN0YXJ0UG9pbnQueCwgYmFzZVkpO1xuXHRcdGN0eC5jbG9zZVBhdGgoKTtcblxuXHRcdGN0eC5nbG9iYWxBbHBoYSA9IGRhdGFTZXJpZXMuZmlsbE9wYWNpdHk7XG5cdFx0Y3R4LmZpbGwoKTtcblx0XHRjdHguZ2xvYmFsQWxwaGEgPSAxO1xuXG5cdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRnaG9zdEN0eC5saW5lVG8oeCwgYmFzZVkpO1xuXHRcdFx0Z2hvc3RDdHgubGluZVRvKHN0YXJ0UG9pbnQueCwgYmFzZVkpO1xuXHRcdFx0Z2hvc3RDdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRnaG9zdEN0eC5maWxsKCk7XG5cdFx0fVxuXG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdGN0eC5tb3ZlVG8oeCwgeSk7XG5cdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0Z2hvc3RDdHgubW92ZVRvKHgsIHkpO1xuXG5cdFx0c3RhcnRQb2ludCA9IHtcblx0XHRcdHg6IHgsIHk6IHlcblx0XHR9O1xuXHR9XG5cblx0Ly9zb3VyY2UgYW5kIGRlc3Qgd291bGQgYmUgc2FtZSB3aGVuIGFuaW1hdGlvbiBpcyBub3QgZW5hYmxlZFxuXHR2YXIgYW5pbWF0aW9uSW5mbyA9IHtcblx0XHRzb3VyY2U6IGN0eCwgZGVzdDogdGhpcy5wbG90QXJlYS5jdHgsIGFuaW1hdGlvbkNhbGxiYWNrOiBBbmltYXRpb25IZWxwZXIueENsaXBBbmltYXRpb24sIGVhc2luZ0Z1bmN0aW9uOiBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmxpbmVhciwgYW5pbWF0aW9uQmFzZTogMFxuXHR9O1xuXHRyZXR1cm4gYW5pbWF0aW9uSW5mbztcbn1cbiIsImV4cG9ydCBjb25zdCBjdWx0dXJlcyA9IHtcbiAgXCJlblwiOiB7XG4gICAgLy9EZXJpdmVzIGZyb20gdGhlIGRlZmF1bHQgb3B0aW9uc1xuICB9Ly8sXG4gIC8vXCJlc1wiOiB7XG4gIC8vICAgIGRlY2ltYWxTZXBhcmF0b3I6IFwiLFwiLFxuICAvLyAgICBkaWdpdEdyb3VwU2VwYXJhdG9yOiBcIi5cIixcbiAgLy8gICAgem9vbVRleHQ6IFwiem9vbVwiLFxuICAvLyAgICBwYW5UZXh0OiBcInBhblwiLFxuICAvLyAgICByZXNldFRleHQ6IFwicmVzZXRcIixcbiAgLy8gICAgZGF5czogW1wiZG9taW5nb1wiLCBcImx1bmVzXCIsIFwibWFydGVzXCIsIFwibWnDqXJjb2xlc1wiLCBcImp1ZXZlc1wiLCBcInZpZXJuZXNcIiwgXCJzw6FiYWRvXCJdLFxuICAvL31cbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdGFudHMgPSB7XG4gIG51bWJlckR1cmF0aW9uOiAxLFxuICB5ZWFyRHVyYXRpb246IDEwMDAgKiA2MCAqIDYwICogMjQgKiAzNjQsXG4gIG1vbnRoRHVyYXRpb246IDEwMDAgKiA2MCAqIDYwICogMjQgKiAzMCxcbiAgd2Vla0R1cmF0aW9uOiAxMDAwICogNjAgKiA2MCAqIDI0ICogNyxcbiAgZGF5RHVyYXRpb246IDEwMDAgKiA2MCAqIDYwICogMjQsXG4gIGhvdXJEdXJhdGlvbjogMTAwMCAqIDYwICogNjAsXG4gIG1pbnV0ZUR1cmF0aW9uOiAxMDAwICogNjAsXG4gIHNlY29uZER1cmF0aW9uOiAxMDAwLFxuICBtaWxsaXNlY29uZER1cmF0aW9uOiAxLFxuXG4gIGRheU9mV2Vla0Zyb21JbnQ6IFtcIlN1bmRheVwiLCBcIk1vbmRheVwiLCBcIlR1ZXNkYXlcIiwgXCJXZWRuZXNkYXlcIiwgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCJdXG59O1xuIiwiXG5leHBvcnQgY29uc3QgaXNEZWJ1Z01vZGUgPSBmYWxzZTtcblxuZXhwb3J0IGNvbnN0IGlzQ2FudmFzU3VwcG9ydGVkID0gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLmdldENvbnRleHQ7XG5cdC8vaXNDYW52YXNTdXBwb3J0ZWQgPSBmYWxzZTtcblxuXHQvL0RlZmF1bHQgdmFsdWVzIGZvciBhbGwgQ2hhcnQgRWxlbWVudHMgdGhhdCBjYW4gYmUgc2V0IGJ5IHRoZSB1c2VyLiBDYW52YXNKU09iamVjdC5zZXRPcHRpb25zIGxvb2tzIGludG8gdGhpcyB3aGlsZSBzZXR0aW5nIHRoZSBkZWZhdWx0L3VzZXItZGVmaW5lZCB2YWx1ZXMuXG5leHBvcnQgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG5cdFx0Q2hhcnQ6IHtcblx0XHRcdHdpZHRoOiA1MDAsXG5cdFx0XHRoZWlnaHQ6IDQwMCxcblx0XHRcdHpvb21FbmFibGVkOiBmYWxzZSxcblx0XHRcdHpvb21UeXBlOiBcInhcIixcblx0XHRcdGJhY2tncm91bmRDb2xvcjogXCJ3aGl0ZVwiLFxuXHRcdFx0dGhlbWU6IFwidGhlbWUxXCIsXG5cdFx0XHRhbmltYXRpb25FbmFibGVkOiBmYWxzZSxcblx0XHRcdGFuaW1hdGlvbkR1cmF0aW9uOiAxMjAwLFxuXHRcdFx0ZGF0YVBvaW50TWF4V2lkdGg6IG51bGwsXG5cblx0XHRcdGNvbG9yU2V0OiBcImNvbG9yU2V0MVwiLFxuXHRcdFx0Y3VsdHVyZTogXCJlblwiLFxuXHRcdFx0Y3JlZGl0VGV4dDogXCJDYW52YXNKUy5jb21cIixcblx0XHRcdGludGVyYWN0aXZpdHlFbmFibGVkOiB0cnVlLFxuXHRcdFx0ZXhwb3J0RW5hYmxlZDogZmFsc2UsXG5cdFx0XHRleHBvcnRGaWxlTmFtZTogXCJDaGFydFwiLFxuXG5cdFx0XHRyYW5nZUNoYW5naW5nOiBudWxsLFxuXHRcdFx0cmFuZ2VDaGFuZ2VkOiBudWxsXG5cdFx0fSxcblxuXHRcdFRpdGxlOiB7XG5cdFx0XHRwYWRkaW5nOiAwLFxuXHRcdFx0dGV4dDogbnVsbCxcblx0XHRcdHZlcnRpY2FsQWxpZ246IFwidG9wXCIsLy90b3AsIGNlbnRlciwgYm90dG9tXG5cdFx0XHRob3Jpem9udGFsQWxpZ246IFwiY2VudGVyXCIsLy9sZWZ0LCBjZW50ZXIsIHJpZ2h0XG5cdFx0XHRmb250U2l6ZTogMjAsLy9pbiBwaXhlbHNcblx0XHRcdGZvbnRGYW1pbHk6IFwiQ2FsaWJyaVwiLFxuXHRcdFx0Zm9udFdlaWdodDogXCJub3JtYWxcIiwgLy9ub3JtYWwsIGJvbGQsIGJvbGRlciwgbGlnaHRlcixcblx0XHRcdGZvbnRDb2xvcjogXCJibGFja1wiLFxuXHRcdFx0Zm9udFN0eWxlOiBcIm5vcm1hbFwiLCAvLyBub3JtYWwsIGl0YWxpYywgb2JsaXF1ZVxuXG5cdFx0XHRib3JkZXJUaGlja25lc3M6IDAsXG5cdFx0XHRib3JkZXJDb2xvcjogXCJibGFja1wiLFxuXHRcdFx0Y29ybmVyUmFkaXVzOiAwLFxuXHRcdFx0YmFja2dyb3VuZENvbG9yOiBudWxsLFxuXHRcdFx0bWFyZ2luOiA1LFxuXHRcdFx0d3JhcDogdHJ1ZSxcblx0XHRcdG1heFdpZHRoOiBudWxsLFxuXG5cdFx0XHRkb2NrSW5zaWRlUGxvdEFyZWE6IGZhbHNlXG5cdFx0XHQvL3Rvb2xUaXBDb250ZW50OiBudWxsLy9zdHJpbmcgLSBUbyBiZSBpbXBsZW1lbnRlZCAoVEJJKVxuXHRcdH0sXG5cblx0XHRTdWJ0aXRsZToge1xuXHRcdFx0cGFkZGluZzogMCxcblx0XHRcdHRleHQ6IG51bGwsXG5cdFx0XHR2ZXJ0aWNhbEFsaWduOiBcInRvcFwiLC8vdG9wLCBjZW50ZXIsIGJvdHRvbVxuXHRcdFx0aG9yaXpvbnRhbEFsaWduOiBcImNlbnRlclwiLC8vbGVmdCwgY2VudGVyLCByaWdodFxuXHRcdFx0Zm9udFNpemU6IDE0LC8vaW4gcGl4ZWxzXG5cdFx0XHRmb250RmFtaWx5OiBcIkNhbGlicmlcIixcblx0XHRcdGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsIC8vbm9ybWFsLCBib2xkLCBib2xkZXIsIGxpZ2h0ZXIsXG5cdFx0XHRmb250Q29sb3I6IFwiYmxhY2tcIixcblx0XHRcdGZvbnRTdHlsZTogXCJub3JtYWxcIiwgLy8gbm9ybWFsLCBpdGFsaWMsIG9ibGlxdWVcblxuXHRcdFx0Ym9yZGVyVGhpY2tuZXNzOiAwLFxuXHRcdFx0Ym9yZGVyQ29sb3I6IFwiYmxhY2tcIixcblx0XHRcdGNvcm5lclJhZGl1czogMCxcblx0XHRcdGJhY2tncm91bmRDb2xvcjogbnVsbCxcblx0XHRcdG1hcmdpbjogMixcblx0XHRcdHdyYXA6IHRydWUsXG5cdFx0XHRtYXhXaWR0aDogbnVsbCxcblxuXHRcdFx0ZG9ja0luc2lkZVBsb3RBcmVhOiBmYWxzZVxuXHRcdFx0Ly90b29sVGlwQ29udGVudDogbnVsbC8vc3RyaW5nIC0gVG8gYmUgaW1wbGVtZW50ZWQgKFRCSSlcblx0XHR9LFxuXG5cdFx0TGVnZW5kOiB7XG5cdFx0XHRuYW1lOiBudWxsLFxuXHRcdFx0dmVydGljYWxBbGlnbjogXCJjZW50ZXJcIixcblx0XHRcdGhvcml6b250YWxBbGlnbjogXCJyaWdodFwiLFxuXG5cdFx0XHRmb250U2l6ZTogMTQsLy9pbiBwaXhlbHNcblx0XHRcdGZvbnRGYW1pbHk6IFwiY2FsaWJyaVwiLFxuXHRcdFx0Zm9udFdlaWdodDogXCJub3JtYWxcIiwgLy9ub3JtYWwsIGJvbGQsIGJvbGRlciwgbGlnaHRlcixcblx0XHRcdGZvbnRDb2xvcjogXCJibGFja1wiLFxuXHRcdFx0Zm9udFN0eWxlOiBcIm5vcm1hbFwiLCAvLyBub3JtYWwsIGl0YWxpYywgb2JsaXF1ZVxuXG5cdFx0XHRjdXJzb3I6IG51bGwsXG5cdFx0XHRpdGVtbW91c2VvdmVyOiBudWxsLFxuXHRcdFx0aXRlbW1vdXNlb3V0OiBudWxsLFxuXHRcdFx0aXRlbW1vdXNlbW92ZTogbnVsbCxcblx0XHRcdGl0ZW1jbGljazogbnVsbCxcblxuXHRcdFx0ZG9ja0luc2lkZVBsb3RBcmVhOiBmYWxzZSxcblx0XHRcdHJldmVyc2VkOiBmYWxzZSxcblxuXHRcdFx0bWF4V2lkdGg6IG51bGwsXG5cdFx0XHRtYXhIZWlnaHQ6IG51bGwsXG5cblx0XHRcdGl0ZW1NYXhXaWR0aDogbnVsbCxcblx0XHRcdGl0ZW1XaWR0aDogbnVsbCxcblx0XHRcdGl0ZW1XcmFwOiB0cnVlLFxuXHRcdFx0aXRlbVRleHRGb3JtYXR0ZXI6IG51bGxcblx0XHR9LFxuXG5cdFx0VG9vbFRpcDoge1xuXHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdHNoYXJlZDogZmFsc2UsXG5cdFx0XHRhbmltYXRpb25FbmFibGVkOiB0cnVlLFxuXHRcdFx0Y29udGVudDogbnVsbCxcblx0XHRcdGNvbnRlbnRGb3JtYXR0ZXI6IG51bGwsXG5cblx0XHRcdHJldmVyc2VkOiBmYWxzZSxcblxuXHRcdFx0YmFja2dyb3VuZENvbG9yOiBudWxsLFxuXG5cdFx0XHRib3JkZXJDb2xvcjogbnVsbCxcblx0XHRcdGJvcmRlclRoaWNrbmVzczogMiwgLy9pbiBwaXhlbHNcblx0XHRcdGNvcm5lclJhZGl1czogNSwgLy8gaW4gcGl4ZWxzXG5cblx0XHRcdGZvbnRTaXplOiAxNCwgLy8gaW4gcGl4ZWxzXG5cdFx0XHRmb250Q29sb3I6IFwiIzAwMDAwMFwiLFxuXHRcdFx0Zm9udEZhbWlseTogXCJDYWxpYnJpLCBBcmlhbCwgR2VvcmdpYSwgc2VyaWY7XCIsXG5cdFx0XHRmb250V2VpZ2h0OiBcIm5vcm1hbFwiLCAvL25vcm1hbCwgYm9sZCwgYm9sZGVyLCBsaWdodGVyLFxuXHRcdFx0Zm9udFN0eWxlOiBcIml0YWxpY1wiICAvLyBub3JtYWwsIGl0YWxpYywgb2JsaXF1ZVxuXHRcdH0sXG5cblx0XHRBeGlzOiB7XG5cdFx0XHRtaW5pbXVtOiBudWxsLCAvL01pbmltdW0gdmFsdWUgdG8gYmUgc2hvd24gb24gdGhlIEF4aXNcblx0XHRcdG1heGltdW06IG51bGwsIC8vTWluaW11bSB2YWx1ZSB0byBiZSBzaG93biBvbiB0aGUgQXhpc1xuXHRcdFx0dmlld3BvcnRNaW5pbXVtOiBudWxsLFxuXHRcdFx0dmlld3BvcnRNYXhpbXVtOiBudWxsLFxuXHRcdFx0aW50ZXJ2YWw6IG51bGwsIC8vIEludGVydmFsIGZvciB0aWNrIG1hcmtzIGFuZCBncmlkIGxpbmVzXG5cdFx0XHRpbnRlcnZhbFR5cGU6IG51bGwsIC8vbnVtYmVyLCBtaWxsaXNlY29uZCwgc2Vjb25kLCBtaW51dGUsIGhvdXIsIGRheSwgbW9udGgsIHllYXJcblx0XHRcdC8vcmV2ZXJzZWQ6IGZhbHNlLFxuXG5cdFx0XHR0aXRsZTogbnVsbCwgLy8gc3RyaW5nXG5cdFx0XHR0aXRsZUZvbnRDb2xvcjogXCJibGFja1wiLFxuXHRcdFx0dGl0bGVGb250U2l6ZTogMjAsXG5cdFx0XHR0aXRsZUZvbnRGYW1pbHk6IFwiYXJpYWxcIixcblx0XHRcdHRpdGxlRm9udFdlaWdodDogXCJub3JtYWxcIixcblx0XHRcdHRpdGxlRm9udFN0eWxlOiBcIm5vcm1hbFwiLFxuXG5cdFx0XHRsYWJlbEFuZ2xlOiAwLFxuXHRcdFx0bGFiZWxGb250RmFtaWx5OiBcImFyaWFsXCIsXG5cdFx0XHRsYWJlbEZvbnRDb2xvcjogXCJibGFja1wiLFxuXHRcdFx0bGFiZWxGb250U2l6ZTogMTIsXG5cdFx0XHRsYWJlbEZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG5cdFx0XHRsYWJlbEZvbnRTdHlsZTogXCJub3JtYWxcIixcblx0XHRcdGxhYmVsQXV0b0ZpdDogZmFsc2UsXG5cdFx0XHRsYWJlbFdyYXA6IHRydWUsXG5cdFx0XHRsYWJlbE1heFdpZHRoOiBudWxsLC8vbnVsbCBmb3IgYXV0b1xuXHRcdFx0bGFiZWxGb3JtYXR0ZXI6IG51bGwsXG5cblx0XHRcdHByZWZpeDogXCJcIixcblx0XHRcdHN1ZmZpeDogXCJcIixcblxuXHRcdFx0aW5jbHVkZVplcm86IHRydWUsIC8vQXBwbGllcyBvbmx5IGZvciBheGlzWS4gSWdub3JlZCBpbiBheGlzWC5cblxuXHRcdFx0dGlja0xlbmd0aDogNSxcblx0XHRcdHRpY2tDb2xvcjogXCJibGFja1wiLFxuXHRcdFx0dGlja1RoaWNrbmVzczogMSxcblxuXHRcdFx0bGluZUNvbG9yOiBcImJsYWNrXCIsXG5cdFx0XHRsaW5lVGhpY2tuZXNzOiAxLFxuXHRcdFx0bGluZURhc2hUeXBlOiBcInNvbGlkXCIsXG5cblx0XHRcdGdyaWRDb2xvcjogXCJBMEEwQTBcIixcblx0XHRcdGdyaWRUaGlja25lc3M6IDAsXG5cdFx0XHRncmlkRGFzaFR5cGU6IFwic29saWRcIixcblxuXHRcdFx0aW50ZXJsYWNlZENvbG9yOiBudWxsLFxuXG5cdFx0XHR2YWx1ZUZvcm1hdFN0cmluZzogbnVsbCxcblxuXHRcdFx0bWFyZ2luOiAyLFxuXG5cdFx0XHRzdHJpcExpbmVzOiBbXSAvLyBKdXN0IGEgcGxhY2Vob2xkZXIuIERvZXMgbm90IGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgYWN0dWFsIG51bWJlciBvZiBzdHJpcGxpbmVzXG5cdFx0fSxcblxuXHRcdFN0cmlwTGluZToge1xuXHRcdFx0dmFsdWU6IG51bGwsXG5cdFx0XHRzdGFydFZhbHVlOiBudWxsLFxuXHRcdFx0ZW5kVmFsdWU6IG51bGwsXG5cblx0XHRcdGNvbG9yOiBcIm9yYW5nZVwiLFxuXHRcdFx0b3BhY2l0eTogbnVsbCxcblx0XHRcdHRoaWNrbmVzczogMixcblx0XHRcdGxpbmVEYXNoVHlwZTogXCJzb2xpZFwiLFxuXHRcdFx0bGFiZWw6IFwiXCIsXG5cdFx0XHRsYWJlbEJhY2tncm91bmRDb2xvcjogXCIjRUVFRUVFXCIsXG5cdFx0XHRsYWJlbEZvbnRGYW1pbHk6IFwiYXJpYWxcIixcblx0XHRcdGxhYmVsRm9udENvbG9yOiBcIm9yYW5nZVwiLFxuXHRcdFx0bGFiZWxGb250U2l6ZTogMTIsXG5cdFx0XHRsYWJlbEZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG5cdFx0XHRsYWJlbEZvbnRTdHlsZTogXCJub3JtYWxcIixcblx0XHRcdGxhYmVsRm9ybWF0dGVyOiBudWxsLFxuXG5cdFx0XHRzaG93T25Ub3A6IGZhbHNlXG5cdFx0fSxcblxuXHRcdERhdGFTZXJpZXM6IHtcblx0XHRcdG5hbWU6IG51bGwsXG5cdFx0XHRkYXRhUG9pbnRzOiBudWxsLFxuXHRcdFx0bGFiZWw6IFwiXCIsXG5cdFx0XHRiZXZlbEVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0aGlnaGxpZ2h0RW5hYmxlZDogdHJ1ZSxcblxuXHRcdFx0Y3Vyc29yOiBudWxsLFxuXG5cdFx0XHRpbmRleExhYmVsOiBcIlwiLFxuXHRcdFx0aW5kZXhMYWJlbFBsYWNlbWVudDogXCJhdXRvXCIsICAvL2luc2lkZSwgb3V0c2lkZSwgYXV0b1xuXHRcdFx0aW5kZXhMYWJlbE9yaWVudGF0aW9uOiBcImhvcml6b250YWxcIixcblx0XHRcdGluZGV4TGFiZWxGb250Q29sb3I6IFwiYmxhY2tcIixcblx0XHRcdGluZGV4TGFiZWxGb250U2l6ZTogMTIsXG5cdFx0XHRpbmRleExhYmVsRm9udFN0eWxlOiBcIm5vcm1hbFwiLCAvLyAgIGl0YWxpYyAsb2JsaXF1ZSwgbm9ybWFsXG5cdFx0XHRpbmRleExhYmVsRm9udEZhbWlseTogXCJBcmlhbFwiLCBcdC8vIGZ4OiBBcmlhbCBWZXJkYW5hIFwiQ291cmllciBOZXdcIiBTZXJpZlxuXHRcdFx0aW5kZXhMYWJlbEZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsIFx0Ly8gYm9sZCAsYm9sZGVyLCBsaWdodGVyLCBub3JtYWxcblx0XHRcdGluZGV4TGFiZWxCYWNrZ3JvdW5kQ29sb3I6IG51bGwsXG5cdFx0XHRpbmRleExhYmVsTGluZUNvbG9yOiBudWxsLFxuXHRcdFx0aW5kZXhMYWJlbExpbmVUaGlja25lc3M6IDEsXG5cdFx0XHRpbmRleExhYmVsTGluZURhc2hUeXBlOiBcInNvbGlkXCIsXG5cdFx0XHRpbmRleExhYmVsTWF4V2lkdGg6IG51bGwsXG5cdFx0XHRpbmRleExhYmVsV3JhcDogdHJ1ZSxcblx0XHRcdGluZGV4TGFiZWxGb3JtYXR0ZXI6IG51bGwsXG5cblx0XHRcdGxpbmVUaGlja25lc3M6IDIsXG5cdFx0XHRsaW5lRGFzaFR5cGU6IFwic29saWRcIixcblxuXHRcdFx0Y29sb3I6IG51bGwsXG5cdFx0XHRyaXNpbmdDb2xvcjogXCJ3aGl0ZVwiLFxuXHRcdFx0ZmlsbE9wYWNpdHk6IG51bGwsXG5cblx0XHRcdHN0YXJ0QW5nbGU6IDAsXG5cblx0XHRcdHJhZGl1czogbnVsbCxcblx0XHRcdGlubmVyUmFkaXVzOiBudWxsLFxuXG5cdFx0XHR0eXBlOiBcImNvbHVtblwiLCAvL2xpbmUsIGNvbHVtbiwgYmFyLCBhcmVhLCBzY2F0dGVyIHN0YWNrZWRDb2x1bW4sIHN0YWNrZWRCYXIsIHN0YWNrZWRBcmVhLCBzdGFja2VkQ29sdW1uMTAwLCBzdGFja2VkQmFyMTAwLCBzdGFja2VkQXJlYTEwMCwgcGllLCBkb3VnaG51dFxuXHRcdFx0eFZhbHVlVHlwZTogXCJudW1iZXJcIiwgLy9udW1iZXIsIGRhdGVUaW1lXG5cdFx0XHRheGlzWVR5cGU6IFwicHJpbWFyeVwiLFxuXG5cdFx0XHR4VmFsdWVGb3JtYXRTdHJpbmc6IG51bGwsXG5cdFx0XHR5VmFsdWVGb3JtYXRTdHJpbmc6IG51bGwsXG5cdFx0XHR6VmFsdWVGb3JtYXRTdHJpbmc6IG51bGwsXG5cdFx0XHRwZXJjZW50Rm9ybWF0U3RyaW5nOiBudWxsLFxuXG5cdFx0XHRzaG93SW5MZWdlbmQ6IG51bGwsXG5cdFx0XHRsZWdlbmRNYXJrZXJUeXBlOiBudWxsLFxuXHRcdFx0bGVnZW5kTWFya2VyQ29sb3I6IG51bGwsXG5cdFx0XHRsZWdlbmRUZXh0OiBudWxsLFxuXHRcdFx0bGVnZW5kTWFya2VyQm9yZGVyQ29sb3I6IG51bGwsXG5cdFx0XHRsZWdlbmRNYXJrZXJCb3JkZXJUaGlja25lc3M6IG51bGwsXG5cblx0XHRcdG1hcmtlclR5cGU6IFwiY2lyY2xlXCIsIC8vbm9uZSwgY2lyY2xlLCBzcXVhcmUsIGNyb3NzLCB0cmlhbmdsZSwgbGluZVxuXHRcdFx0bWFya2VyQ29sb3I6IG51bGwsXG5cdFx0XHRtYXJrZXJTaXplOiBudWxsLFxuXHRcdFx0bWFya2VyQm9yZGVyQ29sb3I6IG51bGwsXG5cdFx0XHRtYXJrZXJCb3JkZXJUaGlja25lc3M6IG51bGwsXG5cdFx0XHQvL2FuaW1hdGlvbkVuYWJsZWQ6IHRydWUsXG5cdFx0XHRtb3VzZW92ZXI6IG51bGwsXG5cdFx0XHRtb3VzZW91dDogbnVsbCxcblx0XHRcdG1vdXNlbW92ZTogbnVsbCxcblx0XHRcdGNsaWNrOiBudWxsLFxuXHRcdFx0dG9vbFRpcENvbnRlbnQ6IG51bGwsXG5cblx0XHRcdHZpc2libGU6IHRydWVcblx0XHR9LFxuXG5cdFx0Ly9Qcml2YXRlXG5cdFx0VGV4dEJsb2NrOiB7XG5cdFx0XHR4OiAwLFxuXHRcdFx0eTogMCxcblx0XHRcdHdpZHRoOiBudWxsLC8vcmVhZCBvbmx5XG5cdFx0XHRoZWlnaHQ6IG51bGwsLy9yZWFkIG9ubHlcblx0XHRcdG1heFdpZHRoOiBudWxsLFxuXHRcdFx0bWF4SGVpZ2h0OiBudWxsLFxuXHRcdFx0cGFkZGluZzogMCxcblx0XHRcdGFuZ2xlOiAwLFxuXHRcdFx0dGV4dDogXCJcIixcblx0XHRcdGhvcml6b250YWxBbGlnbjogXCJjZW50ZXJcIiwvL2xlZnQsIGNlbnRlciwgcmlnaHRcblx0XHRcdGZvbnRTaXplOiAxMiwvL2luIHBpeGVsc1xuXHRcdFx0Zm9udEZhbWlseTogXCJjYWxpYnJpXCIsXG5cdFx0XHRmb250V2VpZ2h0OiBcIm5vcm1hbFwiLCAvL25vcm1hbCwgYm9sZCwgYm9sZGVyLCBsaWdodGVyLFxuXHRcdFx0Zm9udENvbG9yOiBcImJsYWNrXCIsXG5cdFx0XHRmb250U3R5bGU6IFwibm9ybWFsXCIsIC8vIG5vcm1hbCwgaXRhbGljLCBvYmxpcXVlXG5cblx0XHRcdGJvcmRlclRoaWNrbmVzczogMCxcblx0XHRcdGJvcmRlckNvbG9yOiBcImJsYWNrXCIsXG5cdFx0XHRjb3JuZXJSYWRpdXM6IDAsXG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IG51bGwsXG5cdFx0XHR0ZXh0QmFzZWxpbmU6IFwidG9wXCJcblx0XHR9LFxuXG5cdFx0Q3VsdHVyZUluZm86IHtcblx0XHRcdGRlY2ltYWxTZXBhcmF0b3I6IFwiLlwiLFxuXHRcdFx0ZGlnaXRHcm91cFNlcGFyYXRvcjogXCIsXCIsXG5cdFx0XHR6b29tVGV4dDogXCJab29tXCIsXG5cdFx0XHRwYW5UZXh0OiBcIlBhblwiLFxuXHRcdFx0cmVzZXRUZXh0OiBcIlJlc2V0XCIsXG5cblx0XHRcdG1lbnVUZXh0OiBcIk1vcmUgT3B0aW9uc1wiLFxuXHRcdFx0c2F2ZUpQR1RleHQ6IFwiU2F2ZSBhcyBKUEdcIixcblx0XHRcdHNhdmVQTkdUZXh0OiBcIlNhdmUgYXMgUE5HXCIsXG5cblx0XHRcdGRheXM6IFtcIlN1bmRheVwiLCBcIk1vbmRheVwiLCBcIlR1ZXNkYXlcIiwgXCJXZWRuZXNkYXlcIiwgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCJdLFxuXHRcdFx0c2hvcnREYXlzOiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl0sXG5cblx0XHRcdG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXG5cdFx0XHRzaG9ydE1vbnRoczogW1wiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsIFwiQXVnXCIsIFwiU2VwXCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJdXG5cdFx0fVxuXHR9O1xuIiwiXG5pbXBvcnQge2lzQ2FudmFzU3VwcG9ydGVkfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGNvbG9yU2V0cyA9IHtcblxuXHRcdFwiY29sb3JTZXQxXCI6IFtcblx0XHRcdFwiIzM2OUVBRFwiLFxuXHRcdFx0XCIjQzI0NjQyXCIsXG5cdFx0XHRcIiM3RjYwODRcIixcblx0XHRcdC8vXCIjOTZDNDEyXCIsXG5cdFx0XHRcIiM4NkI0MDJcIixcblx0XHRcdFwiI0EyRDFDRlwiLFxuXHRcdFx0Ly9cIiNEOEM2NDFcIixcblx0XHRcdFwiI0M4QjYzMVwiLFxuXHRcdFx0XCIjNkRCQ0VCXCIsXG5cdFx0XHQvL1wiIzRBNDk0NlwiLFxuXHRcdFx0XCIjNTI1MTRFXCIsXG5cdFx0XHRcIiM0RjgxQkNcIixcblx0XHRcdFwiI0EwNjRBMVwiLFxuXHRcdFx0XCIjRjc5NjQ3XCJcblx0XHRdLFxuXHRcdFwiY29sb3JTZXQyXCI6IFtcblx0XHRcdFwiIzRGODFCQ1wiLFxuXHRcdFx0XCIjQzA1MDRFXCIsXG5cdFx0XHRcIiM5QkJCNThcIixcblx0XHRcdFwiIzIzQkZBQVwiLFxuXHRcdFx0Ly9cIiNGQUE1ODZcIixcblx0XHRcdFwiIzgwNjRBMVwiLFxuXHRcdFx0XCIjNEFBQ0M1XCIsXG5cdFx0XHRcIiNGNzk2NDdcIixcblx0XHRcdC8vXCIjNzdBQTMzXCIsXG5cdFx0XHQvL1wiIzdGNjA4NFwiXG5cdFx0XHRcIiMzMzU1OEJcIlxuXHRcdF0sXG5cdFx0XCJjb2xvclNldDNcIjogW1xuXHRcdFx0XCIjOENBMUJDXCIsXG5cdFx0XHRcIiMzNjg0NUNcIixcblx0XHRcdFwiIzAxN0U4MlwiLFxuXHRcdFx0XCIjOENCOUQwXCIsXG5cdFx0XHRcIiM3MDhDOThcIixcblx0XHRcdFwiIzk0ODM4RFwiLFxuXHRcdFx0XCIjRjA4ODkxXCIsXG5cdFx0XHRcIiMwMzY2QTdcIixcblx0XHRcdFwiIzAwODI3NlwiLFxuXHRcdFx0XCIjRUU3NzU3XCIsXG5cdFx0XHRcIiNFNUJBM0FcIixcblx0XHRcdFwiI0YyOTkwQlwiLFxuXHRcdFx0XCIjMDM1NTdCXCIsXG5cdFx0XHRcIiM3ODI5NzBcIlxuXHRcdF0vLyxcblx0XHQvL1wiY29sb3JTZXQ0XCI6IFtcblx0XHQvLyAgICBcIiMzNjk4QzVcIixcblx0XHQvLyAgICBcIiMwMDlCOERcIixcblx0XHQvLyAgICBcIiNGMUQ2OTFcIixcblx0XHQvLyAgICBcIiNGOEI5MENcIixcblx0XHQvLyAgICBcIiMwMDgxQjhcIixcblx0XHQvLyAgICBcIiM1QjVBOTZcIixcblx0XHQvLyAgICBcIiNBQ0JERDFcIixcblx0XHQvLyAgICBcIiM4OEE4OTFcIixcblx0XHQvLyAgICBcIiMzOTk2OURcIixcblx0XHQvLyAgICBcIiNBRUNFRERcIixcblx0XHQvLyAgICBcIiNBMEIyQkNcIixcblx0XHQvLyAgICBcIiNCQkFFQjdcIixcblx0XHQvLyAgICBcIiNBMEM2NUZcIixcblx0XHQvLyAgICBcIiNFRUE2QUFcIixcblx0XHQvLyAgICBcIiMzNzk4QzVcIlxuXHRcdC8vXSxcblx0XHQvL1wiY29sb3JTZXQ1XCI6IFtcblx0XHQvLyAgICBcIiM4OEFEQkZcIixcblx0XHQvLyAgICBcIiM4NEMzMzZcIixcblx0XHQvLyAgICBcIiM3QjkxQzNcIixcblx0XHQvLyAgICBcIiM0NjYxRUVcIixcblx0XHQvLyAgICBcIiNFQzU2NTdcIixcblx0XHQvLyAgICBcIiMxQkNERDFcIixcblx0XHQvLyAgICBcIiM4RkFBQkJcIixcblx0XHQvLyAgICBcIiNCMDhCRUJcIixcblx0XHQvLyAgICBcIiMzRUEwRERcIixcblx0XHQvLyAgICBcIiNGNUE1MkFcIixcblx0XHQvLyAgICBcIiMyM0JGQUFcIixcblx0XHQvLyAgICBcIiNGQUE1ODZcIixcblx0XHQvLyAgICBcIiNFQjhDQzZcIlxuXHRcdC8vXVxuXG5cdH07XG5cbmV4cG9ydCBjb25zdCB0aGVtZXMgPSB7XG5cblx0XHRcdFwidGhlbWUxXCI6IHtcblx0XHRcdFx0Q2hhcnQ6XG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y29sb3JTZXQ6IFwiY29sb3JTZXQxXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRUaXRsZToge1xuXHRcdFx0XHRcdGZvbnRGYW1pbHk6IGlzQ2FudmFzU3VwcG9ydGVkID8gXCJDYWxpYnJpLCBPcHRpbWEsIENhbmRhcmEsIFZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZlwiIDogXCJjYWxpYnJpXCIsXG5cdFx0XHRcdFx0Zm9udFNpemU6IDMzLFxuXHRcdFx0XHRcdGZvbnRDb2xvcjogXCIjM0EzQTNBXCIsXG5cdFx0XHRcdFx0Zm9udFdlaWdodDogXCJib2xkXCIsXG5cdFx0XHRcdFx0dmVydGljYWxBbGlnbjogXCJ0b3BcIixcblx0XHRcdFx0XHRtYXJnaW46IDVcblx0XHRcdFx0fSxcblx0XHRcdFx0U3VidGl0bGU6IHtcblx0XHRcdFx0XHRmb250RmFtaWx5OiBpc0NhbnZhc1N1cHBvcnRlZCA/IFwiQ2FsaWJyaSwgT3B0aW1hLCBDYW5kYXJhLCBWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWZcIiA6IFwiY2FsaWJyaVwiLFxuXHRcdFx0XHRcdGZvbnRTaXplOiAxNixcblx0XHRcdFx0XHRmb250Q29sb3I6IFwiIzNBM0EzQVwiLFxuXHRcdFx0XHRcdGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdHZlcnRpY2FsQWxpZ246IFwidG9wXCIsXG5cdFx0XHRcdFx0bWFyZ2luOiA1XG5cdFx0XHRcdH0sXG5cdFx0XHRcdEF4aXM6IHtcblx0XHRcdFx0XHR0aXRsZUZvbnRTaXplOiAyNixcblx0XHRcdFx0XHQvL3RpdGxlRm9udENvbG9yOiBcInJnYig5OCw5OCw5OClcIixcblx0XHRcdFx0XHR0aXRsZUZvbnRDb2xvcjogXCIjNjY2NjY2XCIsXG5cdFx0XHRcdFx0Ly90aXRsZUZvbnRGYW1pbHk6IFwiYXJpYWwgYmxhY2tcIixcblx0XHRcdFx0XHQvL3RpdGxlRm9udEZhbWlseTogXCJWZXJkYW5hLCBHZW5ldmEsIENhbGlicmksIHNhbnMtc2VyaWZcIixcblx0XHRcdFx0XHR0aXRsZUZvbnRGYW1pbHk6IGlzQ2FudmFzU3VwcG9ydGVkID8gXCJDYWxpYnJpLCBPcHRpbWEsIENhbmRhcmEsIFZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZlwiIDogXCJjYWxpYnJpXCIsXG5cdFx0XHRcdFx0Ly90aXRsZUZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXG5cdFx0XHRcdFx0Ly9sYWJlbEZvbnRGYW1pbHk6IFwiVGltZXMgTmV3IFJvbWFuLCBUaW1lcywgc2VyaWZcIixcblx0XHRcdFx0XHRsYWJlbEZvbnRGYW1pbHk6IGlzQ2FudmFzU3VwcG9ydGVkID8gXCJDYWxpYnJpLCBPcHRpbWEsIENhbmRhcmEsIFZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZlwiIDogXCJjYWxpYnJpXCIsXG5cdFx0XHRcdFx0Ly9sYWJlbEZvbnRGYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYVwiLFxuXHRcdFx0XHRcdGxhYmVsRm9udFNpemU6IDE4LFxuXHRcdFx0XHRcdGxhYmVsRm9udENvbG9yOiBcImdyZXlcIixcblx0XHRcdFx0XHQvL2xhYmVsRm9udFdlaWdodDogXCJib2xkXCIsXG5cdFx0XHRcdFx0dGlja0NvbG9yOiBcIiNCQkJCQkJcIixcblx0XHRcdFx0XHR0aWNrVGhpY2tuZXNzOiAyLFxuXHRcdFx0XHRcdGdyaWRUaGlja25lc3M6IDIsXG5cdFx0XHRcdFx0Z3JpZENvbG9yOiBcIiNCQkJCQkJcIixcblx0XHRcdFx0XHRsaW5lVGhpY2tuZXNzOiAyLFxuXHRcdFx0XHRcdGxpbmVDb2xvcjogXCIjQkJCQkJCXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0TGVnZW5kOiB7XG5cdFx0XHRcdFx0dmVydGljYWxBbGlnbjogXCJib3R0b21cIixcblx0XHRcdFx0XHRob3Jpem9udGFsQWxpZ246IFwiY2VudGVyXCIsXG5cdFx0XHRcdFx0Zm9udEZhbWlseTogaXNDYW52YXNTdXBwb3J0ZWQgPyBcIm1vbm9zcGFjZSwgc2Fucy1zZXJpZixhcmlhbCBibGFja1wiIDogXCJjYWxpYnJpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0RGF0YVNlcmllczoge1xuXHRcdFx0XHRcdC8vYmV2ZWxFbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRcdGluZGV4TGFiZWxGb250Q29sb3I6IFwiZ3JleVwiLFxuXHRcdFx0XHRcdC8vaW5kZXhMYWJlbEZvbnRGYW1pbHk6IFwiVHJlYnVjaGV0IE1TLCBtb25vc3BhY2UsIENvdXJpZXIgTmV3LCBDb3VyaWVyXCIsXG5cdFx0XHRcdFx0aW5kZXhMYWJlbEZvbnRGYW1pbHk6IGlzQ2FudmFzU3VwcG9ydGVkID8gXCJDYWxpYnJpLCBPcHRpbWEsIENhbmRhcmEsIFZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZlwiIDogXCJjYWxpYnJpXCIsXG5cdFx0XHRcdFx0Ly9pbmRleExhYmVsRm9udFdlaWdodDogXCJib2xkXCIsXG5cdFx0XHRcdFx0aW5kZXhMYWJlbEZvbnRTaXplOiAxOCxcblx0XHRcdFx0XHQvL2luZGV4TGFiZWxMaW5lQ29sb3I6IFwibGlnaHRncmV5XCIsXG5cdFx0XHRcdFx0aW5kZXhMYWJlbExpbmVUaGlja25lc3M6IDFcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0XCJ0aGVtZTJcIjoge1xuXHRcdFx0XHRDaGFydDpcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjb2xvclNldDogXCJjb2xvclNldDJcIlxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFRpdGxlOiB7XG5cdFx0XHRcdFx0Zm9udEZhbWlseTogXCJpbXBhY3QsIGNoYXJjb2FsLCBhcmlhbCBibGFjaywgc2Fucy1zZXJpZlwiLFxuXHRcdFx0XHRcdGZvbnRTaXplOiAzMiwvL2ZvbnRDb2xvcjogXCJyZ2IoNTgsNTgsNTgpXCIsXG5cdFx0XHRcdFx0Zm9udENvbG9yOiBcIiMzMzMzMzNcIixcblx0XHRcdFx0XHR2ZXJ0aWNhbEFsaWduOiBcInRvcFwiLFxuXHRcdFx0XHRcdG1hcmdpbjogNVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRTdWJ0aXRsZToge1xuXHRcdFx0XHRcdGZvbnRGYW1pbHk6IFwiaW1wYWN0LCBjaGFyY29hbCwgYXJpYWwgYmxhY2ssIHNhbnMtc2VyaWZcIixcblx0XHRcdFx0XHRmb250U2l6ZTogMTQsLy9mb250Q29sb3I6IFwicmdiKDU4LDU4LDU4KVwiLFxuXHRcdFx0XHRcdGZvbnRDb2xvcjogXCIjMzMzMzMzXCIsXG5cdFx0XHRcdFx0dmVydGljYWxBbGlnbjogXCJ0b3BcIixcblx0XHRcdFx0XHRtYXJnaW46IDVcblx0XHRcdFx0fSxcblx0XHRcdFx0QXhpczoge1xuXHRcdFx0XHRcdHRpdGxlRm9udFNpemU6IDIyLFxuXHRcdFx0XHRcdHRpdGxlRm9udENvbG9yOiBcInJnYig5OCw5OCw5OClcIixcblx0XHRcdFx0XHQvL3RpdGxlRm9udEZhbWlseTogXCJhcmlhbCBibGFja1wiLFxuXHRcdFx0XHRcdHRpdGxlRm9udEZhbWlseTogaXNDYW52YXNTdXBwb3J0ZWQgPyBcIm1vbm9zcGFjZSwgc2Fucy1zZXJpZixhcmlhbCBibGFja1wiIDogXCJhcmlhbFwiLFxuXHRcdFx0XHRcdHRpdGxlRm9udFdlaWdodDogXCJib2xkXCIsXG5cblxuXHRcdFx0XHRcdGxhYmVsRm9udEZhbWlseTogaXNDYW52YXNTdXBwb3J0ZWQgPyBcIm1vbm9zcGFjZSwgQ291cmllciBOZXcsIENvdXJpZXJcIiA6IFwiYXJpYWxcIixcblx0XHRcdFx0XHQvL2xhYmVsRm9udEZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhXCIsXG5cdFx0XHRcdFx0bGFiZWxGb250U2l6ZTogMTYsXG5cdFx0XHRcdFx0bGFiZWxGb250Q29sb3I6IFwiZ3JleVwiLFxuXHRcdFx0XHRcdGxhYmVsRm9udFdlaWdodDogXCJib2xkXCIsXG5cdFx0XHRcdFx0dGlja0NvbG9yOiBcImdyZXlcIixcblx0XHRcdFx0XHR0aWNrVGhpY2tuZXNzOiAyLFxuXHRcdFx0XHRcdGdyaWRUaGlja25lc3M6IDIsXG5cdFx0XHRcdFx0Z3JpZENvbG9yOiBcImdyZXlcIixcblx0XHRcdFx0XHRsaW5lQ29sb3I6IFwiZ3JleVwiLFxuXHRcdFx0XHRcdGxpbmVUaGlja25lc3M6IDBcblx0XHRcdFx0fSxcblx0XHRcdFx0TGVnZW5kOiB7XG5cdFx0XHRcdFx0dmVydGljYWxBbGlnbjogXCJib3R0b21cIixcblx0XHRcdFx0XHRob3Jpem9udGFsQWxpZ246IFwiY2VudGVyXCIsXG5cdFx0XHRcdFx0Zm9udEZhbWlseTogaXNDYW52YXNTdXBwb3J0ZWQgPyBcIm1vbm9zcGFjZSwgc2Fucy1zZXJpZixhcmlhbCBibGFja1wiIDogXCJhcmlhbFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdERhdGFTZXJpZXM6IHtcblx0XHRcdFx0XHRpbmRleExhYmVsRm9udENvbG9yOiBcImdyZXlcIixcblx0XHRcdFx0XHQvL2luZGV4TGFiZWxGb250RmFtaWx5OiBcIlRyZWJ1Y2hldCBNUywgbW9ub3NwYWNlLCBDb3VyaWVyIE5ldywgQ291cmllclwiLFxuXHRcdFx0XHRcdGluZGV4TGFiZWxGb250RmFtaWx5OiBpc0NhbnZhc1N1cHBvcnRlZCA/IFwiQ291cmllciBOZXcsIENvdXJpZXIsIG1vbm9zcGFjZVwiIDogXCJhcmlhbFwiLFxuXHRcdFx0XHRcdGluZGV4TGFiZWxGb250V2VpZ2h0OiBcImJvbGRcIixcblx0XHRcdFx0XHRpbmRleExhYmVsRm9udFNpemU6IDE4LFxuXHRcdFx0XHRcdC8vaW5kZXhMYWJlbExpbmVDb2xvcjogXCJsaWdodGdyZXlcIixcblx0XHRcdFx0XHRpbmRleExhYmVsTGluZVRoaWNrbmVzczogMVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRcInRoZW1lM1wiOiB7XG5cdFx0XHRcdENoYXJ0OlxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbG9yU2V0OiBcImNvbG9yU2V0MVwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0VGl0bGU6IHtcblx0XHRcdFx0XHRmb250RmFtaWx5OiBpc0NhbnZhc1N1cHBvcnRlZCA/IFwiQ2FuZGFyYSwgT3B0aW1hLCBUcmVidWNoZXQgTVMsIEhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIFRyZWJ1Y2hldCBNUywgc2VyaWZcIiA6IFwiY2FsaWJyaVwiLFxuXHRcdFx0XHRcdGZvbnRTaXplOiAzMixcblx0XHRcdFx0XHRmb250Q29sb3I6IFwiIzNBM0EzQVwiLFxuXHRcdFx0XHRcdGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdHZlcnRpY2FsQWxpZ246IFwidG9wXCIsXG5cdFx0XHRcdFx0bWFyZ2luOiA1XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFN1YnRpdGxlOiB7XG5cdFx0XHRcdFx0Zm9udEZhbWlseTogaXNDYW52YXNTdXBwb3J0ZWQgPyBcIkNhbmRhcmEsIE9wdGltYSwgVHJlYnVjaGV0IE1TLCBIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBUcmVidWNoZXQgTVMsIHNlcmlmXCIgOiBcImNhbGlicmlcIixcblx0XHRcdFx0XHRmb250U2l6ZTogMTYsXG5cdFx0XHRcdFx0Zm9udENvbG9yOiBcIiMzQTNBM0FcIixcblx0XHRcdFx0XHRmb250V2VpZ2h0OiBcImJvbGRcIixcblx0XHRcdFx0XHR2ZXJ0aWNhbEFsaWduOiBcInRvcFwiLFxuXHRcdFx0XHRcdG1hcmdpbjogNVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRBeGlzOiB7XG5cdFx0XHRcdFx0dGl0bGVGb250U2l6ZTogMjIsXG5cdFx0XHRcdFx0dGl0bGVGb250Q29sb3I6IFwicmdiKDk4LDk4LDk4KVwiLFxuXHRcdFx0XHRcdC8vdGl0bGVGb250RmFtaWx5OiBcImFyaWFsIGJsYWNrXCIsXG5cdFx0XHRcdFx0dGl0bGVGb250RmFtaWx5OiBpc0NhbnZhc1N1cHBvcnRlZCA/IFwiVmVyZGFuYSwgR2VuZXZhLCBDYWxpYnJpLCBzYW5zLXNlcmlmXCIgOiBcImNhbGlicmlcIixcblx0XHRcdFx0XHQvL3RpdGxlRm9udFdlaWdodDogXCJib2xkXCIsXG5cblx0XHRcdFx0XHQvL2xhYmVsRm9udEZhbWlseTogXCJUaW1lcyBOZXcgUm9tYW4sIFRpbWVzLCBzZXJpZlwiLFxuXHRcdFx0XHRcdGxhYmVsRm9udEZhbWlseTogaXNDYW52YXNTdXBwb3J0ZWQgPyBcIkNhbGlicmksIE9wdGltYSwgQ2FuZGFyYSwgVmVyZGFuYSwgR2VuZXZhLCBzYW5zLXNlcmlmXCIgOiBcImNhbGlicmlcIixcblx0XHRcdFx0XHQvL2xhYmVsRm9udEZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhXCIsXG5cdFx0XHRcdFx0bGFiZWxGb250U2l6ZTogMTgsXG5cdFx0XHRcdFx0bGFiZWxGb250Q29sb3I6IFwiZ3JleVwiLFxuXHRcdFx0XHRcdC8vbGFiZWxGb250V2VpZ2h0OiBcImJvbGRcIixcblx0XHRcdFx0XHR0aWNrQ29sb3I6IFwiZ3JleVwiLFxuXHRcdFx0XHRcdHRpY2tUaGlja25lc3M6IDIsXG5cdFx0XHRcdFx0Z3JpZFRoaWNrbmVzczogMixcblx0XHRcdFx0XHRncmlkQ29sb3I6IFwiZ3JleVwiLFxuXHRcdFx0XHRcdGxpbmVUaGlja25lc3M6IDIsXG5cdFx0XHRcdFx0bGluZUNvbG9yOiBcImdyZXlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRMZWdlbmQ6IHtcblx0XHRcdFx0XHR2ZXJ0aWNhbEFsaWduOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdGhvcml6b250YWxBbGlnbjogXCJjZW50ZXJcIixcblx0XHRcdFx0XHRmb250RmFtaWx5OiBpc0NhbnZhc1N1cHBvcnRlZCA/IFwibW9ub3NwYWNlLCBzYW5zLXNlcmlmLGFyaWFsIGJsYWNrXCIgOiBcImNhbGlicmlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHREYXRhU2VyaWVzOiB7XG5cdFx0XHRcdFx0YmV2ZWxFbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRcdGluZGV4TGFiZWxGb250Q29sb3I6IFwiZ3JleVwiLFxuXHRcdFx0XHRcdC8vaW5kZXhMYWJlbEZvbnRGYW1pbHk6IFwiVHJlYnVjaGV0IE1TLCBtb25vc3BhY2UsIENvdXJpZXIgTmV3LCBDb3VyaWVyXCIsXG5cdFx0XHRcdFx0aW5kZXhMYWJlbEZvbnRGYW1pbHk6IGlzQ2FudmFzU3VwcG9ydGVkID8gXCJDYW5kYXJhLCBPcHRpbWEsIENhbGlicmksIFZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZlwiIDogXCJjYWxpYnJpXCIsXG5cdFx0XHRcdFx0Ly9pbmRleExhYmVsRm9udFdlaWdodDogXCJib2xkXCIsXG5cdFx0XHRcdFx0aW5kZXhMYWJlbEZvbnRTaXplOiAxOCxcblx0XHRcdFx0XHRpbmRleExhYmVsTGluZUNvbG9yOiBcImxpZ2h0Z3JleVwiLFxuXHRcdFx0XHRcdGluZGV4TGFiZWxMaW5lVGhpY2tuZXNzOiAyXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuIiwiLy8jcmVnaW9uIEFuaW1hdG9yXG5cbmltcG9ydCBBbmltYXRpb25IZWxwZXIgZnJvbSAnLi4vaGVscGVycy9hbmltYXRvcic7XG5cbmZ1bmN0aW9uIEFuaW1hdG9yKGNoYXJ0KSB7XG5cbiAgdGhpcy5jaGFydCA9IGNoYXJ0O1xuICB0aGlzLmN0eCA9IHRoaXMuY2hhcnQucGxvdEFyZWEuY3R4O1xuICB0aGlzLmFuaW1hdGlvbnMgPSBbXTtcbiAgdGhpcy5hbmltYXRpb25SZXF1ZXN0SWQgPSBudWxsO1xufVxuXG4vL0FuaW1hdG9yLnByb3RvdHlwZS5hbmltYXRlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCBiYXNlLCBkZXN0LCBzb3VyY2UsIGFuaW1hdGlvbkNhbGxiYWNrLCBvbkNvbXBsZXRlKSB7XG5BbmltYXRvci5wcm90b3R5cGUuYW5pbWF0ZSA9IGZ1bmN0aW9uIChzdGFydERlbGF5LCBkdXJhdGlvbiwgYW5pbWF0aW9uQ2FsbGJhY2ssIG9uQ29tcGxldGUsIGVhc2luZ0Z1bmN0aW9uKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdGhpcy5jaGFydC5pc0FuaW1hdGluZyA9IHRydWU7XG4gIGVhc2luZ0Z1bmN0aW9uID0gZWFzaW5nRnVuY3Rpb24gfHwgQW5pbWF0aW9uSGVscGVyLmVhc2luZy5saW5lYXI7XG5cbiAgaWYgKGFuaW1hdGlvbkNhbGxiYWNrKSB7XG5cbiAgICB0aGlzLmFuaW1hdGlvbnMucHVzaCh7XG4gICAgICBzdGFydFRpbWU6IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgKyAoc3RhcnREZWxheSA/IHN0YXJ0RGVsYXkgOiAwKSxcbiAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcbiAgICAgIGFuaW1hdGlvbkNhbGxiYWNrOiBhbmltYXRpb25DYWxsYmFjayxcbiAgICAgIG9uQ29tcGxldGU6IG9uQ29tcGxldGVcbiAgICB9KTtcbiAgfVxuXG4gIHZhciByZW1haW5pbmdBbmltYXRpb25zID0gW107XG5cbiAgd2hpbGUgKHRoaXMuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7XG5cbiAgICB2YXIgYW5pbWF0aW9uID0gdGhpcy5hbmltYXRpb25zLnNoaWZ0KCk7XG4gICAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gICAgdmFyIGZyYWN0aW9uQ29tcGxldGUgPSAwO1xuICAgIC8vdmFyIGZyYWN0aW9uQ29tcGxldGUgPSBNYXRoLm1pbigoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIGFuaW1hdGlvbi5zdGFydFRpbWUpIC8gYW5pbWF0aW9uLmR1cmF0aW9uLCAxKTtcblxuICAgIGlmIChhbmltYXRpb24uc3RhcnRUaW1lIDw9IG5vdykge1xuICAgICAgZnJhY3Rpb25Db21wbGV0ZSA9IGVhc2luZ0Z1bmN0aW9uKE1hdGgubWluKChub3cgLSBhbmltYXRpb24uc3RhcnRUaW1lKSwgYW5pbWF0aW9uLmR1cmF0aW9uKSwgMCwgMSwgYW5pbWF0aW9uLmR1cmF0aW9uKTtcbiAgICAgIC8vdmFyIGZyYWN0aW9uQ29tcGxldGUgPSBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmVhc2VPdXRRdWFkKE1hdGgubWluKCgobmV3IERhdGUoKSkuZ2V0VGltZSgpIC0gYW5pbWF0aW9uLnN0YXJ0VGltZSksIGFuaW1hdGlvbi5kdXJhdGlvbiksIDAsIDEsIGFuaW1hdGlvbi5kdXJhdGlvbik7XG5cbiAgICAgIGZyYWN0aW9uQ29tcGxldGUgPSBNYXRoLm1pbihmcmFjdGlvbkNvbXBsZXRlLCAxKTtcblxuICAgICAgaWYgKGlzTmFOKGZyYWN0aW9uQ29tcGxldGUpIHx8ICFpc0Zpbml0ZShmcmFjdGlvbkNvbXBsZXRlKSlcbiAgICAgICAgZnJhY3Rpb25Db21wbGV0ZSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKGZyYWN0aW9uQ29tcGxldGUgPCAxKSB7XG4gICAgICByZW1haW5pbmdBbmltYXRpb25zLnB1c2goYW5pbWF0aW9uKTtcbiAgICB9XG5cbiAgICBhbmltYXRpb24uYW5pbWF0aW9uQ2FsbGJhY2soZnJhY3Rpb25Db21wbGV0ZSk7XG5cbiAgICBpZiAoZnJhY3Rpb25Db21wbGV0ZSA+PSAxICYmIGFuaW1hdGlvbi5vbkNvbXBsZXRlKVxuICAgICAgYW5pbWF0aW9uLm9uQ29tcGxldGUoKTtcbiAgfVxuXG4gIHRoaXMuYW5pbWF0aW9ucyA9IHJlbWFpbmluZ0FuaW1hdGlvbnM7XG5cbiAgaWYgKHRoaXMuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5hbmltYXRpb25SZXF1ZXN0SWQgPSB0aGlzLmNoYXJ0LnJlcXVlc3RBbmltRnJhbWUuY2FsbCh3aW5kb3csIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmFuaW1hdGUuY2FsbChfdGhpcyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5jaGFydC5pc0FuaW1hdGluZyA9IGZhbHNlO1xuICB9XG5cbn1cblxuQW5pbWF0b3IucHJvdG90eXBlLmNhbmNlbEFsbEFuaW1hdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG5cbiAgdGhpcy5hbmltYXRpb25zID0gW107XG5cbiAgaWYgKHRoaXMuYW5pbWF0aW9uUmVxdWVzdElkKSB7XG4gICAgdGhpcy5jaGFydC5jYW5jZWxSZXF1ZXN0QW5pbUZyYW1lLmNhbGwod2luZG93LCB0aGlzLmFuaW1hdGlvblJlcXVlc3RJZCk7XG4gIH1cblxuICB0aGlzLmFuaW1hdGlvblJlcXVlc3RJZCA9IG51bGw7XG4gIHRoaXMuY2hhcnQuaXNBbmltYXRpbmcgPSBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0b3I7XG4iLCJcbmltcG9ydCBDYW52YXNKU09iamVjdCBmcm9tICcuL2NhbnZhc2pzJztcbmltcG9ydCBUZXh0QmxvY2sgZnJvbSAnLi90ZXh0X2Jsb2NrJztcbmltcG9ydCB7ZXh0ZW5kLCBudW1iZXJGb3JtYXQsIGdldExpbmVEYXNoQXJyYXksIGNvbnZlcnRUb051bWJlciwgYWRkVG9EYXRlVGltZSwgZGF0ZUZvcm1hdH0gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5pbXBvcnQge2NvbnN0YW50c30gZnJvbSAnLi4vY29uc3RhbnRzL2N1bHR1cmUnO1xuXG5mdW5jdGlvbiBBeGlzKGNoYXJ0LCBvcHRpb25zLCB0eXBlLCBwb3NpdGlvbikge1xuXG5cdEF4aXMuYmFzZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIFwiQXhpc1wiLCBvcHRpb25zLCBjaGFydC50aGVtZSk7XG5cblx0dGhpcy5jaGFydCA9IGNoYXJ0O1xuXHR0aGlzLmNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcblx0dGhpcy5jdHggPSBjaGFydC5jdHg7XG5cdHRoaXMubWF4V2lkdGggPSAwO1xuXHR0aGlzLm1heEhlaWdodCA9IDA7XG5cdHRoaXMuaW50ZXJ2YWxTdGFydFBvc2l0aW9uID0gMDtcblx0dGhpcy5sYWJlbHMgPSBbXTtcblx0dGhpcy5fbGFiZWxzID0gbnVsbDtcblxuXHQvL1Byb2Nlc3NlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGF0YSB0aGF0IGdldHMgcGxvdHRlZCBhZ2FpbnN0IHRoaXMgYXhpc1xuXHR0aGlzLmRhdGFJbmZvID0ge1xuXHRcdG1pbjogSW5maW5pdHksXG5cdFx0bWF4OiAtSW5maW5pdHksXG5cdFx0dmlld1BvcnRNaW46IEluZmluaXR5LFxuXHRcdHZpZXdQb3J0TWF4OiAtSW5maW5pdHksXG5cdFx0bWluRGlmZjogSW5maW5pdHkgLy8gVXNlZCBvbmx5IGluIGNhc2Ugb2YgYXhpc1hcblx0fTtcblxuXHRpZiAodHlwZSA9PT0gXCJheGlzWFwiKSB7XG5cdFx0dGhpcy5zZXNzaW9uVmFyaWFibGVzID0gdGhpcy5jaGFydC5zZXNzaW9uVmFyaWFibGVzW3R5cGVdO1xuXG5cdFx0aWYgKCF0aGlzLl9vcHRpb25zLmludGVydmFsKVxuXHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChwb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgcG9zaXRpb24gPT09IFwidG9wXCIpXG5cdFx0XHR0aGlzLnNlc3Npb25WYXJpYWJsZXMgPSB0aGlzLmNoYXJ0LnNlc3Npb25WYXJpYWJsZXNbXCJheGlzWVwiXTtcblx0XHRlbHNlIHtcblx0XHRcdHRoaXMuc2Vzc2lvblZhcmlhYmxlcyA9IHRoaXMuY2hhcnQuc2Vzc2lvblZhcmlhYmxlc1tcImF4aXNZMlwiXTtcblx0XHR9XG5cdH1cblxuXG5cblx0aWYgKHR5cGVvZiAodGhpcy5fb3B0aW9ucy50aXRsZUZvbnRTaXplKSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXG5cdFx0dGhpcy50aXRsZUZvbnRTaXplID0gdGhpcy5jaGFydC5nZXRBdXRvRm9udFNpemUodGhpcy50aXRsZUZvbnRTaXplKTtcblxuXHRcdC8vd2luZG93LmNvbnNvbGUubG9nKFwidGl0bGVGb250U2l6ZTogXCIgKyB0aGlzLnRpdGxlRm9udFNpemUpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiAodGhpcy5fb3B0aW9ucy5sYWJlbEZvbnRTaXplKSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXG5cdFx0dGhpcy5sYWJlbEZvbnRTaXplID0gdGhpcy5jaGFydC5nZXRBdXRvRm9udFNpemUodGhpcy5sYWJlbEZvbnRTaXplKTtcblxuXHRcdC8vd2luZG93LmNvbnNvbGUubG9nKFwibGFiZWxGb250U2l6ZTogXCIgKyB0aGlzLmxhYmVsRm9udFNpemUpO1xuXG5cdH1cblxuXHQvL0F4aXMgVHlwZSA6IGF4aXNYLCBheGlzWVxuXHR0aGlzLnR5cGUgPSB0eXBlO1xuXHRpZiAodHlwZSA9PT0gXCJheGlzWFwiICYmICghb3B0aW9ucyB8fCB0eXBlb2YgKG9wdGlvbnMuZ3JpZFRoaWNrbmVzcykgPT09IFwidW5kZWZpbmVkXCIpKVxuXHRcdHRoaXMuZ3JpZFRoaWNrbmVzcyA9IDA7XG5cblx0dGhpcy5fcG9zaXRpb24gPSBwb3NpdGlvbjtcblxuXHR0aGlzLmxpbmVDb29yZGluYXRlcyA9IHtcblx0XHR4MTogbnVsbCwgeTE6IG51bGwsIHgyOiBudWxsLCB5MjogbnVsbCwgd2lkdGg6IG51bGxcblx0fTsvL3t4MTosIHkxOiwgeDI6LCB5MjosIHdpZHRoOn1cblx0Ly9cblx0e1xuXHRcdHRoaXMubGFiZWxBbmdsZSA9ICgodGhpcy5sYWJlbEFuZ2xlICUgMzYwKSArIDM2MCkgJSAzNjA7XG5cblx0XHRpZiAodGhpcy5sYWJlbEFuZ2xlID4gOTAgJiYgdGhpcy5sYWJlbEFuZ2xlIDw9IDI3MClcblx0XHRcdHRoaXMubGFiZWxBbmdsZSAtPSAxODA7XG5cdFx0ZWxzZSBpZiAodGhpcy5sYWJlbEFuZ2xlID4gMTgwICYmIHRoaXMubGFiZWxBbmdsZSA8PSAyNzApXG5cdFx0XHR0aGlzLmxhYmVsQW5nbGUgLT0gMTgwXG5cdFx0ZWxzZSBpZiAodGhpcy5sYWJlbEFuZ2xlID4gMjcwICYmIHRoaXMubGFiZWxBbmdsZSA8PSAzNjApXG5cdFx0XHR0aGlzLmxhYmVsQW5nbGUgLT0gMzYwXG5cdH1cblxuXHRpZiAodGhpcy5fb3B0aW9ucy5zdHJpcExpbmVzICYmIHRoaXMuX29wdGlvbnMuc3RyaXBMaW5lcy5sZW5ndGggPiAwKSB7XG5cblx0XHR0aGlzLnN0cmlwTGluZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3B0aW9ucy5zdHJpcExpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0aGlzLnN0cmlwTGluZXMucHVzaChuZXcgU3RyaXBMaW5lKHRoaXMuY2hhcnQsIHRoaXMuX29wdGlvbnMuc3RyaXBMaW5lc1tpXSwgY2hhcnQudGhlbWUsICsrdGhpcy5jaGFydC5fZXZlbnRNYW5hZ2VyLmxhc3RPYmplY3RJZCwgdGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMuX3RpdGxlVGV4dEJsb2NrID0gbnVsbDtcblxuXHRpZiAoIXRoaXMuaGFzT3B0aW9uQ2hhbmdlZChcInZpZXdwb3J0TWluaW11bVwiKSAmJiAhaXNOYU4odGhpcy5zZXNzaW9uVmFyaWFibGVzLm5ld1ZpZXdwb3J0TWluaW11bSkgJiYgdGhpcy5zZXNzaW9uVmFyaWFibGVzLm5ld1ZpZXdwb3J0TWluaW11bSAhPT0gbnVsbClcblx0XHR0aGlzLnZpZXdwb3J0TWluaW11bSA9IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5uZXdWaWV3cG9ydE1pbmltdW07XG5cdGVsc2Vcblx0XHR0aGlzLnNlc3Npb25WYXJpYWJsZXMubmV3Vmlld3BvcnRNaW5pbXVtID0gbnVsbDtcblxuXHRpZiAoIXRoaXMuaGFzT3B0aW9uQ2hhbmdlZChcInZpZXdwb3J0TWF4aW11bVwiKSAmJiAhaXNOYU4odGhpcy5zZXNzaW9uVmFyaWFibGVzLm5ld1ZpZXdwb3J0TWF4aW11bSkgJiYgdGhpcy5zZXNzaW9uVmFyaWFibGVzLm5ld1ZpZXdwb3J0TWF4aW11bSAhPT0gbnVsbClcblx0XHR0aGlzLnZpZXdwb3J0TWF4aW11bSA9IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5uZXdWaWV3cG9ydE1heGltdW07XG5cdGVsc2Vcblx0XHR0aGlzLnNlc3Npb25WYXJpYWJsZXMubmV3Vmlld3BvcnRNYXhpbXVtID0gbnVsbDtcblxuXHRpZiAodGhpcy5taW5pbXVtICE9PSBudWxsICYmIHRoaXMudmlld3BvcnRNaW5pbXVtICE9PSBudWxsKVxuXHRcdHRoaXMudmlld3BvcnRNaW5pbXVtID0gTWF0aC5tYXgodGhpcy52aWV3cG9ydE1pbmltdW0sIHRoaXMubWluaW11bSk7XG5cblx0aWYgKHRoaXMubWF4aW11bSAhPT0gbnVsbCAmJiB0aGlzLnZpZXdwb3J0TWF4aW11bSAhPT0gbnVsbClcblx0XHR0aGlzLnZpZXdwb3J0TWF4aW11bSA9IE1hdGgubWluKHRoaXMudmlld3BvcnRNYXhpbXVtLCB0aGlzLm1heGltdW0pO1xuXG5cdHRoaXMudHJhY2tDaGFuZ2VzKFwidmlld3BvcnRNaW5pbXVtXCIpO1xuXHR0aGlzLnRyYWNrQ2hhbmdlcyhcInZpZXdwb3J0TWF4aW11bVwiKTtcbn1cblxuZXh0ZW5kKEF4aXMsIENhbnZhc0pTT2JqZWN0KTtcblxuQXhpcy5wcm90b3R5cGUuY3JlYXRlTGFiZWxzID0gZnVuY3Rpb24gKCkge1xuXG5cdHZhciB0ZXh0QmxvY2s7XG5cdHZhciBpID0gMDtcblx0dmFyIGVuZFBvaW50O1xuXG5cdHZhciBsYWJlbE1heFdpZHRoID0gMDtcblx0dmFyIGxhYmVsTWF4SGVpZ2h0ID0gMDtcblx0dmFyIGludGVydmFsSW5QaXhlbHMgPSAwO1xuXG5cdC8vdmFyIGludGVydmFsSW5QaXhlbHMgPSB0aGlzLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIHRoaXMuaW50ZXJ2YWw7XG5cblxuXHRpZiAodGhpcy5fcG9zaXRpb24gPT09IFwiYm90dG9tXCIgfHwgdGhpcy5fcG9zaXRpb24gPT09IFwidG9wXCIpIHtcblx0XHRpbnRlcnZhbEluUGl4ZWxzID0gdGhpcy5saW5lQ29vcmRpbmF0ZXMud2lkdGggLyBNYXRoLmFicyh0aGlzLnZpZXdwb3J0TWF4aW11bSAtIHRoaXMudmlld3BvcnRNaW5pbXVtKSAqIHRoaXMuaW50ZXJ2YWw7XG5cblx0XHRpZiAodGhpcy5sYWJlbEF1dG9GaXQpIHtcblx0XHRcdGxhYmVsTWF4V2lkdGggPSB0eXBlb2YgKHRoaXMuX29wdGlvbnMubGFiZWxNYXhXaWR0aCkgPT09IFwidW5kZWZpbmVkXCIgPyBpbnRlcnZhbEluUGl4ZWxzICogLjkgPj4gMCA6IHRoaXMubGFiZWxNYXhXaWR0aDtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRsYWJlbE1heFdpZHRoID0gdHlwZW9mICh0aGlzLl9vcHRpb25zLmxhYmVsTWF4V2lkdGgpID09PSBcInVuZGVmaW5lZFwiID8gdGhpcy5jaGFydC53aWR0aCAqIC43ID4+IDAgOiB0aGlzLmxhYmVsTWF4V2lkdGg7XG5cdFx0fVxuXG5cdFx0bGFiZWxNYXhIZWlnaHQgPSB0eXBlb2YgKHRoaXMuX29wdGlvbnMubGFiZWxXcmFwKSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0aGlzLmxhYmVsV3JhcCA/IHRoaXMuY2hhcnQuaGVpZ2h0ICogLjUgPj4gMCA6IHRoaXMubGFiZWxGb250U2l6ZSAqIDEuNTtcblx0fVxuXHRlbHNlIGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5fcG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuXG5cdFx0aW50ZXJ2YWxJblBpeGVscyA9IHRoaXMubGluZUNvb3JkaW5hdGVzLmhlaWdodCAvIE1hdGguYWJzKHRoaXMudmlld3BvcnRNYXhpbXVtIC0gdGhpcy52aWV3cG9ydE1pbmltdW0pICogdGhpcy5pbnRlcnZhbDtcblxuXG5cdFx0aWYgKHRoaXMubGFiZWxBdXRvRml0KSB7XG5cdFx0XHRsYWJlbE1heFdpZHRoID0gdHlwZW9mICh0aGlzLl9vcHRpb25zLmxhYmVsTWF4V2lkdGgpID09PSBcInVuZGVmaW5lZFwiID8gdGhpcy5jaGFydC53aWR0aCAqIC4zID4+IDAgOiB0aGlzLmxhYmVsTWF4V2lkdGg7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0bGFiZWxNYXhXaWR0aCA9IHR5cGVvZiAodGhpcy5fb3B0aW9ucy5sYWJlbE1heFdpZHRoKSA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMuY2hhcnQud2lkdGggKiAuNSA+PiAwIDogdGhpcy5sYWJlbE1heFdpZHRoO1xuXHRcdH1cblxuXHRcdGxhYmVsTWF4SGVpZ2h0ID0gdHlwZW9mICh0aGlzLl9vcHRpb25zLmxhYmVsV3JhcCkgPT09IFwidW5kZWZpbmVkXCIgfHwgdGhpcy5sYWJlbFdyYXAgPyBpbnRlcnZhbEluUGl4ZWxzICogMiA+PiAwIDogdGhpcy5sYWJlbEZvbnRTaXplICogMS41O1xuXHR9XG5cblx0aWYgKHRoaXMudHlwZSA9PT0gXCJheGlzWFwiICYmIHRoaXMuY2hhcnQucGxvdEluZm8uYXhpc1hWYWx1ZVR5cGUgPT09IFwiZGF0ZVRpbWVcIikge1xuXHRcdGVuZFBvaW50ID0gYWRkVG9EYXRlVGltZShuZXcgRGF0ZSh0aGlzLnZpZXdwb3J0TWF4aW11bSksIHRoaXMuaW50ZXJ2YWwsIHRoaXMuaW50ZXJ2YWxUeXBlKVxuXHRcdC8vZW5kUG9pbnQgPSB0aGlzLnZpZXdwb3J0TWF4aW11bTtcblxuXHRcdGZvciAoaSA9IHRoaXMuaW50ZXJ2YWxTdGFydFBvc2l0aW9uOyBpIDwgZW5kUG9pbnQ7IGFkZFRvRGF0ZVRpbWUoaSwgdGhpcy5pbnRlcnZhbCwgdGhpcy5pbnRlcnZhbFR5cGUpKSB7XG5cblx0XHRcdC8vdmFyIHRleHQgPSBkYXRlRm9ybWF0KGksIHRoaXMudmFsdWVGb3JtYXRTdHJpbmcpO1xuXHRcdFx0dmFyIHRpbWVJbk1pbGxpc2Vjb25kcyA9IGkuZ2V0VGltZSgpO1xuXHRcdFx0dmFyIHRleHQgPSB0aGlzLmxhYmVsRm9ybWF0dGVyID8gdGhpcy5sYWJlbEZvcm1hdHRlcih7IGNoYXJ0OiB0aGlzLmNoYXJ0LCBheGlzOiB0aGlzLl9vcHRpb25zLCB2YWx1ZTogaSwgbGFiZWw6IHRoaXMubGFiZWxzW2ldID8gdGhpcy5sYWJlbHNbaV0gOiBudWxsIH0pXG5cdFx0XHRcdDogdGhpcy50eXBlID09PSBcImF4aXNYXCIgJiYgdGhpcy5sYWJlbHNbdGltZUluTWlsbGlzZWNvbmRzXSA/IHRoaXMubGFiZWxzW3RpbWVJbk1pbGxpc2Vjb25kc10gOiBkYXRlRm9ybWF0KGksIHRoaXMudmFsdWVGb3JtYXRTdHJpbmcsIHRoaXMuY2hhcnQuX2N1bHR1cmVJbmZvKTtcblxuXHRcdFx0dGV4dEJsb2NrID0gbmV3IFRleHRCbG9jayh0aGlzLmN0eCwge1xuXHRcdFx0XHR4OiAwLFxuXHRcdFx0XHR5OiAwLFxuXHRcdFx0XHQvL21heFdpZHRoOiB0aGlzLm1heEhlaWdodCxcblx0XHRcdFx0Ly9tYXhIZWlnaHQ6IHRoaXMubGFiZWxGb250U2l6ZSxcblx0XHRcdFx0bWF4V2lkdGg6IGxhYmVsTWF4V2lkdGgsXG5cdFx0XHRcdG1heEhlaWdodDogbGFiZWxNYXhIZWlnaHQsXG5cdFx0XHRcdGFuZ2xlOiB0aGlzLmxhYmVsQW5nbGUsXG5cdFx0XHRcdHRleHQ6IHRoaXMucHJlZml4ICsgdGV4dCArIHRoaXMuc3VmZml4LFxuXHRcdFx0XHRob3Jpem9udGFsQWxpZ246IFwibGVmdFwiLC8vbGVmdCwgY2VudGVyLCByaWdodFxuXHRcdFx0XHRmb250U2l6ZTogdGhpcy5sYWJlbEZvbnRTaXplLC8vaW4gcGl4ZWxzXG5cdFx0XHRcdGZvbnRGYW1pbHk6IHRoaXMubGFiZWxGb250RmFtaWx5LFxuXHRcdFx0XHRmb250V2VpZ2h0OiB0aGlzLmxhYmVsRm9udFdlaWdodCwgLy9ub3JtYWwsIGJvbGQsIGJvbGRlciwgbGlnaHRlcixcblx0XHRcdFx0Zm9udENvbG9yOiB0aGlzLmxhYmVsRm9udENvbG9yLFxuXHRcdFx0XHRmb250U3R5bGU6IHRoaXMubGFiZWxGb250U3R5bGUsIC8vIG5vcm1hbCwgaXRhbGljLCBvYmxpcXVlXG5cdFx0XHRcdHRleHRCYXNlbGluZTogXCJtaWRkbGVcIlxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuX2xhYmVscy5wdXNoKHsgcG9zaXRpb246IGkuZ2V0VGltZSgpLCB0ZXh0QmxvY2s6IHRleHRCbG9jaywgZWZmZWN0aXZlSGVpZ2h0OiBudWxsIH0pO1xuXHRcdH1cblxuXHR9XG5cdGVsc2Uge1xuXHRcdGVuZFBvaW50ID0gdGhpcy52aWV3cG9ydE1heGltdW07XG5cblx0XHQvL2lmICgoTWF0aC5mbG9vcih0aGlzLmludGVydmFsKSA8IHRoaXMuaW50ZXJ2YWwgJiYgIXRoaXMuX29wdGlvbnMuaW50ZXJ2YWwpIHx8IHRydWUpIHtcblxuXHRcdC8vQ2hlY2sgaWYgaXQgc2hvdWxkIGJlIHJlbmRlcmVkIGFzIGEgY2F0ZWdvcnkgYXhpcy4gSWYgeWVzLCB0aGVuIGNlaWwgdGhlIGludGVydmFsXG5cdFx0aWYgKHRoaXMubGFiZWxzICYmIHRoaXMubGFiZWxzLmxlbmd0aCkge1xuXHRcdFx0dmFyIHRlbXBJbnRlcnZhbCA9IE1hdGguY2VpbCh0aGlzLmludGVydmFsKTtcblx0XHRcdHZhciB0ZW1wU3RhcnRQb2ludCA9IE1hdGguY2VpbCh0aGlzLmludGVydmFsU3RhcnRQb3NpdGlvbik7XG5cdFx0XHR2YXIgaGFzQWxsTGFiZWxzID0gZmFsc2U7XG5cdFx0XHRmb3IgKGkgPSB0ZW1wU3RhcnRQb2ludDsgaSA8IHRoaXMudmlld3BvcnRNYXhpbXVtOyBpICs9IHRlbXBJbnRlcnZhbCkge1xuXHRcdFx0XHRpZiAodGhpcy5sYWJlbHNbaV0pIHtcblx0XHRcdFx0XHRoYXNBbGxMYWJlbHMgPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGhhc0FsbExhYmVscyA9IGZhbHNlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNBbGxMYWJlbHMpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IHRlbXBJbnRlcnZhbDtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFN0YXJ0UG9zaXRpb24gPSB0ZW1wU3RhcnRQb2ludDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvL3BhcnNlRmxvYXQgJiB0b1ByZWNpc2lvbiBhcmUgYmVpbmcgdXNlZCB0byBhdm9pZCBpc3N1ZXMgcmVsYXRlZCB0byBwcmVjaXNpb24uXG5cdFx0Zm9yIChpID0gdGhpcy5pbnRlcnZhbFN0YXJ0UG9zaXRpb247IGkgPD0gZW5kUG9pbnQ7IGkgPSBwYXJzZUZsb2F0KChpICsgdGhpcy5pbnRlcnZhbCkudG9GaXhlZCgxNCkpKSB7XG5cblx0XHRcdHZhciB0ZXh0ID0gdGhpcy5sYWJlbEZvcm1hdHRlciA/IHRoaXMubGFiZWxGb3JtYXR0ZXIoeyBjaGFydDogdGhpcy5jaGFydCwgYXhpczogdGhpcy5fb3B0aW9ucywgdmFsdWU6IGksIGxhYmVsOiB0aGlzLmxhYmVsc1tpXSA/IHRoaXMubGFiZWxzW2ldIDogbnVsbCB9KVxuXHRcdFx0XHQ6IHRoaXMudHlwZSA9PT0gXCJheGlzWFwiICYmIHRoaXMubGFiZWxzW2ldID8gdGhpcy5sYWJlbHNbaV0gOiBudW1iZXJGb3JtYXQoaSwgdGhpcy52YWx1ZUZvcm1hdFN0cmluZywgdGhpcy5jaGFydC5fY3VsdHVyZUluZm8pO1xuXG5cdFx0XHR0ZXh0QmxvY2sgPSBuZXcgVGV4dEJsb2NrKHRoaXMuY3R4LCB7XG5cdFx0XHRcdHg6IDAsXG5cdFx0XHRcdHk6IDAsXG5cdFx0XHRcdC8vbWF4V2lkdGg6IHRoaXMubWF4SGVpZ2h0LFxuXHRcdFx0XHQvL21heEhlaWdodDogdGhpcy5sYWJlbEZvbnRTaXplLFxuXHRcdFx0XHRtYXhXaWR0aDogbGFiZWxNYXhXaWR0aCxcblx0XHRcdFx0bWF4SGVpZ2h0OiBsYWJlbE1heEhlaWdodCxcblx0XHRcdFx0YW5nbGU6IHRoaXMubGFiZWxBbmdsZSxcblx0XHRcdFx0dGV4dDogdGhpcy5wcmVmaXggKyB0ZXh0ICsgdGhpcy5zdWZmaXgsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogXCJsZWZ0XCIsLy9sZWZ0LCBjZW50ZXIsIHJpZ2h0XG5cdFx0XHRcdGZvbnRTaXplOiB0aGlzLmxhYmVsRm9udFNpemUsLy9pbiBwaXhlbHNcblx0XHRcdFx0Zm9udEZhbWlseTogdGhpcy5sYWJlbEZvbnRGYW1pbHksXG5cdFx0XHRcdGZvbnRXZWlnaHQ6IHRoaXMubGFiZWxGb250V2VpZ2h0LCAvL25vcm1hbCwgYm9sZCwgYm9sZGVyLCBsaWdodGVyLFxuXHRcdFx0XHRmb250Q29sb3I6IHRoaXMubGFiZWxGb250Q29sb3IsXG5cdFx0XHRcdGZvbnRTdHlsZTogdGhpcy5sYWJlbEZvbnRTdHlsZSwgLy8gbm9ybWFsLCBpdGFsaWMsIG9ibGlxdWVcblx0XHRcdFx0dGV4dEJhc2VsaW5lOiBcIm1pZGRsZVwiLFxuXHRcdFx0XHRib3JkZXJUaGlja25lc3M6IDBcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLl9sYWJlbHMucHVzaCh7IHBvc2l0aW9uOiBpLCB0ZXh0QmxvY2s6IHRleHRCbG9jaywgZWZmZWN0aXZlSGVpZ2h0OiBudWxsIH0pO1xuXHRcdH1cblx0fVxuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdHJpcExpbmVzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHR2YXIgc3RyaXBMaW5lID0gdGhpcy5zdHJpcExpbmVzW2ldO1xuXG5cdFx0dGV4dEJsb2NrID0gbmV3IFRleHRCbG9jayh0aGlzLmN0eCwge1xuXHRcdFx0eDogMCxcblx0XHRcdHk6IDAsXG5cdFx0XHQvL21heFdpZHRoOiB0aGlzLm1heEhlaWdodCxcblx0XHRcdC8vbWF4SGVpZ2h0OiB0aGlzLmxhYmVsRm9udFNpemUsXG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IHN0cmlwTGluZS5sYWJlbEJhY2tncm91bmRDb2xvcixcblx0XHRcdG1heFdpZHRoOiBsYWJlbE1heFdpZHRoLFxuXHRcdFx0bWF4SGVpZ2h0OiBsYWJlbE1heEhlaWdodCxcblx0XHRcdGFuZ2xlOiB0aGlzLmxhYmVsQW5nbGUsXG5cdFx0XHR0ZXh0OiBzdHJpcExpbmUubGFiZWxGb3JtYXR0ZXIgPyBzdHJpcExpbmUubGFiZWxGb3JtYXR0ZXIoeyBjaGFydDogdGhpcy5jaGFydCwgYXhpczogdGhpcywgc3RyaXBMaW5lOiBzdHJpcExpbmUgfSkgOiBzdHJpcExpbmUubGFiZWwsXG5cdFx0XHRob3Jpem9udGFsQWxpZ246IFwibGVmdFwiLC8vbGVmdCwgY2VudGVyLCByaWdodFxuXHRcdFx0Zm9udFNpemU6IHN0cmlwTGluZS5sYWJlbEZvbnRTaXplLC8vaW4gcGl4ZWxzXG5cdFx0XHRmb250RmFtaWx5OiBzdHJpcExpbmUubGFiZWxGb250RmFtaWx5LFxuXHRcdFx0Zm9udFdlaWdodDogc3RyaXBMaW5lLmxhYmVsRm9udFdlaWdodCwgLy9ub3JtYWwsIGJvbGQsIGJvbGRlciwgbGlnaHRlcixcblx0XHRcdGZvbnRDb2xvcjogc3RyaXBMaW5lLl9vcHRpb25zLmxhYmVsRm9udENvbG9yIHx8IHN0cmlwTGluZS5jb2xvcixcblx0XHRcdGZvbnRTdHlsZTogc3RyaXBMaW5lLmxhYmVsRm9udFN0eWxlLCAvLyBub3JtYWwsIGl0YWxpYywgb2JsaXF1ZVxuXHRcdFx0dGV4dEJhc2VsaW5lOiBcIm1pZGRsZVwiLFxuXHRcdFx0Ym9yZGVyVGhpY2tuZXNzOiAwXG5cdFx0fSk7XG5cblx0XHR0aGlzLl9sYWJlbHMucHVzaCh7IHBvc2l0aW9uOiBzdHJpcExpbmUudmFsdWUsIHRleHRCbG9jazogdGV4dEJsb2NrLCBlZmZlY3RpdmVIZWlnaHQ6IG51bGwsIHN0cmlwTGluZTogc3RyaXBMaW5lIH0pO1xuXHR9XG5cbn1cblxuQXhpcy5wcm90b3R5cGUuY3JlYXRlTGFiZWxzQW5kQ2FsY3VsYXRlV2lkdGggPSBmdW5jdGlvbiAoKSB7XG5cblx0dmFyIG1heExhYmVsRWZmZWN0aXZlV2lkdGggPSAwO1xuXHR0aGlzLl9sYWJlbHMgPSBbXTtcblxuXHRpZiAodGhpcy5fcG9zaXRpb24gPT09IFwibGVmdFwiIHx8IHRoaXMuX3Bvc2l0aW9uID09PSBcInJpZ2h0XCIpIHtcblxuXHRcdHRoaXMuY3JlYXRlTGFiZWxzKCk7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2xhYmVscy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHR2YXIgdGV4dEJsb2NrID0gdGhpcy5fbGFiZWxzW2ldLnRleHRCbG9jaztcblxuXHRcdFx0dmFyIHNpemUgPSB0ZXh0QmxvY2subWVhc3VyZVRleHQoKTtcblxuXHRcdFx0Ly92YXIgaHlwb3RlbnVzZSA9IE1hdGguc3FydChNYXRoLnBvdyhzaXplLmhlaWdodCAvIDIsIDIpICsgTWF0aC5wb3coc2l6ZS53aWR0aCwgMikpO1xuXHRcdFx0Ly9sYWJlbEVmZmVjdGl2ZVdpZHRoID0gaHlwb3RlbnVzZSAqIE1hdGguY29zKE1hdGguYWJzKE1hdGguUEkgLyAxODAgKiB0aGlzLmxhYmVsQW5nbGUpIC0gTWF0aC5hYnMoTWF0aC5hY29zKHNpemUud2lkdGggLyBoeXBvdGVudXNlKSkpO1xuXG5cdFx0XHR2YXIgbGFiZWxFZmZlY3RpdmVXaWR0aCA9IDA7XG5cblx0XHRcdGlmICh0aGlzLmxhYmVsQW5nbGUgPT09IDApXG5cdFx0XHRcdGxhYmVsRWZmZWN0aXZlV2lkdGggPSBzaXplLndpZHRoO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRsYWJlbEVmZmVjdGl2ZVdpZHRoID0gKHNpemUud2lkdGggKiBNYXRoLmNvcyhNYXRoLlBJIC8gMTgwICogTWF0aC5hYnModGhpcy5sYWJlbEFuZ2xlKSkpICsgKHNpemUuaGVpZ2h0IC8gMiAqIE1hdGguc2luKE1hdGguUEkgLyAxODAgKiBNYXRoLmFicyh0aGlzLmxhYmVsQW5nbGUpKSk7XG5cblxuXHRcdFx0aWYgKG1heExhYmVsRWZmZWN0aXZlV2lkdGggPCBsYWJlbEVmZmVjdGl2ZVdpZHRoKVxuXHRcdFx0XHRtYXhMYWJlbEVmZmVjdGl2ZVdpZHRoID0gbGFiZWxFZmZlY3RpdmVXaWR0aDtcblxuXHRcdFx0dGhpcy5fbGFiZWxzW2ldLmVmZmVjdGl2ZVdpZHRoID0gbGFiZWxFZmZlY3RpdmVXaWR0aDtcblx0XHR9XG5cdH1cblxuXG5cblx0dmFyIHRpdGxlSGVpZ2h0ID0gdGhpcy50aXRsZSA/IGdldEZvbnRIZWlnaHRJblBpeGVscyh0aGlzLnRpdGxlRm9udEZhbWlseSwgdGhpcy50aXRsZUZvbnRTaXplLCB0aGlzLnRpdGxlRm9udFdlaWdodCkgKyAyIDogMDtcblxuXHR2YXIgYXhpc1dpZHRoID0gdGl0bGVIZWlnaHQgKyBtYXhMYWJlbEVmZmVjdGl2ZVdpZHRoICsgdGhpcy50aWNrTGVuZ3RoICsgNTtcblxuXHQvL2lmIChpc0RlYnVnTW9kZSAmJiB3aW5kb3cuY29uc29sZSkge1xuXHQvL1x0d2luZG93LmNvbnNvbGUubG9nKHRoaXMudHlwZSArIFwiLS0tIGF4aXNXaWR0aDogXCIgKyBheGlzV2lkdGgpO1xuXHQvL31cblxuXHRyZXR1cm4gYXhpc1dpZHRoO1xufVxuXG5BeGlzLnByb3RvdHlwZS5jcmVhdGVMYWJlbHNBbmRDYWxjdWxhdGVIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBtYXhMYWJlbEVmZmVjdGl2ZUhlaWdodCA9IDA7XG5cdHRoaXMuX2xhYmVscyA9IFtdO1xuXHR2YXIgdGV4dEJsb2NrO1xuXHR2YXIgaSA9IDA7XG5cblx0dGhpcy5jcmVhdGVMYWJlbHMoKTtcblxuXHRpZiAodGhpcy5fcG9zaXRpb24gPT09IFwiYm90dG9tXCIgfHwgdGhpcy5fcG9zaXRpb24gPT09IFwidG9wXCIpIHtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLl9sYWJlbHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0dGV4dEJsb2NrID0gdGhpcy5fbGFiZWxzW2ldLnRleHRCbG9jaztcblxuXHRcdFx0dmFyIHNpemUgPSB0ZXh0QmxvY2subWVhc3VyZVRleHQoKTtcblx0XHRcdC8vdmFyIGRpYWdvbmFsID0gTWF0aC5zcXJ0KE1hdGgucG93KHNpemUuaGVpZ2h0LCAyKSArIE1hdGgucG93KHNpemUud2lkdGgsIDIpKTtcblxuXHRcdFx0Ly92YXIgaHlwb3RlbnVzZSA9IE1hdGguc3FydChNYXRoLnBvdyhzaXplLmhlaWdodCAvIDIsIDIpICsgTWF0aC5wb3coc2l6ZS53aWR0aCwgMikpO1xuXHRcdFx0Ly92YXIgbGFiZWxFZmZlY3RpdmVIZWlnaHQgPSBoeXBvdGVudXNlICogTWF0aC5jb3MoTWF0aC5QSSAvIDIgLSAoTWF0aC5hYnMoTWF0aC5QSSAvIDE4MCAqIHRoaXMubGFiZWxBbmdsZSkgKyBNYXRoLmFicyhNYXRoLmFjb3Moc2l6ZS53aWR0aCAvIGh5cG90ZW51c2UpKSkpO1xuXG5cdFx0XHR2YXIgbGFiZWxFZmZlY3RpdmVIZWlnaHQgPSAwO1xuXG5cdFx0XHRpZiAodGhpcy5sYWJlbEFuZ2xlID09PSAwKVxuXHRcdFx0XHRsYWJlbEVmZmVjdGl2ZUhlaWdodCA9IHNpemUuaGVpZ2h0O1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRsYWJlbEVmZmVjdGl2ZUhlaWdodCA9IChzaXplLndpZHRoICogTWF0aC5zaW4oTWF0aC5QSSAvIDE4MCAqIE1hdGguYWJzKHRoaXMubGFiZWxBbmdsZSkpKSArIChzaXplLmhlaWdodCAvIDIgKiBNYXRoLmNvcyhNYXRoLlBJIC8gMTgwICogTWF0aC5hYnModGhpcy5sYWJlbEFuZ2xlKSkpO1xuXG5cdFx0XHRpZiAobWF4TGFiZWxFZmZlY3RpdmVIZWlnaHQgPCBsYWJlbEVmZmVjdGl2ZUhlaWdodClcblx0XHRcdFx0bWF4TGFiZWxFZmZlY3RpdmVIZWlnaHQgPSBsYWJlbEVmZmVjdGl2ZUhlaWdodDtcblxuXHRcdFx0dGhpcy5fbGFiZWxzW2ldLmVmZmVjdGl2ZUhlaWdodCA9IGxhYmVsRWZmZWN0aXZlSGVpZ2h0O1xuXHRcdH1cblx0fVxuXG5cdC8vdmFyIHRpdGxlSGVpZ2h0ID0gdGhpcy50aXRsZSA/IHRoaXMudGl0bGVGb250U2l6ZSArIDUgOiAwO1xuXHR2YXIgdGl0bGVIZWlnaHQgPSB0aGlzLnRpdGxlID8gZ2V0Rm9udEhlaWdodEluUGl4ZWxzKHRoaXMudGl0bGVGb250RmFtaWx5LCB0aGlzLnRpdGxlRm9udFNpemUsIHRoaXMudGl0bGVGb250V2VpZ2h0KSArIDIgOiAwO1xuXG5cdHJldHVybiB0aXRsZUhlaWdodCArIG1heExhYmVsRWZmZWN0aXZlSGVpZ2h0ICsgdGhpcy50aWNrTGVuZ3RoICsgNTtcbn1cblxuLy9TdGF0aWMgTWV0aG9kIHRoYXQgY28tb3JkaW5hdGVzIGJldHdlZW4gYXhpc1gsIGF4aXNZIGFuZCByZW5kZXJzIHRoZW1cbkF4aXMuc2V0TGF5b3V0QW5kUmVuZGVyID0gZnVuY3Rpb24gKGF4aXNYLCBheGlzWSwgYXhpc1kyLCBheGlzUGxhY2VtZW50LCBmcmVlU3BhY2UpIHtcblx0dmFyIHgxLCB5MSwgeDIsIHkyO1xuXHR2YXIgY2hhcnQgPSBheGlzWC5jaGFydDtcblx0dmFyIGN0eCA9IGNoYXJ0LmN0eDtcblxuXHRheGlzWC5jYWxjdWxhdGVBeGlzUGFyYW1ldGVycygpO1xuXG5cdGlmIChheGlzWSlcblx0XHRheGlzWS5jYWxjdWxhdGVBeGlzUGFyYW1ldGVycygpO1xuXG5cdGlmIChheGlzWTIpXG5cdFx0YXhpc1kyLmNhbGN1bGF0ZUF4aXNQYXJhbWV0ZXJzKCk7XG5cblx0Ly9pZiAoYXhpc1kgJiYgYXhpc1kyICYmIHR5cGVvZiAoYXhpc1kuX29wdGlvbnMudmlld3BvcnRNYXhpbXVtKSA9PT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgKGF4aXNZLl9vcHRpb25zLnZpZXdwb3J0TWluaW11bSkgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIChheGlzWS5fb3B0aW9ucy5pbnRlcnZhbCkgPT09IFwidW5kZWZpbmVkXCJcblx0Ly9cdFx0JiYgdHlwZW9mIChheGlzWTIuX29wdGlvbnMudmlld3BvcnRNYXhpbXVtKSA9PT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgKGF4aXNZMi5fb3B0aW9ucy52aWV3cG9ydE1pbmltdW0pID09PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiAoYXhpc1kyLl9vcHRpb25zLmludGVydmFsKSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXG5cdC8vXHR2YXIgbm9UaWNrc1kgPSAoYXhpc1kudmlld3BvcnRNYXhpbXVtIC0gYXhpc1kudmlld3BvcnRNaW5pbXVtKSAvIGF4aXNZLmludGVydmFsO1xuXG5cdC8vXHR2YXIgbm9UaWNrc1kyID0gKGF4aXNZMi52aWV3cG9ydE1heGltdW0gLSBheGlzWTIudmlld3BvcnRNaW5pbXVtKSAvIGF4aXNZMi5pbnRlcnZhbDtcblxuXHQvL1x0aWYgKG5vVGlja3NZID4gbm9UaWNrc1kyKSB7XG5cdC8vXHRcdGF4aXNZMi52aWV3cG9ydE1heGltdW0gPSBheGlzWTIuaW50ZXJ2YWwgKiBub1RpY2tzWSArIGF4aXNZMi52aWV3cG9ydE1pbmltdW07XG5cdC8vXHR9IGVsc2UgaWYgKG5vVGlja3NZMiA+IG5vVGlja3NZKSB7XG5cdC8vXHRcdGF4aXNZLnZpZXdwb3J0TWF4aW11bSA9IGF4aXNZLmludGVydmFsICogbm9UaWNrc1kyICsgYXhpc1kudmlld3BvcnRNaW5pbXVtO1xuXHQvL1x0fVxuXHQvL31cblxuXHR2YXIgYXhpc1lsaW5lVGhpY2tuZXNzID0gYXhpc1kgPyBheGlzWS5saW5lVGhpY2tuZXNzID8gYXhpc1kubGluZVRoaWNrbmVzcyA6IDAgOiAwO1xuXHR2YXIgYXhpc1kybGluZVRoaWNrbmVzcyA9IGF4aXNZMiA/IGF4aXNZMi5saW5lVGhpY2tuZXNzID8gYXhpc1kyLmxpbmVUaGlja25lc3MgOiAwIDogMDtcblxuXHR2YXIgYXhpc1lHcmlkVGhpY2tuZXNzID0gYXhpc1kgPyBheGlzWS5ncmlkVGhpY2tuZXNzID8gYXhpc1kuZ3JpZFRoaWNrbmVzcyA6IDAgOiAwO1xuXHR2YXIgYXhpc1kyR3JpZFRoaWNrbmVzcyA9IGF4aXNZMiA/IGF4aXNZMi5ncmlkVGhpY2tuZXNzID8gYXhpc1kyLmdyaWRUaGlja25lc3MgOiAwIDogMDtcblxuXHR2YXIgYXhpc1lNYXJnaW4gPSBheGlzWSA/IGF4aXNZLm1hcmdpbiA6IDA7XG5cdHZhciBheGlzWTJNYXJnaW4gPSBheGlzWSA/IGF4aXNZLm1hcmdpbiA6IDA7XG5cblx0aWYgKGF4aXNQbGFjZW1lbnQgPT09IFwibm9ybWFsXCIpIHtcblxuXHRcdGF4aXNYLmxpbmVDb29yZGluYXRlcyA9IHtcblx0XHR9O1xuXG5cdFx0dmFyIGF4aXNZV2lkdGggPSBNYXRoLmNlaWwoYXhpc1kgPyBheGlzWS5jcmVhdGVMYWJlbHNBbmRDYWxjdWxhdGVXaWR0aCgpIDogMCk7XG5cdFx0eDEgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS54MSArIGF4aXNZV2lkdGggKyBheGlzWU1hcmdpbik7XG5cdFx0YXhpc1gubGluZUNvb3JkaW5hdGVzLngxID0geDE7XG5cblx0XHR2YXIgYXhpc1kyV2lkdGggPSBNYXRoLmNlaWwoYXhpc1kyID8gYXhpc1kyLmNyZWF0ZUxhYmVsc0FuZENhbGN1bGF0ZVdpZHRoKCkgOiAwKTtcblx0XHR4MiA9IE1hdGgucm91bmQoZnJlZVNwYWNlLngyIC0gYXhpc1kyV2lkdGggPiBheGlzWC5jaGFydC53aWR0aCAtIDEwID8gYXhpc1guY2hhcnQud2lkdGggLSAxMCA6IGZyZWVTcGFjZS54MiAtIGF4aXNZMldpZHRoKTtcblx0XHRheGlzWC5saW5lQ29vcmRpbmF0ZXMueDIgPSB4MjtcblxuXHRcdGF4aXNYLmxpbmVDb29yZGluYXRlcy53aWR0aCA9IE1hdGguYWJzKHgyIC0geDEpOyAvLyByZXF1aXJlZCBlYXJseSBvbiBpbnNpZGUgY3JlYXRlTGFiZWxzIG9mIGF4aXNYXG5cblx0XHR2YXIgYXhpc1hIZWlnaHQgPSBNYXRoLmNlaWwoYXhpc1guY3JlYXRlTGFiZWxzQW5kQ2FsY3VsYXRlSGVpZ2h0KCkpO1xuXG5cdFx0Ly8gUG9zaXRpb24gYXhpc1ggYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBmcmVlIHNwYWNlLCBNYXJnaW4gYW5kIGl0cyBoZWlnaHRcblx0XHQvL3gxID0gZnJlZVNwYWNlLngxICsgYXhpc1lXaWR0aCArIGF4aXNZTWFyZ2luICsgYXhpc1lsaW5lVGhpY2tuZXNzIC8gMjtcblx0XHR5MSA9IE1hdGgucm91bmQoZnJlZVNwYWNlLnkyIC0gYXhpc1hIZWlnaHQgLSBheGlzWC5tYXJnaW4pO1xuXHRcdHkyID0gTWF0aC5yb3VuZChmcmVlU3BhY2UueTIgLSBheGlzWC5tYXJnaW4pO1xuXG5cdFx0Ly9heGlzWC5saW5lQ29vcmRpbmF0ZXMgPSB7IHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5MSwgd2lkdGg6IE1hdGguYWJzKHgyIC0geDEpIH1cblx0XHRheGlzWC5saW5lQ29vcmRpbmF0ZXMueTEgPSB5MTtcblx0XHRheGlzWC5saW5lQ29vcmRpbmF0ZXMueTIgPSB5MTtcblxuXHRcdGF4aXNYLmJvdW5kaW5nUmVjdCA9IHtcblx0XHRcdHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5Miwgd2lkdGg6IHgyIC0geDEsIGhlaWdodDogeTIgLSB5MVxuXHRcdH07XG5cblx0XHQvL2lmIChpc0RlYnVnTW9kZSkge1xuXHRcdC8vXHRheGlzWC5jdHgucmVjdChheGlzWC5ib3VuZGluZ1JlY3QueDEsIGF4aXNYLmJvdW5kaW5nUmVjdC55MSwgYXhpc1guYm91bmRpbmdSZWN0LndpZHRoLCBheGlzWC5ib3VuZGluZ1JlY3QuaGVpZ2h0KTtcblx0XHQvL1x0YXhpc1guY3R4LnN0cm9rZSgpO1xuXHRcdC8vfVxuXG5cdFx0Ly8gUG9zaXRpb24gYXhpc1kgYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBmcmVlIHNwYWNlLCBNYXJnaW4gYW5kIGl0cyBoZWlnaHRcblx0XHRpZiAoYXhpc1kpIHtcblx0XHRcdHgxID0gTWF0aC5yb3VuZChmcmVlU3BhY2UueDEgKyBheGlzWS5tYXJnaW4pO1xuXHRcdFx0eTEgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS55MSA8IDEwID8gMTAgOiBmcmVlU3BhY2UueTEpO1xuXHRcdFx0eDIgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS54MSArIGF4aXNZV2lkdGggKyBheGlzWS5tYXJnaW4pO1xuXHRcdFx0Ly95MiA9IGZyZWVTcGFjZS55MiAtIGF4aXNYSGVpZ2h0IC0gYXhpc1gubWFyZ2luIC0gYXhpc1gubGluZVRoaWNrbmVzcyAvIDI7XG5cdFx0XHR5MiA9IE1hdGgucm91bmQoZnJlZVNwYWNlLnkyIC0gYXhpc1hIZWlnaHQgLSBheGlzWC5tYXJnaW4pO1xuXG5cdFx0XHRheGlzWS5saW5lQ29vcmRpbmF0ZXMgPSB7XG5cdFx0XHRcdHgxOiB4MiwgeTE6IHkxLCB4MjogeDIsIHkyOiB5MiwgaGVpZ2h0OiBNYXRoLmFicyh5MiAtIHkxKVxuXHRcdFx0fVxuXG5cdFx0XHRheGlzWS5ib3VuZGluZ1JlY3QgPSB7XG5cdFx0XHRcdHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5Miwgd2lkdGg6IHgyIC0geDEsIGhlaWdodDogeTIgLSB5MVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvL2lmIChpc0RlYnVnTW9kZSAmJiBheGlzWSkge1xuXHRcdC8vXHRheGlzWS5jdHgucmVjdChheGlzWS5ib3VuZGluZ1JlY3QueDEsIGF4aXNZLmJvdW5kaW5nUmVjdC55MSwgYXhpc1kuYm91bmRpbmdSZWN0LndpZHRoLCBheGlzWS5ib3VuZGluZ1JlY3QuaGVpZ2h0KTtcblx0XHQvL1x0YXhpc1kuY3R4LnN0cm9rZSgpO1xuXHRcdC8vfVxuXG5cdFx0Ly8gUG9zaXRpb24gYXhpc1kyIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSwgTWFyZ2luIGFuZCBpdHMgaGVpZ2h0XG5cdFx0aWYgKGF4aXNZMikge1xuXHRcdFx0eDEgPSBNYXRoLnJvdW5kKGF4aXNYLmxpbmVDb29yZGluYXRlcy54Mik7XG5cdFx0XHR5MSA9IE1hdGgucm91bmQoZnJlZVNwYWNlLnkxIDwgMTAgPyAxMCA6IGZyZWVTcGFjZS55MSk7XG5cdFx0XHR4MiA9IE1hdGgucm91bmQoeDEgKyBheGlzWTJXaWR0aCArIGF4aXNZMi5tYXJnaW4pO1xuXHRcdFx0Ly95MiA9IGZyZWVTcGFjZS55MiAtIGF4aXNYSGVpZ2h0IC0gYXhpc1gubWFyZ2luIC0gYXhpc1gubGluZVRoaWNrbmVzcyAvIDI7XG5cdFx0XHR5MiA9IE1hdGgucm91bmQoZnJlZVNwYWNlLnkyIC0gYXhpc1hIZWlnaHQgLSBheGlzWC5tYXJnaW4pO1xuXG5cdFx0XHRheGlzWTIubGluZUNvb3JkaW5hdGVzID0ge1xuXHRcdFx0XHR4MTogeDEsIHkxOiB5MSwgeDI6IHgxLCB5MjogeTIsIGhlaWdodDogTWF0aC5hYnMoeTIgLSB5MSlcblx0XHRcdH1cblxuXHRcdFx0YXhpc1kyLmJvdW5kaW5nUmVjdCA9IHtcblx0XHRcdFx0eDE6IHgxLCB5MTogeTEsIHgyOiB4MiwgeTI6IHkyLCB3aWR0aDogeDIgLSB4MSwgaGVpZ2h0OiB5MiAtIHkxXG5cdFx0XHR9O1xuXHRcdH1cblxuXG5cdFx0YXhpc1guY2FsY3VsYXRlVmFsdWVUb1BpeGVsQ29udmVyc2lvblBhcmFtZXRlcnMoKTtcblxuXHRcdGlmIChheGlzWSlcblx0XHRcdGF4aXNZLmNhbGN1bGF0ZVZhbHVlVG9QaXhlbENvbnZlcnNpb25QYXJhbWV0ZXJzKCk7XG5cblx0XHRpZiAoYXhpc1kyKVxuXHRcdFx0YXhpc1kyLmNhbGN1bGF0ZVZhbHVlVG9QaXhlbENvbnZlcnNpb25QYXJhbWV0ZXJzKCk7XG5cblxuXHRcdGN0eC5zYXZlKCk7XG5cdFx0Y3R4LnJlY3QoNSwgYXhpc1guYm91bmRpbmdSZWN0LnkxLCBheGlzWC5jaGFydC53aWR0aCAtIDEwLCBheGlzWC5ib3VuZGluZ1JlY3QuaGVpZ2h0KTtcblx0XHRjdHguY2xpcCgpO1xuXG5cdFx0YXhpc1gucmVuZGVyTGFiZWxzVGlja3NBbmRUaXRsZSgpO1xuXHRcdGN0eC5yZXN0b3JlKCk7XG5cblx0XHRpZiAoYXhpc1kpXG5cdFx0XHRheGlzWS5yZW5kZXJMYWJlbHNUaWNrc0FuZFRpdGxlKCk7XG5cblx0XHRpZiAoYXhpc1kyKVxuXHRcdFx0YXhpc1kyLnJlbmRlckxhYmVsc1RpY2tzQW5kVGl0bGUoKTtcblxuXG5cdFx0Y2hhcnQucHJlcGFyZVBsb3RBcmVhKCk7XG5cdFx0dmFyIHBsb3RBcmVhID0gYXhpc1guY2hhcnQucGxvdEFyZWE7XG5cblx0XHRjdHguc2F2ZSgpO1xuXG5cdFx0Y3R4LnJlY3QocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBNYXRoLmFicyhwbG90QXJlYS54MiAtIHBsb3RBcmVhLngxKSwgTWF0aC5hYnMocGxvdEFyZWEueTIgLSBwbG90QXJlYS55MSkpO1xuXG5cdFx0Y3R4LmNsaXAoKTtcblxuXHRcdGF4aXNYLnJlbmRlclN0cmlwTGluZXNPZlRoaWNrbmVzc1R5cGUoXCJ2YWx1ZVwiKTtcblxuXHRcdGlmIChheGlzWSlcblx0XHRcdGF4aXNZLnJlbmRlclN0cmlwTGluZXNPZlRoaWNrbmVzc1R5cGUoXCJ2YWx1ZVwiKTtcblxuXHRcdGlmIChheGlzWTIpXG5cdFx0XHRheGlzWTIucmVuZGVyU3RyaXBMaW5lc09mVGhpY2tuZXNzVHlwZShcInZhbHVlXCIpO1xuXG5cblx0XHRheGlzWC5yZW5kZXJJbnRlcmxhY2VkQ29sb3JzKCk7XG5cblx0XHRpZiAoYXhpc1kpXG5cdFx0XHRheGlzWS5yZW5kZXJJbnRlcmxhY2VkQ29sb3JzKCk7XG5cblx0XHRpZiAoYXhpc1kyKVxuXHRcdFx0YXhpc1kyLnJlbmRlckludGVybGFjZWRDb2xvcnMoKTtcblxuXHRcdGN0eC5yZXN0b3JlKCk7XG5cblxuXHRcdGF4aXNYLnJlbmRlckdyaWQoKTtcblxuXHRcdGlmIChheGlzWSlcblx0XHRcdGF4aXNZLnJlbmRlckdyaWQoKTtcblxuXHRcdGlmIChheGlzWTIpXG5cdFx0XHRheGlzWTIucmVuZGVyR3JpZCgpO1xuXG5cblx0XHRheGlzWC5yZW5kZXJBeGlzTGluZSgpO1xuXG5cdFx0aWYgKGF4aXNZKVxuXHRcdFx0YXhpc1kucmVuZGVyQXhpc0xpbmUoKTtcblxuXHRcdGlmIChheGlzWTIpXG5cdFx0XHRheGlzWTIucmVuZGVyQXhpc0xpbmUoKTtcblxuXG5cdFx0Ly9ObyBuZWVkIHRvIGNsaXAgdG8gcGxvdEFyZWEgYmVjYXVzZSBzdHJpcExpbmVzIG5lZWQgdG8gcmVuZGVyIG9uIHRvcCBvZiBncmlkbGluZXNcblx0XHRheGlzWC5yZW5kZXJTdHJpcExpbmVzT2ZUaGlja25lc3NUeXBlKFwicGl4ZWxcIik7XG5cblx0XHRpZiAoYXhpc1kpXG5cdFx0XHRheGlzWS5yZW5kZXJTdHJpcExpbmVzT2ZUaGlja25lc3NUeXBlKFwicGl4ZWxcIik7XG5cblx0XHRpZiAoYXhpc1kyKVxuXHRcdFx0YXhpc1kyLnJlbmRlclN0cmlwTGluZXNPZlRoaWNrbmVzc1R5cGUoXCJwaXhlbFwiKTtcblx0fVxuXHRlbHNlIHtcblx0XHR2YXIgYXhpc1hXaWR0aCA9IE1hdGguY2VpbChheGlzWC5jcmVhdGVMYWJlbHNBbmRDYWxjdWxhdGVXaWR0aCgpKTtcblxuXHRcdGlmIChheGlzWSkge1xuXHRcdFx0YXhpc1kubGluZUNvb3JkaW5hdGVzID0ge1xuXHRcdFx0fTtcblxuXHRcdFx0eDEgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS54MSArIGF4aXNYV2lkdGggKyBheGlzWC5tYXJnaW4pO1xuXHRcdFx0eDIgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS54MiA+IGF4aXNZLmNoYXJ0LndpZHRoIC0gMTAgPyBheGlzWS5jaGFydC53aWR0aCAtIDEwIDogZnJlZVNwYWNlLngyKTtcblxuXHRcdFx0YXhpc1kubGluZUNvb3JkaW5hdGVzLngxID0geDE7XG5cdFx0XHRheGlzWS5saW5lQ29vcmRpbmF0ZXMueDIgPSB4Mjtcblx0XHRcdGF4aXNZLmxpbmVDb29yZGluYXRlcy53aWR0aCA9IE1hdGguYWJzKHgyIC0geDEpO1xuXHRcdH1cblxuXHRcdGlmIChheGlzWTIpIHtcblx0XHRcdGF4aXNZMi5saW5lQ29vcmRpbmF0ZXMgPSB7XG5cdFx0XHR9O1xuXHRcdFx0eDEgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS54MSArIGF4aXNYV2lkdGggKyBheGlzWC5tYXJnaW4pO1xuXHRcdFx0eDIgPSBNYXRoLnJvdW5kKGZyZWVTcGFjZS54MiA+IGF4aXNZMi5jaGFydC53aWR0aCAtIDEwID8gYXhpc1kyLmNoYXJ0LndpZHRoIC0gMTAgOiBmcmVlU3BhY2UueDIpO1xuXG5cdFx0XHRheGlzWTIubGluZUNvb3JkaW5hdGVzLngxID0geDE7XG5cdFx0XHRheGlzWTIubGluZUNvb3JkaW5hdGVzLngyID0geDI7XG5cdFx0XHRheGlzWTIubGluZUNvb3JkaW5hdGVzLndpZHRoID0gTWF0aC5hYnMoeDIgLSB4MSk7XG5cdFx0fVxuXG5cblxuXHRcdHZhciBheGlzWUhlaWdodCA9IE1hdGguY2VpbChheGlzWSA/IGF4aXNZLmNyZWF0ZUxhYmVsc0FuZENhbGN1bGF0ZUhlaWdodCgpIDogMCk7XG5cdFx0dmFyIGF4aXNZMkhlaWdodCA9IE1hdGguY2VpbChheGlzWTIgPyBheGlzWTIuY3JlYXRlTGFiZWxzQW5kQ2FsY3VsYXRlSGVpZ2h0KCkgOiAwKTtcblxuXG5cdFx0Ly8gUG9zaXRpb24gYXhpc1kgYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBmcmVlIHNwYWNlLCBNYXJnaW4gYW5kIGl0cyBoZWlnaHRcblx0XHRpZiAoYXhpc1kpIHtcblx0XHRcdC8veDEgPSBmcmVlU3BhY2UueDEgKyBheGlzWFdpZHRoICsgYXhpc1gubWFyZ2luICsgYXhpc1gubGluZVRoaWNrbmVzcyAvIDI7XG5cdFx0XHQvL3gyID0gZnJlZVNwYWNlLngyID4gYXhpc1kuY2hhcnQud2lkdGggLSAxMCA/IGF4aXNZLmNoYXJ0LndpZHRoIC0gMTAgOiBmcmVlU3BhY2UueDI7XG5cblx0XHRcdHkxID0gTWF0aC5yb3VuZChmcmVlU3BhY2UueTIgLSBheGlzWUhlaWdodCAtIGF4aXNZLm1hcmdpbik7XG5cdFx0XHR5MiA9IE1hdGgucm91bmQoZnJlZVNwYWNlLnkyIC0gYXhpc1lNYXJnaW4gPiBheGlzWS5jaGFydC5oZWlnaHQgLSAxMCA/IGF4aXNZLmNoYXJ0LmhlaWdodCAtIDEwIDogZnJlZVNwYWNlLnkyIC0gYXhpc1lNYXJnaW4pO1xuXG5cdFx0XHQvL2F4aXNZLmxpbmVDb29yZGluYXRlcyA9IHsgeDE6IHgxLCB5MTogeTEsIHgyOiB4MiwgeTI6IHkxLCB3aWR0aDogTWF0aC5hYnMoeDIgLSB4MSkgfVxuXHRcdFx0YXhpc1kubGluZUNvb3JkaW5hdGVzLnkxID0geTE7XG5cdFx0XHRheGlzWS5saW5lQ29vcmRpbmF0ZXMueTIgPSB5MTtcblxuXHRcdFx0YXhpc1kuYm91bmRpbmdSZWN0ID0ge1xuXHRcdFx0XHR4MTogeDEsIHkxOiB5MSwgeDI6IHgyLCB5MjogeTIsIHdpZHRoOiB4MiAtIHgxLCBoZWlnaHQ6IGF4aXNZSGVpZ2h0XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIFBvc2l0aW9uIGF4aXNZIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSwgTWFyZ2luIGFuZCBpdHMgaGVpZ2h0XG5cdFx0aWYgKGF4aXNZMikge1xuXHRcdFx0Ly94MSA9IGZyZWVTcGFjZS54MSArIGF4aXNYV2lkdGggKyBheGlzWC5tYXJnaW4gKyBheGlzWC5saW5lVGhpY2tuZXNzIC8gMjtcblx0XHRcdC8veDIgPSBmcmVlU3BhY2UueDIgPiBheGlzWTIuY2hhcnQud2lkdGggLSAxMCA/IGF4aXNZMi5jaGFydC53aWR0aCAtIDEwIDogZnJlZVNwYWNlLngyO1xuXG5cdFx0XHR5MSA9IE1hdGgucm91bmQoZnJlZVNwYWNlLnkxICsgYXhpc1kyLm1hcmdpbik7XG5cdFx0XHR5MiA9IChmcmVlU3BhY2UueTEgKyBheGlzWTIubWFyZ2luICsgYXhpc1kySGVpZ2h0KTtcblxuXHRcdFx0Ly9heGlzWTIubGluZUNvb3JkaW5hdGVzID0geyB4MTogeDEsIHkxOiB5MiwgeDI6IHgyLCB5MjogeTIsIHdpZHRoOiBNYXRoLmFicyh4MiAtIHgxKSB9XG5cdFx0XHRheGlzWTIubGluZUNvb3JkaW5hdGVzLnkxID0geTI7XG5cdFx0XHRheGlzWTIubGluZUNvb3JkaW5hdGVzLnkyID0geTI7XG5cblx0XHRcdGF4aXNZMi5ib3VuZGluZ1JlY3QgPSB7XG5cdFx0XHRcdHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5Miwgd2lkdGg6IHgyIC0geDEsIGhlaWdodDogYXhpc1kySGVpZ2h0XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vYXhpc1kuY3R4LnJlY3QoYXhpc1kuYm91bmRpbmdSZWN0LngxLCBheGlzWS5ib3VuZGluZ1JlY3QueTEsIGF4aXNZLmJvdW5kaW5nUmVjdC53aWR0aCwgYXhpc1kuYm91bmRpbmdSZWN0LmhlaWdodCk7XG5cdFx0Ly9heGlzWS5jdHguc3Ryb2tlKCk7XG5cblx0XHQvLyBQb3NpdGlvbiBheGlzWCBiYXNlZCBvbiB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UsIE1hcmdpbiBhbmQgaXRzIGhlaWdodFxuXHRcdHgxID0gTWF0aC5yb3VuZChmcmVlU3BhY2UueDEgKyBheGlzWC5tYXJnaW4pO1xuXHRcdHkxID0gTWF0aC5yb3VuZChheGlzWTIgPyBheGlzWTIubGluZUNvb3JkaW5hdGVzLnkyIDogKGZyZWVTcGFjZS55MSA8IDEwID8gMTAgOiBmcmVlU3BhY2UueTEpKTtcblx0XHR4MiA9IE1hdGgucm91bmQoZnJlZVNwYWNlLngxICsgYXhpc1hXaWR0aCArIGF4aXNYLm1hcmdpbik7XG5cdFx0eTIgPSBNYXRoLnJvdW5kKGF4aXNZID8gYXhpc1kubGluZUNvb3JkaW5hdGVzLnkxIDogKGZyZWVTcGFjZS55MiAtIGF4aXNZTWFyZ2luID4gYXhpc1guY2hhcnQuaGVpZ2h0IC0gMTAgPyBheGlzWC5jaGFydC5oZWlnaHQgLSAxMCA6IGZyZWVTcGFjZS55MiAtIGF4aXNZTWFyZ2luKSk7XG5cblxuXHRcdGF4aXNYLmxpbmVDb29yZGluYXRlcyA9IHtcblx0XHRcdHgxOiB4MiwgeTE6IHkxLCB4MjogeDIsIHkyOiB5MiwgaGVpZ2h0OiBNYXRoLmFicyh5MiAtIHkxKVxuXHRcdH07XG5cblx0XHRheGlzWC5ib3VuZGluZ1JlY3QgPSB7XG5cdFx0XHR4MTogeDEsIHkxOiB5MSwgeDI6IHgyLCB5MjogeTIsIHdpZHRoOiB4MiAtIHgxLCBoZWlnaHQ6IHkyIC0geTFcblx0XHR9O1xuXG5cdFx0Ly9heGlzWC5jdHgucmVjdChheGlzWC5ib3VuZGluZ1JlY3QueDEsIGF4aXNYLmJvdW5kaW5nUmVjdC55MSwgYXhpc1guYm91bmRpbmdSZWN0LndpZHRoLCBheGlzWC5ib3VuZGluZ1JlY3QuaGVpZ2h0KTtcblx0XHQvL2F4aXNYLmN0eC5zdHJva2UoKTtcblxuXHRcdGF4aXNYLmNhbGN1bGF0ZVZhbHVlVG9QaXhlbENvbnZlcnNpb25QYXJhbWV0ZXJzKCk7XG5cblx0XHRpZiAoYXhpc1kpXG5cdFx0XHRheGlzWS5jYWxjdWxhdGVWYWx1ZVRvUGl4ZWxDb252ZXJzaW9uUGFyYW1ldGVycygpO1xuXHRcdGlmIChheGlzWTIpXG5cdFx0XHRheGlzWTIuY2FsY3VsYXRlVmFsdWVUb1BpeGVsQ29udmVyc2lvblBhcmFtZXRlcnMoKTtcblxuXG5cdFx0Ly9jdHguc2F2ZSgpO1xuXHRcdC8vY3R4LnJlY3QoYXhpc1kuYm91bmRpbmdSZWN0LngxIC0gMzAsIGF4aXNZLmJvdW5kaW5nUmVjdC55MSwgYXhpc1kuYm91bmRpbmdSZWN0LndpZHRoICsgNjAsIGF4aXNZLmJvdW5kaW5nUmVjdC5oZWlnaHQpO1xuXHRcdC8vY3R4LmNsaXAoKTtcblxuXHRcdGlmIChheGlzWSlcblx0XHRcdGF4aXNZLnJlbmRlckxhYmVsc1RpY2tzQW5kVGl0bGUoKTtcblxuXHRcdGlmIChheGlzWTIpXG5cdFx0XHRheGlzWTIucmVuZGVyTGFiZWxzVGlja3NBbmRUaXRsZSgpO1xuXG5cdFx0Ly9jdHgucmVzdG9yZSgpO1xuXG5cdFx0YXhpc1gucmVuZGVyTGFiZWxzVGlja3NBbmRUaXRsZSgpO1xuXG5cdFx0Y2hhcnQucHJlcGFyZVBsb3RBcmVhKCk7XG5cdFx0dmFyIHBsb3RBcmVhID0gYXhpc1guY2hhcnQucGxvdEFyZWE7XG5cblx0XHRjdHguc2F2ZSgpO1xuXHRcdGN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgTWF0aC5hYnMocGxvdEFyZWEueDIgLSBwbG90QXJlYS54MSksIE1hdGguYWJzKHBsb3RBcmVhLnkyIC0gcGxvdEFyZWEueTEpKTtcblxuXHRcdGN0eC5jbGlwKCk7XG5cblxuXHRcdC8vTm8gbmVlZCB0byBjbGlwIHRvIHBsb3RBcmVhIGJlY2F1c2Ugc3RyaXBMaW5lcyBuZWVkIHRvIHJlbmRlciBvbiB0b3Agb2YgZ3JpZGxpbmVzXG5cdFx0YXhpc1gucmVuZGVyU3RyaXBMaW5lc09mVGhpY2tuZXNzVHlwZShcInZhbHVlXCIpO1xuXG5cdFx0aWYgKGF4aXNZKVxuXHRcdFx0YXhpc1kucmVuZGVyU3RyaXBMaW5lc09mVGhpY2tuZXNzVHlwZShcInZhbHVlXCIpO1xuXHRcdGlmIChheGlzWTIpXG5cdFx0XHRheGlzWTIucmVuZGVyU3RyaXBMaW5lc09mVGhpY2tuZXNzVHlwZShcInZhbHVlXCIpO1xuXG5cdFx0YXhpc1gucmVuZGVySW50ZXJsYWNlZENvbG9ycygpO1xuXG5cdFx0aWYgKGF4aXNZKVxuXHRcdFx0YXhpc1kucmVuZGVySW50ZXJsYWNlZENvbG9ycygpO1xuXHRcdGlmIChheGlzWTIpXG5cdFx0XHRheGlzWTIucmVuZGVySW50ZXJsYWNlZENvbG9ycygpO1xuXG5cdFx0Y3R4LnJlc3RvcmUoKTtcblxuXG5cdFx0YXhpc1gucmVuZGVyR3JpZCgpO1xuXG5cblx0XHRpZiAoYXhpc1kpXG5cdFx0XHRheGlzWS5yZW5kZXJHcmlkKCk7XG5cblx0XHRpZiAoYXhpc1kyKVxuXHRcdFx0YXhpc1kyLnJlbmRlckdyaWQoKTtcblxuXG5cdFx0YXhpc1gucmVuZGVyQXhpc0xpbmUoKTtcblxuXHRcdGlmIChheGlzWSlcblx0XHRcdGF4aXNZLnJlbmRlckF4aXNMaW5lKCk7XG5cblx0XHRpZiAoYXhpc1kyKVxuXHRcdFx0YXhpc1kyLnJlbmRlckF4aXNMaW5lKCk7XG5cblxuXHRcdGF4aXNYLnJlbmRlclN0cmlwTGluZXNPZlRoaWNrbmVzc1R5cGUoXCJwaXhlbFwiKTtcblxuXHRcdGlmIChheGlzWSlcblx0XHRcdGF4aXNZLnJlbmRlclN0cmlwTGluZXNPZlRoaWNrbmVzc1R5cGUoXCJwaXhlbFwiKTtcblx0XHRpZiAoYXhpc1kyKVxuXHRcdFx0YXhpc1kyLnJlbmRlclN0cmlwTGluZXNPZlRoaWNrbmVzc1R5cGUoXCJwaXhlbFwiKTtcblx0fVxuXG59XG5cbkF4aXMucHJvdG90eXBlLnJlbmRlckxhYmVsc1RpY2tzQW5kVGl0bGUgPSBmdW5jdGlvbiAoKSB7XG5cblx0dmFyIHNraXBMYWJlbHMgPSBmYWxzZTtcblx0dmFyIHRvdGFsTGFiZWxXaWR0aCA9IDA7XG5cdHZhciB0aHJlc2hvbGRSYXRpbyA9IDE7XG5cdHZhciBsYWJlbENvdW50ID0gMDtcblxuXHR2YXIgaW50ZXJ2YWxJblBpeGVscyA9IHRoaXMuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogdGhpcy5pbnRlcnZhbDtcblxuXHRpZiAodGhpcy5sYWJlbEFuZ2xlICE9PSAwICYmIHRoaXMubGFiZWxBbmdsZSAhPT0gMzYwKVxuXHRcdHRocmVzaG9sZFJhdGlvID0gMS4yO1xuXG5cdC8vRG9uJ3Qgc2tpcCBsYWJlbHMgd2hlbiBpbnRlcnZhbCBpcyBleHBsaWNpdGVseSBzZXRcblx0aWYgKHR5cGVvZiAodGhpcy5fb3B0aW9ucy5pbnRlcnZhbCkgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRpZiAodGhpcy5fcG9zaXRpb24gPT09IFwiYm90dG9tXCIgfHwgdGhpcy5fcG9zaXRpb24gPT09IFwidG9wXCIpIHtcblxuXHRcdFx0Ly90aHJlc2hvbGRSYXRpbyA9IC45Oy8vIE1vcmUgc3BhY2UgaXMgcHJlZmVycmVkIGJldHdlZW4gbGFiZWxzIHdoZW4gYXhpcyBpcyBob3Jpem9udGFsbHkgYWxpZ25lZFxuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5fbGFiZWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGxhYmVsID0gdGhpcy5fbGFiZWxzW2ldO1xuXHRcdFx0XHRpZiAobGFiZWwucG9zaXRpb24gPCB0aGlzLnZpZXdwb3J0TWluaW11bSB8fCBsYWJlbC5zdHJpcExpbmUpLy8gZG9uJ3QgY29uc2lkZXIgc3RyaXBMaW5lJ3MgbGFibGVcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR2YXIgd2lkdGggPSBsYWJlbC50ZXh0QmxvY2sud2lkdGggKiBNYXRoLmNvcyhNYXRoLlBJIC8gMTgwICogdGhpcy5sYWJlbEFuZ2xlKSArIGxhYmVsLnRleHRCbG9jay5oZWlnaHQgKiBNYXRoLnNpbihNYXRoLlBJIC8gMTgwICogdGhpcy5sYWJlbEFuZ2xlKTtcblxuXHRcdFx0XHR0b3RhbExhYmVsV2lkdGggKz0gd2lkdGg7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0b3RhbExhYmVsV2lkdGggPiB0aGlzLmxpbmVDb29yZGluYXRlcy53aWR0aCAqIHRocmVzaG9sZFJhdGlvKSB7XG5cdFx0XHRcdHNraXBMYWJlbHMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gaWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImxlZnRcIiB8fCB0aGlzLl9wb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5fbGFiZWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGxhYmVsID0gdGhpcy5fbGFiZWxzW2ldO1xuXHRcdFx0XHRpZiAobGFiZWwucG9zaXRpb24gPCB0aGlzLnZpZXdwb3J0TWluaW11bSB8fCBsYWJlbC5zdHJpcExpbmUpLy8gZG9uJ3QgY29uc2lkZXIgc3RyaXBMaW5lJ3MgbGFibGVcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR2YXIgd2lkdGggPSBsYWJlbC50ZXh0QmxvY2suaGVpZ2h0ICogTWF0aC5jb3MoTWF0aC5QSSAvIDE4MCAqIHRoaXMubGFiZWxBbmdsZSkgKyBsYWJlbC50ZXh0QmxvY2sud2lkdGggKiBNYXRoLnNpbihNYXRoLlBJIC8gMTgwICogdGhpcy5sYWJlbEFuZ2xlKTtcblxuXHRcdFx0XHR0b3RhbExhYmVsV2lkdGggKz0gd2lkdGg7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0b3RhbExhYmVsV2lkdGggPiB0aGlzLmxpbmVDb29yZGluYXRlcy5oZWlnaHQgKiB0aHJlc2hvbGRSYXRpbykge1xuXHRcdFx0XHRza2lwTGFiZWxzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAodGhpcy5fcG9zaXRpb24gPT09IFwiYm90dG9tXCIpIHtcblx0XHR2YXIgaSA9IDA7XG5cblx0XHR2YXIgbGFiZWw7XG5cdFx0dmFyIHh5O1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IHRoaXMuX2xhYmVscy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRsYWJlbCA9IHRoaXMuX2xhYmVsc1tpXTtcblx0XHRcdGlmIChsYWJlbC5wb3NpdGlvbiA8IHRoaXMudmlld3BvcnRNaW5pbXVtIHx8IGxhYmVsLnBvc2l0aW9uID4gdGhpcy52aWV3cG9ydE1heGltdW0pXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR4eSA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uQXhpcyhsYWJlbC5wb3NpdGlvbik7XG5cblx0XHRcdGlmICgodGhpcy50aWNrVGhpY2tuZXNzICYmICF0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lKSB8fCAodGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZSAmJiB0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lLl90aGlja25lc3NUeXBlID09PSBcInBpeGVsXCIpKSB7XG5cblx0XHRcdFx0aWYgKHRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmUpIHtcblx0XHRcdFx0XHRzdHJpcExpbmUgPSB0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lO1xuXHRcdFx0XHRcdHRoaXMuY3R4LmxpbmVXaWR0aCA9IHN0cmlwTGluZS50aGlja25lc3M7XG5cdFx0XHRcdFx0dGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBzdHJpcExpbmUuY29sb3I7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmN0eC5saW5lV2lkdGggPSB0aGlzLnRpY2tUaGlja25lc3M7XG5cdFx0XHRcdFx0dGhpcy5jdHguc3Ryb2tlU3R5bGUgPSB0aGlzLnRpY2tDb2xvcjtcblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0dmFyIHRpY2tYID0gKHRoaXMuY3R4LmxpbmVXaWR0aCAlIDIgPT09IDEpID8gKHh5LnggPDwgMCkgKyAuNSA6ICh4eS54IDw8IDApO1xuXHRcdFx0XHR0aGlzLmN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0dGhpcy5jdHgubW92ZVRvKHRpY2tYLCB4eS55IDw8IDApO1xuXHRcdFx0XHR0aGlzLmN0eC5saW5lVG8odGlja1gsICh4eS55ICsgdGhpcy50aWNrTGVuZ3RoKSA8PCAwKTtcblx0XHRcdFx0dGhpcy5jdHguc3Ryb2tlKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vRG9uJ3Qgc2tpcCBzdHJpcExpbmUncyBsYWJlbHNcblx0XHRcdGlmIChza2lwTGFiZWxzICYmIGxhYmVsQ291bnQrKyAlIDIgIT09IDAgJiYgIXRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmUpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAobGFiZWwudGV4dEJsb2NrLmFuZ2xlID09PSAwKSB7XG5cdFx0XHRcdHh5LnggLT0gbGFiZWwudGV4dEJsb2NrLndpZHRoIC8gMjtcblx0XHRcdFx0Ly94eS55ICs9IHRoaXMudGlja0xlbmd0aCArIGxhYmVsLnRleHRCbG9jay5oZWlnaHQgLyAyO1xuXHRcdFx0XHR4eS55ICs9IHRoaXMudGlja0xlbmd0aCArIGxhYmVsLnRleHRCbG9jay5mb250U2l6ZSAvIDI7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHh5LnggLT0gKHRoaXMubGFiZWxBbmdsZSA8IDAgPyAobGFiZWwudGV4dEJsb2NrLndpZHRoICogTWF0aC5jb3MoTWF0aC5QSSAvIDE4MCAqIHRoaXMubGFiZWxBbmdsZSkpIDogMCk7XG5cdFx0XHRcdHh5LnkgKz0gdGhpcy50aWNrTGVuZ3RoICsgTWF0aC5hYnMoKHRoaXMubGFiZWxBbmdsZSA8IDAgPyBsYWJlbC50ZXh0QmxvY2sud2lkdGggKiBNYXRoLnNpbihNYXRoLlBJIC8gMTgwICogdGhpcy5sYWJlbEFuZ2xlKSAtIDUgOiA1KSk7XG5cdFx0XHR9XG5cdFx0XHRsYWJlbC50ZXh0QmxvY2sueCA9IHh5Lng7XG5cdFx0XHRsYWJlbC50ZXh0QmxvY2sueSA9IHh5Lnk7XG5cblx0XHRcdGxhYmVsLnRleHRCbG9jay5yZW5kZXIodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudGl0bGUpIHtcblxuXHRcdFx0dGhpcy5fdGl0bGVUZXh0QmxvY2sgPSBuZXcgVGV4dEJsb2NrKHRoaXMuY3R4LCB7XG5cdFx0XHRcdHg6IHRoaXMubGluZUNvb3JkaW5hdGVzLngxLC8vIFRoaXMgaXMgcmVjYWxjdWxhdGVkIGFnYWluXG5cdFx0XHRcdHk6IHRoaXMuYm91bmRpbmdSZWN0LnkyIC0gdGhpcy50aXRsZUZvbnRTaXplIC0gNSwvLyBUaGlzIGlzIHJlY2FsY3VsYXRlZCBhZ2FpblxuXHRcdFx0XHRtYXhXaWR0aDogdGhpcy5saW5lQ29vcmRpbmF0ZXMud2lkdGgsXG5cdFx0XHRcdG1heEhlaWdodDogdGhpcy50aXRsZUZvbnRTaXplICogMS41LFxuXHRcdFx0XHRhbmdsZTogMCxcblx0XHRcdFx0dGV4dDogdGhpcy50aXRsZSxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBcImNlbnRlclwiLC8vbGVmdCwgY2VudGVyLCByaWdodFxuXHRcdFx0XHRmb250U2l6ZTogdGhpcy50aXRsZUZvbnRTaXplLC8vaW4gcGl4ZWxzXG5cdFx0XHRcdGZvbnRGYW1pbHk6IHRoaXMudGl0bGVGb250RmFtaWx5LFxuXHRcdFx0XHRmb250V2VpZ2h0OiB0aGlzLnRpdGxlRm9udFdlaWdodCwgLy9ub3JtYWwsIGJvbGQsIGJvbGRlciwgbGlnaHRlcixcblx0XHRcdFx0Zm9udENvbG9yOiB0aGlzLnRpdGxlRm9udENvbG9yLFxuXHRcdFx0XHRmb250U3R5bGU6IHRoaXMudGl0bGVGb250U3R5bGUsIC8vIG5vcm1hbCwgaXRhbGljLCBvYmxpcXVlXG5cdFx0XHRcdHRleHRCYXNlbGluZTogXCJ0b3BcIlxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuX3RpdGxlVGV4dEJsb2NrLm1lYXN1cmVUZXh0KCk7XG5cdFx0XHR0aGlzLl90aXRsZVRleHRCbG9jay54ID0gdGhpcy5saW5lQ29vcmRpbmF0ZXMueDEgKyB0aGlzLmxpbmVDb29yZGluYXRlcy53aWR0aCAvIDIgLSB0aGlzLl90aXRsZVRleHRCbG9jay53aWR0aCAvIDI7XG5cdFx0XHR0aGlzLl90aXRsZVRleHRCbG9jay55ID0gdGhpcy5ib3VuZGluZ1JlY3QueTIgLSB0aGlzLl90aXRsZVRleHRCbG9jay5oZWlnaHQgLSAzO1xuXHRcdFx0dGhpcy5fdGl0bGVUZXh0QmxvY2sucmVuZGVyKHRydWUpO1xuXHRcdH1cblx0fVxuXHRlbHNlIGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJ0b3BcIikge1xuXHRcdHZhciBpID0gMDtcblxuXHRcdHZhciBsYWJlbDtcblx0XHR2YXIgeHk7XG5cdFx0dmFyIHN0cmlwTGluZTtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLl9sYWJlbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxhYmVsID0gdGhpcy5fbGFiZWxzW2ldO1xuXHRcdFx0aWYgKGxhYmVsLnBvc2l0aW9uIDwgdGhpcy52aWV3cG9ydE1pbmltdW0gfHwgbGFiZWwucG9zaXRpb24gPiB0aGlzLnZpZXdwb3J0TWF4aW11bSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHh5ID0gdGhpcy5nZXRQaXhlbENvb3JkaW5hdGVzT25BeGlzKGxhYmVsLnBvc2l0aW9uKTtcblxuXHRcdFx0aWYgKCh0aGlzLnRpY2tUaGlja25lc3MgJiYgIXRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmUpIHx8ICh0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lICYmIHRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmUuX3RoaWNrbmVzc1R5cGUgPT09IFwicGl4ZWxcIikpIHtcblxuXG5cdFx0XHRcdGlmICh0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lKSB7XG5cdFx0XHRcdFx0c3RyaXBMaW5lID0gdGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZTtcblxuXHRcdFx0XHRcdHRoaXMuY3R4LmxpbmVXaWR0aCA9IHN0cmlwTGluZS50aGlja25lc3M7XG5cdFx0XHRcdFx0dGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBzdHJpcExpbmUuY29sb3I7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmN0eC5saW5lV2lkdGggPSB0aGlzLnRpY2tUaGlja25lc3M7XG5cdFx0XHRcdFx0dGhpcy5jdHguc3Ryb2tlU3R5bGUgPSB0aGlzLnRpY2tDb2xvcjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciB0aWNrWCA9ICh0aGlzLmN0eC5saW5lV2lkdGggJSAyID09PSAxKSA/ICh4eS54IDw8IDApICsgLjUgOiAoeHkueCA8PCAwKTtcblx0XHRcdFx0dGhpcy5jdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdHRoaXMuY3R4Lm1vdmVUbyh0aWNrWCwgeHkueSA8PCAwKTtcblx0XHRcdFx0dGhpcy5jdHgubGluZVRvKHRpY2tYLCAoeHkueSAtIHRoaXMudGlja0xlbmd0aCkgPDwgMCk7XG5cdFx0XHRcdHRoaXMuY3R4LnN0cm9rZSgpO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vRG9uJ3Qgc2tpcCBzdHJpcExpbmUncyBsYWJlbHNcblx0XHRcdGlmIChza2lwTGFiZWxzICYmIGxhYmVsQ291bnQrKyAlIDIgIT09IDAgJiYgIXRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmUpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAobGFiZWwudGV4dEJsb2NrLmFuZ2xlID09PSAwKSB7XG5cdFx0XHRcdHh5LnggLT0gbGFiZWwudGV4dEJsb2NrLndpZHRoIC8gMjtcblx0XHRcdFx0eHkueSAtPSB0aGlzLnRpY2tMZW5ndGggKyBsYWJlbC50ZXh0QmxvY2suaGVpZ2h0IC8gMjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHh5LnggLT0gKHRoaXMubGFiZWxBbmdsZSA+IDAgPyAobGFiZWwudGV4dEJsb2NrLndpZHRoICogTWF0aC5jb3MoTWF0aC5QSSAvIDE4MCAqIHRoaXMubGFiZWxBbmdsZSkpIDogMCk7XG5cdFx0XHRcdHh5LnkgLT0gdGhpcy50aWNrTGVuZ3RoICsgTWF0aC5hYnMoKHRoaXMubGFiZWxBbmdsZSA+IDAgPyBsYWJlbC50ZXh0QmxvY2sud2lkdGggKiBNYXRoLnNpbihNYXRoLlBJIC8gMTgwICogdGhpcy5sYWJlbEFuZ2xlKSArIDUgOiA1KSk7XG5cdFx0XHR9XG5cdFx0XHRsYWJlbC50ZXh0QmxvY2sueCA9IHh5Lng7XG5cdFx0XHRsYWJlbC50ZXh0QmxvY2sueSA9IHh5Lnk7XG5cblx0XHRcdGxhYmVsLnRleHRCbG9jay5yZW5kZXIodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudGl0bGUpIHtcblxuXHRcdFx0dGhpcy5fdGl0bGVUZXh0QmxvY2sgPSBuZXcgVGV4dEJsb2NrKHRoaXMuY3R4LCB7XG5cdFx0XHRcdHg6IHRoaXMubGluZUNvb3JkaW5hdGVzLngxLC8vIFRoaXMgaXMgcmVjYWxjdWxhdGVkIGFnYWluXG5cdFx0XHRcdHk6IHRoaXMuYm91bmRpbmdSZWN0LnkxICsgMSxcblx0XHRcdFx0bWF4V2lkdGg6IHRoaXMubGluZUNvb3JkaW5hdGVzLndpZHRoLFxuXHRcdFx0XHRtYXhIZWlnaHQ6IHRoaXMudGl0bGVGb250U2l6ZSAqIDEuNSxcblx0XHRcdFx0YW5nbGU6IDAsXG5cdFx0XHRcdHRleHQ6IHRoaXMudGl0bGUsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogXCJjZW50ZXJcIiwvL2xlZnQsIGNlbnRlciwgcmlnaHRcblx0XHRcdFx0Zm9udFNpemU6IHRoaXMudGl0bGVGb250U2l6ZSwvL2luIHBpeGVsc1xuXHRcdFx0XHRmb250RmFtaWx5OiB0aGlzLnRpdGxlRm9udEZhbWlseSxcblx0XHRcdFx0Zm9udFdlaWdodDogdGhpcy50aXRsZUZvbnRXZWlnaHQsIC8vbm9ybWFsLCBib2xkLCBib2xkZXIsIGxpZ2h0ZXIsXG5cdFx0XHRcdGZvbnRDb2xvcjogdGhpcy50aXRsZUZvbnRDb2xvcixcblx0XHRcdFx0Zm9udFN0eWxlOiB0aGlzLnRpdGxlRm9udFN0eWxlLCAvLyBub3JtYWwsIGl0YWxpYywgb2JsaXF1ZVxuXHRcdFx0XHR0ZXh0QmFzZWxpbmU6IFwidG9wXCJcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLl90aXRsZVRleHRCbG9jay5tZWFzdXJlVGV4dCgpO1xuXHRcdFx0dGhpcy5fdGl0bGVUZXh0QmxvY2sueCA9IHRoaXMubGluZUNvb3JkaW5hdGVzLngxICsgdGhpcy5saW5lQ29vcmRpbmF0ZXMud2lkdGggLyAyIC0gdGhpcy5fdGl0bGVUZXh0QmxvY2sud2lkdGggLyAyO1xuXHRcdFx0dGhpcy5fdGl0bGVUZXh0QmxvY2sucmVuZGVyKHRydWUpO1xuXHRcdH1cblx0fVxuXHRlbHNlIGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJsZWZ0XCIpIHtcblxuXG5cdFx0dmFyIGxhYmVsO1xuXHRcdHZhciB4eTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2xhYmVscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0bGFiZWwgPSB0aGlzLl9sYWJlbHNbaV07XG5cdFx0XHRpZiAobGFiZWwucG9zaXRpb24gPCB0aGlzLnZpZXdwb3J0TWluaW11bSB8fCBsYWJlbC5wb3NpdGlvbiA+IHRoaXMudmlld3BvcnRNYXhpbXVtKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0eHkgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPbkF4aXMobGFiZWwucG9zaXRpb24pO1xuXG5cdFx0XHRpZiAoKHRoaXMudGlja1RoaWNrbmVzcyAmJiAhdGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZSkgfHwgKHRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmUgJiYgdGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZS5fdGhpY2tuZXNzVHlwZSA9PT0gXCJwaXhlbFwiKSkge1xuXG5cdFx0XHRcdGlmICh0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lKSB7XG5cdFx0XHRcdFx0c3RyaXBMaW5lID0gdGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZTtcblxuXHRcdFx0XHRcdHRoaXMuY3R4LmxpbmVXaWR0aCA9IHN0cmlwTGluZS50aGlja25lc3M7XG5cdFx0XHRcdFx0dGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBzdHJpcExpbmUuY29sb3I7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5jdHgubGluZVdpZHRoID0gdGhpcy50aWNrVGhpY2tuZXNzO1xuXHRcdFx0XHRcdHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gdGhpcy50aWNrQ29sb3I7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgdGlja1kgPSAodGhpcy5jdHgubGluZVdpZHRoICUgMiA9PT0gMSkgPyAoeHkueSA8PCAwKSArIC41IDogKHh5LnkgPDwgMCk7XG5cdFx0XHRcdHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHR0aGlzLmN0eC5tb3ZlVG8oeHkueCA8PCAwLCB0aWNrWSk7XG5cdFx0XHRcdHRoaXMuY3R4LmxpbmVUbygoeHkueCAtIHRoaXMudGlja0xlbmd0aCkgPDwgMCwgdGlja1kpO1xuXHRcdFx0XHR0aGlzLmN0eC5zdHJva2UoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly9Eb24ndCBza2lwIHN0cmlwTGluZSdzIGxhYmVsc1xuXHRcdFx0aWYgKHNraXBMYWJlbHMgJiYgbGFiZWxDb3VudCsrICUgMiAhPT0gMCAmJiAhdGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGxhYmVsLnRleHRCbG9jay54ID0geHkueCAtIChsYWJlbC50ZXh0QmxvY2sud2lkdGggKiBNYXRoLmNvcyhNYXRoLlBJIC8gMTgwICogdGhpcy5sYWJlbEFuZ2xlKSkgLSB0aGlzLnRpY2tMZW5ndGggLSA1O1xuXG5cdFx0XHRpZiAodGhpcy5sYWJlbEFuZ2xlID09PSAwKSB7XG5cdFx0XHRcdGxhYmVsLnRleHRCbG9jay55ID0geHkueTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRsYWJlbC50ZXh0QmxvY2sueSA9IHh5LnkgLSAobGFiZWwudGV4dEJsb2NrLndpZHRoICogTWF0aC5zaW4oTWF0aC5QSSAvIDE4MCAqIHRoaXMubGFiZWxBbmdsZSkpO1xuXG5cdFx0XHRsYWJlbC50ZXh0QmxvY2sucmVuZGVyKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnRpdGxlKSB7XG5cblx0XHRcdHRoaXMuX3RpdGxlVGV4dEJsb2NrID0gbmV3IFRleHRCbG9jayh0aGlzLmN0eCwge1xuXHRcdFx0XHR4OiB0aGlzLmJvdW5kaW5nUmVjdC54MSArIDEsXG5cdFx0XHRcdHk6IHRoaXMubGluZUNvb3JkaW5hdGVzLnkyLFxuXHRcdFx0XHRtYXhXaWR0aDogdGhpcy5saW5lQ29vcmRpbmF0ZXMuaGVpZ2h0LFxuXHRcdFx0XHRtYXhIZWlnaHQ6IHRoaXMudGl0bGVGb250U2l6ZSAqIDEuNSxcblx0XHRcdFx0YW5nbGU6IC05MCxcblx0XHRcdFx0dGV4dDogdGhpcy50aXRsZSxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBcImNlbnRlclwiLC8vbGVmdCwgY2VudGVyLCByaWdodFxuXHRcdFx0XHRmb250U2l6ZTogdGhpcy50aXRsZUZvbnRTaXplLC8vaW4gcGl4ZWxzXG5cdFx0XHRcdGZvbnRGYW1pbHk6IHRoaXMudGl0bGVGb250RmFtaWx5LFxuXHRcdFx0XHRmb250V2VpZ2h0OiB0aGlzLnRpdGxlRm9udFdlaWdodCwgLy9ub3JtYWwsIGJvbGQsIGJvbGRlciwgbGlnaHRlcixcblx0XHRcdFx0Zm9udENvbG9yOiB0aGlzLnRpdGxlRm9udENvbG9yLFxuXHRcdFx0XHRmb250U3R5bGU6IHRoaXMudGl0bGVGb250U3R5bGUsIC8vIG5vcm1hbCwgaXRhbGljLCBvYmxpcXVlXG5cdFx0XHRcdHRleHRCYXNlbGluZTogXCJ0b3BcIlxuXHRcdFx0fSk7XG5cblx0XHRcdHZhciBzaXplID0gdGhpcy5fdGl0bGVUZXh0QmxvY2subWVhc3VyZVRleHQoKTtcblxuXHRcdFx0Ly90aGlzLl90aXRsZVRleHRCbG9jay54IC09IDQ7XG5cblx0XHRcdHRoaXMuX3RpdGxlVGV4dEJsb2NrLnkgPSAodGhpcy5saW5lQ29vcmRpbmF0ZXMuaGVpZ2h0IC8gMiArIHRoaXMuX3RpdGxlVGV4dEJsb2NrLndpZHRoIC8gMiArIHRoaXMubGluZUNvb3JkaW5hdGVzLnkxKTtcblx0XHRcdHRoaXMuX3RpdGxlVGV4dEJsb2NrLnJlbmRlcih0cnVlKTtcblxuXHRcdFx0Ly9pZiAoaXNEZWJ1Z01vZGUpIHtcblx0XHRcdC8vXHR3aW5kb3cuY29uc29sZS5sb2coXCJ0aXRsZUZvbnRTaXplOiBcIiArIHRoaXMudGl0bGVGb250U2l6ZSArIFwiOyB3aWR0aDogXCIgKyBzaXplLndpZHRoICsgXCI7IGhlaWdodDogXCIgKyBzaXplLmhlaWdodCk7XG5cdFx0XHQvL1x0d2luZG93LmNvbnNvbGUubG9nKFwidGhpcy5ib3VuZGluZ1JlY3QueDE6IFwiICsgdGhpcy5ib3VuZGluZ1JlY3QueDEpO1xuXG5cdFx0XHQvL1x0Ly90aGlzLmN0eC5yZWN0KHRoaXMuX3RpdGxlVGV4dEJsb2NrLngsIHRoaXMuX3RpdGxlVGV4dEJsb2NrLnksIHRoaXMuX3RpdGxlVGV4dEJsb2NrLmhlaWdodCwgLXRoaXMuX3RpdGxlVGV4dEJsb2NrLndpZHRoKTtcblx0XHRcdC8vXHQvL3RoaXMuY3R4LnN0cm9rZSgpO1xuXG5cdFx0XHQvL31cblxuXHRcdH1cblx0fVxuXHRlbHNlIGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG5cblxuXHRcdHZhciBsYWJlbDtcblx0XHR2YXIgeHk7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2xhYmVscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0bGFiZWwgPSB0aGlzLl9sYWJlbHNbaV07XG5cdFx0XHRpZiAobGFiZWwucG9zaXRpb24gPCB0aGlzLnZpZXdwb3J0TWluaW11bSB8fCBsYWJlbC5wb3NpdGlvbiA+IHRoaXMudmlld3BvcnRNYXhpbXVtKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0eHkgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPbkF4aXMobGFiZWwucG9zaXRpb24pO1xuXG5cdFx0XHRpZiAoKHRoaXMudGlja1RoaWNrbmVzcyAmJiAhdGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZSkgfHwgKHRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmUgJiYgdGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZS5fdGhpY2tuZXNzVHlwZSA9PT0gXCJwaXhlbFwiKSkge1xuXG5cdFx0XHRcdGlmICh0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lKSB7XG5cdFx0XHRcdFx0c3RyaXBMaW5lID0gdGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZTtcblxuXHRcdFx0XHRcdHRoaXMuY3R4LmxpbmVXaWR0aCA9IHN0cmlwTGluZS50aGlja25lc3M7XG5cdFx0XHRcdFx0dGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBzdHJpcExpbmUuY29sb3I7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5jdHgubGluZVdpZHRoID0gdGhpcy50aWNrVGhpY2tuZXNzO1xuXHRcdFx0XHRcdHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gdGhpcy50aWNrQ29sb3I7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgdGlja1kgPSAodGhpcy5jdHgubGluZVdpZHRoICUgMiA9PT0gMSkgPyAoeHkueSA8PCAwKSArIC41IDogKHh5LnkgPDwgMCk7XG5cdFx0XHRcdHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHR0aGlzLmN0eC5tb3ZlVG8oeHkueCA8PCAwLCB0aWNrWSk7XG5cdFx0XHRcdHRoaXMuY3R4LmxpbmVUbygoeHkueCArIHRoaXMudGlja0xlbmd0aCkgPDwgMCwgdGlja1kpO1xuXHRcdFx0XHR0aGlzLmN0eC5zdHJva2UoKTtcblxuXHRcdFx0fVxuXG5cdFx0XHQvL0Rvbid0IHNraXAgc3RyaXBMaW5lJ3MgbGFiZWxzXG5cdFx0XHRpZiAoc2tpcExhYmVscyAmJiBsYWJlbENvdW50KysgJSAyICE9PSAwICYmICF0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bGFiZWwudGV4dEJsb2NrLnggPSB4eS54ICsgdGhpcy50aWNrTGVuZ3RoICsgNTtcblx0XHRcdC8vbGFiZWwudGV4dEJsb2NrLnkgPSB4eS55IC0gKGxhYmVsLnRleHRCbG9jay53aWR0aCAqIE1hdGguc2luKE1hdGguUEkgLyAxODAgKiB0aGlzLmxhYmVsQW5nbGUpKTtcblx0XHRcdGlmICh0aGlzLmxhYmVsQW5nbGUgPT09IDApIHtcblx0XHRcdFx0bGFiZWwudGV4dEJsb2NrLnkgPSB4eS55O1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRsYWJlbC50ZXh0QmxvY2sueSA9IHh5Lnk7XG5cblx0XHRcdGxhYmVsLnRleHRCbG9jay5yZW5kZXIodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudGl0bGUpIHtcblxuXHRcdFx0dGhpcy5fdGl0bGVUZXh0QmxvY2sgPSBuZXcgVGV4dEJsb2NrKHRoaXMuY3R4LCB7XG5cdFx0XHRcdHg6IHRoaXMuYm91bmRpbmdSZWN0LngyIC0gMSxcblx0XHRcdFx0eTogdGhpcy5saW5lQ29vcmRpbmF0ZXMueTIsXG5cdFx0XHRcdG1heFdpZHRoOiB0aGlzLmxpbmVDb29yZGluYXRlcy5oZWlnaHQsXG5cdFx0XHRcdG1heEhlaWdodDogdGhpcy50aXRsZUZvbnRTaXplICogMS41LFxuXHRcdFx0XHRhbmdsZTogOTAsXG5cdFx0XHRcdHRleHQ6IHRoaXMudGl0bGUsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogXCJjZW50ZXJcIiwvL2xlZnQsIGNlbnRlciwgcmlnaHRcblx0XHRcdFx0Zm9udFNpemU6IHRoaXMudGl0bGVGb250U2l6ZSwvL2luIHBpeGVsc1xuXHRcdFx0XHRmb250RmFtaWx5OiB0aGlzLnRpdGxlRm9udEZhbWlseSxcblx0XHRcdFx0Zm9udFdlaWdodDogdGhpcy50aXRsZUZvbnRXZWlnaHQsIC8vbm9ybWFsLCBib2xkLCBib2xkZXIsIGxpZ2h0ZXIsXG5cdFx0XHRcdGZvbnRDb2xvcjogdGhpcy50aXRsZUZvbnRDb2xvcixcblx0XHRcdFx0Zm9udFN0eWxlOiB0aGlzLnRpdGxlRm9udFN0eWxlLCAvLyBub3JtYWwsIGl0YWxpYywgb2JsaXF1ZVxuXHRcdFx0XHR0ZXh0QmFzZWxpbmU6IFwidG9wXCJcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLl90aXRsZVRleHRCbG9jay5tZWFzdXJlVGV4dCgpO1xuXHRcdFx0dGhpcy5fdGl0bGVUZXh0QmxvY2sueSA9ICh0aGlzLmxpbmVDb29yZGluYXRlcy5oZWlnaHQgLyAyIC0gdGhpcy5fdGl0bGVUZXh0QmxvY2sud2lkdGggLyAyICsgdGhpcy5saW5lQ29vcmRpbmF0ZXMueTEpO1xuXHRcdFx0dGhpcy5fdGl0bGVUZXh0QmxvY2sucmVuZGVyKHRydWUpO1xuXG5cdFx0fVxuXHR9XG59XG5cbkF4aXMucHJvdG90eXBlLnJlbmRlckludGVybGFjZWRDb2xvcnMgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBjdHggPSB0aGlzLmNoYXJ0LnBsb3RBcmVhLmN0eDtcblx0Ly9yZXR1cm47XG5cblx0dmFyIGludGVybGFjZWRHcmlkU3RhcnRQb2ludDtcblx0dmFyIGludGVybGFjZWRHcmlkRW5kUG9pbnQ7XG5cdHZhciBwbG90QXJlYUNvb3JkaW5hdGVzID0gdGhpcy5jaGFydC5wbG90QXJlYTtcblx0dmFyIGkgPSAwLCByZW5kZXJJbnRlcmxhY2VkR3JpZCA9IHRydWU7XG5cblx0aWYgKCh0aGlzLl9wb3NpdGlvbiA9PT0gXCJib3R0b21cIiB8fCB0aGlzLl9wb3NpdGlvbiA9PT0gXCJ0b3BcIikgJiYgdGhpcy5pbnRlcmxhY2VkQ29sb3IpIHtcblxuXHRcdGN0eC5maWxsU3R5bGUgPSB0aGlzLmludGVybGFjZWRDb2xvcjtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLl9sYWJlbHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0aWYgKHRoaXMuX2xhYmVsc1tpXS5zdHJpcExpbmUpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocmVuZGVySW50ZXJsYWNlZEdyaWQpIHsvL1NvIHRoYXQgdGhlIGludGVybGFjZWQgY29sb3IgYWx0ZXJuYXRlc1xuXHRcdFx0XHRpbnRlcmxhY2VkR3JpZFN0YXJ0UG9pbnQgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPbkF4aXModGhpcy5fbGFiZWxzW2ldLnBvc2l0aW9uKTtcblxuXHRcdFx0XHRpZiAoaSArIDEgPj0gdGhpcy5fbGFiZWxzLmxlbmd0aCAtIDEpXG5cdFx0XHRcdFx0aW50ZXJsYWNlZEdyaWRFbmRQb2ludCA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uQXhpcyh0aGlzLnZpZXdwb3J0TWF4aW11bSk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRpbnRlcmxhY2VkR3JpZEVuZFBvaW50ID0gdGhpcy5nZXRQaXhlbENvb3JkaW5hdGVzT25BeGlzKHRoaXMuX2xhYmVsc1tpICsgMV0ucG9zaXRpb24pO1xuXG5cdFx0XHRcdGN0eC5maWxsUmVjdChpbnRlcmxhY2VkR3JpZFN0YXJ0UG9pbnQueCwgcGxvdEFyZWFDb29yZGluYXRlcy55MSwgTWF0aC5hYnMoaW50ZXJsYWNlZEdyaWRFbmRQb2ludC54IC0gaW50ZXJsYWNlZEdyaWRTdGFydFBvaW50LngpLCBNYXRoLmFicyhwbG90QXJlYUNvb3JkaW5hdGVzLnkxIC0gcGxvdEFyZWFDb29yZGluYXRlcy55MikpO1xuXHRcdFx0XHRyZW5kZXJJbnRlcmxhY2VkR3JpZCA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHJlbmRlckludGVybGFjZWRHcmlkID0gdHJ1ZTtcblxuXHRcdH1cblxuXHR9IGVsc2UgaWYgKCh0aGlzLl9wb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5fcG9zaXRpb24gPT09IFwicmlnaHRcIikgJiYgdGhpcy5pbnRlcmxhY2VkQ29sb3IpIHtcblxuXHRcdGN0eC5maWxsU3R5bGUgPSB0aGlzLmludGVybGFjZWRDb2xvcjtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLl9sYWJlbHMubGVuZ3RoOyBpKyspIHtcblx0XHQgICAgICAgIGlmICh0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lKVxuXHRcdCAgICAgICAgICAgIGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocmVuZGVySW50ZXJsYWNlZEdyaWQpIHsvL1NvIHRoYXQgdGhlIGludGVybGFjZWQgY29sb3IgYWx0ZXJuYXRlc1xuXG5cdFx0XHRcdGludGVybGFjZWRHcmlkRW5kUG9pbnQgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPbkF4aXModGhpcy5fbGFiZWxzW2ldLnBvc2l0aW9uKTtcblxuXHRcdFx0XHRpZiAoaSArIDEgPj0gdGhpcy5fbGFiZWxzLmxlbmd0aCAtIDEpXG5cdFx0XHRcdFx0aW50ZXJsYWNlZEdyaWRTdGFydFBvaW50ID0gdGhpcy5nZXRQaXhlbENvb3JkaW5hdGVzT25BeGlzKHRoaXMudmlld3BvcnRNYXhpbXVtKTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdGludGVybGFjZWRHcmlkU3RhcnRQb2ludCA9IHRoaXMuZ2V0UGl4ZWxDb29yZGluYXRlc09uQXhpcyh0aGlzLl9sYWJlbHNbaSArIDFdLnBvc2l0aW9uKTtcblxuXHRcdFx0XHRjdHguZmlsbFJlY3QocGxvdEFyZWFDb29yZGluYXRlcy54MSwgaW50ZXJsYWNlZEdyaWRTdGFydFBvaW50LnksIE1hdGguYWJzKHBsb3RBcmVhQ29vcmRpbmF0ZXMueDEgLSBwbG90QXJlYUNvb3JkaW5hdGVzLngyKSwgTWF0aC5hYnMoaW50ZXJsYWNlZEdyaWRTdGFydFBvaW50LnkgLSBpbnRlcmxhY2VkR3JpZEVuZFBvaW50LnkpKTtcblx0XHRcdFx0cmVuZGVySW50ZXJsYWNlZEdyaWQgPSBmYWxzZTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRyZW5kZXJJbnRlcmxhY2VkR3JpZCA9IHRydWU7XG5cdFx0fVxuXHRcdCAgICAvL3Rocm93IFwiMTIzXCI7XG5cdH1cblxuXHRjdHguYmVnaW5QYXRoKCk7XG59XG5cbi8vUmVuZGVycyBzdHJpcExpbmVzIG9mIGdpdmVuIHRoaWNrbmVzcyB0eXBlLlxuQXhpcy5wcm90b3R5cGUucmVuZGVyU3RyaXBMaW5lc09mVGhpY2tuZXNzVHlwZSA9IGZ1bmN0aW9uICh0aGlja25lc3NUeXBlKSB7XG5cblx0aWYgKCEodGhpcy5zdHJpcExpbmVzICYmIHRoaXMuc3RyaXBMaW5lcy5sZW5ndGggPiAwKSB8fCAhdGhpY2tuZXNzVHlwZSlcblx0XHRyZXR1cm47XG5cblx0dmFyIF90aGlzID0gdGhpcztcblxuXHR2YXIgaSA9IDA7XG5cdGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0cmlwTGluZXMubGVuZ3RoOyBpKyspIHtcblxuXHRcdHZhciBzdHJpcExpbmUgPSB0aGlzLnN0cmlwTGluZXNbaV07XG5cblx0XHRpZiAoc3RyaXBMaW5lLl90aGlja25lc3NUeXBlICE9PSB0aGlja25lc3NUeXBlKVxuXHRcdFx0Y29udGludWU7XG5cblxuXHRcdC8vU2hvdWxkIGJlIHNraXBwZWQgb25seSBpZiB0aGlja25lc3NUeXBlIGlzIFwicGl4ZWxcIi4gSWYgaXQgaXMgXCJ2YWx1ZVwiIHRoZW4gY2xpcHBpbmcgaXMgYXV0b21hdGljYWxseSBhcHBsaWVkIGJlZm9yZSBjYWxsaW5nLlxuXHRcdGlmICh0aGlja25lc3NUeXBlID09PSBcInBpeGVsXCIgJiYgKHN0cmlwTGluZS52YWx1ZSA8IHRoaXMudmlld3BvcnRNaW5pbXVtIHx8IHN0cmlwTGluZS52YWx1ZSA+IHRoaXMudmlld3BvcnRNYXhpbXVtKSlcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0aWYgKHN0cmlwTGluZS5zaG93T25Ub3ApIHtcblx0XHRcdHRoaXMuY2hhcnQuYWRkRXZlbnRMaXN0ZW5lcihcImRhdGFBbmltYXRpb25JdGVyYXRpb25FbmRcIiwgc3RyaXBMaW5lLnJlbmRlciwgc3RyaXBMaW5lKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdFx0c3RyaXBMaW5lLnJlbmRlcigpO1xuXHR9XG59O1xuXG5BeGlzLnByb3RvdHlwZS5yZW5kZXJHcmlkID0gZnVuY3Rpb24gKCkge1xuXG5cdGlmICghKHRoaXMuZ3JpZFRoaWNrbmVzcyAmJiB0aGlzLmdyaWRUaGlja25lc3MgPiAwKSlcblx0XHRyZXR1cm47XG5cblx0Ly92YXIgY3R4ID0gdGhpcy5jaGFydC5wbG90QXJlYS5jdHg7XG5cdHZhciBjdHggPSB0aGlzLmNoYXJ0LmN0eDtcblxuXHR2YXIgeHk7XG5cdHZhciBwbG90QXJlYUNvb3JkaW5hdGVzID0gdGhpcy5jaGFydC5wbG90QXJlYTtcblx0dmFyIHN0cmlwTGluZTtcblx0dmFyIHRlbXBMaW5lV2lkdGgsIHRlbXBTdHJva2VTdHlsZTtcblx0Ly9yZXR1cm47XG5cblx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMuZ3JpZFRoaWNrbmVzcztcblx0Y3R4LnN0cm9rZVN0eWxlID0gdGhpcy5ncmlkQ29sb3I7XG5cblx0aWYgKGN0eC5zZXRMaW5lRGFzaCkge1xuXHRcdGN0eC5zZXRMaW5lRGFzaChnZXRMaW5lRGFzaEFycmF5KHRoaXMuZ3JpZERhc2hUeXBlLCB0aGlzLmdyaWRUaGlja25lc3MpKTtcblx0fVxuXG5cblx0aWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImJvdHRvbVwiIHx8IHRoaXMuX3Bvc2l0aW9uID09PSBcInRvcFwiKSB7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5fbGFiZWxzLmxlbmd0aCAmJiAhdGhpcy5fbGFiZWxzW2ldLnN0cmlwTGluZTsgaSsrKSB7XG5cblx0XHRcdGlmICh0aGlzLl9sYWJlbHNbaV0ucG9zaXRpb24gPCB0aGlzLnZpZXdwb3J0TWluaW11bSB8fCB0aGlzLl9sYWJlbHNbaV0ucG9zaXRpb24gPiB0aGlzLnZpZXdwb3J0TWF4aW11bSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblxuXHRcdFx0eHkgPSB0aGlzLmdldFBpeGVsQ29vcmRpbmF0ZXNPbkF4aXModGhpcy5fbGFiZWxzW2ldLnBvc2l0aW9uKTtcblxuXHRcdFx0dmFyIGdyaWRYID0gKGN0eC5saW5lV2lkdGggJSAyID09PSAxKSA/ICh4eS54IDw8IDApICsgLjUgOiAoeHkueCA8PCAwKTtcblxuXHRcdFx0Y3R4Lm1vdmVUbyhncmlkWCwgcGxvdEFyZWFDb29yZGluYXRlcy55MSA8PCAwKTtcblx0XHRcdGN0eC5saW5lVG8oZ3JpZFgsIHBsb3RBcmVhQ29vcmRpbmF0ZXMueTIgPDwgMCk7XG5cblx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHR9XG5cblx0fVxuXHRlbHNlIGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5fcG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9sYWJlbHMubGVuZ3RoICYmICF0aGlzLl9sYWJlbHNbaV0uc3RyaXBMaW5lOyBpKyspIHtcblxuXHRcdFx0aWYgKGkgPT09IDAgJiYgdGhpcy50eXBlID09PSBcImF4aXNZXCIgJiYgdGhpcy5jaGFydC5heGlzWCAmJiB0aGlzLmNoYXJ0LmF4aXNYLmxpbmVUaGlja25lc3MpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAodGhpcy5fbGFiZWxzW2ldLnBvc2l0aW9uIDwgdGhpcy52aWV3cG9ydE1pbmltdW0gfHwgdGhpcy5fbGFiZWxzW2ldLnBvc2l0aW9uID4gdGhpcy52aWV3cG9ydE1heGltdW0pXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cblx0XHRcdHh5ID0gdGhpcy5nZXRQaXhlbENvb3JkaW5hdGVzT25BeGlzKHRoaXMuX2xhYmVsc1tpXS5wb3NpdGlvbik7XG5cblx0XHRcdHZhciBncmlkWSA9IChjdHgubGluZVdpZHRoICUgMiA9PT0gMSkgPyAoeHkueSA8PCAwKSArIC41IDogKHh5LnkgPDwgMCk7XG5cblx0XHRcdGN0eC5tb3ZlVG8ocGxvdEFyZWFDb29yZGluYXRlcy54MSA8PCAwLCBncmlkWSk7XG5cdFx0XHRjdHgubGluZVRvKHBsb3RBcmVhQ29vcmRpbmF0ZXMueDIgPDwgMCwgZ3JpZFkpO1xuXG5cdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0fVxuXG5cdH1cbn1cblxuQXhpcy5wcm90b3R5cGUucmVuZGVyQXhpc0xpbmUgPSBmdW5jdGlvbiAoKSB7XG5cdC8vdmFyIGN0eCA9IHRoaXMuY2hhcnQucGxvdEFyZWEuY3R4O1xuXHR2YXIgY3R4ID0gdGhpcy5jaGFydC5jdHg7XG5cblx0aWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImJvdHRvbVwiIHx8IHRoaXMuX3Bvc2l0aW9uID09PSBcInRvcFwiKSB7XG5cdFx0aWYgKHRoaXMubGluZVRoaWNrbmVzcykge1xuXHRcdFx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMubGluZVRoaWNrbmVzcztcblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IHRoaXMubGluZUNvbG9yID8gdGhpcy5saW5lQ29sb3IgOiBcImJsYWNrXCI7XG5cblx0XHRcdGlmIChjdHguc2V0TGluZURhc2gpIHtcblx0XHRcdFx0Y3R4LnNldExpbmVEYXNoKGdldExpbmVEYXNoQXJyYXkodGhpcy5saW5lRGFzaFR5cGUsIHRoaXMubGluZVRoaWNrbmVzcykpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgbGluZVkgPSAodGhpcy5saW5lVGhpY2tuZXNzICUgMiA9PT0gMSkgPyAodGhpcy5saW5lQ29vcmRpbmF0ZXMueTEgPDwgMCkgKyAuNSA6ICh0aGlzLmxpbmVDb29yZGluYXRlcy55MSA8PCAwKTtcblxuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0Y3R4Lm1vdmVUbyh0aGlzLmxpbmVDb29yZGluYXRlcy54MSwgbGluZVkpO1xuXHRcdFx0Y3R4LmxpbmVUbyh0aGlzLmxpbmVDb29yZGluYXRlcy54MiwgbGluZVkpO1xuXHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdH1cblxuXHR9IGVsc2UgaWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImxlZnRcIiB8fCB0aGlzLl9wb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG5cdFx0aWYgKHRoaXMubGluZVRoaWNrbmVzcykge1xuXHRcdFx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMubGluZVRoaWNrbmVzcztcblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IHRoaXMubGluZUNvbG9yO1xuXG5cdFx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XG5cdFx0XHRcdGN0eC5zZXRMaW5lRGFzaChnZXRMaW5lRGFzaEFycmF5KHRoaXMubGluZURhc2hUeXBlLCB0aGlzLmxpbmVUaGlja25lc3MpKTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGxpbmVYID0gKHRoaXMubGluZVRoaWNrbmVzcyAlIDIgPT09IDEpID8gKHRoaXMubGluZUNvb3JkaW5hdGVzLngxIDw8IDApICsgLjUgOiAodGhpcy5saW5lQ29vcmRpbmF0ZXMueDEgPDwgMCk7XG5cblx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdGN0eC5tb3ZlVG8obGluZVgsIHRoaXMubGluZUNvb3JkaW5hdGVzLnkxKTtcblx0XHRcdGN0eC5saW5lVG8obGluZVgsIHRoaXMubGluZUNvb3JkaW5hdGVzLnkyKTtcblx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHR9XG5cdH1cbn1cblxuQXhpcy5wcm90b3R5cGUuZ2V0UGl4ZWxDb29yZGluYXRlc09uQXhpcyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHR2YXIgeHkgPSB7XG5cdH07XG5cdHZhciB3aWR0aCA9IHRoaXMubGluZUNvb3JkaW5hdGVzLndpZHRoO1xuXHR2YXIgaGVpZ2h0ID0gdGhpcy5saW5lQ29vcmRpbmF0ZXMuaGVpZ2h0O1xuXG5cdGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJib3R0b21cIiB8fCB0aGlzLl9wb3NpdGlvbiA9PT0gXCJ0b3BcIikge1xuXHRcdC8vdmFyIHBpeGVsUGVyVW5pdCA9IHdpZHRoIC8gTWF0aC5hYnModGhpcy52aWV3cG9ydE1heGltdW0gLSB0aGlzLnZpZXdwb3J0TWluaW11bSk7XG5cdFx0dmFyIHBpeGVsUGVyVW5pdCA9IHRoaXMuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0O1xuXG5cdFx0Ly94eS54ID0gdGhpcy5saW5lQ29vcmRpbmF0ZXMueDEgKyAocGl4ZWxQZXJVbml0ICogKHZhbHVlIC0gdGhpcy52aWV3cG9ydE1pbmltdW0pKTtcblx0XHR4eS54ID0gdGhpcy5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyAocGl4ZWxQZXJVbml0ICogKHZhbHVlIC0gdGhpcy52aWV3cG9ydE1pbmltdW0pKTtcblx0XHR4eS55ID0gdGhpcy5saW5lQ29vcmRpbmF0ZXMueTE7XG5cdH1cblx0aWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImxlZnRcIiB8fCB0aGlzLl9wb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG5cdFx0Ly92YXIgcGl4ZWxQZXJVbml0ID0gaGVpZ2h0IC8gTWF0aC5hYnModGhpcy52aWV3cG9ydE1heGltdW0gLSB0aGlzLnZpZXdwb3J0TWluaW11bSk7XG5cdFx0dmFyIHBpeGVsUGVyVW5pdCA9IC10aGlzLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdDtcblxuXHRcdC8veHkueSA9IHRoaXMubGluZUNvb3JkaW5hdGVzLnkyIC0gKHBpeGVsUGVyVW5pdCAqICh2YWx1ZSAtIHRoaXMudmlld3BvcnRNaW5pbXVtKSk7XG5cdFx0eHkueSA9IHRoaXMuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlIC0gKHBpeGVsUGVyVW5pdCAqICh2YWx1ZSAtIHRoaXMudmlld3BvcnRNaW5pbXVtKSk7XG5cdFx0eHkueCA9IHRoaXMubGluZUNvb3JkaW5hdGVzLngyO1xuXHR9XG5cblx0cmV0dXJuIHh5O1xufVxuXG5BeGlzLnByb3RvdHlwZS5jb252ZXJ0UGl4ZWxUb1ZhbHVlID0gZnVuY3Rpb24gKHBpeGVsKSB7XG5cblx0aWYgKCFwaXhlbClcblx0XHRyZXR1cm4gbnVsbDtcblxuXHR2YXIgdmFsdWUgPSAwO1xuXHR2YXIgcCA9ICh0aGlzLl9wb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5fcG9zaXRpb24gPT09IFwicmlnaHRcIikgPyBwaXhlbC55IDogcGl4ZWwueDtcblxuXHR2YWx1ZSA9IHRoaXMuY29udmVyc2lvblBhcmFtZXRlcnMubWluaW11bSArIChwIC0gdGhpcy5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UpIC8gdGhpcy5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQ7XG5cblx0cmV0dXJuIHZhbHVlO1xufVxuXG5BeGlzLnByb3RvdHlwZS5zZXRWaWV3UG9ydFJhbmdlID0gZnVuY3Rpb24gKHZpZXdwb3J0TWluaW11bSwgdmlld3BvcnRNYXhpbXVtKSB7XG5cblx0dGhpcy5zZXNzaW9uVmFyaWFibGVzLm5ld1ZpZXdwb3J0TWluaW11bSA9IHRoaXMudmlld3BvcnRNaW5pbXVtID0gTWF0aC5taW4odmlld3BvcnRNaW5pbXVtLCB2aWV3cG9ydE1heGltdW0pO1xuXHR0aGlzLnNlc3Npb25WYXJpYWJsZXMubmV3Vmlld3BvcnRNYXhpbXVtID0gdGhpcy52aWV3cG9ydE1heGltdW0gPSBNYXRoLm1heCh2aWV3cG9ydE1pbmltdW0sIHZpZXdwb3J0TWF4aW11bSk7XG5cbn1cblxuQXhpcy5wcm90b3R5cGUuZ2V0WFZhbHVlQXQgPSBmdW5jdGlvbiAocGl4ZWwpIHtcblx0aWYgKCFwaXhlbClcblx0XHRyZXR1cm4gbnVsbDtcblxuXHR2YXIgeHZhbCA9IG51bGw7XG5cblx0aWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImxlZnRcIikge1xuXHRcdHh2YWwgPSAodGhpcy5jaGFydC5heGlzWC52aWV3cG9ydE1heGltdW0gLSB0aGlzLmNoYXJ0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkgLyB0aGlzLmNoYXJ0LmF4aXNYLmxpbmVDb29yZGluYXRlcy5oZWlnaHQgKiAoKHRoaXMuY2hhcnQuYXhpc1gubGluZUNvb3JkaW5hdGVzLnkyIC0gcGl4ZWwueSkpICsgdGhpcy5jaGFydC5heGlzWC52aWV3cG9ydE1pbmltdW07XG5cdH1cblx0ZWxzZSBpZiAodGhpcy5fcG9zaXRpb24gPT09IFwiYm90dG9tXCIpIHtcblx0XHR4dmFsID0gKHRoaXMuY2hhcnQuYXhpc1gudmlld3BvcnRNYXhpbXVtIC0gdGhpcy5jaGFydC5heGlzWC52aWV3cG9ydE1pbmltdW0pIC8gdGhpcy5jaGFydC5heGlzWC5saW5lQ29vcmRpbmF0ZXMud2lkdGggKiAocGl4ZWwueCAtIHRoaXMuY2hhcnQuYXhpc1gubGluZUNvb3JkaW5hdGVzLngxKSArIHRoaXMuY2hhcnQuYXhpc1gudmlld3BvcnRNaW5pbXVtO1xuXHR9XG5cblx0cmV0dXJuIHh2YWw7XG59XG5cbkF4aXMucHJvdG90eXBlLmNhbGN1bGF0ZVZhbHVlVG9QaXhlbENvbnZlcnNpb25QYXJhbWV0ZXJzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdHRoaXMucmV2ZXJzZWQgPSBmYWxzZTtcblxuXHR2YXIgY29udmVyc2lvblBhcmFtZXRlcnMgPSB7XG5cdFx0cGl4ZWxQZXJVbml0OiBudWxsLCBtaW5pbXVtOiBudWxsLCByZWZlcmVuY2U6IG51bGxcblx0fTtcblxuXHR2YXIgd2lkdGggPSB0aGlzLmxpbmVDb29yZGluYXRlcy53aWR0aDtcblx0dmFyIGhlaWdodCA9IHRoaXMubGluZUNvb3JkaW5hdGVzLmhlaWdodDtcblxuXHRjb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtID0gdGhpcy52aWV3cG9ydE1pbmltdW07XG5cblx0aWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImJvdHRvbVwiIHx8IHRoaXMuX3Bvc2l0aW9uID09PSBcInRvcFwiKSB7XG5cdFx0Y29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID0gKHRoaXMucmV2ZXJzZWQgPyAtMSA6IDEpICogd2lkdGggLyBNYXRoLmFicyh0aGlzLnZpZXdwb3J0TWF4aW11bSAtIHRoaXMudmlld3BvcnRNaW5pbXVtKTtcblx0XHRjb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgPSAodGhpcy5yZXZlcnNlZCA/IHRoaXMubGluZUNvb3JkaW5hdGVzLngyIDogdGhpcy5saW5lQ29vcmRpbmF0ZXMueDEpO1xuXHR9XG5cblx0aWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImxlZnRcIiB8fCB0aGlzLl9wb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG5cdFx0Y29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID0gKHRoaXMucmV2ZXJzZWQgPyAxIDogLTEpICogaGVpZ2h0IC8gTWF0aC5hYnModGhpcy52aWV3cG9ydE1heGltdW0gLSB0aGlzLnZpZXdwb3J0TWluaW11bSk7XG5cdFx0Y29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlID0gKHRoaXMucmV2ZXJzZWQgPyB0aGlzLmxpbmVDb29yZGluYXRlcy55MSA6IHRoaXMubGluZUNvb3JkaW5hdGVzLnkyKTtcblx0fVxuXG5cblx0dGhpcy5jb252ZXJzaW9uUGFyYW1ldGVycyA9IGNvbnZlcnNpb25QYXJhbWV0ZXJzO1xufVxuXG5BeGlzLnByb3RvdHlwZS5jYWxjdWxhdGVBeGlzUGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHtcblxuXHR2YXIgZnJlZVNwYWNlID0gdGhpcy5jaGFydC5sYXlvdXRNYW5hZ2VyLmdldEZyZWVTcGFjZSgpO1xuXHR2YXIgYXZhaWxhYmxlV2lkdGggPSAwO1xuXHR2YXIgYXZhaWxhYmxlSGVpZ2h0ID0gMDtcblx0dmFyIGlzTGVzc1RoYW5Ud29EYXRhUG9pbnRzID0gZmFsc2U7XG5cblx0aWYgKHRoaXMuX3Bvc2l0aW9uID09PSBcImJvdHRvbVwiIHx8IHRoaXMuX3Bvc2l0aW9uID09PSBcInRvcFwiKSB7XG5cdFx0dGhpcy5tYXhXaWR0aCA9IGZyZWVTcGFjZS53aWR0aDtcblx0XHR0aGlzLm1heEhlaWdodCA9IGZyZWVTcGFjZS5oZWlnaHQ7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5tYXhXaWR0aCA9IGZyZWVTcGFjZS5oZWlnaHQ7XG5cdFx0dGhpcy5tYXhIZWlnaHQgPSBmcmVlU3BhY2Uud2lkdGg7XG5cdH1cblxuXHR2YXIgbm9UaWNrcyA9IHRoaXMudHlwZSA9PT0gXCJheGlzWFwiID8gKHRoaXMubWF4V2lkdGggPCA1MDAgPyA4IDogTWF0aC5tYXgoNiwgTWF0aC5mbG9vcih0aGlzLm1heFdpZHRoIC8gNjIpKSkgOiBNYXRoLm1heChNYXRoLmZsb29yKHRoaXMubWF4V2lkdGggLyA0MCksIDIpO1xuXHR2YXIgbWluLCBtYXg7XG5cdHZhciBtaW5EaWZmO1xuXHR2YXIgcmFuZ2U7XG5cdHZhciByYW5nZVBhZGRpbmcgPSAwO1xuXG5cblx0aWYgKHRoaXMudmlld3BvcnRNaW5pbXVtID09PSBudWxsIHx8IGlzTmFOKHRoaXMudmlld3BvcnRNaW5pbXVtKSlcblx0XHR0aGlzLnZpZXdwb3J0TWluaW11bSA9IHRoaXMubWluaW11bTtcblxuXHRpZiAodGhpcy52aWV3cG9ydE1heGltdW0gPT09IG51bGwgfHwgaXNOYU4odGhpcy52aWV3cG9ydE1heGltdW0pKVxuXHRcdHRoaXMudmlld3BvcnRNYXhpbXVtID0gdGhpcy5tYXhpbXVtO1xuXG5cdGlmICh0aGlzLnR5cGUgPT09IFwiYXhpc1hcIikge1xuXHRcdG1pbiA9ICh0aGlzLnZpZXdwb3J0TWluaW11bSAhPT0gbnVsbCkgPyB0aGlzLnZpZXdwb3J0TWluaW11bSA6IHRoaXMuZGF0YUluZm8udmlld1BvcnRNaW47XG5cdFx0bWF4ID0gKHRoaXMudmlld3BvcnRNYXhpbXVtICE9PSBudWxsKSA/IHRoaXMudmlld3BvcnRNYXhpbXVtIDogdGhpcy5kYXRhSW5mby52aWV3UG9ydE1heDtcblxuXHRcdGlmIChtYXggLSBtaW4gPT09IDApIHtcblx0XHRcdHJhbmdlUGFkZGluZyA9IHR5cGVvZiAodGhpcy5fb3B0aW9ucy5pbnRlcnZhbCkgPT09IFwidW5kZWZpbmVkXCIgPyAuNCA6IHRoaXMuX29wdGlvbnMuaW50ZXJ2YWw7XG5cblx0XHRcdG1heCArPSByYW5nZVBhZGRpbmc7XG5cdFx0XHRtaW4gLT0gcmFuZ2VQYWRkaW5nO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmRhdGFJbmZvLm1pbkRpZmYgIT09IEluZmluaXR5KVxuXHRcdFx0bWluRGlmZiA9IHRoaXMuZGF0YUluZm8ubWluRGlmZjtcblx0XHRlbHNlIGlmIChtYXggLSBtaW4gPiAxKSB7XG5cdFx0XHRtaW5EaWZmID0gTWF0aC5hYnMobWF4IC0gbWluKSAqIC41O1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdG1pbkRpZmYgPSAxO1xuXG5cdFx0XHRpZiAodGhpcy5jaGFydC5wbG90SW5mby5heGlzWFZhbHVlVHlwZSA9PT0gXCJkYXRlVGltZVwiKVxuXHRcdFx0XHRpc0xlc3NUaGFuVHdvRGF0YVBvaW50cyA9IHRydWU7XG5cdFx0fVxuXG5cdH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBcImF4aXNZXCIpIHtcblxuXHRcdC8vbWluID0gdHlwZW9mICh0aGlzLl9vcHRpb25zLnZpZXdwb3J0TWluaW11bSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdGhpcy5fb3B0aW9ucy52aWV3cG9ydE1pbmltdW0gPT09IG51bGwgPyB0aGlzLmRhdGFJbmZvLnZpZXdQb3J0TWluIDogdGhpcy5fb3B0aW9ucy52aWV3cG9ydE1pbmltdW07XG5cdFx0Ly9tYXggPSB0eXBlb2YgKHRoaXMuX29wdGlvbnMudmlld3BvcnRNYXhpbXVtKSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0aGlzLl9vcHRpb25zLnZpZXdwb3J0TWF4aW11bSA9PT0gbnVsbCA/IHRoaXMuZGF0YUluZm8udmlld1BvcnRNYXggOiB0aGlzLl9vcHRpb25zLnZpZXdwb3J0TWF4aW11bTtcblx0XHRtaW4gPSAodGhpcy52aWV3cG9ydE1pbmltdW0gIT09IG51bGwpID8gdGhpcy52aWV3cG9ydE1pbmltdW0gOiB0aGlzLmRhdGFJbmZvLnZpZXdQb3J0TWluO1xuXHRcdG1heCA9ICh0aGlzLnZpZXdwb3J0TWF4aW11bSAhPT0gbnVsbCkgPyB0aGlzLnZpZXdwb3J0TWF4aW11bSA6IHRoaXMuZGF0YUluZm8udmlld1BvcnRNYXg7XG5cblx0XHRpZiAoIWlzRmluaXRlKG1pbikgJiYgIWlzRmluaXRlKG1heCkpIHtcblx0XHRcdG1heCA9IHR5cGVvZiAodGhpcy5fb3B0aW9ucy5pbnRlcnZhbCkgPT09IFwidW5kZWZpbmVkXCIgPyAtSW5maW5pdHkgOiB0aGlzLl9vcHRpb25zLmludGVydmFsO1xuXHRcdFx0bWluID0gMDtcblx0XHR9IGVsc2UgaWYgKCFpc0Zpbml0ZShtaW4pKSB7XG5cdFx0XHRtaW4gPSBtYXg7XG5cdFx0fSBlbHNlIGlmICghaXNGaW5pdGUobWF4KSkge1xuXHRcdFx0bWF4ID0gbWluO1xuXHRcdH1cblxuXHRcdFx0aWYgKG1pbiA9PT0gMCAmJiBtYXggPT09IDApIHsvLyBXaGVuIGFsbCBkYXRhUG9pbnRzIGFyZSB6ZXJvXG5cdFx0XHRcdG1heCArPSA5O1xuXHRcdFx0XHRtaW4gPSAwO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAobWF4IC0gbWluID09PSAwKSB7Ly8gV2hlbiB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIGRhdGFQb2ludCBvciB3aGVuIGFsbCBkYXRhUG9pbnRzIGhhdmUgc2FtZSBZIFZhbHVlXG5cdFx0XHRcdHJhbmdlUGFkZGluZyA9IE1hdGgubWluKE1hdGguYWJzKE1hdGguYWJzKG1heCkgKiAuMDEpLCA1KTtcblx0XHRcdFx0bWF4ICs9IHJhbmdlUGFkZGluZztcblx0XHRcdFx0bWluIC09IHJhbmdlUGFkZGluZztcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKG1pbiA+IG1heCkge1xuXHRcdFx0XHRyYW5nZVBhZGRpbmcgPSBNYXRoLm1pbihNYXRoLmFicyhNYXRoLmFicyhtYXggLSBtaW4pICogLjAxKSwgNSk7XG5cblx0XHRcdFx0aWYgKG1heCA+PSAwKVxuXHRcdFx0XHRcdG1pbiA9IG1heCAtIHJhbmdlUGFkZGluZztcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdG1heCA9IG1pbiArIHJhbmdlUGFkZGluZztcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXG5cdFx0XHRcdHJhbmdlUGFkZGluZyA9IE1hdGgubWluKE1hdGguYWJzKE1hdGguYWJzKG1heCAtIG1pbikgKiAuMDEpLCAuMDUpO1xuXG5cdFx0XHRcdGlmIChtYXggIT09IDApXG5cdFx0XHRcdFx0bWF4ICs9IHJhbmdlUGFkZGluZztcblx0XHRcdFx0aWYgKG1pbiAhPT0gMClcblx0XHRcdFx0XHRtaW4gLT0gcmFuZ2VQYWRkaW5nO1xuXHRcdFx0fVxuXG5cdFx0aWYgKHRoaXMuZGF0YUluZm8ubWluRGlmZiAhPT0gSW5maW5pdHkpXG5cdFx0XHRtaW5EaWZmID0gdGhpcy5kYXRhSW5mby5taW5EaWZmO1xuXHRcdGVsc2UgaWYgKG1heCAtIG1pbiA+IDEpIHtcblx0XHRcdG1pbkRpZmYgPSBNYXRoLmFicyhtYXggLSBtaW4pICogLjU7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0bWluRGlmZiA9IDE7XG5cdFx0fVxuXG5cblx0XHQvL0FwcGx5IGluY2x1ZGVaZXJvXG5cdFx0aWYgKHRoaXMuaW5jbHVkZVplcm8gJiYgKHRoaXMudmlld3BvcnRNaW5pbXVtID09PSBudWxsIHx8IGlzTmFOKHRoaXMudmlld3BvcnRNaW5pbXVtKSkpIHtcblx0XHRcdGlmIChtaW4gPiAwKVxuXHRcdFx0XHRtaW4gPSAwO1xuXHRcdH1cblx0XHRpZiAodGhpcy5pbmNsdWRlWmVybyAmJiAodGhpcy52aWV3cG9ydE1heGltdW0gPT09IG51bGwgfHwgaXNOYU4odGhpcy52aWV3cG9ydE1heGltdW0pKSkge1xuXHRcdFx0aWYgKG1heCA8IDApXG5cdFx0XHRcdG1heCA9IDA7XG5cdFx0fVxuXHR9XG5cblx0cmFuZ2UgPSAoaXNOYU4odGhpcy52aWV3cG9ydE1heGltdW0pIHx8IHRoaXMudmlld3BvcnRNYXhpbXVtID09PSBudWxsID8gbWF4IDogdGhpcy52aWV3cG9ydE1heGltdW0pIC0gKGlzTmFOKHRoaXMudmlld3BvcnRNaW5pbXVtKSB8fCB0aGlzLnZpZXdwb3J0TWluaW11bSA9PT0gbnVsbCA/IG1pbiA6IHRoaXMudmlld3BvcnRNaW5pbXVtKTtcblxuXHRpZiAodGhpcy50eXBlID09PSBcImF4aXNYXCIgJiYgdGhpcy5jaGFydC5wbG90SW5mby5heGlzWFZhbHVlVHlwZSA9PT0gXCJkYXRlVGltZVwiKSB7XG5cblx0XHRpZiAoIXRoaXMuaW50ZXJ2YWxUeXBlKSB7XG5cblx0XHRcdGlmIChyYW5nZSAvICgxICogMSkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMTtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcIm1pbGxpc2Vjb25kXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKDEgKiAyKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAyO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWlsbGlzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoMSAqIDUpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDU7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtaWxsaXNlY29uZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvICgxICogMTApIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDEwO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWlsbGlzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoMSAqIDIwKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAyMDtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcIm1pbGxpc2Vjb25kXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKDEgKiA1MCkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gNTA7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtaWxsaXNlY29uZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvICgxICogMTAwKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAxMDA7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtaWxsaXNlY29uZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvICgxICogMjAwKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAyMDA7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtaWxsaXNlY29uZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvICgxICogMjUwKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAyNTA7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtaWxsaXNlY29uZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvICgxICogMzAwKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAzMDA7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtaWxsaXNlY29uZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvICgxICogNDAwKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSA0MDA7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtaWxsaXNlY29uZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvICgxICogNTAwKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSA1MDA7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtaWxsaXNlY29uZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMuc2Vjb25kRHVyYXRpb24gKiAxKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAxO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwic2Vjb25kXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy5zZWNvbmREdXJhdGlvbiAqIDIpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDI7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLnNlY29uZER1cmF0aW9uICogNSkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gNTtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcInNlY29uZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMuc2Vjb25kRHVyYXRpb24gKiAxMCkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMTA7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLnNlY29uZER1cmF0aW9uICogMTUpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDE1O1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwic2Vjb25kXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy5zZWNvbmREdXJhdGlvbiAqIDIwKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAyMDtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcInNlY29uZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMuc2Vjb25kRHVyYXRpb24gKiAzMCkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMzA7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJzZWNvbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLm1pbnV0ZUR1cmF0aW9uICogMSkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMTtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcIm1pbnV0ZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMubWludXRlRHVyYXRpb24gKiAyKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAyO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWludXRlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy5taW51dGVEdXJhdGlvbiAqIDUpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDU7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtaW51dGVcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLm1pbnV0ZUR1cmF0aW9uICogMTApIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDEwO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWludXRlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy5taW51dGVEdXJhdGlvbiAqIDE1KSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAxNTtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcIm1pbnV0ZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMubWludXRlRHVyYXRpb24gKiAyMCkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMjA7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtaW51dGVcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLm1pbnV0ZUR1cmF0aW9uICogMzApIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDMwO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwibWludXRlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy5ob3VyRHVyYXRpb24gKiAxKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAxO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwiaG91clwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMuaG91ckR1cmF0aW9uICogMikgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMjtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcImhvdXJcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLmhvdXJEdXJhdGlvbiAqIDMpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDM7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJob3VyXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy5ob3VyRHVyYXRpb24gKiA2KSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSA2O1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwiaG91clwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMuZGF5RHVyYXRpb24gKiAxKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAxO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwiZGF5XCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy5kYXlEdXJhdGlvbiAqIDIpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDI7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJkYXlcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLmRheUR1cmF0aW9uICogNCkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gNDtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcImRheVwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMud2Vla0R1cmF0aW9uICogMSkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMTtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcIndlZWtcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLndlZWtEdXJhdGlvbiAqIDIpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDI7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJ3ZWVrXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy53ZWVrRHVyYXRpb24gKiAzKSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSAzO1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwid2Vla1wiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMubW9udGhEdXJhdGlvbiAqIDEpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDE7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtb250aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMubW9udGhEdXJhdGlvbiAqIDIpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDI7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtb250aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMubW9udGhEdXJhdGlvbiAqIDMpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDM7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtb250aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMubW9udGhEdXJhdGlvbiAqIDYpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDY7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJtb250aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChyYW5nZSAvIChjb25zdGFudHMueWVhckR1cmF0aW9uICogMSkgPD0gbm9UaWNrcykge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gMTtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcInllYXJcIjtcblx0XHRcdH0gZWxzZSBpZiAocmFuZ2UgLyAoY29uc3RhbnRzLnllYXJEdXJhdGlvbiAqIDIpIDw9IG5vVGlja3MpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IDI7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJ5ZWFyXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHJhbmdlIC8gKGNvbnN0YW50cy55ZWFyRHVyYXRpb24gKiA0KSA8PSBub1RpY2tzKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWwgPSA0O1xuXHRcdFx0XHR0aGlzLmludGVydmFsVHlwZSA9IFwieWVhclwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbCA9IE1hdGguZmxvb3IoQXhpcy5nZXROaWNlTnVtYmVyKHJhbmdlIC8gKG5vVGlja3MgLSAxKSwgdHJ1ZSkgLyBjb25zdGFudHMueWVhckR1cmF0aW9uKTtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcInllYXJcIjtcblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICh0aGlzLnZpZXdwb3J0TWluaW11bSA9PT0gbnVsbCB8fCBpc05hTih0aGlzLnZpZXdwb3J0TWluaW11bSkpXG5cdFx0XHR0aGlzLnZpZXdwb3J0TWluaW11bSA9IG1pbiAtIG1pbkRpZmYgLyAyO1xuXG5cdFx0aWYgKHRoaXMudmlld3BvcnRNYXhpbXVtID09PSBudWxsIHx8IGlzTmFOKHRoaXMudmlld3BvcnRNYXhpbXVtKSlcblx0XHRcdHRoaXMudmlld3BvcnRNYXhpbXVtID0gbWF4ICsgbWluRGlmZiAvIDI7XG5cblxuXHRcdGlmICghdGhpcy52YWx1ZUZvcm1hdFN0cmluZykge1xuXHRcdFx0aWYgKGlzTGVzc1RoYW5Ud29EYXRhUG9pbnRzKSB7XG5cdFx0XHRcdHRoaXMudmFsdWVGb3JtYXRTdHJpbmcgPSBcIk1NTSBERCBZWVlZIEhIOm1tXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuaW50ZXJ2YWxUeXBlID09PSBcInllYXJcIikge1xuXHRcdFx0XHR0aGlzLnZhbHVlRm9ybWF0U3RyaW5nID0gXCJZWVlZXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuaW50ZXJ2YWxUeXBlID09PSBcIm1vbnRoXCIpIHtcblx0XHRcdFx0dGhpcy52YWx1ZUZvcm1hdFN0cmluZyA9IFwiTU1NIFlZWVlcIjtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5pbnRlcnZhbFR5cGUgPT09IFwid2Vla1wiKSB7XG5cdFx0XHRcdHRoaXMudmFsdWVGb3JtYXRTdHJpbmcgPSBcIk1NTSBERCBZWVlZXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuaW50ZXJ2YWxUeXBlID09PSBcImRheVwiKSB7XG5cdFx0XHRcdHRoaXMudmFsdWVGb3JtYXRTdHJpbmcgPSBcIk1NTSBERCBZWVlZXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuaW50ZXJ2YWxUeXBlID09PSBcImhvdXJcIikge1xuXHRcdFx0XHR0aGlzLnZhbHVlRm9ybWF0U3RyaW5nID0gXCJoaDptbSBUVFwiO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmludGVydmFsVHlwZSA9PT0gXCJtaW51dGVcIikge1xuXHRcdFx0XHR0aGlzLnZhbHVlRm9ybWF0U3RyaW5nID0gXCJoaDptbSBUVFwiO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmludGVydmFsVHlwZSA9PT0gXCJzZWNvbmRcIikge1xuXHRcdFx0XHR0aGlzLnZhbHVlRm9ybWF0U3RyaW5nID0gXCJoaDptbTpzcyBUVFwiO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmludGVydmFsVHlwZSA9PT0gXCJtaWxsaXNlY29uZFwiKSB7XG5cdFx0XHRcdHRoaXMudmFsdWVGb3JtYXRTdHJpbmcgPSBcImZmZidtcydcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdHRoaXMuaW50ZXJ2YWxUeXBlID0gXCJudW1iZXJcIjtcblxuXHRcdHJhbmdlID0gQXhpcy5nZXROaWNlTnVtYmVyKHJhbmdlLCBmYWxzZSk7XG5cblx0XHRpZiAodGhpcy5fb3B0aW9ucyAmJiB0aGlzLl9vcHRpb25zLmludGVydmFsKVxuXHRcdFx0dGhpcy5pbnRlcnZhbCA9IHRoaXMuX29wdGlvbnMuaW50ZXJ2YWw7XG5cdFx0ZWxzZSB7XG5cdFx0XHR0aGlzLmludGVydmFsID0gQXhpcy5nZXROaWNlTnVtYmVyKHJhbmdlIC8gKG5vVGlja3MgLSAxKSwgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudmlld3BvcnRNaW5pbXVtID09PSBudWxsIHx8IGlzTmFOKHRoaXMudmlld3BvcnRNaW5pbXVtKSkge1xuXHRcdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJheGlzWFwiKVxuXHRcdFx0XHR0aGlzLnZpZXdwb3J0TWluaW11bSA9IG1pbiAtIG1pbkRpZmYgLyAyO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR0aGlzLnZpZXdwb3J0TWluaW11bSA9IE1hdGguZmxvb3IobWluIC8gdGhpcy5pbnRlcnZhbCkgKiB0aGlzLmludGVydmFsO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnZpZXdwb3J0TWF4aW11bSA9PT0gbnVsbCB8fCBpc05hTih0aGlzLnZpZXdwb3J0TWF4aW11bSkpIHtcblx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwiYXhpc1hcIilcblx0XHRcdFx0dGhpcy52aWV3cG9ydE1heGltdW0gPSBtYXggKyBtaW5EaWZmIC8gMjtcblx0XHRcdGVsc2Vcblx0XHRcdFx0dGhpcy52aWV3cG9ydE1heGltdW0gPSBNYXRoLmNlaWwobWF4IC8gdGhpcy5pbnRlcnZhbCkgKiB0aGlzLmludGVydmFsO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnZpZXdwb3J0TWF4aW11bSA9PT0gMCAmJiB0aGlzLnZpZXdwb3J0TWluaW11bSA9PT0gMCkge1xuXG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy52aWV3cG9ydE1pbmltdW0gPT09IDApIHtcblx0XHRcdFx0dGhpcy52aWV3cG9ydE1heGltdW0gKz0gMTA7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICh0aGlzLl9vcHRpb25zLnZpZXdwb3J0TWF4aW11bSA9PT0gMCkge1xuXHRcdFx0XHR0aGlzLnZpZXdwb3J0TWluaW11bSAtPSAxMDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX29wdGlvbnMgJiYgdHlwZW9mICh0aGlzLl9vcHRpb25zLmludGVydmFsKSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHR0aGlzLmludGVydmFsID0gQXhpcy5nZXROaWNlTnVtYmVyKCh0aGlzLnZpZXdwb3J0TWF4aW11bSAtIHRoaXMudmlld3BvcnRNaW5pbXVtKSAvIChub1RpY2tzIC0gMSksIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vQ2FsY3VsYXRlIG1pbmltdW0gYW5kIG1heGltdW0gaWYgbm90IHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG5cdGlmICh0aGlzLm1pbmltdW0gPT09IG51bGwgfHwgdGhpcy5tYXhpbXVtID09PSBudWxsKSB7XG5cdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJheGlzWFwiKSB7XG5cdFx0XHRtaW4gPSAodGhpcy5taW5pbXVtICE9PSBudWxsKSA/IHRoaXMubWluaW11bSA6IHRoaXMuZGF0YUluZm8ubWluO1xuXHRcdFx0bWF4ID0gKHRoaXMubWF4aW11bSAhPT0gbnVsbCkgPyB0aGlzLm1heGltdW0gOiB0aGlzLmRhdGFJbmZvLm1heDtcblxuXHRcdFx0aWYgKG1heCAtIG1pbiA9PT0gMCkge1xuXHRcdFx0XHRyYW5nZVBhZGRpbmcgPSB0eXBlb2YgKHRoaXMuX29wdGlvbnMuaW50ZXJ2YWwpID09PSBcInVuZGVmaW5lZFwiID8gLjQgOiB0aGlzLl9vcHRpb25zLmludGVydmFsO1xuXG5cdFx0XHRcdG1heCArPSByYW5nZVBhZGRpbmc7XG5cdFx0XHRcdG1pbiAtPSByYW5nZVBhZGRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmRhdGFJbmZvLm1pbkRpZmYgIT09IEluZmluaXR5KVxuXHRcdFx0XHRtaW5EaWZmID0gdGhpcy5kYXRhSW5mby5taW5EaWZmO1xuXHRcdFx0ZWxzZSBpZiAobWF4IC0gbWluID4gMSkge1xuXHRcdFx0XHRtaW5EaWZmID0gTWF0aC5hYnMobWF4IC0gbWluKSAqIC41O1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdG1pbkRpZmYgPSAxO1xuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IFwiYXhpc1lcIikge1xuXG5cdFx0XHRtaW4gPSAodGhpcy5taW5pbXVtICE9PSBudWxsKSA/IHRoaXMubWluaW11bSA6IHRoaXMuZGF0YUluZm8ubWluO1xuXHRcdFx0bWF4ID0gKHRoaXMubWF4aW11bSAhPT0gbnVsbCkgPyB0aGlzLm1heGltdW0gOiB0aGlzLmRhdGFJbmZvLm1heDtcblxuXHRcdFx0aWYgKCFpc0Zpbml0ZShtaW4pICYmICFpc0Zpbml0ZShtYXgpKSB7XG5cdFx0XHRcdG1heCA9IHR5cGVvZiAodGhpcy5fb3B0aW9ucy5pbnRlcnZhbCkgPT09IFwidW5kZWZpbmVkXCIgPyAtSW5maW5pdHkgOiB0aGlzLl9vcHRpb25zLmludGVydmFsO1xuXHRcdFx0XHRtaW4gPSAwO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRpZiAobWluID09PSAwICYmIG1heCA9PT0gMCkgey8vIFdoZW4gYWxsIGRhdGFQb2ludHMgYXJlIHplcm9cblx0XHRcdFx0XHRtYXggKz0gOTtcblx0XHRcdFx0XHRtaW4gPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKG1heCAtIG1pbiA9PT0gMCkgey8vIFdoZW4gdGhlcmUgaXMgb25seSBhIHNpbmdsZSBkYXRhUG9pbnQgb3Igd2hlbiBhbGwgZGF0YVBvaW50cyBoYXZlIHNhbWUgWSBWYWx1ZVxuXHRcdFx0XHRcdHJhbmdlUGFkZGluZyA9IE1hdGgubWluKE1hdGguYWJzKE1hdGguYWJzKG1heCkgKiAuMDEpLCA1KTtcblx0XHRcdFx0XHRtYXggKz0gcmFuZ2VQYWRkaW5nO1xuXHRcdFx0XHRcdG1pbiAtPSByYW5nZVBhZGRpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAobWluID4gbWF4KSB7XG5cdFx0XHRcdFx0cmFuZ2VQYWRkaW5nID0gTWF0aC5taW4oTWF0aC5hYnMoTWF0aC5hYnMobWF4IC0gbWluKSAqIC4wMSksIDUpO1xuXG5cdFx0XHRcdFx0aWYgKG1heCA+PSAwKVxuXHRcdFx0XHRcdFx0bWluID0gbWF4IC0gcmFuZ2VQYWRkaW5nO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdG1heCA9IG1pbiArIHJhbmdlUGFkZGluZztcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblxuXHRcdFx0XHRcdHJhbmdlUGFkZGluZyA9IE1hdGgubWluKE1hdGguYWJzKE1hdGguYWJzKG1heCAtIG1pbikgKiAuMDEpLCAuMDUpO1xuXG5cdFx0XHRcdFx0aWYgKG1heCAhPT0gMClcblx0XHRcdFx0XHRcdG1heCArPSByYW5nZVBhZGRpbmc7XG5cdFx0XHRcdFx0aWYgKG1pbiAhPT0gMClcblx0XHRcdFx0XHRcdG1pbiAtPSByYW5nZVBhZGRpbmc7XG5cdFx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuZGF0YUluZm8ubWluRGlmZiAhPT0gSW5maW5pdHkpXG5cdFx0XHRcdG1pbkRpZmYgPSB0aGlzLmRhdGFJbmZvLm1pbkRpZmY7XG5cdFx0XHRlbHNlIGlmIChtYXggLSBtaW4gPiAxKSB7XG5cdFx0XHRcdG1pbkRpZmYgPSBNYXRoLmFicyhtYXggLSBtaW4pICogLjU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0bWluRGlmZiA9IDE7XG5cdFx0XHR9XG5cblxuXHRcdFx0Ly9BcHBseSBpbmNsdWRlWmVyb1xuXHRcdFx0aWYgKHRoaXMuaW5jbHVkZVplcm8gJiYgKHRoaXMubWluaW11bSA9PT0gbnVsbCB8fCBpc05hTih0aGlzLm1pbmltdW0pKSkge1xuXHRcdFx0XHRpZiAobWluID4gMClcblx0XHRcdFx0XHRtaW4gPSAwO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMuaW5jbHVkZVplcm8gJiYgKHRoaXMubWF4aW11bSA9PT0gbnVsbCB8fCBpc05hTih0aGlzLm1heGltdW0pKSkge1xuXHRcdFx0XHRpZiAobWF4IDwgMClcblx0XHRcdFx0XHRtYXggPSAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJhbmdlID0gbWF4IC0gbWluO1xuXG5cdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJheGlzWFwiICYmIHRoaXMuY2hhcnQucGxvdEluZm8uYXhpc1hWYWx1ZVR5cGUgPT09IFwiZGF0ZVRpbWVcIikge1xuXG5cdFx0XHRpZiAodGhpcy5taW5pbXVtID09PSBudWxsIHx8IGlzTmFOKHRoaXMubWluaW11bSkpXG5cdFx0XHRcdHRoaXMubWluaW11bSA9IG1pbiAtIG1pbkRpZmYgLyAyO1xuXG5cdFx0XHRpZiAodGhpcy5tYXhpbXVtID09PSBudWxsIHx8IGlzTmFOKHRoaXMubWF4aW11bSkpXG5cdFx0XHRcdHRoaXMubWF4aW11bSA9IG1heCArIG1pbkRpZmYgLyAyO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0dGhpcy5pbnRlcnZhbFR5cGUgPSBcIm51bWJlclwiO1xuXG5cdFx0XHRpZiAodGhpcy5taW5pbXVtID09PSBudWxsKSB7XG5cdFx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwiYXhpc1hcIilcblx0XHRcdFx0XHR0aGlzLm1pbmltdW0gPSBtaW4gLSBtaW5EaWZmIC8gMjtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLm1pbmltdW0gPSBNYXRoLmZsb29yKG1pbiAvIHRoaXMuaW50ZXJ2YWwpICogdGhpcy5pbnRlcnZhbDtcblxuXHRcdFx0XHR0aGlzLm1pbmltdW0gPSBNYXRoLm1pbih0aGlzLm1pbmltdW0sIHRoaXMuc2Vzc2lvblZhcmlhYmxlcy52aWV3cG9ydE1pbmltdW0gPT09IG51bGwgfHwgaXNOYU4odGhpcy5zZXNzaW9uVmFyaWFibGVzLnZpZXdwb3J0TWluaW11bSkgPyBJbmZpbml0eSA6IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy52aWV3cG9ydE1pbmltdW0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5tYXhpbXVtID09PSBudWxsKSB7XG5cdFx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwiYXhpc1hcIilcblx0XHRcdFx0XHR0aGlzLm1heGltdW0gPSBtYXggKyBtaW5EaWZmIC8gMjtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLm1heGltdW0gPSBNYXRoLmNlaWwobWF4IC8gdGhpcy5pbnRlcnZhbCkgKiB0aGlzLmludGVydmFsO1xuXG5cdFx0XHRcdHRoaXMubWF4aW11bSA9IE1hdGgubWF4KHRoaXMubWF4aW11bSwgdGhpcy5zZXNzaW9uVmFyaWFibGVzLnZpZXdwb3J0TWF4aW11bSA9PT0gbnVsbCB8fCBpc05hTih0aGlzLnNlc3Npb25WYXJpYWJsZXMudmlld3BvcnRNYXhpbXVtKSA/IC1JbmZpbml0eSA6IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy52aWV3cG9ydE1heGltdW0pO1xuXHRcdFx0fVxuXG5cdFx0Ly92YXIgbmZyYWMgPSBNYXRoLm1heCgtTWF0aC5mbG9vcihNYXRoLmxvZyhkKS9NYXRoLkxOMTApLCAwKTsgLy9udW1iZXIgb2YgZnJhY3Rpb25hbCBkaWdpdHMgdG8gc2hvd1xuXG5cblx0XHRpZiAodGhpcy5tYXhpbXVtID09PSAwICYmIHRoaXMubWluaW11bSA9PT0gMCkge1xuXG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy5taW5pbXVtID09PSAwKSB7XG5cdFx0XHRcdHRoaXMubWF4aW11bSArPSAxMDtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKHRoaXMuX29wdGlvbnMubWF4aW11bSA9PT0gMCkge1xuXHRcdFx0XHR0aGlzLm1pbmltdW0gLT0gMTA7XG5cdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdHRoaXMudmlld3BvcnRNaW5pbXVtID0gTWF0aC5tYXgodGhpcy52aWV3cG9ydE1pbmltdW0sIHRoaXMubWluaW11bSk7XG5cdHRoaXMudmlld3BvcnRNYXhpbXVtID0gTWF0aC5taW4odGhpcy52aWV3cG9ydE1heGltdW0sIHRoaXMubWF4aW11bSk7XG5cblx0aWYgKHRoaXMudHlwZSA9PT0gXCJheGlzWFwiICYmIHRoaXMuY2hhcnQucGxvdEluZm8uYXhpc1hWYWx1ZVR5cGUgPT09IFwiZGF0ZVRpbWVcIilcblx0XHR0aGlzLmludGVydmFsU3RhcnRQb3NpdGlvbiA9IHRoaXMuZ2V0TGFiZWxTdGFydFBvaW50KG5ldyBEYXRlKHRoaXMudmlld3BvcnRNaW5pbXVtKSwgdGhpcy5pbnRlcnZhbFR5cGUsIHRoaXMuaW50ZXJ2YWwpO1xuXHRlbHNlXG5cdFx0dGhpcy5pbnRlcnZhbFN0YXJ0UG9zaXRpb24gPSBNYXRoLmZsb29yKCh0aGlzLnZpZXdwb3J0TWluaW11bSArICh0aGlzLmludGVydmFsICogLjIpKSAvIHRoaXMuaW50ZXJ2YWwpICogdGhpcy5pbnRlcnZhbDtcblxuXHQvL1NldCB2YWx1ZUZvcm1hdFN0cmluZ1xuXHRpZiAoIXRoaXMudmFsdWVGb3JtYXRTdHJpbmcpIHtcblx0XHR0aGlzLnZhbHVlRm9ybWF0U3RyaW5nID0gXCIjLCMjMC4jI1wiO1xuXG5cdFx0cmFuZ2UgPSBNYXRoLmFicyh0aGlzLnZpZXdwb3J0TWF4aW11bSAtIHRoaXMudmlld3BvcnRNaW5pbXVtKTtcblxuXHRcdGlmIChyYW5nZSA8IDEpIHtcblx0XHRcdHZhciBudW1iZXJPZkRlY2ltYWxzID0gTWF0aC5mbG9vcihNYXRoLmFicyhNYXRoLmxvZyhyYW5nZSkgLyBNYXRoLkxOMTApKSArIDI7XG5cblx0XHRcdGlmIChpc05hTihudW1iZXJPZkRlY2ltYWxzKSB8fCAhaXNGaW5pdGUobnVtYmVyT2ZEZWNpbWFscykpXG5cdFx0XHRcdG51bWJlck9mRGVjaW1hbHMgPSAyO1xuXG5cdFx0XHRpZiAobnVtYmVyT2ZEZWNpbWFscyA+IDIpIHtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkRlY2ltYWxzIC0gMjsgaSsrKVxuXHRcdFx0XHRcdHRoaXMudmFsdWVGb3JtYXRTdHJpbmcgKz0gXCIjXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdH1cblxuXHQvL2lmIChpc0RlYnVnTW9kZSAmJiB3aW5kb3cuY29uc29sZSkge1xuXHQvLyAgICB3aW5kb3cuY29uc29sZS5sb2codGhpcy50eXBlICsgXCI6IE1pbiA9IFwiICsgdGhpcy52aWV3cG9ydE1pbmltdW0pO1xuXHQvLyAgICB3aW5kb3cuY29uc29sZS5sb2codGhpcy50eXBlICsgXCI6IE1heCA9IFwiICsgdGhpcy52aWV3cG9ydE1heGltdW0pO1xuXHQvLyAgICB3aW5kb3cuY29uc29sZS5sb2codGhpcy50eXBlICsgXCI6IEludGVydmFsID0gXCIgKyB0aGlzLmludGVydmFsKTtcblx0Ly99XG59XG5cbkF4aXMuZ2V0TmljZU51bWJlciA9IGZ1bmN0aW9uICh4LCByb3VuZCkge1xuXG5cdHZhciBleHAgPSBNYXRoLmZsb29yKE1hdGgubG9nKHgpIC8gTWF0aC5MTjEwKTtcblx0dmFyIGYgPSB4IC8gTWF0aC5wb3coMTAsIGV4cCk7XG5cdHZhciBuZjtcblxuXHRpZiAocm91bmQpIHtcblx0XHRpZiAoZiA8IDEuNSlcblx0XHRcdG5mID0gMTtcblx0XHRlbHNlIGlmIChmIDwgMylcblx0XHRcdG5mID0gMjtcblx0XHRlbHNlIGlmIChmIDwgNylcblx0XHRcdG5mID0gNTtcblx0XHRlbHNlXG5cdFx0XHRuZiA9IDEwO1xuXHR9XG5cdGVsc2Uge1xuXHRcdGlmIChmIDw9IDEpXG5cdFx0XHRuZiA9IDE7XG5cdFx0ZWxzZSBpZiAoZiA8PSAyKVxuXHRcdFx0bmYgPSAyO1xuXHRcdGVsc2UgaWYgKGYgPD0gNSlcblx0XHRcdG5mID0gNTtcblx0XHRlbHNlIG5mID0gMTA7XG5cdH1cblxuXHRyZXR1cm4gTnVtYmVyKChuZiAqIE1hdGgucG93KDEwLCBleHApKS50b0ZpeGVkKDIwKSk7XG59XG5cbkF4aXMucHJvdG90eXBlLmdldExhYmVsU3RhcnRQb2ludCA9IGZ1bmN0aW9uICgpIHtcblxuXHR2YXIgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IGNvbnZlcnRUb051bWJlcih0aGlzLmludGVydmFsLCB0aGlzLmludGVydmFsVHlwZSk7XG5cdHZhciBtaW5pbXVtID0gTWF0aC5mbG9vcigodGhpcy52aWV3cG9ydE1pbmltdW0pIC8gaW50ZXJ2YWxJbk1pbGxpc2Vjb25kcykgKiBpbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuXHR2YXIgZGF0ZVRpbWUgPSBuZXcgRGF0ZShtaW5pbXVtKTtcblxuXHRpZiAodGhpcy5pbnRlcnZhbFR5cGUgPT09IFwibWlsbGlzZWNvbmRcIikge1xuXHRcdC8vbWlsbGlzZWNvbmQgPSBkYXRlVGltZS5nZXRNaWxsaVNlY29uZCgpO1xuXHRcdC8vbWlsbGlzZWNvbmQgPSBNYXRoLmZsb29yKChtaWxsaXNlY29uZCArIHRoaXMuaW50ZXJ2YWwpIC8gdGhpcy5pbnRlcnZhbCkgKiB0aGlzLmludGVydmFsO1xuXHR9XG5cdGVsc2UgaWYgKHRoaXMuaW50ZXJ2YWxUeXBlID09PSBcInNlY29uZFwiKSB7XG5cdFx0aWYgKGRhdGVUaW1lLmdldE1pbGxpc2Vjb25kcygpID4gMCkge1xuXHRcdFx0ZGF0ZVRpbWUuc2V0U2Vjb25kcyhkYXRlVGltZS5nZXRTZWNvbmRzKCkgKyAxKTtcblx0XHRcdGRhdGVUaW1lLnNldE1pbGxpc2Vjb25kcygwKTtcblx0XHR9XG5cdH1cblx0ZWxzZSBpZiAodGhpcy5pbnRlcnZhbFR5cGUgPT09IFwibWludXRlXCIpIHtcblx0XHRpZiAoZGF0ZVRpbWUuZ2V0U2Vjb25kcygpID4gMCB8fCBkYXRlVGltZS5nZXRNaWxsaXNlY29uZHMoKSA+IDApIHtcblx0XHRcdGRhdGVUaW1lLnNldE1pbnV0ZXMoZGF0ZVRpbWUuZ2V0TWludXRlcygpICsgMSk7XG5cdFx0XHRkYXRlVGltZS5zZXRTZWNvbmRzKDApO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0TWlsbGlzZWNvbmRzKDApO1xuXHRcdH1cblx0fVxuXHRlbHNlIGlmICh0aGlzLmludGVydmFsVHlwZSA9PT0gXCJob3VyXCIpIHtcblx0XHRpZiAoZGF0ZVRpbWUuZ2V0TWludXRlcygpID4gMCB8fCBkYXRlVGltZS5nZXRTZWNvbmRzKCkgPiAwIHx8IGRhdGVUaW1lLmdldE1pbGxpc2Vjb25kcygpID4gMCkge1xuXHRcdFx0ZGF0ZVRpbWUuc2V0SG91cnMoZGF0ZVRpbWUuZ2V0SG91cnMoKSArIDEpO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0TWludXRlcygwKTtcblx0XHRcdGRhdGVUaW1lLnNldFNlY29uZHMoMCk7XG5cdFx0XHRkYXRlVGltZS5zZXRNaWxsaXNlY29uZHMoMCk7XG5cdFx0fVxuXHR9XG5cdGVsc2UgaWYgKHRoaXMuaW50ZXJ2YWxUeXBlID09PSBcImRheVwiKSB7XG5cdFx0aWYgKGRhdGVUaW1lLmdldEhvdXJzKCkgPiAwIHx8IGRhdGVUaW1lLmdldE1pbnV0ZXMoKSA+IDAgfHwgZGF0ZVRpbWUuZ2V0U2Vjb25kcygpID4gMCB8fCBkYXRlVGltZS5nZXRNaWxsaXNlY29uZHMoKSA+IDApIHtcblx0XHRcdGRhdGVUaW1lLnNldERhdGUoZGF0ZVRpbWUuZ2V0RGF0ZSgpICsgMSk7XG5cdFx0XHRkYXRlVGltZS5zZXRIb3VycygwKTtcblx0XHRcdGRhdGVUaW1lLnNldE1pbnV0ZXMoMCk7XG5cdFx0XHRkYXRlVGltZS5zZXRTZWNvbmRzKDApO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0TWlsbGlzZWNvbmRzKDApO1xuXHRcdH1cblx0fVxuXHRlbHNlIGlmICh0aGlzLmludGVydmFsVHlwZSA9PT0gXCJ3ZWVrXCIpIHtcblx0XHRpZiAoZGF0ZVRpbWUuZ2V0RGF5KCkgPiAwIHx8IGRhdGVUaW1lLmdldEhvdXJzKCkgPiAwIHx8IGRhdGVUaW1lLmdldE1pbnV0ZXMoKSA+IDAgfHwgZGF0ZVRpbWUuZ2V0U2Vjb25kcygpID4gMCB8fCBkYXRlVGltZS5nZXRNaWxsaXNlY29uZHMoKSA+IDApIHtcblx0XHRcdGRhdGVUaW1lLnNldERhdGUoZGF0ZVRpbWUuZ2V0RGF0ZSgpICsgKDcgLSBkYXRlVGltZS5nZXREYXkoKSkpO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0SG91cnMoMCk7XG5cdFx0XHRkYXRlVGltZS5zZXRNaW51dGVzKDApO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0U2Vjb25kcygwKTtcblx0XHRcdGRhdGVUaW1lLnNldE1pbGxpc2Vjb25kcygwKTtcblx0XHR9XG5cdH1cblx0ZWxzZSBpZiAodGhpcy5pbnRlcnZhbFR5cGUgPT09IFwibW9udGhcIikge1xuXHRcdGlmIChkYXRlVGltZS5nZXREYXRlKCkgPiAxIHx8IGRhdGVUaW1lLmdldEhvdXJzKCkgPiAwIHx8IGRhdGVUaW1lLmdldE1pbnV0ZXMoKSA+IDAgfHwgZGF0ZVRpbWUuZ2V0U2Vjb25kcygpID4gMCB8fCBkYXRlVGltZS5nZXRNaWxsaXNlY29uZHMoKSA+IDApIHtcblx0XHRcdGRhdGVUaW1lLnNldE1vbnRoKGRhdGVUaW1lLmdldE1vbnRoKCkgKyAxKTtcblx0XHRcdGRhdGVUaW1lLnNldERhdGUoMSk7XG5cdFx0XHRkYXRlVGltZS5zZXRIb3VycygwKTtcblx0XHRcdGRhdGVUaW1lLnNldE1pbnV0ZXMoMCk7XG5cdFx0XHRkYXRlVGltZS5zZXRTZWNvbmRzKDApO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0TWlsbGlzZWNvbmRzKDApO1xuXHRcdH1cblx0fVxuXHRlbHNlIGlmICh0aGlzLmludGVydmFsVHlwZSA9PT0gXCJ5ZWFyXCIpIHtcblx0XHRpZiAoZGF0ZVRpbWUuZ2V0TW9udGgoKSA+IDAgfHwgZGF0ZVRpbWUuZ2V0RGF0ZSgpID4gMSB8fCBkYXRlVGltZS5nZXRIb3VycygpID4gMCB8fCBkYXRlVGltZS5nZXRNaW51dGVzKCkgPiAwIHx8IGRhdGVUaW1lLmdldFNlY29uZHMoKSA+IDAgfHwgZGF0ZVRpbWUuZ2V0TWlsbGlzZWNvbmRzKCkgPiAwKSB7XG5cdFx0XHRkYXRlVGltZS5zZXRGdWxsWWVhcihkYXRlVGltZS5nZXRGdWxsWWVhcigpICsgMSk7XG5cdFx0XHRkYXRlVGltZS5zZXRNb250aCgwKTtcblx0XHRcdGRhdGVUaW1lLnNldERhdGUoMSk7XG5cdFx0XHRkYXRlVGltZS5zZXRIb3VycygwKTtcblx0XHRcdGRhdGVUaW1lLnNldE1pbnV0ZXMoMCk7XG5cdFx0XHRkYXRlVGltZS5zZXRTZWNvbmRzKDApO1xuXHRcdFx0ZGF0ZVRpbWUuc2V0TWlsbGlzZWNvbmRzKDApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBkYXRlVGltZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXhpcztcbiIsImltcG9ydCB7dGhlbWVzfSBmcm9tICcuLi9jb25zdGFudHMvdGhlbWVzJztcbmltcG9ydCB7aXNEZWJ1Z01vZGUsIGRlZmF1bHRPcHRpb25zfSBmcm9tICcuLi9jb25zdGFudHMvb3B0aW9ucyc7XG5cbmZ1bmN0aW9uIENhbnZhc0pTT2JqZWN0KGRlZmF1bHRzS2V5LCBvcHRpb25zLCB0aGVtZSwgcGFyZW50KSB7XG4gIHRoaXMuX2RlZmF1bHRzS2V5ID0gZGVmYXVsdHNLZXk7XG5cbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG5cbiAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMgPSBbXTsvL011bHRpZGltZW50aW9uYWwgYXJyYXkgd2l0aCBhbiBhcnJheSBmb3IgZWFjaCBldmVudCB0eXBlXG5cbiAgdmFyIGN1cnJlbnRUaGVtZU9wdGlvbnMgPSB7fTtcblxuICBpZiAodGhlbWUgJiYgdGhlbWVzW3RoZW1lXSAmJiB0aGVtZXNbdGhlbWVdW2RlZmF1bHRzS2V5XSlcbiAgICBjdXJyZW50VGhlbWVPcHRpb25zID0gdGhlbWVzW3RoZW1lXVtkZWZhdWx0c0tleV07XG5cbiAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnMgPyBvcHRpb25zIDoge307XG4gIHRoaXMuc2V0T3B0aW9ucyh0aGlzLl9vcHRpb25zLCBjdXJyZW50VGhlbWVPcHRpb25zKTtcbn1cblxuQ2FudmFzSlNPYmplY3QucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucywgY3VycmVudFRoZW1lT3B0aW9ucykge1xuXG4gIGlmICghZGVmYXVsdE9wdGlvbnNbdGhpcy5fZGVmYXVsdHNLZXldKSB7XG4gICAgaWYgKGlzRGVidWdNb2RlICYmIHdpbmRvdy5jb25zb2xlKVxuICAgICAgY29uc29sZS5sb2coXCJkZWZhdWx0cyBub3Qgc2V0XCIpO1xuICB9XG4gIGVsc2Uge1xuICAgIHZhciBkZWZhdWx0cyA9IGRlZmF1bHRPcHRpb25zW3RoaXMuX2RlZmF1bHRzS2V5XTtcblxuICAgIGZvciAodmFyIHByb3AgaW4gZGVmYXVsdHMpIHtcblxuICAgICAgaWYgKGRlZmF1bHRzLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICBpZiAob3B0aW9ucyAmJiBwcm9wIGluIG9wdGlvbnMpXG4gICAgICAgIHRoaXNbcHJvcF0gPSBvcHRpb25zW3Byb3BdO1xuICAgICAgZWxzZSBpZiAoY3VycmVudFRoZW1lT3B0aW9ucyAmJiBwcm9wIGluIGN1cnJlbnRUaGVtZU9wdGlvbnMpXG4gICAgICAgIHRoaXNbcHJvcF0gPSBjdXJyZW50VGhlbWVPcHRpb25zW3Byb3BdO1xuICAgICAgZWxzZSB0aGlzW3Byb3BdID0gZGVmYXVsdHNbcHJvcF07XG5cbiAgICAgIC8vaWYgKHR5cGVvZiB0aGlzW3Byb3BdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vICAgIGFsZXJ0KFwiZnVuY3Rpb25cIik7XG4gICAgICAvLyAgICB0aGlzW3Byb3BdID0gdGhpc1twcm9wXSgpO1xuICAgICAgLy99XG4gICAgfVxuXG4gIH1cbiAgfVxufTtcblxuLy8gVXBkYXRlIG9wdGlvbnMuIFJldHVybnMgdHJ1ZSBpZiBjaGFuZ2VkIG9yIGVsc2UgZmFsc2VcbkNhbnZhc0pTT2JqZWN0LnByb3RvdHlwZS51cGRhdGVPcHRpb24gPSBmdW5jdGlvbiAocHJvcCkge1xuXG4gIGlmICghZGVmYXVsdE9wdGlvbnNbdGhpcy5fZGVmYXVsdHNLZXldICYmIGlzRGVidWdNb2RlICYmIHdpbmRvdy5jb25zb2xlKVxuICAgIGNvbnNvbGUubG9nKFwiZGVmYXVsdHMgbm90IHNldFwiKTtcblxuICB2YXIgZGVmYXVsdHMgPSBkZWZhdWx0T3B0aW9uc1t0aGlzLl9kZWZhdWx0c0tleV07XG4gIHZhciB0aGVtZSA9IHRoaXMuX29wdGlvbnMudGhlbWUgPyB0aGlzLl9vcHRpb25zLnRoZW1lIDogKHRoaXMuY2hhcnQgJiYgdGhpcy5jaGFydC5fb3B0aW9ucy50aGVtZSkgPyB0aGlzLmNoYXJ0Ll9vcHRpb25zLnRoZW1lIDogXCJ0aGVtZTFcIjtcblxuICB2YXIgY3VycmVudFRoZW1lT3B0aW9ucyA9IHt9O1xuICB2YXIgbmV3VmFsdWUgPSB0aGlzW3Byb3BdO1xuXG4gIGlmICh0aGVtZSAmJiB0aGVtZXNbdGhlbWVdICYmIHRoZW1lc1t0aGVtZV1bdGhpcy5fZGVmYXVsdHNLZXldKVxuICAgIGN1cnJlbnRUaGVtZU9wdGlvbnMgPSB0aGVtZXNbdGhlbWVdW3RoaXMuX2RlZmF1bHRzS2V5XTtcblxuICBpZiAocHJvcCBpbiBkZWZhdWx0cykge1xuICAgIGlmIChwcm9wIGluIHRoaXMuX29wdGlvbnMpXG4gICAgICBuZXdWYWx1ZSA9IHRoaXMuX29wdGlvbnNbcHJvcF07XG4gICAgZWxzZSBpZiAoY3VycmVudFRoZW1lT3B0aW9ucyAmJiBwcm9wIGluIGN1cnJlbnRUaGVtZU9wdGlvbnMpXG4gICAgICBuZXdWYWx1ZSA9IGN1cnJlbnRUaGVtZU9wdGlvbnNbcHJvcF07XG4gICAgZWxzZSBuZXdWYWx1ZSA9IGRlZmF1bHRzW3Byb3BdO1xuICB9XG5cbiAgaWYgKG5ld1ZhbHVlID09PSB0aGlzW3Byb3BdKVxuICAgIHJldHVybiBmYWxzZTtcblxuICB0aGlzW3Byb3BdID0gbmV3VmFsdWU7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vL1N0b3JlcyB2YWx1ZXMgaW4gX29sZE9wdGlvbnMgc28gdGhhdCBpdCBjYW4gYmUgdHJhY2tlZCBmb3IgYW55IGNoYW5nZXNcbkNhbnZhc0pTT2JqZWN0LnByb3RvdHlwZS50cmFja0NoYW5nZXMgPSBmdW5jdGlvbiAob3B0aW9uKSB7XG4gIGlmICghdGhpcy5zZXNzaW9uVmFyaWFibGVzKVxuICAgIHRocm93IFwiU2Vzc2lvbiBWYXJpYWJsZSBTdG9yZSBub3Qgc2V0XCI7XG5cbiAgdGhpcy5zZXNzaW9uVmFyaWFibGVzW29wdGlvbl0gPSB0aGlzLl9vcHRpb25zW29wdGlvbl07XG59O1xuXG5DYW52YXNKU09iamVjdC5wcm90b3R5cGUuaXNCZWluZ1RyYWNrZWQgPSBmdW5jdGlvbiAob3B0aW9uKSB7XG4gIGlmICghdGhpcy5fb3B0aW9ucy5fb2xkT3B0aW9ucylcbiAgICB0aGlzLl9vcHRpb25zLl9vbGRPcHRpb25zID0ge307XG5cbiAgaWYgKHRoaXMuX29wdGlvbnMuX29sZE9wdGlvbnNbb3B0aW9uXSlcbiAgICByZXR1cm4gdHJ1ZTtcbiAgZWxzZVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbkNhbnZhc0pTT2JqZWN0LnByb3RvdHlwZS5oYXNPcHRpb25DaGFuZ2VkID0gZnVuY3Rpb24gKG9wdGlvbikge1xuICBpZiAoIXRoaXMuc2Vzc2lvblZhcmlhYmxlcylcbiAgICB0aHJvdyBcIlNlc3Npb24gVmFyaWFibGUgU3RvcmUgbm90IHNldFwiO1xuXG4gIHZhciBoYXNDaGFuZ2VkID0gISh0aGlzLnNlc3Npb25WYXJpYWJsZXNbb3B0aW9uXSA9PT0gdGhpcy5fb3B0aW9uc1tvcHRpb25dKTtcblxuICByZXR1cm4gaGFzQ2hhbmdlZDtcbn07XG5cbkNhbnZhc0pTT2JqZWN0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgZXZlbnRIYW5kbGVyLCBjb250ZXh0KSB7XG4gIGlmICghZXZlbnROYW1lIHx8ICFldmVudEhhbmRsZXIpXG4gICAgcmV0dXJuO1xuXG4gIGNvbnRleHQgPSBjb250ZXh0IHx8IHRoaXM7XG5cbiAgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IHRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gfHwgW107XG5cbiAgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXS5wdXNoKHsgY29udGV4dDogY29udGV4dCwgZXZlbnRIYW5kbGVyOiBldmVudEhhbmRsZXIgfSk7XG59XG5cbkNhbnZhc0pTT2JqZWN0LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgZXZlbnRIYW5kbGVyKSB7XG4gIGlmICghZXZlbnROYW1lIHx8ICFldmVudEhhbmRsZXIgfHwgIXRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0pXG4gICAgcmV0dXJuO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudExpc3RlbmVyc1tldmVudE5hbWVdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuXG4gICAgaWYgKGxpc3RlbmVyc1tpXS5ldmVudEhhbmRsZXIgPT09IGV2ZW50SGFuZGxlcikge1xuICAgICAgbGlzdGVuZXJzW2ldLnNwbGljZShpLCAxKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5DYW52YXNKU09iamVjdC5wcm90b3R5cGUucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2V2ZW50TGlzdGVuZXJzID0gW107XG59XG5cbkNhbnZhc0pTT2JqZWN0LnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgZXZlbnRQYXJhbWV0ZXIsIGNvbnRleHQpIHtcblxuICAvL0ZvciBJbnRlcm5hbCBFdmVudHNcbiAgaWYgKGV2ZW50TmFtZSAmJiB0aGlzLl9ldmVudExpc3RlbmVyc1tldmVudE5hbWVdKSB7XG5cbiAgZXZlbnRQYXJhbWV0ZXIgPSBldmVudFBhcmFtZXRlciB8fCB7fTtcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcblxuICAgIGxpc3RlbmVyc1tpXS5ldmVudEhhbmRsZXIuY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgZXZlbnRQYXJhbWV0ZXIpO1xuICB9XG59XG5cbiAgLy9FeHRlcm5hbCBFdmVudHMgZG8gbm90IHJlcXVpcmUgcmVnaXN0ZXJpbmcgYXMgdGhlIHByb3BlcnR5IG5hbWUgaXMgc3VmZmllbnQgdG8gZmlyZSB0aGUgZXZlbnQuXG4gIGlmICh0eXBlb2YgKHRoaXNbZXZlbnROYW1lXSkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRoaXNbZXZlbnROYW1lXS5jYWxsKGNvbnRleHQgfHwgdGhpcy5jaGFydC5fcHVibGljQ2hhcnRSZWZlcmVuY2UsIGV2ZW50UGFyYW1ldGVyKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW52YXNKU09iamVjdDtcbiIsIlxuaW1wb3J0IENhbnZhc0pTT2JqZWN0IGZyb20gJy4vY2FudmFzanMnO1xuaW1wb3J0IEFuaW1hdG9yIGZyb20gJy4vYW5pbWF0b3InO1xuaW1wb3J0IERhdGFTZXJpZXMgZnJvbSAnLi9kYXRhX3Nlcmllcyc7XG5pbXBvcnQgVGV4dEJsb2NrIGZyb20gJy4vdGV4dF9ibG9jayc7XG5pbXBvcnQgUmVuZGVySGVscGVyIGZyb20gJy4uL2hlbHBlcnMvcmVuZGVyJztcbmltcG9ydCBMYXlvdXRNYW5hZ2VyIGZyb20gJy4vbGF5b3V0X21hbmFnZXInO1xuaW1wb3J0IEV2ZW50TWFuYWdlciBmcm9tICcuL2V2ZW50X21hbmFnZXInO1xuaW1wb3J0IFRvb2xUaXAgZnJvbSAnLi90b29sdGlwJztcbmltcG9ydCBDdWx0dXJlSW5mbyBmcm9tICcuLi9jb3JlL2N1bHR1cmVfaW5mbyc7XG5pbXBvcnQgQXhpcyBmcm9tICcuLi9jb3JlL2F4aXMnO1xuaW1wb3J0IFRpdGxlIGZyb20gJy4uL2NvcmUvdGl0bGUnO1xuaW1wb3J0IExlZ2VuZCBmcm9tICcuLi9jb3JlL2xlZ2VuZCc7XG5pbXBvcnQgQW5pbWF0aW9uSGVscGVyIGZyb20gJy4uL2hlbHBlcnMvYW5pbWF0b3InO1xuaW1wb3J0IHtjb2xvclNldHN9IGZyb20gJy4uL2NvbnN0YW50cy90aGVtZXMnO1xuaW1wb3J0IHtpc0RlYnVnTW9kZSwgZGVmYXVsdE9wdGlvbnN9IGZyb20gJy4uL2NvbnN0YW50cy9vcHRpb25zJztcbi8vIGltcG9ydCB7aW5oZXJpdHN9IGZyb20gJ3V0aWwnO1xuXG5pbXBvcnQge1xuXHRhZGRFdmVudCxcblx0c2V0Q2FudmFzU2l6ZSxcblx0YWRkQXJyYXlJbmRleE9mLFxuXHRoaWRlLFxuXHRzaG93LFxuXHRnZXRNb3VzZUNvb3JkaW5hdGVzLFxuXHRnZXRQcm9wZXJ0eSxcblx0aXNDYW52YXNTdXBwb3J0ZWQsXG5cdGV4dGVuZCxcblx0Y3JlYXRlQ2FudmFzLFxuXHRleHRlbmRDdHgsXG5cdGdldE9iamVjdElkLFxuXHRkZXZpY2VQaXhlbEJhY2tpbmdTdG9yZVJhdGlvLFxuXHR0cmltU3RyaW5nLFxuXHRudW1iZXJGb3JtYXQsXG5cdGdldExpbmVEYXNoQXJyYXksXG5cdGludFRvSGV4Q29sb3JTdHJpbmcsXG5cdGNvbXBhcmVEYXRhUG9pbnRYLFxuXHRkYXRlRm9ybWF0XG59IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5pbXBvcnQge1xuXHRTcGxpbmVDaGFydCxcblx0Q29sdW1uQ2hhcnQsXG5cdFN0YWNrZWRDb2x1bW5DaGFydCxcblx0U3RhY2tlZENvbHVtbjEwMENoYXJ0LFxuXHRCYXJDaGFydCxcblx0U3RhY2tlZEJhckNoYXJ0LFxuXHRTdGFja2VkQmFyMTAwQ2hhcnQsXG5cdEFyZWFDaGFydCxcblx0U3BsaW5lQXJlYUNoYXJ0LFxuXHRTdGVwQXJlYUNoYXJ0LFxuXHRTdGFja2VkQXJlYUNoYXJ0LFxuXHRTdGFja2VkQXJlYTEwMENoYXJ0LFxuXHRCdWJibGVDaGFydCxcblx0U2NhdHRlckNoYXJ0LFxuXHRDYW5kbGVzdGlja0NoYXJ0LFxuXHRSYW5nZUNvbHVtbkNoYXJ0LFxuXHRSYW5nZUJhckNoYXJ0LFxuXHRSYW5nZUFyZWFDaGFydCxcblx0UmFuZ2VTcGxpbmVBcmVhQ2hhcnQsXG5cdFBpZUNoYXJ0XG59IGZyb20gJy4uL2NoYXJ0cy9pbmRleCc7XG5cbmZ1bmN0aW9uIENoYXJ0KGNvbnRhaW5lcklkLCBvcHRpb25zLCBwdWJsaWNDaGFydFJlZmVyZW5jZSkge1xuXG5cdHRoaXMuX3B1YmxpY0NoYXJ0UmVmZXJlbmNlID0gcHVibGljQ2hhcnRSZWZlcmVuY2U7XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0Q2hhcnQuYmFzZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIFwiQ2hhcnRcIiwgb3B0aW9ucywgb3B0aW9ucy50aGVtZSA/IG9wdGlvbnMudGhlbWUgOiBcInRoZW1lMVwiKTtcblxuXHR2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdHRoaXMuX2NvbnRhaW5lcklkID0gY29udGFpbmVySWQ7XG5cdHRoaXMuX29iamVjdHNJbml0aWFsaXplZCA9IGZhbHNlO1xuXHR0aGlzLmN0eCA9IG51bGw7XG5cdHRoaXMub3ZlcmxhaWRDYW52YXNDdHggPSBudWxsO1xuXHR0aGlzLl9pbmRleExhYmVscyA9IFtdO1xuXHR0aGlzLl9wYW5UaW1lcklkID0gMDtcblx0dGhpcy5fbGFzdFRvdWNoRXZlbnRUeXBlID0gXCJcIjtcblx0dGhpcy5fbGFzdFRvdWNoRGF0YSA9IG51bGw7XG5cdHRoaXMuaXNBbmltYXRpbmcgPSBmYWxzZTtcblx0dGhpcy5yZW5kZXJDb3VudCA9IDA7XG5cdHRoaXMuYW5pbWF0ZWRSZW5kZXIgPSBmYWxzZTtcblx0dGhpcy5kaXNhYmxlVG9vbFRpcCA9IGZhbHNlO1xuXG5cblx0dGhpcy5wYW5FbmFibGVkID0gZmFsc2U7XG5cdHRoaXMuX2RlZmF1bHRDdXJzb3IgPSBcImRlZmF1bHRcIjtcblx0dGhpcy5wbG90QXJlYSA9IHsgY2FudmFzOiBudWxsLCBjdHg6IG51bGwsIHgxOiAwLCB5MTogMCwgeDI6IDAsIHkyOiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG5cdHRoaXMuX2RhdGFJblJlbmRlcmVkT3JkZXIgPSBbXTtcblxuXHR0aGlzLl9jb250YWluZXIgPSB0eXBlb2YgKHRoaXMuX2NvbnRhaW5lcklkKSA9PT0gXCJzdHJpbmdcIiA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2NvbnRhaW5lcklkKSA6IHRoaXMuX2NvbnRhaW5lcklkO1xuXG5cdGlmICghdGhpcy5fY29udGFpbmVyKSB7XG5cdFx0aWYgKHdpbmRvdy5jb25zb2xlKVxuXHRcdFx0d2luZG93LmNvbnNvbGUubG9nKFwiQ2FudmFzSlMgRXJyb3I6IENoYXJ0IENvbnRhaW5lciB3aXRoIGlkIFxcXCJcIiArIHRoaXMuX2NvbnRhaW5lcklkICsgXCJcXFwiIHdhcyBub3QgZm91bmRcIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5fY29udGFpbmVyLmlubmVySFRNTCA9IFwiXCI7XG5cblx0dmFyIHdpZHRoID0gMDtcblx0dmFyIGhlaWdodCA9IDA7XG5cblx0aWYgKHRoaXMuX29wdGlvbnMud2lkdGgpXG5cdFx0d2lkdGggPSB0aGlzLndpZHRoO1xuXHRlbHNlXG5cdFx0d2lkdGggPSB0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGggPiAwID8gdGhpcy5fY29udGFpbmVyLmNsaWVudFdpZHRoIDogdGhpcy53aWR0aDtcblxuXHRpZiAodGhpcy5fb3B0aW9ucy5oZWlnaHQpXG5cdFx0aGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cdGVsc2Vcblx0XHRoZWlnaHQgPSB0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0ID4gMCA/IHRoaXMuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQgOiB0aGlzLmhlaWdodDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdHRoaXMueDEgPSB0aGlzLnkxID0gMDtcblx0dGhpcy54MiA9IHRoaXMud2lkdGg7XG5cdHRoaXMueTIgPSB0aGlzLmhlaWdodDtcblxuXG5cdHRoaXMuX3NlbGVjdGVkQ29sb3JTZXQgPSB0eXBlb2YgKGNvbG9yU2V0c1t0aGlzLmNvbG9yU2V0XSkgIT09IFwidW5kZWZpbmVkXCIgPyBjb2xvclNldHNbdGhpcy5jb2xvclNldF0gOiBjb2xvclNldHNbXCJjb2xvclNldDFcIl07XG5cblx0dGhpcy5fY2FudmFzSlNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHR0aGlzLl9jYW52YXNKU0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcImNhbnZhc2pzLWNoYXJ0LWNvbnRhaW5lclwiKTtcblxuXHR0aGlzLl9jYW52YXNKU0NvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0dGhpcy5fY2FudmFzSlNDb250YWluZXIuc3R5bGUudGV4dEFsaWduID0gXCJsZWZ0XCI7XG5cdHRoaXMuX2NhbnZhc0pTQ29udGFpbmVyLnN0eWxlLmN1cnNvciA9IFwiYXV0b1wiO1xuXG5cdGlmICghaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHR0aGlzLl9jYW52YXNKU0NvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBcIjBweFwiOy8vSW4gSUU2IHRvb2xUaXAgZG9lc24ndCBzaG93IGF0IHByb3BlciBwb3NpdGlvbiBpZiBub3Qgc2V0LlxuXHR9XG5cdHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9jYW52YXNKU0NvbnRhaW5lcik7XG5cblxuXHR0aGlzLmNhbnZhcyA9IGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcblxuXHR0aGlzLmNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0aWYgKHRoaXMuY2FudmFzLmdldENvbnRleHQpIHtcblx0XHQvL3RyeSB7XG5cdFx0Ly9cdHRoaXMuY2FudmFzLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRDb2xvcjtcblx0XHQvL30gY2F0Y2ggKGUpIHsgfVxuXHRcdHRoaXMuX2NhbnZhc0pTQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzKTtcblx0XHR0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcblx0XHR0aGlzLmN0eC50ZXh0QmFzZWxpbmUgPSBcInRvcFwiO1xuXHRcdGV4dGVuZEN0eCh0aGlzLmN0eCk7XG5cblx0fSBlbHNlIHJldHVybjtcblxuXHQvL3RoaXMuY2FudmFzLnN0eWxlLmN1cnNvciA9IFwicG9pbnRlclwiO1xuXG5cdGlmICghaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHR0aGlzLnBsb3RBcmVhLmNhbnZhcyA9IGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcblx0XHR0aGlzLnBsb3RBcmVhLmNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0XHR0aGlzLnBsb3RBcmVhLmNhbnZhcy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInBsb3RBcmVhQ2FudmFzXCIpO1xuXHRcdHRoaXMuX2NhbnZhc0pTQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMucGxvdEFyZWEuY2FudmFzKTtcblxuXHRcdHRoaXMucGxvdEFyZWEuY3R4ID0gdGhpcy5wbG90QXJlYS5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMucGxvdEFyZWEuY3R4ID0gdGhpcy5jdHg7XG5cdH1cblxuXHR0aGlzLm92ZXJsYWlkQ2FudmFzID0gY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpO1xuXHR0aGlzLm92ZXJsYWlkQ2FudmFzLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHR0aGlzLl9jYW52YXNKU0NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLm92ZXJsYWlkQ2FudmFzKTtcblx0dGhpcy5vdmVybGFpZENhbnZhc0N0eCA9IHRoaXMub3ZlcmxhaWRDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuXHR0aGlzLm92ZXJsYWlkQ2FudmFzQ3R4LnRleHRCYXNlbGluZSA9IFwidG9wXCI7XG5cblx0dGhpcy5fZXZlbnRNYW5hZ2VyID0gbmV3IEV2ZW50TWFuYWdlcih0aGlzKTtcblxuXHRhZGRFdmVudCh3aW5kb3csIFwicmVzaXplXCIsIGZ1bmN0aW9uICgpIHtcblx0XHQvL3RoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiRE9NU3VidHJlZU1vZGlmaWVkXCIsIGZ1bmN0aW9uICgpIHtcblxuXHRcdGlmIChfdGhpcy5fdXBkYXRlU2l6ZSgpKVxuXHRcdFx0X3RoaXMucmVuZGVyKCk7XG5cdH0pO1xuXG5cblx0dGhpcy5fdG9vbEJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdHRoaXMuX3Rvb2xCYXIuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJjYW52YXNqcy1jaGFydC10b29sYmFyXCIpO1xuXHR0aGlzLl90b29sQmFyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDFweDsgdG9wOiAxcHg7XCI7XG5cdHRoaXMuX2NhbnZhc0pTQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3Rvb2xCYXIpO1xuXG5cblx0dGhpcy5ib3VuZHMgPSB7IHgxOiAwLCB5MTogMCwgeDI6IHRoaXMud2lkdGgsIHkyOiB0aGlzLmhlaWdodCB9O1xuXG5cdGFkZEV2ZW50KHRoaXMub3ZlcmxhaWRDYW52YXMsICdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG5cdFx0X3RoaXMuX21vdXNlRXZlbnRIYW5kbGVyKGUpO1xuXHR9KTtcblxuXHRhZGRFdmVudCh0aGlzLm92ZXJsYWlkQ2FudmFzLCAnbW91c2Vtb3ZlJywgZnVuY3Rpb24gKGUpIHtcblx0XHRfdGhpcy5fbW91c2VFdmVudEhhbmRsZXIoZSk7XG5cdH0pO1xuXG5cdGFkZEV2ZW50KHRoaXMub3ZlcmxhaWRDYW52YXMsICdtb3VzZXVwJywgZnVuY3Rpb24gKGUpIHtcblx0XHRfdGhpcy5fbW91c2VFdmVudEhhbmRsZXIoZSk7XG5cdH0pO1xuXG5cdGFkZEV2ZW50KHRoaXMub3ZlcmxhaWRDYW52YXMsICdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZSkge1xuXHRcdF90aGlzLl9tb3VzZUV2ZW50SGFuZGxlcihlKTtcblx0XHRoaWRlKF90aGlzLl9kcm9wZG93bk1lbnUpO1xuXHR9KTtcblxuXHRhZGRFdmVudCh0aGlzLm92ZXJsYWlkQ2FudmFzLCAnbW91c2VvdXQnLCBmdW5jdGlvbiAoZSkge1xuXHRcdF90aGlzLl9tb3VzZUV2ZW50SGFuZGxlcihlKTtcblx0fSk7XG5cblxuXHRhZGRFdmVudCh0aGlzLm92ZXJsYWlkQ2FudmFzLCB3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQgPyBcIk1TUG9pbnRlckRvd25cIiA6IFwidG91Y2hzdGFydFwiLCBmdW5jdGlvbiAoZSkge1xuXHRcdF90aGlzLl90b3VjaEV2ZW50SGFuZGxlcihlKTtcblx0fSk7XG5cblx0YWRkRXZlbnQodGhpcy5vdmVybGFpZENhbnZhcywgd2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkID8gXCJNU1BvaW50ZXJNb3ZlXCIgOiAndG91Y2htb3ZlJywgZnVuY3Rpb24gKGUpIHtcblx0XHRfdGhpcy5fdG91Y2hFdmVudEhhbmRsZXIoZSk7XG5cdH0pO1xuXG5cdGFkZEV2ZW50KHRoaXMub3ZlcmxhaWRDYW52YXMsIHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZCA/IFwiTVNQb2ludGVyVXBcIiA6ICd0b3VjaGVuZCcsIGZ1bmN0aW9uIChlKSB7XG5cdFx0X3RoaXMuX3RvdWNoRXZlbnRIYW5kbGVyKGUpO1xuXHR9KTtcblxuXHRhZGRFdmVudCh0aGlzLm92ZXJsYWlkQ2FudmFzLCB3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQgPyBcIk1TUG9pbnRlckNhbmNlbFwiIDogJ3RvdWNoY2FuY2VsJywgZnVuY3Rpb24gKGUpIHtcblx0XHRfdGhpcy5fdG91Y2hFdmVudEhhbmRsZXIoZSk7XG5cdH0pO1xuXG5cdGlmICghdGhpcy5fY3JlZGl0TGluaykge1xuXG5cdFx0dGhpcy5fY3JlZGl0TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuXHRcdHRoaXMuX2NyZWRpdExpbmsuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJjYW52YXNqcy1jaGFydC1jcmVkaXRcIik7XG5cdFx0dGhpcy5fY3JlZGl0TGluay5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIm91dGxpbmU6bm9uZTttYXJnaW46MHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjNweDt0b3A6XCIgKyAodGhpcy5oZWlnaHQgLSAxNCkgKyBcInB4O2NvbG9yOmRpbWdyZXk7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOjEwcHg7Zm9udC1mYW1pbHk6THVjaWRhIEdyYW5kZSwgTHVjaWRhIFNhbnMgVW5pY29kZSwgQXJpYWwsIHNhbnMtc2VyaWZcIik7XG5cblx0XHR0aGlzLl9jcmVkaXRMaW5rLnNldEF0dHJpYnV0ZShcInRhYkluZGV4XCIsIC0xKTtcblxuXHRcdHRoaXMuX2NyZWRpdExpbmsuc2V0QXR0cmlidXRlKFwidGFyZ2V0XCIsIFwiX2JsYW5rXCIpO1xuXHR9XG5cblx0dGhpcy5fdG9vbFRpcCA9IG5ldyBUb29sVGlwKHRoaXMsIHRoaXMuX29wdGlvbnMudG9vbFRpcCwgdGhpcy50aGVtZSk7XG5cblx0dGhpcy5kYXRhID0gbnVsbDtcblx0dGhpcy5heGlzWCA9IG51bGw7XG5cdHRoaXMuYXhpc1kgPSBudWxsO1xuXHR0aGlzLmF4aXNZMiA9IG51bGw7XG5cblx0dGhpcy5zZXNzaW9uVmFyaWFibGVzID0ge1xuXHRcdGF4aXNYOiB7fSxcblx0XHRheGlzWToge30sXG5cdFx0YXhpc1kyOiB7fVxuXHR9O1xufVxuXG5leHRlbmQoQ2hhcnQsIENhbnZhc0pTT2JqZWN0KTtcblxuLy9VcGRhdGUgQ2hhcnQgUHJvcGVydGllc1xuQ2hhcnQucHJvdG90eXBlLl91cGRhdGVPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuXG5cdHZhciBfdGhpcyA9IHRoaXM7XG5cblx0dGhpcy51cGRhdGVPcHRpb24oXCJ3aWR0aFwiKTtcblx0dGhpcy51cGRhdGVPcHRpb24oXCJoZWlnaHRcIik7XG5cdHRoaXMudXBkYXRlT3B0aW9uKFwiZGF0YVBvaW50TWF4V2lkdGhcIik7XG5cdHRoaXMudXBkYXRlT3B0aW9uKFwiaW50ZXJhY3Rpdml0eUVuYWJsZWRcIik7XG5cdHRoaXMudXBkYXRlT3B0aW9uKFwidGhlbWVcIik7XG5cblx0aWYgKHRoaXMudXBkYXRlT3B0aW9uKFwiY29sb3JTZXRcIikpXG5cdFx0dGhpcy5fc2VsZWN0ZWRDb2xvclNldCA9IHR5cGVvZiAoY29sb3JTZXRzW3RoaXMuY29sb3JTZXRdKSAhPT0gXCJ1bmRlZmluZWRcIiA/IGNvbG9yU2V0c1t0aGlzLmNvbG9yU2V0XSA6IGNvbG9yU2V0c1tcImNvbG9yU2V0MVwiXTtcblxuXHR0aGlzLnVwZGF0ZU9wdGlvbihcImJhY2tncm91bmRDb2xvclwiKTtcblx0aWYgKCF0aGlzLmJhY2tncm91bmRDb2xvcilcblx0XHR0aGlzLmJhY2tncm91bmRDb2xvciA9IFwicmdiYSgwLDAsMCwwKVwiO1xuXG5cdHRoaXMudXBkYXRlT3B0aW9uKFwiY3VsdHVyZVwiKTtcblx0dGhpcy5fY3VsdHVyZUluZm8gPSBuZXcgQ3VsdHVyZUluZm8odGhpcy5fb3B0aW9ucy5jdWx0dXJlKTtcblxuXHR0aGlzLnVwZGF0ZU9wdGlvbihcImFuaW1hdGlvbkVuYWJsZWRcIik7XG5cdHRoaXMuYW5pbWF0aW9uRW5hYmxlZCA9IHRoaXMuYW5pbWF0aW9uRW5hYmxlZCAmJiBpc0NhbnZhc1N1cHBvcnRlZDtcblx0dGhpcy51cGRhdGVPcHRpb24oXCJhbmltYXRpb25EdXJhdGlvblwiKTtcblxuXHR0aGlzLnVwZGF0ZU9wdGlvbihcInJhbmdlQ2hhbmdpbmdcIik7XG5cdHRoaXMudXBkYXRlT3B0aW9uKFwicmFuZ2VDaGFuZ2VkXCIpO1xuXG5cdC8vTmVlZCB0byBjaGVjayB0aGlzLl9vcHRpb25zLnpvb21FbmFibGVkIGJlY2F1c2UgdGhpcy56b29tRW5hYmxlZCBpcyB1c2VkIGludGVybmFsbHkgdG8ga2VlcCB0cmFjayBvZiBzdGF0ZSAtIGFuZCBoZW5jZSBjaGFuZ2VzLlxuXHRpZiAodGhpcy5fb3B0aW9ucy56b29tRW5hYmxlZCkge1xuXG5cdFx0aWYgKCF0aGlzLl96b29tQnV0dG9uKSB7XG5cblx0XHRcdGhpZGUodGhpcy5fem9vbUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIikpO1xuXG5cdFx0XHRzZXRCdXR0b25TdGF0ZSh0aGlzLCB0aGlzLl96b29tQnV0dG9uLCBcInBhblwiKTtcblxuXHRcdFx0dGhpcy5fdG9vbEJhci5hcHBlbmRDaGlsZCh0aGlzLl96b29tQnV0dG9uKTtcblx0XHRcdGFkZEV2ZW50KHRoaXMuX3pvb21CdXR0b24sIFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAoX3RoaXMuem9vbUVuYWJsZWQpIHtcblx0XHRcdFx0XHRfdGhpcy56b29tRW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdF90aGlzLnBhbkVuYWJsZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0c2V0QnV0dG9uU3RhdGUoX3RoaXMsIF90aGlzLl96b29tQnV0dG9uLCBcInpvb21cIik7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRfdGhpcy56b29tRW5hYmxlZCA9IHRydWU7XG5cdFx0XHRcdFx0X3RoaXMucGFuRW5hYmxlZCA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0c2V0QnV0dG9uU3RhdGUoX3RoaXMsIF90aGlzLl96b29tQnV0dG9uLCBcInBhblwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdF90aGlzLnJlbmRlcigpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cblx0XHRpZiAoIXRoaXMuX3Jlc2V0QnV0dG9uKSB7XG5cdFx0XHRoaWRlKHRoaXMuX3Jlc2V0QnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKSk7XG5cdFx0XHRzZXRCdXR0b25TdGF0ZSh0aGlzLCB0aGlzLl9yZXNldEJ1dHRvbiwgXCJyZXNldFwiKTtcblx0XHRcdHRoaXMuX3Rvb2xCYXIuYXBwZW5kQ2hpbGQodGhpcy5fcmVzZXRCdXR0b24pO1xuXG5cdFx0XHRhZGRFdmVudCh0aGlzLl9yZXNldEJ1dHRvbiwgXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdFx0X3RoaXMuX3Rvb2xUaXAuaGlkZSgpO1xuXG5cdFx0XHRcdGlmIChfdGhpcy56b29tRW5hYmxlZCB8fCBfdGhpcy5wYW5FbmFibGVkKSB7XG5cdFx0XHRcdFx0X3RoaXMuem9vbUVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0XHRcdF90aGlzLnBhbkVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRzZXRCdXR0b25TdGF0ZShfdGhpcywgX3RoaXMuX3pvb21CdXR0b24sIFwicGFuXCIpO1xuXG5cdFx0XHRcdFx0X3RoaXMuX2RlZmF1bHRDdXJzb3IgPSBcImRlZmF1bHRcIjtcblx0XHRcdFx0XHRfdGhpcy5vdmVybGFpZENhbnZhcy5zdHlsZS5jdXJzb3IgPSBfdGhpcy5fZGVmYXVsdEN1cnNvcjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRfdGhpcy56b29tRW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdF90aGlzLnBhbkVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvL1Jlc2V0IGF4aXNYXG5cdFx0XHRcdGlmIChfdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNYKSB7XG5cdFx0XHRcdFx0X3RoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWC5uZXdWaWV3cG9ydE1pbmltdW0gPSBudWxsO1xuXHRcdFx0XHRcdF90aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1gubmV3Vmlld3BvcnRNYXhpbXVtID0gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vUmVzZXQgYXhpc1lcblx0XHRcdFx0aWYgKF90aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1kpIHtcblx0XHRcdFx0XHRfdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNZLm5ld1ZpZXdwb3J0TWluaW11bSA9IG51bGw7XG5cdFx0XHRcdFx0X3RoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWS5uZXdWaWV3cG9ydE1heGltdW0gPSBudWxsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly9SZXNldCBheGlzWTJcblx0XHRcdFx0aWYgKF90aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1kyKSB7XG5cdFx0XHRcdFx0X3RoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWTIubmV3Vmlld3BvcnRNaW5pbXVtID0gbnVsbDtcblx0XHRcdFx0XHRfdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNZMi5uZXdWaWV3cG9ydE1heGltdW0gPSBudWxsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0X3RoaXMucmVzZXRPdmVybGF5ZWRDYW52YXMoKTtcblxuXHRcdFx0XHRoaWRlKF90aGlzLl96b29tQnV0dG9uLCBfdGhpcy5fcmVzZXRCdXR0b24pO1xuXG5cdFx0XHRcdF90aGlzLl9kaXNwYXRjaFJhbmdlRXZlbnQoXCJyYW5nZUNoYW5naW5nXCIsIFwicmVzZXRcIik7XG5cdFx0XHRcdF90aGlzLnJlbmRlcigpO1xuXHRcdFx0XHRfdGhpcy5fZGlzcGF0Y2hSYW5nZUV2ZW50KFwicmFuZ2VDaGFuZ2VkXCIsIFwicmVzZXRcIik7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5vdmVybGFpZENhbnZhcy5zdHlsZS5jdXJzb3IgPSBfdGhpcy5fZGVmYXVsdEN1cnNvcjtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuem9vbUVuYWJsZWQgJiYgIXRoaXMucGFuRW5hYmxlZCkge1xuXHRcdFx0aWYgKCF0aGlzLl96b29tQnV0dG9uKSB7XG5cdFx0XHRcdHRoaXMuem9vbUVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnBhbkVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0aWYgKF90aGlzLl96b29tQnV0dG9uLmdldEF0dHJpYnV0ZShcInN0YXRlXCIpID09PSBfdGhpcy5fY3VsdHVyZUluZm8uem9vbVRleHQpIHtcblx0XHRcdFx0XHR0aGlzLnBhbkVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuem9vbUVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnpvb21FbmFibGVkID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLnBhbkVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNob3coX3RoaXMuX3pvb21CdXR0b24sIF90aGlzLl9yZXNldEJ1dHRvbik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cblxuXHR9IGVsc2Uge1xuXHRcdHRoaXMuem9vbUVuYWJsZWQgPSBmYWxzZTtcblx0XHR0aGlzLnBhbkVuYWJsZWQgPSBmYWxzZTtcblx0fVxuXG5cblxuXHRpZiAodGhpcy5fbWVudUJ1dHRvbikge1xuXHRcdGlmICh0aGlzLmV4cG9ydEVuYWJsZWQpXG5cdFx0XHRzaG93KHRoaXMuX21lbnVCdXR0b24pO1xuXHRcdGVsc2Vcblx0XHRcdGhpZGUodGhpcy5fbWVudUJ1dHRvbik7XG5cdH0gZWxzZSBpZiAodGhpcy5leHBvcnRFbmFibGVkICYmIGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0dGhpcy5fbWVudUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG5cdFx0c2V0QnV0dG9uU3RhdGUodGhpcywgdGhpcy5fbWVudUJ1dHRvbiwgXCJtZW51XCIpO1xuXHRcdHRoaXMuX3Rvb2xCYXIuYXBwZW5kQ2hpbGQodGhpcy5fbWVudUJ1dHRvbik7XG5cblx0XHRhZGRFdmVudCh0aGlzLl9tZW51QnV0dG9uLCBcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChfdGhpcy5fZHJvcGRvd25NZW51LnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiKSB7XG5cblx0XHRcdFx0aWYgKF90aGlzLl9kcm9wRG93bkNsb3NlVGltZSAmJiAoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIF90aGlzLl9kcm9wRG93bkNsb3NlVGltZS5nZXRUaW1lKCkgPD0gNTAwKSlcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0X3RoaXMuX2Ryb3Bkb3duTWVudS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXHRcdFx0XHRfdGhpcy5fbWVudUJ1dHRvbi5ibHVyKCk7XG5cdFx0XHRcdF90aGlzLl9kcm9wZG93bk1lbnUuZm9jdXMoKTtcblx0XHRcdH1cblxuXHRcdH0sIHRydWUpO1xuXHR9XG5cblxuXHRpZiAoIXRoaXMuX2Ryb3Bkb3duTWVudSAmJiB0aGlzLmV4cG9ydEVuYWJsZWQgJiYgaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHR0aGlzLl9kcm9wZG93bk1lbnUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdHRoaXMuX2Ryb3Bkb3duTWVudS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLCAtMSk7XG5cdFx0dGhpcy5fZHJvcGRvd25NZW51LnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsgLW1vei11c2VyLXNlbGVjdDogbm9uZTsgLW1zLXVzZXItc2VsZWN0OiBub25lOyB1c2VyLXNlbGVjdDogbm9uZTsgY3Vyc29yOiBwb2ludGVyO3JpZ2h0OiAxcHg7dG9wOiAyNXB4O21pbi13aWR0aDogMTIwcHg7b3V0bGluZTogMDtib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXI7Zm9udC1zaXplOiAxNHB4O2ZvbnQtZmFtaWx5OiBDYWxpYnJpLCBWZXJkYW5hLCBzYW5zLXNlcmlmO3BhZGRpbmc6IDVweCAwcHggNXB4IDBweDt0ZXh0LWFsaWduOiBsZWZ0O2JhY2tncm91bmQtY29sb3I6ICNmZmY7bGluZS1oZWlnaHQ6IDIwcHg7Ym94LXNoYWRvdzogMnB4IDJweCAxMHB4ICM4ODg4ODg7XCI7XG5cdFx0X3RoaXMuX2Ryb3Bkb3duTWVudS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0dGhpcy5fdG9vbEJhci5hcHBlbmRDaGlsZCh0aGlzLl9kcm9wZG93bk1lbnUpO1xuXG5cdFx0YWRkRXZlbnQodGhpcy5fZHJvcGRvd25NZW51LCBcImJsdXJcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0aGlkZShfdGhpcy5fZHJvcGRvd25NZW51KTtcblxuXHRcdFx0X3RoaXMuX2Ryb3BEb3duQ2xvc2VUaW1lID0gbmV3IERhdGUoKTtcblx0XHR9LCB0cnVlKTtcblxuXHRcdHZhciBleHBvcnRPcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdGV4cG9ydE9wdGlvbi5zdHlsZS5jc3NUZXh0ID0gXCJwYWRkaW5nOiAycHggMTVweCAycHggMTBweFwiXG5cdFx0ZXhwb3J0T3B0aW9uLmlubmVySFRNTCA9IHRoaXMuX2N1bHR1cmVJbmZvLnNhdmVKUEdUZXh0O1xuXHRcdHRoaXMuX2Ryb3Bkb3duTWVudS5hcHBlbmRDaGlsZChleHBvcnRPcHRpb24pO1xuXG5cdFx0YWRkRXZlbnQoZXhwb3J0T3B0aW9uLCBcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHR0aGlzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwiI0VFRUVFRVwiO1xuXHRcdH0sIHRydWUpO1xuXG5cdFx0YWRkRXZlbnQoZXhwb3J0T3B0aW9uLCBcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdHRoaXMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCJ0cmFuc3BhcmVudFwiO1xuXHRcdH0sIHRydWUpO1xuXG5cdFx0YWRkRXZlbnQoZXhwb3J0T3B0aW9uLCBcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdGV4cG9ydENhbnZhcyhfdGhpcy5jYW52YXMsIFwianBnXCIsIF90aGlzLmV4cG9ydEZpbGVOYW1lKTtcblx0XHRcdGhpZGUoX3RoaXMuX2Ryb3Bkb3duTWVudSk7XG5cdFx0fSwgdHJ1ZSk7XG5cblx0XHR2YXIgZXhwb3J0T3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRleHBvcnRPcHRpb24uc3R5bGUuY3NzVGV4dCA9IFwicGFkZGluZzogMnB4IDE1cHggMnB4IDEwcHhcIlxuXHRcdGV4cG9ydE9wdGlvbi5pbm5lckhUTUwgPSB0aGlzLl9jdWx0dXJlSW5mby5zYXZlUE5HVGV4dDtcblx0XHR0aGlzLl9kcm9wZG93bk1lbnUuYXBwZW5kQ2hpbGQoZXhwb3J0T3B0aW9uKTtcblxuXHRcdGFkZEV2ZW50KGV4cG9ydE9wdGlvbiwgXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhpcy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcIiNFRUVFRUVcIjtcblx0XHR9LCB0cnVlKTtcblxuXHRcdGFkZEV2ZW50KGV4cG9ydE9wdGlvbiwgXCJtb3VzZW91dFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHR0aGlzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwidHJhbnNwYXJlbnRcIjtcblx0XHR9LCB0cnVlKTtcblxuXHRcdGFkZEV2ZW50KGV4cG9ydE9wdGlvbiwgXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRleHBvcnRDYW52YXMoX3RoaXMuY2FudmFzLCBcInBuZ1wiLCBfdGhpcy5leHBvcnRGaWxlTmFtZSk7XG5cdFx0XHRoaWRlKF90aGlzLl9kcm9wZG93bk1lbnUpO1xuXHRcdH0sIHRydWUpO1xuXHR9XG5cblxuXHRpZiAodGhpcy5fdG9vbEJhci5zdHlsZS5kaXNwbGF5ICE9PSBcIm5vbmVcIiAmJiB0aGlzLl96b29tQnV0dG9uKSB7XG5cblx0XHR0aGlzLnBhbkVuYWJsZWQgPyBzZXRCdXR0b25TdGF0ZShfdGhpcywgX3RoaXMuX3pvb21CdXR0b24sIFwiem9vbVwiKSA6IHNldEJ1dHRvblN0YXRlKF90aGlzLCBfdGhpcy5fem9vbUJ1dHRvbiwgXCJwYW5cIik7XG5cblxuXHRcdGlmIChfdGhpcy5fcmVzZXRCdXR0b24uZ2V0QXR0cmlidXRlKFwic3RhdGVcIikgIT09IF90aGlzLl9jdWx0dXJlSW5mby5yZXNldFRleHQpXG5cdFx0XHRzZXRCdXR0b25TdGF0ZShfdGhpcywgX3RoaXMuX3Jlc2V0QnV0dG9uLCBcInJlc2V0XCIpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiAoZGVmYXVsdE9wdGlvbnMuQ2hhcnQuY3JlZGl0SHJlZikgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHR0aGlzLmNyZWRpdEhyZWYgPSBcImh0dHA6Ly9jYW52YXNqcy5jb20vXCI7XG5cdFx0dGhpcy5jcmVkaXRUZXh0ID0gXCJDYW52YXNKUy5jb21cIjtcblx0fSBlbHNlIHtcblx0XHR2YXIgY3JlZGl0VGV4dENoYW5nZWQgPSB0aGlzLnVwZGF0ZU9wdGlvbihcImNyZWRpdFRleHRcIik7XG5cdFx0dmFyIGNyZWRpdEhyZWZDaGFuZ2VkID0gdGhpcy51cGRhdGVPcHRpb24oXCJjcmVkaXRIcmVmXCIpO1xuXHR9XG5cblx0aWYgKHRoaXMucmVuZGVyQ291bnQgPT09IDAgfHwgKGNyZWRpdFRleHRDaGFuZ2VkIHx8IGNyZWRpdEhyZWZDaGFuZ2VkKSkge1xuXHRcdHRoaXMuX2NyZWRpdExpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB0aGlzLmNyZWRpdEhyZWYpO1xuXHRcdHRoaXMuX2NyZWRpdExpbmsuaW5uZXJIVE1MID0gdGhpcy5jcmVkaXRUZXh0O1xuXHR9XG5cblx0aWYgKHRoaXMuY3JlZGl0SHJlZiAmJiB0aGlzLmNyZWRpdFRleHQpIHtcblx0XHRpZiAoIXRoaXMuX2NyZWRpdExpbmsucGFyZW50RWxlbWVudClcblx0XHRcdHRoaXMuX2NhbnZhc0pTQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NyZWRpdExpbmspO1xuXHR9XG5cdGVsc2UgaWYgKHRoaXMuX2NyZWRpdExpbmsucGFyZW50RWxlbWVudClcblx0XHR0aGlzLl9jYW52YXNKU0NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLl9jcmVkaXRMaW5rKTtcblxuXHRpZiAodGhpcy5fb3B0aW9ucy50b29sVGlwICYmIHRoaXMuX3Rvb2xUaXAuX29wdGlvbnMgIT09IHRoaXMuX29wdGlvbnMudG9vbFRpcClcblx0XHR0aGlzLl90b29sVGlwLl9vcHRpb25zID0gdGhpcy5fb3B0aW9ucy50b29sVGlwXG5cblx0Zm9yICh2YXIgcHJvcCBpbiB0aGlzLl90b29sVGlwLl9vcHRpb25zKSB7XG5cblx0XHRpZiAodGhpcy5fdG9vbFRpcC5fb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuXHRcdFx0dGhpcy5fdG9vbFRpcC51cGRhdGVPcHRpb24ocHJvcCk7XG5cdFx0fVxuXHR9XG5cbn1cblxuQ2hhcnQucHJvdG90eXBlLl91cGRhdGVTaXplID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgd2lkdGggPSAwO1xuXHR2YXIgaGVpZ2h0ID0gMDtcblxuXHRpZiAodGhpcy5fb3B0aW9ucy53aWR0aClcblx0XHR3aWR0aCA9IHRoaXMud2lkdGg7XG5cdGVsc2Vcblx0XHR0aGlzLndpZHRoID0gd2lkdGggPSB0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGggPiAwID8gdGhpcy5fY29udGFpbmVyLmNsaWVudFdpZHRoIDogdGhpcy53aWR0aDtcblxuXHRpZiAodGhpcy5fb3B0aW9ucy5oZWlnaHQpXG5cdFx0aGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cdGVsc2Vcblx0XHR0aGlzLmhlaWdodCA9IGhlaWdodCA9IHRoaXMuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQgPiAwID8gdGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodCA6IHRoaXMuaGVpZ2h0O1xuXG5cdGlmICh0aGlzLmNhbnZhcy53aWR0aCAhPT0gd2lkdGggKiBkZXZpY2VQaXhlbEJhY2tpbmdTdG9yZVJhdGlvIHx8IHRoaXMuY2FudmFzLmhlaWdodCAhPT0gaGVpZ2h0ICogZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbykge1xuXHRcdHNldENhbnZhc1NpemUodGhpcy5jYW52YXMsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdFx0c2V0Q2FudmFzU2l6ZSh0aGlzLm92ZXJsYWlkQ2FudmFzLCB3aWR0aCwgaGVpZ2h0KTtcblx0XHRzZXRDYW52YXNTaXplKHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdENhbnZhcywgd2lkdGgsIGhlaWdodCk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gaW5pdGlhbGl6ZSBjaGFydCBvYmplY3RzXG5DaGFydC5wcm90b3R5cGUuX2luaXRpYWxpemUgPSBmdW5jdGlvbiAoKSB7XG5cdC8vLzxzaWduYXR1cmU+XG5cdC8vLzxzdW1tYXJ5PkluaXRpYWxpemVzIENoYXJ0IG9iamVjdHMvc3RhdGUuIENyZWF0ZXMgRGF0YVNlcmllcyBjbGFzcyBpbnN0YW5jZSBmb3IgZWFjaCBEYXRhU2VyaWVzIHByb3ZpZGVkIGJ5IHRoZXIgdXNlci4gU2V0cyB0aGUgQXhpcyBUeXBlIGJhc2VkIG9uIHRoZSB1c2VyIGRhdGE8L3N1bW1hcnk+XG5cdC8vLzwvc2lnbmF0dXJlPlxuXHQvL3RoaXMud2lkdGggPSB0aGlzLndpZHRoO1xuXG5cdGlmICghdGhpcy5fYW5pbWF0b3IpXG5cdFx0dGhpcy5fYW5pbWF0b3IgPSBuZXcgQW5pbWF0b3IodGhpcyk7XG5cdGVsc2Uge1xuXHRcdHRoaXMuX2FuaW1hdG9yLmNhbmNlbEFsbEFuaW1hdGlvbnMoKTtcblx0fVxuXG5cdHRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTtcblxuXHR0aGlzLmRpc2FibGVUb29sVGlwID0gZmFsc2U7XG5cblx0dGhpcy5fYXhlcyA9IFtdO1xuXG5cdHRoaXMucGllRG91Z2hudXRDbGlja0hhbmRsZXIgPSBudWxsO1xuXHQvL3RoaXMuX3RvdWNoQ3VycmVudENvb3JkaW5hdGVzID0gbnVsbDtcblxuXHRpZiAodGhpcy5hbmltYXRpb25SZXF1ZXN0SWQpXG5cdFx0dGhpcy5jYW5jZWxSZXF1ZXN0QW5pbUZyYW1lLmNhbGwod2luZG93LCB0aGlzLmFuaW1hdGlvblJlcXVlc3RJZCk7XG5cblx0dGhpcy5fdXBkYXRlT3B0aW9ucygpO1xuXG5cdHRoaXMuYW5pbWF0ZWRSZW5kZXIgPSBpc0NhbnZhc1N1cHBvcnRlZCAmJiB0aGlzLmFuaW1hdGlvbkVuYWJsZWQgJiYgKHRoaXMucmVuZGVyQ291bnQgPT09IDApO1xuXG5cdHRoaXMuX3VwZGF0ZVNpemUoKTtcblxuXHQvL3RoaXMuX3NlbGVjdGVkQ29sb3JTZXQgPSBjb2xvclNldHNbXCJjb2xvclNldDJcIl07XG5cblx0Ly90aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXHR0aGlzLmNsZWFyQ2FudmFzKCk7XG5cdHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuXG5cdHRoaXMuYXhpc1ggPSBudWxsO1xuXHR0aGlzLmF4aXNZID0gbnVsbDtcblx0dGhpcy5heGlzWTIgPSBudWxsO1xuXHR0aGlzLl9pbmRleExhYmVscyA9IFtdO1xuXHR0aGlzLl9kYXRhSW5SZW5kZXJlZE9yZGVyID0gW107XG5cblx0dGhpcy5fZXZlbnRzID0gW107XG5cdGlmICh0aGlzLl9ldmVudE1hbmFnZXIpXG5cdFx0dGhpcy5fZXZlbnRNYW5hZ2VyLnJlc2V0KCk7XG5cblx0dGhpcy5wbG90SW5mbyA9IHtcblx0XHRheGlzUGxhY2VtZW50OiBudWxsLFxuXHRcdGF4aXNYVmFsdWVUeXBlOiBudWxsLFxuXHRcdHBsb3RUeXBlczogW10vL2FycmF5IG9mIHBsb3RUeXBlOiB7dHlwZTpcIlwiLCBheGlzWVR5cGU6IFwicHJpbWFyeVwiLCBkYXRhU2VyaWVzSW5kZXhlczpbXX1cblx0fTtcblxuXHR0aGlzLmxheW91dE1hbmFnZXIgPSBuZXcgTGF5b3V0TWFuYWdlcigwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMik7XG5cblx0aWYgKHRoaXMucGxvdEFyZWEubGF5b3V0TWFuYWdlcilcblx0XHR0aGlzLnBsb3RBcmVhLmxheW91dE1hbmFnZXIucmVzZXQoKTtcblxuXG5cdHRoaXMuZGF0YSA9IFtdO1xuXHR2YXIgZGF0YVNlcmllc0luZGV4ID0gMDtcblxuXHRmb3IgKHZhciBzZXJpZXMgPSAwOyBzZXJpZXMgPCB0aGlzLl9vcHRpb25zLmRhdGEubGVuZ3RoOyBzZXJpZXMrKykge1xuXHRcdC8vZm9yIChzZXJpZXMgaW4gdGhpcy5fb3B0aW9ucy5kYXRhKSB7XG5cblx0XHRkYXRhU2VyaWVzSW5kZXgrKztcblxuXHRcdGlmICghKCF0aGlzLl9vcHRpb25zLmRhdGFbc2VyaWVzXS50eXBlIHx8IENoYXJ0Ll9zdXBwb3J0ZWRDaGFydFR5cGVzLmluZGV4T2YodGhpcy5fb3B0aW9ucy5kYXRhW3Nlcmllc10udHlwZSkgPj0gMCkpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdHZhciBkYXRhU2VyaWVzID0gbmV3IERhdGFTZXJpZXModGhpcywgdGhpcy5fb3B0aW9ucy5kYXRhW3Nlcmllc10sIHRoaXMudGhlbWUsIGRhdGFTZXJpZXNJbmRleCAtIDEsICsrdGhpcy5fZXZlbnRNYW5hZ2VyLmxhc3RPYmplY3RJZCk7XG5cdFx0aWYgKGRhdGFTZXJpZXMubmFtZSA9PT0gbnVsbClcblx0XHRcdGRhdGFTZXJpZXMubmFtZSA9IFwiRGF0YVNlcmllcyBcIiArIChkYXRhU2VyaWVzSW5kZXgpO1xuXG5cdFx0aWYgKGRhdGFTZXJpZXMuY29sb3IgPT09IG51bGwpIHtcblx0XHRcdGlmICh0aGlzLl9vcHRpb25zLmRhdGEubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRkYXRhU2VyaWVzLl9jb2xvclNldCA9IFt0aGlzLl9zZWxlY3RlZENvbG9yU2V0W2RhdGFTZXJpZXMuaW5kZXggJSB0aGlzLl9zZWxlY3RlZENvbG9yU2V0Lmxlbmd0aF1dO1xuXHRcdFx0XHRkYXRhU2VyaWVzLmNvbG9yID0gdGhpcy5fc2VsZWN0ZWRDb2xvclNldFtkYXRhU2VyaWVzLmluZGV4ICUgdGhpcy5fc2VsZWN0ZWRDb2xvclNldC5sZW5ndGhdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGRhdGFTZXJpZXMudHlwZSA9PT0gXCJsaW5lXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0ZXBMaW5lXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInNwbGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJhcmVhXCJcblx0XHRcdFx0XHR8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RlcEFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3BsaW5lQXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQXJlYTEwMFwiXG5cdFx0XHRcdFx0fHwgZGF0YVNlcmllcy50eXBlID09PSBcInJhbmdlQXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJyYW5nZVNwbGluZUFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwiY2FuZGxlc3RpY2tcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwib2hsY1wiKSB7XG5cdFx0XHRcdFx0ZGF0YVNlcmllcy5fY29sb3JTZXQgPSBbdGhpcy5fc2VsZWN0ZWRDb2xvclNldFswXV07XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdGRhdGFTZXJpZXMuX2NvbG9yU2V0ID0gdGhpcy5fc2VsZWN0ZWRDb2xvclNldDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YVNlcmllcy5fY29sb3JTZXQgPSBbZGF0YVNlcmllcy5jb2xvcl07XG5cdFx0fVxuXG5cdFx0aWYgKGRhdGFTZXJpZXMubWFya2VyU2l6ZSA9PT0gbnVsbCkge1xuXHRcdFx0aWYgKCgoZGF0YVNlcmllcy50eXBlID09PSBcImxpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RlcExpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3BsaW5lXCIpICYmIGRhdGFTZXJpZXMuZGF0YVBvaW50cyAmJiBkYXRhU2VyaWVzLmRhdGFQb2ludHMubGVuZ3RoIDwgdGhpcy53aWR0aCAvIDE2KSB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic2NhdHRlclwiKSB7XG5cdFx0XHRcdC8vaWYgKGRhdGFTZXJpZXMudHlwZSA9PT0gXCJsaW5lXCIpIHtcblx0XHRcdFx0ZGF0YVNlcmllcy5tYXJrZXJTaXplID0gODtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoKGRhdGFTZXJpZXMudHlwZSA9PT0gXCJidWJibGVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic2NhdHRlclwiKSAmJiBkYXRhU2VyaWVzLmRhdGFQb2ludHMpIHtcblx0XHRcdGRhdGFTZXJpZXMuZGF0YVBvaW50cy5zb3J0KGNvbXBhcmVEYXRhUG9pbnRYKVxuXHRcdH1cblxuXHRcdC8vaWYgKGRhdGFTZXJpZXMubWFya2VyQm9yZGVyVGhpY2tuZXNzID09PSBudWxsICYmIGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzY2F0dGVyXCIpIHtcblx0XHQvLyAgICBkYXRhU2VyaWVzLm1hcmtlckJvcmRlclRoaWNrbmVzcyA9IDI7XG5cdFx0Ly99XG5cblx0XHQvL2lmIChkYXRhU2VyaWVzLm1hcmtlclR5cGUgPT09IG51bGwpIHtcblx0XHQvLyAgICBpZiAoZGF0YVNlcmllcy50eXBlID09PSBcImxpbmVcIiAmIGRhdGFTZXJpZXMuZGF0YVBvaW50cy5sZW5ndGggPCA1MDApIHtcblx0XHQvLyAgICAgICAgZGF0YVNlcmllcy5tYXJrZXJUeXBlID0gXCJjaXJjbGVcIjtcblx0XHQvLyAgICB9XG5cdFx0Ly99XG5cblx0XHR0aGlzLmRhdGEucHVzaChkYXRhU2VyaWVzKTtcblxuXHRcdHZhciBzZXJpZXNBeGlzUGxhY2VtZW50ID0gZGF0YVNlcmllcy5heGlzUGxhY2VtZW50O1xuXG5cdFx0Ly9pZiAoaXNEZWJ1Z01vZGUgJiYgd2luZG93LmNvbnNvbGUpXG5cdFx0Ly8gICAgd2luZG93LmNvbnNvbGUubG9nKGRhdGFTZXJpZXMudHlwZSk7XG5cblx0XHR2YXIgZXJyb3JNZXNzYWdlO1xuXG5cdFx0aWYgKHNlcmllc0F4aXNQbGFjZW1lbnQgPT09IFwibm9ybWFsXCIpIHtcblxuXHRcdFx0aWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJ4eVN3YXBwZWRcIikge1xuXHRcdFx0XHRlcnJvck1lc3NhZ2UgPSBcIllvdSBjYW5ub3QgY29tYmluZSBcXFwiXCIgKyBkYXRhU2VyaWVzLnR5cGUgKyBcIlxcXCIgd2l0aCBiYXIgY2hhcnRcIjtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBcIm5vbmVcIikge1xuXHRcdFx0XHRlcnJvck1lc3NhZ2UgPSBcIllvdSBjYW5ub3QgY29tYmluZSBcXFwiXCIgKyBkYXRhU2VyaWVzLnR5cGUgKyBcIlxcXCIgd2l0aCBwaWUgY2hhcnRcIjtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBudWxsKVxuXHRcdFx0XHR0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPSBcIm5vcm1hbFwiO1xuXHRcdH1cblx0XHRlbHNlIGlmIChzZXJpZXNBeGlzUGxhY2VtZW50ID09PSBcInh5U3dhcHBlZFwiKSB7XG5cblx0XHRcdGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwibm9ybWFsXCIpIHtcblx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gXCJZb3UgY2Fubm90IGNvbWJpbmUgXFxcIlwiICsgZGF0YVNlcmllcy50eXBlICsgXCJcXFwiIHdpdGggbGluZSwgYXJlYSwgY29sdW1uIG9yIHBpZSBjaGFydFwiO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwibm9uZVwiKSB7XG5cdFx0XHRcdGVycm9yTWVzc2FnZSA9IFwiWW91IGNhbm5vdCBjb21iaW5lIFxcXCJcIiArIGRhdGFTZXJpZXMudHlwZSArIFwiXFxcIiB3aXRoIHBpZSBjaGFydFwiO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IG51bGwpXG5cdFx0XHRcdHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9IFwieHlTd2FwcGVkXCI7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHNlcmllc0F4aXNQbGFjZW1lbnQgPT0gXCJub25lXCIpIHtcblxuXHRcdFx0aWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJub3JtYWxcIikge1xuXHRcdFx0XHRlcnJvck1lc3NhZ2UgPSBcIllvdSBjYW5ub3QgY29tYmluZSBcXFwiXCIgKyBkYXRhU2VyaWVzLnR5cGUgKyBcIlxcXCIgd2l0aCBsaW5lLCBhcmVhLCBjb2x1bW4gb3IgYmFyIGNoYXJ0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJ4eVN3YXBwZWRcIikge1xuXHRcdFx0XHRlcnJvck1lc3NhZ2UgPSBcIllvdSBjYW5ub3QgY29tYmluZSBcXFwiXCIgKyBkYXRhU2VyaWVzLnR5cGUgKyBcIlxcXCIgd2l0aCBiYXIgY2hhcnRcIjtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBudWxsKVxuXHRcdFx0XHR0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPSBcIm5vbmVcIjtcblx0XHR9XG5cblx0XHRpZiAoZXJyb3JNZXNzYWdlICYmIHdpbmRvdy5jb25zb2xlKSB7XG5cdFx0XHR3aW5kb3cuY29uc29sZS5sb2coZXJyb3JNZXNzYWdlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH1cblxuXHQvL2lmIChpc0RlYnVnTW9kZSAmJiB3aW5kb3cuY29uc29sZSkge1xuXHQvLyAgICB3aW5kb3cuY29uc29sZS5sb2coXCJ4TWluOiBcIiArIHRoaXMucGxvdEluZm8udmlld1BvcnRYTWluICsgXCI7IHhNYXg6IFwiICsgdGhpcy5wbG90SW5mby52aWV3UG9ydFhNYXggKyBcIjsgeU1pbjogXCIgKyB0aGlzLnBsb3RJbmZvLnlNaW4gKyBcIjsgeU1heDogXCIgKyB0aGlzLnBsb3RJbmZvLnlNYXgpO1xuXHQvL31cblxuXHR0aGlzLl9vYmplY3RzSW5pdGlhbGl6ZWQgPSB0cnVlO1xufVxuXG4vL2luZGV4T2YgaXMgbm90IHN1cHBvcnRlZCBpbiBJRTgtXG5DaGFydC5fc3VwcG9ydGVkQ2hhcnRUeXBlcyA9IGFkZEFycmF5SW5kZXhPZihbXCJsaW5lXCIsIFwic3RlcExpbmVcIiwgXCJzcGxpbmVcIiwgXCJjb2x1bW5cIiwgXCJhcmVhXCIsIFwic3RlcEFyZWFcIiwgXCJzcGxpbmVBcmVhXCIsIFwiYmFyXCIsIFwiYnViYmxlXCIsIFwic2NhdHRlclwiLFxuXHRcInN0YWNrZWRDb2x1bW5cIiwgXCJzdGFja2VkQ29sdW1uMTAwXCIsIFwic3RhY2tlZEJhclwiLCBcInN0YWNrZWRCYXIxMDBcIixcblx0XCJzdGFja2VkQXJlYVwiLCBcInN0YWNrZWRBcmVhMTAwXCIsXG5cdFwiY2FuZGxlc3RpY2tcIixcblx0XCJvaGxjXCIsXG5cdFwicmFuZ2VDb2x1bW5cIixcblx0XCJyYW5nZUJhclwiLFxuXHRcInJhbmdlQXJlYVwiLFxuXHRcInJhbmdlU3BsaW5lQXJlYVwiLFxuXHRcInBpZVwiLCBcImRvdWdobnV0XCIsIFwiZnVubmVsXCJcbl0pO1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblxuXHRpZiAob3B0aW9ucylcblx0XHR0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcblxuXHR0aGlzLl9pbml0aWFsaXplKCk7XG5cdHZhciBwbG90QXJlYUVsZW1lbnRzID0gW107IC8vRWxlbWVudHMgdG8gYmUgcmVuZGVyZWQgaW5zaWRlIHRoZSBwbG90QXJlYVxuXG5cdC8vQ3JlYXRlIFByaW1hcnkgYW5kIFNlY29uZGFyeSBheGlzIGFuZCBhc3NpZ24gdGhlbSB0byB0aGUgc2VyaWVzXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBcIm5vcm1hbFwiIHx8IHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJ4eVN3YXBwZWRcIikge1xuXHRcdFx0aWYgKCF0aGlzLmRhdGFbaV0uYXhpc1lUeXBlIHx8IHRoaXMuZGF0YVtpXS5heGlzWVR5cGUgPT09IFwicHJpbWFyeVwiKSB7XG5cdFx0XHRcdGlmICghdGhpcy5heGlzWSkge1xuXG5cdFx0XHRcdFx0aWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJub3JtYWxcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5fYXhlcy5wdXNoKHRoaXMuYXhpc1kgPSBuZXcgQXhpcyh0aGlzLCB0aGlzLl9vcHRpb25zLmF4aXNZLCBcImF4aXNZXCIsIFwibGVmdFwiKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2UgaWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJ4eVN3YXBwZWRcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5fYXhlcy5wdXNoKHRoaXMuYXhpc1kgPSBuZXcgQXhpcyh0aGlzLCB0aGlzLl9vcHRpb25zLmF4aXNZLCBcImF4aXNZXCIsIFwiYm90dG9tXCIpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5kYXRhW2ldLmF4aXNZID0gdGhpcy5heGlzWTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKHRoaXMuZGF0YVtpXS5heGlzWVR5cGUgPT09IFwic2Vjb25kYXJ5XCIpIHtcblx0XHRcdFx0aWYgKCF0aGlzLmF4aXNZMikge1xuXHRcdFx0XHRcdGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwibm9ybWFsXCIpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2F4ZXMucHVzaCh0aGlzLmF4aXNZMiA9IG5ldyBBeGlzKHRoaXMsIHRoaXMuX29wdGlvbnMuYXhpc1kyLCBcImF4aXNZXCIsIFwicmlnaHRcIikpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwieHlTd2FwcGVkXCIpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2F4ZXMucHVzaCh0aGlzLmF4aXNZMiA9IG5ldyBBeGlzKHRoaXMsIHRoaXMuX29wdGlvbnMuYXhpc1kyLCBcImF4aXNZXCIsIFwidG9wXCIpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5kYXRhW2ldLmF4aXNZID0gdGhpcy5heGlzWTI7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghdGhpcy5heGlzWCkge1xuXHRcdFx0XHRpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBcIm5vcm1hbFwiKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXhlcy5wdXNoKHRoaXMuYXhpc1ggPSBuZXcgQXhpcyh0aGlzLCB0aGlzLl9vcHRpb25zLmF4aXNYLCBcImF4aXNYXCIsIFwiYm90dG9tXCIpKTtcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwieHlTd2FwcGVkXCIpIHtcblx0XHRcdFx0XHR0aGlzLl9heGVzLnB1c2godGhpcy5heGlzWCA9IG5ldyBBeGlzKHRoaXMsIHRoaXMuX29wdGlvbnMuYXhpc1gsIFwiYXhpc1hcIiwgXCJsZWZ0XCIpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmRhdGFbaV0uYXhpc1ggPSB0aGlzLmF4aXNYO1xuXHRcdH1cblx0fVxuXG5cdC8vSWYgQm90aCBQcmltYXJ5IGFuZCBTZWNvbmRhcnkgYXhpcyBhcmUgcHJlc2VudCwgZGlzYWJsZSBncmlkbGluZXMgZm9yIG9uZSBvZiB0aGVtIHVubGVzcyB0aGUgdXNlciBoYXMgc2V0IHZhbHVlIGZvciBib3RoXG5cdGlmICh0aGlzLmF4aXNZICYmIHRoaXMuYXhpc1kyKSB7XG5cdFx0aWYgKHRoaXMuYXhpc1kuZ3JpZFRoaWNrbmVzcyA+IDAgJiYgdHlwZW9mICh0aGlzLmF4aXNZMi5fb3B0aW9ucy5ncmlkVGhpY2tuZXNzKSA9PT0gXCJ1bmRlZmluZWRcIilcblx0XHRcdHRoaXMuYXhpc1kyLmdyaWRUaGlja25lc3MgPSAwO1xuXHRcdGVsc2UgaWYgKHRoaXMuYXhpc1kyLmdyaWRUaGlja25lc3MgPiAwICYmIHR5cGVvZiAodGhpcy5heGlzWS5fb3B0aW9ucy5ncmlkVGhpY2tuZXNzKSA9PT0gXCJ1bmRlZmluZWRcIilcblx0XHRcdHRoaXMuYXhpc1kuZ3JpZFRoaWNrbmVzcyA9IDA7XG5cdH1cblxuXG5cdC8vU2hvdyB0b29sQmFyIHdoZW4gdmlld3BvcnRNaW5pbXVtL3ZpZXdwb3J0TWF4aW11bSBhcmUgc2V0XG5cdHZhciBzaG93VG9vbEJhciA9IGZhbHNlO1xuXHRpZiAodGhpcy5fYXhlcy5sZW5ndGggPiAwICYmICh0aGlzLnpvb21FbmFibGVkIHx8IHRoaXMucGFuRW5hYmxlZCkpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2F4ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICh0aGlzLl9heGVzW2ldLnZpZXdwb3J0TWluaW11bSAhPT0gbnVsbCB8fCB0aGlzLl9heGVzW2ldLnZpZXdwb3J0TWF4aW11bSAhPT0gbnVsbCkge1xuXHRcdFx0XHRzaG93VG9vbEJhciA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChzaG93VG9vbEJhcikge1xuXHRcdHNob3codGhpcy5fem9vbUJ1dHRvbiwgdGhpcy5fcmVzZXRCdXR0b24pO1xuXHR9IGVsc2Uge1xuXHRcdGhpZGUodGhpcy5fem9vbUJ1dHRvbiwgdGhpcy5fcmVzZXRCdXR0b24pO1xuXHR9XG5cblxuXHR0aGlzLl9wcm9jZXNzRGF0YSgpOy8vIENhdGVnb3Jpc2VzIHRoZSBkYXRhU2VyaWVzIGFuZCBjYWxjdWxhdGVzIG1pbiwgbWF4IGFuZCBvdGhlciB2YWx1ZXNcblxuXHRpZiAodGhpcy5fb3B0aW9ucy50aXRsZSkge1xuXHRcdHRoaXMuX3RpdGxlID0gbmV3IFRpdGxlKHRoaXMsIHRoaXMuX29wdGlvbnMudGl0bGUpO1xuXG5cdFx0aWYgKCF0aGlzLl90aXRsZS5kb2NrSW5zaWRlUGxvdEFyZWEpXG5cdFx0XHR0aGlzLl90aXRsZS5yZW5kZXIoKTtcblx0XHRlbHNlXG5cdFx0XHRwbG90QXJlYUVsZW1lbnRzLnB1c2godGhpcy5fdGl0bGUpO1xuXHR9XG5cblx0aWYgKHRoaXMuX29wdGlvbnMuc3VidGl0bGVzKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vcHRpb25zLnN1YnRpdGxlcy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHR0aGlzLnN1YnRpdGxlcyA9IFtdO1xuXG5cdFx0XHR2YXIgc3VidGl0bGUgPSBuZXcgU3VidGl0bGUodGhpcywgdGhpcy5fb3B0aW9ucy5zdWJ0aXRsZXNbaV0pO1xuXHRcdFx0dGhpcy5zdWJ0aXRsZXMucHVzaChzdWJ0aXRsZSk7XG5cblx0XHRcdGlmICghc3VidGl0bGUuZG9ja0luc2lkZVBsb3RBcmVhKVxuXHRcdFx0XHRzdWJ0aXRsZS5yZW5kZXIoKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0cGxvdEFyZWFFbGVtZW50cy5wdXNoKHN1YnRpdGxlKTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLmxlZ2VuZCA9IG5ldyBMZWdlbmQodGhpcywgdGhpcy5fb3B0aW9ucy5sZWdlbmQsIHRoaXMudGhlbWUpO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdGlmICh0aGlzLmRhdGFbaV0uc2hvd0luTGVnZW5kIHx8IHRoaXMuZGF0YVtpXS50eXBlID09PSBcInBpZVwiIHx8IHRoaXMuZGF0YVtpXS50eXBlID09PSBcImRvdWdobnV0XCIpIHtcblx0XHRcdHRoaXMubGVnZW5kLmRhdGFTZXJpZXMucHVzaCh0aGlzLmRhdGFbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGlmICghdGhpcy5sZWdlbmQuZG9ja0luc2lkZVBsb3RBcmVhKVxuXHRcdHRoaXMubGVnZW5kLnJlbmRlcigpO1xuXHRlbHNlXG5cdFx0cGxvdEFyZWFFbGVtZW50cy5wdXNoKHRoaXMubGVnZW5kKTtcblxuXHQvL1RCSTogUmV2aXNpdCBhbmQgY2hlY2sgaWYgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgZW5vdWdoLlxuXHRpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBcIm5vcm1hbFwiIHx8IHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJ4eVN3YXBwZWRcIikge1xuXG5cdFx0Ly92YXIgZnJlZVNwYWNlID0gdGhpcy5sYXlvdXRNYW5hZ2VyLmdldEZyZWVTcGFjZSgpO1xuXG5cdFx0QXhpcy5zZXRMYXlvdXRBbmRSZW5kZXIodGhpcy5heGlzWCwgdGhpcy5heGlzWSwgdGhpcy5heGlzWTIsIHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCwgdGhpcy5sYXlvdXRNYW5hZ2VyLmdldEZyZWVTcGFjZSgpKTtcblx0fSBlbHNlIGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwibm9uZVwiKSB7XG5cdFx0Ly9JbiBjYXNlIG9mIGNoYXJ0cyB3aXRoIGF4aXMgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGluc2lkZSBzZXRMYXlvdXRBbmRSZW5kZXJcblx0XHR0aGlzLnByZXBhcmVQbG90QXJlYSgpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHZhciBpbmRleCA9IDA7XG5cdGZvciAoaW5kZXggaW4gcGxvdEFyZWFFbGVtZW50cykge1xuXHRcdGlmKHBsb3RBcmVhRWxlbWVudHMuaGFzT3duUHJvcGVydHkoaW5kZXgpKVxuXHRcdHBsb3RBcmVhRWxlbWVudHNbaW5kZXhdLnJlbmRlcigpO1xuXHR9XG5cblx0dmFyIGFuaW1hdGlvbnMgPSBbXTtcblx0aWYgKHRoaXMuYW5pbWF0ZWRSZW5kZXIpIHtcblx0XHR2YXIgaW5pdGlhbFN0YXRlID0gY3JlYXRlQ2FudmFzKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblx0XHR2YXIgaW5pdGlhbFN0YXRlQ3R4ID0gaW5pdGlhbFN0YXRlLmdldENvbnRleHQoXCIyZFwiKTtcblx0XHRpbml0aWFsU3RhdGVDdHguZHJhd0ltYWdlKHRoaXMuY2FudmFzLCAwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGxvdEluZm8ucGxvdFR5cGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHBsb3RUeXBlID0gdGhpcy5wbG90SW5mby5wbG90VHlwZXNbaV07XG5cblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RUeXBlLnBsb3RVbml0cy5sZW5ndGg7IGorKykge1xuXG5cdFx0XHR2YXIgcGxvdFVuaXQgPSBwbG90VHlwZS5wbG90VW5pdHNbal07XG5cdFx0XHR2YXIgYW5pbWF0aW9uSW5mbyA9IG51bGw7XG5cblx0XHRcdHBsb3RVbml0LnRhcmdldENhbnZhcyA9IG51bGw7IC8vSW4gY2FzZSBjaGFydCB1cGRhdGVzIGJlZm9yZSB0aGUgYW5pbWF0aW9uIGlzIGNvbXBsZXRlLCBwcmV2aW91cyBjYW52YXNlcyBuZWVkIHRvIGJlIHJlbW92ZWRcblxuXHRcdFx0aWYgKHRoaXMuYW5pbWF0ZWRSZW5kZXIpIHtcblx0XHRcdFx0cGxvdFVuaXQudGFyZ2V0Q2FudmFzID0gY3JlYXRlQ2FudmFzKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblx0XHRcdFx0cGxvdFVuaXQudGFyZ2V0Q2FudmFzQ3R4ID0gcGxvdFVuaXQudGFyZ2V0Q2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBsb3RVbml0LnR5cGUgPT09IFwibGluZVwiKVxuXHRcdFx0XHRhbmltYXRpb25JbmZvID0gdGhpcy5yZW5kZXJMaW5lKHBsb3RVbml0KTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LnR5cGUgPT09IFwic3RlcExpbmVcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyU3RlcExpbmUocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJzcGxpbmVcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyU3BsaW5lKHBsb3RVbml0KTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LnR5cGUgPT09IFwiY29sdW1uXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlckNvbHVtbihwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcImJhclwiKVxuXHRcdFx0XHRhbmltYXRpb25JbmZvID0gdGhpcy5yZW5kZXJCYXIocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJhcmVhXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlckFyZWEocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJzdGVwQXJlYVwiKVxuXHRcdFx0XHRhbmltYXRpb25JbmZvID0gdGhpcy5yZW5kZXJTdGVwQXJlYShwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcInNwbGluZUFyZWFcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyU3BsaW5lQXJlYShwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcInN0YWNrZWRDb2x1bW5cIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyU3RhY2tlZENvbHVtbihwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcInN0YWNrZWRDb2x1bW4xMDBcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyU3RhY2tlZENvbHVtbjEwMChwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcInN0YWNrZWRCYXJcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyU3RhY2tlZEJhcihwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcInN0YWNrZWRCYXIxMDBcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyU3RhY2tlZEJhcjEwMChwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcInN0YWNrZWRBcmVhXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlclN0YWNrZWRBcmVhKHBsb3RVbml0KTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LnR5cGUgPT09IFwic3RhY2tlZEFyZWExMDBcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyU3RhY2tlZEFyZWExMDAocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJidWJibGVcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlckJ1YmJsZShwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcInNjYXR0ZXJcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyU2NhdHRlcihwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcInBpZVwiKVxuXHRcdFx0XHR0aGlzLnJlbmRlclBpZShwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcImRvdWdobnV0XCIpXG5cdFx0XHRcdHRoaXMucmVuZGVyUGllKHBsb3RVbml0KTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LnR5cGUgPT09IFwiY2FuZGxlc3RpY2tcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyQ2FuZGxlc3RpY2socGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJvaGxjXCIpXG5cdFx0XHRcdGFuaW1hdGlvbkluZm8gPSB0aGlzLnJlbmRlckNhbmRsZXN0aWNrKHBsb3RVbml0KTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LnR5cGUgPT09IFwicmFuZ2VDb2x1bW5cIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyUmFuZ2VDb2x1bW4ocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJyYW5nZUJhclwiKVxuXHRcdFx0XHRhbmltYXRpb25JbmZvID0gdGhpcy5yZW5kZXJSYW5nZUJhcihwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcInJhbmdlQXJlYVwiKVxuXHRcdFx0XHRhbmltYXRpb25JbmZvID0gdGhpcy5yZW5kZXJSYW5nZUFyZWEocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJyYW5nZVNwbGluZUFyZWFcIilcblx0XHRcdFx0YW5pbWF0aW9uSW5mbyA9IHRoaXMucmVuZGVyUmFuZ2VTcGxpbmVBcmVhKHBsb3RVbml0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGsrKykge1xuXHRcdFx0XHR0aGlzLl9kYXRhSW5SZW5kZXJlZE9yZGVyLnB1c2godGhpcy5kYXRhW3Bsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2tdXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmFuaW1hdGVkUmVuZGVyICYmIGFuaW1hdGlvbkluZm8pXG5cdFx0XHRcdGFuaW1hdGlvbnMucHVzaChhbmltYXRpb25JbmZvKTtcblx0XHR9XG5cdH1cblxuXHRpZiAodGhpcy5hbmltYXRlZFJlbmRlciAmJiB0aGlzLl9pbmRleExhYmVscy5sZW5ndGggPiAwKSB7XG5cdFx0dmFyIGluZGV4TGFiZWxDYW52YXMgPSBjcmVhdGVDYW52YXModGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXHRcdHZhciBpbmRleExhYmVsQ2FudmFzQ3R4ID0gaW5kZXhMYWJlbENhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG5cdFx0YW5pbWF0aW9ucy5wdXNoKHRoaXMucmVuZGVySW5kZXhMYWJlbHMoaW5kZXhMYWJlbENhbnZhc0N0eCkpO1xuXHR9XG5cblx0dmFyIF90aGlzID0gdGhpcztcblxuXHRpZiAoYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0Ly92YXIgYW5pbWF0aW9uQ291bnQgPSAwO1xuXHRcdF90aGlzLmRpc2FibGVUb29sVGlwID0gdHJ1ZTtcblx0XHRfdGhpcy5fYW5pbWF0b3IuYW5pbWF0ZSgyMDAsIF90aGlzLmFuaW1hdGlvbkR1cmF0aW9uLCBmdW5jdGlvbiAoZnJhY3Rpb25Db21wbGV0ZSkge1xuXG5cdFx0XHQvL2NvbnNvbGUubG9nKGZyYWN0aW9uQ29tcGxldGUpO1xuXHRcdFx0Ly9hbmltYXRpb25Db3VudCsrO1xuXG5cdFx0XHRfdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIF90aGlzLndpZHRoLCBfdGhpcy5oZWlnaHQpO1xuXG5cblx0XHRcdC8vICBfdGhpcy5jdHguZHJhd0ltYWdlKGluaXRpYWxTdGF0ZSwgMCwgMCwgX3RoaXMud2lkdGggKiBkZXZpY2VQaXhlbEJhY2tpbmdTdG9yZVJhdGlvLCBfdGhpcy5oZWlnaHQgKiBkZXZpY2VQaXhlbEJhY2tpbmdTdG9yZVJhdGlvLCAwLCAwLCBfdGhpcy53aWR0aCwgX3RoaXMuaGVpZ2h0KTtcblx0XHRcdF90aGlzLmN0eC5kcmF3SW1hZ2UoaW5pdGlhbFN0YXRlLCAwLCAwLCBNYXRoLmZsb29yKF90aGlzLndpZHRoICogZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbyksIE1hdGguZmxvb3IoX3RoaXMuaGVpZ2h0ICogZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbyksIDAsIDAsIF90aGlzLndpZHRoLCBfdGhpcy5oZWlnaHQpO1xuXG5cdFx0XHRmb3IgKHZhciBsID0gMDsgbCA8IGFuaW1hdGlvbnMubGVuZ3RoOyBsKyspIHtcblxuXHRcdFx0XHRhbmltYXRpb25JbmZvID0gYW5pbWF0aW9uc1tsXTtcblxuXHRcdFx0XHRpZiAoZnJhY3Rpb25Db21wbGV0ZSA8IDEgJiYgdHlwZW9mIChhbmltYXRpb25JbmZvLnN0YXJ0VGltZVBlcmNlbnQpICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdFx0aWYgKGZyYWN0aW9uQ29tcGxldGUgPj0gYW5pbWF0aW9uSW5mby5zdGFydFRpbWVQZXJjZW50KSB7XG5cdFx0XHRcdFx0XHQvL2FuaW1hdGlvbkluZm8uYW5pbWF0aW9uQ2FsbGJhY2soQW5pbWF0aW9uSGVscGVyLmVhc2luZy5saW5lYXIoZnJhY3Rpb25Db21wbGV0ZSAtIGFuaW1hdGlvbkluZm8uc3RhcnRUaW1lUGVyY2VudCwgMCwgMSwgMSAtIGFuaW1hdGlvbkluZm8uc3RhcnRUaW1lUGVyY2VudCksIGFuaW1hdGlvbkluZm8pO1xuXG5cdFx0XHRcdFx0XHRhbmltYXRpb25JbmZvLmFuaW1hdGlvbkNhbGxiYWNrKGFuaW1hdGlvbkluZm8uZWFzaW5nRnVuY3Rpb24oZnJhY3Rpb25Db21wbGV0ZSAtIGFuaW1hdGlvbkluZm8uc3RhcnRUaW1lUGVyY2VudCwgMCwgMSwgMSAtIGFuaW1hdGlvbkluZm8uc3RhcnRUaW1lUGVyY2VudCksIGFuaW1hdGlvbkluZm8pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGFuaW1hdGlvbkluZm8uYW5pbWF0aW9uQ2FsbGJhY2soYW5pbWF0aW9uSW5mby5lYXNpbmdGdW5jdGlvbihmcmFjdGlvbkNvbXBsZXRlLCAwLCAxLCAxKSwgYW5pbWF0aW9uSW5mbyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0X3RoaXMuZGlzcGF0Y2hFdmVudChcImRhdGFBbmltYXRpb25JdGVyYXRpb25FbmRcIixcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRjaGFydDogX3RoaXNcblx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdH0sIGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0YW5pbWF0aW9ucyA9IFtdO1xuXG5cdFx0XHR2YXIgY291bnQgPSAwO1xuXG5cdFx0XHQvL0RlbGV0ZSBhbGwgcmVuZGVyIHRhcmdldCBjYW52YXNlcyB1c2VkIGZvciBhbmltYXRpb24uXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IF90aGlzLnBsb3RJbmZvLnBsb3RUeXBlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgcGxvdFR5cGUgPSBfdGhpcy5wbG90SW5mby5wbG90VHlwZXNbaV07XG5cblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VHlwZS5wbG90VW5pdHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHR2YXIgcGxvdFVuaXQgPSBwbG90VHlwZS5wbG90VW5pdHNbal07XG5cdFx0XHRcdFx0cGxvdFVuaXQudGFyZ2V0Q2FudmFzID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpbml0aWFsU3RhdGUgPSBudWxsO1xuXHRcdFx0X3RoaXMuZGlzYWJsZVRvb2xUaXAgPSBmYWxzZTtcblx0XHRcdC8vY29uc29sZS5sb2coXCIqKioqKioqKioqKiBBbmltYXRpb24gQ29tcGxldGUgLSBcIiArIGFuaW1hdGlvbkNvdW50ICsgXCIgKioqKioqKioqKipcIik7XG5cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRpZiAoX3RoaXMuX2luZGV4TGFiZWxzLmxlbmd0aCA+IDApXG5cdFx0XHRfdGhpcy5yZW5kZXJJbmRleExhYmVscygpO1xuXG5cdFx0X3RoaXMuZGlzcGF0Y2hFdmVudChcImRhdGFBbmltYXRpb25JdGVyYXRpb25FbmRcIixcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNoYXJ0OiBfdGhpc1xuXHRcdFx0XHR9KTtcblx0fVxuXG5cdHRoaXMuYXR0YWNoUGxvdEFyZWFFdmVudEhhbmRsZXJzKCk7XG5cblx0aWYgKCF0aGlzLnpvb21FbmFibGVkICYmICF0aGlzLnBhbkVuYWJsZWQgJiYgdGhpcy5fem9vbUJ1dHRvbiAmJiB0aGlzLl96b29tQnV0dG9uLnN0eWxlLmRpc3BsYXkgIT09IFwibm9uZVwiKSB7XG5cdFx0aGlkZSh0aGlzLl96b29tQnV0dG9uLCB0aGlzLl9yZXNldEJ1dHRvbik7XG5cdH1cblxuXHR0aGlzLl90b29sVGlwLl91cGRhdGVUb29sVGlwKCk7XG5cblx0dGhpcy5yZW5kZXJDb3VudCsrO1xuXG5cdC8vaWYgKHdpbmRvdy5jb25zb2xlKSB7XG5cdC8vICAgIHdpbmRvdy5jb25zb2xlLmxvZyhuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIGR0KTtcblx0Ly99XG5cblx0aWYgKGlzRGVidWdNb2RlKSB7XG5cblx0XHR2YXIgX3RoaXMgPSB0aGlzO1xuXHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGdob3N0Q2FudmFzQ29weSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZ2hvc3RDYW52YXNDb3B5XCIpO1xuXG5cdFx0XHRpZiAoZ2hvc3RDYW52YXNDb3B5KSB7XG5cdFx0XHRcdC8vY29uc29sZS5sb2coZ2hvc3RDYW52YXNDb3B5LmNsaWVudFdpZHRoKTtcblx0XHRcdFx0c2V0Q2FudmFzU2l6ZShnaG9zdENhbnZhc0NvcHksIF90aGlzLndpZHRoLCBfdGhpcy5oZWlnaHQpO1xuXHRcdFx0XHR2YXIgZ2hvc3RDYW52YXNDb3B5Q3R4ID0gZ2hvc3RDYW52YXNDb3B5LmdldENvbnRleHQoXCIyZFwiKTtcblxuXHRcdFx0XHQvL2dob3N0Q2FudmFzQ29weUN0eC5zY2FsZSgxLCAxKTtcblx0XHRcdFx0Ly92YXIgaW1hZ2VEYXRhID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4LmdldEltYWdlRGF0YSgwLCAwLCB0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGgsIHRoaXMuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQpO1xuXHRcdFx0XHQvL3RoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eC5kcmF3SW1hZ2UodGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q2FudmFzLCAwLCAwKTtcblx0XHRcdFx0Ly90aGlzLmN0eC5kcmF3SW1hZ2UodGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q2FudmFzLCAwLCAwKTtcblxuXHRcdFx0XHRnaG9zdENhbnZhc0NvcHlDdHguZHJhd0ltYWdlKF90aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDYW52YXMsIDAsIDApO1xuXHRcdFx0XHQvL190aGlzLl9jYW52YXNKU0NvbnRhaW5lci5hcHBlbmRDaGlsZChfdGhpcy5fZXZlbnRNYW5hZ2VyLmdob3N0Q2FudmFzKTtcblx0XHRcdFx0Ly9fdGhpcy5vdmVybGFpZENhbnZhc0N0eC5kcmF3SW1hZ2UoX3RoaXMuX2V2ZW50TWFuYWdlci5naG9zdENhbnZhcywgMCwgMCk7XG5cdFx0XHR9XG5cdFx0fSwgMjAwMCk7XG5cdH1cbn1cblxuQ2hhcnQucHJvdG90eXBlLmF0dGFjaFBsb3RBcmVhRXZlbnRIYW5kbGVycyA9IGZ1bmN0aW9uICgpIHtcblxuXHQvL3RoaXMuX3Rvb2xCYXIuc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lXCI7XG5cblx0dGhpcy5hdHRhY2hFdmVudCh7XG5cdFx0Y29udGV4dDogdGhpcyxcblx0XHRjaGFydDogdGhpcyxcblx0XHRtb3VzZWRvd246IHRoaXMuX3Bsb3RBcmVhTW91c2VEb3duLFxuXHRcdG1vdXNldXA6IHRoaXMuX3Bsb3RBcmVhTW91c2VVcCxcblx0XHRtb3VzZW1vdmU6IHRoaXMuX3Bsb3RBcmVhTW91c2VNb3ZlLFxuXHRcdGN1cnNvcjogdGhpcy56b29tRW5hYmxlZCA/IFwiY29sLXJlc2l6ZVwiIDogXCJtb3ZlXCIsXG5cdFx0Y3Vyc29yOiB0aGlzLnBhbkVuYWJsZWQgPyBcIm1vdmVcIiA6IFwiZGVmYXVsdFwiLFxuXHRcdGNhcHR1cmU6IHRydWUsXG5cdFx0Ym91bmRzOiB0aGlzLnBsb3RBcmVhXG5cdH0pO1xuXG59XG5cbkNoYXJ0LnByb3RvdHlwZS5jYXRlZ29yaXNlRGF0YVNlcmllcyA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIGRhdGFTZXJpZXMgPSBcIlwiO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtpXVxuXHRcdGlmICghZGF0YVNlcmllcy5kYXRhUG9pbnRzIHx8IGRhdGFTZXJpZXMuZGF0YVBvaW50cy5sZW5ndGggPT09IDAgfHwgIWRhdGFTZXJpZXMudmlzaWJsZSlcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0aWYgKENoYXJ0Ll9zdXBwb3J0ZWRDaGFydFR5cGVzLmluZGV4T2YoZGF0YVNlcmllcy50eXBlKSA+PSAwKSB7XG5cblx0XHRcdHZhciBwbG90VHlwZSA9IG51bGw7XG5cdFx0XHR2YXIgcGxvdFR5cGVFeGlzdHMgPSBmYWxzZTtcblxuXHRcdFx0dmFyIHBsb3RVbml0ID0gbnVsbDtcblx0XHRcdHZhciBwbG90VW5pdEV4aXN0cyA9IGZhbHNlO1xuXG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMucGxvdEluZm8ucGxvdFR5cGVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGlmICh0aGlzLnBsb3RJbmZvLnBsb3RUeXBlc1tqXS50eXBlID09PSBkYXRhU2VyaWVzLnR5cGUpIHtcblx0XHRcdFx0XHRwbG90VHlwZUV4aXN0cyA9IHRydWU7XG5cdFx0XHRcdFx0dmFyIHBsb3RUeXBlID0gdGhpcy5wbG90SW5mby5wbG90VHlwZXNbal07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCFwbG90VHlwZUV4aXN0cykge1xuXHRcdFx0XHRwbG90VHlwZSA9IHtcblx0XHRcdFx0XHR0eXBlOiBkYXRhU2VyaWVzLnR5cGUsXG5cdFx0XHRcdFx0dG90YWxEYXRhU2VyaWVzOiAwLFxuXHRcdFx0XHRcdHBsb3RVbml0czogW11cblx0XHRcdFx0fTtcblx0XHRcdFx0dGhpcy5wbG90SW5mby5wbG90VHlwZXMucHVzaChwbG90VHlwZSlcblx0XHRcdH1cblxuXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VHlwZS5wbG90VW5pdHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0aWYgKHBsb3RUeXBlLnBsb3RVbml0c1tqXS5heGlzWVR5cGUgPT09IGRhdGFTZXJpZXMuYXhpc1lUeXBlKSB7XG5cdFx0XHRcdFx0cGxvdFVuaXRFeGlzdHMgPSB0cnVlO1xuXHRcdFx0XHRcdHZhciBwbG90VW5pdCA9IHBsb3RUeXBlLnBsb3RVbml0c1tqXTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXBsb3RVbml0RXhpc3RzKSB7XG5cdFx0XHRcdHBsb3RVbml0ID0ge1xuXHRcdFx0XHRcdHR5cGU6IGRhdGFTZXJpZXMudHlwZSxcblx0XHRcdFx0XHRwcmV2aW91c0RhdGFTZXJpZXNDb3VudDogMCwgLy90byBiZSBzZXQgbmV4dFxuXHRcdFx0XHRcdGluZGV4OiBwbG90VHlwZS5wbG90VW5pdHMubGVuZ3RoLFxuXHRcdFx0XHRcdHBsb3RUeXBlOiBwbG90VHlwZSxcblx0XHRcdFx0XHRheGlzWVR5cGU6IGRhdGFTZXJpZXMuYXhpc1lUeXBlLFxuXHRcdFx0XHRcdGF4aXNZOiBkYXRhU2VyaWVzLmF4aXNZVHlwZSA9PT0gXCJwcmltYXJ5XCIgPyB0aGlzLmF4aXNZIDogdGhpcy5heGlzWTIsXG5cdFx0XHRcdFx0YXhpc1g6IHRoaXMuYXhpc1gsXG5cdFx0XHRcdFx0ZGF0YVNlcmllc0luZGV4ZXM6IFtdLCAvL2luZGV4IG9mIGRhdGFTZXJpZXNcblx0XHRcdFx0XHR5VG90YWxzOiBbXVxuXHRcdFx0XHR9XG5cdFx0XHRcdHBsb3RUeXBlLnBsb3RVbml0cy5wdXNoKHBsb3RVbml0KTtcblx0XHRcdH1cblxuXHRcdFx0cGxvdFR5cGUudG90YWxEYXRhU2VyaWVzKys7XG5cblx0XHRcdHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLnB1c2goaSk7XG5cblx0XHRcdGRhdGFTZXJpZXMucGxvdFVuaXQgPSBwbG90VW5pdDtcblx0XHR9XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGxvdEluZm8ucGxvdFR5cGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHBsb3RUeXBlID0gdGhpcy5wbG90SW5mby5wbG90VHlwZXNbaV07XG5cdFx0dmFyIHByZXZpb3VzRGF0YVNlcmllc0NvdW50ID0gMDtcblxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFR5cGUucGxvdFVuaXRzLmxlbmd0aDsgaisrKSB7XG5cblx0XHRcdHBsb3RUeXBlLnBsb3RVbml0c1tqXS5wcmV2aW91c0RhdGFTZXJpZXNDb3VudCA9IHByZXZpb3VzRGF0YVNlcmllc0NvdW50O1xuXG5cdFx0XHRwcmV2aW91c0RhdGFTZXJpZXNDb3VudCArPSBwbG90VHlwZS5wbG90VW5pdHNbal0uZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXHRcdH1cblx0fVxufVxuXG5DaGFydC5wcm90b3R5cGUuYXNzaWduSWRUb0RhdGFQb2ludHMgPSBmdW5jdGlvbiAoKSB7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtpXTtcblxuXHRcdGlmICghZGF0YVNlcmllcy5kYXRhUG9pbnRzKVxuXHRcdFx0Y29udGludWU7XG5cblx0XHR2YXIgbGVuZ3RoID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzLmxlbmd0aDtcblxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspIHtcblx0XHRcdGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2pdID0gKyt0aGlzLl9ldmVudE1hbmFnZXIubGFzdE9iamVjdElkO1xuXHRcdH1cblx0fVxufVxuXG5DaGFydC5wcm90b3R5cGUuX3Byb2Nlc3NEYXRhID0gZnVuY3Rpb24gKCkge1xuXHR0aGlzLmFzc2lnbklkVG9EYXRhUG9pbnRzKCk7XG5cdHRoaXMuY2F0ZWdvcmlzZURhdGFTZXJpZXMoKTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGxvdEluZm8ucGxvdFR5cGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHBsb3RUeXBlID0gdGhpcy5wbG90SW5mby5wbG90VHlwZXNbaV07XG5cblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RUeXBlLnBsb3RVbml0cy5sZW5ndGg7IGorKykge1xuXG5cdFx0XHR2YXIgcGxvdFVuaXQgPSBwbG90VHlwZS5wbG90VW5pdHNbal07XG5cblx0XHRcdGlmIChwbG90VW5pdC50eXBlID09PSBcImxpbmVcIiB8fCBwbG90VW5pdC50eXBlID09PSBcInN0ZXBMaW5lXCIgfHwgcGxvdFVuaXQudHlwZSA9PT0gXCJzcGxpbmVcIiB8fCBwbG90VW5pdC50eXBlID09PSBcImNvbHVtblwiIHx8IHBsb3RVbml0LnR5cGUgPT09IFwiYXJlYVwiIHx8IHBsb3RVbml0LnR5cGUgPT09IFwic3RlcEFyZWFcIiB8fCBwbG90VW5pdC50eXBlID09PSBcInNwbGluZUFyZWFcIiB8fCBwbG90VW5pdC50eXBlID09PSBcImJhclwiIHx8IHBsb3RVbml0LnR5cGUgPT09IFwiYnViYmxlXCIgfHwgcGxvdFVuaXQudHlwZSA9PT0gXCJzY2F0dGVyXCIpXG5cdFx0XHRcdHRoaXMuX3Byb2Nlc3NNdWx0aXNlcmllc1Bsb3RVbml0KHBsb3RVbml0KTtcblx0XHRcdGVsc2UgaWYgKHBsb3RVbml0LnR5cGUgPT09IFwic3RhY2tlZENvbHVtblwiIHx8IHBsb3RVbml0LnR5cGUgPT09IFwic3RhY2tlZEJhclwiIHx8IHBsb3RVbml0LnR5cGUgPT09IFwic3RhY2tlZEFyZWFcIilcblx0XHRcdFx0dGhpcy5fcHJvY2Vzc1N0YWNrZWRQbG90VW5pdChwbG90VW5pdCk7XG5cdFx0XHRlbHNlIGlmIChwbG90VW5pdC50eXBlID09PSBcInN0YWNrZWRDb2x1bW4xMDBcIiB8fCBwbG90VW5pdC50eXBlID09PSBcInN0YWNrZWRCYXIxMDBcIiB8fCBwbG90VW5pdC50eXBlID09PSBcInN0YWNrZWRBcmVhMTAwXCIpXG5cdFx0XHRcdHRoaXMuX3Byb2Nlc3NTdGFja2VkMTAwUGxvdFVuaXQocGxvdFVuaXQpO1xuXHRcdFx0ZWxzZSBpZiAocGxvdFVuaXQudHlwZSA9PT0gXCJjYW5kbGVzdGlja1wiIHx8IHBsb3RVbml0LnR5cGUgPT09IFwib2hsY1wiIHx8IHBsb3RVbml0LnR5cGUgPT09IFwicmFuZ2VDb2x1bW5cIiB8fCBwbG90VW5pdC50eXBlID09PSBcInJhbmdlQmFyXCIgfHwgcGxvdFVuaXQudHlwZSA9PT0gXCJyYW5nZUFyZWFcIiB8fCBwbG90VW5pdC50eXBlID09PSBcInJhbmdlU3BsaW5lQXJlYVwiKVxuXHRcdFx0XHR0aGlzLl9wcm9jZXNzTXVsdGlZUGxvdFVuaXQocGxvdFVuaXQpO1xuXHRcdH1cblx0fVxuXG59XG5cbkNoYXJ0LnByb3RvdHlwZS5fcHJvY2Vzc011bHRpc2VyaWVzUGxvdFVuaXQgPSBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblx0aWYgKCFwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcyB8fCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGggPCAxKVxuXHRcdHJldHVybjtcblxuXHR2YXIgYXhpc1lEYXRhSW5mbyA9IHBsb3RVbml0LmF4aXNZLmRhdGFJbmZvO1xuXHR2YXIgYXhpc1hEYXRhSW5mbyA9IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvO1xuXHR2YXIgZGF0YVBvaW50WCwgZGF0YVBvaW50WTtcblx0dmFyIGlzRGF0ZVRpbWUgPSBmYWxzZTtcblxuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXV07XG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBpc0ZpcnN0RFBJblZpZXdQb3J0ID0gZmFsc2U7XG5cdFx0dmFyIGlzTGFzdERQSW5WaWV3UG9ydCA9IGZhbHNlO1xuXG5cdFx0aWYgKGRhdGFTZXJpZXMuYXhpc1BsYWNlbWVudCA9PT0gXCJub3JtYWxcIiB8fCBkYXRhU2VyaWVzLmF4aXNQbGFjZW1lbnQgPT09IFwieHlTd2FwcGVkXCIpIHtcblxuXHRcdFx0dmFyIHBsb3RBcmVhWE1pbiA9IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWC5uZXdWaWV3cG9ydE1pbmltdW0gPyB0aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1gubmV3Vmlld3BvcnRNaW5pbXVtIDogKHRoaXMuX29wdGlvbnMuYXhpc1ggJiYgdGhpcy5fb3B0aW9ucy5heGlzWC52aWV3cG9ydE1pbmltdW0pID9cblx0XHRcdFx0dGhpcy5fb3B0aW9ucy5heGlzWC52aWV3cG9ydE1pbmltdW0gOiAodGhpcy5fb3B0aW9ucy5heGlzWCAmJiB0aGlzLl9vcHRpb25zLmF4aXNYLm1pbmltdW0pID8gdGhpcy5fb3B0aW9ucy5heGlzWC5taW5pbXVtIDogLUluZmluaXR5O1xuXG5cdFx0XHR2YXIgcGxvdEFyZWFYTWF4ID0gdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNYLm5ld1ZpZXdwb3J0TWF4aW11bSA/IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWC5uZXdWaWV3cG9ydE1heGltdW0gOiAodGhpcy5fb3B0aW9ucy5heGlzWCAmJiB0aGlzLl9vcHRpb25zLmF4aXNYLnZpZXdwb3J0TWF4aW11bSkgP1xuXHRcdFx0XHR0aGlzLl9vcHRpb25zLmF4aXNYLnZpZXdwb3J0TWF4aW11bSA6ICh0aGlzLl9vcHRpb25zLmF4aXNYICYmIHRoaXMuX29wdGlvbnMuYXhpc1gubWF4aW11bSkgPyB0aGlzLl9vcHRpb25zLmF4aXNYLm1heGltdW0gOiBJbmZpbml0eTtcblx0XHR9XG5cblxuXHRcdGlmIChkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueCAmJiBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueC5nZXRUaW1lIHx8IGRhdGFTZXJpZXMueFZhbHVlVHlwZSA9PT0gXCJkYXRlVGltZVwiKSB7XG5cdFx0XHRpc0RhdGVUaW1lID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVNlcmllcy5kYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdGlmICh0eXBlb2YgZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnggPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0ZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnggPSBpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnguZ2V0VGltZSkge1xuXHRcdFx0XHRpc0RhdGVUaW1lID0gdHJ1ZTtcblx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKTsvL2RhdGFQb2ludFggaXMgdXNlZCBzbyB0aGF0IGdldFRpbWUgaXMgY2FsbGVkIG9ubHkgb25jZSBpbiBjYXNlIG9mIGRhdGVUaW1lIHZhbHVlc1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLng7XG5cblx0XHRcdGRhdGFQb2ludFkgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueTtcblxuXG5cdFx0XHRpZiAoZGF0YVBvaW50WCA8IGF4aXNYRGF0YUluZm8ubWluKVxuXHRcdFx0XHRheGlzWERhdGFJbmZvLm1pbiA9IGRhdGFQb2ludFg7XG5cdFx0XHRpZiAoZGF0YVBvaW50WCA+IGF4aXNYRGF0YUluZm8ubWF4KVxuXHRcdFx0XHRheGlzWERhdGFJbmZvLm1heCA9IGRhdGFQb2ludFg7XG5cblx0XHRcdGlmIChkYXRhUG9pbnRZIDwgYXhpc1lEYXRhSW5mby5taW4pXG5cdFx0XHRcdGF4aXNZRGF0YUluZm8ubWluID0gZGF0YVBvaW50WTtcblxuXHRcdFx0aWYgKGRhdGFQb2ludFkgPiBheGlzWURhdGFJbmZvLm1heClcblx0XHRcdFx0YXhpc1lEYXRhSW5mby5tYXggPSBkYXRhUG9pbnRZO1xuXG5cblx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHR2YXIgeERpZmYgPSBkYXRhUG9pbnRYIC0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2kgLSAxXS54O1xuXHRcdFx0XHR4RGlmZiA8IDAgJiYgKHhEaWZmID0geERpZmYgKiAtMSk7IC8vSWYgQ29uZGl0aW9uIHNob3J0Y3V0XG5cblx0XHRcdFx0aWYgKGF4aXNYRGF0YUluZm8ubWluRGlmZiA+IHhEaWZmICYmIHhEaWZmICE9PSAwKSB7XG5cdFx0XHRcdFx0YXhpc1hEYXRhSW5mby5taW5EaWZmID0geERpZmY7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WSAhPT0gbnVsbCAmJiBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaSAtIDFdLnkgIT09IG51bGwpIHtcblx0XHRcdFx0XHR2YXIgeURpZmYgPSBkYXRhUG9pbnRZIC0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2kgLSAxXS55O1xuXHRcdFx0XHRcdHlEaWZmIDwgMCAmJiAoeURpZmYgPSB5RGlmZiAqIC0xKTsgLy9JZiBDb25kaXRpb24gc2hvcnRjdXRcblxuXHRcdFx0XHRcdGlmIChheGlzWURhdGFJbmZvLm1pbkRpZmYgPiB5RGlmZiAmJiB5RGlmZiAhPT0gMCkge1xuXHRcdFx0XHRcdFx0YXhpc1lEYXRhSW5mby5taW5EaWZmID0geURpZmY7XG5cdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhpcyBzZWN0aW9uIG1ha2VzIHN1cmUgdGhhdCBwYXJ0aWFsbHkgdmlzaWJsZSBkYXRhUG9pbnRzIGFyZSBpbmNsdWRlZCBpbiB0aGUgYmVnaW5pbmdcblx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdEFyZWFYTWluICYmICFpc0ZpcnN0RFBJblZpZXdQb3J0KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fSBlbHNlIGlmICghaXNGaXJzdERQSW5WaWV3UG9ydCkge1xuXHRcdFx0XHRpc0ZpcnN0RFBJblZpZXdQb3J0ID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoaSA+IDApIHtcblx0XHRcdFx0XHRpIC09IDI7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhpcyBzZWN0aW9uIG1ha2VzIHN1cmUgdGhhdCBwYXJ0aWFsbHkgdmlzaWJsZSBkYXRhUG9pbnRzIGFyZSBpbmNsdWRlZCBhdCB0aGUgZW5kXG5cdFx0XHRpZiAoZGF0YVBvaW50WCA+IHBsb3RBcmVhWE1heCAmJiAhaXNMYXN0RFBJblZpZXdQb3J0KSB7XG5cdFx0XHRcdGlzTGFzdERQSW5WaWV3UG9ydCA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFQb2ludFggPiBwbG90QXJlYVhNYXggJiYgaXNMYXN0RFBJblZpZXdQb3J0KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLmxhYmVsKVxuXHRcdFx0XHRwbG90VW5pdC5heGlzWC5sYWJlbHNbZGF0YVBvaW50WF0gPSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ubGFiZWw7XG5cblxuXHRcdFx0aWYgKGRhdGFQb2ludFggPCBheGlzWERhdGFJbmZvLnZpZXdQb3J0TWluKVxuXHRcdFx0XHRheGlzWERhdGFJbmZvLnZpZXdQb3J0TWluID0gZGF0YVBvaW50WDtcblx0XHRcdGlmIChkYXRhUG9pbnRYID4gYXhpc1hEYXRhSW5mby52aWV3UG9ydE1heClcblx0XHRcdFx0YXhpc1hEYXRhSW5mby52aWV3UG9ydE1heCA9IGRhdGFQb2ludFg7XG5cblx0XHRcdGlmIChkYXRhUG9pbnRZID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKGRhdGFQb2ludFkgPCBheGlzWURhdGFJbmZvLnZpZXdQb3J0TWluKVxuXHRcdFx0XHRheGlzWURhdGFJbmZvLnZpZXdQb3J0TWluID0gZGF0YVBvaW50WTtcblx0XHRcdGlmIChkYXRhUG9pbnRZID4gYXhpc1lEYXRhSW5mby52aWV3UG9ydE1heClcblx0XHRcdFx0YXhpc1lEYXRhSW5mby52aWV3UG9ydE1heCA9IGRhdGFQb2ludFk7XG5cdFx0fVxuXG5cdFx0dGhpcy5wbG90SW5mby5heGlzWFZhbHVlVHlwZSA9IGRhdGFTZXJpZXMueFZhbHVlVHlwZSA9IGlzRGF0ZVRpbWUgPyBcImRhdGVUaW1lXCIgOiBcIm51bWJlclwiO1xuXHR9XG5cblx0Ly90aGlzLmRhdGFQb2ludHMuc29ydChjb21wYXJlRGF0YVBvaW50WCk7XG5cdC8vdGhpcy5kYXRhUG9pbnRzLnNvcnQoZnVuY3Rpb24gKGRhdGFQb2ludDEsIGRhdGFQb2ludDIpIHsgcmV0dXJuIGRhdGFQb2ludDEueCAtIGRhdGFQb2ludDIueDsgfSk7XG59XG5cbkNoYXJ0LnByb3RvdHlwZS5fcHJvY2Vzc1N0YWNrZWRQbG90VW5pdCA9IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXG5cdGlmICghcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMgfHwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoIDwgMSlcblx0XHRyZXR1cm47XG5cblx0dmFyIGF4aXNZRGF0YUluZm8gPSBwbG90VW5pdC5heGlzWS5kYXRhSW5mbztcblx0dmFyIGF4aXNYRGF0YUluZm8gPSBwbG90VW5pdC5heGlzWC5kYXRhSW5mbztcblxuXHR2YXIgZGF0YVBvaW50WCwgZGF0YVBvaW50WTtcblx0dmFyIGlzRGF0ZVRpbWUgPSBmYWxzZTtcblxuXHR2YXIgZGF0YVBvaW50WVBvc2l0aXZlU3VtcyA9IFtdO1xuXHR2YXIgZGF0YVBvaW50WU5lZ2F0aXZlU3VtcyA9IFtdO1xuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoOyBqKyspIHtcblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlc1tqXV07XG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBpc0ZpcnN0RFBJblZpZXdQb3J0ID0gZmFsc2U7XG5cdFx0dmFyIGlzTGFzdERQSW5WaWV3UG9ydCA9IGZhbHNlO1xuXG5cdFx0aWYgKGRhdGFTZXJpZXMuYXhpc1BsYWNlbWVudCA9PT0gXCJub3JtYWxcIiB8fCBkYXRhU2VyaWVzLmF4aXNQbGFjZW1lbnQgPT09IFwieHlTd2FwcGVkXCIpIHtcblxuXHRcdFx0dmFyIHBsb3RBcmVhWE1pbiA9IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWC5uZXdWaWV3cG9ydE1pbmltdW0gPyB0aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1gubmV3Vmlld3BvcnRNaW5pbXVtIDogKHRoaXMuX29wdGlvbnMuYXhpc1ggJiYgdGhpcy5fb3B0aW9ucy5heGlzWC52aWV3cG9ydE1pbmltdW0pID9cblx0XHRcdFx0dGhpcy5fb3B0aW9ucy5heGlzWC52aWV3cG9ydE1pbmltdW0gOiAodGhpcy5fb3B0aW9ucy5heGlzWCAmJiB0aGlzLl9vcHRpb25zLmF4aXNYLm1pbmltdW0pID8gdGhpcy5fb3B0aW9ucy5heGlzWC5taW5pbXVtIDogLUluZmluaXR5O1xuXG5cdFx0XHR2YXIgcGxvdEFyZWFYTWF4ID0gdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNYLm5ld1ZpZXdwb3J0TWF4aW11bSA/IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWC5uZXdWaWV3cG9ydE1heGltdW0gOiAodGhpcy5fb3B0aW9ucy5heGlzWCAmJiB0aGlzLl9vcHRpb25zLmF4aXNYLnZpZXdwb3J0TWF4aW11bSkgP1xuXHRcdFx0XHR0aGlzLl9vcHRpb25zLmF4aXNYLnZpZXdwb3J0TWF4aW11bSA6ICh0aGlzLl9vcHRpb25zLmF4aXNYICYmIHRoaXMuX29wdGlvbnMuYXhpc1gubWF4aW11bSkgPyB0aGlzLl9vcHRpb25zLmF4aXNYLm1heGltdW0gOiBJbmZpbml0eTtcblx0XHR9XG5cblxuXHRcdGlmIChkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueCAmJiBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueC5nZXRUaW1lIHx8IGRhdGFTZXJpZXMueFZhbHVlVHlwZSA9PT0gXCJkYXRlVGltZVwiKSB7XG5cdFx0XHRpc0RhdGVUaW1lID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YVNlcmllcy5kYXRhUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdC8vIFJlcXVpcmQgd2hlbiBubyB4IHZhbHVlcyBhcmUgcHJvdmlkZWRcblx0XHRcdGlmICh0eXBlb2YgZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnggPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0ZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnggPSBpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnguZ2V0VGltZSkge1xuXHRcdFx0XHRpc0RhdGVUaW1lID0gdHJ1ZTtcblx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKTsvL2RhdGFQb2ludFggaXMgdXNlZCBzbyB0aGF0IGdldFRpbWUgaXMgY2FsbGVkIG9ubHkgb25jZSBpbiBjYXNlIG9mIGRhdGVUaW1lIHZhbHVlc1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLng7XG5cblx0XHRcdGRhdGFQb2ludFkgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueTtcblxuXG5cblx0XHRcdGlmIChkYXRhUG9pbnRYIDwgYXhpc1hEYXRhSW5mby5taW4pXG5cdFx0XHRcdGF4aXNYRGF0YUluZm8ubWluID0gZGF0YVBvaW50WDtcblx0XHRcdGlmIChkYXRhUG9pbnRYID4gYXhpc1hEYXRhSW5mby5tYXgpXG5cdFx0XHRcdGF4aXNYRGF0YUluZm8ubWF4ID0gZGF0YVBvaW50WDtcblxuXHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdHZhciB4RGlmZiA9IGRhdGFQb2ludFggLSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaSAtIDFdLng7XG5cdFx0XHRcdHhEaWZmIDwgMCAmJiAoeERpZmYgPSB4RGlmZiAqIC0xKTsgLy9JZiBDb25kaXRpb24gc2hvcnRjdXRcblxuXHRcdFx0XHRpZiAoYXhpc1hEYXRhSW5mby5taW5EaWZmID4geERpZmYgJiYgeERpZmYgIT09IDApIHtcblx0XHRcdFx0XHRheGlzWERhdGFJbmZvLm1pbkRpZmYgPSB4RGlmZjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRZICE9PSBudWxsICYmIGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpIC0gMV0ueSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHZhciB5RGlmZiA9IGRhdGFQb2ludFkgLSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaSAtIDFdLnk7XG5cdFx0XHRcdFx0eURpZmYgPCAwICYmICh5RGlmZiA9IHlEaWZmICogLTEpOyAvL0lmIENvbmRpdGlvbiBzaG9ydGN1dFxuXG5cdFx0XHRcdFx0aWYgKGF4aXNZRGF0YUluZm8ubWluRGlmZiA+IHlEaWZmICYmIHlEaWZmICE9PSAwKSB7XG5cdFx0XHRcdFx0XHRheGlzWURhdGFJbmZvLm1pbkRpZmYgPSB5RGlmZjtcblx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGlzIHNlY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHBhcnRpYWxseSB2aXNpYmxlIGRhdGFQb2ludHMgYXJlIGluY2x1ZGVkIGluIHRoZSBiZWdpbmluZ1xuXHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90QXJlYVhNaW4gJiYgIWlzRmlyc3REUEluVmlld1BvcnQpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9IGVsc2UgaWYgKCFpc0ZpcnN0RFBJblZpZXdQb3J0KSB7XG5cdFx0XHRcdGlzRmlyc3REUEluVmlld1BvcnQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHRcdGkgLT0gMjtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGlzIHNlY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHBhcnRpYWxseSB2aXNpYmxlIGRhdGFQb2ludHMgYXJlIGluY2x1ZGVkIGF0IHRoZSBlbmRcblx0XHRcdGlmIChkYXRhUG9pbnRYID4gcGxvdEFyZWFYTWF4ICYmICFpc0xhc3REUEluVmlld1BvcnQpIHtcblx0XHRcdFx0aXNMYXN0RFBJblZpZXdQb3J0ID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YVBvaW50WCA+IHBsb3RBcmVhWE1heCAmJiBpc0xhc3REUEluVmlld1BvcnQpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblxuXHRcdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS5sYWJlbClcblx0XHRcdFx0cGxvdFVuaXQuYXhpc1gubGFiZWxzW2RhdGFQb2ludFhdID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLmxhYmVsO1xuXG5cdFx0XHRpZiAoZGF0YVBvaW50WCA8IGF4aXNYRGF0YUluZm8udmlld1BvcnRNaW4pXG5cdFx0XHRcdGF4aXNYRGF0YUluZm8udmlld1BvcnRNaW4gPSBkYXRhUG9pbnRYO1xuXHRcdFx0aWYgKGRhdGFQb2ludFggPiBheGlzWERhdGFJbmZvLnZpZXdQb3J0TWF4KVxuXHRcdFx0XHRheGlzWERhdGFJbmZvLnZpZXdQb3J0TWF4ID0gZGF0YVBvaW50WDtcblxuXHRcdFx0aWYgKGRhdGFQb2ludFkgPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRwbG90VW5pdC55VG90YWxzW2RhdGFQb2ludFhdID0gKCFwbG90VW5pdC55VG90YWxzW2RhdGFQb2ludFhdID8gMCA6IHBsb3RVbml0LnlUb3RhbHNbZGF0YVBvaW50WF0pICsgTWF0aC5hYnMoZGF0YVBvaW50WSk7XG5cblx0XHRcdGlmIChkYXRhUG9pbnRZID49IDApIHtcblx0XHRcdFx0aWYgKGRhdGFQb2ludFlQb3NpdGl2ZVN1bXNbZGF0YVBvaW50WF0pXG5cdFx0XHRcdFx0ZGF0YVBvaW50WVBvc2l0aXZlU3Vtc1tkYXRhUG9pbnRYXSArPSBkYXRhUG9pbnRZO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0ZGF0YVBvaW50WVBvc2l0aXZlU3Vtc1tkYXRhUG9pbnRYXSA9IGRhdGFQb2ludFk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoZGF0YVBvaW50WU5lZ2F0aXZlU3Vtc1tkYXRhUG9pbnRYXSlcblx0XHRcdFx0XHRkYXRhUG9pbnRZTmVnYXRpdmVTdW1zW2RhdGFQb2ludFhdICs9IGRhdGFQb2ludFk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRkYXRhUG9pbnRZTmVnYXRpdmVTdW1zW2RhdGFQb2ludFhdID0gZGF0YVBvaW50WTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnBsb3RJbmZvLmF4aXNYVmFsdWVUeXBlID0gZGF0YVNlcmllcy54VmFsdWVUeXBlID0gaXNEYXRlVGltZSA/IFwiZGF0ZVRpbWVcIiA6IFwibnVtYmVyXCI7XG5cdH1cblxuXHRmb3IgKGkgaW4gZGF0YVBvaW50WVBvc2l0aXZlU3Vtcykge1xuXHRcdGlmIChkYXRhUG9pbnRZUG9zaXRpdmVTdW1zLmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0aWYgKGlzTmFOKGkpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0dmFyIHlTdW0gPSBkYXRhUG9pbnRZUG9zaXRpdmVTdW1zW2ldO1xuXG5cdFx0aWYgKHlTdW0gPCBheGlzWURhdGFJbmZvLm1pbilcblx0XHRcdGF4aXNZRGF0YUluZm8ubWluID0geVN1bTtcblxuXHRcdGlmICh5U3VtID4gYXhpc1lEYXRhSW5mby5tYXgpXG5cdFx0XHRheGlzWURhdGFJbmZvLm1heCA9IHlTdW07XG5cblx0XHRpZiAoaSA8IGF4aXNYRGF0YUluZm8udmlld1BvcnRNaW4gfHwgaSA+IGF4aXNYRGF0YUluZm8udmlld1BvcnRNYXgpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdGlmICh5U3VtIDwgYXhpc1lEYXRhSW5mby52aWV3UG9ydE1pbilcblx0XHRcdGF4aXNZRGF0YUluZm8udmlld1BvcnRNaW4gPSB5U3VtO1xuXHRcdGlmICh5U3VtID4gYXhpc1lEYXRhSW5mby52aWV3UG9ydE1heClcblx0XHRcdGF4aXNZRGF0YUluZm8udmlld1BvcnRNYXggPSB5U3VtO1xuXHR9XG5cblx0fVxuXG5cdGZvciAoaSBpbiBkYXRhUG9pbnRZTmVnYXRpdmVTdW1zKSB7XG5cblx0XHRpZiAoZGF0YVBvaW50WU5lZ2F0aXZlU3Vtcy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdGlmIChpc05hTihpKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0dmFyIHlTdW0gPSBkYXRhUG9pbnRZTmVnYXRpdmVTdW1zW2ldO1xuXG5cdFx0aWYgKHlTdW0gPCBheGlzWURhdGFJbmZvLm1pbilcblx0XHRcdGF4aXNZRGF0YUluZm8ubWluID0geVN1bTtcblxuXHRcdGlmICh5U3VtID4gYXhpc1lEYXRhSW5mby5tYXgpXG5cdFx0XHRheGlzWURhdGFJbmZvLm1heCA9IHlTdW07XG5cblx0XHRpZiAoaSA8IGF4aXNYRGF0YUluZm8udmlld1BvcnRNaW4gfHwgaSA+IGF4aXNYRGF0YUluZm8udmlld1BvcnRNYXgpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdGlmICh5U3VtIDwgYXhpc1lEYXRhSW5mby52aWV3UG9ydE1pbilcblx0XHRcdGF4aXNZRGF0YUluZm8udmlld1BvcnRNaW4gPSB5U3VtO1xuXHRcdGlmICh5U3VtID4gYXhpc1lEYXRhSW5mby52aWV3UG9ydE1heClcblx0XHRcdGF4aXNZRGF0YUluZm8udmlld1BvcnRNYXggPSB5U3VtO1xuXHR9XG5cblx0fVxuXG5cblx0Ly90aGlzLmRhdGFQb2ludHMuc29ydChjb21wYXJlRGF0YVBvaW50WCk7XG5cdC8vdGhpcy5kYXRhUG9pbnRzLnNvcnQoZnVuY3Rpb24gKGRhdGFQb2ludDEsIGRhdGFQb2ludDIpIHsgcmV0dXJuIGRhdGFQb2ludDEueCAtIGRhdGFQb2ludDIueDsgfSk7XG5cblx0Ly93aW5kb3cuY29uc29sZS5sb2coXCJ2aWV3UG9ydFlNaW46IFwiICsgcGxvdEluZm8udmlld1BvcnRZTWluICsgXCI7IHZpZXdQb3J0WU1heDogXCIgKyBwbG90SW5mby52aWV3UG9ydFlNYXgpO1xufVxuXG5DaGFydC5wcm90b3R5cGUuX3Byb2Nlc3NTdGFja2VkMTAwUGxvdFVuaXQgPSBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblx0aWYgKCFwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcyB8fCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGggPCAxKVxuXHRcdHJldHVybjtcblxuXHR2YXIgYXhpc1lEYXRhSW5mbyA9IHBsb3RVbml0LmF4aXNZLmRhdGFJbmZvO1xuXHR2YXIgYXhpc1hEYXRhSW5mbyA9IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvO1xuXG5cdHZhciBkYXRhUG9pbnRYLCBkYXRhUG9pbnRZO1xuXHR2YXIgaXNEYXRlVGltZSA9IGZhbHNlO1xuXHR2YXIgY29udGFpbnNQb3NpdGl2ZVkgPSBmYWxzZTtcblx0dmFyIGNvbnRhaW5zTmVnYXRpdmVZID0gZmFsc2U7XG5cblx0dmFyIGRhdGFQb2ludFlTdW1zID0gW107XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5kYXRhW3Bsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdXTtcblx0XHR2YXIgaSA9IDA7XG5cdFx0dmFyIGlzRmlyc3REUEluVmlld1BvcnQgPSBmYWxzZTtcblx0XHR2YXIgaXNMYXN0RFBJblZpZXdQb3J0ID0gZmFsc2U7XG5cblx0XHRpZiAoZGF0YVNlcmllcy5heGlzUGxhY2VtZW50ID09PSBcIm5vcm1hbFwiIHx8IGRhdGFTZXJpZXMuYXhpc1BsYWNlbWVudCA9PT0gXCJ4eVN3YXBwZWRcIikge1xuXG5cdFx0XHR2YXIgcGxvdEFyZWFYTWluID0gdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNYLm5ld1ZpZXdwb3J0TWluaW11bSA/IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWC5uZXdWaWV3cG9ydE1pbmltdW0gOiAodGhpcy5fb3B0aW9ucy5heGlzWCAmJiB0aGlzLl9vcHRpb25zLmF4aXNYLnZpZXdwb3J0TWluaW11bSkgP1xuXHRcdFx0XHR0aGlzLl9vcHRpb25zLmF4aXNYLnZpZXdwb3J0TWluaW11bSA6ICh0aGlzLl9vcHRpb25zLmF4aXNYICYmIHRoaXMuX29wdGlvbnMuYXhpc1gubWluaW11bSkgPyB0aGlzLl9vcHRpb25zLmF4aXNYLm1pbmltdW0gOiAtSW5maW5pdHk7XG5cblx0XHRcdHZhciBwbG90QXJlYVhNYXggPSB0aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1gubmV3Vmlld3BvcnRNYXhpbXVtID8gdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNYLm5ld1ZpZXdwb3J0TWF4aW11bSA6ICh0aGlzLl9vcHRpb25zLmF4aXNYICYmIHRoaXMuX29wdGlvbnMuYXhpc1gudmlld3BvcnRNYXhpbXVtKSA/XG5cdFx0XHRcdHRoaXMuX29wdGlvbnMuYXhpc1gudmlld3BvcnRNYXhpbXVtIDogKHRoaXMuX29wdGlvbnMuYXhpc1ggJiYgdGhpcy5fb3B0aW9ucy5heGlzWC5tYXhpbXVtKSA/IHRoaXMuX29wdGlvbnMuYXhpc1gubWF4aW11bSA6IEluZmluaXR5O1xuXHRcdH1cblxuXG5cdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54ICYmIGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54LmdldFRpbWUgfHwgZGF0YVNlcmllcy54VmFsdWVUeXBlID09PSBcImRhdGVUaW1lXCIpIHtcblx0XHRcdGlzRGF0ZVRpbWUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhU2VyaWVzLmRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0Ly8gUmVxdWlyZCB3aGVuIG5vIHggdmFsdWVzIGFyZSBwcm92aWRlZFxuXHRcdFx0aWYgKHR5cGVvZiBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueCA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueCA9IGk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKSB7XG5cdFx0XHRcdGlzRGF0ZVRpbWUgPSB0cnVlO1xuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpOy8vZGF0YVBvaW50WCBpcyB1c2VkIHNvIHRoYXQgZ2V0VGltZSBpcyBjYWxsZWQgb25seSBvbmNlIGluIGNhc2Ugb2YgZGF0ZVRpbWUgdmFsdWVzXG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGRhdGFQb2ludFggPSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueDtcblxuXHRcdFx0ZGF0YVBvaW50WSA9IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS55O1xuXG5cblxuXHRcdFx0aWYgKGRhdGFQb2ludFggPCBheGlzWERhdGFJbmZvLm1pbilcblx0XHRcdFx0YXhpc1hEYXRhSW5mby5taW4gPSBkYXRhUG9pbnRYO1xuXHRcdFx0aWYgKGRhdGFQb2ludFggPiBheGlzWERhdGFJbmZvLm1heClcblx0XHRcdFx0YXhpc1hEYXRhSW5mby5tYXggPSBkYXRhUG9pbnRYO1xuXG5cdFx0XHRpZiAoaSA+IDApIHtcblx0XHRcdFx0dmFyIHhEaWZmID0gZGF0YVBvaW50WCAtIGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpIC0gMV0ueDtcblx0XHRcdFx0eERpZmYgPCAwICYmICh4RGlmZiA9IHhEaWZmICogLTEpOyAvL0lmIENvbmRpdGlvbiBzaG9ydGN1dFxuXG5cdFx0XHRcdGlmIChheGlzWERhdGFJbmZvLm1pbkRpZmYgPiB4RGlmZiAmJiB4RGlmZiAhPT0gMCkge1xuXHRcdFx0XHRcdGF4aXNYRGF0YUluZm8ubWluRGlmZiA9IHhEaWZmO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGRhdGFQb2ludFkgIT09IG51bGwgJiYgZGF0YVNlcmllcy5kYXRhUG9pbnRzW2kgLSAxXS55ICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0dmFyIHlEaWZmID0gZGF0YVBvaW50WSAtIGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpIC0gMV0ueTtcblx0XHRcdFx0XHR5RGlmZiA8IDAgJiYgKHlEaWZmID0geURpZmYgKiAtMSk7IC8vSWYgQ29uZGl0aW9uIHNob3J0Y3V0XG5cblx0XHRcdFx0XHRpZiAoYXhpc1lEYXRhSW5mby5taW5EaWZmID4geURpZmYgJiYgeURpZmYgIT09IDApIHtcblx0XHRcdFx0XHRcdGF4aXNZRGF0YUluZm8ubWluRGlmZiA9IHlEaWZmO1xuXHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoaXMgc2VjdGlvbiBtYWtlcyBzdXJlIHRoYXQgcGFydGlhbGx5IHZpc2libGUgZGF0YVBvaW50cyBhcmUgaW5jbHVkZWQgaW4gdGhlIGJlZ2luaW5nXG5cdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RBcmVhWE1pbiAmJiAhaXNGaXJzdERQSW5WaWV3UG9ydCkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH0gZWxzZSBpZiAoIWlzRmlyc3REUEluVmlld1BvcnQpIHtcblx0XHRcdFx0aXNGaXJzdERQSW5WaWV3UG9ydCA9IHRydWU7XG5cblx0XHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdFx0aSAtPSAyO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoaXMgc2VjdGlvbiBtYWtlcyBzdXJlIHRoYXQgcGFydGlhbGx5IHZpc2libGUgZGF0YVBvaW50cyBhcmUgaW5jbHVkZWQgYXQgdGhlIGVuZFxuXHRcdFx0aWYgKGRhdGFQb2ludFggPiBwbG90QXJlYVhNYXggJiYgIWlzTGFzdERQSW5WaWV3UG9ydCkge1xuXHRcdFx0XHRpc0xhc3REUEluVmlld1BvcnQgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChkYXRhUG9pbnRYID4gcGxvdEFyZWFYTWF4ICYmIGlzTGFzdERQSW5WaWV3UG9ydCkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS5sYWJlbClcblx0XHRcdFx0cGxvdFVuaXQuYXhpc1gubGFiZWxzW2RhdGFQb2ludFhdID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLmxhYmVsO1xuXG5cdFx0XHRpZiAoZGF0YVBvaW50WCA8IGF4aXNYRGF0YUluZm8udmlld1BvcnRNaW4pXG5cdFx0XHRcdGF4aXNYRGF0YUluZm8udmlld1BvcnRNaW4gPSBkYXRhUG9pbnRYO1xuXHRcdFx0aWYgKGRhdGFQb2ludFggPiBheGlzWERhdGFJbmZvLnZpZXdQb3J0TWF4KVxuXHRcdFx0XHRheGlzWERhdGFJbmZvLnZpZXdQb3J0TWF4ID0gZGF0YVBvaW50WDtcblxuXHRcdFx0aWYgKGRhdGFQb2ludFkgPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRwbG90VW5pdC55VG90YWxzW2RhdGFQb2ludFhdID0gKCFwbG90VW5pdC55VG90YWxzW2RhdGFQb2ludFhdID8gMCA6IHBsb3RVbml0LnlUb3RhbHNbZGF0YVBvaW50WF0pICsgTWF0aC5hYnMoZGF0YVBvaW50WSk7XG5cblx0XHRcdGlmIChkYXRhUG9pbnRZID49IDApIHtcblx0XHRcdFx0Y29udGFpbnNQb3NpdGl2ZVkgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udGFpbnNOZWdhdGl2ZVkgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGF0YVBvaW50WVN1bXNbZGF0YVBvaW50WF0pXG5cdFx0XHRcdGRhdGFQb2ludFlTdW1zW2RhdGFQb2ludFhdICs9IE1hdGguYWJzKGRhdGFQb2ludFkpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRkYXRhUG9pbnRZU3Vtc1tkYXRhUG9pbnRYXSA9IE1hdGguYWJzKGRhdGFQb2ludFkpO1xuXHRcdH1cblxuXHRcdHRoaXMucGxvdEluZm8uYXhpc1hWYWx1ZVR5cGUgPSBkYXRhU2VyaWVzLnhWYWx1ZVR5cGUgPSBpc0RhdGVUaW1lID8gXCJkYXRlVGltZVwiIDogXCJudW1iZXJcIjtcblx0fVxuXG5cblx0aWYgKGNvbnRhaW5zUG9zaXRpdmVZICYmICFjb250YWluc05lZ2F0aXZlWSkge1xuXHRcdGF4aXNZRGF0YUluZm8ubWF4ID0gOTk7XG5cdFx0YXhpc1lEYXRhSW5mby5taW4gPSAxO1xuXHR9IGVsc2UgaWYgKGNvbnRhaW5zUG9zaXRpdmVZICYmIGNvbnRhaW5zTmVnYXRpdmVZKSB7XG5cdFx0YXhpc1lEYXRhSW5mby5tYXggPSA5OTtcblx0XHRheGlzWURhdGFJbmZvLm1pbiA9IC05OTtcblx0fSBlbHNlIGlmICghY29udGFpbnNQb3NpdGl2ZVkgJiYgY29udGFpbnNOZWdhdGl2ZVkpIHtcblx0XHRheGlzWURhdGFJbmZvLm1heCA9IC0xO1xuXHRcdGF4aXNZRGF0YUluZm8ubWluID0gLTk5O1xuXHR9XG5cblx0YXhpc1lEYXRhSW5mby52aWV3UG9ydE1pbiA9IGF4aXNZRGF0YUluZm8ubWluO1xuXHRheGlzWURhdGFJbmZvLnZpZXdQb3J0TWF4ID0gYXhpc1lEYXRhSW5mby5tYXg7XG5cblx0cGxvdFVuaXQuZGF0YVBvaW50WVN1bXMgPSBkYXRhUG9pbnRZU3VtcztcblxuXHQvL3RoaXMuZGF0YVBvaW50cy5zb3J0KGNvbXBhcmVEYXRhUG9pbnRYKTtcblx0Ly90aGlzLmRhdGFQb2ludHMuc29ydChmdW5jdGlvbiAoZGF0YVBvaW50MSwgZGF0YVBvaW50MikgeyByZXR1cm4gZGF0YVBvaW50MS54IC0gZGF0YVBvaW50Mi54OyB9KTtcblxuXHQvL3dpbmRvdy5jb25zb2xlLmxvZyhcInZpZXdQb3J0WU1pbjogXCIgKyBwbG90SW5mby52aWV3UG9ydFlNaW4gKyBcIjsgdmlld1BvcnRZTWF4OiBcIiArIHBsb3RJbmZvLnZpZXdQb3J0WU1heCk7XG59XG5cbkNoYXJ0LnByb3RvdHlwZS5fcHJvY2Vzc011bHRpWVBsb3RVbml0ID0gZnVuY3Rpb24gKHBsb3RVbml0KSB7XG5cdGlmICghcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMgfHwgcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoIDwgMSlcblx0XHRyZXR1cm47XG5cblx0dmFyIGF4aXNZRGF0YUluZm8gPSBwbG90VW5pdC5heGlzWS5kYXRhSW5mbztcblx0dmFyIGF4aXNYRGF0YUluZm8gPSBwbG90VW5pdC5heGlzWC5kYXRhSW5mbztcblx0dmFyIGRhdGFQb2ludFgsIGRhdGFQb2ludFksIGRhdGFQb2ludFlNaW4sIGRhdGFQb2ludFlNYXg7XG5cdHZhciBpc0RhdGVUaW1lID0gZmFsc2U7XG5cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal1dO1xuXHRcdHZhciBpID0gMDtcblx0XHR2YXIgaXNGaXJzdERQSW5WaWV3UG9ydCA9IGZhbHNlO1xuXHRcdHZhciBpc0xhc3REUEluVmlld1BvcnQgPSBmYWxzZTtcblxuXHRcdGlmIChkYXRhU2VyaWVzLmF4aXNQbGFjZW1lbnQgPT09IFwibm9ybWFsXCIgfHwgZGF0YVNlcmllcy5heGlzUGxhY2VtZW50ID09PSBcInh5U3dhcHBlZFwiKSB7XG5cblx0XHRcdHZhciBwbG90QXJlYVhNaW4gPSB0aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1gubmV3Vmlld3BvcnRNaW5pbXVtID8gdGhpcy5zZXNzaW9uVmFyaWFibGVzLmF4aXNYLm5ld1ZpZXdwb3J0TWluaW11bSA6ICh0aGlzLl9vcHRpb25zLmF4aXNYICYmIHRoaXMuX29wdGlvbnMuYXhpc1gudmlld3BvcnRNaW5pbXVtKSA/XG5cdFx0XHRcdHRoaXMuX29wdGlvbnMuYXhpc1gudmlld3BvcnRNaW5pbXVtIDogKHRoaXMuX29wdGlvbnMuYXhpc1ggJiYgdGhpcy5fb3B0aW9ucy5heGlzWC5taW5pbXVtKSA/IHRoaXMuX29wdGlvbnMuYXhpc1gubWluaW11bSA6IC1JbmZpbml0eTtcblxuXHRcdFx0dmFyIHBsb3RBcmVhWE1heCA9IHRoaXMuc2Vzc2lvblZhcmlhYmxlcy5heGlzWC5uZXdWaWV3cG9ydE1heGltdW0gPyB0aGlzLnNlc3Npb25WYXJpYWJsZXMuYXhpc1gubmV3Vmlld3BvcnRNYXhpbXVtIDogKHRoaXMuX29wdGlvbnMuYXhpc1ggJiYgdGhpcy5fb3B0aW9ucy5heGlzWC52aWV3cG9ydE1heGltdW0pID9cblx0XHRcdFx0dGhpcy5fb3B0aW9ucy5heGlzWC52aWV3cG9ydE1heGltdW0gOiAodGhpcy5fb3B0aW9ucy5heGlzWCAmJiB0aGlzLl9vcHRpb25zLmF4aXNYLm1heGltdW0pID8gdGhpcy5fb3B0aW9ucy5heGlzWC5tYXhpbXVtIDogSW5maW5pdHk7XG5cdFx0fVxuXG5cblx0XHRpZiAoZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnggJiYgZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnguZ2V0VGltZSB8fCBkYXRhU2VyaWVzLnhWYWx1ZVR5cGUgPT09IFwiZGF0ZVRpbWVcIikge1xuXHRcdFx0aXNEYXRlVGltZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFTZXJpZXMuZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRpZiAodHlwZW9mIGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54ID0gaTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54LmdldFRpbWUpIHtcblx0XHRcdFx0aXNEYXRlVGltZSA9IHRydWU7XG5cdFx0XHRcdGRhdGFQb2ludFggPSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ueC5nZXRUaW1lKCk7Ly9kYXRhUG9pbnRYIGlzIHVzZWQgc28gdGhhdCBnZXRUaW1lIGlzIGNhbGxlZCBvbmx5IG9uY2UgaW4gY2FzZSBvZiBkYXRlVGltZSB2YWx1ZXNcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdFx0ZGF0YVBvaW50WCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRkYXRhUG9pbnRZID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2ldLnk7XG5cblx0XHRcdGlmIChkYXRhUG9pbnRZICYmIGRhdGFQb2ludFkubGVuZ3RoKSB7XG5cdFx0XHRcdGRhdGFQb2ludFlNaW4gPSBNYXRoLm1pbi5hcHBseShudWxsLCBkYXRhUG9pbnRZKTtcblx0XHRcdFx0ZGF0YVBvaW50WU1heCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGRhdGFQb2ludFkpO1xuXHRcdFx0fVxuXG5cblx0XHRcdGlmIChkYXRhUG9pbnRYIDwgYXhpc1hEYXRhSW5mby5taW4pXG5cdFx0XHRcdGF4aXNYRGF0YUluZm8ubWluID0gZGF0YVBvaW50WDtcblx0XHRcdGlmIChkYXRhUG9pbnRYID4gYXhpc1hEYXRhSW5mby5tYXgpXG5cdFx0XHRcdGF4aXNYRGF0YUluZm8ubWF4ID0gZGF0YVBvaW50WDtcblxuXHRcdFx0aWYgKGRhdGFQb2ludFlNaW4gPCBheGlzWURhdGFJbmZvLm1pbilcblx0XHRcdFx0YXhpc1lEYXRhSW5mby5taW4gPSBkYXRhUG9pbnRZTWluO1xuXG5cdFx0XHRpZiAoZGF0YVBvaW50WU1heCA+IGF4aXNZRGF0YUluZm8ubWF4KVxuXHRcdFx0XHRheGlzWURhdGFJbmZvLm1heCA9IGRhdGFQb2ludFlNYXg7XG5cblxuXHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdHZhciB4RGlmZiA9IGRhdGFQb2ludFggLSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaSAtIDFdLng7XG5cdFx0XHRcdHhEaWZmIDwgMCAmJiAoeERpZmYgPSB4RGlmZiAqIC0xKTsgLy9JZiBDb25kaXRpb24gc2hvcnRjdXRcblxuXHRcdFx0XHRpZiAoYXhpc1hEYXRhSW5mby5taW5EaWZmID4geERpZmYgJiYgeERpZmYgIT09IDApIHtcblx0XHRcdFx0XHRheGlzWERhdGFJbmZvLm1pbkRpZmYgPSB4RGlmZjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRZWzBdICE9PSBudWxsICYmIGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpIC0gMV0ueVswXSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHZhciB5RGlmZiA9IGRhdGFQb2ludFlbMF0gLSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbaSAtIDFdLnlbMF07XG5cdFx0XHRcdFx0eURpZmYgPCAwICYmICh5RGlmZiA9IHlEaWZmICogLTEpOyAvL0lmIENvbmRpdGlvbiBzaG9ydGN1dFxuXG5cdFx0XHRcdFx0aWYgKGF4aXNZRGF0YUluZm8ubWluRGlmZiA+IHlEaWZmICYmIHlEaWZmICE9PSAwKSB7XG5cdFx0XHRcdFx0XHRheGlzWURhdGFJbmZvLm1pbkRpZmYgPSB5RGlmZjtcblx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGlzIHNlY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHBhcnRpYWxseSB2aXNpYmxlIGRhdGFQb2ludHMgYXJlIGluY2x1ZGVkIGluIHRoZSBiZWdpbmluZ1xuXHRcdFx0aWYgKGRhdGFQb2ludFggPCBwbG90QXJlYVhNaW4gJiYgIWlzRmlyc3REUEluVmlld1BvcnQpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9IGVsc2UgaWYgKCFpc0ZpcnN0RFBJblZpZXdQb3J0KSB7XG5cdFx0XHRcdGlzRmlyc3REUEluVmlld1BvcnQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHRcdGkgLT0gMjtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGlzIHNlY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHBhcnRpYWxseSB2aXNpYmxlIGRhdGFQb2ludHMgYXJlIGluY2x1ZGVkIGF0IHRoZSBlbmRcblx0XHRcdGlmIChkYXRhUG9pbnRYID4gcGxvdEFyZWFYTWF4ICYmICFpc0xhc3REUEluVmlld1BvcnQpIHtcblx0XHRcdFx0aXNMYXN0RFBJblZpZXdQb3J0ID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YVBvaW50WCA+IHBsb3RBcmVhWE1heCAmJiBpc0xhc3REUEluVmlld1BvcnQpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChkYXRhU2VyaWVzLmRhdGFQb2ludHNbaV0ubGFiZWwpXG5cdFx0XHRcdHBsb3RVbml0LmF4aXNYLmxhYmVsc1tkYXRhUG9pbnRYXSA9IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tpXS5sYWJlbDtcblxuXG5cdFx0XHRpZiAoZGF0YVBvaW50WCA8IGF4aXNYRGF0YUluZm8udmlld1BvcnRNaW4pXG5cdFx0XHRcdGF4aXNYRGF0YUluZm8udmlld1BvcnRNaW4gPSBkYXRhUG9pbnRYO1xuXHRcdFx0aWYgKGRhdGFQb2ludFggPiBheGlzWERhdGFJbmZvLnZpZXdQb3J0TWF4KVxuXHRcdFx0XHRheGlzWERhdGFJbmZvLnZpZXdQb3J0TWF4ID0gZGF0YVBvaW50WDtcblxuXHRcdFx0aWYgKGRhdGFQb2ludFkgPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoZGF0YVBvaW50WU1pbiA8IGF4aXNZRGF0YUluZm8udmlld1BvcnRNaW4pXG5cdFx0XHRcdGF4aXNZRGF0YUluZm8udmlld1BvcnRNaW4gPSBkYXRhUG9pbnRZTWluO1xuXHRcdFx0aWYgKGRhdGFQb2ludFlNYXggPiBheGlzWURhdGFJbmZvLnZpZXdQb3J0TWF4KVxuXHRcdFx0XHRheGlzWURhdGFJbmZvLnZpZXdQb3J0TWF4ID0gZGF0YVBvaW50WU1heDtcblx0XHR9XG5cblx0XHR0aGlzLnBsb3RJbmZvLmF4aXNYVmFsdWVUeXBlID0gZGF0YVNlcmllcy54VmFsdWVUeXBlID0gaXNEYXRlVGltZSA/IFwiZGF0ZVRpbWVcIiA6IFwibnVtYmVyXCI7XG5cdH1cblxuXHQvL3RoaXMuZGF0YVBvaW50cy5zb3J0KGNvbXBhcmVEYXRhUG9pbnRYKTtcblx0Ly90aGlzLmRhdGFQb2ludHMuc29ydChmdW5jdGlvbiAoZGF0YVBvaW50MSwgZGF0YVBvaW50MikgeyByZXR1cm4gZGF0YVBvaW50MS54IC0gZGF0YVBvaW50Mi54OyB9KTtcbn1cblxuLy9nZXRDbG9zZXN0IHJldHVybnMgb2JqZWN0cyBuZWFyYnkgYW5kIGhlbmNlIHNob3VsZG4ndCBiZSB1c2VkIGZvciBldmVudHMgbGlrZSBjbGljaywgbW91c2VvdmVyLCBtb3VzZW1vdmUsIGV0YyB3aGljaCByZXF1aXJlIG9iamVjdCB0aGF0IGlzIGV4YWN0bHkgdW5kZXIgdGhlIG1vdXNlLlxuQ2hhcnQucHJvdG90eXBlLmdldERhdGFQb2ludEF0WFkgPSBmdW5jdGlvbiAobW91c2VYLCBtb3VzZVksIGdldENsb3Nlc3QpIHtcblxuXHRnZXRDbG9zZXN0ID0gZ2V0Q2xvc2VzdCB8fCBmYWxzZTtcblx0dmFyIHJlc3VsdHMgPSBbXTtcblxuXHRmb3IgKHZhciBpID0gdGhpcy5fZGF0YUluUmVuZGVyZWRPcmRlci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdHZhciBkYXRhU2VyaWVzID0gdGhpcy5fZGF0YUluUmVuZGVyZWRPcmRlcltpXTtcblxuXHRcdHZhciByZXN1bHQgPSBudWxsO1xuXG5cdFx0cmVzdWx0ID0gZGF0YVNlcmllcy5nZXREYXRhUG9pbnRBdFhZKG1vdXNlWCwgbW91c2VZLCBnZXRDbG9zZXN0KTtcblx0XHRpZiAocmVzdWx0KVxuXHRcdFx0cmVzdWx0cy5wdXNoKHJlc3VsdCk7XG5cdH1cblxuXHR2YXIgY2xvc2VzdFJlc3VsdCA9IG51bGw7XG5cdHZhciBvbmx5TGluZUFyZWFUeXBlcyA9IGZhbHNlO1xuXG5cdGZvciAodmFyIG0gPSAwOyBtIDwgcmVzdWx0cy5sZW5ndGg7IG0rKykge1xuXG5cdFx0aWYgKHJlc3VsdHNbbV0uZGF0YVNlcmllcy50eXBlID09PSBcImxpbmVcIiB8fCByZXN1bHRzW21dLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGVwTGluZVwiIHx8IHJlc3VsdHNbbV0uZGF0YVNlcmllcy50eXBlID09PSBcImFyZWFcIiB8fCByZXN1bHRzW21dLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGVwQXJlYVwiKSB7XG5cdFx0XHR2YXIgbWFya2VyU2l6ZSA9IGdldFByb3BlcnR5KFwibWFya2VyU2l6ZVwiLCByZXN1bHRzW21dLmRhdGFQb2ludCwgcmVzdWx0c1ttXS5kYXRhU2VyaWVzKSB8fCA4O1xuXHRcdFx0aWYgKHJlc3VsdHNbbV0uZGlzdGFuY2UgPD0gbWFya2VyU2l6ZSAvIDIpIHtcblx0XHRcdFx0b25seUxpbmVBcmVhVHlwZXMgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmb3IgKG0gPSAwOyBtIDwgcmVzdWx0cy5sZW5ndGg7IG0rKykge1xuXG5cdFx0aWYgKG9ubHlMaW5lQXJlYVR5cGVzICYmIHJlc3VsdHNbbV0uZGF0YVNlcmllcy50eXBlICE9PSBcImxpbmVcIiAmJiByZXN1bHRzW21dLmRhdGFTZXJpZXMudHlwZSAhPT0gXCJzdGVwTGluZVwiICYmIHJlc3VsdHNbbV0uZGF0YVNlcmllcy50eXBlICE9PSBcImFyZWFcIiAmJiByZXN1bHRzW21dLmRhdGFTZXJpZXMudHlwZSAhPT0gXCJzdGVwQXJlYVwiKVxuXHRcdFx0Y29udGludWU7XG5cblx0XHRpZiAoIWNsb3Nlc3RSZXN1bHQpIHtcblx0XHRcdGNsb3Nlc3RSZXN1bHQgPSByZXN1bHRzW21dO1xuXHRcdH0gZWxzZSBpZiAocmVzdWx0c1ttXS5kaXN0YW5jZSA8PSBjbG9zZXN0UmVzdWx0LmRpc3RhbmNlKSB7XG5cdFx0XHRjbG9zZXN0UmVzdWx0ID0gcmVzdWx0c1ttXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY2xvc2VzdFJlc3VsdDtcbn1cblxuQ2hhcnQucHJvdG90eXBlLmdldE9iamVjdEF0WFkgPSBmdW5jdGlvbiAobW91c2VYLCBtb3VzZVksIGdldENsb3Nlc3QpIHtcblx0Z2V0Q2xvc2VzdCA9IGdldENsb3Nlc3QgfHwgZmFsc2U7XG5cblx0dmFyIGlkID0gbnVsbDtcblxuXHR2YXIgZGF0YVBvaW50SW5mbyA9IHRoaXMuZ2V0RGF0YVBvaW50QXRYWShtb3VzZVgsIG1vdXNlWSwgZ2V0Q2xvc2VzdCk7XG5cblx0aWYgKGRhdGFQb2ludEluZm8pIHtcblx0XHRpZCA9IGRhdGFQb2ludEluZm8uZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbZGF0YVBvaW50SW5mby5kYXRhUG9pbnRJbmRleF07XG5cdH0gZWxzZSBpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHsvL0lFOStcblx0XHRpZCA9IGdldE9iamVjdElkKG1vdXNlWCwgbW91c2VZLCB0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHgpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZWdlbmQuaXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpdGVtID0gdGhpcy5sZWdlbmQuaXRlbXNbaV07XG5cblx0XHRcdGlmIChtb3VzZVggPj0gaXRlbS54MSAmJiBtb3VzZVggPD0gaXRlbS54MiAmJiBtb3VzZVkgPj0gaXRlbS55MSAmJiBtb3VzZVkgPD0gaXRlbS55Mikge1xuXHRcdFx0XHRpZCA9IGl0ZW0uaWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGlkO1xufVxuXG4vLy8gPHN1bW1hcnk+Q2FsY3VsYXRlcyBGb250IFNpemUgYmFzZWQgb24gc3RhbmRhcmRTaXplIGFuZCBDaGFydCBTaXplPC9zdW1tYXJ5PlxuLy8vIDxwYXJhbSBuYW1lPVwic3RhbmRhcmRTaXplXCIgdHlwZT1cIk51bWJlclwiPlN0YW5kYXJkIGZvbnQgc2l6ZSBmb3IgYSBDaGFydCB3aXRoIG1pbih3aWR0aCxoZWlnaHQpID0gNDAwcHg8L3BhcmFtPlxuLy8vIDxyZXR1cm5zIHR5cGU9XCJOdW1iZXJcIj5UaGUgYXJlYS48L3JldHVybnM+XG5DaGFydC5wcm90b3R5cGUuZ2V0QXV0b0ZvbnRTaXplID0gZnVuY3Rpb24gKHN0YW5kYXJkU2l6ZSwgd2lkdGgsIGhlaWdodCkge1xuXG5cdHdpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0aGVpZ2h0ID0gaGVpZ2h0IHx8IHRoaXMuaGVpZ2h0O1xuXG5cdHZhciBmb250U2l6ZVNjYWxlRmFjdG9yID0gc3RhbmRhcmRTaXplIC8gNDAwO1xuXG5cdHJldHVybiBNYXRoLnJvdW5kKE1hdGgubWluKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KSAqIGZvbnRTaXplU2NhbGVGYWN0b3IpO1xufVxuXG4vLyNyZWdpb24gRXZlbnRzXG5cbkNoYXJ0LnByb3RvdHlwZS5yZXNldE92ZXJsYXllZENhbnZhcyA9IGZ1bmN0aW9uICgpIHtcblx0Ly92YXIgd2lkdGggPSB0aGlzLm92ZXJsYWlkQ2FudmFzLndpZHRoO1xuXHQvL3RoaXMub3ZlcmxhaWRDYW52YXMud2lkdGggPSAwO1xuXHQvL3RoaXMub3ZlcmxhaWRDYW52YXMud2lkdGggPSB3aWR0aDtcblx0dGhpcy5vdmVybGFpZENhbnZhc0N0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufVxuXG5DaGFydC5wcm90b3R5cGUuY2xlYXJDYW52YXMgPSBmdW5jdGlvbiAoKSB7XG5cdHRoaXMuY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cblx0aWYgKHRoaXMuYmFja2dyb3VuZENvbG9yKSB7XG5cdFx0dGhpcy5jdHguZmlsbFN0eWxlID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3I7XG5cdFx0dGhpcy5jdHguZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXHR9XG59XG5cbkNoYXJ0LnByb3RvdHlwZS5hdHRhY2hFdmVudCA9IGZ1bmN0aW9uIChwYXJhbSkge1xuXHR0aGlzLl9ldmVudHMucHVzaChwYXJhbSk7XG59XG5cbkNoYXJ0LnByb3RvdHlwZS5fdG91Y2hFdmVudEhhbmRsZXIgPSBmdW5jdGlvbiAoZXYpIHtcblx0aWYgKCFldi5jaGFuZ2VkVG91Y2hlcyB8fCAhdGhpcy5pbnRlcmFjdGl2aXR5RW5hYmxlZClcblx0XHRyZXR1cm47XG5cblx0dmFyIG1vdXNlRXZlbnRzID0gW107XG5cdHZhciB0b3VjaGVzID0gZXYuY2hhbmdlZFRvdWNoZXM7XG5cdHZhciBmaXJzdCA9IHRvdWNoZXMgPyB0b3VjaGVzWzBdIDogZXY7XG5cdHZhciB0b3VjaEN1cnJlbnRDb29yZGluYXRlcyA9IG51bGw7XG5cblx0Ly93aW5kb3cuY29uc29sZS5sb2codG91Y2hlcy5sZW5ndGgpO1xuXG5cdHN3aXRjaCAoZXYudHlwZSkge1xuXHRcdGNhc2UgXCJ0b3VjaHN0YXJ0XCI6IGNhc2UgXCJNU1BvaW50ZXJEb3duXCI6XG5cdFx0XHRtb3VzZUV2ZW50cyA9IFtcIm1vdXNlbW92ZVwiLCBcIm1vdXNlZG93blwiXTtcblx0XHRcdHRoaXMuX2xhc3RUb3VjaERhdGEgPSBnZXRNb3VzZUNvb3JkaW5hdGVzKGZpcnN0KTtcblx0XHRcdHRoaXMuX2xhc3RUb3VjaERhdGEudGltZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwidG91Y2htb3ZlXCI6IGNhc2UgXCJNU1BvaW50ZXJNb3ZlXCI6IG1vdXNlRXZlbnRzID0gW1wibW91c2Vtb3ZlXCJdOyBicmVhaztcblx0XHRjYXNlIFwidG91Y2hlbmRcIjogY2FzZSBcIk1TUG9pbnRlclVwXCI6IG1vdXNlRXZlbnRzID0gKHRoaXMuX2xhc3RUb3VjaEV2ZW50VHlwZSA9PT0gXCJ0b3VjaHN0YXJ0XCIgfHwgdGhpcy5fbGFzdFRvdWNoRXZlbnRUeXBlID09PSBcIk1TUG9pbnRlckRvd25cIikgPyBbXCJtb3VzZXVwXCIsIFwiY2xpY2tcIl0gOiBbXCJtb3VzZXVwXCJdO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDogcmV0dXJuO1xuXHR9XG5cblx0aWYgKHRvdWNoZXMgJiYgdG91Y2hlcy5sZW5ndGggPiAxKSByZXR1cm47XG5cblxuXHR0b3VjaEN1cnJlbnRDb29yZGluYXRlcyA9IGdldE1vdXNlQ29vcmRpbmF0ZXMoZmlyc3QpO1xuXHR0b3VjaEN1cnJlbnRDb29yZGluYXRlcy50aW1lID0gbmV3IERhdGUoKTtcblx0dHJ5IHtcblx0XHR2YXIgZHkgPSB0b3VjaEN1cnJlbnRDb29yZGluYXRlcy55IC0gdGhpcy5fbGFzdFRvdWNoRGF0YS55O1xuXHRcdHZhciBkeCA9IHRvdWNoQ3VycmVudENvb3JkaW5hdGVzLnggLSB0aGlzLl9sYXN0VG91Y2hEYXRhLng7XG5cdFx0dmFyIGR0ID0gdG91Y2hDdXJyZW50Q29vcmRpbmF0ZXMudGltZSAtIHRoaXMuX2xhc3RUb3VjaERhdGEudGltZTtcblxuXHRcdGlmIChNYXRoLmFicyhkeSkgPiAxNSAmJiAoISF0aGlzLl9sYXN0VG91Y2hEYXRhLnNjcm9sbCB8fCBkdCA8IDIwMCkpIHtcblx0XHRcdC8vdGhpcy5fbGFzdFRvdWNoRGF0YS55ID0gdG91Y2hDdXJyZW50Q29vcmRpbmF0ZXMueTtcblx0XHRcdHRoaXMuX2xhc3RUb3VjaERhdGEuc2Nyb2xsID0gdHJ1ZTtcblxuXHRcdFx0dmFyIHdpbiA9IHdpbmRvdy5wYXJlbnQgfHwgd2luZG93O1xuXHRcdFx0aWYgKHdpbiAmJiB3aW4uc2Nyb2xsQnkpXG5cdFx0XHRcdHdpbi5zY3JvbGxCeSgwLCAtZHkpO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkgeyB9O1xuXG5cdHRoaXMuX2xhc3RUb3VjaEV2ZW50VHlwZSA9IGV2LnR5cGU7XG5cblx0aWYgKCEhdGhpcy5fbGFzdFRvdWNoRGF0YS5zY3JvbGwgJiYgdGhpcy56b29tRW5hYmxlZCkge1xuXHRcdGlmICh0aGlzLmlzRHJhZylcblx0XHRcdHRoaXMucmVzZXRPdmVybGF5ZWRDYW52YXMoKTtcblxuXHRcdHRoaXMuaXNEcmFnID0gZmFsc2U7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtb3VzZUV2ZW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0dmFyIHR5cGUgPSBtb3VzZUV2ZW50c1tpXTtcblx0XHR2YXIgc2ltdWxhdGVkRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIk1vdXNlRXZlbnRcIik7XG5cdFx0c2ltdWxhdGVkRXZlbnQuaW5pdE1vdXNlRXZlbnQodHlwZSwgdHJ1ZSwgdHJ1ZSwgd2luZG93LCAxLFxuXHRcdFx0XHRcdFx0XHRcdCAgZmlyc3Quc2NyZWVuWCwgZmlyc3Quc2NyZWVuWSxcblx0XHRcdFx0XHRcdFx0XHQgIGZpcnN0LmNsaWVudFgsIGZpcnN0LmNsaWVudFksIGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCwgbnVsbCk7XG5cblx0XHRmaXJzdC50YXJnZXQuZGlzcGF0Y2hFdmVudChzaW11bGF0ZWRFdmVudCk7XG5cblx0XHRpZiAoZXYucHJldmVudE1hbmlwdWxhdGlvbikge1xuXHRcdFx0Ly9hbGVydChcInByZXZlbnRNYW5pcHVsYXRpb25cIik7XG5cdFx0XHRldi5wcmV2ZW50TWFuaXB1bGF0aW9uKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGV2LnByZXZlbnREZWZhdWx0KSB7XG5cdFx0XHQvL2FsZXJ0KFwicHJldmVudERlZmF1bHRcIik7XG5cdFx0XHRldi5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fVxufVxuXG5DaGFydC5wcm90b3R5cGUuX2Rpc3BhdGNoUmFuZ2VFdmVudCA9IGZ1bmN0aW9uIChldmVudE5hbWUsIHRyaWdnZXJTb3VyY2UpIHtcblx0dmFyIGV2ZW50UGFyYW1ldGVyID0ge307XG5cblx0ZXZlbnRQYXJhbWV0ZXIuY2hhcnQgPSB0aGlzLl9wdWJsaWNDaGFydFJlZmVyZW5jZTtcblx0ZXZlbnRQYXJhbWV0ZXIudHlwZSA9IGV2ZW50TmFtZTtcblx0ZXZlbnRQYXJhbWV0ZXIudHJpZ2dlciA9IHRyaWdnZXJTb3VyY2U7XG5cblx0dmFyIGF4ZXMgPSBbXTtcblxuXHRpZiAodGhpcy5heGlzWClcblx0XHRheGVzLnB1c2goXCJheGlzWFwiKTtcblx0aWYgKHRoaXMuYXhpc1kpXG5cdFx0YXhlcy5wdXNoKFwiYXhpc1lcIik7XG5cdGlmICh0aGlzLmF4aXNZMilcblx0XHRheGVzLnB1c2goXCJheGlzWTJcIik7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBheGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZXZlbnRQYXJhbWV0ZXJbYXhlc1tpXV0gPSB7XG5cdFx0XHR2aWV3cG9ydE1pbmltdW06IHRoaXNbYXhlc1tpXV0uc2Vzc2lvblZhcmlhYmxlcy5uZXdWaWV3cG9ydE1pbmltdW0sXG5cdFx0XHR2aWV3cG9ydE1heGltdW06IHRoaXNbYXhlc1tpXV0uc2Vzc2lvblZhcmlhYmxlcy5uZXdWaWV3cG9ydE1heGltdW1cblx0XHR9XG5cdH1cblxuXHR0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnROYW1lLCBldmVudFBhcmFtZXRlciwgdGhpcy5fcHVibGljQ2hhcnRSZWZlcmVuY2UpO1xufVxuXG5DaGFydC5wcm90b3R5cGUuX21vdXNlRXZlbnRIYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG5cblx0aWYgKCF0aGlzLmludGVyYWN0aXZpdHlFbmFibGVkKVxuXHRcdHJldHVybjtcblxuXHRpZiAodGhpcy5faWdub3JlTmV4dEV2ZW50KSB7XG5cdFx0dGhpcy5faWdub3JlTmV4dEV2ZW50ID0gZmFsc2U7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gc3RvcCBwYW5uaW5nIGFuZCB6b29taW5nIHNvIHdlIGNhbiBkcmF3XG5cdGlmIChldi5wcmV2ZW50TWFuaXB1bGF0aW9uKSB7XG5cdFx0Ly9hbGVydChcInByZXZlbnRNYW5pcHVsYXRpb25cIik7XG5cdFx0ZXYucHJldmVudE1hbmlwdWxhdGlvbigpO1xuXHR9XG5cblx0Ly8gd2UgYXJlIGhhbmRsaW5nIHRoaXMgZXZlbnRcblx0aWYgKGV2LnByZXZlbnREZWZhdWx0KSB7XG5cdFx0Ly9hbGVydChcInByZXZlbnREZWZhdWx0XCIpO1xuXHRcdGV2LnByZXZlbnREZWZhdWx0KCk7XG5cdH1cblxuXHQvL0lFOC0gdXNlcyBzcmNFbGVtZW50IGluc3RlYWQgb2YgdGFyZ2V0LiBTbyBpbnN0ZWFkIG9mIGNoZWNraW5nIHRoaXMgY29uZGl0aW9uIGV2ZXJ5dGltZSwgaXRzIGJldHRlciB0byBjcmVhdGUgYSByZWZlcmVuY2UgY2FsbGVkIHRhcmdldC5cblx0aWYgKHR5cGVvZiAoZXYudGFyZ2V0KSA9PT0gXCJ1bmRlZmluZWRcIiAmJiBldi5zcmNFbGVtZW50KVxuXHRcdGV2LnRhcmdldCA9IGV2LnNyY0VsZW1lbnQ7XG5cblx0Ly9jb25zb2xlLmxvZyhldi50eXBlKTtcblxuXHR2YXIgeHkgPSBnZXRNb3VzZUNvb3JkaW5hdGVzKGV2KTtcblx0dmFyIHR5cGUgPSBldi50eXBlO1xuXHR2YXIgZXZlbnRQYXJhbTtcblx0dmFyIHJpZ2h0Y2xpY2s7XG5cblx0aWYgKCFldikgdmFyIGUgPSB3aW5kb3cuZXZlbnQ7XG5cdGlmIChldi53aGljaCkgcmlnaHRjbGljayA9IChldi53aGljaCA9PSAzKTtcblx0ZWxzZSBpZiAoZXYuYnV0dG9uKSByaWdodGNsaWNrID0gKGV2LmJ1dHRvbiA9PSAyKTtcblxuXHQvL3dpbmRvdy5jb25zb2xlLmxvZyh0eXBlICsgXCIgLS0+IHg6IFwiICsgeHkueCArIFwiOyB5OlwiICsgeHkueSk7XG5cblx0Ly9pZiAodHlwZSA9PT0gXCJtb3VzZW91dFwiKSB7XG5cdC8vICAgIHRoaXMuX3Rvb2xUaXAuaGlkZSgpO1xuXHQvL31cblxuXHRpZiAoaXNEZWJ1Z01vZGUgJiYgd2luZG93LmNvbnNvbGUpIHtcblx0XHR3aW5kb3cuY29uc29sZS5sb2codHlwZSArIFwiIC0tPiB4OiBcIiArIHh5LnggKyBcIjsgeTpcIiArIHh5LnkpO1xuXHRcdGlmIChyaWdodGNsaWNrKVxuXHRcdFx0d2luZG93LmNvbnNvbGUubG9nKGV2LndoaWNoKTtcblxuXHRcdGlmICh0eXBlID09PSBcIm1vdXNldXBcIilcblx0XHRcdHdpbmRvdy5jb25zb2xlLmxvZyhcIm1vdXNldXBcIik7XG5cdH1cblxuXHRpZiAocmlnaHRjbGljaylcblx0XHRyZXR1cm47XG5cblx0Ly9pZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBcInh5U3dhcHBlZFwiKSB7XG5cdC8vICAgIC8vdmFyIHRlbXAgPSB4eS54O1xuXHQvLyAgICAvL3h5LnggPSB4eS55O1xuXHQvLyAgICAvL3h5LnkgPSB0ZW1wO1xuXHQvLyAgICB4eSA9IHt4OiB4eS55LCB5OiB4eS54fTtcblx0Ly99XG5cblx0aWYgKENoYXJ0LmNhcHR1cmVkRXZlbnRQYXJhbSkge1xuXHRcdGV2ZW50UGFyYW0gPSBDaGFydC5jYXB0dXJlZEV2ZW50UGFyYW07XG5cblx0XHRpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIpIHtcblx0XHRcdENoYXJ0LmNhcHR1cmVkRXZlbnRQYXJhbSA9IG51bGw7XG5cblx0XHRcdGlmIChldmVudFBhcmFtLmNoYXJ0Lm92ZXJsYWlkQ2FudmFzLnJlbGVhc2VDYXB0dXJlKVxuXHRcdFx0XHRldmVudFBhcmFtLmNoYXJ0Lm92ZXJsYWlkQ2FudmFzLnJlbGVhc2VDYXB0dXJlKCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZXZlbnRQYXJhbS5jaGFydC5fbW91c2VFdmVudEhhbmRsZXIsIGZhbHNlKTtcblxuXHRcdH1cblxuXHRcdGlmIChldmVudFBhcmFtLmhhc093blByb3BlcnR5KHR5cGUpKVxuXHRcdFx0ZXZlbnRQYXJhbVt0eXBlXS5jYWxsKGV2ZW50UGFyYW0uY29udGV4dCwgeHkueCwgeHkueSk7XG5cblxuXG5cdH1cblx0ZWxzZSBpZiAodGhpcy5fZXZlbnRzKSB7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V2ZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKCF0aGlzLl9ldmVudHNbaV0uaGFzT3duUHJvcGVydHkodHlwZSkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRldmVudFBhcmFtID0gdGhpcy5fZXZlbnRzW2ldO1xuXHRcdFx0dmFyIGJvdW5kcyA9IGV2ZW50UGFyYW0uYm91bmRzO1xuXG5cdFx0XHRpZiAoeHkueCA+PSBib3VuZHMueDEgJiYgeHkueCA8PSBib3VuZHMueDIgJiYgeHkueSA+PSBib3VuZHMueTEgJiYgeHkueSA8PSBib3VuZHMueTIpIHtcblx0XHRcdFx0ZXZlbnRQYXJhbVt0eXBlXS5jYWxsKGV2ZW50UGFyYW0uY29udGV4dCwgeHkueCwgeHkueSk7XG5cblx0XHRcdFx0aWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgZXZlbnRQYXJhbS5jYXB0dXJlID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Q2hhcnQuY2FwdHVyZWRFdmVudFBhcmFtID0gZXZlbnRQYXJhbTtcblxuXHRcdFx0XHRcdGlmICh0aGlzLm92ZXJsYWlkQ2FudmFzLnNldENhcHR1cmUpXG5cdFx0XHRcdFx0XHR0aGlzLm92ZXJsYWlkQ2FudmFzLnNldENhcHR1cmUoKTtcblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgdGhpcy5fbW91c2VFdmVudEhhbmRsZXIsIGZhbHNlKTtcblx0XHRcdFx0XHRcdC8vYWRkRXZlbnQoZG9jdW1lbnQuYm9keSwgXCJtb3VzZXVwXCIsIHRoaXMuX21vdXNlRXZlbnRIYW5kbGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIpIHtcblx0XHRcdFx0XHRpZiAoZXZlbnRQYXJhbS5jaGFydC5vdmVybGFpZENhbnZhcy5yZWxlYXNlQ2FwdHVyZSlcblx0XHRcdFx0XHRcdGV2ZW50UGFyYW0uY2hhcnQub3ZlcmxhaWRDYW52YXMucmVsZWFzZUNhcHR1cmUoKTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMuX21vdXNlRXZlbnRIYW5kbGVyLCBmYWxzZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdFx0ZXZlbnRQYXJhbSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKGV2ZW50UGFyYW0gJiYgZXZlbnRQYXJhbS5jdXJzb3IpIHtcblx0XHRcdGV2LnRhcmdldC5zdHlsZS5jdXJzb3IgPSBldmVudFBhcmFtLmN1cnNvcjtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdFx0ZXYudGFyZ2V0LnN0eWxlLmN1cnNvciA9IHRoaXMuX2RlZmF1bHRDdXJzb3I7XG5cblx0XHQvL2V2ZW50UGFyYW0gPVxuXHR9XG5cblx0aWYgKHRoaXMuX3Rvb2xUaXAgJiYgdGhpcy5fdG9vbFRpcC5lbmFibGVkKSB7XG5cblx0XHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdFx0aWYgKHh5LnggPCBwbG90QXJlYS54MSB8fCB4eS54ID4gcGxvdEFyZWEueDIgfHwgeHkueSA8IHBsb3RBcmVhLnkxIHx8IHh5LnkgPiBwbG90QXJlYS55Milcblx0XHRcdHRoaXMuX3Rvb2xUaXAuaGlkZSgpO1xuXHR9XG5cblxuXHRpZiAoKCF0aGlzLmlzRHJhZyB8fCAhdGhpcy56b29tRW5hYmxlZCkgJiYgdGhpcy5fZXZlbnRNYW5hZ2VyKSB7XG5cblx0XHR0aGlzLl9ldmVudE1hbmFnZXIubW91c2VFdmVudEhhbmRsZXIoZXYpO1xuXHRcdC8vdGhpcy5fdXBkYXRlVG9vbFRpcChldi54LCBldi55KTtcblx0fVxuXG5cdC8vaWYgKHRoaXMuX3Rvb2xUaXAuZW5hYmxlZClcblx0Ly8gICAgdGhpcy5fdG9vbFRpcC5tb3VzZU1vdmVIYW5kbGVyKGV2LngsIGV2LnkpO1xufVxuXG5DaGFydC5wcm90b3R5cGUuX3Bsb3RBcmVhTW91c2VEb3duID0gZnVuY3Rpb24gKHgsIHkpIHtcblx0dGhpcy5pc0RyYWcgPSB0cnVlO1xuXG5cdGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgIT09IFwibm9uZVwiKSB7XG5cdFx0dGhpcy5kcmFnU3RhcnRQb2ludCA9IHsgeDogeCwgeTogeSB9O1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuZHJhZ1N0YXJ0UG9pbnQgPSB7IHg6IHgsIHk6IHkgfTtcblx0fVxufVxuXG5DaGFydC5wcm90b3R5cGUuX3Bsb3RBcmVhTW91c2VVcCA9IGZ1bmN0aW9uICh4LCB5KSB7XG5cblx0aWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJub3JtYWxcIiB8fCB0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwieHlTd2FwcGVkXCIpIHtcblx0XHRpZiAodGhpcy5pc0RyYWcpIHtcblx0XHRcdHZhciBkcmFnRGVsdGEgPSAwLFxuXHRcdFx0XHRkcmFnRGVsdGFQWSA9IHkgLSB0aGlzLmRyYWdTdGFydFBvaW50LnksXG5cdFx0XHRcdGRyYWdEZWx0YVBYID0geCAtIHRoaXMuZHJhZ1N0YXJ0UG9pbnQueCxcblx0XHRcdFx0em9vbVBYID0gdGhpcy56b29tVHlwZS5pbmRleE9mKFwieFwiKSA+PSAwLCAvL1doZXRoZXIgdG8gem9vbSBob3Jpem9udGFsbHlcblx0XHRcdFx0em9vbVBZID0gdGhpcy56b29tVHlwZS5pbmRleE9mKFwieVwiKSA+PSAwLCAvL1doZXRoZXIgdG8gem9vbSB2ZXJ0aWNhbGx5XG5cdFx0XHRcdHJlUmVuZGVyID0gZmFsc2U7XG5cblx0XHRcdHRoaXMucmVzZXRPdmVybGF5ZWRDYW52YXMoKTtcblxuXHRcdFx0aWYgKHRoaXMucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJ4eVN3YXBwZWRcIikge1xuXHRcdFx0XHR2YXIgdGVtcCA9IHpvb21QWTtcblx0XHRcdFx0em9vbVBZID0gem9vbVBYO1xuXHRcdFx0XHR6b29tUFggPSB0ZW1wO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5wYW5FbmFibGVkIHx8IHRoaXMuem9vbUVuYWJsZWQpIHtcblx0XHRcdFx0aWYgKHRoaXMucGFuRW5hYmxlZCkge1xuXG5cdFx0XHRcdFx0dmFyIG92ZXJmbG93ID0gMDtcblxuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYXhlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0dmFyIGF4aXMgPSB0aGlzLl9heGVzW2ldO1xuXG5cdFx0XHRcdFx0XHRpZiAoYXhpcy52aWV3cG9ydE1pbmltdW0gPCBheGlzLm1pbmltdW0pIHtcblxuXHRcdFx0XHRcdFx0XHRvdmVyZmxvdyA9IGF4aXMubWluaW11bSAtIGF4aXMudmlld3BvcnRNaW5pbXVtO1xuXG5cdFx0XHRcdFx0XHRcdGF4aXMuc2Vzc2lvblZhcmlhYmxlcy5uZXdWaWV3cG9ydE1pbmltdW0gPSBheGlzLnZpZXdwb3J0TWluaW11bSArIG92ZXJmbG93O1xuXHRcdFx0XHRcdFx0XHRheGlzLnNlc3Npb25WYXJpYWJsZXMubmV3Vmlld3BvcnRNYXhpbXVtID0gYXhpcy52aWV3cG9ydE1heGltdW0gKyBvdmVyZmxvdztcblxuXHRcdFx0XHRcdFx0cmVSZW5kZXIgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChheGlzLnZpZXdwb3J0TWF4aW11bSA+IGF4aXMubWF4aW11bSkge1xuXG5cdFx0XHRcdFx0XHRcdG92ZXJmbG93ID0gYXhpcy52aWV3cG9ydE1heGltdW0gLSBheGlzLm1heGltdW07XG5cdFx0XHRcdFx0XHRcdGF4aXMuc2Vzc2lvblZhcmlhYmxlcy5uZXdWaWV3cG9ydE1pbmltdW0gPSBheGlzLnZpZXdwb3J0TWluaW11bSAtIG92ZXJmbG93O1xuXHRcdFx0XHRcdFx0XHRheGlzLnNlc3Npb25WYXJpYWJsZXMubmV3Vmlld3BvcnRNYXhpbXVtID0gYXhpcy52aWV3cG9ydE1heGltdW0gLSBvdmVyZmxvdztcblxuXHRcdFx0XHRcdFx0cmVSZW5kZXIgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIGlmICgoKCF6b29tUFggfHwgTWF0aC5hYnMoZHJhZ0RlbHRhUFgpID4gMikgJiYgKCF6b29tUFkgfHwgTWF0aC5hYnMoZHJhZ0RlbHRhUFkpID4gMikpICYmIHRoaXMuem9vbUVuYWJsZWQpIHtcblxuXHRcdFx0XHRcdGlmICghdGhpcy5kcmFnU3RhcnRQb2ludClcblx0XHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRcdHZhciBzZWxlY3RlZFJlZ2lvbiA9IHtcblx0XHRcdFx0XHRcdHgxOiB6b29tUFggPyB0aGlzLmRyYWdTdGFydFBvaW50LnggOiB0aGlzLnBsb3RBcmVhLngxLFxuXHRcdFx0XHRcdFx0eTE6IHpvb21QWSA/IHRoaXMuZHJhZ1N0YXJ0UG9pbnQueSA6IHRoaXMucGxvdEFyZWEueTEsXG5cdFx0XHRcdFx0XHR4Mjogem9vbVBYID8geCA6IHRoaXMucGxvdEFyZWEueDIsXG5cdFx0XHRcdFx0XHR5Mjogem9vbVBZID8geSA6IHRoaXMucGxvdEFyZWEueTJcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0aWYgKE1hdGguYWJzKHNlbGVjdGVkUmVnaW9uLngxIC0gc2VsZWN0ZWRSZWdpb24ueDIpID4gMiAmJiBNYXRoLmFicyhzZWxlY3RlZFJlZ2lvbi55MSAtIHNlbGVjdGVkUmVnaW9uLnkyKSA+IDIpIHtcblxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuX3pvb21QYW5Ub1NlbGVjdGVkUmVnaW9uKHNlbGVjdGVkUmVnaW9uLngxLCBzZWxlY3RlZFJlZ2lvbi55MSwgc2VsZWN0ZWRSZWdpb24ueDIsIHNlbGVjdGVkUmVnaW9uLnkyKSkge1xuXG5cdFx0XHRcdFx0XHRcdHJlUmVuZGVyID0gdHJ1ZTtcblxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChyZVJlbmRlcikge1xuXHRcdFx0XHRcdHRoaXMuX2lnbm9yZU5leHRFdmVudCA9IHRydWU7Ly9SZXF1aXJlZCBzbyB0aGF0IGNsaWNrIGV2ZW50IGRvZXNuJ3QgZmlyZSBhZnRlciB6b29taW5nIGludG8gYSBzZWN0aW9uIG9mIHRoZSBjaGFydC5cblxuXHRcdFx0XHRcdHRoaXMuX2Rpc3BhdGNoUmFuZ2VFdmVudChcInJhbmdlQ2hhbmdpbmdcIiwgXCJ6b29tXCIpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0XHRcdFx0dGhpcy5fZGlzcGF0Y2hSYW5nZUV2ZW50KFwicmFuZ2VDaGFuZ2VkXCIsIFwiem9vbVwiKTtcblxuXHRcdFx0XHRcdGlmIChyZVJlbmRlciAmJiB0aGlzLnpvb21FbmFibGVkICYmIHRoaXMuX3pvb21CdXR0b24uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIpIHtcblx0XHRcdFx0XHRzaG93KHRoaXMuX3pvb21CdXR0b24sIHRoaXMuX3Jlc2V0QnV0dG9uKTtcblx0XHRcdFx0XHRzZXRCdXR0b25TdGF0ZSh0aGlzLCB0aGlzLl96b29tQnV0dG9uLCBcInBhblwiKTtcblx0XHRcdFx0XHRzZXRCdXR0b25TdGF0ZSh0aGlzLCB0aGlzLl9yZXNldEJ1dHRvbiwgXCJyZXNldFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR9XG5cblx0fVxuXG5cdHRoaXMuaXNEcmFnID0gZmFsc2U7XG59XG5cbkNoYXJ0LnByb3RvdHlwZS5fcGxvdEFyZWFNb3VzZU1vdmUgPSBmdW5jdGlvbiAoeCwgeSkge1xuXHRpZiAodGhpcy5pc0RyYWcgJiYgdGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ICE9PSBcIm5vbmVcIikge1xuXG5cdFx0dmFyIGRyYWdEZWx0YVBYID0gMCxcblx0XHRcdGRyYWdEZWx0YVBZID0gMCxcblx0XHRcdGFscGhhID0gbnVsbCxcblx0XHRcdHNlbGVjdGVkUmVnaW9uID0gbnVsbCxcblx0XHRcdHpvb21QWCA9IHRoaXMuem9vbVR5cGUuaW5kZXhPZihcInhcIikgPj0gMCwgLy9XaGV0aGVyIHRvIHpvb20gaG9yaXpvbnRhbGx5XG5cdFx0XHR6b29tUFkgPSB0aGlzLnpvb21UeXBlLmluZGV4T2YoXCJ5XCIpID49IDAsIC8vV2hldGhlciB0byB6b29tIHZlcnRpY2FsbHlcblx0XHRcdF90aGlzID0gdGhpcztcblxuXHRcdGlmICh0aGlzLnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgPT09IFwieHlTd2FwcGVkXCIpIHtcblx0XHRcdHZhciB0ZW1wID0gem9vbVBZO1xuXHRcdFx0em9vbVBZID0gem9vbVBYO1xuXHRcdFx0em9vbVBYID0gdGVtcDtcblx0XHR9XG5cblx0XHRkcmFnRGVsdGFQWCA9IHRoaXMuZHJhZ1N0YXJ0UG9pbnQueCAtIHg7XG5cdFx0ZHJhZ0RlbHRhUFkgPSB0aGlzLmRyYWdTdGFydFBvaW50LnkgLSB5O1xuXG5cdFx0aWYgKE1hdGguYWJzKGRyYWdEZWx0YVBYKSA+IDIgJiYgTWF0aC5hYnMoZHJhZ0RlbHRhUFgpIDwgOCAmJiAodGhpcy5wYW5FbmFibGVkIHx8IHRoaXMuem9vbUVuYWJsZWQpKSB7XG5cdFx0XHR0aGlzLl90b29sVGlwLmhpZGUoKTtcblx0XHR9IGVsc2UgaWYgKCF0aGlzLnBhbkVuYWJsZWQgJiYgIXRoaXMuem9vbUVuYWJsZWQpIHtcblx0XHRcdHRoaXMuX3Rvb2xUaXAubW91c2VNb3ZlSGFuZGxlcih4LCB5KTtcblx0XHR9XG5cblx0XHRpZiAoKCghem9vbVBYIHx8IE1hdGguYWJzKGRyYWdEZWx0YVBYKSA+IDIpIHx8ICghem9vbVBZIHx8IE1hdGguYWJzKGRyYWdEZWx0YVBZKSA+IDIpKSAmJiAodGhpcy5wYW5FbmFibGVkIHx8IHRoaXMuem9vbUVuYWJsZWQpKSB7XG5cdFx0XHRpZiAodGhpcy5wYW5FbmFibGVkKSB7XG5cblx0XHRcdFx0c2VsZWN0ZWRSZWdpb24gPVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHgxOiB6b29tUFggPyB0aGlzLnBsb3RBcmVhLngxICsgZHJhZ0RlbHRhUFggOiB0aGlzLnBsb3RBcmVhLngxLFxuXHRcdFx0XHRcdFx0eTE6IHpvb21QWSA/IHRoaXMucGxvdEFyZWEueTEgKyBkcmFnRGVsdGFQWSA6IHRoaXMucGxvdEFyZWEueTEsXG5cdFx0XHRcdFx0XHR4Mjogem9vbVBYID8gdGhpcy5wbG90QXJlYS54MiArIGRyYWdEZWx0YVBYIDogdGhpcy5wbG90QXJlYS54Mixcblx0XHRcdFx0XHRcdHkyOiB6b29tUFkgPyB0aGlzLnBsb3RBcmVhLnkyICsgZHJhZ0RlbHRhUFkgOiB0aGlzLnBsb3RBcmVhLnkyXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRpZiAodGhpcy5fem9vbVBhblRvU2VsZWN0ZWRSZWdpb24oc2VsZWN0ZWRSZWdpb24ueDEsIHNlbGVjdGVkUmVnaW9uLnkxLCBzZWxlY3RlZFJlZ2lvbi54Miwgc2VsZWN0ZWRSZWdpb24ueTIsIHRydWUpKSB7XG5cdFx0XHRcdFx0dGhpcy5fZGlzcGF0Y2hSYW5nZUV2ZW50KFwicmFuZ2VDaGFuZ2luZ1wiLCBcInBhblwiKTtcblx0XHRcdFx0XHR0aGlzLnJlbmRlcigpO1xuXHRcdFx0XHRcdHRoaXMuX2Rpc3BhdGNoUmFuZ2VFdmVudChcInJhbmdlQ2hhbmdlZFwiLCBcInBhblwiKTtcblxuXHRcdFx0XHRcdHRoaXMuZHJhZ1N0YXJ0UG9pbnQueCA9IHg7XG5cdFx0XHRcdFx0dGhpcy5kcmFnU3RhcnRQb2ludC55ID0geTtcblxuXHRcdFx0XHRcdC8vY2xlYXJUaW1lb3V0KHRoaXMuX3BhblRpbWVySWQpO1xuXHRcdFx0XHRcdC8vdGhpcy5fcGFuVGltZXJJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdC8vXHRfdGhpcy5fZGlzcGF0Y2hSYW5nZUV2ZW50KFwicmFuZ2VDaGFuZ2luZ1wiLCBcInBhblwiKTtcblx0XHRcdFx0XHQvL1x0X3RoaXMucmVuZGVyKCk7XG5cdFx0XHRcdFx0Ly9cdF90aGlzLl9kaXNwYXRjaFJhbmdlRXZlbnQoXCJyYW5nZUNoYW5nZWRcIiwgXCJwYW5cIik7XG5cdFx0XHRcdFx0Ly99LCAwKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuem9vbUVuYWJsZWQpIHtcblxuXHRcdFx0XHR0aGlzLnJlc2V0T3ZlcmxheWVkQ2FudmFzKCk7XG5cblx0XHRcdFx0YWxwaGEgPSB0aGlzLm92ZXJsYWlkQ2FudmFzQ3R4Lmdsb2JhbEFscGhhO1xuXG5cdFx0XHRcdHRoaXMub3ZlcmxhaWRDYW52YXNDdHguZ2xvYmFsQWxwaGEgPSAuNztcblx0XHRcdFx0dGhpcy5vdmVybGFpZENhbnZhc0N0eC5maWxsU3R5bGUgPSBcIiNBMEFCQjhcIjtcblxuXHRcdFx0XHR2YXIgcmVjdCA9IHtcblx0XHRcdFx0XHR4MTogem9vbVBYID8gdGhpcy5kcmFnU3RhcnRQb2ludC54IDogdGhpcy5wbG90QXJlYS54MSxcblx0XHRcdFx0XHR5MTogem9vbVBZID8gdGhpcy5kcmFnU3RhcnRQb2ludC55IDogdGhpcy5wbG90QXJlYS55MSxcblx0XHRcdFx0XHR4Mjogem9vbVBYID8geCAtIHRoaXMuZHJhZ1N0YXJ0UG9pbnQueCA6IHRoaXMucGxvdEFyZWEueDIgLSB0aGlzLnBsb3RBcmVhLngxLFxuXHRcdFx0XHRcdHkyOiB6b29tUFkgPyB5IC0gdGhpcy5kcmFnU3RhcnRQb2ludC55IDogdGhpcy5wbG90QXJlYS55MiAtIHRoaXMucGxvdEFyZWEueTFcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLm92ZXJsYWlkQ2FudmFzQ3R4LmZpbGxSZWN0KHJlY3QueDEsIHJlY3QueTEsIHJlY3QueDIsIHJlY3QueTIpO1xuXG5cdFx0XHRcdHRoaXMub3ZlcmxhaWRDYW52YXNDdHguZ2xvYmFsQWxwaGEgPSBhbHBoYTtcblx0XHRcdH1cblx0XHR9XG5cblx0fSBlbHNlXG5cdFx0dGhpcy5fdG9vbFRpcC5tb3VzZU1vdmVIYW5kbGVyKHgsIHkpO1xufVxuXG4vLyNlbmRyZWdpb24gRXZlbnRzXG5cbi8vU2V0cyB0aGUgdmlld3BvcnQgcmFuZ2Ugb2YgQXhpcyBiYXNlZCBvbiB0aGUgZ2l2ZW4gcmVjdCBib3VuZHMgKHBpeGVscykuIEFsc28gbGltaXRzIHRoZSB6b29taW5nL3Bhbm5pbmcgYmFzZWQgb24gYXhpcyBib3VuZHMuIFJldHVybnMgYSBib29sZWFuIHRvIGluZGljYXRlIHdoZXRoZXIgaXQgd2FzIHN1Y2Nlc2Z1bCBvciBub3QgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHJlZ2lvbi5cbkNoYXJ0LnByb3RvdHlwZS5fem9vbVBhblRvU2VsZWN0ZWRSZWdpb24gPSBmdW5jdGlvbiAocHgxLCBweTEsIHB4MiwgcHkyLCBrZWVwQXhpc0luZGVwZW5kZW50KSB7XG5cblx0a2VlcEF4aXNJbmRlcGVuZGVudCA9IGtlZXBBeGlzSW5kZXBlbmRlbnQgfHwgZmFsc2U7XG5cblx0dmFyIHpvb21QWCA9IHRoaXMuem9vbVR5cGUuaW5kZXhPZihcInhcIikgPj0gMCwgLy9XaGV0aGVyIHRvIHpvb20gaG9yaXpvbnRhbGx5XG5cdFx0em9vbVBZID0gdGhpcy56b29tVHlwZS5pbmRleE9mKFwieVwiKSA+PSAwLCAvL1doZXRoZXIgdG8gem9vbSB2ZXJ0aWNhbGx5XG5cdFx0dmFsaWRSZWdpb24gPSBmYWxzZTtcblxuXHR2YXIgYXhlcyA9IFtdLCBheGVzV2l0aFZhbGlkUmFuZ2UgPSBbXTtcblx0aWYgKHRoaXMuYXhpc1ggJiYgem9vbVBYKVxuXHRcdGF4ZXMucHVzaCh0aGlzLmF4aXNYKTtcblx0aWYgKHRoaXMuYXhpc1kgJiYgem9vbVBZKVxuXHRcdGF4ZXMucHVzaCh0aGlzLmF4aXNZKTtcblx0aWYgKHRoaXMuYXhpc1kyICYmIHpvb21QWSlcblx0XHRheGVzLnB1c2godGhpcy5heGlzWTIpO1xuXG5cdHZhciBwYXJhbXMgPSBbXTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGF4ZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgYXhpcyA9IGF4ZXNbaV07XG5cdFx0Ly92YXIgcmFuZ2UgPSBNYXRoLmFicyhheGlzLnZpZXdwb3J0TWF4aW11bSAtIGF4aXMudmlld3BvcnRNaW5pbXVtKTtcblxuXHRcdHZhciB2YWwxID0gYXhpcy5jb252ZXJ0UGl4ZWxUb1ZhbHVlKHsgeDogcHgxLCB5OiBweTEgfSk7XG5cdFx0dmFyIHZhbDIgPSBheGlzLmNvbnZlcnRQaXhlbFRvVmFsdWUoeyB4OiBweDIsIHk6IHB5MiB9KTtcblxuXHRcdGlmICh2YWwxID4gdmFsMikge1xuXHRcdFx0dmFyIHRlbXAgPSB2YWwyO1xuXHRcdFx0dmFsMiA9IHZhbDE7XG5cdFx0XHR2YWwxID0gdGVtcDtcblx0XHR9XG5cblx0XHRpZiAoaXNGaW5pdGUoYXhpcy5kYXRhSW5mby5taW5EaWZmKSkge1xuXHRcdFx0aWYgKCEoTWF0aC5hYnModmFsMiAtIHZhbDEpIDwgMyAqIE1hdGguYWJzKGF4aXMuZGF0YUluZm8ubWluRGlmZilcblx0XHRcdHx8ICh2YWwxIDwgYXhpcy5taW5pbXVtKSB8fCAodmFsMiA+IGF4aXMubWF4aW11bSkpKSB7XG5cdFx0XHRcdGF4ZXNXaXRoVmFsaWRSYW5nZS5wdXNoKGF4aXMpO1xuXHRcdFx0XHRwYXJhbXMucHVzaCh7IHZhbDE6IHZhbDEsIHZhbDI6IHZhbDIgfSk7XG5cblx0XHRcdFx0dmFsaWRSZWdpb24gPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmICgha2VlcEF4aXNJbmRlcGVuZGVudCkge1xuXHRcdFx0XHR2YWxpZFJlZ2lvbiA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAodmFsaWRSZWdpb24pIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF4ZXNXaXRoVmFsaWRSYW5nZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGF4aXMgPSBheGVzV2l0aFZhbGlkUmFuZ2VbaV07XG5cdFx0XHR2YXIgcGFyYW0gPSBwYXJhbXNbaV07XG5cblx0XHRcdGF4aXMuc2V0Vmlld1BvcnRSYW5nZShwYXJhbS52YWwxLCBwYXJhbS52YWwyKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdmFsaWRSZWdpb247XG59XG5cbkNoYXJ0LnByb3RvdHlwZS5wcmVwYXJlUGxvdEFyZWEgPSBmdW5jdGlvbiAoKSB7XG5cblx0dmFyIHBsb3RBcmVhID0gdGhpcy5wbG90QXJlYTtcblxuXHR2YXIgeUF4aXMgPSB0aGlzLmF4aXNZID8gdGhpcy5heGlzWSA6IHRoaXMuYXhpc1kyO1xuXG5cdGlmICghaXNDYW52YXNTdXBwb3J0ZWQgJiYgKHBsb3RBcmVhLngxID4gMCB8fCBwbG90QXJlYS55MSA+IDApKSB7XG5cdFx0cGxvdEFyZWEuY3R4LnRyYW5zbGF0ZShwbG90QXJlYS54MSwgcGxvdEFyZWEueTEpO1xuXHR9XG5cblx0aWYgKHRoaXMuYXhpc1ggJiYgeUF4aXMpIHtcblx0XHRwbG90QXJlYS54MSA9IHRoaXMuYXhpc1gubGluZUNvb3JkaW5hdGVzLngxIDwgdGhpcy5heGlzWC5saW5lQ29vcmRpbmF0ZXMueDIgPyB0aGlzLmF4aXNYLmxpbmVDb29yZGluYXRlcy54MSA6IHlBeGlzLmxpbmVDb29yZGluYXRlcy54MTtcblx0XHRwbG90QXJlYS55MSA9ICh0aGlzLmF4aXNYLmxpbmVDb29yZGluYXRlcy55MSA8IHlBeGlzLmxpbmVDb29yZGluYXRlcy55MSA/IHRoaXMuYXhpc1gubGluZUNvb3JkaW5hdGVzLnkxIDogeUF4aXMubGluZUNvb3JkaW5hdGVzLnkxKTtcblxuXHRcdHBsb3RBcmVhLngyID0gKHRoaXMuYXhpc1gubGluZUNvb3JkaW5hdGVzLngyID4geUF4aXMubGluZUNvb3JkaW5hdGVzLngyID8gdGhpcy5heGlzWC5saW5lQ29vcmRpbmF0ZXMueDIgOiB5QXhpcy5saW5lQ29vcmRpbmF0ZXMueDIpO1xuXHRcdHBsb3RBcmVhLnkyID0gdGhpcy5heGlzWC5saW5lQ29vcmRpbmF0ZXMueTIgPiB0aGlzLmF4aXNYLmxpbmVDb29yZGluYXRlcy55MSA/IHRoaXMuYXhpc1gubGluZUNvb3JkaW5hdGVzLnkyIDogeUF4aXMubGluZUNvb3JkaW5hdGVzLnkyO1xuXG5cdFx0cGxvdEFyZWEud2lkdGggPSBwbG90QXJlYS54MiAtIHBsb3RBcmVhLngxO1xuXHRcdHBsb3RBcmVhLmhlaWdodCA9IHBsb3RBcmVhLnkyIC0gcGxvdEFyZWEueTE7XG5cdFx0Ly9wbG90QXJlYSA9IHsgeDE6IHgxLCB5MTogeTEsIHgyOiB4MiwgeTI6IHkyLCB3aWR0aDogeDIgLSB4MSwgaGVpZ2h0OiB5MiAtIHkxIH07XG5cdH0gZWxzZSB7XG5cdFx0Ly9Ub0RvOiBAc3VuaWxcblx0XHR2YXIgZnJlZVNwYWNlID0gdGhpcy5sYXlvdXRNYW5hZ2VyLmdldEZyZWVTcGFjZSgpO1xuXHRcdHBsb3RBcmVhLngxID0gZnJlZVNwYWNlLngxO1xuXHRcdHBsb3RBcmVhLngyID0gZnJlZVNwYWNlLngyO1xuXHRcdHBsb3RBcmVhLnkxID0gZnJlZVNwYWNlLnkxO1xuXHRcdHBsb3RBcmVhLnkyID0gZnJlZVNwYWNlLnkyO1xuXG5cdFx0cGxvdEFyZWEud2lkdGggPSBmcmVlU3BhY2Uud2lkdGg7XG5cdFx0cGxvdEFyZWEuaGVpZ2h0ID0gZnJlZVNwYWNlLmhlaWdodDtcblx0fVxuXG5cdGlmICghaXNDYW52YXNTdXBwb3J0ZWQpIHtcblxuXHRcdHBsb3RBcmVhLmNhbnZhcy53aWR0aCA9IHBsb3RBcmVhLndpZHRoO1xuXHRcdHBsb3RBcmVhLmNhbnZhcy5oZWlnaHQgPSBwbG90QXJlYS5oZWlnaHQ7XG5cblx0XHRwbG90QXJlYS5jYW52YXMuc3R5bGUubGVmdCA9IHBsb3RBcmVhLngxICsgXCJweFwiO1xuXHRcdHBsb3RBcmVhLmNhbnZhcy5zdHlsZS50b3AgPSBwbG90QXJlYS55MSArIFwicHhcIjtcblxuXHRcdGlmIChwbG90QXJlYS54MSA+IDAgfHwgcGxvdEFyZWEueTEgPiAwKSB7XG5cdFx0XHRwbG90QXJlYS5jdHgudHJhbnNsYXRlKC1wbG90QXJlYS54MSwgLXBsb3RBcmVhLnkxKTtcblx0XHR9XG5cdH1cblxuXHRwbG90QXJlYS5sYXlvdXRNYW5hZ2VyID0gbmV3IExheW91dE1hbmFnZXIocGxvdEFyZWEueDEsIHBsb3RBcmVhLnkxLCBwbG90QXJlYS54MiwgcGxvdEFyZWEueTIsIDIpO1xufVxuXG5DaGFydC5wcm90b3R5cGUuZ2V0UGl4ZWxDb29yZGluYXRlc09uUGxvdEFyZWEgPSBmdW5jdGlvbiAoeCwgeSkge1xuXHRyZXR1cm4ge1xuXHRcdHg6IHRoaXMuYXhpc1guZ2V0UGl4ZWxDb29yZGluYXRlc09uQXhpcyh4KS54LCB5OiB0aGlzLmF4aXNZLmdldFBpeGVsQ29vcmRpbmF0ZXNPbkF4aXMoeSkueVxuXHR9XG5cdC8vcmV0dXJuIHsgeDogNSwgeTogMTAgfTtcbn1cblxuLy8jcmVnaW9uIFJlbmRlciBNZXRob2RzXG5cbkNoYXJ0LnByb3RvdHlwZS5yZW5kZXJJbmRleExhYmVscyA9IGZ1bmN0aW9uICh0YXJnZXRDdHgpIHtcblx0dmFyIGN0eCA9IHRhcmdldEN0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblxuXHR2YXIgcGxvdEFyZWEgPSB0aGlzLnBsb3RBcmVhO1xuXG5cdHZhciBtaWQgPSAwO1xuXHR2YXIgeU1pbkxpbWl0ID0gMDtcblx0dmFyIHlNYXhMaW1pdCA9IDA7XG5cdHZhciB4TWluTGltaXQgPSAwO1xuXHR2YXIgeE1heExpbWl0ID0gMDtcblx0dmFyIG1hcmdpblggPSAwLCBtYXJnaW5ZID0gMDsgLy8gTWFyZ2luIGJldHdlZW4gbGFiZWwgYW5kIGRhdGFQb2ludCAvIFBsb3RBcmVhXG5cdHZhciBvZmZTZXRYID0gMCwgb2ZmU2V0WSA9IDA7IC8vIERpc3RhbmNlIHRvIG9mZlNldCB0ZXh0QmxvY2sgKHRvcCkgZnJvbSBkYXRhUG9pbnQgaW5vcmRlciB0byBwb3NpdGlvbiBpdFxuXHR2YXIgdmlzaWJsZVdpZHRoID0gMDtcblx0dmFyIHZpc2libGVIZWlnaHQgPSAwO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5faW5kZXhMYWJlbHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdHZhciBpbmRleExhYmVsID0gdGhpcy5faW5kZXhMYWJlbHNbaV07XG5cdFx0dmFyIGNoYXJ0VHlwZUxvd2VyID0gaW5kZXhMYWJlbC5jaGFydFR5cGUudG9Mb3dlckNhc2UoKTtcblxuXHRcdHZhciB4LCB5LCBhbmdsZTtcblxuXHRcdHZhciBmb250Q29sb3IgPSBnZXRQcm9wZXJ0eShcImluZGV4TGFiZWxGb250Q29sb3JcIiwgaW5kZXhMYWJlbC5kYXRhUG9pbnQsIGluZGV4TGFiZWwuZGF0YVNlcmllcyk7XG5cdFx0dmFyIGZvbnRTaXplID0gZ2V0UHJvcGVydHkoXCJpbmRleExhYmVsRm9udFNpemVcIiwgaW5kZXhMYWJlbC5kYXRhUG9pbnQsIGluZGV4TGFiZWwuZGF0YVNlcmllcyk7XG5cdFx0dmFyIGZvbnRGYW1pbHkgPSBnZXRQcm9wZXJ0eShcImluZGV4TGFiZWxGb250RmFtaWx5XCIsIGluZGV4TGFiZWwuZGF0YVBvaW50LCBpbmRleExhYmVsLmRhdGFTZXJpZXMpO1xuXHRcdHZhciBmb250U3R5bGUgPSBnZXRQcm9wZXJ0eShcImluZGV4TGFiZWxGb250U3R5bGVcIiwgaW5kZXhMYWJlbC5kYXRhUG9pbnQsIGluZGV4TGFiZWwuZGF0YVNlcmllcyk7XG5cdFx0dmFyIGZvbnRXZWlnaHQgPSBnZXRQcm9wZXJ0eShcImluZGV4TGFiZWxGb250V2VpZ2h0XCIsIGluZGV4TGFiZWwuZGF0YVBvaW50LCBpbmRleExhYmVsLmRhdGFTZXJpZXMpO1xuXHRcdHZhciBiYWNrZ3JvdW5kQ29sb3IgPSBnZXRQcm9wZXJ0eShcImluZGV4TGFiZWxCYWNrZ3JvdW5kQ29sb3JcIiwgaW5kZXhMYWJlbC5kYXRhUG9pbnQsIGluZGV4TGFiZWwuZGF0YVNlcmllcyk7XG5cdFx0dmFyIG1heFdpZHRoID0gZ2V0UHJvcGVydHkoXCJpbmRleExhYmVsTWF4V2lkdGhcIiwgaW5kZXhMYWJlbC5kYXRhUG9pbnQsIGluZGV4TGFiZWwuZGF0YVNlcmllcyk7XG5cdFx0dmFyIGluZGV4TGFiZWxXcmFwID0gZ2V0UHJvcGVydHkoXCJpbmRleExhYmVsV3JhcFwiLCBpbmRleExhYmVsLmRhdGFQb2ludCwgaW5kZXhMYWJlbC5kYXRhU2VyaWVzKTtcblxuXHRcdHZhciBwZXJjZW50QW5kVG90YWwgPSB7XG5cdFx0XHRwZXJjZW50OiBudWxsLCB0b3RhbDogbnVsbFxuXHRcdH07XG5cdFx0dmFyIGZvcm1hdHRlclBhcmFtZXRlciA9IG51bGw7XG5cblx0XHRpZiAoaW5kZXhMYWJlbC5kYXRhU2VyaWVzLnR5cGUuaW5kZXhPZihcInN0YWNrZWRcIikgPj0gMCB8fCBpbmRleExhYmVsLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJwaWVcIiB8fCBpbmRleExhYmVsLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJkb3VnaG51dFwiKVxuXHRcdFx0cGVyY2VudEFuZFRvdGFsID0gdGhpcy5nZXRQZXJjZW50QW5kVG90YWwoaW5kZXhMYWJlbC5kYXRhU2VyaWVzLCBpbmRleExhYmVsLmRhdGFQb2ludCk7XG5cblx0XHRpZiAoaW5kZXhMYWJlbC5kYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIgfHwgaW5kZXhMYWJlbC5kYXRhUG9pbnQuaW5kZXhMYWJlbEZvcm1hdHRlcilcblx0XHRcdGZvcm1hdHRlclBhcmFtZXRlciA9IHtcblx0XHRcdFx0Y2hhcnQ6IHRoaXMuX29wdGlvbnMsIGRhdGFTZXJpZXM6IGluZGV4TGFiZWwuZGF0YVNlcmllcywgZGF0YVBvaW50OiBpbmRleExhYmVsLmRhdGFQb2ludCwgaW5kZXg6IGluZGV4TGFiZWwuaW5kZXhLZXl3b3JkLCB0b3RhbDogcGVyY2VudEFuZFRvdGFsLnRvdGFsLCBwZXJjZW50OiBwZXJjZW50QW5kVG90YWwucGVyY2VudFxuXHRcdFx0fTtcblxuXG5cdFx0dmFyIGluZGV4TGFiZWxUZXh0ID0gaW5kZXhMYWJlbC5kYXRhUG9pbnQuaW5kZXhMYWJlbEZvcm1hdHRlciA/IGluZGV4TGFiZWwuZGF0YVBvaW50LmluZGV4TGFiZWxGb3JtYXR0ZXIoZm9ybWF0dGVyUGFyYW1ldGVyKVxuXHRcdFx0OiBpbmRleExhYmVsLmRhdGFQb2ludC5pbmRleExhYmVsID8gdGhpcy5yZXBsYWNlS2V5d29yZHNXaXRoVmFsdWUoaW5kZXhMYWJlbC5kYXRhUG9pbnQuaW5kZXhMYWJlbCwgaW5kZXhMYWJlbC5kYXRhUG9pbnQsIGluZGV4TGFiZWwuZGF0YVNlcmllcywgbnVsbCwgaW5kZXhMYWJlbC5pbmRleEtleXdvcmQpXG5cdFx0XHQ6IGluZGV4TGFiZWwuZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyID8gaW5kZXhMYWJlbC5kYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIoZm9ybWF0dGVyUGFyYW1ldGVyKVxuXHRcdFx0OiBpbmRleExhYmVsLmRhdGFTZXJpZXMuaW5kZXhMYWJlbCA/IHRoaXMucmVwbGFjZUtleXdvcmRzV2l0aFZhbHVlKGluZGV4TGFiZWwuZGF0YVNlcmllcy5pbmRleExhYmVsLCBpbmRleExhYmVsLmRhdGFQb2ludCwgaW5kZXhMYWJlbC5kYXRhU2VyaWVzLCBudWxsLCBpbmRleExhYmVsLmluZGV4S2V5d29yZCkgOiBudWxsO1xuXG5cdFx0aWYgKGluZGV4TGFiZWxUZXh0ID09PSBudWxsIHx8IGluZGV4TGFiZWxUZXh0ID09PSBcIlwiKVxuXHRcdFx0Y29udGludWU7XG5cblx0XHR2YXIgcGxhY2VtZW50ID0gZ2V0UHJvcGVydHkoXCJpbmRleExhYmVsUGxhY2VtZW50XCIsIGluZGV4TGFiZWwuZGF0YVBvaW50LCBpbmRleExhYmVsLmRhdGFTZXJpZXMpO1xuXHRcdHZhciBvcmllbnRhdGlvbiA9IGdldFByb3BlcnR5KFwiaW5kZXhMYWJlbE9yaWVudGF0aW9uXCIsIGluZGV4TGFiZWwuZGF0YVBvaW50LCBpbmRleExhYmVsLmRhdGFTZXJpZXMpO1xuXHRcdHZhciBhbmdsZSA9IDA7XG5cblx0XHR2YXIgZGlyZWN0aW9uID0gaW5kZXhMYWJlbC5kaXJlY3Rpb247IC8vICsxIGZvciBhYm92ZSB0aGUgcG9pbnQgYW5kIC0xIGZvciBiZWxvdyB0aGUgcG9pbnRcblxuXHRcdHZhciBheGlzWCA9IGluZGV4TGFiZWwuZGF0YVNlcmllcy5heGlzWDtcblx0XHR2YXIgYXhpc1kgPSBpbmRleExhYmVsLmRhdGFTZXJpZXMuYXhpc1k7XG5cblxuXHRcdHZhciB0ZXh0QmxvY2sgPSBuZXcgVGV4dEJsb2NrKGN0eCwge1xuXHRcdFx0eDogMCxcblx0XHRcdHk6IDAsXG5cdFx0XHRtYXhXaWR0aDogbWF4V2lkdGggPyBtYXhXaWR0aCA6IHRoaXMud2lkdGggKiAuNSxcblx0XHRcdG1heEhlaWdodDogaW5kZXhMYWJlbFdyYXAgPyBmb250U2l6ZSAqIDUgOiBmb250U2l6ZSAqIDEuNSxcblx0XHRcdGFuZ2xlOiBvcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIgPyAwIDogLTkwLFxuXHRcdFx0dGV4dDogaW5kZXhMYWJlbFRleHQsXG5cdFx0XHRwYWRkaW5nOiAwLFxuXHRcdFx0YmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHRob3Jpem9udGFsQWxpZ246IFwibGVmdFwiLC8vbGVmdCwgY2VudGVyLCByaWdodFxuXHRcdFx0Zm9udFNpemU6IGZvbnRTaXplLC8vaW4gcGl4ZWxzXG5cdFx0XHRmb250RmFtaWx5OiBmb250RmFtaWx5LFxuXHRcdFx0Zm9udFdlaWdodDogZm9udFdlaWdodCwgLy9ub3JtYWwsIGJvbGQsIGJvbGRlciwgbGlnaHRlcixcblx0XHRcdGZvbnRDb2xvcjogZm9udENvbG9yLFxuXHRcdFx0Zm9udFN0eWxlOiBmb250U3R5bGUsIC8vIG5vcm1hbCwgaXRhbGljLCBvYmxpcXVlXG5cdFx0XHR0ZXh0QmFzZWxpbmU6IFwidG9wXCJcblx0XHR9KTtcblxuXHRcdHZhciB0ZXh0U2l6ZSA9IHRleHRCbG9jay5tZWFzdXJlVGV4dCgpO1xuXG5cdFx0Ly9pZiAoaW5kZXhMYWJlbC5kYXRhUG9pbnQueCA8IGF4aXNYLnZpZXdwb3J0TWluaW11bSB8fCBpbmRleExhYmVsLmRhdGFQb2ludC54ID4gYXhpc1gudmlld3BvcnRNYXhpbXVtIHx8IGluZGV4TGFiZWwuZGF0YVBvaW50LnkgPCBheGlzWS52aWV3cG9ydE1pbmltdW0gfHwgaW5kZXhMYWJlbC5kYXRhUG9pbnQueSA+IGF4aXNZLnZpZXdwb3J0TWF4aW11bSlcblx0XHQvL1x0Y29udGludWU7XG5cblx0XHRpZiAoY2hhcnRUeXBlTG93ZXIuaW5kZXhPZihcImxpbmVcIikgPj0gMCB8fCBjaGFydFR5cGVMb3dlci5pbmRleE9mKFwiYXJlYVwiKSA+PSAwXG5cdFx0XHRcdHx8IGNoYXJ0VHlwZUxvd2VyLmluZGV4T2YoXCJidWJibGVcIikgPj0gMCB8fCBjaGFydFR5cGVMb3dlci5pbmRleE9mKFwic2NhdHRlclwiKSA+PSAwKSB7XG5cblx0XHRcdGlmIChpbmRleExhYmVsLmRhdGFQb2ludC54IDwgYXhpc1gudmlld3BvcnRNaW5pbXVtIHx8IGluZGV4TGFiZWwuZGF0YVBvaW50LnggPiBheGlzWC52aWV3cG9ydE1heGltdW0gfHwgaW5kZXhMYWJlbC5kYXRhUG9pbnQueSA8IGF4aXNZLnZpZXdwb3J0TWluaW11bSB8fCBpbmRleExhYmVsLmRhdGFQb2ludC55ID4gYXhpc1kudmlld3BvcnRNYXhpbXVtKVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRpZiAoaW5kZXhMYWJlbC5kYXRhUG9pbnQueCA8IGF4aXNYLnZpZXdwb3J0TWluaW11bSB8fCBpbmRleExhYmVsLmRhdGFQb2ludC54ID4gYXhpc1gudmlld3BvcnRNYXhpbXVtKVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRtYXJnaW5ZID0gMjtcblx0XHRtYXJnaW5YID0gMjtcblxuXHRcdGlmIChvcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcblx0XHRcdHZpc2libGVXaWR0aCA9IHRleHRCbG9jay53aWR0aDtcblx0XHRcdHZpc2libGVIZWlnaHQgPSB0ZXh0QmxvY2suaGVpZ2h0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aXNpYmxlSGVpZ2h0ID0gdGV4dEJsb2NrLndpZHRoO1xuXHRcdFx0dmlzaWJsZVdpZHRoID0gdGV4dEJsb2NrLmhlaWdodDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5wbG90SW5mby5heGlzUGxhY2VtZW50ID09PSBcIm5vcm1hbFwiKSB7XG5cblx0XHRcdGlmIChjaGFydFR5cGVMb3dlci5pbmRleE9mKFwibGluZVwiKSA+PSAwIHx8IGNoYXJ0VHlwZUxvd2VyLmluZGV4T2YoXCJhcmVhXCIpID49IDApIHtcblxuXHRcdFx0XHRwbGFjZW1lbnQgPSBcImF1dG9cIjtcblx0XHRcdFx0bWFyZ2luWSA9IDQ7XG5cblx0XHRcdH0gZWxzZSBpZiAoY2hhcnRUeXBlTG93ZXIuaW5kZXhPZihcInN0YWNrZWRcIikgPj0gMCkge1xuXG5cdFx0XHRcdGlmIChwbGFjZW1lbnQgPT09IFwiYXV0b1wiKVxuXHRcdFx0XHRcdHBsYWNlbWVudCA9IFwiaW5zaWRlXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoY2hhcnRUeXBlTG93ZXIgPT09IFwiYnViYmxlXCIgfHwgY2hhcnRUeXBlTG93ZXIgPT09IFwic2NhdHRlclwiKSB7XG5cblx0XHRcdFx0cGxhY2VtZW50ID0gXCJpbnNpZGVcIjtcblxuXHRcdFx0fVxuXG5cdFx0XHR4ID0gaW5kZXhMYWJlbC5wb2ludC54IC0gdmlzaWJsZVdpZHRoIC8gMjtcblxuXHRcdFx0aWYgKHBsYWNlbWVudCAhPT0gXCJpbnNpZGVcIikge1x0Ly9vdXRzaWRlIG9yIGF1dG9cblxuXHRcdFx0XHR5TWluTGltaXQgPSBwbG90QXJlYS55MTtcblx0XHRcdFx0eU1heExpbWl0ID0gcGxvdEFyZWEueTI7XG5cblx0XHRcdFx0aWYgKGRpcmVjdGlvbiA+IDApIHtcblx0XHRcdFx0XHR5ID0gaW5kZXhMYWJlbC5wb2ludC55IC0gdmlzaWJsZUhlaWdodCAtIG1hcmdpblk7XG5cblx0XHRcdFx0XHRpZiAoeSA8IHlNaW5MaW1pdCkge1xuXHRcdFx0XHRcdFx0aWYgKHBsYWNlbWVudCA9PT0gXCJhdXRvXCIpIHtcblx0XHRcdFx0XHRcdFx0eSA9IE1hdGgubWF4KGluZGV4TGFiZWwucG9pbnQueSwgeU1pbkxpbWl0KSArIG1hcmdpblk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0eSA9IHlNaW5MaW1pdCArIG1hcmdpblk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHkgPSBpbmRleExhYmVsLnBvaW50LnkgKyBtYXJnaW5ZO1xuXG5cdFx0XHRcdFx0aWYgKHkgPiB5TWF4TGltaXQgLSB2aXNpYmxlSGVpZ2h0IC0gbWFyZ2luWSkge1xuXHRcdFx0XHRcdFx0aWYgKHBsYWNlbWVudCA9PT0gXCJhdXRvXCIpIHtcblx0XHRcdFx0XHRcdFx0eSA9IE1hdGgubWluKGluZGV4TGFiZWwucG9pbnQueSwgeU1heExpbWl0KSAtIHZpc2libGVIZWlnaHQgLSBtYXJnaW5ZO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHkgPSB5TWF4TGltaXQgLSB2aXNpYmxlSGVpZ2h0IC0gbWFyZ2luWTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXG5cdFx0XHRcdHlNaW5MaW1pdCA9IE1hdGgubWF4KGluZGV4TGFiZWwuYm91bmRzLnkxLCBwbG90QXJlYS55MSk7XG5cdFx0XHRcdHlNYXhMaW1pdCA9IE1hdGgubWluKGluZGV4TGFiZWwuYm91bmRzLnkyLCBwbG90QXJlYS55Mik7XG5cblxuXHRcdFx0XHRpZiAoY2hhcnRUeXBlTG93ZXIuaW5kZXhPZihcInJhbmdlXCIpID49IDApIHtcblx0XHRcdFx0XHRpZiAoZGlyZWN0aW9uID4gMClcblx0XHRcdFx0XHRcdG1pZCA9IE1hdGgubWF4KGluZGV4TGFiZWwuYm91bmRzLnkxLCBwbG90QXJlYS55MSkgKyB2aXNpYmxlSGVpZ2h0IC8gMiArIG1hcmdpblk7XG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0bWlkID0gTWF0aC5taW4oaW5kZXhMYWJlbC5ib3VuZHMueTIsIHBsb3RBcmVhLnkyKSAtIHZpc2libGVIZWlnaHQgLyAyIC0gbWFyZ2luWTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0bWlkID0gKE1hdGgubWF4KGluZGV4TGFiZWwuYm91bmRzLnkxLCBwbG90QXJlYS55MSkgKyBNYXRoLm1pbihpbmRleExhYmVsLmJvdW5kcy55MiwgcGxvdEFyZWEueTIpKSAvIDJcblxuXHRcdFx0XHRpZiAoZGlyZWN0aW9uID4gMCkge1xuXHRcdFx0XHRcdHkgPSBNYXRoLm1heChpbmRleExhYmVsLnBvaW50LnksIG1pZCkgLSB2aXNpYmxlSGVpZ2h0IC8gMjtcblxuXHRcdFx0XHRcdGlmICh5IDwgeU1pbkxpbWl0ICYmIChjaGFydFR5cGVMb3dlciA9PT0gXCJidWJibGVcIiB8fCBjaGFydFR5cGVMb3dlciA9PT0gXCJzY2F0dGVyXCIpKSB7XG5cdFx0XHRcdFx0XHR5ID0gTWF0aC5tYXgoaW5kZXhMYWJlbC5wb2ludC55IC0gdmlzaWJsZUhlaWdodCAtIG1hcmdpblksIHBsb3RBcmVhLnkxICsgbWFyZ2luWSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHkgPSBNYXRoLm1pbihpbmRleExhYmVsLnBvaW50LnksIG1pZCkgLSB2aXNpYmxlSGVpZ2h0IC8gMjtcblxuXHRcdFx0XHRcdGlmICh5ID4geU1heExpbWl0IC0gdmlzaWJsZUhlaWdodCAtIG1hcmdpblkgJiYgKGNoYXJ0VHlwZUxvd2VyID09PSBcImJ1YmJsZVwiIHx8IGNoYXJ0VHlwZUxvd2VyID09PSBcInNjYXR0ZXJcIikpIHtcblx0XHRcdFx0XHRcdHkgPSBNYXRoLm1pbihpbmRleExhYmVsLnBvaW50LnkgKyBtYXJnaW5ZLCBwbG90QXJlYS55MiAtIHZpc2libGVIZWlnaHQgLSBtYXJnaW5ZKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuICAgICAgICAgICAgICAgICAgLy8gTWFrZSBTdXJlIHRoYXQgaXQgZG9lcyBub3Qgb3ZlcmxhcCB0aGUgYXhpcyBsaW5lXG5cdFx0XHRcdHkgPSBNYXRoLm1pbih5LCB5TWF4TGltaXQgLSB2aXNpYmxlSGVpZ2h0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSB7XG5cblx0XHRcdGlmIChjaGFydFR5cGVMb3dlci5pbmRleE9mKFwibGluZVwiKSA+PSAwIHx8IGNoYXJ0VHlwZUxvd2VyLmluZGV4T2YoXCJhcmVhXCIpID49IDBcblx0XHRcdFx0fHwgY2hhcnRUeXBlTG93ZXIuaW5kZXhPZihcInNjYXR0ZXJcIikgPj0gMCkge1xuXG5cdFx0XHRcdHBsYWNlbWVudCA9IFwiYXV0b1wiO1xuXHRcdFx0XHRtYXJnaW5YID0gNDtcblxuXHRcdFx0fSBlbHNlIGlmIChjaGFydFR5cGVMb3dlci5pbmRleE9mKFwic3RhY2tlZFwiKSA+PSAwKSB7XG5cblx0XHRcdFx0aWYgKHBsYWNlbWVudCA9PT0gXCJhdXRvXCIpXG5cdFx0XHRcdFx0cGxhY2VtZW50ID0gXCJpbnNpZGVcIjtcblxuXHRcdFx0fSBlbHNlIGlmIChjaGFydFR5cGVMb3dlciA9PT0gXCJidWJibGVcIikge1xuXG5cdFx0XHRcdHBsYWNlbWVudCA9IFwiaW5zaWRlXCI7XG5cblx0XHRcdH1cblxuXHRcdFx0eSA9IGluZGV4TGFiZWwucG9pbnQueSAtIHZpc2libGVIZWlnaHQgLyAyO1xuXG5cdFx0XHRpZiAocGxhY2VtZW50ICE9PSBcImluc2lkZVwiKSB7XHQvL291dHNpZGUgb3IgYXV0b1xuXG5cdFx0XHRcdHhNaW5MaW1pdCA9IHBsb3RBcmVhLngxO1xuXHRcdFx0XHR4TWF4TGltaXQgPSBwbG90QXJlYS54MjtcblxuXHRcdFx0XHRpZiAoZGlyZWN0aW9uIDwgMCkge1xuXHRcdFx0XHRcdHggPSBpbmRleExhYmVsLnBvaW50LnggLSB2aXNpYmxlV2lkdGggLSBtYXJnaW5YO1xuXG5cdFx0XHRcdFx0aWYgKHggPCB4TWluTGltaXQpIHtcblx0XHRcdFx0XHRcdGlmIChwbGFjZW1lbnQgPT09IFwiYXV0b1wiKSB7XG5cdFx0XHRcdFx0XHRcdHggPSBNYXRoLm1heChpbmRleExhYmVsLnBvaW50LngsIHhNaW5MaW1pdCkgKyBtYXJnaW5YO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHggPSB4TWluTGltaXQgKyBtYXJnaW5YO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR4ID0gaW5kZXhMYWJlbC5wb2ludC54ICsgbWFyZ2luWDtcblxuXHRcdFx0XHRcdGlmICh4ID4geE1heExpbWl0IC0gdmlzaWJsZVdpZHRoIC0gbWFyZ2luWCkge1xuXHRcdFx0XHRcdFx0aWYgKHBsYWNlbWVudCA9PT0gXCJhdXRvXCIpIHtcblx0XHRcdFx0XHRcdFx0eCA9IE1hdGgubWluKGluZGV4TGFiZWwucG9pbnQueCwgeE1heExpbWl0KSAtIHZpc2libGVXaWR0aCAtIG1hcmdpblg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0eCA9IHhNYXhMaW1pdCAtIHZpc2libGVXaWR0aCAtIG1hcmdpblg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0eE1pbkxpbWl0ID0gTWF0aC5tYXgoaW5kZXhMYWJlbC5ib3VuZHMueDEsIHBsb3RBcmVhLngxKTtcblx0XHRcdFx0eE1heExpbWl0ID0gTWF0aC5taW4oaW5kZXhMYWJlbC5ib3VuZHMueDIsIHBsb3RBcmVhLngyKTtcblxuXHRcdFx0XHRpZiAoY2hhcnRUeXBlTG93ZXIuaW5kZXhPZihcInJhbmdlXCIpID49IDApIHtcblx0XHRcdFx0XHRpZiAoZGlyZWN0aW9uIDwgMClcblx0XHRcdFx0XHRcdG1pZCA9IE1hdGgubWF4KGluZGV4TGFiZWwuYm91bmRzLngxLCBwbG90QXJlYS54MSkgKyB2aXNpYmxlV2lkdGggLyAyICsgbWFyZ2luWDtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRtaWQgPSBNYXRoLm1pbihpbmRleExhYmVsLmJvdW5kcy54MiwgcGxvdEFyZWEueDIpIC0gdmlzaWJsZVdpZHRoIC8gMiAtIG1hcmdpblg7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHZhciBtaWQgPSAoTWF0aC5tYXgoaW5kZXhMYWJlbC5ib3VuZHMueDEsIHBsb3RBcmVhLngxKSArIE1hdGgubWluKGluZGV4TGFiZWwuYm91bmRzLngyLCBwbG90QXJlYS54MikpIC8gMjtcblxuXHRcdFx0XHRpZiAoZGlyZWN0aW9uIDwgMCkge1xuXHRcdFx0XHRcdHggPSBNYXRoLm1heChpbmRleExhYmVsLnBvaW50LngsIG1pZCkgLSB2aXNpYmxlV2lkdGggLyAyO1xuXG5cdFx0XHRcdFx0Ly9pZiAoeSA8IHhNaW5MaW1pdCkge1xuXHRcdFx0XHRcdC8vXHR5ID0gTWF0aC5tYXgoaW5kZXhMYWJlbC5wb2ludC55IC0gdmlzaWJsZUhlaWdodCAtIG1hcmdpblksIHBsb3RBcmVhLnkxICsgbWFyZ2luWSk7XG5cdFx0XHRcdFx0Ly99XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0eCA9IE1hdGgubWluKGluZGV4TGFiZWwucG9pbnQueCwgbWlkKSAtIHZpc2libGVXaWR0aCAvIDI7XG5cblx0XHRcdFx0XHQvL2lmICh5ID4geE1heExpbWl0IC0gdmlzaWJsZUhlaWdodCAtIG1hcmdpblkpIHtcblx0XHRcdFx0XHQvL1x0eSA9IE1hdGgubWluKGluZGV4TGFiZWwucG9pbnQueSArIG1hcmdpblksIHBsb3RBcmVhLnkyIC0gdmlzaWJsZUhlaWdodCAtIG1hcmdpblkpO1xuXHRcdFx0XHRcdC8vfVxuXHRcdFx0XHR9XG5cblx0XHRcdCAgICAvLyBNYWtlIFN1cmUgdGhhdCBpdCBkb2VzIG5vdCBvdmVybGFwIHRoZSBheGlzIGxpbmVcblx0XHRcdCAgICB4ID0gTWF0aC5tYXgoeCwgeE1pbkxpbWl0KTtcblx0XHRcdH1cblx0XHR9XG5cblxuXHRcdGlmIChvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG5cdFx0XHR5ICs9IHZpc2libGVIZWlnaHQ7XG5cdFx0fVxuXG5cdFx0dGV4dEJsb2NrLnggPSB4O1xuXHRcdHRleHRCbG9jay55ID0geTtcblxuXHRcdC8vY29uc29sZS5sb2codGV4dEJsb2NrLnRleHQgKyBcIjogXCIgKyB0ZXh0QmxvY2sueCArIFwiOyBcIiArIHRleHRCbG9jay55KTtcblxuXHRcdHRleHRCbG9jay5yZW5kZXIodHJ1ZSk7XG5cdH1cblxuXHQvL3NvdXJjZSBhbmQgZGVzdCB3b3VsZCBiZSBzYW1lIHdoZW4gYW5pbWF0aW9uIGlzIG5vdCBlbmFibGVkXG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci5mYWRlSW5BbmltYXRpb24sIGVhc2luZ0Z1bmN0aW9uOiBBbmltYXRpb25IZWxwZXIuZWFzaW5nLmVhc2VJblF1YWQsIGFuaW1hdGlvbkJhc2U6IDAsIHN0YXJ0VGltZVBlcmNlbnQ6IC43XG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyTGluZSA9IGZ1bmN0aW9uIChwbG90VW5pdCkge1xuXG5cdHZhciBjdHggPSBwbG90VW5pdC50YXJnZXRDYW52YXNDdHggfHwgdGhpcy5wbG90QXJlYS5jdHg7XG5cblx0dmFyIHRvdGFsRGF0YVNlcmllcyA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDtcblx0aWYgKHRvdGFsRGF0YVNlcmllcyA8PSAwKVxuXHRcdHJldHVybjtcblxuXHR2YXIgZ2hvc3RDdHggPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2hvc3RDdHg7XG5cdC8vdmFyIGdob3N0Q3R4ID0gdGhpcy5vdmVybGFpZENhbnZhc0N0eDtcblxuXHRjdHguc2F2ZSgpO1xuXG5cdHZhciBwbG90QXJlYSA9IHRoaXMucGxvdEFyZWE7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRjdHgucmVjdChwbG90QXJlYS54MSwgcGxvdEFyZWEueTEsIHBsb3RBcmVhLndpZHRoLCBwbG90QXJlYS5oZWlnaHQpO1xuXHRjdHguY2xpcCgpO1xuXG5cdHZhciBtYXJrZXJzID0gW107XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBwbG90VW5pdC5kYXRhU2VyaWVzSW5kZXhlcy5sZW5ndGg7IGorKykge1xuXG5cdFx0dmFyIGRhdGFTZXJpZXNJbmRleCA9IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzW2pdO1xuXG5cdFx0dmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFbZGF0YVNlcmllc0luZGV4XTtcblx0XHRjdHgubGluZVdpZHRoID0gZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzO1xuXHRcdHZhciBkYXRhUG9pbnRzID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzO1xuXG5cblx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XG5cdFx0XHRjdHguc2V0TGluZURhc2goZ2V0TGluZURhc2hBcnJheShkYXRhU2VyaWVzLmxpbmVEYXNoVHlwZSwgZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzKSk7XG5cdFx0fVxuXG5cdFx0dmFyIHNlcmllc0lkID0gZGF0YVNlcmllcy5pZDtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW3Nlcmllc0lkXSA9IHtcblx0XHRcdG9iamVjdFR5cGU6IFwiZGF0YVNlcmllc1wiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleFxuXHRcdH07XG5cdFx0dmFyIGhleENvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhzZXJpZXNJZCk7XG5cdFx0Z2hvc3RDdHguc3Ryb2tlU3R5bGUgPSBoZXhDb2xvcjtcblx0XHQvL2dob3N0Q3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblx0XHRnaG9zdEN0eC5saW5lV2lkdGggPSBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MgPiAwID8gTWF0aC5tYXgoZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzLCA0KSA6IDA7XG5cblx0XHR2YXIgY29sb3JTZXQgPSBkYXRhU2VyaWVzLl9jb2xvclNldDtcblx0XHR2YXIgY29sb3IgPSBjb2xvclNldFswXTtcblx0XHRjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcblxuXHRcdHZhciBpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IHRydWU7XG5cdFx0dmFyIGkgPSAwLCB4LCB5O1xuXHRcdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgYmFjayBhbmQgZm9ydGguXG5cblx0XHQvL2lmICghZGF0YVNlcmllcy5fb3B0aW9ucy5tYXJrZXJTaXplICYmIGRhdGFTZXJpZXMuZGF0YVBvaW50cy5sZW5ndGggPCAxMDAwKVxuXHRcdC8vICAgIGRhdGFTZXJpZXMubWFya2VyU2l6ZSA9IDg7XG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdGlmIChkYXRhUG9pbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vdmFyIHh5ID0gdGhpcy5nZXRQaXhlbENvb3JkaW5hdGVzT25QbG90QXJlYShkYXRhUG9pbnRzWzBdLngsIGRhdGFQb2ludHNbMF0ueSk7XG5cblx0XHRcdC8vZGF0YVNlcmllcy5ub0RhdGFQb2ludHNJblBsb3RBcmVhID0gMFxuXHRcdFx0dmFyIHByZXZEYXRhTnVsbCA9IGZhbHNlO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS54LmdldFRpbWUgPyBkYXRhUG9pbnRzW2ldLnguZ2V0VGltZSgpIDogZGF0YVBvaW50c1tpXS54O1xuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRYIDwgcGxvdFVuaXQuYXhpc1guZGF0YUluZm8udmlld1BvcnRNaW4gfHwgZGF0YVBvaW50WCA+IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWF4KVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdC8vaWYgKCFpc0Zpbml0ZShkYXRhUG9pbnRzW2ldLnkpKVxuXHRcdFx0XHQvLyAgICBjb250aW51ZTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIChkYXRhUG9pbnRzW2ldLnkpICE9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdFx0aWYgKGkgPiAwKSB7Ly8gaWYgZmlyc3QgZGF0YVBvaW50IGlzIG51bGwgdGhlbiBubyBuZWVkIHRvIGNhbGwgc3Ryb2tlIG1ldGhvZFxuXHRcdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXG5cdFx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdFx0Z2hvc3RDdHguc3Ryb2tlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cblx0XHRcdFx0XHRwcmV2RGF0YU51bGwgPSB0cnVlO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0eCA9IChwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgKiAoZGF0YVBvaW50WCAtIHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cdFx0XHRcdHkgPSAocGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludHNbaV0ueSAtIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pICsgLjUpIDw8IDA7XG5cblx0XHRcdFx0dmFyIGlkID0gZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbaV07XG5cdFx0XHRcdHRoaXMuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdID0ge1xuXHRcdFx0XHRcdGlkOiBpZCwgb2JqZWN0VHlwZTogXCJkYXRhUG9pbnRcIiwgZGF0YVNlcmllc0luZGV4OiBkYXRhU2VyaWVzSW5kZXgsIGRhdGFQb2ludEluZGV4OiBpLCB4MTogeCwgeTE6IHlcblx0XHRcdFx0fTtcblxuXG5cdFx0XHRcdC8vZGF0YVNlcmllcy5ub0RhdGFQb2ludHNJblBsb3RBcmVhKys7XG5cblx0XHRcdFx0aWYgKGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhIHx8IHByZXZEYXRhTnVsbCkge1xuXHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRjdHgubW92ZVRvKHgsIHkpO1xuXG5cblx0XHRcdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubW92ZVRvKHgsIHkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlzRmlyc3REYXRhUG9pbnRJblBsb3RBcmVhID0gZmFsc2U7XG5cdFx0XHRcdFx0cHJldkRhdGFOdWxsID0gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRjdHgubGluZVRvKHgsIHkpO1xuXG5cdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRcdFx0Z2hvc3RDdHgubGluZVRvKHgsIHkpO1xuXG5cdFx0XHRcdFx0aWYgKGkgJSA1MDAgPT0gMCkge1xuXHRcdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdFx0Y3R4Lm1vdmVUbyh4LCB5KTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRcdGdob3N0Q3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdFx0Z2hvc3RDdHgubW92ZVRvKHgsIHkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vUmVuZGVyIE1hcmtlclxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5tYXJrZXJTaXplID4gMCB8fCBkYXRhU2VyaWVzLm1hcmtlclNpemUgPiAwKSB7XG5cblx0XHRcdFx0XHR2YXIgbWFya2VyUHJvcHMgPSBkYXRhU2VyaWVzLmdldE1hcmtlclByb3BlcnRpZXMoaSwgeCwgeSwgY3R4KTtcblx0XHRcdFx0XHRtYXJrZXJzLnB1c2gobWFya2VyUHJvcHMpO1xuXG5cdFx0XHRcdFx0Ly9pZiAoIWRhdGFTZXJpZXMubWF4V2lkdGhJblggfHwgbWFya2VyUHJvcHMuc2l6ZSA+IGRhdGFTZXJpZXMubWF4V2lkdGhJblgpIHtcblx0XHRcdFx0XHQvL1x0ZGF0YVNlcmllcy5tYXhXaWR0aEluWCA9IG1hcmtlclByb3BzLnNpemUgLyAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ID4gMSA/IHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAtIDEgOiBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQpO1xuXHRcdFx0XHRcdC8vfVxuXG5cdFx0XHRcdFx0dmFyIG1hcmtlckNvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhpZCk7XG5cblx0XHRcdFx0XHQvL3dpbmRvdy5jb25zb2xlLmxvZyhcImluZGV4OiBcIiArIGkgKyBcIjsgaWQ6IFwiICsgaWQgKyBcIjsgaGV4OiBcIiArIG1hcmtlckNvbG9yKTtcblxuXHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0bWFya2Vycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0eDogeCwgeTogeSwgY3R4OiBnaG9zdEN0eCxcblx0XHRcdFx0XHRcdFx0dHlwZTogbWFya2VyUHJvcHMudHlwZSxcblx0XHRcdFx0XHRcdFx0c2l6ZTogbWFya2VyUHJvcHMuc2l6ZSxcblx0XHRcdFx0XHRcdFx0Y29sb3I6IG1hcmtlckNvbG9yLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJDb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdGJvcmRlclRoaWNrbmVzczogbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50c1tpXS5pbmRleExhYmVsIHx8IGRhdGFTZXJpZXMuaW5kZXhMYWJlbCB8fCBkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWxGb3JtYXR0ZXIgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsRm9ybWF0dGVyKSB7XG5cblx0XHRcdFx0XHR0aGlzLl9pbmRleExhYmVscy5wdXNoKHtcblx0XHRcdFx0XHRcdGNoYXJ0VHlwZTogXCJsaW5lXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeCwgeTogeVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55ID49IDAgPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Y3R4LnN0cm9rZSgpO1xuXG5cdFx0XHRpZiAoaXNDYW52YXNTdXBwb3J0ZWQpXG5cdFx0XHRcdGdob3N0Q3R4LnN0cm9rZSgpO1xuXHRcdH1cblxuXHR9XG5cblxuXHRSZW5kZXJIZWxwZXIuZHJhd01hcmtlcnMobWFya2Vycyk7XG5cdGN0eC5yZXN0b3JlKCk7XG5cblx0Y3R4LmJlZ2luUGF0aCgpO1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRnaG9zdEN0eC5iZWdpblBhdGgoKTtcblxuXHQvL3NvdXJjZSBhbmQgZGVzdCB3b3VsZCBiZSBzYW1lIHdoZW4gYW5pbWF0aW9uIGlzIG5vdCBlbmFibGVkXG5cdHZhciBhbmltYXRpb25JbmZvID0ge1xuXHRcdHNvdXJjZTogY3R4LCBkZXN0OiB0aGlzLnBsb3RBcmVhLmN0eCwgYW5pbWF0aW9uQ2FsbGJhY2s6IEFuaW1hdGlvbkhlbHBlci54Q2xpcEFuaW1hdGlvbiwgZWFzaW5nRnVuY3Rpb246IEFuaW1hdGlvbkhlbHBlci5lYXNpbmcubGluZWFyLCBhbmltYXRpb25CYXNlOiAwXG5cdH07XG5cdHJldHVybiBhbmltYXRpb25JbmZvO1xufVxuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyU3RlcExpbmUgPSBmdW5jdGlvbiAocGxvdFVuaXQpIHtcblx0dmFyIGN0eCA9IHBsb3RVbml0LnRhcmdldENhbnZhc0N0eCB8fCB0aGlzLnBsb3RBcmVhLmN0eDtcblxuXHR2YXIgdG90YWxEYXRhU2VyaWVzID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXMubGVuZ3RoO1xuXHRpZiAodG90YWxEYXRhU2VyaWVzIDw9IDApXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBnaG9zdEN0eCA9IHRoaXMuX2V2ZW50TWFuYWdlci5naG9zdEN0eDtcblx0Ly92YXIgZ2hvc3RDdHggPSB0aGlzLm92ZXJsYWlkQ2FudmFzQ3R4O1xuXG5cdGN0eC5zYXZlKCk7XG5cblx0dmFyIHBsb3RBcmVhID0gdGhpcy5wbG90QXJlYTtcblxuXHRjdHguYmVnaW5QYXRoKCk7XG5cdGN0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEud2lkdGgsIHBsb3RBcmVhLmhlaWdodCk7XG5cdGN0eC5jbGlwKCk7XG5cblx0dmFyIG1hcmtlcnMgPSBbXTtcblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IHBsb3RVbml0LmRhdGFTZXJpZXNJbmRleGVzLmxlbmd0aDsgaisrKSB7XG5cblx0XHR2YXIgZGF0YVNlcmllc0luZGV4ID0gcGxvdFVuaXQuZGF0YVNlcmllc0luZGV4ZXNbal07XG5cblx0XHR2YXIgZGF0YVNlcmllcyA9IHRoaXMuZGF0YVtkYXRhU2VyaWVzSW5kZXhdO1xuXHRcdGN0eC5saW5lV2lkdGggPSBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3M7XG5cdFx0dmFyIGRhdGFQb2ludHMgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHM7XG5cblx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XG5cdFx0XHRjdHguc2V0TGluZURhc2goZ2V0TGluZURhc2hBcnJheShkYXRhU2VyaWVzLmxpbmVEYXNoVHlwZSwgZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzKSk7XG5cdFx0fVxuXG5cdFx0dmFyIHNlcmllc0lkID0gZGF0YVNlcmllcy5pZDtcblx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW3Nlcmllc0lkXSA9IHtcblx0XHRcdG9iamVjdFR5cGU6IFwiZGF0YVNlcmllc1wiLCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXNJbmRleFxuXHRcdH07XG5cdFx0dmFyIGhleENvbG9yID0gaW50VG9IZXhDb2xvclN0cmluZyhzZXJpZXNJZCk7XG5cdFx0Z2hvc3RDdHguc3Ryb2tlU3R5bGUgPSBoZXhDb2xvcjtcblx0XHQvL2dob3N0Q3R4LmxpbmVXaWR0aCA9IGRhdGFTZXJpZXMubGluZVRoaWNrbmVzcztcblx0XHRnaG9zdEN0eC5saW5lV2lkdGggPSBkYXRhU2VyaWVzLmxpbmVUaGlja25lc3MgPiAwID8gTWF0aC5tYXgoZGF0YVNlcmllcy5saW5lVGhpY2tuZXNzLCA0KSA6IDA7XG5cblx0XHR2YXIgY29sb3JTZXQgPSBkYXRhU2VyaWVzLl9jb2xvclNldDtcblx0XHR2YXIgY29sb3IgPSBjb2xvclNldFswXTtcblx0XHRjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcblxuXHRcdHZhciBpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSA9IHRydWU7XG5cdFx0dmFyIGkgPSAwLCB4LCB5O1xuXHRcdHZhciBkYXRhUG9pbnRYOyAvL1VzZWQgc28gdGhhdCB3aGVuIGRhdGFQb2ludC54IGlzIGEgRGF0ZVRpbWUgdmFsdWUsIGl0IGRvZXNuJ3QgZ2V0IGNvbnZlcnRlZCB0byBudW1iZXIgYmFjayBhbmQgZm9ydGguXG5cblx0XHQvL2lmICghZGF0YVNlcmllcy5fb3B0aW9ucy5tYXJrZXJTaXplICYmIGRhdGFTZXJpZXMuZGF0YVBvaW50cy5sZW5ndGggPCAxMDAwKVxuXHRcdC8vICAgIGRhdGFTZXJpZXMubWFya2VyU2l6ZSA9IDg7XG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdGlmIChkYXRhUG9pbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vdmFyIHh5ID0gdGhpcy5nZXRQaXhlbENvb3JkaW5hdGVzT25QbG90QXJlYShkYXRhUG9pbnRzWzBdLngsIGRhdGFQb2ludHNbMF0ueSk7XG5cblx0XHRcdC8vZGF0YVNlcmllcy5ub0RhdGFQb2ludHNJblBsb3RBcmVhID0gMFxuXHRcdFx0dmFyIHByZXZEYXRhTnVsbCA9IGZhbHNlO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFQb2ludHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdFx0XHRkYXRhUG9pbnRYID0gZGF0YVBvaW50c1tpXS5nZXRUaW1lID8gZGF0YVBvaW50c1tpXS54LmdldFRpbWUoKSA6IGRhdGFQb2ludHNbaV0ueDtcblxuXHRcdFx0XHRpZiAoZGF0YVBvaW50WCA8IHBsb3RVbml0LmF4aXNYLmRhdGFJbmZvLnZpZXdQb3J0TWluIHx8IGRhdGFQb2ludFggPiBwbG90VW5pdC5heGlzWC5kYXRhSW5mby52aWV3UG9ydE1heClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHQvL2lmICghaXNGaW5pdGUoZGF0YVBvaW50c1tpXS55KSlcblx0XHRcdFx0Ly8gICAgY29udGludWU7XG5cblx0XHRcdFx0aWYgKHR5cGVvZiAoZGF0YVBvaW50c1tpXS55KSAhPT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHRcdGlmIChpID4gMCkgey8vIGlmIGZpcnN0IGRhdGFQb2ludCBpcyBudWxsIHRoZW4gbm8gbmVlZCB0byBjYWxsIHN0cm9rZSBtZXRob2Rcblx0XHRcdFx0XHRcdGN0eC5zdHJva2UoKTtcblxuXHRcdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRcdGdob3N0Q3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHByZXZEYXRhTnVsbCA9IHRydWU7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgcHJldlkgPSB5O1xuXG5cdFx0XHRcdHggPSAocGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGRhdGFQb2ludFggLSBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXHRcdFx0XHR5ID0gKHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnJlZmVyZW5jZSArIHBsb3RVbml0LmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChkYXRhUG9pbnRzW2ldLnkgLSBwbG90VW5pdC5heGlzWS5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtKSArIC41KSA8PCAwO1xuXG5cdFx0XHRcdHZhciBpZCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50SWRzW2ldO1xuXHRcdFx0XHR0aGlzLl9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXSA9IHtcblx0XHRcdFx0XHRpZDogaWQsIG9iamVjdFR5cGU6IFwiZGF0YVBvaW50XCIsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleDogaSwgeDE6IHgsIHkxOiB5XG5cdFx0XHRcdH07XG5cblxuXHRcdFx0XHQvL2RhdGFTZXJpZXMubm9EYXRhUG9pbnRzSW5QbG90QXJlYSsrO1xuXG5cdFx0XHRcdGlmIChpc0ZpcnN0RGF0YVBvaW50SW5QbG90QXJlYSB8fCBwcmV2RGF0YU51bGwpIHtcblx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0Y3R4Lm1vdmVUbyh4LCB5KTtcblxuXHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRnaG9zdEN0eC5tb3ZlVG8oeCwgeSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aXNGaXJzdERhdGFQb2ludEluUGxvdEFyZWEgPSBmYWxzZTtcblx0XHRcdFx0XHRwcmV2RGF0YU51bGwgPSBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGN0eC5saW5lVG8oeCwgcHJldlkpO1xuXHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmxpbmVUbyh4LCBwcmV2WSk7XG5cblx0XHRcdFx0XHRjdHgubGluZVRvKHgsIHkpO1xuXHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZClcblx0XHRcdFx0XHRcdGdob3N0Q3R4LmxpbmVUbyh4LCB5KTtcblxuXHRcdFx0XHRcdGlmIChpICUgNTAwID09IDApIHtcblx0XHRcdFx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdGN0eC5tb3ZlVG8oeCwgeSk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdFx0XHRcdFx0XHRnaG9zdEN0eC5zdHJva2UoKTtcblx0XHRcdFx0XHRcdFx0Z2hvc3RDdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRcdGdob3N0Q3R4Lm1vdmVUbyh4LCB5KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL1JlbmRlciBNYXJrZXJcblx0XHRcdFx0aWYgKGRhdGFQb2ludHNbaV0ubWFya2VyU2l6ZSA+IDAgfHwgZGF0YVNlcmllcy5tYXJrZXJTaXplID4gMCkge1xuXG5cdFx0XHRcdFx0dmFyIG1hcmtlclByb3BzID0gZGF0YVNlcmllcy5nZXRNYXJrZXJQcm9wZXJ0aWVzKGksIHgsIHksIGN0eCk7XG5cdFx0XHRcdFx0bWFya2Vycy5wdXNoKG1hcmtlclByb3BzKTtcblxuXHRcdFx0XHRcdC8vaWYgKCFkYXRhU2VyaWVzLm1heFdpZHRoSW5YIHx8IG1hcmtlclByb3BzLnNpemUgPiBkYXRhU2VyaWVzLm1heFdpZHRoSW5YKSB7XG5cdFx0XHRcdFx0Ly9cdGRhdGFTZXJpZXMubWF4V2lkdGhJblggPSBtYXJrZXJQcm9wcy5zaXplIC8gKHBsb3RVbml0LmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCA+IDEgPyBwbG90VW5pdC5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5waXhlbFBlclVuaXQgLSAxIDogcGxvdFVuaXQuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0KTtcblx0XHRcdFx0XHQvL31cblxuXHRcdFx0XHRcdHZhciBtYXJrZXJDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaWQpO1xuXG5cdFx0XHRcdFx0Ly93aW5kb3cuY29uc29sZS5sb2coXCJpbmRleDogXCIgKyBpICsgXCI7IGlkOiBcIiArIGlkICsgXCI7IGhleDogXCIgKyBtYXJrZXJDb2xvcik7XG5cdFx0XHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0XHRtYXJrZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHR4OiB4LCB5OiB5LCBjdHg6IGdob3N0Q3R4LFxuXHRcdFx0XHRcdFx0XHR0eXBlOiBtYXJrZXJQcm9wcy50eXBlLFxuXHRcdFx0XHRcdFx0XHRzaXplOiBtYXJrZXJQcm9wcy5zaXplLFxuXHRcdFx0XHRcdFx0XHRjb2xvcjogbWFya2VyQ29sb3IsXG5cdFx0XHRcdFx0XHRcdGJvcmRlckNvbG9yOiBtYXJrZXJDb2xvcixcblx0XHRcdFx0XHRcdFx0Ym9yZGVyVGhpY2tuZXNzOiBtYXJrZXJQcm9wcy5ib3JkZXJUaGlja25lc3Ncblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhUG9pbnRzW2ldLmluZGV4TGFiZWwgfHwgZGF0YVNlcmllcy5pbmRleExhYmVsIHx8IGRhdGFQb2ludHNbaV0uaW5kZXhMYWJlbEZvcm1hdHRlciB8fCBkYXRhU2VyaWVzLmluZGV4TGFiZWxGb3JtYXR0ZXIpIHtcblxuXHRcdFx0XHRcdHRoaXMuX2luZGV4TGFiZWxzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y2hhcnRUeXBlOiBcInN0ZXBMaW5lXCIsXG5cdFx0XHRcdFx0XHRkYXRhUG9pbnQ6IGRhdGFQb2ludHNbaV0sXG5cdFx0XHRcdFx0XHRkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLFxuXHRcdFx0XHRcdFx0cG9pbnQ6IHtcblx0XHRcdFx0XHRcdFx0eDogeCwgeTogeVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRpcmVjdGlvbjogZGF0YVBvaW50c1tpXS55ID49IDAgPyAxIDogLTEsXG5cdFx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdFx0XHRnaG9zdEN0eC5zdHJva2UoKTtcblx0XHR9XG5cdH1cblxuXG5cdFJlbmRlckhlbHBlci5kcmF3TWFya2VycyhtYXJrZXJzKTtcblx0Y3R4LnJlc3RvcmUoKTtcblxuXHRjdHguYmVnaW5QYXRoKCk7XG5cblx0aWYgKGlzQ2FudmFzU3VwcG9ydGVkKVxuXHRcdGdob3N0Q3R4LmJlZ2luUGF0aCgpO1xuXG5cdC8vc291cmNlIGFuZCBkZXN0IHdvdWxkIGJlIHNhbWUgd2hlbiBhbmltYXRpb24gaXMgbm90IGVuYWJsZWRcblx0dmFyIGFuaW1hdGlvbkluZm8gPSB7XG5cdFx0c291cmNlOiBjdHgsIGRlc3Q6IHRoaXMucGxvdEFyZWEuY3R4LCBhbmltYXRpb25DYWxsYmFjazogQW5pbWF0aW9uSGVscGVyLnhDbGlwQW5pbWF0aW9uLCBlYXNpbmdGdW5jdGlvbjogQW5pbWF0aW9uSGVscGVyLmVhc2luZy5saW5lYXIsIGFuaW1hdGlvbkJhc2U6IDBcblx0fTtcblx0cmV0dXJuIGFuaW1hdGlvbkluZm87XG59XG5cbkNoYXJ0LnByb3RvdHlwZS5hbmltYXRpb25SZXF1ZXN0SWQgPSBudWxsO1xuXG5DaGFydC5wcm90b3R5cGUucmVxdWVzdEFuaW1GcmFtZSA9IChmdW5jdGlvbiAoKSB7XG5cdHJldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHR3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHR3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHR3aW5kb3cub1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuXHRcdFx0d2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHRmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIDEwMDAgLyA2MCk7XG5cdFx0XHR9O1xufSkoKTtcblxuQ2hhcnQucHJvdG90eXBlLmNhbmNlbFJlcXVlc3RBbmltRnJhbWUgPSAoZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0d2luZG93LndlYmtpdENhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuXHRcdHdpbmRvdy5tb3pDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcblx0XHR3aW5kb3cub0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuXHRcdHdpbmRvdy5tc0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuXHRcdGNsZWFyVGltZW91dFxufSkoKTtcblxuQ2hhcnQucHJvdG90eXBlLmdldFBlcmNlbnRBbmRUb3RhbCA9IGZ1bmN0aW9uIChkcywgZHApIHtcblxuXHR2YXIgZHBYID0gbnVsbDtcblx0dmFyIHRvdGFsID0gbnVsbDtcblx0dmFyIHBlcmNlbnQgPSBudWxsO1xuXG5cdGlmIChkcy50eXBlLmluZGV4T2YoXCJzdGFja2VkXCIpID49IDApIHtcblx0XHR0b3RhbCA9IDA7XG5cdFx0ZHBYID0gZHAueC5nZXRUaW1lID8gZHAueC5nZXRUaW1lKCkgOiBkcC54O1xuXHRcdGlmIChkcFggaW4gZHMucGxvdFVuaXQueVRvdGFscykge1xuXHRcdFx0dG90YWwgPSBkcy5wbG90VW5pdC55VG90YWxzW2RwWF07XG5cblx0XHRcdGlmICghaXNOYU4oZHAueSkpIHtcblx0XHRcdCAgICBpZiAodG90YWwgPT09IDApXG5cdFx0XHQgICAgICAgIHBlcmNlbnQgPSAwO1xuICAgICAgICAgICAgICAgICAgZWxzZVxuXHRcdFx0ICAgICAgICBwZXJjZW50ID0gKGRwLnkgLyB0b3RhbCkgKiAxMDA7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHQgICAgcGVyY2VudCA9IDA7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGRzLnR5cGUgPT09IFwicGllXCIgfHwgZHMudHlwZSA9PT0gXCJkb3VnaG51dFwiKSB7XG5cdFx0dG90YWwgPSAwO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZHMuZGF0YVBvaW50cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0XHRpZiAoIWlzTmFOKGRzLmRhdGFQb2ludHNbaV0ueSkpXG5cdFx0XHRcdHRvdGFsICs9IGRzLmRhdGFQb2ludHNbaV0ueTtcblx0XHR9XG5cblx0XHRpZiAoIWlzTmFOKGRwLnkpKVxuXHRcdFx0cGVyY2VudCA9IChkcC55IC8gdG90YWwpICogMTAwO1xuXHRcdGVsc2Vcblx0XHRcdHBlcmNlbnQgPSAwO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRwZXJjZW50OiBwZXJjZW50LCB0b3RhbDogdG90YWxcblx0fTtcbn1cblxuQ2hhcnQucHJvdG90eXBlLnJlcGxhY2VLZXl3b3Jkc1dpdGhWYWx1ZSA9IGZ1bmN0aW9uIChzdHIsIGRwLCBkcywgZHBJbmRleCwgaW5kZXhLZXl3b3JkVmFsdWUpIHtcblx0Ly92YXIgcmVnZXggPSAvXFx7XFxzKlthLXpBLVpdK1xccypcXH18XCJbXlwiXSpcInwnW14nXSonL2c7XG5cdHZhciByZWdleCA9IC9cXHsuKj9cXH18XCJbXlwiXSpcInwnW14nXSonL2c7XG5cdHZhciBjaGFydCA9IHRoaXM7XG5cdGluZGV4S2V5d29yZFZhbHVlID0gdHlwZW9mIChpbmRleEtleXdvcmRWYWx1ZSkgPT09IFwidW5kZWZpbmVkXCIgPyAwIDogaW5kZXhLZXl3b3JkVmFsdWU7XG5cblx0aWYgKChkcy50eXBlLmluZGV4T2YoXCJzdGFja2VkXCIpID49IDAgfHwgKGRzLnR5cGUgPT09IFwicGllXCIgfHwgZHMudHlwZSA9PT0gXCJkb3VnaG51dFwiKSkgJiYgKHN0ci5pbmRleE9mKFwiI3BlcmNlbnRcIikgPj0gMCB8fCBzdHIuaW5kZXhPZihcIiN0b3RhbFwiKSA+PSAwKSkge1xuXHRcdHZhciBwZXJjZW50ID0gXCIjcGVyY2VudFwiO1xuXHRcdHZhciB0b3RhbCA9IFwiI3RvdGFsXCI7XG5cdFx0dmFyIGRwWCA9IG51bGw7XG5cblx0XHR2YXIgcGVyY2VudEFuZFRvdGFsID0gdGhpcy5nZXRQZXJjZW50QW5kVG90YWwoZHMsIGRwKTtcblxuXHRcdHRvdGFsID0gaXNOYU4ocGVyY2VudEFuZFRvdGFsLnRvdGFsKSA/IHRvdGFsIDogcGVyY2VudEFuZFRvdGFsLnRvdGFsO1xuXHRcdHBlcmNlbnQgPSBpc05hTihwZXJjZW50QW5kVG90YWwucGVyY2VudCkgPyBwZXJjZW50IDogcGVyY2VudEFuZFRvdGFsLnBlcmNlbnQ7XG5cblx0XHRkbyB7XG5cdFx0XHR2YXIgcGVyY2VudEZvcm1hdFN0cmluZyA9IFwiXCI7XG5cdFx0XHRpZiAoZHMucGVyY2VudEZvcm1hdFN0cmluZylcblx0XHRcdFx0cGVyY2VudEZvcm1hdFN0cmluZyA9IGRzLnBlcmNlbnRGb3JtYXRTdHJpbmc7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0cGVyY2VudEZvcm1hdFN0cmluZyA9IFwiIywjIzAuXCI7XG5cdFx0XHRcdHZhciBudW1iZXJPZkRlY2ltYWxzID0gTWF0aC5tYXgoTWF0aC5jZWlsKE1hdGgubG9nKDEgLyBNYXRoLmFicyhwZXJjZW50KSkgLyBNYXRoLkxOMTApLCAyKTtcblxuXHRcdFx0XHRpZiAoaXNOYU4obnVtYmVyT2ZEZWNpbWFscykgfHwgIWlzRmluaXRlKG51bWJlck9mRGVjaW1hbHMpKVxuXHRcdFx0XHRcdG51bWJlck9mRGVjaW1hbHMgPSAyO1xuXG5cdFx0XHRcdGZvciAodmFyIG4gPSAwOyBuIDwgbnVtYmVyT2ZEZWNpbWFsczsgbisrKSB7XG5cdFx0XHRcdFx0cGVyY2VudEZvcm1hdFN0cmluZyArPSBcIiNcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRzdHIgPSBzdHIucmVwbGFjZShcIiNwZXJjZW50XCIsIG51bWJlckZvcm1hdChwZXJjZW50LCBwZXJjZW50Rm9ybWF0U3RyaW5nLCBjaGFydC5fY3VsdHVyZUluZm8pKTtcblx0XHRcdHN0ciA9IHN0ci5yZXBsYWNlKFwiI3RvdGFsXCIsIG51bWJlckZvcm1hdCh0b3RhbCwgZHMueVZhbHVlRm9ybWF0U3RyaW5nID8gZHMueVZhbHVlRm9ybWF0U3RyaW5nIDogXCIjLCMjMC4jIyMjIyMjI1wiKSk7XG5cdFx0fSB3aGlsZSAoc3RyLmluZGV4T2YoXCIjcGVyY2VudFwiKSA+PSAwIHx8IHN0ci5pbmRleE9mKFwiI3RvdGFsXCIpID49IDApO1xuXHR9XG5cblxuXHR2YXIgZmNuID0gZnVuY3Rpb24gKCQwKSB7XG5cdFx0aWYgKCgkMFswXSA9PT0gXCJcXFwiXCIgJiYgJDBbJDAubGVuZ3RoIC0gMV0gPT09IFwiXFxcIlwiKSB8fCAoJDBbMF0gPT09IFwiXFwnXCIgJiYgJDBbJDAubGVuZ3RoIC0gMV0gPT09IFwiXFwnXCIpKVxuXHRcdFx0cmV0dXJuICQwLnNsaWNlKDEsICQwLmxlbmd0aCAtIDEpO1xuXG5cdFx0dmFyIGtleSA9IHRyaW1TdHJpbmcoJDAuc2xpY2UoMSwgJDAubGVuZ3RoIC0gMSkpO1xuXHRcdGtleSA9IGtleS5yZXBsYWNlKFwiI2luZGV4XCIsIGluZGV4S2V5d29yZFZhbHVlKTtcblxuXHRcdHZhciBpbmRleCA9IG51bGw7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIG1hdGNoID0ga2V5Lm1hdGNoKC8oLio/KVxccypcXFtcXHMqKC4qPylcXHMqXFxdLyk7XG5cdFx0XHRpZiAobWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpbmRleCA9IHRyaW1TdHJpbmcobWF0Y2hbMl0pO1xuXHRcdFx0XHRrZXkgPSB0cmltU3RyaW5nKG1hdGNoWzFdKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0fTtcblxuXG5cdFx0dmFyIG9iaiA9IG51bGw7XG5cblx0XHRpZiAoa2V5ID09PSBcImNvbG9yXCIpIHtcblx0XHRcdHJldHVybiBkcC5jb2xvciA/IGRwLmNvbG9yIDogZHMuY29sb3IgPyBkcy5jb2xvciA6IGRzLl9jb2xvclNldFtkcEluZGV4ICUgZHMuX2NvbG9yU2V0Lmxlbmd0aF07XG5cdFx0fVxuXG5cdFx0aWYgKGRwLmhhc093blByb3BlcnR5KGtleSkpXG5cdFx0XHRvYmogPSBkcDtcblx0XHRlbHNlIGlmIChkcy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuXHRcdFx0b2JqID0gZHM7XG5cdFx0ZWxzZSByZXR1cm4gXCJcIjtcblxuXHRcdHZhciB2YWx1ZSA9IG9ialtrZXldO1xuXHRcdGlmIChpbmRleCAhPT0gbnVsbClcblx0XHRcdHZhbHVlID0gdmFsdWVbaW5kZXhdO1xuXG5cdFx0aWYgKGtleSA9PT0gXCJ4XCIpIHtcblx0XHRcdGlmIChjaGFydC5heGlzWCAmJiBjaGFydC5wbG90SW5mby5heGlzWFZhbHVlVHlwZSA9PT0gXCJkYXRlVGltZVwiKVxuXHRcdFx0XHRyZXR1cm4gZGF0ZUZvcm1hdCh2YWx1ZSwgZHAueFZhbHVlRm9ybWF0U3RyaW5nID8gZHAueFZhbHVlRm9ybWF0U3RyaW5nIDogZHMueFZhbHVlRm9ybWF0U3RyaW5nID8gZHMueFZhbHVlRm9ybWF0U3RyaW5nIDogY2hhcnQuYXhpc1ggJiYgY2hhcnQuYXhpc1gudmFsdWVGb3JtYXRTdHJpbmcgPyBjaGFydC5heGlzWC52YWx1ZUZvcm1hdFN0cmluZyA6IFwiREQgTU1NIFlZXCIsIGNoYXJ0Ll9jdWx0dXJlSW5mbyk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJldHVybiBudW1iZXJGb3JtYXQodmFsdWUsIGRwLnhWYWx1ZUZvcm1hdFN0cmluZyA/IGRwLnhWYWx1ZUZvcm1hdFN0cmluZyA6IGRzLnhWYWx1ZUZvcm1hdFN0cmluZyA/IGRzLnhWYWx1ZUZvcm1hdFN0cmluZyA6IFwiIywjIzAuIyMjIyMjIyNcIiwgY2hhcnQuX2N1bHR1cmVJbmZvKTtcblx0XHR9IGVsc2UgaWYgKGtleSA9PT0gXCJ5XCIpXG5cdFx0XHRyZXR1cm4gbnVtYmVyRm9ybWF0KHZhbHVlLCBkcC55VmFsdWVGb3JtYXRTdHJpbmcgPyBkcC55VmFsdWVGb3JtYXRTdHJpbmcgOiBkcy55VmFsdWVGb3JtYXRTdHJpbmcgPyBkcy55VmFsdWVGb3JtYXRTdHJpbmcgOiBcIiMsIyMwLiMjIyMjIyMjXCIsIGNoYXJ0Ll9jdWx0dXJlSW5mbyk7XG5cdFx0ZWxzZSBpZiAoa2V5ID09PSBcInpcIilcblx0XHRcdHJldHVybiBudW1iZXJGb3JtYXQodmFsdWUsIGRwLnpWYWx1ZUZvcm1hdFN0cmluZyA/IGRwLnpWYWx1ZUZvcm1hdFN0cmluZyA6IGRzLnpWYWx1ZUZvcm1hdFN0cmluZyA/IGRzLnpWYWx1ZUZvcm1hdFN0cmluZyA6IFwiIywjIzAuIyMjIyMjIyNcIiwgY2hhcnQuX2N1bHR1cmVJbmZvKTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRyZXR1cm4gc3RyLnJlcGxhY2UocmVnZXgsIGZjbik7XG59XG5cblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlclNwbGluZSA9IFNwbGluZUNoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyQ29sdW1uID0gQ29sdW1uQ2hhcnRcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlclN0YWNrZWRDb2x1bW4gPSBTdGFja2VkQ29sdW1uQ2hhcnQ7XG5cbkNoYXJ0LnByb3RvdHlwZS5yZW5kZXJTdGFja2VkQ29sdW1uMTAwID0gU3RhY2tlZENvbHVtbjEwMENoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyQmFyID0gQmFyQ2hhcnQ7XG5cbkNoYXJ0LnByb3RvdHlwZS5yZW5kZXJTdGFja2VkQmFyID0gU3RhY2tlZEJhckNoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyU3RhY2tlZEJhcjEwMCA9IFN0YWNrZWRCYXIxMDBDaGFydDtcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlckFyZWEgPSBBcmVhQ2hhcnQ7XG5cbkNoYXJ0LnByb3RvdHlwZS5yZW5kZXJTcGxpbmVBcmVhID0gU3BsaW5lQXJlYUNoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyU3RlcEFyZWEgPSBTdGVwQXJlYUNoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyU3RhY2tlZEFyZWEgPSBTdGFja2VkQXJlYUNoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyU3RhY2tlZEFyZWExMDAgPSBTdGFja2VkQXJlYTEwMENoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyQnViYmxlID0gQnViYmxlQ2hhcnQ7XG5cbkNoYXJ0LnByb3RvdHlwZS5yZW5kZXJTY2F0dGVyID0gU2NhdHRlckNoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyQ2FuZGxlc3RpY2sgPSBDYW5kbGVzdGlja0NoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyUmFuZ2VDb2x1bW4gPSBSYW5nZUNvbHVtbkNoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyUmFuZ2VCYXIgPSBSYW5nZUJhckNoYXJ0O1xuXG5DaGFydC5wcm90b3R5cGUucmVuZGVyUmFuZ2VBcmVhID0gUmFuZ2VBcmVhQ2hhcnQ7XG5cbkNoYXJ0LnByb3RvdHlwZS5yZW5kZXJSYW5nZVNwbGluZUFyZWEgPSBSYW5nZVNwbGluZUFyZWFDaGFydDtcblxuQ2hhcnQucHJvdG90eXBlLnJlbmRlclBpZSA9IFBpZUNoYXJ0O1xuXG5leHBvcnQgZGVmYXVsdCBDaGFydDtcbiIsIlxuaW1wb3J0IENhbnZhc0pTT2JqZWN0IGZyb20gJy4vY2FudmFzanMnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuaW1wb3J0IHtjdWx0dXJlc30gZnJvbSAnLi4vY29uc3RhbnRzL2N1bHR1cmUnO1xuXG5mdW5jdGlvbiBDdWx0dXJlSW5mbyhjdWx0dXJlKSB7XG5cbiAgdmFyIGN1bHR1cmVJbmZvO1xuXG4gIGlmIChjdWx0dXJlICYmIGN1bHR1cmVzW2N1bHR1cmVdKSBjdWx0dXJlSW5mbyA9IGN1bHR1cmVzW2N1bHR1cmVdO1xuXG4gIEN1bHR1cmVJbmZvLmJhc2UuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBcIkN1bHR1cmVJbmZvXCIsIGN1bHR1cmVJbmZvKTtcblxufVxuXG5leHRlbmQoQ3VsdHVyZUluZm8sIENhbnZhc0pTT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgQ3VsdHVyZUluZm87XG4iLCJcbmltcG9ydCBDYW52YXNKU09iamVjdCBmcm9tICcuL2NhbnZhc2pzJztcbmltcG9ydCB7ZXh0ZW5kLCBnZXRQcm9wZXJ0eX0gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmZ1bmN0aW9uIERhdGFTZXJpZXMoY2hhcnQsIG9wdGlvbnMsIHRoZW1lLCBpbmRleCwgaWQpIHtcbiAgRGF0YVNlcmllcy5iYXNlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgXCJEYXRhU2VyaWVzXCIsIG9wdGlvbnMsIHRoZW1lKTtcblxuICB0aGlzLmNoYXJ0ID0gY2hhcnQ7XG4gIHRoaXMuY2FudmFzID0gY2hhcnQuY2FudmFzO1xuICB0aGlzLl9jdHggPSBjaGFydC5jYW52YXMuY3R4O1xuICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gIHRoaXMubm9EYXRhUG9pbnRzSW5QbG90QXJlYSA9IDA7XG4gIC8vdGhpcy5tYXhXaWR0aEluWCA9IDA7XG4gIHRoaXMuaWQgPSBpZDtcbiAgdGhpcy5jaGFydC5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpZF0gPSB7XG4gICAgaWQ6IGlkLCBvYmplY3RUeXBlOiBcImRhdGFTZXJpZXNcIiwgZGF0YVNlcmllc0luZGV4OiBpbmRleFxuICB9XG4gIHRoaXMuZGF0YVBvaW50SWRzID0gW107XG4gIHRoaXMucGxvdFVuaXQgPSBbXTtcblxuICB0aGlzLmF4aXNYID0gbnVsbDtcbiAgdGhpcy5heGlzWSA9IG51bGw7XG5cbiAgaWYgKHRoaXMuZmlsbE9wYWNpdHkgPT09IG51bGwpIHtcbiAgICBpZiAodGhpcy50eXBlLm1hdGNoKC9hcmVhL2kpKVxuICAgICAgdGhpcy5maWxsT3BhY2l0eSA9IC43O1xuICAgIGVsc2VcbiAgICAgIHRoaXMuZmlsbE9wYWNpdHkgPSAxO1xuICB9XG5cblxuICB0aGlzLmF4aXNQbGFjZW1lbnQgPSB0aGlzLmdldERlZmF1bHRBeGlzUGxhY2VtZW50KCk7XG5cbiAgaWYgKHR5cGVvZiAodGhpcy5fb3B0aW9ucy5pbmRleExhYmVsRm9udFNpemUpID09PSBcInVuZGVmaW5lZFwiKSB7XG5cbiAgICB0aGlzLmluZGV4TGFiZWxGb250U2l6ZSA9IHRoaXMuY2hhcnQuZ2V0QXV0b0ZvbnRTaXplKHRoaXMuaW5kZXhMYWJlbEZvbnRTaXplKTtcbiAgfVxufVxuXG5leHRlbmQoRGF0YVNlcmllcywgQ2FudmFzSlNPYmplY3QpO1xuXG4vL1N0YXRpYyBNZXRob2QgdGhhdCByZXR1cm5zIHRoZSBheGlzUGxhY2VtZW50IGZvciBhIGdpdmVuIENoYXJ0VHlwZS4gUmV0dXJucyBvbmUgb2YgXCJub3JtYWxcIiwgXCJ4eVN3YXBwZWRcIiwgXCJub25lXCJcbkRhdGFTZXJpZXMucHJvdG90eXBlLmdldERlZmF1bHRBeGlzUGxhY2VtZW50ID0gZnVuY3Rpb24gKCkge1xuXG4gIC8vaWYgKCF0aGlzLnZpc2libGUpXG4gIC8vXHRyZXR1cm4gXCJub25lXCI7XG5cbiAgLy90eXBlID0gdGhpcy50eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG4gIGlmICh0eXBlID09PSBcImNvbHVtblwiIHx8IHR5cGUgPT09IFwibGluZVwiIHx8IHR5cGUgPT09IFwic3RlcExpbmVcIiB8fCB0eXBlID09PSBcInNwbGluZVwiIHx8IHR5cGUgPT09IFwiYXJlYVwiIHx8IHR5cGUgPT09IFwic3RlcEFyZWFcIiB8fCB0eXBlID09PSBcInNwbGluZUFyZWFcIiB8fCB0eXBlID09PSBcInN0YWNrZWRDb2x1bW5cIiB8fCB0eXBlID09PSBcInN0YWNrZWRMaW5lXCIgfHwgdHlwZSA9PT0gXCJidWJibGVcIiB8fCB0eXBlID09PSBcInNjYXR0ZXJcIlxuICAgIHx8IHR5cGUgPT09IFwic3RhY2tlZEFyZWFcIiB8fCB0eXBlID09PSBcInN0YWNrZWRDb2x1bW4xMDBcIiB8fCB0eXBlID09PSBcInN0YWNrZWRMaW5lMTAwXCIgfHwgdHlwZSA9PT0gXCJzdGFja2VkQXJlYTEwMFwiXG4gICAgfHwgdHlwZSA9PT0gXCJjYW5kbGVzdGlja1wiIHx8IHR5cGUgPT09IFwib2hsY1wiIHx8IHR5cGUgPT09IFwicmFuZ2VDb2x1bW5cIiB8fCB0eXBlID09PSBcInJhbmdlQXJlYVwiIHx8IHR5cGUgPT09IFwicmFuZ2VTcGxpbmVBcmVhXCIpIHtcbiAgICByZXR1cm4gXCJub3JtYWxcIjtcbiAgfVxuICBlbHNlIGlmICh0eXBlID09PSBcImJhclwiIHx8IHR5cGUgPT09IFwic3RhY2tlZEJhclwiIHx8IHR5cGUgPT09IFwic3RhY2tlZEJhcjEwMFwiIHx8IHR5cGUgPT09IFwicmFuZ2VCYXJcIikge1xuXG4gICAgcmV0dXJuIFwieHlTd2FwcGVkXCI7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gXCJwaWVcIiB8fCB0eXBlID09PSBcImRvdWdobnV0XCIgfHwgdHlwZSA9PT0gXCJmdW5uZWxcIikge1xuICAgIHJldHVybiBcIm5vbmVcIjtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cuY29uc29sZS5sb2coXCJVbmtub3duIENoYXJ0IFR5cGU6IFwiICsgdHlwZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuRGF0YVNlcmllcy5nZXREZWZhdWx0TGVnZW5kTWFya2VyID0gZnVuY3Rpb24gKHR5cGUpIHtcblxuICAvL3R5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKHR5cGUgPT09IFwiY29sdW1uXCIgfHwgdHlwZSA9PT0gXCJzdGFja2VkQ29sdW1uXCIgfHwgdHlwZSA9PT0gXCJzdGFja2VkTGluZVwiIHx8IHR5cGUgPT09IFwiYmFyXCIgfHwgdHlwZSA9PT0gXCJzdGFja2VkQmFyXCIgfHwgdHlwZSA9PT0gXCJzdGFja2VkQmFyMTAwXCJcbiAgICB8fCB0eXBlID09PSBcImJ1YmJsZVwiIHx8IHR5cGUgPT09IFwic2NhdHRlclwiXG4gICAgfHwgdHlwZSA9PT0gXCJzdGFja2VkQ29sdW1uMTAwXCIgfHwgdHlwZSA9PT0gXCJzdGFja2VkTGluZTEwMFwiIHx8IHR5cGUgPT09IFwic3RlcEFyZWFcIlxuICAgIHx8IHR5cGUgPT09IFwiY2FuZGxlc3RpY2tcIiB8fCB0eXBlID09PSBcIm9obGNcIiB8fCB0eXBlID09PSBcInJhbmdlQ29sdW1uXCIgfHwgdHlwZSA9PT0gXCJyYW5nZUJhclwiIHx8IHR5cGUgPT09IFwicmFuZ2VBcmVhXCIgfHwgdHlwZSA9PT0gXCJyYW5nZVNwbGluZUFyZWFcIikge1xuICAgIHJldHVybiBcInNxdWFyZVwiO1xuICB9XG4gIGVsc2UgaWYgKHR5cGUgPT09IFwibGluZVwiIHx8IHR5cGUgPT09IFwic3RlcExpbmVcIiB8fCB0eXBlID09PSBcInNwbGluZVwiIHx8IHR5cGUgPT09IFwicGllXCIgfHwgdHlwZSA9PT0gXCJkb3VnaG51dFwiIHx8IHR5cGUgPT09IFwiZnVubmVsXCIpIHtcbiAgICByZXR1cm4gXCJjaXJjbGVcIjtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBcImFyZWFcIiB8fCB0eXBlID09PSBcInNwbGluZUFyZWFcIiB8fCB0eXBlID09PSBcInN0YWNrZWRBcmVhXCIgfHwgdHlwZSA9PT0gXCJzdGFja2VkQXJlYTEwMFwiKSB7XG4gICAgcmV0dXJuIFwidHJpYW5nbGVcIlxuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5jb25zb2xlLmxvZyhcIlVua25vd24gQ2hhcnQgVHlwZTogXCIgKyB0eXBlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vL0ZpbmRzIGRhdGFQb2ludCB3aXRoIHRoZSBnaXZlbiB4IHZhbHVlLiBJZiBmaW5kQ2xvc2VzdCBpcyBzZXQsIGZpbmRzIGRhdGFQb2ludCB3aXRoIGNsb3Nlc3QgeCB2YWx1ZS5cbi8vUmV0dXJucyBzZWFyY2hSZXN1bHQgb2JqZWN0IGlmIGZvdW5kLCBlbHNlIHJldHVybnMgbnVsbFxuRGF0YVNlcmllcy5wcm90b3R5cGUuZ2V0RGF0YVBvaW50QXRYID0gZnVuY3Rpb24gKHgsIGZpbmRDbG9zZXN0KSB7XG5cbiAgaWYgKCF0aGlzLmRhdGFQb2ludHMgfHwgdGhpcy5kYXRhUG9pbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgdmFyIHNlYXJjaFJlc3VsdCA9IHtcbiAgICBkYXRhUG9pbnQ6IG51bGwsIGRpc3RhbmNlOiBJbmZpbml0eSwgaW5kZXg6IE5hTlxuICB9O1xuICB2YXIgZGF0YVBvaW50ID0gbnVsbDtcblxuICB2YXIgaiA9IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIGRpcmVjdGlvbiA9IDE7IC8vICsxIGZvciBmb3dhcmQgYW5kIC0xIGZvciBiYWNrd2FyZC5cblxuICB2YXIgbWluaW11bVhEaXN0YW5jZSA9IEluZmluaXR5O1xuICB2YXIgZm9yd2FyZE1pc3NDb3VudCA9IDAsIGJhY2t3YXJkTWlzc0NvdW50ID0gMDtcbiAgdmFyIG1heE1pc3NDb3VudCA9IDEwMDA7XG4gIHZhciBzZWFyY2hTdGFydEluZGV4ID0gMDtcblxuICBpZiAodGhpcy5jaGFydC5wbG90SW5mby5heGlzUGxhY2VtZW50ICE9PSBcIm5vbmVcIikge1xuXG4gICAgLy92YXIgeFJhbmdlID0gKHRoaXMuZGF0YVBvaW50c1t0aGlzLmRhdGFQb2ludHMubGVuZ3RoIC0gMV0ueCAtIHRoaXMuZGF0YVBvaW50c1swXS54KTtcblxuICAgIC8vaWYgKHhSYW5nZSA+IDApXG4gICAgLy9cdHNlYXJjaFN0YXJ0SW5kZXggPSAoKHRoaXMuZGF0YVBvaW50cy5sZW5ndGggLSAxKSAvIHhSYW5nZSAqICh4IC0gdGhpcy5kYXRhUG9pbnRzWzBdLngpKSA+PiAwO1xuICAgIC8vZWxzZVxuICAgIC8vXHRzZWFyY2hTdGFydEluZGV4ID0gMDtcblxuICAgIHZhciB4UmFuZ2UgPSAodGhpcy5kYXRhUG9pbnRzW3RoaXMuZGF0YVBvaW50cy5sZW5ndGggLSAxXS54IC0gdGhpcy5kYXRhUG9pbnRzWzBdLngpO1xuXG4gICAgaWYgKHhSYW5nZSA+IDApXG4gICAgICBzZWFyY2hTdGFydEluZGV4ID0gTWF0aC5taW4oTWF0aC5tYXgoKCh0aGlzLmRhdGFQb2ludHMubGVuZ3RoIC0gMSkgLyB4UmFuZ2UgKiAoeCAtIHRoaXMuZGF0YVBvaW50c1swXS54KSkgPj4gMCwgMCksIHRoaXMuZGF0YVBvaW50cy5sZW5ndGgpO1xuICAgIGVsc2VcbiAgICAgIHNlYXJjaFN0YXJ0SW5kZXggPSAwO1xuXG4gICAgLy9zZWFyY2hTdGFydEluZGV4ID0gKCh0aGlzLmRhdGFQb2ludHNbdGhpcy5kYXRhUG9pbnRzLmxlbmd0aCAtIDFdLnggLSB0aGlzLmRhdGFQb2ludHNbMF0ueCkgLyB0aGlzLmRhdGFQb2ludHMubGVuZ3RoICogKHggLSB0aGlzLmRhdGFQb2ludHNbMF0ueCkpID4+IDA7XG4gIH1cblxuICB3aGlsZSAodHJ1ZSkge1xuXG4gICAgaSA9IChkaXJlY3Rpb24gPiAwKSA/IHNlYXJjaFN0YXJ0SW5kZXggKyBqIDogc2VhcmNoU3RhcnRJbmRleCAtIGo7XG5cbiAgICBpZiAoaSA+PSAwICYmIGkgPCB0aGlzLmRhdGFQb2ludHMubGVuZ3RoKSB7XG5cbiAgICAgIGRhdGFQb2ludCA9IHRoaXMuZGF0YVBvaW50c1tpXTtcblxuICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5hYnMoZGF0YVBvaW50LnggLSB4KTtcblxuICAgICAgaWYgKGRpc3RhbmNlIDwgc2VhcmNoUmVzdWx0LmRpc3RhbmNlKSB7XG4gICAgICAgIHNlYXJjaFJlc3VsdC5kYXRhUG9pbnQgPSBkYXRhUG9pbnQ7XG4gICAgICAgIHNlYXJjaFJlc3VsdC5kaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICBzZWFyY2hSZXN1bHQuaW5kZXggPSBpO1xuICAgICAgfVxuXG4gICAgICB2YXIgeERpc3RhbmNlID0gTWF0aC5hYnMoZGF0YVBvaW50LnggLSB4KTtcbiAgICAgIGlmICh4RGlzdGFuY2UgPD0gbWluaW11bVhEaXN0YW5jZSlcbiAgICAgICAgbWluaW11bVhEaXN0YW5jZSA9IHhEaXN0YW5jZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID4gMClcbiAgICAgICAgICBmb3J3YXJkTWlzc0NvdW50Kys7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBiYWNrd2FyZE1pc3NDb3VudCsrO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9yd2FyZE1pc3NDb3VudCA+IG1heE1pc3NDb3VudCAmJiBiYWNrd2FyZE1pc3NDb3VudCA+IG1heE1pc3NDb3VudClcbiAgICAgICAgYnJlYWs7XG5cblxuICAgIH0gZWxzZSBpZiAoc2VhcmNoU3RhcnRJbmRleCAtIGogPCAwICYmIHNlYXJjaFN0YXJ0SW5kZXggKyBqID49IHRoaXMuZGF0YVBvaW50cy5sZW5ndGgpXG4gICAgICBicmVhaztcblxuICAgIGlmIChkaXJlY3Rpb24gPT09IC0xKSB7XG4gICAgICBqKys7XG4gICAgICBkaXJlY3Rpb24gPSAxO1xuICAgIH0gZWxzZVxuICAgICAgZGlyZWN0aW9uID0gLTE7XG4gIH1cblxuXG4gIGlmICghZmluZENsb3Nlc3QgJiYgc2VhcmNoUmVzdWx0LmRhdGFQb2ludC54ID09PSB4KVxuICAgIHJldHVybiBzZWFyY2hSZXN1bHQ7XG4gIGVsc2UgaWYgKGZpbmRDbG9zZXN0ICYmIHNlYXJjaFJlc3VsdC5kYXRhUG9pbnQgIT09IG51bGwpXG4gICAgcmV0dXJuIHNlYXJjaFJlc3VsdDtcbiAgZWxzZVxuICAgIHJldHVybiBudWxsO1xufVxuXG4vLyB4ICYgeSBzaG91bGQgYmUgaW4gcGl4ZWxzLiBDYW4gYmUgdXNlZCBvbmx5IGFmdGVyIHJlbmRlcmluZyB0aGUgY2hhcnQuXG5EYXRhU2VyaWVzLnByb3RvdHlwZS5nZXREYXRhUG9pbnRBdFhZID0gZnVuY3Rpb24gKHgsIHksIGdldENsb3Nlc3QpIHtcblxuICBpZiAoIXRoaXMuZGF0YVBvaW50cyB8fCB0aGlzLmRhdGFQb2ludHMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICBnZXRDbG9zZXN0ID0gZ2V0Q2xvc2VzdCB8fCBmYWxzZTtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIGogPSAwLCBpID0gMDtcbiAgdmFyIGRpcmVjdGlvbiA9IDE7IC8vICsxIGZvciBmb3dhcmQgYW5kIC0xIGZvciBiYWNrd2FyZC5cbiAgdmFyIGZvdW5kRGF0YVBvaW50ID0gZmFsc2U7XG4gIHZhciBtaW5pbXVtWERpc3RhbmNlID0gSW5maW5pdHk7XG4gIHZhciBmb3J3YXJkTWlzc0NvdW50ID0gMCwgYmFja3dhcmRNaXNzQ291bnQgPSAwO1xuICB2YXIgbWF4TWlzc0NvdW50ID0gMTAwMDtcbiAgdmFyIHNlYXJjaFN0YXJ0SW5kZXggPSAwO1xuXG4gIGlmICh0aGlzLmNoYXJ0LnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgIT09IFwibm9uZVwiKSB7XG4gICAgdmFyIHh2YWwgPSB0aGlzLmNoYXJ0LmF4aXNYLmdldFhWYWx1ZUF0KHsgeDogeCwgeTogeSB9KTtcblxuICAgIHZhciB4UmFuZ2UgPSAodGhpcy5kYXRhUG9pbnRzW3RoaXMuZGF0YVBvaW50cy5sZW5ndGggLSAxXS54IC0gdGhpcy5kYXRhUG9pbnRzWzBdLngpO1xuXG4gICAgaWYgKHhSYW5nZSA+IDApXG4gICAgICBzZWFyY2hTdGFydEluZGV4ID0gTWF0aC5taW4oTWF0aC5tYXgoKCh0aGlzLmRhdGFQb2ludHMubGVuZ3RoIC0gMSkgLyB4UmFuZ2UgKiAoeHZhbCAtIHRoaXMuZGF0YVBvaW50c1swXS54KSkgPj4gMCwgMCksIHRoaXMuZGF0YVBvaW50cy5sZW5ndGgpO1xuICAgIGVsc2VcbiAgICAgIHNlYXJjaFN0YXJ0SW5kZXggPSAwO1xuXG4gICAgLy92YXIgeFJhbmdlID0gKHRoaXMuYXhpc1guX2Fic29sdXRlTWF4aW11bSAtIHRoaXMuYXhpc1guX2Fic29sdXRlTWluaW11bSk7XG5cbiAgICAvL2lmICh4UmFuZ2UgPiAwKVxuICAgIC8vXHRzZWFyY2hTdGFydEluZGV4ID0gTWF0aC5taW4oTWF0aC5tYXgoKCh0aGlzLmRhdGFQb2ludHMubGVuZ3RoIC0gMSkgLyB4UmFuZ2UgKiAoeHZhbCAtIHRoaXMuYXhpc1guX2Fic29sdXRlTWluaW11bSkpID4+IDAsIDApLCB0aGlzLmRhdGFQb2ludHMubGVuZ3RoKTtcbiAgICAvL2Vsc2VcbiAgICAvL1x0c2VhcmNoU3RhcnRJbmRleCA9IDA7XG4gIH1cblxuICB3aGlsZSAodHJ1ZSkge1xuXG4gICAgLy9pID0gc2VhcmNoU3RhcnRJbmRleCArIChqICogZGlyZWN0aW9uKTtcbiAgICBpID0gKGRpcmVjdGlvbiA+IDApID8gc2VhcmNoU3RhcnRJbmRleCArIGogOiBzZWFyY2hTdGFydEluZGV4IC0gajtcblxuICAgIGlmIChpID49IDAgJiYgaSA8IHRoaXMuZGF0YVBvaW50cy5sZW5ndGgpIHtcblxuICAgICAgdmFyIGlkID0gdGhpcy5kYXRhUG9pbnRJZHNbaV07XG4gICAgICB2YXIgdmlzdWFsSW5mbyA9IHRoaXMuY2hhcnQuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdO1xuICAgICAgdmFyIGRhdGFQb2ludCA9IHRoaXMuZGF0YVBvaW50c1tpXTtcbiAgICAgIHZhciBkaXN0YW5jZSA9IG51bGw7XG5cbiAgICAgIGlmICh2aXN1YWxJbmZvKSB7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcblxuICAgICAgICAgIGNhc2UgXCJjb2x1bW5cIjpcbiAgICAgICAgICBjYXNlIFwic3RhY2tlZENvbHVtblwiOlxuICAgICAgICAgIGNhc2UgXCJzdGFja2VkQ29sdW1uMTAwXCI6XG4gICAgICAgICAgY2FzZSBcImJhclwiOlxuICAgICAgICAgIGNhc2UgXCJzdGFja2VkQmFyXCI6XG4gICAgICAgICAgY2FzZSBcInN0YWNrZWRCYXIxMDBcIjpcbiAgICAgICAgICBjYXNlIFwicmFuZ2VDb2x1bW5cIjpcbiAgICAgICAgICBjYXNlIFwicmFuZ2VCYXJcIjpcblxuICAgICAgICAgICAgaWYgKHggPj0gdmlzdWFsSW5mby54MSAmJiB4IDw9IHZpc3VhbEluZm8ueDIgJiYgeSA+PSB2aXN1YWxJbmZvLnkxICYmIHkgPD0gdmlzdWFsSW5mby55Mikge1xuICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGRhdGFQb2ludDogZGF0YVBvaW50LFxuICAgICAgICAgICAgICAgIGRhdGFQb2ludEluZGV4OiBpLFxuICAgICAgICAgICAgICAgIGRhdGFTZXJpZXM6IHRoaXMsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2U6IE1hdGgubWluKE1hdGguYWJzKHZpc3VhbEluZm8ueDEgLSB4KSwgTWF0aC5hYnModmlzdWFsSW5mby54MiAtIHgpLCBNYXRoLmFicyh2aXN1YWxJbmZvLnkxIC0geSksIE1hdGguYWJzKHZpc3VhbEluZm8ueTIgLSB5KSlcbiAgICAgICAgICAgICAgICAvL2Rpc3RhbmNlOjBcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgZm91bmREYXRhUG9pbnQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwibGluZVwiOlxuICAgICAgICAgIGNhc2UgXCJzdGVwTGluZVwiOlxuICAgICAgICAgIGNhc2UgXCJzcGxpbmVcIjpcbiAgICAgICAgICBjYXNlIFwiYXJlYVwiOlxuICAgICAgICAgIGNhc2UgXCJzdGVwQXJlYVwiOlxuICAgICAgICAgIGNhc2UgXCJzdGFja2VkQXJlYVwiOlxuICAgICAgICAgIGNhc2UgXCJzdGFja2VkQXJlYTEwMFwiOlxuICAgICAgICAgIGNhc2UgXCJzcGxpbmVBcmVhXCI6XG4gICAgICAgICAgY2FzZSBcInNjYXR0ZXJcIjpcbiAgICAgICAgICAgIHZhciBtYXJrZXJTaXplID0gZ2V0UHJvcGVydHkoXCJtYXJrZXJTaXplXCIsIGRhdGFQb2ludCwgdGhpcykgfHwgNDtcbiAgICAgICAgICAgIHZhciBzbmFwRGlzdGFuY2UgPSBnZXRDbG9zZXN0ID8gMjAgOiBtYXJrZXJTaXplO1xuXG4gICAgICAgICAgICBkaXN0YW5jZSA9IE1hdGguc3FydChNYXRoLnBvdyh2aXN1YWxJbmZvLngxIC0geCwgMikgKyBNYXRoLnBvdyh2aXN1YWxJbmZvLnkxIC0geSwgMikpO1xuICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDw9IHNuYXBEaXN0YW5jZSkge1xuICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGRhdGFQb2ludDogZGF0YVBvaW50LFxuICAgICAgICAgICAgICAgIGRhdGFQb2ludEluZGV4OiBpLFxuICAgICAgICAgICAgICAgIGRhdGFTZXJpZXM6IHRoaXMsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgeERpc3RhbmNlID0gTWF0aC5hYnModmlzdWFsSW5mby54MSAtIHgpO1xuICAgICAgICAgICAgaWYgKHhEaXN0YW5jZSA8PSBtaW5pbXVtWERpc3RhbmNlKVxuICAgICAgICAgICAgICBtaW5pbXVtWERpc3RhbmNlID0geERpc3RhbmNlO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPiAwKVxuICAgICAgICAgICAgICAgIGZvcndhcmRNaXNzQ291bnQrKztcbiAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGJhY2t3YXJkTWlzc0NvdW50Kys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8PSBtYXJrZXJTaXplIC8gMikge1xuICAgICAgICAgICAgICBmb3VuZERhdGFQb2ludCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInJhbmdlQXJlYVwiOlxuICAgICAgICAgIGNhc2UgXCJyYW5nZVNwbGluZUFyZWFcIjpcblxuICAgICAgICAgICAgdmFyIG1hcmtlclNpemUgPSBnZXRQcm9wZXJ0eShcIm1hcmtlclNpemVcIiwgZGF0YVBvaW50LCB0aGlzKSB8fCA0O1xuICAgICAgICAgICAgdmFyIHNuYXBEaXN0YW5jZSA9IGdldENsb3Nlc3QgPyAyMCA6IG1hcmtlclNpemU7XG5cbiAgICAgICAgICAgIGRpc3RhbmNlID0gTWF0aC5taW4oTWF0aC5zcXJ0KE1hdGgucG93KHZpc3VhbEluZm8ueDEgLSB4LCAyKSArIE1hdGgucG93KHZpc3VhbEluZm8ueTEgLSB5LCAyKSksIE1hdGguc3FydChNYXRoLnBvdyh2aXN1YWxJbmZvLngxIC0geCwgMikgKyBNYXRoLnBvdyh2aXN1YWxJbmZvLnkyIC0geSwgMikpKTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8PSBzbmFwRGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnQ6IGRhdGFQb2ludCxcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnRJbmRleDogaSxcbiAgICAgICAgICAgICAgICBkYXRhU2VyaWVzOiB0aGlzLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHhEaXN0YW5jZSA9IE1hdGguYWJzKHZpc3VhbEluZm8ueDEgLSB4KTtcbiAgICAgICAgICAgIGlmICh4RGlzdGFuY2UgPD0gbWluaW11bVhEaXN0YW5jZSlcbiAgICAgICAgICAgICAgbWluaW11bVhEaXN0YW5jZSA9IHhEaXN0YW5jZTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID4gMClcbiAgICAgICAgICAgICAgICBmb3J3YXJkTWlzc0NvdW50Kys7XG4gICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBiYWNrd2FyZE1pc3NDb3VudCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPD0gbWFya2VyU2l6ZSAvIDIpIHtcbiAgICAgICAgICAgICAgZm91bmREYXRhUG9pbnQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJidWJibGVcIjpcbiAgICAgICAgICAgIHZhciBtYXJrZXJTaXplID0gdmlzdWFsSW5mby5zaXplO1xuICAgICAgICAgICAgZGlzdGFuY2UgPSBNYXRoLnNxcnQoTWF0aC5wb3codmlzdWFsSW5mby54MSAtIHgsIDIpICsgTWF0aC5wb3codmlzdWFsSW5mby55MSAtIHksIDIpKTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8PSBtYXJrZXJTaXplIC8gMikge1xuICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGRhdGFQb2ludDogZGF0YVBvaW50LFxuICAgICAgICAgICAgICAgIGRhdGFQb2ludEluZGV4OiBpLFxuICAgICAgICAgICAgICAgIGRhdGFTZXJpZXM6IHRoaXMsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGZvdW5kRGF0YVBvaW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInBpZVwiOlxuICAgICAgICAgIGNhc2UgXCJkb3VnaG51dFwiOlxuICAgICAgICAgICAgdmFyIGNlbnRlciA9IHZpc3VhbEluZm8uY2VudGVyO1xuICAgICAgICAgICAgdmFyIGlubmVyUmFkaXVzID0gdGhpcy50eXBlID09PSBcImRvdWdobnV0XCIgPyB2aXN1YWxJbmZvLnBlcmNlbnRJbm5lclJhZGl1cyAqIHZpc3VhbEluZm8ucmFkaXVzIDogMDtcblxuICAgICAgICAgICAgZGlzdGFuY2UgPSBNYXRoLnNxcnQoTWF0aC5wb3coY2VudGVyLnggLSB4LCAyKSArIE1hdGgucG93KGNlbnRlci55IC0geSwgMikpO1xuICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgdmlzdWFsSW5mby5yYWRpdXMgJiYgZGlzdGFuY2UgPiBpbm5lclJhZGl1cykge1xuXG4gICAgICAgICAgICAgIHZhciBkZWx0YVkgPSB5IC0gY2VudGVyLnk7XG4gICAgICAgICAgICAgIHZhciBkZWx0YVggPSB4IC0gY2VudGVyLng7XG4gICAgICAgICAgICAgIHZhciBhbmdsZSA9IE1hdGguYXRhbjIoZGVsdGFZLCBkZWx0YVgpO1xuXG4gICAgICAgICAgICAgIGlmIChhbmdsZSA8IDApXG4gICAgICAgICAgICAgICAgYW5nbGUgKz0gTWF0aC5QSSAqIDI7XG5cbiAgICAgICAgICAgICAgYW5nbGUgPSBOdW1iZXIoKCgoYW5nbGUgLyBNYXRoLlBJICogMTgwICUgMzYwKSArIDM2MCkgJSAzNjApLnRvRml4ZWQoMTIpKTtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhbmdsZSk7XG5cblxuICAgICAgICAgICAgICB2YXIgc3RhcnRBbmdsZSA9IE51bWJlcigoKCh2aXN1YWxJbmZvLnN0YXJ0QW5nbGUgLyBNYXRoLlBJICogMTgwICUgMzYwKSArIDM2MCkgJSAzNjApLnRvRml4ZWQoMTIpKTtcbiAgICAgICAgICAgICAgdmFyIGVuZEFuZ2xlID0gTnVtYmVyKCgoKHZpc3VhbEluZm8uZW5kQW5nbGUgLyBNYXRoLlBJICogMTgwICUgMzYwKSArIDM2MCkgJSAzNjApLnRvRml4ZWQoMTIpKTtcblxuICAgICAgICAgICAgICAvL1NvIHRoYXQgZGF0YSBwb2ludCBpcyBkZXRlY3RlZCB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGRhdGFQb2ludFxuICAgICAgICAgICAgICBpZiAoZW5kQW5nbGUgPT09IDAgJiYgdmlzdWFsSW5mby5lbmRBbmdsZSA+IDEpIHtcbiAgICAgICAgICAgICAgICBlbmRBbmdsZSA9IDM2MDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChzdGFydEFuZ2xlID49IGVuZEFuZ2xlICYmIGRhdGFQb2ludC55ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgZW5kQW5nbGUgKz0gMzYwO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFuZ2xlIDwgc3RhcnRBbmdsZSlcbiAgICAgICAgICAgICAgICAgIGFuZ2xlICs9IDM2MDtcbiAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgaWYgKGFuZ2xlID4gc3RhcnRBbmdsZSAmJiBhbmdsZSA8IGVuZEFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGRhdGFQb2ludDogZGF0YVBvaW50LFxuICAgICAgICAgICAgICAgICAgZGF0YVBvaW50SW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICBkYXRhU2VyaWVzOiB0aGlzLFxuICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IDBcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGZvdW5kRGF0YVBvaW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImNhbmRsZXN0aWNrXCI6XG4gICAgICAgICAgICBpZiAoKCh4ID49ICh2aXN1YWxJbmZvLngxIC0gdmlzdWFsSW5mby5ib3JkZXJUaGlja25lc3MgLyAyKSkgJiYgKHggPD0gKHZpc3VhbEluZm8ueDIgKyB2aXN1YWxJbmZvLmJvcmRlclRoaWNrbmVzcyAvIDIpKVxuICAgICAgICAgICAgICAmJiAoeSA+PSB2aXN1YWxJbmZvLnkyIC0gdmlzdWFsSW5mby5ib3JkZXJUaGlja25lc3MgLyAyKSAmJiAoeSA8PSB2aXN1YWxJbmZvLnkzICsgdmlzdWFsSW5mby5ib3JkZXJUaGlja25lc3MgLyAyKSlcbiAgICAgICAgICAgICAgfHwgKE1hdGguYWJzKHZpc3VhbEluZm8ueDIgLSB4ICsgdmlzdWFsSW5mby54MSAtIHgpIDwgdmlzdWFsSW5mby5ib3JkZXJUaGlja25lc3MgJiYgKHkgPj0gdmlzdWFsSW5mby55MSAmJiB5IDw9IHZpc3VhbEluZm8ueTQpKSkge1xuICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGRhdGFQb2ludDogZGF0YVBvaW50LFxuICAgICAgICAgICAgICAgIGRhdGFQb2ludEluZGV4OiBpLFxuICAgICAgICAgICAgICAgIGRhdGFTZXJpZXM6IHRoaXMsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2U6IE1hdGgubWluKE1hdGguYWJzKHZpc3VhbEluZm8ueDEgLSB4KSwgTWF0aC5hYnModmlzdWFsSW5mby54MiAtIHgpLCBNYXRoLmFicyh2aXN1YWxJbmZvLnkyIC0geSksIE1hdGguYWJzKHZpc3VhbEluZm8ueTMgLSB5KSlcbiAgICAgICAgICAgICAgICAvL2Rpc3RhbmNlOjBcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgZm91bmREYXRhUG9pbnQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwib2hsY1wiOlxuXG4gICAgICAgICAgICBpZiAoKE1hdGguYWJzKHZpc3VhbEluZm8ueDIgLSB4ICsgdmlzdWFsSW5mby54MSAtIHgpIDwgdmlzdWFsSW5mby5ib3JkZXJUaGlja25lc3MgJiYgKHkgPj0gdmlzdWFsSW5mby55MiAmJiB5IDw9IHZpc3VhbEluZm8ueTMpKVxuXG4gICAgICAgICAgICAgIHx8ICh4ID49IHZpc3VhbEluZm8ueDEgJiYgKHggPD0gKHZpc3VhbEluZm8ueDIgKyB2aXN1YWxJbmZvLngxKSAvIDIpXG4gICAgICAgICAgICAgICAgJiYgKHkgPj0gdmlzdWFsSW5mby55MSAtIHZpc3VhbEluZm8uYm9yZGVyVGhpY2tuZXNzIC8gMikgJiYgKHkgPD0gdmlzdWFsSW5mby55MSArIHZpc3VhbEluZm8uYm9yZGVyVGhpY2tuZXNzIC8gMikpXG5cbiAgICAgICAgICAgICAgfHwgKCh4ID49ICh2aXN1YWxJbmZvLngxICsgdmlzdWFsSW5mby54MikgLyAyKSAmJiAoeCA8PSB2aXN1YWxJbmZvLngyKVxuICAgICAgICAgICAgICAgICYmICh5ID49IHZpc3VhbEluZm8ueTQgLSB2aXN1YWxJbmZvLmJvcmRlclRoaWNrbmVzcyAvIDIpICYmICh5IDw9IHZpc3VhbEluZm8ueTQgKyB2aXN1YWxJbmZvLmJvcmRlclRoaWNrbmVzcyAvIDIpKSkge1xuXG4gICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgZGF0YVBvaW50OiBkYXRhUG9pbnQsXG4gICAgICAgICAgICAgICAgZGF0YVBvaW50SW5kZXg6IGksXG4gICAgICAgICAgICAgICAgZGF0YVNlcmllczogdGhpcyxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZTogTWF0aC5taW4oTWF0aC5hYnModmlzdWFsSW5mby54MSAtIHgpLCBNYXRoLmFicyh2aXN1YWxJbmZvLngyIC0geCksIE1hdGguYWJzKHZpc3VhbEluZm8ueTIgLSB5KSwgTWF0aC5hYnModmlzdWFsSW5mby55MyAtIHkpKVxuICAgICAgICAgICAgICAgIC8vZGlzdGFuY2U6MFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBmb3VuZERhdGFQb2ludCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvdW5kRGF0YVBvaW50IHx8IChmb3J3YXJkTWlzc0NvdW50ID4gbWF4TWlzc0NvdW50ICYmIGJhY2t3YXJkTWlzc0NvdW50ID4gbWF4TWlzc0NvdW50KSlcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoc2VhcmNoU3RhcnRJbmRleCAtIGogPCAwICYmIHNlYXJjaFN0YXJ0SW5kZXggKyBqID49IHRoaXMuZGF0YVBvaW50cy5sZW5ndGgpXG4gICAgICBicmVhaztcblxuICAgIGlmIChkaXJlY3Rpb24gPT09IC0xKSB7XG4gICAgICBqKys7XG4gICAgICBkaXJlY3Rpb24gPSAxO1xuICAgIH0gZWxzZVxuICAgICAgZGlyZWN0aW9uID0gLTE7XG5cbiAgfVxuXG5cblxuICB2YXIgY2xvc2VzdFJlc3VsdCA9IG51bGw7XG5cbiAgZm9yICh2YXIgbSA9IDA7IG0gPCByZXN1bHRzLmxlbmd0aDsgbSsrKSB7XG4gICAgaWYgKCFjbG9zZXN0UmVzdWx0KSB7XG4gICAgICBjbG9zZXN0UmVzdWx0ID0gcmVzdWx0c1ttXTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdHNbbV0uZGlzdGFuY2UgPD0gY2xvc2VzdFJlc3VsdC5kaXN0YW5jZSkge1xuICAgICAgY2xvc2VzdFJlc3VsdCA9IHJlc3VsdHNbbV07XG4gICAgfVxuICB9XG5cbiAgLy9pZiAod2luZG93LmNvbnNvbGUpXG4gIC8vXHR3aW5kb3cuY29uc29sZS5sb2coXCJmb3J3YXJkTWlzc0NvdW50OiBcIiArIGZvcndhcmRNaXNzQ291bnQgKyBcIjsgYmFja3dhcmRNaXNzQ291bnQ6IFwiICsgYmFja3dhcmRNaXNzQ291bnQgKyBcIjsgZ2V0Q2xvc2VzdDogXCIgKyBnZXRDbG9zZXN0KTtcblxuICAvL2lmICh3aW5kb3cuY29uc29sZSAmJiBjbG9zZXN0UmVzdWx0KVxuICAvLyAgICB3aW5kb3cuY29uc29sZS5sb2coaiArIFwiOiBkaXN0YW5jZSA9IFwiICsgY2xvc2VzdFJlc3VsdC5kaXN0YW5jZSk7XG5cbiAgcmV0dXJuIGNsb3Nlc3RSZXN1bHQ7XG59XG5cbkRhdGFTZXJpZXMucHJvdG90eXBlLmdldE1hcmtlclByb3BlcnRpZXMgPSBmdW5jdGlvbiAoaW5kZXgsIHgsIHksIGN0eCkge1xuICB2YXIgZGF0YVBvaW50cyA9IHRoaXMuZGF0YVBvaW50cztcbiAgdmFyIGRhdGFTZXJpZXMgPSB0aGlzO1xuXG4gIHZhciBtYXJrZXJDb2xvciA9IGRhdGFQb2ludHNbaW5kZXhdLm1hcmtlckNvbG9yID8gZGF0YVBvaW50c1tpbmRleF0ubWFya2VyQ29sb3IgOiBkYXRhU2VyaWVzLm1hcmtlckNvbG9yID8gZGF0YVNlcmllcy5tYXJrZXJDb2xvciA6IGRhdGFQb2ludHNbaW5kZXhdLmNvbG9yID8gZGF0YVBvaW50c1tpbmRleF0uY29sb3IgOiBkYXRhU2VyaWVzLmNvbG9yID8gZGF0YVNlcmllcy5jb2xvciA6IGRhdGFTZXJpZXMuX2NvbG9yU2V0W2luZGV4ICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcbiAgdmFyIG1hcmtlckJvcmRlckNvbG9yID0gZGF0YVBvaW50c1tpbmRleF0ubWFya2VyQm9yZGVyQ29sb3IgPyBkYXRhUG9pbnRzW2luZGV4XS5tYXJrZXJCb3JkZXJDb2xvciA6IGRhdGFTZXJpZXMubWFya2VyQm9yZGVyQ29sb3IgPyBkYXRhU2VyaWVzLm1hcmtlckJvcmRlckNvbG9yIDogbnVsbDtcbiAgdmFyIG1hcmtlckJvcmRlclRoaWNrbmVzcyA9IGRhdGFQb2ludHNbaW5kZXhdLm1hcmtlckJvcmRlclRoaWNrbmVzcyA/IGRhdGFQb2ludHNbaW5kZXhdLm1hcmtlckJvcmRlclRoaWNrbmVzcyA6IGRhdGFTZXJpZXMubWFya2VyQm9yZGVyVGhpY2tuZXNzID8gZGF0YVNlcmllcy5tYXJrZXJCb3JkZXJUaGlja25lc3MgOiBudWxsO1xuICB2YXIgbWFya2VyVHlwZSA9IGRhdGFQb2ludHNbaW5kZXhdLm1hcmtlclR5cGUgPyBkYXRhUG9pbnRzW2luZGV4XS5tYXJrZXJUeXBlIDogZGF0YVNlcmllcy5tYXJrZXJUeXBlO1xuICB2YXIgbWFya2VyU2l6ZSA9IGRhdGFQb2ludHNbaW5kZXhdLm1hcmtlclNpemUgPyBkYXRhUG9pbnRzW2luZGV4XS5tYXJrZXJTaXplIDogZGF0YVNlcmllcy5tYXJrZXJTaXplO1xuXG5cbiAgcmV0dXJuIHtcbiAgICB4OiB4LCB5OiB5LCBjdHg6IGN0eCxcbiAgICB0eXBlOiBtYXJrZXJUeXBlLFxuICAgIHNpemU6IG1hcmtlclNpemUsXG4gICAgY29sb3I6IG1hcmtlckNvbG9yLFxuICAgIGJvcmRlckNvbG9yOiBtYXJrZXJCb3JkZXJDb2xvcixcbiAgICBib3JkZXJUaGlja25lc3M6IG1hcmtlckJvcmRlclRoaWNrbmVzc1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGFTZXJpZXM7XG4iLCJcbmltcG9ydCB7Y3JlYXRlQ2FudmFzLCBnZXRNb3VzZUNvb3JkaW5hdGVzLCBpc0NhbnZhc1N1cHBvcnRlZH0gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmZ1bmN0aW9uIEV2ZW50TWFuYWdlcihjaGFydCkge1xuICB0aGlzLmNoYXJ0ID0gY2hhcnQ7XG4gIHRoaXMubGFzdE9iamVjdElkID0gMDtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgdGhpcy5vYmplY3RNYXAgPSBbXTtcbiAgdGhpcy5yZWN0YW5ndWxhclJlZ2lvbkV2ZW50U3Vic2NyaXB0aW9ucyA9IFtdO1xuICB0aGlzLnByZXZpb3VzRGF0YVBvaW50RXZlbnRPYmplY3QgPSBudWxsO1xuICAvL3RoaXMucHJldmlvdXNEYXRhU2VyaWVzRXZlbnRPYmplY3QgPSBudWxsO1xuXG4gIHRoaXMuZ2hvc3RDYW52YXMgPSBjcmVhdGVDYW52YXModGhpcy5jaGFydC53aWR0aCwgdGhpcy5jaGFydC5oZWlnaHQpO1xuICAvL3RoaXMuZ2hvc3RDYW52YXMud2lkdGggPSB0aGlzLmNoYXJ0LndpZHRoO1xuICAvL3RoaXMuZ2hvc3RDYW52YXMuaGVpZ2h0ID0gdGhpcy5jaGFydC5oZWlnaHQ7XG5cbiAgdGhpcy5naG9zdEN0eCA9IHRoaXMuZ2hvc3RDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuXG4gIHZhciBldmVudEhhbmRsZXIgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICBfdGhpcy5tb3VzZUV2ZW50SGFuZGxlci5jYWxsKF90aGlzLCBldik7XG4gIH07XG5cbiAgdGhpcy5tb3VzZW92ZXJlZE9iamVjdE1hcHMgPSBbXTtcbiAgLy90aGlzLmNoYXJ0LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdmVyXCIsIGV2ZW50SGFuZGxlcik7XG4gIC8vdGhpcy5jaGFydC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBldmVudEhhbmRsZXIpO1xuICAvL3RoaXMuY2hhcnQuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCBldmVudEhhbmRsZXIpO1xuICAvL3RoaXMuY2hhcnQuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBldmVudEhhbmRsZXIpO1xufVxuXG5FdmVudE1hbmFnZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmxhc3RPYmplY3RJZCA9IDA7XG4gIHRoaXMub2JqZWN0TWFwID0gW107XG4gIHRoaXMucmVjdGFuZ3VsYXJSZWdpb25FdmVudFN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgdGhpcy5wcmV2aW91c0RhdGFQb2ludEV2ZW50T2JqZWN0ID0gbnVsbDtcblxuICB0aGlzLmV2ZW50T2JqZWN0cyA9IFtdO1xuICAvL3RoaXMuZ2hvc3RDYW52YXMud2lkdGggPSB0aGlzLmNoYXJ0LndpZHRoO1xuICAvL3RoaXMuZ2hvc3RDYW52YXMuaGVpZ2h0ID0gdGhpcy5jaGFydC5oZWlnaHQ7XG5cbiAgaWYgKGlzQ2FudmFzU3VwcG9ydGVkKSB7XG4gICAgdGhpcy5naG9zdEN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jaGFydC53aWR0aCwgdGhpcy5jaGFydC5oZWlnaHQpO1xuICAgIHRoaXMuZ2hvc3RDdHguYmVnaW5QYXRoKCk7XG4gIH1cbn1cblxuRXZlbnRNYW5hZ2VyLnByb3RvdHlwZS5nZXROZXdPYmplY3RUcmFja2luZ0lkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKyt0aGlzLmxhc3RPYmplY3RJZDtcbn1cblxuRXZlbnRNYW5hZ2VyLnByb3RvdHlwZS5tb3VzZUV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uIChldikge1xuXG4gIGlmIChldi50eXBlICE9PSBcIm1vdXNlbW92ZVwiICYmIGV2LnR5cGUgIT09IFwiY2xpY2tcIilcbiAgICByZXR1cm47XG5cbiAgdmFyIGV2ZW50T2JqZWN0TWFwcyA9IFtdO1xuICB2YXIgeHkgPSBnZXRNb3VzZUNvb3JkaW5hdGVzKGV2KTtcbiAgdmFyIGlkID0gbnVsbDtcblxuICAvL3ZhciBkYXRhUG9pbnRJbmZvID0gdGhpcy5jaGFydC5nZXREYXRhUG9pbnRBdFhZKHh5LngsIHh5LnksIGZhbHNlKTtcblxuICAvL2lmIChkYXRhUG9pbnRJbmZvKSB7XG4gIC8vXHRpZCA9IGRhdGFQb2ludEluZm8uZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbZGF0YVBvaW50SW5mby5kYXRhUG9pbnRJbmRleF07XG4gIC8vfSBlbHNlIGlmIChpc0NhbnZhc1N1cHBvcnRlZCkgey8vSUU5K1xuICAvL1x0aWQgPSBnZXRPYmplY3RJZCh4eS54LCB4eS55LCB0aGlzLmdob3N0Q3R4KTtcbiAgLy99XG4gIGlkID0gdGhpcy5jaGFydC5nZXRPYmplY3RBdFhZKHh5LngsIHh5LnksIGZhbHNlKTtcblxuICBpZiAoaWQgJiYgdHlwZW9mICh0aGlzLm9iamVjdE1hcFtpZF0pICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cbiAgICB2YXIgZXZlbnRPYmplY3RNYXAgPSB0aGlzLm9iamVjdE1hcFtpZF07XG5cbiAgICBpZiAoZXZlbnRPYmplY3RNYXAub2JqZWN0VHlwZSA9PT0gXCJkYXRhUG9pbnRcIikge1xuICAgICAgdmFyIGRhdGFTZXJpZXMgPSB0aGlzLmNoYXJ0LmRhdGFbZXZlbnRPYmplY3RNYXAuZGF0YVNlcmllc0luZGV4XTtcbiAgICAgIHZhciBkYXRhUG9pbnQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbZXZlbnRPYmplY3RNYXAuZGF0YVBvaW50SW5kZXhdO1xuICAgICAgdmFyIGRhdGFQb2ludEluZGV4ID0gZXZlbnRPYmplY3RNYXAuZGF0YVBvaW50SW5kZXg7XG5cbiAgICAgIC8vRXZlbnQgUGFyYW1ldGVyIHNob3VsZCBub3QgY29udGFpbiByZWZlcmVuY2UgdG8gZGF0YVNlcmllcyBkaXJlY3RseS4gQnV0IHRvIGl0cyBvcHRpb25zLlxuICAgICAgZXZlbnRPYmplY3RNYXAuZXZlbnRQYXJhbWV0ZXIgPSB7XG4gICAgICAgIHg6IHh5LngsIHk6IHh5LnksIGRhdGFQb2ludDogZGF0YVBvaW50LFxuICAgICAgICBkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLl9vcHRpb25zLCBkYXRhUG9pbnRJbmRleDogZGF0YVBvaW50SW5kZXgsIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllcy5pbmRleCxcbiAgICAgICAgY2hhcnQ6IHRoaXMuY2hhcnQuX3B1YmxpY0NoYXJ0UmVmZXJlbmNlXG4gICAgICB9O1xuICAgICAgZXZlbnRPYmplY3RNYXAuZXZlbnRDb250ZXh0ID0ge1xuICAgICAgICBjb250ZXh0OiBkYXRhUG9pbnQsIHVzZXJDb250ZXh0OiBkYXRhUG9pbnQsIG1vdXNlb3ZlcjogXCJtb3VzZW92ZXJcIiwgbW91c2Vtb3ZlOiBcIm1vdXNlbW92ZVwiLCBtb3VzZW91dDogXCJtb3VzZW91dFwiLCBjbGljazogXCJjbGlja1wiXG4gICAgICB9O1xuICAgICAgZXZlbnRPYmplY3RNYXBzLnB1c2goZXZlbnRPYmplY3RNYXApO1xuXG4gICAgICAvL0FkZCBEYXRhc2VyaWVzIHRvbyBiZWNhdXNlIG1vdXNlIGV2ZW50IG9uIGRhdGFQb2ludCBhbHNvIG1lYW5zIHRoZXJlIGlzIGFuIGV2ZW50IG9uIGRhdGFTZXJpZXMuIERhdGFTZXJpZXMgaXMgbm90IHByZXNlbnQgb24gZ2hvc3QgY2FudmFzXG4gICAgICBldmVudE9iamVjdE1hcCA9IHRoaXMub2JqZWN0TWFwW2RhdGFTZXJpZXMuaWRdO1xuXG4gICAgICAvL0V2ZW50IFBhcmFtZXRlciBzaG91bGQgbm90IGNvbnRhaW4gcmVmZXJlbmNlIHRvIGRhdGFTZXJpZXMgZGlyZWN0bHkuIEJ1dCB0byBpdHMgb3B0aW9ucy5cbiAgICAgIGV2ZW50T2JqZWN0TWFwLmV2ZW50UGFyYW1ldGVyID0ge1xuICAgICAgICB4OiB4eS54LCB5OiB4eS55LFxuICAgICAgICBkYXRhUG9pbnQ6IGRhdGFQb2ludCwgZGF0YVNlcmllczogZGF0YVNlcmllcy5fb3B0aW9ucywgZGF0YVBvaW50SW5kZXg6IGRhdGFQb2ludEluZGV4LCBkYXRhU2VyaWVzSW5kZXg6IGRhdGFTZXJpZXMuaW5kZXgsXG4gICAgICAgIGNoYXJ0OiB0aGlzLmNoYXJ0Ll9wdWJsaWNDaGFydFJlZmVyZW5jZVxuICAgICAgfTtcblxuICAgICAgZXZlbnRPYmplY3RNYXAuZXZlbnRDb250ZXh0ID0ge1xuICAgICAgICBjb250ZXh0OiBkYXRhU2VyaWVzLCB1c2VyQ29udGV4dDogZGF0YVNlcmllcy5fb3B0aW9ucywgbW91c2VvdmVyOiBcIm1vdXNlb3ZlclwiLCBtb3VzZW1vdmU6IFwibW91c2Vtb3ZlXCIsIG1vdXNlb3V0OiBcIm1vdXNlb3V0XCIsIGNsaWNrOiBcImNsaWNrXCJcbiAgICAgIH07XG4gICAgICBldmVudE9iamVjdE1hcHMucHVzaCh0aGlzLm9iamVjdE1hcFtkYXRhU2VyaWVzLmlkXSk7XG4gICAgfVxuICAgICAgLy9lbHNlIGlmIChldmVudE9iamVjdE1hcC5vYmplY3RUeXBlID09PSBcInN0cmlwTGluZVwiKSB7XG5cbiAgICAgIC8vXHQvL0V2ZW50IFBhcmFtZXRlciBzaG91bGQgbm90IGNvbnRhaW4gcmVmZXJlbmNlIHRvIHN0cmlwTGluZSBkaXJlY3RseS4gQnV0IHRvIGl0cyBvcHRpb25zLlxuICAgICAgLy9cdGV2ZW50T2JqZWN0TWFwLmV2ZW50UGFyYW1ldGVyID0geyB4OiB4eS54LCB5OiB4eS55LCBzdHJpcExpbmU6IGV2ZW50T2JqZWN0TWFwLnN0cmlwTGluZS5fb3B0aW9ucywgYXhpczogZXZlbnRPYmplY3RNYXAuYXhpcy5fb3B0aW9ucywgc3RyaXBMaW5lSW5kZXg6IGV2ZW50T2JqZWN0TWFwLnN0cmlwTGluZUluZGV4IH07XG4gICAgICAvL1x0ZXZlbnRPYmplY3RNYXAuZXZlbnRDb250ZXh0ID0geyBjb250ZXh0OiBldmVudE9iamVjdE1hcC5zdHJpcExpbmUsIHVzZXJDb250ZXh0OiBldmVudE9iamVjdE1hcC5zdHJpcExpbmUuX29wdGlvbnMsIG1vdXNlb3ZlcjogXCJtb3VzZW92ZXJcIiwgbW91c2Vtb3ZlOiBcIm1vdXNlbW92ZVwiLCBtb3VzZW91dDogXCJtb3VzZW91dFwiLCBjbGljazogXCJjbGlja1wiIH07XG5cbiAgICAgIC8vXHRldmVudE9iamVjdE1hcHMucHVzaChldmVudE9iamVjdE1hcCk7XG4gICAgICAvL31cbiAgICBlbHNlIGlmIChldmVudE9iamVjdE1hcC5vYmplY3RUeXBlID09PSBcImxlZ2VuZEl0ZW1cIikge1xuXG4gICAgICB2YXIgZGF0YVNlcmllcyA9IHRoaXMuY2hhcnQuZGF0YVtldmVudE9iamVjdE1hcC5kYXRhU2VyaWVzSW5kZXhdO1xuICAgICAgdmFyIGRhdGFQb2ludCA9IGV2ZW50T2JqZWN0TWFwLmRhdGFQb2ludEluZGV4ICE9PSBudWxsID8gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2V2ZW50T2JqZWN0TWFwLmRhdGFQb2ludEluZGV4XSA6IG51bGw7XG5cbiAgICAgIC8vRXZlbnQgUGFyYW1ldGVyIHNob3VsZCBub3QgY29udGFpbiByZWZlcmVuY2UgdG8gRGF0YVNlcmllcyBkaXJlY3RseS4gQnV0IHRvIGl0cyBvcHRpb25zLlxuICAgICAgZXZlbnRPYmplY3RNYXAuZXZlbnRQYXJhbWV0ZXIgPSB7XG4gICAgICAgIHg6IHh5LngsIHk6IHh5LnksXG4gICAgICAgIGRhdGFTZXJpZXM6IGRhdGFTZXJpZXMuX29wdGlvbnMsIGRhdGFQb2ludDogZGF0YVBvaW50LCBkYXRhUG9pbnRJbmRleDogZXZlbnRPYmplY3RNYXAuZGF0YVBvaW50SW5kZXgsIGRhdGFTZXJpZXNJbmRleDogZXZlbnRPYmplY3RNYXAuZGF0YVNlcmllc0luZGV4LFxuICAgICAgICBjaGFydDogdGhpcy5jaGFydC5fcHVibGljQ2hhcnRSZWZlcmVuY2VcbiAgICAgIH07XG4gICAgICBldmVudE9iamVjdE1hcC5ldmVudENvbnRleHQgPSB7XG4gICAgICAgIGNvbnRleHQ6IHRoaXMuY2hhcnQubGVnZW5kLCB1c2VyQ29udGV4dDogdGhpcy5jaGFydC5sZWdlbmQuX29wdGlvbnMsIG1vdXNlb3ZlcjogXCJpdGVtbW91c2VvdmVyXCIsIG1vdXNlbW92ZTogXCJpdGVtbW91c2Vtb3ZlXCIsIG1vdXNlb3V0OiBcIml0ZW1tb3VzZW91dFwiLCBjbGljazogXCJpdGVtY2xpY2tcIlxuICAgICAgfTtcbiAgICAgIGV2ZW50T2JqZWN0TWFwcy5wdXNoKGV2ZW50T2JqZWN0TWFwKTtcbiAgICB9XG4gIH1cblxuICAvL0ZpcmUgbW91c2VvdXQgaWYgZXhpc3RpbmcgbW91c2VvdmVyZWQgb2JqZWN0cyBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9iamVjdG1hcC5cbiAgdmFyIG1vdXNlT3V0T2JqZWN0TWFwc0V4Y2x1ZGVkID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tb3VzZW92ZXJlZE9iamVjdE1hcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbW91c2VPdXQgPSB0cnVlO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBldmVudE9iamVjdE1hcHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChldmVudE9iamVjdE1hcHNbal0uaWQgPT09IHRoaXMubW91c2VvdmVyZWRPYmplY3RNYXBzW2ldLmlkKSB7XG4gICAgICAgIG1vdXNlT3V0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb3VzZU91dCkge1xuICAgICAgdGhpcy5maXJlRXZlbnQodGhpcy5tb3VzZW92ZXJlZE9iamVjdE1hcHNbaV0sIFwibW91c2VvdXRcIiwgZXYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtb3VzZU91dE9iamVjdE1hcHNFeGNsdWRlZC5wdXNoKHRoaXMubW91c2VvdmVyZWRPYmplY3RNYXBzW2ldKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLm1vdXNlb3ZlcmVkT2JqZWN0TWFwcyA9IG1vdXNlT3V0T2JqZWN0TWFwc0V4Y2x1ZGVkO1xuXG4gIC8vUHJvY2VzcyBuZXcgZXZlbnRPYmVjdE1hcHNcbiAgLy9JZiB0aGV5IGFscmVhZHkgZG9uJ3QgZXhpc3QsIGFkZCB0aGVtIGFuZCBmaXJlIG1vdXNlb3ZlclxuICAvL0lmIGV2LnR5cGUgaXMgbW91c2Vtb3ZlLCB0aGVuIGp1c3QgZmlyZSBtb3VzZW1vdmVcbiAgLy9JZiBldi50eXBlIGlzIGNsaWNrLCB0aGVuIGZpcmUgdHdvIGV2ZW50cyAtIGNsaWNrIGZvbGxvd2VkIGJ5IG1vdXNlbW92ZVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50T2JqZWN0TWFwcy5sZW5ndGg7IGkrKykge1xuXG4gICAgdmFyIGV4aXN0aW5nID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubW91c2VvdmVyZWRPYmplY3RNYXBzLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoZXZlbnRPYmplY3RNYXBzW2ldLmlkID09PSB0aGlzLm1vdXNlb3ZlcmVkT2JqZWN0TWFwc1tqXS5pZCkge1xuICAgICAgICBleGlzdGluZyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHRoaXMuZmlyZUV2ZW50KGV2ZW50T2JqZWN0TWFwc1tpXSwgXCJtb3VzZW92ZXJcIiwgZXYpO1xuICAgICAgdGhpcy5tb3VzZW92ZXJlZE9iamVjdE1hcHMucHVzaChldmVudE9iamVjdE1hcHNbaV0pO1xuICAgIH1cblxuICAgIGlmIChldi50eXBlID09PSBcImNsaWNrXCIpIHtcbiAgICAgIHRoaXMuZmlyZUV2ZW50KGV2ZW50T2JqZWN0TWFwc1tpXSwgXCJjbGlja1wiLCBldik7XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICB0aGlzLmZpcmVFdmVudChldmVudE9iamVjdE1hcHNbaV0sIFwibW91c2Vtb3ZlXCIsIGV2KTtcbiAgICB9XG4gIH1cbn1cblxuRXZlbnRNYW5hZ2VyLnByb3RvdHlwZS5maXJlRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnRPYmplY3RNYXAsIGV2ZW50VHlwZSwgZXYpIHtcblxuICBpZiAoIWV2ZW50T2JqZWN0TWFwIHx8ICFldmVudFR5cGUpXG4gICAgcmV0dXJuO1xuXG4gIHZhciBldmVudFBhcmFtZXRlciA9IGV2ZW50T2JqZWN0TWFwLmV2ZW50UGFyYW1ldGVyO1xuICB2YXIgZXZlbnRDb250ZXh0ID0gZXZlbnRPYmplY3RNYXAuZXZlbnRDb250ZXh0O1xuICAvL3ZhciBjb250ZXh0ID0gZXZlbnRPYmplY3RNYXAuZXZlbnRDb250ZXh0LmNvbnRleHQ7XG4gIHZhciB1c2VyQ29udGV4dCA9IGV2ZW50T2JqZWN0TWFwLmV2ZW50Q29udGV4dC51c2VyQ29udGV4dFxuXG4gIGlmICh1c2VyQ29udGV4dCAmJiBldmVudENvbnRleHQgJiYgdXNlckNvbnRleHRbZXZlbnRDb250ZXh0W2V2ZW50VHlwZV1dKVxuICAgIHVzZXJDb250ZXh0W2V2ZW50Q29udGV4dFtldmVudFR5cGVdXS5jYWxsKHVzZXJDb250ZXh0LCBldmVudFBhcmFtZXRlcik7XG5cbiAgaWYgKGV2ZW50VHlwZSAhPT0gXCJtb3VzZW91dFwiKSB7XG4gICAgaWYgKHVzZXJDb250ZXh0LmN1cnNvciAmJiB1c2VyQ29udGV4dC5jdXJzb3IgIT09IGV2LnRhcmdldC5zdHlsZS5jdXJzb3IpIHtcbiAgICAgIGV2LnRhcmdldC5zdHlsZS5jdXJzb3IgPSB1c2VyQ29udGV4dC5jdXJzb3I7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGV2LnRhcmdldC5zdHlsZS5jdXJzb3IgPSB0aGlzLmNoYXJ0Ll9kZWZhdWx0Q3Vyc29yO1xuICAgIGRlbGV0ZSBldmVudE9iamVjdE1hcC5ldmVudFBhcmFtZXRlcjsgLy8gcmVmZXJlbmNlIG5vIGxvbmdlciByZXF1aXJlZC5cbiAgICBkZWxldGUgZXZlbnRPYmplY3RNYXAuZXZlbnRDb250ZXh0OyAvLyByZWZlcmVuY2Ugbm8gbG9uZ2VyIHJlcXVpcmVkLlxuICB9XG5cbiAgLy9UaGlzIGlzIGp1c3QgYSBxdWljayBmaXguIE5lZWQgdG8gZmluZCBhIGJldHRlciB3YXkgb2YgY2FsbGluZyBpbnRlcm5hbCBldmVudCBoYW5kbGVycy5cbiAgaWYgKGV2ZW50VHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50T2JqZWN0TWFwLm9iamVjdFR5cGUgPT09IFwiZGF0YVBvaW50XCIgJiYgdGhpcy5jaGFydC5waWVEb3VnaG51dENsaWNrSGFuZGxlcikge1xuICAgIHRoaXMuY2hhcnQucGllRG91Z2hudXRDbGlja0hhbmRsZXIuY2FsbCh0aGlzLmNoYXJ0LmRhdGFbZXZlbnRPYmplY3RNYXAuZGF0YVNlcmllc0luZGV4XSwgZXZlbnRQYXJhbWV0ZXIpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50TWFuYWdlcjtcbiIsImZ1bmN0aW9uIExheW91dE1hbmFnZXIoeDEsIHkxLCB4MiwgeTIsIHBhZGRpbmcpIHtcblxuICBpZiAodHlwZW9mIChwYWRkaW5nKSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICBwYWRkaW5nID0gMDtcblxuICB0aGlzLl9wYWRkaW5nID0gcGFkZGluZztcblxuICB0aGlzLl94MSA9IHgxO1xuICB0aGlzLl95MSA9IHkxO1xuICB0aGlzLl94MiA9IHgyO1xuICB0aGlzLl95MiA9IHkyO1xuXG4gIHRoaXMuX3RvcE9jY3VwaWVkID0gdGhpcy5fcGFkZGluZztcbiAgdGhpcy5fYm90dG9tT2NjdXBpZWQgPSB0aGlzLl9wYWRkaW5nO1xuICB0aGlzLl9sZWZ0T2NjdXBpZWQgPSB0aGlzLl9wYWRkaW5nO1xuICB0aGlzLl9yaWdodE9jY3VwaWVkID0gdGhpcy5fcGFkZGluZztcbn1cblxuTGF5b3V0TWFuYWdlci5wcm90b3R5cGUucmVnaXN0ZXJTcGFjZSA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgc2l6ZSkge1xuICBpZiAocG9zaXRpb24gPT09IFwidG9wXCIpIHtcbiAgICB0aGlzLl90b3BPY2N1cGllZCArPSBzaXplLmhlaWdodDtcbiAgfVxuICBlbHNlIGlmIChwb3NpdGlvbiA9PT0gXCJib3R0b21cIikge1xuICAgIHRoaXMuX2JvdHRvbU9jY3VwaWVkICs9IHNpemUuaGVpZ2h0O1xuICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSBcImxlZnRcIikge1xuICAgIHRoaXMuX2xlZnRPY2N1cGllZCArPSBzaXplLndpZHRoOyAvLyB0aGlzIGlzIHdpZHRoIHdoZW4gc2VlbiB1cHJpZ2h0L3ZlcnRpY2FsbHlcbiAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgdGhpcy5fcmlnaHRPY2N1cGllZCArPSBzaXplLndpZHRoOy8vIHRoaXMgaXMgd2lkdGggd2hlbiBzZWVuIHVwcmlnaHQvdmVydGljYWxseVxuICB9XG59XG5cbkxheW91dE1hbmFnZXIucHJvdG90eXBlLnVuUmVnaXN0ZXJTcGFjZSA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgc2l6ZSkge1xuICBpZiAocG9zaXRpb24gPT09IFwidG9wXCIpIHtcbiAgICB0aGlzLl90b3BPY2N1cGllZCAtPSBzaXplLmhlaWdodDtcbiAgfVxuICBlbHNlIGlmIChwb3NpdGlvbiA9PT0gXCJib3R0b21cIikge1xuICAgIHRoaXMuX2JvdHRvbU9jY3VwaWVkIC09IHNpemUuaGVpZ2h0O1xuICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSBcImxlZnRcIikge1xuICAgIHRoaXMuX2xlZnRPY2N1cGllZCAtPSBzaXplLndpZHRoOy8vIHRoaXMgaXMgd2lkdGggd2hlbiBzZWVuIHVwcmlnaHQvdmVydGljYWxseVxuICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICB0aGlzLl9yaWdodE9jY3VwaWVkIC09IHNpemUud2lkdGg7Ly8gdGhpcyBpcyB3aWR0aCB3aGVuIHNlZW4gdXByaWdodC92ZXJ0aWNhbGx5XG4gIH1cbn1cblxuTGF5b3V0TWFuYWdlci5wcm90b3R5cGUuZ2V0RnJlZVNwYWNlID0gZnVuY3Rpb24gKCkge1xuICAvLy88c2lnbmF0dXJlPlxuICAvLy88c3VtbWFyeT5SZXR1cm5zIGF2YWlsYWJsZSBmcmVlIHNwYWNlIHt4MTpudW1iZXIsIHkxOm51bWJlciwgeDI6bnVtYmVyLCB5MjpudW1iZXJ9PC9zdW1tYXJ5PlxuICAvLy88L3NpZ25hdHVyZT5cblxuICByZXR1cm4ge1xuICAgIHgxOiB0aGlzLl94MSArIHRoaXMuX2xlZnRPY2N1cGllZCxcbiAgICB5MTogdGhpcy5feTEgKyB0aGlzLl90b3BPY2N1cGllZCxcbiAgICB4MjogdGhpcy5feDIgLSB0aGlzLl9yaWdodE9jY3VwaWVkLFxuICAgIHkyOiB0aGlzLl95MiAtIHRoaXMuX2JvdHRvbU9jY3VwaWVkLFxuICAgIHdpZHRoOiAodGhpcy5feDIgLSB0aGlzLl94MSkgLSB0aGlzLl9yaWdodE9jY3VwaWVkIC0gdGhpcy5fbGVmdE9jY3VwaWVkLFxuICAgIGhlaWdodDogKHRoaXMuX3kyIC0gdGhpcy5feTEpIC0gdGhpcy5fYm90dG9tT2NjdXBpZWQgLSB0aGlzLl90b3BPY2N1cGllZFxuICB9O1xufVxuXG5MYXlvdXRNYW5hZ2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgLy9zbyB0aGF0IHRoZXJlIGlzIGVub3VnaCBwYWRkaW5nLlxuICB0aGlzLl90b3BPY2N1cGllZCA9IHRoaXMuX3BhZGRpbmc7XG4gIHRoaXMuX2JvdHRvbU9jY3VwaWVkID0gdGhpcy5fcGFkZGluZztcbiAgdGhpcy5fbGVmdE9jY3VwaWVkID0gdGhpcy5fcGFkZGluZztcbiAgdGhpcy5fcmlnaHRPY2N1cGllZCA9IHRoaXMuX3BhZGRpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExheW91dE1hbmFnZXI7XG4iLCJcbmltcG9ydCBEYXRhU2VyaWVzIGZyb20gJy4vZGF0YV9zZXJpZXMnO1xuaW1wb3J0IENhbnZhc0pTT2JqZWN0IGZyb20gJy4vY2FudmFzanMnO1xuaW1wb3J0IFRleHRCbG9jayBmcm9tICcuL3RleHRfYmxvY2snO1xuaW1wb3J0IFJlbmRlckhlbHBlciBmcm9tICcuLi9oZWxwZXJzL3JlbmRlcic7XG5pbXBvcnQge2V4dGVuZCwgZ2V0Rm9udEhlaWdodEluUGl4ZWxzfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZnVuY3Rpb24gTGVnZW5kKGNoYXJ0LCBvcHRpb25zLCB0aGVtZSkge1xuICBMZWdlbmQuYmFzZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIFwiTGVnZW5kXCIsIG9wdGlvbnMsIHRoZW1lKTtcblxuICB0aGlzLmNoYXJ0ID0gY2hhcnQ7XG4gIHRoaXMuY2FudmFzID0gY2hhcnQuY2FudmFzO1xuICB0aGlzLmN0eCA9IHRoaXMuY2hhcnQuY3R4O1xuICB0aGlzLmdob3N0Q3R4ID0gdGhpcy5jaGFydC5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4O1xuICB0aGlzLml0ZW1zID0gW107XG5cbiAgdGhpcy53aWR0aCA9IDAsXG4gIC8vdGhpcy5mb250U2l6ZSA9IDEyLFxuICB0aGlzLmhlaWdodCA9IDAsXG4gIHRoaXMub3JpZW50YXRpb24gPSBudWxsLFxuICB0aGlzLmRhdGFTZXJpZXMgPSBbXTtcbiAgdGhpcy5ib3VuZHMgPSB7XG4gICAgeDE6IG51bGwsIHkxOiBudWxsLCB4MjogbnVsbCwgeTI6IG51bGxcbiAgfTtcblxuICBpZiAodHlwZW9mICh0aGlzLl9vcHRpb25zLmZvbnRTaXplKSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHRoaXMuZm9udFNpemUgPSB0aGlzLmNoYXJ0LmdldEF1dG9Gb250U2l6ZSh0aGlzLmZvbnRTaXplKTtcbiAgICAvL3dpbmRvdy5jb25zb2xlLmxvZyhcImZvbnRTaXplOiBcIiArIHRoaXMuZm9udFNpemUpO1xuICB9XG5cbiAgdGhpcy5saW5lSGVpZ2h0ID0gZ2V0Rm9udEhlaWdodEluUGl4ZWxzKHRoaXMuZm9udEZhbWlseSwgdGhpcy5mb250U2l6ZSwgdGhpcy5mb250V2VpZ2h0KTtcblxuICB0aGlzLmhvcml6b250YWxTcGFjaW5nID0gdGhpcy5mb250U2l6ZTtcbn1cblxuZXh0ZW5kKExlZ2VuZCwgQ2FudmFzSlNPYmplY3QpO1xuXG5MZWdlbmQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcblxuICB2YXIgY29udGFpbmVyID0gKCF0aGlzLmRvY2tJbnNpZGVQbG90QXJlYSA/IHRoaXMuY2hhcnQgOiB0aGlzLmNoYXJ0LnBsb3RBcmVhKTtcbiAgdmFyIGZyZWVTcGFjZSA9IGNvbnRhaW5lci5sYXlvdXRNYW5hZ2VyLmdldEZyZWVTcGFjZSgpO1xuICB2YXIgcG9zaXRpb24gPSBudWxsO1xuICB2YXIgdG9wID0gMDtcbiAgdmFyIGxlZnQgPSAwO1xuICB2YXIgbWF4V2lkdGggPSAwO1xuICB2YXIgbWF4SGVpZ2h0ID0gMDtcbiAgdmFyIGl0ZW1NYXJnaW4gPSA1O1xuXG4gIHZhciBpdGVtcyA9IFtdO1xuICB2YXIgcm93cyA9IFtdO1xuXG4gIC8vdGhpcy5jdHguZm9udCA9IGdldEZvbnRTdHJpbmcoXCJcIiwgdGhpcywgbnVsbCk7XG4gIC8vdGhpcy5jdHguZm9udENvbG9yID0gdGhpcy5mb250Q29sb3I7XG5cbiAgaWYgKHRoaXMudmVydGljYWxBbGlnbiA9PT0gXCJ0b3BcIiB8fCB0aGlzLnZlcnRpY2FsQWxpZ24gPT09IFwiYm90dG9tXCIpIHtcbiAgICB0aGlzLm9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XG4gICAgcG9zaXRpb24gPSB0aGlzLnZlcnRpY2FsQWxpZ247XG5cbiAgICBtYXhXaWR0aCA9IHRoaXMubWF4V2lkdGggIT09IG51bGwgPyB0aGlzLm1heFdpZHRoIDogZnJlZVNwYWNlLndpZHRoICogLjc7XG4gICAgbWF4SGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgIT09IG51bGwgPyB0aGlzLm1heEhlaWdodCA6IGZyZWVTcGFjZS5oZWlnaHQgKiAuNTtcbiAgfVxuICBlbHNlIGlmICh0aGlzLnZlcnRpY2FsQWxpZ24gPT09IFwiY2VudGVyXCIpIHtcbiAgICB0aGlzLm9yaWVudGF0aW9uID0gXCJ2ZXJ0aWNhbFwiO1xuICAgIHBvc2l0aW9uID0gdGhpcy5ob3Jpem9udGFsQWxpZ247XG5cbiAgICBtYXhXaWR0aCA9IHRoaXMubWF4V2lkdGggIT09IG51bGwgPyB0aGlzLm1heFdpZHRoIDogZnJlZVNwYWNlLndpZHRoICogLjU7XG4gICAgbWF4SGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgIT09IG51bGwgPyB0aGlzLm1heEhlaWdodCA6IGZyZWVTcGFjZS5oZWlnaHQgKiAuNztcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhU2VyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRhdGFTZXJpZXMgPSB0aGlzLmRhdGFTZXJpZXNbaV07XG5cblxuICAgIGlmIChkYXRhU2VyaWVzLnR5cGUgIT09IFwicGllXCIgJiYgZGF0YVNlcmllcy50eXBlICE9PSBcImRvdWdobnV0XCIgJiYgZGF0YVNlcmllcy50eXBlICE9PSBcImZ1bm5lbFwiKSB7XG5cbiAgICAgIHZhciBtYXJrZXJUeXBlID0gZGF0YVNlcmllcy5sZWdlbmRNYXJrZXJUeXBlID8gZGF0YVNlcmllcy5sZWdlbmRNYXJrZXJUeXBlIDogKGRhdGFTZXJpZXMudHlwZSA9PT0gXCJsaW5lXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0ZXBMaW5lXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInNwbGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzY2F0dGVyXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcImJ1YmJsZVwiKSAmJiBkYXRhU2VyaWVzLm1hcmtlclR5cGUgPyBkYXRhU2VyaWVzLm1hcmtlclR5cGUgOiBEYXRhU2VyaWVzLmdldERlZmF1bHRMZWdlbmRNYXJrZXIoZGF0YVNlcmllcy50eXBlKTtcbiAgICAgIHZhciBsZWdlbmRUZXh0ID0gZGF0YVNlcmllcy5sZWdlbmRUZXh0ID8gZGF0YVNlcmllcy5sZWdlbmRUZXh0IDogdGhpcy5pdGVtVGV4dEZvcm1hdHRlciA/IHRoaXMuaXRlbVRleHRGb3JtYXR0ZXIoeyBjaGFydDogdGhpcy5jaGFydCwgbGVnZW5kOiB0aGlzLl9vcHRpb25zLCBkYXRhU2VyaWVzOiBkYXRhU2VyaWVzLCBkYXRhUG9pbnQ6IG51bGwgfSlcbiAgICAgICAgOiBkYXRhU2VyaWVzLm5hbWU7XG4gICAgICB2YXIgbWFya2VyQ29sb3IgPSBkYXRhU2VyaWVzLmxlZ2VuZE1hcmtlckNvbG9yID8gZGF0YVNlcmllcy5sZWdlbmRNYXJrZXJDb2xvciA6IGRhdGFTZXJpZXMubWFya2VyQ29sb3IgPyBkYXRhU2VyaWVzLm1hcmtlckNvbG9yIDogZGF0YVNlcmllcy5fY29sb3JTZXRbMF07XG4gICAgICB2YXIgbWFya2VyU2l6ZSA9ICghZGF0YVNlcmllcy5tYXJrZXJTaXplICYmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwibGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGVwTGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzcGxpbmVcIikpID8gMCA6IHRoaXMubGluZUhlaWdodCAqIC42O1xuICAgICAgdmFyIG1hcmtlckJvcmRlckNvbG9yID0gZGF0YVNlcmllcy5sZWdlbmRNYXJrZXJCb3JkZXJDb2xvciA/IGRhdGFTZXJpZXMubGVnZW5kTWFya2VyQm9yZGVyQ29sb3IgOiBkYXRhU2VyaWVzLm1hcmtlckJvcmRlckNvbG9yO1xuICAgICAgdmFyIG1hcmtlckJvcmRlclRoaWNrbmVzcyA9IGRhdGFTZXJpZXMubGVnZW5kTWFya2VyQm9yZGVyVGhpY2tuZXNzID8gZGF0YVNlcmllcy5sZWdlbmRNYXJrZXJCb3JkZXJUaGlja25lc3MgOiBkYXRhU2VyaWVzLm1hcmtlckJvcmRlclRoaWNrbmVzcyA/IE1hdGgubWF4KDEsIE1hdGgucm91bmQobWFya2VyU2l6ZSAqIC4yKSkgOiAwO1xuICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGFTZXJpZXMuX2NvbG9yU2V0WzBdO1xuXG4gICAgICBsZWdlbmRUZXh0ID0gdGhpcy5jaGFydC5yZXBsYWNlS2V5d29yZHNXaXRoVmFsdWUobGVnZW5kVGV4dCwgZGF0YVNlcmllcy5kYXRhUG9pbnRzWzBdLCBkYXRhU2VyaWVzLCBpKTtcbiAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICBtYXJrZXJUeXBlOiBtYXJrZXJUeXBlLCBtYXJrZXJDb2xvcjogbWFya2VyQ29sb3IsIHRleHQ6IGxlZ2VuZFRleHQsIHRleHRCbG9jazogbnVsbCwgY2hhcnRUeXBlOiBkYXRhU2VyaWVzLnR5cGUsIG1hcmtlclNpemU6IG1hcmtlclNpemUsIGxpbmVDb2xvcjogZGF0YVNlcmllcy5fY29sb3JTZXRbMF0sXG4gICAgICAgIGRhdGFTZXJpZXNJbmRleDogZGF0YVNlcmllcy5pbmRleCwgZGF0YVBvaW50SW5kZXg6IG51bGwsIG1hcmtlckJvcmRlckNvbG9yOiBtYXJrZXJCb3JkZXJDb2xvciwgbWFya2VyQm9yZGVyVGhpY2tuZXNzOiBtYXJrZXJCb3JkZXJUaGlja25lc3NcbiAgICAgIH07XG5cbiAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGRhdGFQb2ludEluZGV4ID0gMDsgZGF0YVBvaW50SW5kZXggPCBkYXRhU2VyaWVzLmRhdGFQb2ludHMubGVuZ3RoOyBkYXRhUG9pbnRJbmRleCsrKSB7XG5cbiAgICAgICAgdmFyIGRhdGFQb2ludCA9IGRhdGFTZXJpZXMuZGF0YVBvaW50c1tkYXRhUG9pbnRJbmRleF07XG5cbiAgICAgICAgdmFyIG1hcmtlclR5cGUgPSBkYXRhUG9pbnQubGVnZW5kTWFya2VyVHlwZSA/IGRhdGFQb2ludC5sZWdlbmRNYXJrZXJUeXBlIDogZGF0YVNlcmllcy5sZWdlbmRNYXJrZXJUeXBlID8gZGF0YVNlcmllcy5sZWdlbmRNYXJrZXJUeXBlIDogRGF0YVNlcmllcy5nZXREZWZhdWx0TGVnZW5kTWFya2VyKGRhdGFTZXJpZXMudHlwZSk7XG4gICAgICAgIHZhciBsZWdlbmRUZXh0ID0gZGF0YVBvaW50LmxlZ2VuZFRleHQgPyBkYXRhUG9pbnQubGVnZW5kVGV4dCA6IGRhdGFTZXJpZXMubGVnZW5kVGV4dCA/IGRhdGFTZXJpZXMubGVnZW5kVGV4dCA6IHRoaXMuaXRlbVRleHRGb3JtYXR0ZXIgPyB0aGlzLml0ZW1UZXh0Rm9ybWF0dGVyKHsgY2hhcnQ6IHRoaXMuY2hhcnQsIGxlZ2VuZDogdGhpcy5fb3B0aW9ucywgZGF0YVNlcmllczogZGF0YVNlcmllcywgZGF0YVBvaW50OiBkYXRhUG9pbnQgfSlcbiAgICAgICAgICA6IGRhdGFQb2ludC5uYW1lID8gZGF0YVBvaW50Lm5hbWUgOiBcIkRhdGFQb2ludDogXCIgKyAoZGF0YVBvaW50SW5kZXggKyAxKTtcbiAgICAgICAgdmFyIG1hcmtlckNvbG9yID0gZGF0YVBvaW50LmxlZ2VuZE1hcmtlckNvbG9yID8gZGF0YVBvaW50LmxlZ2VuZE1hcmtlckNvbG9yIDogZGF0YVNlcmllcy5sZWdlbmRNYXJrZXJDb2xvciA/IGRhdGFTZXJpZXMubGVnZW5kTWFya2VyQ29sb3IgOiBkYXRhUG9pbnQuY29sb3IgPyBkYXRhUG9pbnQuY29sb3IgOiBkYXRhU2VyaWVzLmNvbG9yID8gZGF0YVNlcmllcy5jb2xvciA6IGRhdGFTZXJpZXMuX2NvbG9yU2V0W2RhdGFQb2ludEluZGV4ICUgZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcbiAgICAgICAgdmFyIG1hcmtlclNpemUgPSB0aGlzLmxpbmVIZWlnaHQgKiAuNjtcbiAgICAgICAgdmFyIG1hcmtlckJvcmRlckNvbG9yID0gZGF0YVBvaW50LmxlZ2VuZE1hcmtlckJvcmRlckNvbG9yID8gZGF0YVBvaW50LmxlZ2VuZE1hcmtlckJvcmRlckNvbG9yIDogZGF0YVNlcmllcy5sZWdlbmRNYXJrZXJCb3JkZXJDb2xvciA/IGRhdGFTZXJpZXMubGVnZW5kTWFya2VyQm9yZGVyQ29sb3IgOiBkYXRhUG9pbnQubWFya2VyQm9yZGVyQ29sb3IgPyBkYXRhUG9pbnQubWFya2VyQm9yZGVyQ29sb3IgOiBkYXRhU2VyaWVzLm1hcmtlckJvcmRlckNvbG9yO1xuICAgICAgICB2YXIgbWFya2VyQm9yZGVyVGhpY2tuZXNzID0gZGF0YVBvaW50LmxlZ2VuZE1hcmtlckJvcmRlclRoaWNrbmVzcyA/IGRhdGFQb2ludC5sZWdlbmRNYXJrZXJCb3JkZXJUaGlja25lc3MgOiBkYXRhU2VyaWVzLmxlZ2VuZE1hcmtlckJvcmRlclRoaWNrbmVzcyA/IGRhdGFTZXJpZXMubGVnZW5kTWFya2VyQm9yZGVyVGhpY2tuZXNzIDogZGF0YVBvaW50Lm1hcmtlckJvcmRlclRoaWNrbmVzcyB8fCBkYXRhU2VyaWVzLm1hcmtlckJvcmRlclRoaWNrbmVzcyA/IE1hdGgubWF4KDEsIE1hdGgucm91bmQobWFya2VyU2l6ZSAqIC4yKSkgOiAwO1xuXG4gICAgICAgIGxlZ2VuZFRleHQgPSB0aGlzLmNoYXJ0LnJlcGxhY2VLZXl3b3Jkc1dpdGhWYWx1ZShsZWdlbmRUZXh0LCBkYXRhUG9pbnQsIGRhdGFTZXJpZXMsIGRhdGFQb2ludEluZGV4KTtcblxuICAgICAgICB2YXIgaXRlbSA9IHtcbiAgICAgICAgICBtYXJrZXJUeXBlOiBtYXJrZXJUeXBlLCBtYXJrZXJDb2xvcjogbWFya2VyQ29sb3IsIHRleHQ6IGxlZ2VuZFRleHQsIHRleHRCbG9jazogbnVsbCwgY2hhcnRUeXBlOiBkYXRhU2VyaWVzLnR5cGUsIG1hcmtlclNpemU6IG1hcmtlclNpemUsXG4gICAgICAgICAgZGF0YVNlcmllc0luZGV4OiBpLCBkYXRhUG9pbnRJbmRleDogZGF0YVBvaW50SW5kZXgsIG1hcmtlckJvcmRlckNvbG9yOiBtYXJrZXJCb3JkZXJDb2xvciwgbWFya2VyQm9yZGVyVGhpY2tuZXNzOiBtYXJrZXJCb3JkZXJUaGlja25lc3NcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZGF0YVBvaW50LnNob3dJbkxlZ2VuZCB8fCAoZGF0YVNlcmllcy5zaG93SW5MZWdlbmQgJiYgZGF0YVBvaW50LnNob3dJbkxlZ2VuZCAhPT0gZmFsc2UpKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpdGVtID0gbnVsbDtcbiAgfVxuICBpZiAodGhpcy5yZXZlcnNlZCA9PT0gdHJ1ZSkge1xuICAgIGl0ZW1zLnJldmVyc2UoKTtcbiAgfVxuXG4gIC8vIEZpbmQgb3V0IHRoZSByZXF1aXJlZCB3aWR0aCBhbmQgaGVpZ2h0IG9mIExlZ2VuZCBhbmQgcG9zaXRpb24gdGhlIGl0ZW1zIHJlbGF0aXZlIHRvIHRoZSBjb250YWluZXJcbiAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgcm93ID0gbnVsbDtcbiAgICB2YXIgcm93SW5kZXggPSAwOyAvLyByZXF1aXJlZCBmb3IgdmVydGljYWwgb3JpZW50YXRpb25cbiAgICB2YXIgdGV4dE1heFdpZHRoID0gMDtcbiAgICB2YXIgY29sdW1uSGVpZ2h0ID0gMDtcblxuICAgIGlmICh0aGlzLml0ZW1XaWR0aCAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuaXRlbU1heFdpZHRoICE9PSBudWxsKSB7XG4gICAgICAgIHRleHRNYXhXaWR0aCA9IE1hdGgubWluKHRoaXMuaXRlbVdpZHRoLCB0aGlzLml0ZW1NYXhXaWR0aCwgbWF4V2lkdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dE1heFdpZHRoID0gTWF0aC5taW4odGhpcy5pdGVtV2lkdGgsIG1heFdpZHRoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXRlbU1heFdpZHRoICE9PSBudWxsKSB7XG4gICAgICAgIHRleHRNYXhXaWR0aCA9IE1hdGgubWluKHRoaXMuaXRlbU1heFdpZHRoLCBtYXhXaWR0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0TWF4V2lkdGggPSBtYXhXaWR0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrZXJTaXplID0gKG1hcmtlclNpemUgPT09IDAgPyB0aGlzLmxpbmVIZWlnaHQgKiAuNiA6IG1hcmtlclNpemUpO1xuICAgIHRleHRNYXhXaWR0aCA9IHRleHRNYXhXaWR0aCAtIChtYXJrZXJTaXplICsgdGhpcy5ob3Jpem9udGFsU3BhY2luZyAqIC4xKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XG5cbiAgICAgIGlmIChpdGVtLmNoYXJ0VHlwZSA9PT0gXCJsaW5lXCIgfHwgaXRlbS5jaGFydFR5cGUgPT09IFwic3BsaW5lXCIgfHwgaXRlbS5jaGFydFR5cGUgPT09IFwic3RlcExpbmVcIikge1xuICAgICAgICB0ZXh0TWF4V2lkdGggPSB0ZXh0TWF4V2lkdGggLSAyICogKHRoaXMubGluZUhlaWdodCAqIC4xKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1heEhlaWdodCA8PSAwIHx8IHR5cGVvZiAobWF4SGVpZ2h0KSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0ZXh0TWF4V2lkdGggPD0gMCB8fCB0eXBlb2YgKHRleHRNYXhXaWR0aCkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuXG4gICAgICAgIGl0ZW0udGV4dEJsb2NrID0gbmV3IFRleHRCbG9jayh0aGlzLmN0eCwge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCwvL1RCSVxuICAgICAgICAgIG1heFdpZHRoOiB0ZXh0TWF4V2lkdGgsXG4gICAgICAgICAgbWF4SGVpZ2h0OiB0aGlzLml0ZW1XcmFwID8gbWF4SGVpZ2h0IDogdGhpcy5saW5lSGVpZ2h0LCAvL1RCSTogRm9udFNpemVcbiAgICAgICAgICBhbmdsZTogMCxcbiAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICAgICAgaG9yaXpvbnRhbEFsaWduOiBcImxlZnRcIiwvL2xlZnQsIGNlbnRlciwgcmlnaHRcbiAgICAgICAgICBmb250U2l6ZTogdGhpcy5mb250U2l6ZSwvL2luIHBpeGVsc1xuICAgICAgICAgIGZvbnRGYW1pbHk6IHRoaXMuZm9udEZhbWlseSxcbiAgICAgICAgICBmb250V2VpZ2h0OiB0aGlzLmZvbnRXZWlnaHQsIC8vbm9ybWFsLCBib2xkLCBib2xkZXIsIGxpZ2h0ZXIsXG4gICAgICAgICAgZm9udENvbG9yOiB0aGlzLmZvbnRDb2xvcixcbiAgICAgICAgICBmb250U3R5bGU6IHRoaXMuZm9udFN0eWxlLCAvLyBub3JtYWwsIGl0YWxpYywgb2JsaXF1ZVxuICAgICAgICAgIHRleHRCYXNlbGluZTogXCJ0b3BcIlxuICAgICAgICB9KTtcbiAgICAgICAgaXRlbS50ZXh0QmxvY2subWVhc3VyZVRleHQoKTtcblxuICAgICAgICBpZiAodGhpcy5pdGVtV2lkdGggIT09IG51bGwpIHtcbiAgICAgICAgICBpdGVtLnRleHRCbG9jay53aWR0aCA9IHRoaXMuaXRlbVdpZHRoIC0gKG1hcmtlclNpemUgKyB0aGlzLmhvcml6b250YWxTcGFjaW5nICogLjEgKyAoKGl0ZW0uY2hhcnRUeXBlID09PSBcImxpbmVcIiB8fCBpdGVtLmNoYXJ0VHlwZSA9PT0gXCJzcGxpbmVcIiB8fCBpdGVtLmNoYXJ0VHlwZSA9PT0gXCJzdGVwTGluZVwiKSA/IDIgKiAodGhpcy5saW5lSGVpZ2h0ICogLjEpIDogMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyb3cgfHwgcm93LndpZHRoICsgTWF0aC5yb3VuZChpdGVtLnRleHRCbG9jay53aWR0aCArIHRoaXMuaG9yaXpvbnRhbFNwYWNpbmcgKiAuMSArIG1hcmtlclNpemUgKyAocm93LndpZHRoID09PSAwID8gMCA6ICh0aGlzLmhvcml6b250YWxTcGFjaW5nKSkgKyAoKGl0ZW0uY2hhcnRUeXBlID09PSBcImxpbmVcIiB8fCBpdGVtLmNoYXJ0VHlwZSA9PT0gXCJzcGxpbmVcIiB8fCBpdGVtLmNoYXJ0VHlwZSA9PT0gXCJzdGVwTGluZVwiKSA/IDIgKiAodGhpcy5saW5lSGVpZ2h0ICogLjEpIDogMCkpID4gbWF4V2lkdGgpIHtcbiAgICAgICAgICByb3cgPSB7XG4gICAgICAgICAgICBpdGVtczogW10sIHdpZHRoOiAwXG4gICAgICAgICAgfTtcbiAgICAgICAgICByb3dzLnB1c2gocm93KTtcbiAgICAgICAgICB0aGlzLmhlaWdodCArPSBjb2x1bW5IZWlnaHQ7XG4gICAgICAgICAgY29sdW1uSGVpZ2h0ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbHVtbkhlaWdodCA9IE1hdGgubWF4KGNvbHVtbkhlaWdodCwgaXRlbS50ZXh0QmxvY2suaGVpZ2h0KTtcblxuICAgICAgICBpdGVtLnRleHRCbG9jay54ID0gcm93LndpZHRoO1xuICAgICAgICBpdGVtLnRleHRCbG9jay55ID0gMDtcblxuICAgICAgICByb3cud2lkdGggKz0gTWF0aC5yb3VuZChpdGVtLnRleHRCbG9jay53aWR0aCArIHRoaXMuaG9yaXpvbnRhbFNwYWNpbmcgKiAuMSArIG1hcmtlclNpemUgKyAocm93LndpZHRoID09PSAwID8gMCA6IHRoaXMuaG9yaXpvbnRhbFNwYWNpbmcpICsgKChpdGVtLmNoYXJ0VHlwZSA9PT0gXCJsaW5lXCIgfHwgaXRlbS5jaGFydFR5cGUgPT09IFwic3BsaW5lXCIgfHwgaXRlbS5jaGFydFR5cGUgPT09IFwic3RlcExpbmVcIikgPyAyICogKHRoaXMubGluZUhlaWdodCAqIC4xKSA6IDApKTtcbiAgICAgICAgcm93Lml0ZW1zLnB1c2goaXRlbSk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IE1hdGgubWF4KHJvdy53aWR0aCwgdGhpcy53aWR0aCk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGl0ZW0udGV4dEJsb2NrID0gbmV3IFRleHRCbG9jayh0aGlzLmN0eCwge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCwvL1RCSVxuICAgICAgICAgIG1heFdpZHRoOiB0ZXh0TWF4V2lkdGgsXG4gICAgICAgICAgbWF4SGVpZ2h0OiB0aGlzLml0ZW1XcmFwID09PSB0cnVlID8gbWF4SGVpZ2h0IDogdGhpcy5mb250U2l6ZSAqIDEuNSwgLy9UQkk6IEZvbnRTaXplXG4gICAgICAgICAgYW5nbGU6IDAsXG4gICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgIGhvcml6b250YWxBbGlnbjogXCJsZWZ0XCIsLy9sZWZ0LCBjZW50ZXIsIHJpZ2h0XG4gICAgICAgICAgZm9udFNpemU6IHRoaXMuZm9udFNpemUsLy9pbiBwaXhlbHNcbiAgICAgICAgICBmb250RmFtaWx5OiB0aGlzLmZvbnRGYW1pbHksXG4gICAgICAgICAgZm9udFdlaWdodDogdGhpcy5mb250V2VpZ2h0LCAvL25vcm1hbCwgYm9sZCwgYm9sZGVyLCBsaWdodGVyLFxuICAgICAgICAgIGZvbnRDb2xvcjogdGhpcy5mb250Q29sb3IsXG4gICAgICAgICAgZm9udFN0eWxlOiB0aGlzLmZvbnRTdHlsZSwgLy8gbm9ybWFsLCBpdGFsaWMsIG9ibGlxdWVcbiAgICAgICAgICB0ZXh0QmFzZWxpbmU6IFwidG9wXCJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXRlbS50ZXh0QmxvY2subWVhc3VyZVRleHQoKTtcblxuICAgICAgICBpZiAodGhpcy5pdGVtV2lkdGggIT09IG51bGwpIHtcbiAgICAgICAgICBpdGVtLnRleHRCbG9jay53aWR0aCA9IHRoaXMuaXRlbVdpZHRoIC0gKG1hcmtlclNpemUgKyB0aGlzLmhvcml6b250YWxTcGFjaW5nICogLjEgKyAoKGl0ZW0uY2hhcnRUeXBlID09PSBcImxpbmVcIiB8fCBpdGVtLmNoYXJ0VHlwZSA9PT0gXCJzcGxpbmVcIiB8fCBpdGVtLmNoYXJ0VHlwZSA9PT0gXCJzdGVwTGluZVwiKSA/IDIgKiAodGhpcy5saW5lSGVpZ2h0ICogLjEpIDogMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaGVpZ2h0IDw9IG1heEhlaWdodCkge1xuICAgICAgICAgIHJvdyA9IHtcbiAgICAgICAgICAgIGl0ZW1zOiBbXSwgd2lkdGg6IDBcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvdyA9IHJvd3Nbcm93SW5kZXhdO1xuICAgICAgICAgIHJvd0luZGV4ID0gKHJvd0luZGV4ICsgMSkgJSByb3dzLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGVpZ2h0ICs9IGl0ZW0udGV4dEJsb2NrLmhlaWdodDtcblxuICAgICAgICBpdGVtLnRleHRCbG9jay54ID0gcm93LndpZHRoOyAvLyByZWxhdGl2ZSB0byB0aGUgcm93XG4gICAgICAgIGl0ZW0udGV4dEJsb2NrLnkgPSAwOyAvLyByZWxhdGl2ZSB0byB0aGUgcm93XG5cbiAgICAgICAgcm93LndpZHRoICs9IE1hdGgucm91bmQoaXRlbS50ZXh0QmxvY2sud2lkdGggKyB0aGlzLmhvcml6b250YWxTcGFjaW5nICogLjEgKyBtYXJrZXJTaXplICsgKHJvdy53aWR0aCA9PT0gMCA/IDAgOiB0aGlzLmhvcml6b250YWxTcGFjaW5nKSArICgoaXRlbS5jaGFydFR5cGUgPT09IFwibGluZVwiIHx8IGl0ZW0uY2hhcnRUeXBlID09PSBcInNwbGluZVwiIHx8IGl0ZW0uY2hhcnRUeXBlID09PSBcInN0ZXBMaW5lXCIpID8gMiAqICh0aGlzLmxpbmVIZWlnaHQgKiAuMSkgOiAwKSk7XG4gICAgICAgIHJvdy5pdGVtcy5wdXNoKGl0ZW0pO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSBNYXRoLm1heChyb3cud2lkdGgsIHRoaXMud2lkdGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLml0ZW1XcmFwID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5oZWlnaHQgPSByb3dzLmxlbmd0aCAqICh0aGlzLmxpbmVIZWlnaHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlaWdodCArPSBjb2x1bW5IZWlnaHQ7XG4gICAgfVxuXG4gICAgdGhpcy5oZWlnaHQgPSBNYXRoLm1pbihtYXhIZWlnaHQsIHRoaXMuaGVpZ2h0KTtcbiAgICB0aGlzLndpZHRoID0gTWF0aC5taW4obWF4V2lkdGgsIHRoaXMud2lkdGgpO1xuICB9XG5cbiAgaWYgKHRoaXMudmVydGljYWxBbGlnbiA9PT0gXCJ0b3BcIikge1xuICAgIGlmICh0aGlzLmhvcml6b250YWxBbGlnbiA9PT0gXCJsZWZ0XCIpXG4gICAgICBsZWZ0ID0gZnJlZVNwYWNlLngxO1xuICAgIGVsc2UgaWYgKHRoaXMuaG9yaXpvbnRhbEFsaWduID09PSBcInJpZ2h0XCIpXG4gICAgICBsZWZ0ID0gZnJlZVNwYWNlLngyIC0gdGhpcy53aWR0aDtcbiAgICBlbHNlXG4gICAgICBsZWZ0ID0gZnJlZVNwYWNlLngxICsgZnJlZVNwYWNlLndpZHRoIC8gMiAtIHRoaXMud2lkdGggLyAyO1xuXG4gICAgdG9wID0gZnJlZVNwYWNlLnkxO1xuICB9IGVsc2UgaWYgKHRoaXMudmVydGljYWxBbGlnbiA9PT0gXCJjZW50ZXJcIikge1xuICAgIGlmICh0aGlzLmhvcml6b250YWxBbGlnbiA9PT0gXCJsZWZ0XCIpXG4gICAgICBsZWZ0ID0gZnJlZVNwYWNlLngxO1xuICAgIGVsc2UgaWYgKHRoaXMuaG9yaXpvbnRhbEFsaWduID09PSBcInJpZ2h0XCIpXG4gICAgICBsZWZ0ID0gZnJlZVNwYWNlLngyIC0gdGhpcy53aWR0aDtcbiAgICBlbHNlXG4gICAgICBsZWZ0ID0gZnJlZVNwYWNlLngxICsgZnJlZVNwYWNlLndpZHRoIC8gMiAtIHRoaXMud2lkdGggLyAyO1xuXG4gICAgdG9wID0gZnJlZVNwYWNlLnkxICsgZnJlZVNwYWNlLmhlaWdodCAvIDIgLSB0aGlzLmhlaWdodCAvIDI7XG4gIH0gZWxzZSBpZiAodGhpcy52ZXJ0aWNhbEFsaWduID09PSBcImJvdHRvbVwiKSB7XG4gICAgaWYgKHRoaXMuaG9yaXpvbnRhbEFsaWduID09PSBcImxlZnRcIilcbiAgICAgIGxlZnQgPSBmcmVlU3BhY2UueDE7XG4gICAgZWxzZSBpZiAodGhpcy5ob3Jpem9udGFsQWxpZ24gPT09IFwicmlnaHRcIilcbiAgICAgIGxlZnQgPSBmcmVlU3BhY2UueDIgLSB0aGlzLndpZHRoO1xuICAgIGVsc2VcbiAgICAgIGxlZnQgPSBmcmVlU3BhY2UueDEgKyBmcmVlU3BhY2Uud2lkdGggLyAyIC0gdGhpcy53aWR0aCAvIDI7XG5cbiAgICB0b3AgPSBmcmVlU3BhY2UueTIgLSB0aGlzLmhlaWdodDtcbiAgfVxuXG4gIHRoaXMuaXRlbXMgPSBpdGVtcztcblxuICAvL0Fzc2lnbiBpZHMgdG8gYWxsIGxlZ2VuZEl0ZW1zXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuXG4gICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcblxuICAgIGl0ZW0uaWQgPSArK3RoaXMuY2hhcnQuX2V2ZW50TWFuYWdlci5sYXN0T2JqZWN0SWQ7XG4gICAgdGhpcy5jaGFydC5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpdGVtLmlkXSA9IHtcbiAgICAgIGlkOiBpdGVtLmlkLCBvYmplY3RUeXBlOiBcImxlZ2VuZEl0ZW1cIiwgbGVnZW5kSXRlbUluZGV4OiBpLCBkYXRhU2VyaWVzSW5kZXg6IGl0ZW0uZGF0YVNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleDogaXRlbS5kYXRhUG9pbnRJbmRleFxuICAgIH07XG4gICAgLy9kZWxldGUgaXRlbS50ZXh0QmxvY2s7Ly8gTm90IFJlcXVpcmVkIGFueW1vcmVcbiAgfVxuXG4gIHZhciByb3dIZWlnaHQgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcm93ID0gcm93c1tpXTtcbiAgICB2YXIgY29sdW1uSGVpZ2h0ID0gMDtcbiAgICBmb3IgKHZhciBpdGVtSW5kZXggPSAwOyBpdGVtSW5kZXggPCByb3cuaXRlbXMubGVuZ3RoOyBpdGVtSW5kZXgrKykge1xuICAgICAgdmFyIGl0ZW0gPSByb3cuaXRlbXNbaXRlbUluZGV4XTtcblxuICAgICAgdmFyIGl0ZW1YID0gaXRlbS50ZXh0QmxvY2sueCArIGxlZnQgKyAoaXRlbUluZGV4ID09PSAwID8gbWFya2VyU2l6ZSAqIC4yIDogdGhpcy5ob3Jpem9udGFsU3BhY2luZyk7XG4gICAgICB2YXIgaXRlbVkgPSB0b3AgKyByb3dIZWlnaHQ7XG5cbiAgICAgIHZhciBnaG9zdFggPSBpdGVtWDtcblxuICAgICAgaWYgKCF0aGlzLmNoYXJ0LmRhdGFbaXRlbS5kYXRhU2VyaWVzSW5kZXhdLnZpc2libGUpXG4gICAgICAgIHRoaXMuY3R4Lmdsb2JhbEFscGhhID0gLjU7XG5cbiAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgIHRoaXMuY3R4LnJlY3QobGVmdCwgdG9wLCBtYXhXaWR0aCwgbWF4SGVpZ2h0KTtcbiAgICAgIHRoaXMuY3R4LmNsaXAoKTtcblxuICAgICAgaWYgKGl0ZW0uY2hhcnRUeXBlID09PSBcImxpbmVcIiB8fCBpdGVtLmNoYXJ0VHlwZSA9PT0gXCJzdGVwTGluZVwiIHx8IGl0ZW0uY2hhcnRUeXBlID09PSBcInNwbGluZVwiKSB7XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gaXRlbS5saW5lQ29sb3I7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IE1hdGguY2VpbCh0aGlzLmxpbmVIZWlnaHQgLyA4KTtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4Lm1vdmVUbyhpdGVtWCAtIHRoaXMubGluZUhlaWdodCAqIC4xLCBpdGVtWSArIHRoaXMubGluZUhlaWdodCAvIDIpO1xuICAgICAgICB0aGlzLmN0eC5saW5lVG8oaXRlbVggKyB0aGlzLmxpbmVIZWlnaHQgKiAuNywgaXRlbVkgKyB0aGlzLmxpbmVIZWlnaHQgLyAyKTtcbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG5cbiAgICAgICAgZ2hvc3RYIC09IHRoaXMubGluZUhlaWdodCAqIC4xO1xuICAgICAgfVxuXG4gICAgICBSZW5kZXJIZWxwZXIuZHJhd01hcmtlcihpdGVtWCArIG1hcmtlclNpemUgLyAyLCBpdGVtWSArICh0aGlzLmxpbmVIZWlnaHQgLyAyKSwgdGhpcy5jdHgsIGl0ZW0ubWFya2VyVHlwZSwgaXRlbS5tYXJrZXJTaXplLCBpdGVtLm1hcmtlckNvbG9yLCBpdGVtLm1hcmtlckJvcmRlckNvbG9yLCBpdGVtLm1hcmtlckJvcmRlclRoaWNrbmVzcyk7XG5cbiAgICAgIGl0ZW0udGV4dEJsb2NrLnggPSBpdGVtWCArIHRoaXMuaG9yaXpvbnRhbFNwYWNpbmcgKiAuMSArIG1hcmtlclNpemU7XG5cbiAgICAgIGlmIChpdGVtLmNoYXJ0VHlwZSA9PT0gXCJsaW5lXCIgfHwgaXRlbS5jaGFydFR5cGUgPT09IFwic3RlcExpbmVcIiB8fCBpdGVtLmNoYXJ0VHlwZSA9PT0gXCJzcGxpbmVcIikge1xuICAgICAgICBpdGVtLnRleHRCbG9jay54ID0gaXRlbS50ZXh0QmxvY2sueCArIHRoaXMubGluZUhlaWdodCAqIC4xO1xuICAgICAgfVxuXG4gICAgICBpdGVtLnRleHRCbG9jay55ID0gaXRlbVk7XG5cbiAgICAgIGl0ZW0udGV4dEJsb2NrLnJlbmRlcih0cnVlKTtcblxuICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuXG4gICAgICBpZiAoaXRlbUluZGV4ID4gMCkge1xuICAgICAgICBjb2x1bW5IZWlnaHQgPSBNYXRoLm1heChjb2x1bW5IZWlnaHQsIGl0ZW0udGV4dEJsb2NrLmhlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2x1bW5IZWlnaHQgPSBpdGVtLnRleHRCbG9jay5oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5jaGFydC5kYXRhW2l0ZW0uZGF0YVNlcmllc0luZGV4XS52aXNpYmxlKVxuICAgICAgICB0aGlzLmN0eC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICAgIHZhciBoZXhDb2xvciA9IGludFRvSGV4Q29sb3JTdHJpbmcoaXRlbS5pZCk7XG4gICAgICB0aGlzLmdob3N0Q3R4LmZpbGxTdHlsZSA9IGhleENvbG9yO1xuICAgICAgdGhpcy5naG9zdEN0eC5iZWdpblBhdGgoKTtcbiAgICAgIHRoaXMuZ2hvc3RDdHguZmlsbFJlY3QoZ2hvc3RYLCBpdGVtLnRleHRCbG9jay55LCBpdGVtLnRleHRCbG9jay54ICsgaXRlbS50ZXh0QmxvY2sud2lkdGggLSBnaG9zdFgsIGl0ZW0udGV4dEJsb2NrLmhlaWdodCk7XG5cbiAgICAgIGl0ZW0ueDEgPSB0aGlzLmNoYXJ0Ll9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2l0ZW0uaWRdLngxID0gZ2hvc3RYO1xuICAgICAgaXRlbS55MSA9IHRoaXMuY2hhcnQuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaXRlbS5pZF0ueTEgPSBpdGVtLnRleHRCbG9jay55O1xuICAgICAgaXRlbS54MiA9IHRoaXMuY2hhcnQuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaXRlbS5pZF0ueDIgPSBpdGVtLnRleHRCbG9jay54ICsgaXRlbS50ZXh0QmxvY2sud2lkdGg7XG4gICAgICBpdGVtLnkyID0gdGhpcy5jaGFydC5fZXZlbnRNYW5hZ2VyLm9iamVjdE1hcFtpdGVtLmlkXS55MiA9IGl0ZW0udGV4dEJsb2NrLnkgKyBpdGVtLnRleHRCbG9jay5oZWlnaHQ7XG4gICAgfVxuICAgIHJvd0hlaWdodCA9IHJvd0hlaWdodCArIGNvbHVtbkhlaWdodDtcbiAgfVxuXG4gIC8vdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gIC8vdGhpcy5jdHgubGluZVdpZHRoID0gMjtcbiAgLy90aGlzLmN0eC5zdHJva2VTdHlsZSA9IFwicmVkXCI7XG4gIC8vdGhpcy5jdHgucmVjdChsZWZ0LCB0b3AsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgLy90aGlzLmN0eC5zdHJva2UoKTtcblxuICBjb250YWluZXIubGF5b3V0TWFuYWdlci5yZWdpc3RlclNwYWNlKHBvc2l0aW9uLCB7IHdpZHRoOiB0aGlzLndpZHRoICsgMiArIDIsIGhlaWdodDogdGhpcy5oZWlnaHQgKyA1ICsgNSB9KTtcblxuICB0aGlzLmJvdW5kcyA9IHtcbiAgICB4MTogbGVmdCwgeTE6IHRvcCwgeDI6IGxlZnQgKyB0aGlzLndpZHRoLCB5MjogdG9wICsgdGhpcy5oZWlnaHRcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGVnZW5kO1xuIiwiXG5pbXBvcnQgQ2FudmFzSlNPYmplY3QgZnJvbSAnLi9jYW52YXNqcyc7XG5pbXBvcnQge2V4dGVuZCwgZ2V0Rm9udEhlaWdodEluUGl4ZWxzLCB0cmltU3RyaW5nLCBnZXRGb250U3RyaW5nfSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZnVuY3Rpb24gVGV4dEJsb2NrKGN0eCwgb3B0aW9ucykge1xuXG4gIFRleHRCbG9jay5iYXNlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgXCJUZXh0QmxvY2tcIiwgb3B0aW9ucyk7XG5cbiAgdGhpcy5jdHggPSBjdHg7XG4gIHRoaXMuX2lzRGlydHkgPSB0cnVlO1xuICB0aGlzLl93cmFwcGVkVGV4dCA9IG51bGw7XG4gIHRoaXMuX2xpbmVIZWlnaHQgPSBnZXRGb250SGVpZ2h0SW5QaXhlbHModGhpcy5mb250RmFtaWx5LCB0aGlzLmZvbnRTaXplLCB0aGlzLmZvbnRXZWlnaHQpO1xufVxuXG5leHRlbmQoVGV4dEJsb2NrLCBDYW52YXNKU09iamVjdCk7XG5cblRleHRCbG9jay5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHByZXNlcnZlQ29udGV4dCkge1xuICBpZiAocHJlc2VydmVDb250ZXh0KVxuICAgIHRoaXMuY3R4LnNhdmUoKTtcblxuICB2YXIgZm9udCA9IHRoaXMuY3R4LmZvbnQ7XG4gIHRoaXMuY3R4LnRleHRCYXNlbGluZSA9IHRoaXMudGV4dEJhc2VsaW5lO1xuXG4gIHZhciBvZmZzZXRZID0gMDtcblxuICBpZiAodGhpcy5faXNEaXJ0eSlcbiAgICB0aGlzLm1lYXN1cmVUZXh0KHRoaXMuY3R4KTtcblxuICB0aGlzLmN0eC50cmFuc2xhdGUodGhpcy54LCB0aGlzLnkgKyBvZmZzZXRZKTtcblxuICBpZiAodGhpcy50ZXh0QmFzZWxpbmUgPT09IFwibWlkZGxlXCIpIHtcbiAgICBvZmZzZXRZID0gLXRoaXMuX2xpbmVIZWlnaHQgLyAyO1xuICB9XG5cbiAgdGhpcy5jdHguZm9udCA9IHRoaXMuX2dldEZvbnRTdHJpbmcoKTtcblxuICB0aGlzLmN0eC5yb3RhdGUoTWF0aC5QSSAvIDE4MCAqIHRoaXMuYW5nbGUpO1xuXG4gIHZhciB0ZXh0TGVmdCA9IDA7XG4gIHZhciB0ZXh0VG9wID0gdGhpcy5wYWRkaW5nO1xuICAvL3ZhciB0ZXh0VG9wID0gdGhpcy5wYWRkaW5nO1xuICB2YXIgbGluZSA9IG51bGw7XG5cbiAgaWYgKCh0aGlzLmJvcmRlclRoaWNrbmVzcyA+IDAgJiYgdGhpcy5ib3JkZXJDb2xvcikgfHwgdGhpcy5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICB0aGlzLmN0eC5yb3VuZFJlY3QoMCwgb2Zmc2V0WSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRoaXMuY29ybmVyUmFkaXVzLCB0aGlzLmJvcmRlclRoaWNrbmVzcywgdGhpcy5iYWNrZ3JvdW5kQ29sb3IsIHRoaXMuYm9yZGVyQ29sb3IpO1xuXG4gICAgLy9pZiAodGhpcy50ZXh0QmFzZWxpbmUgPT09IFwibWlkZGxlXCIpIHtcbiAgICAvL1x0Ly90ZXh0VG9wICs9IHRoaXMuZm9udFNpemUgLyAyO1xuICAgIC8vXHR0ZXh0VG9wICs9IHRoaXMuX2xpbmVIZWlnaHQgLyAyO1xuICAgIC8vfVxuICB9XG5cbiAgdGhpcy5jdHguZmlsbFN0eWxlID0gdGhpcy5mb250Q29sb3I7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl93cmFwcGVkVGV4dC5saW5lcy5sZW5ndGg7IGkrKykge1xuXG4gICAgbGluZSA9IHRoaXMuX3dyYXBwZWRUZXh0LmxpbmVzW2ldO1xuICAgIGlmICh0aGlzLmhvcml6b250YWxBbGlnbiA9PT0gXCJyaWdodFwiKVxuICAgICAgdGV4dExlZnQgPSB0aGlzLndpZHRoIC0gbGluZS53aWR0aCAtIHRoaXMucGFkZGluZztcbiAgICBlbHNlIGlmICh0aGlzLmhvcml6b250YWxBbGlnbiA9PT0gXCJsZWZ0XCIpXG4gICAgICB0ZXh0TGVmdCA9IHRoaXMucGFkZGluZztcbiAgICBlbHNlIGlmICh0aGlzLmhvcml6b250YWxBbGlnbiA9PT0gXCJjZW50ZXJcIilcbiAgICAgIHRleHRMZWZ0ID0gKHRoaXMud2lkdGggLSB0aGlzLnBhZGRpbmcgKiAyKSAvIDIgLSBsaW5lLndpZHRoIC8gMiArIHRoaXMucGFkZGluZztcblxuICAgIHRoaXMuY3R4LmZpbGxUZXh0KGxpbmUudGV4dCwgdGV4dExlZnQsIHRleHRUb3ApO1xuXG4gICAgdGV4dFRvcCArPSBsaW5lLmhlaWdodDtcbiAgfVxuXG4gIHRoaXMuY3R4LmZvbnQgPSBmb250O1xuXG4gIGlmIChwcmVzZXJ2ZUNvbnRleHQpXG4gICAgdGhpcy5jdHgucmVzdG9yZSgpO1xufVxuXG5UZXh0QmxvY2sucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbiAodGV4dCkge1xuICB0aGlzLnRleHQgPSB0ZXh0O1xuICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTtcbiAgdGhpcy5fd3JhcHBlZFRleHQgPSBudWxsO1xufVxuXG5UZXh0QmxvY2sucHJvdG90eXBlLm1lYXN1cmVUZXh0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5tYXhXaWR0aCA9PT0gbnVsbCkge1xuICAgIHRocm93IChcIlBsZWFzZSBzZXQgbWF4V2lkdGggYW5kIGhlaWdodCBmb3IgVGV4dEJsb2NrXCIpO1xuICB9XG5cbiAgdGhpcy5fd3JhcFRleHQodGhpcy5jdHgpO1xuICB0aGlzLl9pc0RpcnR5ID0gZmFsc2U7XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogdGhpcy53aWR0aCwgaGVpZ2h0OiB0aGlzLmhlaWdodFxuICB9XG59XG5cblRleHRCbG9jay5wcm90b3R5cGUuX2dldExpbmVXaXRoV2lkdGggPSBmdW5jdGlvbiAodGV4dCwgd2lkdGgsIGNsaXBXb3JkKSB7XG4gIHRleHQgPSBTdHJpbmcodGV4dCk7XG4gIGNsaXBXb3JkID0gY2xpcFdvcmQgfHwgZmFsc2U7XG5cbiAgaWYgKCF0ZXh0KVxuICAgIHJldHVybiB7XG4gICAgICB0ZXh0OiBcIlwiLCB3aWR0aDogMFxuICAgIH07XG5cbiAgdmFyIHRleHRXaWR0aCA9IDAsXG4gICAgbWluID0gMCxcbiAgICBtYXggPSB0ZXh0Lmxlbmd0aCAtIDEsXG4gICAgbWlkID0gSW5maW5pdHk7XG5cbiAgdGhpcy5jdHguZm9udCA9IHRoaXMuX2dldEZvbnRTdHJpbmcoKTtcblxuICB3aGlsZSAobWluIDw9IG1heCkge1xuICAgIG1pZCA9IE1hdGguZmxvb3IoKG1pbiArIG1heCkgLyAyKTtcbiAgICB2YXIgdGVtcFRleHQgPSB0ZXh0LnN1YnN0cigwLCBtaWQgKyAxKTtcblxuICAgIHRleHRXaWR0aCA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRlbXBUZXh0KS53aWR0aDtcblxuICAgIGlmICh0ZXh0V2lkdGggPCB3aWR0aCkge1xuICAgICAgbWluID0gbWlkICsgMTtcbiAgICB9IGVsc2UgaWYgKHRleHRXaWR0aCA+IHdpZHRoKSB7XG4gICAgICBtYXggPSBtaWQgLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvL2VkZ2UgY2FzZXNcbiAgaWYgKHRleHRXaWR0aCA+IHdpZHRoICYmIHRlbXBUZXh0Lmxlbmd0aCA+IDEpIHtcbiAgICB0ZW1wVGV4dCA9IHRlbXBUZXh0LnN1YnN0cigwLCB0ZW1wVGV4dC5sZW5ndGggLSAxKTtcbiAgICB0ZXh0V2lkdGggPSB0aGlzLmN0eC5tZWFzdXJlVGV4dCh0ZW1wVGV4dCkud2lkdGg7XG4gIH1cblxuICB2YXIgaXNDbGlwcGVkID0gdHJ1ZTtcblxuICBpZiAodGVtcFRleHQubGVuZ3RoID09PSB0ZXh0Lmxlbmd0aCB8fCB0ZXh0W3RlbXBUZXh0Lmxlbmd0aF0gPT09IFwiIFwiKVxuICAgIGlzQ2xpcHBlZCA9IGZhbHNlO1xuXG4gIGlmIChpc0NsaXBwZWQpIHtcbiAgICB2YXIgcmVzdWx0V29yZHMgPSB0ZW1wVGV4dC5zcGxpdChcIiBcIik7XG4gICAgaWYgKHJlc3VsdFdvcmRzLmxlbmd0aCA+IDEpXG4gICAgICByZXN1bHRXb3Jkcy5wb3AoKTtcblxuICAgIHRlbXBUZXh0ID0gcmVzdWx0V29yZHMuam9pbihcIiBcIik7XG4gICAgdGV4dFdpZHRoID0gdGhpcy5jdHgubWVhc3VyZVRleHQodGVtcFRleHQpLndpZHRoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiB0ZW1wVGV4dCwgd2lkdGg6IHRleHRXaWR0aFxuICB9O1xufVxuXG5UZXh0QmxvY2sucHJvdG90eXBlLl93cmFwVGV4dCA9IGZ1bmN0aW9uIHdyYXBUZXh0KCkge1xuICAvL3RoaXMuY3R4LnNhdmUoKTtcbiAgdmFyIHRleHQgPSBuZXcgU3RyaW5nKHRyaW1TdHJpbmcoU3RyaW5nKHRoaXMudGV4dCkpKTtcbiAgdmFyIGxpbmVzID0gW107XG4gIHZhciBmb250ID0gdGhpcy5jdHguZm9udDsgLy8gU2F2ZSB0aGUgY3VycmVudCBGb250XG4gIHZhciBoZWlnaHQgPSAwO1xuICB2YXIgd2lkdGggPSAwO1xuXG4gIHRoaXMuY3R4LmZvbnQgPSB0aGlzLl9nZXRGb250U3RyaW5nKCk7XG5cbiAgd2hpbGUgKHRleHQubGVuZ3RoID4gMCkge1xuXG4gICAgdmFyIG1heFdpZHRoID0gdGhpcy5tYXhXaWR0aCAtIHRoaXMucGFkZGluZyAqIDI7XG4gICAgdmFyIG1heEhlaWdodCA9IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5wYWRkaW5nICogMjtcblxuICAgIHZhciBsaW5lID0gdGhpcy5fZ2V0TGluZVdpdGhXaWR0aCh0ZXh0LCBtYXhXaWR0aCwgZmFsc2UpO1xuICAgIGxpbmUuaGVpZ2h0ID0gdGhpcy5fbGluZUhlaWdodDtcblxuICAgIGxpbmVzLnB1c2gobGluZSk7XG5cbiAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBsaW5lLndpZHRoKTtcbiAgICBoZWlnaHQgKz0gbGluZS5oZWlnaHQ7XG4gICAgdGV4dCA9IHRyaW1TdHJpbmcodGV4dC5zbGljZShsaW5lLnRleHQubGVuZ3RoLCB0ZXh0Lmxlbmd0aCkpO1xuXG4gICAgaWYgKG1heEhlaWdodCAmJiBoZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgIHZhciBsaW5lID0gbGluZXMucG9wKCk7XG4gICAgICBoZWlnaHQgLT0gbGluZS5oZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5fd3JhcHBlZFRleHQgPSB7XG4gICAgbGluZXM6IGxpbmVzLCB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0XG4gIH07XG4gIHRoaXMud2lkdGggPSB3aWR0aCArIHRoaXMucGFkZGluZyAqIDI7XG4gIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICsgdGhpcy5wYWRkaW5nICogMjtcblxuICB0aGlzLmN0eC5mb250ID0gZm9udDsgLy8gUmVzdG9yZSB0aGUgZm9udFxufVxuXG5UZXh0QmxvY2sucHJvdG90eXBlLl9nZXRGb250U3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAvL3JldHVybiB0aGlzLmZvbnRTdHlsZSArIFwiIFwiICsgdGhpcy5mb250V2VpZ2h0ICsgXCIgXCIgKyB0aGlzLmZvbnRTaXplICsgXCJweCBcIiArIHRoaXMuZm9udEZhbWlseVxuICByZXR1cm4gZ2V0Rm9udFN0cmluZyhcIlwiLCB0aGlzLCBudWxsKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dEJsb2NrO1xuIiwiXG5pbXBvcnQgQ2FudmFzSlNPYmplY3QgZnJvbSAnLi9jYW52YXNqcyc7XG5pbXBvcnQgVGV4dEJsb2NrIGZyb20gJy4vdGV4dF9ibG9jayc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5cbmZ1bmN0aW9uIFRpdGxlKGNoYXJ0LCBvcHRpb25zKSB7XG5cdFRpdGxlLmJhc2UuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBcIlRpdGxlXCIsIG9wdGlvbnMsIGNoYXJ0LnRoZW1lKTtcblxuXHR0aGlzLmNoYXJ0ID0gY2hhcnQ7XG5cdHRoaXMuY2FudmFzID0gY2hhcnQuY2FudmFzO1xuXHR0aGlzLmN0eCA9IHRoaXMuY2hhcnQuY3R4O1xuXG5cblx0aWYgKHR5cGVvZiAodGhpcy5fb3B0aW9ucy5mb250U2l6ZSkgPT09IFwidW5kZWZpbmVkXCIpIHtcblxuXHRcdHRoaXMuZm9udFNpemUgPSB0aGlzLmNoYXJ0LmdldEF1dG9Gb250U2l6ZSh0aGlzLmZvbnRTaXplKTtcblxuXHRcdC8vd2luZG93LmNvbnNvbGUubG9nKFwiQ2hhcnQgVGl0bGUgZm9udFNpemU6IFwiICsgdGhpcy5mb250U2l6ZSk7XG5cdH1cblxuXHR0aGlzLndpZHRoID0gbnVsbCwvL3JlYWQgb25seVxuXHR0aGlzLmhlaWdodCA9IG51bGwvL3JlYWQgb25seVxuXHR0aGlzLmJvdW5kcyA9IHtcblx0XHR4MTogbnVsbCwgeTE6IG51bGwsIHgyOiBudWxsLCB5MjogbnVsbFxuXHR9O1xufVxuXG5leHRlbmQoVGl0bGUsIENhbnZhc0pTT2JqZWN0KTtcblxuVGl0bGUucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcblxuXHRpZiAoIXRoaXMudGV4dCkgcmV0dXJuO1xuXG5cdHZhciBjb250YWluZXIgPSAoIXRoaXMuZG9ja0luc2lkZVBsb3RBcmVhID8gdGhpcy5jaGFydCA6IHRoaXMuY2hhcnQucGxvdEFyZWEpO1xuXHR2YXIgZnJlZXNwYWNlID0gY29udGFpbmVyLmxheW91dE1hbmFnZXIuZ2V0RnJlZVNwYWNlKCk7XG5cdHZhciBsZWZ0ID0gZnJlZXNwYWNlLngxO1xuXHR2YXIgdG9wID0gZnJlZXNwYWNlLnkxO1xuXHR2YXIgYW5nbGUgPSAwO1xuXHR2YXIgbWF4SGVpZ2h0ID0gMDtcblx0dmFyIGNvbnRhaW5lck1hcmdpbiA9IDI7IC8vTWFyZ2luIHRvd2FyZHMgdGhlIGNvbnRhaW5lclxuXHR2YXIgcmlnaHRPZmZzZXQgPSB0aGlzLmNoYXJ0Ll9tZW51QnV0dG9uICYmIHRoaXMuY2hhcnQuZXhwb3J0RW5hYmxlZCAmJiB0aGlzLnZlcnRpY2FsQWxpZ24gPT09IFwidG9wXCIgPyAyMiA6IDA7IC8vU28gdGhhdCBUaXRsZSBkb2Vzbid0IG92ZXJsYXAgbWVudSBidXR0b24uXG5cblx0dmFyIHRleHRCbG9ja0hvcml6b250YWxBbGlnbjtcblx0dmFyIHBvc2l0aW9uO1xuXG5cdGlmICh0aGlzLnZlcnRpY2FsQWxpZ24gPT09IFwidG9wXCIgfHwgdGhpcy52ZXJ0aWNhbEFsaWduID09PSBcImJvdHRvbVwiKSB7XG5cdFx0aWYgKHRoaXMubWF4V2lkdGggPT09IG51bGwpXG5cdFx0XHR0aGlzLm1heFdpZHRoID0gZnJlZXNwYWNlLndpZHRoIC0gY29udGFpbmVyTWFyZ2luICogMiAtIHJpZ2h0T2Zmc2V0ICogKHRoaXMuaG9yaXpvbnRhbEFsaWduID09PSBcImNlbnRlclwiID8gMiA6IDEpO1xuXG5cdFx0bWF4SGVpZ2h0ID0gZnJlZXNwYWNlLmhlaWdodCAqIC41IC0gdGhpcy5tYXJnaW4gLSBjb250YWluZXJNYXJnaW47XG5cdFx0YW5nbGUgPSAwO1xuXHR9XG5cdGVsc2UgaWYgKHRoaXMudmVydGljYWxBbGlnbiA9PT0gXCJjZW50ZXJcIikge1xuXG5cdFx0aWYgKHRoaXMuaG9yaXpvbnRhbEFsaWduID09PSBcImxlZnRcIiB8fCB0aGlzLmhvcml6b250YWxBbGlnbiA9PT0gXCJyaWdodFwiKSB7XG5cdFx0XHRpZiAodGhpcy5tYXhXaWR0aCA9PT0gbnVsbClcblx0XHRcdFx0dGhpcy5tYXhXaWR0aCA9IGZyZWVzcGFjZS5oZWlnaHQgLSBjb250YWluZXJNYXJnaW4gKiAyO1xuXG5cdFx0XHRtYXhIZWlnaHQgPSBmcmVlc3BhY2Uud2lkdGggKiAuNSAtIHRoaXMubWFyZ2luIC0gY29udGFpbmVyTWFyZ2luO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5ob3Jpem9udGFsQWxpZ24gPT09IFwiY2VudGVyXCIpIHtcblx0XHRcdGlmICh0aGlzLm1heFdpZHRoID09PSBudWxsKVxuXHRcdFx0XHR0aGlzLm1heFdpZHRoID0gZnJlZXNwYWNlLndpZHRoIC0gY29udGFpbmVyTWFyZ2luICogMjtcblxuXHRcdFx0bWF4SGVpZ2h0ID0gZnJlZXNwYWNlLmhlaWdodCAqIC41IC0gY29udGFpbmVyTWFyZ2luICogMjtcblx0XHR9XG5cdH1cblxuXHRpZiAoIXRoaXMud3JhcClcblx0XHRtYXhIZWlnaHQgPSBNYXRoLm1pbihtYXhIZWlnaHQsIE1hdGgubWF4KHRoaXMuZm9udFNpemUgKiAxLjUsIHRoaXMuZm9udFNpemUgKyB0aGlzLnBhZGRpbmcgKiAyLjUpKTtcblx0Ly9jb25zb2xlLmxvZyh0aGlzLm1heFdpZHRoKTtcblxuXHR2YXIgdGV4dEJsb2NrID0gbmV3IFRleHRCbG9jayh0aGlzLmN0eCwge1xuXHRcdGZvbnRTaXplOiB0aGlzLmZvbnRTaXplLCBmb250RmFtaWx5OiB0aGlzLmZvbnRGYW1pbHksIGZvbnRDb2xvcjogdGhpcy5mb250Q29sb3IsXG5cdFx0Zm9udFN0eWxlOiB0aGlzLmZvbnRTdHlsZSwgZm9udFdlaWdodDogdGhpcy5mb250V2VpZ2h0LFxuXHRcdGhvcml6b250YWxBbGlnbjogdGhpcy5ob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsQWxpZ246IHRoaXMudmVydGljYWxBbGlnbixcblx0XHRib3JkZXJDb2xvcjogdGhpcy5ib3JkZXJDb2xvciwgYm9yZGVyVGhpY2tuZXNzOiB0aGlzLmJvcmRlclRoaWNrbmVzcyxcblx0XHRiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFja2dyb3VuZENvbG9yLFxuXHRcdG1heFdpZHRoOiB0aGlzLm1heFdpZHRoLCBtYXhIZWlnaHQ6IG1heEhlaWdodCxcblx0XHRjb3JuZXJSYWRpdXM6IHRoaXMuY29ybmVyUmFkaXVzLFxuXHRcdHRleHQ6IHRoaXMudGV4dCxcblx0XHRwYWRkaW5nOiB0aGlzLnBhZGRpbmcsXG5cdFx0dGV4dEJhc2VsaW5lOiBcInRvcFwiXG5cdH0pO1xuXG5cdHZhciB0ZXh0QmxvY2tTaXplID0gdGV4dEJsb2NrLm1lYXN1cmVUZXh0KCk7XG5cblx0aWYgKHRoaXMudmVydGljYWxBbGlnbiA9PT0gXCJ0b3BcIiB8fCB0aGlzLnZlcnRpY2FsQWxpZ24gPT09IFwiYm90dG9tXCIpIHtcblxuXHRcdGlmICh0aGlzLnZlcnRpY2FsQWxpZ24gPT09IFwidG9wXCIpIHtcblx0XHRcdHRvcCA9IGZyZWVzcGFjZS55MSArIGNvbnRhaW5lck1hcmdpbjtcblx0XHRcdHBvc2l0aW9uID0gXCJ0b3BcIjtcblx0XHR9XG5cdFx0ZWxzZSBpZiAodGhpcy52ZXJ0aWNhbEFsaWduID09PSBcImJvdHRvbVwiKSB7XG5cdFx0XHR0b3AgPSBmcmVlc3BhY2UueTIgLSBjb250YWluZXJNYXJnaW4gLSB0ZXh0QmxvY2tTaXplLmhlaWdodDtcblx0XHRcdHBvc2l0aW9uID0gXCJib3R0b21cIjtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5ob3Jpem9udGFsQWxpZ24gPT09IFwibGVmdFwiKSB7XG5cdFx0XHRsZWZ0ID0gZnJlZXNwYWNlLngxICsgY29udGFpbmVyTWFyZ2luO1xuXHRcdH1cblx0XHRlbHNlIGlmICh0aGlzLmhvcml6b250YWxBbGlnbiA9PT0gXCJjZW50ZXJcIikge1xuXHRcdFx0bGVmdCA9IGZyZWVzcGFjZS54MSArIGZyZWVzcGFjZS53aWR0aCAvIDIgLSB0ZXh0QmxvY2tTaXplLndpZHRoIC8gMjtcblx0XHR9XG5cdFx0ZWxzZSBpZiAodGhpcy5ob3Jpem9udGFsQWxpZ24gPT09IFwicmlnaHRcIikge1xuXHRcdFx0bGVmdCA9IGZyZWVzcGFjZS54MiAtIGNvbnRhaW5lck1hcmdpbiAtIHRleHRCbG9ja1NpemUud2lkdGggLSByaWdodE9mZnNldDtcblx0XHR9XG5cblx0XHR0ZXh0QmxvY2tIb3Jpem9udGFsQWxpZ24gPSB0aGlzLmhvcml6b250YWxBbGlnbjtcblxuXHRcdHRoaXMud2lkdGggPSB0ZXh0QmxvY2tTaXplLndpZHRoO1xuXHRcdHRoaXMuaGVpZ2h0ID0gdGV4dEJsb2NrU2l6ZS5oZWlnaHQ7XG5cdH1cblx0ZWxzZSBpZiAodGhpcy52ZXJ0aWNhbEFsaWduID09PSBcImNlbnRlclwiKSB7XG5cblx0XHRpZiAodGhpcy5ob3Jpem9udGFsQWxpZ24gPT09IFwibGVmdFwiKSB7XG5cblx0XHRcdGxlZnQgPSBmcmVlc3BhY2UueDEgKyBjb250YWluZXJNYXJnaW47XG5cdFx0XHR0b3AgPSBmcmVlc3BhY2UueTIgLSBjb250YWluZXJNYXJnaW4gLSAodGhpcy5tYXhXaWR0aCAvIDIgLSB0ZXh0QmxvY2tTaXplLndpZHRoIC8gMik7XG5cdFx0XHRhbmdsZSA9IC05MDtcblxuXHRcdFx0cG9zaXRpb24gPSBcImxlZnRcIjtcblx0XHRcdHRoaXMud2lkdGggPSB0ZXh0QmxvY2tTaXplLmhlaWdodDtcblx0XHRcdHRoaXMuaGVpZ2h0ID0gdGV4dEJsb2NrU2l6ZS53aWR0aDtcblx0XHR9XG5cdFx0ZWxzZSBpZiAodGhpcy5ob3Jpem9udGFsQWxpZ24gPT09IFwicmlnaHRcIikge1xuXHRcdFx0bGVmdCA9IGZyZWVzcGFjZS54MiAtIGNvbnRhaW5lck1hcmdpbjtcblx0XHRcdHRvcCA9IGZyZWVzcGFjZS55MSArIGNvbnRhaW5lck1hcmdpbiArICh0aGlzLm1heFdpZHRoIC8gMiAtIHRleHRCbG9ja1NpemUud2lkdGggLyAyKTtcblx0XHRcdGFuZ2xlID0gOTA7XG5cblx0XHRcdHBvc2l0aW9uID0gXCJyaWdodFwiO1xuXHRcdFx0dGhpcy53aWR0aCA9IHRleHRCbG9ja1NpemUuaGVpZ2h0O1xuXHRcdFx0dGhpcy5oZWlnaHQgPSB0ZXh0QmxvY2tTaXplLndpZHRoO1xuXHRcdH1cblx0XHRlbHNlIGlmICh0aGlzLmhvcml6b250YWxBbGlnbiA9PT0gXCJjZW50ZXJcIikge1xuXHRcdFx0dG9wID0gY29udGFpbmVyLnkxICsgKGNvbnRhaW5lci5oZWlnaHQgLyAyIC0gdGV4dEJsb2NrU2l6ZS5oZWlnaHQgLyAyKTtcblx0XHRcdGxlZnQgPSBjb250YWluZXIueDEgKyAoY29udGFpbmVyLndpZHRoIC8gMiAtIHRleHRCbG9ja1NpemUud2lkdGggLyAyKTtcblxuXHRcdFx0cG9zaXRpb24gPSBcImNlbnRlclwiO1xuXHRcdFx0dGhpcy53aWR0aCA9IHRleHRCbG9ja1NpemUud2lkdGg7XG5cdFx0XHR0aGlzLmhlaWdodCA9IHRleHRCbG9ja1NpemUuaGVpZ2h0O1xuXHRcdH1cblxuXHRcdHRleHRCbG9ja0hvcml6b250YWxBbGlnbiA9IFwiY2VudGVyXCI7XG5cdH1cblxuXHR0ZXh0QmxvY2sueCA9IGxlZnQ7XG5cdHRleHRCbG9jay55ID0gdG9wO1xuXHR0ZXh0QmxvY2suYW5nbGUgPSBhbmdsZTtcblx0dGV4dEJsb2NrLmhvcml6b250YWxBbGlnbiA9IHRleHRCbG9ja0hvcml6b250YWxBbGlnbjtcblx0dGV4dEJsb2NrLnJlbmRlcih0cnVlKTtcblxuXHRjb250YWluZXIubGF5b3V0TWFuYWdlci5yZWdpc3RlclNwYWNlKHBvc2l0aW9uLCB7XG5cdFx0d2lkdGg6IHRoaXMud2lkdGggKyAocG9zaXRpb24gPT09IFwibGVmdFwiIHx8IHBvc2l0aW9uID09PSBcInJpZ2h0XCIgPyB0aGlzLm1hcmdpbiArIGNvbnRhaW5lck1hcmdpbiA6IDApLFxuXHRcdGhlaWdodDogdGhpcy5oZWlnaHQgKyAocG9zaXRpb24gPT09IFwidG9wXCIgfHwgcG9zaXRpb24gPT09IFwiYm90dG9tXCIgPyB0aGlzLm1hcmdpbiArIGNvbnRhaW5lck1hcmdpbiA6IDApXG5cdH0pO1xuXG5cdHRoaXMuYm91bmRzID0ge1xuXHRcdHgxOiBsZWZ0LCB5MTogdG9wLCB4MjogbGVmdCArIHRoaXMud2lkdGgsIHkyOiB0b3AgKyB0aGlzLmhlaWdodFxuXHR9O1xuXG5cdHRoaXMuY3R4LnRleHRCYXNlbGluZSA9IFwidG9wXCI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlO1xuIiwiXG5pbXBvcnQgQW5pbWF0aW9uSGVscGVyIGZyb20gJy4uL2hlbHBlcnMvYW5pbWF0b3InO1xuaW1wb3J0IFJlbmRlckhlbHBlciBmcm9tICcuLi9oZWxwZXJzL3JlbmRlcic7XG5pbXBvcnQgQ2FudmFzSlNPYmplY3QgZnJvbSAnLi9jYW52YXNqcyc7XG5pbXBvcnQge2V4dGVuZCwgaXNDYW52YXNTdXBwb3J0ZWQsIGdldE9iamVjdElkLCBkcmF3UmVjdCwgZHJhd1NlZ21lbnR9IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuXG5mdW5jdGlvbiBUb29sVGlwKGNoYXJ0LCBvcHRpb25zLCB0aGVtZSkge1xuXG4gIFRvb2xUaXAuYmFzZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIFwiVG9vbFRpcFwiLCBvcHRpb25zLCB0aGVtZSk7XG5cbiAgdGhpcy5jaGFydCA9IGNoYXJ0O1xuICB0aGlzLmNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcbiAgdGhpcy5jdHggPSB0aGlzLmNoYXJ0LmN0eDtcbiAgdGhpcy5jdXJyZW50U2VyaWVzSW5kZXggPSAtMTtcbiAgdGhpcy5jdXJyZW50RGF0YVBvaW50SW5kZXggPSAtMTtcbiAgdGhpcy5fdGltZXJJZCA9IDA7XG4gIHRoaXMuX3ByZXZYID0gTmFOO1xuICB0aGlzLl9wcmV2WSA9IE5hTjtcblxuICB0aGlzLl9pbml0aWFsaXplKCk7XG59XG5cbmV4dGVuZChUb29sVGlwLCBDYW52YXNKU09iamVjdCk7XG5cblRvb2xUaXAucHJvdG90eXBlLl9pbml0aWFsaXplID0gZnVuY3Rpb24gKCkge1xuXG4gIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICB0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jb250YWluZXIuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJjYW52YXNqcy1jaGFydC10b29sdGlwXCIpO1xuICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLmhlaWdodCA9IFwiYXV0b1wiO1xuICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLmJveFNoYWRvdyA9IFwiMXB4IDFweCAycHggMnB4IHJnYmEoMCwwLDAsMC4xKVwiO1xuICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleCA9IFwiMTAwMFwiO1xuICAgIC8vdGhpcy5jb250YWluZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiO1xuICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAvL3RoaXMuY29udGFpbmVyLnN0eWxlLndoaXRlU3BhY2UgPSBcIm5vLXdyYXBcIjtcblxuICAgIHZhciB0b29sVGlwSHRtbCA9IFwiPGRpdiBzdHlsZT1cXFwiIHdpZHRoOiBhdXRvO1wiO1xuICAgIHRvb2xUaXBIdG1sICs9IFwiaGVpZ2h0OiBhdXRvO1wiO1xuICAgIHRvb2xUaXBIdG1sICs9IFwibWluLXdpZHRoOiA1MHB4O1wiO1xuICAgIHRvb2xUaXBIdG1sICs9IFwibGluZS1oZWlnaHQ6IGF1dG87XCI7XG4gICAgdG9vbFRpcEh0bWwgKz0gXCJtYXJnaW46IDBweCAwcHggMHB4IDBweDtcIjtcbiAgICB0b29sVGlwSHRtbCArPSBcInBhZGRpbmc6IDVweDtcIjtcbiAgICB0b29sVGlwSHRtbCArPSBcImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBBcmlhbCwgR2VvcmdpYSwgc2VyaWY7XCI7XG4gICAgdG9vbFRpcEh0bWwgKz0gXCJmb250LXdlaWdodDogbm9ybWFsO1wiO1xuICAgIHRvb2xUaXBIdG1sICs9IFwiZm9udC1zdHlsZTogXCIgKyAoaXNDYW52YXNTdXBwb3J0ZWQgPyBcIml0YWxpYztcIiA6IFwibm9ybWFsO1wiKTtcbiAgICB0b29sVGlwSHRtbCArPSBcImZvbnQtc2l6ZTogMTRweDtcIjtcbiAgICB0b29sVGlwSHRtbCArPSBcImNvbG9yOiAjMDAwMDAwO1wiO1xuICAgIHRvb2xUaXBIdG1sICs9IFwidGV4dC1zaGFkb3c6IDFweCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcIjtcbiAgICB0b29sVGlwSHRtbCArPSBcInRleHQtYWxpZ246IGxlZnQ7XCI7XG4gICAgdG9vbFRpcEh0bWwgKz0gXCJib3JkZXI6IDJweCBzb2xpZCBncmF5O1wiO1xuXG4gICAgLy9PbGRlciBicm93c2VycyBsaWtlIElFOC0gZG9uJ3Qgc3VwcG9ydCBhbHBoYSB2YWx1ZXNcbiAgICB0b29sVGlwSHRtbCArPSBpc0NhbnZhc1N1cHBvcnRlZCA/IFwiYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwuOSk7XCIgOiBcImJhY2tncm91bmQ6IHJnYigyNTUsMjU1LDI1NSk7XCI7XG5cbiAgICB0b29sVGlwSHRtbCArPSBcInRleHQtaW5kZW50OiAwcHg7XCI7XG4gICAgdG9vbFRpcEh0bWwgKz0gXCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiO1xuICAgIC8vdG9vbFRpcEh0bWwgKz0gXCJwb2ludGVyLWV2ZW50czpub25lO1wiO1xuICAgIHRvb2xUaXBIdG1sICs9IFwiYm9yZGVyLXJhZGl1czogNXB4O1wiO1xuXG4gICAgLy9EaXNhYmxlIFRleHQgU2VsZWN0aW9uXG4gICAgdG9vbFRpcEh0bWwgKz0gXCItbW96LXVzZXItc2VsZWN0Om5vbmU7XCI7XG4gICAgdG9vbFRpcEh0bWwgKz0gXCIta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7XCI7XG4gICAgdG9vbFRpcEh0bWwgKz0gXCItd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1wiO1xuICAgIHRvb2xUaXBIdG1sICs9IFwiLW1zLXVzZXItc2VsZWN0OiBub25lO1wiO1xuICAgIHRvb2xUaXBIdG1sICs9IFwidXNlci1zZWxlY3Q6IG5vbmU7XCI7XG5cbiAgICAvL3Rvb2xUaXBIdG1sICs9IFwib3BhY2l0eTogMDtcIjtcbiAgICAvL3Rvb2xUaXBIdG1sICs9IFwiZmlsdGVyOiBwcm9naWQ6IERYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KEdyYWRpZW50VHlwZSA9IDAsIHN0YXJ0Q29sb3JzdHIgPSAnIzRjZmZmZmZmJywgZW5kQ29sb3JzdHIgPSAnIzRjZmZmZmZmJyk7XCI7XG5cbiAgICBpZiAoIWlzQ2FudmFzU3VwcG9ydGVkKSB7XG4gICAgICAvL3Rvb2xUaXBIdG1sICs9IFwiLW1zLWZpbHRlcjoncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9OTApJ1wiO1xuICAgICAgLy8tbXMtZmlsdGVyOiBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5TaGFkb3coU3RyZW5ndGg9NCwgRGlyZWN0aW9uPTEzNSwgQ29sb3I9JyMwMDAwMDAnKVwiO1xuICAgICAgLyogRm9yIElFIDUuNSAtIDcgKi9cbiAgICAgIHRvb2xUaXBIdG1sICs9IFwiZmlsdGVyOiBhbHBoYShvcGFjaXR5ID0gOTApO1wiO1xuICAgICAgdG9vbFRpcEh0bWwgKz0gXCJmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5TaGFkb3coU3RyZW5ndGg9MywgRGlyZWN0aW9uPTEzNSwgQ29sb3I9JyM2NjY2NjYnKTtcIjtcbiAgICB9XG5cbiAgICB0b29sVGlwSHRtbCArPSBcIn0gXFxcIj4gU2FtcGxlIFRvb2x0aXA8L2Rpdj5cIjtcblxuICAgIHRoaXMuY29udGFpbmVyLmlubmVySFRNTCA9IHRvb2xUaXBIdG1sO1xuICAgIHRoaXMuY29udGVudERpdiA9IHRoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG5cblxuICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLmJvcmRlclJhZGl1cyA9IHRoaXMuY29udGVudERpdi5zdHlsZS5ib3JkZXJSYWRpdXM7XG4gICAgdGhpcy5jaGFydC5fY2FudmFzSlNDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIpO1xuICB9XG59XG5cblRvb2xUaXAucHJvdG90eXBlLm1vdXNlTW92ZUhhbmRsZXIgPSBmdW5jdGlvbiAoeCwgeSkge1xuXG4gIGlmICghKHRoaXMuX2xhc3RVcGRhdGVkICYmIChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRoaXMuX2xhc3RVcGRhdGVkKSA8IDQwKSkge1xuICAgIHRoaXMuX2xhc3RVcGRhdGVkID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgdGhpcy5fdXBkYXRlVG9vbFRpcCh4LCB5KTtcbiAgfVxufVxuXG5Ub29sVGlwLnByb3RvdHlwZS5fdXBkYXRlVG9vbFRpcCA9IGZ1bmN0aW9uIChtb3VzZVgsIG1vdXNlWSkge1xuICAvL3JldHVybjtcblxuICBpZiAodGhpcy5jaGFydC5kaXNhYmxlVG9vbFRpcCkgLy8gRGlzYWJsZWQgZHVyaW5nIGFuaW1hdGlvbiwgZXRjXG4gICAgcmV0dXJuO1xuXG4gIGlmICh0eXBlb2YgKG1vdXNlWCkgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIChtb3VzZVkpID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgaWYgKGlzTmFOKHRoaXMuX3ByZXZYKSB8fCBpc05hTih0aGlzLl9wcmV2WSkpXG4gICAgICByZXR1cm47XG4gICAgZWxzZSB7XG4gICAgICBtb3VzZVggPSB0aGlzLl9wcmV2WDtcbiAgICAgIG1vdXNlWSA9IHRoaXMuX3ByZXZZO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9wcmV2WCA9IG1vdXNlWDtcbiAgICB0aGlzLl9wcmV2WSA9IG1vdXNlWTtcbiAgfVxuXG5cbiAgdmFyIGRhdGFQb2ludCA9IG51bGw7XG4gIHZhciBkYXRhU2VyaWVzID0gbnVsbDtcbiAgdmFyIHRvb2xUaXBDb250ZW50ID0gXCJcIjtcbiAgdmFyIGVudHJpZXMgPSBbXTtcbiAgdmFyIHRvb2xUaXBSaWdodDtcbiAgdmFyIHRvb2xUaXBCb3R0b207XG4gIHZhciB4ID0gMDtcblxuICBpZiAodGhpcy5zaGFyZWQgJiYgdGhpcy5lbmFibGVkICYmIHRoaXMuY2hhcnQucGxvdEluZm8uYXhpc1BsYWNlbWVudCAhPT0gXCJub25lXCIpIHtcbiAgICAvLyAmJiB0aGlzLmNoYXJ0LnBsb3RJbmZvLmF4aXNQbGFjZW1lbnQgIT09IFwibm9uZVwiXG4gICAgaWYgKHRoaXMuY2hhcnQucGxvdEluZm8uYXhpc1BsYWNlbWVudCA9PT0gXCJ4eVN3YXBwZWRcIikge1xuICAgICAgeCA9ICh0aGlzLmNoYXJ0LmF4aXNYLnZpZXdwb3J0TWF4aW11bSAtIHRoaXMuY2hhcnQuYXhpc1gudmlld3BvcnRNaW5pbXVtKSAvIHRoaXMuY2hhcnQuYXhpc1gubGluZUNvb3JkaW5hdGVzLmhlaWdodCAqICgodGhpcy5jaGFydC5heGlzWC5saW5lQ29vcmRpbmF0ZXMueTIgLSBtb3VzZVkpKSArIHRoaXMuY2hhcnQuYXhpc1gudmlld3BvcnRNaW5pbXVtO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHggPSAodGhpcy5jaGFydC5heGlzWC52aWV3cG9ydE1heGltdW0gLSB0aGlzLmNoYXJ0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkgLyB0aGlzLmNoYXJ0LmF4aXNYLmxpbmVDb29yZGluYXRlcy53aWR0aCAqIChtb3VzZVggLSB0aGlzLmNoYXJ0LmF4aXNYLmxpbmVDb29yZGluYXRlcy54MSkgKyB0aGlzLmNoYXJ0LmF4aXNYLnZpZXdwb3J0TWluaW11bTtcbiAgICB9XG5cbiAgICB2YXIgbmVhcmJ5RW50cmllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoYXJ0LmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbnRyeSA9IHRoaXMuY2hhcnQuZGF0YVtpXS5nZXREYXRhUG9pbnRBdFgoeCwgdHJ1ZSk7XG5cbiAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5pbmRleCA+PSAwKSB7XG4gICAgICAgIGVudHJ5LmRhdGFTZXJpZXMgPSB0aGlzLmNoYXJ0LmRhdGFbaV07XG5cbiAgICAgICAgaWYgKGVudHJ5LmRhdGFQb2ludC55ICE9PSBudWxsKVxuICAgICAgICAgIG5lYXJieUVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lYXJieUVudHJpZXMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuO1xuXG4gICAgbmVhcmJ5RW50cmllcy5zb3J0KGZ1bmN0aW9uIChlbnRyeTEsIGVudHJ5Mikge1xuICAgICAgcmV0dXJuIGVudHJ5MS5kaXN0YW5jZSAtIGVudHJ5Mi5kaXN0YW5jZTtcbiAgICB9KTtcblxuICAgIHZhciBjbG9zZXN0ID0gbmVhcmJ5RW50cmllc1swXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuZWFyYnlFbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgIGlmIChuZWFyYnlFbnRyaWVzW2ldLmRhdGFQb2ludC54LnZhbHVlT2YoKSA9PT0gY2xvc2VzdC5kYXRhUG9pbnQueC52YWx1ZU9mKCkpXG4gICAgICAgIGVudHJpZXMucHVzaChuZWFyYnlFbnRyaWVzW2ldKTtcbiAgICB9XG5cbiAgICBuZWFyYnlFbnRyaWVzID0gbnVsbDtcblxuICB9IGVsc2Uge1xuXG4gICAgdmFyIGRhdGFQb2ludEluZm8gPSB0aGlzLmNoYXJ0LmdldERhdGFQb2ludEF0WFkobW91c2VYLCBtb3VzZVksIHRydWUpO1xuICAgIC8vZGF0YVBvaW50SW5mbyA9IG51bGw7XG5cbiAgICBpZiAoZGF0YVBvaW50SW5mbykge1xuICAgICAgdGhpcy5jdXJyZW50RGF0YVBvaW50SW5kZXggPSBkYXRhUG9pbnRJbmZvLmRhdGFQb2ludEluZGV4O1xuICAgICAgdGhpcy5jdXJyZW50U2VyaWVzSW5kZXggPSBkYXRhUG9pbnRJbmZvLmRhdGFTZXJpZXMuaW5kZXg7XG4gICAgfSBlbHNlIGlmIChpc0NhbnZhc1N1cHBvcnRlZCkge1xuXG4gICAgICB2YXIgaWQgPSBnZXRPYmplY3RJZChtb3VzZVgsIG1vdXNlWSwgdGhpcy5jaGFydC5fZXZlbnRNYW5hZ2VyLmdob3N0Q3R4KTtcbiAgICAgIGlmIChpZCA+IDAgJiYgdHlwZW9mIHRoaXMuY2hhcnQuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbaWRdICE9PSBcInVuZGVmaW5lZFwiKSB7Ly9EYXRhUG9pbnQvRGF0YVNlcmllcyBldmVudFxuICAgICAgICB2YXIgZXZlbnRPYmplY3QgPSB0aGlzLmNoYXJ0Ll9ldmVudE1hbmFnZXIub2JqZWN0TWFwW2lkXTtcblxuICAgICAgICBpZiAoZXZlbnRPYmplY3Qub2JqZWN0VHlwZSA9PT0gXCJsZWdlbmRJdGVtXCIpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIC8vaWYgKHRoaXMuY3VycmVudFNlcmllc0luZGV4ID09PSBldmVudE9iamVjdC5kYXRhU2VyaWVzSW5kZXggJiYgdGhpcy5jdXJyZW50RGF0YVBvaW50SW5kZXggPT09IGV2ZW50T2JqZWN0LmRhdGFQb2ludEluZGV4KVxuICAgICAgICAvLyAgcmV0dXJuO1xuICAgICAgICAvL2Vsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXJpZXNJbmRleCA9IGV2ZW50T2JqZWN0LmRhdGFTZXJpZXNJbmRleDtcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0YVBvaW50SW5kZXggPSBldmVudE9iamVjdC5kYXRhUG9pbnRJbmRleCA+PSAwID8gZXZlbnRPYmplY3QuZGF0YVBvaW50SW5kZXggOiAtMTtcbiAgICAgICAgLy99XG5cbiAgICAgICAgLy93aW5kb3cuY29uc29sZS5sb2coXCJpZDogXCIgKyBpZCArIFwiOyBoZXg6IFwiICsgaW50VG9IZXhDb2xvclN0cmluZyhpZCkpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIHRoaXMuY3VycmVudERhdGFQb2ludEluZGV4ID0gLTE7XG5cbiAgICB9IGVsc2VcbiAgICAgIHRoaXMuY3VycmVudERhdGFQb2ludEluZGV4ID0gLTE7XG5cblxuICAgIGlmICh0aGlzLmN1cnJlbnRTZXJpZXNJbmRleCA+PSAwKSB7XG5cbiAgICAgIGRhdGFTZXJpZXMgPSB0aGlzLmNoYXJ0LmRhdGFbdGhpcy5jdXJyZW50U2VyaWVzSW5kZXhdO1xuXG4gICAgICB2YXIgZW50cnkgPSB7XG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5jdXJyZW50RGF0YVBvaW50SW5kZXggPj0gMCkge1xuICAgICAgICBkYXRhUG9pbnQgPSBkYXRhU2VyaWVzLmRhdGFQb2ludHNbdGhpcy5jdXJyZW50RGF0YVBvaW50SW5kZXhdO1xuXG4gICAgICAgIGVudHJ5LmRhdGFTZXJpZXMgPSBkYXRhU2VyaWVzO1xuICAgICAgICBlbnRyeS5kYXRhUG9pbnQgPSBkYXRhUG9pbnQ7XG4gICAgICAgIGVudHJ5LmluZGV4ID0gdGhpcy5jdXJyZW50RGF0YVBvaW50SW5kZXg7XG4gICAgICAgIGVudHJ5LmRpc3RhbmNlID0gTWF0aC5hYnMoZGF0YVBvaW50LnggLSB4KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5lbmFibGVkICYmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwibGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGVwTGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzcGxpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwiYXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGVwQXJlYVwiXG4gICAgICAgICAgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInNwbGluZUFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEFyZWExMDBcIlxuICAgICAgICAgIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJyYW5nZUFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwicmFuZ2VTcGxpbmVBcmVhXCJcbiAgICAgICAgICB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwiY2FuZGxlc3RpY2tcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwib2hsY1wiKSkge1xuXG4gICAgICAgIC8vdmFyIHggPSAodGhpcy5jaGFydC5heGlzWC52aWV3cG9ydE1heGltdW0gLSB0aGlzLmNoYXJ0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkgLyB0aGlzLmNoYXJ0LmF4aXNYLmxpbmVDb29yZGluYXRlcy53aWR0aCAqIChtb3VzZVggLSB0aGlzLmNoYXJ0LmF4aXNYLmxpbmVDb29yZGluYXRlcy54MSkgKyB0aGlzLmNoYXJ0LmF4aXNYLnZpZXdwb3J0TWluaW11bS52YWx1ZU9mKCk7XG4gICAgICAgIHZhciB4ID0gZGF0YVNlcmllcy5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5taW5pbXVtICsgKG1vdXNlWCAtIGRhdGFTZXJpZXMuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlKSAvIGRhdGFTZXJpZXMuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0O1xuXG5cbiAgICAgICAgZW50cnkgPSBkYXRhU2VyaWVzLmdldERhdGFQb2ludEF0WCh4LCB0cnVlKTtcbiAgICAgICAgZW50cnkuZGF0YVNlcmllcyA9IGRhdGFTZXJpZXM7XG4gICAgICAgIHRoaXMuY3VycmVudERhdGFQb2ludEluZGV4ID0gZW50cnkuaW5kZXg7XG4gICAgICAgIGRhdGFQb2ludCA9IGVudHJ5LmRhdGFQb2ludDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vdGhpcy5oaWRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGVudHJ5LmRhdGFQb2ludC55ICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChlbnRyeS5kYXRhU2VyaWVzLmF4aXNZKSB7XG4gICAgICAgICAgaWYgKGVudHJ5LmRhdGFQb2ludC55Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhciB1bmJvdW5kVG9WaWV3cG9ydCA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJ5LmRhdGFQb2ludC55Lmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICBpZiAoZW50cnkuZGF0YVBvaW50LnlbaV0gPCBlbnRyeS5kYXRhU2VyaWVzLmF4aXNZLnZpZXdwb3J0TWluaW11bSlcbiAgICAgICAgICAgICAgICB1bmJvdW5kVG9WaWV3cG9ydC0tO1xuICAgICAgICAgICAgICBlbHNlIGlmIChlbnRyeS5kYXRhUG9pbnQueVtpXSA+IGVudHJ5LmRhdGFTZXJpZXMuYXhpc1kudmlld3BvcnRNYXhpbXVtKVxuICAgICAgICAgICAgICAgIHVuYm91bmRUb1ZpZXdwb3J0Kys7XG4gICAgICAgICAgICBpZiAodW5ib3VuZFRvVmlld3BvcnQgPCBlbnRyeS5kYXRhUG9pbnQueS5sZW5ndGggJiYgdW5ib3VuZFRvVmlld3BvcnQgPiAtZW50cnkuZGF0YVBvaW50LnkubGVuZ3RoKVxuICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZW50cnkuZGF0YVBvaW50LnkgPj0gZW50cnkuZGF0YVNlcmllcy5heGlzWS52aWV3cG9ydE1pbmltdW0gJiYgZW50cnkuZGF0YVBvaW50LnkgPD0gZW50cnkuZGF0YVNlcmllcy5heGlzWS52aWV3cG9ydE1heGltdW0pXG4gICAgICAgICAgICAgIGVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2VcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB9XG5cbiAgICB9XG4gIH1cblxuXG4gIGlmIChlbnRyaWVzLmxlbmd0aCA+IDApIHtcblxuICAgIHRoaXMuaGlnaGxpZ2h0T2JqZWN0cyhlbnRyaWVzKTtcblxuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcblxuICAgICAgdmFyIHRvb2xUaXBJbm5lckh0bWwgPSBcIlwiO1xuXG4gICAgICB0b29sVGlwSW5uZXJIdG1sID0gdGhpcy5nZXRUb29sVGlwSW5uZXJIVE1MKHsgZW50cmllczogZW50cmllcyB9KTtcblxuICAgICAgaWYgKHRvb2xUaXBJbm5lckh0bWwgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb250ZW50RGl2LmlubmVySFRNTCA9IHRvb2xUaXBJbm5lckh0bWw7XG5cbiAgICAgICAgdGhpcy5jb250ZW50RGl2LmlubmVySFRNTCA9IHRvb2xUaXBJbm5lckh0bWw7XG5cbiAgICAgICAgdmFyIHByZXZpb3VzbHlIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiKSB7XG4gICAgICAgICAgcHJldmlvdXNseUhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50RGl2LnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRDb2xvciA/IHRoaXMuYmFja2dyb3VuZENvbG9yIDogaXNDYW52YXNTdXBwb3J0ZWQgPyBcInJnYmEoMjU1LDI1NSwyNTUsLjkpXCIgOiBcInJnYigyNTUsMjU1LDI1NSlcIjtcblxuICAgICAgICAgIHRoaXMuY29udGVudERpdi5zdHlsZS5ib3JkZXJSaWdodENvbG9yID0gdGhpcy5jb250ZW50RGl2LnN0eWxlLmJvcmRlckxlZnRDb2xvciA9IHRoaXMuY29udGVudERpdi5zdHlsZS5ib3JkZXJDb2xvciA9IHRoaXMuYm9yZGVyQ29sb3IgPyB0aGlzLmJvcmRlckNvbG9yIDogZW50cmllc1swXS5kYXRhUG9pbnQuY29sb3IgPyBlbnRyaWVzWzBdLmRhdGFQb2ludC5jb2xvciA6IGVudHJpZXNbMF0uZGF0YVNlcmllcy5jb2xvciA/IGVudHJpZXNbMF0uZGF0YVNlcmllcy5jb2xvciA6IGVudHJpZXNbMF0uZGF0YVNlcmllcy5fY29sb3JTZXRbZW50cmllc1swXS5pbmRleCAlIGVudHJpZXNbMF0uZGF0YVNlcmllcy5fY29sb3JTZXQubGVuZ3RoXTtcblxuICAgICAgICAgIHRoaXMuY29udGVudERpdi5zdHlsZS5ib3JkZXJXaWR0aCA9ICh0aGlzLmJvcmRlclRoaWNrbmVzcyB8fCB0aGlzLmJvcmRlclRoaWNrbmVzcyA9PT0gMCkgPyB0aGlzLmJvcmRlclRoaWNrbmVzcyArIFwicHhcIiA6IDIgKyBcInB4XCI7XG5cbiAgICAgICAgICB0aGlzLmNvbnRlbnREaXYuc3R5bGUuYm9yZGVyUmFkaXVzID0gKHRoaXMuY29ybmVyUmFkaXVzIHx8IHRoaXMuY29ybmVyUmFkaXVzID09PSAwKSA/IHRoaXMuY29ybmVyUmFkaXVzICsgXCJweFwiIDogNSArIFwicHhcIjtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5ib3JkZXJSYWRpdXMgPSB0aGlzLmNvbnRlbnREaXYuc3R5bGUuYm9yZGVyUmFkaXVzO1xuXG5cbiAgICAgICAgICB0aGlzLmNvbnRlbnREaXYuc3R5bGUuZm9udFNpemUgPSAodGhpcy5mb250U2l6ZSB8fCB0aGlzLmZvbnRTaXplID09PSAwKSA/IHRoaXMuZm9udFNpemUgKyBcInB4XCIgOiAxNCArIFwicHhcIjtcbiAgICAgICAgICB0aGlzLmNvbnRlbnREaXYuc3R5bGUuY29sb3IgPSB0aGlzLmZvbnRDb2xvciA/IHRoaXMuZm9udENvbG9yIDogXCIjMDAwMDAwXCI7XG4gICAgICAgICAgdGhpcy5jb250ZW50RGl2LnN0eWxlLmZvbnRGYW1pbHkgPSB0aGlzLmZvbnRGYW1pbHkgPyB0aGlzLmZvbnRGYW1pbHkgOiBcIkNhbGlicmksIEFyaWFsLCBHZW9yZ2lhLCBzZXJpZjtcIjtcbiAgICAgICAgICB0aGlzLmNvbnRlbnREaXYuc3R5bGUuZm9udFdlaWdodCA9IHRoaXMuZm9udFdlaWdodCA/IHRoaXMuZm9udFdlaWdodCA6IFwibm9ybWFsXCI7XG4gICAgICAgICAgdGhpcy5jb250ZW50RGl2LnN0eWxlLmZvbnRTdHlsZSA9IHRoaXMuZm9udFN0eWxlID8gdGhpcy5mb250U3R5bGUgOiBpc0NhbnZhc1N1cHBvcnRlZCA/IFwiaXRhbGljXCIgOiBcIm5vcm1hbFwiO1xuXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0b29sVGlwTGVmdDtcblxuICAgICAgICBpZiAoZW50cmllc1swXS5kYXRhU2VyaWVzLnR5cGUgPT09IFwicGllXCIgfHwgZW50cmllc1swXS5kYXRhU2VyaWVzLnR5cGUgPT09IFwiZG91Z2hudXRcIiB8fCBlbnRyaWVzWzBdLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJmdW5uZWxcIiB8fCBlbnRyaWVzWzBdLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJiYXJcIiB8fCBlbnRyaWVzWzBdLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJyYW5nZUJhclwiIHx8IGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRCYXJcIiB8fCBlbnRyaWVzWzBdLmRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQmFyMTAwXCIpIHtcbiAgICAgICAgICB0b29sVGlwTGVmdCA9IG1vdXNlWCAtIDEwIC0gdGhpcy5jb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy90b29sVGlwTGVmdCA9ICgoKHRoaXMuY2hhcnQuYXhpc1gubGluZUNvb3JkaW5hdGVzLndpZHRoIC8gTWF0aC5hYnModGhpcy5jaGFydC5heGlzWC52aWV3cG9ydE1heGltdW0gLSB0aGlzLmNoYXJ0LmF4aXNYLnZpZXdwb3J0TWluaW11bSkpICogTWF0aC5hYnMoZW50cmllc1swXS5kYXRhUG9pbnQueCAtIHRoaXMuY2hhcnQuYXhpc1gudmlld3BvcnRNaW5pbXVtKSkgKyB0aGlzLmNoYXJ0LmF4aXNYLmxpbmVDb29yZGluYXRlcy54MSArIC41KSAtIHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoIDw8IDA7XG4gICAgICAgICAgdG9vbFRpcExlZnQgPSBlbnRyaWVzWzBdLmRhdGFTZXJpZXMuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChlbnRyaWVzWzBdLmRhdGFQb2ludC54IC0gZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNYLmNvbnZlcnNpb25QYXJhbWV0ZXJzLm1pbmltdW0pIC0gdGhpcy5jb250YWluZXIuY2xpZW50V2lkdGggPDwgMDtcbiAgICAgICAgICB0b29sVGlwTGVmdCAtPSAxMDtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKHRvb2xUaXBMZWZ0IDwgMCkge1xuICAgICAgICAgIHRvb2xUaXBMZWZ0ICs9IHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoICsgMjA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9vbFRpcExlZnQgKyB0aGlzLmNvbnRhaW5lci5jbGllbnRXaWR0aCA+IHRoaXMuY2hhcnQuX2NvbnRhaW5lci5jbGllbnRXaWR0aClcbiAgICAgICAgICB0b29sVGlwTGVmdCA9IE1hdGgubWF4KDAsIHRoaXMuY2hhcnQuX2NvbnRhaW5lci5jbGllbnRXaWR0aCAtIHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoKTtcblxuICAgICAgICB0b29sVGlwTGVmdCArPSBcInB4XCI7XG5cbiAgICAgICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAxICYmICF0aGlzLnNoYXJlZCAmJiAoZW50cmllc1swXS5kYXRhU2VyaWVzLnR5cGUgPT09IFwibGluZVwiIHx8IGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcInN0ZXBMaW5lXCIgfHwgZW50cmllc1swXS5kYXRhU2VyaWVzLnR5cGUgPT09IFwic3BsaW5lXCIgfHwgZW50cmllc1swXS5kYXRhU2VyaWVzLnR5cGUgPT09IFwiYXJlYVwiIHx8IGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcInN0ZXBBcmVhXCIgfHwgZW50cmllc1swXS5kYXRhU2VyaWVzLnR5cGUgPT09IFwic3BsaW5lQXJlYVwiIHx8IGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRBcmVhXCIgfHwgZW50cmllc1swXS5kYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEFyZWExMDBcIikpIHtcbiAgICAgICAgICAvL3Rvb2xUaXBCb3R0b20gPSAoZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNZLmxpbmVDb29yZGluYXRlcy55MiAtIGVudHJpZXNbMF0uZGF0YVNlcmllcy5heGlzWS5saW5lQ29vcmRpbmF0ZXMuaGVpZ2h0IC8gTWF0aC5hYnMoZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNZLm1heGltdW0gLSBlbnRyaWVzWzBdLmRhdGFTZXJpZXMuYXhpc1kudmlld3BvcnRNaW5pbXVtKSAqIE1hdGguYWJzKGVudHJpZXNbMF0uZGF0YVBvaW50LnkgLSBlbnRyaWVzWzBdLmRhdGFTZXJpZXMuYXhpc1kudmlld3BvcnRNaW5pbXVtKSArIC41KSA8PCAwO1xuICAgICAgICAgIHRvb2xUaXBCb3R0b20gPSBlbnRyaWVzWzBdLmRhdGFTZXJpZXMuYXhpc1kuY29udmVyc2lvblBhcmFtZXRlcnMucmVmZXJlbmNlICsgZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNZLmNvbnZlcnNpb25QYXJhbWV0ZXJzLnBpeGVsUGVyVW5pdCAqIChlbnRyaWVzWzBdLmRhdGFQb2ludC55IC0gZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNZLnZpZXdwb3J0TWluaW11bSkgKyAuNSA8PCAwO1xuICAgICAgICB9IGVsc2UgaWYgKGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcImJhclwiIHx8IGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcInJhbmdlQmFyXCIgfHwgZW50cmllc1swXS5kYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEJhclwiIHx8IGVudHJpZXNbMF0uZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRCYXIxMDBcIikge1xuICAgICAgICAgIC8vdG9vbFRpcEJvdHRvbSA9IChlbnRyaWVzWzBdLmRhdGFTZXJpZXMuYXhpc1gubGluZUNvb3JkaW5hdGVzLnkyIC0gZW50cmllc1swXS5kYXRhU2VyaWVzLmF4aXNYLmxpbmVDb29yZGluYXRlcy5oZWlnaHQgLyBNYXRoLmFicyhlbnRyaWVzWzBdLmRhdGFTZXJpZXMuYXhpc1gubWF4aW11bSAtIGVudHJpZXNbMF0uZGF0YVNlcmllcy5heGlzWC52aWV3cG9ydE1pbmltdW0pICogTWF0aC5hYnMoZW50cmllc1swXS5kYXRhUG9pbnQueCAtIGVudHJpZXNbMF0uZGF0YVNlcmllcy5heGlzWC52aWV3cG9ydE1pbmltdW0pICsgLjUpIDw8IDA7XG4gICAgICAgICAgdG9vbFRpcEJvdHRvbSA9IGVudHJpZXNbMF0uZGF0YVNlcmllcy5heGlzWC5jb252ZXJzaW9uUGFyYW1ldGVycy5yZWZlcmVuY2UgKyBlbnRyaWVzWzBdLmRhdGFTZXJpZXMuYXhpc1guY29udmVyc2lvblBhcmFtZXRlcnMucGl4ZWxQZXJVbml0ICogKGVudHJpZXNbMF0uZGF0YVBvaW50LnggLSBlbnRyaWVzWzBdLmRhdGFTZXJpZXMuYXhpc1gudmlld3BvcnRNaW5pbXVtKSArIC41IDw8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdG9vbFRpcEJvdHRvbSA9IG1vdXNlWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvb2xUaXBCb3R0b20gPSAoLXRvb2xUaXBCb3R0b20gKyAxMCk7XG5cbiAgICAgICAgaWYgKHRvb2xUaXBCb3R0b20gKyB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyA1ID4gMCkge1xuICAgICAgICAgIHRvb2xUaXBCb3R0b20gLT0gdG9vbFRpcEJvdHRvbSArIHRoaXMuY29udGFpbmVyLmNsaWVudEhlaWdodCArIDUgLSAwXG4gICAgICAgIH1cblxuICAgICAgICB0b29sVGlwQm90dG9tICs9IFwicHhcIjtcblxuICAgICAgICAvL3RoaXMuY29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gdG9vbFRpcFJpZ2h0O1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gdG9vbFRpcExlZnQ7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLmJvdHRvbSA9IHRvb2xUaXBCb3R0b207XG5cbiAgICAgICAgaWYgKCF0aGlzLmFuaW1hdGlvbkVuYWJsZWQgfHwgcHJldmlvdXNseUhpZGRlbikge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZUFuaW1hdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aGlzLmVuYWJsZUFuaW1hdGlvbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oaWRlKGZhbHNlKTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIC8vaWYgKGlzRGVidWdNb2RlKVxuICAgIC8vICBjb25zb2xlLmxvZyhcInNlYXJjaFg6IFwiICsgeCArIFwiIHg6IFwiICsgc2VhcmNoUmVzdWx0LmRhdGFQb2ludC54ICsgXCI7IHk6IFwiICsgc2VhcmNoUmVzdWx0LmRhdGFQb2ludC55ICsgXCI7IGRpc3RhbmNlOiBcIiArIHNlYXJjaFJlc3VsdC5kaXN0YW5jZSArIFwiOyBzdGVwczogXCIgKyBzdGVwcyk7XG4gIH1cbn1cblxuXG5Ub29sVGlwLnByb3RvdHlwZS5oaWdobGlnaHRPYmplY3RzID0gZnVuY3Rpb24gKGVudHJpZXMpIHtcbiAgLy9pZiAoIXRoaXMuZW5hYmxlZClcbiAgLy9cdHJldHVybjtcblxuICAvL3RoaXMuY2hhcnQub3ZlcmxhaWRDYW52YXNDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2hhcnQub3ZlcmxhaWRDYW52YXMud2lkdGgsIHRoaXMuY2hhcnQub3ZlcmxhaWRDYW52YXMuaGVpZ2h0KTtcbiAgdmFyIG92ZXJsYWlkQ2FudmFzQ3R4ID0gdGhpcy5jaGFydC5vdmVybGFpZENhbnZhc0N0eDtcbiAgdGhpcy5jaGFydC5yZXNldE92ZXJsYXllZENhbnZhcygpO1xuXG4gIG92ZXJsYWlkQ2FudmFzQ3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5jaGFydC53aWR0aCwgdGhpcy5jaGFydC5oZWlnaHQpO1xuICBvdmVybGFpZENhbnZhc0N0eC5zYXZlKCk7XG5cblxuICB2YXIgcGxvdEFyZWEgPSB0aGlzLmNoYXJ0LnBsb3RBcmVhO1xuICB2YXIgb2Zmc2V0ID0gMDtcblxuICBvdmVybGFpZENhbnZhc0N0eC5yZWN0KHBsb3RBcmVhLngxLCBwbG90QXJlYS55MSwgcGxvdEFyZWEueDIgLSBwbG90QXJlYS54MSwgcGxvdEFyZWEueTIgLSBwbG90QXJlYS55MSk7XG4gIG92ZXJsYWlkQ2FudmFzQ3R4LmNsaXAoKTtcblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpXTtcblxuICAgIHZhciBldmVudE9iamVjdCA9IHRoaXMuY2hhcnQuX2V2ZW50TWFuYWdlci5vYmplY3RNYXBbZW50cnkuZGF0YVNlcmllcy5kYXRhUG9pbnRJZHNbZW50cnkuaW5kZXhdXTtcblxuICAgIGlmICghZXZlbnRPYmplY3QgfHwgIWV2ZW50T2JqZWN0Lm9iamVjdFR5cGUgfHwgZXZlbnRPYmplY3Qub2JqZWN0VHlwZSAhPT0gXCJkYXRhUG9pbnRcIilcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgdmFyIGRhdGFTZXJpZXMgPSB0aGlzLmNoYXJ0LmRhdGFbZXZlbnRPYmplY3QuZGF0YVNlcmllc0luZGV4XTtcbiAgICB2YXIgZGF0YVBvaW50ID0gZGF0YVNlcmllcy5kYXRhUG9pbnRzW2V2ZW50T2JqZWN0LmRhdGFQb2ludEluZGV4XTtcbiAgICB2YXIgaW5kZXggPSBldmVudE9iamVjdC5kYXRhUG9pbnRJbmRleDtcblxuICAgIGlmIChkYXRhUG9pbnQuaGlnaGxpZ2h0RW5hYmxlZCAhPT0gZmFsc2UgJiYgKGRhdGFTZXJpZXMuaGlnaGxpZ2h0RW5hYmxlZCA9PT0gdHJ1ZSB8fCBkYXRhUG9pbnQuaGlnaGxpZ2h0RW5hYmxlZCA9PT0gdHJ1ZSkpIHtcblxuICAgICAgaWYgKGRhdGFTZXJpZXMudHlwZSA9PT0gXCJsaW5lXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0ZXBMaW5lXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInNwbGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzY2F0dGVyXCJcbiAgICAgICAgfHwgZGF0YVNlcmllcy50eXBlID09PSBcImFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RlcEFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3BsaW5lQXJlYVwiXG4gICAgICAgIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQXJlYTEwMFwiXG4gICAgICAgIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJyYW5nZUFyZWFcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwicmFuZ2VTcGxpbmVBcmVhXCIpIHtcbiAgICAgICAgdmFyIG1hcmtlclByb3BzID0gZGF0YVNlcmllcy5nZXRNYXJrZXJQcm9wZXJ0aWVzKGluZGV4LCBldmVudE9iamVjdC54MSwgZXZlbnRPYmplY3QueTEsIHRoaXMuY2hhcnQub3ZlcmxhaWRDYW52YXNDdHgpO1xuICAgICAgICBtYXJrZXJQcm9wcy5zaXplID0gTWF0aC5tYXgobWFya2VyUHJvcHMuc2l6ZSAqIDEuNSA8PCAwLCAxMCk7XG5cbiAgICAgICAgbWFya2VyUHJvcHMuYm9yZGVyQ29sb3IgPSBtYXJrZXJQcm9wcy5ib3JkZXJDb2xvciB8fCBcIiNGRkZGRkZcIjtcbiAgICAgICAgbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzID0gbWFya2VyUHJvcHMuYm9yZGVyVGhpY2tuZXNzIHx8IE1hdGguY2VpbChtYXJrZXJQcm9wcy5zaXplICogLjEpO1xuXG4gICAgICAgIC8vb3ZlcmxhaWRDYW52YXNDdHguZ2xvYmFsQWxwaGEgPSAuODtcbiAgICAgICAgUmVuZGVySGVscGVyLmRyYXdNYXJrZXJzKFttYXJrZXJQcm9wc10pO1xuICAgICAgICAvL292ZXJsYWlkQ2FudmFzQ3R4Lmdsb2JhbEFscGhhID0gLjg7XG5cbiAgICAgICAgaWYgKHR5cGVvZiAoZXZlbnRPYmplY3QueTIpICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cbiAgICAgICAgICB2YXIgbWFya2VyUHJvcHMgPSBkYXRhU2VyaWVzLmdldE1hcmtlclByb3BlcnRpZXMoaW5kZXgsIGV2ZW50T2JqZWN0LngxLCBldmVudE9iamVjdC55MiwgdGhpcy5jaGFydC5vdmVybGFpZENhbnZhc0N0eCk7XG4gICAgICAgICAgbWFya2VyUHJvcHMuc2l6ZSA9IE1hdGgubWF4KG1hcmtlclByb3BzLnNpemUgKiAxLjUgPDwgMCwgMTApO1xuXG4gICAgICAgICAgbWFya2VyUHJvcHMuYm9yZGVyQ29sb3IgPSBtYXJrZXJQcm9wcy5ib3JkZXJDb2xvciB8fCBcIiNGRkZGRkZcIjtcbiAgICAgICAgICBtYXJrZXJQcm9wcy5ib3JkZXJUaGlja25lc3MgPSBtYXJrZXJQcm9wcy5ib3JkZXJUaGlja25lc3MgfHwgTWF0aC5jZWlsKG1hcmtlclByb3BzLnNpemUgKiAuMSk7XG5cbiAgICAgICAgICAvL292ZXJsYWlkQ2FudmFzQ3R4Lmdsb2JhbEFscGhhID0gLjg7XG4gICAgICAgICAgUmVuZGVySGVscGVyLmRyYXdNYXJrZXJzKFttYXJrZXJQcm9wc10pO1xuICAgICAgICAgIC8vb3ZlcmxhaWRDYW52YXNDdHguZ2xvYmFsQWxwaGEgPSAuODtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwiYnViYmxlXCIpIHtcbiAgICAgICAgdmFyIG1hcmtlclByb3BzID0gZGF0YVNlcmllcy5nZXRNYXJrZXJQcm9wZXJ0aWVzKGluZGV4LCBldmVudE9iamVjdC54MSwgZXZlbnRPYmplY3QueTEsIHRoaXMuY2hhcnQub3ZlcmxhaWRDYW52YXNDdHgpO1xuICAgICAgICBtYXJrZXJQcm9wcy5zaXplID0gZXZlbnRPYmplY3Quc2l6ZTtcbiAgICAgICAgbWFya2VyUHJvcHMuY29sb3IgPSBcIndoaXRlXCI7XG4gICAgICAgIG1hcmtlclByb3BzLmJvcmRlckNvbG9yID0gXCJ3aGl0ZVwiO1xuICAgICAgICAvL21hcmtlclByb3BzLmJvcmRlclRoaWNrbmVzcyA9IDI7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4Lmdsb2JhbEFscGhhID0gLjM7XG4gICAgICAgIFJlbmRlckhlbHBlci5kcmF3TWFya2VycyhbbWFya2VyUHJvcHNdKTtcbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHguZ2xvYmFsQWxwaGEgPSAxO1xuICAgICAgfSBlbHNlIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwiY29sdW1uXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRDb2x1bW5cIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZENvbHVtbjEwMFwiXG4gICAgICAgIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJiYXJcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwicmFuZ2VCYXJcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEJhclwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQmFyMTAwXCJcbiAgICAgICAgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInJhbmdlQ29sdW1uXCIpIHtcbiAgICAgICAgZHJhd1JlY3Qob3ZlcmxhaWRDYW52YXNDdHgsIGV2ZW50T2JqZWN0LngxLCBldmVudE9iamVjdC55MSwgZXZlbnRPYmplY3QueDIsIGV2ZW50T2JqZWN0LnkyLCBcIndoaXRlXCIsIDAsIG51bGwsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAuMyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwicGllXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcImRvdWdobnV0XCIpIHtcbiAgICAgICAgZHJhd1NlZ21lbnQob3ZlcmxhaWRDYW52YXNDdHgsIGV2ZW50T2JqZWN0LmNlbnRlciwgZXZlbnRPYmplY3QucmFkaXVzLCBcIndoaXRlXCIsIGRhdGFTZXJpZXMudHlwZSwgZXZlbnRPYmplY3Quc3RhcnRBbmdsZSwgZXZlbnRPYmplY3QuZW5kQW5nbGUsIC4zLCBldmVudE9iamVjdC5wZXJjZW50SW5uZXJSYWRpdXMpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwiY2FuZGxlc3RpY2tcIikge1xuXG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHguc3Ryb2tlU3R5bGUgPSBldmVudE9iamVjdC5jb2xvcjtcbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHgubGluZVdpZHRoID0gZXZlbnRPYmplY3QuYm9yZGVyVGhpY2tuZXNzICogMjtcbiAgICAgICAgb2Zmc2V0ID0gKG92ZXJsYWlkQ2FudmFzQ3R4LmxpbmVXaWR0aCkgJSAyID09PSAwID8gMCA6IC41O1xuXG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5tb3ZlVG8oZXZlbnRPYmplY3QueDMgLSBvZmZzZXQsIGV2ZW50T2JqZWN0LnkyKTtcbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHgubGluZVRvKGV2ZW50T2JqZWN0LngzIC0gb2Zmc2V0LCBNYXRoLm1pbihldmVudE9iamVjdC55MSwgZXZlbnRPYmplY3QueTQpKTtcbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHguc3Ryb2tlKCk7XG5cbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4Lm1vdmVUbyhldmVudE9iamVjdC54MyAtIG9mZnNldCwgTWF0aC5tYXgoZXZlbnRPYmplY3QueTEsIGV2ZW50T2JqZWN0Lnk0KSk7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4LmxpbmVUbyhldmVudE9iamVjdC54MyAtIG9mZnNldCwgZXZlbnRPYmplY3QueTMpO1xuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5zdHJva2UoKTtcblxuICAgICAgICBkcmF3UmVjdChvdmVybGFpZENhbnZhc0N0eCwgZXZlbnRPYmplY3QueDEsIE1hdGgubWluKGV2ZW50T2JqZWN0LnkxLCBldmVudE9iamVjdC55NCksIGV2ZW50T2JqZWN0LngyLCBNYXRoLm1heChldmVudE9iamVjdC55MSwgZXZlbnRPYmplY3QueTQpLCBcInRyYW5zcGFyZW50XCIsIGV2ZW50T2JqZWN0LmJvcmRlclRoaWNrbmVzcyAqIDIsIGV2ZW50T2JqZWN0LmNvbG9yLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4Lmdsb2JhbEFscGhhID0gMTtcblxuICAgICAgfSBlbHNlIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwib2hsY1wiKSB7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4Lmdsb2JhbEFscGhhID0gMTtcblxuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5zdHJva2VTdHlsZSA9IGV2ZW50T2JqZWN0LmNvbG9yO1xuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5saW5lV2lkdGggPSBldmVudE9iamVjdC5ib3JkZXJUaGlja25lc3MgKiAyO1xuXG4gICAgICAgIG9mZnNldCA9IChvdmVybGFpZENhbnZhc0N0eC5saW5lV2lkdGgpICUgMiA9PT0gMCA/IDAgOiAuNTtcblxuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHgubW92ZVRvKGV2ZW50T2JqZWN0LngzIC0gb2Zmc2V0LCBldmVudE9iamVjdC55Mik7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4LmxpbmVUbyhldmVudE9iamVjdC54MyAtIG9mZnNldCwgZXZlbnRPYmplY3QueTMpO1xuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5zdHJva2UoKTtcblxuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHgubW92ZVRvKGV2ZW50T2JqZWN0LngzLCBldmVudE9iamVjdC55MSk7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4LmxpbmVUbyhldmVudE9iamVjdC54MSwgZXZlbnRPYmplY3QueTEpO1xuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5zdHJva2UoKTtcblxuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgb3ZlcmxhaWRDYW52YXNDdHgubW92ZVRvKGV2ZW50T2JqZWN0LngzLCBldmVudE9iamVjdC55NCk7XG4gICAgICAgIG92ZXJsYWlkQ2FudmFzQ3R4LmxpbmVUbyhldmVudE9iamVjdC54MiwgZXZlbnRPYmplY3QueTQpO1xuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5zdHJva2UoKTtcblxuICAgICAgICBvdmVybGFpZENhbnZhc0N0eC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvdmVybGFpZENhbnZhc0N0eC5yZXN0b3JlKCk7XG4gIG92ZXJsYWlkQ2FudmFzQ3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgb3ZlcmxhaWRDYW52YXNDdHguYmVnaW5QYXRoKCk7XG5cbiAgcmV0dXJuO1xufVxuXG5Ub29sVGlwLnByb3RvdHlwZS5nZXRUb29sVGlwSW5uZXJIVE1MID0gZnVuY3Rpb24gKGUpIHtcbiAgdmFyIGVudHJpZXMgPSBlLmVudHJpZXM7XG4gIHZhciB0b29sVGlwSW5uZXJIdG1sID0gbnVsbDtcbiAgdmFyIGRhdGFTZXJpZXMgPSBudWxsO1xuICB2YXIgZGF0YVBvaW50ID0gbnVsbDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGNvbG9yID0gbnVsbDtcbiAgdmFyIHRvb2xUaXBDb250ZW50ID0gXCJcIjtcblxuICB2YXIgaXNUb29sVGlwRGVmaW5lZEluRGF0YSA9IHRydWU7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChlbnRyaWVzW2ldLmRhdGFTZXJpZXMudG9vbFRpcENvbnRlbnQgfHwgZW50cmllc1tpXS5kYXRhUG9pbnQudG9vbFRpcENvbnRlbnQpIHtcbiAgICAgIGlzVG9vbFRpcERlZmluZWRJbkRhdGEgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc1Rvb2xUaXBEZWZpbmVkSW5EYXRhICYmICgodGhpcy5jb250ZW50ICYmIHR5cGVvZiAodGhpcy5jb250ZW50KSA9PT0gXCJmdW5jdGlvblwiKSB8fCB0aGlzLmNvbnRlbnRGb3JtYXR0ZXIpKSB7XG5cbiAgICB2YXIgcGFyYW0gPSB7XG4gICAgICBjaGFydDogdGhpcy5jaGFydCwgdG9vbFRpcDogdGhpcy5fb3B0aW9ucywgZW50cmllczogZW50cmllc1xuICAgIH07XG4gICAgdG9vbFRpcElubmVySHRtbCA9IHRoaXMuY29udGVudEZvcm1hdHRlciA/IHRoaXMuY29udGVudEZvcm1hdHRlcihwYXJhbSkgOiB0aGlzLmNvbnRlbnQocGFyYW0pO1xuXG4gIH0gZWxzZSB7XG5cbiAgICBpZiAodGhpcy5zaGFyZWQgJiYgdGhpcy5jaGFydC5wbG90SW5mby5heGlzUGxhY2VtZW50ICE9PSBcIm5vbmVcIikge1xuXG4gICAgICB2YXIgdG9vbFRpcElubmVySHRtbFByZWZpeCA9IFwiXCI7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBkYXRhU2VyaWVzID0gZW50cmllc1tpXS5kYXRhU2VyaWVzO1xuICAgICAgICBkYXRhUG9pbnQgPSBlbnRyaWVzW2ldLmRhdGFQb2ludDtcbiAgICAgICAgaW5kZXggPSBlbnRyaWVzW2ldLmluZGV4O1xuXG4gICAgICAgIHRvb2xUaXBDb250ZW50ID0gXCJcIjtcblxuICAgICAgICBpZiAoaSA9PT0gMCAmJiBpc1Rvb2xUaXBEZWZpbmVkSW5EYXRhICYmICF0aGlzLmNvbnRlbnQpIHtcbiAgICAgICAgICB0b29sVGlwSW5uZXJIdG1sUHJlZml4ICs9IHR5cGVvZiAodGhpcy5jaGFydC5heGlzWC5sYWJlbHNbZGF0YVBvaW50LnhdKSAhPT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMuY2hhcnQuYXhpc1gubGFiZWxzW2RhdGFQb2ludC54XSA6IFwie3h9XCI7XG4gICAgICAgICAgdG9vbFRpcElubmVySHRtbFByZWZpeCArPSBcIjwvYnI+XCI7XG4gICAgICAgICAgdG9vbFRpcElubmVySHRtbFByZWZpeCA9IHRoaXMuY2hhcnQucmVwbGFjZUtleXdvcmRzV2l0aFZhbHVlKHRvb2xUaXBJbm5lckh0bWxQcmVmaXgsIGRhdGFQb2ludCwgZGF0YVNlcmllcywgaW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9BbGxvd3MgZGlzYWJsaW5nIG9mIHRvb2xUaXAgZm9yIGluZGl2aWR1YWwgZGF0YVBvaW50cy9kYXRhU2VyaWVzXG4gICAgICAgIGlmIChkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgPT09IG51bGwgfHwgKHR5cGVvZiAoZGF0YVBvaW50LnRvb2xUaXBDb250ZW50KSA9PT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhU2VyaWVzLl9vcHRpb25zLnRvb2xUaXBDb250ZW50ID09PSBudWxsKSlcbiAgICAgICAgICBjb250aW51ZTtcblxuXG4gICAgICAgIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwibGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGVwTGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzcGxpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwiYXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGVwQXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzcGxpbmVBcmVhXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcImNvbHVtblwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJiYXJcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic2NhdHRlclwiXG4gICAgICAgIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQ29sdW1uXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRDb2x1bW4xMDBcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEJhclwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQmFyMTAwXCJcbiAgICAgICAgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRBcmVhXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRBcmVhMTAwXCIpIHtcbiAgICAgICAgICB0b29sVGlwQ29udGVudCArPSBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgPyBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgOiBkYXRhU2VyaWVzLnRvb2xUaXBDb250ZW50ID8gZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA6IHRoaXMuY29udGVudCAmJiB0eXBlb2YgKHRoaXMuY29udGVudCkgIT09IFwiZnVuY3Rpb25cIiA/IHRoaXMuY29udGVudCA6IFwiPHNwYW4gc3R5bGU9J1xcXCInY29sb3I6e2NvbG9yfTsnXFxcIic+e25hbWV9Ojwvc3Bhbj4mbmJzcDsmbmJzcDt7eX1cIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwiYnViYmxlXCIpIHtcbiAgICAgICAgICB0b29sVGlwQ29udGVudCArPSBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgPyBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgOiBkYXRhU2VyaWVzLnRvb2xUaXBDb250ZW50ID8gZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA6IHRoaXMuY29udGVudCAmJiB0eXBlb2YgKHRoaXMuY29udGVudCkgIT09IFwiZnVuY3Rpb25cIiA/IHRoaXMuY29udGVudCA6IFwiPHNwYW4gc3R5bGU9J1xcXCInY29sb3I6e2NvbG9yfTsnXFxcIic+e25hbWV9Ojwvc3Bhbj4mbmJzcDsmbmJzcDt7eX0sICZuYnNwOyZuYnNwO3t6fVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFTZXJpZXMudHlwZSA9PT0gXCJwaWVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwiZG91Z2hudXRcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwiZnVubmVsXCIpIHtcbiAgICAgICAgICB0b29sVGlwQ29udGVudCArPSBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgPyBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgOiBkYXRhU2VyaWVzLnRvb2xUaXBDb250ZW50ID8gZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA6IHRoaXMuY29udGVudCAmJiB0eXBlb2YgKHRoaXMuY29udGVudCkgIT09IFwiZnVuY3Rpb25cIiA/IHRoaXMuY29udGVudCA6IFwiJm5ic3A7Jm5ic3A7e3l9XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YVNlcmllcy50eXBlID09PSBcInJhbmdlQ29sdW1uXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInJhbmdlQmFyXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInJhbmdlQXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJyYW5nZVNwbGluZUFyZWFcIikge1xuICAgICAgICAgIHRvb2xUaXBDb250ZW50ICs9IGRhdGFQb2ludC50b29sVGlwQ29udGVudCA/IGRhdGFQb2ludC50b29sVGlwQ29udGVudCA6IGRhdGFTZXJpZXMudG9vbFRpcENvbnRlbnQgPyBkYXRhU2VyaWVzLnRvb2xUaXBDb250ZW50IDogdGhpcy5jb250ZW50ICYmIHR5cGVvZiAodGhpcy5jb250ZW50KSAhPT0gXCJmdW5jdGlvblwiID8gdGhpcy5jb250ZW50IDogXCI8c3BhbiBzdHlsZT0nXFxcIidjb2xvcjp7Y29sb3J9OydcXFwiJz57bmFtZX06PC9zcGFuPiZuYnNwOyZuYnNwO3t5WzBdfSwmbmJzcDt7eVsxXX1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwiY2FuZGxlc3RpY2tcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwib2hsY1wiKSB7XG4gICAgICAgICAgdG9vbFRpcENvbnRlbnQgKz0gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50ID8gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50IDogZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA/IGRhdGFTZXJpZXMudG9vbFRpcENvbnRlbnQgOiB0aGlzLmNvbnRlbnQgJiYgdHlwZW9mICh0aGlzLmNvbnRlbnQpICE9PSBcImZ1bmN0aW9uXCIgPyB0aGlzLmNvbnRlbnQgOiBcIjxzcGFuIHN0eWxlPSdcXFwiJ2NvbG9yOntjb2xvcn07J1xcXCInPntuYW1lfTo8L3NwYW4+XCJcbiAgICAgICAgICAgICAgICAgICsgXCI8YnIvPk9wZW46ICZuYnNwOyZuYnNwO3t5WzBdfVwiXG4gICAgICAgICAgICAgICAgICArIFwiPGJyLz5IaWdoOiAmbmJzcDsmbmJzcDsmbmJzcDt7eVsxXX1cIlxuICAgICAgICAgICAgICAgICAgKyBcIjxici8+TG93OiZuYnNwOyZuYnNwOyZuYnNwO3t5WzJdfVwiXG4gICAgICAgICAgICAgICAgICArIFwiPGJyLz5DbG9zZTogJm5ic3A7Jm5ic3A7e3lbM119XCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9vbFRpcElubmVySHRtbCA9PT0gbnVsbClcbiAgICAgICAgICB0b29sVGlwSW5uZXJIdG1sID0gXCJcIjtcblxuXG4gICAgICAgIGlmICh0aGlzLnJldmVyc2VkID09PSB0cnVlKSB7XG5cbiAgICAgICAgICB0b29sVGlwSW5uZXJIdG1sID0gdGhpcy5jaGFydC5yZXBsYWNlS2V5d29yZHNXaXRoVmFsdWUodG9vbFRpcENvbnRlbnQsIGRhdGFQb2ludCwgZGF0YVNlcmllcywgaW5kZXgpICsgdG9vbFRpcElubmVySHRtbDtcblxuICAgICAgICAgIGlmIChpIDwgZW50cmllcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgdG9vbFRpcElubmVySHRtbCA9IFwiPC9icj5cIiArIHRvb2xUaXBJbm5lckh0bWw7XG5cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgIHRvb2xUaXBJbm5lckh0bWwgKz0gdGhpcy5jaGFydC5yZXBsYWNlS2V5d29yZHNXaXRoVmFsdWUodG9vbFRpcENvbnRlbnQsIGRhdGFQb2ludCwgZGF0YVNlcmllcywgaW5kZXgpO1xuXG4gICAgICAgICAgaWYgKGkgPCBlbnRyaWVzLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICB0b29sVGlwSW5uZXJIdG1sICs9IFwiPC9icj5cIjtcblxuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgaWYgKHRvb2xUaXBJbm5lckh0bWwgIT09IG51bGwpXG4gICAgICAgIHRvb2xUaXBJbm5lckh0bWwgPSB0b29sVGlwSW5uZXJIdG1sUHJlZml4ICsgdG9vbFRpcElubmVySHRtbDtcblxuICAgIH0gZWxzZSB7XG5cbiAgICAgIGRhdGFTZXJpZXMgPSBlbnRyaWVzWzBdLmRhdGFTZXJpZXM7XG4gICAgICBkYXRhUG9pbnQgPSBlbnRyaWVzWzBdLmRhdGFQb2ludDtcbiAgICAgIGluZGV4ID0gZW50cmllc1swXS5pbmRleDtcblxuICAgICAgLy9BbGxvd3MgZGlzYWJsaW5nIG9mIHRvb2xUaXAgZm9yIGluZGl2aWR1YWwgZGF0YVBvaW50cy9kYXRhU2VyaWVzXG4gICAgICBpZiAoZGF0YVBvaW50LnRvb2xUaXBDb250ZW50ID09PSBudWxsIHx8ICh0eXBlb2YgKGRhdGFQb2ludC50b29sVGlwQ29udGVudCkgPT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YVNlcmllcy5fb3B0aW9ucy50b29sVGlwQ29udGVudCA9PT0gbnVsbCkpXG4gICAgICAgIHJldHVybiBudWxsO1xuXG5cbiAgICAgIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwibGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGVwTGluZVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzcGxpbmVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwiYXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGVwQXJlYVwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzcGxpbmVBcmVhXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcImNvbHVtblwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJiYXJcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic2NhdHRlclwiXG4gICAgICAgIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQ29sdW1uXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRDb2x1bW4xMDBcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwic3RhY2tlZEJhclwiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJzdGFja2VkQmFyMTAwXCJcbiAgICAgICAgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRBcmVhXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInN0YWNrZWRBcmVhMTAwXCIpIHtcbiAgICAgICAgdG9vbFRpcENvbnRlbnQgPSBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgPyBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgOiBkYXRhU2VyaWVzLnRvb2xUaXBDb250ZW50ID8gZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA6IHRoaXMuY29udGVudCAmJiB0eXBlb2YgKHRoaXMuY29udGVudCkgIT09IFwiZnVuY3Rpb25cIiA/IHRoaXMuY29udGVudCA6IFwiPHNwYW4gc3R5bGU9J1xcXCInY29sb3I6e2NvbG9yfTsnXFxcIic+XCIgKyAoZGF0YVBvaW50LmxhYmVsID8gXCJ7bGFiZWx9XCIgOiBcInt4fVwiKSArIFwiIDo8L3NwYW4+Jm5ic3A7Jm5ic3A7e3l9XCI7XG4gICAgICB9IGVsc2UgaWYgKGRhdGFTZXJpZXMudHlwZSA9PT0gXCJidWJibGVcIikge1xuICAgICAgICB0b29sVGlwQ29udGVudCA9IGRhdGFQb2ludC50b29sVGlwQ29udGVudCA/IGRhdGFQb2ludC50b29sVGlwQ29udGVudCA6IGRhdGFTZXJpZXMudG9vbFRpcENvbnRlbnQgPyBkYXRhU2VyaWVzLnRvb2xUaXBDb250ZW50IDogdGhpcy5jb250ZW50ICYmIHR5cGVvZiAodGhpcy5jb250ZW50KSAhPT0gXCJmdW5jdGlvblwiID8gdGhpcy5jb250ZW50IDogXCI8c3BhbiBzdHlsZT0nXFxcIidjb2xvcjp7Y29sb3J9OydcXFwiJz5cIiArIChkYXRhUG9pbnQubGFiZWwgPyBcIntsYWJlbH1cIiA6IFwie3h9XCIpICsgXCI6PC9zcGFuPiZuYnNwOyZuYnNwO3t5fSwgJm5ic3A7Jm5ic3A7e3p9XCI7XG4gICAgICB9IGVsc2UgaWYgKGRhdGFTZXJpZXMudHlwZSA9PT0gXCJwaWVcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwiZG91Z2hudXRcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwiZnVubmVsXCIpIHtcbiAgICAgICAgdG9vbFRpcENvbnRlbnQgPSBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgPyBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgOiBkYXRhU2VyaWVzLnRvb2xUaXBDb250ZW50ID8gZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA6IHRoaXMuY29udGVudCAmJiB0eXBlb2YgKHRoaXMuY29udGVudCkgIT09IFwiZnVuY3Rpb25cIiA/IHRoaXMuY29udGVudCA6IChkYXRhUG9pbnQubmFtZSA/IFwie25hbWV9OiZuYnNwOyZuYnNwO1wiIDogZGF0YVBvaW50LmxhYmVsID8gXCJ7bGFiZWx9OiZuYnNwOyZuYnNwO1wiIDogXCJcIikgKyBcInt5fVwiO1xuICAgICAgfSBlbHNlIGlmIChkYXRhU2VyaWVzLnR5cGUgPT09IFwicmFuZ2VDb2x1bW5cIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwicmFuZ2VCYXJcIiB8fCBkYXRhU2VyaWVzLnR5cGUgPT09IFwicmFuZ2VBcmVhXCIgfHwgZGF0YVNlcmllcy50eXBlID09PSBcInJhbmdlU3BsaW5lQXJlYVwiKSB7XG4gICAgICAgIHRvb2xUaXBDb250ZW50ID0gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50ID8gZGF0YVBvaW50LnRvb2xUaXBDb250ZW50IDogZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA/IGRhdGFTZXJpZXMudG9vbFRpcENvbnRlbnQgOiB0aGlzLmNvbnRlbnQgJiYgdHlwZW9mICh0aGlzLmNvbnRlbnQpICE9PSBcImZ1bmN0aW9uXCIgPyB0aGlzLmNvbnRlbnQgOiBcIjxzcGFuIHN0eWxlPSdcXFwiJ2NvbG9yOntjb2xvcn07J1xcXCInPlwiICsgKGRhdGFQb2ludC5sYWJlbCA/IFwie2xhYmVsfVwiIDogXCJ7eH1cIikgKyBcIiA6PC9zcGFuPiZuYnNwOyZuYnNwO3t5WzBdfSwgJm5ic3A7e3lbMV19XCI7XG4gICAgICB9IGVsc2UgaWYgKGRhdGFTZXJpZXMudHlwZSA9PT0gXCJjYW5kbGVzdGlja1wiIHx8IGRhdGFTZXJpZXMudHlwZSA9PT0gXCJvaGxjXCIpIHtcbiAgICAgICAgdG9vbFRpcENvbnRlbnQgPSBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgPyBkYXRhUG9pbnQudG9vbFRpcENvbnRlbnQgOiBkYXRhU2VyaWVzLnRvb2xUaXBDb250ZW50ID8gZGF0YVNlcmllcy50b29sVGlwQ29udGVudCA6IHRoaXMuY29udGVudCAmJiB0eXBlb2YgKHRoaXMuY29udGVudCkgIT09IFwiZnVuY3Rpb25cIiA/IHRoaXMuY29udGVudCA6IFwiPHNwYW4gc3R5bGU9J1xcXCInY29sb3I6e2NvbG9yfTsnXFxcIic+XCIgKyAoZGF0YVBvaW50LmxhYmVsID8gXCJ7bGFiZWx9XCIgOiBcInt4fVwiKSArIFwiPC9zcGFuPlwiXG4gICAgICAgICAgKyBcIjxici8+T3BlbjogJm5ic3A7Jm5ic3A7e3lbMF19XCJcbiAgICAgICAgICArIFwiPGJyLz5IaWdoOiAmbmJzcDsmbmJzcDsmbmJzcDt7eVsxXX1cIlxuICAgICAgICAgICsgXCI8YnIvPkxvdzogJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7e3lbMl19XCJcbiAgICAgICAgICArIFwiPGJyLz5DbG9zZTogJm5ic3A7Jm5ic3A7e3lbM119XCI7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b29sVGlwSW5uZXJIdG1sID09PSBudWxsKVxuICAgICAgICB0b29sVGlwSW5uZXJIdG1sID0gXCJcIjtcblxuICAgICAgdG9vbFRpcElubmVySHRtbCArPSB0aGlzLmNoYXJ0LnJlcGxhY2VLZXl3b3Jkc1dpdGhWYWx1ZSh0b29sVGlwQ29udGVudCwgZGF0YVBvaW50LCBkYXRhU2VyaWVzLCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRvb2xUaXBJbm5lckh0bWw7XG59XG5cblRvb2xUaXAucHJvdG90eXBlLmVuYWJsZUFuaW1hdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuY29udGFpbmVyLnN0eWxlLldlYmtpdFRyYW5zaXRpb24pXG4gICAgcmV0dXJuO1xuXG4gIHRoaXMuY29udGFpbmVyLnN0eWxlLldlYmtpdFRyYW5zaXRpb24gPSBcImxlZnQgLjJzIGVhc2Utb3V0LCBib3R0b20gLjJzIGVhc2Utb3V0XCI7XG4gIHRoaXMuY29udGFpbmVyLnN0eWxlLk1velRyYW5zaXRpb24gPSBcImxlZnQgLjJzIGVhc2Utb3V0LCBib3R0b20gLjJzIGVhc2Utb3V0XCI7XG4gIHRoaXMuY29udGFpbmVyLnN0eWxlLk1zVHJhbnNpdGlvbiA9IFwibGVmdCAuMnMgZWFzZS1vdXQsIGJvdHRvbSAuMnMgZWFzZS1vdXRcIjtcbiAgdGhpcy5jb250YWluZXIuc3R5bGUudHJhbnNpdGlvbiA9IFwibGVmdCAuMnMgZWFzZS1vdXQsIGJvdHRvbSAuMnMgZWFzZS1vdXRcIjtcbn1cblxuVG9vbFRpcC5wcm90b3R5cGUuZGlzYWJsZUFuaW1hdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLmNvbnRhaW5lci5zdHlsZS5XZWJraXRUcmFuc2l0aW9uKVxuICAgIHJldHVybjtcblxuICB0aGlzLmNvbnRhaW5lci5zdHlsZS5XZWJraXRUcmFuc2l0aW9uID0gXCJcIjtcbiAgdGhpcy5jb250YWluZXIuc3R5bGUuTW96VHJhbnNpdGlvbiA9IFwiXCI7XG4gIHRoaXMuY29udGFpbmVyLnN0eWxlLk1zVHJhbnNpdGlvbiA9IFwiXCI7XG4gIHRoaXMuY29udGFpbmVyLnN0eWxlLnRyYW5zaXRpb24gPSBcIlwiO1xufVxuXG5Ub29sVGlwLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24gKHJlc2V0T3ZlcmxheWVkQ2FudmFzKSB7XG4gIGlmICghdGhpcy5lbmFibGVkKVxuICAgIHJldHVybjtcblxuICByZXNldE92ZXJsYXllZENhbnZhcyA9IHR5cGVvZiAocmVzZXRPdmVybGF5ZWRDYW52YXMpID09PSBcInVuZGVmaW5lZFwiID8gdHJ1ZSA6IHJlc2V0T3ZlcmxheWVkQ2FudmFzO1xuXG4gIHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgdGhpcy5jdXJyZW50U2VyaWVzSW5kZXggPSAtMTtcbiAgdGhpcy5fcHJldlggPSBOYU47XG4gIHRoaXMuX3ByZXZZID0gTmFOO1xuICAvL3RoaXMuY2hhcnQub3ZlcmxhaWRDYW52YXNDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2hhcnQub3ZlcmxhaWRDYW52YXMud2lkdGgsIHRoaXMuY2hhcnQub3ZlcmxhaWRDYW52YXMuaGVpZ2h0KTtcbiAgaWYgKHJlc2V0T3ZlcmxheWVkQ2FudmFzKVxuICAgIHRoaXMuY2hhcnQucmVzZXRPdmVybGF5ZWRDYW52YXMoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9vbFRpcDtcbiIsIlxuZnVuY3Rpb24geVNjYWxlQW5pbWF0aW9uKGZyYWN0aW9uQ29tcGxldGUsIGFuaW1hdGlvbkluZm8pIHtcblxuICBpZiAoZnJhY3Rpb25Db21wbGV0ZSA9PT0gMCkgcmV0dXJuO1xuXG4gIGNvbnN0IGN0eCA9IGFuaW1hdGlvbkluZm8uZGVzdDtcbiAgY29uc3Qgc291cmNlQ2FudmFzID0gYW5pbWF0aW9uSW5mby5zb3VyY2UuY2FudmFzO1xuICBjb25zdCBiYXNlID0gYW5pbWF0aW9uSW5mby5hbmltYXRpb25CYXNlO1xuXG4gIGNvbnN0IG9mZnNldFkgPSAoYmFzZSAtIGJhc2UgKiBmcmFjdGlvbkNvbXBsZXRlKTtcblxuICBjdHguZHJhd0ltYWdlKHNvdXJjZUNhbnZhcywgMCwgMCwgc291cmNlQ2FudmFzLndpZHRoLCBzb3VyY2VDYW52YXMuaGVpZ2h0LCAwLCBvZmZzZXRZLFxuICAgICBjdHguY2FudmFzLndpZHRoIC8gZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbywgZnJhY3Rpb25Db21wbGV0ZSAqIGN0eC5jYW52YXMuaGVpZ2h0IC8gZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbyk7XG59XG5cbmZ1bmN0aW9uIHhTY2FsZUFuaW1hdGlvbihmcmFjdGlvbkNvbXBsZXRlLCBhbmltYXRpb25JbmZvKSB7XG5cbiAgaWYgKGZyYWN0aW9uQ29tcGxldGUgPT09IDApIHJldHVybjtcblxuICBjb25zdCBjdHggPSBhbmltYXRpb25JbmZvLmRlc3Q7XG4gIGNvbnN0IHNvdXJjZUNhbnZhcyA9IGFuaW1hdGlvbkluZm8uc291cmNlLmNhbnZhcztcbiAgY29uc3QgYmFzZSA9IGFuaW1hdGlvbkluZm8uYW5pbWF0aW9uQmFzZTtcblxuICBjb25zdCBvZmZzZXRYID0gKGJhc2UgLSBiYXNlICogZnJhY3Rpb25Db21wbGV0ZSk7XG5cbiAgY3R4LmRyYXdJbWFnZShzb3VyY2VDYW52YXMsIDAsIDAsIHNvdXJjZUNhbnZhcy53aWR0aCwgc291cmNlQ2FudmFzLmhlaWdodCwgb2Zmc2V0WCwgMCxcbiAgICBmcmFjdGlvbkNvbXBsZXRlICogY3R4LmNhbnZhcy53aWR0aCAvIGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW8sIGN0eC5jYW52YXMuaGVpZ2h0IC8gZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbyk7XG59XG5cbmZ1bmN0aW9uIHhDbGlwQW5pbWF0aW9uKGZyYWN0aW9uQ29tcGxldGUsIGFuaW1hdGlvbkluZm8pIHtcblxuICBpZiAoZnJhY3Rpb25Db21wbGV0ZSA9PT0gMCkgcmV0dXJuO1xuXG4gIGNvbnN0IGN0eCA9IGFuaW1hdGlvbkluZm8uZGVzdDtcbiAgY29uc3Qgc291cmNlQ2FudmFzID0gYW5pbWF0aW9uSW5mby5zb3VyY2UuY2FudmFzO1xuXG4gIGN0eC5zYXZlKCk7XG5cbiAgaWYgKGZyYWN0aW9uQ29tcGxldGUgPiAwKVxuICAgIGN0eC5kcmF3SW1hZ2Uoc291cmNlQ2FudmFzLCAwLCAwLCBzb3VyY2VDYW52YXMud2lkdGggKiBmcmFjdGlvbkNvbXBsZXRlLCBzb3VyY2VDYW52YXMuaGVpZ2h0LCAwLCAwLFxuICAgICAgc291cmNlQ2FudmFzLndpZHRoICogZnJhY3Rpb25Db21wbGV0ZSAvIGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW8sIHNvdXJjZUNhbnZhcy5oZWlnaHQgLyBkZXZpY2VQaXhlbEJhY2tpbmdTdG9yZVJhdGlvKTtcblxuICBjdHgucmVzdG9yZSgpO1xufVxuXG5mdW5jdGlvbiBmYWRlSW5BbmltYXRpb24oZnJhY3Rpb25Db21wbGV0ZSwgYW5pbWF0aW9uSW5mbykge1xuXG4gIGlmIChmcmFjdGlvbkNvbXBsZXRlID09PSAwKSByZXR1cm47XG5cbiAgY29uc3QgY3R4ID0gYW5pbWF0aW9uSW5mby5kZXN0O1xuICBjb25zdCBzb3VyY2VDYW52YXMgPSBhbmltYXRpb25JbmZvLnNvdXJjZS5jYW52YXM7XG5cbiAgY3R4LnNhdmUoKTtcblxuICBjdHguZ2xvYmFsQWxwaGEgPSBmcmFjdGlvbkNvbXBsZXRlO1xuXG4gIGN0eC5kcmF3SW1hZ2Uoc291cmNlQ2FudmFzLCAwLCAwLCBzb3VyY2VDYW52YXMud2lkdGgsIHNvdXJjZUNhbnZhcy5oZWlnaHQsIDAsIDAsXG4gICAgY3R4LmNhbnZhcy53aWR0aCAvIGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW8sIGN0eC5jYW52YXMuaGVpZ2h0IC8gZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbyk7XG5cbiAgY3R4LnJlc3RvcmUoKTtcblxufVxuXG5jb25zdCBlYXNpbmcgPSB7XG5cbiAgbGluZWFyKHQsIGIsIGMsIGQpIHtcbiAgICByZXR1cm4gYyAqIHQgLyBkICsgYjtcbiAgfSxcblxuICBlYXNlT3V0UXVhZCh0LCBiLCBjLCBkKSB7XG4gICAgcmV0dXJuIC1jICogKHQgLz0gZCkgKiAodCAtIDIpICsgYjtcbiAgfSxcblxuICBlYXNlT3V0UXVhcnQgKHQsIGIsIGMsIGQpIHtcbiAgICByZXR1cm4gLWMgKiAoKHQgPSB0IC8gZCAtIDEpICogdCAqIHQgKiB0IC0gMSkgKyBiO1xuICB9LFxuXG4gIGVhc2VJblF1YWQodCwgYiwgYywgZCkge1xuICAgIHJldHVybiBjICogKHQgLz0gZCkgKiB0ICsgYjtcbiAgfSxcblxuICBlYXNlSW5RdWFydCh0LCBiLCBjLCBkKSB7XG4gICAgcmV0dXJuIGMgKiAodCAvPSBkKSAqIHQgKiB0ICogdCArIGI7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuXG4gIHlTY2FsZUFuaW1hdGlvbixcbiAgeFNjYWxlQW5pbWF0aW9uLFxuICB4Q2xpcEFuaW1hdGlvbixcbiAgZmFkZUluQW5pbWF0aW9uLFxuICBlYXNpbmdcblxufVxuIiwiY29uc3QgUmVuZGVySGVscGVyID0ge1xuXG4gIGRyYXdNYXJrZXI6IGZ1bmN0aW9uICh4LCB5LCBjdHgsIG1hcmtlclR5cGUsIG1hcmtlclNpemUsIG1hcmtlckNvbG9yLCBtYXJrZXJCb3JkZXJDb2xvciwgbWFya2VyQm9yZGVyVGhpY2tuZXNzKSB7XG5cbiAgICBpZiAoIWN0eClcbiAgICAgIHJldHVybjtcblxuICAgIHZhciBhbHBoYSA9IDE7XG5cbiAgICBjdHguZmlsbFN0eWxlID0gbWFya2VyQ29sb3IgPyBtYXJrZXJDb2xvciA6IFwiIzAwMDAwMFwiO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IG1hcmtlckJvcmRlckNvbG9yID8gbWFya2VyQm9yZGVyQ29sb3IgOiBcIiMwMDAwMDBcIjtcbiAgICBjdHgubGluZVdpZHRoID0gbWFya2VyQm9yZGVyVGhpY2tuZXNzID8gbWFya2VyQm9yZGVyVGhpY2tuZXNzIDogMDtcblxuXG4gICAgaWYgKG1hcmtlclR5cGUgPT09IFwiY2lyY2xlXCIpIHtcblxuICAgICAgY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIC8vcmV0dXJuO1xuXG4gICAgICBjdHguYXJjKHgsIHksIG1hcmtlclNpemUgLyAyLCAwLCBNYXRoLlBJICogMiwgZmFsc2UpO1xuXG4gICAgICBpZiAobWFya2VyQ29sb3IpXG4gICAgICAgIGN0eC5maWxsKCk7XG5cbiAgICAgIGlmIChtYXJrZXJCb3JkZXJUaGlja25lc3MpIHtcblxuICAgICAgICBpZiAoIW1hcmtlckJvcmRlckNvbG9yKSB7XG4gICAgICAgICAgYWxwaGEgPSBjdHguZ2xvYmFsQWxwaGE7XG4gICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gLjE1O1xuICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IFwiYmxhY2tcIjtcbiAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gYWxwaGE7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGN0eC5zdHJva2UoKTtcblxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChtYXJrZXJUeXBlID09PSBcInNxdWFyZVwiKSB7XG5cbiAgICAgIC8vY3R4Lm1vdmVUbyh4IC0gbWFya2VyU2l6ZSAvIDIsIHkgLSBtYXJrZXJTaXplIC8gMik7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHgucmVjdCh4IC0gbWFya2VyU2l6ZSAvIDIsIHkgLSBtYXJrZXJTaXplIC8gMiwgbWFya2VyU2l6ZSwgbWFya2VyU2l6ZSk7XG5cbiAgICAgIGlmIChtYXJrZXJDb2xvcilcbiAgICAgICAgY3R4LmZpbGwoKTtcblxuICAgICAgaWYgKG1hcmtlckJvcmRlclRoaWNrbmVzcykge1xuXG4gICAgICAgIGlmICghbWFya2VyQm9yZGVyQ29sb3IpIHtcbiAgICAgICAgICBhbHBoYSA9IGN0eC5nbG9iYWxBbHBoYTtcbiAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAuMTU7XG4gICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCJibGFja1wiO1xuICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSBhbHBoYTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtYXJrZXJUeXBlID09PSBcInRyaWFuZ2xlXCIpIHtcblxuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY3R4Lm1vdmVUbyh4IC0gbWFya2VyU2l6ZSAvIDIsIHkgKyBtYXJrZXJTaXplIC8gMik7XG4gICAgICBjdHgubGluZVRvKHggKyBtYXJrZXJTaXplIC8gMiwgeSArIG1hcmtlclNpemUgLyAyKTtcbiAgICAgIGN0eC5saW5lVG8oeCwgeSAtIG1hcmtlclNpemUgLyAyKTtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcblxuICAgICAgaWYgKG1hcmtlckNvbG9yKVxuICAgICAgICBjdHguZmlsbCgpO1xuXG4gICAgICBpZiAobWFya2VyQm9yZGVyVGhpY2tuZXNzKSB7XG5cbiAgICAgICAgaWYgKCFtYXJrZXJCb3JkZXJDb2xvcikge1xuICAgICAgICAgIGFscGhhID0gY3R4Lmdsb2JhbEFscGhhO1xuICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IC4xNTtcbiAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcImJsYWNrXCI7XG4gICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IGFscGhhO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIH1cbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlclR5cGUgPT09IFwiY3Jvc3NcIikge1xuXG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBtYXJrZXJDb2xvcjtcbiAgICAgIG1hcmtlckJvcmRlclRoaWNrbmVzcyA9IG1hcmtlclNpemUgLyA0O1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IG1hcmtlckJvcmRlclRoaWNrbmVzcztcblxuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY3R4Lm1vdmVUbyh4IC0gbWFya2VyU2l6ZSAvIDIsIHkgLSBtYXJrZXJTaXplIC8gMik7XG4gICAgICBjdHgubGluZVRvKHggKyBtYXJrZXJTaXplIC8gMiwgeSArIG1hcmtlclNpemUgLyAyKTtcbiAgICAgIGN0eC5zdHJva2UoKTtcblxuICAgICAgY3R4Lm1vdmVUbyh4ICsgbWFya2VyU2l6ZSAvIDIsIHkgLSBtYXJrZXJTaXplIC8gMik7XG4gICAgICBjdHgubGluZVRvKHggLSBtYXJrZXJTaXplIC8gMiwgeSArIG1hcmtlclNpemUgLyAyKTtcbiAgICAgIGN0eC5zdHJva2UoKTtcblxuICAgIH1cblxuXG4gIH0sXG4gIGRyYXdNYXJrZXJzOiBmdW5jdGlvbiAobWFya2Vycykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG1hcmtlciA9IG1hcmtlcnNbaV07XG5cbiAgICAgIFJlbmRlckhlbHBlci5kcmF3TWFya2VyKG1hcmtlci54LCBtYXJrZXIueSwgbWFya2VyLmN0eCwgbWFya2VyLnR5cGUsIG1hcmtlci5zaXplLCBtYXJrZXIuY29sb3IsIG1hcmtlci5ib3JkZXJDb2xvciwgbWFya2VyLmJvcmRlclRoaWNrbmVzcyk7XG4gICAgfVxuICB9XG4gIC8vLFxuICAvL2RyYXcxcHhMaW5lOiBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIGNvbG9yLCBjdHgpIHtcbiAgLy9cdGN0eC5iZWdpblBhdGgoKTtcbiAgLy9cdGN0eC5kcmF3UmVjdCh4MSwgeTEsIHgyIC0geDEsIHkyIC0geTEpO1xuICAvL1x0Y3R4LnN0cm9rZSgpO1xuICAvL31cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVuZGVySGVscGVyO1xuIiwiXG5pbXBvcnQge2NvbnN0YW50c30gZnJvbSAnLi4vY29uc3RhbnRzL2N1bHR1cmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKGRlcml2ZWQsIGJhc2UpIHtcblx0ZGVyaXZlZC5wcm90b3R5cGUgPSBpbmhlcml0KGJhc2UucHJvdG90eXBlKTtcblx0ZGVyaXZlZC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBkZXJpdmVkO1xuXHRkZXJpdmVkLmJhc2UgPSBiYXNlLnByb3RvdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaGVyaXQocHJvdG8pIHtcblx0ZnVuY3Rpb24gRigpIHsgfVxuXHRGLnByb3RvdHlwZSA9IHByb3RvO1xuXHRyZXR1cm4gbmV3IEYoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvRGF0ZVRpbWUoZGF0ZVRpbWUsIG51bSwgdHlwZSkge1xuXG5cdGlmICh0eXBlID09PSBcIm1pbGxpc2Vjb25kXCIpXG5cdFx0ZGF0ZVRpbWUuc2V0TWlsbGlzZWNvbmRzKGRhdGVUaW1lLmdldE1pbGxpc2Vjb25kcygpICsgMSAqIG51bSk7XG5cdGVsc2UgaWYgKHR5cGUgPT09IFwic2Vjb25kXCIpXG5cdFx0ZGF0ZVRpbWUuc2V0U2Vjb25kcyhkYXRlVGltZS5nZXRTZWNvbmRzKCkgKyAxICogbnVtKTtcblx0ZWxzZSBpZiAodHlwZSA9PT0gXCJtaW51dGVcIilcblx0XHRkYXRlVGltZS5zZXRNaW51dGVzKGRhdGVUaW1lLmdldE1pbnV0ZXMoKSArIDEgKiBudW0pO1xuXHRlbHNlIGlmICh0eXBlID09PSBcImhvdXJcIilcblx0XHRkYXRlVGltZS5zZXRIb3VycyhkYXRlVGltZS5nZXRIb3VycygpICsgMSAqIG51bSk7XG5cdGVsc2UgaWYgKHR5cGUgPT09IFwiZGF5XCIpXG5cdFx0ZGF0ZVRpbWUuc2V0RGF0ZShkYXRlVGltZS5nZXREYXRlKCkgKyAxICogbnVtKTtcblx0ZWxzZSBpZiAodHlwZSA9PT0gXCJ3ZWVrXCIpXG5cdFx0ZGF0ZVRpbWUuc2V0RGF0ZShkYXRlVGltZS5nZXREYXRlKCkgKyA3ICogbnVtKTtcblx0ZWxzZSBpZiAodHlwZSA9PT0gXCJtb250aFwiKVxuXHRcdGRhdGVUaW1lLnNldE1vbnRoKGRhdGVUaW1lLmdldE1vbnRoKCkgKyAxICogbnVtKTtcblx0ZWxzZSBpZiAodHlwZSA9PT0gXCJ5ZWFyXCIpXG5cdFx0ZGF0ZVRpbWUuc2V0RnVsbFllYXIoZGF0ZVRpbWUuZ2V0RnVsbFllYXIoKSArIDEgKiBudW0pO1xuXG5cdHJldHVybiBkYXRlVGltZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb051bWJlcihudW0sIHR5cGUpIHtcblx0cmV0dXJuIGNvbnN0YW50c1t0eXBlICsgXCJEdXJhdGlvblwiXSAqIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhZCh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHZhciBpc05lZ2F0aXZlID0gZmFsc2U7XG5cdGlmICh2YWx1ZSA8IDApIHtcblx0XHRpc05lZ2F0aXZlID0gdHJ1ZTtcblx0XHR2YWx1ZSAqPSAtMTtcblx0fVxuXG5cdHZhbHVlID0gXCJcIiArIHZhbHVlO1xuXHRsZW5ndGggPSAhbGVuZ3RoID8gMSA6IGxlbmd0aDtcblxuXHR3aGlsZSAodmFsdWUubGVuZ3RoIDwgbGVuZ3RoKSB2YWx1ZSA9IFwiMFwiICsgdmFsdWU7XG5cblx0cmV0dXJuIGlzTmVnYXRpdmUgPyBcIi1cIiArIHZhbHVlIDogdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltU3RyaW5nKHN0cikge1xuXHRpZiAoIXN0cilcblx0XHRyZXR1cm4gc3RyO1xuXG5cdHN0ciA9IHN0ci5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKTtcblx0dmFyIHdzID0gL1xccy87XG5cdHZhciBpID0gc3RyLmxlbmd0aDtcblx0d2hpbGUgKHdzLnRlc3Qoc3RyLmNoYXJBdCgtLWkpKSkgeyB9XG5cdHJldHVybiBzdHIuc2xpY2UoMCwgaSArIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kQ3R4KGNvbnRleHQpIHtcblx0Y29udGV4dC5yb3VuZFJlY3QgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzLCBib3JkZXJUaGlja25lc3MsIGJhY2tncm91bmRDb2xvciwgYm9yZGVyQ29sb3IpIHtcblx0XHQvLy88c2lnbmF0dXJlPlxuXHRcdC8vLzxzdW1tYXJ5PkNyZWF0ZXMgYSByb3VuZGVkIHJlY3RhbmdsZSB3aXRoIGdpdmVuIGZpbGwvc3Ryb2tlIHBhcmFtZXRlcnM8L3N1bW1hcnk+XG5cdFx0Ly8vPHBhcmFtIG5hbWU9XCJ4XCIgdHlwZT1cIm51bWJlclwiPnggdmFsdWU8L3BhcmFtPlxuXHRcdC8vLzxwYXJhbSBuYW1lPVwieVwiIHR5cGU9XCJudW1iZXJcIj55IHZhbHVlPC9wYXJhbT5cblx0XHQvLy88cGFyYW0gbmFtZT1cIndpZHRoXCIgdHlwZT1cIm51bWJlclwiPkJvcmRlciBXaWR0aDwvcGFyYW0+XG5cdFx0Ly8vPHBhcmFtIG5hbWU9XCJoZWlnaHRcIiB0eXBlPVwibnVtYmVyXCI+Qm9yZGVyIEhlaWdodDwvcGFyYW0+XG5cdFx0Ly8vPHBhcmFtIG5hbWU9XCJyYWRpdXNcIiB0eXBlPVwibnVtYmVyXCI+Qm9yZGVyIENvcm5lclJhZGl1czwvcGFyYW0+XG5cdFx0Ly8vPHBhcmFtIG5hbWU9XCJib3JkZXJUaGlja25lc3NcIiB0eXBlPVwibnVtYmVyXCI+Qm9yZGVyIFRoaWNrZXNzPC9wYXJhbT5cblx0XHQvLy88cGFyYW0gbmFtZT1cImJhY2tncm91bmRDb2xvclwiIHR5cGU9XCJudW1iZXJcIj5CYWNrZ3JvdW5kIENvbG9yPC9wYXJhbT5cblx0XHQvLy88cGFyYW0gbmFtZT1cImJvcmRlckNvbG9yXCIgdHlwZT1cIm51bWJlclwiPkJvcmRlciBDb2xvcjwvcGFyYW0+XG5cdFx0Ly8vPC9zaWduYXR1cmU+XG5cblx0XHRpZiAoYmFja2dyb3VuZENvbG9yKSB7XG5cdFx0XHR0aGlzLmZpbGxTdHlsZSA9IGJhY2tncm91bmRDb2xvcjtcblx0XHR9XG5cblx0XHRpZiAoYm9yZGVyQ29sb3IpIHtcblx0XHRcdHRoaXMuc3Ryb2tlU3R5bGUgPSBib3JkZXJDb2xvcjtcblx0XHR9XG5cblx0XHQvL2lmICh0eXBlb2Ygc3Ryb2tlID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHQvL1x0c3Ryb2tlID0gdHJ1ZTtcblx0XHQvL31cblxuXHRcdGlmICh0eXBlb2YgcmFkaXVzID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRyYWRpdXMgPSA1O1xuXHRcdH1cblxuXHRcdHRoaXMubGluZVdpZHRoID0gYm9yZGVyVGhpY2tuZXNzO1xuXG5cdFx0dGhpcy5iZWdpblBhdGgoKTtcblx0XHR0aGlzLm1vdmVUbyh4ICsgcmFkaXVzLCB5KTtcblx0XHR0aGlzLmxpbmVUbyh4ICsgd2lkdGggLSByYWRpdXMsIHkpO1xuXHRcdHRoaXMucXVhZHJhdGljQ3VydmVUbyh4ICsgd2lkdGgsIHksIHggKyB3aWR0aCwgeSArIHJhZGl1cyk7XG5cdFx0dGhpcy5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcblx0XHR0aGlzLnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQpO1xuXHRcdHRoaXMubGluZVRvKHggKyByYWRpdXMsIHkgKyBoZWlnaHQpO1xuXHRcdHRoaXMucXVhZHJhdGljQ3VydmVUbyh4LCB5ICsgaGVpZ2h0LCB4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcblx0XHR0aGlzLmxpbmVUbyh4LCB5ICsgcmFkaXVzKTtcblx0XHR0aGlzLnF1YWRyYXRpY0N1cnZlVG8oeCwgeSwgeCArIHJhZGl1cywgeSk7XG5cdFx0dGhpcy5jbG9zZVBhdGgoKTtcblxuXHRcdGlmIChiYWNrZ3JvdW5kQ29sb3IpIHtcblx0XHRcdHRoaXMuZmlsbCgpO1xuXHRcdH1cblxuXHRcdGlmIChib3JkZXJDb2xvciAmJiBib3JkZXJUaGlja25lc3MgPiAwKSB7XG5cdFx0XHR0aGlzLnN0cm9rZSgpO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVOdW1iZXJzKGEsIGIpIHtcblx0cmV0dXJuIGEgLSBiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZURhdGFQb2ludFgoZGF0YVBvaW50MSwgZGF0YVBvaW50Mikge1xuXHRyZXR1cm4gZGF0YVBvaW50MS54IC0gZGF0YVBvaW50Mi54O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50VG9IZXhDb2xvclN0cmluZyhudW0pIHtcblx0dmFyIHIgPSAoKG51bSAmIDB4RkYwMDAwKSA+PiAxNikudG9TdHJpbmcoMTYpO1xuXHR2YXIgZyA9ICgobnVtICYgMHgwMEZGMDApID4+IDgpLnRvU3RyaW5nKDE2KTtcblx0dmFyIGIgPSAoKG51bSAmIDB4MDAwMEZGKSA+PiAwKS50b1N0cmluZygxNik7XG5cblx0ciA9IHIubGVuZ3RoIDwgMiA/IFwiMFwiICsgciA6IHI7XG5cdGcgPSBnLmxlbmd0aCA8IDIgPyBcIjBcIiArIGcgOiBnO1xuXHRiID0gYi5sZW5ndGggPCAyID8gXCIwXCIgKyBiIDogYjtcblxuXHRyZXR1cm4gXCIjXCIgKyByICsgZyArIGI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSR0JUb0ludChyLCBnLCBiKSB7XG5cdHZhciBudW0gPSAociA8PCAxNikgfCAoZyA8PCA4KSB8IChiKTtcblxuXHRyZXR1cm4gbnVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50VG9SR0IobnVtKSB7XG5cdHZhciByZ2IgPSBbXTtcblx0dmFyIHIgPSAoKG51bSAmIDB4RkYwMDAwKSA+PiAxNik7XG5cdHZhciBnID0gKChudW0gJiAweDAwRkYwMCkgPj4gOCk7XG5cdHZhciBiID0gKChudW0gJiAweDAwMDBGRikgPj4gMCk7XG5cblx0Ly9yID0gci5sZW5ndGggPCAyID8gXCIwXCIgKyByIDogcjtcblx0Ly9nID0gZy5sZW5ndGggPCAyID8gXCIwXCIgKyBnIDogZztcblx0Ly9iID0gYi5sZW5ndGggPCAyID8gXCIwXCIgKyBiIDogYjtcblxuXHRyZ2JbMF0gPSByO1xuXHRyZ2JbMV0gPSBnO1xuXHRyZ2JbMl0gPSBiO1xuXG5cdHJldHVybiByZ2I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUluZGV4T2YoZWx0IC8qLCBmcm9tKi8pIHtcblx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoID4+PiAwO1xuXG5cdHZhciBmcm9tID0gTnVtYmVyKGFyZ3VtZW50c1sxXSkgfHwgMDtcblx0ZnJvbSA9IChmcm9tIDwgMClcblx0XHQgPyBNYXRoLmNlaWwoZnJvbSlcblx0XHQgOiBNYXRoLmZsb29yKGZyb20pO1xuXHRpZiAoZnJvbSA8IDApXG5cdFx0ZnJvbSArPSBsZW47XG5cblx0Zm9yICg7IGZyb20gPCBsZW47IGZyb20rKykge1xuXHRcdGlmIChmcm9tIGluIHRoaXMgJiZcblx0XHRcdHRoaXNbZnJvbV0gPT09IGVsdClcblx0XHRcdHJldHVybiBmcm9tO1xuXHR9XG5cdHJldHVybiAtMTtcbn07XG5cbi8vSUU4LSBGaXg6IGluZGV4T2YgaXMgbm90IHN1cHBvcnRlZCBpbiBJRTgtIGZvciBhcnJheXNcbmV4cG9ydCBmdW5jdGlvbiBhZGRBcnJheUluZGV4T2Yob2JqKSB7XG5pZiAoIW9iai5pbmRleE9mKSB7XG5cdG9iai5pbmRleE9mID0gYXJyYXlJbmRleE9mO1xufVxuXG5yZXR1cm4gb2JqO1xufVxuXG52YXIgZm9udEhlaWdodEluUGl4ZWxzID0ge307XG52YXIgdGV4dE1lYXN1cmVFbCA9IG51bGw7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb250SGVpZ2h0SW5QaXhlbHMoZm9udEZhbWlseSwgZm9udFNpemUsIGZvbnRXZWlnaHQpIHtcblxuXHQvL3JldHVybiBmb250U2l6ZTtcblxuXHRmb250V2VpZ2h0ID0gZm9udFdlaWdodCB8fCBcIm5vcm1hbFwiO1xuXG5cdHZhciBlbnRyeSA9IGZvbnRGYW1pbHkgKyBcIl9cIiArIGZvbnRTaXplICsgXCJfXCIgKyBmb250V2VpZ2h0O1xuXHR2YXIgaGVpZ2h0ID0gZm9udEhlaWdodEluUGl4ZWxzW2VudHJ5XTtcblxuXHRpZiAoaXNOYU4oaGVpZ2h0KSkge1xuXHRcdHRyeSB7XG5cdFx0XHR2YXIgc3R5bGUgPSBcInBvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjBweDsgdG9wOi0yMDAwMHB4OyBwYWRkaW5nOjBweDttYXJnaW46MHB4O2JvcmRlcjpub25lO3doaXRlLXNwYWNlOnByZTtsaW5lLWhlaWdodDpub3JtYWw7XCIgKyBcImZvbnQtZmFtaWx5OlwiICsgZm9udEZhbWlseSArIFwiOyBcIiArIFwiZm9udC1zaXplOlwiICsgZm9udFNpemUgKyBcInB4OyBmb250LXdlaWdodDpcIiArIGZvbnRXZWlnaHQgKyBcIjtcIjtcblx0XHRcdC8vY29uc29sZS5sb2coc3R5bGUpO1xuXHRcdFx0aWYgKCF0ZXh0TWVhc3VyZUVsKSB7XG5cdFx0XHRcdHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcblx0XHRcdFx0dGV4dE1lYXN1cmVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuXHRcdFx0XHR0ZXh0TWVhc3VyZUVsLmlubmVySFRNTCA9IFwiXCI7XG5cdFx0XHRcdHZhciB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiTXBneWlcIik7XG5cdFx0XHRcdHRleHRNZWFzdXJlRWwuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xuXHRcdFx0XHRib2R5LmFwcGVuZENoaWxkKHRleHRNZWFzdXJlRWwpO1xuXHRcdFx0fVxuXG5cdFx0XHR0ZXh0TWVhc3VyZUVsLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuXHRcdFx0dGV4dE1lYXN1cmVFbC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBzdHlsZSk7XG5cblx0XHRcdGhlaWdodCA9IE1hdGgucm91bmQodGV4dE1lYXN1cmVFbC5vZmZzZXRIZWlnaHQpO1xuXHRcdFx0dGV4dE1lYXN1cmVFbC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0XHQvL2JvZHkucmVtb3ZlQ2hpbGQodGVtcERpdik7XG5cblx0XHRcdC8vaWYgKHdpbmRvdy5jb25zb2xlKVxuXHRcdFx0Ly9cdHdpbmRvdy5jb25zb2xlLmxvZyhmb250U2l6ZSArIFwiOiBcIiArIGhlaWdodCk7XG5cdFx0fVxuXHRcdGNhdGNoIChlKSB7XG5cdFx0XHRoZWlnaHQgPSBNYXRoLmNlaWwoZm9udFNpemUgKiAxLjEpO1xuXHRcdH1cblxuXHRcdGhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgZm9udFNpemUpO1xuXG5cdFx0Zm9udEhlaWdodEluUGl4ZWxzW2VudHJ5XSA9IGhlaWdodDtcblx0fVxuXG5cdHJldHVybiBoZWlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5lRGFzaEFycmF5KGxpbmVEYXNoVHlwZSwgbGluZVRoaWNrbmVzcykge1xuXHRsaW5lRGFzaFR5cGUgPSBsaW5lRGFzaFR5cGUgfHwgXCJzb2xpZFwiO1xuXG5cdHZhciBsaW5lRGFzaEFycmF5ID0gW107XG5cblx0dmFyIGxpbmVEYXNoVHlwZU1hcCA9IHtcblx0XHRcInNvbGlkXCI6IFtdLFxuXHRcdFwic2hvcnREYXNoXCI6IFszLCAxXSxcblx0XHRcInNob3J0RG90XCI6IFsxLCAxXSxcblx0XHRcInNob3J0RGFzaERvdFwiOiBbMywgMSwgMSwgMV0sXG5cdFx0XCJzaG9ydERhc2hEb3REb3RcIjogWzMsIDEsIDEsIDEsIDEsIDFdLFxuXHRcdFwiZG90XCI6IFsxLCAyXSxcblx0XHRcImRhc2hcIjogWzQsIDJdLFxuXHRcdFwiZGFzaERvdFwiOiBbNCwgMiwgMSwgMl0sXG5cdFx0XCJsb25nRGFzaFwiOiBbOCwgMl0sXG5cdFx0XCJsb25nRGFzaERvdFwiOiBbOCwgMiwgMSwgMl0sXG5cdFx0XCJsb25nRGFzaERvdERvdFwiOiBbOCwgMiwgMSwgMiwgMSwgMl1cblx0fTtcblxuXHRsaW5lRGFzaEFycmF5ID0gbGluZURhc2hUeXBlTWFwW2xpbmVEYXNoVHlwZV07XG5cblx0aWYgKGxpbmVEYXNoQXJyYXkpIHtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGluZURhc2hBcnJheS5sZW5ndGg7IGkrKykge1xuXHRcdFx0bGluZURhc2hBcnJheVtpXSAqPSBsaW5lVGhpY2tuZXNzO1xuXHRcdH1cblx0fSBlbHNlXG5cdFx0bGluZURhc2hBcnJheSA9IFtdO1xuXG5cdHJldHVybiBsaW5lRGFzaEFycmF5O1xufVxuXG4vL3VzZXJDYXB0dXJlIGlzIG9wdGlvbmFsLiBEZWZhdWx0cyB0byBmYWxzZVxuZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50KG9iaiwgZXZlbnRUeXBlLCBmbiwgdXNlQ2FwdHVyZSkge1xuXHRpZiAob2JqLmFkZEV2ZW50TGlzdGVuZXIpIHtcblx0XHRvYmouYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGZuLCB1c2VDYXB0dXJlIHx8IGZhbHNlKTtcblx0fVxuXHRlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHtcblx0XHRvYmouYXR0YWNoRXZlbnQoXCJvblwiICsgZXZlbnRUeXBlLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0ZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCA9IGUucHJldmVudERlZmF1bHQgfHwgZnVuY3Rpb24gKCkgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH07XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbiA9IGUuc3RvcFByb3BhZ2F0aW9uIHx8IGZ1bmN0aW9uICgpIHsgZS5jYW5jZWxCdWJibGUgPSB0cnVlOyB9O1xuXHRcdFx0Zm4uY2FsbChvYmosIGUpO1xuXHRcdH0pO1xuXHR9IGVsc2Vcblx0XHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vI3JlZ2lvbiBmb3JtYXR0aW5nIGZ1bmN0aW9ucy9tZXRob2RzXG5mdW5jdGlvbiBfZGF0ZUZvcm1hdCgpIHtcblxuXHR2YXIgcmVnID0gL0R7MSw0fXxNezEsNH18WXsxLDR9fGh7MSwyfXxIezEsMn18bXsxLDJ9fHN7MSwyfXxmezEsM318dHsxLDJ9fFR7MSwyfXxLfHp7MSwzfXxcIlteXCJdKlwifCdbXiddKicvZztcblxuXHR2YXIgZGVmRGF5cyA9IFtcIlN1bmRheVwiLCBcIk1vbmRheVwiLCBcIlR1ZXNkYXlcIiwgXCJXZWRuZXNkYXlcIiwgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCJdO1xuXHR2YXIgZGVmU2hvcnREYXlzID0gW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdO1xuXG5cdHZhciBkZWZNb250aHMgPSBbXCJKYW51YXJ5XCIsIFwiRmVicnVhcnlcIiwgXCJNYXJjaFwiLCBcIkFwcmlsXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCBcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwiTm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiXTtcblx0dmFyIGRlZlNob3J0TW9udGhzID0gW1wiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsIFwiQXVnXCIsIFwiU2VwXCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJdO1xuXG5cdHZhciB0aW1lem9uZSA9IC9cXGIoPzpbUE1DRUFdW1NEUF1UfCg/OlBhY2lmaWN8TW91bnRhaW58Q2VudHJhbHxFYXN0ZXJufEF0bGFudGljKSAoPzpTdGFuZGFyZHxEYXlsaWdodHxQcmV2YWlsaW5nKSBUaW1lfCg/OkdNVHxVVEMpKD86Wy0rXVxcZHs0fSk/KVxcYi9nO1xuXHR2YXIgdGltZXpvbmVDbGlwID0gL1teLStcXGRBLVpdL2c7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChkdCwgZm9ybWF0U3RyaW5nLCBjdWx0dXJlSW5mbykge1xuXG5cdFx0dmFyIGRheXMgPSBjdWx0dXJlSW5mbyA/IGN1bHR1cmVJbmZvLmRheXMgOiBkZWZEYXlzO1xuXHRcdHZhciBtb250aHMgPSBjdWx0dXJlSW5mbyA/IGN1bHR1cmVJbmZvLm1vbnRocyA6IGRlZk1vbnRocztcblxuXHRcdHZhciBzaG9ydERheXMgPSBjdWx0dXJlSW5mbyA/IGN1bHR1cmVJbmZvLnNob3J0RGF5cyA6IGRlZlNob3J0RGF5cztcblx0XHR2YXIgc2hvcnRNb250aHMgPSBjdWx0dXJlSW5mbyA/IGN1bHR1cmVJbmZvLnNob3J0TW9udGhzIDogZGVmU2hvcnRNb250aHM7XG5cblx0XHR2YXIgcmVzdWx0ID0gXCJcIjtcblx0XHR2YXIgdXRjID0gZmFsc2U7XG5cblx0XHRkdCA9IGR0ICYmIGR0LmdldFRpbWUgPyBkdCA6IGR0ID8gbmV3IERhdGUoZHQpIDogbmV3IERhdGU7XG5cdFx0aWYgKGlzTmFOKGR0KSkgdGhyb3cgU3ludGF4RXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cblx0XHRpZiAoZm9ybWF0U3RyaW5nLnNsaWNlKDAsIDQpID09PSBcIlVUQzpcIikge1xuXHRcdFx0Zm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNsaWNlKDQpO1xuXHRcdFx0dXRjID0gdHJ1ZTtcblx0XHR9XG5cblx0XHR2YXIgcHJlID0gdXRjID8gXCJnZXRVVENcIiA6IFwiZ2V0XCI7XG5cdFx0dmFyIGRhdGUgPSBkdFtwcmUgKyBcIkRhdGVcIl0oKTtcblx0XHR2YXIgZGF5ID0gZHRbcHJlICsgXCJEYXlcIl0oKTtcblx0XHR2YXIgbW9udGggPSBkdFtwcmUgKyBcIk1vbnRoXCJdKCk7XG5cdFx0dmFyIHllYXIgPSBkdFtwcmUgKyBcIkZ1bGxZZWFyXCJdKCk7XG5cdFx0dmFyIGhvdXJzID0gZHRbcHJlICsgXCJIb3Vyc1wiXSgpO1xuXHRcdHZhciBtaW51dGVzID0gZHRbcHJlICsgXCJNaW51dGVzXCJdKCk7XG5cdFx0dmFyIHNlY29uZHMgPSBkdFtwcmUgKyBcIlNlY29uZHNcIl0oKTtcblx0XHR2YXIgbWlsbGlzZWNvbmRzID0gZHRbcHJlICsgXCJNaWxsaXNlY29uZHNcIl0oKTtcblx0XHR2YXIgb2Zmc2V0ID0gdXRjID8gMCA6IGR0LmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cblx0XHRyZXN1bHQgPSBmb3JtYXRTdHJpbmcucmVwbGFjZShyZWcsIGZ1bmN0aW9uIChrZXkpIHtcblxuXHRcdFx0c3dpdGNoIChrZXkpIHtcblxuXHRcdFx0XHRjYXNlIFwiRFwiOlxuXHRcdFx0XHRcdHJldHVybiBkYXRlO1xuXHRcdFx0XHRjYXNlIFwiRERcIjpcblx0XHRcdFx0XHRyZXR1cm4gcGFkKGRhdGUsIDIpO1xuXHRcdFx0XHRjYXNlIFwiREREXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHNob3J0RGF5c1tkYXldO1xuXHRcdFx0XHRjYXNlIFwiRERERFwiOlxuXHRcdFx0XHRcdHJldHVybiBkYXlzW2RheV07XG5cblxuXHRcdFx0XHRjYXNlIFwiTVwiOlxuXHRcdFx0XHRcdHJldHVybiBtb250aCArIDE7XG5cdFx0XHRcdGNhc2UgXCJNTVwiOlxuXHRcdFx0XHRcdHJldHVybiBwYWQobW9udGggKyAxLCAyKTtcblx0XHRcdFx0Y2FzZSBcIk1NTVwiOlxuXHRcdFx0XHRcdHJldHVybiBzaG9ydE1vbnRoc1ttb250aF07XG5cdFx0XHRcdGNhc2UgXCJNTU1NXCI6XG5cdFx0XHRcdFx0cmV0dXJuIG1vbnRoc1ttb250aF07XG5cblxuXHRcdFx0XHRjYXNlIFwiWVwiOlxuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludChTdHJpbmcoeWVhcikuc2xpY2UoLTIpKTtcblx0XHRcdFx0Y2FzZSBcIllZXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHBhZChTdHJpbmcoeWVhcikuc2xpY2UoLTIpLCAyKTtcblx0XHRcdFx0Y2FzZSBcIllZWVwiOlxuXHRcdFx0XHRcdHJldHVybiBwYWQoU3RyaW5nKHllYXIpLnNsaWNlKC0zKSwgMyk7XG5cdFx0XHRcdGNhc2UgXCJZWVlZXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHBhZCh5ZWFyLCA0KTtcblxuXG5cdFx0XHRcdGNhc2UgXCJoXCI6XG5cdFx0XHRcdFx0cmV0dXJuIGhvdXJzICUgMTIgfHwgMTI7XG5cdFx0XHRcdGNhc2UgXCJoaFwiOlxuXHRcdFx0XHRcdHJldHVybiBwYWQoaG91cnMgJSAxMiB8fCAxMiwgMik7XG5cblxuXHRcdFx0XHRjYXNlIFwiSFwiOlxuXHRcdFx0XHRcdHJldHVybiBob3Vycztcblx0XHRcdFx0Y2FzZSBcIkhIXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHBhZChob3VycywgMik7XG5cblx0XHRcdFx0Y2FzZSBcIm1cIjpcblx0XHRcdFx0XHRyZXR1cm4gbWludXRlcztcblx0XHRcdFx0Y2FzZSBcIm1tXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHBhZChtaW51dGVzLCAyKTtcblxuXG5cdFx0XHRcdGNhc2UgXCJzXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHNlY29uZHM7XG5cdFx0XHRcdGNhc2UgXCJzc1wiOlxuXHRcdFx0XHRcdHJldHVybiBwYWQoc2Vjb25kcywgMik7XG5cblx0XHRcdFx0Y2FzZSBcImZcIjpcblx0XHRcdFx0XHRyZXR1cm4gU3RyaW5nKG1pbGxpc2Vjb25kcykuc2xpY2UoMCwgMSk7XG5cdFx0XHRcdGNhc2UgXCJmZlwiOlxuXHRcdFx0XHRcdHJldHVybiBwYWQoU3RyaW5nKG1pbGxpc2Vjb25kcykuc2xpY2UoMCwgMiksIDIpO1xuXHRcdFx0XHRjYXNlIFwiZmZmXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHBhZChTdHJpbmcobWlsbGlzZWNvbmRzKS5zbGljZSgwLCAzKSwgMyk7XG5cblxuXHRcdFx0XHRjYXNlIFwidFwiOlxuXHRcdFx0XHRcdHJldHVybiBob3VycyA8IDEyID8gXCJhXCIgOiBcInBcIjtcblx0XHRcdFx0Y2FzZSBcInR0XCI6XG5cdFx0XHRcdFx0cmV0dXJuIGhvdXJzIDwgMTIgPyBcImFtXCIgOiBcInBtXCI7XG5cdFx0XHRcdGNhc2UgXCJUXCI6XG5cdFx0XHRcdFx0cmV0dXJuIGhvdXJzIDwgMTIgPyBcIkFcIiA6IFwiUFwiO1xuXHRcdFx0XHRjYXNlIFwiVFRcIjpcblx0XHRcdFx0XHRyZXR1cm4gaG91cnMgPCAxMiA/IFwiQU1cIiA6IFwiUE1cIjtcblxuXG5cdFx0XHRcdGNhc2UgXCJLXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHV0YyA/IFwiVVRDXCIgOiAoU3RyaW5nKGR0KS5tYXRjaCh0aW1lem9uZSkgfHwgW1wiXCJdKS5wb3AoKS5yZXBsYWNlKHRpbWV6b25lQ2xpcCwgXCJcIik7IC8vIFRpbWUgWm9uZTtcblx0XHRcdFx0Y2FzZSBcInpcIjpcblx0XHRcdFx0XHRyZXR1cm4gKG9mZnNldCA+IDAgPyBcIi1cIiA6IFwiK1wiKSArIE1hdGguZmxvb3IoTWF0aC5hYnMob2Zmc2V0KSAvIDYwKTsgLy8gSG91ciBPZmZzZXQgZnJvbSBVVEMgd2l0aG91dCBwYWRkaW5nXG5cdFx0XHRcdGNhc2UgXCJ6elwiOlxuXHRcdFx0XHRcdHJldHVybiAob2Zmc2V0ID4gMCA/IFwiLVwiIDogXCIrXCIpICsgcGFkKE1hdGguZmxvb3IoTWF0aC5hYnMob2Zmc2V0KSAvIDYwKSwgMik7IC8vIEhvdXIgT2Zmc2V0IGZyb20gVVRDIHdpdGggcGFkZGluZ1xuXHRcdFx0XHRjYXNlIFwienp6XCI6XG5cdFx0XHRcdFx0cmV0dXJuIChvZmZzZXQgPiAwID8gXCItXCIgOiBcIitcIikgKyBwYWQoTWF0aC5mbG9vcihNYXRoLmFicyhvZmZzZXQpIC8gNjApLCAyKSArIHBhZChNYXRoLmFicyhvZmZzZXQpICUgNjAsIDIpOyAvLyBIb3VyIGFuZCBNaW51dGUgT2Zmc2V0IGZyb20gVVRDIHdpdGggcGFkZGluZ1xuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIGtleS5zbGljZSgxLCBrZXkubGVuZ3RoIC0gMSk7XG5cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZGF0ZUZvcm1hdCA9IF9kYXRlRm9ybWF0KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJGb3JtYXQodiwgZnMsIGN1bHR1cmVJbmZvKSB7XG5cdGlmICh2ID09PSBudWxsKVxuXHRcdHJldHVybiBcIlwiO1xuXG5cdHYgPSBOdW1iZXIodik7XG5cdHZhciBpc05lZ2F0aXZlID0gdiA8IDAgPyB0cnVlIDogZmFsc2U7XG5cdGlmIChpc05lZ2F0aXZlKSB2ICo9IC0xO1xuXG5cdHZhciBkZWNpbWFsU2VwYXJhdG9yID0gY3VsdHVyZUluZm8gPyBjdWx0dXJlSW5mby5kZWNpbWFsU2VwYXJhdG9yIDogXCIuXCI7XG5cdHZhciBkaWdpdEdyb3VwU2VwYXJhdG9yID0gY3VsdHVyZUluZm8gPyBjdWx0dXJlSW5mby5kaWdpdEdyb3VwU2VwYXJhdG9yIDogXCIsXCI7XG5cblx0dmFyIHZTdHJpbmcgPSBcIlwiO1xuXHRmcyA9IFN0cmluZyhmcyk7XG5cdHZhciBtdWx0aXBsaWVyID0gMTtcblx0dmFyIHRlbXA7XG5cdHZhciByZXN1bHQgPSBcIlwiO1xuXG5cdHZhciBtYXRjaGVzID0gXCJcIjtcblx0dmFyIGRlY2ltYWxQb3NpdGlvbiA9IC0xO1xuXHR2YXIgZnNCZWZvcmVEZWNpbWFsID0gW107XG5cdHZhciBmc0FmdGVyRGVjaW1hbCA9IFtdO1xuXHR2YXIgbm9QaEJlZm9yZURlY2ltYWwgPSAwOyAvLyBOdW1iZXIgb2YgUGxhY2Vob2xkZXJzIGJlZm9yZSBEZWNpbWFsXG5cdHZhciBub1BoQWZ0ZXJEZWNpbWFsID0gMDsgLy8gTnVtYmVyIG9mIFBsYWNlaG9sZGVycyBhZnRlciBEZWNpbWFsXG5cdHZhciBub0NvbW1hID0gMDtcblx0dmFyIGlzU2NpZW50aWZpY05vdGF0aW9uID0gZmFsc2U7XG5cdHZhciBleHBvbmVudCA9IDA7XG5cblx0bWF0Y2hlcyA9IGZzLm1hdGNoKC9cIlteXCJdKlwifCdbXiddKid8W2VFXVsrLV0qWzBdK3xbLF0rWy5dfOKAsHwuL2cpO1xuXHQvL3dpbmRvdy5jb25zb2xlLmxvZyhtYXRjaGVzICsgXCIgPSBcIiArIG1hdGNoZXMubGVuZ3RoKTtcblx0dmFyIG1hdGNoID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgbWF0Y2hlcyAmJiBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykge1xuXHRcdG1hdGNoID0gbWF0Y2hlc1tpXTtcblxuXHRcdGlmIChtYXRjaCA9PT0gXCIuXCIgJiYgZGVjaW1hbFBvc2l0aW9uIDwgMCkge1xuXHRcdFx0ZGVjaW1hbFBvc2l0aW9uID0gaTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH0gZWxzZSBpZiAobWF0Y2ggPT09IFwiJVwiKSB7XG5cdFx0XHRtdWx0aXBsaWVyICo9IDEwMDtcblx0XHR9IGVsc2UgaWYgKG1hdGNoID09PSBcIuKAsFwiKSB7XG5cdFx0XHRtdWx0aXBsaWVyICo9IDEwMDA7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9IGVsc2UgaWYgKG1hdGNoWzBdID09PSBcIixcIiAmJiBtYXRjaFttYXRjaC5sZW5ndGggLSAxXSA9PT0gXCIuXCIpIHtcblx0XHRcdG11bHRpcGxpZXIgLz0gTWF0aC5wb3coMTAwMCwgbWF0Y2gubGVuZ3RoIC0gMSk7XG5cdFx0XHRkZWNpbWFsUG9zaXRpb24gPSBpICsgbWF0Y2gubGVuZ3RoIC0gMTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH0gZWxzZSBpZiAoKG1hdGNoWzBdID09PSBcIkVcIiB8fCBtYXRjaFswXSA9PT0gXCJlXCIpICYmIG1hdGNoW21hdGNoLmxlbmd0aCAtIDFdID09PSBcIjBcIikge1xuXHRcdFx0aXNTY2llbnRpZmljTm90YXRpb24gPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChkZWNpbWFsUG9zaXRpb24gPCAwKSB7XG5cdFx0XHRmc0JlZm9yZURlY2ltYWwucHVzaChtYXRjaCk7XG5cdFx0XHRpZiAobWF0Y2ggPT09IFwiI1wiIHx8IG1hdGNoID09PSBcIjBcIilcblx0XHRcdFx0bm9QaEJlZm9yZURlY2ltYWwrKztcblx0XHRcdGVsc2UgaWYgKG1hdGNoID09PSBcIixcIilcblx0XHRcdFx0bm9Db21tYSsrO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGZzQWZ0ZXJEZWNpbWFsLnB1c2gobWF0Y2gpO1xuXHRcdFx0aWYgKG1hdGNoID09PSBcIiNcIiB8fCBtYXRjaCA9PT0gXCIwXCIpXG5cdFx0XHRcdG5vUGhBZnRlckRlY2ltYWwrKztcblx0XHR9XG5cdH1cblxuXHRpZiAoaXNTY2llbnRpZmljTm90YXRpb24pIHtcblx0XHR2YXIgaW50ZWdlciA9IE1hdGguZmxvb3Iodik7XG5cdFx0ZXhwb25lbnQgPSAoaW50ZWdlciA9PT0gMCA/IFwiXCIgOiBTdHJpbmcoaW50ZWdlcikpLmxlbmd0aCAtIG5vUGhCZWZvcmVEZWNpbWFsO1xuXHRcdG11bHRpcGxpZXIgLz0gTWF0aC5wb3coMTAsIGV4cG9uZW50KTtcblx0fVxuXG5cdHYgKj0gbXVsdGlwbGllcjtcblxuXHRpZiAoZGVjaW1hbFBvc2l0aW9uIDwgMClcblx0XHRkZWNpbWFsUG9zaXRpb24gPSBpO1xuXG5cdHZTdHJpbmcgPSB2LnRvRml4ZWQobm9QaEFmdGVyRGVjaW1hbCk7XG5cdHZhciBzcGxpdCA9IHZTdHJpbmcuc3BsaXQoXCIuXCIpO1xuXHQvL3dpbmRvdy5jb25zb2xlLmxvZyhzcGxpdCk7XG5cdHZhciB2U3RyaW5nQmVmb3JlRGVjaW1hbCA9IChzcGxpdFswXSArIFwiXCIpLnNwbGl0KFwiXCIpO1xuXHR2YXIgdlN0cmluZ0FmdGVyRGVjaW1hbCA9IChzcGxpdFsxXSArIFwiXCIpLnNwbGl0KFwiXCIpO1xuXG5cdGlmICh2U3RyaW5nQmVmb3JlRGVjaW1hbCAmJiB2U3RyaW5nQmVmb3JlRGVjaW1hbFswXSA9PT0gXCIwXCIpXG5cdFx0dlN0cmluZ0JlZm9yZURlY2ltYWwuc2hpZnQoKTtcblxuXHQvL3dpbmRvdy5jb25zb2xlLmxvZyhmc0JlZm9yZURlY2ltYWwgKyBcIjwtLS0tLS0tLS0tPlwiICsgZnNBZnRlckRlY2ltYWwgKyBcIiAmICAgICAgICBcIiArIHZTdHJpbmdCZWZvcmVEZWNpbWFsICsgXCI8LS0tLS0tLS0tLT5cIiArIHZTdHJpbmdBZnRlckRlY2ltYWwpO1xuXG5cdHZhciBub1BoUHJvY2Vzc2VkID0gMDtcblx0dmFyIG5vRGlnaXRzQWRkZWQgPSAwO1xuXHR2YXIgbm9Db21tYUFkZGVkID0gMDtcblx0dmFyIGNvbW1hRGlzdGFuY2UgPSAwO1xuXHR2YXIgZGlzdGFuY2VGcm9tTGFzdENvbW1hID0gMDtcblxuXHR3aGlsZSAoZnNCZWZvcmVEZWNpbWFsLmxlbmd0aCA+IDApIHtcblx0XHRtYXRjaCA9IGZzQmVmb3JlRGVjaW1hbC5wb3AoKTtcblxuXHRcdGlmIChtYXRjaCA9PT0gXCIjXCIgfHwgbWF0Y2ggPT09IFwiMFwiKSB7XG5cdFx0XHRub1BoUHJvY2Vzc2VkKys7XG5cblx0XHRcdGlmIChub1BoUHJvY2Vzc2VkID09PSBub1BoQmVmb3JlRGVjaW1hbCkge1xuXHRcdFx0XHR2YXIgZGlnaXRzID0gdlN0cmluZ0JlZm9yZURlY2ltYWw7XG5cdFx0XHRcdHZTdHJpbmdCZWZvcmVEZWNpbWFsID0gW107XG5cblx0XHRcdFx0aWYgKG1hdGNoID09PSBcIjBcIikge1xuXHRcdFx0XHRcdC8vdmFyIHRvdGFsRGlnaXRzID0gcmVzdWx0Lm1hdGNoKC9bMC05XS9nKS5sZW5ndGg7XG5cdFx0XHRcdFx0dmFyIHRvUGFkID0gbm9QaEJlZm9yZURlY2ltYWwgLSBub0RpZ2l0c0FkZGVkIC0gKGRpZ2l0cyA/IGRpZ2l0cy5sZW5ndGggOiAwKTtcblxuXHRcdFx0XHRcdHdoaWxlICh0b1BhZCA+IDApIHtcblx0XHRcdFx0XHRcdGRpZ2l0cy51bnNoaWZ0KFwiMFwiKTtcblx0XHRcdFx0XHRcdHRvUGFkLS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0d2hpbGUgKGRpZ2l0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gZGlnaXRzLnBvcCgpICsgcmVzdWx0O1xuXHRcdFx0XHRcdGRpc3RhbmNlRnJvbUxhc3RDb21tYSsrO1xuXG5cdFx0XHRcdFx0aWYgKGRpc3RhbmNlRnJvbUxhc3RDb21tYSAlIGNvbW1hRGlzdGFuY2UgPT09IDAgJiYgbm9Db21tYUFkZGVkID09PSBub0NvbW1hICYmIGRpZ2l0cy5sZW5ndGggPiAwKVxuXHRcdFx0XHRcdFx0cmVzdWx0ID0gZGlnaXRHcm91cFNlcGFyYXRvciArIHJlc3VsdDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc05lZ2F0aXZlKVxuXHRcdFx0XHRcdHJlc3VsdCA9IFwiLVwiICsgcmVzdWx0O1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAodlN0cmluZ0JlZm9yZURlY2ltYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHJlc3VsdCA9IHZTdHJpbmdCZWZvcmVEZWNpbWFsLnBvcCgpICsgcmVzdWx0O1xuXHRcdFx0XHRcdG5vRGlnaXRzQWRkZWQrKztcblx0XHRcdFx0XHRkaXN0YW5jZUZyb21MYXN0Q29tbWErKztcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIGlmIChtYXRjaCA9PT0gXCIwXCIpIHtcblx0XHRcdFx0XHRyZXN1bHQgPSBcIjBcIiArIHJlc3VsdDtcblx0XHRcdFx0XHRub0RpZ2l0c0FkZGVkKys7XG5cdFx0XHRcdFx0ZGlzdGFuY2VGcm9tTGFzdENvbW1hKys7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGlzdGFuY2VGcm9tTGFzdENvbW1hICUgY29tbWFEaXN0YW5jZSA9PT0gMCAmJiBub0NvbW1hQWRkZWQgPT09IG5vQ29tbWEgJiYgdlN0cmluZ0JlZm9yZURlY2ltYWwubGVuZ3RoID4gMClcblx0XHRcdFx0XHRyZXN1bHQgPSBkaWdpdEdyb3VwU2VwYXJhdG9yICsgcmVzdWx0O1xuXHRcdFx0fVxuXG5cblx0XHR9IGVsc2UgaWYgKChtYXRjaFswXSA9PT0gXCJFXCIgfHwgbWF0Y2hbMF0gPT09IFwiZVwiKSAmJiBtYXRjaFttYXRjaC5sZW5ndGggLSAxXSA9PT0gXCIwXCIgJiYgL1tlRV1bKy1dKlswXSsvLnRlc3QobWF0Y2gpKSB7XG5cdFx0XHRpZiAoZXhwb25lbnQgPCAwKVxuXHRcdFx0XHRtYXRjaCA9IG1hdGNoLnJlcGxhY2UoXCIrXCIsIFwiXCIpLnJlcGxhY2UoXCItXCIsIFwiXCIpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRtYXRjaCA9IG1hdGNoLnJlcGxhY2UoXCItXCIsIFwiXCIpO1xuXG5cdFx0XHRyZXN1bHQgKz0gbWF0Y2gucmVwbGFjZSgvWzBdKy8sIGZ1bmN0aW9uICgkMCkge1xuXHRcdFx0XHRyZXR1cm4gcGFkKGV4cG9uZW50LCAkMC5sZW5ndGgpO1xuXHRcdFx0fSk7XG5cblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAobWF0Y2ggPT09IFwiLFwiKSB7XG5cdFx0XHRcdG5vQ29tbWFBZGRlZCsrO1xuXHRcdFx0XHRjb21tYURpc3RhbmNlID0gZGlzdGFuY2VGcm9tTGFzdENvbW1hO1xuXHRcdFx0XHRkaXN0YW5jZUZyb21MYXN0Q29tbWEgPSAwO1xuXG5cdFx0XHRcdGlmICh2U3RyaW5nQmVmb3JlRGVjaW1hbC5sZW5ndGggPiAwKVxuXHRcdFx0XHRcdHJlc3VsdCA9IGRpZ2l0R3JvdXBTZXBhcmF0b3IgKyByZXN1bHQ7XG5cdFx0XHR9IGVsc2UgaWYgKG1hdGNoLmxlbmd0aCA+IDEgJiYgKChtYXRjaFswXSA9PT0gXCJcXFwiXCIgJiYgbWF0Y2hbbWF0Y2gubGVuZ3RoIC0gMV0gPT09IFwiXFxcIlwiKSB8fCAobWF0Y2hbMF0gPT09IFwiJ1wiICYmIG1hdGNoW21hdGNoLmxlbmd0aCAtIDFdID09PSBcIidcIikpKSB7XG5cdFx0XHRcdHJlc3VsdCA9IG1hdGNoLnNsaWNlKDEsIG1hdGNoLmxlbmd0aCAtIDEpICsgcmVzdWx0O1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXN1bHQgPSBtYXRjaCArIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHR2YXIgY2hhckNvdW50ID0gMDtcblx0dmFyIHJlc3VsdEFmdGVyRGVjaW1hbCA9IFwiXCI7XG5cdHZhciBhZGREZWNpbWFsU2VwYXJhdG9yID0gZmFsc2U7XG5cblx0d2hpbGUgKGZzQWZ0ZXJEZWNpbWFsLmxlbmd0aCA+IDApIHtcblx0XHRtYXRjaCA9IGZzQWZ0ZXJEZWNpbWFsLnNoaWZ0KCk7XG5cblx0XHRpZiAobWF0Y2ggPT09IFwiI1wiIHx8IG1hdGNoID09PSBcIjBcIikge1xuXHRcdFx0aWYgKHZTdHJpbmdBZnRlckRlY2ltYWwubGVuZ3RoID4gMCAmJiBOdW1iZXIodlN0cmluZ0FmdGVyRGVjaW1hbC5qb2luKFwiXCIpKSAhPT0gMCkge1xuXHRcdFx0XHRyZXN1bHRBZnRlckRlY2ltYWwgKz0gdlN0cmluZ0FmdGVyRGVjaW1hbC5zaGlmdCgpO1xuXHRcdFx0XHRhZGREZWNpbWFsU2VwYXJhdG9yID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKG1hdGNoID09PSBcIjBcIikge1xuXHRcdFx0XHRyZXN1bHRBZnRlckRlY2ltYWwgKz0gXCIwXCI7XG5cdFx0XHRcdGFkZERlY2ltYWxTZXBhcmF0b3IgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobWF0Y2gubGVuZ3RoID4gMSAmJiAoKG1hdGNoWzBdID09PSBcIlxcXCJcIiAmJiBtYXRjaFttYXRjaC5sZW5ndGggLSAxXSA9PT0gXCJcXFwiXCIpIHx8IChtYXRjaFswXSA9PT0gXCInXCIgJiYgbWF0Y2hbbWF0Y2gubGVuZ3RoIC0gMV0gPT09IFwiJ1wiKSkpIHtcblx0XHRcdHJlc3VsdEFmdGVyRGVjaW1hbCArPSBtYXRjaC5zbGljZSgxLCBtYXRjaC5sZW5ndGggLSAxKTtcblx0XHRcdC8vYWRkRGVjaW1hbFNlcGFyYXRvciA9IHRydWU7XG5cdFx0fSBlbHNlIGlmICgobWF0Y2hbMF0gPT09IFwiRVwiIHx8IG1hdGNoWzBdID09PSBcImVcIikgJiYgbWF0Y2hbbWF0Y2gubGVuZ3RoIC0gMV0gPT09IFwiMFwiICYmIC9bZUVdWystXSpbMF0rLy50ZXN0KG1hdGNoKSkge1xuXHRcdFx0aWYgKGV4cG9uZW50IDwgMClcblx0XHRcdFx0bWF0Y2ggPSBtYXRjaC5yZXBsYWNlKFwiK1wiLCBcIlwiKS5yZXBsYWNlKFwiLVwiLCBcIlwiKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0bWF0Y2ggPSBtYXRjaC5yZXBsYWNlKFwiLVwiLCBcIlwiKTtcblx0XHRcdHJlc3VsdEFmdGVyRGVjaW1hbCArPSBtYXRjaC5yZXBsYWNlKC9bMF0rLywgZnVuY3Rpb24gKCQwKSB7XG5cdFx0XHRcdHJldHVybiBwYWQoZXhwb25lbnQsICQwLmxlbmd0aCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0QWZ0ZXJEZWNpbWFsICs9IG1hdGNoO1xuXHRcdFx0Ly9hZGREZWNpbWFsU2VwYXJhdG9yID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRyZXN1bHQgKz0gKGFkZERlY2ltYWxTZXBhcmF0b3IgPyBkZWNpbWFsU2VwYXJhdG9yIDogXCJcIikgKyByZXN1bHRBZnRlckRlY2ltYWw7XG5cdC8vd2luZG93LmNvbnNvbGUubG9nKHJlc3VsdCk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyNlbmRyZWdpb24gZm9ybWF0dGluZyBmdW5jdGlvbnMvbWV0aG9kc1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JqZWN0SWQoeCwgeSwgY3R4KSB7XG5cdHggKj0gZGV2aWNlUGl4ZWxCYWNraW5nU3RvcmVSYXRpbztcblx0eSAqPSBkZXZpY2VQaXhlbEJhY2tpbmdTdG9yZVJhdGlvO1xuXHR2YXIgcGl4ZWxzID0gY3R4LmdldEltYWdlRGF0YSh4LCB5LCAyLCAyKS5kYXRhO1xuXHR2YXIgaXNPYmplY3QgPSB0cnVlO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cblx0XHRpZiAocGl4ZWxzW2ldICE9PSBwaXhlbHNbaSArIDRdIHwgcGl4ZWxzW2ldICE9PSBwaXhlbHNbaSArIDhdIHwgcGl4ZWxzW2ldICE9PSBwaXhlbHNbaSArIDEyXSkge1xuXHRcdFx0aXNPYmplY3QgPSBmYWxzZTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpc09iamVjdCkge1xuXHRcdHJldHVybiBSR0JUb0ludChwaXhlbHNbMF0sIHBpeGVsc1sxXSwgcGl4ZWxzWzJdKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdC8vd2luZG93LmNvbnNvbGUubG9nKHBpeGVscyk7XG59XG5cbi8vZXh0cmFjdHMgbW91c2UgY29vcmRpbmF0ZXMgZnJvbSB0aGUgZXZlbnQgcGFyYW1ldGVyc1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vdXNlQ29vcmRpbmF0ZXMoZXYpIHtcblx0dmFyIHggPSAwO1xuXHR2YXIgeSA9IDA7XG5cblx0ZXYgPSBldiB8fCB3aW5kb3cuZXZlbnQ7XG5cblx0aWYgKGV2Lm9mZnNldFggfHwgZXYub2Zmc2V0WCA9PT0gMCkge1xuXHRcdHggPSBldi5vZmZzZXRYO1xuXHRcdHkgPSBldi5vZmZzZXRZO1xuXHR9IGVsc2UgaWYgKGV2LmxheWVyWCB8fCBldi5sYXllclggPT0gMCkgeyAvLyBGaXJlZm94XG5cdFx0eCA9IGV2LmxheWVyWDtcblx0XHR5ID0gZXYubGF5ZXJZO1xuXHR9XG5cdGVsc2Uge1xuXHRcdHggPSBldi5wYWdlWCAtIGV2LnRhcmdldC5vZmZzZXRMZWZ0O1xuXHRcdHkgPSBldi5wYWdlWSAtIGV2LnRhcmdldC5vZmZzZXRUb3A7XG5cdH1cblxuXHRyZXR1cm4geyB4OiB4LCB5OiB5IH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9udFN0cmluZyhwcmVmaXgsIG9iamVjdCwgZmFsbGJhY2tPYmplY3QpIHtcblx0dmFyIGZvbnRTdHJpbmcgPSBcIlwiO1xuXG5cdHZhciBmb250U3R5bGVTdHJpbmcgPSBwcmVmaXggPyBwcmVmaXggKyBcIkZvbnRTdHlsZVwiIDogXCJmb250U3R5bGVcIjtcblx0dmFyIGZvbnRXZWlnaHRTdHJpbmcgPSBwcmVmaXggPyBwcmVmaXggKyBcIkZvbnRXZWlnaHRcIiA6IFwiZm9udFdlaWdodFwiO1xuXHR2YXIgZm9udFNpemVTdHJpbmcgPSBwcmVmaXggPyBwcmVmaXggKyBcIkZvbnRTaXplXCIgOiBcImZvbnRTaXplXCI7XG5cdHZhciBmb250RmFtaWx5U3RyaW5nID0gcHJlZml4ID8gcHJlZml4ICsgXCJGb250RmFtaWx5XCIgOiBcImZvbnRGYW1pbHlcIjtcblxuXG5cblx0Zm9udFN0cmluZyArPSBvYmplY3RbZm9udFN0eWxlU3RyaW5nXSA/IG9iamVjdFtmb250U3R5bGVTdHJpbmddICsgXCIgXCIgOiAoZmFsbGJhY2tPYmplY3QgJiYgZmFsbGJhY2tPYmplY3RbZm9udFN0eWxlU3RyaW5nXSkgPyAoZmFsbGJhY2tPYmplY3RbZm9udFN0eWxlU3RyaW5nXSArIFwiIFwiKSA6IFwiXCI7XG5cdGZvbnRTdHJpbmcgKz0gb2JqZWN0W2ZvbnRXZWlnaHRTdHJpbmddID8gb2JqZWN0W2ZvbnRXZWlnaHRTdHJpbmddICsgXCIgXCIgOiAoZmFsbGJhY2tPYmplY3QgJiYgZmFsbGJhY2tPYmplY3RbZm9udFdlaWdodFN0cmluZ10pID8gKGZhbGxiYWNrT2JqZWN0W2ZvbnRXZWlnaHRTdHJpbmddICsgXCIgXCIpIDogXCJcIjtcblx0Zm9udFN0cmluZyArPSBvYmplY3RbZm9udFNpemVTdHJpbmddID8gb2JqZWN0W2ZvbnRTaXplU3RyaW5nXSArIFwicHggXCIgOiAoZmFsbGJhY2tPYmplY3QgJiYgZmFsbGJhY2tPYmplY3RbZm9udFNpemVTdHJpbmddKSA/IChmYWxsYmFja09iamVjdFtmb250U2l6ZVN0cmluZ10gKyBcInB4IFwiKSA6IFwiXCI7XG5cblxuXHR2YXIgZm9udEZhbWlseSA9IG9iamVjdFtmb250RmFtaWx5U3RyaW5nXSA/IG9iamVjdFtmb250RmFtaWx5U3RyaW5nXSArIFwiXCIgOiAoZmFsbGJhY2tPYmplY3QgJiYgZmFsbGJhY2tPYmplY3RbZm9udEZhbWlseVN0cmluZ10pID8gKGZhbGxiYWNrT2JqZWN0W2ZvbnRGYW1pbHlTdHJpbmddICsgXCJcIikgOiBcIlwiO1xuXG5cdGlmICghaXNDYW52YXNTdXBwb3J0ZWQgJiYgZm9udEZhbWlseSkge1xuXHRcdHZhciBmaXJzdEZvbnRGYW1pbHkgPSBmb250RmFtaWx5LnNwbGl0KFwiLFwiKVswXTtcblxuXHRcdGlmIChmaXJzdEZvbnRGYW1pbHlbMF0gIT09IFwiJ1wiICYmIGZpcnN0Rm9udEZhbWlseVswXSAhPT0gXCJcXFwiXCIpXG5cdFx0XHRmaXJzdEZvbnRGYW1pbHkgPSBcIidcIiArIGZpcnN0Rm9udEZhbWlseSArIFwiJ1wiO1xuXG5cdFx0Zm9udFN0cmluZyArPSBmaXJzdEZvbnRGYW1pbHk7XG5cdH0gZWxzZVxuXHRcdGZvbnRTdHJpbmcgKz0gZm9udEZhbWlseTtcblxuXHRyZXR1cm4gZm9udFN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgb2JqZWN0LCBmYWxsYmFja09iamVjdCkge1xuXG5cdHZhciB2YWx1ZSA9IHByb3BlcnR5TmFtZSBpbiBvYmplY3QgPyBvYmplY3RbcHJvcGVydHlOYW1lXSA6IGZhbGxiYWNrT2JqZWN0W3Byb3BlcnR5TmFtZV07XG5cblx0cmV0dXJuIHZhbHVlO1xufVxuXG52YXIgb3B0aW1pemVGb3JIaURQSSA9IHRydWU7XG4vL29wdGltaXplRm9ySGlEUEkgPSBmYWxzZTtcblxudmFyIGRldmljZVBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xudmFyIGJhY2tpbmdTdG9yZVJhdGlvID0gMTtcbnZhciBkZXZpY2VQaXhlbEJhY2tpbmdTdG9yZVJhdGlvID0gb3B0aW1pemVGb3JIaURQSSA/IGRldmljZVBpeGVsUmF0aW8gLyBiYWNraW5nU3RvcmVSYXRpbyA6IDE7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDYW52YXNTaXplKGNhbnZhcywgd2lkdGgsIGhlaWdodCkge1xuXG5cdGlmIChpc0NhbnZhc1N1cHBvcnRlZCAmJiAhIW9wdGltaXplRm9ySGlEUEkpIHtcblx0XHR2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcblx0XHRiYWNraW5nU3RvcmVSYXRpbyA9IGN0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG5cdFx0XHRcdFx0XHRcdGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG5cdFx0XHRcdFx0XHRcdGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcblx0XHRcdFx0XHRcdFx0Y3R4Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG5cdFx0XHRcdFx0XHRcdGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8IDE7XG5cblxuXHRcdGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW8gPSBkZXZpY2VQaXhlbFJhdGlvIC8gYmFja2luZ1N0b3JlUmF0aW87XG5cblx0XHRjYW52YXMud2lkdGggPSB3aWR0aCAqIGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW87XG5cdFx0Y2FudmFzLmhlaWdodCA9IGhlaWdodCAqIGRldmljZVBpeGVsQmFja2luZ1N0b3JlUmF0aW87XG5cblx0XHRpZiAoZGV2aWNlUGl4ZWxSYXRpbyAhPT0gYmFja2luZ1N0b3JlUmF0aW8pIHtcblxuXHRcdFx0Y2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuXHRcdFx0Y2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG5cblx0XHRcdGN0eC5zY2FsZShkZXZpY2VQaXhlbEJhY2tpbmdTdG9yZVJhdGlvLCBkZXZpY2VQaXhlbEJhY2tpbmdTdG9yZVJhdGlvKTtcblxuXHRcdH1cblxuXHRcdC8vd2luZG93LmFsZXJ0KGJhY2tpbmdTdG9yZVJhdGlvKTtcblx0XHQvL3dpbmRvdy5hbGVydChkZXZpY2VQaXhlbFJhdGlvKTtcblxuXHR9IGVsc2Uge1xuXHRcdGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuXHRcdGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cdH1cblxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCkge1xuXHR2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcblx0Y2FudmFzLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwiY2FudmFzanMtY2hhcnQtY2FudmFzXCIpO1xuXG5cdHNldENhbnZhc1NpemUoY2FudmFzLCB3aWR0aCwgaGVpZ2h0KTtcblxuXHRpZiAoIWlzQ2FudmFzU3VwcG9ydGVkICYmIHR5cGVvZiAoR192bWxDYW52YXNNYW5hZ2VyKSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdEdfdm1sQ2FudmFzTWFuYWdlci5pbml0RWxlbWVudChjYW52YXMpO1xuXHR9XG5cblx0cmV0dXJuIGNhbnZhcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydENhbnZhcyhjYW52YXMsIGZvcm1hdCwgZmlsZU5hbWUpIHtcblx0aWYgKCFjYW52YXMgfHwgIWZvcm1hdCB8fCAhZmlsZU5hbWUpXG5cdFx0cmV0dXJuO1xuXG5cdHZhciBmdWxsRmlsZU5hbWUgPSBmaWxlTmFtZSArIFwiLlwiICsgKGZvcm1hdCA9PT0gXCJqcGVnXCIgPyBcImpwZ1wiIDogZm9ybWF0KTtcblx0dmFyIG1pbWVUeXBlID0gXCJpbWFnZS9cIiArIGZvcm1hdDtcblx0dmFyIGltZyA9IGNhbnZhcy50b0RhdGFVUkwobWltZVR5cGUpO1xuXHR2YXIgc2F2ZWQgPSBmYWxzZTtcblxuXHR2YXIgZG93bmxvYWRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG5cdGRvd25sb2FkTGluay5kb3dubG9hZCA9IGZ1bGxGaWxlTmFtZTtcblx0ZG93bmxvYWRMaW5rLmhyZWYgPSBpbWc7XG5cdGRvd25sb2FkTGluay50YXJnZXQgPSBcIl9ibGFua1wiO1xuXHR2YXIgZTtcblxuXG5cdGlmICh0eXBlb2YgKEJsb2IpICE9PSBcInVuZGVmaW5lZFwiICYmICEhbmV3IEJsb2IoKSkge1xuXG5cdFx0Ly9hbGVydChcImJsb2JcIik7XG5cdFx0dmFyIGltZ0RhdGEgPSBpbWcucmVwbGFjZSgvXmRhdGE6W2Etei9dKjtiYXNlNjQsLywgJycpO1xuXG5cdFx0dmFyIGJ5dGVTdHJpbmcgPSBhdG9iKGltZ0RhdGEpO1xuXHRcdHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuXHRcdHZhciBpbnRBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBieXRlU3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpbnRBcnJheVtpXSA9IGJ5dGVTdHJpbmcuY2hhckNvZGVBdChpKTtcblx0XHR9XG5cblx0XHR2YXIgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6IFwiaW1hZ2UvXCIgKyBmb3JtYXQgfSk7XG5cblx0XHQvLyBTYXZlIHRoZSBibG9iXG5cdFx0dHJ5IHtcblx0XHRcdHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihibG9iLCBmdWxsRmlsZU5hbWUpO1xuXHRcdFx0c2F2ZWQgPSB0cnVlO1xuXHRcdH1cblx0XHRjYXRjaCAoZSkge1xuXHRcdFx0ZG93bmxvYWRMaW5rLmRhdGFzZXQuZG93bmxvYWR1cmwgPSBbbWltZVR5cGUsIGRvd25sb2FkTGluay5kb3dubG9hZCwgZG93bmxvYWRMaW5rLmhyZWZdLmpvaW4oJzonKTtcblx0XHRcdGRvd25sb2FkTGluay5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFzYXZlZCkge1xuXG5cdFx0dHJ5IHtcblxuXHRcdFx0ZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIk1vdXNlRXZlbnRzXCIpO1xuXG5cdFx0XHRldmVudC5pbml0TW91c2VFdmVudChcImNsaWNrXCIsIHRydWUsIGZhbHNlLCB3aW5kb3csXG5cdFx0XHRcdFx0XHRcdCAwLCAwLCAwLCAwLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLFxuXHRcdFx0XHRcdFx0XHQgZmFsc2UsIDAsIG51bGwpO1xuXG5cdFx0XHRpZiAoZG93bmxvYWRMaW5rLmRpc3BhdGNoRXZlbnQpIHtcblx0XHRcdFx0Ly9hbGVydChcImRpc3BhdGNoRXZlbnRcIik7XG5cdFx0XHRcdGRvd25sb2FkTGluay5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKGRvd25sb2FkTGluay5maXJlRXZlbnQpIHtcblx0XHRcdFx0Ly9hbGVydChcImZpcmVFdmVudFwiKTtcblx0XHRcdFx0ZG93bmxvYWRMaW5rLmZpcmVFdmVudChcIm9uY2xpY2tcIik7XG5cdFx0XHR9XG5cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHR2YXIgd2luID0gd2luZG93Lm9wZW4oKTtcblx0XHRcdC8vYWxlcnQoXCI8SUUxMFwiKTtcblx0XHRcdC8vd2luZG93LmNvbnNvbGUubG9nKFwiSUVcIik7XG5cdFx0XHR3aW4uZG9jdW1lbnQud3JpdGUoXCI8aW1nIHNyYz0nXCIgKyBpbWcgKyBcIic+PC9pbWc+PGRpdj5QbGVhc2UgcmlnaHQgY2xpY2sgb24gdGhlIGltYWdlIGFuZCBzYXZlIGl0IHRvIHlvdXIgZGV2aWNlPC9kaXY+XCIpO1xuXHRcdFx0d2luLmRvY3VtZW50LmNsb3NlKCk7XG5cdFx0fVxuXHR9XG59XG5cbnZhciBiYXNlNjRJbWFnZXMgPSB7XG5cdHJlc2V0OiB7XG5cdFx0aW1hZ2U6IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFjQ0FZQUFBQUF3cjBpQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFMRWdBQUN4SUIwdDErL0FBQUFCeDBSVmgwVTI5bWRIZGhjbVVBUVdSdlltVWdSbWx5WlhkdmNtdHpJRU5UTnVpOHNvd0FBQUtSU1VSQlZFaUpyZFkvaUYxRkZNZnh6d25ackdJU1VTUi9KTEdJaG9oL1FpUk5CTFd4TUxJV0Vrd2JnaUFvRmdvVzJtaGxZNmRncFkySWxSQlJ4QlNLaFNBS0lrbFdKUll1TVpLQWhpeW9wQWlhVFk3RnZSdG1aKy9lZDkvekhSamV6THc1di9POWQ4NmN1WkdacG1VUkFmZG41bzlEZmRaTkxYcGp6K0x6aVBneUlsNk1pRzBqUFRKelpCdXlEclA0QlZtMFAvQUtibGpUYjRUb1kvZ0dld1lBN0t5Q2wrMWIzRFVZQU52d2JpSHcwZ0NBR1J6Qk96alRBWEVPdTBjQzRDaCtyNXgvSHJwZHJjWm12SURGU3VjTXRuWUNZQysrNkhtTkR3OEZLRFQzNEVUcmY2MzkvYXpPcjV2d1JrL2c1ZmJldUFCdGdDMDRYV2s5VlFMY2lNUDRFSC8zQUZ6RXJSTkM3TVhsUW1zZXNTb0hzR1BFMjNobUVvQlcrNjFLNjZITVhGbUlNdk44bXlpbFhTMzZSMDF1YitLZll2dzQzWlh3WURYK0FIUDRCQWNpNHBGSm9tZm1yL2lobU5vZkVTc0JJbUpHazdtbG5jck00NW41SlBiaHowa0FXcHN2K2p1eGFYMjFZSVBtVkpTMnVOekpNUzZaTmV4QzBkK0k3ZlVXWExGeXoya1NabHBXUHZBU2xtcUFmL0ZYTlhmM0ZBRjJGLzFMdUZpZkFsaW9uQjZkUnVTSTJJd0hpNmx6bVhtcDZ4UjhYWTBmaUloN3BzQXdoKzNGdURrUkhRVmpsK2E4bGtYam8wa0xVS0g3WGFWNW9PODZQbVoxRlR6eVA0Sy9YR2w5di96d2ZiVzdCcmlpdUVUR0NQNWNoOWJjOWY5N0hGL3ZjRnpDYTVnZEVQZ1dxK3QvNHYwVjYzb0UxdUY0aDBEaUZKN0huU1dNcHBEZGgxZHh0c1B2SjJ3Y0JOQUtic0pYYTBDazVvcGRhQlBzUk51L3VzYmEwOWkxS3NhQVZ6bUx0M3NnaHJSanVLMVRmNHhrZWdJbnh3eThnS2Y3ZEtNVkgyUVJzVjV6WFIvQ2Z0eXUrYUthS2Jia1Fyc2RIK1BUekx6Y3F6a09RQVZ6TSs3RkhkaXFxZTIvWVQ0ekYvdDhTL3NQbWF3eXZDOTc0dmNBQUFBQVNVVk9SSzVDWUlJPVwiXG5cdH0sXG5cdHBhbjoge1xuXHRcdGltYWdlOiBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ0FBQUFBZ0NBWUFBQUJ6ZW5yMEFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFBTEVnQUFDeElCMHQxKy9BQUFBQngwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnUm1seVpYZHZjbXR6SUVOVE51aThzb3dBQUFKVlNVUkJWRmlGdlplN2ExUkJHTVYveDJoV0k0SnBmS0NJaVNCS09vT0NrSUQvd1A0QkZxSUlGa0UwMkNoSWlDOFFES2xTaUkzWXFSQnNCVkd3VU5BVWRpSUVVZ2ppQXpRSUlzdUtKc2ZpenNYcjV0N2QrOGptd0xEZnpIejNuTE96YzcrWnhUWmxHeURnWmlXT0N1Sjl3SDJnQ1V5dXFRRmdGL0FHY0tKTnJZa0JZQmo0MENJZXQrbXVHUWkvOTZrTTRXUzdDL1RtNVZVZzd3aEpnOEJrRUdrQ1I0QkRZZm9kc0FEVWdQNndFck81aUN0c3dzdUpiMzJoZGJYeThxekw1VElkbXpKaW5IZFpvWklCWmNTRmtHbEFLczFaM1lDa2V0WmNCdG91dWFRTmtyYmxNaUJwQnJobWU3bUFnVTR3TUN2cGNGc0RrcTRDNTRERlZSVEg5aCtpNnZsRTByNVVBNUltZ0N1aDI4akIyOGlJczdCSVZDT2VTdG9aRDY0UDR1UEFqVVR5Z0tTeDJGc0syVEl3a3VnZms5UWtmZC9FK3lNV0hRQ2VTUnF4L1IzZ09wM0xhemZhUzJDNEI1Z0hEZ0Q3VTl4M0UzdUFIN0tOcEMzQUhIQXdUTDRGSGdNOUdROHZBYVBBMGRCL0FieHFrMi9nQkxBOU1YYmE5cjFrL2Q0TGZBM0p0d3VlQmVNNTh1Y1MrZWRYbkFXMjN3UDEwTjNhZHZFaTlDWGl6VG55TjRiUFM3Wm40c0gvZHEzdDE4QVk0ZTFZTFlTeTNnL2NzajJWbkZzaFpQdU9wT2VTS0hDb2RVSU51R2o3WWV0RTZqZTFQVjlRb05QSjlTdE5IS29keDduUmJpV3JHSEJHWEFpNURVaXF0UXd0cGNXSzBKdWJ0OENsdEE1TUVWMUlmd083K1ZmZlB3R2ZpYTVtMzRDVDRiWHVqSUlYMFFuYTEvY0dNTnFWL3dVSkUyY3p4RDhDUTRYNVNsN0p6N1NJTHdDRHBiaktQQlJNSEFkK0V0WDRIV1Y1U3BkYzJ3OGtEUUdQYkg4cHkvTVhNeWdNNjkvRkt6NEFBQUFBU1VWT1JLNUNZSUk9XCJcblx0fSxcblx0em9vbToge1xuXHRcdGltYWdlOiBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ0FBQUFBZ0NBWUFBQUJ6ZW5yMEFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFBSzZ3QUFDdXNCZ29zTldnQUFBQngwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnUm1seVpYZHZjbXR6SUVOVE51aThzb3dBQUFNcVNVUkJWRmlGdmRmYmo5MVRGTUR4ejU3VTZHVUVNUzFhWXp5TXRDU1NEaFdqQ1pNSW5wQUkza2hFL1FIdGd6ZFJrWGdTQ1M4U0VTOWVwS0xpMG9SS05FVGpSYWhSRXEyS1Mxc3RkUnVqdERQdGJBOTduNXpkbjkrNXpKeFRLOWs1djNQT1htdDk5MXA3cjcxK0ljYW9Hd2toVE9JZWJNUnF6T0JUdklHM1k0elRYUm1xU295eDVjQUtiTUpPSE1GSm5NWjgvanlGYVh5TVI3RzZuYjFhSDIyY1A0QnZjQnh6aUczR0tmeVRJUjlENkJZZzFLVWdoUEJDRHZlRmxiLzI0QXY4aXVVWXc0MVlWc3o1Rzd1eEtjWjRhTUVwd0d0NU5ZM1YvWWJIc1E2cmNBSE93L2tZeGlnZXdyNUNadzRmWUd4QktjQ0xPRkVZZWhYck1kUmhyNXlMRVR4VlNjc09MT2tLQVBmbjFUWU1QSXZMRnJTaFVsUzJGRFptOFhSSEFDekZBV2wzUjJ4YnFQTUNZaG1lTENBT1lFTW5nQWN6YmNUdnVIWXh6Z3VJeS9GZXNSOWU2Z1N3VS9Pb1BZSEJIZ0hndmlJS1gyRmxxN2szNEtobWNWbmJpL1BDOEpYNE1nTWN4YjExOHdad2R6NWFJU3NjcXg3VlJjb3g3TXJQUTdpK2J0SUFKckFrZjkrYkk5RVBtWlkySUF4aVRTdUFsZExxNFk5K0FjU1VoNzhLUDB0YkFjd1UzNWNYTUQxSkNJRlVvR2llaGxxQXo2VE5CMWYxQzBESyswaCtuc05QclFDMmE0YnFHbWxEOWtPR2NXdCtQbzZwVmdEdlN4ZkphU2tGZDRVUUJ2b0FzQlliQ29CM2EyZmxNN3NsQTBSOGl5dDZyQUZEZURQYm04ZU9UcFZ3R0Q5cVZxN25MYklhWm5ta3NQVTFKdHNDWk1YTm1wZFJ4RmFzV0lUemg2WGozTEN6cmExT3hjRDJRakhpR1Z6ZHBmT1JuTXFaaW8yUGNGMjNBQmRKRjFOcDRCUHB0bHlQaTZXelBZQnpwSlp0SGU3QTZ4VzljbnlQOFRxQS8vU0VJWVJMOEJ4dWw3cmlodndndFZuNzhXY0dHWlhhOUhHZDVURHVqREh1T2VQWE5pSGRLaldnWlgvWWJzeEx4L2t0cWJqVnpUbGNqVVNudkk1SnJkbFVWcDZXZXNaWjZSMWhScnBxOStFVlRHUzlqVGpZQXVLSW91R3BiY3VyRWtJWXhDMDUxS05TYW1henNjK3hLOGI0UzBWbkVpL2owaHFUUCtNMjdPMjU4ZWdRd1p1enM3cEk3TWY0V1FYSUVEYzVzOXN1eCs1KzFQeTJFbVA4VU9xNkd2V2hJU2N4ZmRZalVFUmlBdDlKZDg0SjZhMTZ6ZjhKRUtUM3lDbThnMVV4UnY4Q0M0cHlSaHpSMXVVQUFBQUFTVVZPUks1Q1lJST1cIlxuXHR9LFxuXHRtZW51OiB7XG5cdFx0aW1hZ2U6IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFnQ0FZQUFBQWJpZmpNQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFLNndBQUN1c0Jnb3NOV2dBQUFCeDBSVmgwVTI5bWRIZGhjbVVBUVdSdlltVWdSbWx5WlhkdmNtdHpJRU5UTnVpOHNvd0FBQUFXZEVWWWRFTnlaV0YwYVc5dUlGUnBiV1VBTURjdk1UVXZNVFRQc3ZVMEFBQUFQMGxFUVZSSWllMlNNUW9BSUJERFV2SC9YNjY3ZzhzSko5S09oWVlPa1cwcUdhVTFNUGRDMHZHU2JWMTlFQUNvM1lNUEFGSDVCVUJVanNxZkFQcFZYdE5nR0RmeEVEQ3RBQUFBQUVsRlRrU3VRbUNDXCJcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QnV0dG9uU3RhdGUoY2hhcnQsIGJ1dHRvbiwgc3RhdGUpIHtcblx0aWYgKGJ1dHRvbi5nZXRBdHRyaWJ1dGUoXCJzdGF0ZVwiKSAhPT0gc3RhdGUpIHtcblxuXHRcdGJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJzdGF0ZVwiLCBzdGF0ZSk7XG5cdFx0YnV0dG9uLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgJ2J1dHRvbicpO1xuXHRcdGJ1dHRvbi5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHRidXR0b24uc3R5bGUubWFyZ2luID0gXCIwcHggMHB4IDBweCAwcHhcIjtcblx0ICAgIGJ1dHRvbi5zdHlsZS5wYWRkaW5nID0gXCIzcHggNHB4IDBweCA0cHhcIjtcblx0ICAgIGJ1dHRvbi5zdHlsZS5jc3NGbG9hdCA9IFwibGVmdFwiO1xuXHRcdGJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLCBjaGFydC5fY3VsdHVyZUluZm9bc3RhdGUgKyBcIlRleHRcIl0pO1xuXHQgICAgYnV0dG9uLmlubmVySFRNTCA9IFwiPGltZyBzdHlsZT0naGVpZ2h0OjE2cHg7JyBzcmM9J1wiICsgYmFzZTY0SW1hZ2VzW3N0YXRlXS5pbWFnZSArIFwiJyBhbHQ9J1wiICsgY2hhcnQuX2N1bHR1cmVJbmZvW3N0YXRlICsgXCJUZXh0XCJdICsgXCInIC8+XCI7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3coKSB7XG5cblx0dmFyIGVsZW1lbnQgPSBudWxsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZWxlbWVudCA9IGFyZ3VtZW50c1tpXTtcblx0XHRpZiAoZWxlbWVudC5zdHlsZSlcblx0XHRcdGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lXCI7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhpZGUoKSB7XG5cblx0dmFyIGVsZW1lbnQgPSBudWxsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZWxlbWVudCA9IGFyZ3VtZW50c1tpXTtcblx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50LnN0eWxlKVxuXHRcdFx0ZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IGlzQ2FudmFzU3VwcG9ydGVkID0gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLmdldENvbnRleHQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCZXppZXJQb2ludHMocG9pbnRzLCB0ZW5zaW9uKSB7XG5cblx0dmFyIGJlemllclBvaW50cyA9IFtdO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cblx0XHRpZiAoaSA9PSAwKSB7XG5cdFx0XHRiZXppZXJQb2ludHMucHVzaChwb2ludHNbMF0pO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0dmFyIGkxLCBpMiwgcG9pbnRJbmRleDtcblxuXHRcdHBvaW50SW5kZXggPSBpIC0gMTtcblx0XHRpMSA9IHBvaW50SW5kZXggPT09IDAgPyAwIDogcG9pbnRJbmRleCAtIDE7XG5cdFx0aTIgPSBwb2ludEluZGV4ID09PSBwb2ludHMubGVuZ3RoIC0gMSA/IHBvaW50SW5kZXggOiBwb2ludEluZGV4ICsgMTtcblxuXHRcdHZhciBkcnYxID0ge1xuXHRcdFx0eDogKHBvaW50c1tpMl0ueCAtIHBvaW50c1tpMV0ueCkgLyB0ZW5zaW9uLCB5OiAocG9pbnRzW2kyXS55IC0gcG9pbnRzW2kxXS55KSAvIHRlbnNpb25cblx0XHR9XG5cdFx0dmFyIGNwMSA9IHtcblx0XHRcdHg6IHBvaW50c1twb2ludEluZGV4XS54ICsgZHJ2MS54IC8gMywgeTogcG9pbnRzW3BvaW50SW5kZXhdLnkgKyBkcnYxLnkgLyAzXG5cdFx0fVxuXHRcdGJlemllclBvaW50c1tiZXppZXJQb2ludHMubGVuZ3RoXSA9IGNwMTtcblxuXG5cdFx0cG9pbnRJbmRleCA9IGk7XG5cdFx0aTEgPSBwb2ludEluZGV4ID09PSAwID8gMCA6IHBvaW50SW5kZXggLSAxO1xuXHRcdGkyID0gcG9pbnRJbmRleCA9PT0gcG9pbnRzLmxlbmd0aCAtIDEgPyBwb2ludEluZGV4IDogcG9pbnRJbmRleCArIDE7XG5cblx0XHR2YXIgZHJ2MiA9IHtcblx0XHRcdHg6IChwb2ludHNbaTJdLnggLSBwb2ludHNbaTFdLngpIC8gdGVuc2lvbiwgeTogKHBvaW50c1tpMl0ueSAtIHBvaW50c1tpMV0ueSkgLyB0ZW5zaW9uXG5cdFx0fVxuXHRcdHZhciBjcDIgPSB7XG5cdFx0XHR4OiBwb2ludHNbcG9pbnRJbmRleF0ueCAtIGRydjIueCAvIDMsIHk6IHBvaW50c1twb2ludEluZGV4XS55IC0gZHJ2Mi55IC8gM1xuXHRcdH1cblx0XHRiZXppZXJQb2ludHNbYmV6aWVyUG9pbnRzLmxlbmd0aF0gPSBjcDI7XG5cblx0XHRiZXppZXJQb2ludHNbYmV6aWVyUG9pbnRzLmxlbmd0aF0gPSBwb2ludHNbaV07XG5cdH1cblxuXHRyZXR1cm4gYmV6aWVyUG9pbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFBlcmNlbnRUb1ZhbHVlKGlucHV0LCByZWZlcmVuY2VWYWx1ZSkge1xuXHQvL2lucHV0IGNhbiBiZSBhIG51bWJlciBvciBzdHJpbmdcblx0aWYgKGlucHV0ID09PSBudWxsIHx8IHR5cGVvZiAoaW5wdXQpID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdHJldHVybiByZWZlcmVuY2VWYWx1ZTtcblxuXHR2YXIgcmVzdWx0ID0gcGFyc2VGbG9hdChpbnB1dC50b1N0cmluZygpKSAqIChpbnB1dC50b1N0cmluZygpLmluZGV4T2YoXCIlXCIpID49IDAgPyByZWZlcmVuY2VWYWx1ZSAvIDEwMCA6IDEpO1xuXG5cdC8vIGxpbWl0IHRvIHBsb3QgYXJlYVxuXHRpZiAoIWlzTmFOKHJlc3VsdCkgJiYgcmVzdWx0IDw9IHJlZmVyZW5jZVZhbHVlICYmIHJlc3VsdCA+PSAwKVxuXHRcdHJldHVybiByZXN1bHQ7XG5cblx0cmV0dXJuIHJlZmVyZW5jZVZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJhd1JlY3QoY3R4LCB4MSwgeTEsIHgyLCB5MiwgY29sb3IsIGJvcmRlclRoaWNrbmVzcywgYm9yZGVyQ29sb3IsIHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCwgZmlsbE9wYWNpdHkpIHtcblx0aWYgKHR5cGVvZiAoZmlsbE9wYWNpdHkpID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdGZpbGxPcGFjaXR5ID0gMTtcblxuXHRib3JkZXJUaGlja25lc3MgPSBib3JkZXJUaGlja25lc3MgfHwgMDtcblx0Ym9yZGVyQ29sb3IgPSBib3JkZXJDb2xvciB8fCBcImJsYWNrXCI7XG5cdC8vYWxlcnQoXCJ0b3BcIisgdG9wICsgXCJib3R0b21cIiArIGJvdHRvbSArIFwiIGx0XCIgKyBsZWZ0KyBcInJ0XCIgKyByaWdodCApXG5cdHZhciBhMSA9IHgxLCBhMiA9IHgyLCBiMSA9IHkxLCBiMiA9IHkyLCBlZGdlWSwgZWRnZVg7XG5cdGlmICh4MiAtIHgxID4gMTUgJiYgeTIgLSB5MSA+IDE1KVxuXHRcdHZhciBiZXZlbERlcHRoID0gODtcblx0ZWxzZVxuXHRcdHZhciBiZXZlbERlcHRoID0gMC4zNSAqIE1hdGgubWluKCh4MiAtIHgxKSwgKHkyIC0geTEpKTtcblx0Ly9hbGVydChhMSArIFwiXCIgKyBhMik7XG5cdHZhciBjb2xvcjIgPSBcInJnYmEoMjU1LCAyNTUsIDI1NSwgLjQpXCI7XG5cdHZhciBjb2xvcjMgPSBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKVwiO1xuXHQvL2NvbG9yMSA9IFwicmdiYShcIiArIHIgKyBcIixcIiArIGcgKyBcIiwgXCIgKyBiICsgXCIsMSlcIjtcblx0dmFyIGNvbG9yMSA9IGNvbG9yO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblx0Y3R4Lm1vdmVUbyh4MSwgeTEpO1xuXHRjdHguc2F2ZSgpO1xuXHRjdHguZmlsbFN0eWxlID0gY29sb3IxO1xuXG5cdGN0eC5nbG9iYWxBbHBoYSA9IGZpbGxPcGFjaXR5O1xuXHRjdHguZmlsbFJlY3QoeDEsIHkxLCB4MiAtIHgxLCB5MiAtIHkxKTtcblx0Y3R4Lmdsb2JhbEFscGhhID0gMTtcblxuXHRpZiAoYm9yZGVyVGhpY2tuZXNzID4gMCkge1xuXHRcdHZhciBvZmZzZXQgPSBib3JkZXJUaGlja25lc3MgJSAyID09PSAwID8gMCA6IC41O1xuXHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRjdHgubGluZVdpZHRoID0gYm9yZGVyVGhpY2tuZXNzO1xuXHRcdGN0eC5zdHJva2VTdHlsZSA9IGJvcmRlckNvbG9yO1xuXHRcdGN0eC5tb3ZlVG8oeDEsIHkxKTtcblx0XHRjdHgucmVjdCh4MSAtIG9mZnNldCwgeTEgLSBvZmZzZXQsIHgyIC0geDEgKyAyICogb2Zmc2V0LCB5MiAtIHkxICsgMiAqIG9mZnNldCk7XG5cdFx0Y3R4LnN0cm9rZSgpO1xuXHR9XG5cblx0Y3R4LnJlc3RvcmUoKTtcblx0Ly8gICBjdHguYmVnaW5QYXRoKCk7XG5cdGlmICh0b3AgPT09IHRydWUpIHtcblx0XHQvLyBhbGVydCh4MSArIFwiXCIgKyB4MiArIFwiIFwiICsgYmV2ZWxEZXB0aCk7XG5cdFx0Y3R4LnNhdmUoKTtcblx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0Y3R4Lm1vdmVUbyh4MSwgeTEpO1xuXHRcdGN0eC5saW5lVG8oeDEgKyBiZXZlbERlcHRoLCB5MSArIGJldmVsRGVwdGgpO1xuXHRcdGN0eC5saW5lVG8oeDIgLSBiZXZlbERlcHRoLCB5MSArIGJldmVsRGVwdGgpO1xuXHRcdGN0eC5saW5lVG8oeDIsIHkxKTtcblx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0dmFyIGdyZCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgoeDIgKyB4MSkgLyAyLCBiMSArIGJldmVsRGVwdGgsICh4MiArIHgxKSAvIDIsIGIxKTtcblx0XHRncmQuYWRkQ29sb3JTdG9wKDAsIGNvbG9yMSk7XG5cdFx0Z3JkLmFkZENvbG9yU3RvcCgxLCBjb2xvcjIpO1xuXHRcdGN0eC5maWxsU3R5bGUgPSBncmQ7XG5cdFx0Y3R4LmZpbGwoKTtcblx0XHQvLyAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuXHRcdGN0eC5yZXN0b3JlKCk7XG5cdH1cblxuXG5cdGlmIChib3R0b20gPT09IHRydWUpIHtcblx0XHRjdHguc2F2ZSgpO1xuXHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRjdHgubW92ZVRvKHgxLCB5Mik7XG5cdFx0Y3R4LmxpbmVUbyh4MSArIGJldmVsRGVwdGgsIHkyIC0gYmV2ZWxEZXB0aCk7XG5cdFx0Y3R4LmxpbmVUbyh4MiAtIGJldmVsRGVwdGgsIHkyIC0gYmV2ZWxEZXB0aCk7XG5cdFx0Y3R4LmxpbmVUbyh4MiwgeTIpO1xuXHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHR2YXIgZ3JkID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KCh4MiArIHgxKSAvIDIsIGIyIC0gYmV2ZWxEZXB0aCwgKHgyICsgeDEpIC8gMiwgYjIpO1xuXHRcdGdyZC5hZGRDb2xvclN0b3AoMCwgY29sb3IxKTtcblx0XHRncmQuYWRkQ29sb3JTdG9wKDEsIGNvbG9yMik7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IGdyZDtcblx0XHQvLyAgICAgICBjdHguc3Ryb2tlKCk7XG5cdFx0Y3R4LmZpbGwoKTtcblx0XHRjdHgucmVzdG9yZSgpO1xuXHR9XG5cblx0aWYgKGxlZnQgPT09IHRydWUpIHtcblx0XHQvLyAgIGFsZXJ0KHgxKVxuXHRcdGN0eC5zYXZlKCk7XG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdGN0eC5tb3ZlVG8oeDEsIHkxKVxuXHRcdGN0eC5saW5lVG8oeDEgKyBiZXZlbERlcHRoLCB5MSArIGJldmVsRGVwdGgpO1xuXHRcdGN0eC5saW5lVG8oeDEgKyBiZXZlbERlcHRoLCB5MiAtIGJldmVsRGVwdGgpO1xuXHRcdGN0eC5saW5lVG8oeDEsIHkyKTtcblx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0dmFyIGdyZCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudChhMSArIGJldmVsRGVwdGgsICh5MiArIHkxKSAvIDIsIGExLCAoeTIgKyB5MSkgLyAyKTtcblx0XHRncmQuYWRkQ29sb3JTdG9wKDAsIGNvbG9yMSk7XG5cdFx0Z3JkLmFkZENvbG9yU3RvcCgxLCBjb2xvcjMpO1xuXHRcdGN0eC5maWxsU3R5bGUgPSBncmQ7XG5cdFx0Y3R4LmZpbGwoKTtcblx0XHQvLyAgICAgY3R4LnN0cm9rZSgpO1xuXHRcdGN0eC5yZXN0b3JlKCk7XG5cdH1cblxuXG5cdGlmIChyaWdodCA9PT0gdHJ1ZSkge1xuXHRcdGN0eC5zYXZlKCk7XG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdGN0eC5tb3ZlVG8oeDIsIHkxKVxuXHRcdGN0eC5saW5lVG8oeDIgLSBiZXZlbERlcHRoLCB5MSArIGJldmVsRGVwdGgpO1xuXHRcdGN0eC5saW5lVG8oeDIgLSBiZXZlbERlcHRoLCB5MiAtIGJldmVsRGVwdGgpO1xuXHRcdGN0eC5saW5lVG8oeDIsIHkyKTtcblx0XHR2YXIgZ3JkID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KGEyIC0gYmV2ZWxEZXB0aCwgKHkyICsgeTEpIC8gMiwgYTIsICh5MiArIHkxKSAvIDIpO1xuXHRcdGdyZC5hZGRDb2xvclN0b3AoMCwgY29sb3IxKTtcblx0XHRncmQuYWRkQ29sb3JTdG9wKDEsIGNvbG9yMyk7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IGdyZDtcblx0XHRncmQuYWRkQ29sb3JTdG9wKDAsIGNvbG9yMSk7XG5cdFx0Z3JkLmFkZENvbG9yU3RvcCgxLCBjb2xvcjMpO1xuXHRcdGN0eC5maWxsU3R5bGUgPSBncmQ7XG5cdFx0Y3R4LmZpbGwoKTtcblx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0Ly8gICAgICAgICAgY3R4LnN0cm9rZSgpO1xuXHRcdGN0eC5yZXN0b3JlKCk7XG5cdH1cblx0Ly9cblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJhd1NlZ21lbnQoY3R4LCBjZW50ZXIsIHJhZGl1cywgY29sb3IsIHR5cGUsIHRoZXRhMSwgdGhldGEyLCBmaWxsT3BhY2l0eSwgcGVyY2VudElubmVyUmFkaXVzKSB7XG5cblx0aWYgKHR5cGVvZiAoZmlsbE9wYWNpdHkpID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdGZpbGxPcGFjaXR5ID0gMTtcblxuXHQvL0lFOC0gRklYOiBJbiBJRTgtIHNlZ21lbnQgZG9lc24ndCBnZXQgZHJhdyBpZiB0aGV0YTIgaXMgZXF1YWwgdG8gdGhldGExICsgMipQSS5cblx0aWYgKCFpc0NhbnZhc1N1cHBvcnRlZCkge1xuXHRcdHZhciB0aGV0YTJNb2QgPSBOdW1iZXIoKHRoZXRhMiAlICgyICogTWF0aC5QSSkpLnRvRml4ZWQoOCkpO1xuXHRcdHZhciB0aGV0YTFNb2QgPSBOdW1iZXIoKHRoZXRhMSAlICgyICogTWF0aC5QSSkpLnRvRml4ZWQoOCkpO1xuXHRcdGlmICh0aGV0YTFNb2QgPT09IHRoZXRhMk1vZClcblx0XHRcdHRoZXRhMiAtPSAuMDAwMTtcblx0fVxuXG5cdGN0eC5zYXZlKCk7XG5cdGN0eC5nbG9iYWxBbHBoYSA9IGZpbGxPcGFjaXR5O1xuXG5cdGlmICh0eXBlID09PSBcInBpZVwiKSB7XG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdGN0eC5tb3ZlVG8oY2VudGVyLngsIGNlbnRlci55KTtcblx0XHRjdHguYXJjKGNlbnRlci54LCBjZW50ZXIueSwgcmFkaXVzLCB0aGV0YTEsIHRoZXRhMiwgZmFsc2UpO1xuXHRcdGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcblx0XHRjdHguc3Ryb2tlU3R5bGUgPSBcIndoaXRlXCI7XG5cdFx0Y3R4LmxpbmVXaWR0aCA9IDI7XG5cdFx0Ly8gICAgY3R4LnNoYWRvd09mZnNldFggPSAyO1xuXHRcdC8vICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMTtcblx0XHQvLyAgICAgY3R4LnNoYWRvd0JsdXIgPSAyO1xuXHRcdC8vICAgIGN0eC5zaGFkb3dDb2xvciA9ICcjQkZCRkJGJztcblx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0Ly9jdHguc3Ryb2tlKCk7XG5cdFx0Y3R4LmZpbGwoKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlID09PSBcImRvdWdobnV0XCIpIHtcblx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0Y3R4LmFyYyhjZW50ZXIueCwgY2VudGVyLnksIHJhZGl1cywgdGhldGExLCB0aGV0YTIsIGZhbHNlKTtcblx0XHRjdHguYXJjKGNlbnRlci54LCBjZW50ZXIueSwgcGVyY2VudElubmVyUmFkaXVzICogcmFkaXVzLCB0aGV0YTIsIHRoZXRhMSwgdHJ1ZSk7XG5cdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcblx0XHRjdHguc3Ryb2tlU3R5bGUgPSBcIndoaXRlXCI7XG5cdFx0Y3R4LmxpbmVXaWR0aCA9IDI7XG5cdFx0Ly8gc2hhZG93IHByb3BlcnRpZXNcblx0XHQvLyAgICAgY3R4LnNoYWRvd09mZnNldFggPSAxO1xuXHRcdC8vICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMTtcblx0XHQvLyAgICAgY3R4LnNoYWRvd0JsdXIgPSAxO1xuXHRcdC8vICAgIGN0eC5zaGFkb3dDb2xvciA9ICcjQkZCRkJGJzsgIC8vZ3JleSBzaGFkb3dcblx0XHQvL2N0eC5zdHJva2UoKTtcblx0XHRjdHguZmlsbCgpO1xuXHR9XG5cblx0Y3R4Lmdsb2JhbEFscGhhID0gMTtcblxuXHRjdHgucmVzdG9yZSgpO1xufTtcbiIsIi8qKlxuKiBAcHJlc2VydmUgQ2FudmFzSlMgSFRNTDUgJiBKYXZhU2NyaXB0IENoYXJ0cyAtIHYxLjguMCBCZXRhIDIgLSBodHRwOi8vY2FudmFzanMuY29tL1xuKiBDYW52YXNKUyBDaGFydHMgZm9sbG93cyBEdWFsIExpY2Vuc2luZyBNb2RlbCBhcyBtZW50aW9uZWQgYmVsb3cuXG4qXG4qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLUZyZWUgZm9yIE5vbi1Db21tZXJjaWFsIFVzZS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4qXG4qIEZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyB5b3UgY2FuIHVzZSB0aGUgc29mdHdhcmUgZm9yIGZyZWUgdW5kZXIgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsIDMuMCBMaWNlbnNlLiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGxpbmsgZm9yIGZ1cnRoZXIgZGV0YWlscyBvbiB0aGUgc2FtZS5cbiogaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMvMy4wL2RlZWQuZW5fVVNcbipcbiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tQ29tbWVyY2lhbCBMaWNlbnNlLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiogQ29tbWVyY2lhbCB1c2Ugb2YgQ2FudmFzSlMgcmVxdWlyZXMgeW91IHRvIHB1cmNoYXNlIGEgbGljZW5zZS4gV2l0aG91dCBhIGNvbW1lcmNpYWwgbGljZW5zZSB5b3UgY2FuIHVzZSBpdCBmb3IgZXZhbHVhdGlvbiBwdXJwb3NlcyBvbmx5LiBQbGVhc2UgcmVmZXIgdG8gdGhlIGZvbGxvd2luZyBsaW5rIGZvciBmdXJ0aGVyIGRldGFpbHMuXG4qIGh0dHA6Ly9jYW52YXNqcy5jb20vXG4qXG4qKi9cbmltcG9ydCBDaGFydHMgZnJvbSAnLi4vY29yZS9jaGFydHMnO1xuaW1wb3J0IEN1bHR1cmVJbmZvIGZyb20gJy4uL2NvcmUvY3VsdHVyZV9pbmZvJztcbmltcG9ydCB7Y29sb3JTZXRzfSBmcm9tICcuLi9jb25zdGFudHMvdGhlbWVzJztcbmltcG9ydCB7Y3VsdHVyZXN9IGZyb20gJy4uL2NvbnN0YW50cy9jdWx0dXJlJztcbmltcG9ydCB7bnVtYmVyRm9ybWF0LCBkYXRlRm9ybWF0fSBmcm9tICcuLi9oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIENoYXJ0KGNvbnRhaW5lcklkLCBvcHRpb25zKSB7XG5cbiAgY29uc3QgX2NoYXJ0ID0gbmV3IENoYXJ0cyhjb250YWluZXJJZCwgb3B0aW9ucywgdGhpcyk7XG5cbiAgdGhpcy5yZW5kZXIgPSAoKSA9PiAgX2NoYXJ0LnJlbmRlcih0aGlzLm9wdGlvbnMpO1xuXG4gIHRoaXMub3B0aW9ucyA9IF9jaGFydC5fb3B0aW9ucztcbn07XG5cblxuZXhwb3J0IGNvbnN0IGFkZENvbG9yU2V0ID0gKG5hbWUsIGNvbG9yU2V0KSA9PiB7XG5cbiAgICBjb2xvclNldHNbbmFtZV0gPSBjb2xvclNldDtcblxufTtcblxuZXhwb3J0IGNvbnN0IGFkZEN1bHR1cmVJbmZvID0gKG5hbWUsIGN1bHR1cmVJbmZvKSA9PiB7XG5cbiAgICBjdWx0dXJlc1tuYW1lXSA9IGN1bHR1cmVJbmZvO1xuXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0TnVtYmVyID0gKG51bWJlciwgZm9ybWF0U3RyaW5nLCBjdWx0dXJlKSA9PiB7XG5cbiAgICBjdWx0dXJlID0gY3VsdHVyZSB8fCBcImVuXCI7XG4gICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nIHx8IFwiIywjIzAuIyNcIjtcblxuICAgIGlmICghY3VsdHVyZXNbY3VsdHVyZV0pdGhyb3cgXCJVbmtub3duIEN1bHR1cmUgTmFtZVwiO1xuICAgIGVsc2UgbnVtYmVyRm9ybWF0KG51bWJlciwgZm9ybWF0U3RyaW5nLCBuZXcgQ3VsdHVyZUluZm8oY3VsdHVyZSkpO1xuXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlLCBmb3JtYXRTdHJpbmcsIGN1bHR1cmUpID0+IHtcblxuICAgIGN1bHR1cmUgPSBjdWx0dXJlIHx8IFwiZW5cIjtcbiAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcgfHwgXCJERCBNTU0gWVlZWVwiO1xuXG4gICAgaWYgKCFjdWx0dXJlc1tjdWx0dXJlXSl0aHJvdyBcIlVua25vd24gQ3VsdHVyZSBOYW1lXCI7XG4gICAgZWxzZSBkYXRlRm9ybWF0KGRhdGUsIGZvcm1hdFN0cmluZywgbmV3IEN1bHR1cmVJbmZvKGN1bHR1cmUpKTtcblxufTtcblxuQ2hhcnQudmVyc2lvbiA9IFwidjEuOC4yXCI7XG4iXX0= diff --git a/dist/canvasjs.min.js b/dist/canvasjs.min.js index c82956b..5ca54c5 100755 --- a/dist/canvasjs.min.js +++ b/dist/canvasjs.min.js @@ -1,8 +1,8 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.CanvasJS=e()}}(function(){return function e(t,i,a){function n(r,o){if(!i[r]){if(!t[r]){var l="function"==typeof require&&require;if(!o&&l)return l(r,!0);if(s)return s(r,!0);var h=new Error("Cannot find module '"+r+"'");throw h.code="MODULE_NOT_FOUND",h}var d=i[r]={exports:{}};t[r][0].call(d.exports,function(e){var i=t[r][1][e];return n(i?i:e)},d,d.exports,e,t,i,a)}return i[r].exports}for(var s="function"==typeof require&&require,r=0;r0&&i.stroke(),e.axisY.viewportMinimum<=0&&e.axisY.viewportMaximum>=0?M=T:e.axisY.viewportMaximum<0?M=h.y1:e.axisY.viewportMinimum>0&&(M=r.y2),i.lineTo(y,M),i.lineTo(C.x,M),i.closePath(),i.globalAlpha=u.fillOpacity,i.fill(),i.globalAlpha=1,l.isCanvasSupported&&(n.lineTo(y,M),n.lineTo(C.x,M),n.closePath(),n.fill()),i.beginPath(),i.moveTo(y,f),n.beginPath(),n.moveTo(y,f),C={x:y,y:f})}var i=e.targetCanvasCtx||this.plotArea.ctx,a=e.dataSeriesIndexes.length;if(!(0>=a)){var n=this._eventManager.ghostCtx,r=e.axisX.lineCoordinates,h=e.axisY.lineCoordinates,d=[],c=this.plotArea;i.save(),l.isCanvasSupported&&n.save(),i.beginPath(),i.rect(c.x1,c.y1,c.width,c.height),i.clip(),l.isCanvasSupported&&(n.beginPath(),n.rect(c.x1,c.y1,c.width,c.height),n.clip());for(var p=0;p0){var k=u._colorSet[S%u._colorSet.length];i.fillStyle=k,i.strokeStyle=k,i.lineWidth=u.lineThickness,i.setLineDash&&i.setLineDash((0,l.getLineDashArray)(u.lineDashType,u.lineThickness));for(var w=!0;Se.axisX.dataInfo.viewPortMax))if("number"==typeof m[S].y){y=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(b-e.axisX.conversionParameters.minimum)+.5<<0,f=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(m[S].y-e.axisY.conversionParameters.minimum)+.5<<0,P||w?(i.beginPath(),i.moveTo(y,f),C={x:y,y:f},l.isCanvasSupported&&(n.beginPath(),n.moveTo(y,f)),P=!1,w=!1):(i.lineTo(y,f),l.isCanvasSupported&&n.lineTo(y,f),S%250==0&&t());var _=u.dataPointIds[S];if(this._eventManager.objectMap[_]={id:_,objectType:"dataPoint",dataSeriesIndex:x,dataPointIndex:S,x1:y,y1:f},0!==m[S].markerSize&&(m[S].markerSize>0||u.markerSize>0)){var A=u.getMarkerProperties(S,y,f,i);d.push(A);var L=(0,l.intToHexColorString)(_);l.isCanvasSupported&&d.push({x:y,y:f,ctx:n,type:A.type,size:A.size,color:L,borderColor:L,borderThickness:A.borderThickness})}(m[S].indexLabel||u.indexLabel||m[S].indexLabelFormatter||u.indexLabelFormatter)&&this._indexLabels.push({chartType:"area",dataPoint:m[S],dataSeries:u,point:{x:y,y:f},direction:m[S].y>=0?1:-1,color:k})}else t(),w=!0;t(),s["default"].drawMarkers(d)}}i.restore(),l.isCanvasSupported&&this._eventManager.ghostCtx.restore();var I={source:i,dest:this.plotArea.ctx,animationCallback:o["default"].xClipAnimation,easingFunction:o["default"].easing.linear,animationBase:0};return I}};var n=e("../helpers/render"),s=a(n),r=e("../helpers/animator"),o=a(r),l=e("../helpers/utils")},{"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39}],2:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(0>=i)){var a,n,o,l=null,h=this.plotArea,d=0,c=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,p=this.dataPointMaxWidth?this.dataPointMaxWidth:Math.min(.15*this.height,this.plotArea.height/e.plotType.totalDataSeries*.9)<<0,x=e.axisX.dataInfo.minDiff,u=h.height/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(x)/e.plotType.totalDataSeries*.9<<0;u>p?u=p:x===1/0?u=p/e.plotType.totalDataSeries*.9:1>u&&(u=1),t.save(),r.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(h.x1,h.y1,h.width,h.height),t.clip(),r.isCanvasSupported&&(this._eventManager.ghostCtx.rect(h.x1,h.y1,h.width,h.height),this._eventManager.ghostCtx.clip());for(var m=0;m0){var f=u>5&&g.bevelEnabled?!0:!1;for(t.strokeStyle="#4572A7 ",d=0;de.axisX.dataInfo.viewPortMax)&&"number"==typeof y[d].y){n=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(o-e.axisX.conversionParameters.minimum)+.5<<0,a=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(y[d].y-e.axisY.conversionParameters.minimum)+.5<<0;var b,M,P=n-e.plotType.totalDataSeries*u/2+(e.previousDataSeriesCount+m)*u<<0,S=P+u<<0;y[d].y>=0?(b=c,M=a):(b=a,M=c),l=y[d].color?y[d].color:g._colorSet[d%g._colorSet.length],(0,r.drawRect)(t,b,P,M,S,l,0,null,f,!1,!1,!1,g.fillOpacity);var T=g.dataPointIds[d];this._eventManager.objectMap[T]={id:T,objectType:"dataPoint",dataSeriesIndex:v,dataPointIndex:d,x1:b,y1:P,x2:M,y2:S},l=(0,r.intToHexColorString)(T),r.isCanvasSupported&&(0,r.drawRect)(this._eventManager.ghostCtx,b,P,M,S,l,0,null,!1,!1,!1,!1),(y[d].indexLabel||g.indexLabel||y[d].indexLabelFormatter||g.indexLabelFormatter)&&this._indexLabels.push({chartType:"bar",dataPoint:y[d],dataSeries:g,point:{x:y[d].y>=0?M:b,y:P+(S-P)/2},direction:y[d].y>=0?1:-1,bounds:{x1:Math.min(b,M),y1:P,x2:Math.max(b,M),y2:S},color:l})}}}t.restore(),r.isCanvasSupported&&this._eventManager.ghostCtx.restore();var C=Math.max(c,e.axisX.boundingRect.x2),k={source:t,dest:this.plotArea.ctx,animationCallback:s["default"].xScaleAnimation,easingFunction:s["default"].easing.easeOutQuart,animationBase:C};return k}};var n=e("../helpers/animator"),s=a(n),r=e("../helpers/utils")},{"../helpers/animator":37,"../helpers/utils":39}],3:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(0>=i)){var a,n,r,h=null,d=this.plotArea,c=0,p=(e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,this.dataPointMaxWidth?this.dataPointMaxWidth:.15*this.width<<0),x=e.axisX.dataInfo.minDiff,u=d.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(x)/i*.9<<0;t.save(),l.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(d.x1,d.y1,d.width,d.height),t.clip(),l.isCanvasSupported&&(this._eventManager.ghostCtx.rect(d.x1,d.y1,d.width,d.height),this._eventManager.ghostCtx.clip());for(var m=-(1/0),v=1/0,g=0;ge.axisX.dataInfo.viewPortMax||"undefined"!=typeof b[c].z&&(M=b[c].z,M>m&&(m=M),v>M&&(v=M));for(var P=5*Math.PI*5,S=Math.max(Math.pow(.25*Math.min(d.height,d.width)/2,2)*Math.PI,P),g=0;gu?u=1:u>p&&(u=p),b.length>0){t.strokeStyle="#4572A7 ";for(var c=0;ce.axisX.dataInfo.viewPortMax)&&"number"==typeof b[c].y){a=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0,n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(b[c].y-e.axisY.conversionParameters.minimum)+.5<<0;var M=b[c].z,T=m===v?S/2:P+(S-P)/(m-v)*(M-v),C=Math.max(Math.sqrt(T/Math.PI)<<0,1),k=2*C,w=f.getMarkerProperties(c,t);w.size=k,t.globalAlpha=f.fillOpacity,s["default"].drawMarker(a,n,t,w.type,w.size,w.color,w.borderColor,w.borderThickness),t.globalAlpha=1;var _=f.dataPointIds[c];this._eventManager.objectMap[_]={id:_,objectType:"dataPoint",dataSeriesIndex:y,dataPointIndex:c,x1:a,y1:n,size:k};var A=(0,l.intToHexColorString)(_);l.isCanvasSupported&&s["default"].drawMarker(a,n,this._eventManager.ghostCtx,w.type,w.size,A,A,w.borderThickness),(b[c].indexLabel||f.indexLabel||b[c].indexLabelFormatter||f.indexLabelFormatter)&&this._indexLabels.push({chartType:"bubble",dataPoint:b[c],dataSeries:f,point:{x:a,y:n},direction:1,bounds:{x1:a-w.size/2,y1:n-w.size/2,x2:a+w.size/2,y2:n+w.size/2},color:h})}}}t.restore(),l.isCanvasSupported&&this._eventManager.ghostCtx.restore();var L={source:t,dest:this.plotArea.ctx,animationCallback:o["default"].fadeInAnimation,easingFunction:o["default"].easing.easeInQuad,animationBase:0};return L}};var n=e("../helpers/render"),s=a(n),r=e("../helpers/animator"),o=a(r),l=e("../helpers/utils")},{"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39}],4:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=this._eventManager.ghostCtx,n=e.dataSeriesIndexes.length;if(!(0>=n)){var s,r,o,l,h,d,c=null,p=this.plotArea,x=0,u=(e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,this.dataPointMaxWidth?this.dataPointMaxWidth:.015*this.width),m=e.axisX.dataInfo.minDiff,v=p.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(m)*.7<<0;v>u?v=u:m===1/0?v=u:1>v&&(v=1),t.save(),a.isCanvasSupported&&i.save(),t.beginPath(),t.rect(p.x1,p.y1,p.width,p.height),t.clip(),a.isCanvasSupported&&(i.rect(p.x1,p.y1,p.width,p.height),i.clip());for(var g=0;g0){var M=v>5&&f.bevelEnabled?!0:!1;for(x=0;xe.axisX.dataInfo.viewPortMax)&&null!==b[x].y&&b[x].y.length&&"number"==typeof b[x].y[0]&&"number"==typeof b[x].y[1]&&"number"==typeof b[x].y[2]&&"number"==typeof b[x].y[3]){s=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(d-e.axisX.conversionParameters.minimum)+.5<<0,r=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(b[x].y[0]-e.axisY.conversionParameters.minimum)+.5<<0,o=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(b[x].y[1]-e.axisY.conversionParameters.minimum)+.5<<0,l=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(b[x].y[2]-e.axisY.conversionParameters.minimum)+.5<<0,h=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(b[x].y[3]-e.axisY.conversionParameters.minimum)+.5<<0;var P=s-v/2<<0,S=P+v<<0;c=b[x].color?b[x].color:f._colorSet[0];var T=Math.round(Math.max(1,.15*v)),C=T%2===0?0:.5,k=f.dataPointIds[x];this._eventManager.objectMap[k]={id:k,objectType:"dataPoint",dataSeriesIndex:y,dataPointIndex:x,x1:P,y1:r,x2:S,y2:o,x3:s,y3:l,x4:s,y4:h,borderThickness:T,color:c},t.strokeStyle=c,t.beginPath(),t.lineWidth=T,i.lineWidth=Math.max(T,4),"candlestick"===f.type?(t.moveTo(s-C,o),t.lineTo(s-C,Math.min(r,h)),t.stroke(),t.moveTo(s-C,Math.max(r,h)),t.lineTo(s-C,l),t.stroke(),drawRect(t,P,Math.min(r,h),S,Math.max(r,h),b[x].y[0]<=b[x].y[3]?f.risingColor:c,T,c,M,M,!1,!1,f.fillOpacity),a.isCanvasSupported&&(c=intToHexColorString(k),i.strokeStyle=c,i.moveTo(s-C,o),i.lineTo(s-C,Math.min(r,h)),i.stroke(),i.moveTo(s-C,Math.max(r,h)),i.lineTo(s-C,l),i.stroke(),drawRect(i,P,Math.min(r,h),S,Math.max(r,h),c,0,null,!1,!1,!1,!1))):"ohlc"===f.type&&(t.moveTo(s-C,o),t.lineTo(s-C,l),t.stroke(),t.beginPath(),t.moveTo(s,r),t.lineTo(P,r),t.stroke(),t.beginPath(),t.moveTo(s,h),t.lineTo(S,h),t.stroke(),a.isCanvasSupported&&(c=intToHexColorString(k),i.strokeStyle=c,i.moveTo(s-C,o),i.lineTo(s-C,l),i.stroke(),i.beginPath(),i.moveTo(s,r),i.lineTo(P,r),i.stroke(),i.beginPath(),i.moveTo(s,h),i.lineTo(S,h),i.stroke())),(b[x].indexLabel||f.indexLabel||b[x].indexLabelFormatter||f.indexLabelFormatter)&&this._indexLabels.push({chartType:f.type,dataPoint:b[x],dataSeries:f,point:{x:P+(S-P)/2,y:o},direction:1,bounds:{x1:P,y1:Math.min(o,l),x2:S,y2:Math.max(o,l)},color:c})}}}t.restore(),a.isCanvasSupported&&i.restore();var w={source:t,dest:this.plotArea.ctx,animationCallback:AnimationHelper.fadeInAnimation,easingFunction:AnimationHelper.easing.easeInQuad,animationBase:0};return w}};var a=e("../helpers/utils")},{"../helpers/utils":39}],5:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(0>=i)){var a,n,o,l=null,h=this.plotArea,d=0,c=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,p=this.dataPointMaxWidth?this.dataPointMaxWidth:Math.min(.15*this.width,this.plotArea.width/e.plotType.totalDataSeries*.9)<<0,x=e.axisX.dataInfo.minDiff,u=h.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(x)/e.plotType.totalDataSeries*.9<<0;u>p?u=p:x===1/0?u=p/e.plotType.totalDataSeries*.9:1>u&&(u=1),t.save(),r.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(h.x1,h.y1,h.width,h.height),t.clip(),r.isCanvasSupported&&(this._eventManager.ghostCtx.rect(h.x1,h.y1,h.width,h.height),this._eventManager.ghostCtx.clip());for(var m=0;m0){var f=u>5&&g.bevelEnabled?!0:!1;for(d=0;de.axisX.dataInfo.viewPortMax)&&"number"==typeof y[d].y){a=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(o-e.axisX.conversionParameters.minimum)+.5<<0,n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(y[d].y-e.axisY.conversionParameters.minimum)+.5<<0;var b,M,P=a-e.plotType.totalDataSeries*u/2+(e.previousDataSeriesCount+m)*u<<0,S=P+u<<0;if(y[d].y>=0){if(b=n,M=c,b>M){b=M,M=b}}else if(M=n,b=c,b>M){b=M,M=b}l=y[d].color?y[d].color:g._colorSet[d%g._colorSet.length],(0,r.drawRect)(t,P,b,S,M,l,0,null,f&&y[d].y>=0,y[d].y<0&&f,!1,!1,g.fillOpacity);var T=g.dataPointIds[d];this._eventManager.objectMap[T]={id:T,objectType:"dataPoint",dataSeriesIndex:v,dataPointIndex:d,x1:P,y1:b,x2:S,y2:M},l=(0,r.intToHexColorString)(T),r.isCanvasSupported&&(0,r.drawRect)(this._eventManager.ghostCtx,P,b,S,M,l,0,null,!1,!1,!1,!1),(y[d].indexLabel||g.indexLabel||y[d].indexLabelFormatter||g.indexLabelFormatter)&&this._indexLabels.push({chartType:"column",dataPoint:y[d],dataSeries:g,point:{x:P+(S-P)/2,y:y[d].y>=0?b:M},direction:y[d].y>=0?1:-1,bounds:{x1:P,y1:Math.min(b,M),x2:S,y2:Math.max(b,M)},color:l})}}}t.restore(),r.isCanvasSupported&&this._eventManager.ghostCtx.restore();var C=Math.min(c,e.axisY.boundingRect.y2),k={source:t,dest:this.plotArea.ctx,animationCallback:s["default"].yScaleAnimation,easingFunction:s["default"].easing.easeOutQuart,animationBase:C};return k}};var n=e("../helpers/animator"),s=a(n),r=e("../helpers/utils")},{"../helpers/animator":37,"../helpers/utils":39}],6:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(i,"__esModule",{value:!0}),i.PieChart=i.RangeSplineAreaChart=i.RangeAreaChart=i.RangeBarChart=i.RangeColumnChart=i.CandlestickChart=i.ScatterChart=i.BubbleChart=i.StackedArea100Chart=i.StackedAreaChart=i.StepAreaChart=i.SplineAreaChart=i.AreaChart=i.StackedBar100Chart=i.StackedBarChart=i.BarChart=i.StackedColumn100Chart=i.StackedColumnChart=i.ColumnChart=i.SplineChart=void 0;var n=e("../charts/spline"),s=a(n),r=e("../charts/column"),o=a(r),l=e("../charts/stacked_column"),h=a(l),d=e("../charts/stacked_column_100"),c=a(d),p=e("../charts/bar"),x=a(p),u=e("../charts/stacked_bar"),m=a(u),v=e("../charts/stacked_bar_100"),g=a(v),y=e("../charts/area"),f=a(y),b=e("../charts/spline_area"),M=a(b),P=e("../charts/step_area"),S=a(P),T=e("../charts/stacked_area"),C=a(T),k=e("../charts/stacked_area_100"),w=a(k),_=e("../charts/bubble"),A=a(_),L=e("../charts/scatter"),I=a(L),B=e("../charts/candlestick"),F=a(B),z=e("../charts/range_column"),D=a(z),X=e("../charts/range_bar"),Y=a(X),O=e("../charts/range_area"),E=a(O),W=e("../charts/range_spline_area"),R=a(W),H=e("../charts/pie"),V=a(H);i.SplineChart=s["default"],i.ColumnChart=o["default"],i.StackedColumnChart=h["default"],i.StackedColumn100Chart=c["default"],i.BarChart=x["default"],i.StackedBarChart=m["default"],i.StackedBar100Chart=g["default"],i.AreaChart=f["default"],i.SplineAreaChart=M["default"],i.StepAreaChart=S["default"],i.StackedAreaChart=C["default"],i.StackedArea100Chart=w["default"],i.BubbleChart=A["default"],i.ScatterChart=I["default"],i.CandlestickChart=F["default"],i.RangeColumnChart=D["default"],i.RangeBarChart=Y["default"],i.RangeAreaChart=E["default"],i.RangeSplineAreaChart=R["default"],i.PieChart=V["default"]},{"../charts/area":1,"../charts/bar":2,"../charts/bubble":3,"../charts/candlestick":4,"../charts/column":5,"../charts/pie":7,"../charts/range_area":8,"../charts/range_bar":9,"../charts/range_column":10,"../charts/range_spline_area":11,"../charts/scatter":12,"../charts/spline":13,"../charts/spline_area":14,"../charts/stacked_area":15,"../charts/stacked_area_100":16,"../charts/stacked_bar":17,"../charts/stacked_bar_100":18,"../charts/stacked_column":19,"../charts/stacked_column_100":20,"../charts/step_area":21}],7:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){function t(){if(g&&y){var e=0,t=0,i=0,a=0;for(L=0;LMath.PI/2-C&&o.midAngleo.midAngle)&&(i=L),e++):o.midAngle>3*Math.PI/2-C&&o.midAngle<3*Math.PI/2+C&&((0===t||P[a].midAngle>o.midAngle)&&(a=L),t++),c>Math.PI/2&&c<=3*Math.PI/2?o.hemisphere="left":o.hemisphere="right",o.indexLabelTextBlock=new s["default"](u.plotArea.ctx,{fontSize:o.indexLabelFontSize,fontFamily:o.indexLabelFontFamily,fontColor:o.indexLabelFontColor,fontStyle:o.indexLabelFontStyle,fontWeight:o.indexLabelFontWeight,horizontalAlign:"left",backgroundColor:o.indexLabelBackgroundColor,maxWidth:o.indexLabelMaxWidth,maxHeight:o.indexLabelWrap?5*o.indexLabelFontSize:1.5*o.indexLabelFontSize,text:o.indexLabelText,padding:0,textBaseline:"top"}),o.indexLabelTextBlock.measureText()}var p=0,x=0,m=!1;for(L=0;L1&&o.midAngle>Math.PI/2-C&&o.midAngle=p&&!m?(o.hemisphere="right",p++):(o.hemisphere="left",m=!0))}for(m=!1,L=0;L1&&o.midAngle>3*Math.PI/2-C&&o.midAngle<3*Math.PI/2+C&&(t/2>=x&&!m?(o.hemisphere="left",x++):(o.hemisphere="right",m=!0))}}}function i(){var e=u.plotArea.ctx;e.fillStyle="black",e.strokeStyle="grey";e.textBaseline="middle",e.lineJoin="round";var t=0;for(t=0;ti&&(s=i,o=!0);var l=y[a].color?y[a].color:g._colorSet[a%g._colorSet.length];if(s>n&&(0,r.drawSegment)(u.plotArea.ctx,P[a].center,P[a].radius,l,g.type,n,s,g.fillOpacity,P[a].percentInnerRadius),o)break}}function n(e){var t=u.plotArea.ctx;t.clearRect(M.x1,M.y1,M.width,M.height),t.fillStyle=u.backgroundColor,t.fillRect(M.x1,M.y1,M.width,M.height);for(var a=0;an){var o=.07*I*Math.cos(P[a].midAngle),l=.07*I*Math.sin(P[a].midAngle),h=!1;if(y[a].exploded?(Math.abs(P[a].center.x-(w.x+o))>1e-9||Math.abs(P[a].center.y-(w.y+l))>1e-9)&&(P[a].center.x=w.x+o*e,P[a].center.y=w.y+l*e,h=!0):(Math.abs(P[a].center.x-w.x)>0||Math.abs(P[a].center.y-w.y)>0)&&(P[a].center.x=w.x+o*(1-e),P[a].center.y=w.y+l*(1-e),h=!0),h){var d={};d.dataSeries=g,d.dataPoint=g.dataPoints[a],d.index=a,u._toolTip.highlightObjects([d])}var c=y[a].color?y[a].color:g._colorSet[a%g._colorSet.length];(0,r.drawSegment)(u.plotArea.ctx,P[a].center,P[a].radius,c,g.type,n,s,g.fillOpacity,P[a].percentInnerRadius)}}i()}function o(e,t){var i={x1:e.indexLabelTextBlock.x,y1:e.indexLabelTextBlock.y-e.indexLabelTextBlock.height/2,x2:e.indexLabelTextBlock.x+e.indexLabelTextBlock.width,y2:e.indexLabelTextBlock.y+e.indexLabelTextBlock.height/2},a={x1:t.indexLabelTextBlock.x,y1:t.indexLabelTextBlock.y-t.indexLabelTextBlock.height/2,x2:t.indexLabelTextBlock.x+t.indexLabelTextBlock.width,y2:t.indexLabelTextBlock.y+t.indexLabelTextBlock.height/2};return i.x2a.x2+f||i.y1>a.y2+f||i.y2a.y?n.y1-a.y2:a.y1-n.y2}function h(e){for(var t=null,i=1;i=P[e].indexLabelTextBlock.y:P[t].indexLabelTextBlock.y<=P[e].indexLabelTextBlock.y)))break;t=null}return t}function d(e){for(var t=null,i=1;i=P[e].indexLabelTextBlock.y)))break;t=null}return t}function c(e,t){t=t||0;var i=0,a=w.y-1*indexLabelRadius,n=w.y+1*indexLabelRadius;if(e>=0&&et&&s.indexLabelTextBlock.y0&&s.indexLabelTextBlock.y>n)return 0;var r=t,o=0,l=0,p=0,x=0,u=0;0>r?s.indexLabelTextBlock.y-s.indexLabelTextBlock.height/2>a&&s.indexLabelTextBlock.y-s.indexLabelTextBlock.height/2+rn&&(r=s.indexLabelTextBlock.y+s.indexLabelTextBlock.height/2+r-n);var m=s.indexLabelTextBlock.y+r,v=0;v="right"===s.hemisphere?w.x+Math.sqrt(Math.pow(indexLabelRadius,2)-Math.pow(m-w.y,2)):w.x-Math.sqrt(Math.pow(indexLabelRadius,2)-Math.pow(m-w.y,2)),l=w.x+I*Math.cos(s.midAngle),p=w.y+I*Math.sin(s.midAngle),o=Math.sqrt(Math.pow(v-l,2)+Math.pow(m-p,2)),u=Math.acos(I/indexLabelRadius),x=Math.acos((indexLabelRadius*indexLabelRadius+I*I-o*o)/(2*I*indexLabelRadius)),r=u>x?m-s.indexLabelTextBlock.y:0;var g,f,b=d(e),M=h(e),T=0,_=0;if(0>r){if(g="right"===s.hemisphere?b:M,i=r,null!==g){var A=-r,f=s.indexLabelTextBlock.y-s.indexLabelTextBlock.height/2-(P[g].indexLabelTextBlock.y+P[g].indexLabelTextBlock.height/2);S>f-A&&(T=-A,_=c(g,T,recursionCount+1),+_.toFixed(k)>+T.toFixed(k)&&(i=f>S?-(f-S):-(A-(_-T))))}}else if(r>0&&(g="right"===s.hemisphere?M:b,i=r,null!==g)){var A=r,f=P[g].indexLabelTextBlock.y-P[g].indexLabelTextBlock.height/2-(s.indexLabelTextBlock.y+s.indexLabelTextBlock.height/2);S>f-A&&(T=A,_=c(g,T,recursionCount+1),+_.toFixed(k)<+T.toFixed(k)&&(i=f>S?f-S:A-(T-_)))}if(i){var L=s.indexLabelTextBlock.y+i,B=0;if(B="right"===s.hemisphere?w.x+Math.sqrt(Math.pow(indexLabelRadius,2)-Math.pow(L-w.y,2)):w.x-Math.sqrt(Math.pow(indexLabelRadius,2)-Math.pow(L-w.y,2)),s.midAngle>Math.PI/2-C&&s.midAnglez.indexLabelTextBlock.x?B=z.indexLabelTextBlock.x-15:"right"===s.hemisphere&&"left"===D.hemisphere&&B3*Math.PI/2-C&&s.midAngle<3*Math.PI/2+C){var F=(e-1+P.length)%P.length,z=P[F],D=P[(e+1+P.length)%P.length];"right"===s.hemisphere&&"left"===z.hemisphere&&BD.indexLabelTextBlock.x&&(B=D.indexLabelTextBlock.x-15)}s.indexLabelTextBlock.y=L,s.indexLabelTextBlock.x=B,s.indexLabelAngle=Math.atan2(s.indexLabelTextBlock.y-w.y,s.indexLabelTextBlock.x-w.x)}}return i}function p(){var e=u.plotArea.ctx;e.fillStyle="grey",e.strokeStyle="grey";var t=16;e.font=t+"px Arial",e.textBaseline="middle";var i=0,a=0,n=0,s=!0,r=function(){function e(e,t,i){for(var a=[],n=0,s=t;!0&&(a.push(P[s]),s!==i);s=(s+1+y.length)%y.length);for(a.sort(function(e,t){return e.y-t.y}),s=0;sn))break;n+=r.indexLabelTextBlock.height,r.indexLabelTextBlock.text="",r.indexLabelText="",r.indexLabelTextBlock.measureText()}}function t(){for(var t=-1,i=-1,a=0,n=!1,s=0;sb&&o(x,d)?(0>t&&(t=s),r!==t&&(i=r,a+=-b),s%Math.max(y.length/10,3)===0&&(n=!0)):n=!0,n&&a>0&&t>=0&&i>=0&&(e(a,t,i),t=-1,i=-1,a=0)}}a>0&&e(a,t,i)}if((g.radius||!g.radius&&"undefined"!=typeof g.innerRadius&&null!==g.innerRadius&&B>=I-n)&&(s=!1),s&&(I-=n),n=0,"inside"!==g.indexLabelPlacement){for(d=I*T,i=0;ib)){for(C=0,_=0,A=0;A0&&(!s&&p.indexLabelText&&(H="right"===p.hemisphere?M.x2-p.indexLabelTextBlock.x:p.indexLabelTextBlock.x-M.x1,.3*p.indexLabelTextBlock.maxWidth>H?p.indexLabelText="":p.indexLabelTextBlock.maxWidth=.85*H,.3*p.indexLabelTextBlock.maxWidth9&&(R=.3*R),R>n&&(n=R))),V=0,j=0,p.indexLabelAngle>0&&p.indexLabelAngle0&&(!s&&p.indexLabelText&&(U=p.indexLabelAngle>0&&p.indexLabelAngle9&&(j=.3*j),j>n&&(n=j))));t()};for(a=0;10>a&&(1>a||n>0);a++){var d,p,x,m,p,v,b,C,_,A,L,z,D,X,p,Y,O,E,W,R,H,V,j,U;r()}}function x(){if(u.plotArea.layoutManager.reset(),u._title&&(u._title.dockInsidePlotArea||"center"===u._title.horizontalAlign&&"center"===u._title.verticalAlign)&&u._title.render(),u.subtitles)for(var e=0;e=m)){for(var v=e.dataSeriesIndexes[0],g=this.data[v],y=g.dataPoints,f=10,b=500,M=this.plotArea,P=[],S=2,T=1.3,C=20/180*Math.PI,k=6,w={ -x:(M.x2+M.x1)/2,y:(M.y2+M.y1)/2},_=0,A=!1,L=0;L0&&(A=!0),!A&&"undefined"!=typeof y[L].label&&null!==y[L].label&&y[L].label.toString().length>0&&(A=!0);if(0!==_){A=A||"undefined"!=typeof g.indexLabel&&null!==g.indexLabel&&g.indexLabel.toString().length>0;var I="inside"!==g.indexLabelPlacement&&A?.75*Math.min(M.width,M.height)/2:.92*Math.min(M.width,M.height)/2;g.radius&&(I=(0,r.convertPercentToValue)(g.radius,I));var B="undefined"!=typeof g.innerRadius&&null!==g.innerRadius?(0,r.convertPercentToValue)(g.innerRadius,I):.7*I,F=Math.min(B/I,(I-1)/I);this.pieDoughnutClickHandler=function(e){if(!u.isAnimating){var t=e.dataPointIndex,i=e.dataPoint,a=this;a.dataPointIds[t];i.exploded?i.exploded=!1:i.exploded=!0,a.dataPoints.length>1&&u._animator.animate(0,b,function(e){n(e),x()})}},t(),p(),p(),p(),p(),this.disableToolTip=!0,this._animator.animate(0,this.animatedRender?this.animationDuration:0,function(e){a(e),x()},function(){u.disableToolTip=!1,u._animator.animate(0,u.animatedRender?b:0,function(e){n(e),x()})})}}};var n=e("../core/text_block"),s=a(n),r=e("../helpers/utils")},{"../core/text_block":34,"../helpers/utils":39}],8:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){function t(){if(M){var e=null;c.lineThickness>0&&i.stroke();for(var t=h.length-1;t>=0;t--)e=h[t],i.lineTo(e.x,e.y),s.lineTo(e.x,e.y);if(i.closePath(),i.globalAlpha=c.fillOpacity,i.fill(),i.globalAlpha=1,s.fill(),c.lineThickness>0){i.beginPath(),i.moveTo(e.x,e.y);for(var t=0;t=n)){var s=this._eventManager.ghostCtx,r=(e.axisX.lineCoordinates,e.axisY.lineCoordinates,[]),o=this.plotArea;i.save(),a.isCanvasSupported&&s.save(),i.beginPath(),i.rect(o.x1,o.y1,o.width,o.height),i.clip(),a.isCanvasSupported&&(s.beginPath(),s.rect(o.x1,o.y1,o.width,o.height),s.clip());for(var l=0;l0){var P=c._colorSet[b%c._colorSet.length];i.fillStyle=P,i.strokeStyle=P,i.lineWidth=c.lineThickness,i.setLineDash&&i.setLineDash(getLineDashArray(c.lineDashType,c.lineThickness));for(var S=!0;be.axisX.dataInfo.viewPortMax))if(null!==p[b].y&&p[b].y.length&&"number"==typeof p[b].y[0]&&"number"==typeof p[b].y[1]){m=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(y-e.axisX.conversionParameters.minimum)+.5<<0,v=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(p[b].y[0]-e.axisY.conversionParameters.minimum)+.5<<0,g=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(p[b].y[1]-e.axisY.conversionParameters.minimum)+.5<<0,f||S?(i.beginPath(),i.moveTo(m,v),M={x:m,y:v},h=[],h.push({x:m,y:g}),a.isCanvasSupported&&(s.beginPath(),s.moveTo(m,v)),f=!1,S=!1):(i.lineTo(m,v),h.push({x:m,y:g}),a.isCanvasSupported&&s.lineTo(m,v),b%250==0&&t());var T=c.dataPointIds[b];if(this._eventManager.objectMap[T]={id:T,objectType:"dataPoint",dataSeriesIndex:d,dataPointIndex:b,x1:m,y1:v,y2:g},0!==p[b].markerSize&&(p[b].markerSize>0||c.markerSize>0)){var C=c.getMarkerProperties(b,m,g,i);r.push(C);var k=intToHexColorString(T);a.isCanvasSupported&&r.push({x:m,y:g,ctx:s,type:C.type,size:C.size,color:k,borderColor:k,borderThickness:C.borderThickness}),C=c.getMarkerProperties(b,m,v,i),r.push(C);var k=intToHexColorString(T);a.isCanvasSupported&&r.push({x:m,y:v,ctx:s,type:C.type,size:C.size,color:k,borderColor:k,borderThickness:C.borderThickness})}(p[b].indexLabel||c.indexLabel||p[b].indexLabelFormatter||c.indexLabelFormatter)&&(this._indexLabels.push({chartType:"rangeArea",dataPoint:p[b],dataSeries:c,indexKeyword:0,point:{x:m,y:v},direction:p[b].y[0]<=p[b].y[1]?-1:1,color:P}),this._indexLabels.push({chartType:"rangeArea",dataPoint:p[b],dataSeries:c,indexKeyword:1,point:{x:m,y:g},direction:p[b].y[0]<=p[b].y[1]?1:-1,color:P}))}else t(),S=!0;t(),RenderHelper.drawMarkers(r)}}i.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var w={source:i,dest:this.plotArea.ctx,animationCallback:AnimationHelper.xClipAnimation,easingFunction:AnimationHelper.easing.linear,animationBase:0};return w}};var a=e("../helpers/utils")},{"../helpers/utils":39}],9:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(0>=i)){var n,s,r,o,l=null,h=this.plotArea,d=0,c=(e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,this.dataPointMaxWidth?this.dataPointMaxWidth:Math.min(.15*this.height,this.plotArea.height/e.plotType.totalDataSeries*.9)<<0),p=e.axisX.dataInfo.minDiff,x=h.height/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(p)/e.plotType.totalDataSeries*.9<<0;x>c?x=c:p===1/0?x=c/e.plotType.totalDataSeries*.9:1>x&&(x=1),t.save(),a.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(h.x1,h.y1,h.width,h.height),t.clip(),a.isCanvasSupported&&(this._eventManager.ghostCtx.rect(h.x1,h.y1,h.width,h.height),this._eventManager.ghostCtx.clip());for(var u=0;u0){var y=x>5&&v.bevelEnabled?!0:!1;for(t.strokeStyle="#4572A7 ",d=0;de.axisX.dataInfo.viewPortMax)&&null!==g[d].y&&g[d].y.length&&"number"==typeof g[d].y[0]&&"number"==typeof g[d].y[1]){n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(g[d].y[0]-e.axisY.conversionParameters.minimum)+.5<<0,s=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(g[d].y[1]-e.axisY.conversionParameters.minimum)+.5<<0,r=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(o-e.axisX.conversionParameters.minimum)+.5<<0;var f=r-e.plotType.totalDataSeries*x/2+(e.previousDataSeriesCount+u)*x<<0,b=f+x<<0;if(n>s){var M=n;n=s,s=M}l=g[d].color?g[d].color:v._colorSet[d%v._colorSet.length],drawRect(t,n,f,s,b,l,0,null,y,!1,!1,!1,v.fillOpacity);var P=v.dataPointIds[d];this._eventManager.objectMap[P]={id:P,objectType:"dataPoint",dataSeriesIndex:m,dataPointIndex:d,x1:n,y1:f,x2:s,y2:b},l=intToHexColorString(P),a.isCanvasSupported&&drawRect(this._eventManager.ghostCtx,n,f,s,b,l,0,null,!1,!1,!1,!1),(g[d].indexLabel||v.indexLabel||g[d].indexLabelFormatter||v.indexLabelFormatter)&&(this._indexLabels.push({chartType:"rangeBar",dataPoint:g[d],dataSeries:v,indexKeyword:0,point:{x:g[d].y[1]>=g[d].y[0]?n:s,y:f+(b-f)/2},direction:g[d].y[1]>=g[d].y[0]?-1:1,bounds:{x1:Math.min(n,s),y1:f,x2:Math.max(n,s),y2:b},color:l}),this._indexLabels.push({chartType:"rangeBar",dataPoint:g[d],dataSeries:v,indexKeyword:1,point:{x:g[d].y[1]>=g[d].y[0]?s:n,y:f+(b-f)/2},direction:g[d].y[1]>=g[d].y[0]?1:-1,bounds:{x1:Math.min(n,s),y1:f,x2:Math.max(n,s),y2:b},color:l}))}}}t.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var S={source:t,dest:this.plotArea.ctx,animationCallback:AnimationHelper.fadeInAnimation,easingFunction:AnimationHelper.easing.easeInQuad,animationBase:0};return S}};var a=e("../helpers/utils")},{"../helpers/utils":39}],10:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(0>=i)){var n,s,r,o,l=null,h=this.plotArea,d=0,c=(e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,this.dataPointMaxWidth?this.dataPointMaxWidth:.03*this.width),p=e.axisX.dataInfo.minDiff,x=h.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(p)/e.plotType.totalDataSeries*.9<<0;x>c?x=c:p===1/0?x=c/e.plotType.totalDataSeries*.9:1>x&&(x=1),t.save(),a.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(h.x1,h.y1,h.width,h.height),t.clip(),a.isCanvasSupported&&(this._eventManager.ghostCtx.rect(h.x1,h.y1,h.width,h.height),this._eventManager.ghostCtx.clip());for(var u=0;u0){var y=x>5&&v.bevelEnabled?!0:!1;for(d=0;de.axisX.dataInfo.viewPortMax)&&null!==g[d].y&&g[d].y.length&&"number"==typeof g[d].y[0]&&"number"==typeof g[d].y[1]){n=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(o-e.axisX.conversionParameters.minimum)+.5<<0,s=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(g[d].y[0]-e.axisY.conversionParameters.minimum)+.5<<0,r=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(g[d].y[1]-e.axisY.conversionParameters.minimum)+.5<<0;var s,r,f=n-e.plotType.totalDataSeries*x/2+(e.previousDataSeriesCount+u)*x<<0,b=f+x<<0;if(l=g[d].color?g[d].color:v._colorSet[d%v._colorSet.length],s>r){var M=s;s=r,r=M}var P=v.dataPointIds[d];this._eventManager.objectMap[P]={id:P,objectType:"dataPoint",dataSeriesIndex:m,dataPointIndex:d,x1:f,y1:s,x2:b,y2:r};var S=0;drawRect(t,f,s,b,r,l,S,l,y,y,!1,!1,v.fillOpacity),l=intToHexColorString(P),a.isCanvasSupported&&drawRect(this._eventManager.ghostCtx,f,s,b,r,l,0,null,!1,!1,!1,!1),(g[d].indexLabel||v.indexLabel||g[d].indexLabelFormatter||v.indexLabelFormatter)&&(this._indexLabels.push({chartType:"rangeColumn",dataPoint:g[d],dataSeries:v,indexKeyword:0,point:{x:f+(b-f)/2,y:g[d].y[1]>=g[d].y[0]?r:s},direction:g[d].y[1]>=g[d].y[0]?-1:1,bounds:{x1:f,y1:Math.min(s,r),x2:b,y2:Math.max(s,r)},color:l}),this._indexLabels.push({chartType:"rangeColumn",dataPoint:g[d],dataSeries:v,indexKeyword:1,point:{x:f+(b-f)/2,y:g[d].y[1]>=g[d].y[0]?s:r},direction:g[d].y[1]>=g[d].y[0]?1:-1,bounds:{x1:f,y1:Math.min(s,r),x2:b,y2:Math.max(s,r)},color:l}))}}}t.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var T={source:t,dest:this.plotArea.ctx,animationCallback:AnimationHelper.fadeInAnimation,easingFunction:AnimationHelper.easing.easeInQuad,animationBase:0};return T}};var a=e("../helpers/utils")},{"../helpers/utils":39}],11:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){function t(){var e=getBezierPoints(f,2);if(e.length>0){i.beginPath(),i.moveTo(e[0].x,e[0].y),a.isCanvasSupported&&(s.beginPath(),s.moveTo(e[0].x,e[0].y));for(var t=0;t0&&i.stroke(),e=getBezierPoints(b,2),i.lineTo(b[b.length-1].x,b[b.length-1].y);for(var t=e.length-1;t>2;t-=3)i.bezierCurveTo(e[t-1].x,e[t-1].y,e[t-2].x,e[t-2].y,e[t-3].x,e[t-3].y),a.isCanvasSupported&&s.bezierCurveTo(e[t-1].x,e[t-1].y,e[t-2].x,e[t-2].y,e[t-3].x,e[t-3].y);if(i.closePath(),i.globalAlpha=d.fillOpacity,i.fill(),i.globalAlpha=1,d.lineThickness>0){i.beginPath(),i.moveTo(b[b.length-1].x,b[b.length-1].y);for(var t=e.length-1;t>2;t-=3)i.bezierCurveTo(e[t-1].x,e[t-1].y,e[t-2].x,e[t-2].y,e[t-3].x,e[t-3].y),a.isCanvasSupported&&s.bezierCurveTo(e[t-1].x,e[t-1].y,e[t-2].x,e[t-2].y,e[t-3].x,e[t-3].y);i.stroke()}i.beginPath(),a.isCanvasSupported&&(s.closePath(),s.fill())}}var i=e.targetCanvasCtx||this.plotArea.ctx,n=e.dataSeriesIndexes.length;if(!(0>=n)){var s=this._eventManager.ghostCtx,r=(e.axisX.lineCoordinates,e.axisY.lineCoordinates,[]),o=this.plotArea;i.save(),a.isCanvasSupported&&s.save(),i.beginPath(),i.rect(o.x1,o.y1,o.width,o.height),i.clip(),a.isCanvasSupported&&(s.beginPath(),s.rect(o.x1,o.y1,o.width,o.height),s.clip());for(var l=0;l0){for(color=d._colorSet[y%d._colorSet.length],i.fillStyle=color,i.strokeStyle=color,i.lineWidth=d.lineThickness,i.setLineDash&&i.setLineDash(getLineDashArray(d.lineDashType,d.lineThickness));ye.axisX.dataInfo.viewPortMax))if(null!==c[y].y&&c[y].y.length&&"number"==typeof c[y].y[0]&&"number"==typeof c[y].y[1]){u=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(g-e.axisX.conversionParameters.minimum)+.5<<0,m=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(c[y].y[0]-e.axisY.conversionParameters.minimum)+.5<<0,v=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(c[y].y[1]-e.axisY.conversionParameters.minimum)+.5<<0;var M=d.dataPointIds[y];if(this._eventManager.objectMap[M]={id:M,objectType:"dataPoint",dataSeriesIndex:h,dataPointIndex:y,x1:u,y1:m,y2:v},f[f.length]={x:u,y:m},b[b.length]={x:u,y:v},0!==c[y].markerSize&&(c[y].markerSize>0||d.markerSize>0)){var P=d.getMarkerProperties(y,u,m,i);r.push(P);var S=intToHexColorString(M);a.isCanvasSupported&&r.push({x:u,y:m,ctx:s,type:P.type,size:P.size,color:S,borderColor:S,borderThickness:P.borderThickness});var P=d.getMarkerProperties(y,u,v,i);r.push(P);var S=intToHexColorString(M);a.isCanvasSupported&&r.push({x:u,y:v,ctx:s,type:P.type,size:P.size,color:S,borderColor:S,borderThickness:P.borderThickness})}(c[y].indexLabel||d.indexLabel||c[y].indexLabelFormatter||d.indexLabelFormatter)&&(this._indexLabels.push({chartType:"splineArea",dataPoint:c[y],dataSeries:d,indexKeyword:0,point:{x:u,y:m},direction:c[y].y[0]<=c[y].y[1]?-1:1,color:color}),this._indexLabels.push({chartType:"splineArea",dataPoint:c[y],dataSeries:d,indexKeyword:1,point:{x:u,y:v},direction:c[y].y[0]<=c[y].y[1]?1:-1,color:color}))}else y>0&&(t(),f=[],b=[]);t(),RenderHelper.drawMarkers(r)}}i.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var T={source:i,dest:this.plotArea.ctx,animationCallback:AnimationHelper.xClipAnimation,easingFunction:AnimationHelper.easing.linear,animationBase:0};return T}};var a=e("../helpers/utils")},{"../helpers/utils":39}],12:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(0>=i)){var a,n,r,h=null,d=this.plotArea,c=0,p=(e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,this.dataPointMaxWidth?this.dataPointMaxWidth:.15*this.width<<0),x=e.axisX.dataInfo.minDiff,u=d.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(x)/i*.9<<0;t.save(),l.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(d.x1,d.y1,d.width,d.height),t.clip(),l.isCanvasSupported&&(this._eventManager.ghostCtx.rect(d.x1,d.y1,d.width,d.height),this._eventManager.ghostCtx.clip());for(var m=0;mu?u=1:u>p&&(u=p),y.length>0){t.strokeStyle="#4572A7 ";for(var f=(Math.pow(.3*Math.min(d.height,d.width)/2,2)*Math.PI,0),b=0,c=0;ce.axisX.dataInfo.viewPortMax)&&"number"==typeof y[c].y){a=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0,n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(y[c].y-e.axisY.conversionParameters.minimum)+.5<<0;var M=g.getMarkerProperties(c,a,n,t);if(t.globalAlpha=g.fillOpacity,s["default"].drawMarker(M.x,M.y,M.ctx,M.type,M.size,M.color,M.borderColor,M.borderThickness),t.globalAlpha=1,!(Math.sqrt((f-a)*(f-a)+(b-n)*(b-n))Math.min(this.plotArea.width,this.plotArea.height))){var P=g.dataPointIds[c];this._eventManager.objectMap[P]={id:P,objectType:"dataPoint",dataSeriesIndex:v,dataPointIndex:c,x1:a,y1:n};var S=(0,l.intToHexColorString)(P);l.isCanvasSupported&&s["default"].drawMarker(M.x,M.y,this._eventManager.ghostCtx,M.type,M.size,S,S,M.borderThickness),(y[c].indexLabel||g.indexLabel||y[c].indexLabelFormatter||g.indexLabelFormatter)&&this._indexLabels.push({chartType:"scatter",dataPoint:y[c],dataSeries:g,point:{x:a,y:n},direction:1,bounds:{x1:a-M.size/2,y1:n-M.size/2,x2:a+M.size/2,y2:n+M.size/2},color:h}),f=a,b=n}}}}t.restore(),l.isCanvasSupported&&this._eventManager.ghostCtx.restore();var T={source:t,dest:this.plotArea.ctx,animationCallback:o["default"].fadeInAnimation,easingFunction:o["default"].easing.easeInQuad,animationBase:0};return T}};var n=e("../helpers/render"),s=a(n),r=e("../helpers/animator"),o=a(r),l=e("../helpers/utils")},{"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39}],13:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){function t(e){var t=getBezierPoints(e,2);if(t.length>0){i.beginPath(),a.isCanvasSupported&&s.beginPath(),i.moveTo(t[0].x,t[0].y),a.isCanvasSupported&&s.moveTo(t[0].x,t[0].y);for(var n=0;n0&&n%3e3===0&&(i.stroke(),i.beginPath(),i.moveTo(t[n+3].x,t[n+3].y),a.isCanvasSupported&&(s.stroke(),s.beginPath(),s.moveTo(t[n+3].x,t[n+3].y)));i.stroke(),a.isCanvasSupported&&s.stroke()}}var i=e.targetCanvasCtx||this.plotArea.ctx,n=e.dataSeriesIndexes.length;if(!(0>=n)){var s=this._eventManager.ghostCtx;i.save();var r=this.plotArea;i.beginPath(),i.rect(r.x1,r.y1,r.width,r.height),i.clip();for(var o=[],l=0;l0?Math.max(d.lineThickness,4):0;var u=d._colorSet,m=u[0];i.strokeStyle=m;var v,g,y,f=0,b=[];if(i.beginPath(),c.length>0)for(f=0;fe.axisX.dataInfo.viewPortMax))if("number"==typeof c[f].y){v=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(y-e.axisX.conversionParameters.minimum)+.5<<0,g=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(c[f].y-e.axisY.conversionParameters.minimum)+.5<<0;var M=d.dataPointIds[f];if(this._eventManager.objectMap[M]={id:M,objectType:"dataPoint",dataSeriesIndex:h,dataPointIndex:f,x1:v,y1:g},b[b.length]={x:v,y:g},c[f].markerSize>0||d.markerSize>0){var P=d.getMarkerProperties(f,v,g,i);o.push(P);var S=intToHexColorString(M);a.isCanvasSupported&&o.push({x:v,y:g,ctx:s,type:P.type,size:P.size,color:S,borderColor:S,borderThickness:P.borderThickness})}(c[f].indexLabel||d.indexLabel||c[f].indexLabelFormatter||d.indexLabelFormatter)&&this._indexLabels.push({chartType:"spline",dataPoint:c[f],dataSeries:d,point:{x:v,y:g},direction:c[f].y>=0?1:-1,color:m})}else f>0&&(t(b),b=[]);t(b)}RenderHelper.drawMarkers(o),i.restore(),i.beginPath(),a.isCanvasSupported&&s.beginPath();var T={source:i,dest:this.plotArea.ctx,animationCallback:AnimationHelper.xClipAnimation,easingFunction:AnimationHelper.easing.linear,animationBase:0};return T}};var a=e("../helpers/utils")},{"../helpers/utils":39}],14:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){function t(){var t=getBezierPoints(S,2);if(t.length>0){i.beginPath(),i.moveTo(t[0].x,t[0].y),a.isCanvasSupported&&(s.beginPath(),s.moveTo(t[0].x,t[0].y));for(var n=0;n0&&i.stroke(),e.axisY.viewportMinimum<=0&&e.axisY.viewportMaximum>=0?f=M:e.axisY.viewportMaximum<0?f=o.y1:e.axisY.viewportMinimum>0&&(f=r.y2),P={x:t[0].x,y:t[0].y},i.lineTo(t[t.length-1].x,f),i.lineTo(P.x,f),i.closePath(),i.globalAlpha=p.fillOpacity,i.fill(),i.globalAlpha=1,a.isCanvasSupported&&(s.lineTo(t[t.length-1].x,f),s.lineTo(P.x,f),s.closePath(),s.fill())}}var i=e.targetCanvasCtx||this.plotArea.ctx,n=e.dataSeriesIndexes.length;if(!(0>=n)){var s=this._eventManager.ghostCtx,r=e.axisX.lineCoordinates,o=e.axisY.lineCoordinates,l=[],h=this.plotArea;i.save(),a.isCanvasSupported&&s.save(),i.beginPath(),i.rect(h.x1,h.y1,h.width,h.height),i.clip(),a.isCanvasSupported&&(s.beginPath(),s.rect(h.x1,h.y1,h.width,h.height),s.clip());for(var d=0;d0){for(color=p._colorSet[b%p._colorSet.length],i.fillStyle=color,i.strokeStyle=color,i.lineWidth=p.lineThickness,i.setLineDash&&i.setLineDash(getLineDashArray(p.lineDashType,p.lineThickness));be.axisX.dataInfo.viewPortMax))if("number"==typeof x[b].y){v=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(y-e.axisX.conversionParameters.minimum)+.5<<0,g=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(x[b].y-e.axisY.conversionParameters.minimum)+.5<<0;var T=p.dataPointIds[b];if(this._eventManager.objectMap[T]={id:T,objectType:"dataPoint",dataSeriesIndex:c,dataPointIndex:b,x1:v,y1:g},S[S.length]={x:v,y:g},0!==x[b].markerSize&&(x[b].markerSize>0||p.markerSize>0)){var C=p.getMarkerProperties(b,v,g,i);l.push(C);var k=intToHexColorString(T);a.isCanvasSupported&&l.push({x:v,y:g,ctx:s,type:C.type,size:C.size,color:k,borderColor:k,borderThickness:C.borderThickness})}(x[b].indexLabel||p.indexLabel||x[b].indexLabelFormatter||p.indexLabelFormatter)&&this._indexLabels.push({chartType:"splineArea",dataPoint:x[b],dataSeries:p,point:{x:v,y:g},direction:x[b].y>=0?1:-1,color:color})}else b>0&&(t(),S=[]);t(),RenderHelper.drawMarkers(l)}}i.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var w={source:i,dest:this.plotArea.ctx,animationCallback:AnimationHelper.xClipAnimation,easingFunction:AnimationHelper.easing.linear,animationBase:0};return w}};var a=e("../helpers/utils")},{"../helpers/utils":39}],15:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(0>=i)){var a,n,r,h=null,d=[],c=this.plotArea,p=[],x=[],u=0,m=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,v=(e.axisX.dataInfo.minDiff,this._eventManager.ghostCtx);l.isCanvasSupported&&v.beginPath(),t.save(),l.isCanvasSupported&&v.save(),t.beginPath(),t.rect(c.x1,c.y1,c.width,c.height),t.clip(),l.isCanvasSupported&&(v.beginPath(),v.rect(c.x1,c.y1,c.width,c.height),v.clip());for(var g=[],y=0;y0){for(h=M._colorSet[0],t.fillStyle=h,t.strokeStyle=h,t.lineWidth=M.lineThickness,t.setLineDash&&t.setLineDash((0,l.getLineDashArray)(M.lineDashType,M.lineThickness)),u=0;u=0?P[M.dataPointIndexes[r]]:{x:r,y:0},!(re.axisX.dataInfo.viewPortMax)&&"number"==typeof w.y){var a=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0,n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(w.y-e.axisY.conversionParameters.minimum),_=p[r]?p[r]:0;if(n-=_,T.push({x:a,y:m-_}),p[r]=m-n,S)t.beginPath(),t.moveTo(a,n),l.isCanvasSupported&&(v.beginPath(),v.moveTo(a,n)),S=!1;else if(t.lineTo(a,n),l.isCanvasSupported&&v.lineTo(a,n),u%250==0){for(M.lineThickness>0&&t.stroke();T.length>0;){var A=T.pop();t.lineTo(A.x,A.y),l.isCanvasSupported&&v.lineTo(A.x,A.y)}t.closePath(),t.globalAlpha=M.fillOpacity,t.fill(),t.globalAlpha=1,t.beginPath(),t.moveTo(a,n),l.isCanvasSupported&&(v.closePath(),v.fill(),v.beginPath(),v.moveTo(a,n)),T.push({x:a,y:m-_})}if(M.dataPointIndexes[r]>=0){var L=M.dataPointIds[M.dataPointIndexes[r]];this._eventManager.objectMap[L]={id:L,objectType:"dataPoint",dataSeriesIndex:b,dataPointIndex:M.dataPointIndexes[r],x1:a,y1:n}}if(M.dataPointIndexes[r]>=0&&0!==w.markerSize&&(w.markerSize>0||M.markerSize>0)){var I=M.getMarkerProperties(u,a,n,t);d.push(I),markerColor=(0,l.intToHexColorString)(L),l.isCanvasSupported&&d.push({x:a,y:n,ctx:v,type:I.type,size:I.size,color:markerColor,borderColor:markerColor,borderThickness:I.borderThickness})}(w.indexLabel||M.indexLabel||w.indexLabelFormatter||M.indexLabelFormatter)&&this._indexLabels.push({chartType:"stackedArea",dataPoint:w,dataSeries:M,point:{x:a,y:n},direction:P[u].y>=0?1:-1,color:h})}}for(M.lineThickness>0&&t.stroke();T.length>0;){var A=T.pop();t.lineTo(A.x,A.y),l.isCanvasSupported&&v.lineTo(A.x,A.y)}t.closePath(),t.globalAlpha=M.fillOpacity,t.fill(),t.globalAlpha=1,t.beginPath(),t.moveTo(a,n),l.isCanvasSupported&&(v.closePath(),v.fill(),v.beginPath(),v.moveTo(a,n))}delete M.dataPointIndexes}s["default"].drawMarkers(d),t.restore(),l.isCanvasSupported&&v.restore();var B={source:t,dest:this.plotArea.ctx,animationCallback:o["default"].xClipAnimation,easingFunction:o["default"].easing.linear,animationBase:0};return B}};var n=e("../helpers/render"),s=a(n),r=e("../helpers/animator"),o=a(r),l=e("../helpers/utils")},{"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39}],16:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(0>=i)){var a,n,r,h=null,d=this.plotArea,c=[],p=[],x=[],u=0,m=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,v=this.dataPointMaxWidth?this.dataPointMaxWidth:.15*this.width<<0,g=e.axisX.dataInfo.minDiff,y=d.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(g)*.9<<0,f=this._eventManager.ghostCtx;t.save(),l.isCanvasSupported&&f.save(),t.beginPath(),t.rect(d.x1,d.y1,d.width,d.height),t.clip(),l.isCanvasSupported&&(f.beginPath(),f.rect(d.x1,d.y1,d.width,d.height),f.clip());for(var b=[],M=0;My?y=1:y>v&&(y=v);var A=[];if(x.length>0){h=T._colorSet[u%T._colorSet.length],t.fillStyle=h,t.strokeStyle=h,t.lineWidth=T.lineThickness,t.setLineDash&&t.setLineDash((0,l.getLineDashArray)(T.lineDashType,T.lineThickness));for(u=0;u=0?C[T.dataPointIndexes[r]]:{x:r,y:0},!(re.axisX.dataInfo.viewPortMax)&&"number"==typeof L.y){var I;I=0!==e.dataPointYSums[r]?L.y/e.dataPointYSums[r]*100:0;var a=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0,n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(I-e.axisY.conversionParameters.minimum),B=p[r]?p[r]:0;if(n-=B,A.push({x:a,y:m-B}),p[r]=m-n,k)t.beginPath(),t.moveTo(a,n),l.isCanvasSupported&&(f.beginPath(),f.moveTo(a,n)),k=!1;else if(t.lineTo(a,n),l.isCanvasSupported&&f.lineTo(a,n),u%250==0){for(T.lineThickness>0&&t.stroke();A.length>0;){var F=A.pop();t.lineTo(F.x,F.y),l.isCanvasSupported&&f.lineTo(F.x,F.y)}t.closePath(),t.globalAlpha=T.fillOpacity,t.fill(),t.globalAlpha=1,t.beginPath(),t.moveTo(a,n),l.isCanvasSupported&&(f.closePath(),f.fill(),f.beginPath(),f.moveTo(a,n)),A.push({x:a,y:m-B})}if(T.dataPointIndexes[r]>=0){var z=T.dataPointIds[T.dataPointIndexes[r]];this._eventManager.objectMap[z]={id:z,objectType:"dataPoint",dataSeriesIndex:S,dataPointIndex:T.dataPointIndexes[r],x1:a,y1:n}}if(T.dataPointIndexes[r]>=0&&0!==L.markerSize&&(L.markerSize>0||T.markerSize>0)){var D=T.getMarkerProperties(u,a,n,t);c.push(D),markerColor=(0,l.intToHexColorString)(z),l.isCanvasSupported&&c.push({x:a,y:n,ctx:f,type:D.type,size:D.size,color:markerColor,borderColor:markerColor,borderThickness:D.borderThickness})}(L.indexLabel||T.indexLabel||L.indexLabelFormatter||T.indexLabelFormatter)&&this._indexLabels.push({chartType:"stackedArea100",dataPoint:L,dataSeries:T,point:{x:a,y:n},direction:C[u].y>=0?1:-1,color:h})}}for(T.lineThickness>0&&t.stroke();A.length>0;){var F=A.pop();t.lineTo(F.x,F.y),l.isCanvasSupported&&f.lineTo(F.x,F.y)}t.closePath(),t.globalAlpha=T.fillOpacity,t.fill(),t.globalAlpha=1,t.beginPath(),t.moveTo(a,n),l.isCanvasSupported&&(f.closePath(),f.fill(),f.beginPath(),f.moveTo(a,n))}delete T.dataPointIndexes}s["default"].drawMarkers(c),t.restore(),l.isCanvasSupported&&f.restore();var X={source:t,dest:this.plotArea.ctx,animationCallback:o["default"].xClipAnimation,easingFunction:o["default"].easing.linear,animationBase:0};return X}};var n=e("../helpers/render"),s=a(n),r=e("../helpers/animator"),o=a(r),l=e("../helpers/utils")},{"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39}],17:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(0>=i)){var n,s,r,o=null,l=this.plotArea,h=[],d=[],c=0,p=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,x=this.dataPointMaxWidth?this.dataPointMaxWidth:.15*this.height<<0,u=e.axisX.dataInfo.minDiff,m=l.height/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(u)/e.plotType.plotUnits.length*.9<<0; -m>x?m=x:u===1/0?m=x:1>m&&(m=1),t.save(),a.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(l.x1,l.y1,l.width,l.height),t.clip(),a.isCanvasSupported&&(this._eventManager.ghostCtx.rect(l.x1,l.y1,l.width,l.height),this._eventManager.ghostCtx.clip());for(var v=0;v0){var b=m>5&&y.bevelEnabled?!0:!1;for(t.strokeStyle="#4572A7 ",c=0;ce.axisX.dataInfo.viewPortMax)&&"number"==typeof f[c].y){s=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0,n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(f[c].y-e.axisY.conversionParameters.minimum);var M,P,S=s-e.plotType.plotUnits.length*m/2+e.index*m<<0,T=S+m<<0;if(f[c].y>=0){var C=h[r]?h[r]:0;M=p+C,P=n+C,h[r]=C+(P-M)}else{var C=d[r]?d[r]:0;M=n-C,P=p-C,d[r]=C+(P-M)}o=f[c].color?f[c].color:y._colorSet[c%y._colorSet.length],drawRect(t,M,S,P,T,o,0,null,b,!1,!1,!1,y.fillOpacity);var k=y.dataPointIds[c];this._eventManager.objectMap[k]={id:k,objectType:"dataPoint",dataSeriesIndex:g,dataPointIndex:c,x1:M,y1:S,x2:P,y2:T},o=intToHexColorString(k),a.isCanvasSupported&&drawRect(this._eventManager.ghostCtx,M,S,P,T,o,0,null,!1,!1,!1,!1),(f[c].indexLabel||y.indexLabel||f[c].indexLabelFormatter||y.indexLabelFormatter)&&this._indexLabels.push({chartType:"stackedBar",dataPoint:f[c],dataSeries:y,point:{x:f[c].y>=0?P:M,y:s},direction:f[c].y>=0?1:-1,bounds:{x1:Math.min(M,P),y1:S,x2:Math.max(M,P),y2:T},color:o})}}}t.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var w=Math.max(p,e.axisX.boundingRect.x2),_={source:t,dest:this.plotArea.ctx,animationCallback:AnimationHelper.xScaleAnimation,easingFunction:AnimationHelper.easing.easeOutQuart,animationBase:w};return _}};var a=e("../helpers/utils")},{"../helpers/utils":39}],18:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(0>=i)){var n,s,r,o=null,l=this.plotArea,h=[],d=[],c=0,p=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,x=this.dataPointMaxWidth?this.dataPointMaxWidth:.15*this.height<<0,u=e.axisX.dataInfo.minDiff,m=l.height/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(u)/e.plotType.plotUnits.length*.9<<0;m>x?m=x:u===1/0?m=x:1>m&&(m=1),t.save(),a.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(l.x1,l.y1,l.width,l.height),t.clip(),a.isCanvasSupported&&(this._eventManager.ghostCtx.rect(l.x1,l.y1,l.width,l.height),this._eventManager.ghostCtx.clip());for(var v=0;v0){var b=m>5&&y.bevelEnabled?!0:!1;for(t.strokeStyle="#4572A7 ",c=0;ce.axisX.dataInfo.viewPortMax)&&"number"==typeof f[c].y){s=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0;var M;M=0!==e.dataPointYSums[r]?f[c].y/e.dataPointYSums[r]*100:0,n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(M-e.axisY.conversionParameters.minimum);var P,S,T=s-e.plotType.plotUnits.length*m/2+e.index*m<<0,C=T+m<<0;if(f[c].y>=0){var k=h[r]?h[r]:0;P=p+k,S=n+k,h[r]=k+(S-P)}else{var k=d[r]?d[r]:0;P=n-k,S=p-k,d[r]=k+(S-P)}o=f[c].color?f[c].color:y._colorSet[c%y._colorSet.length],drawRect(t,P,T,S,C,o,0,null,b,!1,!1,!1,y.fillOpacity);var w=y.dataPointIds[c];this._eventManager.objectMap[w]={id:w,objectType:"dataPoint",dataSeriesIndex:g,dataPointIndex:c,x1:P,y1:T,x2:S,y2:C},o=intToHexColorString(w),a.isCanvasSupported&&drawRect(this._eventManager.ghostCtx,P,T,S,C,o,0,null,!1,!1,!1,!1),(f[c].indexLabel||y.indexLabel||f[c].indexLabelFormatter||y.indexLabelFormatter)&&this._indexLabels.push({chartType:"stackedBar100",dataPoint:f[c],dataSeries:y,point:{x:f[c].y>=0?S:P,y:s},direction:f[c].y>=0?1:-1,bounds:{x1:Math.min(P,S),y1:T,x2:Math.max(P,S),y2:C},color:o})}}}t.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var _=Math.max(p,e.axisX.boundingRect.x2),A={source:t,dest:this.plotArea.ctx,animationCallback:AnimationHelper.xScaleAnimation,easingFunction:AnimationHelper.easing.easeOutQuart,animationBase:_};return A}};var a=e("../helpers/utils")},{"../helpers/utils":39}],19:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(0>=i)){var n,s,r,o=null,l=this.plotArea,h=[],d=[],c=0,p=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,x=this.dataPointMaxWidth?this.dataPointMaxWidth:.15*this.width<<0,u=e.axisX.dataInfo.minDiff,m=l.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(u)/e.plotType.plotUnits.length*.9<<0;m>x?m=x:u===1/0?m=x:1>m&&(m=1),t.save(),a.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(l.x1,l.y1,l.width,l.height),t.clip(),a.isCanvasSupported&&(this._eventManager.ghostCtx.rect(l.x1,l.y1,l.width,l.height),this._eventManager.ghostCtx.clip());for(var v=0;v0){var b=m>5&&y.bevelEnabled?!0:!1;for(t.strokeStyle="#4572A7 ",c=0;ce.axisX.dataInfo.viewPortMax)&&"number"==typeof f[c].y){n=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0,s=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(f[c].y-e.axisY.conversionParameters.minimum);var M,P,S=n-e.plotType.plotUnits.length*m/2+e.index*m<<0,T=S+m<<0;if(f[c].y>=0){var C=h[r]?h[r]:0;M=s-C,P=p-C,h[r]=C+(P-M)}else{var C=d[r]?d[r]:0;P=s+C,M=p+C,d[r]=C+(P-M)}o=f[c].color?f[c].color:y._colorSet[c%y._colorSet.length],drawRect(t,S,M,T,P,o,0,null,b&&f[c].y>=0,f[c].y<0&&b,!1,!1,y.fillOpacity);var k=y.dataPointIds[c];this._eventManager.objectMap[k]={id:k,objectType:"dataPoint",dataSeriesIndex:g,dataPointIndex:c,x1:S,y1:M,x2:T,y2:P},o=intToHexColorString(k),a.isCanvasSupported&&drawRect(this._eventManager.ghostCtx,S,M,T,P,o,0,null,!1,!1,!1,!1),(f[c].indexLabel||y.indexLabel||f[c].indexLabelFormatter||y.indexLabelFormatter)&&this._indexLabels.push({chartType:"stackedColumn",dataPoint:f[c],dataSeries:y,point:{x:n,y:f[c].y>=0?M:P},direction:f[c].y>=0?1:-1,bounds:{x1:S,y1:Math.min(M,P),x2:T,y2:Math.max(M,P)},color:o})}}}t.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var w=Math.min(p,e.axisY.boundingRect.y2),_={source:t,dest:this.plotArea.ctx,animationCallback:AnimationHelper.yScaleAnimation,easingFunction:AnimationHelper.easing.easeOutQuart,animationBase:w};return _}};var a=e("../helpers/utils")},{"../helpers/utils":39}],20:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(0>=i)){var n,s,r,o=null,l=this.plotArea,h=[],d=[],c=0,p=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,x=this.dataPointMaxWidth?this.dataPointMaxWidth:.15*this.width<<0,u=e.axisX.dataInfo.minDiff,m=l.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(u)/e.plotType.plotUnits.length*.9<<0;m>x?m=x:u===1/0?m=x:1>m&&(m=1),t.save(),a.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(l.x1,l.y1,l.width,l.height),t.clip(),a.isCanvasSupported&&(this._eventManager.ghostCtx.rect(l.x1,l.y1,l.width,l.height),this._eventManager.ghostCtx.clip());for(var v=0;v0){var b=m>5&&y.bevelEnabled?!0:!1;for(c=0;ce.axisX.dataInfo.viewPortMax)&&"number"==typeof f[c].y){n=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0;var M;M=0!==e.dataPointYSums[r]?f[c].y/e.dataPointYSums[r]*100:0,s=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(M-e.axisY.conversionParameters.minimum);var P,S,T=n-e.plotType.plotUnits.length*m/2+e.index*m<<0,C=T+m<<0;if(f[c].y>=0){var k=h[r]?h[r]:0;P=s-k,S=p-k,h[r]=k+(S-P)}else{var k=d[r]?d[r]:0;S=s+k,P=p+k,d[r]=k+(S-P)}o=f[c].color?f[c].color:y._colorSet[c%y._colorSet.length],drawRect(t,T,P,C,S,o,0,null,b&&f[c].y>=0,f[c].y<0&&b,!1,!1,y.fillOpacity);var w=y.dataPointIds[c];this._eventManager.objectMap[w]={id:w,objectType:"dataPoint",dataSeriesIndex:g,dataPointIndex:c,x1:T,y1:P,x2:C,y2:S},o=intToHexColorString(w),a.isCanvasSupported&&drawRect(this._eventManager.ghostCtx,T,P,C,S,o,0,null,!1,!1,!1,!1),(f[c].indexLabel||y.indexLabel||f[c].indexLabelFormatter||y.indexLabelFormatter)&&this._indexLabels.push({chartType:"stackedColumn100",dataPoint:f[c],dataSeries:y,point:{x:n,y:f[c].y>=0?P:S},direction:f[c].y>=0?1:-1,bounds:{x1:T,y1:Math.min(P,S),x2:C,y2:Math.max(P,S)},color:o})}}}t.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var _=Math.min(p,e.axisY.boundingRect.y2),A={source:t,dest:this.plotArea.ctx,animationCallback:AnimationHelper.yScaleAnimation,easingFunction:AnimationHelper.easing.easeOutQuart,animationBase:_};return A}};var a=e("../helpers/utils")},{"../helpers/utils":39}],21:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i["default"]=function(e){function t(){S&&(p.lineThickness>0&&i.stroke(),e.axisY.viewportMinimum<=0&&e.axisY.viewportMaximum>=0?f=P:e.axisY.viewportMaximum<0?f=o.y1:e.axisY.viewportMinimum>0&&(f=r.y2),i.lineTo(v,f),i.lineTo(S.x,f),i.closePath(),i.globalAlpha=p.fillOpacity,i.fill(),i.globalAlpha=1,a.isCanvasSupported&&(s.lineTo(v,f),s.lineTo(S.x,f),s.closePath(),s.fill()),i.beginPath(),i.moveTo(v,g),s.beginPath(),s.moveTo(v,g),S={x:v,y:g})}var i=e.targetCanvasCtx||this.plotArea.ctx,n=e.dataSeriesIndexes.length;if(!(0>=n)){var s=this._eventManager.ghostCtx,r=e.axisX.lineCoordinates,o=e.axisY.lineCoordinates,l=[],h=this.plotArea;i.save(),a.isCanvasSupported&&s.save(),i.beginPath(),i.rect(h.x1,h.y1,h.width,h.height),i.clip(),a.isCanvasSupported&&(s.beginPath(),s.rect(h.x1,h.y1,h.width,h.height),s.clip());for(var d=0;d0){var C=p._colorSet[M%p._colorSet.length];for(i.fillStyle=C,i.strokeStyle=C,i.lineWidth=p.lineThickness,i.setLineDash&&i.setLineDash(getLineDashArray(p.lineDashType,p.lineThickness));Me.axisX.dataInfo.viewPortMax)){var k=g;if("number"==typeof x[M].y){v=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(y-e.axisX.conversionParameters.minimum)+.5<<0,g=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(x[M].y-e.axisY.conversionParameters.minimum)+.5<<0,b||T?(i.beginPath(),i.moveTo(v,g),S={x:v,y:g},a.isCanvasSupported&&(s.beginPath(),s.moveTo(v,g)),b=!1,T=!1):(i.lineTo(v,k),a.isCanvasSupported&&s.lineTo(v,k),i.lineTo(v,g),a.isCanvasSupported&&s.lineTo(v,g),M%250==0&&t());var w=p.dataPointIds[M];if(this._eventManager.objectMap[w]={id:w,objectType:"dataPoint",dataSeriesIndex:c,dataPointIndex:M,x1:v,y1:g},0!==x[M].markerSize&&(x[M].markerSize>0||p.markerSize>0)){var _=p.getMarkerProperties(M,v,g,i);l.push(_);var A=intToHexColorString(w);a.isCanvasSupported&&l.push({x:v,y:g,ctx:s,type:_.type,size:_.size,color:A,borderColor:A,borderThickness:_.borderThickness})}(x[M].indexLabel||p.indexLabel||x[M].indexLabelFormatter||p.indexLabelFormatter)&&this._indexLabels.push({chartType:"stepArea",dataPoint:x[M],dataSeries:p,point:{x:v,y:g},direction:x[M].y>=0?1:-1,color:C})}else t(),T=!0}t(),RenderHelper.drawMarkers(l)}}i.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var L={source:i,dest:this.plotArea.ctx,animationCallback:AnimationHelper.xClipAnimation,easingFunction:AnimationHelper.easing.linear,animationBase:0};return L}};var a=e("../helpers/utils")},{"../helpers/utils":39}],22:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});i.cultures={en:{}},i.constants={numberDuration:1,yearDuration:314496e5,monthDuration:2592e6,weekDuration:6048e5,dayDuration:864e5,hourDuration:36e5,minuteDuration:6e4,secondDuration:1e3,millisecondDuration:1,dayOfWeekFromInt:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]}},{}],23:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});i.isDebugMode=!1,i.isCanvasSupported=!!document.createElement("canvas").getContext,i.defaultOptions={Chart:{width:500,height:400,zoomEnabled:!1,zoomType:"x",backgroundColor:"white",theme:"theme1",animationEnabled:!1,animationDuration:1200,dataPointMaxWidth:null,colorSet:"colorSet1",culture:"en",creditText:"CanvasJS.com",interactivityEnabled:!0,exportEnabled:!1,exportFileName:"Chart",rangeChanging:null,rangeChanged:null},Title:{padding:0,text:null,verticalAlign:"top",horizontalAlign:"center",fontSize:20,fontFamily:"Calibri",fontWeight:"normal",fontColor:"black",fontStyle:"normal",borderThickness:0,borderColor:"black",cornerRadius:0,backgroundColor:null,margin:5,wrap:!0,maxWidth:null,dockInsidePlotArea:!1},Subtitle:{padding:0,text:null,verticalAlign:"top",horizontalAlign:"center",fontSize:14,fontFamily:"Calibri",fontWeight:"normal",fontColor:"black",fontStyle:"normal",borderThickness:0,borderColor:"black",cornerRadius:0,backgroundColor:null,margin:2,wrap:!0,maxWidth:null,dockInsidePlotArea:!1},Legend:{name:null,verticalAlign:"center",horizontalAlign:"right",fontSize:14,fontFamily:"calibri",fontWeight:"normal",fontColor:"black",fontStyle:"normal",cursor:null,itemmouseover:null,itemmouseout:null,itemmousemove:null,itemclick:null,dockInsidePlotArea:!1,reversed:!1,maxWidth:null,maxHeight:null,itemMaxWidth:null,itemWidth:null,itemWrap:!0,itemTextFormatter:null},ToolTip:{enabled:!0,shared:!1,animationEnabled:!0,content:null,contentFormatter:null,reversed:!1,backgroundColor:null,borderColor:null,borderThickness:2,cornerRadius:5,fontSize:14,fontColor:"#000000",fontFamily:"Calibri, Arial, Georgia, serif;",fontWeight:"normal",fontStyle:"italic"},Axis:{minimum:null,maximum:null,viewportMinimum:null,viewportMaximum:null,interval:null,intervalType:null,title:null,titleFontColor:"black",titleFontSize:20,titleFontFamily:"arial",titleFontWeight:"normal",titleFontStyle:"normal",labelAngle:0,labelFontFamily:"arial",labelFontColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontStyle:"normal",labelAutoFit:!1,labelWrap:!0,labelMaxWidth:null,labelFormatter:null,prefix:"",suffix:"",includeZero:!0,tickLength:5,tickColor:"black",tickThickness:1,lineColor:"black",lineThickness:1,lineDashType:"solid",gridColor:"A0A0A0",gridThickness:0,gridDashType:"solid",interlacedColor:null,valueFormatString:null,margin:2,stripLines:[]},StripLine:{value:null,startValue:null,endValue:null,color:"orange",opacity:null,thickness:2,lineDashType:"solid",label:"",labelBackgroundColor:"#EEEEEE",labelFontFamily:"arial",labelFontColor:"orange",labelFontSize:12,labelFontWeight:"normal",labelFontStyle:"normal",labelFormatter:null,showOnTop:!1},DataSeries:{name:null,dataPoints:null,label:"",bevelEnabled:!1,highlightEnabled:!0,cursor:null,indexLabel:"",indexLabelPlacement:"auto",indexLabelOrientation:"horizontal",indexLabelFontColor:"black",indexLabelFontSize:12,indexLabelFontStyle:"normal",indexLabelFontFamily:"Arial",indexLabelFontWeight:"normal",indexLabelBackgroundColor:null,indexLabelLineColor:null,indexLabelLineThickness:1,indexLabelLineDashType:"solid",indexLabelMaxWidth:null,indexLabelWrap:!0,indexLabelFormatter:null,lineThickness:2,lineDashType:"solid",color:null,risingColor:"white",fillOpacity:null,startAngle:0,radius:null,innerRadius:null,type:"column",xValueType:"number",axisYType:"primary",xValueFormatString:null,yValueFormatString:null,zValueFormatString:null,percentFormatString:null,showInLegend:null,legendMarkerType:null,legendMarkerColor:null,legendText:null,legendMarkerBorderColor:null,legendMarkerBorderThickness:null,markerType:"circle",markerColor:null,markerSize:null,markerBorderColor:null,markerBorderThickness:null,mouseover:null,mouseout:null,mousemove:null,click:null,toolTipContent:null,visible:!0},TextBlock:{x:0,y:0,width:null,height:null,maxWidth:null,maxHeight:null,padding:0,angle:0,text:"",horizontalAlign:"center",fontSize:12,fontFamily:"calibri",fontWeight:"normal",fontColor:"black",fontStyle:"normal",borderThickness:0,borderColor:"black",cornerRadius:0,backgroundColor:null,textBaseline:"top"},CultureInfo:{decimalSeparator:".",digitGroupSeparator:",",zoomText:"Zoom",panText:"Pan",resetText:"Reset",menuText:"More Options",saveJPGText:"Save as JPG",savePNGText:"Save as PNG",days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}}},{}],24:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.themes=i.colorSets=void 0;var a=e("../helpers/utils");i.colorSets={colorSet1:["#369EAD","#C24642","#7F6084","#86B402","#A2D1CF","#C8B631","#6DBCEB","#52514E","#4F81BC","#A064A1","#F79647"],colorSet2:["#4F81BC","#C0504E","#9BBB58","#23BFAA","#8064A1","#4AACC5","#F79647","#33558B"],colorSet3:["#8CA1BC","#36845C","#017E82","#8CB9D0","#708C98","#94838D","#F08891","#0366A7","#008276","#EE7757","#E5BA3A","#F2990B","#03557B","#782970"]},i.themes={theme1:{Chart:{colorSet:"colorSet1"},Title:{fontFamily:a.isCanvasSupported?"Calibri, Optima, Candara, Verdana, Geneva, sans-serif":"calibri",fontSize:33,fontColor:"#3A3A3A",fontWeight:"bold",verticalAlign:"top",margin:5},Subtitle:{fontFamily:a.isCanvasSupported?"Calibri, Optima, Candara, Verdana, Geneva, sans-serif":"calibri",fontSize:16,fontColor:"#3A3A3A",fontWeight:"bold",verticalAlign:"top",margin:5},Axis:{titleFontSize:26,titleFontColor:"#666666",titleFontFamily:a.isCanvasSupported?"Calibri, Optima, Candara, Verdana, Geneva, sans-serif":"calibri",labelFontFamily:a.isCanvasSupported?"Calibri, Optima, Candara, Verdana, Geneva, sans-serif":"calibri",labelFontSize:18,labelFontColor:"grey",tickColor:"#BBBBBB",tickThickness:2,gridThickness:2,gridColor:"#BBBBBB",lineThickness:2,lineColor:"#BBBBBB"},Legend:{verticalAlign:"bottom",horizontalAlign:"center",fontFamily:a.isCanvasSupported?"monospace, sans-serif,arial black":"calibri"},DataSeries:{indexLabelFontColor:"grey",indexLabelFontFamily:a.isCanvasSupported?"Calibri, Optima, Candara, Verdana, Geneva, sans-serif":"calibri",indexLabelFontSize:18,indexLabelLineThickness:1}},theme2:{Chart:{colorSet:"colorSet2"},Title:{fontFamily:"impact, charcoal, arial black, sans-serif",fontSize:32,fontColor:"#333333",verticalAlign:"top",margin:5},Subtitle:{fontFamily:"impact, charcoal, arial black, sans-serif",fontSize:14,fontColor:"#333333",verticalAlign:"top",margin:5},Axis:{titleFontSize:22,titleFontColor:"rgb(98,98,98)",titleFontFamily:a.isCanvasSupported?"monospace, sans-serif,arial black":"arial",titleFontWeight:"bold",labelFontFamily:a.isCanvasSupported?"monospace, Courier New, Courier":"arial",labelFontSize:16,labelFontColor:"grey",labelFontWeight:"bold",tickColor:"grey",tickThickness:2,gridThickness:2,gridColor:"grey",lineColor:"grey",lineThickness:0},Legend:{verticalAlign:"bottom",horizontalAlign:"center",fontFamily:a.isCanvasSupported?"monospace, sans-serif,arial black":"arial"},DataSeries:{indexLabelFontColor:"grey",indexLabelFontFamily:a.isCanvasSupported?"Courier New, Courier, monospace":"arial",indexLabelFontWeight:"bold",indexLabelFontSize:18,indexLabelLineThickness:1}},theme3:{Chart:{colorSet:"colorSet1"},Title:{fontFamily:a.isCanvasSupported?"Candara, Optima, Trebuchet MS, Helvetica Neue, Helvetica, Trebuchet MS, serif":"calibri",fontSize:32,fontColor:"#3A3A3A",fontWeight:"bold",verticalAlign:"top",margin:5},Subtitle:{fontFamily:a.isCanvasSupported?"Candara, Optima, Trebuchet MS, Helvetica Neue, Helvetica, Trebuchet MS, serif":"calibri",fontSize:16,fontColor:"#3A3A3A",fontWeight:"bold",verticalAlign:"top",margin:5},Axis:{titleFontSize:22,titleFontColor:"rgb(98,98,98)",titleFontFamily:a.isCanvasSupported?"Verdana, Geneva, Calibri, sans-serif":"calibri",labelFontFamily:a.isCanvasSupported?"Calibri, Optima, Candara, Verdana, Geneva, sans-serif":"calibri",labelFontSize:18,labelFontColor:"grey",tickColor:"grey",tickThickness:2,gridThickness:2,gridColor:"grey",lineThickness:2,lineColor:"grey"},Legend:{verticalAlign:"bottom",horizontalAlign:"center",fontFamily:a.isCanvasSupported?"monospace, sans-serif,arial black":"calibri"},DataSeries:{bevelEnabled:!0,indexLabelFontColor:"grey",indexLabelFontFamily:a.isCanvasSupported?"Candara, Optima, Calibri, Verdana, Geneva, sans-serif":"calibri",indexLabelFontSize:18,indexLabelLineColor:"lightgrey",indexLabelLineThickness:2}}}},{"../helpers/utils":39}],25:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function n(e){this.chart=e,this.ctx=this.chart.plotArea.ctx,this.animations=[],this.animationRequestId=null}Object.defineProperty(i,"__esModule",{value:!0});var s=e("../helpers/animator"),r=a(s);n.prototype.animate=function(e,t,i,a,n){var s=this;this.chart.isAnimating=!0,n=n||r["default"].easing.linear,i&&this.animations.push({startTime:(new Date).getTime()+(e?e:0),duration:t,animationCallback:i,onComplete:a});for(var o=[];this.animations.length>0;){var l=this.animations.shift(),h=(new Date).getTime(),d=0;l.startTime<=h&&(d=n(Math.min(h-l.startTime,l.duration),0,1,l.duration),d=Math.min(d,1),(isNaN(d)||!isFinite(d))&&(d=1)),1>d&&o.push(l),l.animationCallback(d),d>=1&&l.onComplete&&l.onComplete()}this.animations=o,this.animations.length>0?this.animationRequestId=this.chart.requestAnimFrame.call(window,function(){s.animate.call(s)}):this.chart.isAnimating=!1},n.prototype.cancelAllAnimations=function(){this.animations=[],this.animationRequestId&&this.chart.cancelRequestAnimFrame.call(window,this.animationRequestId),this.animationRequestId=null,this.chart.isAnimating=!1},i["default"]=n},{"../helpers/animator":37}],26:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function n(e,t,i,a){if(n.base.constructor.call(this,"Axis",t,e.theme),this.chart=e,this.canvas=e.canvas,this.ctx=e.ctx,this.maxWidth=0,this.maxHeight=0,this.intervalStartPosition=0,this.labels=[],this._labels=null,this.dataInfo={min:1/0,max:-(1/0),viewPortMin:1/0,viewPortMax:-(1/0),minDiff:1/0},"axisX"===i?(this.sessionVariables=this.chart.sessionVariables[i],this._options.interval||(this.intervalType=null)):"left"===a||"top"===a?this.sessionVariables=this.chart.sessionVariables.axisY:this.sessionVariables=this.chart.sessionVariables.axisY2,"undefined"==typeof this._options.titleFontSize&&(this.titleFontSize=this.chart.getAutoFontSize(this.titleFontSize)),"undefined"==typeof this._options.labelFontSize&&(this.labelFontSize=this.chart.getAutoFontSize(this.labelFontSize)),this.type=i,"axisX"!==i||t&&"undefined"!=typeof t.gridThickness||(this.gridThickness=0),this._position=a,this.lineCoordinates={x1:null,y1:null,x2:null,y2:null,width:null},this.labelAngle=(this.labelAngle%360+360)%360,this.labelAngle>90&&this.labelAngle<=270?this.labelAngle-=180:this.labelAngle>180&&this.labelAngle<=270?this.labelAngle-=180:this.labelAngle>270&&this.labelAngle<=360&&(this.labelAngle-=360),this._options.stripLines&&this._options.stripLines.length>0){this.stripLines=[];for(var s=0;s>0:this.labelMaxWidth:"undefined"==typeof this._options.labelMaxWidth?.7*this.chart.width>>0:this.labelMaxWidth,n="undefined"==typeof this._options.labelWrap||this.labelWrap?.5*this.chart.height>>0:1.5*this.labelFontSize):("left"===this._position||"right"===this._position)&&(s=this.lineCoordinates.height/Math.abs(this.viewportMaximum-this.viewportMinimum)*this.interval,a=this.labelAutoFit?"undefined"==typeof this._options.labelMaxWidth?.3*this.chart.width>>0:this.labelMaxWidth:"undefined"==typeof this._options.labelMaxWidth?.5*this.chart.width>>0:this.labelMaxWidth,n="undefined"==typeof this._options.labelWrap||this.labelWrap?2*s>>0:1.5*this.labelFontSize),"axisX"===this.type&&"dateTime"===this.chart.plotInfo.axisXValueType)for(t=addToDateTime(new Date(this.viewportMaximum),this.interval,this.intervalType),i=this.intervalStartPosition;t>i;addToDateTime(i,this.interval,this.intervalType)){var r=i.getTime(),o=this.labelFormatter?this.labelFormatter({chart:this.chart,axis:this._options,value:i,label:this.labels[i]?this.labels[i]:null}):"axisX"===this.type&&this.labels[r]?this.labels[r]:dateFormat(i,this.valueFormatString,this.chart._cultureInfo);e=new l["default"](this.ctx,{x:0,y:0,maxWidth:a,maxHeight:n,angle:this.labelAngle,text:this.prefix+o+this.suffix,horizontalAlign:"left",fontSize:this.labelFontSize,fontFamily:this.labelFontFamily,fontWeight:this.labelFontWeight,fontColor:this.labelFontColor,fontStyle:this.labelFontStyle,textBaseline:"middle"}),this._labels.push({position:i.getTime(),textBlock:e,effectiveHeight:null})}else{if(t=this.viewportMaximum,this.labels&&this.labels.length){var d=Math.ceil(this.interval),c=Math.ceil(this.intervalStartPosition),p=!1;for(i=c;i=i;i=parseFloat((i+this.interval).toFixed(14))){var o=this.labelFormatter?this.labelFormatter({chart:this.chart,axis:this._options,value:i,label:this.labels[i]?this.labels[i]:null}):"axisX"===this.type&&this.labels[i]?this.labels[i]:(0,h.numberFormat)(i,this.valueFormatString,this.chart._cultureInfo);e=new l["default"](this.ctx,{x:0,y:0,maxWidth:a,maxHeight:n,angle:this.labelAngle,text:this.prefix+o+this.suffix,horizontalAlign:"left",fontSize:this.labelFontSize,fontFamily:this.labelFontFamily,fontWeight:this.labelFontWeight,fontColor:this.labelFontColor,fontStyle:this.labelFontStyle,textBaseline:"middle",borderThickness:0}),this._labels.push({position:i,textBlock:e,effectiveHeight:null})}}for(var i=0;ie&&(e=n),this._labels[t].effectiveWidth=n}}var s=this.title?getFontHeightInPixels(this.titleFontFamily,this.titleFontSize,this.titleFontWeight)+2:0,r=s+e+this.tickLength+5;return r},n.prototype.createLabelsAndCalculateHeight=function(){var e=0;this._labels=[];var t,i=0;if(this.createLabels(),"bottom"===this._position||"top"===this._position)for(i=0;ie&&(e=n),this._labels[i].effectiveHeight=n}var s=this.title?getFontHeightInPixels(this.titleFontFamily,this.titleFontSize,this.titleFontWeight)+2:0;return s+e+this.tickLength+5},n.setLayoutAndRender=function(e,t,i,a,n){var s,r,o,l,h=e.chart,d=h.ctx;e.calculateAxisParameters(),t&&t.calculateAxisParameters(),i&&i.calculateAxisParameters();var c=(t&&t.lineThickness?t.lineThickness:0,i&&i.lineThickness?i.lineThickness:0,t&&t.gridThickness?t.gridThickness:0,i&&i.gridThickness?i.gridThickness:0,t?t.margin:0);t?t.margin:0;if("normal"===a){e.lineCoordinates={};var p=Math.ceil(t?t.createLabelsAndCalculateWidth():0);s=Math.round(n.x1+p+c),e.lineCoordinates.x1=s;var x=Math.ceil(i?i.createLabelsAndCalculateWidth():0);o=Math.round(n.x2-x>e.chart.width-10?e.chart.width-10:n.x2-x),e.lineCoordinates.x2=o,e.lineCoordinates.width=Math.abs(o-s);var u=Math.ceil(e.createLabelsAndCalculateHeight());r=Math.round(n.y2-u-e.margin),l=Math.round(n.y2-e.margin),e.lineCoordinates.y1=r,e.lineCoordinates.y2=r,e.boundingRect={x1:s,y1:r,x2:o,y2:l,width:o-s,height:l-r},t&&(s=Math.round(n.x1+t.margin),r=Math.round(n.y1<10?10:n.y1),o=Math.round(n.x1+p+t.margin),l=Math.round(n.y2-u-e.margin),t.lineCoordinates={x1:o,y1:r,x2:o,y2:l,height:Math.abs(l-r)},t.boundingRect={x1:s,y1:r,x2:o,y2:l,width:o-s,height:l-r}),i&&(s=Math.round(e.lineCoordinates.x2),r=Math.round(n.y1<10?10:n.y1),o=Math.round(s+x+i.margin),l=Math.round(n.y2-u-e.margin),i.lineCoordinates={x1:s,y1:r,x2:s,y2:l,height:Math.abs(l-r)},i.boundingRect={x1:s,y1:r,x2:o,y2:l,width:o-s,height:l-r}),e.calculateValueToPixelConversionParameters(),t&&t.calculateValueToPixelConversionParameters(),i&&i.calculateValueToPixelConversionParameters(),d.save(),d.rect(5,e.boundingRect.y1,e.chart.width-10,e.boundingRect.height),d.clip(),e.renderLabelsTicksAndTitle(),d.restore(),t&&t.renderLabelsTicksAndTitle(),i&&i.renderLabelsTicksAndTitle(),h.preparePlotArea();var m=e.chart.plotArea;d.save(),d.rect(m.x1,m.y1,Math.abs(m.x2-m.x1),Math.abs(m.y2-m.y1)), -d.clip(),e.renderStripLinesOfThicknessType("value"),t&&t.renderStripLinesOfThicknessType("value"),i&&i.renderStripLinesOfThicknessType("value"),e.renderInterlacedColors(),t&&t.renderInterlacedColors(),i&&i.renderInterlacedColors(),d.restore(),e.renderGrid(),t&&t.renderGrid(),i&&i.renderGrid(),e.renderAxisLine(),t&&t.renderAxisLine(),i&&i.renderAxisLine(),e.renderStripLinesOfThicknessType("pixel"),t&&t.renderStripLinesOfThicknessType("pixel"),i&&i.renderStripLinesOfThicknessType("pixel")}else{var v=Math.ceil(e.createLabelsAndCalculateWidth());t&&(t.lineCoordinates={},s=Math.round(n.x1+v+e.margin),o=Math.round(n.x2>t.chart.width-10?t.chart.width-10:n.x2),t.lineCoordinates.x1=s,t.lineCoordinates.x2=o,t.lineCoordinates.width=Math.abs(o-s)),i&&(i.lineCoordinates={},s=Math.round(n.x1+v+e.margin),o=Math.round(n.x2>i.chart.width-10?i.chart.width-10:n.x2),i.lineCoordinates.x1=s,i.lineCoordinates.x2=o,i.lineCoordinates.width=Math.abs(o-s));var g=Math.ceil(t?t.createLabelsAndCalculateHeight():0),y=Math.ceil(i?i.createLabelsAndCalculateHeight():0);t&&(r=Math.round(n.y2-g-t.margin),l=Math.round(n.y2-c>t.chart.height-10?t.chart.height-10:n.y2-c),t.lineCoordinates.y1=r,t.lineCoordinates.y2=r,t.boundingRect={x1:s,y1:r,x2:o,y2:l,width:o-s,height:g}),i&&(r=Math.round(n.y1+i.margin),l=n.y1+i.margin+y,i.lineCoordinates.y1=l,i.lineCoordinates.y2=l,i.boundingRect={x1:s,y1:r,x2:o,y2:l,width:o-s,height:y}),s=Math.round(n.x1+e.margin),r=Math.round(i?i.lineCoordinates.y2:n.y1<10?10:n.y1),o=Math.round(n.x1+v+e.margin),l=Math.round(t?t.lineCoordinates.y1:n.y2-c>e.chart.height-10?e.chart.height-10:n.y2-c),e.lineCoordinates={x1:o,y1:r,x2:o,y2:l,height:Math.abs(l-r)},e.boundingRect={x1:s,y1:r,x2:o,y2:l,width:o-s,height:l-r},e.calculateValueToPixelConversionParameters(),t&&t.calculateValueToPixelConversionParameters(),i&&i.calculateValueToPixelConversionParameters(),t&&t.renderLabelsTicksAndTitle(),i&&i.renderLabelsTicksAndTitle(),e.renderLabelsTicksAndTitle(),h.preparePlotArea();var m=e.chart.plotArea;d.save(),d.rect(m.x1,m.y1,Math.abs(m.x2-m.x1),Math.abs(m.y2-m.y1)),d.clip(),e.renderStripLinesOfThicknessType("value"),t&&t.renderStripLinesOfThicknessType("value"),i&&i.renderStripLinesOfThicknessType("value"),e.renderInterlacedColors(),t&&t.renderInterlacedColors(),i&&i.renderInterlacedColors(),d.restore(),e.renderGrid(),t&&t.renderGrid(),i&&i.renderGrid(),e.renderAxisLine(),t&&t.renderAxisLine(),i&&i.renderAxisLine(),e.renderStripLinesOfThicknessType("pixel"),t&&t.renderStripLinesOfThicknessType("pixel"),i&&i.renderStripLinesOfThicknessType("pixel")}},n.prototype.renderLabelsTicksAndTitle=function(){var e=!1,t=0,i=1,a=0;this.conversionParameters.pixelPerUnit*this.interval;if(0!==this.labelAngle&&360!==this.labelAngle&&(i=1.2),"undefined"==typeof this._options.interval){if("bottom"===this._position||"top"===this._position){for(o=0;othis.lineCoordinates.width*i&&(e=!0)}if("left"===this._position||"right"===this._position){for(o=0;othis.lineCoordinates.height*i&&(e=!0)}}if("bottom"===this._position){var s,r,o=0;for(o=0;othis.viewportMaximum)){if(r=this.getPixelCoordinatesOnAxis(s.position),this.tickThickness&&!this._labels[o].stripLine||this._labels[o].stripLine&&"pixel"===this._labels[o].stripLine._thicknessType){this._labels[o].stripLine?(d=this._labels[o].stripLine,this.ctx.lineWidth=d.thickness,this.ctx.strokeStyle=d.color):(this.ctx.lineWidth=this.tickThickness,this.ctx.strokeStyle=this.tickColor);var h=this.ctx.lineWidth%2===1?(r.x<<0)+.5:r.x<<0;this.ctx.beginPath(),this.ctx.moveTo(h,r.y<<0),this.ctx.lineTo(h,r.y+this.tickLength<<0),this.ctx.stroke()}(!e||a++%2===0||this._labels[o].stripLine)&&(0===s.textBlock.angle?(r.x-=s.textBlock.width/2,r.y+=this.tickLength+s.textBlock.fontSize/2):(r.x-=this.labelAngle<0?s.textBlock.width*Math.cos(Math.PI/180*this.labelAngle):0,r.y+=this.tickLength+Math.abs(this.labelAngle<0?s.textBlock.width*Math.sin(Math.PI/180*this.labelAngle)-5:5)),s.textBlock.x=r.x,s.textBlock.y=r.y,s.textBlock.render(!0))}this.title&&(this._titleTextBlock=new l["default"](this.ctx,{x:this.lineCoordinates.x1,y:this.boundingRect.y2-this.titleFontSize-5,maxWidth:this.lineCoordinates.width,maxHeight:1.5*this.titleFontSize,angle:0,text:this.title,horizontalAlign:"center",fontSize:this.titleFontSize,fontFamily:this.titleFontFamily,fontWeight:this.titleFontWeight,fontColor:this.titleFontColor,fontStyle:this.titleFontStyle,textBaseline:"top"}),this._titleTextBlock.measureText(),this._titleTextBlock.x=this.lineCoordinates.x1+this.lineCoordinates.width/2-this._titleTextBlock.width/2,this._titleTextBlock.y=this.boundingRect.y2-this._titleTextBlock.height-3,this._titleTextBlock.render(!0))}else if("top"===this._position){var s,r,d,o=0;for(o=0;othis.viewportMaximum)){if(r=this.getPixelCoordinatesOnAxis(s.position),this.tickThickness&&!this._labels[o].stripLine||this._labels[o].stripLine&&"pixel"===this._labels[o].stripLine._thicknessType){this._labels[o].stripLine?(d=this._labels[o].stripLine,this.ctx.lineWidth=d.thickness,this.ctx.strokeStyle=d.color):(this.ctx.lineWidth=this.tickThickness,this.ctx.strokeStyle=this.tickColor);var h=this.ctx.lineWidth%2===1?(r.x<<0)+.5:r.x<<0;this.ctx.beginPath(),this.ctx.moveTo(h,r.y<<0),this.ctx.lineTo(h,r.y-this.tickLength<<0),this.ctx.stroke()}(!e||a++%2===0||this._labels[o].stripLine)&&(0===s.textBlock.angle?(r.x-=s.textBlock.width/2,r.y-=this.tickLength+s.textBlock.height/2):(r.x-=this.labelAngle>0?s.textBlock.width*Math.cos(Math.PI/180*this.labelAngle):0,r.y-=this.tickLength+Math.abs(this.labelAngle>0?s.textBlock.width*Math.sin(Math.PI/180*this.labelAngle)+5:5)),s.textBlock.x=r.x,s.textBlock.y=r.y,s.textBlock.render(!0))}this.title&&(this._titleTextBlock=new l["default"](this.ctx,{x:this.lineCoordinates.x1,y:this.boundingRect.y1+1,maxWidth:this.lineCoordinates.width,maxHeight:1.5*this.titleFontSize,angle:0,text:this.title,horizontalAlign:"center",fontSize:this.titleFontSize,fontFamily:this.titleFontFamily,fontWeight:this.titleFontWeight,fontColor:this.titleFontColor,fontStyle:this.titleFontStyle,textBaseline:"top"}),this._titleTextBlock.measureText(),this._titleTextBlock.x=this.lineCoordinates.x1+this.lineCoordinates.width/2-this._titleTextBlock.width/2,this._titleTextBlock.render(!0))}else if("left"===this._position){for(var s,r,o=0;othis.viewportMaximum)){if(r=this.getPixelCoordinatesOnAxis(s.position),this.tickThickness&&!this._labels[o].stripLine||this._labels[o].stripLine&&"pixel"===this._labels[o].stripLine._thicknessType){this._labels[o].stripLine?(d=this._labels[o].stripLine,this.ctx.lineWidth=d.thickness,this.ctx.strokeStyle=d.color):(this.ctx.lineWidth=this.tickThickness,this.ctx.strokeStyle=this.tickColor);var c=this.ctx.lineWidth%2===1?(r.y<<0)+.5:r.y<<0;this.ctx.beginPath(),this.ctx.moveTo(r.x<<0,c),this.ctx.lineTo(r.x-this.tickLength<<0,c),this.ctx.stroke()}(!e||a++%2===0||this._labels[o].stripLine)&&(s.textBlock.x=r.x-s.textBlock.width*Math.cos(Math.PI/180*this.labelAngle)-this.tickLength-5,0===this.labelAngle?s.textBlock.y=r.y:s.textBlock.y=r.y-s.textBlock.width*Math.sin(Math.PI/180*this.labelAngle),s.textBlock.render(!0))}if(this.title){this._titleTextBlock=new l["default"](this.ctx,{x:this.boundingRect.x1+1,y:this.lineCoordinates.y2,maxWidth:this.lineCoordinates.height,maxHeight:1.5*this.titleFontSize,angle:-90,text:this.title,horizontalAlign:"center",fontSize:this.titleFontSize,fontFamily:this.titleFontFamily,fontWeight:this.titleFontWeight,fontColor:this.titleFontColor,fontStyle:this.titleFontStyle,textBaseline:"top"});this._titleTextBlock.measureText();this._titleTextBlock.y=this.lineCoordinates.height/2+this._titleTextBlock.width/2+this.lineCoordinates.y1,this._titleTextBlock.render(!0)}}else if("right"===this._position){for(var s,r,o=0;othis.viewportMaximum)){if(r=this.getPixelCoordinatesOnAxis(s.position),this.tickThickness&&!this._labels[o].stripLine||this._labels[o].stripLine&&"pixel"===this._labels[o].stripLine._thicknessType){this._labels[o].stripLine?(d=this._labels[o].stripLine,this.ctx.lineWidth=d.thickness,this.ctx.strokeStyle=d.color):(this.ctx.lineWidth=this.tickThickness,this.ctx.strokeStyle=this.tickColor);var c=this.ctx.lineWidth%2===1?(r.y<<0)+.5:r.y<<0;this.ctx.beginPath(),this.ctx.moveTo(r.x<<0,c),this.ctx.lineTo(r.x+this.tickLength<<0,c),this.ctx.stroke()}(!e||a++%2===0||this._labels[o].stripLine)&&(s.textBlock.x=r.x+this.tickLength+5,0===this.labelAngle?s.textBlock.y=r.y:s.textBlock.y=r.y,s.textBlock.render(!0))}this.title&&(this._titleTextBlock=new l["default"](this.ctx,{x:this.boundingRect.x2-1,y:this.lineCoordinates.y2,maxWidth:this.lineCoordinates.height,maxHeight:1.5*this.titleFontSize,angle:90,text:this.title,horizontalAlign:"center",fontSize:this.titleFontSize,fontFamily:this.titleFontFamily,fontWeight:this.titleFontWeight,fontColor:this.titleFontColor,fontStyle:this.titleFontStyle,textBaseline:"top"}),this._titleTextBlock.measureText(),this._titleTextBlock.y=this.lineCoordinates.height/2-this._titleTextBlock.width/2+this.lineCoordinates.y1,this._titleTextBlock.render(!0))}},n.prototype.renderInterlacedColors=function(){var e,t,i=this.chart.plotArea.ctx,a=this.chart.plotArea,n=0,s=!0;if("bottom"!==this._position&&"top"!==this._position||!this.interlacedColor){if(("left"===this._position||"right"===this._position)&&this.interlacedColor)for(i.fillStyle=this.interlacedColor,n=0;n=this._labels.length-1?this.getPixelCoordinatesOnAxis(this.viewportMaximum):this.getPixelCoordinatesOnAxis(this._labels[n+1].position),i.fillRect(a.x1,e.y,Math.abs(a.x1-a.x2),Math.abs(e.y-t.y)),s=!1):s=!0)}else for(i.fillStyle=this.interlacedColor,n=0;n=this._labels.length-1?this.getPixelCoordinatesOnAxis(this.viewportMaximum):this.getPixelCoordinatesOnAxis(this._labels[n+1].position),i.fillRect(e.x,a.y1,Math.abs(t.x-e.x),Math.abs(a.y1-a.y2)),s=!1):s=!0);i.beginPath()},n.prototype.renderStripLinesOfThicknessType=function(e){if(this.stripLines&&this.stripLines.length>0&&e){var t=0;for(t=0;tthis.viewportMaximum)||(i.showOnTop?this.chart.addEventListener("dataAnimationIterationEnd",i.render,i):i.render()))}}},n.prototype.renderGrid=function(){if(this.gridThickness&&this.gridThickness>0){var e,t=this.chart.ctx,i=this.chart.plotArea;if(t.lineWidth=this.gridThickness,t.strokeStyle=this.gridColor,t.setLineDash&&t.setLineDash((0,h.getLineDashArray)(this.gridDashType,this.gridThickness)),"bottom"===this._position||"top"===this._position){for(n=0;nthis.viewportMaximum)){t.beginPath(),e=this.getPixelCoordinatesOnAxis(this._labels[n].position);var a=t.lineWidth%2===1?(e.x<<0)+.5:e.x<<0;t.moveTo(a,i.y1<<0),t.lineTo(a,i.y2<<0),t.stroke()}}else if("left"===this._position||"right"===this._position)for(var n=0;nthis.viewportMaximum)){t.beginPath(),e=this.getPixelCoordinatesOnAxis(this._labels[n].position);var s=t.lineWidth%2===1?(e.y<<0)+.5:e.y<<0;t.moveTo(i.x1<<0,s),t.lineTo(i.x2<<0,s),t.stroke()}}},n.prototype.renderAxisLine=function(){var e=this.chart.ctx;if("bottom"===this._position||"top"===this._position){if(this.lineThickness){e.lineWidth=this.lineThickness,e.strokeStyle=this.lineColor?this.lineColor:"black",e.setLineDash&&e.setLineDash((0,h.getLineDashArray)(this.lineDashType,this.lineThickness));var t=this.lineThickness%2===1?(this.lineCoordinates.y1<<0)+.5:this.lineCoordinates.y1<<0;e.beginPath(),e.moveTo(this.lineCoordinates.x1,t),e.lineTo(this.lineCoordinates.x2,t),e.stroke()}}else if(("left"===this._position||"right"===this._position)&&this.lineThickness){e.lineWidth=this.lineThickness,e.strokeStyle=this.lineColor,e.setLineDash&&e.setLineDash((0,h.getLineDashArray)(this.lineDashType,this.lineThickness));var i=this.lineThickness%2===1?(this.lineCoordinates.x1<<0)+.5:this.lineCoordinates.x1<<0;e.beginPath(),e.moveTo(i,this.lineCoordinates.y1),e.lineTo(i,this.lineCoordinates.y2),e.stroke()}},n.prototype.getPixelCoordinatesOnAxis=function(e){var t={};this.lineCoordinates.width,this.lineCoordinates.height;if("bottom"===this._position||"top"===this._position){var i=this.conversionParameters.pixelPerUnit;t.x=this.conversionParameters.reference+i*(e-this.viewportMinimum),t.y=this.lineCoordinates.y1}if("left"===this._position||"right"===this._position){var i=-this.conversionParameters.pixelPerUnit;t.y=this.conversionParameters.reference-i*(e-this.viewportMinimum),t.x=this.lineCoordinates.x2}return t},n.prototype.convertPixelToValue=function(e){if(!e)return null;var t=0,i="left"===this._position||"right"===this._position?e.y:e.x;return t=this.conversionParameters.minimum+(i-this.conversionParameters.reference)/this.conversionParameters.pixelPerUnit},n.prototype.setViewPortRange=function(e,t){this.sessionVariables.newViewportMinimum=this.viewportMinimum=Math.min(e,t),this.sessionVariables.newViewportMaximum=this.viewportMaximum=Math.max(e,t)},n.prototype.getXValueAt=function(e){if(!e)return null;var t=null;return"left"===this._position?t=(this.chart.axisX.viewportMaximum-this.chart.axisX.viewportMinimum)/this.chart.axisX.lineCoordinates.height*(this.chart.axisX.lineCoordinates.y2-e.y)+this.chart.axisX.viewportMinimum:"bottom"===this._position&&(t=(this.chart.axisX.viewportMaximum-this.chart.axisX.viewportMinimum)/this.chart.axisX.lineCoordinates.width*(e.x-this.chart.axisX.lineCoordinates.x1)+this.chart.axisX.viewportMinimum),t},n.prototype.calculateValueToPixelConversionParameters=function(e){this.reversed=!1;var t={pixelPerUnit:null,minimum:null,reference:null},i=this.lineCoordinates.width,a=this.lineCoordinates.height;t.minimum=this.viewportMinimum,("bottom"===this._position||"top"===this._position)&&(t.pixelPerUnit=(this.reversed?-1:1)*i/Math.abs(this.viewportMaximum-this.viewportMinimum),t.reference=this.reversed?this.lineCoordinates.x2:this.lineCoordinates.x1),("left"===this._position||"right"===this._position)&&(t.pixelPerUnit=(this.reversed?1:-1)*a/Math.abs(this.viewportMaximum-this.viewportMinimum),t.reference=this.reversed?this.lineCoordinates.y1:this.lineCoordinates.y2),this.conversionParameters=t},n.prototype.calculateAxisParameters=function(){var e=this.chart.layoutManager.getFreeSpace(),t=!1;"bottom"===this._position||"top"===this._position?(this.maxWidth=e.width,this.maxHeight=e.height):(this.maxWidth=e.height,this.maxHeight=e.width);var i,a,s,r,o="axisX"===this.type?this.maxWidth<500?8:Math.max(6,Math.floor(this.maxWidth/62)):Math.max(Math.floor(this.maxWidth/40),2),l=0;if((null===this.viewportMinimum||isNaN(this.viewportMinimum))&&(this.viewportMinimum=this.minimum),(null===this.viewportMaximum||isNaN(this.viewportMaximum))&&(this.viewportMaximum=this.maximum),"axisX"===this.type?(i=null!==this.viewportMinimum?this.viewportMinimum:this.dataInfo.viewPortMin,a=null!==this.viewportMaximum?this.viewportMaximum:this.dataInfo.viewPortMax,a-i===0&&(l="undefined"==typeof this._options.interval?.4:this._options.interval,a+=l,i-=l),this.dataInfo.minDiff!==1/0?s=this.dataInfo.minDiff:a-i>1?s=.5*Math.abs(a-i):(s=1,"dateTime"===this.chart.plotInfo.axisXValueType&&(t=!0))):"axisY"===this.type&&(i=null!==this.viewportMinimum?this.viewportMinimum:this.dataInfo.viewPortMin,a=null!==this.viewportMaximum?this.viewportMaximum:this.dataInfo.viewPortMax,isFinite(i)||isFinite(a)?isFinite(i)?isFinite(a)||(a=i):i=a:(a="undefined"==typeof this._options.interval?-(1/0):this._options.interval,i=0),0===i&&0===a?(a+=9,i=0):a-i===0?(l=Math.min(Math.abs(.01*Math.abs(a)),5),a+=l,i-=l):i>a?(l=Math.min(Math.abs(.01*Math.abs(a-i)),5),a>=0?i=a-l:a=i+l):(l=Math.min(Math.abs(.01*Math.abs(a-i)),.05),0!==a&&(a+=l),0!==i&&(i-=l)),s=this.dataInfo.minDiff!==1/0?this.dataInfo.minDiff:a-i>1?.5*Math.abs(a-i):1,this.includeZero&&(null===this.viewportMinimum||isNaN(this.viewportMinimum))&&i>0&&(i=0),this.includeZero&&(null===this.viewportMaximum||isNaN(this.viewportMaximum))&&0>a&&(a=0)),r=(isNaN(this.viewportMaximum)||null===this.viewportMaximum?a:this.viewportMaximum)-(isNaN(this.viewportMinimum)||null===this.viewportMinimum?i:this.viewportMinimum),"axisX"===this.type&&"dateTime"===this.chart.plotInfo.axisXValueType?(this.intervalType||(o>=r/1?(this.interval=1,this.intervalType="millisecond"):o>=r/2?(this.interval=2,this.intervalType="millisecond"):o>=r/5?(this.interval=5,this.intervalType="millisecond"):o>=r/10?(this.interval=10,this.intervalType="millisecond"):o>=r/20?(this.interval=20,this.intervalType="millisecond"):o>=r/50?(this.interval=50,this.intervalType="millisecond"):o>=r/100?(this.interval=100,this.intervalType="millisecond"):o>=r/200?(this.interval=200,this.intervalType="millisecond"):o>=r/250?(this.interval=250,this.intervalType="millisecond"):o>=r/300?(this.interval=300,this.intervalType="millisecond"):o>=r/400?(this.interval=400,this.intervalType="millisecond"):o>=r/500?(this.interval=500,this.intervalType="millisecond"):r/(1*constants.secondDuration)<=o?(this.interval=1,this.intervalType="second"):r/(2*constants.secondDuration)<=o?(this.interval=2,this.intervalType="second"):r/(5*constants.secondDuration)<=o?(this.interval=5,this.intervalType="second"):r/(10*constants.secondDuration)<=o?(this.interval=10,this.intervalType="second"):r/(15*constants.secondDuration)<=o?(this.interval=15,this.intervalType="second"):r/(20*constants.secondDuration)<=o?(this.interval=20,this.intervalType="second"):r/(30*constants.secondDuration)<=o?(this.interval=30,this.intervalType="second"):r/(1*constants.minuteDuration)<=o?(this.interval=1,this.intervalType="minute"):r/(2*constants.minuteDuration)<=o?(this.interval=2,this.intervalType="minute"):r/(5*constants.minuteDuration)<=o?(this.interval=5,this.intervalType="minute"):r/(10*constants.minuteDuration)<=o?(this.interval=10,this.intervalType="minute"):r/(15*constants.minuteDuration)<=o?(this.interval=15,this.intervalType="minute"):r/(20*constants.minuteDuration)<=o?(this.interval=20,this.intervalType="minute"):r/(30*constants.minuteDuration)<=o?(this.interval=30,this.intervalType="minute"):r/(1*constants.hourDuration)<=o?(this.interval=1,this.intervalType="hour"):r/(2*constants.hourDuration)<=o?(this.interval=2,this.intervalType="hour"):r/(3*constants.hourDuration)<=o?(this.interval=3,this.intervalType="hour"):r/(6*constants.hourDuration)<=o?(this.interval=6,this.intervalType="hour"):r/(1*constants.dayDuration)<=o?(this.interval=1,this.intervalType="day"):r/(2*constants.dayDuration)<=o?(this.interval=2,this.intervalType="day"):r/(4*constants.dayDuration)<=o?(this.interval=4,this.intervalType="day"):r/(1*constants.weekDuration)<=o?(this.interval=1,this.intervalType="week"):r/(2*constants.weekDuration)<=o?(this.interval=2,this.intervalType="week"):r/(3*constants.weekDuration)<=o?(this.interval=3,this.intervalType="week"):r/(1*constants.monthDuration)<=o?(this.interval=1,this.intervalType="month"):r/(2*constants.monthDuration)<=o?(this.interval=2,this.intervalType="month"):r/(3*constants.monthDuration)<=o?(this.interval=3,this.intervalType="month"):r/(6*constants.monthDuration)<=o?(this.interval=6,this.intervalType="month"):r/(1*constants.yearDuration)<=o?(this.interval=1,this.intervalType="year"):r/(2*constants.yearDuration)<=o?(this.interval=2,this.intervalType="year"):r/(4*constants.yearDuration)<=o?(this.interval=4,this.intervalType="year"):(this.interval=Math.floor(n.getNiceNumber(r/(o-1),!0)/constants.yearDuration),this.intervalType="year")),(null===this.viewportMinimum||isNaN(this.viewportMinimum))&&(this.viewportMinimum=i-s/2),(null===this.viewportMaximum||isNaN(this.viewportMaximum))&&(this.viewportMaximum=a+s/2),this.valueFormatString||(t?this.valueFormatString="MMM DD YYYY HH:mm":"year"===this.intervalType?this.valueFormatString="YYYY":"month"===this.intervalType?this.valueFormatString="MMM YYYY":"week"===this.intervalType?this.valueFormatString="MMM DD YYYY":"day"===this.intervalType?this.valueFormatString="MMM DD YYYY":"hour"===this.intervalType?this.valueFormatString="hh:mm TT":"minute"===this.intervalType?this.valueFormatString="hh:mm TT":"second"===this.intervalType?this.valueFormatString="hh:mm:ss TT":"millisecond"===this.intervalType&&(this.valueFormatString="fff'ms'"))):(this.intervalType="number",r=n.getNiceNumber(r,!1),this._options&&this._options.interval?this.interval=this._options.interval:this.interval=n.getNiceNumber(r/(o-1),!0),(null===this.viewportMinimum||isNaN(this.viewportMinimum))&&("axisX"===this.type?this.viewportMinimum=i-s/2:this.viewportMinimum=Math.floor(i/this.interval)*this.interval),(null===this.viewportMaximum||isNaN(this.viewportMaximum))&&("axisX"===this.type?this.viewportMaximum=a+s/2:this.viewportMaximum=Math.ceil(a/this.interval)*this.interval),0===this.viewportMaximum&&0===this.viewportMinimum&&(0===this._options.viewportMinimum?this.viewportMaximum+=10:0===this._options.viewportMaximum&&(this.viewportMinimum-=10),this._options&&"undefined"==typeof this._options.interval&&(this.interval=n.getNiceNumber((this.viewportMaximum-this.viewportMinimum)/(o-1),!0)))),(null===this.minimum||null===this.maximum)&&("axisX"===this.type?(i=null!==this.minimum?this.minimum:this.dataInfo.min,a=null!==this.maximum?this.maximum:this.dataInfo.max,a-i===0&&(l="undefined"==typeof this._options.interval?.4:this._options.interval,a+=l,i-=l),s=this.dataInfo.minDiff!==1/0?this.dataInfo.minDiff:a-i>1?.5*Math.abs(a-i):1):"axisY"===this.type&&(i=null!==this.minimum?this.minimum:this.dataInfo.min,a=null!==this.maximum?this.maximum:this.dataInfo.max,isFinite(i)||isFinite(a)?0===i&&0===a?(a+=9,i=0):a-i===0?(l=Math.min(Math.abs(.01*Math.abs(a)),5),a+=l,i-=l):i>a?(l=Math.min(Math.abs(.01*Math.abs(a-i)),5),a>=0?i=a-l:a=i+l):(l=Math.min(Math.abs(.01*Math.abs(a-i)),.05),0!==a&&(a+=l),0!==i&&(i-=l)):(a="undefined"==typeof this._options.interval?-(1/0):this._options.interval,i=0),s=this.dataInfo.minDiff!==1/0?this.dataInfo.minDiff:a-i>1?.5*Math.abs(a-i):1,this.includeZero&&(null===this.minimum||isNaN(this.minimum))&&i>0&&(i=0),this.includeZero&&(null===this.maximum||isNaN(this.maximum))&&0>a&&(a=0)),r=a-i,"axisX"===this.type&&"dateTime"===this.chart.plotInfo.axisXValueType?((null===this.minimum||isNaN(this.minimum))&&(this.minimum=i-s/2),(null===this.maximum||isNaN(this.maximum))&&(this.maximum=a+s/2)):(this.intervalType="number",null===this.minimum&&("axisX"===this.type?this.minimum=i-s/2:this.minimum=Math.floor(i/this.interval)*this.interval,this.minimum=Math.min(this.minimum,null===this.sessionVariables.viewportMinimum||isNaN(this.sessionVariables.viewportMinimum)?1/0:this.sessionVariables.viewportMinimum)),null===this.maximum&&("axisX"===this.type?this.maximum=a+s/2:this.maximum=Math.ceil(a/this.interval)*this.interval,this.maximum=Math.max(this.maximum,null===this.sessionVariables.viewportMaximum||isNaN(this.sessionVariables.viewportMaximum)?-(1/0):this.sessionVariables.viewportMaximum)),0===this.maximum&&0===this.minimum&&(0===this._options.minimum?this.maximum+=10:0===this._options.maximum&&(this.minimum-=10)))),this.viewportMinimum=Math.max(this.viewportMinimum,this.minimum),this.viewportMaximum=Math.min(this.viewportMaximum,this.maximum),"axisX"===this.type&&"dateTime"===this.chart.plotInfo.axisXValueType?this.intervalStartPosition=this.getLabelStartPoint(new Date(this.viewportMinimum),this.intervalType,this.interval):this.intervalStartPosition=Math.floor((this.viewportMinimum+.2*this.interval)/this.interval)*this.interval,!this.valueFormatString&&(this.valueFormatString="#,##0.##",r=Math.abs(this.viewportMaximum-this.viewportMinimum),1>r)){var h=Math.floor(Math.abs(Math.log(r)/Math.LN10))+2;if((isNaN(h)||!isFinite(h))&&(h=2),h>2)for(var d=0;h-2>d;d++)this.valueFormatString+="#"}},n.getNiceNumber=function(e,t){var i,a=Math.floor(Math.log(e)/Math.LN10),n=e/Math.pow(10,a);return i=t?1.5>n?1:3>n?2:7>n?5:10:1>=n?1:2>=n?2:5>=n?5:10,Number((i*Math.pow(10,a)).toFixed(20))},n.prototype.getLabelStartPoint=function(){var e=convertToNumber(this.interval,this.intervalType),t=Math.floor(this.viewportMinimum/e)*e,i=new Date(t);return"millisecond"===this.intervalType||("second"===this.intervalType?i.getMilliseconds()>0&&(i.setSeconds(i.getSeconds()+1),i.setMilliseconds(0)):"minute"===this.intervalType?(i.getSeconds()>0||i.getMilliseconds()>0)&&(i.setMinutes(i.getMinutes()+1),i.setSeconds(0),i.setMilliseconds(0)):"hour"===this.intervalType?(i.getMinutes()>0||i.getSeconds()>0||i.getMilliseconds()>0)&&(i.setHours(i.getHours()+1),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0)):"day"===this.intervalType?(i.getHours()>0||i.getMinutes()>0||i.getSeconds()>0||i.getMilliseconds()>0)&&(i.setDate(i.getDate()+1),i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0)):"week"===this.intervalType?(i.getDay()>0||i.getHours()>0||i.getMinutes()>0||i.getSeconds()>0||i.getMilliseconds()>0)&&(i.setDate(i.getDate()+(7-i.getDay())),i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0)):"month"===this.intervalType?(i.getDate()>1||i.getHours()>0||i.getMinutes()>0||i.getSeconds()>0||i.getMilliseconds()>0)&&(i.setMonth(i.getMonth()+1),i.setDate(1),i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0)):"year"===this.intervalType&&(i.getMonth()>0||i.getDate()>1||i.getHours()>0||i.getMinutes()>0||i.getSeconds()>0||i.getMilliseconds()>0)&&(i.setFullYear(i.getFullYear()+1),i.setMonth(0),i.setDate(1),i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0))),i},i["default"]=n},{"../helpers/utils":39,"./canvasjs":27,"./text_block":34}],27:[function(e,t,i){"use strict";function a(e,t,i,a){this._defaultsKey=e,this.parent=a,this._eventListeners=[];var s={};i&&n.themes[i]&&n.themes[i][e]&&(s=n.themes[i][e]),this._options=t?t:{},this.setOptions(this._options,s)}Object.defineProperty(i,"__esModule",{value:!0});var n=e("../constants/themes"),s=e("../constants/options");a.prototype.setOptions=function(e,t){if(s.defaultOptions[this._defaultsKey]){var i=s.defaultOptions[this._defaultsKey];for(var a in i)i.hasOwnProperty(a)&&(e&&a in e?this[a]=e[a]:t&&a in t?this[a]=t[a]:this[a]=i[a])}else s.isDebugMode&&window.console&&console.log("defaults not set")},a.prototype.updateOption=function(e){!s.defaultOptions[this._defaultsKey]&&s.isDebugMode&&window.console&&console.log("defaults not set");var t=s.defaultOptions[this._defaultsKey],i=this._options.theme?this._options.theme:this.chart&&this.chart._options.theme?this.chart._options.theme:"theme1",a={},r=this[e];return i&&n.themes[i]&&n.themes[i][this._defaultsKey]&&(a=n.themes[i][this._defaultsKey]),e in t&&(r=e in this._options?this._options[e]:a&&e in a?a[e]:t[e]),r===this[e]?!1:(this[e]=r,!0)},a.prototype.trackChanges=function(e){if(!this.sessionVariables)throw"Session Variable Store not set";this.sessionVariables[e]=this._options[e]},a.prototype.isBeingTracked=function(e){return this._options._oldOptions||(this._options._oldOptions={}),this._options._oldOptions[e]?!0:!1},a.prototype.hasOptionChanged=function(e){if(!this.sessionVariables)throw"Session Variable Store not set";var t=!(this.sessionVariables[e]===this._options[e]);return t},a.prototype.addEventListener=function(e,t,i){e&&t&&(i=i||this,this._eventListeners[e]=this._eventListeners[e]||[],this._eventListeners[e].push({context:i,eventHandler:t}))},a.prototype.removeEventListener=function(e,t){if(e&&t&&this._eventListeners[e])for(var i=this._eventListeners[e],a=0;a0?this._container.clientWidth:this.width,r=this._options.height?this.height:this._container.clientHeight>0?this._container.clientHeight:this.height,this.width=s,this.height=r,this.x1=this.y1=0,this.x2=this.width,this.y2=this.height,this._selectedColorSet="undefined"!=typeof I.colorSets[this.colorSet]?I.colorSets[this.colorSet]:I.colorSets.colorSet1,this._canvasJSContainer=document.createElement("div"),this._canvasJSContainer.setAttribute("class","canvasjs-chart-container"),this._canvasJSContainer.style.position="relative",this._canvasJSContainer.style.textAlign="left",this._canvasJSContainer.style.cursor="auto",F.isCanvasSupported||(this._canvasJSContainer.style.height="0px"),this._container.appendChild(this._canvasJSContainer),this.canvas=(0,F.createCanvas)(s,r),this.canvas.style.position="absolute",this.canvas.getContext&&(this._canvasJSContainer.appendChild(this.canvas),this.ctx=this.canvas.getContext("2d"),this.ctx.textBaseline="top",(0,F.extendCtx)(this.ctx),F.isCanvasSupported?this.plotArea.ctx=this.ctx:(this.plotArea.canvas=(0,F.createCanvas)(s,r),this.plotArea.canvas.style.position="absolute",this.plotArea.canvas.setAttribute("class","plotAreaCanvas"),this._canvasJSContainer.appendChild(this.plotArea.canvas),this.plotArea.ctx=this.plotArea.canvas.getContext("2d")),this.overlaidCanvas=(0,F.createCanvas)(s,r),this.overlaidCanvas.style.position="absolute",this._canvasJSContainer.appendChild(this.overlaidCanvas),this.overlaidCanvasCtx=this.overlaidCanvas.getContext("2d"),this.overlaidCanvasCtx.textBaseline="top",this._eventManager=new y["default"](this),(0,F.addEvent)(window,"resize",function(){a._updateSize()&&a.render()}),this._toolBar=document.createElement("div"),this._toolBar.setAttribute("class","canvasjs-chart-toolbar"),this._toolBar.style.cssText="position: absolute; right: 1px; top: 1px;",this._canvasJSContainer.appendChild(this._toolBar),this.bounds={x1:0,y1:0,x2:this.width,y2:this.height},(0,F.addEvent)(this.overlaidCanvas,"click",function(e){ -a._mouseEventHandler(e)}),(0,F.addEvent)(this.overlaidCanvas,"mousemove",function(e){a._mouseEventHandler(e)}),(0,F.addEvent)(this.overlaidCanvas,"mouseup",function(e){a._mouseEventHandler(e)}),(0,F.addEvent)(this.overlaidCanvas,"mousedown",function(e){a._mouseEventHandler(e),(0,F.hide)(a._dropdownMenu)}),(0,F.addEvent)(this.overlaidCanvas,"mouseout",function(e){a._mouseEventHandler(e)}),(0,F.addEvent)(this.overlaidCanvas,window.navigator.msPointerEnabled?"MSPointerDown":"touchstart",function(e){a._touchEventHandler(e)}),(0,F.addEvent)(this.overlaidCanvas,window.navigator.msPointerEnabled?"MSPointerMove":"touchmove",function(e){a._touchEventHandler(e)}),(0,F.addEvent)(this.overlaidCanvas,window.navigator.msPointerEnabled?"MSPointerUp":"touchend",function(e){a._touchEventHandler(e)}),(0,F.addEvent)(this.overlaidCanvas,window.navigator.msPointerEnabled?"MSPointerCancel":"touchcancel",function(e){a._touchEventHandler(e)}),this._creditLink||(this._creditLink=document.createElement("a"),this._creditLink.setAttribute("class","canvasjs-chart-credit"),this._creditLink.setAttribute("style","outline:none;margin:0px;position:absolute;right:3px;top:"+(this.height-14)+"px;color:dimgrey;text-decoration:none;font-size:10px;font-family:Lucida Grande, Lucida Sans Unicode, Arial, sans-serif"),this._creditLink.setAttribute("tabIndex",-1),this._creditLink.setAttribute("target","_blank")),this._toolTip=new b["default"](this,this._options.toolTip,this.theme),this.data=null,this.axisX=null,this.axisY=null,this.axisY2=null,this.sessionVariables={axisX:{},axisY:{},axisY2:{}})}Object.defineProperty(i,"__esModule",{value:!0});var s=e("./canvasjs"),r=a(s),o=e("./animator"),l=a(o),h=e("./data_series"),d=a(h),c=e("./text_block"),p=a(c),x=e("../helpers/render"),u=a(x),m=e("./layout_manager"),v=a(m),g=e("./event_manager"),y=a(g),f=e("./tooltip"),b=a(f),M=e("../core/culture_info"),P=a(M),S=e("../core/axis"),T=a(S),C=e("../core/title"),k=a(C),w=e("../core/legend"),_=a(w),A=e("../helpers/animator"),L=a(A),I=e("../constants/themes"),B=e("../constants/options"),F=e("../helpers/utils"),z=e("../charts/index");(0,F.extend)(n,r["default"]),n.prototype._updateOptions=function(){var e=this;if(this.updateOption("width"),this.updateOption("height"),this.updateOption("dataPointMaxWidth"),this.updateOption("interactivityEnabled"),this.updateOption("theme"),this.updateOption("colorSet")&&(this._selectedColorSet="undefined"!=typeof I.colorSets[this.colorSet]?I.colorSets[this.colorSet]:I.colorSets.colorSet1),this.updateOption("backgroundColor"),this.backgroundColor||(this.backgroundColor="rgba(0,0,0,0)"),this.updateOption("culture"),this._cultureInfo=new P["default"](this._options.culture),this.updateOption("animationEnabled"),this.animationEnabled=this.animationEnabled&&F.isCanvasSupported,this.updateOption("animationDuration"),this.updateOption("rangeChanging"),this.updateOption("rangeChanged"),this._options.zoomEnabled?(this._zoomButton||((0,F.hide)(this._zoomButton=document.createElement("button")),setButtonState(this,this._zoomButton,"pan"),this._toolBar.appendChild(this._zoomButton),(0,F.addEvent)(this._zoomButton,"click",function(){e.zoomEnabled?(e.zoomEnabled=!1,e.panEnabled=!0,setButtonState(e,e._zoomButton,"zoom")):(e.zoomEnabled=!0,e.panEnabled=!1,setButtonState(e,e._zoomButton,"pan")),e.render()})),this._resetButton||((0,F.hide)(this._resetButton=document.createElement("button")),setButtonState(this,this._resetButton,"reset"),this._toolBar.appendChild(this._resetButton),(0,F.addEvent)(this._resetButton,"click",function(){e._toolTip.hide(),e.zoomEnabled||e.panEnabled?(e.zoomEnabled=!0,e.panEnabled=!1,setButtonState(e,e._zoomButton,"pan"),e._defaultCursor="default",e.overlaidCanvas.style.cursor=e._defaultCursor):(e.zoomEnabled=!1,e.panEnabled=!1),e.sessionVariables.axisX&&(e.sessionVariables.axisX.newViewportMinimum=null,e.sessionVariables.axisX.newViewportMaximum=null),e.sessionVariables.axisY&&(e.sessionVariables.axisY.newViewportMinimum=null,e.sessionVariables.axisY.newViewportMaximum=null),e.sessionVariables.axisY2&&(e.sessionVariables.axisY2.newViewportMinimum=null,e.sessionVariables.axisY2.newViewportMaximum=null),e.resetOverlayedCanvas(),(0,F.hide)(e._zoomButton,e._resetButton),e._dispatchRangeEvent("rangeChanging","reset"),e.render(),e._dispatchRangeEvent("rangeChanged","reset")}),this.overlaidCanvas.style.cursor=e._defaultCursor),this.zoomEnabled||this.panEnabled||(this._zoomButton?(e._zoomButton.getAttribute("state")===e._cultureInfo.zoomText?(this.panEnabled=!0,this.zoomEnabled=!1):(this.zoomEnabled=!0,this.panEnabled=!1),(0,F.show)(e._zoomButton,e._resetButton)):(this.zoomEnabled=!0,this.panEnabled=!1))):(this.zoomEnabled=!1,this.panEnabled=!1),this._menuButton?this.exportEnabled?(0,F.show)(this._menuButton):(0,F.hide)(this._menuButton):this.exportEnabled&&F.isCanvasSupported&&(this._menuButton=document.createElement("button"),setButtonState(this,this._menuButton,"menu"),this._toolBar.appendChild(this._menuButton),(0,F.addEvent)(this._menuButton,"click",function(){if("none"===e._dropdownMenu.style.display){if(e._dropDownCloseTime&&(new Date).getTime()-e._dropDownCloseTime.getTime()<=500)return;e._dropdownMenu.style.display="block",e._menuButton.blur(),e._dropdownMenu.focus()}},!0)),!this._dropdownMenu&&this.exportEnabled&&F.isCanvasSupported){this._dropdownMenu=document.createElement("div"),this._dropdownMenu.setAttribute("tabindex",-1),this._dropdownMenu.style.cssText="position: absolute; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer;right: 1px;top: 25px;min-width: 120px;outline: 0;border: 1px solid silver;font-size: 14px;font-family: Calibri, Verdana, sans-serif;padding: 5px 0px 5px 0px;text-align: left;background-color: #fff;line-height: 20px;box-shadow: 2px 2px 10px #888888;",e._dropdownMenu.style.display="none",this._toolBar.appendChild(this._dropdownMenu),(0,F.addEvent)(this._dropdownMenu,"blur",function(){(0,F.hide)(e._dropdownMenu),e._dropDownCloseTime=new Date},!0);var t=document.createElement("div");t.style.cssText="padding: 2px 15px 2px 10px",t.innerHTML=this._cultureInfo.saveJPGText,this._dropdownMenu.appendChild(t),(0,F.addEvent)(t,"mouseover",function(){this.style.backgroundColor="#EEEEEE"},!0),(0,F.addEvent)(t,"mouseout",function(){this.style.backgroundColor="transparent"},!0),(0,F.addEvent)(t,"click",function(){exportCanvas(e.canvas,"jpg",e.exportFileName),(0,F.hide)(e._dropdownMenu)},!0);var t=document.createElement("div");t.style.cssText="padding: 2px 15px 2px 10px",t.innerHTML=this._cultureInfo.savePNGText,this._dropdownMenu.appendChild(t),(0,F.addEvent)(t,"mouseover",function(){this.style.backgroundColor="#EEEEEE"},!0),(0,F.addEvent)(t,"mouseout",function(){this.style.backgroundColor="transparent"},!0),(0,F.addEvent)(t,"click",function(){exportCanvas(e.canvas,"png",e.exportFileName),(0,F.hide)(e._dropdownMenu)},!0)}if("none"!==this._toolBar.style.display&&this._zoomButton&&(this.panEnabled?setButtonState(e,e._zoomButton,"zoom"):setButtonState(e,e._zoomButton,"pan"),e._resetButton.getAttribute("state")!==e._cultureInfo.resetText&&setButtonState(e,e._resetButton,"reset")),"undefined"==typeof B.defaultOptions.Chart.creditHref)this.creditHref="http://canvasjs.com/",this.creditText="CanvasJS.com";else var i=this.updateOption("creditText"),a=this.updateOption("creditHref");(0===this.renderCount||i||a)&&(this._creditLink.setAttribute("href",this.creditHref),this._creditLink.innerHTML=this.creditText),this.creditHref&&this.creditText?this._creditLink.parentElement||this._canvasJSContainer.appendChild(this._creditLink):this._creditLink.parentElement&&this._canvasJSContainer.removeChild(this._creditLink),this._options.toolTip&&this._toolTip._options!==this._options.toolTip&&(this._toolTip._options=this._options.toolTip);for(var n in this._toolTip._options)this._toolTip._options.hasOwnProperty(n)&&this._toolTip.updateOption(n)},n.prototype._updateSize=function(){var e=0,t=0;return this._options.width?e=this.width:this.width=e=this._container.clientWidth>0?this._container.clientWidth:this.width,this._options.height?t=this.height:this.height=t=this._container.clientHeight>0?this._container.clientHeight:this.height,this.canvas.width!==e*F.devicePixelBackingStoreRatio||this.canvas.height!==t*F.devicePixelBackingStoreRatio?((0,F.setCanvasSize)(this.canvas,e,t),(0,F.setCanvasSize)(this.overlaidCanvas,e,t),(0,F.setCanvasSize)(this._eventManager.ghostCanvas,e,t),!0):!1},n.prototype._initialize=function(){this._animator?this._animator.cancelAllAnimations():this._animator=new l["default"](this),this.removeAllEventListeners(),this.disableToolTip=!1,this._axes=[],this.pieDoughnutClickHandler=null,this.animationRequestId&&this.cancelRequestAnimFrame.call(window,this.animationRequestId),this._updateOptions(),this.animatedRender=F.isCanvasSupported&&this.animationEnabled&&0===this.renderCount,this._updateSize(),this.clearCanvas(),this.ctx.beginPath(),this.axisX=null,this.axisY=null,this.axisY2=null,this._indexLabels=[],this._dataInRenderedOrder=[],this._events=[],this._eventManager&&this._eventManager.reset(),this.plotInfo={axisPlacement:null,axisXValueType:null,plotTypes:[]},this.layoutManager=new v["default"](0,0,this.width,this.height,2),this.plotArea.layoutManager&&this.plotArea.layoutManager.reset(),this.data=[];for(var e=0,t=0;t=0){var i=new d["default"](this,this._options.data[t],this.theme,e-1,++this._eventManager.lastObjectId);null===i.name&&(i.name="DataSeries "+e),null===i.color?this._options.data.length>1?(i._colorSet=[this._selectedColorSet[i.index%this._selectedColorSet.length]],i.color=this._selectedColorSet[i.index%this._selectedColorSet.length]):"line"===i.type||"stepLine"===i.type||"spline"===i.type||"area"===i.type||"stepArea"===i.type||"splineArea"===i.type||"stackedArea"===i.type||"stackedArea100"===i.type||"rangeArea"===i.type||"rangeSplineArea"===i.type||"candlestick"===i.type||"ohlc"===i.type?i._colorSet=[this._selectedColorSet[0]]:i._colorSet=this._selectedColorSet:i._colorSet=[i.color],null===i.markerSize&&(("line"===i.type||"stepLine"===i.type||"spline"===i.type)&&i.dataPoints&&i.dataPoints.length0&&"undefined"==typeof this.axisY2._options.gridThickness?this.axisY2.gridThickness=0:this.axisY2.gridThickness>0&&"undefined"==typeof this.axisY._options.gridThickness&&(this.axisY.gridThickness=0));var a=!1;if(this._axes.length>0&&(this.zoomEnabled||this.panEnabled))for(var i=0;i0){var u=(0,F.createCanvas)(this.width,this.height),m=u.getContext("2d");r.push(this.renderIndexLabels(m))}var v=this;if(r.length>0?(v.disableToolTip=!0,v._animator.animate(200,v.animationDuration,function(e){v.ctx.clearRect(0,0,v.width,v.height),v.ctx.drawImage(o,0,0,Math.floor(v.width*F.devicePixelBackingStoreRatio),Math.floor(v.height*F.devicePixelBackingStoreRatio),0,0,v.width,v.height);for(var t=0;te&&"undefined"!=typeof p.startTimePercent?e>=p.startTimePercent&&p.animationCallback(p.easingFunction(e-p.startTimePercent,0,1,1-p.startTimePercent),p):p.animationCallback(p.easingFunction(e,0,1,1),p);v.dispatchEvent("dataAnimationIterationEnd",{chart:v})},function(){r=[];for(var e=0;e0&&v.renderIndexLabels(),v.dispatchEvent("dataAnimationIterationEnd",{chart:v})),this.attachPlotAreaEventHandlers(),this.zoomEnabled||this.panEnabled||!this._zoomButton||"none"===this._zoomButton.style.display||(0,F.hide)(this._zoomButton,this._resetButton),this._toolTip._updateToolTip(),this.renderCount++,B.isDebugMode){var v=this;setTimeout(function(){var e=document.getElementById("ghostCanvasCopy");if(e){(0,F.setCanvasSize)(e,v.width,v.height);var t=e.getContext("2d");t.drawImage(v._eventManager.ghostCanvas,0,0)}},2e3)}},n.prototype.attachPlotAreaEventHandlers=function(){this.attachEvent({context:this,chart:this,mousedown:this._plotAreaMouseDown,mouseup:this._plotAreaMouseUp,mousemove:this._plotAreaMouseMove,cursor:this.zoomEnabled?"col-resize":"move",cursor:this.panEnabled?"move":"default",capture:!0,bounds:this.plotArea})},n.prototype.categoriseDataSeries=function(){for(var e="",t=0;t=0){for(var i=null,a=!1,s=null,r=!1,o=0;oa;a++)t.dataPointIds[a]=++this._eventManager.lastObjectId}},n.prototype._processData=function(){this.assignIdToDataPoints(),this.categoriseDataSeries();for(var e=0;en.max&&(n.max=t),ia.max&&(a.max=i),l>0){var x=t-o.dataPoints[l-1].x;if(0>x&&(x=-1*x),n.minDiff>x&&0!==x&&(n.minDiff=x),null!==i&&null!==o.dataPoints[l-1].y){var u=i-o.dataPoints[l-1].y;0>u&&(u=-1*u),a.minDiff>u&&0!==u&&(a.minDiff=u)}}if(!(c>t)||h)if(!h&&(h=!0,l>0))l-=2;else{if(t>p&&!d)d=!0;else if(t>p&&d)continue;o.dataPoints[l].label&&(e.axisX.labels[t]=o.dataPoints[l].label),tn.viewPortMax&&(n.viewPortMax=t),null!==i&&(ia.viewPortMax&&(a.viewPortMax=i))}}this.plotInfo.axisXValueType=o.xValueType=s?"dateTime":"number"}},n.prototype._processStackedPlotUnit=function(e){if(e.dataSeriesIndexes&&!(e.dataSeriesIndexes.length<1)){for(var t,i,a=e.axisY.dataInfo,n=e.axisX.dataInfo,s=!1,r=[],o=[],l=0;ln.max&&(n.max=t),d>0){var m=t-h.dataPoints[d-1].x;if(0>m&&(m=-1*m),n.minDiff>m&&0!==m&&(n.minDiff=m),null!==i&&null!==h.dataPoints[d-1].y){var v=i-h.dataPoints[d-1].y;0>v&&(v=-1*v),a.minDiff>v&&0!==v&&(a.minDiff=v)}}if(!(x>t)||c)if(!c&&(c=!0,d>0))d-=2;else{if(t>u&&!p)p=!0;else if(t>u&&p)continue;h.dataPoints[d].label&&(e.axisX.labels[t]=h.dataPoints[d].label),tn.viewPortMax&&(n.viewPortMax=t),null!==i&&(e.yTotals[t]=(e.yTotals[t]?e.yTotals[t]:0)+Math.abs(i),i>=0?r[t]?r[t]+=i:r[t]=i:o[t]?o[t]+=i:o[t]=i)}}this.plotInfo.axisXValueType=h.xValueType=s?"dateTime":"number"}for(d in r)if(r.hasOwnProperty(d)){if(isNaN(d))continue;var g=r[d];if(ga.max&&(a.max=g),dn.viewPortMax)continue;ga.viewPortMax&&(a.viewPortMax=g)}for(d in o)if(o.hasOwnProperty(d)){if(isNaN(d))continue;var g=o[d];if(ga.max&&(a.max=g),dn.viewPortMax)continue;ga.viewPortMax&&(a.viewPortMax=g)}}},n.prototype._processStacked100PlotUnit=function(e){if(e.dataSeriesIndexes&&!(e.dataSeriesIndexes.length<1)){for(var t,i,a=e.axisY.dataInfo,n=e.axisX.dataInfo,s=!1,r=!1,o=!1,l=[],h=0;hn.max&&(n.max=t),c>0){var v=t-d.dataPoints[c-1].x;if(0>v&&(v=-1*v),n.minDiff>v&&0!==v&&(n.minDiff=v),null!==i&&null!==d.dataPoints[c-1].y){var g=i-d.dataPoints[c-1].y;0>g&&(g=-1*g),a.minDiff>g&&0!==g&&(a.minDiff=g)}}if(!(u>t)||p)if(!p&&(p=!0,c>0))c-=2;else{if(t>m&&!x)x=!0;else if(t>m&&x)continue;d.dataPoints[c].label&&(e.axisX.labels[t]=d.dataPoints[c].label),tn.viewPortMax&&(n.viewPortMax=t),null!==i&&(e.yTotals[t]=(e.yTotals[t]?e.yTotals[t]:0)+Math.abs(i),i>=0?r=!0:o=!0,l[t]?l[t]+=Math.abs(i):l[t]=Math.abs(i))}}this.plotInfo.axisXValueType=d.xValueType=s?"dateTime":"number"}r&&!o?(a.max=99,a.min=1):r&&o?(a.max=99,a.min=-99):!r&&o&&(a.max=-1,a.min=-99),a.viewPortMin=a.min,a.viewPortMax=a.max,e.dataPointYSums=l}},n.prototype._processMultiYPlotUnit=function(e){if(e.dataSeriesIndexes&&!(e.dataSeriesIndexes.length<1))for(var t,i,a,n,s=e.axisY.dataInfo,r=e.axisX.dataInfo,o=!1,l=0;lr.max&&(r.max=t),as.max&&(s.max=n),d>0){var m=t-h.dataPoints[d-1].x;if(0>m&&(m=-1*m),r.minDiff>m&&0!==m&&(r.minDiff=m),null!==i[0]&&null!==h.dataPoints[d-1].y[0]){var v=i[0]-h.dataPoints[d-1].y[0];0>v&&(v=-1*v),s.minDiff>v&&0!==v&&(s.minDiff=v)}}if(!(x>t)||c)if(!c&&(c=!0,d>0))d-=2;else{if(t>u&&!p)p=!0;else if(t>u&&p)continue;h.dataPoints[d].label&&(e.axisX.labels[t]=h.dataPoints[d].label),tr.viewPortMax&&(r.viewPortMax=t),null!==i&&(as.viewPortMax&&(s.viewPortMax=n))}}this.plotInfo.axisXValueType=h.xValueType=o?"dateTime":"number"}},n.prototype.getDataPointAtXY=function(e,t,i){i=i||!1;for(var a=[],n=this._dataInRenderedOrder.length-1;n>=0;n--){var s=this._dataInRenderedOrder[n],r=null;r=s.getDataPointAtXY(e,t,i),r&&a.push(r)}for(var o=null,l=!1,h=0;h=r.x1&&e<=r.x2&&t>=r.y1&&t<=r.y2&&(a=r.id)}return a},n.prototype.getAutoFontSize=function(e,t,i){t=t||this.width,i=i||this.height;var a=e/400;return Math.round(Math.min(this.width,this.height)*a)},n.prototype.resetOverlayedCanvas=function(){this.overlaidCanvasCtx.clearRect(0,0,this.width,this.height)},n.prototype.clearCanvas=function(){this.ctx.clearRect(0,0,this.width,this.height),this.backgroundColor&&(this.ctx.fillStyle=this.backgroundColor,this.ctx.fillRect(0,0,this.width,this.height))},n.prototype.attachEvent=function(e){this._events.push(e)},n.prototype._touchEventHandler=function(e){if(e.changedTouches&&this.interactivityEnabled){var t=[],i=e.changedTouches,a=i?i[0]:e,n=null;switch(e.type){case"touchstart":case"MSPointerDown":t=["mousemove","mousedown"],this._lastTouchData=(0,F.getMouseCoordinates)(a),this._lastTouchData.time=new Date;break;case"touchmove":case"MSPointerMove":t=["mousemove"];break;case"touchend":case"MSPointerUp":t="touchstart"===this._lastTouchEventType||"MSPointerDown"===this._lastTouchEventType?["mouseup","click"]:["mouseup"];break;default:return}if(!(i&&i.length>1)){n=(0,F.getMouseCoordinates)(a),n.time=new Date;try{var s=n.y-this._lastTouchData.y,r=(n.x-this._lastTouchData.x,n.time-this._lastTouchData.time);if(Math.abs(s)>15&&(this._lastTouchData.scroll||200>r)){this._lastTouchData.scroll=!0;var o=window.parent||window;o&&o.scrollBy&&o.scrollBy(0,-s)}}catch(l){}if(this._lastTouchEventType=e.type,this._lastTouchData.scroll&&this.zoomEnabled)return this.isDrag&&this.resetOverlayedCanvas(),void(this.isDrag=!1);for(var h=0;h x: "+a.x+"; y:"+a.y),i&&window.console.log(e.which),"mouseup"===s&&window.console.log("mouseup")),!i){if(n.capturedEventParam)t=n.capturedEventParam,"mouseup"===s&&(n.capturedEventParam=null,t.chart.overlaidCanvas.releaseCapture?t.chart.overlaidCanvas.releaseCapture():document.body.removeEventListener("mouseup",t.chart._mouseEventHandler,!1)), -t.hasOwnProperty(s)&&t[s].call(t.context,a.x,a.y);else if(this._events){for(var r=0;r=o.x1&&a.x<=o.x2&&a.y>=o.y1&&a.y<=o.y2){t[s].call(t.context,a.x,a.y),"mousedown"===s&&t.capture===!0?(n.capturedEventParam=t,this.overlaidCanvas.setCapture?this.overlaidCanvas.setCapture():document.body.addEventListener("mouseup",this._mouseEventHandler,!1)):"mouseup"===s&&(t.chart.overlaidCanvas.releaseCapture?t.chart.overlaidCanvas.releaseCapture():document.body.removeEventListener("mouseup",this._mouseEventHandler,!1));break}t=null}t&&t.cursor?e.target.style.cursor=t.cursor:e.target.style.cursor=this._defaultCursor}if(this._toolTip&&this._toolTip.enabled){var l=this.plotArea;(a.xl.x2||a.yl.y2)&&this._toolTip.hide()}this.isDrag&&this.zoomEnabled||!this._eventManager||this._eventManager.mouseEventHandler(e)}}},n.prototype._plotAreaMouseDown=function(e,t){this.isDrag=!0,"none"!==this.plotInfo.axisPlacement?this.dragStartPoint={x:e,y:t}:this.dragStartPoint={x:e,y:t}},n.prototype._plotAreaMouseUp=function(e,t){if(("normal"===this.plotInfo.axisPlacement||"xySwapped"===this.plotInfo.axisPlacement)&&this.isDrag){var i=t-this.dragStartPoint.y,a=e-this.dragStartPoint.x,n=this.zoomType.indexOf("x")>=0,s=this.zoomType.indexOf("y")>=0,r=!1;if(this.resetOverlayedCanvas(),"xySwapped"===this.plotInfo.axisPlacement){var o=s;s=n,n=o}if(this.panEnabled||this.zoomEnabled){if(this.panEnabled)for(var l=0,h=0;hd.maximum&&(l=d.viewportMaximum-d.maximum,d.sessionVariables.newViewportMinimum=d.viewportMinimum-l,d.sessionVariables.newViewportMaximum=d.viewportMaximum-l,r=!0)}else if((!n||Math.abs(a)>2)&&(!s||Math.abs(i)>2)&&this.zoomEnabled){if(!this.dragStartPoint)return;var c={x1:n?this.dragStartPoint.x:this.plotArea.x1,y1:s?this.dragStartPoint.y:this.plotArea.y1,x2:n?e:this.plotArea.x2,y2:s?t:this.plotArea.y2};Math.abs(c.x1-c.x2)>2&&Math.abs(c.y1-c.y2)>2&&this._zoomPanToSelectedRegion(c.x1,c.y1,c.x2,c.y2)&&(r=!0)}r&&(this._ignoreNextEvent=!0,this._dispatchRangeEvent("rangeChanging","zoom"),this.render(),this._dispatchRangeEvent("rangeChanged","zoom"),r&&this.zoomEnabled&&"none"===this._zoomButton.style.display&&((0,F.show)(this._zoomButton,this._resetButton),setButtonState(this,this._zoomButton,"pan"),setButtonState(this,this._resetButton,"reset")))}}this.isDrag=!1},n.prototype._plotAreaMouseMove=function(e,t){if(this.isDrag&&"none"!==this.plotInfo.axisPlacement){var i=0,a=0,n=null,s=null,r=this.zoomType.indexOf("x")>=0,o=this.zoomType.indexOf("y")>=0;if("xySwapped"===this.plotInfo.axisPlacement){var l=o;o=r,r=l}if(i=this.dragStartPoint.x-e,a=this.dragStartPoint.y-t,Math.abs(i)>2&&Math.abs(i)<8&&(this.panEnabled||this.zoomEnabled)?this._toolTip.hide():this.panEnabled||this.zoomEnabled||this._toolTip.mouseMoveHandler(e,t),(!r||Math.abs(i)>2||!o||Math.abs(a)>2)&&(this.panEnabled||this.zoomEnabled))if(this.panEnabled)s={x1:r?this.plotArea.x1+i:this.plotArea.x1,y1:o?this.plotArea.y1+a:this.plotArea.y1,x2:r?this.plotArea.x2+i:this.plotArea.x2,y2:o?this.plotArea.y2+a:this.plotArea.y2},this._zoomPanToSelectedRegion(s.x1,s.y1,s.x2,s.y2,!0)&&(this._dispatchRangeEvent("rangeChanging","pan"),this.render(),this._dispatchRangeEvent("rangeChanged","pan"),this.dragStartPoint.x=e,this.dragStartPoint.y=t);else if(this.zoomEnabled){this.resetOverlayedCanvas(),n=this.overlaidCanvasCtx.globalAlpha,this.overlaidCanvasCtx.globalAlpha=.7,this.overlaidCanvasCtx.fillStyle="#A0ABB8";var h={x1:r?this.dragStartPoint.x:this.plotArea.x1,y1:o?this.dragStartPoint.y:this.plotArea.y1,x2:r?e-this.dragStartPoint.x:this.plotArea.x2-this.plotArea.x1,y2:o?t-this.dragStartPoint.y:this.plotArea.y2-this.plotArea.y1};this.overlaidCanvasCtx.fillRect(h.x1,h.y1,h.x2,h.y2),this.overlaidCanvasCtx.globalAlpha=n}}else this._toolTip.mouseMoveHandler(e,t)},n.prototype._zoomPanToSelectedRegion=function(e,t,i,a,n){n=n||!1;var s=this.zoomType.indexOf("x")>=0,r=this.zoomType.indexOf("y")>=0,o=!1,l=[],h=[];this.axisX&&s&&l.push(this.axisX),this.axisY&&r&&l.push(this.axisY),this.axisY2&&r&&l.push(this.axisY2);for(var d=[],c=0;cu){var m=u;u=x,x=m}if(isFinite(p.dataInfo.minDiff))if(Math.abs(u-x)<3*Math.abs(p.dataInfo.minDiff)||xp.maximum){if(!n){o=!1;break}}else h.push(p),d.push({val1:x,val2:u}),o=!0}if(o)for(var c=0;c0||e.y1>0)&&e.ctx.translate(e.x1,e.y1),this.axisX&&t)e.x1=this.axisX.lineCoordinates.x1t.lineCoordinates.x2?this.axisX.lineCoordinates.x2:t.lineCoordinates.x2,e.y2=this.axisX.lineCoordinates.y2>this.axisX.lineCoordinates.y1?this.axisX.lineCoordinates.y2:t.lineCoordinates.y2,e.width=e.x2-e.x1,e.height=e.y2-e.y1;else{var i=this.layoutManager.getFreeSpace();e.x1=i.x1,e.x2=i.x2,e.y1=i.y1,e.y2=i.y2,e.width=i.width,e.height=i.height}F.isCanvasSupported||(e.canvas.width=e.width,e.canvas.height=e.height,e.canvas.style.left=e.x1+"px",e.canvas.style.top=e.y1+"px",(e.x1>0||e.y1>0)&&e.ctx.translate(-e.x1,-e.y1)),e.layoutManager=new v["default"](e.x1,e.y1,e.x2,e.y2,2)},n.prototype.getPixelCoordinatesOnPlotArea=function(e,t){return{x:this.axisX.getPixelCoordinatesOnAxis(e).x,y:this.axisY.getPixelCoordinatesOnAxis(t).y}},n.prototype.renderIndexLabels=function(e){for(var t=e||this.plotArea.ctx,i=this.plotArea,a=0,n=0,s=0,r=0,o=0,l=0,h=0,d=0,c=0,x=0;x=0||"pie"===v.dataSeries.type||"doughnut"===v.dataSeries.type)&&(k=this.getPercentAndTotal(v.dataSeries,v.dataPoint)),(v.dataSeries.indexLabelFormatter||v.dataPoint.indexLabelFormatter)&&(w={chart:this._options,dataSeries:v.dataSeries,dataPoint:v.dataPoint,index:v.indexKeyword,total:k.total,percent:k.percent});var _=v.dataPoint.indexLabelFormatter?v.dataPoint.indexLabelFormatter(w):v.dataPoint.indexLabel?this.replaceKeywordsWithValue(v.dataPoint.indexLabel,v.dataPoint,v.dataSeries,null,v.indexKeyword):v.dataSeries.indexLabelFormatter?v.dataSeries.indexLabelFormatter(w):v.dataSeries.indexLabel?this.replaceKeywordsWithValue(v.dataSeries.indexLabel,v.dataPoint,v.dataSeries,null,v.indexKeyword):null;if(null!==_&&""!==_){var A=(0,F.getProperty)("indexLabelPlacement",v.dataPoint,v.dataSeries),I=(0,F.getProperty)("indexLabelOrientation",v.dataPoint,v.dataSeries),B=v.direction,z=v.dataSeries.axisX,D=v.dataSeries.axisY,X=new p["default"](t,{x:0,y:0,maxWidth:T?T:.5*this.width,maxHeight:C?5*f:1.5*f,angle:"horizontal"===I?0:-90,text:_,padding:0,backgroundColor:S,horizontalAlign:"left",fontSize:f,fontFamily:b,fontWeight:P,fontColor:y,fontStyle:M,textBaseline:"top"});X.measureText();if(g.indexOf("line")>=0||g.indexOf("area")>=0||g.indexOf("bubble")>=0||g.indexOf("scatter")>=0){if(v.dataPoint.xz.viewportMaximum||v.dataPoint.yD.viewportMaximum)continue}else if(v.dataPoint.xz.viewportMaximum)continue;if(h=2,l=2,"horizontal"===I?(d=X.width,c=X.height):(c=X.width,d=X.height),"normal"===this.plotInfo.axisPlacement)g.indexOf("line")>=0||g.indexOf("area")>=0?(A="auto",h=4):g.indexOf("stacked")>=0?"auto"===A&&(A="inside"):("bubble"===g||"scatter"===g)&&(A="inside"),u=v.point.x-d/2,"inside"!==A?(n=i.y1,s=i.y2,B>0?(m=v.point.y-c-h,n>m&&(m="auto"===A?Math.max(v.point.y,n)+h:n+h)):(m=v.point.y+h,m>s-c-h&&(m="auto"===A?Math.min(v.point.y,s)-c-h:s-c-h))):(n=Math.max(v.bounds.y1,i.y1),s=Math.min(v.bounds.y2,i.y2),a=g.indexOf("range")>=0?B>0?Math.max(v.bounds.y1,i.y1)+c/2+h:Math.min(v.bounds.y2,i.y2)-c/2-h:(Math.max(v.bounds.y1,i.y1)+Math.min(v.bounds.y2,i.y2))/2,B>0?(m=Math.max(v.point.y,a)-c/2,n>m&&("bubble"===g||"scatter"===g)&&(m=Math.max(v.point.y-c-h,i.y1+h))):(m=Math.min(v.point.y,a)-c/2,m>s-c-h&&("bubble"===g||"scatter"===g)&&(m=Math.min(v.point.y+h,i.y2-c-h))),m=Math.min(m,s-c));else if(g.indexOf("line")>=0||g.indexOf("area")>=0||g.indexOf("scatter")>=0?(A="auto",l=4):g.indexOf("stacked")>=0?"auto"===A&&(A="inside"):"bubble"===g&&(A="inside"),m=v.point.y-c/2,"inside"!==A)r=i.x1,o=i.x2,0>B?(u=v.point.x-d-l,r>u&&(u="auto"===A?Math.max(v.point.x,r)+l:r+l)):(u=v.point.x+l,u>o-d-l&&(u="auto"===A?Math.min(v.point.x,o)-d-l:o-d-l));else{if(r=Math.max(v.bounds.x1,i.x1),o=Math.min(v.bounds.x2,i.x2),g.indexOf("range")>=0)a=0>B?Math.max(v.bounds.x1,i.x1)+d/2+l:Math.min(v.bounds.x2,i.x2)-d/2-l;else var a=(Math.max(v.bounds.x1,i.x1)+Math.min(v.bounds.x2,i.x2))/2;u=0>B?Math.max(v.point.x,a)-d/2:Math.min(v.point.x,a)-d/2,u=Math.max(u,r)}"vertical"===I&&(m+=c),X.x=u,X.y=m,X.render(!0)}}var Y={source:t,dest:this.plotArea.ctx,animationCallback:L["default"].fadeInAnimation,easingFunction:L["default"].easing.easeInQuad,animationBase:0,startTimePercent:.7};return Y},n.prototype.renderLine=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(0>=i)){var a=this._eventManager.ghostCtx;t.save();var n=this.plotArea;t.beginPath(),t.rect(n.x1,n.y1,n.width,n.height),t.clip();for(var s=[],r=0;r0?Math.max(l.lineThickness,4):0;var p=l._colorSet,x=p[0];t.strokeStyle=x;var m,v,g,y=!0,f=0;if(t.beginPath(),h.length>0){var b=!1;for(f=0;fe.axisX.dataInfo.viewPortMax))if("number"==typeof h[f].y){m=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(g-e.axisX.conversionParameters.minimum)+.5<<0,v=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(h[f].y-e.axisY.conversionParameters.minimum)+.5<<0;var M=l.dataPointIds[f];if(this._eventManager.objectMap[M]={id:M,objectType:"dataPoint",dataSeriesIndex:o,dataPointIndex:f,x1:m,y1:v},y||b?(t.beginPath(),t.moveTo(m,v),F.isCanvasSupported&&(a.beginPath(),a.moveTo(m,v)),y=!1,b=!1):(t.lineTo(m,v),F.isCanvasSupported&&a.lineTo(m,v),f%500==0&&(t.stroke(),t.beginPath(),t.moveTo(m,v),F.isCanvasSupported&&(a.stroke(),a.beginPath(),a.moveTo(m,v)))),h[f].markerSize>0||l.markerSize>0){var P=l.getMarkerProperties(f,m,v,t);s.push(P);var S=(0,F.intToHexColorString)(M);F.isCanvasSupported&&s.push({x:m,y:v,ctx:a,type:P.type,size:P.size,color:S,borderColor:S,borderThickness:P.borderThickness})}(h[f].indexLabel||l.indexLabel||h[f].indexLabelFormatter||l.indexLabelFormatter)&&this._indexLabels.push({chartType:"line",dataPoint:h[f],dataSeries:l,point:{x:m,y:v},direction:h[f].y>=0?1:-1,color:x})}else f>0&&(t.stroke(),F.isCanvasSupported&&a.stroke()),b=!0;t.stroke(),F.isCanvasSupported&&a.stroke()}}u["default"].drawMarkers(s),t.restore(),t.beginPath(),F.isCanvasSupported&&a.beginPath();var T={source:t,dest:this.plotArea.ctx,animationCallback:L["default"].xClipAnimation,easingFunction:L["default"].easing.linear,animationBase:0};return T}},n.prototype.renderStepLine=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(0>=i)){var a=this._eventManager.ghostCtx;t.save();var n=this.plotArea;t.beginPath(),t.rect(n.x1,n.y1,n.width,n.height),t.clip();for(var s=[],r=0;r0?Math.max(l.lineThickness,4):0;var p=l._colorSet,x=p[0];t.strokeStyle=x;var m,v,g,y=!0,f=0;if(t.beginPath(),h.length>0){var b=!1;for(f=0;fe.axisX.dataInfo.viewPortMax))if("number"==typeof h[f].y){var M=v;m=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(g-e.axisX.conversionParameters.minimum)+.5<<0,v=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(h[f].y-e.axisY.conversionParameters.minimum)+.5<<0;var P=l.dataPointIds[f];if(this._eventManager.objectMap[P]={id:P,objectType:"dataPoint",dataSeriesIndex:o,dataPointIndex:f,x1:m,y1:v},y||b?(t.beginPath(),t.moveTo(m,v),F.isCanvasSupported&&(a.beginPath(),a.moveTo(m,v)),y=!1,b=!1):(t.lineTo(m,M),F.isCanvasSupported&&a.lineTo(m,M),t.lineTo(m,v),F.isCanvasSupported&&a.lineTo(m,v),f%500==0&&(t.stroke(),t.beginPath(),t.moveTo(m,v),F.isCanvasSupported&&(a.stroke(),a.beginPath(),a.moveTo(m,v)))),h[f].markerSize>0||l.markerSize>0){var S=l.getMarkerProperties(f,m,v,t);s.push(S);var T=(0,F.intToHexColorString)(P);F.isCanvasSupported&&s.push({x:m,y:v,ctx:a,type:S.type,size:S.size,color:T,borderColor:T,borderThickness:S.borderThickness})}(h[f].indexLabel||l.indexLabel||h[f].indexLabelFormatter||l.indexLabelFormatter)&&this._indexLabels.push({chartType:"stepLine",dataPoint:h[f],dataSeries:l,point:{x:m,y:v},direction:h[f].y>=0?1:-1,color:x})}else f>0&&(t.stroke(),F.isCanvasSupported&&a.stroke()),b=!0;t.stroke(),F.isCanvasSupported&&a.stroke()}}u["default"].drawMarkers(s),t.restore(),t.beginPath(),F.isCanvasSupported&&a.beginPath();var C={source:t,dest:this.plotArea.ctx,animationCallback:L["default"].xClipAnimation,easingFunction:L["default"].easing.linear,animationBase:0};return C}},n.prototype.animationRequestId=null,n.prototype.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}}(),n.prototype.cancelRequestAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.mozCancelRequestAnimationFrame||window.oCancelRequestAnimationFrame||window.msCancelRequestAnimationFrame||clearTimeout}(),n.prototype.getPercentAndTotal=function(e,t){var i=null,a=null,n=null;if(e.type.indexOf("stacked")>=0)a=0,i=t.x.getTime?t.x.getTime():t.x,i in e.plotUnit.yTotals&&(a=e.plotUnit.yTotals[i],n=isNaN(t.y)?0:0===a?0:t.y/a*100);else if("pie"===e.type||"doughnut"===e.type){a=0;for(var s=0;s=0||"pie"===i.type||"doughnut"===i.type)&&(e.indexOf("#percent")>=0||e.indexOf("#total")>=0)){var o="#percent",l="#total",h=this.getPercentAndTotal(i,t);l=isNaN(h.total)?l:h.total,o=isNaN(h.percent)?o:h.percent;do{var d="";if(i.percentFormatString)d=i.percentFormatString;else{d="#,##0.";var c=Math.max(Math.ceil(Math.log(1/Math.abs(o))/Math.LN10),2);(isNaN(c)||!isFinite(c))&&(c=2);for(var p=0;c>p;p++)d+="#"}e=e.replace("#percent",(0,F.numberFormat)(o,d,r._cultureInfo)),e=e.replace("#total",(0,F.numberFormat)(l,i.yValueFormatString?i.yValueFormatString:"#,##0.########"))}while(e.indexOf("#percent")>=0||e.indexOf("#total")>=0)}var x=function(e){if('"'===e[0]&&'"'===e[e.length-1]||"'"===e[0]&&"'"===e[e.length-1])return e.slice(1,e.length-1);var s=(0,F.trimString)(e.slice(1,e.length-1));s=s.replace("#index",n);var o=null;try{var l=s.match(/(.*?)\s*\[\s*(.*?)\s*\]/);l&&l.length>0&&(o=(0,F.trimString)(l[2]),s=(0,F.trimString)(l[1]))}catch(h){}var d=null;if("color"===s)return t.color?t.color:i.color?i.color:i._colorSet[a%i._colorSet.length];if(t.hasOwnProperty(s))d=t;else{if(!i.hasOwnProperty(s))return"";d=i}var c=d[s];return null!==o&&(c=c[o]),"x"===s?r.axisX&&"dateTime"===r.plotInfo.axisXValueType?dateFormat(c,t.xValueFormatString?t.xValueFormatString:i.xValueFormatString?i.xValueFormatString:r.axisX&&r.axisX.valueFormatString?r.axisX.valueFormatString:"DD MMM YY",r._cultureInfo):(0,F.numberFormat)(c,t.xValueFormatString?t.xValueFormatString:i.xValueFormatString?i.xValueFormatString:"#,##0.########",r._cultureInfo):"y"===s?(0,F.numberFormat)(c,t.yValueFormatString?t.yValueFormatString:i.yValueFormatString?i.yValueFormatString:"#,##0.########",r._cultureInfo):"z"===s?(0,F.numberFormat)(c,t.zValueFormatString?t.zValueFormatString:i.zValueFormatString?i.zValueFormatString:"#,##0.########",r._cultureInfo):c};return e.replace(s,x)},n.prototype.renderSpline=z.SplineChart,n.prototype.renderColumn=z.ColumnChart,n.prototype.renderStackedColumn=z.StackedColumnChart,n.prototype.renderStackedColumn100=z.StackedColumn100Chart,n.prototype.renderBar=z.BarChart,n.prototype.renderStackedBar=z.StackedBarChart,n.prototype.renderStackedBar100=z.StackedBar100Chart,n.prototype.renderArea=z.AreaChart,n.prototype.renderSplineArea=z.SplineAreaChart,n.prototype.renderStepArea=z.StepAreaChart,n.prototype.renderStackedArea=z.StackedAreaChart,n.prototype.renderStackedArea100=z.StackedArea100Chart,n.prototype.renderBubble=z.BubbleChart,n.prototype.renderScatter=z.ScatterChart,n.prototype.renderCandlestick=z.CandlestickChart,n.prototype.renderRangeColumn=z.RangeColumnChart,n.prototype.renderRangeBar=z.RangeBarChart,n.prototype.renderRangeArea=z.RangeAreaChart,n.prototype.renderRangeSplineArea=z.RangeSplineAreaChart,n.prototype.renderPie=z.PieChart,i["default"]=n},{"../charts/index":6,"../constants/options":23,"../constants/themes":24,"../core/axis":26,"../core/culture_info":29,"../core/legend":33,"../core/title":35,"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39,"./animator":25,"./canvasjs":27,"./data_series":30,"./event_manager":31,"./layout_manager":32,"./text_block":34,"./tooltip":36}],29:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function n(e){var t;e&&l.cultures[e]&&(t=l.cultures[e]),n.base.constructor.call(this,"CultureInfo",t)}Object.defineProperty(i,"__esModule",{value:!0});var s=e("./canvasjs"),r=a(s),o=e("../helpers/utils"),l=e("../constants/culture");(0,o.extend)(n,r["default"]),i["default"]=n},{"../constants/culture":22,"../helpers/utils":39,"./canvasjs":27}],30:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function n(e,t,i,a,s){n.base.constructor.call(this,"DataSeries",t,i),this.chart=e,this.canvas=e.canvas,this._ctx=e.canvas.ctx,this.index=a,this.noDataPointsInPlotArea=0,this.id=s,this.chart._eventManager.objectMap[s]={id:s,objectType:"dataSeries",dataSeriesIndex:a},this.dataPointIds=[],this.plotUnit=[],this.axisX=null,this.axisY=null,null===this.fillOpacity&&(this.type.match(/area/i)?this.fillOpacity=.7:this.fillOpacity=1),this.axisPlacement=this.getDefaultAxisPlacement(),"undefined"==typeof this._options.indexLabelFontSize&&(this.indexLabelFontSize=this.chart.getAutoFontSize(this.indexLabelFontSize))}Object.defineProperty(i,"__esModule",{value:!0});var s=e("./canvasjs"),r=a(s),o=e("../helpers/utils");(0,o.extend)(n,r["default"]),n.prototype.getDefaultAxisPlacement=function(){var e=this.type;return"column"===e||"line"===e||"stepLine"===e||"spline"===e||"area"===e||"stepArea"===e||"splineArea"===e||"stackedColumn"===e||"stackedLine"===e||"bubble"===e||"scatter"===e||"stackedArea"===e||"stackedColumn100"===e||"stackedLine100"===e||"stackedArea100"===e||"candlestick"===e||"ohlc"===e||"rangeColumn"===e||"rangeArea"===e||"rangeSplineArea"===e?"normal":"bar"===e||"stackedBar"===e||"stackedBar100"===e||"rangeBar"===e?"xySwapped":"pie"===e||"doughnut"===e||"funnel"===e?"none":(window.console.log("Unknown Chart Type: "+e),null)},n.getDefaultLegendMarker=function(e){return"column"===e||"stackedColumn"===e||"stackedLine"===e||"bar"===e||"stackedBar"===e||"stackedBar100"===e||"bubble"===e||"scatter"===e||"stackedColumn100"===e||"stackedLine100"===e||"stepArea"===e||"candlestick"===e||"ohlc"===e||"rangeColumn"===e||"rangeBar"===e||"rangeArea"===e||"rangeSplineArea"===e?"square":"line"===e||"stepLine"===e||"spline"===e||"pie"===e||"doughnut"===e||"funnel"===e?"circle":"area"===e||"splineArea"===e||"stackedArea"===e||"stackedArea100"===e?"triangle":(window.console.log("Unknown Chart Type: "+e),null)},n.prototype.getDataPointAtX=function(e,t){if(!this.dataPoints||0===this.dataPoints.length)return null;var i={dataPoint:null,distance:1/0,index:NaN},a=null,n=0,s=0,r=1,o=1/0,l=0,h=0,d=1e3,c=0;if("none"!==this.chart.plotInfo.axisPlacement){var p=this.dataPoints[this.dataPoints.length-1].x-this.dataPoints[0].x;c=p>0?Math.min(Math.max((this.dataPoints.length-1)/p*(e-this.dataPoints[0].x)>>0,0),this.dataPoints.length):0}for(;;){if(s=r>0?c+n:c-n,s>=0&&s=u?o=u:r>0?l++:h++,l>d&&h>d)break}else if(0>c-n&&c+n>=this.dataPoints.length)break;-1===r?(n++,r=1):r=-1}return t||i.dataPoint.x!==e?t&&null!==i.dataPoint?i:null:i},n.prototype.getDataPointAtXY=function(e,t,i){if(!this.dataPoints||0===this.dataPoints.length)return null;i=i||!1;var a=[],n=0,s=0,r=1,l=!1,h=1/0,d=0,c=0,p=1e3,x=0;if("none"!==this.chart.plotInfo.axisPlacement){var u=this.chart.axisX.getXValueAt({x:e,y:t}),m=this.dataPoints[this.dataPoints.length-1].x-this.dataPoints[0].x;x=m>0?Math.min(Math.max((this.dataPoints.length-1)/m*(u-this.dataPoints[0].x)>>0,0),this.dataPoints.length):0}for(;;){if(s=r>0?x+n:x-n,s>=0&&s=g.x1&&e<=g.x2&&t>=g.y1&&t<=g.y2&&(a.push({dataPoint:y,dataPointIndex:s,dataSeries:this,distance:Math.min(Math.abs(g.x1-e),Math.abs(g.x2-e),Math.abs(g.y1-t),Math.abs(g.y2-t))}),l=!0);break;case"line":case"stepLine":case"spline":case"area":case"stepArea":case"stackedArea":case"stackedArea100":case"splineArea":case"scatter":var b=(0,o.getProperty)("markerSize",y,this)||4,M=i?20:b;f=Math.sqrt(Math.pow(g.x1-e,2)+Math.pow(g.y1-t,2)),M>=f&&a.push({dataPoint:y,dataPointIndex:s,dataSeries:this,distance:f});var P=Math.abs(g.x1-e);h>=P?h=P:r>0?d++:c++,b/2>=f&&(l=!0);break;case"rangeArea":case"rangeSplineArea":var b=(0,o.getProperty)("markerSize",y,this)||4,M=i?20:b;f=Math.min(Math.sqrt(Math.pow(g.x1-e,2)+Math.pow(g.y1-t,2)),Math.sqrt(Math.pow(g.x1-e,2)+Math.pow(g.y2-t,2))),M>=f&&a.push({dataPoint:y,dataPointIndex:s,dataSeries:this,distance:f});var P=Math.abs(g.x1-e);h>=P?h=P:r>0?d++:c++,b/2>=f&&(l=!0);break;case"bubble":var b=g.size;f=Math.sqrt(Math.pow(g.x1-e,2)+Math.pow(g.y1-t,2)),b/2>=f&&(a.push({dataPoint:y,dataPointIndex:s,dataSeries:this,distance:f}),l=!0);break;case"pie":case"doughnut":var S=g.center,T="doughnut"===this.type?g.percentInnerRadius*g.radius:0;if(f=Math.sqrt(Math.pow(S.x-e,2)+Math.pow(S.y-t,2)),fT){var C=t-S.y,k=e-S.x,w=Math.atan2(C,k);0>w&&(w+=2*Math.PI),w=Number(((w/Math.PI*180%360+360)%360).toFixed(12));var _=Number(((g.startAngle/Math.PI*180%360+360)%360).toFixed(12)),A=Number(((g.endAngle/Math.PI*180%360+360)%360).toFixed(12));0===A&&g.endAngle>1&&(A=360),_>=A&&0!==y.y&&(A+=360,_>w&&(w+=360)),w>_&&A>w&&(a.push({dataPoint:y,dataPointIndex:s,dataSeries:this,distance:0}),l=!0)}break;case"candlestick":(e>=g.x1-g.borderThickness/2&&e<=g.x2+g.borderThickness/2&&t>=g.y2-g.borderThickness/2&&t<=g.y3+g.borderThickness/2||Math.abs(g.x2-e+g.x1-e)=g.y1&&t<=g.y4)&&(a.push({dataPoint:y,dataPointIndex:s,dataSeries:this,distance:Math.min(Math.abs(g.x1-e),Math.abs(g.x2-e),Math.abs(g.y2-t),Math.abs(g.y3-t))}),l=!0);break;case"ohlc":(Math.abs(g.x2-e+g.x1-e)=g.y2&&t<=g.y3||e>=g.x1&&e<=(g.x2+g.x1)/2&&t>=g.y1-g.borderThickness/2&&t<=g.y1+g.borderThickness/2||e>=(g.x1+g.x2)/2&&e<=g.x2&&t>=g.y4-g.borderThickness/2&&t<=g.y4+g.borderThickness/2)&&(a.push({dataPoint:y,dataPointIndex:s,dataSeries:this,distance:Math.min(Math.abs(g.x1-e),Math.abs(g.x2-e),Math.abs(g.y2-t),Math.abs(g.y3-t))}),l=!0)}if(l||d>p&&c>p)break}}else if(0>x-n&&x+n>=this.dataPoints.length)break;-1===r?(n++,r=1):r=-1}for(var L=null,I=0;I0){var S=null,T=0,C=0,k=0;C=null!==this.itemWidth?null!==this.itemMaxWidth?Math.min(this.itemWidth,this.itemMaxWidth,s):Math.min(this.itemWidth,s):null!==this.itemMaxWidth?Math.min(this.itemMaxWidth,s):s,g=0===g?.6*this.lineHeight:g,C-=g+.1*this.horizontalSpacing;for(var c=0;c=o||"undefined"==typeof o||0>=C||"undefined"==typeof C||("horizontal"===this.orientation?(b.textBlock=new d["default"](this.ctx,{x:0,y:0,maxWidth:C,maxHeight:this.itemWrap?o:this.lineHeight,angle:0,text:b.text,horizontalAlign:"left",fontSize:this.fontSize,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontColor:this.fontColor,fontStyle:this.fontStyle,textBaseline:"top"}),b.textBlock.measureText(),null!==this.itemWidth&&(b.textBlock.width=this.itemWidth-(g+.1*this.horizontalSpacing+("line"===b.chartType||"spline"===b.chartType||"stepLine"===b.chartType?2*(.1*this.lineHeight):0))),(!S||S.width+Math.round(b.textBlock.width+.1*this.horizontalSpacing+g+(0===S.width?0:this.horizontalSpacing)+("line"===b.chartType||"spline"===b.chartType||"stepLine"===b.chartType?2*(.1*this.lineHeight):0))>s)&&(S={items:[],width:0},h.push(S),this.height+=k,k=0),k=Math.max(k,b.textBlock.height),b.textBlock.x=S.width,b.textBlock.y=0,S.width+=Math.round(b.textBlock.width+.1*this.horizontalSpacing+g+(0===S.width?0:this.horizontalSpacing)+("line"===b.chartType||"spline"===b.chartType||"stepLine"===b.chartType?2*(.1*this.lineHeight):0)),S.items.push(b),this.width=Math.max(S.width,this.width)):(b.textBlock=new d["default"](this.ctx,{x:0,y:0,maxWidth:C,maxHeight:this.itemWrap===!0?o:1.5*this.fontSize,angle:0,text:b.text,horizontalAlign:"left",fontSize:this.fontSize,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontColor:this.fontColor,fontStyle:this.fontStyle,textBaseline:"top"}),b.textBlock.measureText(),null!==this.itemWidth&&(b.textBlock.width=this.itemWidth-(g+.1*this.horizontalSpacing+("line"===b.chartType||"spline"===b.chartType||"stepLine"===b.chartType?2*(.1*this.lineHeight):0))),this.height<=o?(S={items:[],width:0},h.push(S)):(S=h[T],T=(T+1)%h.length),this.height+=b.textBlock.height,b.textBlock.x=S.width,b.textBlock.y=0,S.width+=Math.round(b.textBlock.width+.1*this.horizontalSpacing+g+(0===S.width?0:this.horizontalSpacing)+("line"===b.chartType||"spline"===b.chartType||"stepLine"===b.chartType?2*(.1*this.lineHeight):0)),S.items.push(b),this.width=Math.max(S.width,this.width)))}this.itemWrap===!1?this.height=h.length*this.lineHeight:this.height+=k,this.height=Math.min(o,this.height),this.width=Math.min(s,this.width)}"top"===this.verticalAlign?(n="left"===this.horizontalAlign?t.x1:"right"===this.horizontalAlign?t.x2-this.width:t.x1+t.width/2-this.width/2,a=t.y1):"center"===this.verticalAlign?(n="left"===this.horizontalAlign?t.x1:"right"===this.horizontalAlign?t.x2-this.width:t.x1+t.width/2-this.width/2,a=t.y1+t.height/2-this.height/2):"bottom"===this.verticalAlign&&(n="left"===this.horizontalAlign?t.x1:"right"===this.horizontalAlign?t.x2-this.width:t.x1+t.width/2-this.width/2,a=t.y2-this.height),this.items=l;for(var c=0;c0?Math.max(k,b.textBlock.height):b.textBlock.height,this.chart.data[b.dataSeriesIndex].visible||(this.ctx.globalAlpha=1);var B=intToHexColorString(b.id);this.ghostCtx.fillStyle=B,this.ghostCtx.beginPath(),this.ghostCtx.fillRect(I,b.textBlock.y,b.textBlock.x+b.textBlock.width-I,b.textBlock.height),b.x1=this.chart._eventManager.objectMap[b.id].x1=I,b.y1=this.chart._eventManager.objectMap[b.id].y1=b.textBlock.y,b.x2=this.chart._eventManager.objectMap[b.id].x2=b.textBlock.x+b.textBlock.width,b.y2=this.chart._eventManager.objectMap[b.id].y2=b.textBlock.y+b.textBlock.height}w+=k}e.layoutManager.registerSpace(i,{width:this.width+2+2,height:this.height+5+5}),this.bounds={x1:n,y1:a,x2:n+this.width,y2:a+this.height}},i["default"]=n},{"../helpers/render":38,"../helpers/utils":39,"./canvasjs":27,"./data_series":30,"./text_block":34}],34:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function n(e,t){n.base.constructor.call(this,"TextBlock",t),this.ctx=e,this._isDirty=!0,this._wrappedText=null,this._lineHeight=(0,o.getFontHeightInPixels)(this.fontFamily,this.fontSize,this.fontWeight)}Object.defineProperty(i,"__esModule",{value:!0});var s=e("./canvasjs"),r=a(s),o=e("../helpers/utils");(0,o.extend)(n,r["default"]),n.prototype.render=function(e){e&&this.ctx.save();var t=this.ctx.font;this.ctx.textBaseline=this.textBaseline;var i=0;this._isDirty&&this.measureText(this.ctx),this.ctx.translate(this.x,this.y+i),"middle"===this.textBaseline&&(i=-this._lineHeight/2),this.ctx.font=this._getFontString(),this.ctx.rotate(Math.PI/180*this.angle);var a=0,n=this.padding,s=null;(this.borderThickness>0&&this.borderColor||this.backgroundColor)&&this.ctx.roundRect(0,i,this.width,this.height,this.cornerRadius,this.borderThickness,this.backgroundColor,this.borderColor),this.ctx.fillStyle=this.fontColor;for(var r=0;r=n;){r=Math.floor((n+s)/2);var o=e.substr(0,r+1);if(a=this.ctx.measureText(o).width,t>a)n=r+1;else{if(!(a>t))break;s=r-1}}a>t&&o.length>1&&(o=o.substr(0,o.length-1),a=this.ctx.measureText(o).width);var l=!0;if((o.length===e.length||" "===e[o.length])&&(l=!1),l){var h=o.split(" ");h.length>1&&h.pop(),o=h.join(" "),a=this.ctx.measureText(o).width}return{text:o,width:a}},n.prototype._wrapText=function(){var e=new String((0,o.trimString)(String(this.text))),t=[],i=this.ctx.font,a=0,n=0;for(this.ctx.font=this._getFontString();e.length>0;){var s=this.maxWidth-2*this.padding,r=this.maxHeight-2*this.padding,l=this._getLineWithWidth(e,s,!1);if(l.height=this._lineHeight,t.push(l),n=Math.max(n,l.width),a+=l.height,e=(0,o.trimString)(e.slice(l.text.length,e.length)),r&&a>r){var l=t.pop();a-=l.height}}this._wrappedText={lines:t,width:n,height:a},this.width=n+2*this.padding,this.height=a+2*this.padding,this.ctx.font=i},n.prototype._getFontString=function(){return(0,o.getFontString)("",this,null)},i["default"]=n},{"../helpers/utils":39,"./canvasjs":27}],35:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function n(e,t){n.base.constructor.call(this,"Title",t,e.theme),this.chart=e,this.canvas=e.canvas,this.ctx=this.chart.ctx,"undefined"==typeof this._options.fontSize&&(this.fontSize=this.chart.getAutoFontSize(this.fontSize)),this.width=null,this.height=null,this.bounds={x1:null,y1:null,x2:null,y2:null}}Object.defineProperty(i,"__esModule",{value:!0});var s=e("./canvasjs"),r=a(s),o=e("./text_block"),l=a(o),h=e("../helpers/utils");(0,h.extend)(n,r["default"]),n.prototype.render=function(){if(this.text){var e,t,i=this.dockInsidePlotArea?this.chart.plotArea:this.chart,a=i.layoutManager.getFreeSpace(),n=a.x1,s=a.y1,r=0,o=0,h=2,d=this.chart._menuButton&&this.chart.exportEnabled&&"top"===this.verticalAlign?22:0;"top"===this.verticalAlign||"bottom"===this.verticalAlign?(null===this.maxWidth&&(this.maxWidth=a.width-2*h-d*("center"===this.horizontalAlign?2:1)),o=.5*a.height-this.margin-h,r=0):"center"===this.verticalAlign&&("left"===this.horizontalAlign||"right"===this.horizontalAlign?(null===this.maxWidth&&(this.maxWidth=a.height-2*h),o=.5*a.width-this.margin-h):"center"===this.horizontalAlign&&(null===this.maxWidth&&(this.maxWidth=a.width-2*h),o=.5*a.height-2*h)),this.wrap||(o=Math.min(o,Math.max(1.5*this.fontSize,this.fontSize+2.5*this.padding)));var c=new l["default"](this.ctx,{fontSize:this.fontSize,fontFamily:this.fontFamily,fontColor:this.fontColor,fontStyle:this.fontStyle,fontWeight:this.fontWeight,horizontalAlign:this.horizontalAlign,verticalAlign:this.verticalAlign,borderColor:this.borderColor,borderThickness:this.borderThickness,backgroundColor:this.backgroundColor,maxWidth:this.maxWidth,maxHeight:o,cornerRadius:this.cornerRadius,text:this.text,padding:this.padding,textBaseline:"top"}),p=c.measureText();"top"===this.verticalAlign||"bottom"===this.verticalAlign?("top"===this.verticalAlign?(s=a.y1+h,t="top"):"bottom"===this.verticalAlign&&(s=a.y2-h-p.height,t="bottom"),"left"===this.horizontalAlign?n=a.x1+h:"center"===this.horizontalAlign?n=a.x1+a.width/2-p.width/2:"right"===this.horizontalAlign&&(n=a.x2-h-p.width-d),e=this.horizontalAlign,this.width=p.width,this.height=p.height):"center"===this.verticalAlign&&("left"===this.horizontalAlign?(n=a.x1+h,s=a.y2-h-(this.maxWidth/2-p.width/2),r=-90,t="left",this.width=p.height,this.height=p.width):"right"===this.horizontalAlign?(n=a.x2-h,s=a.y1+h+(this.maxWidth/2-p.width/2),r=90,t="right",this.width=p.height,this.height=p.width):"center"===this.horizontalAlign&&(s=i.y1+(i.height/2-p.height/2),n=i.x1+(i.width/2-p.width/2),t="center",this.width=p.width,this.height=p.height),e="center"),c.x=n,c.y=s,c.angle=r,c.horizontalAlign=e,c.render(!0),i.layoutManager.registerSpace(t,{width:this.width+("left"===t||"right"===t?this.margin+h:0),height:this.height+("top"===t||"bottom"===t?this.margin+h:0)}),this.bounds={x1:n,y1:s,x2:n+this.width,y2:s+this.height},this.ctx.textBaseline="top"}},i["default"]=n},{"../helpers/utils":39,"./canvasjs":27,"./text_block":34}],36:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function n(e,t,i){n.base.constructor.call(this,"ToolTip",t,i),this.chart=e,this.canvas=e.canvas,this.ctx=this.chart.ctx,this.currentSeriesIndex=-1,this.currentDataPointIndex=-1,this._timerId=0,this._prevX=NaN,this._prevY=NaN,this._initialize()}Object.defineProperty(i,"__esModule",{value:!0});var s=e("../helpers/animator"),r=(a(s),e("../helpers/render")),o=a(r),l=e("./canvasjs"),h=a(l),d=e("../helpers/utils");(0,d.extend)(n,h["default"]),n.prototype._initialize=function(){if(this.enabled){this.container=document.createElement("div"),this.container.setAttribute("class","canvasjs-chart-tooltip"),this.container.style.position="absolute",this.container.style.height="auto",this.container.style.boxShadow="1px 1px 2px 2px rgba(0,0,0,0.1)",this.container.style.zIndex="1000",this.container.style.display="none";var e='
=0&&(h.dataSeries=this.chart.data[l],null!==h.dataPoint.y&&o.push(h))}if(0===o.length)return;o.sort(function(e,t){return e.distance-t.distance});var c=o[0];for(l=0;l0&&"undefined"!=typeof this.chart._eventManager.objectMap[x]){var u=this.chart._eventManager.objectMap[x];if("legendItem"===u.objectType)return;this.currentSeriesIndex=u.dataSeriesIndex,this.currentDataPointIndex=u.dataPointIndex>=0?u.dataPointIndex:-1}else this.currentDataPointIndex=-1}else this.currentDataPointIndex=-1;if(this.currentSeriesIndex>=0){n=this.chart.data[this.currentSeriesIndex];var h={};if(this.currentDataPointIndex>=0)a=n.dataPoints[this.currentDataPointIndex],h.dataSeries=n,h.dataPoint=a,h.index=this.currentDataPointIndex,h.distance=Math.abs(a.x-r);else{if(!this.enabled||"line"!==n.type&&"stepLine"!==n.type&&"spline"!==n.type&&"area"!==n.type&&"stepArea"!==n.type&&"splineArea"!==n.type&&"stackedArea"!==n.type&&"stackedArea100"!==n.type&&"rangeArea"!==n.type&&"rangeSplineArea"!==n.type&&"candlestick"!==n.type&&"ohlc"!==n.type)return;var r=n.axisX.conversionParameters.minimum+(e-n.axisX.conversionParameters.reference)/n.axisX.conversionParameters.pixelPerUnit;h=n.getDataPointAtX(r,!0),h.dataSeries=n,this.currentDataPointIndex=h.index,a=h.dataPoint}if(null!==h.dataPoint.y)if(h.dataSeries.axisY)if(h.dataPoint.y.length>0){for(var m=0,l=0;lh.dataSeries.axisY.viewportMaximum&&m++;m-h.dataPoint.y.length&&s.push(h)}else h.dataPoint.y>=h.dataSeries.axisY.viewportMinimum&&h.dataPoint.y<=h.dataSeries.axisY.viewportMaximum&&s.push(h);else s.push(h)}}if(s.length>0&&(this.highlightObjects(s),this.enabled)){var v="";if(v=this.getToolTipInnerHTML({entries:s}),null!==v){this.contentDiv.innerHTML=v,this.contentDiv.innerHTML=v;var g=!1;"none"===this.container.style.display&&(g=!0,this.container.style.display="block");try{this.contentDiv.style.background=this.backgroundColor?this.backgroundColor:d.isCanvasSupported?"rgba(255,255,255,.9)":"rgb(255,255,255)",this.contentDiv.style.borderRightColor=this.contentDiv.style.borderLeftColor=this.contentDiv.style.borderColor=this.borderColor?this.borderColor:s[0].dataPoint.color?s[0].dataPoint.color:s[0].dataSeries.color?s[0].dataSeries.color:s[0].dataSeries._colorSet[s[0].index%s[0].dataSeries._colorSet.length],this.contentDiv.style.borderWidth=this.borderThickness||0===this.borderThickness?this.borderThickness+"px":"2px",this.contentDiv.style.borderRadius=this.cornerRadius||0===this.cornerRadius?this.cornerRadius+"px":"5px",this.container.style.borderRadius=this.contentDiv.style.borderRadius,this.contentDiv.style.fontSize=this.fontSize||0===this.fontSize?this.fontSize+"px":"14px",this.contentDiv.style.color=this.fontColor?this.fontColor:"#000000",this.contentDiv.style.fontFamily=this.fontFamily?this.fontFamily:"Calibri, Arial, Georgia, serif;",this.contentDiv.style.fontWeight=this.fontWeight?this.fontWeight:"normal",this.contentDiv.style.fontStyle=this.fontStyle?this.fontStyle:d.isCanvasSupported?"italic":"normal"}catch(y){}var f;"pie"===s[0].dataSeries.type||"doughnut"===s[0].dataSeries.type||"funnel"===s[0].dataSeries.type||"bar"===s[0].dataSeries.type||"rangeBar"===s[0].dataSeries.type||"stackedBar"===s[0].dataSeries.type||"stackedBar100"===s[0].dataSeries.type?f=e-10-this.container.clientWidth:(f=s[0].dataSeries.axisX.conversionParameters.reference+s[0].dataSeries.axisX.conversionParameters.pixelPerUnit*(s[0].dataPoint.x-s[0].dataSeries.axisX.conversionParameters.minimum)-this.container.clientWidth<<0,f-=10),0>f&&(f+=this.container.clientWidth+20),f+this.container.clientWidth>this.chart._container.clientWidth&&(f=Math.max(0,this.chart._container.clientWidth-this.container.clientWidth)),f+="px",i=1!==s.length||this.shared||"line"!==s[0].dataSeries.type&&"stepLine"!==s[0].dataSeries.type&&"spline"!==s[0].dataSeries.type&&"area"!==s[0].dataSeries.type&&"stepArea"!==s[0].dataSeries.type&&"splineArea"!==s[0].dataSeries.type&&"stackedArea"!==s[0].dataSeries.type&&"stackedArea100"!==s[0].dataSeries.type?"bar"===s[0].dataSeries.type||"rangeBar"===s[0].dataSeries.type||"stackedBar"===s[0].dataSeries.type||"stackedBar100"===s[0].dataSeries.type?s[0].dataSeries.axisX.conversionParameters.reference+s[0].dataSeries.axisX.conversionParameters.pixelPerUnit*(s[0].dataPoint.x-s[0].dataSeries.axisX.viewportMinimum)+.5<<0:t:s[0].dataSeries.axisY.conversionParameters.reference+s[0].dataSeries.axisY.conversionParameters.pixelPerUnit*(s[0].dataPoint.y-s[0].dataSeries.axisY.viewportMinimum)+.5<<0,i=-i+10,i+this.container.clientHeight+5>0&&(i-=i+this.container.clientHeight+5-0),i+="px",this.container.style.left=f,this.container.style.bottom=i,!this.animationEnabled||g?this.disableAnimation():this.enableAnimation()}else this.hide(!1)}}},n.prototype.highlightObjects=function(e){var t=this.chart.overlaidCanvasCtx;this.chart.resetOverlayedCanvas(),t.clearRect(0,0,this.chart.width,this.chart.height),t.save();var i=this.chart.plotArea,a=0;t.rect(i.x1,i.y1,i.x2-i.x1,i.y2-i.y1),t.clip();for(var n=0;n{name}:  {y}":"bubble"===a.type?r+=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:"{name}:  {y},   {z}":"pie"===a.type||"doughnut"===a.type||"funnel"===a.type?r+=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:"  {y}":"rangeColumn"===a.type||"rangeBar"===a.type||"rangeArea"===a.type||"rangeSplineArea"===a.type?r+=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:"{name}:  {y[0]}, {y[1]}":("candlestick"===a.type||"ohlc"===a.type)&&(r+=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:"{name}:
Open:   {y[0]}
High:    {y[1]}
Low:   {y[2]}
Close:   {y[3]}"),null===i&&(i=""),this.reversed===!0?(i=this.chart.replaceKeywordsWithValue(r,n,a,s)+i,l"+i)):(i+=this.chart.replaceKeywordsWithValue(r,n,a,s),l")));null!==i&&(i=d+i)}else{if(a=t[0].dataSeries,n=t[0].dataPoint,s=t[0].index,null===n.toolTipContent||"undefined"==typeof n.toolTipContent&&null===a._options.toolTipContent)return null;"line"===a.type||"stepLine"===a.type||"spline"===a.type||"area"===a.type||"stepArea"===a.type||"splineArea"===a.type||"column"===a.type||"bar"===a.type||"scatter"===a.type||"stackedColumn"===a.type||"stackedColumn100"===a.type||"stackedBar"===a.type||"stackedBar100"===a.type||"stackedArea"===a.type||"stackedArea100"===a.type?r=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:""+(n.label?"{label}":"{x}")+" :  {y}":"bubble"===a.type?r=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:""+(n.label?"{label}":"{x}")+":  {y},   {z}":"pie"===a.type||"doughnut"===a.type||"funnel"===a.type?r=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:(n.name?"{name}:  ":n.label?"{label}:  ":"")+"{y}":"rangeColumn"===a.type||"rangeBar"===a.type||"rangeArea"===a.type||"rangeSplineArea"===a.type?r=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:""+(n.label?"{label}":"{x}")+" :  {y[0]},  {y[1]}":("candlestick"===a.type||"ohlc"===a.type)&&(r=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:""+(n.label?"{label}":"{x}")+"
Open:   {y[0]}
High:    {y[1]}
Low:     {y[2]}
Close:   {y[3]}"),null===i&&(i=""),i+=this.chart.replaceKeywordsWithValue(r,n,a,s)}return i},n.prototype.enableAnimation=function(){this.container.style.WebkitTransition||(this.container.style.WebkitTransition="left .2s ease-out, bottom .2s ease-out",this.container.style.MozTransition="left .2s ease-out, bottom .2s ease-out",this.container.style.MsTransition="left .2s ease-out, bottom .2s ease-out",this.container.style.transition="left .2s ease-out, bottom .2s ease-out")},n.prototype.disableAnimation=function(){this.container.style.WebkitTransition&&(this.container.style.WebkitTransition="",this.container.style.MozTransition="",this.container.style.MsTransition="",this.container.style.transition="")},n.prototype.hide=function(e){this.enabled&&(e="undefined"==typeof e?!0:e,this.container.style.display="none",this.currentSeriesIndex=-1,this._prevX=NaN,this._prevY=NaN,e&&this.chart.resetOverlayedCanvas())},i["default"]=n},{"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39,"./canvasjs":27}],37:[function(e,t,i){"use strict";function a(e,t){if(0!==e){var i=t.dest,a=t.source.canvas,n=t.animationBase,s=n-n*e;i.drawImage(a,0,0,a.width,a.height,0,s,i.canvas.width/devicePixelBackingStoreRatio,e*i.canvas.height/devicePixelBackingStoreRatio)}}function n(e,t){if(0!==e){var i=t.dest,a=t.source.canvas,n=t.animationBase,s=n-n*e;i.drawImage(a,0,0,a.width,a.height,s,0,e*i.canvas.width/devicePixelBackingStoreRatio,i.canvas.height/devicePixelBackingStoreRatio)}}function s(e,t){if(0!==e){var i=t.dest,a=t.source.canvas;i.save(),e>0&&i.drawImage(a,0,0,a.width*e,a.height,0,0,a.width*e/devicePixelBackingStoreRatio,a.height/devicePixelBackingStoreRatio),i.restore()}}function r(e,t){if(0!==e){var i=t.dest,a=t.source.canvas;i.save(),i.globalAlpha=e,i.drawImage(a,0,0,a.width,a.height,0,0,i.canvas.width/devicePixelBackingStoreRatio,i.canvas.height/devicePixelBackingStoreRatio),i.restore()}}Object.defineProperty(i,"__esModule",{value:!0});var o={linear:function(e,t,i,a){return i*e/a+t},easeOutQuad:function(e,t,i,a){return-i*(e/=a)*(e-2)+t},easeOutQuart:function(e,t,i,a){return-i*((e=e/a-1)*e*e*e-1)+t},easeInQuad:function(e,t,i,a){return i*(e/=a)*e+t},easeInQuart:function(e,t,i,a){return i*(e/=a)*e*e*e+t}};i["default"]={yScaleAnimation:a,xScaleAnimation:n,xClipAnimation:s,fadeInAnimation:r,easing:o}},{}],38:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var a={drawMarker:function(e,t,i,a,n,s,r,o){if(i){var l=1;i.fillStyle=s?s:"#000000",i.strokeStyle=r?r:"#000000",i.lineWidth=o?o:0,"circle"===a?(i.moveTo(e,t),i.beginPath(),i.arc(e,t,n/2,0,2*Math.PI,!1),s&&i.fill(),o&&(r?i.stroke():(l=i.globalAlpha,i.globalAlpha=.15,i.strokeStyle="black",i.stroke(),i.globalAlpha=l))):"square"===a?(i.beginPath(),i.rect(e-n/2,t-n/2,n,n),s&&i.fill(),o&&(r?i.stroke():(l=i.globalAlpha,i.globalAlpha=.15,i.strokeStyle="black",i.stroke(), -i.globalAlpha=l))):"triangle"===a?(i.beginPath(),i.moveTo(e-n/2,t+n/2),i.lineTo(e+n/2,t+n/2),i.lineTo(e,t-n/2),i.closePath(),s&&i.fill(),o&&(r?i.stroke():(l=i.globalAlpha,i.globalAlpha=.15,i.strokeStyle="black",i.stroke(),i.globalAlpha=l)),i.beginPath()):"cross"===a&&(i.strokeStyle=s,o=n/4,i.lineWidth=o,i.beginPath(),i.moveTo(e-n/2,t-n/2),i.lineTo(e+n/2,t+n/2),i.stroke(),i.moveTo(e+n/2,t-n/2),i.lineTo(e-n/2,t+n/2),i.stroke())}},drawMarkers:function(e){for(var t=0;te&&(i=!0,e*=-1),e=""+e,t=t?t:1;e.length0&&this.stroke()}}function d(e,t){return e-t}function c(e,t){return e.x-t.x}function p(e){var t=((16711680&e)>>16).toString(16),i=((65280&e)>>8).toString(16),a=((255&e)>>0).toString(16);return t=t.length<2?"0"+t:t,i=i.length<2?"0"+i:i,a=a.length<2?"0"+a:a,"#"+t+i+a}function x(e,t,i){var a=e<<16|t<<8|i;return a}function u(e){var t=[],i=(16711680&e)>>16,a=(65280&e)>>8,n=(255&e)>>0;return t[0]=i,t[1]=a,t[2]=n,t}function m(e){var t=this.length>>>0,i=Number(arguments[1])||0;for(i=0>i?Math.ceil(i):Math.floor(i),0>i&&(i+=t);t>i;i++)if(i in this&&this[i]===e)return i;return-1}function v(e){return e.indexOf||(e.indexOf=m),e}function g(e,t,i){i=i||"normal";var a=e+"_"+t+"_"+i,n=X[a];if(isNaN(n)){try{var s="position:absolute; left:0px; top:-20000px; padding:0px;margin:0px;border:none;white-space:pre;line-height:normal;font-family:"+e+"; font-size:"+t+"px; font-weight:"+i+";";if(!Y){var r=document.body;Y=document.createElement("span"),Y.innerHTML="";var o=document.createTextNode("Mpgyi");Y.appendChild(o),r.appendChild(Y)}Y.style.display="",Y.setAttribute("style",s),n=Math.round(Y.offsetHeight),Y.style.display="none"}catch(l){n=Math.ceil(1.1*t)}n=Math.max(n,t),X[a]=n}return n}function y(e,t){e=e||"solid";var i=[],a={solid:[],shortDash:[3,1],shortDot:[1,1],shortDashDot:[3,1,1,1],shortDashDotDot:[3,1,1,1,1,1],dot:[1,2],dash:[4,2],dashDot:[4,2,1,2],longDash:[8,2],longDashDot:[8,2,1,2],longDashDotDot:[8,2,1,2,1,2]};if(i=a[e])for(var n=0;nP?"a":"p";case"tt":return 12>P?"am":"pm";case"T":return 12>P?"A":"P";case"TT":return 12>P?"AM":"PM";case"K":return v?"UTC":(String(l).match(s)||[""]).pop().replace(r,"");case"z":return(k>0?"-":"+")+Math.floor(Math.abs(k)/60);case"zz":return(k>0?"-":"+")+o(Math.floor(Math.abs(k)/60),2);case"zzz":return(k>0?"-":"+")+o(Math.floor(Math.abs(k)/60),2)+o(Math.abs(k)%60,2);default:return e.slice(1,e.length-1)}})}}function M(e,t,i){if(null===e)return"";e=Number(e);var a=0>e?!0:!1;a&&(e*=-1);var n=i?i.decimalSeparator:".",s=i?i.digitGroupSeparator:",",r="";t=String(t);var l=1,h="",d="",c=-1,p=[],x=[],u=0,m=0,v=0,g=!1,y=0;d=t.match(/"[^"]*"|'[^']*'|[eE][+-]*[0]+|[,]+[.]|‰|./g);for(var f=null,b=0;d&&bc)c=b;else{if("%"===f)l*=100;else{if("‰"===f){l*=1e3;continue}if(","===f[0]&&"."===f[f.length-1]){l/=Math.pow(1e3,f.length-1),c=b+f.length-1;continue}"E"!==f[0]&&"e"!==f[0]||"0"!==f[f.length-1]||(g=!0)}0>c?(p.push(f),"#"===f||"0"===f?u++:","===f&&v++):(x.push(f),("#"===f||"0"===f)&&m++)}if(g){var M=Math.floor(e);y=(0===M?"":String(M)).length-u,l/=Math.pow(10,y)}e*=l,0>c&&(c=b),r=e.toFixed(m);var P=r.split("."),S=(P[0]+"").split(""),T=(P[1]+"").split("");S&&"0"===S[0]&&S.shift();for(var C=0,k=0,w=0,_=0,A=0;p.length>0;)if(f=p.pop(),"#"===f||"0"===f)if(C++,C===u){var L=S;if(S=[],"0"===f)for(var I=u-k-(L?L.length:0);I>0;)L.unshift("0"),I--;for(;L.length>0;)h=L.pop()+h,A++,A%_===0&&w===v&&L.length>0&&(h=s+h);a&&(h="-"+h)}else S.length>0?(h=S.pop()+h,k++,A++):"0"===f&&(h="0"+h,k++,A++),A%_===0&&w===v&&S.length>0&&(h=s+h);else"E"!==f[0]&&"e"!==f[0]||"0"!==f[f.length-1]||!/[eE][+-]*[0]+/.test(f)?","===f?(w++,_=A,A=0,S.length>0&&(h=s+h)):h=f.length>1&&('"'===f[0]&&'"'===f[f.length-1]||"'"===f[0]&&"'"===f[f.length-1])?f.slice(1,f.length-1)+h:f+h:(f=0>y?f.replace("+","").replace("-",""):f.replace("-",""),h+=f.replace(/[0]+/,function(e){return o(y,e.length)}));for(var B="",F=!1;x.length>0;)f=x.shift(),"#"===f||"0"===f?T.length>0&&0!==Number(T.join(""))?(B+=T.shift(),F=!0):"0"===f&&(B+="0",F=!0):f.length>1&&('"'===f[0]&&'"'===f[f.length-1]||"'"===f[0]&&"'"===f[f.length-1])?B+=f.slice(1,f.length-1):"E"!==f[0]&&"e"!==f[0]||"0"!==f[f.length-1]||!/[eE][+-]*[0]+/.test(f)?B+=f:(f=0>y?f.replace("+","").replace("-",""):f.replace("-",""),B+=f.replace(/[0]+/,function(e){return o(y,e.length)}));return h+=(F?n:"")+B}function P(e,t,i){e*=R,t*=R;for(var a=i.getImageData(e,t,2,2).data,n=!0,s=0;4>s;s++)if(a[s]!==a[s+4]|a[s]!==a[s+8]|a[s]!==a[s+12]){n=!1;break}return n?x(a[0],a[1],a[2]):0}function S(e){var t=0,i=0;return e=e||window.event,e.offsetX||0===e.offsetX?(t=e.offsetX,i=e.offsetY):e.layerX||0==e.layerX?(t=e.layerX,i=e.layerY):(t=e.pageX-e.target.offsetLeft,i=e.pageY-e.target.offsetTop),{x:t,y:i}}function T(e,t,i){var a="",n=e?e+"FontStyle":"fontStyle",s=e?e+"FontWeight":"fontWeight",r=e?e+"FontSize":"fontSize",o=e?e+"FontFamily":"fontFamily";a+=t[n]?t[n]+" ":i&&i[n]?i[n]+" ":"",a+=t[s]?t[s]+" ":i&&i[s]?i[s]+" ":"",a+=t[r]?t[r]+"px ":i&&i[r]?i[r]+"px ":"";var l=t[o]?t[o]+"":i&&i[o]?i[o]+"":"";if(!V&&l){var h=l.split(",")[0];"'"!==h[0]&&'"'!==h[0]&&(h="'"+h+"'"),a+=h}else a+=l;return a}function C(e,t,i){var a=e in t?t[e]:i[e];return a}function k(e,t,i){if(V&&O){var a=e.getContext("2d");W=a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||a.backingStorePixelRatio||1,R=E/W,e.width=t*R,e.height=i*R,E!==W&&(e.style.width=t+"px",e.style.height=i+"px",a.scale(R,R))}else e.width=t,e.height=i}function w(e,t){var i=document.createElement("canvas");return i.setAttribute("class","canvasjs-chart-canvas"),k(i,e,t),V||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(i),i}function _(e,t,i){if(e&&t&&i){var a=i+"."+("jpeg"===t?"jpg":t),n="image/"+t,s=e.toDataURL(n),r=!1,o=document.createElement("a");o.download=a,o.href=s,o.target="_blank";if("undefined"!=typeof Blob&&new Blob){for(var l=s.replace(/^data:[a-z\/]*;base64,/,""),h=atob(l),d=new ArrayBuffer(h.length),c=new Uint8Array(d),p=0;p
Please right click on the image and save it to your device
"),m.document.close()}}}function A(e,t,i){t.getAttribute("state")!==i&&(t.setAttribute("state",i),t.setAttribute("type","button"),t.style.position="relative",t.style.margin="0px 0px 0px 0px",t.style.padding="3px 4px 0px 4px",t.style.cssFloat="left",t.setAttribute("title",e._cultureInfo[i+"Text"]),t.innerHTML=""+e._cultureInfo[i+"Text"]+"")}function L(){for(var e=null,t=0;t=0?t/100:1);return!isNaN(i)&&t>=i&&i>=0?i:t}function z(e,t,i,a,n,s,r,o,l,h,d,c,p){"undefined"==typeof p&&(p=1),r=r||0,o=o||"black";var x=t,u=a,m=i,v=n;if(a-t>15&&n-i>15)var g=8;else var g=.35*Math.min(a-t,n-i);var y="rgba(255, 255, 255, .4)",f="rgba(255, 255, 255, 0.1)",b=s;if(e.beginPath(),e.moveTo(t,i),e.save(),e.fillStyle=b,e.globalAlpha=p,e.fillRect(t,i,a-t,n-i),e.globalAlpha=1,r>0){var M=r%2===0?0:.5;e.beginPath(),e.lineWidth=r,e.strokeStyle=o,e.moveTo(t,i),e.rect(t-M,i-M,a-t+2*M,n-i+2*M),e.stroke()}if(e.restore(),l===!0){e.save(),e.beginPath(),e.moveTo(t,i),e.lineTo(t+g,i+g),e.lineTo(a-g,i+g),e.lineTo(a,i),e.closePath();var P=e.createLinearGradient((a+t)/2,m+g,(a+t)/2,m);P.addColorStop(0,b),P.addColorStop(1,y),e.fillStyle=P,e.fill(),e.restore()}if(h===!0){e.save(),e.beginPath(),e.moveTo(t,n),e.lineTo(t+g,n-g),e.lineTo(a-g,n-g),e.lineTo(a,n),e.closePath();var P=e.createLinearGradient((a+t)/2,v-g,(a+t)/2,v);P.addColorStop(0,b),P.addColorStop(1,y),e.fillStyle=P,e.fill(),e.restore()}if(d===!0){e.save(),e.beginPath(),e.moveTo(t,i),e.lineTo(t+g,i+g),e.lineTo(t+g,n-g),e.lineTo(t,n),e.closePath();var P=e.createLinearGradient(x+g,(n+i)/2,x,(n+i)/2);P.addColorStop(0,b),P.addColorStop(1,f),e.fillStyle=P,e.fill(),e.restore()}if(c===!0){e.save(),e.beginPath(),e.moveTo(a,i),e.lineTo(a-g,i+g),e.lineTo(a-g,n-g),e.lineTo(a,n);var P=e.createLinearGradient(u-g,(n+i)/2,u,(n+i)/2);P.addColorStop(0,b),P.addColorStop(1,f),e.fillStyle=P,P.addColorStop(0,b),P.addColorStop(1,f),e.fillStyle=P,e.fill(),e.closePath(),e.restore()}}function D(e,t,i,a,n,s,r,o,l){if("undefined"==typeof o&&(o=1),!V){var h=Number((r%(2*Math.PI)).toFixed(8)),d=Number((s%(2*Math.PI)).toFixed(8));d===h&&(r-=1e-4)}e.save(),e.globalAlpha=o,"pie"===n?(e.beginPath(),e.moveTo(t.x,t.y),e.arc(t.x,t.y,i,s,r,!1),e.fillStyle=a,e.strokeStyle="white",e.lineWidth=2,e.closePath(),e.fill()):"doughnut"===n&&(e.beginPath(),e.arc(t.x,t.y,i,s,r,!1),e.arc(t.x,t.y,l*i,r,s,!0),e.closePath(),e.fillStyle=a,e.strokeStyle="white",e.lineWidth=2,e.fill()),e.globalAlpha=1,e.restore()}Object.defineProperty(i,"__esModule",{value:!0}),i.extend=a,i.inherit=n,i.addToDateTime=s,i.convertToNumber=r,i.pad=o,i.trimString=l,i.extendCtx=h,i.compareNumbers=d,i.compareDataPointX=c,i.intToHexColorString=p,i.RGBToInt=x,i.intToRGB=u,i.arrayIndexOf=m,i.addArrayIndexOf=v,i.getFontHeightInPixels=g,i.getLineDashArray=y,i.addEvent=f,i.dateFormat=b,i.numberFormat=M,i.getObjectId=P,i.getMouseCoordinates=S,i.getFontString=T,i.getProperty=C,i.setCanvasSize=k,i.createCanvas=w,i.exportCanvas=_,i.setButtonState=A,i.show=L,i.hide=I,i.getBezierPoints=B,i.convertPercentToValue=F,i.drawRect=z,i.drawSegment=D;var X={},Y=null,O=!0,E=window.devicePixelRatio||1,W=1,R=O?E/W:1,H={reset:{image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAcCAYAAAAAwr0iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAKRSURBVEiJrdY/iF1FFMfxzwnZrGISUSR/JLGIhoh/QiRNBLWxMLIWEkwbgiAoFgoW2mhlY6dgpY2IlRBRxBSKhSAKIklWJRYuMZKAhiyopAiaTY7FvRtmZ+/ed9/zHRjezLw5v/O9d86cuZGZpmURAfdn5o9DfdZNLXpjz+LziPgyIl6MiG0jPTJzZBuyDrP4BVm0P/AKbljTb4ToY/gGewYA7KyCl+1b3DUYANvwbiHw0gCAGRzBOzjTAXEOu0cC4Ch+r5x/HrpdrcZmvIDFSucMtnYCYC++6HmNDw8FKDT34ETrf639/azOr5vwRk/g5fbeuABtgC04XWk9VQLciMP4EH/3AFzErRNC7MXlQmsesSoHsGPE23hmEoBW+61K66HMXFmIMvN8myilXS36R01ub+KfYvw43ZXwYDX+AHP4BAci4pFJomfmr/ihmNofESsBImJGk7mlncrM45n5JPbhz0kAWpsv+juxaX21YIPmVJS2uNzJMS6ZNexC0d+I7fUWXLFyz2kSZlpWPvASlmqAf/FXNXf3FAF2F/1LuFifAlionB6dRuSI2IwHi6lzmXmp6xR8XY0fiIh7psAwh+3FuDkRHQVjl+a8lkXjo0kLUKH7XaV5oO86PmZ1FTzyP4K/XGl9v/zwfbW7BriiuETGCP5ch9bc9f97HF/vcFzCa5gdEPgWq+t/4v0V63oE1uF4h0DiFJ7HnSWMppDdh1dxtsPvJ2wcBNAKbsJXa0Ck5opdaBPsRNu/usba09i1KsaAVzmLt3sghrRjuK1Tf4xkegInxwy8gKf7dKMVH2QRsV5zXR/Cftyu+aKaKbbkQrsdH+PTzLzcqzkOQAVzM+7FHdiqqe2/YT4zF/t8S/sPmawyvC974vcAAAAASUVORK5CYII="},pan:{image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAJVSURBVFiFvZe7a1RBGMV/x2hWI4JpfKCIiSBKOoOCkID/wP4BFqIIFkE02ChIiC8QDKlSiI3YqRBsBVGwUNAUdiIEUgjiAzQIIsuKJsfizsXr5t7d+8jmwLDfzHz3nLOzc7+ZxTZlGyDgZiWOCuJ9wH2gCUyuqQFgF/AGcKJNrYkBYBj40CIet+muGQi/96kM4WS7C/Tm5VUg7whJg8BkEGkCR4BDYfodsADUgP6wErO5iCtswsuJb32hdbXy8qzL5TIdmzJinHdZoZIBZcSFkGlAKs1Z3YCketZcBtouuaQNkrblMiBpBrhme7mAgU4wMCvpcFsDkq4C54DFVRTH9h+i6vlE0r5UA5ImgCuh28jB28iIs7BIVCOeStoZD64P4uPAjUTygKSx2FsK2TIwkugfk9Qkfd/E+yMWHQCeSRqx/R3gOp3LazfaS2C4B5gHDgD7U9x3E3uAH7KNpC3AHHAwTL4FHgM9GQ8vAaPA0dB/Abxqk2/gBLA9MXba9r1k/d4LfA3JtwueBeM58ucS+edXnAW23wP10N3advEi9CXizTnyN4bPS7Zn4sH/dq3t18AY4e1YLYSy3g/csj2VnFshZPuOpOeSKHCodUINuGj7YetE6je1PV9QoNPJ9StNHKodx7nRbiWrGHBGXAi5DUiqtQwtpcWK0Jubt8CltA5MEV1IfwO7+VffPwGfia5m34CT4bXujIIX0Qna1/cGMNqV/wUJE2czxD8CQ4X5Sl7Jz7SILwCDpbjKPBRMHAd+EtX4HWV5Spdc2w8kDQGPbH8py/MXMygM69/FKz4AAAAASUVORK5CYII="},zoom:{image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAMqSURBVFiFvdfbj91TFMDxz57U6GUEMS1aYzyMtCSSDhWjCZMInpAI3khE/QHtgzdRkXgSCS8SES9epKLi0oRKNETjRahREq2KS1stdRujtDPtbA97n5zdn9+5zJxTK9k5v3POXmt991p7r71+IcaoGwkhTOIebMRqzOBTvIG3Y4zTXRmqSoyx5cAKbMJOHMFJnMZ8/jyFaXyMR7G6nb1aH22cP4BvcBxziG3GKfyTIR9D6BYg1KUghPBCDveFlb/24Av8iuUYw41YVsz5G7uxKcZ4aMEpwGt5NY3V/YbHsQ6rcAHOw/kYxigewr5CZw4fYGxBKcCLOFEYehXrMdRhr5yLETxVScsOLOkKAPfn1TYMPIvLFrShUlS2FDZm8XRHACzFAWl3R2xbqPMCYhmeLCAOYEMngAczbcTvuHYxzguIy/FesR9e6gSwU/OoPYHBHgHgviIKX2Flq7k34KhmcVnbi/PC8JX4MgMcxb118wZwdz5aISscqx7VRcox7MrPQ7i+btIAJrAkf9+bI9EPmZY2IAxiTSuAldLq4Y9+AcSUh78KP0tbAcwU35cXMD1JCIFUoGiehlqAz6TNB1f1C0DK+0h+nsNPrQC2a4bqGmlD9kOGcWt+Po6pVgDvSxfJaSkFd4UQBvoAsBYbCoB3a2flM7slA0R8iyt6rAFDeDPbm8eOTpVwGD9qVq7nLbIaZnmksPU1JtsCZMXNmpdRxFasWITzh6Xj3LCzra1OxcD2QjHiGVzdpfORnMqZio2PcF23ABdJF1Np4BPptlyPi6WzPYBzpJZtHe7A6xW9cnyP8TqA//SEIYRL8Bxul7rihvwgtVn78WcGGZXa9HGd5TDujDHuOePXNiHdKjWgZX/YbsxLx/ktqbjVzTlcjUSnvI5JrdlUVp6WesZZ6R1hRrpq9+EVTGS9jTjYAuKIouGpbcurEkIYxC051KNSamazsc+xK8b4S0VnEi/j0hqTP+M27O258egQwZuzs7pI7Mf4WQXIEDc5s9sux+5+1Py2EmP8UOq6GvWhIScxfdYjUERiAt9Jd84J6a16zf8JEKT3yCm8g1UxRv8CC4pyRhzR1uUAAAAASUVORK5CYII="},menu:{image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAgCAYAAAAbifjMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDcvMTUvMTTPsvU0AAAAP0lEQVRIie2SMQoAIBDDUvH/X667g8sJJ9KOhYYOkW0qGaU1MPdC0vGSbV19EACo3YMPAFH5BUBUjsqfAPpVXtNgGDfxEDCtAAAAAElFTkSuQmCC"}},V=i.isCanvasSupported=!!document.createElement("canvas").getContext},{}],40:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function n(e,t){var i=this,a=new r["default"](e,t,this);this.render=function(){return a.render(i.options)},this.options=a._options}Object.defineProperty(i,"__esModule",{value:!0}),i.formatDate=i.formatNumber=i.addCultureInfo=i.addColorSet=void 0,i.Chart=n;var s=e("../core/charts"),r=a(s),o=e("../core/culture_info"),l=a(o),h=e("../constants/themes"),d=e("../constants/culture"),c=e("../helpers/utils");i.addColorSet=function(e,t){h.colorSets[e]=t},i.addCultureInfo=function(e,t){d.cultures[e]=t},i.formatNumber=function(e,t,i){if(i=i||"en",t=t||"#,##0.##",!d.cultures[i])throw"Unknown Culture Name";(0,c.numberFormat)(e,t,new l["default"](i))},i.formatDate=function(e,t,i){if(i=i||"en",t=t||"DD MMM YYYY",!d.cultures[i])throw"Unknown Culture Name";(0,c.dateFormat)(e,t,new l["default"](i))};n.version="v1.8.2"},{"../constants/culture":22,"../constants/themes":24,"../core/charts":28,"../core/culture_info":29,"../helpers/utils":39}]},{},[40])(40)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.CanvasJS=e()}}(function(){return function e(t,i,a){function n(r,o){if(!i[r]){if(!t[r]){var l="function"==typeof require&&require;if(!o&&l)return l(r,!0);if(s)return s(r,!0);var h=new Error("Cannot find module '"+r+"'");throw h.code="MODULE_NOT_FOUND",h}var d=i[r]={exports:{}};t[r][0].call(d.exports,function(e){var i=t[r][1][e];return n(i?i:e)},d,d.exports,e,t,i,a)}return i[r].exports}for(var s="function"==typeof require&&require,r=0;r0&&i.stroke(),e.axisY.viewportMinimum<=0&&e.axisY.viewportMaximum>=0?M=T:e.axisY.viewportMaximum<0?M=h.y1:e.axisY.viewportMinimum>0&&(M=r.y2),i.lineTo(y,M),i.lineTo(C.x,M),i.closePath(),i.globalAlpha=u.fillOpacity,i.fill(),i.globalAlpha=1,l.isCanvasSupported&&(n.lineTo(y,M),n.lineTo(C.x,M),n.closePath(),n.fill()),i.beginPath(),i.moveTo(y,f),n.beginPath(),n.moveTo(y,f),C={x:y,y:f})}var i=e.targetCanvasCtx||this.plotArea.ctx,a=e.dataSeriesIndexes.length;if(!(a<=0)){var n=this._eventManager.ghostCtx,r=e.axisX.lineCoordinates,h=e.axisY.lineCoordinates,d=[],c=this.plotArea;i.save(),l.isCanvasSupported&&n.save(),i.beginPath(),i.rect(c.x1,c.y1,c.width,c.height),i.clip(),l.isCanvasSupported&&(n.beginPath(),n.rect(c.x1,c.y1,c.width,c.height),n.clip());for(var p=0;p0){var k=u._colorSet[S%u._colorSet.length];i.fillStyle=k,i.strokeStyle=k,i.lineWidth=u.lineThickness,i.setLineDash&&i.setLineDash((0,l.getLineDashArray)(u.lineDashType,u.lineThickness));for(var w=!0;Se.axisX.dataInfo.viewPortMax))if("number"==typeof m[S].y){y=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(b-e.axisX.conversionParameters.minimum)+.5<<0,f=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(m[S].y-e.axisY.conversionParameters.minimum)+.5<<0,P||w?(i.beginPath(),i.moveTo(y,f),C={x:y,y:f},l.isCanvasSupported&&(n.beginPath(),n.moveTo(y,f)),P=!1,w=!1):(i.lineTo(y,f),l.isCanvasSupported&&n.lineTo(y,f),S%250==0&&t());var _=u.dataPointIds[S];if(this._eventManager.objectMap[_]={id:_,objectType:"dataPoint",dataSeriesIndex:x,dataPointIndex:S,x1:y,y1:f},0!==m[S].markerSize&&(m[S].markerSize>0||u.markerSize>0)){var A=u.getMarkerProperties(S,y,f,i);d.push(A);var L=(0,l.intToHexColorString)(_);l.isCanvasSupported&&d.push({x:y,y:f,ctx:n,type:A.type,size:A.size,color:L,borderColor:L,borderThickness:A.borderThickness})}(m[S].indexLabel||u.indexLabel||m[S].indexLabelFormatter||u.indexLabelFormatter)&&this._indexLabels.push({chartType:"area",dataPoint:m[S],dataSeries:u,point:{x:y,y:f},direction:m[S].y>=0?1:-1,color:k})}else t(),w=!0;t(),s.default.drawMarkers(d)}}i.restore(),l.isCanvasSupported&&this._eventManager.ghostCtx.restore();var I={source:i,dest:this.plotArea.ctx,animationCallback:o.default.xClipAnimation,easingFunction:o.default.easing.linear,animationBase:0};return I}};var n=e("../helpers/render"),s=a(n),r=e("../helpers/animator"),o=a(r),l=e("../helpers/utils")},{"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39}],2:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(i<=0)){var a,n,o,l=null,h=this.plotArea,d=0,c=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,p=this.dataPointMaxWidth?this.dataPointMaxWidth:Math.min(.15*this.height,this.plotArea.height/e.plotType.totalDataSeries*.9)<<0,x=e.axisX.dataInfo.minDiff,u=h.height/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(x)/e.plotType.totalDataSeries*.9<<0;u>p?u=p:x===1/0?u=p/e.plotType.totalDataSeries*.9:u<1&&(u=1),t.save(),r.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(h.x1,h.y1,h.width,h.height),t.clip(),r.isCanvasSupported&&(this._eventManager.ghostCtx.rect(h.x1,h.y1,h.width,h.height),this._eventManager.ghostCtx.clip());for(var m=0;m0){var f=!!(u>5&&g.bevelEnabled);for(t.strokeStyle="#4572A7 ",d=0;de.axisX.dataInfo.viewPortMax)&&"number"==typeof y[d].y){n=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(o-e.axisX.conversionParameters.minimum)+.5<<0,a=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(y[d].y-e.axisY.conversionParameters.minimum)+.5<<0;var b,M,P=n-e.plotType.totalDataSeries*u/2+(e.previousDataSeriesCount+m)*u<<0,S=P+u<<0;y[d].y>=0?(b=c,M=a):(b=a,M=c),l=y[d].color?y[d].color:g._colorSet[d%g._colorSet.length],(0,r.drawRect)(t,b,P,M,S,l,0,null,f,!1,!1,!1,g.fillOpacity);var T=g.dataPointIds[d];this._eventManager.objectMap[T]={id:T,objectType:"dataPoint",dataSeriesIndex:v,dataPointIndex:d,x1:b,y1:P,x2:M,y2:S},l=(0,r.intToHexColorString)(T),r.isCanvasSupported&&(0,r.drawRect)(this._eventManager.ghostCtx,b,P,M,S,l,0,null,!1,!1,!1,!1),(y[d].indexLabel||g.indexLabel||y[d].indexLabelFormatter||g.indexLabelFormatter)&&this._indexLabels.push({chartType:"bar",dataPoint:y[d],dataSeries:g,point:{x:y[d].y>=0?M:b,y:P+(S-P)/2},direction:y[d].y>=0?1:-1,bounds:{x1:Math.min(b,M),y1:P,x2:Math.max(b,M),y2:S},color:l})}}}t.restore(),r.isCanvasSupported&&this._eventManager.ghostCtx.restore();var C=Math.max(c,e.axisX.boundingRect.x2),k={source:t,dest:this.plotArea.ctx,animationCallback:s.default.xScaleAnimation,easingFunction:s.default.easing.easeOutQuart,animationBase:C};return k}};var n=e("../helpers/animator"),s=a(n),r=e("../helpers/utils")},{"../helpers/animator":37,"../helpers/utils":39}],3:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(i<=0)){var a,n,r,h=null,d=this.plotArea,c=0,p=(e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,this.dataPointMaxWidth?this.dataPointMaxWidth:.15*this.width<<0),x=e.axisX.dataInfo.minDiff,u=d.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(x)/i*.9<<0;t.save(),l.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(d.x1,d.y1,d.width,d.height),t.clip(),l.isCanvasSupported&&(this._eventManager.ghostCtx.rect(d.x1,d.y1,d.width,d.height),this._eventManager.ghostCtx.clip());for(var m=-(1/0),v=1/0,g=0;ge.axisX.dataInfo.viewPortMax||"undefined"!=typeof b[c].z&&(M=b[c].z,M>m&&(m=M),Mp&&(u=p),b.length>0){t.strokeStyle="#4572A7 ";for(var c=0;ce.axisX.dataInfo.viewPortMax)&&"number"==typeof b[c].y){a=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0,n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(b[c].y-e.axisY.conversionParameters.minimum)+.5<<0;var M=b[c].z,T=m===v?S/2:P+(S-P)/(m-v)*(M-v),C=Math.max(Math.sqrt(T/Math.PI)<<0,1),k=2*C,w=f.getMarkerProperties(c,t);w.size=k,t.globalAlpha=f.fillOpacity,s.default.drawMarker(a,n,t,w.type,w.size,w.color,w.borderColor,w.borderThickness),t.globalAlpha=1;var _=f.dataPointIds[c];this._eventManager.objectMap[_]={id:_,objectType:"dataPoint",dataSeriesIndex:y,dataPointIndex:c,x1:a,y1:n,size:k};var A=(0,l.intToHexColorString)(_);l.isCanvasSupported&&s.default.drawMarker(a,n,this._eventManager.ghostCtx,w.type,w.size,A,A,w.borderThickness),(b[c].indexLabel||f.indexLabel||b[c].indexLabelFormatter||f.indexLabelFormatter)&&this._indexLabels.push({chartType:"bubble",dataPoint:b[c],dataSeries:f,point:{x:a,y:n},direction:1,bounds:{x1:a-w.size/2,y1:n-w.size/2,x2:a+w.size/2,y2:n+w.size/2},color:h})}}}t.restore(),l.isCanvasSupported&&this._eventManager.ghostCtx.restore();var L={source:t,dest:this.plotArea.ctx,animationCallback:o.default.fadeInAnimation,easingFunction:o.default.easing.easeInQuad,animationBase:0};return L}};var n=e("../helpers/render"),s=a(n),r=e("../helpers/animator"),o=a(r),l=e("../helpers/utils")},{"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39}],4:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=this._eventManager.ghostCtx,n=e.dataSeriesIndexes.length;if(!(n<=0)){var s,r,o,l,h,d,c=null,p=this.plotArea,x=0,u=(e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,this.dataPointMaxWidth?this.dataPointMaxWidth:.015*this.width),m=e.axisX.dataInfo.minDiff,v=p.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(m)*.7<<0;v>u?v=u:m===1/0?v=u:v<1&&(v=1),t.save(),a.isCanvasSupported&&i.save(),t.beginPath(),t.rect(p.x1,p.y1,p.width,p.height),t.clip(),a.isCanvasSupported&&(i.rect(p.x1,p.y1,p.width,p.height),i.clip());for(var g=0;g0){var M=!!(v>5&&f.bevelEnabled);for(x=0;xe.axisX.dataInfo.viewPortMax)&&null!==b[x].y&&b[x].y.length&&"number"==typeof b[x].y[0]&&"number"==typeof b[x].y[1]&&"number"==typeof b[x].y[2]&&"number"==typeof b[x].y[3]){s=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(d-e.axisX.conversionParameters.minimum)+.5<<0,r=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(b[x].y[0]-e.axisY.conversionParameters.minimum)+.5<<0,o=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(b[x].y[1]-e.axisY.conversionParameters.minimum)+.5<<0,l=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(b[x].y[2]-e.axisY.conversionParameters.minimum)+.5<<0,h=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(b[x].y[3]-e.axisY.conversionParameters.minimum)+.5<<0;var P=s-v/2<<0,S=P+v<<0;c=b[x].color?b[x].color:f._colorSet[0];var T=Math.round(Math.max(1,.15*v)),C=T%2===0?0:.5,k=f.dataPointIds[x];this._eventManager.objectMap[k]={id:k,objectType:"dataPoint",dataSeriesIndex:y,dataPointIndex:x,x1:P,y1:r,x2:S,y2:o,x3:s,y3:l,x4:s,y4:h,borderThickness:T,color:c},t.strokeStyle=c,t.beginPath(),t.lineWidth=T,i.lineWidth=Math.max(T,4),"candlestick"===f.type?(t.moveTo(s-C,o),t.lineTo(s-C,Math.min(r,h)),t.stroke(),t.moveTo(s-C,Math.max(r,h)),t.lineTo(s-C,l),t.stroke(),drawRect(t,P,Math.min(r,h),S,Math.max(r,h),b[x].y[0]<=b[x].y[3]?f.risingColor:c,T,c,M,M,!1,!1,f.fillOpacity),a.isCanvasSupported&&(c=intToHexColorString(k),i.strokeStyle=c,i.moveTo(s-C,o),i.lineTo(s-C,Math.min(r,h)),i.stroke(),i.moveTo(s-C,Math.max(r,h)),i.lineTo(s-C,l),i.stroke(),drawRect(i,P,Math.min(r,h),S,Math.max(r,h),c,0,null,!1,!1,!1,!1))):"ohlc"===f.type&&(t.moveTo(s-C,o),t.lineTo(s-C,l),t.stroke(),t.beginPath(),t.moveTo(s,r),t.lineTo(P,r),t.stroke(),t.beginPath(),t.moveTo(s,h),t.lineTo(S,h),t.stroke(),a.isCanvasSupported&&(c=intToHexColorString(k),i.strokeStyle=c,i.moveTo(s-C,o),i.lineTo(s-C,l),i.stroke(),i.beginPath(),i.moveTo(s,r),i.lineTo(P,r),i.stroke(),i.beginPath(),i.moveTo(s,h),i.lineTo(S,h),i.stroke())),(b[x].indexLabel||f.indexLabel||b[x].indexLabelFormatter||f.indexLabelFormatter)&&this._indexLabels.push({chartType:f.type,dataPoint:b[x],dataSeries:f,point:{x:P+(S-P)/2,y:o},direction:1,bounds:{x1:P,y1:Math.min(o,l),x2:S,y2:Math.max(o,l)},color:c})}}}t.restore(),a.isCanvasSupported&&i.restore();var w={source:t,dest:this.plotArea.ctx,animationCallback:AnimationHelper.fadeInAnimation,easingFunction:AnimationHelper.easing.easeInQuad,animationBase:0};return w}};var a=e("../helpers/utils")},{"../helpers/utils":39}],5:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(i<=0)){var a,n,o,l=null,h=this.plotArea,d=0,c=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,p=this.dataPointMaxWidth?this.dataPointMaxWidth:Math.min(.15*this.width,this.plotArea.width/e.plotType.totalDataSeries*.9)<<0,x=e.axisX.dataInfo.minDiff,u=h.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(x)/e.plotType.totalDataSeries*.9<<0;u>p?u=p:x===1/0?u=p/e.plotType.totalDataSeries*.9:u<1&&(u=1),t.save(),r.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(h.x1,h.y1,h.width,h.height),t.clip(),r.isCanvasSupported&&(this._eventManager.ghostCtx.rect(h.x1,h.y1,h.width,h.height),this._eventManager.ghostCtx.clip());for(var m=0;m0){var f=!!(u>5&&g.bevelEnabled);for(d=0;de.axisX.dataInfo.viewPortMax)&&"number"==typeof y[d].y){a=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(o-e.axisX.conversionParameters.minimum)+.5<<0,n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(y[d].y-e.axisY.conversionParameters.minimum)+.5<<0;var b,M,P=a-e.plotType.totalDataSeries*u/2+(e.previousDataSeriesCount+m)*u<<0,S=P+u<<0;if(y[d].y>=0){if(b=n,M=c,b>M){b=M,M=b}}else if(M=n,b=c,b>M){b=M,M=b}l=y[d].color?y[d].color:g._colorSet[d%g._colorSet.length],(0,r.drawRect)(t,P,b,S,M,l,0,null,f&&y[d].y>=0,y[d].y<0&&f,!1,!1,g.fillOpacity);var T=g.dataPointIds[d];this._eventManager.objectMap[T]={id:T,objectType:"dataPoint",dataSeriesIndex:v,dataPointIndex:d,x1:P,y1:b,x2:S,y2:M},l=(0,r.intToHexColorString)(T),r.isCanvasSupported&&(0,r.drawRect)(this._eventManager.ghostCtx,P,b,S,M,l,0,null,!1,!1,!1,!1),(y[d].indexLabel||g.indexLabel||y[d].indexLabelFormatter||g.indexLabelFormatter)&&this._indexLabels.push({chartType:"column",dataPoint:y[d],dataSeries:g,point:{x:P+(S-P)/2,y:y[d].y>=0?b:M},direction:y[d].y>=0?1:-1,bounds:{x1:P,y1:Math.min(b,M),x2:S,y2:Math.max(b,M)},color:l})}}}t.restore(),r.isCanvasSupported&&this._eventManager.ghostCtx.restore();var C=Math.min(c,e.axisY.boundingRect.y2),k={source:t,dest:this.plotArea.ctx,animationCallback:s.default.yScaleAnimation,easingFunction:s.default.easing.easeOutQuart,animationBase:C};return k}};var n=e("../helpers/animator"),s=a(n),r=e("../helpers/utils")},{"../helpers/animator":37,"../helpers/utils":39}],6:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(i,"__esModule",{value:!0}),i.PieChart=i.RangeSplineAreaChart=i.RangeAreaChart=i.RangeBarChart=i.RangeColumnChart=i.CandlestickChart=i.ScatterChart=i.BubbleChart=i.StackedArea100Chart=i.StackedAreaChart=i.StepAreaChart=i.SplineAreaChart=i.AreaChart=i.StackedBar100Chart=i.StackedBarChart=i.BarChart=i.StackedColumn100Chart=i.StackedColumnChart=i.ColumnChart=i.SplineChart=void 0;var n=e("../charts/spline"),s=a(n),r=e("../charts/column"),o=a(r),l=e("../charts/stacked_column"),h=a(l),d=e("../charts/stacked_column_100"),c=a(d),p=e("../charts/bar"),x=a(p),u=e("../charts/stacked_bar"),m=a(u),v=e("../charts/stacked_bar_100"),g=a(v),y=e("../charts/area"),f=a(y),b=e("../charts/spline_area"),M=a(b),P=e("../charts/step_area"),S=a(P),T=e("../charts/stacked_area"),C=a(T),k=e("../charts/stacked_area_100"),w=a(k),_=e("../charts/bubble"),A=a(_),L=e("../charts/scatter"),I=a(L),B=e("../charts/candlestick"),F=a(B),z=e("../charts/range_column"),D=a(z),X=e("../charts/range_bar"),Y=a(X),O=e("../charts/range_area"),E=a(O),W=e("../charts/range_spline_area"),R=a(W),H=e("../charts/pie"),V=a(H);i.SplineChart=s.default,i.ColumnChart=o.default,i.StackedColumnChart=h.default,i.StackedColumn100Chart=c.default,i.BarChart=x.default,i.StackedBarChart=m.default,i.StackedBar100Chart=g.default,i.AreaChart=f.default,i.SplineAreaChart=M.default,i.StepAreaChart=S.default,i.StackedAreaChart=C.default,i.StackedArea100Chart=w.default,i.BubbleChart=A.default,i.ScatterChart=I.default,i.CandlestickChart=F.default,i.RangeColumnChart=D.default,i.RangeBarChart=Y.default,i.RangeAreaChart=E.default,i.RangeSplineAreaChart=R.default,i.PieChart=V.default},{"../charts/area":1,"../charts/bar":2,"../charts/bubble":3,"../charts/candlestick":4,"../charts/column":5,"../charts/pie":7,"../charts/range_area":8,"../charts/range_bar":9,"../charts/range_column":10,"../charts/range_spline_area":11,"../charts/scatter":12,"../charts/spline":13,"../charts/spline_area":14,"../charts/stacked_area":15,"../charts/stacked_area_100":16,"../charts/stacked_bar":17,"../charts/stacked_bar_100":18,"../charts/stacked_column":19,"../charts/stacked_column_100":20,"../charts/step_area":21}],7:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){function t(){if(g&&y){var e=0,t=0,i=0,a=0;for(L=0;LMath.PI/2-C&&o.midAngleo.midAngle)&&(i=L),e++):o.midAngle>3*Math.PI/2-C&&o.midAngle<3*Math.PI/2+C&&((0===t||P[a].midAngle>o.midAngle)&&(a=L),t++),c>Math.PI/2&&c<=3*Math.PI/2?o.hemisphere="left":o.hemisphere="right",o.indexLabelTextBlock=new s.default(u.plotArea.ctx,{fontSize:o.indexLabelFontSize,fontFamily:o.indexLabelFontFamily,fontColor:o.indexLabelFontColor,fontStyle:o.indexLabelFontStyle,fontWeight:o.indexLabelFontWeight,horizontalAlign:"left",backgroundColor:o.indexLabelBackgroundColor,maxWidth:o.indexLabelMaxWidth,maxHeight:o.indexLabelWrap?5*o.indexLabelFontSize:1.5*o.indexLabelFontSize,text:o.indexLabelText,padding:0,textBaseline:"top"}),o.indexLabelTextBlock.measureText()}var p=0,x=0,m=!1;for(L=0;L1&&o.midAngle>Math.PI/2-C&&o.midAngle1&&o.midAngle>3*Math.PI/2-C&&o.midAngle<3*Math.PI/2+C&&(x<=t/2&&!m?(o.hemisphere="left",x++):(o.hemisphere="right",m=!0))}}}function i(){var e=u.plotArea.ctx;e.fillStyle="black",e.strokeStyle="grey";e.textBaseline="middle",e.lineJoin="round";var t=0;for(t=0;ti&&(s=i,o=!0);var l=y[a].color?y[a].color:g._colorSet[a%g._colorSet.length];if(s>n&&(0,r.drawSegment)(u.plotArea.ctx,P[a].center,P[a].radius,l,g.type,n,s,g.fillOpacity,P[a].percentInnerRadius),o)break}}function n(e){var t=u.plotArea.ctx;t.clearRect(M.x1,M.y1,M.width,M.height),t.fillStyle=u.backgroundColor,t.fillRect(M.x1,M.y1,M.width,M.height);for(var a=0;an){var o=.07*I*Math.cos(P[a].midAngle),l=.07*I*Math.sin(P[a].midAngle),h=!1;if(y[a].exploded?(Math.abs(P[a].center.x-(w.x+o))>1e-9||Math.abs(P[a].center.y-(w.y+l))>1e-9)&&(P[a].center.x=w.x+o*e,P[a].center.y=w.y+l*e,h=!0):(Math.abs(P[a].center.x-w.x)>0||Math.abs(P[a].center.y-w.y)>0)&&(P[a].center.x=w.x+o*(1-e),P[a].center.y=w.y+l*(1-e),h=!0),h){var d={};d.dataSeries=g,d.dataPoint=g.dataPoints[a],d.index=a,u._toolTip.highlightObjects([d])}var c=y[a].color?y[a].color:g._colorSet[a%g._colorSet.length];(0,r.drawSegment)(u.plotArea.ctx,P[a].center,P[a].radius,c,g.type,n,s,g.fillOpacity,P[a].percentInnerRadius)}}i()}function o(e,t){var i={x1:e.indexLabelTextBlock.x,y1:e.indexLabelTextBlock.y-e.indexLabelTextBlock.height/2,x2:e.indexLabelTextBlock.x+e.indexLabelTextBlock.width,y2:e.indexLabelTextBlock.y+e.indexLabelTextBlock.height/2},a={x1:t.indexLabelTextBlock.x,y1:t.indexLabelTextBlock.y-t.indexLabelTextBlock.height/2,x2:t.indexLabelTextBlock.x+t.indexLabelTextBlock.width,y2:t.indexLabelTextBlock.y+t.indexLabelTextBlock.height/2};return!(i.x2a.x2+f||i.y1>a.y2+f||i.y2a.y?n.y1-a.y2:a.y1-n.y2}function h(e){for(var t=null,i=1;i=P[e].indexLabelTextBlock.y:P[t].indexLabelTextBlock.y<=P[e].indexLabelTextBlock.y)))break;t=null}return t}function d(e){for(var t=null,i=1;i=P[e].indexLabelTextBlock.y)))break;t=null}return t}function c(e,t){t=t||0;var i=0,a=w.y-1*indexLabelRadius,n=w.y+1*indexLabelRadius;if(e>=0&&e0&&s.indexLabelTextBlock.y>n)return 0;var r=t,o=0,l=0,p=0,x=0,u=0;r<0?s.indexLabelTextBlock.y-s.indexLabelTextBlock.height/2>a&&s.indexLabelTextBlock.y-s.indexLabelTextBlock.height/2+rn&&(r=s.indexLabelTextBlock.y+s.indexLabelTextBlock.height/2+r-n);var m=s.indexLabelTextBlock.y+r,v=0;v="right"===s.hemisphere?w.x+Math.sqrt(Math.pow(indexLabelRadius,2)-Math.pow(m-w.y,2)):w.x-Math.sqrt(Math.pow(indexLabelRadius,2)-Math.pow(m-w.y,2)),l=w.x+I*Math.cos(s.midAngle),p=w.y+I*Math.sin(s.midAngle),o=Math.sqrt(Math.pow(v-l,2)+Math.pow(m-p,2)),u=Math.acos(I/indexLabelRadius),x=Math.acos((indexLabelRadius*indexLabelRadius+I*I-o*o)/(2*I*indexLabelRadius)),r=x+T.toFixed(k)&&(i=f>S?-(f-S):-(A-(_-T))))}}else if(r>0&&(g="right"===s.hemisphere?M:b,i=r,null!==g)){var A=r,f=P[g].indexLabelTextBlock.y-P[g].indexLabelTextBlock.height/2-(s.indexLabelTextBlock.y+s.indexLabelTextBlock.height/2);f-AS?f-S:A-(T-_)))}if(i){var L=s.indexLabelTextBlock.y+i,B=0;if(B="right"===s.hemisphere?w.x+Math.sqrt(Math.pow(indexLabelRadius,2)-Math.pow(L-w.y,2)):w.x-Math.sqrt(Math.pow(indexLabelRadius,2)-Math.pow(L-w.y,2)),s.midAngle>Math.PI/2-C&&s.midAnglez.indexLabelTextBlock.x?B=z.indexLabelTextBlock.x-15:"right"===s.hemisphere&&"left"===D.hemisphere&&B3*Math.PI/2-C&&s.midAngle<3*Math.PI/2+C){var F=(e-1+P.length)%P.length,z=P[F],D=P[(e+1+P.length)%P.length];"right"===s.hemisphere&&"left"===z.hemisphere&&BD.indexLabelTextBlock.x&&(B=D.indexLabelTextBlock.x-15)}s.indexLabelTextBlock.y=L,s.indexLabelTextBlock.x=B,s.indexLabelAngle=Math.atan2(s.indexLabelTextBlock.y-w.y,s.indexLabelTextBlock.x-w.x)}}return i}function p(){var e=u.plotArea.ctx;e.fillStyle="grey",e.strokeStyle="grey";var t=16;e.font=t+"px Arial",e.textBaseline="middle";var i=0,a=0,n=0,s=!0,r=function(){function e(e,t,i){for(var a=[],n=0,s=t;!0&&(a.push(P[s]),s!==i);s=(s+1+y.length)%y.length);for(a.sort(function(e,t){return e.y-t.y}),s=0;s0&&t>=0&&i>=0&&(e(a,t,i),t=-1,i=-1,a=0)}}a>0&&e(a,t,i)}if((g.radius||!g.radius&&"undefined"!=typeof g.innerRadius&&null!==g.innerRadius&&I-n<=B)&&(s=!1),s&&(I-=n),n=0,"inside"!==g.indexLabelPlacement){for(d=I*T,i=0;i0&&(!s&&p.indexLabelText&&(H="right"===p.hemisphere?M.x2-p.indexLabelTextBlock.x:p.indexLabelTextBlock.x-M.x1,.3*p.indexLabelTextBlock.maxWidth>H?p.indexLabelText="":p.indexLabelTextBlock.maxWidth=.85*H,.3*p.indexLabelTextBlock.maxWidth9&&(R*=.3),R>n&&(n=R))),V=0,j=0,p.indexLabelAngle>0&&p.indexLabelAngle0&&(!s&&p.indexLabelText&&(U=p.indexLabelAngle>0&&p.indexLabelAngle9&&(j*=.3),j>n&&(n=j))));t()};for(a=0;a<10&&(a<1||n>0);a++){var d,p,x,m,p,v,b,C,_,A,L,z,D,X,p,Y,O,E,W,R,H,V,j,U;r()}}function x(){if(u.plotArea.layoutManager.reset(),u._title&&(u._title.dockInsidePlotArea||"center"===u._title.horizontalAlign&&"center"===u._title.verticalAlign)&&u._title.render(),u.subtitles)for(var e=0;e0&&(A=!0),!A&&"undefined"!=typeof y[L].label&&null!==y[L].label&&y[L].label.toString().length>0&&(A=!0);if(0!==_){A=A||"undefined"!=typeof g.indexLabel&&null!==g.indexLabel&&g.indexLabel.toString().length>0;var I="inside"!==g.indexLabelPlacement&&A?.75*Math.min(M.width,M.height)/2:.92*Math.min(M.width,M.height)/2;g.radius&&(I=(0,r.convertPercentToValue)(g.radius,I));var B="undefined"!=typeof g.innerRadius&&null!==g.innerRadius?(0,r.convertPercentToValue)(g.innerRadius,I):.7*I,F=Math.min(B/I,(I-1)/I);this.pieDoughnutClickHandler=function(e){if(!u.isAnimating){var t=e.dataPointIndex,i=e.dataPoint,a=this;a.dataPointIds[t];i.exploded?i.exploded=!1:i.exploded=!0,a.dataPoints.length>1&&u._animator.animate(0,b,function(e){n(e),x()})}},t(),p(),p(),p(),p(),this.disableToolTip=!0,this._animator.animate(0,this.animatedRender?this.animationDuration:0,function(e){a(e),x()},function(){u.disableToolTip=!1,u._animator.animate(0,u.animatedRender?b:0,function(e){n(e),x()})})}}};var n=e("../core/text_block"),s=a(n),r=e("../helpers/utils")},{"../core/text_block":34,"../helpers/utils":39}],8:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){function t(){if(M){var e=null;c.lineThickness>0&&i.stroke();for(var t=h.length-1;t>=0;t--)e=h[t],i.lineTo(e.x,e.y),s.lineTo(e.x,e.y);if(i.closePath(),i.globalAlpha=c.fillOpacity,i.fill(),i.globalAlpha=1,s.fill(),c.lineThickness>0){i.beginPath(),i.moveTo(e.x,e.y);for(var t=0;t0){var P=c._colorSet[b%c._colorSet.length];i.fillStyle=P,i.strokeStyle=P,i.lineWidth=c.lineThickness,i.setLineDash&&i.setLineDash(getLineDashArray(c.lineDashType,c.lineThickness));for(var S=!0;be.axisX.dataInfo.viewPortMax))if(null!==p[b].y&&p[b].y.length&&"number"==typeof p[b].y[0]&&"number"==typeof p[b].y[1]){m=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(y-e.axisX.conversionParameters.minimum)+.5<<0,v=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(p[b].y[0]-e.axisY.conversionParameters.minimum)+.5<<0,g=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(p[b].y[1]-e.axisY.conversionParameters.minimum)+.5<<0,f||S?(i.beginPath(),i.moveTo(m,v),M={x:m,y:v},h=[],h.push({x:m,y:g}),a.isCanvasSupported&&(s.beginPath(),s.moveTo(m,v)),f=!1,S=!1):(i.lineTo(m,v),h.push({x:m,y:g}),a.isCanvasSupported&&s.lineTo(m,v),b%250==0&&t());var T=c.dataPointIds[b];if(this._eventManager.objectMap[T]={id:T,objectType:"dataPoint",dataSeriesIndex:d,dataPointIndex:b,x1:m,y1:v,y2:g},0!==p[b].markerSize&&(p[b].markerSize>0||c.markerSize>0)){var C=c.getMarkerProperties(b,m,g,i);r.push(C);var k=intToHexColorString(T);a.isCanvasSupported&&r.push({x:m,y:g,ctx:s,type:C.type,size:C.size,color:k,borderColor:k,borderThickness:C.borderThickness}),C=c.getMarkerProperties(b,m,v,i),r.push(C);var k=intToHexColorString(T);a.isCanvasSupported&&r.push({x:m,y:v,ctx:s,type:C.type,size:C.size,color:k,borderColor:k,borderThickness:C.borderThickness})}(p[b].indexLabel||c.indexLabel||p[b].indexLabelFormatter||c.indexLabelFormatter)&&(this._indexLabels.push({chartType:"rangeArea",dataPoint:p[b],dataSeries:c,indexKeyword:0,point:{x:m,y:v},direction:p[b].y[0]<=p[b].y[1]?-1:1,color:P}),this._indexLabels.push({chartType:"rangeArea",dataPoint:p[b],dataSeries:c,indexKeyword:1,point:{x:m,y:g},direction:p[b].y[0]<=p[b].y[1]?1:-1,color:P}))}else t(),S=!0;t(),RenderHelper.drawMarkers(r)}}i.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var w={source:i,dest:this.plotArea.ctx,animationCallback:AnimationHelper.xClipAnimation,easingFunction:AnimationHelper.easing.linear,animationBase:0};return w}};var a=e("../helpers/utils")},{"../helpers/utils":39}],9:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(i<=0)){var n,s,r,o,l=null,h=this.plotArea,d=0,c=(e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,this.dataPointMaxWidth?this.dataPointMaxWidth:Math.min(.15*this.height,this.plotArea.height/e.plotType.totalDataSeries*.9)<<0),p=e.axisX.dataInfo.minDiff,x=h.height/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(p)/e.plotType.totalDataSeries*.9<<0;x>c?x=c:p===1/0?x=c/e.plotType.totalDataSeries*.9:x<1&&(x=1),t.save(),a.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(h.x1,h.y1,h.width,h.height),t.clip(),a.isCanvasSupported&&(this._eventManager.ghostCtx.rect(h.x1,h.y1,h.width,h.height),this._eventManager.ghostCtx.clip());for(var u=0;u0){var y=!!(x>5&&v.bevelEnabled);for(t.strokeStyle="#4572A7 ",d=0;de.axisX.dataInfo.viewPortMax)&&null!==g[d].y&&g[d].y.length&&"number"==typeof g[d].y[0]&&"number"==typeof g[d].y[1]){n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(g[d].y[0]-e.axisY.conversionParameters.minimum)+.5<<0,s=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(g[d].y[1]-e.axisY.conversionParameters.minimum)+.5<<0,r=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(o-e.axisX.conversionParameters.minimum)+.5<<0;var f=r-e.plotType.totalDataSeries*x/2+(e.previousDataSeriesCount+u)*x<<0,b=f+x<<0;if(n>s){var M=n;n=s,s=M}l=g[d].color?g[d].color:v._colorSet[d%v._colorSet.length],drawRect(t,n,f,s,b,l,0,null,y,!1,!1,!1,v.fillOpacity);var P=v.dataPointIds[d];this._eventManager.objectMap[P]={id:P,objectType:"dataPoint",dataSeriesIndex:m,dataPointIndex:d,x1:n,y1:f,x2:s,y2:b},l=intToHexColorString(P),a.isCanvasSupported&&drawRect(this._eventManager.ghostCtx,n,f,s,b,l,0,null,!1,!1,!1,!1),(g[d].indexLabel||v.indexLabel||g[d].indexLabelFormatter||v.indexLabelFormatter)&&(this._indexLabels.push({chartType:"rangeBar",dataPoint:g[d],dataSeries:v,indexKeyword:0,point:{x:g[d].y[1]>=g[d].y[0]?n:s,y:f+(b-f)/2},direction:g[d].y[1]>=g[d].y[0]?-1:1,bounds:{x1:Math.min(n,s),y1:f,x2:Math.max(n,s),y2:b},color:l}),this._indexLabels.push({chartType:"rangeBar",dataPoint:g[d],dataSeries:v,indexKeyword:1,point:{x:g[d].y[1]>=g[d].y[0]?s:n,y:f+(b-f)/2},direction:g[d].y[1]>=g[d].y[0]?1:-1,bounds:{x1:Math.min(n,s),y1:f,x2:Math.max(n,s),y2:b},color:l}))}}}t.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var S={source:t,dest:this.plotArea.ctx,animationCallback:AnimationHelper.fadeInAnimation,easingFunction:AnimationHelper.easing.easeInQuad,animationBase:0};return S}};var a=e("../helpers/utils")},{"../helpers/utils":39}],10:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(i<=0)){var n,s,r,o,l=null,h=this.plotArea,d=0,c=(e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,this.dataPointMaxWidth?this.dataPointMaxWidth:.03*this.width),p=e.axisX.dataInfo.minDiff,x=h.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(p)/e.plotType.totalDataSeries*.9<<0;x>c?x=c:p===1/0?x=c/e.plotType.totalDataSeries*.9:x<1&&(x=1),t.save(),a.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(h.x1,h.y1,h.width,h.height),t.clip(),a.isCanvasSupported&&(this._eventManager.ghostCtx.rect(h.x1,h.y1,h.width,h.height),this._eventManager.ghostCtx.clip());for(var u=0;u0){var y=!!(x>5&&v.bevelEnabled);for(d=0;de.axisX.dataInfo.viewPortMax)&&null!==g[d].y&&g[d].y.length&&"number"==typeof g[d].y[0]&&"number"==typeof g[d].y[1]){n=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(o-e.axisX.conversionParameters.minimum)+.5<<0,s=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(g[d].y[0]-e.axisY.conversionParameters.minimum)+.5<<0,r=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(g[d].y[1]-e.axisY.conversionParameters.minimum)+.5<<0;var s,r,f=n-e.plotType.totalDataSeries*x/2+(e.previousDataSeriesCount+u)*x<<0,b=f+x<<0;if(l=g[d].color?g[d].color:v._colorSet[d%v._colorSet.length],s>r){var M=s;s=r,r=M}var P=v.dataPointIds[d];this._eventManager.objectMap[P]={id:P,objectType:"dataPoint",dataSeriesIndex:m,dataPointIndex:d,x1:f,y1:s,x2:b,y2:r};var S=0;drawRect(t,f,s,b,r,l,S,l,y,y,!1,!1,v.fillOpacity),l=intToHexColorString(P),a.isCanvasSupported&&drawRect(this._eventManager.ghostCtx,f,s,b,r,l,0,null,!1,!1,!1,!1),(g[d].indexLabel||v.indexLabel||g[d].indexLabelFormatter||v.indexLabelFormatter)&&(this._indexLabels.push({chartType:"rangeColumn",dataPoint:g[d],dataSeries:v,indexKeyword:0,point:{x:f+(b-f)/2,y:g[d].y[1]>=g[d].y[0]?r:s},direction:g[d].y[1]>=g[d].y[0]?-1:1,bounds:{x1:f,y1:Math.min(s,r),x2:b,y2:Math.max(s,r)},color:l}),this._indexLabels.push({chartType:"rangeColumn",dataPoint:g[d],dataSeries:v,indexKeyword:1,point:{x:f+(b-f)/2,y:g[d].y[1]>=g[d].y[0]?s:r},direction:g[d].y[1]>=g[d].y[0]?1:-1,bounds:{x1:f,y1:Math.min(s,r),x2:b,y2:Math.max(s,r)},color:l}))}}}t.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var T={source:t,dest:this.plotArea.ctx,animationCallback:AnimationHelper.fadeInAnimation,easingFunction:AnimationHelper.easing.easeInQuad,animationBase:0};return T}};var a=e("../helpers/utils")},{"../helpers/utils":39}],11:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){function t(){var e=getBezierPoints(f,2);if(e.length>0){i.beginPath(),i.moveTo(e[0].x,e[0].y),a.isCanvasSupported&&(s.beginPath(),s.moveTo(e[0].x,e[0].y));for(var t=0;t0&&i.stroke(),e=getBezierPoints(b,2),i.lineTo(b[b.length-1].x,b[b.length-1].y);for(var t=e.length-1;t>2;t-=3)i.bezierCurveTo(e[t-1].x,e[t-1].y,e[t-2].x,e[t-2].y,e[t-3].x,e[t-3].y),a.isCanvasSupported&&s.bezierCurveTo(e[t-1].x,e[t-1].y,e[t-2].x,e[t-2].y,e[t-3].x,e[t-3].y);if(i.closePath(),i.globalAlpha=d.fillOpacity,i.fill(),i.globalAlpha=1,d.lineThickness>0){i.beginPath(),i.moveTo(b[b.length-1].x,b[b.length-1].y);for(var t=e.length-1;t>2;t-=3)i.bezierCurveTo(e[t-1].x,e[t-1].y,e[t-2].x,e[t-2].y,e[t-3].x,e[t-3].y),a.isCanvasSupported&&s.bezierCurveTo(e[t-1].x,e[t-1].y,e[t-2].x,e[t-2].y,e[t-3].x,e[t-3].y);i.stroke()}i.beginPath(),a.isCanvasSupported&&(s.closePath(),s.fill())}}var i=e.targetCanvasCtx||this.plotArea.ctx,n=e.dataSeriesIndexes.length;if(!(n<=0)){var s=this._eventManager.ghostCtx,r=(e.axisX.lineCoordinates,e.axisY.lineCoordinates,[]),o=this.plotArea;i.save(),a.isCanvasSupported&&s.save(),i.beginPath(),i.rect(o.x1,o.y1,o.width,o.height),i.clip(),a.isCanvasSupported&&(s.beginPath(),s.rect(o.x1,o.y1,o.width,o.height),s.clip());for(var l=0;l0){for(color=d._colorSet[y%d._colorSet.length],i.fillStyle=color,i.strokeStyle=color,i.lineWidth=d.lineThickness,i.setLineDash&&i.setLineDash(getLineDashArray(d.lineDashType,d.lineThickness));ye.axisX.dataInfo.viewPortMax))if(null!==c[y].y&&c[y].y.length&&"number"==typeof c[y].y[0]&&"number"==typeof c[y].y[1]){u=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(g-e.axisX.conversionParameters.minimum)+.5<<0,m=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(c[y].y[0]-e.axisY.conversionParameters.minimum)+.5<<0,v=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(c[y].y[1]-e.axisY.conversionParameters.minimum)+.5<<0;var M=d.dataPointIds[y];if(this._eventManager.objectMap[M]={id:M,objectType:"dataPoint",dataSeriesIndex:h,dataPointIndex:y,x1:u,y1:m,y2:v},f[f.length]={x:u,y:m},b[b.length]={x:u,y:v},0!==c[y].markerSize&&(c[y].markerSize>0||d.markerSize>0)){var P=d.getMarkerProperties(y,u,m,i);r.push(P);var S=intToHexColorString(M);a.isCanvasSupported&&r.push({x:u,y:m,ctx:s,type:P.type,size:P.size,color:S,borderColor:S,borderThickness:P.borderThickness});var P=d.getMarkerProperties(y,u,v,i);r.push(P);var S=intToHexColorString(M);a.isCanvasSupported&&r.push({x:u,y:v,ctx:s,type:P.type,size:P.size,color:S,borderColor:S,borderThickness:P.borderThickness})}(c[y].indexLabel||d.indexLabel||c[y].indexLabelFormatter||d.indexLabelFormatter)&&(this._indexLabels.push({chartType:"splineArea",dataPoint:c[y],dataSeries:d,indexKeyword:0,point:{x:u,y:m},direction:c[y].y[0]<=c[y].y[1]?-1:1,color:color}),this._indexLabels.push({chartType:"splineArea",dataPoint:c[y],dataSeries:d,indexKeyword:1,point:{x:u,y:v},direction:c[y].y[0]<=c[y].y[1]?1:-1,color:color}))}else y>0&&(t(),f=[],b=[]);t(),RenderHelper.drawMarkers(r)}}i.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var T={source:i,dest:this.plotArea.ctx,animationCallback:AnimationHelper.xClipAnimation,easingFunction:AnimationHelper.easing.linear,animationBase:0};return T}};var a=e("../helpers/utils")},{"../helpers/utils":39}],12:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(i<=0)){var a,n,r,h=null,d=this.plotArea,c=0,p=(e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,this.dataPointMaxWidth?this.dataPointMaxWidth:.15*this.width<<0),x=e.axisX.dataInfo.minDiff,u=d.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(x)/i*.9<<0;t.save(),l.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(d.x1,d.y1,d.width,d.height),t.clip(),l.isCanvasSupported&&(this._eventManager.ghostCtx.rect(d.x1,d.y1,d.width,d.height),this._eventManager.ghostCtx.clip());for(var m=0;mp&&(u=p),y.length>0){t.strokeStyle="#4572A7 ";for(var f=(Math.pow(.3*Math.min(d.height,d.width)/2,2)*Math.PI,0),b=0,c=0;ce.axisX.dataInfo.viewPortMax)&&"number"==typeof y[c].y){a=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0,n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(y[c].y-e.axisY.conversionParameters.minimum)+.5<<0;var M=g.getMarkerProperties(c,a,n,t);if(t.globalAlpha=g.fillOpacity,s.default.drawMarker(M.x,M.y,M.ctx,M.type,M.size,M.color,M.borderColor,M.borderThickness),t.globalAlpha=1,!(Math.sqrt((f-a)*(f-a)+(b-n)*(b-n))Math.min(this.plotArea.width,this.plotArea.height))){var P=g.dataPointIds[c];this._eventManager.objectMap[P]={id:P,objectType:"dataPoint",dataSeriesIndex:v,dataPointIndex:c,x1:a,y1:n};var S=(0,l.intToHexColorString)(P);l.isCanvasSupported&&s.default.drawMarker(M.x,M.y,this._eventManager.ghostCtx,M.type,M.size,S,S,M.borderThickness),(y[c].indexLabel||g.indexLabel||y[c].indexLabelFormatter||g.indexLabelFormatter)&&this._indexLabels.push({chartType:"scatter",dataPoint:y[c],dataSeries:g,point:{x:a,y:n},direction:1,bounds:{x1:a-M.size/2,y1:n-M.size/2,x2:a+M.size/2,y2:n+M.size/2},color:h}),f=a,b=n}}}}t.restore(),l.isCanvasSupported&&this._eventManager.ghostCtx.restore();var T={source:t,dest:this.plotArea.ctx,animationCallback:o.default.fadeInAnimation,easingFunction:o.default.easing.easeInQuad,animationBase:0};return T}};var n=e("../helpers/render"),s=a(n),r=e("../helpers/animator"),o=a(r),l=e("../helpers/utils")},{"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39}],13:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){function t(e){var t=getBezierPoints(e,2);if(t.length>0){i.beginPath(),a.isCanvasSupported&&s.beginPath(),i.moveTo(t[0].x,t[0].y),a.isCanvasSupported&&s.moveTo(t[0].x,t[0].y);for(var n=0;n0&&n%3e3===0&&(i.stroke(),i.beginPath(),i.moveTo(t[n+3].x,t[n+3].y),a.isCanvasSupported&&(s.stroke(),s.beginPath(),s.moveTo(t[n+3].x,t[n+3].y)));i.stroke(),a.isCanvasSupported&&s.stroke()}}var i=e.targetCanvasCtx||this.plotArea.ctx,n=e.dataSeriesIndexes.length;if(!(n<=0)){var s=this._eventManager.ghostCtx;i.save();var r=this.plotArea;i.beginPath(),i.rect(r.x1,r.y1,r.width,r.height),i.clip();for(var o=[],l=0;l0?Math.max(d.lineThickness,4):0;var u=d._colorSet,m=u[0];i.strokeStyle=m;var v,g,y,f=0,b=[];if(i.beginPath(),c.length>0)for(f=0;fe.axisX.dataInfo.viewPortMax))if("number"==typeof c[f].y){v=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(y-e.axisX.conversionParameters.minimum)+.5<<0,g=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(c[f].y-e.axisY.conversionParameters.minimum)+.5<<0;var M=d.dataPointIds[f];if(this._eventManager.objectMap[M]={id:M,objectType:"dataPoint",dataSeriesIndex:h,dataPointIndex:f,x1:v,y1:g},b[b.length]={x:v,y:g},c[f].markerSize>0||d.markerSize>0){var P=d.getMarkerProperties(f,v,g,i);o.push(P);var S=intToHexColorString(M);a.isCanvasSupported&&o.push({x:v,y:g,ctx:s,type:P.type,size:P.size,color:S,borderColor:S,borderThickness:P.borderThickness})}(c[f].indexLabel||d.indexLabel||c[f].indexLabelFormatter||d.indexLabelFormatter)&&this._indexLabels.push({chartType:"spline",dataPoint:c[f],dataSeries:d,point:{x:v,y:g},direction:c[f].y>=0?1:-1,color:m})}else f>0&&(t(b),b=[]);t(b)}RenderHelper.drawMarkers(o),i.restore(),i.beginPath(),a.isCanvasSupported&&s.beginPath();var T={source:i,dest:this.plotArea.ctx,animationCallback:AnimationHelper.xClipAnimation,easingFunction:AnimationHelper.easing.linear,animationBase:0};return T}};var a=e("../helpers/utils")},{"../helpers/utils":39}],14:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){function t(){var t=getBezierPoints(S,2);if(t.length>0){i.beginPath(),i.moveTo(t[0].x,t[0].y),a.isCanvasSupported&&(s.beginPath(),s.moveTo(t[0].x,t[0].y));for(var n=0;n0&&i.stroke(),e.axisY.viewportMinimum<=0&&e.axisY.viewportMaximum>=0?f=M:e.axisY.viewportMaximum<0?f=o.y1:e.axisY.viewportMinimum>0&&(f=r.y2),P={x:t[0].x,y:t[0].y},i.lineTo(t[t.length-1].x,f),i.lineTo(P.x,f),i.closePath(),i.globalAlpha=p.fillOpacity,i.fill(),i.globalAlpha=1,a.isCanvasSupported&&(s.lineTo(t[t.length-1].x,f),s.lineTo(P.x,f),s.closePath(),s.fill())}}var i=e.targetCanvasCtx||this.plotArea.ctx,n=e.dataSeriesIndexes.length;if(!(n<=0)){var s=this._eventManager.ghostCtx,r=e.axisX.lineCoordinates,o=e.axisY.lineCoordinates,l=[],h=this.plotArea;i.save(),a.isCanvasSupported&&s.save(),i.beginPath(),i.rect(h.x1,h.y1,h.width,h.height),i.clip(),a.isCanvasSupported&&(s.beginPath(),s.rect(h.x1,h.y1,h.width,h.height),s.clip());for(var d=0;d0){for(color=p._colorSet[b%p._colorSet.length],i.fillStyle=color,i.strokeStyle=color,i.lineWidth=p.lineThickness,i.setLineDash&&i.setLineDash(getLineDashArray(p.lineDashType,p.lineThickness));be.axisX.dataInfo.viewPortMax))if("number"==typeof x[b].y){v=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(y-e.axisX.conversionParameters.minimum)+.5<<0,g=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(x[b].y-e.axisY.conversionParameters.minimum)+.5<<0;var T=p.dataPointIds[b];if(this._eventManager.objectMap[T]={id:T,objectType:"dataPoint",dataSeriesIndex:c,dataPointIndex:b,x1:v,y1:g},S[S.length]={x:v,y:g},0!==x[b].markerSize&&(x[b].markerSize>0||p.markerSize>0)){var C=p.getMarkerProperties(b,v,g,i);l.push(C);var k=intToHexColorString(T);a.isCanvasSupported&&l.push({x:v,y:g,ctx:s,type:C.type,size:C.size,color:k,borderColor:k,borderThickness:C.borderThickness})}(x[b].indexLabel||p.indexLabel||x[b].indexLabelFormatter||p.indexLabelFormatter)&&this._indexLabels.push({chartType:"splineArea",dataPoint:x[b],dataSeries:p,point:{x:v,y:g},direction:x[b].y>=0?1:-1,color:color})}else b>0&&(t(),S=[]);t(),RenderHelper.drawMarkers(l)}}i.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var w={source:i,dest:this.plotArea.ctx,animationCallback:AnimationHelper.xClipAnimation,easingFunction:AnimationHelper.easing.linear,animationBase:0};return w}};var a=e("../helpers/utils")},{"../helpers/utils":39}],15:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(i<=0)){var a,n,r,h=null,d=[],c=this.plotArea,p=[],x=[],u=0,m=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,v=(e.axisX.dataInfo.minDiff,this._eventManager.ghostCtx);l.isCanvasSupported&&v.beginPath(),t.save(),l.isCanvasSupported&&v.save(),t.beginPath(),t.rect(c.x1,c.y1,c.width,c.height),t.clip(),l.isCanvasSupported&&(v.beginPath(),v.rect(c.x1,c.y1,c.width,c.height),v.clip());for(var g=[],y=0;y0){for(h=M._colorSet[0],t.fillStyle=h,t.strokeStyle=h,t.lineWidth=M.lineThickness,t.setLineDash&&t.setLineDash((0,l.getLineDashArray)(M.lineDashType,M.lineThickness)),u=0;u=0?P[M.dataPointIndexes[r]]:{x:r,y:0},!(re.axisX.dataInfo.viewPortMax)&&"number"==typeof w.y){var a=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0,n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(w.y-e.axisY.conversionParameters.minimum),_=p[r]?p[r]:0;if(n-=_,T.push({x:a,y:m-_}),p[r]=m-n,S)t.beginPath(),t.moveTo(a,n),l.isCanvasSupported&&(v.beginPath(),v.moveTo(a,n)),S=!1;else if(t.lineTo(a,n),l.isCanvasSupported&&v.lineTo(a,n),u%250==0){for(M.lineThickness>0&&t.stroke();T.length>0;){var A=T.pop();t.lineTo(A.x,A.y),l.isCanvasSupported&&v.lineTo(A.x,A.y)}t.closePath(),t.globalAlpha=M.fillOpacity,t.fill(),t.globalAlpha=1,t.beginPath(),t.moveTo(a,n),l.isCanvasSupported&&(v.closePath(),v.fill(),v.beginPath(),v.moveTo(a,n)),T.push({x:a,y:m-_})}if(M.dataPointIndexes[r]>=0){var L=M.dataPointIds[M.dataPointIndexes[r]];this._eventManager.objectMap[L]={id:L,objectType:"dataPoint",dataSeriesIndex:b,dataPointIndex:M.dataPointIndexes[r],x1:a,y1:n}}if(M.dataPointIndexes[r]>=0&&0!==w.markerSize&&(w.markerSize>0||M.markerSize>0)){var I=M.getMarkerProperties(u,a,n,t);d.push(I),markerColor=(0,l.intToHexColorString)(L),l.isCanvasSupported&&d.push({x:a,y:n,ctx:v,type:I.type,size:I.size,color:markerColor,borderColor:markerColor,borderThickness:I.borderThickness})}(w.indexLabel||M.indexLabel||w.indexLabelFormatter||M.indexLabelFormatter)&&this._indexLabels.push({chartType:"stackedArea",dataPoint:w,dataSeries:M,point:{x:a,y:n},direction:P[u].y>=0?1:-1,color:h})}}for(M.lineThickness>0&&t.stroke();T.length>0;){var A=T.pop();t.lineTo(A.x,A.y),l.isCanvasSupported&&v.lineTo(A.x,A.y)}t.closePath(),t.globalAlpha=M.fillOpacity,t.fill(),t.globalAlpha=1,t.beginPath(),t.moveTo(a,n),l.isCanvasSupported&&(v.closePath(),v.fill(),v.beginPath(),v.moveTo(a,n))}delete M.dataPointIndexes}s.default.drawMarkers(d),t.restore(),l.isCanvasSupported&&v.restore();var B={source:t,dest:this.plotArea.ctx,animationCallback:o.default.xClipAnimation,easingFunction:o.default.easing.linear,animationBase:0};return B}};var n=e("../helpers/render"),s=a(n),r=e("../helpers/animator"),o=a(r),l=e("../helpers/utils")},{"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39}],16:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(i<=0)){var a,n,r,h=null,d=this.plotArea,c=[],p=[],x=[],u=0,m=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,v=this.dataPointMaxWidth?this.dataPointMaxWidth:.15*this.width<<0,g=e.axisX.dataInfo.minDiff,y=d.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(g)*.9<<0,f=this._eventManager.ghostCtx;t.save(),l.isCanvasSupported&&f.save(),t.beginPath(),t.rect(d.x1,d.y1,d.width,d.height),t.clip(),l.isCanvasSupported&&(f.beginPath(),f.rect(d.x1,d.y1,d.width,d.height),f.clip());for(var b=[],M=0;Mv&&(y=v);var A=[];if(x.length>0){h=T._colorSet[u%T._colorSet.length],t.fillStyle=h,t.strokeStyle=h,t.lineWidth=T.lineThickness,t.setLineDash&&t.setLineDash((0,l.getLineDashArray)(T.lineDashType,T.lineThickness));for(u=0;u=0?C[T.dataPointIndexes[r]]:{x:r,y:0},!(re.axisX.dataInfo.viewPortMax)&&"number"==typeof L.y){var I;I=0!==e.dataPointYSums[r]?L.y/e.dataPointYSums[r]*100:0;var a=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0,n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(I-e.axisY.conversionParameters.minimum),B=p[r]?p[r]:0;if(n-=B,A.push({x:a,y:m-B}),p[r]=m-n,k)t.beginPath(),t.moveTo(a,n),l.isCanvasSupported&&(f.beginPath(),f.moveTo(a,n)),k=!1;else if(t.lineTo(a,n),l.isCanvasSupported&&f.lineTo(a,n),u%250==0){for(T.lineThickness>0&&t.stroke();A.length>0;){var F=A.pop();t.lineTo(F.x,F.y),l.isCanvasSupported&&f.lineTo(F.x,F.y)}t.closePath(),t.globalAlpha=T.fillOpacity,t.fill(),t.globalAlpha=1,t.beginPath(),t.moveTo(a,n),l.isCanvasSupported&&(f.closePath(),f.fill(),f.beginPath(),f.moveTo(a,n)),A.push({x:a,y:m-B})}if(T.dataPointIndexes[r]>=0){var z=T.dataPointIds[T.dataPointIndexes[r]];this._eventManager.objectMap[z]={id:z,objectType:"dataPoint",dataSeriesIndex:S,dataPointIndex:T.dataPointIndexes[r],x1:a,y1:n}}if(T.dataPointIndexes[r]>=0&&0!==L.markerSize&&(L.markerSize>0||T.markerSize>0)){var D=T.getMarkerProperties(u,a,n,t);c.push(D),markerColor=(0,l.intToHexColorString)(z),l.isCanvasSupported&&c.push({x:a,y:n,ctx:f,type:D.type,size:D.size,color:markerColor,borderColor:markerColor,borderThickness:D.borderThickness})}(L.indexLabel||T.indexLabel||L.indexLabelFormatter||T.indexLabelFormatter)&&this._indexLabels.push({chartType:"stackedArea100",dataPoint:L,dataSeries:T,point:{x:a,y:n},direction:C[u].y>=0?1:-1,color:h})}}for(T.lineThickness>0&&t.stroke();A.length>0;){var F=A.pop();t.lineTo(F.x,F.y),l.isCanvasSupported&&f.lineTo(F.x,F.y)}t.closePath(),t.globalAlpha=T.fillOpacity,t.fill(),t.globalAlpha=1,t.beginPath(),t.moveTo(a,n),l.isCanvasSupported&&(f.closePath(),f.fill(),f.beginPath(),f.moveTo(a,n))}delete T.dataPointIndexes}s.default.drawMarkers(c),t.restore(),l.isCanvasSupported&&f.restore();var X={source:t,dest:this.plotArea.ctx,animationCallback:o.default.xClipAnimation,easingFunction:o.default.easing.linear,animationBase:0};return X}};var n=e("../helpers/render"),s=a(n),r=e("../helpers/animator"),o=a(r),l=e("../helpers/utils")},{"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39}],17:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(i<=0)){var n,s,r,o=null,l=this.plotArea,h=[],d=[],c=0,p=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,x=this.dataPointMaxWidth?this.dataPointMaxWidth:.15*this.height<<0,u=e.axisX.dataInfo.minDiff,m=l.height/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(u)/e.plotType.plotUnits.length*.9<<0;m>x?m=x:u===1/0?m=x:m<1&&(m=1),t.save(),a.isCanvasSupported&&this._eventManager.ghostCtx.save(), +t.beginPath(),t.rect(l.x1,l.y1,l.width,l.height),t.clip(),a.isCanvasSupported&&(this._eventManager.ghostCtx.rect(l.x1,l.y1,l.width,l.height),this._eventManager.ghostCtx.clip());for(var v=0;v0){var b=!!(m>5&&y.bevelEnabled);for(t.strokeStyle="#4572A7 ",c=0;ce.axisX.dataInfo.viewPortMax)&&"number"==typeof f[c].y){s=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0,n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(f[c].y-e.axisY.conversionParameters.minimum);var M,P,S=s-e.plotType.plotUnits.length*m/2+e.index*m<<0,T=S+m<<0;if(f[c].y>=0){var C=h[r]?h[r]:0;M=p+C,P=n+C,h[r]=C+(P-M)}else{var C=d[r]?d[r]:0;M=n-C,P=p-C,d[r]=C+(P-M)}o=f[c].color?f[c].color:y._colorSet[c%y._colorSet.length],drawRect(t,M,S,P,T,o,0,null,b,!1,!1,!1,y.fillOpacity);var k=y.dataPointIds[c];this._eventManager.objectMap[k]={id:k,objectType:"dataPoint",dataSeriesIndex:g,dataPointIndex:c,x1:M,y1:S,x2:P,y2:T},o=intToHexColorString(k),a.isCanvasSupported&&drawRect(this._eventManager.ghostCtx,M,S,P,T,o,0,null,!1,!1,!1,!1),(f[c].indexLabel||y.indexLabel||f[c].indexLabelFormatter||y.indexLabelFormatter)&&this._indexLabels.push({chartType:"stackedBar",dataPoint:f[c],dataSeries:y,point:{x:f[c].y>=0?P:M,y:s},direction:f[c].y>=0?1:-1,bounds:{x1:Math.min(M,P),y1:S,x2:Math.max(M,P),y2:T},color:o})}}}t.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var w=Math.max(p,e.axisX.boundingRect.x2),_={source:t,dest:this.plotArea.ctx,animationCallback:AnimationHelper.xScaleAnimation,easingFunction:AnimationHelper.easing.easeOutQuart,animationBase:w};return _}};var a=e("../helpers/utils")},{"../helpers/utils":39}],18:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(i<=0)){var n,s,r,o=null,l=this.plotArea,h=[],d=[],c=0,p=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,x=this.dataPointMaxWidth?this.dataPointMaxWidth:.15*this.height<<0,u=e.axisX.dataInfo.minDiff,m=l.height/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(u)/e.plotType.plotUnits.length*.9<<0;m>x?m=x:u===1/0?m=x:m<1&&(m=1),t.save(),a.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(l.x1,l.y1,l.width,l.height),t.clip(),a.isCanvasSupported&&(this._eventManager.ghostCtx.rect(l.x1,l.y1,l.width,l.height),this._eventManager.ghostCtx.clip());for(var v=0;v0){var b=!!(m>5&&y.bevelEnabled);for(t.strokeStyle="#4572A7 ",c=0;ce.axisX.dataInfo.viewPortMax)&&"number"==typeof f[c].y){s=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0;var M;M=0!==e.dataPointYSums[r]?f[c].y/e.dataPointYSums[r]*100:0,n=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(M-e.axisY.conversionParameters.minimum);var P,S,T=s-e.plotType.plotUnits.length*m/2+e.index*m<<0,C=T+m<<0;if(f[c].y>=0){var k=h[r]?h[r]:0;P=p+k,S=n+k,h[r]=k+(S-P)}else{var k=d[r]?d[r]:0;P=n-k,S=p-k,d[r]=k+(S-P)}o=f[c].color?f[c].color:y._colorSet[c%y._colorSet.length],drawRect(t,P,T,S,C,o,0,null,b,!1,!1,!1,y.fillOpacity);var w=y.dataPointIds[c];this._eventManager.objectMap[w]={id:w,objectType:"dataPoint",dataSeriesIndex:g,dataPointIndex:c,x1:P,y1:T,x2:S,y2:C},o=intToHexColorString(w),a.isCanvasSupported&&drawRect(this._eventManager.ghostCtx,P,T,S,C,o,0,null,!1,!1,!1,!1),(f[c].indexLabel||y.indexLabel||f[c].indexLabelFormatter||y.indexLabelFormatter)&&this._indexLabels.push({chartType:"stackedBar100",dataPoint:f[c],dataSeries:y,point:{x:f[c].y>=0?S:P,y:s},direction:f[c].y>=0?1:-1,bounds:{x1:Math.min(P,S),y1:T,x2:Math.max(P,S),y2:C},color:o})}}}t.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var _=Math.max(p,e.axisX.boundingRect.x2),A={source:t,dest:this.plotArea.ctx,animationCallback:AnimationHelper.xScaleAnimation,easingFunction:AnimationHelper.easing.easeOutQuart,animationBase:_};return A}};var a=e("../helpers/utils")},{"../helpers/utils":39}],19:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(i<=0)){var n,s,r,o=null,l=this.plotArea,h=[],d=[],c=0,p=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,x=this.dataPointMaxWidth?this.dataPointMaxWidth:.15*this.width<<0,u=e.axisX.dataInfo.minDiff,m=l.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(u)/e.plotType.plotUnits.length*.9<<0;m>x?m=x:u===1/0?m=x:m<1&&(m=1),t.save(),a.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(l.x1,l.y1,l.width,l.height),t.clip(),a.isCanvasSupported&&(this._eventManager.ghostCtx.rect(l.x1,l.y1,l.width,l.height),this._eventManager.ghostCtx.clip());for(var v=0;v0){var b=!!(m>5&&y.bevelEnabled);for(t.strokeStyle="#4572A7 ",c=0;ce.axisX.dataInfo.viewPortMax)&&"number"==typeof f[c].y){n=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0,s=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(f[c].y-e.axisY.conversionParameters.minimum);var M,P,S=n-e.plotType.plotUnits.length*m/2+e.index*m<<0,T=S+m<<0;if(f[c].y>=0){var C=h[r]?h[r]:0;M=s-C,P=p-C,h[r]=C+(P-M)}else{var C=d[r]?d[r]:0;P=s+C,M=p+C,d[r]=C+(P-M)}o=f[c].color?f[c].color:y._colorSet[c%y._colorSet.length],drawRect(t,S,M,T,P,o,0,null,b&&f[c].y>=0,f[c].y<0&&b,!1,!1,y.fillOpacity);var k=y.dataPointIds[c];this._eventManager.objectMap[k]={id:k,objectType:"dataPoint",dataSeriesIndex:g,dataPointIndex:c,x1:S,y1:M,x2:T,y2:P},o=intToHexColorString(k),a.isCanvasSupported&&drawRect(this._eventManager.ghostCtx,S,M,T,P,o,0,null,!1,!1,!1,!1),(f[c].indexLabel||y.indexLabel||f[c].indexLabelFormatter||y.indexLabelFormatter)&&this._indexLabels.push({chartType:"stackedColumn",dataPoint:f[c],dataSeries:y,point:{x:n,y:f[c].y>=0?M:P},direction:f[c].y>=0?1:-1,bounds:{x1:S,y1:Math.min(M,P),x2:T,y2:Math.max(M,P)},color:o})}}}t.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var w=Math.min(p,e.axisY.boundingRect.y2),_={source:t,dest:this.plotArea.ctx,animationCallback:AnimationHelper.yScaleAnimation,easingFunction:AnimationHelper.easing.easeOutQuart,animationBase:w};return _}};var a=e("../helpers/utils")},{"../helpers/utils":39}],20:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(i<=0)){var n,s,r,o=null,l=this.plotArea,h=[],d=[],c=0,p=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(0-e.axisY.conversionParameters.minimum)<<0,x=this.dataPointMaxWidth?this.dataPointMaxWidth:.15*this.width<<0,u=e.axisX.dataInfo.minDiff,m=l.width/Math.abs(e.axisX.viewportMaximum-e.axisX.viewportMinimum)*Math.abs(u)/e.plotType.plotUnits.length*.9<<0;m>x?m=x:u===1/0?m=x:m<1&&(m=1),t.save(),a.isCanvasSupported&&this._eventManager.ghostCtx.save(),t.beginPath(),t.rect(l.x1,l.y1,l.width,l.height),t.clip(),a.isCanvasSupported&&(this._eventManager.ghostCtx.rect(l.x1,l.y1,l.width,l.height),this._eventManager.ghostCtx.clip());for(var v=0;v0){var b=!!(m>5&&y.bevelEnabled);for(c=0;ce.axisX.dataInfo.viewPortMax)&&"number"==typeof f[c].y){n=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(r-e.axisX.conversionParameters.minimum)+.5<<0;var M;M=0!==e.dataPointYSums[r]?f[c].y/e.dataPointYSums[r]*100:0,s=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(M-e.axisY.conversionParameters.minimum);var P,S,T=n-e.plotType.plotUnits.length*m/2+e.index*m<<0,C=T+m<<0;if(f[c].y>=0){var k=h[r]?h[r]:0;P=s-k,S=p-k,h[r]=k+(S-P)}else{var k=d[r]?d[r]:0;S=s+k,P=p+k,d[r]=k+(S-P)}o=f[c].color?f[c].color:y._colorSet[c%y._colorSet.length],drawRect(t,T,P,C,S,o,0,null,b&&f[c].y>=0,f[c].y<0&&b,!1,!1,y.fillOpacity);var w=y.dataPointIds[c];this._eventManager.objectMap[w]={id:w,objectType:"dataPoint",dataSeriesIndex:g,dataPointIndex:c,x1:T,y1:P,x2:C,y2:S},o=intToHexColorString(w),a.isCanvasSupported&&drawRect(this._eventManager.ghostCtx,T,P,C,S,o,0,null,!1,!1,!1,!1),(f[c].indexLabel||y.indexLabel||f[c].indexLabelFormatter||y.indexLabelFormatter)&&this._indexLabels.push({chartType:"stackedColumn100",dataPoint:f[c],dataSeries:y,point:{x:n,y:f[c].y>=0?P:S},direction:f[c].y>=0?1:-1,bounds:{x1:T,y1:Math.min(P,S),x2:C,y2:Math.max(P,S)},color:o})}}}t.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var _=Math.min(p,e.axisY.boundingRect.y2),A={source:t,dest:this.plotArea.ctx,animationCallback:AnimationHelper.yScaleAnimation,easingFunction:AnimationHelper.easing.easeOutQuart,animationBase:_};return A}};var a=e("../helpers/utils")},{"../helpers/utils":39}],21:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.default=function(e){function t(){S&&(p.lineThickness>0&&i.stroke(),e.axisY.viewportMinimum<=0&&e.axisY.viewportMaximum>=0?f=P:e.axisY.viewportMaximum<0?f=o.y1:e.axisY.viewportMinimum>0&&(f=r.y2),i.lineTo(v,f),i.lineTo(S.x,f),i.closePath(),i.globalAlpha=p.fillOpacity,i.fill(),i.globalAlpha=1,a.isCanvasSupported&&(s.lineTo(v,f),s.lineTo(S.x,f),s.closePath(),s.fill()),i.beginPath(),i.moveTo(v,g),s.beginPath(),s.moveTo(v,g),S={x:v,y:g})}var i=e.targetCanvasCtx||this.plotArea.ctx,n=e.dataSeriesIndexes.length;if(!(n<=0)){var s=this._eventManager.ghostCtx,r=e.axisX.lineCoordinates,o=e.axisY.lineCoordinates,l=[],h=this.plotArea;i.save(),a.isCanvasSupported&&s.save(),i.beginPath(),i.rect(h.x1,h.y1,h.width,h.height),i.clip(),a.isCanvasSupported&&(s.beginPath(),s.rect(h.x1,h.y1,h.width,h.height),s.clip());for(var d=0;d0){var C=p._colorSet[M%p._colorSet.length];for(i.fillStyle=C,i.strokeStyle=C,i.lineWidth=p.lineThickness,i.setLineDash&&i.setLineDash(getLineDashArray(p.lineDashType,p.lineThickness));Me.axisX.dataInfo.viewPortMax)){var k=g;if("number"==typeof x[M].y){v=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(y-e.axisX.conversionParameters.minimum)+.5<<0,g=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(x[M].y-e.axisY.conversionParameters.minimum)+.5<<0,b||T?(i.beginPath(),i.moveTo(v,g),S={x:v,y:g},a.isCanvasSupported&&(s.beginPath(),s.moveTo(v,g)),b=!1,T=!1):(i.lineTo(v,k),a.isCanvasSupported&&s.lineTo(v,k),i.lineTo(v,g),a.isCanvasSupported&&s.lineTo(v,g),M%250==0&&t());var w=p.dataPointIds[M];if(this._eventManager.objectMap[w]={id:w,objectType:"dataPoint",dataSeriesIndex:c,dataPointIndex:M,x1:v,y1:g},0!==x[M].markerSize&&(x[M].markerSize>0||p.markerSize>0)){var _=p.getMarkerProperties(M,v,g,i);l.push(_);var A=intToHexColorString(w);a.isCanvasSupported&&l.push({x:v,y:g,ctx:s,type:_.type,size:_.size,color:A,borderColor:A,borderThickness:_.borderThickness})}(x[M].indexLabel||p.indexLabel||x[M].indexLabelFormatter||p.indexLabelFormatter)&&this._indexLabels.push({chartType:"stepArea",dataPoint:x[M],dataSeries:p,point:{x:v,y:g},direction:x[M].y>=0?1:-1,color:C})}else t(),T=!0}t(),RenderHelper.drawMarkers(l)}}i.restore(),a.isCanvasSupported&&this._eventManager.ghostCtx.restore();var L={source:i,dest:this.plotArea.ctx,animationCallback:AnimationHelper.xClipAnimation,easingFunction:AnimationHelper.easing.linear,animationBase:0};return L}};var a=e("../helpers/utils")},{"../helpers/utils":39}],22:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});i.cultures={en:{}},i.constants={numberDuration:1,yearDuration:314496e5,monthDuration:2592e6,weekDuration:6048e5,dayDuration:864e5,hourDuration:36e5,minuteDuration:6e4,secondDuration:1e3,millisecondDuration:1,dayOfWeekFromInt:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]}},{}],23:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});i.isDebugMode=!1,i.isCanvasSupported=!!document.createElement("canvas").getContext,i.defaultOptions={Chart:{width:500,height:400,zoomEnabled:!1,zoomType:"x",backgroundColor:"white",theme:"theme1",animationEnabled:!1,animationDuration:1200,dataPointMaxWidth:null,colorSet:"colorSet1",culture:"en",creditText:"CanvasJS.com",interactivityEnabled:!0,exportEnabled:!1,exportFileName:"Chart",rangeChanging:null,rangeChanged:null},Title:{padding:0,text:null,verticalAlign:"top",horizontalAlign:"center",fontSize:20,fontFamily:"Calibri",fontWeight:"normal",fontColor:"black",fontStyle:"normal",borderThickness:0,borderColor:"black",cornerRadius:0,backgroundColor:null,margin:5,wrap:!0,maxWidth:null,dockInsidePlotArea:!1},Subtitle:{padding:0,text:null,verticalAlign:"top",horizontalAlign:"center",fontSize:14,fontFamily:"Calibri",fontWeight:"normal",fontColor:"black",fontStyle:"normal",borderThickness:0,borderColor:"black",cornerRadius:0,backgroundColor:null,margin:2,wrap:!0,maxWidth:null,dockInsidePlotArea:!1},Legend:{name:null,verticalAlign:"center",horizontalAlign:"right",fontSize:14,fontFamily:"calibri",fontWeight:"normal",fontColor:"black",fontStyle:"normal",cursor:null,itemmouseover:null,itemmouseout:null,itemmousemove:null,itemclick:null,dockInsidePlotArea:!1,reversed:!1,maxWidth:null,maxHeight:null,itemMaxWidth:null,itemWidth:null,itemWrap:!0,itemTextFormatter:null},ToolTip:{enabled:!0,shared:!1,animationEnabled:!0,content:null,contentFormatter:null,reversed:!1,backgroundColor:null,borderColor:null,borderThickness:2,cornerRadius:5,fontSize:14,fontColor:"#000000",fontFamily:"Calibri, Arial, Georgia, serif;",fontWeight:"normal",fontStyle:"italic"},Axis:{minimum:null,maximum:null,viewportMinimum:null,viewportMaximum:null,interval:null,intervalType:null,title:null,titleFontColor:"black",titleFontSize:20,titleFontFamily:"arial",titleFontWeight:"normal",titleFontStyle:"normal",labelAngle:0,labelFontFamily:"arial",labelFontColor:"black",labelFontSize:12,labelFontWeight:"normal",labelFontStyle:"normal",labelAutoFit:!1,labelWrap:!0,labelMaxWidth:null,labelFormatter:null,prefix:"",suffix:"",includeZero:!0,tickLength:5,tickColor:"black",tickThickness:1,lineColor:"black",lineThickness:1,lineDashType:"solid",gridColor:"A0A0A0",gridThickness:0,gridDashType:"solid",interlacedColor:null,valueFormatString:null,margin:2,stripLines:[]},StripLine:{value:null,startValue:null,endValue:null,color:"orange",opacity:null,thickness:2,lineDashType:"solid",label:"",labelBackgroundColor:"#EEEEEE",labelFontFamily:"arial",labelFontColor:"orange",labelFontSize:12,labelFontWeight:"normal",labelFontStyle:"normal",labelFormatter:null,showOnTop:!1},DataSeries:{name:null,dataPoints:null,label:"",bevelEnabled:!1,highlightEnabled:!0,cursor:null,indexLabel:"",indexLabelPlacement:"auto",indexLabelOrientation:"horizontal",indexLabelFontColor:"black",indexLabelFontSize:12,indexLabelFontStyle:"normal",indexLabelFontFamily:"Arial",indexLabelFontWeight:"normal",indexLabelBackgroundColor:null,indexLabelLineColor:null,indexLabelLineThickness:1,indexLabelLineDashType:"solid",indexLabelMaxWidth:null,indexLabelWrap:!0,indexLabelFormatter:null,lineThickness:2,lineDashType:"solid",color:null,risingColor:"white",fillOpacity:null,startAngle:0,radius:null,innerRadius:null,type:"column",xValueType:"number",axisYType:"primary",xValueFormatString:null,yValueFormatString:null,zValueFormatString:null,percentFormatString:null,showInLegend:null,legendMarkerType:null,legendMarkerColor:null,legendText:null,legendMarkerBorderColor:null,legendMarkerBorderThickness:null,markerType:"circle",markerColor:null,markerSize:null,markerBorderColor:null,markerBorderThickness:null,mouseover:null,mouseout:null,mousemove:null,click:null,toolTipContent:null,visible:!0},TextBlock:{x:0,y:0,width:null,height:null,maxWidth:null,maxHeight:null,padding:0,angle:0,text:"",horizontalAlign:"center",fontSize:12,fontFamily:"calibri",fontWeight:"normal",fontColor:"black",fontStyle:"normal",borderThickness:0,borderColor:"black",cornerRadius:0,backgroundColor:null,textBaseline:"top"},CultureInfo:{decimalSeparator:".",digitGroupSeparator:",",zoomText:"Zoom",panText:"Pan",resetText:"Reset",menuText:"More Options",saveJPGText:"Save as JPG",savePNGText:"Save as PNG",days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}}},{}],24:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.themes=i.colorSets=void 0;var a=e("../helpers/utils");i.colorSets={colorSet1:["#369EAD","#C24642","#7F6084","#86B402","#A2D1CF","#C8B631","#6DBCEB","#52514E","#4F81BC","#A064A1","#F79647"],colorSet2:["#4F81BC","#C0504E","#9BBB58","#23BFAA","#8064A1","#4AACC5","#F79647","#33558B"],colorSet3:["#8CA1BC","#36845C","#017E82","#8CB9D0","#708C98","#94838D","#F08891","#0366A7","#008276","#EE7757","#E5BA3A","#F2990B","#03557B","#782970"]},i.themes={theme1:{Chart:{colorSet:"colorSet1"},Title:{fontFamily:a.isCanvasSupported?"Calibri, Optima, Candara, Verdana, Geneva, sans-serif":"calibri",fontSize:33,fontColor:"#3A3A3A",fontWeight:"bold",verticalAlign:"top",margin:5},Subtitle:{fontFamily:a.isCanvasSupported?"Calibri, Optima, Candara, Verdana, Geneva, sans-serif":"calibri",fontSize:16,fontColor:"#3A3A3A",fontWeight:"bold",verticalAlign:"top",margin:5},Axis:{titleFontSize:26,titleFontColor:"#666666",titleFontFamily:a.isCanvasSupported?"Calibri, Optima, Candara, Verdana, Geneva, sans-serif":"calibri",labelFontFamily:a.isCanvasSupported?"Calibri, Optima, Candara, Verdana, Geneva, sans-serif":"calibri",labelFontSize:18,labelFontColor:"grey",tickColor:"#BBBBBB",tickThickness:2,gridThickness:2,gridColor:"#BBBBBB",lineThickness:2,lineColor:"#BBBBBB"},Legend:{verticalAlign:"bottom",horizontalAlign:"center",fontFamily:a.isCanvasSupported?"monospace, sans-serif,arial black":"calibri"},DataSeries:{indexLabelFontColor:"grey",indexLabelFontFamily:a.isCanvasSupported?"Calibri, Optima, Candara, Verdana, Geneva, sans-serif":"calibri",indexLabelFontSize:18,indexLabelLineThickness:1}},theme2:{Chart:{colorSet:"colorSet2"},Title:{fontFamily:"impact, charcoal, arial black, sans-serif",fontSize:32,fontColor:"#333333",verticalAlign:"top",margin:5},Subtitle:{fontFamily:"impact, charcoal, arial black, sans-serif",fontSize:14,fontColor:"#333333",verticalAlign:"top",margin:5},Axis:{titleFontSize:22,titleFontColor:"rgb(98,98,98)",titleFontFamily:a.isCanvasSupported?"monospace, sans-serif,arial black":"arial",titleFontWeight:"bold",labelFontFamily:a.isCanvasSupported?"monospace, Courier New, Courier":"arial",labelFontSize:16,labelFontColor:"grey",labelFontWeight:"bold",tickColor:"grey",tickThickness:2,gridThickness:2,gridColor:"grey",lineColor:"grey",lineThickness:0},Legend:{verticalAlign:"bottom",horizontalAlign:"center",fontFamily:a.isCanvasSupported?"monospace, sans-serif,arial black":"arial"},DataSeries:{indexLabelFontColor:"grey",indexLabelFontFamily:a.isCanvasSupported?"Courier New, Courier, monospace":"arial",indexLabelFontWeight:"bold",indexLabelFontSize:18,indexLabelLineThickness:1}},theme3:{Chart:{colorSet:"colorSet1"},Title:{fontFamily:a.isCanvasSupported?"Candara, Optima, Trebuchet MS, Helvetica Neue, Helvetica, Trebuchet MS, serif":"calibri",fontSize:32,fontColor:"#3A3A3A",fontWeight:"bold",verticalAlign:"top",margin:5},Subtitle:{fontFamily:a.isCanvasSupported?"Candara, Optima, Trebuchet MS, Helvetica Neue, Helvetica, Trebuchet MS, serif":"calibri",fontSize:16,fontColor:"#3A3A3A",fontWeight:"bold",verticalAlign:"top",margin:5},Axis:{titleFontSize:22,titleFontColor:"rgb(98,98,98)",titleFontFamily:a.isCanvasSupported?"Verdana, Geneva, Calibri, sans-serif":"calibri",labelFontFamily:a.isCanvasSupported?"Calibri, Optima, Candara, Verdana, Geneva, sans-serif":"calibri",labelFontSize:18,labelFontColor:"grey",tickColor:"grey",tickThickness:2,gridThickness:2,gridColor:"grey",lineThickness:2,lineColor:"grey"},Legend:{verticalAlign:"bottom",horizontalAlign:"center",fontFamily:a.isCanvasSupported?"monospace, sans-serif,arial black":"calibri"},DataSeries:{bevelEnabled:!0,indexLabelFontColor:"grey",indexLabelFontFamily:a.isCanvasSupported?"Candara, Optima, Calibri, Verdana, Geneva, sans-serif":"calibri",indexLabelFontSize:18,indexLabelLineColor:"lightgrey",indexLabelLineThickness:2}}}},{"../helpers/utils":39}],25:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function n(e){this.chart=e,this.ctx=this.chart.plotArea.ctx,this.animations=[],this.animationRequestId=null}Object.defineProperty(i,"__esModule",{value:!0});var s=e("../helpers/animator"),r=a(s);n.prototype.animate=function(e,t,i,a,n){var s=this;this.chart.isAnimating=!0,n=n||r.default.easing.linear,i&&this.animations.push({startTime:(new Date).getTime()+(e?e:0),duration:t,animationCallback:i,onComplete:a});for(var o=[];this.animations.length>0;){var l=this.animations.shift(),h=(new Date).getTime(),d=0;l.startTime<=h&&(d=n(Math.min(h-l.startTime,l.duration),0,1,l.duration),d=Math.min(d,1),!isNaN(d)&&isFinite(d)||(d=1)),d<1&&o.push(l),l.animationCallback(d),d>=1&&l.onComplete&&l.onComplete()}this.animations=o,this.animations.length>0?this.animationRequestId=this.chart.requestAnimFrame.call(window,function(){s.animate.call(s)}):this.chart.isAnimating=!1},n.prototype.cancelAllAnimations=function(){this.animations=[],this.animationRequestId&&this.chart.cancelRequestAnimFrame.call(window,this.animationRequestId),this.animationRequestId=null,this.chart.isAnimating=!1},i.default=n},{"../helpers/animator":37}],26:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function n(e,t,i,a){if(n.base.constructor.call(this,"Axis",t,e.theme),this.chart=e,this.canvas=e.canvas,this.ctx=e.ctx,this.maxWidth=0,this.maxHeight=0,this.intervalStartPosition=0,this.labels=[],this._labels=null,this.dataInfo={min:1/0,max:-(1/0),viewPortMin:1/0,viewPortMax:-(1/0),minDiff:1/0},"axisX"===i?(this.sessionVariables=this.chart.sessionVariables[i],this._options.interval||(this.intervalType=null)):"left"===a||"top"===a?this.sessionVariables=this.chart.sessionVariables.axisY:this.sessionVariables=this.chart.sessionVariables.axisY2,"undefined"==typeof this._options.titleFontSize&&(this.titleFontSize=this.chart.getAutoFontSize(this.titleFontSize)),"undefined"==typeof this._options.labelFontSize&&(this.labelFontSize=this.chart.getAutoFontSize(this.labelFontSize)),this.type=i,"axisX"!==i||t&&"undefined"!=typeof t.gridThickness||(this.gridThickness=0),this._position=a,this.lineCoordinates={x1:null,y1:null,x2:null,y2:null,width:null},this.labelAngle=(this.labelAngle%360+360)%360,this.labelAngle>90&&this.labelAngle<=270?this.labelAngle-=180:this.labelAngle>180&&this.labelAngle<=270?this.labelAngle-=180:this.labelAngle>270&&this.labelAngle<=360&&(this.labelAngle-=360),this._options.stripLines&&this._options.stripLines.length>0){this.stripLines=[];for(var s=0;s>0:this.labelMaxWidth:"undefined"==typeof this._options.labelMaxWidth?.7*this.chart.width>>0:this.labelMaxWidth,n="undefined"==typeof this._options.labelWrap||this.labelWrap?.5*this.chart.height>>0:1.5*this.labelFontSize):"left"!==this._position&&"right"!==this._position||(s=this.lineCoordinates.height/Math.abs(this.viewportMaximum-this.viewportMinimum)*this.interval,a=this.labelAutoFit?"undefined"==typeof this._options.labelMaxWidth?.3*this.chart.width>>0:this.labelMaxWidth:"undefined"==typeof this._options.labelMaxWidth?.5*this.chart.width>>0:this.labelMaxWidth,n="undefined"==typeof this._options.labelWrap||this.labelWrap?2*s>>0:1.5*this.labelFontSize),"axisX"===this.type&&"dateTime"===this.chart.plotInfo.axisXValueType)for(t=(0,h.addToDateTime)(new Date(this.viewportMaximum),this.interval,this.intervalType),i=this.intervalStartPosition;ie.chart.width-10?e.chart.width-10:n.x2-x),e.lineCoordinates.x2=o,e.lineCoordinates.width=Math.abs(o-s);var u=Math.ceil(e.createLabelsAndCalculateHeight());r=Math.round(n.y2-u-e.margin),l=Math.round(n.y2-e.margin),e.lineCoordinates.y1=r,e.lineCoordinates.y2=r,e.boundingRect={x1:s,y1:r,x2:o,y2:l,width:o-s,height:l-r},t&&(s=Math.round(n.x1+t.margin),r=Math.round(n.y1<10?10:n.y1),o=Math.round(n.x1+p+t.margin),l=Math.round(n.y2-u-e.margin),t.lineCoordinates={x1:o,y1:r,x2:o,y2:l,height:Math.abs(l-r)},t.boundingRect={x1:s,y1:r,x2:o,y2:l,width:o-s,height:l-r}),i&&(s=Math.round(e.lineCoordinates.x2),r=Math.round(n.y1<10?10:n.y1),o=Math.round(s+x+i.margin),l=Math.round(n.y2-u-e.margin),i.lineCoordinates={x1:s,y1:r,x2:s,y2:l,height:Math.abs(l-r)},i.boundingRect={x1:s,y1:r,x2:o,y2:l,width:o-s,height:l-r}),e.calculateValueToPixelConversionParameters(),t&&t.calculateValueToPixelConversionParameters(),i&&i.calculateValueToPixelConversionParameters(),d.save(),d.rect(5,e.boundingRect.y1,e.chart.width-10,e.boundingRect.height),d.clip(),e.renderLabelsTicksAndTitle(),d.restore(),t&&t.renderLabelsTicksAndTitle(),i&&i.renderLabelsTicksAndTitle(),h.preparePlotArea();var m=e.chart.plotArea;d.save(),d.rect(m.x1,m.y1,Math.abs(m.x2-m.x1),Math.abs(m.y2-m.y1)),d.clip(),e.renderStripLinesOfThicknessType("value"), +t&&t.renderStripLinesOfThicknessType("value"),i&&i.renderStripLinesOfThicknessType("value"),e.renderInterlacedColors(),t&&t.renderInterlacedColors(),i&&i.renderInterlacedColors(),d.restore(),e.renderGrid(),t&&t.renderGrid(),i&&i.renderGrid(),e.renderAxisLine(),t&&t.renderAxisLine(),i&&i.renderAxisLine(),e.renderStripLinesOfThicknessType("pixel"),t&&t.renderStripLinesOfThicknessType("pixel"),i&&i.renderStripLinesOfThicknessType("pixel")}else{var v=Math.ceil(e.createLabelsAndCalculateWidth());t&&(t.lineCoordinates={},s=Math.round(n.x1+v+e.margin),o=Math.round(n.x2>t.chart.width-10?t.chart.width-10:n.x2),t.lineCoordinates.x1=s,t.lineCoordinates.x2=o,t.lineCoordinates.width=Math.abs(o-s)),i&&(i.lineCoordinates={},s=Math.round(n.x1+v+e.margin),o=Math.round(n.x2>i.chart.width-10?i.chart.width-10:n.x2),i.lineCoordinates.x1=s,i.lineCoordinates.x2=o,i.lineCoordinates.width=Math.abs(o-s));var g=Math.ceil(t?t.createLabelsAndCalculateHeight():0),y=Math.ceil(i?i.createLabelsAndCalculateHeight():0);t&&(r=Math.round(n.y2-g-t.margin),l=Math.round(n.y2-c>t.chart.height-10?t.chart.height-10:n.y2-c),t.lineCoordinates.y1=r,t.lineCoordinates.y2=r,t.boundingRect={x1:s,y1:r,x2:o,y2:l,width:o-s,height:g}),i&&(r=Math.round(n.y1+i.margin),l=n.y1+i.margin+y,i.lineCoordinates.y1=l,i.lineCoordinates.y2=l,i.boundingRect={x1:s,y1:r,x2:o,y2:l,width:o-s,height:y}),s=Math.round(n.x1+e.margin),r=Math.round(i?i.lineCoordinates.y2:n.y1<10?10:n.y1),o=Math.round(n.x1+v+e.margin),l=Math.round(t?t.lineCoordinates.y1:n.y2-c>e.chart.height-10?e.chart.height-10:n.y2-c),e.lineCoordinates={x1:o,y1:r,x2:o,y2:l,height:Math.abs(l-r)},e.boundingRect={x1:s,y1:r,x2:o,y2:l,width:o-s,height:l-r},e.calculateValueToPixelConversionParameters(),t&&t.calculateValueToPixelConversionParameters(),i&&i.calculateValueToPixelConversionParameters(),t&&t.renderLabelsTicksAndTitle(),i&&i.renderLabelsTicksAndTitle(),e.renderLabelsTicksAndTitle(),h.preparePlotArea();var m=e.chart.plotArea;d.save(),d.rect(m.x1,m.y1,Math.abs(m.x2-m.x1),Math.abs(m.y2-m.y1)),d.clip(),e.renderStripLinesOfThicknessType("value"),t&&t.renderStripLinesOfThicknessType("value"),i&&i.renderStripLinesOfThicknessType("value"),e.renderInterlacedColors(),t&&t.renderInterlacedColors(),i&&i.renderInterlacedColors(),d.restore(),e.renderGrid(),t&&t.renderGrid(),i&&i.renderGrid(),e.renderAxisLine(),t&&t.renderAxisLine(),i&&i.renderAxisLine(),e.renderStripLinesOfThicknessType("pixel"),t&&t.renderStripLinesOfThicknessType("pixel"),i&&i.renderStripLinesOfThicknessType("pixel")}},n.prototype.renderLabelsTicksAndTitle=function(){var e=!1,t=0,i=1,a=0;this.conversionParameters.pixelPerUnit*this.interval;if(0!==this.labelAngle&&360!==this.labelAngle&&(i=1.2),"undefined"==typeof this._options.interval){if("bottom"===this._position||"top"===this._position){for(o=0;othis.lineCoordinates.width*i&&(e=!0)}if("left"===this._position||"right"===this._position){for(o=0;othis.lineCoordinates.height*i&&(e=!0)}}if("bottom"===this._position){var s,r,o=0;for(o=0;othis.viewportMaximum)){if(r=this.getPixelCoordinatesOnAxis(s.position),this.tickThickness&&!this._labels[o].stripLine||this._labels[o].stripLine&&"pixel"===this._labels[o].stripLine._thicknessType){this._labels[o].stripLine?(d=this._labels[o].stripLine,this.ctx.lineWidth=d.thickness,this.ctx.strokeStyle=d.color):(this.ctx.lineWidth=this.tickThickness,this.ctx.strokeStyle=this.tickColor);var h=this.ctx.lineWidth%2===1?(r.x<<0)+.5:r.x<<0;this.ctx.beginPath(),this.ctx.moveTo(h,r.y<<0),this.ctx.lineTo(h,r.y+this.tickLength<<0),this.ctx.stroke()}e&&a++%2!==0&&!this._labels[o].stripLine||(0===s.textBlock.angle?(r.x-=s.textBlock.width/2,r.y+=this.tickLength+s.textBlock.fontSize/2):(r.x-=this.labelAngle<0?s.textBlock.width*Math.cos(Math.PI/180*this.labelAngle):0,r.y+=this.tickLength+Math.abs(this.labelAngle<0?s.textBlock.width*Math.sin(Math.PI/180*this.labelAngle)-5:5)),s.textBlock.x=r.x,s.textBlock.y=r.y,s.textBlock.render(!0))}this.title&&(this._titleTextBlock=new l.default(this.ctx,{x:this.lineCoordinates.x1,y:this.boundingRect.y2-this.titleFontSize-5,maxWidth:this.lineCoordinates.width,maxHeight:1.5*this.titleFontSize,angle:0,text:this.title,horizontalAlign:"center",fontSize:this.titleFontSize,fontFamily:this.titleFontFamily,fontWeight:this.titleFontWeight,fontColor:this.titleFontColor,fontStyle:this.titleFontStyle,textBaseline:"top"}),this._titleTextBlock.measureText(),this._titleTextBlock.x=this.lineCoordinates.x1+this.lineCoordinates.width/2-this._titleTextBlock.width/2,this._titleTextBlock.y=this.boundingRect.y2-this._titleTextBlock.height-3,this._titleTextBlock.render(!0))}else if("top"===this._position){var s,r,d,o=0;for(o=0;othis.viewportMaximum)){if(r=this.getPixelCoordinatesOnAxis(s.position),this.tickThickness&&!this._labels[o].stripLine||this._labels[o].stripLine&&"pixel"===this._labels[o].stripLine._thicknessType){this._labels[o].stripLine?(d=this._labels[o].stripLine,this.ctx.lineWidth=d.thickness,this.ctx.strokeStyle=d.color):(this.ctx.lineWidth=this.tickThickness,this.ctx.strokeStyle=this.tickColor);var h=this.ctx.lineWidth%2===1?(r.x<<0)+.5:r.x<<0;this.ctx.beginPath(),this.ctx.moveTo(h,r.y<<0),this.ctx.lineTo(h,r.y-this.tickLength<<0),this.ctx.stroke()}e&&a++%2!==0&&!this._labels[o].stripLine||(0===s.textBlock.angle?(r.x-=s.textBlock.width/2,r.y-=this.tickLength+s.textBlock.height/2):(r.x-=this.labelAngle>0?s.textBlock.width*Math.cos(Math.PI/180*this.labelAngle):0,r.y-=this.tickLength+Math.abs(this.labelAngle>0?s.textBlock.width*Math.sin(Math.PI/180*this.labelAngle)+5:5)),s.textBlock.x=r.x,s.textBlock.y=r.y,s.textBlock.render(!0))}this.title&&(this._titleTextBlock=new l.default(this.ctx,{x:this.lineCoordinates.x1,y:this.boundingRect.y1+1,maxWidth:this.lineCoordinates.width,maxHeight:1.5*this.titleFontSize,angle:0,text:this.title,horizontalAlign:"center",fontSize:this.titleFontSize,fontFamily:this.titleFontFamily,fontWeight:this.titleFontWeight,fontColor:this.titleFontColor,fontStyle:this.titleFontStyle,textBaseline:"top"}),this._titleTextBlock.measureText(),this._titleTextBlock.x=this.lineCoordinates.x1+this.lineCoordinates.width/2-this._titleTextBlock.width/2,this._titleTextBlock.render(!0))}else if("left"===this._position){for(var s,r,o=0;othis.viewportMaximum)){if(r=this.getPixelCoordinatesOnAxis(s.position),this.tickThickness&&!this._labels[o].stripLine||this._labels[o].stripLine&&"pixel"===this._labels[o].stripLine._thicknessType){this._labels[o].stripLine?(d=this._labels[o].stripLine,this.ctx.lineWidth=d.thickness,this.ctx.strokeStyle=d.color):(this.ctx.lineWidth=this.tickThickness,this.ctx.strokeStyle=this.tickColor);var c=this.ctx.lineWidth%2===1?(r.y<<0)+.5:r.y<<0;this.ctx.beginPath(),this.ctx.moveTo(r.x<<0,c),this.ctx.lineTo(r.x-this.tickLength<<0,c),this.ctx.stroke()}e&&a++%2!==0&&!this._labels[o].stripLine||(s.textBlock.x=r.x-s.textBlock.width*Math.cos(Math.PI/180*this.labelAngle)-this.tickLength-5,0===this.labelAngle?s.textBlock.y=r.y:s.textBlock.y=r.y-s.textBlock.width*Math.sin(Math.PI/180*this.labelAngle),s.textBlock.render(!0))}if(this.title){this._titleTextBlock=new l.default(this.ctx,{x:this.boundingRect.x1+1,y:this.lineCoordinates.y2,maxWidth:this.lineCoordinates.height,maxHeight:1.5*this.titleFontSize,angle:-90,text:this.title,horizontalAlign:"center",fontSize:this.titleFontSize,fontFamily:this.titleFontFamily,fontWeight:this.titleFontWeight,fontColor:this.titleFontColor,fontStyle:this.titleFontStyle,textBaseline:"top"});this._titleTextBlock.measureText();this._titleTextBlock.y=this.lineCoordinates.height/2+this._titleTextBlock.width/2+this.lineCoordinates.y1,this._titleTextBlock.render(!0)}}else if("right"===this._position){for(var s,r,o=0;othis.viewportMaximum)){if(r=this.getPixelCoordinatesOnAxis(s.position),this.tickThickness&&!this._labels[o].stripLine||this._labels[o].stripLine&&"pixel"===this._labels[o].stripLine._thicknessType){this._labels[o].stripLine?(d=this._labels[o].stripLine,this.ctx.lineWidth=d.thickness,this.ctx.strokeStyle=d.color):(this.ctx.lineWidth=this.tickThickness,this.ctx.strokeStyle=this.tickColor);var c=this.ctx.lineWidth%2===1?(r.y<<0)+.5:r.y<<0;this.ctx.beginPath(),this.ctx.moveTo(r.x<<0,c),this.ctx.lineTo(r.x+this.tickLength<<0,c),this.ctx.stroke()}e&&a++%2!==0&&!this._labels[o].stripLine||(s.textBlock.x=r.x+this.tickLength+5,0===this.labelAngle?s.textBlock.y=r.y:s.textBlock.y=r.y,s.textBlock.render(!0))}this.title&&(this._titleTextBlock=new l.default(this.ctx,{x:this.boundingRect.x2-1,y:this.lineCoordinates.y2,maxWidth:this.lineCoordinates.height,maxHeight:1.5*this.titleFontSize,angle:90,text:this.title,horizontalAlign:"center",fontSize:this.titleFontSize,fontFamily:this.titleFontFamily,fontWeight:this.titleFontWeight,fontColor:this.titleFontColor,fontStyle:this.titleFontStyle,textBaseline:"top"}),this._titleTextBlock.measureText(),this._titleTextBlock.y=this.lineCoordinates.height/2-this._titleTextBlock.width/2+this.lineCoordinates.y1,this._titleTextBlock.render(!0))}},n.prototype.renderInterlacedColors=function(){var e,t,i=this.chart.plotArea.ctx,a=this.chart.plotArea,n=0,s=!0;if("bottom"!==this._position&&"top"!==this._position||!this.interlacedColor){if(("left"===this._position||"right"===this._position)&&this.interlacedColor)for(i.fillStyle=this.interlacedColor,n=0;n=this._labels.length-1?this.getPixelCoordinatesOnAxis(this.viewportMaximum):this.getPixelCoordinatesOnAxis(this._labels[n+1].position),i.fillRect(a.x1,e.y,Math.abs(a.x1-a.x2),Math.abs(e.y-t.y)),s=!1):s=!0)}else for(i.fillStyle=this.interlacedColor,n=0;n=this._labels.length-1?this.getPixelCoordinatesOnAxis(this.viewportMaximum):this.getPixelCoordinatesOnAxis(this._labels[n+1].position),i.fillRect(e.x,a.y1,Math.abs(t.x-e.x),Math.abs(a.y1-a.y2)),s=!1):s=!0);i.beginPath()},n.prototype.renderStripLinesOfThicknessType=function(e){if(this.stripLines&&this.stripLines.length>0&&e){var t=0;for(t=0;tthis.viewportMaximum)||(i.showOnTop?this.chart.addEventListener("dataAnimationIterationEnd",i.render,i):i.render()))}}},n.prototype.renderGrid=function(){if(this.gridThickness&&this.gridThickness>0){var e,t=this.chart.ctx,i=this.chart.plotArea;if(t.lineWidth=this.gridThickness,t.strokeStyle=this.gridColor,t.setLineDash&&t.setLineDash((0,h.getLineDashArray)(this.gridDashType,this.gridThickness)),"bottom"===this._position||"top"===this._position){for(n=0;nthis.viewportMaximum)){t.beginPath(),e=this.getPixelCoordinatesOnAxis(this._labels[n].position);var a=t.lineWidth%2===1?(e.x<<0)+.5:e.x<<0;t.moveTo(a,i.y1<<0),t.lineTo(a,i.y2<<0),t.stroke()}}else if("left"===this._position||"right"===this._position)for(var n=0;nthis.viewportMaximum)){t.beginPath(),e=this.getPixelCoordinatesOnAxis(this._labels[n].position);var s=t.lineWidth%2===1?(e.y<<0)+.5:e.y<<0;t.moveTo(i.x1<<0,s),t.lineTo(i.x2<<0,s),t.stroke()}}},n.prototype.renderAxisLine=function(){var e=this.chart.ctx;if("bottom"===this._position||"top"===this._position){if(this.lineThickness){e.lineWidth=this.lineThickness,e.strokeStyle=this.lineColor?this.lineColor:"black",e.setLineDash&&e.setLineDash((0,h.getLineDashArray)(this.lineDashType,this.lineThickness));var t=this.lineThickness%2===1?(this.lineCoordinates.y1<<0)+.5:this.lineCoordinates.y1<<0;e.beginPath(),e.moveTo(this.lineCoordinates.x1,t),e.lineTo(this.lineCoordinates.x2,t),e.stroke()}}else if(("left"===this._position||"right"===this._position)&&this.lineThickness){e.lineWidth=this.lineThickness,e.strokeStyle=this.lineColor,e.setLineDash&&e.setLineDash((0,h.getLineDashArray)(this.lineDashType,this.lineThickness));var i=this.lineThickness%2===1?(this.lineCoordinates.x1<<0)+.5:this.lineCoordinates.x1<<0;e.beginPath(),e.moveTo(i,this.lineCoordinates.y1),e.lineTo(i,this.lineCoordinates.y2),e.stroke()}},n.prototype.getPixelCoordinatesOnAxis=function(e){var t={};this.lineCoordinates.width,this.lineCoordinates.height;if("bottom"===this._position||"top"===this._position){var i=this.conversionParameters.pixelPerUnit;t.x=this.conversionParameters.reference+i*(e-this.viewportMinimum),t.y=this.lineCoordinates.y1}if("left"===this._position||"right"===this._position){var i=-this.conversionParameters.pixelPerUnit;t.y=this.conversionParameters.reference-i*(e-this.viewportMinimum),t.x=this.lineCoordinates.x2}return t},n.prototype.convertPixelToValue=function(e){if(!e)return null;var t=0,i="left"===this._position||"right"===this._position?e.y:e.x;return t=this.conversionParameters.minimum+(i-this.conversionParameters.reference)/this.conversionParameters.pixelPerUnit},n.prototype.setViewPortRange=function(e,t){this.sessionVariables.newViewportMinimum=this.viewportMinimum=Math.min(e,t),this.sessionVariables.newViewportMaximum=this.viewportMaximum=Math.max(e,t)},n.prototype.getXValueAt=function(e){if(!e)return null;var t=null;return"left"===this._position?t=(this.chart.axisX.viewportMaximum-this.chart.axisX.viewportMinimum)/this.chart.axisX.lineCoordinates.height*(this.chart.axisX.lineCoordinates.y2-e.y)+this.chart.axisX.viewportMinimum:"bottom"===this._position&&(t=(this.chart.axisX.viewportMaximum-this.chart.axisX.viewportMinimum)/this.chart.axisX.lineCoordinates.width*(e.x-this.chart.axisX.lineCoordinates.x1)+this.chart.axisX.viewportMinimum),t},n.prototype.calculateValueToPixelConversionParameters=function(e){this.reversed=!1;var t={pixelPerUnit:null,minimum:null,reference:null},i=this.lineCoordinates.width,a=this.lineCoordinates.height;t.minimum=this.viewportMinimum,"bottom"!==this._position&&"top"!==this._position||(t.pixelPerUnit=(this.reversed?-1:1)*i/Math.abs(this.viewportMaximum-this.viewportMinimum),t.reference=this.reversed?this.lineCoordinates.x2:this.lineCoordinates.x1),"left"!==this._position&&"right"!==this._position||(t.pixelPerUnit=(this.reversed?1:-1)*a/Math.abs(this.viewportMaximum-this.viewportMinimum),t.reference=this.reversed?this.lineCoordinates.y1:this.lineCoordinates.y2),this.conversionParameters=t},n.prototype.calculateAxisParameters=function(){var e=this.chart.layoutManager.getFreeSpace(),t=!1;"bottom"===this._position||"top"===this._position?(this.maxWidth=e.width,this.maxHeight=e.height):(this.maxWidth=e.height,this.maxHeight=e.width);var i,a,s,r,o="axisX"===this.type?this.maxWidth<500?8:Math.max(6,Math.floor(this.maxWidth/62)):Math.max(Math.floor(this.maxWidth/40),2),l=0;if((null===this.viewportMinimum||isNaN(this.viewportMinimum))&&(this.viewportMinimum=this.minimum),(null===this.viewportMaximum||isNaN(this.viewportMaximum))&&(this.viewportMaximum=this.maximum),"axisX"===this.type?(i=null!==this.viewportMinimum?this.viewportMinimum:this.dataInfo.viewPortMin,a=null!==this.viewportMaximum?this.viewportMaximum:this.dataInfo.viewPortMax,a-i===0&&(l="undefined"==typeof this._options.interval?.4:this._options.interval,a+=l,i-=l),this.dataInfo.minDiff!==1/0?s=this.dataInfo.minDiff:a-i>1?s=.5*Math.abs(a-i):(s=1,"dateTime"===this.chart.plotInfo.axisXValueType&&(t=!0))):"axisY"===this.type&&(i=null!==this.viewportMinimum?this.viewportMinimum:this.dataInfo.viewPortMin,a=null!==this.viewportMaximum?this.viewportMaximum:this.dataInfo.viewPortMax,isFinite(i)||isFinite(a)?isFinite(i)?isFinite(a)||(a=i):i=a:(a="undefined"==typeof this._options.interval?-(1/0):this._options.interval,i=0),0===i&&0===a?(a+=9,i=0):a-i===0?(l=Math.min(Math.abs(.01*Math.abs(a)),5),a+=l,i-=l):i>a?(l=Math.min(Math.abs(.01*Math.abs(a-i)),5),a>=0?i=a-l:a=i+l):(l=Math.min(Math.abs(.01*Math.abs(a-i)),.05),0!==a&&(a+=l),0!==i&&(i-=l)),s=this.dataInfo.minDiff!==1/0?this.dataInfo.minDiff:a-i>1?.5*Math.abs(a-i):1,this.includeZero&&(null===this.viewportMinimum||isNaN(this.viewportMinimum))&&i>0&&(i=0),this.includeZero&&(null===this.viewportMaximum||isNaN(this.viewportMaximum))&&a<0&&(a=0)),r=(isNaN(this.viewportMaximum)||null===this.viewportMaximum?a:this.viewportMaximum)-(isNaN(this.viewportMinimum)||null===this.viewportMinimum?i:this.viewportMinimum),"axisX"===this.type&&"dateTime"===this.chart.plotInfo.axisXValueType?(this.intervalType||(r/1<=o?(this.interval=1,this.intervalType="millisecond"):r/2<=o?(this.interval=2,this.intervalType="millisecond"):r/5<=o?(this.interval=5,this.intervalType="millisecond"):r/10<=o?(this.interval=10,this.intervalType="millisecond"):r/20<=o?(this.interval=20,this.intervalType="millisecond"):r/50<=o?(this.interval=50,this.intervalType="millisecond"):r/100<=o?(this.interval=100,this.intervalType="millisecond"):r/200<=o?(this.interval=200,this.intervalType="millisecond"):r/250<=o?(this.interval=250,this.intervalType="millisecond"):r/300<=o?(this.interval=300,this.intervalType="millisecond"):r/400<=o?(this.interval=400,this.intervalType="millisecond"):r/500<=o?(this.interval=500,this.intervalType="millisecond"):r/(1*d.constants.secondDuration)<=o?(this.interval=1,this.intervalType="second"):r/(2*d.constants.secondDuration)<=o?(this.interval=2,this.intervalType="second"):r/(5*d.constants.secondDuration)<=o?(this.interval=5,this.intervalType="second"):r/(10*d.constants.secondDuration)<=o?(this.interval=10,this.intervalType="second"):r/(15*d.constants.secondDuration)<=o?(this.interval=15,this.intervalType="second"):r/(20*d.constants.secondDuration)<=o?(this.interval=20,this.intervalType="second"):r/(30*d.constants.secondDuration)<=o?(this.interval=30,this.intervalType="second"):r/(1*d.constants.minuteDuration)<=o?(this.interval=1,this.intervalType="minute"):r/(2*d.constants.minuteDuration)<=o?(this.interval=2,this.intervalType="minute"):r/(5*d.constants.minuteDuration)<=o?(this.interval=5,this.intervalType="minute"):r/(10*d.constants.minuteDuration)<=o?(this.interval=10,this.intervalType="minute"):r/(15*d.constants.minuteDuration)<=o?(this.interval=15,this.intervalType="minute"):r/(20*d.constants.minuteDuration)<=o?(this.interval=20,this.intervalType="minute"):r/(30*d.constants.minuteDuration)<=o?(this.interval=30,this.intervalType="minute"):r/(1*d.constants.hourDuration)<=o?(this.interval=1,this.intervalType="hour"):r/(2*d.constants.hourDuration)<=o?(this.interval=2,this.intervalType="hour"):r/(3*d.constants.hourDuration)<=o?(this.interval=3,this.intervalType="hour"):r/(6*d.constants.hourDuration)<=o?(this.interval=6,this.intervalType="hour"):r/(1*d.constants.dayDuration)<=o?(this.interval=1,this.intervalType="day"):r/(2*d.constants.dayDuration)<=o?(this.interval=2,this.intervalType="day"):r/(4*d.constants.dayDuration)<=o?(this.interval=4,this.intervalType="day"):r/(1*d.constants.weekDuration)<=o?(this.interval=1,this.intervalType="week"):r/(2*d.constants.weekDuration)<=o?(this.interval=2,this.intervalType="week"):r/(3*d.constants.weekDuration)<=o?(this.interval=3,this.intervalType="week"):r/(1*d.constants.monthDuration)<=o?(this.interval=1,this.intervalType="month"):r/(2*d.constants.monthDuration)<=o?(this.interval=2,this.intervalType="month"):r/(3*d.constants.monthDuration)<=o?(this.interval=3,this.intervalType="month"):r/(6*d.constants.monthDuration)<=o?(this.interval=6,this.intervalType="month"):r/(1*d.constants.yearDuration)<=o?(this.interval=1,this.intervalType="year"):r/(2*d.constants.yearDuration)<=o?(this.interval=2,this.intervalType="year"):r/(4*d.constants.yearDuration)<=o?(this.interval=4,this.intervalType="year"):(this.interval=Math.floor(n.getNiceNumber(r/(o-1),!0)/d.constants.yearDuration),this.intervalType="year")),(null===this.viewportMinimum||isNaN(this.viewportMinimum))&&(this.viewportMinimum=i-s/2),(null===this.viewportMaximum||isNaN(this.viewportMaximum))&&(this.viewportMaximum=a+s/2),this.valueFormatString||(t?this.valueFormatString="MMM DD YYYY HH:mm":"year"===this.intervalType?this.valueFormatString="YYYY":"month"===this.intervalType?this.valueFormatString="MMM YYYY":"week"===this.intervalType?this.valueFormatString="MMM DD YYYY":"day"===this.intervalType?this.valueFormatString="MMM DD YYYY":"hour"===this.intervalType?this.valueFormatString="hh:mm TT":"minute"===this.intervalType?this.valueFormatString="hh:mm TT":"second"===this.intervalType?this.valueFormatString="hh:mm:ss TT":"millisecond"===this.intervalType&&(this.valueFormatString="fff'ms'"))):(this.intervalType="number",r=n.getNiceNumber(r,!1),this._options&&this._options.interval?this.interval=this._options.interval:this.interval=n.getNiceNumber(r/(o-1),!0),(null===this.viewportMinimum||isNaN(this.viewportMinimum))&&("axisX"===this.type?this.viewportMinimum=i-s/2:this.viewportMinimum=Math.floor(i/this.interval)*this.interval),(null===this.viewportMaximum||isNaN(this.viewportMaximum))&&("axisX"===this.type?this.viewportMaximum=a+s/2:this.viewportMaximum=Math.ceil(a/this.interval)*this.interval),0===this.viewportMaximum&&0===this.viewportMinimum&&(0===this._options.viewportMinimum?this.viewportMaximum+=10:0===this._options.viewportMaximum&&(this.viewportMinimum-=10),this._options&&"undefined"==typeof this._options.interval&&(this.interval=n.getNiceNumber((this.viewportMaximum-this.viewportMinimum)/(o-1),!0)))),null!==this.minimum&&null!==this.maximum||("axisX"===this.type?(i=null!==this.minimum?this.minimum:this.dataInfo.min,a=null!==this.maximum?this.maximum:this.dataInfo.max,a-i===0&&(l="undefined"==typeof this._options.interval?.4:this._options.interval,a+=l,i-=l),s=this.dataInfo.minDiff!==1/0?this.dataInfo.minDiff:a-i>1?.5*Math.abs(a-i):1):"axisY"===this.type&&(i=null!==this.minimum?this.minimum:this.dataInfo.min,a=null!==this.maximum?this.maximum:this.dataInfo.max,isFinite(i)||isFinite(a)?0===i&&0===a?(a+=9,i=0):a-i===0?(l=Math.min(Math.abs(.01*Math.abs(a)),5),a+=l,i-=l):i>a?(l=Math.min(Math.abs(.01*Math.abs(a-i)),5),a>=0?i=a-l:a=i+l):(l=Math.min(Math.abs(.01*Math.abs(a-i)),.05),0!==a&&(a+=l),0!==i&&(i-=l)):(a="undefined"==typeof this._options.interval?-(1/0):this._options.interval,i=0),s=this.dataInfo.minDiff!==1/0?this.dataInfo.minDiff:a-i>1?.5*Math.abs(a-i):1,this.includeZero&&(null===this.minimum||isNaN(this.minimum))&&i>0&&(i=0),this.includeZero&&(null===this.maximum||isNaN(this.maximum))&&a<0&&(a=0)),r=a-i,"axisX"===this.type&&"dateTime"===this.chart.plotInfo.axisXValueType?((null===this.minimum||isNaN(this.minimum))&&(this.minimum=i-s/2),(null===this.maximum||isNaN(this.maximum))&&(this.maximum=a+s/2)):(this.intervalType="number",null===this.minimum&&("axisX"===this.type?this.minimum=i-s/2:this.minimum=Math.floor(i/this.interval)*this.interval,this.minimum=Math.min(this.minimum,null===this.sessionVariables.viewportMinimum||isNaN(this.sessionVariables.viewportMinimum)?1/0:this.sessionVariables.viewportMinimum)),null===this.maximum&&("axisX"===this.type?this.maximum=a+s/2:this.maximum=Math.ceil(a/this.interval)*this.interval,this.maximum=Math.max(this.maximum,null===this.sessionVariables.viewportMaximum||isNaN(this.sessionVariables.viewportMaximum)?-(1/0):this.sessionVariables.viewportMaximum)),0===this.maximum&&0===this.minimum&&(0===this._options.minimum?this.maximum+=10:0===this._options.maximum&&(this.minimum-=10)))),this.viewportMinimum=Math.max(this.viewportMinimum,this.minimum),this.viewportMaximum=Math.min(this.viewportMaximum,this.maximum),"axisX"===this.type&&"dateTime"===this.chart.plotInfo.axisXValueType?this.intervalStartPosition=this.getLabelStartPoint(new Date(this.viewportMinimum),this.intervalType,this.interval):this.intervalStartPosition=Math.floor((this.viewportMinimum+.2*this.interval)/this.interval)*this.interval,!this.valueFormatString&&(this.valueFormatString="#,##0.##",r=Math.abs(this.viewportMaximum-this.viewportMinimum),r<1)){var h=Math.floor(Math.abs(Math.log(r)/Math.LN10))+2;if(!isNaN(h)&&isFinite(h)||(h=2),h>2)for(var c=0;c0&&(i.setSeconds(i.getSeconds()+1),i.setMilliseconds(0)):"minute"===this.intervalType?(i.getSeconds()>0||i.getMilliseconds()>0)&&(i.setMinutes(i.getMinutes()+1),i.setSeconds(0),i.setMilliseconds(0)):"hour"===this.intervalType?(i.getMinutes()>0||i.getSeconds()>0||i.getMilliseconds()>0)&&(i.setHours(i.getHours()+1),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0)):"day"===this.intervalType?(i.getHours()>0||i.getMinutes()>0||i.getSeconds()>0||i.getMilliseconds()>0)&&(i.setDate(i.getDate()+1),i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0)):"week"===this.intervalType?(i.getDay()>0||i.getHours()>0||i.getMinutes()>0||i.getSeconds()>0||i.getMilliseconds()>0)&&(i.setDate(i.getDate()+(7-i.getDay())),i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0)):"month"===this.intervalType?(i.getDate()>1||i.getHours()>0||i.getMinutes()>0||i.getSeconds()>0||i.getMilliseconds()>0)&&(i.setMonth(i.getMonth()+1),i.setDate(1),i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0)):"year"===this.intervalType&&(i.getMonth()>0||i.getDate()>1||i.getHours()>0||i.getMinutes()>0||i.getSeconds()>0||i.getMilliseconds()>0)&&(i.setFullYear(i.getFullYear()+1),i.setMonth(0),i.setDate(1),i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0))),i},i.default=n},{"../constants/culture":22,"../helpers/utils":39,"./canvasjs":27,"./text_block":34}],27:[function(e,t,i){"use strict";function a(e,t,i,a){this._defaultsKey=e,this.parent=a,this._eventListeners=[];var s={};i&&n.themes[i]&&n.themes[i][e]&&(s=n.themes[i][e]),this._options=t?t:{},this.setOptions(this._options,s)}Object.defineProperty(i,"__esModule",{value:!0});var n=e("../constants/themes"),s=e("../constants/options");a.prototype.setOptions=function(e,t){if(s.defaultOptions[this._defaultsKey]){var i=s.defaultOptions[this._defaultsKey];for(var a in i)i.hasOwnProperty(a)&&(e&&a in e?this[a]=e[a]:t&&a in t?this[a]=t[a]:this[a]=i[a])}else s.isDebugMode&&window.console&&console.log("defaults not set")},a.prototype.updateOption=function(e){!s.defaultOptions[this._defaultsKey]&&s.isDebugMode&&window.console&&console.log("defaults not set");var t=s.defaultOptions[this._defaultsKey],i=this._options.theme?this._options.theme:this.chart&&this.chart._options.theme?this.chart._options.theme:"theme1",a={},r=this[e];return i&&n.themes[i]&&n.themes[i][this._defaultsKey]&&(a=n.themes[i][this._defaultsKey]),e in t&&(r=e in this._options?this._options[e]:a&&e in a?a[e]:t[e]),r!==this[e]&&(this[e]=r,!0)},a.prototype.trackChanges=function(e){if(!this.sessionVariables)throw"Session Variable Store not set";this.sessionVariables[e]=this._options[e]},a.prototype.isBeingTracked=function(e){return this._options._oldOptions||(this._options._oldOptions={}),!!this._options._oldOptions[e]},a.prototype.hasOptionChanged=function(e){if(!this.sessionVariables)throw"Session Variable Store not set";var t=!(this.sessionVariables[e]===this._options[e]);return t},a.prototype.addEventListener=function(e,t,i){e&&t&&(i=i||this,this._eventListeners[e]=this._eventListeners[e]||[],this._eventListeners[e].push({context:i,eventHandler:t}))},a.prototype.removeEventListener=function(e,t){if(e&&t&&this._eventListeners[e])for(var i=this._eventListeners[e],a=0;a0?this._container.clientWidth:this.width,r=this._options.height?this.height:this._container.clientHeight>0?this._container.clientHeight:this.height,this.width=n,this.height=r,this.x1=this.y1=0,this.x2=this.width,this.y2=this.height,this._selectedColorSet="undefined"!=typeof B.colorSets[this.colorSet]?B.colorSets[this.colorSet]:B.colorSets.colorSet1,this._canvasJSContainer=document.createElement("div"),this._canvasJSContainer.setAttribute("class","canvasjs-chart-container"),this._canvasJSContainer.style.position="relative",this._canvasJSContainer.style.textAlign="left",this._canvasJSContainer.style.cursor="auto",z.isCanvasSupported||(this._canvasJSContainer.style.height="0px"),this._container.appendChild(this._canvasJSContainer),this.canvas=(0,z.createCanvas)(n,r),this.canvas.style.position="absolute",this.canvas.getContext&&(this._canvasJSContainer.appendChild(this.canvas),this.ctx=this.canvas.getContext("2d"),this.ctx.textBaseline="top",(0,z.extendCtx)(this.ctx),z.isCanvasSupported?this.plotArea.ctx=this.ctx:(this.plotArea.canvas=(0,z.createCanvas)(n,r),this.plotArea.canvas.style.position="absolute",this.plotArea.canvas.setAttribute("class","plotAreaCanvas"),this._canvasJSContainer.appendChild(this.plotArea.canvas),this.plotArea.ctx=this.plotArea.canvas.getContext("2d")),this.overlaidCanvas=(0,z.createCanvas)(n,r),this.overlaidCanvas.style.position="absolute",this._canvasJSContainer.appendChild(this.overlaidCanvas),this.overlaidCanvasCtx=this.overlaidCanvas.getContext("2d"),this.overlaidCanvasCtx.textBaseline="top",this._eventManager=new f.default(this),(0,z.addEvent)(window,"resize",function(){a._updateSize()&&a.render()}),this._toolBar=document.createElement("div"),this._toolBar.setAttribute("class","canvasjs-chart-toolbar"),this._toolBar.style.cssText="position: absolute; right: 1px; top: 1px;",this._canvasJSContainer.appendChild(this._toolBar), +this.bounds={x1:0,y1:0,x2:this.width,y2:this.height},(0,z.addEvent)(this.overlaidCanvas,"click",function(e){a._mouseEventHandler(e)}),(0,z.addEvent)(this.overlaidCanvas,"mousemove",function(e){a._mouseEventHandler(e)}),(0,z.addEvent)(this.overlaidCanvas,"mouseup",function(e){a._mouseEventHandler(e)}),(0,z.addEvent)(this.overlaidCanvas,"mousedown",function(e){a._mouseEventHandler(e),(0,z.hide)(a._dropdownMenu)}),(0,z.addEvent)(this.overlaidCanvas,"mouseout",function(e){a._mouseEventHandler(e)}),(0,z.addEvent)(this.overlaidCanvas,window.navigator.msPointerEnabled?"MSPointerDown":"touchstart",function(e){a._touchEventHandler(e)}),(0,z.addEvent)(this.overlaidCanvas,window.navigator.msPointerEnabled?"MSPointerMove":"touchmove",function(e){a._touchEventHandler(e)}),(0,z.addEvent)(this.overlaidCanvas,window.navigator.msPointerEnabled?"MSPointerUp":"touchend",function(e){a._touchEventHandler(e)}),(0,z.addEvent)(this.overlaidCanvas,window.navigator.msPointerEnabled?"MSPointerCancel":"touchcancel",function(e){a._touchEventHandler(e)}),this._creditLink||(this._creditLink=document.createElement("a"),this._creditLink.setAttribute("class","canvasjs-chart-credit"),this._creditLink.setAttribute("style","outline:none;margin:0px;position:absolute;right:3px;top:"+(this.height-14)+"px;color:dimgrey;text-decoration:none;font-size:10px;font-family:Lucida Grande, Lucida Sans Unicode, Arial, sans-serif"),this._creditLink.setAttribute("tabIndex",-1),this._creditLink.setAttribute("target","_blank")),this._toolTip=new M.default(this,this._options.toolTip,this.theme),this.data=null,this.axisX=null,this.axisY=null,this.axisY2=null,this.sessionVariables={axisX:{},axisY:{},axisY2:{}})}Object.defineProperty(i,"__esModule",{value:!0});var r=e("./canvasjs"),o=a(r),l=e("./animator"),h=a(l),d=e("./data_series"),c=a(d),p=e("./text_block"),x=a(p),u=e("../helpers/render"),m=a(u),v=e("./layout_manager"),g=a(v),y=e("./event_manager"),f=a(y),b=e("./tooltip"),M=a(b),P=e("../core/culture_info"),S=a(P),T=e("../core/axis"),C=a(T),k=e("../core/title"),w=a(k),_=e("../core/legend"),A=a(_),L=e("../helpers/animator"),I=a(L),B=e("../constants/themes"),F=e("../constants/options"),z=e("../helpers/utils"),D=e("../charts/index");(0,z.extend)(s,o.default),s.prototype._updateOptions=function(){var e=this;if(this.updateOption("width"),this.updateOption("height"),this.updateOption("dataPointMaxWidth"),this.updateOption("interactivityEnabled"),this.updateOption("theme"),this.updateOption("colorSet")&&(this._selectedColorSet="undefined"!=typeof B.colorSets[this.colorSet]?B.colorSets[this.colorSet]:B.colorSets.colorSet1),this.updateOption("backgroundColor"),this.backgroundColor||(this.backgroundColor="rgba(0,0,0,0)"),this.updateOption("culture"),this._cultureInfo=new S.default(this._options.culture),this.updateOption("animationEnabled"),this.animationEnabled=this.animationEnabled&&z.isCanvasSupported,this.updateOption("animationDuration"),this.updateOption("rangeChanging"),this.updateOption("rangeChanged"),this._options.zoomEnabled?(this._zoomButton||((0,z.hide)(this._zoomButton=document.createElement("button")),setButtonState(this,this._zoomButton,"pan"),this._toolBar.appendChild(this._zoomButton),(0,z.addEvent)(this._zoomButton,"click",function(){e.zoomEnabled?(e.zoomEnabled=!1,e.panEnabled=!0,setButtonState(e,e._zoomButton,"zoom")):(e.zoomEnabled=!0,e.panEnabled=!1,setButtonState(e,e._zoomButton,"pan")),e.render()})),this._resetButton||((0,z.hide)(this._resetButton=document.createElement("button")),setButtonState(this,this._resetButton,"reset"),this._toolBar.appendChild(this._resetButton),(0,z.addEvent)(this._resetButton,"click",function(){e._toolTip.hide(),e.zoomEnabled||e.panEnabled?(e.zoomEnabled=!0,e.panEnabled=!1,setButtonState(e,e._zoomButton,"pan"),e._defaultCursor="default",e.overlaidCanvas.style.cursor=e._defaultCursor):(e.zoomEnabled=!1,e.panEnabled=!1),e.sessionVariables.axisX&&(e.sessionVariables.axisX.newViewportMinimum=null,e.sessionVariables.axisX.newViewportMaximum=null),e.sessionVariables.axisY&&(e.sessionVariables.axisY.newViewportMinimum=null,e.sessionVariables.axisY.newViewportMaximum=null),e.sessionVariables.axisY2&&(e.sessionVariables.axisY2.newViewportMinimum=null,e.sessionVariables.axisY2.newViewportMaximum=null),e.resetOverlayedCanvas(),(0,z.hide)(e._zoomButton,e._resetButton),e._dispatchRangeEvent("rangeChanging","reset"),e.render(),e._dispatchRangeEvent("rangeChanged","reset")}),this.overlaidCanvas.style.cursor=e._defaultCursor),this.zoomEnabled||this.panEnabled||(this._zoomButton?(e._zoomButton.getAttribute("state")===e._cultureInfo.zoomText?(this.panEnabled=!0,this.zoomEnabled=!1):(this.zoomEnabled=!0,this.panEnabled=!1),(0,z.show)(e._zoomButton,e._resetButton)):(this.zoomEnabled=!0,this.panEnabled=!1))):(this.zoomEnabled=!1,this.panEnabled=!1),this._menuButton?this.exportEnabled?(0,z.show)(this._menuButton):(0,z.hide)(this._menuButton):this.exportEnabled&&z.isCanvasSupported&&(this._menuButton=document.createElement("button"),setButtonState(this,this._menuButton,"menu"),this._toolBar.appendChild(this._menuButton),(0,z.addEvent)(this._menuButton,"click",function(){if("none"===e._dropdownMenu.style.display){if(e._dropDownCloseTime&&(new Date).getTime()-e._dropDownCloseTime.getTime()<=500)return;e._dropdownMenu.style.display="block",e._menuButton.blur(),e._dropdownMenu.focus()}},!0)),!this._dropdownMenu&&this.exportEnabled&&z.isCanvasSupported){this._dropdownMenu=document.createElement("div"),this._dropdownMenu.setAttribute("tabindex",-1),this._dropdownMenu.style.cssText="position: absolute; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer;right: 1px;top: 25px;min-width: 120px;outline: 0;border: 1px solid silver;font-size: 14px;font-family: Calibri, Verdana, sans-serif;padding: 5px 0px 5px 0px;text-align: left;background-color: #fff;line-height: 20px;box-shadow: 2px 2px 10px #888888;",e._dropdownMenu.style.display="none",this._toolBar.appendChild(this._dropdownMenu),(0,z.addEvent)(this._dropdownMenu,"blur",function(){(0,z.hide)(e._dropdownMenu),e._dropDownCloseTime=new Date},!0);var t=document.createElement("div");t.style.cssText="padding: 2px 15px 2px 10px",t.innerHTML=this._cultureInfo.saveJPGText,this._dropdownMenu.appendChild(t),(0,z.addEvent)(t,"mouseover",function(){this.style.backgroundColor="#EEEEEE"},!0),(0,z.addEvent)(t,"mouseout",function(){this.style.backgroundColor="transparent"},!0),(0,z.addEvent)(t,"click",function(){exportCanvas(e.canvas,"jpg",e.exportFileName),(0,z.hide)(e._dropdownMenu)},!0);var t=document.createElement("div");t.style.cssText="padding: 2px 15px 2px 10px",t.innerHTML=this._cultureInfo.savePNGText,this._dropdownMenu.appendChild(t),(0,z.addEvent)(t,"mouseover",function(){this.style.backgroundColor="#EEEEEE"},!0),(0,z.addEvent)(t,"mouseout",function(){this.style.backgroundColor="transparent"},!0),(0,z.addEvent)(t,"click",function(){exportCanvas(e.canvas,"png",e.exportFileName),(0,z.hide)(e._dropdownMenu)},!0)}if("none"!==this._toolBar.style.display&&this._zoomButton&&(this.panEnabled?setButtonState(e,e._zoomButton,"zoom"):setButtonState(e,e._zoomButton,"pan"),e._resetButton.getAttribute("state")!==e._cultureInfo.resetText&&setButtonState(e,e._resetButton,"reset")),"undefined"==typeof F.defaultOptions.Chart.creditHref)this.creditHref="http://canvasjs.com/",this.creditText="CanvasJS.com";else var i=this.updateOption("creditText"),a=this.updateOption("creditHref");(0===this.renderCount||i||a)&&(this._creditLink.setAttribute("href",this.creditHref),this._creditLink.innerHTML=this.creditText),this.creditHref&&this.creditText?this._creditLink.parentElement||this._canvasJSContainer.appendChild(this._creditLink):this._creditLink.parentElement&&this._canvasJSContainer.removeChild(this._creditLink),this._options.toolTip&&this._toolTip._options!==this._options.toolTip&&(this._toolTip._options=this._options.toolTip);for(var n in this._toolTip._options)this._toolTip._options.hasOwnProperty(n)&&this._toolTip.updateOption(n)},s.prototype._updateSize=function(){var e=0,t=0;return this._options.width?e=this.width:this.width=e=this._container.clientWidth>0?this._container.clientWidth:this.width,this._options.height?t=this.height:this.height=t=this._container.clientHeight>0?this._container.clientHeight:this.height,(this.canvas.width!==e*z.devicePixelBackingStoreRatio||this.canvas.height!==t*z.devicePixelBackingStoreRatio)&&((0,z.setCanvasSize)(this.canvas,e,t),(0,z.setCanvasSize)(this.overlaidCanvas,e,t),(0,z.setCanvasSize)(this._eventManager.ghostCanvas,e,t),!0)},s.prototype._initialize=function(){this._animator?this._animator.cancelAllAnimations():this._animator=new h.default(this),this.removeAllEventListeners(),this.disableToolTip=!1,this._axes=[],this.pieDoughnutClickHandler=null,this.animationRequestId&&this.cancelRequestAnimFrame.call(window,this.animationRequestId),this._updateOptions(),this.animatedRender=z.isCanvasSupported&&this.animationEnabled&&0===this.renderCount,this._updateSize(),this.clearCanvas(),this.ctx.beginPath(),this.axisX=null,this.axisY=null,this.axisY2=null,this._indexLabels=[],this._dataInRenderedOrder=[],this._events=[],this._eventManager&&this._eventManager.reset(),this.plotInfo={axisPlacement:null,axisXValueType:null,plotTypes:[]},this.layoutManager=new g.default(0,0,this.width,this.height,2),this.plotArea.layoutManager&&this.plotArea.layoutManager.reset(),this.data=[];for(var e=0,t=0;t=0){var i=new c.default(this,this._options.data[t],this.theme,e-1,++this._eventManager.lastObjectId);null===i.name&&(i.name="DataSeries "+e),null===i.color?this._options.data.length>1?(i._colorSet=[this._selectedColorSet[i.index%this._selectedColorSet.length]],i.color=this._selectedColorSet[i.index%this._selectedColorSet.length]):"line"===i.type||"stepLine"===i.type||"spline"===i.type||"area"===i.type||"stepArea"===i.type||"splineArea"===i.type||"stackedArea"===i.type||"stackedArea100"===i.type||"rangeArea"===i.type||"rangeSplineArea"===i.type||"candlestick"===i.type||"ohlc"===i.type?i._colorSet=[this._selectedColorSet[0]]:i._colorSet=this._selectedColorSet:i._colorSet=[i.color],null===i.markerSize&&(("line"===i.type||"stepLine"===i.type||"spline"===i.type)&&i.dataPoints&&i.dataPoints.length0&&"undefined"==typeof this.axisY2._options.gridThickness?this.axisY2.gridThickness=0:this.axisY2.gridThickness>0&&"undefined"==typeof this.axisY._options.gridThickness&&(this.axisY.gridThickness=0));var a=!1;if(this._axes.length>0&&(this.zoomEnabled||this.panEnabled))for(var i=0;i0){var u=(0,z.createCanvas)(this.width,this.height),m=u.getContext("2d");r.push(this.renderIndexLabels(m))}var v=this;if(r.length>0?(v.disableToolTip=!0,v._animator.animate(200,v.animationDuration,function(e){v.ctx.clearRect(0,0,v.width,v.height),v.ctx.drawImage(o,0,0,Math.floor(v.width*z.devicePixelBackingStoreRatio),Math.floor(v.height*z.devicePixelBackingStoreRatio),0,0,v.width,v.height);for(var t=0;t=p.startTimePercent&&p.animationCallback(p.easingFunction(e-p.startTimePercent,0,1,1-p.startTimePercent),p):p.animationCallback(p.easingFunction(e,0,1,1),p);v.dispatchEvent("dataAnimationIterationEnd",{chart:v})},function(){r=[];for(var e=0;e0&&v.renderIndexLabels(),v.dispatchEvent("dataAnimationIterationEnd",{chart:v})),this.attachPlotAreaEventHandlers(),this.zoomEnabled||this.panEnabled||!this._zoomButton||"none"===this._zoomButton.style.display||(0,z.hide)(this._zoomButton,this._resetButton),this._toolTip._updateToolTip(),this.renderCount++,F.isDebugMode){var v=this;setTimeout(function(){var e=document.getElementById("ghostCanvasCopy");if(e){(0,z.setCanvasSize)(e,v.width,v.height);var t=e.getContext("2d");t.drawImage(v._eventManager.ghostCanvas,0,0)}},2e3)}},s.prototype.attachPlotAreaEventHandlers=function(){var e;this.attachEvent((e={context:this,chart:this,mousedown:this._plotAreaMouseDown,mouseup:this._plotAreaMouseUp,mousemove:this._plotAreaMouseMove,cursor:this.zoomEnabled?"col-resize":"move"},n(e,"cursor",this.panEnabled?"move":"default"),n(e,"capture",!0),n(e,"bounds",this.plotArea),e))},s.prototype.categoriseDataSeries=function(){for(var e="",t=0;t=0){for(var i=null,a=!1,n=null,r=!1,o=0;on.max&&(n.max=t),ia.max&&(a.max=i),l>0){var x=t-o.dataPoints[l-1].x;if(x<0&&(x*=-1),n.minDiff>x&&0!==x&&(n.minDiff=x),null!==i&&null!==o.dataPoints[l-1].y){var u=i-o.dataPoints[l-1].y;u<0&&(u*=-1),a.minDiff>u&&0!==u&&(a.minDiff=u)}}if(!(t0))l-=2;else{if(t>p&&!d)d=!0;else if(t>p&&d)continue;o.dataPoints[l].label&&(e.axisX.labels[t]=o.dataPoints[l].label),tn.viewPortMax&&(n.viewPortMax=t),null!==i&&(ia.viewPortMax&&(a.viewPortMax=i))}}this.plotInfo.axisXValueType=o.xValueType=s?"dateTime":"number"}},s.prototype._processStackedPlotUnit=function(e){if(e.dataSeriesIndexes&&!(e.dataSeriesIndexes.length<1)){for(var t,i,a=e.axisY.dataInfo,n=e.axisX.dataInfo,s=!1,r=[],o=[],l=0;ln.max&&(n.max=t),d>0){var m=t-h.dataPoints[d-1].x;if(m<0&&(m*=-1),n.minDiff>m&&0!==m&&(n.minDiff=m),null!==i&&null!==h.dataPoints[d-1].y){var v=i-h.dataPoints[d-1].y;v<0&&(v*=-1),a.minDiff>v&&0!==v&&(a.minDiff=v)}}if(!(t0))d-=2;else{if(t>u&&!p)p=!0;else if(t>u&&p)continue;h.dataPoints[d].label&&(e.axisX.labels[t]=h.dataPoints[d].label),tn.viewPortMax&&(n.viewPortMax=t),null!==i&&(e.yTotals[t]=(e.yTotals[t]?e.yTotals[t]:0)+Math.abs(i),i>=0?r[t]?r[t]+=i:r[t]=i:o[t]?o[t]+=i:o[t]=i)}}this.plotInfo.axisXValueType=h.xValueType=s?"dateTime":"number"}for(d in r)if(r.hasOwnProperty(d)){if(isNaN(d))continue;var g=r[d];if(ga.max&&(a.max=g),dn.viewPortMax)continue;ga.viewPortMax&&(a.viewPortMax=g)}for(d in o)if(o.hasOwnProperty(d)){if(isNaN(d))continue;var g=o[d];if(ga.max&&(a.max=g),dn.viewPortMax)continue;ga.viewPortMax&&(a.viewPortMax=g)}}},s.prototype._processStacked100PlotUnit=function(e){if(e.dataSeriesIndexes&&!(e.dataSeriesIndexes.length<1)){for(var t,i,a=e.axisY.dataInfo,n=e.axisX.dataInfo,s=!1,r=!1,o=!1,l=[],h=0;hn.max&&(n.max=t),c>0){var v=t-d.dataPoints[c-1].x;if(v<0&&(v*=-1),n.minDiff>v&&0!==v&&(n.minDiff=v),null!==i&&null!==d.dataPoints[c-1].y){var g=i-d.dataPoints[c-1].y;g<0&&(g*=-1),a.minDiff>g&&0!==g&&(a.minDiff=g)}}if(!(t0))c-=2;else{if(t>m&&!x)x=!0;else if(t>m&&x)continue;d.dataPoints[c].label&&(e.axisX.labels[t]=d.dataPoints[c].label),tn.viewPortMax&&(n.viewPortMax=t),null!==i&&(e.yTotals[t]=(e.yTotals[t]?e.yTotals[t]:0)+Math.abs(i),i>=0?r=!0:o=!0,l[t]?l[t]+=Math.abs(i):l[t]=Math.abs(i))}}this.plotInfo.axisXValueType=d.xValueType=s?"dateTime":"number"}r&&!o?(a.max=99,a.min=1):r&&o?(a.max=99,a.min=-99):!r&&o&&(a.max=-1,a.min=-99),a.viewPortMin=a.min,a.viewPortMax=a.max,e.dataPointYSums=l}},s.prototype._processMultiYPlotUnit=function(e){if(e.dataSeriesIndexes&&!(e.dataSeriesIndexes.length<1))for(var t,i,a,n,s=e.axisY.dataInfo,r=e.axisX.dataInfo,o=!1,l=0;lr.max&&(r.max=t),as.max&&(s.max=n),d>0){var m=t-h.dataPoints[d-1].x;if(m<0&&(m*=-1),r.minDiff>m&&0!==m&&(r.minDiff=m),null!==i[0]&&null!==h.dataPoints[d-1].y[0]){var v=i[0]-h.dataPoints[d-1].y[0];v<0&&(v*=-1),s.minDiff>v&&0!==v&&(s.minDiff=v)}}if(!(t0))d-=2;else{if(t>u&&!p)p=!0;else if(t>u&&p)continue;h.dataPoints[d].label&&(e.axisX.labels[t]=h.dataPoints[d].label),tr.viewPortMax&&(r.viewPortMax=t),null!==i&&(as.viewPortMax&&(s.viewPortMax=n))}}this.plotInfo.axisXValueType=h.xValueType=o?"dateTime":"number"}},s.prototype.getDataPointAtXY=function(e,t,i){i=i||!1;for(var a=[],n=this._dataInRenderedOrder.length-1;n>=0;n--){var s=this._dataInRenderedOrder[n],r=null;r=s.getDataPointAtXY(e,t,i),r&&a.push(r)}for(var o=null,l=!1,h=0;h=r.x1&&e<=r.x2&&t>=r.y1&&t<=r.y2&&(a=r.id)}return a},s.prototype.getAutoFontSize=function(e,t,i){t=t||this.width,i=i||this.height;var a=e/400;return Math.round(Math.min(this.width,this.height)*a)},s.prototype.resetOverlayedCanvas=function(){this.overlaidCanvasCtx.clearRect(0,0,this.width,this.height)},s.prototype.clearCanvas=function(){this.ctx.clearRect(0,0,this.width,this.height),this.backgroundColor&&(this.ctx.fillStyle=this.backgroundColor,this.ctx.fillRect(0,0,this.width,this.height))},s.prototype.attachEvent=function(e){this._events.push(e)},s.prototype._touchEventHandler=function(e){if(e.changedTouches&&this.interactivityEnabled){var t=[],i=e.changedTouches,a=i?i[0]:e,n=null;switch(e.type){case"touchstart":case"MSPointerDown":t=["mousemove","mousedown"],this._lastTouchData=(0,z.getMouseCoordinates)(a),this._lastTouchData.time=new Date;break;case"touchmove":case"MSPointerMove":t=["mousemove"];break;case"touchend":case"MSPointerUp":t="touchstart"===this._lastTouchEventType||"MSPointerDown"===this._lastTouchEventType?["mouseup","click"]:["mouseup"];break;default:return}if(!(i&&i.length>1)){n=(0,z.getMouseCoordinates)(a),n.time=new Date;try{var s=n.y-this._lastTouchData.y,r=(n.x-this._lastTouchData.x,n.time-this._lastTouchData.time);if(Math.abs(s)>15&&(this._lastTouchData.scroll||r<200)){this._lastTouchData.scroll=!0;var o=window.parent||window;o&&o.scrollBy&&o.scrollBy(0,-s)}}catch(e){}if(this._lastTouchEventType=e.type,this._lastTouchData.scroll&&this.zoomEnabled)return this.isDrag&&this.resetOverlayedCanvas(),void(this.isDrag=!1);for(var l=0;l x: "+a.x+"; y:"+a.y),i&&window.console.log(e.which),"mouseup"===n&&window.console.log("mouseup")),!i){if(s.capturedEventParam)t=s.capturedEventParam,"mouseup"===n&&(s.capturedEventParam=null,t.chart.overlaidCanvas.releaseCapture?t.chart.overlaidCanvas.releaseCapture():document.body.removeEventListener("mouseup",t.chart._mouseEventHandler,!1)), +t.hasOwnProperty(n)&&t[n].call(t.context,a.x,a.y);else if(this._events){for(var r=0;r=o.x1&&a.x<=o.x2&&a.y>=o.y1&&a.y<=o.y2){t[n].call(t.context,a.x,a.y),"mousedown"===n&&t.capture===!0?(s.capturedEventParam=t,this.overlaidCanvas.setCapture?this.overlaidCanvas.setCapture():document.body.addEventListener("mouseup",this._mouseEventHandler,!1)):"mouseup"===n&&(t.chart.overlaidCanvas.releaseCapture?t.chart.overlaidCanvas.releaseCapture():document.body.removeEventListener("mouseup",this._mouseEventHandler,!1));break}t=null}t&&t.cursor?e.target.style.cursor=t.cursor:e.target.style.cursor=this._defaultCursor}if(this._toolTip&&this._toolTip.enabled){var l=this.plotArea;(a.xl.x2||a.yl.y2)&&this._toolTip.hide()}this.isDrag&&this.zoomEnabled||!this._eventManager||this._eventManager.mouseEventHandler(e)}}},s.prototype._plotAreaMouseDown=function(e,t){this.isDrag=!0,"none"!==this.plotInfo.axisPlacement?this.dragStartPoint={x:e,y:t}:this.dragStartPoint={x:e,y:t}},s.prototype._plotAreaMouseUp=function(e,t){if(("normal"===this.plotInfo.axisPlacement||"xySwapped"===this.plotInfo.axisPlacement)&&this.isDrag){var i=t-this.dragStartPoint.y,a=e-this.dragStartPoint.x,n=this.zoomType.indexOf("x")>=0,s=this.zoomType.indexOf("y")>=0,r=!1;if(this.resetOverlayedCanvas(),"xySwapped"===this.plotInfo.axisPlacement){var o=s;s=n,n=o}if(this.panEnabled||this.zoomEnabled){if(this.panEnabled)for(var l=0,h=0;hd.maximum&&(l=d.viewportMaximum-d.maximum,d.sessionVariables.newViewportMinimum=d.viewportMinimum-l,d.sessionVariables.newViewportMaximum=d.viewportMaximum-l,r=!0)}else if((!n||Math.abs(a)>2)&&(!s||Math.abs(i)>2)&&this.zoomEnabled){if(!this.dragStartPoint)return;var c={x1:n?this.dragStartPoint.x:this.plotArea.x1,y1:s?this.dragStartPoint.y:this.plotArea.y1,x2:n?e:this.plotArea.x2,y2:s?t:this.plotArea.y2};Math.abs(c.x1-c.x2)>2&&Math.abs(c.y1-c.y2)>2&&this._zoomPanToSelectedRegion(c.x1,c.y1,c.x2,c.y2)&&(r=!0)}r&&(this._ignoreNextEvent=!0,this._dispatchRangeEvent("rangeChanging","zoom"),this.render(),this._dispatchRangeEvent("rangeChanged","zoom"),r&&this.zoomEnabled&&"none"===this._zoomButton.style.display&&((0,z.show)(this._zoomButton,this._resetButton),setButtonState(this,this._zoomButton,"pan"),setButtonState(this,this._resetButton,"reset")))}}this.isDrag=!1},s.prototype._plotAreaMouseMove=function(e,t){if(this.isDrag&&"none"!==this.plotInfo.axisPlacement){var i=0,a=0,n=null,s=null,r=this.zoomType.indexOf("x")>=0,o=this.zoomType.indexOf("y")>=0;if("xySwapped"===this.plotInfo.axisPlacement){var l=o;o=r,r=l}if(i=this.dragStartPoint.x-e,a=this.dragStartPoint.y-t,Math.abs(i)>2&&Math.abs(i)<8&&(this.panEnabled||this.zoomEnabled)?this._toolTip.hide():this.panEnabled||this.zoomEnabled||this._toolTip.mouseMoveHandler(e,t),(!r||Math.abs(i)>2||!o||Math.abs(a)>2)&&(this.panEnabled||this.zoomEnabled))if(this.panEnabled)s={x1:r?this.plotArea.x1+i:this.plotArea.x1,y1:o?this.plotArea.y1+a:this.plotArea.y1,x2:r?this.plotArea.x2+i:this.plotArea.x2,y2:o?this.plotArea.y2+a:this.plotArea.y2},this._zoomPanToSelectedRegion(s.x1,s.y1,s.x2,s.y2,!0)&&(this._dispatchRangeEvent("rangeChanging","pan"),this.render(),this._dispatchRangeEvent("rangeChanged","pan"),this.dragStartPoint.x=e,this.dragStartPoint.y=t);else if(this.zoomEnabled){this.resetOverlayedCanvas(),n=this.overlaidCanvasCtx.globalAlpha,this.overlaidCanvasCtx.globalAlpha=.7,this.overlaidCanvasCtx.fillStyle="#A0ABB8";var h={x1:r?this.dragStartPoint.x:this.plotArea.x1,y1:o?this.dragStartPoint.y:this.plotArea.y1,x2:r?e-this.dragStartPoint.x:this.plotArea.x2-this.plotArea.x1,y2:o?t-this.dragStartPoint.y:this.plotArea.y2-this.plotArea.y1};this.overlaidCanvasCtx.fillRect(h.x1,h.y1,h.x2,h.y2),this.overlaidCanvasCtx.globalAlpha=n}}else this._toolTip.mouseMoveHandler(e,t)},s.prototype._zoomPanToSelectedRegion=function(e,t,i,a,n){n=n||!1;var s=this.zoomType.indexOf("x")>=0,r=this.zoomType.indexOf("y")>=0,o=!1,l=[],h=[];this.axisX&&s&&l.push(this.axisX),this.axisY&&r&&l.push(this.axisY),this.axisY2&&r&&l.push(this.axisY2);for(var d=[],c=0;cu){var m=u;u=x,x=m}if(isFinite(p.dataInfo.minDiff))if(Math.abs(u-x)<3*Math.abs(p.dataInfo.minDiff)||xp.maximum){if(!n){o=!1;break}}else h.push(p),d.push({val1:x,val2:u}),o=!0}if(o)for(var c=0;c0||e.y1>0)&&e.ctx.translate(e.x1,e.y1),this.axisX&&t)e.x1=this.axisX.lineCoordinates.x1t.lineCoordinates.x2?this.axisX.lineCoordinates.x2:t.lineCoordinates.x2,e.y2=this.axisX.lineCoordinates.y2>this.axisX.lineCoordinates.y1?this.axisX.lineCoordinates.y2:t.lineCoordinates.y2,e.width=e.x2-e.x1,e.height=e.y2-e.y1;else{var i=this.layoutManager.getFreeSpace();e.x1=i.x1,e.x2=i.x2,e.y1=i.y1,e.y2=i.y2,e.width=i.width,e.height=i.height}z.isCanvasSupported||(e.canvas.width=e.width,e.canvas.height=e.height,e.canvas.style.left=e.x1+"px",e.canvas.style.top=e.y1+"px",(e.x1>0||e.y1>0)&&e.ctx.translate(-e.x1,-e.y1)),e.layoutManager=new g.default(e.x1,e.y1,e.x2,e.y2,2)},s.prototype.getPixelCoordinatesOnPlotArea=function(e,t){return{x:this.axisX.getPixelCoordinatesOnAxis(e).x,y:this.axisY.getPixelCoordinatesOnAxis(t).y}},s.prototype.renderIndexLabels=function(e){for(var t=e||this.plotArea.ctx,i=this.plotArea,a=0,n=0,s=0,r=0,o=0,l=0,h=0,d=0,c=0,p=0;p=0||"pie"===v.dataSeries.type||"doughnut"===v.dataSeries.type)&&(k=this.getPercentAndTotal(v.dataSeries,v.dataPoint)),(v.dataSeries.indexLabelFormatter||v.dataPoint.indexLabelFormatter)&&(w={chart:this._options,dataSeries:v.dataSeries,dataPoint:v.dataPoint,index:v.indexKeyword,total:k.total,percent:k.percent});var _=v.dataPoint.indexLabelFormatter?v.dataPoint.indexLabelFormatter(w):v.dataPoint.indexLabel?this.replaceKeywordsWithValue(v.dataPoint.indexLabel,v.dataPoint,v.dataSeries,null,v.indexKeyword):v.dataSeries.indexLabelFormatter?v.dataSeries.indexLabelFormatter(w):v.dataSeries.indexLabel?this.replaceKeywordsWithValue(v.dataSeries.indexLabel,v.dataPoint,v.dataSeries,null,v.indexKeyword):null;if(null!==_&&""!==_){var A=(0,z.getProperty)("indexLabelPlacement",v.dataPoint,v.dataSeries),L=(0,z.getProperty)("indexLabelOrientation",v.dataPoint,v.dataSeries),B=v.direction,F=v.dataSeries.axisX,D=v.dataSeries.axisY,X=new x.default(t,{x:0,y:0,maxWidth:T?T:.5*this.width,maxHeight:C?5*f:1.5*f,angle:"horizontal"===L?0:-90,text:_,padding:0,backgroundColor:S,horizontalAlign:"left",fontSize:f,fontFamily:b,fontWeight:P,fontColor:y,fontStyle:M,textBaseline:"top"});X.measureText();if(g.indexOf("line")>=0||g.indexOf("area")>=0||g.indexOf("bubble")>=0||g.indexOf("scatter")>=0){if(v.dataPoint.xF.viewportMaximum||v.dataPoint.yD.viewportMaximum)continue}else if(v.dataPoint.xF.viewportMaximum)continue;if(h=2,l=2,"horizontal"===L?(d=X.width,c=X.height):(c=X.width,d=X.height),"normal"===this.plotInfo.axisPlacement)g.indexOf("line")>=0||g.indexOf("area")>=0?(A="auto",h=4):g.indexOf("stacked")>=0?"auto"===A&&(A="inside"):"bubble"!==g&&"scatter"!==g||(A="inside"),u=v.point.x-d/2,"inside"!==A?(n=i.y1,s=i.y2,B>0?(m=v.point.y-c-h,ms-c-h&&(m="auto"===A?Math.min(v.point.y,s)-c-h:s-c-h))):(n=Math.max(v.bounds.y1,i.y1),s=Math.min(v.bounds.y2,i.y2),a=g.indexOf("range")>=0?B>0?Math.max(v.bounds.y1,i.y1)+c/2+h:Math.min(v.bounds.y2,i.y2)-c/2-h:(Math.max(v.bounds.y1,i.y1)+Math.min(v.bounds.y2,i.y2))/2,B>0?(m=Math.max(v.point.y,a)-c/2,ms-c-h&&("bubble"===g||"scatter"===g)&&(m=Math.min(v.point.y+h,i.y2-c-h))),m=Math.min(m,s-c));else if(g.indexOf("line")>=0||g.indexOf("area")>=0||g.indexOf("scatter")>=0?(A="auto",l=4):g.indexOf("stacked")>=0?"auto"===A&&(A="inside"):"bubble"===g&&(A="inside"),m=v.point.y-c/2,"inside"!==A)r=i.x1,o=i.x2,B<0?(u=v.point.x-d-l,uo-d-l&&(u="auto"===A?Math.min(v.point.x,o)-d-l:o-d-l));else{if(r=Math.max(v.bounds.x1,i.x1),o=Math.min(v.bounds.x2,i.x2),g.indexOf("range")>=0)a=B<0?Math.max(v.bounds.x1,i.x1)+d/2+l:Math.min(v.bounds.x2,i.x2)-d/2-l;else var a=(Math.max(v.bounds.x1,i.x1)+Math.min(v.bounds.x2,i.x2))/2;u=B<0?Math.max(v.point.x,a)-d/2:Math.min(v.point.x,a)-d/2,u=Math.max(u,r)}"vertical"===L&&(m+=c),X.x=u,X.y=m,X.render(!0)}}var Y={source:t,dest:this.plotArea.ctx,animationCallback:I.default.fadeInAnimation,easingFunction:I.default.easing.easeInQuad,animationBase:0,startTimePercent:.7};return Y},s.prototype.renderLine=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(i<=0)){var a=this._eventManager.ghostCtx;t.save();var n=this.plotArea;t.beginPath(),t.rect(n.x1,n.y1,n.width,n.height),t.clip();for(var s=[],r=0;r0?Math.max(l.lineThickness,4):0;var p=l._colorSet,x=p[0];t.strokeStyle=x;var u,v,g,y=!0,f=0;if(t.beginPath(),h.length>0){var b=!1;for(f=0;fe.axisX.dataInfo.viewPortMax))if("number"==typeof h[f].y){u=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(g-e.axisX.conversionParameters.minimum)+.5<<0,v=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(h[f].y-e.axisY.conversionParameters.minimum)+.5<<0;var M=l.dataPointIds[f];if(this._eventManager.objectMap[M]={id:M,objectType:"dataPoint",dataSeriesIndex:o,dataPointIndex:f,x1:u,y1:v},y||b?(t.beginPath(),t.moveTo(u,v),z.isCanvasSupported&&(a.beginPath(),a.moveTo(u,v)),y=!1,b=!1):(t.lineTo(u,v),z.isCanvasSupported&&a.lineTo(u,v),f%500==0&&(t.stroke(),t.beginPath(),t.moveTo(u,v),z.isCanvasSupported&&(a.stroke(),a.beginPath(),a.moveTo(u,v)))),h[f].markerSize>0||l.markerSize>0){var P=l.getMarkerProperties(f,u,v,t);s.push(P);var S=(0,z.intToHexColorString)(M);z.isCanvasSupported&&s.push({x:u,y:v,ctx:a,type:P.type,size:P.size,color:S,borderColor:S,borderThickness:P.borderThickness})}(h[f].indexLabel||l.indexLabel||h[f].indexLabelFormatter||l.indexLabelFormatter)&&this._indexLabels.push({chartType:"line",dataPoint:h[f],dataSeries:l,point:{x:u,y:v},direction:h[f].y>=0?1:-1,color:x})}else f>0&&(t.stroke(),z.isCanvasSupported&&a.stroke()),b=!0;t.stroke(),z.isCanvasSupported&&a.stroke()}}m.default.drawMarkers(s),t.restore(),t.beginPath(),z.isCanvasSupported&&a.beginPath();var T={source:t,dest:this.plotArea.ctx,animationCallback:I.default.xClipAnimation,easingFunction:I.default.easing.linear,animationBase:0};return T}},s.prototype.renderStepLine=function(e){var t=e.targetCanvasCtx||this.plotArea.ctx,i=e.dataSeriesIndexes.length;if(!(i<=0)){var a=this._eventManager.ghostCtx;t.save();var n=this.plotArea;t.beginPath(),t.rect(n.x1,n.y1,n.width,n.height),t.clip();for(var s=[],r=0;r0?Math.max(l.lineThickness,4):0;var p=l._colorSet,x=p[0];t.strokeStyle=x;var u,v,g,y=!0,f=0;if(t.beginPath(),h.length>0){var b=!1;for(f=0;fe.axisX.dataInfo.viewPortMax))if("number"==typeof h[f].y){var M=v;u=e.axisX.conversionParameters.reference+e.axisX.conversionParameters.pixelPerUnit*(g-e.axisX.conversionParameters.minimum)+.5<<0,v=e.axisY.conversionParameters.reference+e.axisY.conversionParameters.pixelPerUnit*(h[f].y-e.axisY.conversionParameters.minimum)+.5<<0;var P=l.dataPointIds[f];if(this._eventManager.objectMap[P]={id:P,objectType:"dataPoint",dataSeriesIndex:o,dataPointIndex:f,x1:u,y1:v},y||b?(t.beginPath(),t.moveTo(u,v),z.isCanvasSupported&&(a.beginPath(),a.moveTo(u,v)),y=!1,b=!1):(t.lineTo(u,M),z.isCanvasSupported&&a.lineTo(u,M),t.lineTo(u,v),z.isCanvasSupported&&a.lineTo(u,v),f%500==0&&(t.stroke(),t.beginPath(),t.moveTo(u,v),z.isCanvasSupported&&(a.stroke(),a.beginPath(),a.moveTo(u,v)))),h[f].markerSize>0||l.markerSize>0){var S=l.getMarkerProperties(f,u,v,t);s.push(S);var T=(0,z.intToHexColorString)(P);z.isCanvasSupported&&s.push({x:u,y:v,ctx:a,type:S.type,size:S.size,color:T,borderColor:T,borderThickness:S.borderThickness})}(h[f].indexLabel||l.indexLabel||h[f].indexLabelFormatter||l.indexLabelFormatter)&&this._indexLabels.push({chartType:"stepLine",dataPoint:h[f],dataSeries:l,point:{x:u,y:v},direction:h[f].y>=0?1:-1,color:x})}else f>0&&(t.stroke(),z.isCanvasSupported&&a.stroke()),b=!0;t.stroke(),z.isCanvasSupported&&a.stroke()}}m.default.drawMarkers(s),t.restore(),t.beginPath(),z.isCanvasSupported&&a.beginPath();var C={source:t,dest:this.plotArea.ctx,animationCallback:I.default.xClipAnimation,easingFunction:I.default.easing.linear,animationBase:0};return C}},s.prototype.animationRequestId=null,s.prototype.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}}(),s.prototype.cancelRequestAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.mozCancelRequestAnimationFrame||window.oCancelRequestAnimationFrame||window.msCancelRequestAnimationFrame||clearTimeout}(),s.prototype.getPercentAndTotal=function(e,t){var i=null,a=null,n=null;if(e.type.indexOf("stacked")>=0)a=0,i=t.x.getTime?t.x.getTime():t.x,i in e.plotUnit.yTotals&&(a=e.plotUnit.yTotals[i],n=isNaN(t.y)?0:0===a?0:t.y/a*100);else if("pie"===e.type||"doughnut"===e.type){a=0;for(var s=0;s=0||"pie"===i.type||"doughnut"===i.type)&&(e.indexOf("#percent")>=0||e.indexOf("#total")>=0)){var o="#percent",l="#total",h=this.getPercentAndTotal(i,t);l=isNaN(h.total)?l:h.total,o=isNaN(h.percent)?o:h.percent;do{var d="";if(i.percentFormatString)d=i.percentFormatString;else{d="#,##0.";var c=Math.max(Math.ceil(Math.log(1/Math.abs(o))/Math.LN10),2);!isNaN(c)&&isFinite(c)||(c=2);for(var p=0;p=0||e.indexOf("#total")>=0)}var x=function(e){if('"'===e[0]&&'"'===e[e.length-1]||"'"===e[0]&&"'"===e[e.length-1])return e.slice(1,e.length-1);var s=(0,z.trimString)(e.slice(1,e.length-1));s=s.replace("#index",n);var o=null;try{var l=s.match(/(.*?)\s*\[\s*(.*?)\s*\]/);l&&l.length>0&&(o=(0,z.trimString)(l[2]),s=(0,z.trimString)(l[1]))}catch(e){}var h=null;if("color"===s)return t.color?t.color:i.color?i.color:i._colorSet[a%i._colorSet.length];if(t.hasOwnProperty(s))h=t;else{if(!i.hasOwnProperty(s))return"";h=i}var d=h[s];return null!==o&&(d=d[o]),"x"===s?r.axisX&&"dateTime"===r.plotInfo.axisXValueType?(0,z.dateFormat)(d,t.xValueFormatString?t.xValueFormatString:i.xValueFormatString?i.xValueFormatString:r.axisX&&r.axisX.valueFormatString?r.axisX.valueFormatString:"DD MMM YY",r._cultureInfo):(0,z.numberFormat)(d,t.xValueFormatString?t.xValueFormatString:i.xValueFormatString?i.xValueFormatString:"#,##0.########",r._cultureInfo):"y"===s?(0,z.numberFormat)(d,t.yValueFormatString?t.yValueFormatString:i.yValueFormatString?i.yValueFormatString:"#,##0.########",r._cultureInfo):"z"===s?(0,z.numberFormat)(d,t.zValueFormatString?t.zValueFormatString:i.zValueFormatString?i.zValueFormatString:"#,##0.########",r._cultureInfo):d};return e.replace(s,x)},s.prototype.renderSpline=D.SplineChart,s.prototype.renderColumn=D.ColumnChart,s.prototype.renderStackedColumn=D.StackedColumnChart,s.prototype.renderStackedColumn100=D.StackedColumn100Chart,s.prototype.renderBar=D.BarChart,s.prototype.renderStackedBar=D.StackedBarChart,s.prototype.renderStackedBar100=D.StackedBar100Chart,s.prototype.renderArea=D.AreaChart,s.prototype.renderSplineArea=D.SplineAreaChart,s.prototype.renderStepArea=D.StepAreaChart,s.prototype.renderStackedArea=D.StackedAreaChart,s.prototype.renderStackedArea100=D.StackedArea100Chart,s.prototype.renderBubble=D.BubbleChart,s.prototype.renderScatter=D.ScatterChart,s.prototype.renderCandlestick=D.CandlestickChart,s.prototype.renderRangeColumn=D.RangeColumnChart,s.prototype.renderRangeBar=D.RangeBarChart,s.prototype.renderRangeArea=D.RangeAreaChart,s.prototype.renderRangeSplineArea=D.RangeSplineAreaChart,s.prototype.renderPie=D.PieChart,i.default=s},{"../charts/index":6,"../constants/options":23,"../constants/themes":24,"../core/axis":26,"../core/culture_info":29,"../core/legend":33,"../core/title":35,"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39,"./animator":25,"./canvasjs":27,"./data_series":30,"./event_manager":31,"./layout_manager":32,"./text_block":34,"./tooltip":36}],29:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function n(e){var t;e&&l.cultures[e]&&(t=l.cultures[e]),n.base.constructor.call(this,"CultureInfo",t)}Object.defineProperty(i,"__esModule",{value:!0});var s=e("./canvasjs"),r=a(s),o=e("../helpers/utils"),l=e("../constants/culture");(0,o.extend)(n,r.default),i.default=n},{"../constants/culture":22,"../helpers/utils":39,"./canvasjs":27}],30:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function n(e,t,i,a,s){n.base.constructor.call(this,"DataSeries",t,i),this.chart=e,this.canvas=e.canvas,this._ctx=e.canvas.ctx,this.index=a,this.noDataPointsInPlotArea=0,this.id=s,this.chart._eventManager.objectMap[s]={id:s,objectType:"dataSeries",dataSeriesIndex:a},this.dataPointIds=[],this.plotUnit=[],this.axisX=null,this.axisY=null,null===this.fillOpacity&&(this.type.match(/area/i)?this.fillOpacity=.7:this.fillOpacity=1),this.axisPlacement=this.getDefaultAxisPlacement(),"undefined"==typeof this._options.indexLabelFontSize&&(this.indexLabelFontSize=this.chart.getAutoFontSize(this.indexLabelFontSize))}Object.defineProperty(i,"__esModule",{value:!0});var s=e("./canvasjs"),r=a(s),o=e("../helpers/utils");(0,o.extend)(n,r.default),n.prototype.getDefaultAxisPlacement=function(){var e=this.type;return"column"===e||"line"===e||"stepLine"===e||"spline"===e||"area"===e||"stepArea"===e||"splineArea"===e||"stackedColumn"===e||"stackedLine"===e||"bubble"===e||"scatter"===e||"stackedArea"===e||"stackedColumn100"===e||"stackedLine100"===e||"stackedArea100"===e||"candlestick"===e||"ohlc"===e||"rangeColumn"===e||"rangeArea"===e||"rangeSplineArea"===e?"normal":"bar"===e||"stackedBar"===e||"stackedBar100"===e||"rangeBar"===e?"xySwapped":"pie"===e||"doughnut"===e||"funnel"===e?"none":(window.console.log("Unknown Chart Type: "+e),null)},n.getDefaultLegendMarker=function(e){return"column"===e||"stackedColumn"===e||"stackedLine"===e||"bar"===e||"stackedBar"===e||"stackedBar100"===e||"bubble"===e||"scatter"===e||"stackedColumn100"===e||"stackedLine100"===e||"stepArea"===e||"candlestick"===e||"ohlc"===e||"rangeColumn"===e||"rangeBar"===e||"rangeArea"===e||"rangeSplineArea"===e?"square":"line"===e||"stepLine"===e||"spline"===e||"pie"===e||"doughnut"===e||"funnel"===e?"circle":"area"===e||"splineArea"===e||"stackedArea"===e||"stackedArea100"===e?"triangle":(window.console.log("Unknown Chart Type: "+e),null)},n.prototype.getDataPointAtX=function(e,t){if(!this.dataPoints||0===this.dataPoints.length)return null;var i={dataPoint:null,distance:1/0,index:NaN},a=null,n=0,s=0,r=1,o=1/0,l=0,h=0,d=1e3,c=0;if("none"!==this.chart.plotInfo.axisPlacement){var p=this.dataPoints[this.dataPoints.length-1].x-this.dataPoints[0].x;c=p>0?Math.min(Math.max((this.dataPoints.length-1)/p*(e-this.dataPoints[0].x)>>0,0),this.dataPoints.length):0}for(;;){if(s=r>0?c+n:c-n,s>=0&&s0?l++:h++,l>d&&h>d)break}else if(c-n<0&&c+n>=this.dataPoints.length)break;r===-1?(n++,r=1):r=-1}return t||i.dataPoint.x!==e?t&&null!==i.dataPoint?i:null:i},n.prototype.getDataPointAtXY=function(e,t,i){if(!this.dataPoints||0===this.dataPoints.length)return null;i=i||!1;var a=[],n=0,s=0,r=1,l=!1,h=1/0,d=0,c=0,p=1e3,x=0;if("none"!==this.chart.plotInfo.axisPlacement){var u=this.chart.axisX.getXValueAt({x:e,y:t}),m=this.dataPoints[this.dataPoints.length-1].x-this.dataPoints[0].x;x=m>0?Math.min(Math.max((this.dataPoints.length-1)/m*(u-this.dataPoints[0].x)>>0,0),this.dataPoints.length):0}for(;;){if(s=r>0?x+n:x-n,s>=0&&s=g.x1&&e<=g.x2&&t>=g.y1&&t<=g.y2&&(a.push({dataPoint:y,dataPointIndex:s,dataSeries:this,distance:Math.min(Math.abs(g.x1-e),Math.abs(g.x2-e),Math.abs(g.y1-t),Math.abs(g.y2-t))}),l=!0);break;case"line":case"stepLine":case"spline":case"area":case"stepArea":case"stackedArea":case"stackedArea100":case"splineArea":case"scatter":var b=(0,o.getProperty)("markerSize",y,this)||4,M=i?20:b;f=Math.sqrt(Math.pow(g.x1-e,2)+Math.pow(g.y1-t,2)),f<=M&&a.push({dataPoint:y,dataPointIndex:s,dataSeries:this,distance:f});var P=Math.abs(g.x1-e);P<=h?h=P:r>0?d++:c++,f<=b/2&&(l=!0);break;case"rangeArea":case"rangeSplineArea":var b=(0,o.getProperty)("markerSize",y,this)||4,M=i?20:b;f=Math.min(Math.sqrt(Math.pow(g.x1-e,2)+Math.pow(g.y1-t,2)),Math.sqrt(Math.pow(g.x1-e,2)+Math.pow(g.y2-t,2))),f<=M&&a.push({dataPoint:y,dataPointIndex:s,dataSeries:this,distance:f});var P=Math.abs(g.x1-e);P<=h?h=P:r>0?d++:c++,f<=b/2&&(l=!0);break;case"bubble":var b=g.size;f=Math.sqrt(Math.pow(g.x1-e,2)+Math.pow(g.y1-t,2)),f<=b/2&&(a.push({dataPoint:y,dataPointIndex:s,dataSeries:this,distance:f}),l=!0);break;case"pie":case"doughnut":var S=g.center,T="doughnut"===this.type?g.percentInnerRadius*g.radius:0;if(f=Math.sqrt(Math.pow(S.x-e,2)+Math.pow(S.y-t,2)),fT){var C=t-S.y,k=e-S.x,w=Math.atan2(C,k);w<0&&(w+=2*Math.PI),w=Number(((w/Math.PI*180%360+360)%360).toFixed(12));var _=Number(((g.startAngle/Math.PI*180%360+360)%360).toFixed(12)),A=Number(((g.endAngle/Math.PI*180%360+360)%360).toFixed(12));0===A&&g.endAngle>1&&(A=360),_>=A&&0!==y.y&&(A+=360,w<_&&(w+=360)),w>_&&w=g.x1-g.borderThickness/2&&e<=g.x2+g.borderThickness/2&&t>=g.y2-g.borderThickness/2&&t<=g.y3+g.borderThickness/2||Math.abs(g.x2-e+g.x1-e)=g.y1&&t<=g.y4)&&(a.push({dataPoint:y,dataPointIndex:s,dataSeries:this,distance:Math.min(Math.abs(g.x1-e),Math.abs(g.x2-e),Math.abs(g.y2-t),Math.abs(g.y3-t))}),l=!0);break;case"ohlc":(Math.abs(g.x2-e+g.x1-e)=g.y2&&t<=g.y3||e>=g.x1&&e<=(g.x2+g.x1)/2&&t>=g.y1-g.borderThickness/2&&t<=g.y1+g.borderThickness/2||e>=(g.x1+g.x2)/2&&e<=g.x2&&t>=g.y4-g.borderThickness/2&&t<=g.y4+g.borderThickness/2)&&(a.push({dataPoint:y,dataPointIndex:s,dataSeries:this,distance:Math.min(Math.abs(g.x1-e),Math.abs(g.x2-e),Math.abs(g.y2-t),Math.abs(g.y3-t))}),l=!0)}if(l||d>p&&c>p)break}}else if(x-n<0&&x+n>=this.dataPoints.length)break;r===-1?(n++,r=1):r=-1}for(var L=null,I=0;I0){var S=null,T=0,C=0,k=0;C=null!==this.itemWidth?null!==this.itemMaxWidth?Math.min(this.itemWidth,this.itemMaxWidth,s):Math.min(this.itemWidth,s):null!==this.itemMaxWidth?Math.min(this.itemMaxWidth,s):s,g=0===g?.6*this.lineHeight:g,C-=g+.1*this.horizontalSpacing;for(var c=0;cs)&&(S={items:[],width:0},h.push(S),this.height+=k,k=0),k=Math.max(k,b.textBlock.height),b.textBlock.x=S.width,b.textBlock.y=0,S.width+=Math.round(b.textBlock.width+.1*this.horizontalSpacing+g+(0===S.width?0:this.horizontalSpacing)+("line"===b.chartType||"spline"===b.chartType||"stepLine"===b.chartType?2*(.1*this.lineHeight):0)),S.items.push(b),this.width=Math.max(S.width,this.width)):(b.textBlock=new d.default(this.ctx,{x:0,y:0,maxWidth:C,maxHeight:this.itemWrap===!0?o:1.5*this.fontSize,angle:0,text:b.text,horizontalAlign:"left",fontSize:this.fontSize,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontColor:this.fontColor,fontStyle:this.fontStyle,textBaseline:"top"}),b.textBlock.measureText(),null!==this.itemWidth&&(b.textBlock.width=this.itemWidth-(g+.1*this.horizontalSpacing+("line"===b.chartType||"spline"===b.chartType||"stepLine"===b.chartType?2*(.1*this.lineHeight):0))),this.height<=o?(S={items:[],width:0},h.push(S)):(S=h[T],T=(T+1)%h.length),this.height+=b.textBlock.height,b.textBlock.x=S.width,b.textBlock.y=0,S.width+=Math.round(b.textBlock.width+.1*this.horizontalSpacing+g+(0===S.width?0:this.horizontalSpacing)+("line"===b.chartType||"spline"===b.chartType||"stepLine"===b.chartType?2*(.1*this.lineHeight):0)),S.items.push(b),this.width=Math.max(S.width,this.width)))}this.itemWrap===!1?this.height=h.length*this.lineHeight:this.height+=k,this.height=Math.min(o,this.height),this.width=Math.min(s,this.width)}"top"===this.verticalAlign?(n="left"===this.horizontalAlign?t.x1:"right"===this.horizontalAlign?t.x2-this.width:t.x1+t.width/2-this.width/2,a=t.y1):"center"===this.verticalAlign?(n="left"===this.horizontalAlign?t.x1:"right"===this.horizontalAlign?t.x2-this.width:t.x1+t.width/2-this.width/2,a=t.y1+t.height/2-this.height/2):"bottom"===this.verticalAlign&&(n="left"===this.horizontalAlign?t.x1:"right"===this.horizontalAlign?t.x2-this.width:t.x1+t.width/2-this.width/2,a=t.y2-this.height),this.items=l;for(var c=0;c0?Math.max(k,b.textBlock.height):b.textBlock.height,this.chart.data[b.dataSeriesIndex].visible||(this.ctx.globalAlpha=1);var B=intToHexColorString(b.id);this.ghostCtx.fillStyle=B,this.ghostCtx.beginPath(),this.ghostCtx.fillRect(I,b.textBlock.y,b.textBlock.x+b.textBlock.width-I,b.textBlock.height),b.x1=this.chart._eventManager.objectMap[b.id].x1=I,b.y1=this.chart._eventManager.objectMap[b.id].y1=b.textBlock.y,b.x2=this.chart._eventManager.objectMap[b.id].x2=b.textBlock.x+b.textBlock.width,b.y2=this.chart._eventManager.objectMap[b.id].y2=b.textBlock.y+b.textBlock.height}w+=k}e.layoutManager.registerSpace(i,{width:this.width+2+2,height:this.height+5+5}),this.bounds={x1:n,y1:a,x2:n+this.width,y2:a+this.height}},i.default=n},{"../helpers/render":38,"../helpers/utils":39,"./canvasjs":27,"./data_series":30,"./text_block":34}],34:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function n(e,t){n.base.constructor.call(this,"TextBlock",t),this.ctx=e,this._isDirty=!0,this._wrappedText=null,this._lineHeight=(0,o.getFontHeightInPixels)(this.fontFamily,this.fontSize,this.fontWeight)}Object.defineProperty(i,"__esModule",{value:!0});var s=e("./canvasjs"),r=a(s),o=e("../helpers/utils");(0,o.extend)(n,r.default),n.prototype.render=function(e){e&&this.ctx.save();var t=this.ctx.font;this.ctx.textBaseline=this.textBaseline;var i=0;this._isDirty&&this.measureText(this.ctx),this.ctx.translate(this.x,this.y+i),"middle"===this.textBaseline&&(i=-this._lineHeight/2),this.ctx.font=this._getFontString(),this.ctx.rotate(Math.PI/180*this.angle);var a=0,n=this.padding,s=null;(this.borderThickness>0&&this.borderColor||this.backgroundColor)&&this.ctx.roundRect(0,i,this.width,this.height,this.cornerRadius,this.borderThickness,this.backgroundColor,this.borderColor),this.ctx.fillStyle=this.fontColor;for(var r=0;rt))break;s=r-1}}a>t&&o.length>1&&(o=o.substr(0,o.length-1),a=this.ctx.measureText(o).width);var l=!0;if(o.length!==e.length&&" "!==e[o.length]||(l=!1),l){var h=o.split(" ");h.length>1&&h.pop(),o=h.join(" "),a=this.ctx.measureText(o).width}return{text:o,width:a}},n.prototype._wrapText=function(){var e=new String((0,o.trimString)(String(this.text))),t=[],i=this.ctx.font,a=0,n=0;for(this.ctx.font=this._getFontString();e.length>0;){var s=this.maxWidth-2*this.padding,r=this.maxHeight-2*this.padding,l=this._getLineWithWidth(e,s,!1);if(l.height=this._lineHeight,t.push(l),n=Math.max(n,l.width),a+=l.height,e=(0,o.trimString)(e.slice(l.text.length,e.length)),r&&a>r){var l=t.pop();a-=l.height}}this._wrappedText={lines:t,width:n,height:a},this.width=n+2*this.padding,this.height=a+2*this.padding,this.ctx.font=i},n.prototype._getFontString=function(){return(0,o.getFontString)("",this,null)},i.default=n},{"../helpers/utils":39,"./canvasjs":27}],35:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function n(e,t){n.base.constructor.call(this,"Title",t,e.theme),this.chart=e,this.canvas=e.canvas,this.ctx=this.chart.ctx,"undefined"==typeof this._options.fontSize&&(this.fontSize=this.chart.getAutoFontSize(this.fontSize)),this.width=null,this.height=null,this.bounds={x1:null,y1:null,x2:null,y2:null}}Object.defineProperty(i,"__esModule",{value:!0});var s=e("./canvasjs"),r=a(s),o=e("./text_block"),l=a(o),h=e("../helpers/utils");(0,h.extend)(n,r.default),n.prototype.render=function(){if(this.text){var e,t,i=this.dockInsidePlotArea?this.chart.plotArea:this.chart,a=i.layoutManager.getFreeSpace(),n=a.x1,s=a.y1,r=0,o=0,h=2,d=this.chart._menuButton&&this.chart.exportEnabled&&"top"===this.verticalAlign?22:0;"top"===this.verticalAlign||"bottom"===this.verticalAlign?(null===this.maxWidth&&(this.maxWidth=a.width-2*h-d*("center"===this.horizontalAlign?2:1)),o=.5*a.height-this.margin-h,r=0):"center"===this.verticalAlign&&("left"===this.horizontalAlign||"right"===this.horizontalAlign?(null===this.maxWidth&&(this.maxWidth=a.height-2*h),o=.5*a.width-this.margin-h):"center"===this.horizontalAlign&&(null===this.maxWidth&&(this.maxWidth=a.width-2*h),o=.5*a.height-2*h)),this.wrap||(o=Math.min(o,Math.max(1.5*this.fontSize,this.fontSize+2.5*this.padding)));var c=new l.default(this.ctx,{fontSize:this.fontSize,fontFamily:this.fontFamily,fontColor:this.fontColor,fontStyle:this.fontStyle,fontWeight:this.fontWeight,horizontalAlign:this.horizontalAlign,verticalAlign:this.verticalAlign,borderColor:this.borderColor,borderThickness:this.borderThickness,backgroundColor:this.backgroundColor,maxWidth:this.maxWidth,maxHeight:o,cornerRadius:this.cornerRadius,text:this.text,padding:this.padding,textBaseline:"top"}),p=c.measureText();"top"===this.verticalAlign||"bottom"===this.verticalAlign?("top"===this.verticalAlign?(s=a.y1+h,t="top"):"bottom"===this.verticalAlign&&(s=a.y2-h-p.height,t="bottom"),"left"===this.horizontalAlign?n=a.x1+h:"center"===this.horizontalAlign?n=a.x1+a.width/2-p.width/2:"right"===this.horizontalAlign&&(n=a.x2-h-p.width-d),e=this.horizontalAlign,this.width=p.width,this.height=p.height):"center"===this.verticalAlign&&("left"===this.horizontalAlign?(n=a.x1+h,s=a.y2-h-(this.maxWidth/2-p.width/2),r=-90,t="left",this.width=p.height,this.height=p.width):"right"===this.horizontalAlign?(n=a.x2-h,s=a.y1+h+(this.maxWidth/2-p.width/2),r=90,t="right",this.width=p.height,this.height=p.width):"center"===this.horizontalAlign&&(s=i.y1+(i.height/2-p.height/2),n=i.x1+(i.width/2-p.width/2),t="center",this.width=p.width,this.height=p.height),e="center"),c.x=n,c.y=s,c.angle=r,c.horizontalAlign=e,c.render(!0),i.layoutManager.registerSpace(t,{width:this.width+("left"===t||"right"===t?this.margin+h:0),height:this.height+("top"===t||"bottom"===t?this.margin+h:0)}),this.bounds={x1:n,y1:s,x2:n+this.width,y2:s+this.height},this.ctx.textBaseline="top"}},i.default=n},{"../helpers/utils":39,"./canvasjs":27,"./text_block":34}],36:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function n(e,t,i){n.base.constructor.call(this,"ToolTip",t,i),this.chart=e,this.canvas=e.canvas,this.ctx=this.chart.ctx,this.currentSeriesIndex=-1,this.currentDataPointIndex=-1,this._timerId=0,this._prevX=NaN,this._prevY=NaN,this._initialize()}Object.defineProperty(i,"__esModule",{value:!0});var s=e("../helpers/animator"),r=(a(s),e("../helpers/render")),o=a(r),l=e("./canvasjs"),h=a(l),d=e("../helpers/utils");(0,d.extend)(n,h.default),n.prototype._initialize=function(){if(this.enabled){this.container=document.createElement("div"),this.container.setAttribute("class","canvasjs-chart-tooltip"),this.container.style.position="absolute",this.container.style.height="auto",this.container.style.boxShadow="1px 1px 2px 2px rgba(0,0,0,0.1)",this.container.style.zIndex="1000",this.container.style.display="none";var e='
=0&&(h.dataSeries=this.chart.data[l],null!==h.dataPoint.y&&o.push(h))}if(0===o.length)return;o.sort(function(e,t){return e.distance-t.distance});var c=o[0];for(l=0;l0&&"undefined"!=typeof this.chart._eventManager.objectMap[x]){var u=this.chart._eventManager.objectMap[x];if("legendItem"===u.objectType)return;this.currentSeriesIndex=u.dataSeriesIndex,this.currentDataPointIndex=u.dataPointIndex>=0?u.dataPointIndex:-1}else this.currentDataPointIndex=-1}else this.currentDataPointIndex=-1;if(this.currentSeriesIndex>=0){n=this.chart.data[this.currentSeriesIndex];var h={};if(this.currentDataPointIndex>=0)a=n.dataPoints[this.currentDataPointIndex],h.dataSeries=n,h.dataPoint=a,h.index=this.currentDataPointIndex,h.distance=Math.abs(a.x-r);else{if(!this.enabled||"line"!==n.type&&"stepLine"!==n.type&&"spline"!==n.type&&"area"!==n.type&&"stepArea"!==n.type&&"splineArea"!==n.type&&"stackedArea"!==n.type&&"stackedArea100"!==n.type&&"rangeArea"!==n.type&&"rangeSplineArea"!==n.type&&"candlestick"!==n.type&&"ohlc"!==n.type)return;var r=n.axisX.conversionParameters.minimum+(e-n.axisX.conversionParameters.reference)/n.axisX.conversionParameters.pixelPerUnit;h=n.getDataPointAtX(r,!0),h.dataSeries=n,this.currentDataPointIndex=h.index,a=h.dataPoint}if(null!==h.dataPoint.y)if(h.dataSeries.axisY)if(h.dataPoint.y.length>0){for(var m=0,l=0;lh.dataSeries.axisY.viewportMaximum&&m++;m-h.dataPoint.y.length&&s.push(h)}else h.dataPoint.y>=h.dataSeries.axisY.viewportMinimum&&h.dataPoint.y<=h.dataSeries.axisY.viewportMaximum&&s.push(h);else s.push(h)}}if(s.length>0&&(this.highlightObjects(s),this.enabled)){var v="";if(v=this.getToolTipInnerHTML({entries:s}),null!==v){this.contentDiv.innerHTML=v,this.contentDiv.innerHTML=v;var g=!1;"none"===this.container.style.display&&(g=!0,this.container.style.display="block");try{this.contentDiv.style.background=this.backgroundColor?this.backgroundColor:d.isCanvasSupported?"rgba(255,255,255,.9)":"rgb(255,255,255)",this.contentDiv.style.borderRightColor=this.contentDiv.style.borderLeftColor=this.contentDiv.style.borderColor=this.borderColor?this.borderColor:s[0].dataPoint.color?s[0].dataPoint.color:s[0].dataSeries.color?s[0].dataSeries.color:s[0].dataSeries._colorSet[s[0].index%s[0].dataSeries._colorSet.length],this.contentDiv.style.borderWidth=this.borderThickness||0===this.borderThickness?this.borderThickness+"px":"2px",this.contentDiv.style.borderRadius=this.cornerRadius||0===this.cornerRadius?this.cornerRadius+"px":"5px",this.container.style.borderRadius=this.contentDiv.style.borderRadius,this.contentDiv.style.fontSize=this.fontSize||0===this.fontSize?this.fontSize+"px":"14px",this.contentDiv.style.color=this.fontColor?this.fontColor:"#000000",this.contentDiv.style.fontFamily=this.fontFamily?this.fontFamily:"Calibri, Arial, Georgia, serif;",this.contentDiv.style.fontWeight=this.fontWeight?this.fontWeight:"normal",this.contentDiv.style.fontStyle=this.fontStyle?this.fontStyle:d.isCanvasSupported?"italic":"normal"}catch(e){}var y;"pie"===s[0].dataSeries.type||"doughnut"===s[0].dataSeries.type||"funnel"===s[0].dataSeries.type||"bar"===s[0].dataSeries.type||"rangeBar"===s[0].dataSeries.type||"stackedBar"===s[0].dataSeries.type||"stackedBar100"===s[0].dataSeries.type?y=e-10-this.container.clientWidth:(y=s[0].dataSeries.axisX.conversionParameters.reference+s[0].dataSeries.axisX.conversionParameters.pixelPerUnit*(s[0].dataPoint.x-s[0].dataSeries.axisX.conversionParameters.minimum)-this.container.clientWidth<<0,y-=10),y<0&&(y+=this.container.clientWidth+20),y+this.container.clientWidth>this.chart._container.clientWidth&&(y=Math.max(0,this.chart._container.clientWidth-this.container.clientWidth)),y+="px",i=1!==s.length||this.shared||"line"!==s[0].dataSeries.type&&"stepLine"!==s[0].dataSeries.type&&"spline"!==s[0].dataSeries.type&&"area"!==s[0].dataSeries.type&&"stepArea"!==s[0].dataSeries.type&&"splineArea"!==s[0].dataSeries.type&&"stackedArea"!==s[0].dataSeries.type&&"stackedArea100"!==s[0].dataSeries.type?"bar"===s[0].dataSeries.type||"rangeBar"===s[0].dataSeries.type||"stackedBar"===s[0].dataSeries.type||"stackedBar100"===s[0].dataSeries.type?s[0].dataSeries.axisX.conversionParameters.reference+s[0].dataSeries.axisX.conversionParameters.pixelPerUnit*(s[0].dataPoint.x-s[0].dataSeries.axisX.viewportMinimum)+.5<<0:t:s[0].dataSeries.axisY.conversionParameters.reference+s[0].dataSeries.axisY.conversionParameters.pixelPerUnit*(s[0].dataPoint.y-s[0].dataSeries.axisY.viewportMinimum)+.5<<0,i=-i+10,i+this.container.clientHeight+5>0&&(i-=i+this.container.clientHeight+5-0),i+="px",this.container.style.left=y,this.container.style.bottom=i,!this.animationEnabled||g?this.disableAnimation():this.enableAnimation()}else this.hide(!1)}}},n.prototype.highlightObjects=function(e){var t=this.chart.overlaidCanvasCtx;this.chart.resetOverlayedCanvas(),t.clearRect(0,0,this.chart.width,this.chart.height),t.save();var i=this.chart.plotArea,a=0;t.rect(i.x1,i.y1,i.x2-i.x1,i.y2-i.y1),t.clip();for(var n=0;n{name}:  {y}":"bubble"===a.type?r+=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:"{name}:  {y},   {z}":"pie"===a.type||"doughnut"===a.type||"funnel"===a.type?r+=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:"  {y}":"rangeColumn"===a.type||"rangeBar"===a.type||"rangeArea"===a.type||"rangeSplineArea"===a.type?r+=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:"{name}:  {y[0]}, {y[1]}":"candlestick"!==a.type&&"ohlc"!==a.type||(r+=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:"{name}:
Open:   {y[0]}
High:    {y[1]}
Low:   {y[2]}
Close:   {y[3]}"),null===i&&(i=""),this.reversed===!0?(i=this.chart.replaceKeywordsWithValue(r,n,a,s)+i,l"+i)):(i+=this.chart.replaceKeywordsWithValue(r,n,a,s),l")));null!==i&&(i=d+i)}else{if(a=t[0].dataSeries,n=t[0].dataPoint,s=t[0].index,null===n.toolTipContent||"undefined"==typeof n.toolTipContent&&null===a._options.toolTipContent)return null;"line"===a.type||"stepLine"===a.type||"spline"===a.type||"area"===a.type||"stepArea"===a.type||"splineArea"===a.type||"column"===a.type||"bar"===a.type||"scatter"===a.type||"stackedColumn"===a.type||"stackedColumn100"===a.type||"stackedBar"===a.type||"stackedBar100"===a.type||"stackedArea"===a.type||"stackedArea100"===a.type?r=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:""+(n.label?"{label}":"{x}")+" :  {y}":"bubble"===a.type?r=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:""+(n.label?"{label}":"{x}")+":  {y},   {z}":"pie"===a.type||"doughnut"===a.type||"funnel"===a.type?r=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:(n.name?"{name}:  ":n.label?"{label}:  ":"")+"{y}":"rangeColumn"===a.type||"rangeBar"===a.type||"rangeArea"===a.type||"rangeSplineArea"===a.type?r=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:""+(n.label?"{label}":"{x}")+" :  {y[0]},  {y[1]}":"candlestick"!==a.type&&"ohlc"!==a.type||(r=n.toolTipContent?n.toolTipContent:a.toolTipContent?a.toolTipContent:this.content&&"function"!=typeof this.content?this.content:""+(n.label?"{label}":"{x}")+"
Open:   {y[0]}
High:    {y[1]}
Low:     {y[2]}
Close:   {y[3]}"),null===i&&(i=""),i+=this.chart.replaceKeywordsWithValue(r,n,a,s)}return i},n.prototype.enableAnimation=function(){this.container.style.WebkitTransition||(this.container.style.WebkitTransition="left .2s ease-out, bottom .2s ease-out",this.container.style.MozTransition="left .2s ease-out, bottom .2s ease-out",this.container.style.MsTransition="left .2s ease-out, bottom .2s ease-out",this.container.style.transition="left .2s ease-out, bottom .2s ease-out")},n.prototype.disableAnimation=function(){this.container.style.WebkitTransition&&(this.container.style.WebkitTransition="",this.container.style.MozTransition="",this.container.style.MsTransition="",this.container.style.transition="")},n.prototype.hide=function(e){this.enabled&&(e="undefined"==typeof e||e,this.container.style.display="none",this.currentSeriesIndex=-1,this._prevX=NaN,this._prevY=NaN,e&&this.chart.resetOverlayedCanvas())},i.default=n},{"../helpers/animator":37,"../helpers/render":38,"../helpers/utils":39,"./canvasjs":27}],37:[function(e,t,i){"use strict";function a(e,t){if(0!==e){var i=t.dest,a=t.source.canvas,n=t.animationBase,s=n-n*e;i.drawImage(a,0,0,a.width,a.height,0,s,i.canvas.width/devicePixelBackingStoreRatio,e*i.canvas.height/devicePixelBackingStoreRatio)}}function n(e,t){if(0!==e){var i=t.dest,a=t.source.canvas,n=t.animationBase,s=n-n*e;i.drawImage(a,0,0,a.width,a.height,s,0,e*i.canvas.width/devicePixelBackingStoreRatio,i.canvas.height/devicePixelBackingStoreRatio)}}function s(e,t){if(0!==e){var i=t.dest,a=t.source.canvas;i.save(),e>0&&i.drawImage(a,0,0,a.width*e,a.height,0,0,a.width*e/devicePixelBackingStoreRatio,a.height/devicePixelBackingStoreRatio),i.restore()}}function r(e,t){if(0!==e){var i=t.dest,a=t.source.canvas;i.save(),i.globalAlpha=e,i.drawImage(a,0,0,a.width,a.height,0,0,i.canvas.width/devicePixelBackingStoreRatio,i.canvas.height/devicePixelBackingStoreRatio),i.restore()}}Object.defineProperty(i,"__esModule",{value:!0});var o={linear:function(e,t,i,a){return i*e/a+t},easeOutQuad:function(e,t,i,a){return-i*(e/=a)*(e-2)+t},easeOutQuart:function(e,t,i,a){return-i*((e=e/a-1)*e*e*e-1)+t},easeInQuad:function(e,t,i,a){return i*(e/=a)*e+t},easeInQuart:function(e,t,i,a){return i*(e/=a)*e*e*e+t}};i.default={yScaleAnimation:a,xScaleAnimation:n,xClipAnimation:s,fadeInAnimation:r,easing:o}},{}],38:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var a={drawMarker:function(e,t,i,a,n,s,r,o){if(i){var l=1;i.fillStyle=s?s:"#000000",i.strokeStyle=r?r:"#000000",i.lineWidth=o?o:0,"circle"===a?(i.moveTo(e,t),i.beginPath(),i.arc(e,t,n/2,0,2*Math.PI,!1),s&&i.fill(),o&&(r?i.stroke():(l=i.globalAlpha,i.globalAlpha=.15,i.strokeStyle="black",i.stroke(),i.globalAlpha=l))):"square"===a?(i.beginPath(),i.rect(e-n/2,t-n/2,n,n),s&&i.fill(),o&&(r?i.stroke():(l=i.globalAlpha,i.globalAlpha=.15,i.strokeStyle="black",i.stroke(),i.globalAlpha=l))):"triangle"===a?(i.beginPath(),i.moveTo(e-n/2,t+n/2), +i.lineTo(e+n/2,t+n/2),i.lineTo(e,t-n/2),i.closePath(),s&&i.fill(),o&&(r?i.stroke():(l=i.globalAlpha,i.globalAlpha=.15,i.strokeStyle="black",i.stroke(),i.globalAlpha=l)),i.beginPath()):"cross"===a&&(i.strokeStyle=s,o=n/4,i.lineWidth=o,i.beginPath(),i.moveTo(e-n/2,t-n/2),i.lineTo(e+n/2,t+n/2),i.stroke(),i.moveTo(e+n/2,t-n/2),i.lineTo(e-n/2,t+n/2),i.stroke())}},drawMarkers:function(e){for(var t=0;t0&&this.stroke()}}function d(e,t){return e-t}function c(e,t){return e.x-t.x}function p(e){var t=((16711680&e)>>16).toString(16),i=((65280&e)>>8).toString(16),a=((255&e)>>0).toString(16);return t=t.length<2?"0"+t:t,i=i.length<2?"0"+i:i,a=a.length<2?"0"+a:a,"#"+t+i+a}function x(e,t,i){var a=e<<16|t<<8|i;return a}function u(e){var t=[],i=(16711680&e)>>16,a=(65280&e)>>8,n=(255&e)>>0;return t[0]=i,t[1]=a,t[2]=n,t}function m(e){var t=this.length>>>0,i=Number(arguments[1])||0;for(i=i<0?Math.ceil(i):Math.floor(i),i<0&&(i+=t);i0?"-":"+")+Math.floor(Math.abs(k)/60);case"zz":return(k>0?"-":"+")+o(Math.floor(Math.abs(k)/60),2);case"zzz":return(k>0?"-":"+")+o(Math.floor(Math.abs(k)/60),2)+o(Math.abs(k)%60,2);default:return e.slice(1,e.length-1)}})}}function M(e,t,i){if(null===e)return"";e=Number(e);var a=e<0;a&&(e*=-1);var n=i?i.decimalSeparator:".",s=i?i.digitGroupSeparator:",",r="";t=String(t);var l=1,h="",d="",c=-1,p=[],x=[],u=0,m=0,v=0,g=!1,y=0;d=t.match(/"[^"]*"|'[^']*'|[eE][+-]*[0]+|[,]+[.]|‰|./g);for(var f=null,b=0;d&&b0;)if(f=p.pop(),"#"===f||"0"===f)if(C++,C===u){var L=S;if(S=[],"0"===f)for(var I=u-k-(L?L.length:0);I>0;)L.unshift("0"),I--;for(;L.length>0;)h=L.pop()+h,A++,A%_===0&&w===v&&L.length>0&&(h=s+h);a&&(h="-"+h)}else S.length>0?(h=S.pop()+h,k++,A++):"0"===f&&(h="0"+h,k++,A++),A%_===0&&w===v&&S.length>0&&(h=s+h);else"E"!==f[0]&&"e"!==f[0]||"0"!==f[f.length-1]||!/[eE][+-]*[0]+/.test(f)?","===f?(w++,_=A,A=0,S.length>0&&(h=s+h)):h=f.length>1&&('"'===f[0]&&'"'===f[f.length-1]||"'"===f[0]&&"'"===f[f.length-1])?f.slice(1,f.length-1)+h:f+h:(f=y<0?f.replace("+","").replace("-",""):f.replace("-",""),h+=f.replace(/[0]+/,function(e){return o(y,e.length)}));for(var B="",F=!1;x.length>0;)f=x.shift(),"#"===f||"0"===f?T.length>0&&0!==Number(T.join(""))?(B+=T.shift(),F=!0):"0"===f&&(B+="0",F=!0):f.length>1&&('"'===f[0]&&'"'===f[f.length-1]||"'"===f[0]&&"'"===f[f.length-1])?B+=f.slice(1,f.length-1):"E"!==f[0]&&"e"!==f[0]||"0"!==f[f.length-1]||!/[eE][+-]*[0]+/.test(f)?B+=f:(f=y<0?f.replace("+","").replace("-",""):f.replace("-",""),B+=f.replace(/[0]+/,function(e){return o(y,e.length)}));return h+=(F?n:"")+B}function P(e,t,i){e*=H,t*=H;for(var a=i.getImageData(e,t,2,2).data,n=!0,s=0;s<4;s++)if(a[s]!==a[s+4]|a[s]!==a[s+8]|a[s]!==a[s+12]){n=!1;break}return n?x(a[0],a[1],a[2]):0}function S(e){var t=0,i=0;return e=e||window.event,e.offsetX||0===e.offsetX?(t=e.offsetX,i=e.offsetY):e.layerX||0==e.layerX?(t=e.layerX,i=e.layerY):(t=e.pageX-e.target.offsetLeft,i=e.pageY-e.target.offsetTop),{x:t,y:i}}function T(e,t,i){var a="",n=e?e+"FontStyle":"fontStyle",s=e?e+"FontWeight":"fontWeight",r=e?e+"FontSize":"fontSize",o=e?e+"FontFamily":"fontFamily";a+=t[n]?t[n]+" ":i&&i[n]?i[n]+" ":"",a+=t[s]?t[s]+" ":i&&i[s]?i[s]+" ":"",a+=t[r]?t[r]+"px ":i&&i[r]?i[r]+"px ":"";var l=t[o]?t[o]+"":i&&i[o]?i[o]+"":"";if(!j&&l){var h=l.split(",")[0];"'"!==h[0]&&'"'!==h[0]&&(h="'"+h+"'"),a+=h}else a+=l;return a}function C(e,t,i){var a=e in t?t[e]:i[e];return a}function k(e,t,i){if(j&&E){var a=e.getContext("2d");R=a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||a.backingStorePixelRatio||1,H=W/R,e.width=t*H,e.height=i*H,W!==R&&(e.style.width=t+"px",e.style.height=i+"px",a.scale(H,H))}else e.width=t,e.height=i}function w(e,t){var i=document.createElement("canvas");return i.setAttribute("class","canvasjs-chart-canvas"),k(i,e,t),j||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(i),i}function _(e,t,i){if(e&&t&&i){var a=i+"."+("jpeg"===t?"jpg":t),n="image/"+t,s=e.toDataURL(n),r=!1,o=document.createElement("a");o.download=a,o.href=s,o.target="_blank";if("undefined"!=typeof Blob&&new Blob){for(var l=s.replace(/^data:[a-z\/]*;base64,/,""),h=atob(l),d=new ArrayBuffer(h.length),c=new Uint8Array(d),p=0;p
Please right click on the image and save it to your device
"),u.document.close()}}}function A(e,t,i){t.getAttribute("state")!==i&&(t.setAttribute("state",i),t.setAttribute("type","button"),t.style.position="relative",t.style.margin="0px 0px 0px 0px",t.style.padding="3px 4px 0px 4px",t.style.cssFloat="left",t.setAttribute("title",e._cultureInfo[i+"Text"]),t.innerHTML=""+e._cultureInfo[i+"Text"]+"")}function L(){for(var e=null,t=0;t=0?t/100:1);return!isNaN(i)&&i<=t&&i>=0?i:t}function z(e,t,i,a,n,s,r,o,l,h,d,c,p){"undefined"==typeof p&&(p=1),r=r||0,o=o||"black";var x=t,u=a,m=i,v=n;if(a-t>15&&n-i>15)var g=8;else var g=.35*Math.min(a-t,n-i);var y="rgba(255, 255, 255, .4)",f="rgba(255, 255, 255, 0.1)",b=s;if(e.beginPath(),e.moveTo(t,i),e.save(),e.fillStyle=b,e.globalAlpha=p,e.fillRect(t,i,a-t,n-i),e.globalAlpha=1,r>0){var M=r%2===0?0:.5;e.beginPath(),e.lineWidth=r,e.strokeStyle=o,e.moveTo(t,i),e.rect(t-M,i-M,a-t+2*M,n-i+2*M),e.stroke()}if(e.restore(),l===!0){e.save(),e.beginPath(),e.moveTo(t,i),e.lineTo(t+g,i+g),e.lineTo(a-g,i+g),e.lineTo(a,i),e.closePath();var P=e.createLinearGradient((a+t)/2,m+g,(a+t)/2,m);P.addColorStop(0,b),P.addColorStop(1,y),e.fillStyle=P,e.fill(),e.restore()}if(h===!0){e.save(),e.beginPath(),e.moveTo(t,n),e.lineTo(t+g,n-g),e.lineTo(a-g,n-g),e.lineTo(a,n),e.closePath();var P=e.createLinearGradient((a+t)/2,v-g,(a+t)/2,v);P.addColorStop(0,b),P.addColorStop(1,y),e.fillStyle=P,e.fill(),e.restore()}if(d===!0){e.save(),e.beginPath(),e.moveTo(t,i),e.lineTo(t+g,i+g),e.lineTo(t+g,n-g),e.lineTo(t,n),e.closePath();var P=e.createLinearGradient(x+g,(n+i)/2,x,(n+i)/2);P.addColorStop(0,b),P.addColorStop(1,f),e.fillStyle=P,e.fill(),e.restore()}if(c===!0){e.save(),e.beginPath(),e.moveTo(a,i),e.lineTo(a-g,i+g),e.lineTo(a-g,n-g),e.lineTo(a,n);var P=e.createLinearGradient(u-g,(n+i)/2,u,(n+i)/2);P.addColorStop(0,b),P.addColorStop(1,f),e.fillStyle=P,P.addColorStop(0,b),P.addColorStop(1,f),e.fillStyle=P,e.fill(),e.closePath(),e.restore()}}function D(e,t,i,a,n,s,r,o,l){if("undefined"==typeof o&&(o=1),!j){var h=Number((r%(2*Math.PI)).toFixed(8)),d=Number((s%(2*Math.PI)).toFixed(8));d===h&&(r-=1e-4)}e.save(),e.globalAlpha=o,"pie"===n?(e.beginPath(),e.moveTo(t.x,t.y),e.arc(t.x,t.y,i,s,r,!1),e.fillStyle=a,e.strokeStyle="white",e.lineWidth=2,e.closePath(),e.fill()):"doughnut"===n&&(e.beginPath(),e.arc(t.x,t.y,i,s,r,!1),e.arc(t.x,t.y,l*i,r,s,!0),e.closePath(),e.fillStyle=a,e.strokeStyle="white",e.lineWidth=2,e.fill()),e.globalAlpha=1,e.restore()}Object.defineProperty(i,"__esModule",{value:!0}),i.isCanvasSupported=i.dateFormat=void 0,i.extend=a,i.inherit=n,i.addToDateTime=s,i.convertToNumber=r,i.pad=o,i.trimString=l,i.extendCtx=h,i.compareNumbers=d,i.compareDataPointX=c,i.intToHexColorString=p,i.RGBToInt=x,i.intToRGB=u,i.arrayIndexOf=m,i.addArrayIndexOf=v,i.getFontHeightInPixels=g,i.getLineDashArray=y,i.addEvent=f,i.numberFormat=M,i.getObjectId=P,i.getMouseCoordinates=S,i.getFontString=T,i.getProperty=C,i.setCanvasSize=k,i.createCanvas=w,i.exportCanvas=_,i.setButtonState=A,i.show=L,i.hide=I,i.getBezierPoints=B,i.convertPercentToValue=F,i.drawRect=z,i.drawSegment=D;var X=e("../constants/culture"),Y={},O=null,E=(i.dateFormat=b(),!0),W=window.devicePixelRatio||1,R=1,H=E?W/R:1,V={reset:{image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAcCAYAAAAAwr0iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAKRSURBVEiJrdY/iF1FFMfxzwnZrGISUSR/JLGIhoh/QiRNBLWxMLIWEkwbgiAoFgoW2mhlY6dgpY2IlRBRxBSKhSAKIklWJRYuMZKAhiyopAiaTY7FvRtmZ+/ed9/zHRjezLw5v/O9d86cuZGZpmURAfdn5o9DfdZNLXpjz+LziPgyIl6MiG0jPTJzZBuyDrP4BVm0P/AKbljTb4ToY/gGewYA7KyCl+1b3DUYANvwbiHw0gCAGRzBOzjTAXEOu0cC4Ch+r5x/HrpdrcZmvIDFSucMtnYCYC++6HmNDw8FKDT34ETrf639/azOr5vwRk/g5fbeuABtgC04XWk9VQLciMP4EH/3AFzErRNC7MXlQmsesSoHsGPE23hmEoBW+61K66HMXFmIMvN8myilXS36R01ub+KfYvw43ZXwYDX+AHP4BAci4pFJomfmr/ihmNofESsBImJGk7mlncrM45n5JPbhz0kAWpsv+juxaX21YIPmVJS2uNzJMS6ZNexC0d+I7fUWXLFyz2kSZlpWPvASlmqAf/FXNXf3FAF2F/1LuFifAlionB6dRuSI2IwHi6lzmXmp6xR8XY0fiIh7psAwh+3FuDkRHQVjl+a8lkXjo0kLUKH7XaV5oO86PmZ1FTzyP4K/XGl9v/zwfbW7BriiuETGCP5ch9bc9f97HF/vcFzCa5gdEPgWq+t/4v0V63oE1uF4h0DiFJ7HnSWMppDdh1dxtsPvJ2wcBNAKbsJXa0Ck5opdaBPsRNu/usba09i1KsaAVzmLt3sghrRjuK1Tf4xkegInxwy8gKf7dKMVH2QRsV5zXR/Cftyu+aKaKbbkQrsdH+PTzLzcqzkOQAVzM+7FHdiqqe2/YT4zF/t8S/sPmawyvC974vcAAAAASUVORK5CYII="},pan:{image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAJVSURBVFiFvZe7a1RBGMV/x2hWI4JpfKCIiSBKOoOCkID/wP4BFqIIFkE02ChIiC8QDKlSiI3YqRBsBVGwUNAUdiIEUgjiAzQIIsuKJsfizsXr5t7d+8jmwLDfzHz3nLOzc7+ZxTZlGyDgZiWOCuJ9wH2gCUyuqQFgF/AGcKJNrYkBYBj40CIet+muGQi/96kM4WS7C/Tm5VUg7whJg8BkEGkCR4BDYfodsADUgP6wErO5iCtswsuJb32hdbXy8qzL5TIdmzJinHdZoZIBZcSFkGlAKs1Z3YCketZcBtouuaQNkrblMiBpBrhme7mAgU4wMCvpcFsDkq4C54DFVRTH9h+i6vlE0r5UA5ImgCuh28jB28iIs7BIVCOeStoZD64P4uPAjUTygKSx2FsK2TIwkugfk9Qkfd/E+yMWHQCeSRqx/R3gOp3LazfaS2C4B5gHDgD7U9x3E3uAH7KNpC3AHHAwTL4FHgM9GQ8vAaPA0dB/Abxqk2/gBLA9MXba9r1k/d4LfA3JtwueBeM58ucS+edXnAW23wP10N3advEi9CXizTnyN4bPS7Zn4sH/dq3t18AY4e1YLYSy3g/csj2VnFshZPuOpOeSKHCodUINuGj7YetE6je1PV9QoNPJ9StNHKodx7nRbiWrGHBGXAi5DUiqtQwtpcWK0Jubt8CltA5MEV1IfwO7+VffPwGfia5m34CT4bXujIIX0Qna1/cGMNqV/wUJE2czxD8CQ4X5Sl7Jz7SILwCDpbjKPBRMHAd+EtX4HWV5Spdc2w8kDQGPbH8py/MXMygM69/FKz4AAAAASUVORK5CYII="},zoom:{image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAMqSURBVFiFvdfbj91TFMDxz57U6GUEMS1aYzyMtCSSDhWjCZMInpAI3khE/QHtgzdRkXgSCS8SES9epKLi0oRKNETjRahREq2KS1stdRujtDPtbA97n5zdn9+5zJxTK9k5v3POXmt991p7r71+IcaoGwkhTOIebMRqzOBTvIG3Y4zTXRmqSoyx5cAKbMJOHMFJnMZ8/jyFaXyMR7G6nb1aH22cP4BvcBxziG3GKfyTIR9D6BYg1KUghPBCDveFlb/24Av8iuUYw41YVsz5G7uxKcZ4aMEpwGt5NY3V/YbHsQ6rcAHOw/kYxigewr5CZw4fYGxBKcCLOFEYehXrMdRhr5yLETxVScsOLOkKAPfn1TYMPIvLFrShUlS2FDZm8XRHACzFAWl3R2xbqPMCYhmeLCAOYEMngAczbcTvuHYxzguIy/FesR9e6gSwU/OoPYHBHgHgviIKX2Flq7k34KhmcVnbi/PC8JX4MgMcxb118wZwdz5aISscqx7VRcox7MrPQ7i+btIAJrAkf9+bI9EPmZY2IAxiTSuAldLq4Y9+AcSUh78KP0tbAcwU35cXMD1JCIFUoGiehlqAz6TNB1f1C0DK+0h+nsNPrQC2a4bqGmlD9kOGcWt+Po6pVgDvSxfJaSkFd4UQBvoAsBYbCoB3a2flM7slA0R8iyt6rAFDeDPbm8eOTpVwGD9qVq7nLbIaZnmksPU1JtsCZMXNmpdRxFasWITzh6Xj3LCzra1OxcD2QjHiGVzdpfORnMqZio2PcF23ABdJF1Np4BPptlyPi6WzPYBzpJZtHe7A6xW9cnyP8TqA//SEIYRL8Bxul7rihvwgtVn78WcGGZXa9HGd5TDujDHuOePXNiHdKjWgZX/YbsxLx/ktqbjVzTlcjUSnvI5JrdlUVp6WesZZ6R1hRrpq9+EVTGS9jTjYAuKIouGpbcurEkIYxC051KNSamazsc+xK8b4S0VnEi/j0hqTP+M27O258egQwZuzs7pI7Mf4WQXIEDc5s9sux+5+1Py2EmP8UOq6GvWhIScxfdYjUERiAt9Jd84J6a16zf8JEKT3yCm8g1UxRv8CC4pyRhzR1uUAAAAASUVORK5CYII="},menu:{image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAgCAYAAAAbifjMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDcvMTUvMTTPsvU0AAAAP0lEQVRIie2SMQoAIBDDUvH/X667g8sJJ9KOhYYOkW0qGaU1MPdC0vGSbV19EACo3YMPAFH5BUBUjsqfAPpVXtNgGDfxEDCtAAAAAElFTkSuQmCC"}},j=i.isCanvasSupported=!!document.createElement("canvas").getContext},{"../constants/culture":22}],40:[function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function n(e,t){var i=this,a=new r.default(e,t,this);this.render=function(){return a.render(i.options)},this.options=a._options}Object.defineProperty(i,"__esModule",{value:!0}),i.formatDate=i.formatNumber=i.addCultureInfo=i.addColorSet=void 0,i.Chart=n;var s=e("../core/charts"),r=a(s),o=e("../core/culture_info"),l=a(o),h=e("../constants/themes"),d=e("../constants/culture"),c=e("../helpers/utils");i.addColorSet=function(e,t){h.colorSets[e]=t},i.addCultureInfo=function(e,t){d.cultures[e]=t},i.formatNumber=function(e,t,i){if(i=i||"en",t=t||"#,##0.##",!d.cultures[i])throw"Unknown Culture Name";(0,c.numberFormat)(e,t,new l.default(i))},i.formatDate=function(e,t,i){if(i=i||"en",t=t||"DD MMM YYYY",!d.cultures[i])throw"Unknown Culture Name";(0,c.dateFormat)(e,t,new l.default(i))};n.version="v1.8.2"},{"../constants/culture":22,"../constants/themes":24,"../core/charts":28,"../core/culture_info":29,"../helpers/utils":39}]},{},[40])(40)}); diff --git a/package.json b/package.json index bc5276a..8b336c1 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,10 @@ "babel-preset-stage-1": "^6.1.18", "babelify": "^7.2.0", "browserify": "^12.0.1", + "eslint": "^3.15.0", "ghooks": "^1.0.1", - "uglify-js": "^2.6.1", - "npm-bump": "0.0.15" + "npm-bump": "0.0.15", + "uglify-js": "^2.6.1" }, "browserify": { "transform": [ diff --git a/src/core/axis.js b/src/core/axis.js index 0a05a9f..4ee7812 100644 --- a/src/core/axis.js +++ b/src/core/axis.js @@ -1,7 +1,8 @@ import CanvasJSObject from './canvasjs'; import TextBlock from './text_block'; -import {extend, numberFormat, getLineDashArray} from '../helpers/utils'; +import {extend, numberFormat, getLineDashArray, convertToNumber, addToDateTime, dateFormat} from '../helpers/utils'; +import {constants} from '../constants/culture'; function Axis(chart, options, type, position) { diff --git a/src/core/charts.js b/src/core/charts.js index eb93b80..fdd5733 100644 --- a/src/core/charts.js +++ b/src/core/charts.js @@ -34,7 +34,8 @@ import { numberFormat, getLineDashArray, intToHexColorString, - compareDataPointX + compareDataPointX, + dateFormat } from '../helpers/utils'; import { diff --git a/src/helpers/utils.js b/src/helpers/utils.js index 22c539c..b8e8417 100644 --- a/src/helpers/utils.js +++ b/src/helpers/utils.js @@ -1,4 +1,6 @@ +import {constants} from '../constants/culture'; + export function extend(derived, base) { derived.prototype = inherit(base.prototype); derived.prototype.constructor = derived; @@ -283,7 +285,7 @@ export function addEvent(obj, eventType, fn, useCapture) { } //#region formatting functions/methods -export function dateFormat() { +function _dateFormat() { var reg = /D{1,4}|M{1,4}|Y{1,4}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|f{1,3}|t{1,2}|T{1,2}|K|z{1,3}|"[^"]*"|'[^']*'/g; @@ -419,6 +421,8 @@ export function dateFormat() { }; }; +export const dateFormat = _dateFormat(); + export function numberFormat(v, fs, cultureInfo) { if (v === null) return "";