From e88baefb8f7debd3d242e0cd7a6743361355f0bf Mon Sep 17 00:00:00 2001 From: Preet Date: Mon, 13 Feb 2017 23:55:19 -0800 Subject: [PATCH] . --- docs/builds/rough.es6.js | 4 ++-- docs/builds/rough.js | 4 ++-- docs/builds/rough.js.map | 2 +- docs/builds/rough.min.js | 2 +- docs/builds/rough.min.js.map | 2 +- docs/builds/rough.zip | Bin 0 -> 20269 bytes index.js | 4 ++++ 7 files changed, 11 insertions(+), 7 deletions(-) create mode 100644 docs/builds/rough.zip create mode 100644 index.js diff --git a/docs/builds/rough.es6.js b/docs/builds/rough.es6.js index f8f9878..66a1a47 100644 --- a/docs/builds/rough.es6.js +++ b/docs/builds/rough.es6.js @@ -1898,6 +1898,6 @@ class RoughCanvas { } } -if (exports) { - exports.RoughCanvas = RoughCanvas; +if (exports || window) { + (exports || window).RoughCanvas = RoughCanvas; } diff --git a/docs/builds/rough.js b/docs/builds/rough.js index 5815982..91bf7c9 100644 --- a/docs/builds/rough.js +++ b/docs/builds/rough.js @@ -2040,7 +2040,7 @@ var RoughCanvas = function () { return RoughCanvas; }(); -if (exports) { - exports.RoughCanvas = RoughCanvas; +if (exports || window) { + (exports || window).RoughCanvas = RoughCanvas; } //# sourceMappingURL=rough.js.map diff --git a/docs/builds/rough.js.map b/docs/builds/rough.js.map index e3e8131..0f6f202 100644 --- a/docs/builds/rough.js.map +++ b/docs/builds/rough.js.map @@ -1 +1 @@ -{"version":3,"sources":["rough.es6.js"],"names":["RoughSegmentRelation","LEFT","RIGHT","INTERSECTS","AHEAD","BEHIND","SEPARATE","UNDEFINED","RoughSegment","px1","py1","px2","py2","xi","Number","MAX_VALUE","yi","a","b","c","_undefined","otherSegment","isUndefined","grad1","grad2","int1","int2","Math","abs","min","max","_getLength","x1","y1","x2","y2","dx","dy","sqrt","RoughHachureIterator","top","bottom","left","right","gap","sinAngle","cosAngle","tanAngle","pos","deltaX","hGap","sLeft","sRight","line","xLower","xUpper","yLower","yUpper","s","compare","RoughDrawable","propertyNames","_fields","_dirty","_canvas","z","_roughness","_bowing","_stroke","_strokeWidth","_fill","_fillStyle","_fillWeight","_hachureAngle","_hachureGap","_maxRandomnessOffset","_curveTightness","i","length","_defineRenderProperty","name","Object","defineProperty","get","_get","set","value","_set","canvas","attached","remove","markDirty","requestDraw","context","console","log","roughness","random","ctx","existingPath","lengthSq","pow","offset","maxRandomnessOffset","halfOffset","divergePoint","midDispX","bowing","midDispY","getOffset","beginPath","moveTo","bezierCurveTo","stroke","points","close","len","drawLine","vertArray","closeToCenter","center","vertArrayLength","curveTightness","cachedVertArray","ro","lineTo","drawBezier","x3","y3","x4","y4","_drawBezierTo","x","y","final","quadraticCurveTo","lineCoords","xCoords","yCoords","intersections","s1","s2","push","angle","hachureAngle","hachureGap","strokeWidth","fweight","fillWeight","radPerDeg","PI","cos","sin","tan","save","strokeStyle","fill","lineWidth","it","rectCoords","getNextLine","lines","getIntersectingLines","p1","p2","restore","fillStyle","RoughArc","width","height","start","stop","closed","numSteps","cx","cy","rx","ry","strt","stp","ellipseInc","arcInc","theta","_doFill","drawCurve","lindex","vertices","xc","yc","forEach","p","hachureFillShape","RoughEllipse","_ellipse","overlap","radOffset","aspectRatio","hyp","sinAnglePrime","cosAnglePrime","gapPrime","halfLen","xPos","affine","R","A","B","C","D","E","F","RoughCircle","radius","RoughCurve","_points","index","o","px","lastIndex","RoughLine","RoughLinearPath","drawLinearPath","RoughGeomToken","type","text","arguments","init","prototype","typeis","RoughGeomPath","d","PARAMS","H","h","L","l","M","m","Q","q","S","T","t","V","v","Z","COMMAND","NUMBER","EOD","segments","parseData","tokens","tokenize","token","mode","Array","param_length","params","error","number","segment","key","data","match","substr","RegExp","$1","parseFloat","RoughArcConverter","from","to","radii","largeArcFlag","sweepFlag","_segIndex","_numSegs","_rx","_ry","_sinPhi","_cosPhi","x1dash","y1dash","root","numerator","cxdash","cydash","_C","_theta","calculateVectorAngle","dtheta","ceil","_delta","_T","_from","cp1","cp2","cosTheta1","sinTheta1","theta2","cosTheta2","sinTheta2","ux","uy","vx","vy","ta","atan2","tb","RoughPath","path","_keys","replace","gp","_position","_bezierReflectionPoint","_quadReflectionPoint","_first","_processSegment","p2d","Path2D","hc","getHiddenCanvas","hctx","getContext","createPattern","seg","prevSeg","_moveTo","_lineTo","_hLineTo","_vLineTo","_closeShape","_curveTo","_shortCurveTo","_quadCurveTo","_shortQuadTo","_arcTo","delta","_setPosition","_drawQuadTo","prevKey","ref","arcConverter","getNextSegment","RoughPolygon","RoughRectangle","RoughCanvas","_objects","_drawRequested","drawable","attach","warn","splice","detach","window","requestAnimationFrame","_draw","clearRect","draw","ex","_hiddenCanvas","div","document","createElement","setAttribute","style","overflow","position","opacity","pointerEvents","body","appendChild","add","exports"],"mappings":"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","file":"rough.js","sourcesContent":["const RoughSegmentRelation = {\n LEFT: 0,\n RIGHT: 1,\n INTERSECTS: 2,\n AHEAD: 3,\n BEHIND: 4,\n SEPARATE: 5,\n UNDEFINED: 6\n};\n\nclass RoughSegment {\n constructor(px1, py1, px2, py2) {\n this.px1 = px1;\n this.py1 = py1;\n this.px2 = px2;\n this.py2 = py2;\n this.xi = Number.MAX_VALUE;\n this.yi = Number.MAX_VALUE;\n this.a = py2 - py1;\n this.b = px1 - px2;\n this.c = px2 * py1 - px1 * py2;\n this._undefined = ((this.a == 0) && (this.b == 0) && (this.c == 0));\n }\n\n isUndefined() {\n return this._undefined;\n }\n\n compare(otherSegment) {\n if (this.isUndefined() || otherSegment.isUndefined()) {\n return RoughSegmentRelation.UNDEFINED;\n }\n var grad1 = Number.MAX_VALUE;\n var grad2 = Number.MAX_VALUE;\n var int1 = 0, int2 = 0;\n var a = this.a, b = this.b, c = this.c;\n\n if (Math.abs(b) > 0.00001) {\n grad1 = -a / b;\n int1 = -c / b;\n }\n if (Math.abs(otherSegment.b) > 0.00001) {\n grad2 = -otherSegment.a / otherSegment.b;\n int2 = -otherSegment.c / otherSegment.b;\n }\n\n if (grad1 == Number.MAX_VALUE) {\n if (grad2 == Number.MAX_VALUE) {\n if ((-c / a) != (-otherSegment.c / otherSegment.a)) {\n return RoughSegmentRelation.SEPARATE;\n }\n if ((this.py1 >= Math.min(otherSegment.py1, otherSegment.py2)) && (this.py1 <= Math.max(otherSegment.py1, otherSegment.py2))) {\n this.xi = this.px1;\n this.yi = this.py1;\n return RoughSegmentRelation.INTERSECTS;\n }\n if ((this.py2 >= Math.min(otherSegment.py1, otherSegment.py2)) && (this.py2 <= Math.max(otherSegment.py1, otherSegment.py2))) {\n this.xi = this.px2;\n this.yi = this.py2;\n return RoughSegmentRelation.INTERSECTS;\n }\n return RoughSegmentRelation.SEPARATE;\n }\n this.xi = this.px1;\n this.yi = (grad2 * this.xi + int2);\n if (((this.py1 - this.yi) * (this.yi - this.py2) < -0.00001) || ((otherSegment.py1 - this.yi) * (this.yi - otherSegment.py2) < -0.00001)) {\n return RoughSegmentRelation.SEPARATE;\n }\n if (Math.abs(otherSegment.a) < 0.00001) {\n if ((otherSegment.px1 - this.xi) * (this.xi - otherSegment.px2) < -0.00001) {\n return RoughSegmentRelation.SEPARATE;\n }\n return RoughSegmentRelation.INTERSECTS;\n }\n return RoughSegmentRelation.INTERSECTS;\n }\n\n if (grad2 == Number.MAX_VALUE) {\n this.xi = otherSegment.px1;\n this.yi = grad1 * this.xi + int1;\n if (((otherSegment.py1 - this.yi) * (this.yi - otherSegment.py2) < -0.00001) || ((this.py1 - this.yi) * (this.yi - this.py2) < -0.00001)) {\n return RoughSegmentRelation.SEPARATE;\n }\n if (Math.abs(a) < 0.00001) {\n if ((this.px1 - this.xi) * (this.xi - this.px2) < -0.00001) {\n return RoughSegmentRelation.SEPARATE;\n }\n return RoughSegmentRelation.INTERSECTS;\n }\n return RoughSegmentRelation.INTERSECTS;\n }\n\n if (grad1 == grad2) {\n if (int1 != int2) {\n return RoughSegmentRelation.SEPARATE;\n }\n if ((this.px1 >= Math.min(otherSegment.px1, otherSegment.px2)) && (this.px1 <= Math.max(otherSegment.py1, otherSegment.py2))) {\n this.xi = this.px1;\n this.yi = this.py1;\n return RoughSegmentRelation.INTERSECTS;\n }\n if ((this.px2 >= Math.min(otherSegment.px1, otherSegment.px2)) && (this.px2 <= Math.max(otherSegment.px1, otherSegment.px2))) {\n this.xi = this.px2;\n this.yi = this.py2;\n return RoughSegmentRelation.INTERSECTS;\n }\n return RoughSegmentRelation.SEPARATE;\n }\n\n this.xi = ((int2 - int1) / (grad1 - grad2));\n this.yi = (grad1 * this.xi + int1);\n\n if (((this.px1 - this.xi) * (this.xi - this.px2) < -0.00001) || ((otherSegment.px1 - this.xi) * (this.xi - otherSegment.px2) < -0.00001)) {\n return RoughSegmentRelation.SEPARATE;\n }\n return RoughSegmentRelation.INTERSECTS;\n }\n\n getLength() {\n return this._getLength(this.px1, this.py1, this.px2, this.py2);\n }\n\n _getLength(x1, y1, x2, y2) {\n var dx = x2 - x1;\n var dy = y2 - y1;\n return Math.sqrt(dx * dx + dy * dy);\n }\n}\n\nclass RoughHachureIterator {\n constructor(top, bottom, left, right, gap, sinAngle, cosAngle, tanAngle) {\n this.top = top;\n this.bottom = bottom;\n this.left = left;\n this.right = right;\n this.gap = gap;\n this.sinAngle = sinAngle;\n this.tanAngle = tanAngle;\n\n if (Math.abs(sinAngle) < 0.0001) {\n this.pos = left + gap;\n } else if (Math.abs(sinAngle) > 0.9999) {\n this.pos = top + gap;\n } else {\n this.deltaX = (bottom - top) * Math.abs(tanAngle);\n this.pos = left - Math.abs(this.deltaX);\n this.hGap = Math.abs(gap / cosAngle);\n this.sLeft = new RoughSegment(left, bottom, left, top);\n this.sRight = new RoughSegment(right, bottom, right, top);\n }\n }\n\n getNextLine() {\n if (Math.abs(this.sinAngle) < 0.0001) {\n if (this.pos < this.right) {\n let line = [this.pos, this.top, this.pos, this.bottom];\n this.pos += this.gap;\n return line;\n }\n } else if (Math.abs(this.sinAngle) > 0.9999) {\n if (this.pos < this.bottom) {\n let line = [this.left, this.pos, this.right, this.pos];\n this.pos += this.gap;\n return line;\n }\n } else {\n let xLower = this.pos - this.deltaX / 2;\n let xUpper = this.pos + this.deltaX / 2;\n let yLower = this.bottom;\n let yUpper = this.top;\n if (this.pos < (this.right + this.deltaX)) {\n while (((xLower < this.left) && (xUpper < this.left)) || ((xLower > this.right) && (xUpper > this.right))) {\n this.pos += this.hGap;\n xLower = this.pos - this.deltaX / 2;\n xUpper = this.pos + this.deltaX / 2;\n if (this.pos > (this.right + this.deltaX)) {\n return null;\n }\n }\n let s = new RoughSegment(xLower, yLower, xUpper, yUpper);\n if (s.compare(this.sLeft) == RoughSegmentRelation.INTERSECTS) {\n xLower = s.xi;\n yLower = s.yi;\n }\n if (s.compare(this.sRight) == RoughSegmentRelation.INTERSECTS) {\n xUpper = s.xi;\n yUpper = s.yi;\n }\n if (this.tanAngle > 0) {\n xLower = this.right - (xLower - this.left);\n xUpper = this.right - (xUpper - this.left);\n }\n let line = [xLower, yLower, xUpper, yUpper];\n this.pos += this.hGap;\n return line;\n }\n }\n return null;\n }\n}\n\nclass RoughDrawable {\n constructor(propertyNames) {\n this._fields = {};\n this._dirty = false;\n this._canvas = null;\n this.z = 0;\n this._roughness = null;\n this._bowing = null;\n this._stroke = null;\n this._strokeWidth = null;\n\n this._fill = null;\n this._fillStyle = null;\n this._fillWeight = null;\n this._hachureAngle = null;\n this._hachureGap = null;\n\n this._maxRandomnessOffset = null;\n this._curveTightness = 0;\n if (propertyNames) {\n for (var i = 0; i < propertyNames.length; i++) {\n this._defineRenderProperty(propertyNames[i]);\n }\n }\n }\n\n _defineRenderProperty(name) {\n Object.defineProperty(this, name, {\n get: function () {\n return this._get(name);\n },\n set: function (value) {\n this._set(name, value);\n }\n });\n }\n\n get dirty() {\n return this._dirty;\n }\n\n set roughness(value) {\n this._roughness = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get roughness() {\n if (typeof this._roughness === 'number') {\n if (this._roughness >= 0) {\n return this._roughness;\n }\n }\n if (this._canvas) {\n return this._canvas.roughness;\n }\n return this._roughness;\n }\n\n set bowing(value) {\n this._bowing = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get bowing() {\n if (typeof this._bowing === 'number') {\n if (this._bowing >= 0) {\n return this._bowing;\n }\n }\n if (this._canvas) {\n return this._canvas.bowing;\n }\n return this._bowing;\n }\n\n set stroke(value) {\n this._stroke = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get stroke() {\n if (typeof this._stroke === 'string') {\n if (this._stroke) {\n return this._stroke;\n }\n }\n if (this._canvas) {\n return this._canvas.stroke;\n }\n return this._stroke;\n }\n\n set strokeWidth(value) {\n this._strokeWidth = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get strokeWidth() {\n if (typeof this._strokeWidth === 'number') {\n if (this._strokeWidth >= 0) {\n return this._strokeWidth;\n }\n }\n if (this._canvas) {\n return this._canvas.strokeWidth;\n }\n return this._strokeWidth;\n }\n\n set maxRandomnessOffset(value) {\n this._maxRandomnessOffset = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get maxRandomnessOffset() {\n if (typeof this._maxRandomnessOffset === 'number') {\n if (this._maxRandomnessOffset >= 0) {\n return this._maxRandomnessOffset;\n }\n }\n if (this._canvas) {\n return this._canvas.maxRandomnessOffset;\n }\n return this._maxRandomnessOffset;\n }\n\n set curveTightness(value) {\n this._curveTightness = Math.max(Math.min(value, 1), 0);\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get curveTightness() {\n if (typeof this._curveTightness === 'number') {\n if (this._curveTightness >= 0) {\n return this._curveTightness;\n }\n }\n if (this._canvas) {\n return this._canvas.curveTightness || 0;\n }\n return this._curveTightness;\n }\n\n set fill(value) {\n this._fill = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get fill() {\n if (typeof this._fill === 'string') {\n if (this._fill) {\n return this._fill;\n }\n }\n if (this._canvas) {\n return this._canvas.fill;\n }\n return this._fill;\n }\n\n set fillStyle(value) {\n this._fillStyle = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get fillStyle() {\n if (typeof this._fillStyle === 'string') {\n if (this._fillStyle) {\n return this._fillStyle;\n }\n }\n if (this._canvas) {\n return this._canvas.fillStyle;\n }\n return this._fillStyle;\n }\n\n set fillWeight(value) {\n this._fillWeight = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get fillWeight() {\n if (typeof this._fillWeight === 'number') {\n if (this._fillWeight) {\n return this._fillWeight;\n }\n }\n if (this._canvas) {\n return this._canvas.fillWeight;\n }\n return this._fillWeight;\n }\n\n set hachureAngle(value) {\n this._hachureAngle = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get hachureAngle() {\n if (typeof this._hachureAngle === 'number') {\n if (this._hachureAngle >= 0) {\n return this._hachureAngle;\n }\n }\n if (this._canvas) {\n return this._canvas.hachureAngle;\n }\n return this._hachureAngle;\n }\n\n set hachureGap(value) {\n this._hachureGap = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get hachureGap() {\n if (typeof this._hachureGap === 'number') {\n if (this._hachureGap >= 0) {\n return this._hachureGap;\n }\n }\n if (this._canvas) {\n return this._canvas.hachureGap;\n }\n return this._hachureGap;\n }\n\n attach(canvas, z) {\n this.attached = true;\n this._canvas = canvas;\n this.z = z;\n }\n\n detach() {\n this.attached = false;\n this.z = 0;\n }\n\n remove() {\n if (this.attached && this._canvas) {\n this._canvas.remove(this);\n }\n }\n\n _get(name) {\n if (this._fields[name]) {\n return this._fields[name];\n }\n return null;\n }\n\n _set(name, value, markDirty = true) {\n this._fields[name] = value;\n if (markDirty) {\n this._dirty = true;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n }\n\n draw(context) {\n console.log(\"Draw not implemented.\", context);\n }\n\n getOffset(min, max) {\n return this.roughness * ((Math.random() * (max - min)) + min);\n }\n\n drawLine(ctx, x1, y1, x2, y2, existingPath) {\n let lengthSq = Math.pow((x1 - x2), 2) + Math.pow((x1 - x2), 2);\n let offset = this.maxRandomnessOffset || 0;\n if (offset * offset * 100 > lengthSq) {\n offset = Math.sqrt(lengthSq) / 10;\n }\n let halfOffset = offset / 2;\n let divergePoint = 0.2 + Math.random() * 0.2;\n // Midpoint displacement value to give slightly bowed lines.\n let midDispX = this.bowing * this.maxRandomnessOffset * (y2 - y1) / 200;\n let midDispY = this.bowing * this.maxRandomnessOffset * (x1 - x2) / 200;\n midDispX = this.getOffset(-midDispX, midDispX);\n midDispY = this.getOffset(-midDispY, midDispY);\n\n if (!existingPath) {\n ctx.beginPath();\n }\n ctx.moveTo(x1 + this.getOffset(-offset, offset), y1 + this.getOffset(-offset, offset));\n ctx.bezierCurveTo(midDispX + x1 + (x2 - x1) * divergePoint + this.getOffset(-offset, offset),\n midDispY + y1 + (y2 - y1) * divergePoint + this.getOffset(-offset, offset),\n midDispX + x1 + 2 * (x2 - x1) * divergePoint + this.getOffset(-offset, offset),\n midDispY + y1 + 2 * (y2 - y1) * divergePoint + this.getOffset(-offset, offset),\n x2 + this.getOffset(-offset, offset),\n y2 + this.getOffset(-offset, offset));\n if (!existingPath) {\n ctx.stroke();\n }\n if (!existingPath) {\n ctx.beginPath();\n }\n ctx.moveTo(x1 + this.getOffset(-halfOffset, halfOffset), y1 + this.getOffset(-halfOffset, halfOffset));\n ctx.bezierCurveTo(midDispX + x1 + (x2 - x1) * divergePoint + this.getOffset(-halfOffset, halfOffset),\n midDispY + y1 + (y2 - y1) * divergePoint + this.getOffset(-halfOffset, halfOffset),\n midDispX + x1 + 2 * (x2 - x1) * divergePoint + this.getOffset(-halfOffset, halfOffset),\n midDispY + y1 + 2 * (y2 - y1) * divergePoint + this.getOffset(-halfOffset, halfOffset),\n x2 + this.getOffset(-halfOffset, halfOffset),\n y2 + this.getOffset(-halfOffset, halfOffset));\n if (!existingPath) {\n ctx.stroke();\n }\n }\n\n drawLinearPath(ctx, points, close) {\n const len = points.length;\n if (len > 2) {\n ctx.beginPath();\n for (var i = 0; i < len - 1; i++) {\n this.drawLine(ctx, points[i][0], points[i][1], points[i + 1][0], points[i + 1][1], true);\n }\n if (close) {\n this.drawLine(ctx, points[len - 1][0], points[len - 1][1], points[0][0], points[0][1], true);\n }\n ctx.stroke();\n } else if (len == 2) {\n this.drawLine(ctx, points[0][0], points[0][1], points[1][0], points[1][1]);\n }\n }\n\n drawCurve(ctx, vertArray, existingPath, closeToCenter, center) {\n const vertArrayLength = vertArray.length;\n var i;\n if (vertArrayLength > 3) {\n var b = [];\n const s = 1 - this.curveTightness;\n if (!existingPath) {\n ctx.beginPath();\n }\n ctx.moveTo(vertArray[1][0], vertArray[1][1]);\n for (i = 1; (i + 2) < vertArrayLength; i++) {\n let cachedVertArray = vertArray[i];\n b[0] = [cachedVertArray[0], cachedVertArray[1]];\n b[1] = [\n cachedVertArray[0] + (s * vertArray[i + 1][0] - s * vertArray[i - 1][0]) / 6,\n cachedVertArray[1] + (s * vertArray[i + 1][1] - s * vertArray[i - 1][1]) / 6\n ];\n b[2] = [\n vertArray[i + 1][0] + (s * vertArray[i][0] - s * vertArray[i + 2][0]) / 6,\n vertArray[i + 1][1] + (s * vertArray[i][1] - s * vertArray[i + 2][1]) / 6\n ];\n b[3] = [vertArray[i + 1][0], vertArray[i + 1][1]];\n ctx.bezierCurveTo(b[1][0], b[1][1], b[2][0], b[2][1], b[3][0], b[3][1]);\n }\n if (closeToCenter && center && center.length == 2) {\n let ro = this.maxRandomnessOffset || 0;\n ctx.lineTo(center[0] + this.getOffset(-ro, ro), center[1] + this.getOffset(-ro, ro));\n }\n if (!existingPath) {\n ctx.stroke();\n }\n } else if (vertArrayLength == 3) {\n this.drawBezier(\n ctx,\n vertArray[0][0], vertArray[0][1],\n vertArray[1][0], vertArray[1][1],\n vertArray[2][0], vertArray[2][1],\n vertArray[2][0], vertArray[2][1],\n existingPath\n );\n } else if (vertArrayLength == 2) {\n this.drawLine(ctx, vertArray[0][0], vertArray[0][1], vertArray[1][0], vertArray[1][1], existingPath);\n }\n }\n\n drawBezier(ctx, x1, y1, x2, y2, x3, y3, x4, y4, existingPath) {\n if (!existingPath) {\n ctx.beginPath();\n }\n ctx.moveTo(x1, y1);\n let ro = this.maxRandomnessOffset || 0;\n ctx.moveTo(x1 + this.getOffset(-ro, ro), y1 + this.getOffset(-ro, ro));\n this._drawBezierTo(ctx, x2, y2, x3, y3, x4, y4);\n if (!existingPath) {\n ctx.stroke();\n }\n }\n\n _drawBezierTo(ctx, x1, y1, x2, y2, x, y) {\n let ro = this.maxRandomnessOffset || 0;\n let final = [x + this.getOffset(-ro, ro), y + this.getOffset(-ro, ro)];\n ctx.bezierCurveTo(\n x1 + this.getOffset(-ro, ro), y1 + this.getOffset(-ro, ro),\n x2 + this.getOffset(-ro, ro), y2 + this.getOffset(-ro, ro),\n final[0], final[1]\n );\n return final;\n }\n\n _drawQuadTo(ctx, x1, y1, x, y) {\n let ro = this.maxRandomnessOffset || 0;\n let final = [x + this.getOffset(-ro, ro), y + this.getOffset(-ro, ro)];\n ctx.quadraticCurveTo(\n x1 + this.getOffset(-ro, ro), y1 + this.getOffset(-ro, ro),\n final[0], final[1]\n );\n return final;\n }\n\n // fill\n getIntersectingLines(lineCoords, xCoords, yCoords) {\n let intersections = [];\n var s1 = new RoughSegment(lineCoords[0], lineCoords[1], lineCoords[2], lineCoords[3]);\n for (var i = 0; i < xCoords.length; i++) {\n let s2 = new RoughSegment(xCoords[i], yCoords[i], xCoords[(i + 1) % xCoords.length], yCoords[(i + 1) % xCoords.length]);\n if (s1.compare(s2) == RoughSegmentRelation.INTERSECTS) {\n intersections.push([s1.xi, s1.yi]);\n }\n }\n return intersections;\n }\n\n hachureFillShape(ctx, xCoords, yCoords) {\n if (xCoords && yCoords && xCoords.length && yCoords.length) {\n var left = xCoords[0];\n var right = xCoords[0];\n var top = yCoords[0];\n var bottom = yCoords[0];\n for (let i = 1; i < xCoords.length; i++) {\n left = Math.min(left, xCoords[i]);\n right = Math.max(right, xCoords[i]);\n top = Math.min(top, yCoords[i]);\n bottom = Math.max(bottom, yCoords[i]);\n }\n\n var angle = this.hachureAngle;\n var gap = this.hachureGap;\n if (gap < 0) {\n gap = this.strokeWidth * 4;\n }\n gap = Math.max(gap, 0.1);\n var fweight = this.fillWeight;\n if (fweight < 0) {\n fweight = this.strokeWidth / 2;\n }\n\n const radPerDeg = Math.PI / 180;\n var hachureAngle = (angle % 180) * radPerDeg;\n var cosAngle = Math.cos(hachureAngle);\n var sinAngle = Math.sin(hachureAngle);\n var tanAngle = Math.tan(hachureAngle);\n\n ctx.save();\n ctx.strokeStyle = this.fill;\n ctx.lineWidth = fweight;\n\n var it = new RoughHachureIterator(top - 1, bottom + 1, left - 1, right + 1, gap, sinAngle, cosAngle, tanAngle);\n var rectCoords;\n while ((rectCoords = it.getNextLine()) != null) {\n var lines = this.getIntersectingLines(rectCoords, xCoords, yCoords);\n for (let i = 0; i < lines.length; i++) {\n if (i < (lines.length - 1)) {\n let p1 = lines[i];\n let p2 = lines[i + 1];\n this.drawLine(ctx, p1[0], p1[1], p2[0], p2[1]);\n }\n }\n }\n\n ctx.restore();\n }\n }\n}\n\nclass RoughArc extends RoughDrawable {\n constructor(x, y, width, height, start, stop, closed) {\n super(['x', 'y', 'width', 'height', 'start', 'stop', 'numSteps', 'closed']);\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height || width;\n this.start = start;\n this.stop = stop;\n this.numSteps = 9;\n this.closed = closed ? true : false;\n }\n\n draw(ctx) {\n let cx = this.x;\n let cy = this.y;\n let rx = Math.abs(this.width / 2);\n let ry = Math.abs(this.height / 2);\n rx += this.getOffset(-rx * 0.01, rx * 0.01);\n ry += this.getOffset(-ry * 0.01, ry * 0.01);\n let strt = this.start;\n let stp = this.stop;\n while (strt < 0) {\n strt += Math.PI * 2;\n stp += Math.PI * 2;\n }\n if ((stp - strt) > (Math.PI * 2)) {\n strt = 0;\n stp = Math.PI * 2;\n }\n let ellipseInc = (Math.PI * 2) / this.numSteps;\n let arcInc = Math.min(ellipseInc / 2, (stp - strt) / 2);\n\n var points = [];\n points.push([\n cx + rx * Math.cos(strt),\n cy + ry * Math.sin(strt)\n ]);\n for (var theta = strt; theta <= stp; theta += arcInc) {\n points.push([\n cx + rx * Math.cos(theta),\n cy + ry * Math.sin(theta)\n ]);\n }\n points.push([\n cx + rx * Math.cos(stp),\n cy + ry * Math.sin(stp)\n ]);\n points.push([\n cx + rx * Math.cos(stp),\n cy + ry * Math.sin(stp)\n ]);\n\n if (this.fill && this.closed) {\n this._doFill(ctx, points, [cx, cy]);\n }\n\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n this.drawCurve(ctx, points);\n if (this.closed) {\n const lindex = points.length - 1;\n this.drawLine(ctx, points[0][0], points[0][1], cx, cy);\n this.drawLine(ctx, points[lindex][0], points[lindex][1], cx, cy);\n }\n ctx.restore();\n }\n\n _doFill(ctx, points, center) {\n var fillStyle = this.fillStyle || \"hachure\";\n switch (fillStyle) {\n case \"solid\": {\n ctx.save();\n ctx.fillStyle = this.fill;\n ctx.beginPath();\n this.drawCurve(ctx, points, true, true, center);\n ctx.fill();\n ctx.restore();\n break;\n }\n default: {\n let cx = this.x;\n let cy = this.y;\n let strt = this.start;\n let stp = this.stop;\n let rx = Math.abs(this.width / 2);\n let ry = Math.abs(this.height / 2);\n while (strt < 0) {\n strt += Math.PI * 2;\n stp += Math.PI * 2;\n }\n if ((stp - strt) > (Math.PI * 2)) {\n strt = 0;\n stp = Math.PI * 2;\n }\n let arcInc = (stp - strt) / this.numSteps;\n var vertices = [];\n vertices.push([cx, cy]);\n vertices.push([\n cx + rx * Math.cos(strt),\n cy + ry * Math.sin(strt)\n ]);\n for (var theta = strt; theta <= stp; theta += arcInc) {\n vertices.push([\n cx + rx * Math.cos(theta),\n cy + ry * Math.sin(theta)\n ]);\n }\n vertices.push([\n cx + rx * Math.cos(stp),\n cy + ry * Math.sin(stp)\n ]);\n\n let xc = [];\n let yc = [];\n vertices.forEach(function (p) {\n xc.push(p[0]);\n yc.push(p[1]);\n });\n this.hachureFillShape(ctx, xc, yc);\n break;\n }\n }\n }\n}\n\nclass RoughEllipse extends RoughDrawable {\n constructor(x, y, width, height) {\n super(['x', 'y', 'width', 'height', 'numSteps']);\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height || width;\n this.numSteps = 9;\n }\n\n draw(ctx) {\n this.ellipseInc = (Math.PI * 2) / this.numSteps;\n let rx = Math.abs(this.width / 2);\n let ry = Math.abs(this.height / 2);\n rx += this.getOffset(-rx * 0.05, rx * 0.05);\n ry += this.getOffset(-ry * 0.05, ry * 0.05);\n\n if (this.fill) {\n this._doFill(ctx, rx, ry);\n }\n\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n this._ellipse(ctx, this.x, this.y, rx, ry, 1, this.ellipseInc * this.getOffset(0.1, this.getOffset(0.4, 1)));\n this._ellipse(ctx, this.x, this.y, rx, ry, 1.5, 0);\n ctx.restore();\n }\n\n _ellipse(ctx, cx, cy, rx, ry, offset, overlap, existingPath) {\n var radOffset = this.getOffset(-0.5, 0.5) - Math.PI / 2;\n var points = [];\n points.push([\n this.getOffset(-offset, offset) + cx + 0.9 * rx * Math.cos(radOffset - this.ellipseInc),\n this.getOffset(-offset, offset) + cy + 0.9 * ry * Math.sin(radOffset - this.ellipseInc)\n ]);\n for (var angle = radOffset; angle < (Math.PI * 2 + radOffset - 0.01); angle = angle + this.ellipseInc) {\n points.push([\n this.getOffset(-offset, offset) + cx + rx * Math.cos(angle),\n this.getOffset(-offset, offset) + cy + ry * Math.sin(angle)\n ]);\n }\n points.push([\n this.getOffset(-offset, offset) + cx + rx * Math.cos(radOffset + Math.PI * 2 + overlap * 0.5),\n this.getOffset(-offset, offset) + cy + ry * Math.sin(radOffset + Math.PI * 2 + overlap * 0.5)\n ]);\n points.push([\n this.getOffset(-offset, offset) + cx + 0.98 * rx * Math.cos(radOffset + overlap),\n this.getOffset(-offset, offset) + cy + 0.98 * ry * Math.sin(radOffset + overlap)\n ]);\n points.push([\n this.getOffset(-offset, offset) + cx + 0.9 * rx * Math.cos(radOffset + overlap * 0.5),\n this.getOffset(-offset, offset) + cy + 0.9 * ry * Math.sin(radOffset + overlap * 0.5)\n ]);\n this.drawCurve(ctx, points, existingPath);\n }\n\n _doFill(ctx, rx, ry) {\n var fillStyle = this.fillStyle || \"hachure\";\n switch (fillStyle) {\n case \"solid\": {\n ctx.save();\n ctx.fillStyle = this.fill;\n ctx.strokeStyle = null;\n ctx.beginPath();\n this._ellipse(ctx, this.x, this.y, rx, ry, 1, this.ellipseInc * this.getOffset(0.1, this.getOffset(0.4, 1)), true);\n ctx.fill();\n ctx.restore();\n break;\n }\n default: {\n var angle = this.hachureAngle;\n var gap = this.hachureGap;\n if (gap <= 0) {\n gap = this.strokeWidth * 4;\n }\n var fweight = this.fillWeight;\n if (fweight < 0) {\n fweight = this.strokeWidth / 2;\n }\n const radPerDeg = Math.PI / 180;\n var hachureAngle = (angle % 180) * radPerDeg;\n var tanAngle = Math.tan(hachureAngle);\n var cx = this.x, cy = this.y;\n var aspectRatio = ry / rx;\n var hyp = Math.sqrt(aspectRatio * tanAngle * aspectRatio * tanAngle + 1);\n var sinAnglePrime = aspectRatio * tanAngle / hyp;\n var cosAnglePrime = 1 / hyp;\n var gapPrime = gap / ((rx * ry / Math.sqrt((ry * cosAnglePrime) * (ry * cosAnglePrime) + (rx * sinAnglePrime) * (rx * sinAnglePrime))) / rx);\n var halfLen = Math.sqrt((rx * rx) - (cx - rx + gapPrime) * (cx - rx + gapPrime));\n\n ctx.save();\n ctx.strokeStyle = this.fill;\n ctx.lineWidth = fweight;\n for (var xPos = cx - rx + gapPrime; xPos < cx + rx; xPos += gapPrime) {\n halfLen = Math.sqrt((rx * rx) - (cx - xPos) * (cx - xPos));\n let p1 = this.affine(xPos, cy - halfLen, cx, cy, sinAnglePrime, cosAnglePrime, aspectRatio);\n let p2 = this.affine(xPos, cy + halfLen, cx, cy, sinAnglePrime, cosAnglePrime, aspectRatio);\n this.drawLine(ctx, p1[0], p1[1], p2[0], p2[1]);\n }\n ctx.restore();\n break;\n }\n }\n }\n\n affine(x, y, cx, cy, sinAnglePrime, cosAnglePrime, R) {\n var A = -cx * cosAnglePrime - cy * sinAnglePrime + cx;\n var B = R * (cx * sinAnglePrime - cy * cosAnglePrime) + cy;\n var C = cosAnglePrime;\n var D = sinAnglePrime;\n var E = -R * sinAnglePrime;\n var F = R * cosAnglePrime;\n return [\n A + C * x + D * y,\n B + E * x + F * y\n ];\n }\n}\n\nclass RoughCircle extends RoughEllipse {\n constructor(x, y, radius) {\n super(x, y, radius * 2);\n }\n\n get radius() {\n return this.width / 2;\n }\n\n set radius(value) {\n this.width = value * 2;\n this.height = value * 2;\n }\n}\n\nclass RoughCurve extends RoughDrawable {\n constructor(points) {\n super();\n this._points = points;\n }\n\n setPoint(index, x, y) {\n this._points[index] = [x, y];\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n getPoint(index) {\n if (index > 0 && index < this._points.length) {\n return this._points[index];\n }\n return null;\n }\n\n draw(ctx) {\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n let o = this.maxRandomnessOffset || 0;\n var p1 = [];\n var p2 = [];\n p1.push(this._points[0]);\n p1.push(this._points[0]);\n var px = [this._points[0][0] + this.getOffset(-o, o), this._points[0][1] + this.getOffset(-o, o)];\n p2.push(px);\n p2.push(px);\n\n var lastIndex = this._points.length - 1;\n for (var i = 1; i < lastIndex; i++) {\n p1.push(this._points[i]);\n if ((i % 3) == 0) {\n p2.push([this._points[i][0] + this.getOffset(-o, o), this._points[i][1] + this.getOffset(-o, o)]);\n } else {\n p2.push(this._points[i]);\n }\n }\n\n p1.push(this._points[lastIndex]);\n p1.push(this._points[lastIndex]);\n var px2 = [this._points[lastIndex][0] + this.getOffset(-o, o), this._points[lastIndex][1] + this.getOffset(-o, o)];\n p2.push(px2);\n p2.push(px2);\n\n this.drawCurve(ctx, p1);\n this.drawCurve(ctx, p2);\n ctx.restore();\n }\n}\n\nclass RoughLine extends RoughDrawable {\n constructor(x1, y1, x2, y2) {\n super(['x1', 'y1', 'x2', 'y2']);\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n }\n\n draw(ctx) {\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n this.drawLine(ctx, this.x1, this.y1, this.x2, this.y2);\n ctx.restore();\n }\n}\n\nclass RoughLinearPath extends RoughDrawable {\n constructor(points) {\n super();\n this._points = points;\n }\n\n setPoint(index, x, y) {\n this._points[index] = [x, y];\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n getPoint(index) {\n if (index > 0 && index < this._points.length) {\n return this._points[index];\n }\n return null;\n }\n\n draw(ctx) {\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n this.drawLinearPath(ctx, this._points, false);\n ctx.restore();\n }\n}\n\n// Path parsing adapted from http://www.kevlindev.com/geometry/index.htm\n\nfunction RoughGeomToken(type, text) { if (arguments.length > 0) { this.init(type, text); } }\nRoughGeomToken.prototype.init = function (type, text) { this.type = type; this.text = text; };\nRoughGeomToken.prototype.typeis = function (type) { return this.type == type; };\n\nclass RoughGeomPath {\n constructor(d) {\n this.PARAMS = {\n A: [\"rx\", \"ry\", \"x-axis-rotation\", \"large-arc-flag\", \"sweep-flag\", \"x\", \"y\"],\n a: [\"rx\", \"ry\", \"x-axis-rotation\", \"large-arc-flag\", \"sweep-flag\", \"x\", \"y\"],\n C: [\"x1\", \"y1\", \"x2\", \"y2\", \"x\", \"y\"],\n c: [\"x1\", \"y1\", \"x2\", \"y2\", \"x\", \"y\"],\n H: [\"x\"],\n h: [\"x\"],\n L: [\"x\", \"y\"],\n l: [\"x\", \"y\"],\n M: [\"x\", \"y\"],\n m: [\"x\", \"y\"],\n Q: [\"x1\", \"y1\", \"x\", \"y\"],\n q: [\"x1\", \"y1\", \"x\", \"y\"],\n S: [\"x2\", \"y2\", \"x\", \"y\"],\n s: [\"x2\", \"y2\", \"x\", \"y\"],\n T: [\"x\", \"y\"],\n t: [\"x\", \"y\"],\n V: [\"y\"],\n v: [\"y\"],\n Z: [],\n z: []\n };\n this.COMMAND = 0;\n this.NUMBER = 1;\n this.EOD = 2;\n\n this.segments = [];\n this.d = d || \"\";\n this.parseData(d);\n }\n\n parseData(d) {\n var tokens = this.tokenize(d);\n var index = 0;\n var token = tokens[index];\n var mode = \"BOD\";\n this.segments = new Array();\n while (!token.typeis(this.EOD)) {\n var param_length;\n var params = new Array();\n if (mode == \"BOD\") {\n if (token.text == \"M\" || token.text == \"m\") {\n index++;\n param_length = this.PARAMS[token.text].length;\n mode = token.text;\n } else {\n console.error(\"Path data must begin with a MoveTo command\");\n return;\n }\n } else {\n if (token.typeis(this.NUMBER)) {\n param_length = this.PARAMS[mode].length;\n } else {\n index++;\n param_length = this.PARAMS[token.text].length;\n mode = token.text;\n }\n }\n\n if ((index + param_length) < tokens.length) {\n for (var i = index; i < index + param_length; i++) {\n var number = tokens[i];\n if (number.typeis(this.NUMBER)) {\n params[params.length] = number.text;\n }\n else {\n console.error(\"Parameter type is not a number: \" + mode + \",\" + number.text);\n return;\n }\n }\n var segment;\n if (this.PARAMS[mode]) {\n segment = { key: mode, data: params };\n } else {\n console.error(\"Unsupported segment type: \" + mode);\n return;\n }\n this.segments.push(segment);\n index += param_length;\n token = tokens[index];\n if (mode == \"M\") mode = \"L\";\n if (mode == \"m\") mode = \"l\";\n } else {\n console.error(\"Path data ended before all parameters were found\");\n }\n }\n }\n\n tokenize(d) {\n var tokens = new Array();\n while (d != \"\") {\n if (d.match(/^([ \\t\\r\\n,]+)/)) {\n d = d.substr(RegExp.$1.length);\n } else if (d.match(/^([aAcChHlLmMqQsStTvVzZ])/)) {\n tokens[tokens.length] = new RoughGeomToken(this.COMMAND, RegExp.$1);\n d = d.substr(RegExp.$1.length);\n } else if (d.match(/^(([-+]?[0-9]+(\\.[0-9]*)?|[-+]?\\.[0-9]+)([eE][-+]?[0-9]+)?)/)) {\n tokens[tokens.length] = new RoughGeomToken(this.NUMBER, parseFloat(RegExp.$1));\n d = d.substr(RegExp.$1.length);\n } else {\n console.error(\"Unrecognized segment command: \" + d);\n return null;\n }\n }\n tokens[tokens.length] = new RoughGeomToken(this.EOD, null);\n return tokens;\n }\n}\n\nclass RoughArcConverter {\n // Algorithm as described in https://www.w3.org/TR/SVG/implnote.html\n // Code adapted from nsSVGPathDataParser.cpp in Mozilla \n // https://hg.mozilla.org/mozilla-central/file/17156fbebbc8/content/svg/content/src/nsSVGPathDataParser.cpp#l887\n\n constructor(from, to, radii, angle, largeArcFlag, sweepFlag) {\n const radPerDeg = Math.PI / 180;\n this._segIndex = 0;\n this._numSegs = 0;\n if (from[0] == to[0] && from[1] == to[1]) {\n return;\n }\n this._rx = Math.abs(radii[0]);\n this._ry = Math.abs(radii[1]);\n this._sinPhi = Math.sin(angle * radPerDeg);\n this._cosPhi = Math.cos(angle * radPerDeg);\n var x1dash = this._cosPhi * (from[0] - to[0]) / 2.0 + this._sinPhi * (from[1] - to[1]) / 2.0;\n var y1dash = -this._sinPhi * (from[0] - to[0]) / 2.0 + this._cosPhi * (from[1] - to[1]) / 2.0;\n var root;\n var numerator = this._rx * this._rx * this._ry * this._ry - this._rx * this._rx * y1dash * y1dash - this._ry * this._ry * x1dash * x1dash;\n if (numerator < 0) {\n let s = Math.sqrt(1 - (numerator / (this._rx * this._rx * this._ry * this._ry)));\n this._rx = s;\n this._ry = s;\n root = 0;\n } else {\n root = (largeArcFlag == sweepFlag ? -1.0 : 1.0) *\n Math.sqrt(numerator / (this._rx * this._rx * y1dash * y1dash + this._ry * this._ry * x1dash * x1dash));\n }\n let cxdash = root * this._rx * y1dash / this._ry;\n let cydash = -root * this._ry * x1dash / this._rx;\n this._C = [0, 0];\n this._C[0] = this._cosPhi * cxdash - this._sinPhi * cydash + (from[0] + to[0]) / 2.0;\n this._C[1] = this._sinPhi * cxdash + this._cosPhi * cydash + (from[1] + to[1]) / 2.0;\n this._theta = this.calculateVectorAngle(1.0, 0.0, (x1dash - cxdash) / this._rx, (y1dash - cydash) / this._ry);\n let dtheta = this.calculateVectorAngle((x1dash - cxdash) / this._rx, (y1dash - cydash) / this._ry, (-x1dash - cxdash) / this._rx, (-y1dash - cydash) / this._ry);\n if ((!sweepFlag) && (dtheta > 0)) {\n dtheta -= 2 * Math.PI;\n } else if (sweepFlag && (dtheta < 0)) {\n dtheta += 2 * Math.PI;\n }\n this._numSegs = Math.ceil(Math.abs(dtheta / (Math.PI / 2)));\n this._delta = dtheta / this._numSegs;\n this._T = (8 / 3) * Math.sin(this._delta / 4) * Math.sin(this._delta / 4) / Math.sin(this._delta / 2);\n this._from = from;\n }\n\n getNextSegment() {\n var cp1, cp2, to;\n if (this._segIndex == this._numSegs) {\n return null;\n }\n let cosTheta1 = Math.cos(this._theta);\n let sinTheta1 = Math.sin(this._theta);\n let theta2 = this._theta + this._delta;\n let cosTheta2 = Math.cos(theta2);\n let sinTheta2 = Math.sin(theta2);\n\n to = [\n this._cosPhi * this._rx * cosTheta2 - this._sinPhi * this._ry * sinTheta2 + this._C[0],\n this._sinPhi * this._rx * cosTheta2 + this._cosPhi * this._ry * sinTheta2 + this._C[1]\n ];\n cp1 = [\n this._from[0] + this._T * (- this._cosPhi * this._rx * sinTheta1 - this._sinPhi * this._ry * cosTheta1),\n this._from[1] + this._T * (- this._sinPhi * this._rx * sinTheta1 + this._cosPhi * this._ry * cosTheta1)\n ];\n cp2 = [\n to[0] + this._T * (this._cosPhi * this._rx * sinTheta2 + this._sinPhi * this._ry * cosTheta2),\n to[1] + this._T * (this._sinPhi * this._rx * sinTheta2 - this._cosPhi * this._ry * cosTheta2)\n ];\n\n this._theta = theta2;\n this._from = [to[0], to[1]];\n this._segIndex++;\n\n return {\n cp1: cp1,\n cp2: cp2,\n to: to\n };\n }\n\n calculateVectorAngle(ux, uy, vx, vy) {\n let ta = Math.atan2(uy, ux);\n let tb = Math.atan2(vy, vx);\n if (tb >= ta)\n return tb - ta;\n return 2 * Math.PI - (ta - tb);\n }\n}\n\nclass RoughPath extends RoughDrawable {\n constructor(path) {\n super(['path', 'numSteps']);\n this.numSteps = 9;\n this.path = path;\n this._keys = ['C', 'c', 'Q', 'q', 'M', 'm', 'L', 'l',\n 'A', 'a', 'H', 'h', 'V', 'v', 'S', 's', 'T', 't', 'Z', 'z'];\n }\n\n draw(ctx) {\n if (this.path) {\n var path = (this.path || \"\").replace(/\\n/g, \" \").replace(/(-)/g, \" -\").replace(/(-\\s)/g, \"-\").replace(\"/(\\s\\s)/g\", \" \");\n\n this.gp = new RoughGeomPath(path);\n var segments = this.gp.segments || [];\n\n this._position = [0, 0];\n this._bezierReflectionPoint = null;\n this._quadReflectionPoint = null;\n this._first = null;\n\n if (this.fill) {\n this._doFill(ctx, path);\n }\n\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n ctx.beginPath();\n for (var i = 0; i < segments.length; i++) {\n var s = segments[i];\n this._processSegment(ctx, s, i > 0 ? segments[i - 1] : null);\n }\n ctx.stroke();\n ctx.restore();\n }\n }\n\n _doFill(ctx, path) {\n var fillStyle = this.fillStyle || \"hachure\";\n switch (fillStyle) {\n case \"solid\": {\n ctx.save();\n ctx.fillStyle = this.fill;\n let p2d = new Path2D(path);\n ctx.fill(p2d);\n ctx.restore();\n break;\n }\n default: {\n var hc = this._canvas.getHiddenCanvas();\n if (hc) {\n const hctx = hc.getContext(\"2d\");\n let xc = [0, hc.width, hc.width, 0];\n let yc = [0, 0, hc.height, hc.height];\n this.hachureFillShape(hctx, xc, yc);\n }\n ctx.save();\n ctx.fillStyle = ctx.createPattern(hc, 'repeat');\n let p2d = new Path2D(path);\n ctx.fill(p2d);\n ctx.restore();\n break;\n }\n }\n }\n\n _processSegment(ctx, seg, prevSeg) {\n switch (seg.key) {\n case 'M':\n case 'm':\n this._moveTo(seg);\n break;\n case 'L':\n case 'l':\n this._lineTo(ctx, seg);\n break;\n case 'H':\n case 'h':\n this._hLineTo(ctx, seg);\n break;\n case 'V':\n case 'v':\n this._vLineTo(ctx, seg);\n break;\n case 'Z':\n case 'z':\n this._closeShape(ctx);\n break;\n case 'C':\n case 'c':\n this._curveTo(ctx, seg);\n break;\n case 'S':\n case 's':\n this._shortCurveTo(ctx, seg, prevSeg);\n break;\n case 'Q':\n case 'q':\n this._quadCurveTo(ctx, seg);\n break;\n case 'T':\n case 't':\n this._shortQuadTo(ctx, seg, prevSeg);\n break;\n case 'A':\n case 'a':\n this._arcTo(ctx, seg);\n break;\n default:\n break;\n }\n }\n\n _setPosition(x, y) {\n this._position = [x, y];\n if (!this._first) {\n this._first = [x, y];\n }\n }\n\n _moveTo(seg) {\n var delta = seg.key === 'm';\n if (seg.data.length >= 2) {\n let x = +seg.data[0];\n let y = +seg.data[1];\n if (delta) {\n this._setPosition(this._position[0] + x, this._position[1] + y);\n } else {\n this._setPosition(x, y);\n }\n }\n }\n\n _closeShape(ctx) {\n if (this._first) {\n this.drawLine(ctx, this._position[0], this._position[1], this._first[0], this._first[1], true);\n }\n }\n\n _lineTo(ctx, seg) {\n var delta = seg.key === 'l';\n if (seg.data.length >= 2) {\n let x = +seg.data[0];\n let y = +seg.data[1];\n if (delta) {\n x += this._position[0];\n y += this._position[1];\n }\n this.drawLine(ctx, this._position[0], this._position[1], x, y, true);\n this._setPosition(x, y);\n }\n }\n\n _hLineTo(ctx, seg) {\n var delta = seg.key === 'h';\n if (seg.data.length) {\n let x = +seg.data[0];\n if (delta) {\n x += this._position[0];\n }\n this.drawLine(ctx, this._position[0], this._position[1], x, this._position[1], true);\n this._setPosition(x, this._position[1]);\n }\n }\n\n _vLineTo(ctx, seg) {\n var delta = seg.key === 'v';\n if (seg.data.length) {\n let y = +seg.data[0];\n if (delta) {\n y += this._position[1];\n }\n this.drawLine(ctx, this._position[0], this._position[1], this._position[0], y, true);\n this._setPosition(this._position[0], y);\n }\n }\n\n _quadCurveTo(ctx, seg) {\n var delta = seg.key === 'q';\n if (seg.data.length >= 4) {\n let x1 = +seg.data[0];\n let y1 = +seg.data[1];\n let x = +seg.data[2];\n let y = +seg.data[3];\n if (delta) {\n x1 += this._position[0];\n x += this._position[0];\n y1 += this._position[1];\n y += this._position[1];\n }\n let ro = this.maxRandomnessOffset || 0;\n ctx.moveTo(this._position[0], this._position[1]);\n this._drawQuadTo(ctx, x1, y1, x, y);\n ctx.moveTo(this._position[0] + this.getOffset(-ro, ro), this._position[1] + this.getOffset(-ro, ro));\n let final = this._drawQuadTo(ctx, x1, y1, x, y);\n x = final[0];\n y = final[1];\n this._setPosition(x, y);\n this._quadReflectionPoint = [x + (x - x1), y + (y - y1)];\n }\n }\n\n _curveTo(ctx, seg) {\n var delta = seg.key === 'c';\n if (seg.data.length >= 6) {\n let x1 = +seg.data[0];\n let y1 = +seg.data[1];\n let x2 = +seg.data[2];\n let y2 = +seg.data[3];\n let x = +seg.data[4];\n let y = +seg.data[5];\n if (delta) {\n x1 += this._position[0];\n x2 += this._position[0];\n x += this._position[0];\n y1 += this._position[1];\n y2 += this._position[1];\n y += this._position[1];\n }\n let ro = this.maxRandomnessOffset || 0;\n ctx.moveTo(this._position[0], this._position[1]);\n this._drawBezierTo(ctx, x1, y1, x2, y2, x, y);\n ctx.moveTo(this._position[0] + this.getOffset(-ro, ro), this._position[1] + this.getOffset(-ro, ro));\n let final = this._drawBezierTo(ctx, x1, y1, x2, y2, x, y);\n x = final[0];\n y = final[1];\n this._setPosition(x, y);\n this._bezierReflectionPoint = [x + (x - x2), y + (y - y2)];\n }\n }\n\n _shortCurveTo(ctx, seg, prevSeg) {\n var delta = seg.key === 's';\n if (seg.data.length >= 4) {\n let x2 = +seg.data[0];\n let y2 = +seg.data[1];\n let x = +seg.data[2];\n let y = +seg.data[3];\n if (delta) {\n x2 += this._position[0];\n x += this._position[0];\n y2 += this._position[1];\n y += this._position[1];\n }\n let x1 = x2;\n let y1 = y2;\n let prevKey = prevSeg ? prevSeg.key : \"\";\n var ref = null;\n if (prevKey == 'c' || prevKey == 'C' || prevKey == 's' || prevKey == 'S') {\n ref = this._bezierReflectionPoint;\n }\n if (ref) {\n x1 = ref[0];\n y1 = ref[1];\n }\n ctx.moveTo(this._position[0], this._position[1]);\n this._drawBezierTo(ctx, x1, y1, x2, y2, x, y);\n ctx.moveTo(this._position[0], this._position[1]);\n var final = this._drawBezierTo(ctx, x1, y1, x2, y2, x, y);\n x = final[0];\n y = final[1];\n this._setPosition(x, y);\n this._bezierReflectionPoint = [x + (x - x2), y + (y - y2)];\n }\n }\n\n _shortQuadTo(ctx, seg, prevSeg) {\n var delta = seg.key === 't';\n if (seg.data.length >= 2) {\n let x = +seg.data[0];\n let y = +seg.data[1];\n if (delta) {\n x += this._position[0];\n y += this._position[1];\n }\n let x1 = x;\n let y1 = y;\n let prevKey = prevSeg ? prevSeg.key : \"\";\n var ref = null;\n if (prevKey == 'q' || prevKey == 'Q' || prevKey == 't' || prevKey == 'T') {\n ref = this._quadReflectionPoint;\n }\n if (ref) {\n x1 = ref[0];\n y1 = ref[1];\n }\n ctx.moveTo(this._position[0], this._position[1]);\n this._drawQuadTo(ctx, x1, y1, x, y);\n ctx.moveTo(this._position[0], this._position[1]);\n let final = this._drawQuadTo(ctx, x1, y1, x, y);\n x = final[0];\n y = final[1];\n this._setPosition(x, y);\n this._quadReflectionPoint = [x + (x - x1), y + (y - y1)];\n }\n }\n\n _arcTo(ctx, seg) {\n var delta = seg.key === 'a';\n if (seg.data.length >= 7) {\n let rx = +seg.data[0];\n let ry = +seg.data[1];\n let angle = +seg.data[2];\n let largeArcFlag = +seg.data[3];\n let sweepFlag = +seg.data[4];\n let x = +seg.data[5];\n let y = +seg.data[6];\n if (delta) {\n x += this._position[0];\n y += this._position[1];\n }\n\n if (x == this._position[0] && y == this._position[1]) {\n return;\n }\n if (rx == 0 || ry == 0) {\n this.drawLine(ctx, this._position[0], this._position[1], x, y, true);\n this._setPosition(x, y);\n } else {\n var final;\n for (var i = 0; i < 2; i++) {\n ctx.moveTo(this._position[0], this._position[1]);\n var arcConverter = new RoughArcConverter(\n [this._position[0], this._position[1]],\n [x, y],\n [rx, ry],\n angle,\n largeArcFlag ? true : false,\n sweepFlag ? true : false\n );\n var segment = arcConverter.getNextSegment();\n while (segment) {\n final = this._drawBezierTo(ctx, segment.cp1[0], segment.cp1[1], segment.cp2[0], segment.cp2[1], segment.to[0], segment.to[1]);\n segment = arcConverter.getNextSegment();\n }\n }\n if (final) {\n x = final[0];\n y = final[1];\n }\n this._setPosition(x, y);\n }\n }\n }\n}\n\nclass RoughPolygon extends RoughDrawable {\n constructor(points) {\n super();\n this._points = points;\n }\n\n setPoint(index, x, y) {\n this._points[index] = [x, y];\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n getPoint(index) {\n if (index > 0 && index < this._points.length) {\n return this._points[index];\n }\n return null;\n }\n\n draw(ctx) {\n if (this.fill) {\n this._doFill(ctx, this._points);\n }\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n this.drawLinearPath(ctx, this._points, true);\n ctx.restore();\n }\n\n _doFill(ctx, points) {\n var fillStyle = this.fillStyle || \"hachure\";\n switch (fillStyle) {\n case \"solid\": {\n ctx.save();\n ctx.fillStyle = this.fill;\n let o = this.maxRandomnessOffset || 0;\n const len = points.length;\n if (len > 2) {\n ctx.beginPath();\n ctx.moveTo(points[0][0] + this.getOffset(-o, o), points[0][1] + this.getOffset(-o, o));\n for (var i = 1; i < len; i++) {\n ctx.lineTo(points[i][0] + this.getOffset(-o, o), points[i][1] + this.getOffset(-o, o));\n }\n ctx.fill();\n }\n ctx.restore();\n break;\n }\n default: {\n let xc = [];\n let yc = [];\n points.forEach(function (p) {\n xc.push(p[0]);\n yc.push(p[1]);\n });\n this.hachureFillShape(ctx, xc, yc);\n break;\n }\n }\n }\n}\n\nclass RoughRectangle extends RoughDrawable {\n constructor(x, y, width, height) {\n super(['x', 'y', 'width', 'height']);\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n draw(ctx) {\n let left = this.x;\n let right = this.x + this.width;\n let top = this.y;\n let bottom = this.y + this.height;\n\n if (this.fill) {\n this._doFill(ctx, left, right, top, bottom);\n }\n\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n this.drawLine(ctx, left, top, right, top);\n this.drawLine(ctx, right, top, right, bottom);\n this.drawLine(ctx, right, bottom, left, bottom);\n this.drawLine(ctx, left, bottom, left, top);\n ctx.restore();\n }\n\n _doFill(ctx, left, right, top, bottom) {\n var fillStyle = this.fillStyle || \"hachure\";\n switch (fillStyle) {\n case \"solid\": {\n ctx.save();\n ctx.fillStyle = this.fill;\n let o = this.maxRandomnessOffset || 0;\n var points = [\n [left + this.getOffset(-o, o), top + this.getOffset(-o, o)],\n [right + this.getOffset(-o, o), top + this.getOffset(-o, o)],\n [right + this.getOffset(-o, o), bottom + this.getOffset(-o, o)],\n [left + this.getOffset(-o, o), bottom + this.getOffset(-o, o)]\n ];\n ctx.beginPath();\n ctx.moveTo(points[0][0], points[0][1]);\n ctx.lineTo(points[1][0], points[1][1]);\n ctx.lineTo(points[2][0], points[2][1]);\n ctx.lineTo(points[3][0], points[3][1]);\n ctx.fill();\n ctx.restore();\n break;\n }\n default: {\n let xc = [left, right, right, left];\n let yc = [top, top, bottom, bottom];\n this.hachureFillShape(ctx, xc, yc);\n break;\n }\n }\n }\n}\n\nclass RoughCanvas {\n constructor(canvas, width, height) {\n this._canvas = canvas;\n this.width = width || canvas.width;\n this.height = height || canvas.height;\n canvas.width = this.width;\n canvas.height = this.height;\n this._objects = [];\n this._drawRequested = false;\n\n this.roughness = 1;\n this.bowing = 1;\n\n this.stroke = \"#000\";\n this.strokeWidth = 1;\n\n this.fill = null;\n this.fillStyle = \"hachure\";\n this.fillWeight = -1;\n this.hachureAngle = -41;\n this.hachureGap = -1;\n\n this.maxRandomnessOffset = 2;\n }\n\n add(drawable) {\n if (drawable instanceof RoughDrawable) {\n if (drawable.attached) {\n return;\n }\n this._objects.push(drawable);\n drawable.attach(this, this._objects.length - 1);\n this.requestDraw();\n } else {\n console.warn(\"Ignoring canvas add - the object is not drawable\", drawable);\n }\n }\n\n remove(drawable) {\n if (drawable instanceof RoughDrawable) {\n if (drawable.attached) {\n this._objects.splice(drawable.z, 1);\n drawable.detach();\n this.requestDraw();\n }\n } else {\n console.warn(\"Ignoring canvas remove - the object is not drawable\", drawable);\n }\n }\n\n clear() {\n if (this._objects && this._objects.length) {\n this._objects.forEach(function (d) {\n d.detach();\n });\n }\n this._objects = [];\n this.requestDraw();\n }\n\n requestDraw() {\n if (!this._drawRequested) {\n this._drawRequested = true;\n window.requestAnimationFrame(() => {\n this._drawRequested = false;\n this._draw();\n });\n }\n }\n\n _draw() {\n const ctx = this._canvas.getContext(\"2d\");\n ctx.clearRect(0, 0, this.width, this.height);\n for (var i = 0; i < this._objects.length; i++) {\n try {\n this._objects[i].draw(ctx);\n } catch (ex) {\n console.error(ex);\n }\n }\n }\n\n getHiddenCanvas() {\n if (!this._hiddenCanvas) {\n var div = document.createElement(\"div\");\n div.setAttribute(\"id\", \"roughHiddenCanvas\");\n div.style.overflow = \"hidden\";\n div.style.position = \"absolute\";\n div.style.left = \"-1px\";\n div.style.top = \"-1px\";\n div.style.width = \"0px\";\n div.style.height = \"0px\";\n div.style.opacity = 0;\n div.style.pointerEvents = \"none\";\n document.body.appendChild(div);\n this._hiddenCanvas = document.createElement(\"canvas\");\n div.appendChild(this._hiddenCanvas);\n }\n var hc = this._hiddenCanvas;\n hc.width = this.width;\n hc.height = this.height;\n const ctx = hc.getContext(\"2d\");\n ctx.clearRect(0, 0, this.width, this.height);\n return hc;\n }\n\n arc(x, y, width, height, start, stop, closed) {\n var d = new RoughArc(x, y, width, height, start, stop, closed);\n this.add(d);\n return d;\n }\n\n circle(x, y, radius) {\n var d = new RoughCircle(x, y, radius);\n this.add(d);\n return d;\n }\n\n ellipse(x, y, width, height) {\n var d = new RoughEllipse(x, y, width, height);\n this.add(d);\n return d;\n }\n\n curve(points) {\n var d = new RoughCurve(points);\n this.add(d);\n return d;\n }\n\n line(x1, y1, x2, y2) {\n var d = new RoughLine(x1, y1, x2, y2);\n this.add(d);\n return d;\n }\n\n rectangle(x, y, width, height) {\n var d = new RoughRectangle(x, y, width, height);\n this.add(d);\n return d;\n }\n\n linearPath(points) {\n var d = new RoughLinearPath(points);\n this.add(d);\n return d;\n }\n\n polygon(points) {\n var d = new RoughPolygon(points);\n this.add(d);\n return d;\n }\n\n path(d) {\n var p = new RoughPath(d);\n this.add(p);\n return p;\n }\n}\n\nif (exports) {\n exports.RoughCanvas = RoughCanvas;\n}\n"]} \ No newline at end of file +{"version":3,"sources":["rough.es6.js"],"names":["RoughSegmentRelation","LEFT","RIGHT","INTERSECTS","AHEAD","BEHIND","SEPARATE","UNDEFINED","RoughSegment","px1","py1","px2","py2","xi","Number","MAX_VALUE","yi","a","b","c","_undefined","otherSegment","isUndefined","grad1","grad2","int1","int2","Math","abs","min","max","_getLength","x1","y1","x2","y2","dx","dy","sqrt","RoughHachureIterator","top","bottom","left","right","gap","sinAngle","cosAngle","tanAngle","pos","deltaX","hGap","sLeft","sRight","line","xLower","xUpper","yLower","yUpper","s","compare","RoughDrawable","propertyNames","_fields","_dirty","_canvas","z","_roughness","_bowing","_stroke","_strokeWidth","_fill","_fillStyle","_fillWeight","_hachureAngle","_hachureGap","_maxRandomnessOffset","_curveTightness","i","length","_defineRenderProperty","name","Object","defineProperty","get","_get","set","value","_set","canvas","attached","remove","markDirty","requestDraw","context","console","log","roughness","random","ctx","existingPath","lengthSq","pow","offset","maxRandomnessOffset","halfOffset","divergePoint","midDispX","bowing","midDispY","getOffset","beginPath","moveTo","bezierCurveTo","stroke","points","close","len","drawLine","vertArray","closeToCenter","center","vertArrayLength","curveTightness","cachedVertArray","ro","lineTo","drawBezier","x3","y3","x4","y4","_drawBezierTo","x","y","final","quadraticCurveTo","lineCoords","xCoords","yCoords","intersections","s1","s2","push","angle","hachureAngle","hachureGap","strokeWidth","fweight","fillWeight","radPerDeg","PI","cos","sin","tan","save","strokeStyle","fill","lineWidth","it","rectCoords","getNextLine","lines","getIntersectingLines","p1","p2","restore","fillStyle","RoughArc","width","height","start","stop","closed","numSteps","cx","cy","rx","ry","strt","stp","ellipseInc","arcInc","theta","_doFill","drawCurve","lindex","vertices","xc","yc","forEach","p","hachureFillShape","RoughEllipse","_ellipse","overlap","radOffset","aspectRatio","hyp","sinAnglePrime","cosAnglePrime","gapPrime","halfLen","xPos","affine","R","A","B","C","D","E","F","RoughCircle","radius","RoughCurve","_points","index","o","px","lastIndex","RoughLine","RoughLinearPath","drawLinearPath","RoughGeomToken","type","text","arguments","init","prototype","typeis","RoughGeomPath","d","PARAMS","H","h","L","l","M","m","Q","q","S","T","t","V","v","Z","COMMAND","NUMBER","EOD","segments","parseData","tokens","tokenize","token","mode","Array","param_length","params","error","number","segment","key","data","match","substr","RegExp","$1","parseFloat","RoughArcConverter","from","to","radii","largeArcFlag","sweepFlag","_segIndex","_numSegs","_rx","_ry","_sinPhi","_cosPhi","x1dash","y1dash","root","numerator","cxdash","cydash","_C","_theta","calculateVectorAngle","dtheta","ceil","_delta","_T","_from","cp1","cp2","cosTheta1","sinTheta1","theta2","cosTheta2","sinTheta2","ux","uy","vx","vy","ta","atan2","tb","RoughPath","path","_keys","replace","gp","_position","_bezierReflectionPoint","_quadReflectionPoint","_first","_processSegment","p2d","Path2D","hc","getHiddenCanvas","hctx","getContext","createPattern","seg","prevSeg","_moveTo","_lineTo","_hLineTo","_vLineTo","_closeShape","_curveTo","_shortCurveTo","_quadCurveTo","_shortQuadTo","_arcTo","delta","_setPosition","_drawQuadTo","prevKey","ref","arcConverter","getNextSegment","RoughPolygon","RoughRectangle","RoughCanvas","_objects","_drawRequested","drawable","attach","warn","splice","detach","window","requestAnimationFrame","_draw","clearRect","draw","ex","_hiddenCanvas","div","document","createElement","setAttribute","style","overflow","position","opacity","pointerEvents","body","appendChild","add","exports"],"mappings":"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","file":"rough.js","sourcesContent":["const RoughSegmentRelation = {\n LEFT: 0,\n RIGHT: 1,\n INTERSECTS: 2,\n AHEAD: 3,\n BEHIND: 4,\n SEPARATE: 5,\n UNDEFINED: 6\n};\n\nclass RoughSegment {\n constructor(px1, py1, px2, py2) {\n this.px1 = px1;\n this.py1 = py1;\n this.px2 = px2;\n this.py2 = py2;\n this.xi = Number.MAX_VALUE;\n this.yi = Number.MAX_VALUE;\n this.a = py2 - py1;\n this.b = px1 - px2;\n this.c = px2 * py1 - px1 * py2;\n this._undefined = ((this.a == 0) && (this.b == 0) && (this.c == 0));\n }\n\n isUndefined() {\n return this._undefined;\n }\n\n compare(otherSegment) {\n if (this.isUndefined() || otherSegment.isUndefined()) {\n return RoughSegmentRelation.UNDEFINED;\n }\n var grad1 = Number.MAX_VALUE;\n var grad2 = Number.MAX_VALUE;\n var int1 = 0, int2 = 0;\n var a = this.a, b = this.b, c = this.c;\n\n if (Math.abs(b) > 0.00001) {\n grad1 = -a / b;\n int1 = -c / b;\n }\n if (Math.abs(otherSegment.b) > 0.00001) {\n grad2 = -otherSegment.a / otherSegment.b;\n int2 = -otherSegment.c / otherSegment.b;\n }\n\n if (grad1 == Number.MAX_VALUE) {\n if (grad2 == Number.MAX_VALUE) {\n if ((-c / a) != (-otherSegment.c / otherSegment.a)) {\n return RoughSegmentRelation.SEPARATE;\n }\n if ((this.py1 >= Math.min(otherSegment.py1, otherSegment.py2)) && (this.py1 <= Math.max(otherSegment.py1, otherSegment.py2))) {\n this.xi = this.px1;\n this.yi = this.py1;\n return RoughSegmentRelation.INTERSECTS;\n }\n if ((this.py2 >= Math.min(otherSegment.py1, otherSegment.py2)) && (this.py2 <= Math.max(otherSegment.py1, otherSegment.py2))) {\n this.xi = this.px2;\n this.yi = this.py2;\n return RoughSegmentRelation.INTERSECTS;\n }\n return RoughSegmentRelation.SEPARATE;\n }\n this.xi = this.px1;\n this.yi = (grad2 * this.xi + int2);\n if (((this.py1 - this.yi) * (this.yi - this.py2) < -0.00001) || ((otherSegment.py1 - this.yi) * (this.yi - otherSegment.py2) < -0.00001)) {\n return RoughSegmentRelation.SEPARATE;\n }\n if (Math.abs(otherSegment.a) < 0.00001) {\n if ((otherSegment.px1 - this.xi) * (this.xi - otherSegment.px2) < -0.00001) {\n return RoughSegmentRelation.SEPARATE;\n }\n return RoughSegmentRelation.INTERSECTS;\n }\n return RoughSegmentRelation.INTERSECTS;\n }\n\n if (grad2 == Number.MAX_VALUE) {\n this.xi = otherSegment.px1;\n this.yi = grad1 * this.xi + int1;\n if (((otherSegment.py1 - this.yi) * (this.yi - otherSegment.py2) < -0.00001) || ((this.py1 - this.yi) * (this.yi - this.py2) < -0.00001)) {\n return RoughSegmentRelation.SEPARATE;\n }\n if (Math.abs(a) < 0.00001) {\n if ((this.px1 - this.xi) * (this.xi - this.px2) < -0.00001) {\n return RoughSegmentRelation.SEPARATE;\n }\n return RoughSegmentRelation.INTERSECTS;\n }\n return RoughSegmentRelation.INTERSECTS;\n }\n\n if (grad1 == grad2) {\n if (int1 != int2) {\n return RoughSegmentRelation.SEPARATE;\n }\n if ((this.px1 >= Math.min(otherSegment.px1, otherSegment.px2)) && (this.px1 <= Math.max(otherSegment.py1, otherSegment.py2))) {\n this.xi = this.px1;\n this.yi = this.py1;\n return RoughSegmentRelation.INTERSECTS;\n }\n if ((this.px2 >= Math.min(otherSegment.px1, otherSegment.px2)) && (this.px2 <= Math.max(otherSegment.px1, otherSegment.px2))) {\n this.xi = this.px2;\n this.yi = this.py2;\n return RoughSegmentRelation.INTERSECTS;\n }\n return RoughSegmentRelation.SEPARATE;\n }\n\n this.xi = ((int2 - int1) / (grad1 - grad2));\n this.yi = (grad1 * this.xi + int1);\n\n if (((this.px1 - this.xi) * (this.xi - this.px2) < -0.00001) || ((otherSegment.px1 - this.xi) * (this.xi - otherSegment.px2) < -0.00001)) {\n return RoughSegmentRelation.SEPARATE;\n }\n return RoughSegmentRelation.INTERSECTS;\n }\n\n getLength() {\n return this._getLength(this.px1, this.py1, this.px2, this.py2);\n }\n\n _getLength(x1, y1, x2, y2) {\n var dx = x2 - x1;\n var dy = y2 - y1;\n return Math.sqrt(dx * dx + dy * dy);\n }\n}\n\nclass RoughHachureIterator {\n constructor(top, bottom, left, right, gap, sinAngle, cosAngle, tanAngle) {\n this.top = top;\n this.bottom = bottom;\n this.left = left;\n this.right = right;\n this.gap = gap;\n this.sinAngle = sinAngle;\n this.tanAngle = tanAngle;\n\n if (Math.abs(sinAngle) < 0.0001) {\n this.pos = left + gap;\n } else if (Math.abs(sinAngle) > 0.9999) {\n this.pos = top + gap;\n } else {\n this.deltaX = (bottom - top) * Math.abs(tanAngle);\n this.pos = left - Math.abs(this.deltaX);\n this.hGap = Math.abs(gap / cosAngle);\n this.sLeft = new RoughSegment(left, bottom, left, top);\n this.sRight = new RoughSegment(right, bottom, right, top);\n }\n }\n\n getNextLine() {\n if (Math.abs(this.sinAngle) < 0.0001) {\n if (this.pos < this.right) {\n let line = [this.pos, this.top, this.pos, this.bottom];\n this.pos += this.gap;\n return line;\n }\n } else if (Math.abs(this.sinAngle) > 0.9999) {\n if (this.pos < this.bottom) {\n let line = [this.left, this.pos, this.right, this.pos];\n this.pos += this.gap;\n return line;\n }\n } else {\n let xLower = this.pos - this.deltaX / 2;\n let xUpper = this.pos + this.deltaX / 2;\n let yLower = this.bottom;\n let yUpper = this.top;\n if (this.pos < (this.right + this.deltaX)) {\n while (((xLower < this.left) && (xUpper < this.left)) || ((xLower > this.right) && (xUpper > this.right))) {\n this.pos += this.hGap;\n xLower = this.pos - this.deltaX / 2;\n xUpper = this.pos + this.deltaX / 2;\n if (this.pos > (this.right + this.deltaX)) {\n return null;\n }\n }\n let s = new RoughSegment(xLower, yLower, xUpper, yUpper);\n if (s.compare(this.sLeft) == RoughSegmentRelation.INTERSECTS) {\n xLower = s.xi;\n yLower = s.yi;\n }\n if (s.compare(this.sRight) == RoughSegmentRelation.INTERSECTS) {\n xUpper = s.xi;\n yUpper = s.yi;\n }\n if (this.tanAngle > 0) {\n xLower = this.right - (xLower - this.left);\n xUpper = this.right - (xUpper - this.left);\n }\n let line = [xLower, yLower, xUpper, yUpper];\n this.pos += this.hGap;\n return line;\n }\n }\n return null;\n }\n}\n\nclass RoughDrawable {\n constructor(propertyNames) {\n this._fields = {};\n this._dirty = false;\n this._canvas = null;\n this.z = 0;\n this._roughness = null;\n this._bowing = null;\n this._stroke = null;\n this._strokeWidth = null;\n\n this._fill = null;\n this._fillStyle = null;\n this._fillWeight = null;\n this._hachureAngle = null;\n this._hachureGap = null;\n\n this._maxRandomnessOffset = null;\n this._curveTightness = 0;\n if (propertyNames) {\n for (var i = 0; i < propertyNames.length; i++) {\n this._defineRenderProperty(propertyNames[i]);\n }\n }\n }\n\n _defineRenderProperty(name) {\n Object.defineProperty(this, name, {\n get: function () {\n return this._get(name);\n },\n set: function (value) {\n this._set(name, value);\n }\n });\n }\n\n get dirty() {\n return this._dirty;\n }\n\n set roughness(value) {\n this._roughness = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get roughness() {\n if (typeof this._roughness === 'number') {\n if (this._roughness >= 0) {\n return this._roughness;\n }\n }\n if (this._canvas) {\n return this._canvas.roughness;\n }\n return this._roughness;\n }\n\n set bowing(value) {\n this._bowing = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get bowing() {\n if (typeof this._bowing === 'number') {\n if (this._bowing >= 0) {\n return this._bowing;\n }\n }\n if (this._canvas) {\n return this._canvas.bowing;\n }\n return this._bowing;\n }\n\n set stroke(value) {\n this._stroke = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get stroke() {\n if (typeof this._stroke === 'string') {\n if (this._stroke) {\n return this._stroke;\n }\n }\n if (this._canvas) {\n return this._canvas.stroke;\n }\n return this._stroke;\n }\n\n set strokeWidth(value) {\n this._strokeWidth = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get strokeWidth() {\n if (typeof this._strokeWidth === 'number') {\n if (this._strokeWidth >= 0) {\n return this._strokeWidth;\n }\n }\n if (this._canvas) {\n return this._canvas.strokeWidth;\n }\n return this._strokeWidth;\n }\n\n set maxRandomnessOffset(value) {\n this._maxRandomnessOffset = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get maxRandomnessOffset() {\n if (typeof this._maxRandomnessOffset === 'number') {\n if (this._maxRandomnessOffset >= 0) {\n return this._maxRandomnessOffset;\n }\n }\n if (this._canvas) {\n return this._canvas.maxRandomnessOffset;\n }\n return this._maxRandomnessOffset;\n }\n\n set curveTightness(value) {\n this._curveTightness = Math.max(Math.min(value, 1), 0);\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get curveTightness() {\n if (typeof this._curveTightness === 'number') {\n if (this._curveTightness >= 0) {\n return this._curveTightness;\n }\n }\n if (this._canvas) {\n return this._canvas.curveTightness || 0;\n }\n return this._curveTightness;\n }\n\n set fill(value) {\n this._fill = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get fill() {\n if (typeof this._fill === 'string') {\n if (this._fill) {\n return this._fill;\n }\n }\n if (this._canvas) {\n return this._canvas.fill;\n }\n return this._fill;\n }\n\n set fillStyle(value) {\n this._fillStyle = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get fillStyle() {\n if (typeof this._fillStyle === 'string') {\n if (this._fillStyle) {\n return this._fillStyle;\n }\n }\n if (this._canvas) {\n return this._canvas.fillStyle;\n }\n return this._fillStyle;\n }\n\n set fillWeight(value) {\n this._fillWeight = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get fillWeight() {\n if (typeof this._fillWeight === 'number') {\n if (this._fillWeight) {\n return this._fillWeight;\n }\n }\n if (this._canvas) {\n return this._canvas.fillWeight;\n }\n return this._fillWeight;\n }\n\n set hachureAngle(value) {\n this._hachureAngle = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get hachureAngle() {\n if (typeof this._hachureAngle === 'number') {\n if (this._hachureAngle >= 0) {\n return this._hachureAngle;\n }\n }\n if (this._canvas) {\n return this._canvas.hachureAngle;\n }\n return this._hachureAngle;\n }\n\n set hachureGap(value) {\n this._hachureGap = value;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n get hachureGap() {\n if (typeof this._hachureGap === 'number') {\n if (this._hachureGap >= 0) {\n return this._hachureGap;\n }\n }\n if (this._canvas) {\n return this._canvas.hachureGap;\n }\n return this._hachureGap;\n }\n\n attach(canvas, z) {\n this.attached = true;\n this._canvas = canvas;\n this.z = z;\n }\n\n detach() {\n this.attached = false;\n this.z = 0;\n }\n\n remove() {\n if (this.attached && this._canvas) {\n this._canvas.remove(this);\n }\n }\n\n _get(name) {\n if (this._fields[name]) {\n return this._fields[name];\n }\n return null;\n }\n\n _set(name, value, markDirty = true) {\n this._fields[name] = value;\n if (markDirty) {\n this._dirty = true;\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n }\n\n draw(context) {\n console.log(\"Draw not implemented.\", context);\n }\n\n getOffset(min, max) {\n return this.roughness * ((Math.random() * (max - min)) + min);\n }\n\n drawLine(ctx, x1, y1, x2, y2, existingPath) {\n let lengthSq = Math.pow((x1 - x2), 2) + Math.pow((x1 - x2), 2);\n let offset = this.maxRandomnessOffset || 0;\n if (offset * offset * 100 > lengthSq) {\n offset = Math.sqrt(lengthSq) / 10;\n }\n let halfOffset = offset / 2;\n let divergePoint = 0.2 + Math.random() * 0.2;\n // Midpoint displacement value to give slightly bowed lines.\n let midDispX = this.bowing * this.maxRandomnessOffset * (y2 - y1) / 200;\n let midDispY = this.bowing * this.maxRandomnessOffset * (x1 - x2) / 200;\n midDispX = this.getOffset(-midDispX, midDispX);\n midDispY = this.getOffset(-midDispY, midDispY);\n\n if (!existingPath) {\n ctx.beginPath();\n }\n ctx.moveTo(x1 + this.getOffset(-offset, offset), y1 + this.getOffset(-offset, offset));\n ctx.bezierCurveTo(midDispX + x1 + (x2 - x1) * divergePoint + this.getOffset(-offset, offset),\n midDispY + y1 + (y2 - y1) * divergePoint + this.getOffset(-offset, offset),\n midDispX + x1 + 2 * (x2 - x1) * divergePoint + this.getOffset(-offset, offset),\n midDispY + y1 + 2 * (y2 - y1) * divergePoint + this.getOffset(-offset, offset),\n x2 + this.getOffset(-offset, offset),\n y2 + this.getOffset(-offset, offset));\n if (!existingPath) {\n ctx.stroke();\n }\n if (!existingPath) {\n ctx.beginPath();\n }\n ctx.moveTo(x1 + this.getOffset(-halfOffset, halfOffset), y1 + this.getOffset(-halfOffset, halfOffset));\n ctx.bezierCurveTo(midDispX + x1 + (x2 - x1) * divergePoint + this.getOffset(-halfOffset, halfOffset),\n midDispY + y1 + (y2 - y1) * divergePoint + this.getOffset(-halfOffset, halfOffset),\n midDispX + x1 + 2 * (x2 - x1) * divergePoint + this.getOffset(-halfOffset, halfOffset),\n midDispY + y1 + 2 * (y2 - y1) * divergePoint + this.getOffset(-halfOffset, halfOffset),\n x2 + this.getOffset(-halfOffset, halfOffset),\n y2 + this.getOffset(-halfOffset, halfOffset));\n if (!existingPath) {\n ctx.stroke();\n }\n }\n\n drawLinearPath(ctx, points, close) {\n const len = points.length;\n if (len > 2) {\n ctx.beginPath();\n for (var i = 0; i < len - 1; i++) {\n this.drawLine(ctx, points[i][0], points[i][1], points[i + 1][0], points[i + 1][1], true);\n }\n if (close) {\n this.drawLine(ctx, points[len - 1][0], points[len - 1][1], points[0][0], points[0][1], true);\n }\n ctx.stroke();\n } else if (len == 2) {\n this.drawLine(ctx, points[0][0], points[0][1], points[1][0], points[1][1]);\n }\n }\n\n drawCurve(ctx, vertArray, existingPath, closeToCenter, center) {\n const vertArrayLength = vertArray.length;\n var i;\n if (vertArrayLength > 3) {\n var b = [];\n const s = 1 - this.curveTightness;\n if (!existingPath) {\n ctx.beginPath();\n }\n ctx.moveTo(vertArray[1][0], vertArray[1][1]);\n for (i = 1; (i + 2) < vertArrayLength; i++) {\n let cachedVertArray = vertArray[i];\n b[0] = [cachedVertArray[0], cachedVertArray[1]];\n b[1] = [\n cachedVertArray[0] + (s * vertArray[i + 1][0] - s * vertArray[i - 1][0]) / 6,\n cachedVertArray[1] + (s * vertArray[i + 1][1] - s * vertArray[i - 1][1]) / 6\n ];\n b[2] = [\n vertArray[i + 1][0] + (s * vertArray[i][0] - s * vertArray[i + 2][0]) / 6,\n vertArray[i + 1][1] + (s * vertArray[i][1] - s * vertArray[i + 2][1]) / 6\n ];\n b[3] = [vertArray[i + 1][0], vertArray[i + 1][1]];\n ctx.bezierCurveTo(b[1][0], b[1][1], b[2][0], b[2][1], b[3][0], b[3][1]);\n }\n if (closeToCenter && center && center.length == 2) {\n let ro = this.maxRandomnessOffset || 0;\n ctx.lineTo(center[0] + this.getOffset(-ro, ro), center[1] + this.getOffset(-ro, ro));\n }\n if (!existingPath) {\n ctx.stroke();\n }\n } else if (vertArrayLength == 3) {\n this.drawBezier(\n ctx,\n vertArray[0][0], vertArray[0][1],\n vertArray[1][0], vertArray[1][1],\n vertArray[2][0], vertArray[2][1],\n vertArray[2][0], vertArray[2][1],\n existingPath\n );\n } else if (vertArrayLength == 2) {\n this.drawLine(ctx, vertArray[0][0], vertArray[0][1], vertArray[1][0], vertArray[1][1], existingPath);\n }\n }\n\n drawBezier(ctx, x1, y1, x2, y2, x3, y3, x4, y4, existingPath) {\n if (!existingPath) {\n ctx.beginPath();\n }\n ctx.moveTo(x1, y1);\n let ro = this.maxRandomnessOffset || 0;\n ctx.moveTo(x1 + this.getOffset(-ro, ro), y1 + this.getOffset(-ro, ro));\n this._drawBezierTo(ctx, x2, y2, x3, y3, x4, y4);\n if (!existingPath) {\n ctx.stroke();\n }\n }\n\n _drawBezierTo(ctx, x1, y1, x2, y2, x, y) {\n let ro = this.maxRandomnessOffset || 0;\n let final = [x + this.getOffset(-ro, ro), y + this.getOffset(-ro, ro)];\n ctx.bezierCurveTo(\n x1 + this.getOffset(-ro, ro), y1 + this.getOffset(-ro, ro),\n x2 + this.getOffset(-ro, ro), y2 + this.getOffset(-ro, ro),\n final[0], final[1]\n );\n return final;\n }\n\n _drawQuadTo(ctx, x1, y1, x, y) {\n let ro = this.maxRandomnessOffset || 0;\n let final = [x + this.getOffset(-ro, ro), y + this.getOffset(-ro, ro)];\n ctx.quadraticCurveTo(\n x1 + this.getOffset(-ro, ro), y1 + this.getOffset(-ro, ro),\n final[0], final[1]\n );\n return final;\n }\n\n // fill\n getIntersectingLines(lineCoords, xCoords, yCoords) {\n let intersections = [];\n var s1 = new RoughSegment(lineCoords[0], lineCoords[1], lineCoords[2], lineCoords[3]);\n for (var i = 0; i < xCoords.length; i++) {\n let s2 = new RoughSegment(xCoords[i], yCoords[i], xCoords[(i + 1) % xCoords.length], yCoords[(i + 1) % xCoords.length]);\n if (s1.compare(s2) == RoughSegmentRelation.INTERSECTS) {\n intersections.push([s1.xi, s1.yi]);\n }\n }\n return intersections;\n }\n\n hachureFillShape(ctx, xCoords, yCoords) {\n if (xCoords && yCoords && xCoords.length && yCoords.length) {\n var left = xCoords[0];\n var right = xCoords[0];\n var top = yCoords[0];\n var bottom = yCoords[0];\n for (let i = 1; i < xCoords.length; i++) {\n left = Math.min(left, xCoords[i]);\n right = Math.max(right, xCoords[i]);\n top = Math.min(top, yCoords[i]);\n bottom = Math.max(bottom, yCoords[i]);\n }\n\n var angle = this.hachureAngle;\n var gap = this.hachureGap;\n if (gap < 0) {\n gap = this.strokeWidth * 4;\n }\n gap = Math.max(gap, 0.1);\n var fweight = this.fillWeight;\n if (fweight < 0) {\n fweight = this.strokeWidth / 2;\n }\n\n const radPerDeg = Math.PI / 180;\n var hachureAngle = (angle % 180) * radPerDeg;\n var cosAngle = Math.cos(hachureAngle);\n var sinAngle = Math.sin(hachureAngle);\n var tanAngle = Math.tan(hachureAngle);\n\n ctx.save();\n ctx.strokeStyle = this.fill;\n ctx.lineWidth = fweight;\n\n var it = new RoughHachureIterator(top - 1, bottom + 1, left - 1, right + 1, gap, sinAngle, cosAngle, tanAngle);\n var rectCoords;\n while ((rectCoords = it.getNextLine()) != null) {\n var lines = this.getIntersectingLines(rectCoords, xCoords, yCoords);\n for (let i = 0; i < lines.length; i++) {\n if (i < (lines.length - 1)) {\n let p1 = lines[i];\n let p2 = lines[i + 1];\n this.drawLine(ctx, p1[0], p1[1], p2[0], p2[1]);\n }\n }\n }\n\n ctx.restore();\n }\n }\n}\n\nclass RoughArc extends RoughDrawable {\n constructor(x, y, width, height, start, stop, closed) {\n super(['x', 'y', 'width', 'height', 'start', 'stop', 'numSteps', 'closed']);\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height || width;\n this.start = start;\n this.stop = stop;\n this.numSteps = 9;\n this.closed = closed ? true : false;\n }\n\n draw(ctx) {\n let cx = this.x;\n let cy = this.y;\n let rx = Math.abs(this.width / 2);\n let ry = Math.abs(this.height / 2);\n rx += this.getOffset(-rx * 0.01, rx * 0.01);\n ry += this.getOffset(-ry * 0.01, ry * 0.01);\n let strt = this.start;\n let stp = this.stop;\n while (strt < 0) {\n strt += Math.PI * 2;\n stp += Math.PI * 2;\n }\n if ((stp - strt) > (Math.PI * 2)) {\n strt = 0;\n stp = Math.PI * 2;\n }\n let ellipseInc = (Math.PI * 2) / this.numSteps;\n let arcInc = Math.min(ellipseInc / 2, (stp - strt) / 2);\n\n var points = [];\n points.push([\n cx + rx * Math.cos(strt),\n cy + ry * Math.sin(strt)\n ]);\n for (var theta = strt; theta <= stp; theta += arcInc) {\n points.push([\n cx + rx * Math.cos(theta),\n cy + ry * Math.sin(theta)\n ]);\n }\n points.push([\n cx + rx * Math.cos(stp),\n cy + ry * Math.sin(stp)\n ]);\n points.push([\n cx + rx * Math.cos(stp),\n cy + ry * Math.sin(stp)\n ]);\n\n if (this.fill && this.closed) {\n this._doFill(ctx, points, [cx, cy]);\n }\n\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n this.drawCurve(ctx, points);\n if (this.closed) {\n const lindex = points.length - 1;\n this.drawLine(ctx, points[0][0], points[0][1], cx, cy);\n this.drawLine(ctx, points[lindex][0], points[lindex][1], cx, cy);\n }\n ctx.restore();\n }\n\n _doFill(ctx, points, center) {\n var fillStyle = this.fillStyle || \"hachure\";\n switch (fillStyle) {\n case \"solid\": {\n ctx.save();\n ctx.fillStyle = this.fill;\n ctx.beginPath();\n this.drawCurve(ctx, points, true, true, center);\n ctx.fill();\n ctx.restore();\n break;\n }\n default: {\n let cx = this.x;\n let cy = this.y;\n let strt = this.start;\n let stp = this.stop;\n let rx = Math.abs(this.width / 2);\n let ry = Math.abs(this.height / 2);\n while (strt < 0) {\n strt += Math.PI * 2;\n stp += Math.PI * 2;\n }\n if ((stp - strt) > (Math.PI * 2)) {\n strt = 0;\n stp = Math.PI * 2;\n }\n let arcInc = (stp - strt) / this.numSteps;\n var vertices = [];\n vertices.push([cx, cy]);\n vertices.push([\n cx + rx * Math.cos(strt),\n cy + ry * Math.sin(strt)\n ]);\n for (var theta = strt; theta <= stp; theta += arcInc) {\n vertices.push([\n cx + rx * Math.cos(theta),\n cy + ry * Math.sin(theta)\n ]);\n }\n vertices.push([\n cx + rx * Math.cos(stp),\n cy + ry * Math.sin(stp)\n ]);\n\n let xc = [];\n let yc = [];\n vertices.forEach(function (p) {\n xc.push(p[0]);\n yc.push(p[1]);\n });\n this.hachureFillShape(ctx, xc, yc);\n break;\n }\n }\n }\n}\n\nclass RoughEllipse extends RoughDrawable {\n constructor(x, y, width, height) {\n super(['x', 'y', 'width', 'height', 'numSteps']);\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height || width;\n this.numSteps = 9;\n }\n\n draw(ctx) {\n this.ellipseInc = (Math.PI * 2) / this.numSteps;\n let rx = Math.abs(this.width / 2);\n let ry = Math.abs(this.height / 2);\n rx += this.getOffset(-rx * 0.05, rx * 0.05);\n ry += this.getOffset(-ry * 0.05, ry * 0.05);\n\n if (this.fill) {\n this._doFill(ctx, rx, ry);\n }\n\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n this._ellipse(ctx, this.x, this.y, rx, ry, 1, this.ellipseInc * this.getOffset(0.1, this.getOffset(0.4, 1)));\n this._ellipse(ctx, this.x, this.y, rx, ry, 1.5, 0);\n ctx.restore();\n }\n\n _ellipse(ctx, cx, cy, rx, ry, offset, overlap, existingPath) {\n var radOffset = this.getOffset(-0.5, 0.5) - Math.PI / 2;\n var points = [];\n points.push([\n this.getOffset(-offset, offset) + cx + 0.9 * rx * Math.cos(radOffset - this.ellipseInc),\n this.getOffset(-offset, offset) + cy + 0.9 * ry * Math.sin(radOffset - this.ellipseInc)\n ]);\n for (var angle = radOffset; angle < (Math.PI * 2 + radOffset - 0.01); angle = angle + this.ellipseInc) {\n points.push([\n this.getOffset(-offset, offset) + cx + rx * Math.cos(angle),\n this.getOffset(-offset, offset) + cy + ry * Math.sin(angle)\n ]);\n }\n points.push([\n this.getOffset(-offset, offset) + cx + rx * Math.cos(radOffset + Math.PI * 2 + overlap * 0.5),\n this.getOffset(-offset, offset) + cy + ry * Math.sin(radOffset + Math.PI * 2 + overlap * 0.5)\n ]);\n points.push([\n this.getOffset(-offset, offset) + cx + 0.98 * rx * Math.cos(radOffset + overlap),\n this.getOffset(-offset, offset) + cy + 0.98 * ry * Math.sin(radOffset + overlap)\n ]);\n points.push([\n this.getOffset(-offset, offset) + cx + 0.9 * rx * Math.cos(radOffset + overlap * 0.5),\n this.getOffset(-offset, offset) + cy + 0.9 * ry * Math.sin(radOffset + overlap * 0.5)\n ]);\n this.drawCurve(ctx, points, existingPath);\n }\n\n _doFill(ctx, rx, ry) {\n var fillStyle = this.fillStyle || \"hachure\";\n switch (fillStyle) {\n case \"solid\": {\n ctx.save();\n ctx.fillStyle = this.fill;\n ctx.strokeStyle = null;\n ctx.beginPath();\n this._ellipse(ctx, this.x, this.y, rx, ry, 1, this.ellipseInc * this.getOffset(0.1, this.getOffset(0.4, 1)), true);\n ctx.fill();\n ctx.restore();\n break;\n }\n default: {\n var angle = this.hachureAngle;\n var gap = this.hachureGap;\n if (gap <= 0) {\n gap = this.strokeWidth * 4;\n }\n var fweight = this.fillWeight;\n if (fweight < 0) {\n fweight = this.strokeWidth / 2;\n }\n const radPerDeg = Math.PI / 180;\n var hachureAngle = (angle % 180) * radPerDeg;\n var tanAngle = Math.tan(hachureAngle);\n var cx = this.x, cy = this.y;\n var aspectRatio = ry / rx;\n var hyp = Math.sqrt(aspectRatio * tanAngle * aspectRatio * tanAngle + 1);\n var sinAnglePrime = aspectRatio * tanAngle / hyp;\n var cosAnglePrime = 1 / hyp;\n var gapPrime = gap / ((rx * ry / Math.sqrt((ry * cosAnglePrime) * (ry * cosAnglePrime) + (rx * sinAnglePrime) * (rx * sinAnglePrime))) / rx);\n var halfLen = Math.sqrt((rx * rx) - (cx - rx + gapPrime) * (cx - rx + gapPrime));\n\n ctx.save();\n ctx.strokeStyle = this.fill;\n ctx.lineWidth = fweight;\n for (var xPos = cx - rx + gapPrime; xPos < cx + rx; xPos += gapPrime) {\n halfLen = Math.sqrt((rx * rx) - (cx - xPos) * (cx - xPos));\n let p1 = this.affine(xPos, cy - halfLen, cx, cy, sinAnglePrime, cosAnglePrime, aspectRatio);\n let p2 = this.affine(xPos, cy + halfLen, cx, cy, sinAnglePrime, cosAnglePrime, aspectRatio);\n this.drawLine(ctx, p1[0], p1[1], p2[0], p2[1]);\n }\n ctx.restore();\n break;\n }\n }\n }\n\n affine(x, y, cx, cy, sinAnglePrime, cosAnglePrime, R) {\n var A = -cx * cosAnglePrime - cy * sinAnglePrime + cx;\n var B = R * (cx * sinAnglePrime - cy * cosAnglePrime) + cy;\n var C = cosAnglePrime;\n var D = sinAnglePrime;\n var E = -R * sinAnglePrime;\n var F = R * cosAnglePrime;\n return [\n A + C * x + D * y,\n B + E * x + F * y\n ];\n }\n}\n\nclass RoughCircle extends RoughEllipse {\n constructor(x, y, radius) {\n super(x, y, radius * 2);\n }\n\n get radius() {\n return this.width / 2;\n }\n\n set radius(value) {\n this.width = value * 2;\n this.height = value * 2;\n }\n}\n\nclass RoughCurve extends RoughDrawable {\n constructor(points) {\n super();\n this._points = points;\n }\n\n setPoint(index, x, y) {\n this._points[index] = [x, y];\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n getPoint(index) {\n if (index > 0 && index < this._points.length) {\n return this._points[index];\n }\n return null;\n }\n\n draw(ctx) {\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n let o = this.maxRandomnessOffset || 0;\n var p1 = [];\n var p2 = [];\n p1.push(this._points[0]);\n p1.push(this._points[0]);\n var px = [this._points[0][0] + this.getOffset(-o, o), this._points[0][1] + this.getOffset(-o, o)];\n p2.push(px);\n p2.push(px);\n\n var lastIndex = this._points.length - 1;\n for (var i = 1; i < lastIndex; i++) {\n p1.push(this._points[i]);\n if ((i % 3) == 0) {\n p2.push([this._points[i][0] + this.getOffset(-o, o), this._points[i][1] + this.getOffset(-o, o)]);\n } else {\n p2.push(this._points[i]);\n }\n }\n\n p1.push(this._points[lastIndex]);\n p1.push(this._points[lastIndex]);\n var px2 = [this._points[lastIndex][0] + this.getOffset(-o, o), this._points[lastIndex][1] + this.getOffset(-o, o)];\n p2.push(px2);\n p2.push(px2);\n\n this.drawCurve(ctx, p1);\n this.drawCurve(ctx, p2);\n ctx.restore();\n }\n}\n\nclass RoughLine extends RoughDrawable {\n constructor(x1, y1, x2, y2) {\n super(['x1', 'y1', 'x2', 'y2']);\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n }\n\n draw(ctx) {\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n this.drawLine(ctx, this.x1, this.y1, this.x2, this.y2);\n ctx.restore();\n }\n}\n\nclass RoughLinearPath extends RoughDrawable {\n constructor(points) {\n super();\n this._points = points;\n }\n\n setPoint(index, x, y) {\n this._points[index] = [x, y];\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n getPoint(index) {\n if (index > 0 && index < this._points.length) {\n return this._points[index];\n }\n return null;\n }\n\n draw(ctx) {\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n this.drawLinearPath(ctx, this._points, false);\n ctx.restore();\n }\n}\n\n// Path parsing adapted from http://www.kevlindev.com/geometry/index.htm\n\nfunction RoughGeomToken(type, text) { if (arguments.length > 0) { this.init(type, text); } }\nRoughGeomToken.prototype.init = function (type, text) { this.type = type; this.text = text; };\nRoughGeomToken.prototype.typeis = function (type) { return this.type == type; };\n\nclass RoughGeomPath {\n constructor(d) {\n this.PARAMS = {\n A: [\"rx\", \"ry\", \"x-axis-rotation\", \"large-arc-flag\", \"sweep-flag\", \"x\", \"y\"],\n a: [\"rx\", \"ry\", \"x-axis-rotation\", \"large-arc-flag\", \"sweep-flag\", \"x\", \"y\"],\n C: [\"x1\", \"y1\", \"x2\", \"y2\", \"x\", \"y\"],\n c: [\"x1\", \"y1\", \"x2\", \"y2\", \"x\", \"y\"],\n H: [\"x\"],\n h: [\"x\"],\n L: [\"x\", \"y\"],\n l: [\"x\", \"y\"],\n M: [\"x\", \"y\"],\n m: [\"x\", \"y\"],\n Q: [\"x1\", \"y1\", \"x\", \"y\"],\n q: [\"x1\", \"y1\", \"x\", \"y\"],\n S: [\"x2\", \"y2\", \"x\", \"y\"],\n s: [\"x2\", \"y2\", \"x\", \"y\"],\n T: [\"x\", \"y\"],\n t: [\"x\", \"y\"],\n V: [\"y\"],\n v: [\"y\"],\n Z: [],\n z: []\n };\n this.COMMAND = 0;\n this.NUMBER = 1;\n this.EOD = 2;\n\n this.segments = [];\n this.d = d || \"\";\n this.parseData(d);\n }\n\n parseData(d) {\n var tokens = this.tokenize(d);\n var index = 0;\n var token = tokens[index];\n var mode = \"BOD\";\n this.segments = new Array();\n while (!token.typeis(this.EOD)) {\n var param_length;\n var params = new Array();\n if (mode == \"BOD\") {\n if (token.text == \"M\" || token.text == \"m\") {\n index++;\n param_length = this.PARAMS[token.text].length;\n mode = token.text;\n } else {\n console.error(\"Path data must begin with a MoveTo command\");\n return;\n }\n } else {\n if (token.typeis(this.NUMBER)) {\n param_length = this.PARAMS[mode].length;\n } else {\n index++;\n param_length = this.PARAMS[token.text].length;\n mode = token.text;\n }\n }\n\n if ((index + param_length) < tokens.length) {\n for (var i = index; i < index + param_length; i++) {\n var number = tokens[i];\n if (number.typeis(this.NUMBER)) {\n params[params.length] = number.text;\n }\n else {\n console.error(\"Parameter type is not a number: \" + mode + \",\" + number.text);\n return;\n }\n }\n var segment;\n if (this.PARAMS[mode]) {\n segment = { key: mode, data: params };\n } else {\n console.error(\"Unsupported segment type: \" + mode);\n return;\n }\n this.segments.push(segment);\n index += param_length;\n token = tokens[index];\n if (mode == \"M\") mode = \"L\";\n if (mode == \"m\") mode = \"l\";\n } else {\n console.error(\"Path data ended before all parameters were found\");\n }\n }\n }\n\n tokenize(d) {\n var tokens = new Array();\n while (d != \"\") {\n if (d.match(/^([ \\t\\r\\n,]+)/)) {\n d = d.substr(RegExp.$1.length);\n } else if (d.match(/^([aAcChHlLmMqQsStTvVzZ])/)) {\n tokens[tokens.length] = new RoughGeomToken(this.COMMAND, RegExp.$1);\n d = d.substr(RegExp.$1.length);\n } else if (d.match(/^(([-+]?[0-9]+(\\.[0-9]*)?|[-+]?\\.[0-9]+)([eE][-+]?[0-9]+)?)/)) {\n tokens[tokens.length] = new RoughGeomToken(this.NUMBER, parseFloat(RegExp.$1));\n d = d.substr(RegExp.$1.length);\n } else {\n console.error(\"Unrecognized segment command: \" + d);\n return null;\n }\n }\n tokens[tokens.length] = new RoughGeomToken(this.EOD, null);\n return tokens;\n }\n}\n\nclass RoughArcConverter {\n // Algorithm as described in https://www.w3.org/TR/SVG/implnote.html\n // Code adapted from nsSVGPathDataParser.cpp in Mozilla \n // https://hg.mozilla.org/mozilla-central/file/17156fbebbc8/content/svg/content/src/nsSVGPathDataParser.cpp#l887\n\n constructor(from, to, radii, angle, largeArcFlag, sweepFlag) {\n const radPerDeg = Math.PI / 180;\n this._segIndex = 0;\n this._numSegs = 0;\n if (from[0] == to[0] && from[1] == to[1]) {\n return;\n }\n this._rx = Math.abs(radii[0]);\n this._ry = Math.abs(radii[1]);\n this._sinPhi = Math.sin(angle * radPerDeg);\n this._cosPhi = Math.cos(angle * radPerDeg);\n var x1dash = this._cosPhi * (from[0] - to[0]) / 2.0 + this._sinPhi * (from[1] - to[1]) / 2.0;\n var y1dash = -this._sinPhi * (from[0] - to[0]) / 2.0 + this._cosPhi * (from[1] - to[1]) / 2.0;\n var root;\n var numerator = this._rx * this._rx * this._ry * this._ry - this._rx * this._rx * y1dash * y1dash - this._ry * this._ry * x1dash * x1dash;\n if (numerator < 0) {\n let s = Math.sqrt(1 - (numerator / (this._rx * this._rx * this._ry * this._ry)));\n this._rx = s;\n this._ry = s;\n root = 0;\n } else {\n root = (largeArcFlag == sweepFlag ? -1.0 : 1.0) *\n Math.sqrt(numerator / (this._rx * this._rx * y1dash * y1dash + this._ry * this._ry * x1dash * x1dash));\n }\n let cxdash = root * this._rx * y1dash / this._ry;\n let cydash = -root * this._ry * x1dash / this._rx;\n this._C = [0, 0];\n this._C[0] = this._cosPhi * cxdash - this._sinPhi * cydash + (from[0] + to[0]) / 2.0;\n this._C[1] = this._sinPhi * cxdash + this._cosPhi * cydash + (from[1] + to[1]) / 2.0;\n this._theta = this.calculateVectorAngle(1.0, 0.0, (x1dash - cxdash) / this._rx, (y1dash - cydash) / this._ry);\n let dtheta = this.calculateVectorAngle((x1dash - cxdash) / this._rx, (y1dash - cydash) / this._ry, (-x1dash - cxdash) / this._rx, (-y1dash - cydash) / this._ry);\n if ((!sweepFlag) && (dtheta > 0)) {\n dtheta -= 2 * Math.PI;\n } else if (sweepFlag && (dtheta < 0)) {\n dtheta += 2 * Math.PI;\n }\n this._numSegs = Math.ceil(Math.abs(dtheta / (Math.PI / 2)));\n this._delta = dtheta / this._numSegs;\n this._T = (8 / 3) * Math.sin(this._delta / 4) * Math.sin(this._delta / 4) / Math.sin(this._delta / 2);\n this._from = from;\n }\n\n getNextSegment() {\n var cp1, cp2, to;\n if (this._segIndex == this._numSegs) {\n return null;\n }\n let cosTheta1 = Math.cos(this._theta);\n let sinTheta1 = Math.sin(this._theta);\n let theta2 = this._theta + this._delta;\n let cosTheta2 = Math.cos(theta2);\n let sinTheta2 = Math.sin(theta2);\n\n to = [\n this._cosPhi * this._rx * cosTheta2 - this._sinPhi * this._ry * sinTheta2 + this._C[0],\n this._sinPhi * this._rx * cosTheta2 + this._cosPhi * this._ry * sinTheta2 + this._C[1]\n ];\n cp1 = [\n this._from[0] + this._T * (- this._cosPhi * this._rx * sinTheta1 - this._sinPhi * this._ry * cosTheta1),\n this._from[1] + this._T * (- this._sinPhi * this._rx * sinTheta1 + this._cosPhi * this._ry * cosTheta1)\n ];\n cp2 = [\n to[0] + this._T * (this._cosPhi * this._rx * sinTheta2 + this._sinPhi * this._ry * cosTheta2),\n to[1] + this._T * (this._sinPhi * this._rx * sinTheta2 - this._cosPhi * this._ry * cosTheta2)\n ];\n\n this._theta = theta2;\n this._from = [to[0], to[1]];\n this._segIndex++;\n\n return {\n cp1: cp1,\n cp2: cp2,\n to: to\n };\n }\n\n calculateVectorAngle(ux, uy, vx, vy) {\n let ta = Math.atan2(uy, ux);\n let tb = Math.atan2(vy, vx);\n if (tb >= ta)\n return tb - ta;\n return 2 * Math.PI - (ta - tb);\n }\n}\n\nclass RoughPath extends RoughDrawable {\n constructor(path) {\n super(['path', 'numSteps']);\n this.numSteps = 9;\n this.path = path;\n this._keys = ['C', 'c', 'Q', 'q', 'M', 'm', 'L', 'l',\n 'A', 'a', 'H', 'h', 'V', 'v', 'S', 's', 'T', 't', 'Z', 'z'];\n }\n\n draw(ctx) {\n if (this.path) {\n var path = (this.path || \"\").replace(/\\n/g, \" \").replace(/(-)/g, \" -\").replace(/(-\\s)/g, \"-\").replace(\"/(\\s\\s)/g\", \" \");\n\n this.gp = new RoughGeomPath(path);\n var segments = this.gp.segments || [];\n\n this._position = [0, 0];\n this._bezierReflectionPoint = null;\n this._quadReflectionPoint = null;\n this._first = null;\n\n if (this.fill) {\n this._doFill(ctx, path);\n }\n\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n ctx.beginPath();\n for (var i = 0; i < segments.length; i++) {\n var s = segments[i];\n this._processSegment(ctx, s, i > 0 ? segments[i - 1] : null);\n }\n ctx.stroke();\n ctx.restore();\n }\n }\n\n _doFill(ctx, path) {\n var fillStyle = this.fillStyle || \"hachure\";\n switch (fillStyle) {\n case \"solid\": {\n ctx.save();\n ctx.fillStyle = this.fill;\n let p2d = new Path2D(path);\n ctx.fill(p2d);\n ctx.restore();\n break;\n }\n default: {\n var hc = this._canvas.getHiddenCanvas();\n if (hc) {\n const hctx = hc.getContext(\"2d\");\n let xc = [0, hc.width, hc.width, 0];\n let yc = [0, 0, hc.height, hc.height];\n this.hachureFillShape(hctx, xc, yc);\n }\n ctx.save();\n ctx.fillStyle = ctx.createPattern(hc, 'repeat');\n let p2d = new Path2D(path);\n ctx.fill(p2d);\n ctx.restore();\n break;\n }\n }\n }\n\n _processSegment(ctx, seg, prevSeg) {\n switch (seg.key) {\n case 'M':\n case 'm':\n this._moveTo(seg);\n break;\n case 'L':\n case 'l':\n this._lineTo(ctx, seg);\n break;\n case 'H':\n case 'h':\n this._hLineTo(ctx, seg);\n break;\n case 'V':\n case 'v':\n this._vLineTo(ctx, seg);\n break;\n case 'Z':\n case 'z':\n this._closeShape(ctx);\n break;\n case 'C':\n case 'c':\n this._curveTo(ctx, seg);\n break;\n case 'S':\n case 's':\n this._shortCurveTo(ctx, seg, prevSeg);\n break;\n case 'Q':\n case 'q':\n this._quadCurveTo(ctx, seg);\n break;\n case 'T':\n case 't':\n this._shortQuadTo(ctx, seg, prevSeg);\n break;\n case 'A':\n case 'a':\n this._arcTo(ctx, seg);\n break;\n default:\n break;\n }\n }\n\n _setPosition(x, y) {\n this._position = [x, y];\n if (!this._first) {\n this._first = [x, y];\n }\n }\n\n _moveTo(seg) {\n var delta = seg.key === 'm';\n if (seg.data.length >= 2) {\n let x = +seg.data[0];\n let y = +seg.data[1];\n if (delta) {\n this._setPosition(this._position[0] + x, this._position[1] + y);\n } else {\n this._setPosition(x, y);\n }\n }\n }\n\n _closeShape(ctx) {\n if (this._first) {\n this.drawLine(ctx, this._position[0], this._position[1], this._first[0], this._first[1], true);\n }\n }\n\n _lineTo(ctx, seg) {\n var delta = seg.key === 'l';\n if (seg.data.length >= 2) {\n let x = +seg.data[0];\n let y = +seg.data[1];\n if (delta) {\n x += this._position[0];\n y += this._position[1];\n }\n this.drawLine(ctx, this._position[0], this._position[1], x, y, true);\n this._setPosition(x, y);\n }\n }\n\n _hLineTo(ctx, seg) {\n var delta = seg.key === 'h';\n if (seg.data.length) {\n let x = +seg.data[0];\n if (delta) {\n x += this._position[0];\n }\n this.drawLine(ctx, this._position[0], this._position[1], x, this._position[1], true);\n this._setPosition(x, this._position[1]);\n }\n }\n\n _vLineTo(ctx, seg) {\n var delta = seg.key === 'v';\n if (seg.data.length) {\n let y = +seg.data[0];\n if (delta) {\n y += this._position[1];\n }\n this.drawLine(ctx, this._position[0], this._position[1], this._position[0], y, true);\n this._setPosition(this._position[0], y);\n }\n }\n\n _quadCurveTo(ctx, seg) {\n var delta = seg.key === 'q';\n if (seg.data.length >= 4) {\n let x1 = +seg.data[0];\n let y1 = +seg.data[1];\n let x = +seg.data[2];\n let y = +seg.data[3];\n if (delta) {\n x1 += this._position[0];\n x += this._position[0];\n y1 += this._position[1];\n y += this._position[1];\n }\n let ro = this.maxRandomnessOffset || 0;\n ctx.moveTo(this._position[0], this._position[1]);\n this._drawQuadTo(ctx, x1, y1, x, y);\n ctx.moveTo(this._position[0] + this.getOffset(-ro, ro), this._position[1] + this.getOffset(-ro, ro));\n let final = this._drawQuadTo(ctx, x1, y1, x, y);\n x = final[0];\n y = final[1];\n this._setPosition(x, y);\n this._quadReflectionPoint = [x + (x - x1), y + (y - y1)];\n }\n }\n\n _curveTo(ctx, seg) {\n var delta = seg.key === 'c';\n if (seg.data.length >= 6) {\n let x1 = +seg.data[0];\n let y1 = +seg.data[1];\n let x2 = +seg.data[2];\n let y2 = +seg.data[3];\n let x = +seg.data[4];\n let y = +seg.data[5];\n if (delta) {\n x1 += this._position[0];\n x2 += this._position[0];\n x += this._position[0];\n y1 += this._position[1];\n y2 += this._position[1];\n y += this._position[1];\n }\n let ro = this.maxRandomnessOffset || 0;\n ctx.moveTo(this._position[0], this._position[1]);\n this._drawBezierTo(ctx, x1, y1, x2, y2, x, y);\n ctx.moveTo(this._position[0] + this.getOffset(-ro, ro), this._position[1] + this.getOffset(-ro, ro));\n let final = this._drawBezierTo(ctx, x1, y1, x2, y2, x, y);\n x = final[0];\n y = final[1];\n this._setPosition(x, y);\n this._bezierReflectionPoint = [x + (x - x2), y + (y - y2)];\n }\n }\n\n _shortCurveTo(ctx, seg, prevSeg) {\n var delta = seg.key === 's';\n if (seg.data.length >= 4) {\n let x2 = +seg.data[0];\n let y2 = +seg.data[1];\n let x = +seg.data[2];\n let y = +seg.data[3];\n if (delta) {\n x2 += this._position[0];\n x += this._position[0];\n y2 += this._position[1];\n y += this._position[1];\n }\n let x1 = x2;\n let y1 = y2;\n let prevKey = prevSeg ? prevSeg.key : \"\";\n var ref = null;\n if (prevKey == 'c' || prevKey == 'C' || prevKey == 's' || prevKey == 'S') {\n ref = this._bezierReflectionPoint;\n }\n if (ref) {\n x1 = ref[0];\n y1 = ref[1];\n }\n ctx.moveTo(this._position[0], this._position[1]);\n this._drawBezierTo(ctx, x1, y1, x2, y2, x, y);\n ctx.moveTo(this._position[0], this._position[1]);\n var final = this._drawBezierTo(ctx, x1, y1, x2, y2, x, y);\n x = final[0];\n y = final[1];\n this._setPosition(x, y);\n this._bezierReflectionPoint = [x + (x - x2), y + (y - y2)];\n }\n }\n\n _shortQuadTo(ctx, seg, prevSeg) {\n var delta = seg.key === 't';\n if (seg.data.length >= 2) {\n let x = +seg.data[0];\n let y = +seg.data[1];\n if (delta) {\n x += this._position[0];\n y += this._position[1];\n }\n let x1 = x;\n let y1 = y;\n let prevKey = prevSeg ? prevSeg.key : \"\";\n var ref = null;\n if (prevKey == 'q' || prevKey == 'Q' || prevKey == 't' || prevKey == 'T') {\n ref = this._quadReflectionPoint;\n }\n if (ref) {\n x1 = ref[0];\n y1 = ref[1];\n }\n ctx.moveTo(this._position[0], this._position[1]);\n this._drawQuadTo(ctx, x1, y1, x, y);\n ctx.moveTo(this._position[0], this._position[1]);\n let final = this._drawQuadTo(ctx, x1, y1, x, y);\n x = final[0];\n y = final[1];\n this._setPosition(x, y);\n this._quadReflectionPoint = [x + (x - x1), y + (y - y1)];\n }\n }\n\n _arcTo(ctx, seg) {\n var delta = seg.key === 'a';\n if (seg.data.length >= 7) {\n let rx = +seg.data[0];\n let ry = +seg.data[1];\n let angle = +seg.data[2];\n let largeArcFlag = +seg.data[3];\n let sweepFlag = +seg.data[4];\n let x = +seg.data[5];\n let y = +seg.data[6];\n if (delta) {\n x += this._position[0];\n y += this._position[1];\n }\n\n if (x == this._position[0] && y == this._position[1]) {\n return;\n }\n if (rx == 0 || ry == 0) {\n this.drawLine(ctx, this._position[0], this._position[1], x, y, true);\n this._setPosition(x, y);\n } else {\n var final;\n for (var i = 0; i < 2; i++) {\n ctx.moveTo(this._position[0], this._position[1]);\n var arcConverter = new RoughArcConverter(\n [this._position[0], this._position[1]],\n [x, y],\n [rx, ry],\n angle,\n largeArcFlag ? true : false,\n sweepFlag ? true : false\n );\n var segment = arcConverter.getNextSegment();\n while (segment) {\n final = this._drawBezierTo(ctx, segment.cp1[0], segment.cp1[1], segment.cp2[0], segment.cp2[1], segment.to[0], segment.to[1]);\n segment = arcConverter.getNextSegment();\n }\n }\n if (final) {\n x = final[0];\n y = final[1];\n }\n this._setPosition(x, y);\n }\n }\n }\n}\n\nclass RoughPolygon extends RoughDrawable {\n constructor(points) {\n super();\n this._points = points;\n }\n\n setPoint(index, x, y) {\n this._points[index] = [x, y];\n if (this._canvas) {\n this._canvas.requestDraw();\n }\n }\n\n getPoint(index) {\n if (index > 0 && index < this._points.length) {\n return this._points[index];\n }\n return null;\n }\n\n draw(ctx) {\n if (this.fill) {\n this._doFill(ctx, this._points);\n }\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n this.drawLinearPath(ctx, this._points, true);\n ctx.restore();\n }\n\n _doFill(ctx, points) {\n var fillStyle = this.fillStyle || \"hachure\";\n switch (fillStyle) {\n case \"solid\": {\n ctx.save();\n ctx.fillStyle = this.fill;\n let o = this.maxRandomnessOffset || 0;\n const len = points.length;\n if (len > 2) {\n ctx.beginPath();\n ctx.moveTo(points[0][0] + this.getOffset(-o, o), points[0][1] + this.getOffset(-o, o));\n for (var i = 1; i < len; i++) {\n ctx.lineTo(points[i][0] + this.getOffset(-o, o), points[i][1] + this.getOffset(-o, o));\n }\n ctx.fill();\n }\n ctx.restore();\n break;\n }\n default: {\n let xc = [];\n let yc = [];\n points.forEach(function (p) {\n xc.push(p[0]);\n yc.push(p[1]);\n });\n this.hachureFillShape(ctx, xc, yc);\n break;\n }\n }\n }\n}\n\nclass RoughRectangle extends RoughDrawable {\n constructor(x, y, width, height) {\n super(['x', 'y', 'width', 'height']);\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n draw(ctx) {\n let left = this.x;\n let right = this.x + this.width;\n let top = this.y;\n let bottom = this.y + this.height;\n\n if (this.fill) {\n this._doFill(ctx, left, right, top, bottom);\n }\n\n ctx.save();\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n this.drawLine(ctx, left, top, right, top);\n this.drawLine(ctx, right, top, right, bottom);\n this.drawLine(ctx, right, bottom, left, bottom);\n this.drawLine(ctx, left, bottom, left, top);\n ctx.restore();\n }\n\n _doFill(ctx, left, right, top, bottom) {\n var fillStyle = this.fillStyle || \"hachure\";\n switch (fillStyle) {\n case \"solid\": {\n ctx.save();\n ctx.fillStyle = this.fill;\n let o = this.maxRandomnessOffset || 0;\n var points = [\n [left + this.getOffset(-o, o), top + this.getOffset(-o, o)],\n [right + this.getOffset(-o, o), top + this.getOffset(-o, o)],\n [right + this.getOffset(-o, o), bottom + this.getOffset(-o, o)],\n [left + this.getOffset(-o, o), bottom + this.getOffset(-o, o)]\n ];\n ctx.beginPath();\n ctx.moveTo(points[0][0], points[0][1]);\n ctx.lineTo(points[1][0], points[1][1]);\n ctx.lineTo(points[2][0], points[2][1]);\n ctx.lineTo(points[3][0], points[3][1]);\n ctx.fill();\n ctx.restore();\n break;\n }\n default: {\n let xc = [left, right, right, left];\n let yc = [top, top, bottom, bottom];\n this.hachureFillShape(ctx, xc, yc);\n break;\n }\n }\n }\n}\n\nclass RoughCanvas {\n constructor(canvas, width, height) {\n this._canvas = canvas;\n this.width = width || canvas.width;\n this.height = height || canvas.height;\n canvas.width = this.width;\n canvas.height = this.height;\n this._objects = [];\n this._drawRequested = false;\n\n this.roughness = 1;\n this.bowing = 1;\n\n this.stroke = \"#000\";\n this.strokeWidth = 1;\n\n this.fill = null;\n this.fillStyle = \"hachure\";\n this.fillWeight = -1;\n this.hachureAngle = -41;\n this.hachureGap = -1;\n\n this.maxRandomnessOffset = 2;\n }\n\n add(drawable) {\n if (drawable instanceof RoughDrawable) {\n if (drawable.attached) {\n return;\n }\n this._objects.push(drawable);\n drawable.attach(this, this._objects.length - 1);\n this.requestDraw();\n } else {\n console.warn(\"Ignoring canvas add - the object is not drawable\", drawable);\n }\n }\n\n remove(drawable) {\n if (drawable instanceof RoughDrawable) {\n if (drawable.attached) {\n this._objects.splice(drawable.z, 1);\n drawable.detach();\n this.requestDraw();\n }\n } else {\n console.warn(\"Ignoring canvas remove - the object is not drawable\", drawable);\n }\n }\n\n clear() {\n if (this._objects && this._objects.length) {\n this._objects.forEach(function (d) {\n d.detach();\n });\n }\n this._objects = [];\n this.requestDraw();\n }\n\n requestDraw() {\n if (!this._drawRequested) {\n this._drawRequested = true;\n window.requestAnimationFrame(() => {\n this._drawRequested = false;\n this._draw();\n });\n }\n }\n\n _draw() {\n const ctx = this._canvas.getContext(\"2d\");\n ctx.clearRect(0, 0, this.width, this.height);\n for (var i = 0; i < this._objects.length; i++) {\n try {\n this._objects[i].draw(ctx);\n } catch (ex) {\n console.error(ex);\n }\n }\n }\n\n getHiddenCanvas() {\n if (!this._hiddenCanvas) {\n var div = document.createElement(\"div\");\n div.setAttribute(\"id\", \"roughHiddenCanvas\");\n div.style.overflow = \"hidden\";\n div.style.position = \"absolute\";\n div.style.left = \"-1px\";\n div.style.top = \"-1px\";\n div.style.width = \"0px\";\n div.style.height = \"0px\";\n div.style.opacity = 0;\n div.style.pointerEvents = \"none\";\n document.body.appendChild(div);\n this._hiddenCanvas = document.createElement(\"canvas\");\n div.appendChild(this._hiddenCanvas);\n }\n var hc = this._hiddenCanvas;\n hc.width = this.width;\n hc.height = this.height;\n const ctx = hc.getContext(\"2d\");\n ctx.clearRect(0, 0, this.width, this.height);\n return hc;\n }\n\n arc(x, y, width, height, start, stop, closed) {\n var d = new RoughArc(x, y, width, height, start, stop, closed);\n this.add(d);\n return d;\n }\n\n circle(x, y, radius) {\n var d = new RoughCircle(x, y, radius);\n this.add(d);\n return d;\n }\n\n ellipse(x, y, width, height) {\n var d = new RoughEllipse(x, y, width, height);\n this.add(d);\n return d;\n }\n\n curve(points) {\n var d = new RoughCurve(points);\n this.add(d);\n return d;\n }\n\n line(x1, y1, x2, y2) {\n var d = new RoughLine(x1, y1, x2, y2);\n this.add(d);\n return d;\n }\n\n rectangle(x, y, width, height) {\n var d = new RoughRectangle(x, y, width, height);\n this.add(d);\n return d;\n }\n\n linearPath(points) {\n var d = new RoughLinearPath(points);\n this.add(d);\n return d;\n }\n\n polygon(points) {\n var d = new RoughPolygon(points);\n this.add(d);\n return d;\n }\n\n path(d) {\n var p = new RoughPath(d);\n this.add(p);\n return p;\n }\n}\n\nif (exports || window) {\n (exports || window).RoughCanvas = RoughCanvas;\n}\n"]} \ No newline at end of file diff --git a/docs/builds/rough.min.js b/docs/builds/rough.min.js index c413244..7b2a272 100644 --- a/docs/builds/rough.min.js +++ b/docs/builds/rough.min.js @@ -1,3 +1,3 @@ "use strict";function _possibleConstructorReturn(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function _inherits(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function RoughGeomToken(a,b){arguments.length>0&&this.init(a,b)}var _createClass=function(){function a(a,b){for(var c=0;c1e-5&&(b=-f/g,d=-h/g),Math.abs(a.b)>1e-5&&(c=-a.a/a.b,e=-a.c/a.b),b==Number.MAX_VALUE?c==Number.MAX_VALUE?-h/f!=-a.c/a.a?RoughSegmentRelation.SEPARATE:this.py1>=Math.min(a.py1,a.py2)&&this.py1<=Math.max(a.py1,a.py2)?(this.xi=this.px1,this.yi=this.py1,RoughSegmentRelation.INTERSECTS):this.py2>=Math.min(a.py1,a.py2)&&this.py2<=Math.max(a.py1,a.py2)?(this.xi=this.px2,this.yi=this.py2,RoughSegmentRelation.INTERSECTS):RoughSegmentRelation.SEPARATE:(this.xi=this.px1,this.yi=c*this.xi+e,(this.py1-this.yi)*(this.yi-this.py2)<-1e-5||(a.py1-this.yi)*(this.yi-a.py2)<-1e-5?RoughSegmentRelation.SEPARATE:Math.abs(a.a)<1e-5&&(a.px1-this.xi)*(this.xi-a.px2)<-1e-5?RoughSegmentRelation.SEPARATE:RoughSegmentRelation.INTERSECTS):c==Number.MAX_VALUE?(this.xi=a.px1,this.yi=b*this.xi+d,(a.py1-this.yi)*(this.yi-a.py2)<-1e-5||(this.py1-this.yi)*(this.yi-this.py2)<-1e-5?RoughSegmentRelation.SEPARATE:Math.abs(f)<1e-5&&(this.px1-this.xi)*(this.xi-this.px2)<-1e-5?RoughSegmentRelation.SEPARATE:RoughSegmentRelation.INTERSECTS):b==c?d!=e?RoughSegmentRelation.SEPARATE:this.px1>=Math.min(a.px1,a.px2)&&this.px1<=Math.max(a.py1,a.py2)?(this.xi=this.px1,this.yi=this.py1,RoughSegmentRelation.INTERSECTS):this.px2>=Math.min(a.px1,a.px2)&&this.px2<=Math.max(a.px1,a.px2)?(this.xi=this.px2,this.yi=this.py2,RoughSegmentRelation.INTERSECTS):RoughSegmentRelation.SEPARATE:(this.xi=(e-d)/(b-c),this.yi=b*this.xi+d,(this.px1-this.xi)*(this.xi-this.px2)<-1e-5||(a.px1-this.xi)*(this.xi-a.px2)<-1e-5?RoughSegmentRelation.SEPARATE:RoughSegmentRelation.INTERSECTS)}},{key:"getLength",value:function(){return this._getLength(this.px1,this.py1,this.px2,this.py2)}},{key:"_getLength",value:function(a,b,c,d){var e=c-a,f=d-b;return Math.sqrt(e*e+f*f)}}]),a}(),RoughHachureIterator=function(){function a(b,c,d,e,f,g,h,i){_classCallCheck(this,a),this.top=b,this.bottom=c,this.left=d,this.right=e,this.gap=f,this.sinAngle=g,this.tanAngle=i,Math.abs(g)<1e-4?this.pos=d+f:Math.abs(g)>.9999?this.pos=b+f:(this.deltaX=(c-b)*Math.abs(i),this.pos=d-Math.abs(this.deltaX),this.hGap=Math.abs(f/h),this.sLeft=new RoughSegment(d,c,d,b),this.sRight=new RoughSegment(e,c,e,b))}return _createClass(a,[{key:"getNextLine",value:function(){if(Math.abs(this.sinAngle)<1e-4){if(this.pos.9999){if(this.posthis.right&&d>this.right;)if(this.pos+=this.hGap,c=this.pos-this.deltaX/2,d=this.pos+this.deltaX/2,this.pos>this.right+this.deltaX)return null;var g=new RoughSegment(c,e,d,f);g.compare(this.sLeft)==RoughSegmentRelation.INTERSECTS&&(c=g.xi,e=g.yi),g.compare(this.sRight)==RoughSegmentRelation.INTERSECTS&&(d=g.xi,f=g.yi),this.tanAngle>0&&(c=this.right-(c-this.left),d=this.right-(d-this.left));var h=[c,e,d,f];return this.pos+=this.hGap,h}}return null}}]),a}(),RoughDrawable=function(){function a(b){if(_classCallCheck(this,a),this._fields={},this._dirty=!1,this._canvas=null,this.z=0,this._roughness=null,this._bowing=null,this._stroke=null,this._strokeWidth=null,this._fill=null,this._fillStyle=null,this._fillWeight=null,this._hachureAngle=null,this._hachureGap=null,this._maxRandomnessOffset=null,this._curveTightness=0,b)for(var c=0;c2&&void 0!==arguments[2])||arguments[2];this._fields[a]=b,c&&(this._dirty=!0,this._canvas&&this._canvas.requestDraw())}},{key:"draw",value:function(a){console.log("Draw not implemented.",a)}},{key:"getOffset",value:function(a,b){return this.roughness*(Math.random()*(b-a)+a)}},{key:"drawLine",value:function(a,b,c,d,e,f){var g=Math.pow(b-d,2)+Math.pow(b-d,2),h=this.maxRandomnessOffset||0;h*h*100>g&&(h=Math.sqrt(g)/10);var i=h/2,j=.2+.2*Math.random(),k=this.bowing*this.maxRandomnessOffset*(e-c)/200,l=this.bowing*this.maxRandomnessOffset*(b-d)/200;k=this.getOffset(-k,k),l=this.getOffset(-l,l),f||a.beginPath(),a.moveTo(b+this.getOffset(-h,h),c+this.getOffset(-h,h)),a.bezierCurveTo(k+b+(d-b)*j+this.getOffset(-h,h),l+c+(e-c)*j+this.getOffset(-h,h),k+b+2*(d-b)*j+this.getOffset(-h,h),l+c+2*(e-c)*j+this.getOffset(-h,h),d+this.getOffset(-h,h),e+this.getOffset(-h,h)),f||a.stroke(),f||a.beginPath(),a.moveTo(b+this.getOffset(-i,i),c+this.getOffset(-i,i)),a.bezierCurveTo(k+b+(d-b)*j+this.getOffset(-i,i),l+c+(e-c)*j+this.getOffset(-i,i),k+b+2*(d-b)*j+this.getOffset(-i,i),l+c+2*(e-c)*j+this.getOffset(-i,i),d+this.getOffset(-i,i),e+this.getOffset(-i,i)),f||a.stroke()}},{key:"drawLinearPath",value:function(a,b,c){var d=b.length;if(d>2){a.beginPath();for(var e=0;e3){var h=[],i=1-this.curveTightness;for(c||a.beginPath(),a.moveTo(b[1][0],b[1][1]),f=1;f+2=0?this._roughness:this._canvas?this._canvas.roughness:this._roughness}},{key:"bowing",set:function(a){this._bowing=a,this._canvas&&this._canvas.requestDraw()},get:function(){return"number"==typeof this._bowing&&this._bowing>=0?this._bowing:this._canvas?this._canvas.bowing:this._bowing}},{key:"stroke",set:function(a){this._stroke=a,this._canvas&&this._canvas.requestDraw()},get:function(){return"string"==typeof this._stroke&&this._stroke?this._stroke:this._canvas?this._canvas.stroke:this._stroke}},{key:"strokeWidth",set:function(a){this._strokeWidth=a,this._canvas&&this._canvas.requestDraw()},get:function(){return"number"==typeof this._strokeWidth&&this._strokeWidth>=0?this._strokeWidth:this._canvas?this._canvas.strokeWidth:this._strokeWidth}},{key:"maxRandomnessOffset",set:function(a){this._maxRandomnessOffset=a,this._canvas&&this._canvas.requestDraw()},get:function(){return"number"==typeof this._maxRandomnessOffset&&this._maxRandomnessOffset>=0?this._maxRandomnessOffset:this._canvas?this._canvas.maxRandomnessOffset:this._maxRandomnessOffset}},{key:"curveTightness",set:function(a){this._curveTightness=Math.max(Math.min(a,1),0),this._canvas&&this._canvas.requestDraw()},get:function(){return"number"==typeof this._curveTightness&&this._curveTightness>=0?this._curveTightness:this._canvas?this._canvas.curveTightness||0:this._curveTightness}},{key:"fill",set:function(a){this._fill=a,this._canvas&&this._canvas.requestDraw()},get:function(){return"string"==typeof this._fill&&this._fill?this._fill:this._canvas?this._canvas.fill:this._fill}},{key:"fillStyle",set:function(a){this._fillStyle=a,this._canvas&&this._canvas.requestDraw()},get:function(){return"string"==typeof this._fillStyle&&this._fillStyle?this._fillStyle:this._canvas?this._canvas.fillStyle:this._fillStyle}},{key:"fillWeight",set:function(a){this._fillWeight=a,this._canvas&&this._canvas.requestDraw()},get:function(){return"number"==typeof this._fillWeight&&this._fillWeight?this._fillWeight:this._canvas?this._canvas.fillWeight:this._fillWeight}},{key:"hachureAngle",set:function(a){this._hachureAngle=a,this._canvas&&this._canvas.requestDraw()},get:function(){return"number"==typeof this._hachureAngle&&this._hachureAngle>=0?this._hachureAngle:this._canvas?this._canvas.hachureAngle:this._hachureAngle}},{key:"hachureGap",set:function(a){this._hachureGap=a,this._canvas&&this._canvas.requestDraw()},get:function(){return"number"==typeof this._hachureGap&&this._hachureGap>=0?this._hachureGap:this._canvas?this._canvas.hachureGap:this._hachureGap}}]),a}(),RoughArc=function(a){function b(a,c,d,e,f,g,h){_classCallCheck(this,b);var i=_possibleConstructorReturn(this,(b.__proto__||Object.getPrototypeOf(b)).call(this,["x","y","width","height","start","stop","numSteps","closed"]));return i.x=a,i.y=c,i.width=d,i.height=e||d,i.start=f,i.stop=g,i.numSteps=9,i.closed=!!h,i}return _inherits(b,a),_createClass(b,[{key:"draw",value:function(a){var b=this.x,c=this.y,d=Math.abs(this.width/2),e=Math.abs(this.height/2);d+=this.getOffset(.01*-d,.01*d),e+=this.getOffset(.01*-e,.01*e);for(var f=this.start,g=this.stop;f<0;)f+=2*Math.PI,g+=2*Math.PI;g-f>2*Math.PI&&(f=0,g=2*Math.PI);var h=2*Math.PI/this.numSteps,i=Math.min(h/2,(g-f)/2),j=[];j.push([b+d*Math.cos(f),c+e*Math.sin(f)]);for(var k=f;k<=g;k+=i)j.push([b+d*Math.cos(k),c+e*Math.sin(k)]);if(j.push([b+d*Math.cos(g),c+e*Math.sin(g)]),j.push([b+d*Math.cos(g),c+e*Math.sin(g)]),this.fill&&this.closed&&this._doFill(a,j,[b,c]),a.save(),a.strokeStyle=this.stroke,a.lineWidth=this.strokeWidth,this.drawCurve(a,j),this.closed){var l=j.length-1;this.drawLine(a,j[0][0],j[0][1],b,c),this.drawLine(a,j[l][0],j[l][1],b,c)}a.restore()}},{key:"_doFill",value:function(a,b,c){var d=this.fillStyle||"hachure";switch(d){case"solid":a.save(),a.fillStyle=this.fill,a.beginPath(),this.drawCurve(a,b,!0,!0,c),a.fill(),a.restore();break;default:for(var e=this.x,f=this.y,g=this.start,h=this.stop,i=Math.abs(this.width/2),j=Math.abs(this.height/2);g<0;)g+=2*Math.PI,h+=2*Math.PI;h-g>2*Math.PI&&(g=0,h=2*Math.PI);var k=(h-g)/this.numSteps,l=[];l.push([e,f]),l.push([e+i*Math.cos(g),f+j*Math.sin(g)]);for(var m=g;m<=h;m+=k)l.push([e+i*Math.cos(m),f+j*Math.sin(m)]);l.push([e+i*Math.cos(h),f+j*Math.sin(h)]);var n=[],o=[];l.forEach(function(a){n.push(a[0]),o.push(a[1])}),this.hachureFillShape(a,n,o)}}}]),b}(RoughDrawable),RoughEllipse=function(a){function b(a,c,d,e){_classCallCheck(this,b);var f=_possibleConstructorReturn(this,(b.__proto__||Object.getPrototypeOf(b)).call(this,["x","y","width","height","numSteps"]));return f.x=a,f.y=c,f.width=d,f.height=e||d,f.numSteps=9,f}return _inherits(b,a),_createClass(b,[{key:"draw",value:function(a){this.ellipseInc=2*Math.PI/this.numSteps;var b=Math.abs(this.width/2),c=Math.abs(this.height/2);b+=this.getOffset(.05*-b,.05*b),c+=this.getOffset(.05*-c,.05*c),this.fill&&this._doFill(a,b,c),a.save(),a.strokeStyle=this.stroke,a.lineWidth=this.strokeWidth,this._ellipse(a,this.x,this.y,b,c,1,this.ellipseInc*this.getOffset(.1,this.getOffset(.4,1))),this._ellipse(a,this.x,this.y,b,c,1.5,0),a.restore()}},{key:"_ellipse",value:function(a,b,c,d,e,f,g,h){var i=this.getOffset(-.5,.5)-Math.PI/2,j=[];j.push([this.getOffset(-f,f)+b+.9*d*Math.cos(i-this.ellipseInc),this.getOffset(-f,f)+c+.9*e*Math.sin(i-this.ellipseInc)]);for(var k=i;k<2*Math.PI+i-.01;k+=this.ellipseInc)j.push([this.getOffset(-f,f)+b+d*Math.cos(k),this.getOffset(-f,f)+c+e*Math.sin(k)]);j.push([this.getOffset(-f,f)+b+d*Math.cos(i+2*Math.PI+.5*g),this.getOffset(-f,f)+c+e*Math.sin(i+2*Math.PI+.5*g)]),j.push([this.getOffset(-f,f)+b+.98*d*Math.cos(i+g),this.getOffset(-f,f)+c+.98*e*Math.sin(i+g)]),j.push([this.getOffset(-f,f)+b+.9*d*Math.cos(i+.5*g),this.getOffset(-f,f)+c+.9*e*Math.sin(i+.5*g)]),this.drawCurve(a,j,h)}},{key:"_doFill",value:function(a,b,c){var d=this.fillStyle||"hachure";switch(d){case"solid":a.save(),a.fillStyle=this.fill,a.strokeStyle=null,a.beginPath(),this._ellipse(a,this.x,this.y,b,c,1,this.ellipseInc*this.getOffset(.1,this.getOffset(.4,1)),!0),a.fill(),a.restore();break;default:var e=this.hachureAngle,f=this.hachureGap;f<=0&&(f=4*this.strokeWidth);var g=this.fillWeight;g<0&&(g=this.strokeWidth/2);var h=Math.PI/180,i=e%180*h,j=Math.tan(i),k=this.x,l=this.y,m=c/b,n=Math.sqrt(m*j*m*j+1),o=m*j/n,p=1/n,q=f/(b*c/Math.sqrt(c*p*(c*p)+b*o*(b*o))/b),r=Math.sqrt(b*b-(k-b+q)*(k-b+q));a.save(),a.strokeStyle=this.fill,a.lineWidth=g;for(var s=k-b+q;s0&&a0&&a0?p-=2*Math.PI:g&&p<0&&(p+=2*Math.PI),this._numSegs=Math.ceil(Math.abs(p/(Math.PI/2))),this._delta=p/this._numSegs,this._T=8/3*Math.sin(this._delta/4)*Math.sin(this._delta/4)/Math.sin(this._delta/2),this._from=b}}return _createClass(a,[{key:"getNextSegment",value:function(){var a,b,c;if(this._segIndex==this._numSegs)return null;var d=Math.cos(this._theta),e=Math.sin(this._theta),f=this._theta+this._delta,g=Math.cos(f),h=Math.sin(f);return c=[this._cosPhi*this._rx*g-this._sinPhi*this._ry*h+this._C[0],this._sinPhi*this._rx*g+this._cosPhi*this._ry*h+this._C[1]],a=[this._from[0]+this._T*(-this._cosPhi*this._rx*e-this._sinPhi*this._ry*d),this._from[1]+this._T*(-this._sinPhi*this._rx*e+this._cosPhi*this._ry*d)],b=[c[0]+this._T*(this._cosPhi*this._rx*h+this._sinPhi*this._ry*g),c[1]+this._T*(this._sinPhi*this._rx*h-this._cosPhi*this._ry*g)],this._theta=f,this._from=[c[0],c[1]],this._segIndex++,{cp1:a,cp2:b,to:c}}},{key:"calculateVectorAngle",value:function(a,b,c,d){var e=Math.atan2(b,a),f=Math.atan2(d,c);return f>=e?f-e:2*Math.PI-(e-f)}}]),a}(),RoughPath=function(a){function b(a){_classCallCheck(this,b);var c=_possibleConstructorReturn(this,(b.__proto__||Object.getPrototypeOf(b)).call(this,["path","numSteps"]));return c.numSteps=9,c.path=a,c._keys=["C","c","Q","q","M","m","L","l","A","a","H","h","V","v","S","s","T","t","Z","z"],c}return _inherits(b,a),_createClass(b,[{key:"draw",value:function(a){if(this.path){var b=(this.path||"").replace(/\n/g," ").replace(/(-)/g," -").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");this.gp=new RoughGeomPath(b);var c=this.gp.segments||[];this._position=[0,0],this._bezierReflectionPoint=null,this._quadReflectionPoint=null,this._first=null,this.fill&&this._doFill(a,b),a.save(),a.strokeStyle=this.stroke,a.lineWidth=this.strokeWidth,a.beginPath();for(var d=0;d0?c[d-1]:null)}a.stroke(),a.restore()}}},{key:"_doFill",value:function(a,b){var c=this.fillStyle||"hachure";switch(c){case"solid":a.save(),a.fillStyle=this.fill;var d=new Path2D(b);a.fill(d),a.restore();break;default:var e=this._canvas.getHiddenCanvas();if(e){var f=e.getContext("2d"),g=[0,e.width,e.width,0],h=[0,0,e.height,e.height];this.hachureFillShape(f,g,h)}a.save(),a.fillStyle=a.createPattern(e,"repeat");var i=new Path2D(b);a.fill(i),a.restore()}}},{key:"_processSegment",value:function(a,b,c){switch(b.key){case"M":case"m":this._moveTo(b);break;case"L":case"l":this._lineTo(a,b);break;case"H":case"h":this._hLineTo(a,b);break;case"V":case"v":this._vLineTo(a,b);break;case"Z":case"z":this._closeShape(a);break;case"C":case"c":this._curveTo(a,b);break;case"S":case"s":this._shortCurveTo(a,b,c);break;case"Q":case"q":this._quadCurveTo(a,b);break;case"T":case"t":this._shortQuadTo(a,b,c);break;case"A":case"a":this._arcTo(a,b)}}},{key:"_setPosition",value:function(a,b){this._position=[a,b],this._first||(this._first=[a,b])}},{key:"_moveTo",value:function(a){var b="m"===a.key;if(a.data.length>=2){var c=+a.data[0],d=+a.data[1];b?this._setPosition(this._position[0]+c,this._position[1]+d):this._setPosition(c,d)}}},{key:"_closeShape",value:function(a){this._first&&this.drawLine(a,this._position[0],this._position[1],this._first[0],this._first[1],!0)}},{key:"_lineTo",value:function(a,b){var c="l"===b.key;if(b.data.length>=2){var d=+b.data[0],e=+b.data[1];c&&(d+=this._position[0],e+=this._position[1]),this.drawLine(a,this._position[0],this._position[1],d,e,!0),this._setPosition(d,e)}}},{key:"_hLineTo",value:function(a,b){var c="h"===b.key;if(b.data.length){var d=+b.data[0];c&&(d+=this._position[0]),this.drawLine(a,this._position[0],this._position[1],d,this._position[1],!0),this._setPosition(d,this._position[1])}}},{key:"_vLineTo",value:function(a,b){var c="v"===b.key;if(b.data.length){var d=+b.data[0];c&&(d+=this._position[1]),this.drawLine(a,this._position[0],this._position[1],this._position[0],d,!0),this._setPosition(this._position[0],d)}}},{key:"_quadCurveTo",value:function(a,b){var c="q"===b.key;if(b.data.length>=4){var d=+b.data[0],e=+b.data[1],f=+b.data[2],g=+b.data[3];c&&(d+=this._position[0],f+=this._position[0],e+=this._position[1],g+=this._position[1]);var h=this.maxRandomnessOffset||0;a.moveTo(this._position[0],this._position[1]),this._drawQuadTo(a,d,e,f,g),a.moveTo(this._position[0]+this.getOffset(-h,h),this._position[1]+this.getOffset(-h,h));var i=this._drawQuadTo(a,d,e,f,g);f=i[0],g=i[1],this._setPosition(f,g),this._quadReflectionPoint=[f+(f-d),g+(g-e)]}}},{key:"_curveTo",value:function(a,b){var c="c"===b.key;if(b.data.length>=6){var d=+b.data[0],e=+b.data[1],f=+b.data[2],g=+b.data[3],h=+b.data[4],i=+b.data[5];c&&(d+=this._position[0],f+=this._position[0],h+=this._position[0],e+=this._position[1],g+=this._position[1],i+=this._position[1]);var j=this.maxRandomnessOffset||0;a.moveTo(this._position[0],this._position[1]),this._drawBezierTo(a,d,e,f,g,h,i),a.moveTo(this._position[0]+this.getOffset(-j,j),this._position[1]+this.getOffset(-j,j));var k=this._drawBezierTo(a,d,e,f,g,h,i);h=k[0],i=k[1],this._setPosition(h,i),this._bezierReflectionPoint=[h+(h-f),i+(i-g)]}}},{key:"_shortCurveTo",value:function(a,b,c){var d="s"===b.key;if(b.data.length>=4){var e=+b.data[0],f=+b.data[1],g=+b.data[2],h=+b.data[3];d&&(e+=this._position[0],g+=this._position[0],f+=this._position[1],h+=this._position[1]);var i=e,j=f,k=c?c.key:"",l=null;"c"!=k&&"C"!=k&&"s"!=k&&"S"!=k||(l=this._bezierReflectionPoint),l&&(i=l[0],j=l[1]),a.moveTo(this._position[0],this._position[1]),this._drawBezierTo(a,i,j,e,f,g,h),a.moveTo(this._position[0],this._position[1]);var m=this._drawBezierTo(a,i,j,e,f,g,h);g=m[0],h=m[1],this._setPosition(g,h),this._bezierReflectionPoint=[g+(g-e),h+(h-f)]}}},{key:"_shortQuadTo",value:function(a,b,c){var d="t"===b.key;if(b.data.length>=2){var e=+b.data[0],f=+b.data[1];d&&(e+=this._position[0],f+=this._position[1]);var g=e,h=f,i=c?c.key:"",j=null;"q"!=i&&"Q"!=i&&"t"!=i&&"T"!=i||(j=this._quadReflectionPoint),j&&(g=j[0],h=j[1]),a.moveTo(this._position[0],this._position[1]),this._drawQuadTo(a,g,h,e,f),a.moveTo(this._position[0],this._position[1]);var k=this._drawQuadTo(a,g,h,e,f);e=k[0],f=k[1],this._setPosition(e,f),this._quadReflectionPoint=[e+(e-g),f+(f-h)]}}},{key:"_arcTo",value:function(a,b){var c="a"===b.key;if(b.data.length>=7){var d=+b.data[0],e=+b.data[1],f=+b.data[2],g=+b.data[3],h=+b.data[4],i=+b.data[5],j=+b.data[6];if(c&&(i+=this._position[0],j+=this._position[1]),i==this._position[0]&&j==this._position[1])return;if(0==d||0==e)this.drawLine(a,this._position[0],this._position[1],i,j,!0),this._setPosition(i,j);else{for(var k,l=0;l<2;l++){a.moveTo(this._position[0],this._position[1]);for(var m=new RoughArcConverter([this._position[0],this._position[1]],[i,j],[d,e],f,!!g,!!h),n=m.getNextSegment();n;)k=this._drawBezierTo(a,n.cp1[0],n.cp1[1],n.cp2[0],n.cp2[1],n.to[0],n.to[1]),n=m.getNextSegment()}k&&(i=k[0],j=k[1]),this._setPosition(i,j)}}}}]),b}(RoughDrawable),RoughPolygon=function(a){function b(a){_classCallCheck(this,b);var c=_possibleConstructorReturn(this,(b.__proto__||Object.getPrototypeOf(b)).call(this));return c._points=a,c}return _inherits(b,a),_createClass(b,[{key:"setPoint",value:function(a,b,c){this._points[a]=[b,c],this._canvas&&this._canvas.requestDraw()}},{key:"getPoint",value:function(a){return a>0&&a2){a.beginPath(),a.moveTo(b[0][0]+this.getOffset(-d,d),b[0][1]+this.getOffset(-d,d));for(var f=1;fcRNm>)N$K9Z_=ht+P%0werSodc`Azv zN!wC({oh~A;5N9Cl<}9g1(7cGcfG}fN zHn!NGXFPK_O=l<7DN9*f13-Y8q~*BC<`pZm&7t!(;C&F!+Bno8RHm%+ryIGGMygxqj55w$_9M} zN${gOE%M7~mR?4C>2X@5vvImx6nW9@RHs=PohIe%ZWSG+>5R!LtFmO8mFXlJMCCc7 zoT(*+fEvn6@~Z zou*7p%5Hgngk7f3$-?ilsRFsqh`uta0P3vF**WKwX3l$tMDXPuz((m}UZjlQjEuAM zvWn8IVze+eVBv^$r9|mkKbqxL)QQ$2hZba&q+V+eQ+lE9+#YlZfd;u$;r6Vyx&soT*%??ln--S6ISMjL(hb??>pKd|p3`2On0 z_q%)Vc6Z*t+l*pJc=5yTi_>O5w%qz{m%+-Y-xRJpUyPWATEfR7hHo*4jvOX~8R#2@!Ri1czKc1f*rN!{gi@zQI`r`F3yCi?vke_gj%s`p-A8{%n z-JoI2sfz9aJm!w@JB2wspK)_N0cRv?VQv+=qC`%Aj`1fTxB^a5pWda6>__{Y=gebm zMt8IF7g^8UKBkKftVBp4x>8<|w6qqfoc=2yq94&}#`)PiDbhd{BDb4^Igvw{QtmAQekJ~blAjdGWE7OVhKU6=WXT>Y(v?^Ss@**{ z)f)&q0G8R|b`XOrK#j?i$94G;wq6NT=B*1`Z<4l9ZCH>tEZjCMYT9r!>#(Xm>9VVp zbc}1G&D1()GcBZhBU|@ImhRn(2B9uqON&2&?lq{J8rp``Od6p-oqD0~Mm@6~HV#Xe z4+h(GdlFHc4*Qmc;~y5(w=8bxVe9>Cy?4F7m`K~}{AyF%>-?&>Y(v}Q+P25H)Am*L zMJcEzwTt7^0UD|v8v+Ww9SF7Ex?@uxvT;Q9uh-)}?)4U2(`xKlT^OD@;YnJ(#&zMq ztWf2LrkxrjUq}v+#?s*rNkvjwGX5p$jCSai3B@g&0?U8mE6J6O0+JG$dq;L&<<(_L z<=jcX;+mJ2f=nh_MZi^*PRlfe3MSQ0**`BTV3Ui<0Gy=LD)}4OEy2G5lmgqJDpNAs z3J^OWuo|Zce)>JKRRIE**Og+Ju;ptmFkJVi>w;XzOpOC-&C+{9uugHIoU*+5sS#X- z*TgJkwARL0pZ_skRIjsHXyJ-Lbj<}TlXZ1ELftZB{xhP+rr(4PK4mpA9_&l-zUnyr z$V%hV2)9SE4o{oMa3$(1M{JBx9V+E)wi+s>zt~QSYp9zyj)=rKJb<@F>5`W+$GEvMTc5 z(_qG5vq^QTa*b9%M1fNZlHXO!sShLM{WX;X94qsbOG}PL1KE5a<`BbX=zGa*lAl5A ze>y%cQ(qP1^Wq|X5A_Qs3GRt76j!uSFxW?dT0uWbYlTd4r*1EuP0~We)fnaXvjf%D zu9^mNQlG35oVS|L6wgc2jFFf)yMU#pvb-wNyY+ToX`o`i zx=6fdS>>=4i2A&JJ&&~rPlJ=HV#*ZY56|rKKG%;vT2m9A&3CIIbc*Kbj>^9nnb283 z21%NvH6-!OZkQ5cFeu%`Qvec)N@ae)HsJC;AOh%3Xy*}7;fm7FET?=OX6Pl}Us7(+;#!Tfp*yj1D? z@d3t2>6nOb%*;)pbcWW^wy|1}h%Leek}8a|lm#d4BgS zoAsIS7XCFk?P%|bX<~uir;E#ytQZ?fF$_I6@Pt2|7Oi9EtDYQ4($S&Fjs)SslL{D|D*sk4PyWf#76?? zvDoBfJk870as3c=ivV(JN(hJS=TY3Er}(G7P<{}NoY}72k1+-;oC-F<-QPH%zeeO2 z6TryK=P3XKqf*bHlDEWadp!w)Y@;HTM#$MPAT}Dv@CsXRAD}3+B z?X(NcO^sq5{N)V$AL}*{REBMGn+-8 z4g}2_CX$HoZs5u*Y4VwFJ3?6lE=Rdf_63Qhy2G^A45KjBo8l_NS73^^b9 zDh*;A1+k4dHjCUC$@LNC))1hT34ze+qsWKKODLl96M8>HsJBX^uscLJl8Sb;FN_p$ zLZrkp<-Sb0Zz-Y2TFOogYYt=Un_QBx4HnnSB5yktlx=}Y5^DrU&P8QA+9K~W#64+J zxDWzB!G<;TZ`(Y3_jw)jwQU+9WwgIV0a^A^T5cm@WE%*N#h?kX4H376Fxv0&LY~Go zd8FHDnxCvXU&WbQ}E##La|6&RtQ)Tm6X^e<*JUsG7 zoGI+sVDfWh{*29^_cc#^lR!aeXy+5@iM`Pw0)KX(8j0U!dKbq=z39KKDhPNGgt&N& z<`}7Pjxt_7io@XcaDHB%cJ~>|Mb>Am9xgNANXyz!GEf9Nso2*34tC8?lX+;eW`l|D z8q^qIfyjk1-co-x*+w!&iY-YIe!5V4WKP6n9BL?^$GR>9xhm?_2Vkh)sFmtPl3W$? z&!g+K;u&Erl6V#5FT(Bu;JhsgHAW*Y{h+F03bl;e^cGN&_~L}DjK{?&84?#^a*xOQ zQXnIs29KREkY{%E5GhAvJnlsge533W9r_CGz~JbO;izZQa(pS{IuNgp^f2j>U=B@I zc}kZN=Vo!LNG5O7;$?awNqqYXHjtidnABOZC7i$i4REa03Wr%nM)yk0?01*qu^2#t ztog1M(~uf)5_OH>?6(bW4#<)VV;Z9eX)@SG@!bRhvo2$J1e3Q+9%e?ku_sI(=H@c+ z7_4t!22PJe7&1?64x6`32eXa5Gw5^?wAs~pjJB*A8WG4nI4ULX5wRw!xHm`ktz3_* zF?;MM?ZV3Z917QWhzp>&`6tcKp<{oznmeGtEH~~Fu+PDBBk2C2xx}L&VgiAS2R4*% zRdK|Z3`cw&G3LKwbBzH0`9nOfOzkVulIcRLHSJ7?9@T{g8POS7DCi>9X1hS!7$)Qf z!#Ob#EyGtl!40D2%`GJN<2VGd;mF+?o-@7c4I(G7&$n$;X|PTKhQ}jy?KN=8X4@#Q zd@{43JaXgv)~g9kMJav}5|h+4ic0`C$cjVVo}f&8UMW!!kBGPjSxrPLUi6C)k)#Gh z1lPSWh4YJu1J+1~1Kgf;OnhGHP>`T>(0N}+MAGYjL2?o#HTEY8-O#BB=xxi+Kw2X} z0_TyUXT4-KY5HTEzX+*%No$m@uT+DSJwwCef44T+^foGjRiHr!LfgDI6~9FVUCZ=}-$#c>@-P)!P2S=}#TU`DIW3J| z6~JmlW==(gMy=A;bm=H_E}AK)>7RUAw83(M)?`w4NlF! zx_eVW`mlOM=>mp@`F%3KmMHm=y)Q|SNKsoc0&qJa8msTOBtn9-PJjw5bQV^g9CQxB zz9`1V`PW19;3`t7FN2mv`q821fU9|GmVtF)Be@@4!UU-wou+(yrL2+y|G)+cMkY;K zoTX*xSyyj|dURcpg?m=c_JaNYH#Jo#c)zllp6~zL@{@umhesp&UAD4VO z&U%G#OyGi9d-#`p4u6?iy{poB3Ez49?jH0c@ksa(Z_wEy33zo5O}G@(_e(vyZ zvxzUPF%Arp1n11*ubF|HSf#pOfhS9fS=LjU&Z&nJjr_|u{MzbGdgM?Z+lB&=5;(hx zT4NkrZ9D{4k>gjmC9{xA`-?4_yp+jHnp`aCl`Vv)>(*hXV(9=1)>24@Zp}RqQ!MaE z(FSaV$gjG{(pzMyi!ALTxRq2DWFt%oP-c?NJAFxp*f_zW*5(?ft?B)-dvrey(E0PI z;R2`uNA#S+I@N5`NI*_%4QgmlI-O?oGJQ20o3M=chGtS8B*mD(!#tQ^VKVDeihDwe zq&yF#Hi9Tb#5~{WA4Av*ic{_UA*Md4+8URd+T_C=PryWVnpO#RH6}pu>lyr<%U^5T zq9v4#O@v@kKP5cN4h?V9wt1*&bAs;1Xlzf2b4+!yx8VoipV%A9A?U$8_rPk0ifBv4 z7k8^Puu*ER&e|KL1jJYbR2yw1aGn$8F21-85*w70bYUOSz%vzQ!`mMc;LPZ?DbH&+ zk3one4<;J=Xzc)c!_81q!B8`g9DQdA=zLpg2~S{-t|P`f9Z6$(nN{P{sOz2Sj*~Kt zI%Pi1CY?<(c%uV3|Mt2}_fq46d5;m)D@&r6nAiQCCh0BR zNqU@|PpdE=0v?uRx_(w?2AviK@wzSz(8^;I@K%1C|Euwj{9mn?lprBrY4aNXwe_2% z`fW3gUe?*VO2ao=F3{^tbukFw&c>drt!IDa{A zYnVtRiD%l%CJiuSb>^CC`nt;pel=6r*gJ<666Sl?u}#k^INcIK{e`^l?7 z(Ru-Y($3<-cc?eJCWtDd9sB@pmaH>qqheWFo$MHa|9o5{jlh zfL&AjAWgeEhY#s)Ys=BGKph$$8#Qwmt7}wOCoo$-g(%DL)h|UdQ6U1hUTh%Y!-qY2 z=Pd@y8aJpk&5Ui7)};>2$Ds$@7(Ru-TEh=&$_BQ~dX9X2h?g3%;YaHbd*IrHb;uYff#UX?#nrnf$^^+H=O_2`}8R6mTuFG*{LvehKYFgY)pZ zgttW>Se9t7pHFHOR8_W;Vm_(SOpWozgtwu4RTsIzgl2A zO83^?<`sp{;~br=4_1F1X*>96EL#+;3*jR z*Y+fgpNbX-VkGFQhhk*87Drd?B4k;qZ#6fnUsg)WIh*C|!D&74*-O@#!m~7Wx>U;~ zc%2+Ac284$FA8M9nL^Kkl{n1uw#d$qMgGF;P`#(o;sA^+JqiIbos%&9VSz3hcxN61K&&p2;ze_`SAGT4Z<4HcSC5niu%XS!Yq_ez1wj zG2Hdp1yEck8pwL|M8FVQ-;{Tss-?fGI8@czZC2&mcDT+dr0e;T;E5#O=Fn}wf+4uF z(~bpu<_P3P1kZ^soW3~#{@R@oMsaky^(`yBCzQp86$qTZJvKJEcR;x*2+e#MZJS7G z<}MJvXID!hz7y1W@rwnT{TGa+9R>uw=q3Bh`1dXQx+{{tgQNp8{PQgGi8Y-1g}$Av z7*Bocd~&hNx5~#0$wfY6CC*&pG86ym-Iwc#)=-L z7IzhTH49~u6~;OlFT3J#y-RZ}aWz{@ezB#Ei?weou%Lh?U#ZPL3^#i>WI>qYr7AIhibuxe{mOIAJpj- zXOp2)O!9bZW5D3b>@IFQ+c%By$&I`T5I3e_Eee3tdep7N4!UmQq@L~*gKjg#kZ~5qelJs$Pj$5Rb0Vh!EdJ z7^=8)2Zom!nSDP>#%6l=;aU`H1}e$jw~DvtR94F=dg+Dz5|yq!OuHWL)yZCQr$I+N za9menM_DvzdsdJ#D=AOx(H;`Q=3RBu^H*G>mHGLkEl>bX<(+UfFIYW*4? z#%t1Qe&KSBZa)m_HZN*x_`{Hfi>sYm4%}S>R~B#$kOuLW3|*iV`mSNG8d=N+;2Ak)K7URW;vS zU%$M(9R8kOU`*`=TtK&elICY=RV>$02E)_p?9Lt20({RP-m|vO@Td}Nje7S6RKW9Q zkQ%XJyR%tV(UQDtUEMKp59hKkV*$ge+0`OiNCa81KU+M3n1g>SN0Ff@v71RM?kR~OXC$-26Y=7{>nb4f(8jB&qEkX z0tgEQ5rgHw@QtK=0_Lgn?N2W|hJPT8fh+CsPHOFsL=^Z}h*wyuuHDg?m;Rv+Y#|v*`KQFs=^Y0j%#5>5ES@AQ`H9P}AYrQBFi$tu5 z50mE#Rj%UvXf)}AR@ga^#$nosMDVTL=YQm-y%_$&aaimKh{U6T3||UQ8Q^e&4Lsmo zz(k`@ykFXbZR?bETei;E;**GP^$*s1>sJ56QNgf0KVq}0?p}JbyO-aj#Fb|(I=ah!grEdosx8ObGBQERZ1(mvi?*$Z zdKwsMz>o8iz^m|m4?G5?jV4K{Mvt=aJWT575&^1RZ&m_+%7;i^>_80UUn(yxO6tRP=~8F)+IlZ=#Kv@U6Kj2K(_bes;~ zgGb~v@VdHxxtVzT><}tmX{9Y`8gNXjyk*x#W|#I?Yh)HTQVxK(~sSk~4 z(EyvHYwbAN>(L&@LwSW}A;G>n))hXj9^<9dN3$5IQWaa!js@{;`y2geuqP<|8hNMqI*76#LFjV9)iz&!F{mgku9*EpGu&!^BKgnGZD>G@X@%r_!+(CWeK{J*343$=JX72^f&uOO> zX@hNiC06(vqYvRxdk>mt9yDt{G+x)lO?jG4yUJGx9P8rIcYc0Oog(B2Cg~Kpu3!zk z6!JZTdcpwin}^OdlJ)38uQqQzlouN$;do{nooUVTANBOs5}lv$#jAJISW}yp=DJq6q zbmTQE?kx`;u}KG{cu9y&5(JzYh3h~RWp#+j)s;C`k62h;)fzFN{Xhv5uVeEX@RD~e z$2_u2>mZ4oVam_O7=v)jw1nzfri89SZ-^mw>hZNy*HhP0T@Ps;4-(3qRy8*&c87GH z%3^3#?lh*kEm|Au+7d%sjNyuQ7?5oaWrPjk?G{wj!;+~v2h^RI>BJ@)1CkPN zqGeDiRldpolUh9kt@EKl}Emq z6&|fZj-J;{AH7j3kK0G7tQ4PON2Wk5);!@iU4-tpcpSR>@bPfYxj0XZ+bSLp51Ibq z&fDD`yx|c(euj?^@bLyd&fw!Ud`#iv1$-p%@dMtv0Uy7@#|3=6!@DEl<2`)fbsYbI zkB@gn52L{|k851GXZLQU2oB|usdT021UobU-)HO%i*!Cs#%Xu`x7qqhKk7s@tvl%P z#DSUmTglUDa%a8!TZtJRj)t5a!&*<~_6n5NMRSLa>;sCDdTWr8y?ft6*8@bPPy#V2yTBbvv=MolP(9V#b5P%WI<4w~Yf|k)X=?Dk}|h6FVYK^s+B_aI+i!i_wrP;r-RYd*Q)*u`=F&ICwvL@ZxQ&>JqwUtUC_Yu@9?waJoIU z?;O0P2XA?r7uAl1Tx(rpEk8T8eDKr)gAlutX58-`+*POr^y%=`8t}rYB=J;|6yuhp zdpv^y5jGSUH_k_XAuB;Zy8f_oJ#us+%D*DRJU60Tj{eMYVQRVk2oXxGi!s8GOOnEP z@wX4o?ou)#3&J8)nDMrGODVcHhGIRjDelb!3BGYGWvIpZBdy7zm zY+ur>MALt_66re=DGRBkSb88R;;WkrhabeZE=y`q!LW>k>kSFX@yyLqI<1pZdjVZj z1h>OrU!Q2faHm)c0bJAzz!}0c3*cfE0W4P)z-Q2K4^$hC_Z4d)05Wh13BfzIX%@tX zCVTb3=?@|mGIXS<8d}irfTJ(C7GZeSkMsBQl*ZZMaY^V zP2I}lKE!=@@kT1xDubJ!x)6S|BpX^aL!tV<=**Iu`{B5$A3nO}ei+wx#5mX!-Cq2l zwiiFVon9P&rjG8b=Z|CyzQsj(r<>tb0bit5Sc%|IU>`!e7{o%vhJ}dRSO~hH5u8TX zFM2c^jdFG89oHL;__I3iTj|rc-C_AH6tUGdymG=y1VQ~jkcAXk^o{(6GTKy!4rPfV zJ$81zfH?{idIGQtG-bz0DV>yecTL{%nrbxM*L)y_6?BaAHlTBDDNpuu@{2NM^%ee~ zGfR9NR%?}l3z^MEsroamfM|o@vj?BU9DH!P`p-^E<)pl?F$bOj@gKk#+;EO_9TV{9 znXll!L8!x9n+nZ6JZb9TkL?~_)OYbB+{fv4=i#A;c}AdS;-Z71>n1QJwGV3z(xcB~ zkc>J=STG&1fBki|^yG{VY+GO+bG5oWBHsXmQY=09;oa_;`OmN;+4a;zoJbPa3WuytPuIi zQM36Gx$gnn+DD6wK}fsXm)qRC?9}4DDLI{aheeVq5%kdRrsFnu z96MB9d3fP_Lh0s@V6+U8UG0Hcp%H(^=VgUUs~=$OF^?tA-)bX_as6!!XJ?_xewtjBbI)d}md1Cgd^Th1a;1jb??I&j4QO(nuQ4NvN z_0P?4^LeZu?J^#DDd=-v3u!ej?K|_UT)jMIyzp|AR}~(;<5{x2Z0qVy9tiDos^A>o zyf3OC4*%ca@hNRclqRrOQ-C%@e79N?F2n(4rOm}C93l17jYfi!`ad~7(Qni4V_ys3 z!Owb9=(2rScfkJmiAsy!T7#gT_J;BYF2jR^uE3DX99ntGm;<7bQD)StOl*{iTa~$Q zl(`=$^O;|sYq2hDy)dwlO zc#qy?E9UQT=m@`T=`6$NgIN$$ed0WcGmPjX^8%6%320$yeh4O`gv_VqIkh_>B5Cf6XiOl$6jXV+@u|CZTuxCX?<& zYO%4>AycD_4Re#(IL(hEQ|awH6h-dVhD^hSN0jcoJ z&m#+W)Tg)u?B)^pHcrnY)@IL?V;3nCw?MUT6K~vCW1R(1;?VV?Y`6cj~H#AlHDKdR< z+I!|14+n$J!O)`14=-zP+NYjVmGSLY`c%?ctE-A-xZm$*2SYU-C+uOp5GOfw=^iOJ zZca@XzJ4BJsCA4yym4S2HaB{u(796rVFwRPvJ1wcNj^U38-(a7cc&@t>2+8xJ$uf6 z4w-X(QB_5DbY7+14x6~aD-&Q?DIHEB7!M4Yg({Ax`6Uhv5W3?7BL^Hi$q{29tH}!} z)<8Og(R|?r;ENpLd^tAjYy<$*=qw14&y#UhEu(EZhoo&`6O6Rjy%4v9bY}U?XpCh1 zQ9fA?lleTIO?FPRDI0HO7f$pF6=aRn#$Fjv$m~hL~h;Evxmmrno>7nBSeXZxafIt*T+5z zb`x5r;n%~b;pYiG6!{)Aya{22oYw~jMJ@IdJapFYL)?^=d}p_Yq2AZ<0_-$lZ$jFf z?*xUOxben+c!;tBMQ%hb3a?*UNZUHJ8KFn~!H@Wce( zp~c6(oC;6+&|FnA@!eTp|4UTn=fyaE!`vX7H~q5rdK*VA!~cc#gZZ8R4^T@72o_Bp zL_9430K)wM08mQ<1QY-W00;oKzD-I100000000000000C01yCjZ*^yAE^TRUE^2dC zSPTHdx1v~wx1w0}0Tcl3J!^N{HnQLMSIFACzN7@olG65WMKeCB<8E?JlD0|O-BVRJ zhY#=}OQIsuj-A;5{m$S;@F}@XcK4jSO=Xb-V1OA6fWcre>R)BFm*u;}&--?Gwej;L z-SpmV(=1E86+KTkka*?i>FzbnuXY>5C7$^y35_Gy%;R19p|_zQdar3ncXZ>^i`_2W z8T~v?vR>?FoBz&x9;KUJvPts9T_qU}dR8yH+R~k2mU8&+YDI&-Y42D)N8a6CKlPRr z+I8gQw_BQqJ@5FqFWaa=&)k`JU$i~h#B`VBnQCfNnd9Tl)oOL*IG#qvTSycXyul{+ z=*@OVffImseU;@sn&f~R8r;Luy>!=edlEV6ZPL8gAIcg`+Z}CpX`Uj$`GJu#@^{qD zsR7k{MI!m+7i^w=x^`DrbmkJexmwem3%xKqnvf4b5`P{O$Q~xql}H=k-dP#+Nxw{BR-{je7MK@6%KOP?+qezWVj98ZY zYj+3DWZXQ*3LJ^hFh42WE=LzaqcFekjBWqa6G&};I5a;YJaD|Zzp#T*!Er}_xw`}Y z2P2*94)j8wbyPpu^a5ahFp@n4X(ka|4``TdC@>zRDZhp01fxrOO9J!$p3Ax7iQy3+ z;GYE8KR$L1T}FJ91Plh5hFg2t?&8_=S5IeOkvA7VK6(A*?ZxbC^7E^w7vDdBb@6oe z&3y@V3u{?>2{k`er3HJ6xF%sew!N7+o_M^SIKG5Voj^jT4&{$GiSz1e?a|%n<&%HB z`{l`tpD%dAZCirtP)nfn9M2LceJ2?BmNyV+-(78ZHw4buad^4oWBKS6kG|{^U9h0f z=AWR?X8k1lSt9BaK1emrh@zDm@9zmO?5FFkyQ8&&E*n@}xC{J-d3WcQ0j8*+snbWQ z?`)K3ug)#M4gziv3ZGE0ghYZNBo^!tQ*rO5o5v&9%Z$i;JfYUtAnl%Gg(nfCw*vD}e+0wAad9({ZS*>!4dIrAG}fH^#p<=nGIx|R4!0ekGQrmPd-EWQ)` zJ2l1h0f1AH!M!PEI5VUKN~u+nCrdUCw^1>?OxcL(zD7(BZN#+Ni0S@Dbn~g5On)Gf zhLjkRW=o`+14BGnvL)uJh5dYY$4O|&>1x^bbe|?au6Zit$Hn$pqE!;_4a0kLAl|*) zY7#ufBe%pLPcbMU2hj|yIh>D&GALB+kv-VJAt^qeiAgYG{j=c6p$84Zo5~=(Vd8yL z$p6hhVG!O-_cfw22vvrE<{&hv6__W6XZdEcm>u57d>nr1@uHTqh~_Vt7PW6BR2hwO zpJHE@8H^I3@V{%X08~1zDdAE_9p7?c2@5Q*v|45Fcez0abQlgoz`8Jrt2Cx(t{-3R z=<^)3J5ad0)f*C$h{Pn>qvqu4R;oE(n&;_SYC0<#=2F$!B~hG9WhZjCPRJj#Wb|Nxc};mvntJ;U>MHyg?aQX{8uDMXDp_7B|}7YM;CdXv8Z z4X8oRKyNCyTk?^!s!*(e#?zt$xZt?XT&AfWBxMNi$c3%TGb9cj*?%BY_jCpO=k}KH zZfR%=N6y>giMF7uRNBB=tYBSj@pxN4@r{nmU}+tCG6j82l`JPvM{AW-34tYcGY|FB ze18QSD@DWcaZtS6-T9A;f{>)W*`|hG(1P+t9!`J+KW=HHU>t7SnT{OQg%U+FAfahT zBcZJug`}H~vuAQ-8gB#>E-*8~wVqV*u)%N;qJSd`1)|cdfSX}MFo@AiFHA&cBsg+$`tx^=YC*Y-IlqN34G^-`7TW8D#)Bq_u@TBV1w)& ziB;j9?{2Q$%)z=j07LV5jTeUvBPp9 zxW=}JuPN*kcgo6u){H$fYh%Ht&1th8gLftQ1QT@E$`1(cNv7uk$q;=(g(2s@SoGaI z2fj5e_@Wfg0Q>l(aal}UDI=aj7SKjyHB1vFUaIJhuG8zL6{l2GXp*7{<+l+>!T3~G zYMOXlVjCY9b9Zr8d7trdC~;*?xR6s^UXF~K5p8;We4QpiZ+zr9DsettpshiBwJY_4 zUgOK{h8(43_Sa~Ce?_w#=Lo|rs1M-1iF&ksrYkyHrIFFcLd=euthXzQO`^f553`1@ zdGevtOuf!aHBk)s^1Ne%&j8ifvs`oNmfO~-We8;x^+3+qi0eYz^n-!+rl~osyi4mz z!(hL=8{6?99!$pL#}TkJb_!iJGEXLBK0zl=3=7)Q8BK?y>7dkdaw*qoob3i}6%Alx z;hQJZ@tCX*Ea2fz1Pa)q2E}H>x+IsT#G`>%WMz^N?NlC(lFg6MPH3PzLcxEV8s4y4 zASR$Y`i)>L=h2S|-JP>ZFf}fR-VhcqP+6DFh*m>?$jEHVfEcEOy*Q?WPAow)n6{9? z_`%m1<6+!MV2{zj9Rxp&I}A}5cUXpQ?kF7X++kVj++pB4cQ_d(?$idKyF)HD4?$(9 zmrEe%7s2DH`KiQTTdtQB)=PRCSQDGdrBc>{_~vvmA20a#gnbVu5`s?vJA%RJi;1mN z6p)In?1>d03&>a&B^sG*hcI=Vpb1;Kq&Jti8RjyJSl_o#P@F@sTP^V@di;ndfY!Gl zi6iU-WmSW*&2N|0N~=IEo!H@UdK$rBafGsTygBHTG30aROU%85tP2vuUk(@=$pG?j zMqBKebJ9HdhGo_=OtcIW%z%idfJh+_nG0OQsl=sls5}!bk3#oIM^_YD)W%vY$d5Vs ztR?(?D&8N7_eZ?bP&AK^>G3giIu(7vxpdjNG`OP`hy~P0k-)}Tm?BwCDdxRj8e2^0 z9yv~Qrey9rM%8|)gYT($pEkbx<_su{9xTpKuq4pDL0wBOH@%Rh`DxiMoq*Opgt@IV zFXL=|=4EV^n-kSsz~GkbLS)%Esg;U!(cL{B-38U2G7OS0@W1XI^hk2zpsVa}cbt;5}5ogKf6o&IN|3&IJaJkgkZ) z73q5DbI?wA8ElV0wZb8gwXI!pSqg9xrgh7Mixs#yL|hnS@aGYmWyf|{?D^DG+hDoC zS&sPl$D124k(qyy#SmP9m^M{*iRch(L@?T3Ww9}*%(gMQO^VHBalR>byx-&AId-=# z3l*~qc*n;+`akgYz>AtA3qIi#0-R!Bq2sd-;9oH;K5@a87}ydNrv3mp03bMSrjlI1*MMKQe`HE}RnsEW3_MFGVItFY)oWfL0u^W ze^GSt@z6$>upa(#y3n@{*jJ&8qnG&j+nN5-K~yONf2k0~hI2P%e8hjLZqw>0)5t(Y z2Wr5*1napph$6i~ZD?ablOgs?v7(_aiM%1HU`<0}2aDQsH>4C!Nu_OI8@DQUX|=Ky z=j&u*lCk-P7+9`e;VnT6ww2)>94lu81#{MfK(PuJ%QgnF1B5R%Qy_AQ4WG}7#}4YW zWPB`=5XeR>}CUZRw%SzV-xBb_fb_=_rZVmaij3fMz# zDN_NcYT!&=Z6mpKUiGDj)+>=%byzW2b!Z3m4cT;1l>?xh@1Y;h<-RcWP(_7yfYc}l z*nYZ;Oa-8F9{XhHJ36)MEY^d`Su>`zc(HhL-_zmu&oUZb;W2)9C(Z_=vS+zxnj>`m z<|XF+n?C7-cHRHLm6Coe1|>`n?v8(_&|%2VH#yzHGSv51X-0$o!j!iGddcVpdMp{; zIzIemsGINgLTf0bXvG2fm8Md`5^Xma#yMncClV3u*1_a?81hQI8gfWIc(vI7dx`T$LbCCq@jZb7X^`?0}61$FiYl=q}W^I z*_8q4OeA>e%op}j*bls6Fi`teW^JJZwQ~*4MM1@-6T;ruiR{avlbDU=FDvCQu{`V( z8#70h%n@WJhv!tgWig_;7|G!sq-gYjakeCL*uXB>Ub}VE%>kutcXjtq)J~R}s}Qqj z1Fx8i-O5?24RLMnyA+n#rL@En>0wyPv=W(CDpPrbtW0=}#O{+B#Uw`T-JP6``*!vr z$^F=XcKdEd`&qh5g8ocnQlWF`b_w0uTjPjFj>h=EFUvDTs_C`|qxjMeXy{(8VD47O zLSm?fa;Qf7c!`VgA|<*$hL^2lIKm;Ok17)DLoBwU(h!Sah{e?*cIg<9&#Vlu6%M17 zG{cb)WK6vclalm?!(~}|)u39#cv_!2vArHTmu6%6b*20o%QxnXD>-9R*v>X+;!Jsa zq2>z^0z;oMHyj&UJWZ0y7c|XCf5VC)5juNAQnc1A@ZO72@;?&G-^FT`Y%{uN3G80{ z!hi1Kr&c>{kqg-(7qUezREu0#TI51~MGHU6BF5NGISZd}{I*G6TrFuC7Jlon@EVq` zuLqV#@XN#bwlUpj>3)6oEhb!#5C6|F*}fCx8$v6*5$@RRd_s5#6&xB=+beQtkgs4% ztWJ+Qk&nJ6z!OuM4oz7sM&11B{H4ZuA5+O%Y6PRpxtH8-Ag487s#+kv(m3ODnD zbhAn+FXv-9ZP~1sE3NJctnNz6hKU7A3@-K6GJBd@)&^SIRaFrV$C(U^CXT)yM2A#S zE2HTdtqlKbiQ~ieiZE-bvcvF~(RY$k=|x3DT_XXp`xom6`e!(*@7 zp{X3Dv!t+gmK2^kW2SXC93}~OWktF;JBrxZQPg^N6qnA95{I(0qgd)Mcs`UUf3h3t z-*rpYj(_6G6DH=GwjL}8@EK0F*)K^j00hR|;my3C3O6gn&#ghGXw$DowC!^?q3lHm%T)&ppaI3>dJkyd5CLV(}9>QgxUq~B@PN@Q!)@I#8&=w ztDOGlS2+u1(jNixWRv3&r2im3Vx#~p**2f^nUy0)|6sQ3J=~h6IZ(7zqx#InyAJND zUZL3Yo>dxAc8+e-bpN2PXlv%47AF-Sw?F9SVf%bpF0~W)JS}jWFBbC(yvY;HQ`f7s zd<}kKm=B{Gu=+q=)l=14RAw!n?mH7$UqU+?4$Y?aM(8{7mq(5>J_~g1qewrj-BEkH z%~{Y~aU)~H7RH7Pb?2o5Kdgb_e#XX%v2lZ*Ain`xEJL3xT@3^U*;I0<`+)VLl zTG_--*e;fZc!169gzaWol!wo=U;S+6HMxK@4M^TK7T@aH@AN^v#eJAnoMl)OjMv5i zpV1*PdNc^5k?t0dR=T7?LK<tq@ueiDc0PJZa>o}1g3vvwP-jCUcvN_ZHTVQ78QjhZUto!l;9m>!E62Gv+9n4Z6I}Cy}?$3I)w<|E_z84i)>O>?d2M1=xW65H{TZPWe ztgbQ_#K#if>4soKZd|iF5oi4~$}_g37C|h5@u|^In^zTpScU5SI#R;;4ka)vC{XgaWEIH%EFJ6RNS3z(dY9n80Ayqm#LQmTz@b>NFROA0gBR&`y-^%n~XQQo8?D_ZOODIEe;P<|!3 zX(YHGzb&1pm7HEl7#!%nRqtu&_?`j)(H*S+-Juljq`Y?$8$=u+udj(H4dX#(fGC|0 zky&-85({>7H(ew3t&2g~GsX8dVx%I?Jib4SjpyQ>e+J*~7W!cuYa;;(;zvTvgw zqzN{rv2&juNv1&4Tv~u@5dU?Zb=!L7qd~86JRoUDWZou7^;LLX>WzqRYuRm{4t}HS zIRUc$YCt8W=!1QoL-(x!B%=p;gI;eS8`zk5OB?nRWDE11*#ef4sGC7qO)0A1I6XpJ#c8CuQ_S z6i_;$wR7CSB*Ncv29S@-MZ1S3#2O8%V&&KH5eT;?`a=DY3TLxNUI4OuYc)q! zz!BkGtj)=jxno;Okq_40p8|UMTIY6hCY!w`?B$xw?+xO=&F!O%XLVrEx6c@0O3dL& zre3=i^^$lO*DhN3$B;WU<>;(o5LWxnBiG1{N)3&@{kycEvp~h1# zX0U>VLdMK#)g*;fUw9ul#0CV#C_dKoA9 zfWnd963Vt@BR#HT7@uivnO&SCCMj-QXra{)u(j@;-!m@LU7?`q*7G+}7HXZHuI2g1 z6ORB zD}q2ZMR#mA^UPA#^Z6zE-$<}jNe956JKhp%!hBgGl2PYKj&$lu<)124xmX+-=e-G$ zKh`Pyj8o_IVm`a#NzT=v&*v3fvF}mLffWQ?`>phHvCvg!XOSJMa2c7XC(F3LniZeRL2;z&_7)T2#_N z4h@f*l!C7O=w?%X_A>^1zo&1D+jmhVQOiWDBmiyTGbzB)zAW`Xq0_EIS;{bcF<-NM zbw=&At3-|&;Z2r!BPFJYkxBiE{Eh=(nU58jiyO~e6j$Q+s-@)#*Ess^?=Tc@&cZ5u z`Amw!BJ<0T_tO_SoL%ILX{>w*eIiN73eLah-DWRE)cw|&M`7HvlpDU8(Rob#ouM^G zaQ)>%l!tj^@}&^h9XReMeqBP}m*@10Kj9o2+x$n1iuAbH=R$F45(u+rp|X@E%x_ck zF6*`y2Sv4*auKhZs?65@@)HF}aD1MVJbCES1D0z6Z?Qw{?;PXs-kRz2*|4FzT06gkxkqkNl?56;X6V}u)~jKTyR=0U0F;GHWD{riSSIOT$={J z5FxZ8gWPraPJk&0&5|ab!339GMsI2P+6Fh{RN`^JT*LF}KHH@B0CSIN0>UeL@Xu(| zmftQc7l<}KMUGJd&wtNRA3S`whSxq-#m{7Cp>HW<7pS}Ta>du%C5tuHYS`!g6_K^K zOSzCccq@|ANEOX#ESm8OGeVXGVAAeDd2?%k#io1-0?kEt;c*AGhp$wdFTDaj?upAj zeN!!?w&j!-)pK+prSb`UfBRoABidq!g#+d^%=RiM3nf)BHgAXJZdmNIwz zk1$MnW0qvDvc=G8HFV^_0^-6*2fdI$i2;w$Cb2=Wu?dRyGc|#8D=gxb#Lolq`cK4U zp4w*d)Xt*6{uphJphc{Lvcb+MScsM z;?*1=%Gchl3ImISN3t8l__CoFmnBCux15|@y6;_td*WPL0LCvOp~7=!)rJ>+-W555 zb|;HXfg=PApDfBUo3ulG>NgLk;v82gS*2(M!6Ui#alr~YF-NTtG^L&GuR7bcI@?i~ zJg^?aN7)Jf8IL9PzL)Dx^MTDNfs{2jxhhVQXCzcrUj2CT0U{|WYANW|-1G35)#6@V z#0zd41A;3`FPa#Vh}%8vT-cHfq@!#C1v}s#k66kDZxpgdyy@~ zcCz6q(eY(1RwV--F*svuJB#QYZ|?@fs#DSrCRDUpYey9lhdWzsuU5T@vH-an?|+Ea zSx;$fZ1YD`jdQTLD}mW787q-Z6Ioi%?jN<$)NZj>1QhV(^vUG z6ynOD^U%;j#)|Jbny7CXL?K+uUkID^1DhpEX>K5+uS8}37`p?n)vtszxn9)Z#c>p^ z8NdejZ^IPX&UAwn$86s^%n4{mGb?LF$Mv}x=q2K(n7X|*d+oF@lG`MZyxzQcF-)Ej$i*?DW3qRNL)zDJ}dNJ#{)?*WlGs#bSI_08~5FH zyLLU5-nv1F-)0H&9ase06v1|anCrFLoZ z_%Ir4JutsYOQpjc1l%P9;$T(Z8e=X^H79?+i*V5P1_)8f>A8? z{Kz?)z&PejkdFmK8lzH>kL$>;uuv%KhUwzdUllp@_|4D8J90jFIQzBrmgp}Gaaa$q z?B~G4^M(C|A@B)+cm5Md_urrdF&_E9@pP)?QGdt(#M2S~Up(D^EBpm2{#%{=|0zWO h0Wkho;a|Lh81G-a!uTP8@b3kJKNa_