diff --git a/.realWorldGcodeSneder.py.swp b/.realWorldGcodeSneder.py.swp deleted file mode 100644 index 77b43a1..0000000 Binary files a/.realWorldGcodeSneder.py.swp and /dev/null differ diff --git a/realWorldGcodeSender.py b/realWorldGcodeSender.py index a80aa90..736b960 100644 --- a/realWorldGcodeSender.py +++ b/realWorldGcodeSender.py @@ -115,18 +115,6 @@ idToLocDict = {0 :[2,21], 65:[2, 0]} - -global xOffset -xOffset = 0 -global yOffset -yOffset = 0 -global rotation -rotation = 0 -global cv2Overhead -global matPlotImage -global move -move = False - #################################################################################### # Should put these in a shared libary #################################################################################### @@ -176,145 +164,177 @@ def pathToPoints3D(path, pointsPerCurve): points3D.extend(curPoints3D[1:]) prevEnd = curPoints3D[-1] return points3D + #################################################################################### +# OverlayGcode class +#################################################################################### +class OverlayGcode: + def __init__(self, cv2Overhead): + self.xOffset = 0 + self.yOffset = 0 + self.rotation = 0 + self.cv2Overhead = cv2Overhead + self.move = False -def dist(p1, p2): - return ((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2) ** 0.5 -def scalePoints(points, scaleX, scaleY): - for point in points: - point.X = point.X * scaleX - point.Y = point.Y * scaleY -def offsetPoints(points, X, Y): - for point in points: - point.X = point.X + X - point.Y = point.Y + Y + self.matPlotImage = plt.imshow(cv2.cvtColor(overlay, cv2.COLOR_BGR2RGB)) -def rotatePoints(points, origin, angle): - for point in points: - point.X, point.Y = rotate(origin, [point.X, point.Y], angle) + #overlay = overlaySvg(cv2Overhead) -def rotate(origin, point, angle): - """ - Rotate a point counterclockwise by a given angle around a given origin. + fig, ax = plt.subplots() + fig.tight_layout() + plt.subplots_adjust(bottom=0.01, right = 0.99) + plt.axis([bedViewSizePixels,0, bedViewSizePixels, 0]) - The angle should be given in radians. - """ - ox, oy = origin - px, py = point + xAxes = plt.axes([0.01, 0.8, 0.2, 0.04]) + self.xBox = TextBox(xAxes, "xOffset (in)", initial="0") + label = self.xBox.ax.get_children()[1] # label is a child of the TextBox axis + label.set_position([0.5,1]) # [x,y] - change here to set the position + label.set_horizontalalignment('center') + label.set_verticalalignment('bottom') + self.xBox.on_submit(self.onUpdateXOffset) - qx = ox + math.cos(angle) * (px - ox) - math.sin(angle) * (py - oy) - qy = oy + math.sin(angle) * (px - ox) + math.cos(angle) * (py - oy) - return qx, qy + yAxes = plt.axes([0.01, 0.7, 0.2, 0.04]) + self.yBox = TextBox(yAxes, "yOffset (in)", initial="0") + label = self.yBox.ax.get_children()[1] # label is a child of the TextBox axis + label.set_position([0.5,1]) # [x,y] - change here to set the position + label.set_horizontalalignment('center') + label.set_verticalalignment('bottom') + self.yBox.on_submit(self.onUpdateYOffset) -def overlaySvg(image, xOff = 0, yOff = 0, rotation = 0): - """ - image is opencv image - xOff is in inches - yOff is in inches - rotation is in degrees - """ - #convert to radians - rotation = rotation * math.pi / 180 - overlay = image.copy() - cv2.line(overlay, (0,0), (400, 0), (0,0,255), 3) + rAxes = plt.axes([0.01, 0.6, 0.2, 0.04]) + self.rBox = TextBox(rAxes, "rotation (deg)", initial="0") + label = self.rBox.ax.get_children()[1] # label is a child of the TextBox axis + label.set_position([0.5,1]) # [x,y] - change here to set the position + label.set_horizontalalignment('center') + label.set_verticalalignment('bottom') + self.rBox.on_submit(self.onUpdateRotation) - cv2.line(overlay, (0,0), (0, 400), (0,0,255), 3) + cid = fig.canvas.mpl_connect('button_press_event', self.onclick) + cid = fig.canvas.mpl_connect('button_release_event', self.onrelease) + cid = fig.canvas.mpl_connect('motion_notify_event', self.onmove) - paths, attributes, svg_attributes = svg2paths2("C:\\Git\\svgToGCode\\project_StorageBox\\0p5in_BoxBacks_x4_35by32.svg") - for path in paths: - points = pathToPoints3D(path, 10) - #First scale mm to inches - scalePoints(points, 1 / 25.4, 1 / 25.4) - #Then apply an offset in inches - offsetPoints(points, xOff, yOff) - #Then rotate - rotatePoints(points, [xOff, yOff], rotation) - #Then convert to pixel location - scalePoints(points, bedViewSizePixels / bedSize.X, bedViewSizePixels / bedSize.Y) - prevPoint = None - for point in points: - newPoint = (int(point.X), int(point.Y)) - if prevPoint is not None: - cv2.line(overlay, prevPoint, newPoint, (255, 0, 0), 1) - prevPoint = newPoint + - return overlay + def scalePoints(points, scaleX, scaleY): + for point in points: + point.X = point.X * scaleX + point.Y = point.Y * scaleY -def updateXOffset(text): - global xOffset - global yOffset - global rotation - global cv2Overhead - if xOffset == float(text): - return - xOffset = float(text) - overlay = overlaySvg(cv2Overhead, xOffset, yOffset, rotation) - matPlotImage.set_data(cv2.cvtColor(overlay, cv2.COLOR_BGR2RGB)) - matPlotImage.figure.canvas.draw() - -def updateYOffset(text): - global xOffset - global yOffset - global rotation - global cv2Overhead - if yOffset == float(text): - return - yOffset = float(text) - overlay = overlaySvg(cv2Overhead, xOffset, yOffset, rotation) - matPlotImage.set_data(cv2.cvtColor(overlay, cv2.COLOR_BGR2RGB)) - matPlotImage.figure.canvas.draw() + def offsetPoints(points, X, Y): + for point in points: + point.X = point.X + X + point.Y = point.Y + Y -def updateRotation(text): - global rotation - if rotation == float(text): - return - rotation = float(text) - overlay = overlaySvg(cv2Overhead, xOffset, yOffset, rotation) - matPlotImage.set_data(cv2.cvtColor(overlay, cv2.COLOR_BGR2RGB)) - matPlotImage.figure.canvas.draw() + def rotatePoints(points, origin, angle): + for point in points: + point.X, point.Y = rotate(origin, [point.X, point.Y], angle) -def onmove(event): - global move - move = True + def rotate(origin, point, angle): + """ + Rotate a point counterclockwise by a given angle around a given origin. -def onclick(event): - global move - move = False + The angle should be given in radians. + """ + ox, oy = origin + px, py = point -def onrelease(event): - global cv2Overhead - global matPlotImage - global xBox - global yBox - global rBox - global xOffset - global yOffset - global rotation - global move - #If clicking outside region, or mouse moved since released then return - - if event.x < 260 or move == True: - return - pixelsToOrigin = np.array([event.xdata, event.ydata]) - if event.button == MouseButton.RIGHT: - xIn = pixelsToOrigin[0] / bedViewSizePixels * bedSize.X - yIn = pixelsToOrigin[1] / bedViewSizePixels * bedSize.Y - rotation = math.atan2(yIn - yOffset, xIn - xOffset) - rotation = rotation * 180 / math.pi + qx = ox + math.cos(angle) * (px - ox) - math.sin(angle) * (py - oy) + qy = oy + math.sin(angle) * (px - ox) + math.cos(angle) * (py - oy) + return qx, qy - else: - xOffset = pixelsToOrigin[0] / bedViewSizePixels * bedSize.X - yOffset = pixelsToOrigin[1] / bedViewSizePixels * bedSize.Y + def overlaySvg(image, xOff = 0, yOff = 0, rotation = 0): + """ + image is opencv image + xOff is in inches + yOff is in inches + rotation is in degrees + """ + #convert to radians + rotation = rotation * math.pi / 180 + overlay = image.copy() + cv2.line(overlay, (0,0), (400, 0), (0,0,255), 3) - overlay = overlaySvg(cv2Overhead, xOffset, yOffset, rotation) - matPlotImage.set_data(cv2.cvtColor(overlay, cv2.COLOR_BGR2RGB)) - matPlotImage.figure.canvas.draw() - xBox.set_val(str(xOffset)) - yBox.set_val(str(yOffset)) - rBox.set_val(str(rotation)) + cv2.line(overlay, (0,0), (0, 400), (0,0,255), 3) + + paths, attributes, svg_attributes = svg2paths2("C:\\Git\\svgToGCode\\project_StorageBox\\0p5in_BoxBacks_x4_35by32.svg") + + for path in paths: + points = pathToPoints3D(path, 10) + #First scale mm to inches + scalePoints(points, 1 / 25.4, 1 / 25.4) + #Then apply an offset in inches + offsetPoints(points, xOff, yOff) + #Then rotate + rotatePoints(points, [xOff, yOff], rotation) + #Then convert to pixel location + scalePoints(points, bedViewSizePixels / bedSize.X, bedViewSizePixels / bedSize.Y) + prevPoint = None + for point in points: + newPoint = (int(point.X), int(point.Y)) + if prevPoint is not None: + cv2.line(overlay, prevPoint, newPoint, (255, 0, 0), 1) + prevPoint = newPoint + + return overlay + + def onUpdateXOffset(text): + if self.xOffset == float(text): + return + self.xOffset = float(text) + overlay = overlaySvg(self.cv2Overhead, self.xOffset, self.yOffset, self.rotation) + matPlotImage.set_data(cv2.cvtColor(overlay, cv2.COLOR_BGR2RGB)) + matPlotImage.figure.canvas.draw() + + def onUpdateYOffset(text): + if self.yOffset == float(text): + return + self.yOffset = float(text) + overlay = overlaySvg(self.cv2Overhead, self.xOffset, self.yOffset, self.rotation) + matPlotImage.set_data(cv2.cvtColor(overlay, cv2.COLOR_BGR2RGB)) + matPlotImage.figure.canvas.draw() + + def onUpdateRotation(text): + if self.rotation == float(text): + return + self.rotation = float(text) + overlay = overlaySvg(self.cv2Overhead, self.xOffset, self.yOffset, self.rotation) + matPlotImage.set_data(cv2.cvtColor(overlay, cv2.COLOR_BGR2RGB)) + matPlotImage.figure.canvas.draw() + + def onmove(event): + global move + move = True + + def onclick(event): + global move + move = False + + def onrelease(event): + global matPlotImage + #If clicking outside region, or mouse moved since released then return + + if event.x < 260 or move == True: + return + pixelsToOrigin = np.array([event.xdata, event.ydata]) + if event.button == MouseButton.RIGHT: + xIn = pixelsToOrigin[0] / bedViewSizePixels * bedSize.X + yIn = pixelsToOrigin[1] / bedViewSizePixels * bedSize.Y + self.rotation = math.atan2(yIn - self.yOffset, xIn - self.xOffset) + self.rotation = self.rotation * 180 / math.pi + + else: + self.xOffset = pixelsToOrigin[0] / bedViewSizePixels * bedSize.X + self.yOffset = pixelsToOrigin[1] / bedViewSizePixels * bedSize.Y + + overlay = overlaySvg(self.cv2Overhead, self.xOffset, self.yOffset, self.rotation) + matPlotImage.set_data(cv2.cvtColor(overlay, cv2.COLOR_BGR2RGB)) + matPlotImage.figure.canvas.draw() + self.xBox.set_val(str(self.xOffset)) + self.yBox.set_val(str(self.yOffset)) + self.rBox.set_val(str(self.rotation)) def crop_half_vertically(img): #cropped_img = image[,int(image.shape[1]/2):int(image.shape[1])] @@ -487,12 +507,6 @@ cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 800) frame = cv2.imread('cnc3.jpeg') img = cv2.imread('cnc3.jpeg') - -# load the image, clone it for cv2Overhead, and then convert it to grayscale - -global cv2Overhead -cv2Overhead = frame.copy() - ####################################################################### # Get grayscale image above threshold ####################################################################### @@ -563,44 +577,9 @@ cv2.waitKey() ############################################################# cv2Overhead = cv2.warpPerspective(frame, bedPixelToPhysicalLoc, (frame.shape[1], frame.shape[0])) cv2Overhead = cv2.resize(cv2Overhead, (bedViewSizePixels, bedViewSizePixels)) -overlay = overlaySvg(cv2Overhead) +GCodeOverlay = OverlayGcode(cv2Overhead) -fig, ax = plt.subplots() -fig.tight_layout() -plt.subplots_adjust(bottom=0.01, right = 0.99) -plt.axis([bedViewSizePixels,0, bedViewSizePixels, 0]) -matPlotImage = plt.imshow(cv2.cvtColor(overlay, cv2.COLOR_BGR2RGB)) -xAxes = plt.axes([0.01, 0.8, 0.2, 0.04]) -global xBox -xBox = TextBox(xAxes, "xOffset (in)", initial="0") -label = xBox.ax.get_children()[1] # label is a child of the TextBox axis -label.set_position([0.5,1]) # [x,y] - change here to set the position -label.set_horizontalalignment('center') -label.set_verticalalignment('bottom') -xBox.on_submit(updateXOffset) - -yAxes = plt.axes([0.01, 0.7, 0.2, 0.04]) -global yBox -yBox = TextBox(yAxes, "yOffset (in)", initial="0") -label = yBox.ax.get_children()[1] # label is a child of the TextBox axis -label.set_position([0.5,1]) # [x,y] - change here to set the position -label.set_horizontalalignment('center') -label.set_verticalalignment('bottom') -yBox.on_submit(updateYOffset) - -rAxes = plt.axes([0.01, 0.6, 0.2, 0.04]) -global rBox -rBox = TextBox(rAxes, "rotation (deg)", initial="0") -label = rBox.ax.get_children()[1] # label is a child of the TextBox axis -label.set_position([0.5,1]) # [x,y] - change here to set the position -label.set_horizontalalignment('center') -label.set_verticalalignment('bottom') -rBox.on_submit(updateRotation) - -cid = fig.canvas.mpl_connect('button_press_event', onclick) -cid = fig.canvas.mpl_connect('button_release_event', onrelease) -cid = fig.canvas.mpl_connect('motion_notify_event', onmove) plt.show() diff --git a/test.nc b/test.nc new file mode 100644 index 0000000..70efc5f --- /dev/null +++ b/test.nc @@ -0,0 +1,2021 @@ +G90 (use absolute coordinates) +G0 X0 Y0 F1000 +M3 S0 +G1 X14.925 S60 +X15.012 S37 +G0 X15.012 Y0.087 S0 +G1 X14.925 S39 +X0 S60 +S0 +G0 X0 Y0.175 S0 +G1 X0.175 S60 +X0.262 S30 +X0.349 S17 +X0.698 S18 +X0.786 S16 +X0.873 S13 +X1.746 S14 +X1.833 S13 +X1.92 S16 +X14.925 S18 +X15.012 S11 +G0 X1.746 Y0.262 S0 +G1 X1.658 S13 +G0 X1.484 Y0.262 S0 +G1 X1.396 S13 +G0 X1.135 Y0.262 S0 +G1 X1.047 S13 +G0 X0.873 Y0.262 S0 +G1 X0.786 S14 +G0 X0.262 Y0.262 S0 +G1 X0.175 S14 +X0 S60 +S0 +G0 X0 Y0.349 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X1.833 Y0.349 S0 +G1 X1.92 S22 +G0 X1.746 Y0.436 S0 +G1 X1.658 S60 +G0 X1.571 Y0.436 S0 +G1 X1.484 S60 +G0 X1.396 Y0.436 S0 +G1 X1.309 S60 +G0 X1.222 Y0.436 S0 +G1 X1.135 S60 +G0 X1.047 Y0.436 S0 +G1 X0.96 S60 +G0 X0.873 Y0.436 S0 +G1 X0.786 S60 +G0 X0.262 Y0.436 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y0.524 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y0.611 S0 +G1 X0.873 S60 +G0 X0.262 Y0.611 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y0.698 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.873 Y0.786 S0 +G1 X0.786 S60 +G0 X0.262 Y0.786 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y0.873 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y0.873 S0 +G1 X1.047 S37 +G0 X0.873 Y0.96 S0 +G1 X0.786 S60 +G0 X0.262 Y0.96 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y1.047 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.873 Y1.135 S0 +G1 X0.786 S60 +G0 X0.262 Y1.135 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y1.222 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y1.222 S0 +G1 X1.047 S37 +G0 X0.873 Y1.309 S0 +G1 X0.786 S60 +G0 X0.262 Y1.309 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y1.396 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y1.484 S0 +G1 X0.873 S60 +G0 X0.262 Y1.484 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y1.571 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.873 Y1.658 S0 +G1 X0.786 S60 +G0 X0.262 Y1.658 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y1.746 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y1.746 S0 +G1 X1.047 S37 +G0 X0.873 Y1.833 S0 +G1 X0.786 S60 +G0 X0.262 Y1.833 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y1.92 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y2.007 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y2.095 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y2.182 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y2.269 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y2.357 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y2.444 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y2.531 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y2.618 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y2.706 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y2.793 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y2.88 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y2.967 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y3.055 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y3.142 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y3.229 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y3.317 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y3.404 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y3.491 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y3.578 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y3.666 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y3.753 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y3.84 S0 +G1 X0.175 S60 +X0.262 S18 +G0 X0.262 Y3.928 S0 +G1 X0.175 S13 +X0 S47 +S0 +G0 X64.935 Y54.374 S0 +G1 X54.985 S2 +G0 X54.898 Y54.462 S0 +G1 X54.985 S21 +X55.073 S53 +X55.16 S54 +X64.935 S55 +S0 +G0 X64.935 Y54.549 S0 +G1 X55.16 S55 +X55.073 S58 +X54.985 S60 +X54.898 S25 +G0 X54.898 Y54.636 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S28 +X64.935 S1 +S0 +G0 X55.16 Y54.724 S0 +G1 X55.073 S26 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y54.811 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y54.898 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y54.985 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y55.073 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y55.16 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y55.247 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y55.334 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y55.422 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y55.509 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y55.596 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y55.684 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y55.771 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y55.858 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y55.945 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y56.033 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y56.12 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y56.207 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y56.295 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y56.382 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y56.469 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y56.556 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y56.644 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y56.731 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y56.818 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y56.905 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y56.993 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y57.08 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y57.167 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y57.255 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y57.342 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y57.429 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y57.516 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y57.604 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y57.691 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y57.778 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y57.866 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y57.953 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y58.04 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y58.127 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y58.215 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y58.302 S0 +G1 X54.985 S25 +X55.073 S60 +X55.16 S28 +G0 X55.16 Y58.389 S0 +G1 X55.073 S23 +X54.985 S50 +X54.898 S20 +G0 X15.012 Y101.505 S0 +G1 X14.925 S16 +X14.837 S28 +X0 S27 +S0 +G0 X0 Y101.592 S0 +G1 X14.925 S60 +X15.012 S41 +G0 X15.012 Y101.679 S0 +G1 X14.925 S29 +X0.262 S48 +X0.175 S51 +X0 S60 +S0 +G0 X0 Y101.767 S0 +G1 X0.175 S60 +X0.262 S16 +G0 X1.658 Y101.854 S0 +G1 X1.571 S44 +G0 X1.396 Y101.854 S0 +G1 X1.309 S44 +G0 X1.135 Y101.854 S0 +G1 X1.047 S44 +G0 X0.873 Y101.854 S0 +G1 X0.786 S44 +G0 X0.262 Y101.854 S0 +G1 X0.175 S16 +X0 S60 +S0 +G0 X0 Y101.941 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X1.833 Y101.941 S0 +G1 X1.92 S22 +G0 X1.746 Y102.028 S0 +G1 X1.658 S60 +G0 X1.571 Y102.028 S0 +G1 X1.484 S60 +G0 X1.396 Y102.028 S0 +G1 X1.309 S60 +G0 X1.222 Y102.028 S0 +G1 X1.135 S60 +G0 X1.047 Y102.028 S0 +G1 X0.96 S60 +G0 X0.873 Y102.028 S0 +G1 X0.786 S60 +G0 X0.262 Y102.028 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y102.116 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y102.203 S0 +G1 X0.873 S60 +G0 X0.262 Y102.203 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y102.29 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.873 Y102.377 S0 +G1 X0.786 S60 +G0 X0.262 Y102.377 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y102.465 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y102.465 S0 +G1 X1.047 S37 +G0 X0.873 Y102.552 S0 +G1 X0.786 S60 +G0 X0.262 Y102.552 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y102.639 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.873 Y102.727 S0 +G1 X0.786 S60 +G0 X0.262 Y102.727 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y102.814 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y102.814 S0 +G1 X1.047 S37 +G0 X0.873 Y102.901 S0 +G1 X0.786 S60 +G0 X0.262 Y102.901 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y102.988 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y103.076 S0 +G1 X0.873 S60 +G0 X0.262 Y103.076 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y103.163 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.873 Y103.25 S0 +G1 X0.786 S60 +G0 X0.262 Y103.25 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y103.338 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y103.338 S0 +G1 X1.047 S38 +G0 X0.873 Y103.425 S0 +G1 X0.786 S58 +G0 X0.262 Y103.425 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y103.512 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y103.599 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y103.687 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y103.774 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y103.861 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y103.948 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y104.036 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y104.123 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y104.21 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y104.298 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y104.385 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y104.472 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y104.559 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y104.647 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y104.734 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y104.821 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y104.909 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y104.996 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y105.083 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y105.17 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y105.258 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y105.345 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y105.432 S0 +G1 X0.175 S60 +X0.262 S18 +G0 X0.262 Y105.519 S0 +G1 X0.175 S6 +X0 S21 +S0 +G0 X64.935 Y155.966 S0 +G1 X54.985 S24 +X54.898 S10 +G0 X54.898 Y156.054 S0 +G1 X54.985 S26 +X64.935 S60 +S0 +G0 X64.935 Y156.141 S0 +G1 X55.247 S28 +X55.16 S27 +X55.073 S42 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y156.228 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S24 +G0 X55.16 Y156.315 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y156.403 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y156.49 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y156.577 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y156.665 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y156.752 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y156.839 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y156.926 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y157.014 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y157.101 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y157.188 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y157.276 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y157.363 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y157.45 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y157.537 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y157.625 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y157.712 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y157.799 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y157.886 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y157.974 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y158.061 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y158.148 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y158.236 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y158.323 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y158.41 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y158.497 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y158.585 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y158.672 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y158.759 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y158.847 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y158.934 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y159.021 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y159.108 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y159.196 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y159.283 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y159.37 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y159.457 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y159.545 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y159.632 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y159.719 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y159.807 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y159.894 S0 +G1 X54.985 S26 +X55.073 S60 +X55.16 S29 +G0 X55.16 Y159.981 S0 +G1 X55.073 S11 +X54.985 S25 +X54.898 S10 +G0 X0 Y203.009 S0 +G1 X14.837 S1 +X14.925 S2 +X15.012 S1 +G0 X15.012 Y203.097 S0 +G1 X14.925 S32 +X14.837 S53 +X0 S52 +S0 +G0 X0 Y203.184 S0 +G1 X14.925 S60 +X15.012 S40 +G0 X15.012 Y203.271 S0 +G1 X14.925 S13 +X1.92 S21 +X1.833 S20 +X0.786 S18 +X0.698 S20 +X0.349 S21 +X0.262 S20 +X0.175 S32 +X0 S60 +S0 +G0 X0 Y203.358 S0 +G1 X0.175 S60 +X0.262 S14 +G0 X0.786 Y203.358 S0 +G1 X0.873 S10 +G0 X1.047 Y203.358 S0 +G1 X1.135 S9 +G0 X1.396 Y203.358 S0 +G1 X1.484 S9 +G0 X1.658 Y203.358 S0 +G1 X1.746 S9 +G0 X1.92 Y203.446 S0 +G1 X1.833 S22 +G0 X0.262 Y203.446 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y203.533 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.786 Y203.533 S0 +G1 X0.873 S60 +G0 X0.96 Y203.533 S0 +G1 X1.047 S60 +G0 X1.135 Y203.533 S0 +G1 X1.222 S60 +G0 X1.309 Y203.533 S0 +G1 X1.396 S60 +G0 X1.484 Y203.533 S0 +G1 X1.571 S60 +G0 X1.658 Y203.533 S0 +G1 X1.746 S60 +G0 X0.262 Y203.62 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y203.708 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.873 Y203.708 S0 +G1 X0.96 S60 +G0 X0.262 Y203.795 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y203.882 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.786 Y203.882 S0 +G1 X0.873 S60 +G0 X1.047 Y203.969 S0 +G1 X0.96 S37 +G0 X0.262 Y203.969 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y204.057 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.786 Y204.057 S0 +G1 X0.873 S60 +G0 X0.262 Y204.144 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y204.231 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.786 Y204.231 S0 +G1 X0.873 S60 +G0 X1.047 Y204.319 S0 +G1 X0.96 S37 +G0 X0.262 Y204.319 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y204.406 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.786 Y204.406 S0 +G1 X0.873 S60 +G0 X0.262 Y204.493 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y204.58 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.873 Y204.58 S0 +G1 X0.96 S60 +G0 X0.262 Y204.668 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y204.755 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.786 Y204.755 S0 +G1 X0.873 S60 +G0 X1.047 Y204.842 S0 +G1 X0.96 S37 +G0 X0.262 Y204.842 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y204.929 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.786 Y204.929 S0 +G1 X0.873 S60 +G0 X0.262 Y205.017 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y205.104 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y205.191 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y205.279 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y205.366 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y205.453 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y205.54 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y205.628 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y205.715 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y205.802 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y205.89 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y205.977 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y206.064 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y206.151 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y206.239 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y206.326 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y206.413 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y206.5 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y206.588 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y206.675 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y206.762 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y206.85 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y206.937 S0 +G1 X0.175 S18 +X0 S60 +S0 +G0 X0 Y207.024 S0 +G1 X0.087 S50 +X0.175 S51 +X0.262 S14 +G0 X64.935 Y257.558 S0 +G1 X55.16 S52 +X55.073 S51 +X54.985 S50 +X54.898 S20 +G0 X54.898 Y257.646 S0 +G1 X54.985 S25 +X55.16 S60 +X55.247 S57 +X64.935 S58 +S0 +G0 X64.935 Y257.733 S0 +G1 X55.247 S4 +X55.16 S3 +X55.073 S29 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y257.82 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S26 +G0 X55.16 Y257.907 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y257.995 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y258.082 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y258.169 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y258.257 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y258.344 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y258.431 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y258.518 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y258.606 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y258.693 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y258.78 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y258.867 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y258.955 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y259.042 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y259.129 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y259.217 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y259.304 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y259.391 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y259.478 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y259.566 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y259.653 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y259.74 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y259.828 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y259.915 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y260.002 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y260.089 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y260.177 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y260.264 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y260.351 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y260.438 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y260.526 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y260.613 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y260.7 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y260.788 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y260.875 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y260.962 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y261.049 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y261.137 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y261.224 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y261.311 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y261.399 S0 +G1 X55.073 S28 +X54.985 S60 +X54.898 S25 +G0 X54.898 Y261.486 S0 +G1 X54.985 S21 +X55.073 S54 +X55.16 S24 +G0 X55.073 Y261.573 S0 +G1 X54.985 S2 +G0 X0 Y304.601 S0 +G1 X14.925 S24 +X15.012 S14 +G0 X15.012 Y304.689 S0 +G1 X14.925 S41 +X0 S60 +S0 +G0 X0 Y304.776 S0 +G1 X0.175 S60 +X0.262 S53 +X0.349 S50 +X14.925 S51 +X15.012 S31 +G0 X0.262 Y304.863 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y304.95 S0 +G1 X0.175 S60 +X0.262 S16 +G0 X0.786 Y304.95 S0 +G1 X0.873 S40 +G0 X1.047 Y304.95 S0 +G1 X1.135 S40 +G0 X1.309 Y304.95 S0 +G1 X1.396 S40 +G0 X1.658 Y304.95 S0 +G1 X1.746 S40 +G0 X1.92 Y305.038 S0 +G1 X1.833 S22 +G0 X0.262 Y305.038 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y305.125 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.786 Y305.125 S0 +G1 X0.873 S60 +G0 X0.96 Y305.125 S0 +G1 X1.047 S60 +G0 X1.135 Y305.125 S0 +G1 X1.222 S60 +G0 X1.309 Y305.125 S0 +G1 X1.396 S60 +G0 X1.484 Y305.125 S0 +G1 X1.571 S60 +G0 X1.658 Y305.125 S0 +G1 X1.746 S60 +G0 X0.262 Y305.212 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y305.3 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.873 Y305.3 S0 +G1 X0.96 S60 +G0 X0.262 Y305.387 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y305.474 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.786 Y305.474 S0 +G1 X0.873 S60 +G0 X1.047 Y305.561 S0 +G1 X0.96 S37 +G0 X0.262 Y305.561 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y305.649 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.786 Y305.649 S0 +G1 X0.873 S60 +G0 X0.262 Y305.736 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y305.823 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.786 Y305.823 S0 +G1 X0.873 S60 +G0 X1.047 Y305.91 S0 +G1 X0.96 S37 +G0 X0.262 Y305.91 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y305.998 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.786 Y305.998 S0 +G1 X0.873 S60 +G0 X0.262 Y306.085 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y306.172 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.873 Y306.172 S0 +G1 X0.96 S60 +G0 X0.262 Y306.26 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y306.347 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.786 Y306.347 S0 +G1 X0.873 S60 +G0 X1.047 Y306.434 S0 +G1 X0.96 S38 +G0 X0.262 Y306.434 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y306.521 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.786 Y306.521 S0 +G1 X0.873 S60 +G0 X0.262 Y306.609 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y306.696 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y306.783 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y306.871 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y306.958 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y307.045 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y307.132 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y307.22 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y307.307 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y307.394 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y307.481 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y307.569 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y307.656 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y307.743 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y307.831 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y307.918 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y308.005 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y308.092 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y308.18 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y308.267 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y308.354 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y308.442 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y308.529 S0 +G1 X0.175 S18 +X0 S60 +S0 +G0 X0 Y308.616 S0 +G1 X0.087 S24 +X0.175 S25 +X0.262 S7 +G0 X54.898 Y359.063 S0 +G1 X54.985 S8 +X55.073 S21 +X64.935 S20 +S0 +G0 X64.935 Y359.15 S0 +G1 X54.985 S60 +X54.898 S26 +G0 X54.898 Y359.238 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S44 +X55.247 S31 +X64.935 S32 +S0 +G0 X55.16 Y359.325 S0 +G1 X55.073 S24 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y359.412 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y359.499 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y359.587 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y359.674 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y359.761 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y359.848 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y359.936 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y360.023 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y360.11 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y360.198 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y360.285 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y360.372 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y360.459 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y360.547 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y360.634 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y360.721 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y360.809 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y360.896 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y360.983 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y361.07 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y361.158 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y361.245 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y361.332 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y361.419 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y361.507 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y361.594 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y361.681 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y361.769 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y361.856 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y361.943 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y362.03 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y362.118 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y362.205 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y362.292 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y362.38 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y362.467 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y362.554 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y362.641 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y362.729 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y362.816 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y362.903 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y362.991 S0 +G1 X55.073 S29 +X54.985 S60 +X54.898 S26 +G0 X54.898 Y363.078 S0 +G1 X54.985 S11 +X55.073 S29 +X55.16 S12 +G0 X0 Y406.193 S0 +G1 X14.837 S49 +X14.925 S50 +X15.012 S30 +G0 X15.012 Y406.281 S0 +G1 X14.925 S41 +X0 S60 +S0 +G0 X0 Y406.368 S0 +G1 X0.175 S60 +X0.262 S35 +X0.349 S24 +X0.698 S25 +X0.786 S24 +X1.833 S22 +X1.92 S24 +X14.925 S25 +X15.012 S15 +G0 X1.571 Y406.455 S0 +G1 X1.484 S6 +G0 X1.222 Y406.455 S0 +G1 X1.135 S6 +G0 X0.96 Y406.455 S0 +G1 X0.873 S6 +G0 X0.262 Y406.455 S0 +G1 X0.175 S14 +X0 S60 +S0 +G0 X0 Y406.542 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X1.833 Y406.542 S0 +G1 X1.92 S21 +G0 X1.746 Y406.63 S0 +G1 X1.658 S60 +G0 X1.571 Y406.63 S0 +G1 X1.484 S60 +G0 X1.396 Y406.63 S0 +G1 X1.309 S60 +G0 X1.222 Y406.63 S0 +G1 X1.135 S60 +G0 X1.047 Y406.63 S0 +G1 X0.96 S60 +G0 X0.873 Y406.63 S0 +G1 X0.786 S60 +G0 X0.262 Y406.63 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y406.717 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y406.804 S0 +G1 X0.873 S60 +G0 X0.262 Y406.804 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y406.891 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.873 Y406.979 S0 +G1 X0.786 S60 +G0 X0.262 Y406.979 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y407.066 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y407.066 S0 +G1 X1.047 S37 +G0 X0.873 Y407.153 S0 +G1 X0.786 S60 +G0 X0.262 Y407.153 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y407.241 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.873 Y407.328 S0 +G1 X0.786 S60 +G0 X0.262 Y407.328 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y407.415 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y407.415 S0 +G1 X1.047 S37 +G0 X0.873 Y407.502 S0 +G1 X0.786 S60 +G0 X0.262 Y407.502 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y407.59 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y407.677 S0 +G1 X0.873 S60 +G0 X0.262 Y407.677 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y407.764 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.873 Y407.852 S0 +G1 X0.786 S60 +G0 X0.262 Y407.852 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y407.939 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.96 Y407.939 S0 +G1 X1.047 S37 +G0 X0.873 Y408.026 S0 +G1 X0.786 S60 +G0 X0.262 Y408.026 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y408.113 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y408.201 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y408.288 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y408.375 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y408.463 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y408.55 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y408.637 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y408.724 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y408.812 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y408.899 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y408.986 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y409.073 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y409.161 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y409.248 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y409.335 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y409.423 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y409.51 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y409.597 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y409.684 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y409.772 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y409.859 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y409.946 S0 +G1 X0.175 S17 +X0 S60 +S0 +G0 X0 Y410.034 S0 +G1 X0.175 S60 +X0.262 S17 +G0 X0.262 Y410.121 S0 +G1 X0.175 S15 +X0 S53 +S0 +G0 X0 Y410.208 S0 +G1 X0.175 S2 +G0 X54.898 Y460.655 S0 +G1 X54.985 S19 +X55.16 S47 +X64.935 S48 +S0 +G0 X64.935 Y460.742 S0 +G1 X54.985 S60 +X54.898 S26 +G0 X54.898 Y460.829 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S31 +X64.935 S6 +S0 +G0 X55.16 Y460.917 S0 +G1 X55.073 S26 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y461.004 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y461.091 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y461.179 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y461.266 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y461.353 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y461.44 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y461.528 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y461.615 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y461.702 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y461.79 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y461.877 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y461.964 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y462.051 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y462.139 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y462.226 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y462.313 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y462.401 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y462.488 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y462.575 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y462.662 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y462.75 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y462.837 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y462.924 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y463.011 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y463.099 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y463.186 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y463.273 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y463.361 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y463.448 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y463.535 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y463.622 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y463.71 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y463.797 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y463.884 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y463.972 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y464.059 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y464.146 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y464.233 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y464.321 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y464.408 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +G0 X54.898 Y464.495 S0 +G1 X54.985 S24 +X55.073 S60 +X55.16 S27 +G0 X55.16 Y464.582 S0 +G1 X55.073 S27 +X54.985 S60 +X54.898 S24 +M5 +G0 X0 Y0 Z0 (move back to origin)