From 9e8e7a97b9a6676da41037d4276cd63a4cea4b24 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 31 Mar 2013 17:54:32 -0300 Subject: [PATCH 1/2] 0001072 : Edge.Curve assert in Draft --- src/Mod/Arch/ArchVRM.py | 4 +- src/Mod/Arch/importOBJ.py | 2 +- src/Mod/Draft/Draft.py | 26 +++-- src/Mod/Draft/DraftGeomUtils.py | 194 ++++++++++++++++++-------------- src/Mod/Draft/DraftSnap.py | 12 +- src/Mod/Draft/DraftTools.py | 10 +- src/Mod/Draft/importDXF.py | 10 +- src/Mod/Draft/importOCA.py | 4 +- 8 files changed, 143 insertions(+), 119 deletions(-) diff --git a/src/Mod/Arch/ArchVRM.py b/src/Mod/Arch/ArchVRM.py index 0ecad3cc4..7039372b8 100644 --- a/src/Mod/Arch/ArchVRM.py +++ b/src/Mod/Arch/ArchVRM.py @@ -562,10 +562,10 @@ class Renderer: v = edges[0].Vertexes[0].Point svg = 'M '+ tostr(v.x) +' '+ tostr(v.y) + ' ' for e in edges: - if isinstance(e.Curve,Part.Line) or isinstance(e.Curve,Part.BSplineCurve): + if (DraftGeomUtils.geomType(e) == "Line") or (DraftGeomUtils.geomType(e) == "BSplineCurve"): v = e.Vertexes[-1].Point svg += 'L '+ tostr(v.x) +' '+ tostr(v.y) + ' ' - elif isinstance(e.Curve,Part.Circle): + elif DraftGeomUtils.geomType(e) == "Circle": r = e.Curve.Radius v = e.Vertexes[-1].Point svg += 'A '+ tostr(r) + ' '+ tostr(r) +' 0 0 1 '+ tostr(v.x) +' ' diff --git a/src/Mod/Arch/importOBJ.py b/src/Mod/Arch/importOBJ.py index 1042d1425..a0a636cfc 100644 --- a/src/Mod/Arch/importOBJ.py +++ b/src/Mod/Arch/importOBJ.py @@ -46,7 +46,7 @@ def getIndices(shape,offset): vlist.append(" "+str(round(v.X,p))+" "+str(round(v.Y,p))+" "+str(round(v.Z,p))) if not shape.Faces: for e in shape.Edges: - if isinstance(e,Part.Line): + if DraftGeomUtils.geomType(e) == "Line": ei = " " + str(findVert(e.Vertexes[0],shape.Vertexes) + offset) ei += " " + str(findVert(e.Vertexes[-1],shape.Vertexes) + offset) elist.append(ei) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index bdcc1ce0f..07cec75d2 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -250,7 +250,8 @@ def shapify(obj): elif len(shape.Wires) == 1: name = "Wire" elif len(shape.Edges) == 1: - if isinstance(shape.Edges[0].Curve,Part.Line): + import DraftGeomUtils + if DraftGeomUtils.geomType(shape.Edges[0]) == "Line": name = "Line" else: name = "Circle" @@ -426,13 +427,13 @@ def makeCircle(radius, placement=None, face=True, startangle=None, endangle=None wireframe, otherwise as a face. If startangle AND endangle are given (in degrees), they are used and the object appears as an arc. If an edge is passed, its Curve must be a Part.Circle''' - import Part + import Part, DraftGeomUtils if placement: typecheck([(placement,FreeCAD.Placement)], "makeCircle") obj = FreeCAD.ActiveDocument.addObject("Part::Part2DObjectPython","Circle") _Circle(obj) if isinstance(radius,Part.Edge): edge = radius - if isinstance(edge.Curve,Part.Circle): + if DraftGeomUtils.geomType(edge) == "Circle": obj.Radius = edge.Curve.Radius placement = FreeCAD.Placement(edge.Placement) delta = edge.Curve.Center.sub(placement.Base) @@ -1214,7 +1215,7 @@ def draftify(objectslist,makeblock=False,delete=True): if obj.isDerivedFrom('Part::Feature'): for w in obj.Shape.Wires: if DraftGeomUtils.hasCurves(w): - if (len(w.Edges) == 1) and isinstance(w.Edges[0].Curve,Part.Circle): + if (len(w.Edges) == 1) and (DraftGeomUtils.geomType(w.Edges[0]) == "Circle"): nobj = makeCircle(w.Edges[0]) else: nobj = FreeCAD.ActiveDocument.addObject("Part::Feature",obj.Name) @@ -1298,15 +1299,16 @@ def getSVG(obj,scale=1,linewidth=0.35,fontsize=12,fillstyle="shape color",direct return '' def getPath(edges): + import DraftGeomUtils svg =' 1: mp = DraftGeomUtils.findMidpoint(e) a = Part.Arc(e.Vertexes[0].Point,mp,e.Vertexes[-1].Point).toShape() newedges.append(a) else: newedges.append(e.Curve.toShape()) - elif isinstance(e.Curve,Part.Ellipse): + elif DraftGeomUtils.geomType(e) == "Ellipse": if len(e.Vertexes) > 1: a = Part.Arc(e.Curve,e.FirstParameter,e.LastParameter).toShape() newedges.append(a) else: newedges.append(e.Curve.toShape()) - elif isinstance(e.Curve,Part.BSplineCurve): + elif DraftGeomUtils.geomType(e) == "BSplineCurve": if DraftGeomUtils.isLine(e.Curve): l = Part.Line(e.Vertexes[0].Point,e.Vertexes[-1].Point).toShape() newedges.append(l) diff --git a/src/Mod/Draft/DraftGeomUtils.py b/src/Mod/Draft/DraftGeomUtils.py index c73681081..c5fb3e9a0 100755 --- a/src/Mod/Draft/DraftGeomUtils.py +++ b/src/Mod/Draft/DraftGeomUtils.py @@ -161,6 +161,22 @@ def hasOnlyWires(shape): if ne == len(shape.Edges): return True return False + +def geomType(edge): + "returns the type of geom this edge is based on" + try: + if isinstance(edge.Curve,Part.Line): + return "Line" + elif isinstance(edge.Curve,Part.Circle): + return "Circle" + elif isinstance(edge.Curve,Part.BSplineCurve): + return "BSplineCurve" + elif isinstance(edge.Curve,Part.Ellipse): + return "Ellipse" + else: + return "Unknown" + except: + return "Unknown" # edge functions ***************************************************************** @@ -190,7 +206,7 @@ def findIntersection(edge1,edge2,infinite1=False,infinite2=False,ex1=False,ex2=F infinite1 = ex1 infinite2 = ex2 - elif isinstance(edge1.Curve,Part.Line) and isinstance(edge2.Curve,Part.Line) : + elif (geomType(edge1) == "Line") and (geomType(edge2) == "Line") : # we have 2 straight lines pt1, pt2, pt3, pt4 = [edge1.Vertexes[0].Point, edge1.Vertexes[1].Point, @@ -235,14 +251,14 @@ def findIntersection(edge1,edge2,infinite1=False,infinite2=False,ex1=False,ex2=F else : return [] # Lines aren't on same plane - elif isinstance(edge1.Curve,Part.Circle) and isinstance(edge2.Curve,Part.Line) \ - or isinstance(edge1.Curve,Part.Line) and isinstance(edge2.Curve,Part.Circle) : + elif (geomType(edge1) == "Circle") and (geomType(edge2) == "Line") \ + or (geomType(edge1) == "Line") and (geomType(edge2) == "Circle") : # deals with an arc or circle and a line edges = [edge1,edge2] for edge in edges : - if isinstance(edge.Curve,Part.Line) : + if geomType(edge) == "Line": line = edge else : arc = edge @@ -303,7 +319,7 @@ def findIntersection(edge1,edge2,infinite1=False,infinite2=False,ex1=False,ex2=F del int[i] return int - elif isinstance(edge1.Curve,Part.Circle) and isinstance(edge2.Curve,Part.Circle) : + elif (geomType(edge1) == "Circle") and (geomType(edge2) == "Circle") : # deals with 2 arcs or circles @@ -366,9 +382,9 @@ def findIntersection(edge1,edge2,infinite1=False,infinite2=False,ex1=False,ex2=F def geom(edge,plac=FreeCAD.Placement()): "returns a Line, ArcOfCircle or Circle geom from the given edge, according to the given placement" - if isinstance(edge.Curve,Part.Line): + if geomType(edge) == "Line": return edge.Curve - elif isinstance(edge.Curve,Part.Circle): + elif geomType(edge) == "Circle": if len(edge.Vertexes) == 1: return Part.Circle(edge.Curve.Center,edge.Curve.Axis,edge.Curve.Radius) else: @@ -405,7 +421,7 @@ def mirror (point, edge): def isClockwise(edge): """Returns True if a circle-based edge has a clockwise direction""" - if not isinstance(edge.Curve,Part.Circle): + if not geomType(edge) == "Circle": return True v1 = edge.Curve.tangent(edge.ParameterRange[0])[0] if DraftVecUtils.isNull(v1): @@ -507,12 +523,12 @@ def sortEdges(lEdges, aVertex=None): if aVertex.Point == result[3].Vertexes[0].Point: return lEdges else: - if isinstance(result[3].Curve,Part.Line): + if geomType(result[3]) == "Line": return [Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape()] - elif isinstance(result[3].Curve,Part.Circle): + elif geomType(result[3]) == "Circle": mp = findMidpoint(result[3]) return [Part.Arc(aVertex.Point,mp,result[3].Vertexes[0].Point).toShape()] - elif isinstance(result[3].Curve,Part.BSplineCurve): + elif geomType(result[3]) == "BSplineCurve": if isLine(result[3].Curve): return [Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape()] else: @@ -543,14 +559,14 @@ def sortEdges(lEdges, aVertex=None): olEdges += [result[3]] + next else: #print "inverting", result[3].Curve - if isinstance(result[3].Curve,Part.Line): + if geomType(result[3]) == "Line": newedge = Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape() olEdges += [newedge] + next - elif isinstance(result[3].Curve,Part.Circle): + elif geomType(result[3]) == "Circle": mp = findMidpoint(result[3]) newedge = Part.Arc(aVertex.Point,mp,result[3].Vertexes[0].Point).toShape() olEdges += [newedge] + next - elif isinstance(result[3].Curve,Part.BSplineCurve): + elif geomType(result[3]) == "BSplineCurve": if isLine(result[3].Curve): newedge = Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape() olEdges += [newedge] + next @@ -662,10 +678,10 @@ def superWire(edgeslist,closed=False): p2 = median(curr.Vertexes[-1].Point,next.Vertexes[0].Point) else: p2 = curr.Vertexes[-1].Point - if isinstance(curr.Curve,Part.Line): + if geomType(curr) == "Line": print "line",p1,p2 newedges.append(Part.Line(p1,p2).toShape()) - elif isinstance(curr.Curve,Part.Circle): + elif geomType(curr) == "Circle": p3 = findMidpoint(curr) print "arc",p1,p3,p2 newedges.append(Part.Arc(p1,p3,p2).toShape()) @@ -679,7 +695,7 @@ def findMidpoint(edge): "calculates the midpoint of an edge" first = edge.Vertexes[0].Point last = edge.Vertexes[-1].Point - if isinstance(edge.Curve,Part.Circle): + if geomType(edge) == "Circle": center = edge.Curve.Center radius = edge.Curve.Radius if len(edge.Vertexes) == 1: @@ -698,41 +714,42 @@ def findMidpoint(edge): endpoint = DraftVecUtils.scaleTo(perp,sagitta) return Vector.add(startpoint,endpoint) - elif isinstance(edge.Curve,Part.Line): + elif geomType(edge) == "Line": halfedge = DraftVecUtils.scale(last.sub(first),.5) return Vector.add(first,halfedge) else: return None -def complexity(obj): - ''' - tests given object for shape complexity: - 1: line - 2: arc - 3: circle - 4: open wire with no arc - 5: closed wire - 6: wire with arcs - 7: faces - 8: faces with arcs - ''' - shape = obj.Shape - if shape.Faces: - for e in shape.Edges: - if (isinstance(e.Curve,Part.Circle)): return 8 - return 7 - if shape.Wires: - for e in shape.Edges: - if (isinstance(e.Curve,Part.Circle)): return 6 - for w in shape.Wires: - if w.isClosed(): return 5 - return 4 - if (isinstance(shape.Edges[0].Curve,Part.Circle)): - if len(shape.Vertexes) == 1: - return 3 - return 2 - return 1 +# OBSOLETED +#def complexity(obj): +# ''' +# tests given object for shape complexity: +# 1: line +# 2: arc +# 3: circle +# 4: open wire with no arc +# 5: closed wire +# 6: wire with arcs +# 7: faces +# 8: faces with arcs +# ''' +# shape = obj.Shape +# if shape.Faces: +# for e in shape.Edges: +# if (isinstance(e.Curve,Part.Circle)): return 8 +# return 7 +# if shape.Wires: +# for e in shape.Edges: +# if (isinstance(e.Curve,Part.Circle)): return 6 +# for w in shape.Wires: +# if w.isClosed(): return 5 +# return 4 +# if (isinstance(shape.Edges[0].Curve,Part.Circle)): +# if len(shape.Vertexes) == 1: +# return 3 +# return 2 +# return 1 def findPerpendicular(point,edgeslist,force=None): ''' @@ -774,7 +791,7 @@ def offset(edge,vector): ''' if (not isinstance(edge,Part.Shape)) or (not isinstance(vector,FreeCAD.Vector)): return None - if isinstance(edge.Curve,Part.Line): + if geomType(edge) == "Line": v1 = Vector.add(edge.Vertexes[0].Point, vector) v2 = Vector.add(edge.Vertexes[-1].Point, vector) return Part.Line(v1,v2).toShape() @@ -797,11 +814,11 @@ def getNormal(shape): if (shape.ShapeType == "Face") and hasattr(shape,"normalAt"): n = shape.copy().normalAt(0.5,0.5) elif shape.ShapeType == "Edge": - if isinstance(shape.Edges[0].Curve,Part.Circle): + if geomType(shape.Edges[0]) == "Circle": n = shape.Edges[0].Curve.Axis else: for e in shape.Edges: - if isinstance(e.Curve,Part.Circle): + if geomType(e) == "Circle": n = e.Curve.Axis break e1 = vec(shape.Edges[0]) @@ -921,10 +938,10 @@ def connect(edges,closed=False): v2 = curr.Vertexes[-1].Point else: v2 = curr.Vertexes[-1].Point - if isinstance(curr.Curve,Part.Line): + if geomType(curr) == "Line": if v1 != v2: nedges.append(Part.Line(v1,v2).toShape()) - elif isinstance(curr.Curve,Part.Circle): + elif geomType(curr) == "Circle": if v1 != v2: nedges.append(Part.Arc(v1,findMidPoint(curr),v2)) try: @@ -939,7 +956,7 @@ def findDistance(point,edge,strict=False): only if its endpoint lies on the edge. ''' if isinstance(point, FreeCAD.Vector): - if isinstance(edge.Curve, Part.Line): + if geomType(edge) == "Line": segment = vec(edge) chord = edge.Vertexes[0].Point.sub(point) norm = segment.cross(chord) @@ -957,7 +974,7 @@ def findDistance(point,edge,strict=False): else: return None else: return dist - elif isinstance(edge.Curve, Part.Circle): + elif geomType(edge) == "Circle": ve1 = edge.Vertexes[0].Point if (len(edge.Vertexes) > 1): ve2 = edge.Vertexes[-1].Point @@ -980,7 +997,7 @@ def findDistance(point,edge,strict=False): return None else: return dist - elif isinstance(edge.Curve,Part.BSplineCurve): + elif geomType(edge) == "BSplineCurve": try: pr = edge.Curve.parameter(point) np = edge.Curve.value(pr) @@ -1000,7 +1017,7 @@ def findDistance(point,edge,strict=False): def angleBisection(edge1, edge2): "angleBisection(edge,edge) - Returns an edge that bisects the angle between the 2 edges." - if isinstance(edge1.Curve, Part.Line) and isinstance(edge2.Curve, Part.Line): + if (geomType(edge1) == "Line") and (geomType(edge2) == "Line"): p1 = edge1.Vertexes[0].Point p2 = edge1.Vertexes[-1].Point p3 = edge2.Vertexes[0].Point @@ -1093,14 +1110,14 @@ def getTangent(edge,frompoint=None): returns the tangent to an edge. If from point is given, it is used to calculate the tangent (only useful for an arc of course). ''' - if isinstance(edge.Curve,Part.Line): + if geomType(edge) == "Line": return vec(edge) - elif isinstance(edge.Curve,Part.BSplineCurve): + elif geomType(edge) == "BSplineCurve": if not frompoint: return None cp = edge.Curve.parameter(frompoint) return edge.Curve.tangent(cp)[0] - elif isinstance(edge.Curve,Part.Circle): + elif geomType(edge) == "Circle": if not frompoint: v1 = edge.Vertexes[0].Point.sub(edge.Curve.Center) else: @@ -1236,7 +1253,7 @@ def isCubic(shape): if len(shape.Edges) != 12: return False for e in shape.Edges: - if not isinstance(e.Curve,Part.Line): + if geomType(e) != "Line": return False # if ok until now, let's do more advanced testing for f in shape.Faces: @@ -1320,7 +1337,7 @@ def arcFromSpline(edge): its first point, midpoint and endpoint. Works best with bspline segments such as those from imported svg files. Use this only if you are sure your edge is really an arc...""" - if isinstance(edge.Curve,Part.Line): + if geomType(edge) == "Line": print "This edge is straight, cannot build an arc on it" return None if len(edge.Vertexes) > 1: @@ -1682,45 +1699,45 @@ def getBoundaryAngles(angle,alist): def circleFrom2tan1pt(tan1, tan2, point): "circleFrom2tan1pt(edge, edge, Vector)" - if isinstance(tan1.Curve, Part.Line) and isinstance(tan2.Curve, Part.Line) and isinstance(point, FreeCAD.Vector): + if (geomType(tan1) == "Line") and (geomType(tan2) == "Line") and isinstance(point, FreeCAD.Vector): return circlefrom2Lines1Point(tan1, tan2, point) - elif isinstance(tan1.Curve, Part.Circle) and isinstance(tan2.Curve, Part.Line) and isinstance(point, FreeCAD.Vector): + elif (geomType(tan1) == "Circle") and (geomType(tan2) == "Line") and isinstance(point, FreeCAD.Vector): return circlefromCircleLinePoint(tan1, tan2, point) - elif isinstance(tan2.Curve, Part.Circle) and isinstance(tan1.Curve, Part.Line) and isinstance(point, FreeCAD.Vector): + elif (geomType(tan2) == "Circle") and (geomType(tan1) == "Line") and isinstance(point, FreeCAD.Vector): return circlefromCircleLinePoint(tan2, tan1, point) - elif isinstance(tan2.Curve, Part.Circle) and isinstance(tan1.Curve, Part.Circle) and isinstance(point, FreeCAD.Vector): + elif (geomType(tan2) == "Circle") and (geomType(tan1) == "Circle") and isinstance(point, FreeCAD.Vector): return circlefrom2Circles1Point(tan2, tan1, point) def circleFrom2tan1rad(tan1, tan2, rad): "circleFrom2tan1rad(edge, edge, float)" - if isinstance(tan1.Curve, Part.Line) and isinstance(tan2.Curve, Part.Line): + if (geomType(tan1) == "Line") and (geomType(tan2) == "Line"): return circleFrom2LinesRadius(tan1, tan2, rad) - elif isinstance(tan1.Curve, Part.Circle) and isinstance(tan2.Curve, Part.Line): + elif (geomType(tan1) == "Circle") and (geomType(tan2) == "Line"): return circleFromCircleLineRadius(tan1, tan2, rad) - elif isinstance(tan1.Curve, Part.Line) and isinstance(tan2.Curve, Part.Circle): + elif (geomType(tan1) == "Line") and (geomType(tan2) == "Circle"): return circleFromCircleLineRadius(tan2, tan1, rad) - elif isinstance(tan1.Curve, Part.Circle) and isinstance(tan2.Curve, Part.Circle): + elif (geomType(tan1) == "Circle") and (geomType(tan2) == "Circle"): return circleFrom2CirclesRadius(tan1, tan2, rad) def circleFrom1tan2pt(tan1, p1, p2): - if isinstance(tan1.Curve, Part.Line) and isinstance(p1, FreeCAD.Vector) and isinstance(p2, FreeCAD.Vector): + if (geomType(tan1) == "Line") and isinstance(p1, FreeCAD.Vector) and isinstance(p2, FreeCAD.Vector): return circlefrom1Line2Points(tan1, p1, p2) - if isinstance(tan1.Curve, Part.Line) and isinstance(p1, FreeCAD.Vector) and isinstance(p2, FreeCAD.Vector): + if (geomType(tan1) == "Line") and isinstance(p1, FreeCAD.Vector) and isinstance(p2, FreeCAD.Vector): return circlefrom1Circle2Points(tan1, p1, p2) def circleFrom1tan1pt1rad(tan1, p1, rad): - if isinstance(tan1.Curve, Part.Line) and isinstance(p1, FreeCAD.Vector): + if (geomType(tan1) == "Line") and isinstance(p1, FreeCAD.Vector): return circleFromPointLineRadius(p1, tan1, rad) - if isinstance(tan1.Curve, Part.Circle) and isinstance(p1, FreeCAD.Vector): + if (geomType(tan1) == "Circle") and isinstance(p1, FreeCAD.Vector): return circleFromPointCircleRadius(p1, tan1, rad) def circleFrom3tan(tan1, tan2, tan3): - tan1IsLine = isinstance(tan1.Curve, Part.Line) - tan2IsLine = isinstance(tan2.Curve, Part.Line) - tan3IsLine = isinstance(tan3.Curve, Part.Line) - tan1IsCircle = isinstance(tan1.Curve, Part.Circle) - tan2IsCircle = isinstance(tan2.Curve, Part.Circle) - tan3IsCircle = isinstance(tan3.Curve, Part.Circle) + tan1IsLine = (geomType(tan1) == "Line") + tan2IsLine = (geomType(tan2) == "Line") + tan3IsLine = (geomType(tan3) == "Line") + tan1IsCircle = (geomType(tan1) == "Circle") + tan2IsCircle = (geomType(tan2) == "Circle") + tan3IsCircle = (geomType(tan3) == "Circle") if tan1IsLine and tan2IsLine and tan3IsLine: return circleFrom3LineTangents(tan1, tan2, tan3) elif tan1IsCircle and tan2IsCircle and tan3IsCircle: @@ -1926,7 +1943,8 @@ def outerSoddyCircle(circle1, circle2, circle3): ''' Computes the outer soddy circle for three tightly packed circles. ''' - if isinstance(circle1.Curve, Part.Circle) and isinstance(circle2.Curve, Part.Circle) and isinstance(circle3.Curve, Part.Circle): + if (geomType(circle1) == "Circle") and (geomType(circle2) == "Circle") \ + and (geomType(circle3) == "Circle"): # Original Java code Copyright (rc) 2008 Werner Randelshofer # Converted to python by Martin Buerbaum 2009 # http://www.randelshofer.ch/treeviz/ @@ -1978,7 +1996,8 @@ def innerSoddyCircle(circle1, circle2, circle3): ''' Computes the inner soddy circle for three tightly packed circles. ''' - if isinstance(circle1.Curve, Part.Circle) and isinstance(circle2.Curve, Part.Circle) and isinstance(circle3.Curve, Part.Circle): + if (geomType(circle1) == "Circle") and (geomType(circle2) == "Circle") \ + and (geomType(circle3) == "Circle"): # Original Java code Copyright (rc) 2008 Werner Randelshofer # Converted to python by Martin Buerbaum 2009 # http://www.randelshofer.ch/treeviz/ @@ -2032,7 +2051,8 @@ def circleFrom3CircleTangents(circle1, circle2, circle3): http://mathworld.wolfram.com/ApolloniusProblem.html ''' - if isinstance(circle1.Curve, Part.Circle) and isinstance(circle2.Curve, Part.Circle) and isinstance(circle3.Curve, Part.Circle): + if (geomType(circle1) == "Circle") and (geomType(circle2) == "Circle") \ + and (geomType(circle3) == "Circle"): int12 = findIntersection(circle1, circle2, True, True) int23 = findIntersection(circle2, circle3, True, True) int31 = findIntersection(circle3, circle1, True, True) @@ -2136,7 +2156,7 @@ def findHomotheticCenterOfCircles(circle1, circle2): http://mathworld.wolfram.com/HomotheticCenter.html ''' - if isinstance(circle1.Curve, Part.Circle) and isinstance(circle2.Curve, Part.Circle): + if (geomType(circle1) == "Circle") and (geomType(circle2) == "Circle"): if DraftVecUtils.equals(circle1.Curve.Center, circle2.Curve.Center): return None @@ -2188,7 +2208,7 @@ def findRadicalAxis(circle1, circle2): @sa findRadicalCenter ''' - if isinstance(circle1.Curve, Part.Circle) and isinstance(circle2.Curve, Part.Circle): + if (geomType(circle1) == "Circle") and (geomType(circle2) == "Circle"): if DraftVecUtils.equals(circle1.Curve.Center, circle2.Curve.Center): return None r1 = circle1.Curve.Radius @@ -2240,7 +2260,7 @@ def findRadicalCenter(circle1, circle2, circle3): @sa findRadicalAxis ''' - if isinstance(circle1.Curve, Part.Circle) and isinstance(circle2.Curve, Part.Circle) and isinstance(circle2.Curve, Part.Circle): + if (geomType(circle1) == "Circle") and (geomType(circle2) == "Circle"): radicalAxis12 = findRadicalAxis(circle1, circle2) radicalAxis23 = findRadicalAxis(circle1, circle2) @@ -2272,7 +2292,7 @@ def pointInversion(circle, point): http://en.wikipedia.org/wiki/Inversive_geometry ''' - if isinstance(circle.Curve, Part.Circle) and isinstance(point, FreeCAD.Vector): + if (geomType(circle) == "Circle") and isinstance(point, FreeCAD.Vector): cen = circle.Curve.Center rad = circle.Curve.Radius @@ -2306,7 +2326,7 @@ def polarInversion(circle, edge): http://mathworld.wolfram.com/InversionPole.html ''' - if isinstance(circle.Curve, Part.Circle) and isinstance(edge.Curve, Part.Line): + if (geomType(circle) == "Circle") and (geomType(edge) == "Line"): nearest = circle.Curve.Center.add(findDistance(circle.Curve.Center, edge, False)) if nearest: inversionPole = pointInversion(circle, nearest) @@ -2324,7 +2344,7 @@ def circleInversion(circle, circle2): Circle inversion of a circle. ''' - if isinstance(circle.Curve, Part.Circle) and isinstance(circle2.Curve, Part.Circle): + if (geomType(circle) == "Circle") and (geomType(circle2) == "Circle"): cen1 = circle.Curve.Center rad1 = circle.Curve.Radius diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 9c36fd0c9..58ee1d06b 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -257,7 +257,7 @@ class Snapper: snaps.extend(self.snapToIntersection(edge)) snaps.extend(self.snapToElines(edge,eline)) - if isinstance (edge.Curve,Part.Circle): + if DraftGeomUtils.geomType(edge) == "Circle": # the edge is an arc, we have extra options snaps.extend(self.snapToAngles(edge)) snaps.extend(self.snapToCenter(edge)) @@ -383,7 +383,7 @@ class Snapper: edges = ob.Shape.Edges if (not self.maxEdges) or (len(edges) <= self.maxEdges): for e in edges: - if isinstance(e.Curve,Part.Line): + if DraftGeomUtils.geomType(e) == "Line": np = self.getPerpendicular(e,point) if not DraftGeomUtils.isPtOnEdge(np,e): if (np.sub(point)).Length < self.radius: @@ -501,13 +501,13 @@ class Snapper: if self.isEnabled("perpendicular"): if last: if isinstance(shape,Part.Edge): - if isinstance(shape.Curve,Part.Line): + if DraftGeomUtils.geomType(shape) == "Line": np = self.getPerpendicular(shape,last) - elif isinstance(shape.Curve,Part.Circle): + elif DraftGeomUtils.geomType(shape) == "Circle": dv = last.sub(shape.Curve.Center) dv = DraftVecUtils.scaleTo(dv,shape.Curve.Radius) np = (shape.Curve.Center).add(dv) - elif isinstance(shape.Curve,Part.BSplineCurve): + elif DraftGeomUtils.geomType(shape) == "BSplineCurve": pr = shape.Curve.parameter(last) np = shape.Curve.value(pr) else: @@ -522,7 +522,7 @@ class Snapper: if constrain: if isinstance(shape,Part.Edge): if last: - if isinstance(shape.Curve,Part.Line): + if DraftGeomUtils(shape) == "Line": if self.constraintAxis: tmpEdge = Part.Line(last,last.add(self.constraintAxis)).toShape() # get the intersection points diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index e68f65cb5..35d6d3f69 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -1556,7 +1556,8 @@ class Dimension(Creator): self.node = [v1,v2] self.link = [ob,i1,i2] self.edges.append(ed) - if isinstance(ed.Curve,Part.Circle): + import DraftGeomUtils + if DraftGeomUtils.geomType(ed) == "Circle": # snapped edge is an arc self.arcmode = "diameter" self.link = [ob,num] @@ -2253,8 +2254,9 @@ class Trimex(Modifier): lc = self.obj.ViewObject.LineColor sc = (lc[0],lc[1],lc[2]) sw = self.obj.ViewObject.LineWidth + import DraftGeomUtils for e in self.edges: - if isinstance(e.Curve,Part.Line): + if DraftGeomUtils(e) == "Line": self.ghost.append(lineTracker(scolor=sc,swidth=sw)) else: self.ghost.append(arcTracker(scolor=sc,swidth=sw)) @@ -2362,7 +2364,7 @@ class Trimex(Modifier): point = pts[DraftGeomUtils.findClosest(point,pts)] # modifying active edge - if isinstance(edge.Curve,Part.Line): + if DraftGeomUtils.geomType(edge) == "Line": perp = DraftGeomUtils.vec(edge).cross(Vector(0,0,1)) chord = v1.sub(point) proj = DraftVecUtils.project(chord,perp) @@ -2409,7 +2411,7 @@ class Trimex(Modifier): for i in list: edge = self.edges[i] ghost = self.ghost[i] - if isinstance(edge.Curve,Part.Line): + if DraftGeomUtils.geomType(edge) == "Line": ghost.p1(edge.Vertexes[0].Point) ghost.p2(edge.Vertexes[-1].Point) else: diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index 3b0ab3284..1a9a34865 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -1250,7 +1250,7 @@ def getWire(wire,nospline=False): v1 = edge.Vertexes[0].Point if len(edge.Vertexes) < 2: points.append((v1.x,v1.y,v1.z,None,None,0.0)) - elif (isinstance(edge.Curve,Part.Circle)): + elif DraftGeomUtils.geomType(edge) == "Circle": mp = DraftGeomUtils.findMidpoint(edge) v2 = edge.Vertexes[-1].Point c = edge.Curve.Center @@ -1278,7 +1278,7 @@ def getWire(wire,nospline=False): if not DraftGeomUtils.isClockwise(edge): bul = -bul points.append((v1.x,v1.y,v1.z,None,None,bul)) - elif (isinstance(edge.Curve,Part.BSplineCurve)) and (not nospline): + elif (DraftGeomUtils.geomType(edge) == "BSplineCurve") and (not nospline): spline = getSplineSegs(edge) spline.pop() for p in spline: @@ -1303,7 +1303,7 @@ def writeShape(ob,dxfobject,nospline=False): for wire in ob.Shape.Wires: # polylines for e in wire.Edges: processededges.append(e.hashCode()) - if (len(wire.Edges) == 1) and isinstance(wire.Edges[0].Curve,Part.Circle): + if (len(wire.Edges) == 1) and (DraftGeomUtils.geomType(wire.Edges[0]) == "Circle"): center, radius, ang1, ang2 = getArcData(wire.Edges[0]) if len(wire.Edges[0].Vertexes) == 1: # circle dxfobject.append(dxfLibrary.Circle(center, radius, @@ -1323,7 +1323,7 @@ def writeShape(ob,dxfobject,nospline=False): if not(e.hashCode() in processededges): loneedges.append(e) # print "lone edges ",loneedges for edge in loneedges: - if (isinstance(edge.Curve,Part.BSplineCurve)) and ((not nospline) or (len(edge.Vertexes) == 1)): # splines + if (DraftGeomUtils.geomType(edge) == "BSplineCurve") and ((not nospline) or (len(edge.Vertexes) == 1)): # splines points = [] spline = getSplineSegs(edge) for p in spline: @@ -1331,7 +1331,7 @@ def writeShape(ob,dxfobject,nospline=False): dxfobject.append(dxfLibrary.PolyLine(points, [0.0,0.0,0.0], 0, color=getACI(ob), layer=getGroup(ob,exportList))) - elif isinstance(edge.Curve,Part.Circle): # curves + elif DraftGeomUtils.geomType(edge) == "Circle": # curves center, radius, ang1, ang2 = getArcData(edge) if len(edge.Vertexes) == 1: # circles dxfobject.append(dxfLibrary.Circle(center, radius, diff --git a/src/Mod/Draft/importOCA.py b/src/Mod/Draft/importOCA.py index 175644f1c..e71fa060e 100644 --- a/src/Mod/Draft/importOCA.py +++ b/src/Mod/Draft/importOCA.py @@ -257,13 +257,13 @@ def export(exportList,filename): oca.write("# edges\r\n") count = 1 for e in edges: - if isinstance(e.Curve,Part.Line): + if DraftGeomUtils.geomType(e) == "Line"): oca.write("L"+str(count)+"=") oca.write(writepoint(e.Vertexes[0].Point)) oca.write(" ") oca.write(writepoint(e.Vertexes[-1].Point)) oca.write("\r\n") - elif isinstance(e.Curve,Part.Circle): + elif DraftGeomUtils.geomType(e) == "Circle"): if (len(e.Vertexes) > 1): oca.write("C"+str(count)+"=ARC ") oca.write(writepoint(e.Vertexes[0].Point)) From c15ae93d25854f39fe7eb6b8c86f5e12e3773f26 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 31 Mar 2013 23:20:30 -0300 Subject: [PATCH 2/2] 0001073: Allow Draft tools to create Part Primitives A preferences setting now allow Draft tools to create Part primitives instead of Draft objects, when possible (currently point, line, arc, circle and rectangle). --- src/Mod/Draft/Draft.py | 2 +- src/Mod/Draft/DraftTools.py | 115 +++- src/Mod/Draft/Draft_rc.py | 633 ++++++++++--------- src/Mod/Draft/Resources/ui/userprefs-base.ui | 20 + 4 files changed, 426 insertions(+), 344 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 07cec75d2..3b4a1dd1b 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -107,7 +107,7 @@ def getParamType(param): return "float" elif param in ["selectBaseObjects","alwaysSnap","grid","fillmode","saveonexit","maxSnap", "SvgLinesBlack","dxfStdSize","showSnapBar","hideSnapBar","alwaysShowGrid", - "renderPolylineWidth","showPlaneTracker"]: + "renderPolylineWidth","showPlaneTracker","UsePartPrimitives"]: return "bool" elif param in ["color","constructioncolor","snapcolor"]: return "unsigned" diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 35d6d3f69..d50b2334e 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -461,12 +461,25 @@ class Line(Creator): todo.delay(self.doc.removeObject,old) self.obj = None if (len(self.node) > 1): - # building command string - rot,sup,pts,fil = self.getStrings() - self.commit(translate("draft","Create DWire"), - ['import Draft', - 'points='+pts, - 'Draft.makeWire(points,closed='+str(closed)+',face='+fil+',support='+sup+')']) + if (len(self.node) == 2) and Draft.getParam("UsePartPrimitives"): + # use Part primitive + p1 = self.node[0] + p2 = self.node[-1] + self.commit(translate("draft","Create Line"), + ['line = FreeCAD.ActiveDocument.addObject("Part::Line","Line")', + 'line.X1 = '+str(p1.x), + 'line.Y1 = '+str(p1.y), + 'line.Z1 = '+str(p1.z), + 'line.X2 = '+str(p2.x), + 'line.Y2 = '+str(p2.y), + 'line.Z2 = '+str(p2.z)]) + else: + # building command string + rot,sup,pts,fil = self.getStrings() + self.commit(translate("draft","Create DWire"), + ['import Draft', + 'points='+pts, + 'Draft.makeWire(points,closed='+str(closed)+',face='+fil+',support='+sup+')']) Creator.finish(self) if self.ui: if self.ui.continueMode: @@ -766,12 +779,23 @@ class Rectangle(Creator): try: # building command string rot,sup,pts,fil = self.getStrings() - self.commit(translate("draft","Create Rectangle"), - ['import Draft', - 'pl=FreeCAD.Placement()', - 'pl.Rotation.Q='+rot, - 'pl.Base='+DraftVecUtils.toString(p1), - 'Draft.makeRectangle(length='+str(length)+',height='+str(height)+',placement=pl,face='+fil+',support='+sup+')']) + if Draft.getParam("UsePartPrimitives"): + # Use Part Primitive + self.commit(translate("draft","Create Plane"), + ['plane = FreeCAD.ActiveDocument.addObject("Part::Plane","Plane")', + 'plane.Length = '+str(length), + 'plane.Width = '+str(height), + 'pl = FreeCAD.Placement()', + 'pl.Rotation.Q='+rot, + 'pl.Base = '+DraftVecUtils.toString(p1), + 'plane.Placement = pl']) + else: + self.commit(translate("draft","Create Rectangle"), + ['import Draft', + 'pl = FreeCAD.Placement()', + 'pl.Rotation.Q = '+rot, + 'pl.Base = '+DraftVecUtils.toString(p1), + 'Draft.makeRectangle(length='+str(length)+',height='+str(height)+',placement=pl,face='+fil+',support='+sup+')']) except: print "Draft: error delaying commit" self.finish(cont=True) @@ -1010,13 +1034,23 @@ class Arc(Creator): rot,sup,pts,fil = self.getStrings() if self.closedCircle: try: - # building command string - self.commit(translate("draft","Create Circle"), - ['import Draft', - 'pl=FreeCAD.Placement()', - 'pl.Rotation.Q='+rot, - 'pl.Base='+DraftVecUtils.toString(self.center), - 'Draft.makeCircle(radius='+str(self.rad)+',placement=pl,face='+fil+',support='+sup+')']) + if Draft.getParam("UsePartPrimitives"): + # use primitive + self.commit(translate("draft","Create Circle"), + ['circle = FreeCAD.ActiveDocument.addObject("Part::Circle","Circle")', + 'circle.Radius = '+str(self.rad), + 'pl = FreeCAD.Placement()', + 'pl.Rotation.Q = '+rot, + 'pl.Base = '+DraftVecUtils.toString(self.center), + 'circle.Placement = pl']) + else: + # building command string + self.commit(translate("draft","Create Circle"), + ['import Draft', + 'pl=FreeCAD.Placement()', + 'pl.Rotation.Q='+rot, + 'pl.Base='+DraftVecUtils.toString(self.center), + 'Draft.makeCircle(radius='+str(self.rad)+',placement=pl,face='+fil+',support='+sup+')']) except: print "Draft: error delaying commit" else: @@ -1024,13 +1058,25 @@ class Arc(Creator): end = math.degrees(self.firstangle+self.angle) if end < sta: sta,end = end,sta try: - # building command string - self.commit(translate("draft","Create Arc"), - ['import Draft', - 'pl=FreeCAD.Placement()', - 'pl.Rotation.Q='+rot, - 'pl.Base='+DraftVecUtils.toString(self.center), - 'Draft.makeCircle(radius='+str(self.rad)+',placement=pl,face='+fil+',startangle='+str(sta)+',endangle='+str(end)+',support='+sup+')']) + if Draft.getParam("UsePartPrimitives"): + # use primitive + self.commit(translate("draft","Create Arc"), + ['circle = FreeCAD.ActiveDocument.addObject("Part::Circle","Circle")', + 'circle.Radius = '+str(self.rad), + 'circle.Angle0 = '+str(sta), + 'circle.Angle1 = '+str(end), + 'pl = FreeCAD.Placement()', + 'pl.Rotation.Q = '+rot, + 'pl.Base = '+DraftVecUtils.toString(self.center), + 'circle.Placement = pl']) + else: + # building command string + self.commit(translate("draft","Create Arc"), + ['import Draft', + 'pl=FreeCAD.Placement()', + 'pl.Rotation.Q='+rot, + 'pl.Base='+DraftVecUtils.toString(self.center), + 'Draft.makeCircle(radius='+str(self.rad)+',placement=pl,face='+fil+',startangle='+str(sta)+',endangle='+str(end)+',support='+sup+')']) except: print "Draft: error delaying commit" self.finish(cont=True) @@ -3298,9 +3344,20 @@ class Point: if len(self.stack) == 1: self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callbackClick) self.view.removeEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),self.callbackMove) - FreeCAD.ActiveDocument.openTransaction("Create Point") - Draft.makePoint((self.stack[0][0]),(self.stack[0][1]),self.stack[0][2]) - FreeCAD.ActiveDocument.commitTransaction() + commitlist = [] + if Draft.getParam("UsePartPrimitives"): + # using + commitlist.append((translate("draft","Create Point"), + ['point = FreeCAD.ActiveDocument.addObject("Part::Vertex","Point")', + 'point.X = '+str(self.stack[0][0]), + 'point.Y = '+str(self.stack[0][1]), + 'point.Z = '+str(self.stack[0][2])])) + else: + # building command string + commitlist.append((translate("draft","Create Point"), + ['import Draft', + 'Draft.makePoint('+str(self.stack[0][0])+','+str(self.stack[0][1])+','+str(self.stack[0][2])+')'])) + todo.delayCommit(commitlist) FreeCADGui.Snapper.off() class ToggleSnap(): diff --git a/src/Mod/Draft/Draft_rc.py b/src/Mod/Draft/Draft_rc.py index ea9e2620b..a84632aab 100644 --- a/src/Mod/Draft/Draft_rc.py +++ b/src/Mod/Draft/Draft_rc.py @@ -2,7 +2,7 @@ # Resource object code # -# Created: Wed Mar 6 12:04:34 2013 +# Created: Sun Mar 31 20:05:22 2013 # by: The Resource Compiler for PyQt (Qt v4.8.2) # # WARNING! All changes made in this file will be lost! @@ -41407,268 +41407,273 @@ qt_resource_data = "\ \x33\x2e\x72\x9f\xc2\xcc\xa8\x77\x7d\x66\xc6\x1b\xcc\xef\xf2\x48\ \xa6\x8c\x0e\x28\xa3\x2d\x9e\x88\x63\x66\x74\x00\x9f\x1b\xd5\x84\ \x37\x0f\xfe\x01\xbd\x89\x17\xfc\ -\x00\x00\x10\x37\ +\x00\x00\x10\x85\ \x00\ -\x00\xa6\x66\x78\x9c\xed\x1d\x6b\x6f\xdb\x38\xf2\x7b\x7e\x05\x91\ -\x0f\xbd\x1e\x90\x8d\x63\xe7\xdd\x3a\x3e\xb4\xe9\x13\x68\x77\xdb\ -\x3a\x6d\x6f\xef\xcb\x82\x96\x68\x9b\x57\x59\xf4\x92\x72\x12\x2f\ +\x00\xa9\x59\x78\x9c\xed\x1d\x6b\x6f\xdb\x38\xf2\x7b\x7e\x05\x91\ +\x0f\xbd\x1e\xd0\x8d\x63\xe7\xdd\x3a\x3e\xb4\xe9\x13\x68\x77\xd3\ +\x3a\x6d\x6f\xef\xcb\x82\x96\x68\x9b\x57\x59\xf2\x92\x74\x12\x2f\ \xee\xc7\xdf\x0c\x49\x59\x8f\xc8\x72\x64\x59\x96\xbd\x75\x51\x20\ \x16\x49\x91\xc3\xe1\xbc\x38\x33\xa4\xda\xff\xba\x1f\x79\xe4\x96\ -\x49\xc5\x85\x7f\xb5\xdf\x3c\x3c\xda\x27\xcc\x77\x84\xcb\xfd\xc1\ -\xd5\xfe\xd7\x9b\x37\xbf\x5c\xec\xff\xab\xb3\xd7\x9e\xf0\xa8\xd1\ -\x09\x34\xea\xec\x91\xb6\xe3\x51\xa5\x3a\x6f\x27\xfc\xd9\xb3\x57\ -\x9c\x7a\x62\x00\x7f\xbd\x41\x97\x05\x01\xbc\xac\x5e\x49\xda\x0f\ -\xda\x0d\xd3\x08\x5a\xdf\x71\x77\xc0\x02\xa2\x9f\xaf\xf6\x3f\x7f\ -\xd7\x8f\xfb\xc4\xa7\x23\x76\xb5\x9f\xdb\x09\x0e\x46\xda\x63\x29\ -\xc6\x4c\x06\x53\xfb\xc6\x80\x89\x11\x0b\xe4\x54\x57\x92\xb6\x64\ -\x4e\xa0\x7f\x91\xf6\x7d\xe7\xa8\xdd\xb8\xb7\x0f\x53\x7c\x98\xda\ -\x07\x00\x21\x18\x76\x4e\x2f\xa1\xc8\xfc\x34\xc5\x43\xc6\x07\xc3\ -\xa0\x73\x76\xdc\x6a\x37\xec\x6f\xdd\x67\x23\xec\xb4\xdd\x08\x07\ -\xcf\x82\xe4\x8e\xfb\xae\xb8\xbb\xe1\x81\xc7\x2c\x30\x2a\x90\x00\ -\x7c\xe7\x2d\xf3\x99\xa4\x1e\x51\x76\x32\xed\x86\xad\x78\xd8\xa5\ -\x47\xa7\x62\x12\x21\xe7\xdb\x4b\x71\xff\x41\x17\xd9\x1e\x53\x43\ -\xaa\x31\x75\xa0\xa3\x7d\x3b\x01\x7f\x32\xea\x31\xd9\x39\x6b\x37\ -\xec\x2f\x03\x7e\x7c\x84\x07\x5d\x8c\xa8\x1c\x70\x3f\xd5\xc3\x65\ -\x6e\x0f\x3c\x60\xa3\x08\x93\xf1\xc5\x7c\x2b\xc5\x64\x0c\x30\x87\ -\xcb\x39\x08\x9f\x4d\xf3\x07\x83\x07\x11\xb2\x32\xf0\xa5\x17\x9d\ -\x74\x33\xb0\xf6\x10\xa8\x5c\xdc\xd9\xd1\x80\x70\x03\xee\x50\xcf\ -\x94\xfe\xd1\x8a\x06\x8e\x66\x94\xd1\xd1\xbb\x07\x1d\x0d\x85\xe4\ -\x7f\x09\x3f\x98\x75\xd5\xbc\x9c\xf5\x95\xee\xed\x01\x92\x34\x89\ -\x7f\x92\xac\x7f\x3d\x64\xce\x8f\x38\xb2\xb0\x62\x0c\x15\x0e\x56\ -\xf4\xc4\xfd\x1f\xcd\x56\xac\xdb\x0c\xec\x09\xe1\xdd\xf0\x71\xa2\ -\xcd\x0c\x89\xef\xfb\x24\x18\x72\x45\xe0\xbf\xee\x8f\xb9\x07\x50\ -\xc0\x2c\x52\xef\x84\xfc\xd1\x03\xfe\x1e\xc2\x2f\xff\x1f\x01\xa1\ -\xe3\x31\xa3\xf2\x90\x7c\x55\xac\x3f\x01\x4a\xe5\xbe\xc3\x08\xf5\ -\x3c\x22\xfa\xb1\xb7\x70\x40\x45\xa8\xc4\x2a\x25\x08\xf7\x75\xdd\ -\x0b\xa9\xbb\xb1\x1d\x1e\xa6\xd6\x29\x7b\xb1\xb2\xe7\xc3\xee\x83\ -\xec\xc9\xbc\xe3\xee\x03\xc8\x97\x1f\x07\x71\xfc\xda\x47\x99\x41\ -\x54\xe0\x02\x57\x5e\xed\x1f\xa5\xc6\x75\x6c\xdf\x43\x18\x58\x8f\ -\xfb\x3d\x1a\xd6\x29\x33\xee\x27\x1a\x0c\x17\x0f\xfb\x51\xb8\x8d\ -\x50\x6e\x3e\x72\x34\x2d\xca\x80\xcc\x62\x74\xd8\x48\x12\xe2\x02\ -\xba\xfc\xfc\x81\xf6\x98\x17\x12\xa3\x87\x0f\x49\xba\x2e\xb2\x60\ -\x66\xad\xb8\x1f\x30\xd9\xa7\x40\x4a\x23\xe1\xb2\xe5\x17\x8c\x7a\ -\x7c\xe0\x8f\x98\xff\x60\x30\x98\xee\xe7\xe0\xd9\xb3\x17\x58\xff\ -\x05\x05\xf6\xff\x66\x8f\x37\x92\x72\x0f\x46\x8b\x4a\xbe\x5d\x33\ -\x84\x07\xc0\x88\x63\xa9\x2a\x74\x46\x6c\x2e\x46\x3d\x91\xc9\xe6\ -\x58\x81\x6c\x7e\xb2\x3c\x97\xdf\x58\x16\x47\x3e\xfc\xfa\x5e\xa3\ -\x19\xd9\xf2\x6e\xc8\x81\x27\x23\xc6\x85\xf2\x89\xc7\xc8\x1d\x07\ -\x8e\x46\x06\x7a\x46\x6e\xa0\xd7\x1e\x95\xe6\x0d\x5d\x3e\xf6\xa8\ -\xe5\x79\xf3\x4e\xa8\xad\xb0\x3f\x0a\x4f\x63\x2a\x69\xc0\xb4\x0c\ -\x80\x17\x0f\x70\x0c\xe8\x32\xa0\xea\x47\xb2\x9f\x89\x62\x7a\xe4\ -\x37\x92\xb1\xeb\x17\xaf\xc8\x0d\xb4\xb8\xe5\xec\x8e\xa8\xa9\x02\ -\x8c\x91\xbe\x90\x7a\x14\x1e\x28\x6c\x2b\x0d\x95\x50\x27\x00\x9b\ -\x62\x2d\x3c\xfd\x95\x7f\xd4\xd4\xb8\x99\x7c\xfc\x80\xae\x1e\xc3\ -\x76\x11\x3d\x98\xd5\xc9\xc2\xe3\xbc\xe1\x1a\xe9\xf1\xca\x01\x60\ -\x57\xbb\x0c\x04\x0b\x79\xaf\xdd\x30\x2a\x7a\xa6\xbf\x13\xd5\xa5\ -\xb5\x79\xeb\xf1\xca\x3c\x4b\x68\x2e\x50\xda\xf3\x65\x26\xeb\xd3\ -\x89\x07\x5d\x0b\x4f\x64\xae\x60\xe5\x82\x0a\xc6\x7d\x39\x09\x02\ -\xe1\x67\xc8\x2a\xa8\xeb\x99\xba\xa5\x85\x15\x4a\x05\x37\x3e\x49\ -\x2d\x0b\x7c\x10\x0d\xa2\xf7\x5f\x30\xb1\xd3\x26\x5e\x1e\xcd\xa4\ -\xc6\xd5\xdd\xa5\x99\x10\xcb\x52\x54\x2a\x99\x8b\x1b\x01\xfc\x93\ -\xac\x18\x80\xb4\xf2\xb1\xca\xfc\x48\x56\xf6\xbc\x09\xc3\x3a\xfd\ -\x37\x49\xd0\x0f\x06\x59\xb9\xb8\xb2\xe4\xb0\x99\xd2\xaa\x12\xab\ -\x63\x81\x3e\x9c\xcb\x40\x5d\x9f\x8e\x37\x9d\x7b\x16\x49\x87\xe2\ -\xfc\xa3\x70\xd6\x6a\x0a\xb6\x84\xb7\x63\xa0\x04\xf8\x16\x17\x88\ -\xa0\x9f\x8f\x89\x96\xb5\xdc\xaf\x85\x0f\xbf\x26\xda\x1c\xdb\x78\ -\x66\x3a\x5e\x8d\xe5\xfc\x90\xa9\xac\x42\x22\x3d\x06\x6d\x89\x2b\ -\xe9\x9d\x6f\x0d\x5e\x8e\x58\x89\xa1\x08\x0d\xdf\x12\x7b\xde\x22\ -\x7c\x77\x72\x32\x9f\xf1\x9a\xad\xd3\x1c\xd6\x6b\x9d\x9e\xd6\xa6\ -\xbd\x22\x5c\xfd\x7c\x4c\xb8\x80\x3e\x17\x9a\x82\xb0\x81\x65\xda\ -\x43\x59\x03\x0f\x76\xc7\xdc\xcf\xda\xb6\x2a\x28\xef\x45\x2e\xbd\ -\xec\x99\x3d\x56\x8d\xcd\x26\xb8\x3a\x53\xf0\x96\x02\x9d\xa7\x46\ -\xb6\xce\xcc\x56\xc2\xad\x59\xa8\xd7\x02\x24\x1f\x5b\xb4\x2d\x25\ -\xf5\x8a\xf7\x57\xc7\x25\xf7\x57\x47\xa5\x54\x1b\xe5\x5a\x68\xd7\ -\xa2\xd5\x16\x79\x82\x4e\xcb\xe8\x33\x46\x66\x13\x44\xa5\x05\x73\ -\xe4\x7d\xce\x24\xf9\xc1\xa6\x6b\xf1\xab\xc0\x80\x4e\x08\xc0\xa6\ -\x92\x7e\x39\xe7\x86\x1a\x72\x1c\xac\x2e\xdf\x8a\x13\x48\xaf\xbe\ -\xd1\xa9\x57\x6a\xea\x4b\xb0\x11\x46\xb7\x80\x7e\xd3\x52\xa4\xab\ -\x8b\x17\xf0\x0a\xb4\x66\xd0\x18\xcd\x8e\x14\xf5\x30\x50\x01\xda\ -\x6b\xfc\x6e\xd6\x63\xbb\xa1\x0b\x0b\x93\xaa\xe2\x7f\xb1\x77\xdc\ -\x0f\xe6\x93\x2a\xb6\x48\xa1\xd3\x44\x1c\x4f\x92\xb1\xc7\x59\xad\ -\x8d\x3b\xb6\x8e\x12\x21\xc8\x08\xac\x74\x87\x73\x44\x96\x41\xdd\ -\x4a\x6d\x99\x56\xb3\xcc\xb6\x7c\x53\x25\xee\x59\x39\x89\xab\xec\ -\xdc\x56\x20\x69\x9d\x89\x94\x40\xb2\xef\x7d\x97\xdd\x67\x9b\x2f\ -\xcd\xb5\x98\x2f\x30\x1b\x9c\xd5\x4e\x82\x9b\xd2\x9d\x04\x8f\x0a\ -\x56\x2c\xc1\xf3\x79\x6f\x27\xc1\x57\x2e\xc1\x97\x8d\x4c\xbc\xf0\ -\x82\x8d\x15\xe0\xe7\xe5\x04\x38\x35\x53\x5b\x8b\xfc\x5e\xcf\xf6\ -\x13\x66\xa3\x19\x7d\x27\xbe\x77\xe2\x7b\x93\xa2\xaa\xcd\x38\x15\ -\x2d\x93\x8b\x52\x6e\xdb\x6f\xdd\xb5\x3a\x23\x4d\xbf\x52\x83\x34\ -\xfb\xc0\x7d\xf6\xda\xe5\xc1\x03\x69\x86\x2e\x23\x06\x15\x65\xa2\ -\x43\x59\x0e\xed\x68\xb6\xda\xbf\x96\x70\x5c\x87\x89\x93\x55\xe4\ -\x6b\xc5\x51\xbe\x16\xdf\x43\x7c\x66\x7a\xd2\x66\x85\x37\x53\x06\ -\xd6\xcd\x89\x27\x8f\x67\xc4\xc7\x27\x2b\x2e\x4f\xb8\xba\x07\x9b\ -\xac\xd8\x27\x00\x21\xb9\xa3\x3e\x26\x1b\xce\x52\x89\x74\xe0\xa0\ -\x11\xf3\x15\x4b\x31\xd2\x15\x36\x19\x89\x50\x15\x92\x7c\x15\xd4\ -\xdc\xa5\xb7\x00\x83\x51\xef\x36\x46\x44\x7d\x37\xe6\xbb\xa6\x8e\ -\x14\x4a\x11\xc5\x14\x26\x46\x97\xf0\x5d\x17\x89\x6a\x02\x50\xc2\ -\x67\xf7\x7c\x63\x55\x7d\xdd\x64\x7e\x5e\x05\x99\x97\x71\xd1\x66\ -\xa5\xe4\x3a\x62\x3c\x8d\x25\xcf\xf5\x18\x18\xa1\xe3\x20\xa4\x28\ -\xb0\x72\x47\x40\x6a\x07\x44\x00\xb5\xcb\x3b\xae\x58\x58\xa4\x4c\ -\x7b\xea\xdd\xd1\x29\x50\x5e\x40\x25\xa6\x5b\x12\x5f\xfc\x32\xeb\ -\xb1\x0a\x56\x78\xeb\x89\x1e\xf5\xc8\x0a\xc6\xb0\x18\x48\x0d\xd3\ -\x03\xfc\x75\x40\x90\x43\xc7\xfa\x67\xb5\x3a\x63\x3c\x1d\x6d\x70\ -\x26\x60\xdd\xfc\xd3\xbc\xa8\x84\x81\x4a\xc4\xec\x7f\x15\x72\x44\ -\x3d\x6f\x7a\x40\x00\x91\x4c\x6a\x32\xc4\x50\x87\x8d\x19\x1e\x58\ -\x65\x31\xe6\x4c\x11\x04\x4e\x31\x0f\xca\x99\x7b\x48\x42\xd6\x13\ -\x63\x6d\xfb\xa4\x93\xe2\x7b\x14\x38\x2b\x8c\xf9\x87\x8c\x18\xbe\ -\x0d\x7c\xa5\x02\x46\xdd\x4a\x32\xdb\xbb\x7a\x90\x24\x00\x89\xc9\ -\xad\x47\x99\x68\x28\x5e\x02\x10\xbf\x85\xe1\xd7\x1d\x4f\x64\xf1\ -\xc4\x69\x25\x2c\x71\xb1\x5a\x9d\xa2\x4d\xa8\xb8\x76\x40\x27\x35\ -\x98\x53\x60\x2c\xa8\x20\xc6\x2f\x36\xa3\x05\xb3\x5b\xa0\x54\x33\ -\x89\x2f\x82\xd8\xfb\x3d\xe3\xe0\x1e\xeb\x77\x7c\x6f\x0a\x2f\x30\ -\x9f\x00\xe8\x60\xe7\x40\xd1\xf5\xcd\x97\x0f\x95\x30\xc5\x8b\x24\ -\xdc\x21\xb8\x4f\x5d\xae\x68\xcf\x8b\xbc\xee\xe8\xb0\xf9\xe7\x36\ -\xab\x20\xb3\x40\xdd\x0d\x76\xb7\xaf\xdc\xe9\x9b\xbf\xc3\xdd\x39\ -\x7d\x57\xed\xf4\x6d\x96\x74\x90\x4a\xea\xf2\x89\x9a\x65\x9a\x6a\ -\x59\x00\x3c\xa9\xc6\xcc\xe1\x60\x09\x8e\x05\x20\x52\x1d\xe2\x29\ -\x3d\x2c\x3e\x32\x79\x3c\x82\x00\xab\x06\x14\x0f\x91\x3d\xe5\x7e\ -\x9f\xfb\x00\x77\x09\x46\x5d\x10\x5b\x94\xd4\x1f\xd4\xe1\xce\x59\ -\x90\x21\xb5\x80\xd4\xd5\xa4\xdf\xe7\x69\x4f\xb1\x9d\xc3\xf8\x7e\ -\x3d\x6a\x1f\xb0\xf7\xc5\x20\x6f\x4b\xa5\x4f\xd5\x27\x41\x0a\xf8\ -\x2c\x0b\xe8\xfb\x12\x07\xbe\xb2\xf4\xfd\x8c\x2f\xb5\xd2\x06\x15\ -\x4e\x84\xe3\x4c\x24\xa1\x03\x8a\xa6\x6b\xcc\xb0\x0d\x86\xa0\x36\ -\x25\x3a\x55\xa8\x39\xbb\xc9\x7d\x97\x3b\x14\x8d\x5c\x13\x99\xc0\ -\xf3\x9e\x0c\x66\x55\xc2\x87\xb1\x28\x11\x80\xde\xf3\xd1\x64\x54\ -\x89\xd6\xee\x53\x4f\xad\x43\x6d\xc3\x1c\x7e\x26\x9d\xbd\xd3\xd8\ -\xf3\x31\x5d\x45\x98\x36\x7f\x87\xcc\x7c\xb4\x81\x57\x4f\xff\xb9\ -\x62\xe7\xa3\xe1\xda\xb4\x94\x40\x95\xdf\x63\x3a\xae\xc0\x5d\x26\ -\x41\x8c\xc4\xed\x84\x2a\x64\xc8\x1c\x40\x36\x50\xfb\xe7\x67\x37\ -\x54\xb5\x8a\x56\xbc\x66\x07\xa0\x2f\x2f\x2f\x97\x0f\x41\xe7\xe5\ -\x55\x9f\xac\x27\xb2\x6d\xc4\xee\x6b\xb3\xe0\x5b\x2a\x7b\xab\xb6\ -\x58\x9a\x95\x58\x2c\x25\x36\x11\x60\xb1\x24\x7c\x6d\x5d\xb3\xab\ -\x37\x81\x9b\x99\x9b\x61\x28\xf4\x09\x1b\xe6\xb3\x5b\x60\x6b\xf4\ -\x40\x60\xf0\xa7\x4a\x49\xd2\x85\x21\xc3\x2b\x46\x62\x20\x6d\xb3\ -\x3b\x01\xb1\x88\x73\x79\x49\xff\xbe\xc7\x6c\x0a\x10\xed\xb2\x47\ -\xe0\x62\xb7\x8d\xa8\x38\xb1\x1a\xbf\xec\x44\x95\x88\x7a\x14\xbc\ -\x7a\x64\xdb\x17\xb3\xea\x08\x45\x81\x93\xfa\x45\xae\xdd\x59\x90\ -\xe9\x9c\x27\xed\x78\x4c\xda\x51\x62\x41\xb0\xbb\x2c\xed\x3a\x19\ -\x46\xa1\x64\xbc\x89\x03\xcb\xc6\x1e\xf5\x19\x89\x19\xd2\xf6\x3a\ -\x1e\x45\xdc\x09\x76\x1a\x7a\x68\x09\x82\xa1\x1b\x54\xb3\x3d\x43\ -\x81\xf8\xdd\xc2\xf4\x49\xc3\x14\x48\x0a\x53\x29\x21\x13\x0b\x0a\ -\x2f\x3d\xea\x4d\x38\xe8\x8e\xe8\xb3\x88\xbe\x9a\xa8\x5c\x89\x3c\ -\xf8\x2c\x97\x44\x22\x96\x66\xa8\x19\x93\x34\xfa\xf0\x08\x9b\x84\ -\x28\x5d\xe3\x90\xfc\x16\x46\xb6\xb5\x75\x30\x4d\xbf\x71\xc7\x01\ -\x4a\x59\x24\x5d\xab\x00\xc5\xbf\xc1\xb1\x66\x47\x7d\xa7\xe5\x73\ -\x48\x0a\x90\x3b\xa2\x62\x17\x7d\x9e\x4f\xe6\x05\x6e\x54\xcb\x74\ -\x7b\x97\xbd\x85\x25\x21\x9c\x37\x32\xf3\x39\x7f\x86\x05\x48\xd1\ -\x92\xfd\xf7\x4f\x9b\x4a\x8b\xe5\xf2\x66\x7f\x15\xd9\x0b\xb8\x9e\ -\xac\xdd\x7f\xff\x4e\x9e\xde\x88\x71\x66\xf4\x63\x4d\x10\xfc\x87\ -\x3c\x7d\x23\x81\xb7\x6a\x84\xe1\x77\x80\xa1\x0b\x06\x6d\x29\x10\ -\xea\x16\x49\xcd\x6a\x32\xca\xca\x5d\xf2\x18\xb3\x36\x07\x92\xbb\ -\x09\xfd\xa9\xc3\xf5\xd6\x78\xac\x42\x7f\x7e\x85\x2d\x3a\x0e\xba\ -\xd5\xce\x7c\x33\x81\xcd\x14\x7c\x2b\x8f\xbe\xe7\xfb\x71\x76\xbe\ -\xfc\x32\xbe\xfc\x22\x3b\xcc\xfc\xb3\x0c\xb5\xb8\xf8\xd3\x7e\x3a\ -\xe3\x00\x89\xc9\x14\x93\x94\xd3\x63\xe4\x96\x2b\x8e\x69\x38\x5a\ -\xbc\x64\xdd\x29\x0b\x3b\x01\xbc\xcf\xf1\x96\xc5\xcc\xfb\x58\x02\ -\xd1\x44\x67\x0f\xd1\x30\x95\xb5\xca\x0c\x22\xd8\x53\xae\xc5\x9a\ -\xb7\x89\x3c\x30\xdc\xdb\xbf\x97\x38\x79\x84\xa5\x9d\x9f\x11\x5d\ -\x19\x2d\xcf\xcf\x51\x46\x92\xb5\x37\x63\xd7\x60\xb8\xbf\x12\x13\ -\x98\xf0\xbc\xe8\x90\xab\x6b\xc3\x18\xd1\x06\x46\xfa\xf4\xa9\x76\ -\x83\x3c\xe0\xf5\xe0\x8e\x01\xc3\x32\x0a\x4c\xad\x25\x01\x9e\x79\ -\x58\x9e\xa1\x5c\xe6\xf0\x11\x40\x9e\x1d\x45\x2a\x11\x44\xca\x8e\ -\x7a\x19\x5c\x63\xd4\xeb\xf2\xf0\xf2\xe2\x72\xf6\xef\xfc\xa2\xd5\ -\x6e\xd8\xca\xc2\x43\x65\x85\xc1\x6c\x5f\xcd\xc3\xa3\xe4\xbf\xe5\ -\x47\x29\x68\xbf\x74\x43\x6a\xff\x99\xe4\x4e\x3d\x01\xd6\xbc\xd0\ -\x34\xf7\x35\x83\x28\x82\x41\xac\xc7\x1f\xac\x5b\x5f\x4c\x3a\x3f\ -\xf1\xa8\xa6\xcc\x02\xee\x1b\xa4\x85\xb1\x40\x73\xdb\x5e\x30\xe4\ -\xe8\x05\x3e\x24\x5d\xcc\x34\xec\x4f\x09\xd8\x11\x8c\xa0\x8b\x1a\ -\x6c\x86\x29\x51\x7f\x4e\xa8\x64\x6a\x26\xa2\x46\x61\x37\x25\x12\ -\x92\x73\x22\xdc\xcd\xa3\xb5\x44\xb8\x91\x97\x5f\x1b\xda\xd9\x52\ -\x4e\xae\x7a\x0b\x5e\xf2\xee\xb0\x05\x99\xf6\x73\x79\xfb\x3d\xde\ -\x51\xee\x63\xbe\xab\x04\x6a\xc4\x53\x7e\xc4\x03\x26\xcf\x3c\x0d\ -\x5e\x33\x8f\xe7\xdb\x14\x56\x53\x76\x61\x47\xf4\xd8\x5d\xd7\x59\ -\xfe\xae\xab\x79\x76\x7e\x7e\xde\x6a\x9e\x96\xd9\x7b\x15\x37\x51\ -\xa2\xfc\x9f\xd0\xa8\xc0\xe3\x6f\x3c\x5c\x26\x47\x08\xe9\x72\x9f\ -\x06\x4c\xc5\xa2\x66\xe4\x29\xa6\x27\xb1\xfb\x43\x72\x4c\xae\xc8\ -\x11\xa8\xeb\x66\x89\xac\xe4\x1c\x71\x71\xb6\x16\x69\x31\xa3\xc5\ -\xad\x95\x16\x45\xdd\x17\xf9\xfa\x6b\xe7\xbe\x58\xf9\xe1\x81\x65\ -\xe5\xe5\x2b\x3e\x62\xbe\x3e\x0c\xbd\x05\x12\x33\x7f\x03\x9b\x9b\ -\x51\x77\x51\x4d\x3e\xdd\x5a\xc4\x87\xcb\x47\x9f\xb6\x5e\x82\x54\ -\x6d\x6f\x14\x38\xf0\x97\xc5\x40\x0b\xf2\xe6\xe6\xf2\xcf\x8d\xf0\ -\x40\x69\xf9\x4e\xa5\x91\xc7\x7c\x59\x9b\xcf\xfa\x3b\x59\xbb\x12\ -\x57\x71\x01\x67\xd1\x4f\x60\xd6\x45\x17\xd8\x68\xe1\x88\xa9\x76\ -\x2e\xe6\x65\xf4\x27\xbe\x63\x0c\xb8\x60\x48\x03\x9d\x19\x4a\x49\ -\x10\xb2\xc8\xe1\xde\x37\x6c\x6d\xcf\xb7\xb8\xbc\xdf\x87\x9d\x22\ -\x94\xe3\xe6\xd0\x83\xfd\xa2\x4e\x4e\x31\x1d\x86\x5b\xcc\x40\x32\ -\x7d\xe8\x85\x2a\xa2\x00\xb0\x12\x7b\xc6\x9c\x53\x5c\x8d\x65\x08\ -\xde\x1f\x00\x39\x04\x2c\x8d\x22\xeb\x47\x02\x93\xb5\xb9\x22\x0f\ -\x53\x8e\x1f\x0b\x46\x39\x5d\xbf\x1f\x2b\x88\x44\xde\x4e\x17\x65\ -\xe9\xa2\xb3\x72\xaa\x68\x41\x86\xd7\xc2\x84\x18\x6c\x41\x8c\x2c\ -\xd8\x70\xaf\x7a\x7e\x40\xfd\xef\x20\x2a\xc3\x35\x31\xe3\xe9\x43\ -\x37\xb8\x3c\x4a\xdf\x4b\xe4\xce\x6c\xef\xd5\xee\x6d\x67\xd2\xa1\ -\x55\x83\x97\x1b\xa7\x17\x12\xdf\x96\x8a\x87\xa2\x06\x58\xbe\x23\ -\x67\x67\x80\xad\x7a\xb3\xbb\xe0\x66\xa7\xc7\x09\xc8\x3e\xe0\x7b\ -\x13\x6f\x16\x5c\x3e\xc7\x28\xeb\x5e\x41\x9c\xa5\x7e\x77\xf6\x35\ -\x47\xfb\x81\xd8\x0c\x21\x74\xb8\xf7\x1e\xe0\xa5\x3e\xda\x5d\x34\ -\xf6\xa6\x9a\x38\x43\x34\xc0\x9e\xfc\x39\x11\xc1\xf3\x17\x92\x53\ -\xcf\xfc\xc4\x54\xa6\x70\x20\x15\x4c\xbd\x74\x53\x45\x7d\x15\xb6\ -\xb4\x25\x4c\xf2\xbe\xf9\xb9\x07\xf0\x98\x5f\x23\xe1\x8b\xb0\x19\ -\x02\x49\xfa\x74\xc4\xbd\x69\xd6\xb8\x07\xef\x98\x77\xcb\xf0\xdb\ -\xc0\x07\x51\xe7\xe6\x25\x0d\xaa\x36\x2c\xa9\x01\x66\x2f\xe3\xfd\ -\x67\x2f\x85\xe7\x9a\xe7\x4a\x92\x19\x70\x8c\xad\xfa\x7a\x6a\x59\ -\x49\x6f\xb8\x68\x4b\xe5\x7c\xd5\x2e\x89\x02\x27\xfc\x32\x7d\x7a\ -\xcb\xde\xe3\x1f\xc9\xb9\xd1\xd8\xc3\x4f\xc1\xaa\x21\x63\x95\x0a\ -\xbb\x7c\xfd\xb8\x60\x22\x3b\x05\xb9\x12\x0f\xc5\x1b\xee\xb1\xeb\ -\xa1\x10\x20\x63\x1f\x28\x97\x3e\xd4\x39\xa6\x6e\x91\xd1\xcd\xfd\ -\xa2\x46\xf7\xf1\x51\x3e\x82\x4a\xe1\xa7\x78\xc0\xc9\x4d\x53\xbf\ -\xbd\x9f\x54\x67\xb4\x39\xe8\x4f\x30\x49\x6d\xf8\x0d\xab\xf0\xbc\ -\x56\x31\x06\x29\x27\x34\x0d\x54\x3b\xa1\x39\x47\x68\x16\xb8\xf3\ -\x36\x43\x68\x96\x8f\x82\x3c\xa1\xa3\xf1\x73\xf2\x81\x51\x17\x04\ -\x1a\x95\x52\xdc\x19\x73\x62\x13\x4f\x96\xac\xec\x5c\x09\x1f\x99\ -\xef\x92\x6e\x2a\x55\x96\x3b\xd3\xf0\x4a\x04\xe4\xb4\xbe\x23\x15\ -\x38\xfc\x79\xbd\xc3\x5f\xd6\x37\xfc\x35\x97\x0e\xec\x0c\x6a\xc4\ -\xbf\x85\xa0\xc6\x25\xb0\x10\xd4\xb8\x0a\x5d\x10\x2d\xc3\x3a\x17\ -\xc1\x00\x50\xe3\x1a\x18\x00\x6a\x5c\x82\x97\xd4\xf9\xa1\xea\x5e\ -\x86\x08\x88\x1a\x97\x22\x02\xa2\xd4\x72\xd4\x6e\xaa\x94\xf4\xf3\ -\x37\xf3\x93\x64\xe6\x5b\x2b\xdf\xa0\x15\x77\xa8\x17\xf3\xdd\x18\ -\x9f\x56\x6c\x27\xb5\x89\xe6\xca\xaa\xbe\x02\x1d\xbf\x80\x41\xf4\ -\x8d\xbf\x2b\xc4\x84\xf5\x6c\xd9\x13\x2f\xb0\xe1\x89\x23\x89\x4a\ -\x46\x6e\x2d\xf2\x0e\x49\xb8\x4d\x86\x5e\x3d\xd6\x0f\x0e\xf0\x96\ -\x5d\x73\x26\x06\x7b\x7c\xdf\xfd\x0d\x6f\x6b\xf7\x5d\x2a\xcb\x5c\ -\x28\x5d\xcc\x0a\x4b\x2c\xe0\xdf\xd1\x14\xfb\x00\x88\x26\x4f\xe3\ -\xb8\xad\xf1\xac\xeb\x97\x79\x21\xb2\x2d\x91\x40\x25\xc5\xcf\xb2\ -\xdf\xbc\x7e\xe1\xe9\xdc\x4d\xd8\x59\x77\xbf\xbd\x25\x40\x68\xf8\ -\x08\x3c\x24\x9c\xca\x25\xcf\x02\x3f\x53\xfe\x61\xbd\x9d\x9f\x69\ -\xad\x7e\xa6\x05\xe9\xcd\x5b\xed\x67\x7a\x87\x47\x1c\xf0\xee\x33\ -\x0c\x97\x28\x7b\xee\x81\x82\xaa\x91\xcc\x09\x84\x9c\xe2\x45\x8b\ -\x81\xfd\xbc\x33\x32\x09\xe2\x45\xc5\x0b\x9f\x78\xc1\xf3\xb1\xe1\ -\x9c\x27\x83\xe0\x39\x3a\xad\xf0\xee\xe5\x28\x75\x26\x8c\xc3\xb8\ -\x2e\x73\xd1\x83\x85\x2a\x29\x14\x99\x36\x86\x03\xcd\x40\x5d\xd9\ -\x5e\xd6\xf3\x2d\x1b\x3b\x18\x92\xc0\xa6\xea\xa7\x72\x32\x39\x59\ -\x99\xe8\x2b\x6a\x17\x6b\x14\x6b\x61\xe5\xf7\x2c\x20\x66\x4e\x7a\ -\x5d\xed\x9f\xed\x93\x11\x95\x03\xee\x5f\xed\x37\x9b\xfb\x98\x6b\ -\xd4\x1e\xf3\xfb\x11\x1d\x87\xc9\x52\x9d\x3f\x3f\xe9\xe7\x37\x52\ -\x8c\x3e\x82\xb1\xd2\x15\x13\x89\xc9\x35\xa9\x56\xf0\x9e\x33\x51\ -\x81\x18\x99\x11\x95\x86\x24\x5e\x62\xa0\xd4\xec\xda\xd1\xdc\x1a\ -\xe3\x54\xc0\x9f\x2e\xd7\x4d\x40\xb2\x33\xdf\x55\x9d\xcf\xdf\xf5\ -\x7b\x20\xea\x6c\xc1\x9e\xe1\x26\x74\x7d\x61\x0f\x0d\xec\xe0\x15\ -\xa7\x9e\x18\x1c\x0e\x91\xb9\x74\x85\x46\x40\x7a\xdc\x7c\x40\xae\ -\xf1\x53\x4c\x2f\x27\x41\xa0\xcd\x9a\x0c\x40\x3e\x4d\xd4\x30\xac\ -\x9f\x07\x8c\x01\x56\x95\x83\x24\x25\xc0\x32\xa1\x79\x88\xbb\x79\ -\x20\x61\x6f\x2b\x03\xcb\xa6\xcc\x64\x23\x68\x56\xb9\x16\x50\x16\ -\xad\xd7\xc3\x45\x5d\x0f\x58\xf6\xb8\x7e\x36\x8a\xa2\xda\x35\xe1\ -\xc8\xec\x76\xe6\x00\x33\xab\x5d\x0b\x30\x61\x56\x41\x36\x30\x51\ -\xed\x5a\x80\x49\x64\x80\x65\x43\x94\x6a\x52\x1e\xac\x64\x01\xf6\ -\xd4\x96\x4c\x69\x41\xaa\xb4\xc8\x05\xdd\xeb\x33\x93\x9b\x6a\x66\ -\x31\x7b\x36\xa3\x2a\x00\x00\xfa\xce\xb8\xf4\x05\x03\xe9\xbe\x1d\ -\x17\xad\x93\x81\x4f\xbd\x8e\xe3\xe1\xa1\x47\xf7\x29\x9e\xb3\xc4\ -\x1d\x8c\x29\xd5\x2d\xc0\x04\x60\xfc\x36\xde\x57\xea\x28\x79\xbb\ -\x31\x6b\x62\xba\xf4\x44\xd0\x01\x35\xf8\xda\x9c\xea\x9c\xf5\x89\ -\xc5\x06\x23\xf8\xe5\x06\xab\x91\xf0\x37\x09\xa6\x63\x34\x35\xf5\ -\xf4\x12\x61\x8f\xf6\x7d\xe7\x12\x00\xbe\x0f\x1f\xa7\x9d\xe3\xf3\ -\xcb\x76\x63\x1a\xaa\x33\x7c\xfb\x61\x47\x2e\xc3\xaf\xcd\x68\xc3\ -\x38\xdd\xdb\x49\xf3\x3c\xd9\xdd\x45\x33\xab\x3b\xf3\x53\xd9\xa5\ -\x49\xa0\x76\xad\x98\x9e\x1d\x9f\xad\x16\xc7\x88\xd3\x04\x8e\x8f\ -\xcb\xe0\xf8\xf4\xbc\x99\xea\xee\xa4\x32\x1c\x9f\xac\x0e\xc7\x67\ -\xd5\xe2\xf8\x2c\x49\x78\xad\xf3\xa3\x55\xe2\xb8\x75\xde\xda\x40\ -\x1c\x87\xd7\xca\x57\x8c\xd9\xd6\x4a\x31\xdb\x3c\x5b\x1b\x66\x97\ -\x97\x10\xe1\x0d\x28\xd5\x62\xf6\xf4\x22\xc9\xc8\x67\xa7\x65\x30\ -\x7b\x7c\x7a\xb2\x05\xb2\x37\xbc\xe3\xa1\x5a\xcc\x1e\x1f\xa7\x30\ -\x7b\xbe\x4a\x9a\xad\x12\xb3\xe7\xe5\x25\x6e\x74\x4f\x76\xb5\x48\ -\x6e\xa6\xe8\xb7\x75\x59\x4a\x32\x9c\xa0\xbf\x26\xd1\x5d\xa6\x9a\ -\xdc\x14\xdb\x21\x76\xe7\x57\xc5\xd6\x43\xda\x42\x2b\x25\x25\x5a\ -\xad\xb3\xc7\x18\x23\xf3\xb1\x1c\x7f\x84\xfa\x76\x63\xc2\x3b\x7b\ -\xff\x07\xbf\xef\x72\xe5\ +\x09\xc9\x03\xff\x72\xbf\x79\x70\xb8\x4f\x98\xef\x04\x2e\xf7\x07\ +\x97\xfb\x5f\x6f\xde\xfe\x72\xbe\xff\xaf\xce\x5e\x7b\xc2\xa3\x46\ +\xc7\xd0\xa8\xb3\x47\xda\x8e\x47\xa5\xec\xbc\x9b\xf0\xe7\xcf\x5f\ +\x73\xea\x05\x03\xf8\xeb\x0d\xba\x4c\x29\x78\x59\xbe\x16\xb4\xaf\ +\xda\x0d\xd3\x08\x5a\xdf\x71\x77\xc0\x14\xd1\xcf\x97\xfb\x9f\xbf\ +\xeb\xc7\x7d\xe2\xd3\x11\xbb\xdc\xcf\xed\x04\x07\x23\xed\xb1\x08\ +\xc6\x4c\xa8\xa9\x7d\x63\xc0\x82\x11\x53\x62\xaa\x2b\x49\x5b\x30\ +\x47\xe9\x5f\xa4\x7d\xdf\x39\x6c\x37\xee\xed\xc3\x14\x1f\xa6\xf6\ +\x01\x40\x50\xc3\xce\xc9\x05\x14\x99\x9f\xa6\x78\xc8\xf8\x60\xa8\ +\x3a\xa7\x47\xad\x76\xc3\xfe\xd6\x7d\x36\xc2\x4e\xdb\x8d\x70\xf0\ +\x2c\x48\xee\xb8\xef\x06\x77\x37\x5c\x79\xcc\x02\x23\x95\x00\xe0\ +\x3b\xef\x98\xcf\x04\xf5\x88\xb4\x93\x69\x37\x6c\xc5\xc3\x2e\x3d\ +\x3a\x0d\x26\x11\x72\xbe\xbd\x0a\xee\x3f\xea\x22\xdb\x63\x6a\x48\ +\x39\xa6\x0e\x74\xb4\x6f\x27\xe0\x4f\x46\x3d\x26\x3a\xa7\xed\x86\ +\xfd\x65\xc0\x8f\x8f\xf0\xa0\x8b\x11\x15\x03\xee\xa7\x7a\xb8\xc8\ +\xed\x81\x2b\x36\x8a\x30\x19\x5f\xcc\x77\x22\x98\x8c\x01\xe6\x70\ +\x39\x07\xe1\xb3\x69\xfe\x60\x70\x15\x21\x2b\x03\x5f\x7a\xd1\x49\ +\x37\x03\x6b\x0f\x81\xca\xc5\x9d\x1d\x0d\x08\x57\x71\x87\x7a\xa6\ +\xf4\x8f\x56\x34\x70\x34\xa3\x8c\x8e\xde\x3f\xe8\x68\x18\x08\xfe\ +\x57\xe0\xab\x59\x57\xcd\x8b\x59\x5f\xe9\xde\x1e\x20\x49\x93\xf8\ +\xb5\x60\xfd\xab\x21\x73\x7e\xc4\x91\x85\x15\x63\xa8\x70\xb0\xa2\ +\x17\xdc\xff\xd1\x6c\xc5\xba\xcd\xc0\x5e\x10\x78\x37\x7c\x9c\x68\ +\x33\x43\xe2\x87\x3e\x51\x43\x2e\x09\xfc\xd7\xfd\x31\xf7\x19\x14\ +\x30\x8b\xd4\xbb\x40\xfc\xe8\x01\x7f\x0f\xe1\x97\xff\x0f\x45\xe8\ +\x78\xcc\xa8\x38\x20\x5f\x25\xeb\x4f\x80\x52\xb9\xef\x30\x42\x3d\ +\x8f\x04\xfd\xd8\x5b\x38\xa0\x24\x54\x60\x95\x0c\x08\xf7\x75\xdd\ +\x4b\xa1\xbb\xb1\x1d\x1e\xa4\xd6\x29\x7b\xb1\xb2\xe7\xc3\xee\x55\ +\xf6\x64\xde\x73\xf7\x01\xe4\xcb\x8f\x83\x38\x7e\xe3\xa3\xcc\x20\ +\x52\xb9\xc0\x95\x97\xfb\x87\xa9\x71\x1d\xdb\xf7\x10\x06\xd6\xe3\ +\x7e\x8f\x86\x75\xca\x8c\x7b\x4d\xd5\x70\xf1\xb0\x9f\x02\xb7\x11\ +\xca\xcd\x47\x8e\xa6\x45\x19\x90\x59\x8c\x0e\x1b\x49\x42\x5c\x40\ +\x97\x9f\x3f\xd2\x1e\xf3\x42\x62\xf4\xf0\x21\x49\xd7\x45\x16\xcc\ +\xac\x15\xf7\x15\x13\x7d\x0a\xa4\x34\x0a\x5c\xb6\xfc\x82\x51\x8f\ +\x0f\xfc\x11\xf3\x1f\x0c\x06\xd3\xfd\xac\x9e\x3f\x7f\x89\xf5\x5f\ +\x50\x60\xff\x6f\xf6\x78\x23\x28\xf7\x60\xb4\xa8\xe4\xdb\x15\x43\ +\x78\x00\x8c\x38\x96\xaa\x42\x67\xc4\xe6\xc1\xa8\x17\x64\xb2\x39\ +\x56\x20\x9b\x1f\x2f\xcf\xe5\x37\x96\xc5\x91\x0f\xbf\x7e\xd0\x68\ +\x46\xb6\xbc\x1b\x72\xe0\xc9\x88\x71\xa1\x7c\xe2\x31\x72\xc7\x81\ +\xa3\x91\x81\x9e\x93\x1b\xe8\xb5\x47\x85\x79\x43\x97\x8f\x3d\x6a\ +\x79\xde\xbc\x13\x6a\x2b\xec\x8f\xc2\xd3\x98\x0a\xaa\x98\x96\x01\ +\xf0\xe2\x33\x1c\x03\xba\x54\x54\xfe\x48\xf6\x33\x91\x4c\x8f\xfc\ +\x56\x30\x76\xf5\xf2\x35\xb9\x81\x16\xb7\x9c\xdd\x11\x39\x95\x80\ +\x31\xd2\x0f\x84\x1e\x85\x2b\x89\x6d\x85\xa1\x12\xea\x28\xb0\x29\ +\xd6\xc2\xd3\x5f\xf9\x27\x4d\x8d\x9b\xc9\xc7\x0f\xe8\xea\x31\x6c\ +\x17\xd1\x83\x59\x9d\x2c\x3c\xce\x1b\xae\x91\x1e\xaf\x1c\x00\x76\ +\xb5\xcb\x40\xb0\x90\xf7\xda\x0d\xa3\xa2\x67\xfa\x3b\x51\x5d\x5a\ +\x9b\xb7\x1e\xaf\xcc\xb3\x84\xe6\x02\xa5\x3d\x5f\x66\xb2\x3e\x9d\ +\x78\xd0\x75\xe0\x05\x99\x2b\x58\xb9\xa0\x82\x71\x5f\x4d\x94\x0a\ +\xfc\x0c\x59\x05\x75\x3d\x53\xb7\xb4\xb0\x42\xa9\xe0\xc6\x27\xa9\ +\x65\x81\x0f\xa2\x21\xe8\xfd\x17\x4c\xec\xb4\x89\x97\x47\x33\xa9\ +\x71\x75\x77\x69\x26\xc4\xb2\x14\x95\x0a\xe6\xe2\x46\x00\xff\x24\ +\x2b\x06\x20\xad\x7c\xac\x32\x3f\x92\x95\x3d\x6f\xc2\xb0\x4e\xff\ +\x4d\x12\xf4\x83\x41\x56\x2e\xae\x2c\x39\x6c\xa6\xb4\xaa\xc4\xea\ +\x58\xa0\x0f\xe7\x32\x50\xd7\xa7\xe3\x4d\xe7\x9e\x45\xd2\xa1\x38\ +\xff\x48\x9c\xb5\x9c\x82\x2d\xe1\xed\x18\x28\x01\xbe\xc5\x05\x22\ +\xe8\xe7\x63\xa2\x65\x2d\xf7\xab\xc0\x87\x5f\x13\x6d\x8e\x6d\x3c\ +\x33\x1d\xad\xc6\x72\x7e\xc8\x54\x56\x21\x91\x1e\x83\xb6\xc4\x15\ +\xf4\xce\xb7\x06\x2f\x47\xac\xc4\x50\x84\x86\x6f\x89\x3d\x6f\x11\ +\xbe\x3b\x3e\x9e\xcf\x78\xcd\xd6\x49\x0e\xeb\xb5\x4e\x4e\x6a\xd3\ +\x5e\x11\xae\x7e\x3e\x26\x5c\x40\x9f\x0b\x4d\x41\xd8\xc0\x32\xed\ +\xa1\xac\x81\x07\xbb\x63\xee\x67\x6d\x5b\x25\x94\xf7\x22\x97\x5e\ +\xf6\xcc\x1e\xab\xc6\x66\x13\x5c\x9d\x29\x78\x4b\x81\xce\x53\x23\ +\x5b\x67\x66\x2b\xe1\xd6\x2c\xd4\x6b\x01\x92\x8f\x2d\xda\x96\x92\ +\x7a\xc5\xfb\xab\xa3\x92\xfb\xab\xc3\x52\xaa\x8d\x72\x2d\xb4\x6b\ +\xd1\x6a\x8b\x3c\x41\x27\x65\xf4\x19\x23\xb3\x09\xa2\xd2\x82\x39\ +\xf2\x3e\x67\x82\xfc\x60\xd3\xb5\xf8\x55\x60\x40\x27\x04\x60\x53\ +\x49\xbf\x9c\x73\x43\x0e\x39\x0e\x56\x97\x6f\xc5\x51\xc2\xab\x6f\ +\x74\xea\x95\x9a\xfa\x12\x6c\x84\xd1\x2d\xa0\xdf\xb4\x14\xe9\xea\ +\xe2\x05\xbc\x02\xad\x19\x34\x46\xb3\x23\x45\x3d\x0c\x54\x80\xf6\ +\x1a\xbf\x9f\xf5\xd8\x6e\xe8\xc2\xc2\xa4\x2a\xf9\x5f\xec\x3d\xf7\ +\xd5\x7c\x52\xc5\x16\x29\x74\x9a\x88\xe3\x71\x32\xf6\x38\xab\xb5\ +\x71\xc7\xd6\x61\x22\x04\x19\x81\x95\xee\x70\x8e\xc8\x32\xa8\x5b\ +\xa9\x2d\xd3\x6a\x96\xd9\x96\x6f\xaa\xc4\x3d\x2d\x27\x71\xa5\x9d\ +\xdb\x0a\x24\xad\x33\x11\x02\x48\xf6\x83\xef\xb2\xfb\x6c\xf3\xa5\ +\xb9\x16\xf3\x05\x66\x83\xb3\xda\x49\x70\x53\xba\x93\xe0\x51\xc1\ +\x8a\x25\x78\x3e\xef\xed\x24\xf8\xca\x25\xf8\xb2\x91\x89\x97\x9e\ +\xda\x58\x01\x7e\x56\x4e\x80\x53\x33\xb5\xb5\xc8\xef\xf5\x6c\x3f\ +\x61\x36\x9a\xd1\x77\xe2\x7b\x27\xbe\x37\x29\xaa\xda\x8c\x53\xd1\ +\x32\xb9\x28\xe5\xb6\xfd\xd6\x5d\xab\x33\xd2\xf4\x2b\x35\x48\xb3\ +\x8f\xdc\x67\x6f\x5c\xae\x1e\x48\x33\x74\x19\x31\xa8\x28\x13\x1d\ +\xca\x72\x68\x47\xb3\xd5\xfe\xb5\x84\xe3\x3a\x4c\x9c\xac\x22\x5f\ +\x2b\x8e\xf2\xb5\xf8\x1e\xe2\x33\xd3\x93\x36\x2b\xbc\x99\x32\xb0\ +\x6e\x4e\x3c\x7e\x3c\x23\x3e\x3e\x59\x71\x79\xc2\xd5\x3d\xd8\x64\ +\xc5\x3e\x01\x08\xc9\x1d\xf5\x31\xd9\x70\x96\x4a\xa4\x03\x07\x8d\ +\x98\xaf\x58\x04\x23\x5d\x61\x93\x91\x08\x95\x21\xc9\x57\x41\xcd\ +\x5d\x7a\x0b\x30\x18\xf5\x6e\x63\x44\xd4\x77\x63\xbe\x6b\xea\x88\ +\x40\x4a\x22\x99\xc4\xc4\xe8\x12\xbe\xeb\x22\x51\x4d\x00\x2a\xf0\ +\xd9\x3d\xdf\x58\x55\x5f\x37\x99\x9f\x55\x41\xe6\x65\x5c\xb4\x59\ +\x29\xb9\x4e\x30\x9e\xc6\x92\xe7\x7a\x0c\x8c\xd0\xb1\x0a\x29\x0a\ +\xac\xdc\x11\x90\xda\x33\x12\x00\xb5\x8b\x3b\x2e\x59\x58\x24\x4d\ +\x7b\xea\xdd\xd1\x29\x50\x9e\xa2\x02\xd3\x2d\x89\x1f\xfc\x32\xeb\ +\xb1\x0a\x56\x78\xe7\x05\x3d\xea\x91\x15\x8c\x61\x31\x90\x1a\xa6\ +\x07\xf8\xeb\x80\x20\x87\x8e\xf5\xcf\x6a\x75\xc6\x78\x3a\xda\xe0\ +\x4c\xc0\xba\xf9\xa7\x79\x5e\x09\x03\x95\x88\xd9\xff\x1a\x88\x11\ +\xf5\xbc\xe9\x33\x02\x88\x64\x42\x93\x21\x86\x3a\x6c\xcc\xf0\x99\ +\x55\x16\x63\xce\x24\x41\xe0\x24\xf3\xa0\x9c\xb9\x07\x24\x64\xbd\ +\x60\xac\x6d\x9f\x74\x52\x7c\x8f\x02\x67\x85\x31\xff\x90\x11\xc3\ +\xb7\x81\xaf\xa4\x62\xd4\xad\x24\xb3\xbd\xab\x07\x49\x02\x90\x98\ +\xdc\x7a\x94\x89\x86\xe2\x15\x00\xf1\x5b\x18\x7e\xdd\xf1\x44\x16\ +\x4f\x9c\x54\xc2\x12\xe7\xab\xd5\x29\xda\x84\x8a\x6b\x07\x74\x52\ +\x83\x39\x05\xc6\x82\x54\x31\x7e\xb1\x19\x2d\x98\xdd\x02\xa5\x9a\ +\x49\xfc\x40\xc5\xde\xef\x19\x07\xf7\x58\xbf\xe3\x7b\x53\x78\x81\ +\xf9\x04\x40\x07\x3b\x07\x8a\xae\x6e\xbe\x7c\xac\x84\x29\x5e\x26\ +\xe1\x0e\xc1\x7d\xea\x72\x49\x7b\x5e\xe4\x75\x47\x87\xcd\x3f\xb7\ +\x59\x05\x99\x05\xea\x6e\xb0\xbb\x7d\xe5\x4e\xdf\xfc\x1d\xee\xce\ +\xe9\xbb\x6a\xa7\x6f\xb3\xa4\x83\x54\x50\x97\x4f\xe4\x2c\xd3\x54\ +\xcb\x02\xe0\x49\x39\x66\x0e\x07\x4b\x70\x1c\x00\x22\xe5\x01\x9e\ +\xd2\xc3\xe2\x43\x93\xc7\x13\x10\x60\x55\x45\xf1\x10\xd9\x53\xee\ +\xf7\xb9\x0f\x70\x97\x60\xd4\x05\xb1\x45\x41\xfd\x41\x1d\xee\x9c\ +\x05\x19\x52\x0b\x48\x5d\x4e\xfa\x7d\x9e\xf6\x14\xdb\x39\x8c\xef\ +\xd7\xa3\xf6\x01\x7b\x5f\x0c\xf2\xb6\x54\xfa\x54\x7d\x12\xa4\x80\ +\xcf\xb2\x80\xbe\x2f\x71\xe0\x2b\x4b\xdf\xcf\xf8\x52\x2b\x6d\x50\ +\xe1\x24\x70\x9c\x89\x20\x74\x40\xd1\x74\x8d\x19\xb6\x6a\x08\x6a\ +\x53\xa0\x53\x85\x9a\xb3\x9b\xdc\x77\xb9\x43\xd1\xc8\x35\x91\x09\ +\x3c\xef\xc9\x60\x56\x25\x7c\x18\x8b\x12\x01\xe8\x3d\x1f\x4d\x46\ +\x95\x68\xed\x3e\xf5\xe4\x3a\xd4\x36\xcc\xe1\x67\xd2\xd9\x3b\x8d\ +\x3d\x1f\xd3\x55\x84\x69\xf3\x77\xc8\xcc\x47\x1b\x78\xf5\xf4\x9f\ +\x2b\x76\x3e\x19\xae\x4d\x4b\x09\x54\xf9\x3d\xa6\xe3\x0a\xdc\x65\ +\x02\xc4\x48\xdc\x4e\xa8\x42\x86\xcc\x01\x64\x03\xb5\x7f\x7e\x76\ +\x43\x55\xab\x68\xc5\x6b\x76\x00\xfa\xe2\xe2\x62\xf9\x10\x74\x5e\ +\x5e\xf5\xf1\x7a\x22\xdb\x46\xec\xbe\x31\x0b\xbe\xa5\xb2\xb7\x6a\ +\x8b\xa5\x59\x89\xc5\x52\x62\x13\x01\x16\x4b\xc2\xd7\xd6\x35\xbb\ +\x7a\x13\xb8\x99\xb9\x19\x86\x81\x3e\x61\xc3\x7c\x76\x0b\x6c\x8d\ +\x1e\x08\x0c\xfe\x54\x29\x49\xba\x30\x64\x78\xc5\x48\x0c\xa4\x6d\ +\x76\x27\x20\x16\x71\x2e\xaf\xe8\xdf\xf7\x98\x4d\x01\xa2\x5d\xf6\ +\x08\x5c\xec\xb6\x11\x19\x27\x56\xe3\x97\x9d\xc8\x12\x51\x8f\x82\ +\x57\x8f\x6c\xfb\x62\x56\x1d\xa1\x28\x70\x52\xbf\xc8\xb5\x3b\x0b\ +\x32\x9d\xf3\xa4\x1d\x8f\x49\x3b\x4a\x2c\x08\x76\x97\xa5\x5d\x27\ +\xc3\x28\x94\x8c\x37\x71\x60\xd9\xd8\xa3\x3e\x23\x31\x43\xda\x5e\ +\xc7\x23\x89\x3b\xc1\x4e\x43\x0f\x2d\x41\x30\x74\x83\x6a\xb6\x67\ +\x28\x10\xbf\x5b\x98\xae\x35\x4c\x4a\x50\x98\x4a\x09\x99\x58\x50\ +\x78\xe9\x51\x6f\xc2\x41\x77\x44\x9f\x45\xf4\xd5\x44\xe5\x4a\xe4\ +\xc1\x67\xb9\x24\x12\xb1\x34\x43\xcd\x98\xa4\xd1\x87\x47\xd8\x24\ +\x44\xe9\x1a\x07\xe4\xb7\x30\xb2\xad\xad\x83\x69\xfa\x8d\x3b\x0e\ +\x50\x8a\x22\xe9\x5a\x05\x28\xfe\x2d\x8e\x35\x3b\xea\x3b\x2d\x9f\ +\x43\x52\x80\xdc\x11\x15\xbb\xe8\xf3\x7c\x32\x2f\x70\xa3\x5a\xa6\ +\xdb\xbb\xec\x2d\x2c\x09\xe1\xbc\x91\x99\xcf\xf9\x33\x2c\x40\x8a\ +\x96\xec\xbf\x5f\x6f\x2a\x2d\x96\xcb\x9b\xfd\x35\xc8\x5e\xc0\xf5\ +\x64\xed\xfe\xfb\x77\xf2\xf4\x26\x18\x67\x46\x3f\xd6\x04\xc1\x7f\ +\xc8\xd3\xb7\x02\x78\xab\x46\x18\x7e\x07\x18\xba\x60\xd0\x96\x02\ +\xa1\x6e\x91\xd4\xac\x26\xa3\xac\xdc\x25\x8f\x31\x6b\x73\x20\xb8\ +\x9b\xd0\x9f\x3a\x5c\x6f\x8d\xc7\x2a\xf4\xe7\x57\xd8\xa2\xe3\xa0\ +\x5b\xed\xcc\x37\x13\xd8\x4c\xc1\xb7\xf2\xe8\x7b\xbe\x1f\x67\xe7\ +\xcb\x2f\xe3\xcb\x2f\xb2\xc3\xcc\x3f\xcb\x50\x8b\x8b\x3f\xed\xa7\ +\x33\x0e\x90\x98\x4c\x31\x49\x39\x3d\x46\x6e\xb9\xe4\x98\x86\xa3\ +\xc5\x4b\xd6\x9d\xb2\xb0\x13\xc0\xfb\x1c\x6f\x59\xcc\xbc\x8f\x25\ +\x10\x4d\x74\xf6\x10\x0d\x53\x59\xab\xcc\x20\x82\x3d\xe5\x5a\xac\ +\x79\x9b\xc8\x03\xc3\xbd\xfb\x7b\x89\x93\x47\x58\xda\xf9\x19\xd1\ +\x95\xd1\xf2\xfc\x1c\x65\x24\x59\x7b\x33\x76\x0d\x86\xfb\xeb\x60\ +\x02\x13\x9e\x17\x1d\x72\x75\x6d\x18\x23\xda\xc0\x48\x9f\x3e\xd5\ +\x6e\x90\x07\xbc\xae\xee\x18\x30\x2c\xa3\xc0\xd4\x5a\x12\xe0\x99\ +\x87\xe5\x19\xca\x65\x0e\x1f\x01\xe4\xd9\x51\xa4\x12\x41\xa4\xec\ +\xa8\x97\xc1\x35\x46\xbd\x2e\x0e\x2e\xce\x2f\x66\xff\xce\xce\x5b\ +\xed\x86\xad\x2c\x3c\x54\x56\x18\xcc\xf6\xd5\x3c\x38\x4c\xfe\x5b\ +\x7e\x94\x82\xf6\x4b\x37\xa4\xf6\x9f\x49\xee\xd4\x13\x60\xcd\x0b\ +\x4d\x73\x5f\x33\x88\x24\x18\xc4\x7a\xfc\xc1\xba\xf5\xc5\xa4\xf3\ +\x13\x8f\x6a\xca\x2c\xe0\xbe\x41\x5a\x18\x0b\x34\xb7\xed\xa9\x21\ +\x47\x2f\xf0\x01\xe9\x62\xa6\x61\x7f\x4a\xc0\x8e\x60\x04\x5d\xd4\ +\x60\x33\x4c\x89\xfc\x73\x42\x05\x93\x33\x11\x35\x0a\xbb\x29\x91\ +\x90\x9c\x13\xe1\x6e\x1e\xae\x25\xc2\x8d\xbc\xfc\xc6\xd0\xce\x96\ +\x72\x72\xd5\x5b\xf0\x92\x77\x87\x2d\xc8\xb4\x9f\xcb\xdb\x1f\xf0\ +\x8e\x72\x1f\xf3\x5d\x05\x50\x23\x9e\xf2\x23\x1e\x30\x79\xe6\x69\ +\xf0\x9a\x79\x3c\xdf\xa6\xb0\x9a\xb2\x0b\x3b\xa2\xc7\xee\xba\x4e\ +\xf3\x77\x5d\xcd\xd3\xb3\xb3\xb3\x56\xf3\xa4\xcc\xde\xab\xb8\x89\ +\x12\xe5\xff\x84\x46\x05\x1e\x7f\xe3\xe1\x32\x39\x41\x20\x5c\xee\ +\x53\xc5\x64\x2c\x6a\x46\x9e\x62\x7a\x12\xbb\x3f\x20\x47\xe4\x92\ +\x1c\x82\xba\x6e\x96\xc8\x4a\xce\x11\x17\xa7\x6b\x91\x16\x33\x5a\ +\xdc\x5a\x69\x51\xd4\x7d\x91\xaf\xbf\x76\xee\x8b\x95\x1f\x1e\x58\ +\x56\x5e\xbe\xe6\x23\xe6\xeb\xc3\xd0\x5b\x20\x31\xf3\x37\xb0\xb9\ +\x19\x75\xe7\xd5\xe4\xd3\xad\x45\x7c\xb8\x7c\x74\xbd\xf5\x12\xa4\ +\x6a\x7b\xa3\xc0\x81\xbf\x2c\x06\x5a\x90\x37\x37\x97\x7f\x6e\x02\ +\x0f\x94\x96\xef\x54\x1a\x79\xcc\x97\xb5\xf9\xac\xbf\x93\xb5\x2b\ +\x71\x15\x17\x70\x16\xfd\x04\x66\x5d\x74\x81\x8d\x16\x8e\x98\x6a\ +\xe7\x62\x5e\x46\x7f\xe2\x3b\xc6\x80\x53\x43\xaa\x74\x66\x28\x25\ +\x2a\x64\x91\x83\xbd\x6f\xd8\xda\x9e\x6f\x71\x79\xbf\x0f\x3b\x45\ +\x28\xc7\xcd\xa1\x07\xfb\x45\x9d\x9c\x62\x3a\x0c\xb7\x98\x4a\x30\ +\x7d\xe8\x85\x4a\x22\x01\xb0\x12\x7b\xc6\x9c\x53\x5c\x8d\x65\x08\ +\xde\x1f\x00\x39\x28\x96\x46\x91\xf5\x23\x81\xc9\xda\x5c\x91\x87\ +\x29\xc7\x8f\x05\xa3\x9c\xac\xdf\x8f\xa5\x22\x91\xb7\xd3\x45\x59\ +\xba\xe8\xb4\x9c\x2a\x5a\x90\xe1\xb5\x30\x21\x06\x5b\x10\x23\x0b\ +\x36\xdc\xab\x9e\x1f\x50\xff\x3b\x88\xca\x70\x4d\xcc\x78\xfa\xd0\ +\x0d\x2e\x8f\xd4\xf7\x12\xb9\x33\xdb\x7b\xb5\x7b\xdb\x99\x74\x68\ +\xd5\xe0\xe5\xc6\xe9\x85\xc4\xb7\xa5\xe2\xa1\xa8\x01\x96\xef\xc8\ +\xd9\x19\x60\xab\xde\xec\x2e\xb8\xd9\xe9\x71\x02\xb2\x0f\xf8\xde\ +\xc4\x9b\x05\x97\xcf\x31\xca\xba\x57\x10\x67\xa9\xdf\x9d\x7d\xcd\ +\xd1\x7e\x20\x36\x43\x08\x1d\xec\x7d\x00\x78\xa9\x8f\x76\x17\x8d\ +\xbd\x29\x27\xce\x10\x0d\xb0\x27\x7f\x4e\x02\xf5\xe2\xa5\xe0\xd4\ +\x33\x3f\x31\x95\x29\x1c\x48\xaa\xa9\x97\x6e\x2a\xa9\x2f\xc3\x96\ +\xb6\x84\x09\xde\x37\x3f\xf7\x00\x1e\xf3\x6b\x14\xf8\x41\xd8\x0c\ +\x81\x24\x7d\x3a\xe2\xde\x34\x6b\xdc\x67\xef\x99\x77\xcb\xf0\xdb\ +\xc0\xcf\xa2\xce\xcd\x4b\x1a\x54\x6d\x58\x52\x03\xcc\x5e\xc6\xfb\ +\xcf\x5f\x05\x9e\x6b\x9e\x2b\x49\x66\xc0\x31\xb6\xea\xeb\xa9\x65\ +\x25\xbd\xe1\xa2\x2d\x95\xf3\x55\xbb\x24\x0a\x9c\xf0\xcb\xf4\xe9\ +\x2d\x7b\x8f\x7f\x24\xe7\x46\x63\x0f\x3f\x05\x2b\x87\x8c\x55\x2a\ +\xec\xf2\xf5\xe3\x82\x89\xec\x14\xe4\x4a\x3c\x14\x6f\xb9\xc7\xae\ +\x86\x41\x00\x32\xf6\x81\x72\xe9\x43\x9d\x63\xea\x16\x19\xdd\xdc\ +\x2f\x6a\x74\x1f\x1d\xe6\x23\xa8\x14\x7e\x8a\x07\x9c\xdc\x34\xf5\ +\xdb\xfb\x49\x75\x46\x9b\x83\xfe\x04\x93\xd4\x86\xdf\xb0\x0a\xcf\ +\x6b\x15\x63\x90\x72\x42\xd3\x40\xb5\x13\x9a\xd9\x42\xb3\x55\xd1\ +\x49\xc1\x12\x97\x19\x7e\x37\xd9\x93\xa9\x83\x53\x51\x3a\x25\xbe\ +\x6c\x93\x22\x34\x79\x31\x72\x8d\x97\x7c\x8e\x05\x1f\x71\xcc\xad\ +\x94\xe1\xbd\x84\x18\x04\x35\xaf\xcc\xee\x41\xd4\x44\x49\x6f\x41\ +\x87\x63\x46\x47\x25\x77\xb4\x61\xee\xb7\x06\xe8\x7a\x06\xd0\x7a\ +\xbe\xde\x2d\x19\x0e\x1b\x1f\x75\x47\xf2\x99\x76\x42\x81\x6b\x9e\ +\x33\xec\x84\xf2\x81\xbf\x27\x74\x34\x7e\x41\x3e\x02\x85\x82\x0e\ +\xa7\x42\x04\x77\xc6\x82\xde\xc4\xc3\x54\x2b\x3b\x4a\xc5\x47\xe6\ +\x53\xbc\x9b\x4a\x95\xe5\x8e\xf1\xbc\x0e\x14\x39\xa9\xef\x14\x11\ +\x0e\x7f\x56\xef\xf0\x17\xf5\x0d\x7f\xc5\x85\x03\x9b\xe1\x1a\xf1\ +\x6f\x21\xa8\x71\x09\x2c\x04\x35\xae\x42\x17\x44\xcb\xb0\xce\x45\ +\x30\x00\xd4\xb8\x06\x06\x80\x1a\x97\xe0\x15\x75\x7e\xc8\xba\x97\ +\x21\x02\xa2\xc6\xa5\x88\x80\x28\xb5\x1c\xb5\x9b\x2a\x25\x43\x5b\ +\xcd\xfc\xbc\xb0\xf9\xd6\xca\x37\x68\xc5\x1d\xea\xc5\xdc\x95\xc6\ +\x8d\x1b\x73\x1e\x6c\xa2\xb9\xb2\xaa\x0f\x9f\xc7\xef\x1c\x09\xfa\ +\xc6\xc5\x1b\x62\xc2\x3a\x73\xed\x21\x2f\xd8\xe3\xc7\x91\x44\x05\ +\x23\xb7\x16\x79\x07\x24\xf4\x0c\x41\xaf\x1e\xeb\x2b\xdc\x7f\x70\ +\x73\x0c\x0c\x7b\xfc\xd0\xfd\x0d\x3f\x50\xe0\xbb\x54\x94\xb9\x43\ +\xbd\x98\x15\x96\x58\xc0\xbf\xa3\x29\xf6\x11\x10\x4d\x9e\xc6\x71\ +\x5b\xe3\xf1\xee\x2f\xf3\xa2\xc2\x5b\x22\x81\x4a\x8a\x9f\x65\x3f\ +\xf3\xfe\xd2\xd3\xe9\xca\xb0\xb5\xef\x7e\x7b\x07\xbb\x69\x85\x8f\ +\xc0\x43\x81\x53\xb9\xe4\x59\xe0\x5a\xcd\x3f\x9f\xba\x73\xad\xae\ +\xd5\xb5\xba\x20\xa3\x7f\xab\x5d\xab\xef\xf1\x54\x0f\x5e\xf7\x87\ +\x11\x42\x69\x8f\xfa\x50\x50\x35\x82\x39\x2a\x10\x53\xbc\x5b\x54\ +\xd9\x2f\x9a\x23\x93\x20\x5e\x64\xbc\xf0\x89\xa7\x5e\x8c\x0d\xe7\ +\x3c\x19\xa8\x17\xe8\xa7\xc5\xeb\xc6\xa3\x6c\xb1\x30\xf4\xe8\xba\ +\xcc\x45\xa7\x2d\xaa\xa4\x50\x64\x5a\xbf\x19\x34\x03\x75\x65\x7b\ +\x59\x8f\x1b\xcb\x0e\x86\x24\xb0\xa9\xfa\xa9\x9c\x4c\x4e\x56\x26\ +\xfa\x8a\xda\xc5\x1a\xc5\x5a\x58\xf9\x3d\x8b\x01\x9b\xc3\x8d\x97\ +\xfb\xa7\xfb\x64\x44\xc5\x80\xfb\x97\xfb\xcd\xe6\x3e\xa6\xd7\xb5\ +\xc7\xfc\x7e\x44\xc7\x61\x7e\x60\xe7\xcf\x6b\xfd\xfc\x56\x04\xa3\ +\x4f\x60\xac\x74\x83\x89\xc0\x7c\xb2\x54\x2b\x78\xcf\x99\x48\x15\ +\x8c\xcc\x88\x52\x43\x12\x2f\x31\x50\x6a\x76\xed\x68\x6e\x8d\x71\ +\x2a\xe0\x4f\x97\xeb\x26\x20\xd9\x99\xef\xca\xce\xe7\xef\xfa\x3d\ +\x10\x75\xb6\x60\xcf\x70\x13\xba\xbe\xb0\x87\x06\x76\xf0\x9a\x53\ +\x2f\x18\x1c\x0c\x91\xb9\x74\x85\x46\x40\x7a\xdc\x7c\x40\xae\xf0\ +\xeb\x63\xaf\x26\x4a\x69\xb3\x26\x03\x90\xeb\x89\x1c\x86\xf5\xf3\ +\x80\x31\xc0\xca\x72\x90\xa4\x04\x58\x26\x34\x0f\x71\x37\x0f\x24\ +\xec\x6d\x65\x60\xd9\x2c\xb1\x6c\x04\xcd\x2a\xd7\x02\xca\xa2\xf5\ +\x7a\xb8\xa8\xeb\x01\xcb\x46\x36\xb2\x51\x14\xd5\xae\x09\x47\x66\ +\xb7\x33\x07\x98\x59\xed\x5a\x80\x09\x13\x69\xb2\x81\x89\x6a\xd7\ +\x02\x4c\x22\xe9\x31\x1b\xa2\x54\x93\xf2\x60\x25\x0b\xb0\xa7\xb6\ +\x60\x52\x0b\x52\xa9\x45\x2e\xe8\x5e\x9f\x99\x74\x6c\x33\x8b\xd9\ +\xb3\x19\x55\x02\x00\xd0\x77\xc6\x3d\x47\x98\x3b\xe2\xdb\x71\xd1\ +\x3a\x19\xf8\xd4\xeb\x38\x1e\x9e\xf3\x75\x9f\xe2\xd1\x62\xdc\xc1\ +\x98\x52\xdd\x02\x4c\x00\xc6\x6f\xe3\x7d\xa5\x6e\x4f\x68\x37\x66\ +\x4d\x4c\x97\x5e\xa0\x3a\xa0\x06\xdf\x98\x83\xcc\xb3\x3e\xb1\xd8\ +\x60\x04\x3f\x56\x62\x35\x12\xfe\x26\x6a\x3a\x46\x53\x53\x4f\x2f\ +\x11\xf6\x68\xdf\x77\x2e\x00\xe0\xfb\xf0\x71\xda\x39\x3a\xbb\x68\ +\x37\xa6\xa1\x3a\xc3\xb7\x1f\x76\xe4\x32\xfc\xc0\x92\x36\x8c\xd3\ +\xbd\x1d\x37\xcf\x92\xdd\x9d\x37\xb3\xba\x33\x3f\xa5\x5d\x9a\x04\ +\x6a\xd7\x8a\xe9\xd9\x89\xf1\x6a\x71\x8c\x38\x4d\xe0\xf8\xa8\x0c\ +\x8e\x4f\xce\x9a\xa9\xee\x8e\x2b\xc3\xf1\xf1\xea\x70\x7c\x5a\x2d\ +\x8e\x4f\x93\x84\xd7\x3a\x3b\x5c\x25\x8e\x5b\x67\xad\x0d\xc4\x71\ +\xf8\x25\x85\x8a\x31\xdb\x5a\x29\x66\x9b\xa7\x6b\xc3\xec\xf2\x12\ +\x22\xbc\xf4\xa7\x5a\xcc\x9e\x9c\x27\x19\xf9\xf4\xa4\x0c\x66\x8f\ +\x4e\x8e\xb7\x40\xf6\x86\xd7\x9a\x54\x8b\xd9\xa3\xa3\x14\x66\xcf\ +\x56\x49\xb3\x55\x62\xf6\xac\xbc\xc4\x8d\xae\x86\xaf\x16\xc9\xcd\ +\x14\xfd\xb6\x2e\x4a\x49\x86\x63\xf4\xd7\x24\xba\xcb\x54\x93\x9b\ +\x62\x3b\xc4\xae\xb9\xab\xd8\x7a\x48\x5b\x68\xa5\xa4\x44\xab\x75\ +\xfa\x18\x63\x64\x3e\x96\xe3\x8f\x50\xdf\x6e\x4c\x78\x67\xef\xff\ +\x40\xba\x52\xd7\ \x00\x00\x07\xb5\ \x00\ \x00\x1a\x6e\x78\x9c\xed\x58\x5d\x6f\xe3\xb8\x15\x7d\xcf\xaf\x50\ @@ -52924,60 +52929,60 @@ qt_resource_struct = "\ \x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x01\x64\ \x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x04\xc4\ \x00\x00\x00\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x03\x12\ -\x00\x00\x06\xce\x00\x01\x00\x00\x00\x01\x00\x0a\xf7\xe1\ -\x00\x00\x04\x7c\x00\x00\x00\x00\x00\x01\x00\x0a\x54\xca\ -\x00\x00\x09\x04\x00\x01\x00\x00\x00\x01\x00\x0b\xbc\x53\ -\x00\x00\x0b\x6c\x00\x01\x00\x00\x00\x01\x00\x0c\x8c\xef\ -\x00\x00\x05\x86\x00\x01\x00\x00\x00\x01\x00\x0a\x94\x75\ -\x00\x00\x07\x16\x00\x00\x00\x00\x00\x01\x00\x0b\x15\x2b\ -\x00\x00\x08\x2a\x00\x01\x00\x00\x00\x01\x00\x0b\x7d\xd9\ -\x00\x00\x07\x8a\x00\x00\x00\x00\x00\x01\x00\x0b\x3e\xfa\ -\x00\x00\x09\x9e\x00\x01\x00\x00\x00\x01\x00\x0b\xfc\xf4\ -\x00\x00\x0b\xbc\x00\x01\x00\x00\x00\x01\x00\x0c\xa9\x13\ -\x00\x00\x04\xc2\x00\x01\x00\x00\x00\x01\x00\x0a\x6d\xec\ -\x00\x00\x08\x50\x00\x01\x00\x00\x00\x01\x00\x0b\x83\x9d\ -\x00\x00\x06\xf0\x00\x00\x00\x00\x00\x01\x00\x0b\x02\x95\ -\x00\x00\x04\xe6\x00\x01\x00\x00\x00\x01\x00\x0a\x73\x6b\ -\x00\x00\x07\x5e\x00\x01\x00\x00\x00\x01\x00\x0b\x2d\xf0\ -\x00\x00\x04\x9e\x00\x01\x00\x00\x00\x01\x00\x0a\x63\x80\ -\x00\x00\x0a\xf6\x00\x00\x00\x00\x00\x01\x00\x0c\x6f\x1b\ -\x00\x00\x03\xfc\x00\x01\x00\x00\x00\x01\x00\x0a\x2f\x38\ -\x00\x00\x05\xd6\x00\x01\x00\x00\x00\x01\x00\x0a\xaf\x94\ -\x00\x00\x0a\xae\x00\x01\x00\x00\x00\x01\x00\x0c\x57\xec\ -\x00\x00\x0a\xd0\x00\x01\x00\x00\x00\x01\x00\x0c\x65\x87\ -\x00\x00\x05\xb4\x00\x00\x00\x00\x00\x01\x00\x0a\x9d\x7b\ -\x00\x00\x03\xca\x00\x01\x00\x00\x00\x01\x00\x0a\x27\x7f\ -\x00\x00\x08\xba\x00\x01\x00\x00\x00\x01\x00\x0b\xa5\x29\ -\x00\x00\x09\xf8\x00\x00\x00\x00\x00\x01\x00\x0c\x0d\x3c\ -\x00\x00\x06\x2a\x00\x01\x00\x00\x00\x01\x00\x0a\xc1\x04\ -\x00\x00\x0a\x1c\x00\x00\x00\x00\x00\x01\x00\x0c\x23\xef\ -\x00\x00\x07\xe4\x00\x00\x00\x00\x00\x01\x00\x0b\x56\xad\ -\x00\x00\x05\x38\x00\x01\x00\x00\x00\x01\x00\x0a\x83\x6b\ -\x00\x00\x0b\x8c\x00\x00\x00\x00\x00\x01\x00\x0c\x97\x9d\ -\x00\x00\x06\x84\x00\x00\x00\x00\x00\x01\x00\x0a\xd8\x43\ -\x00\x00\x04\x28\x00\x00\x00\x00\x00\x01\x00\x0a\x37\x3f\ -\x00\x00\x0b\xec\x00\x00\x00\x00\x00\x01\x00\x0c\xb4\xec\ -\x00\x00\x0a\x64\x00\x00\x00\x00\x00\x01\x00\x0c\x41\x76\ -\x00\x00\x04\x4c\x00\x01\x00\x00\x00\x01\x00\x0a\x4c\x5f\ -\x00\x00\x0a\x8c\x00\x01\x00\x00\x00\x01\x00\x0c\x50\x9d\ -\x00\x00\x09\x26\x00\x01\x00\x00\x00\x01\x00\x0b\xc4\xfc\ -\x00\x00\x0b\x1c\x00\x01\x00\x00\x00\x01\x00\x0c\x77\xa8\ -\x00\x00\x06\xac\x00\x01\x00\x00\x00\x01\x00\x0a\xea\x82\ -\x00\x00\x07\xbc\x00\x01\x00\x00\x00\x01\x00\x0b\x4c\xfc\ -\x00\x00\x09\x7c\x00\x00\x00\x00\x00\x01\x00\x0b\xe8\x63\ -\x00\x00\x05\x5c\x00\x01\x00\x00\x00\x01\x00\x0a\x8a\x34\ -\x00\x00\x08\x0a\x00\x00\x00\x00\x00\x01\x00\x0b\x68\x65\ -\x00\x00\x06\x0a\x00\x01\x00\x00\x00\x01\x00\x0a\xbb\x85\ -\x00\x00\x09\xc8\x00\x01\x00\x00\x00\x01\x00\x0c\x03\x69\ -\x00\x00\x08\x92\x00\x01\x00\x00\x00\x01\x00\x0b\x99\xb7\ -\x00\x00\x08\xdc\x00\x01\x00\x00\x00\x01\x00\x0b\xac\x7d\ -\x00\x00\x0b\x42\x00\x01\x00\x00\x00\x01\x00\x0c\x82\x6d\ -\x00\x00\x0a\x40\x00\x01\x00\x00\x00\x01\x00\x0c\x36\xc6\ -\x00\x00\x05\x08\x00\x01\x00\x00\x00\x01\x00\x0a\x7b\x49\ -\x00\x00\x08\x72\x00\x00\x00\x00\x00\x01\x00\x0b\x89\xe5\ -\x00\x00\x06\x58\x00\x00\x00\x00\x00\x01\x00\x0a\xc8\xe9\ -\x00\x00\x07\x3e\x00\x01\x00\x00\x00\x01\x00\x0b\x24\x7c\ -\x00\x00\x09\x4a\x00\x00\x00\x00\x00\x01\x00\x0b\xcc\x4d\ +\x00\x00\x06\xce\x00\x01\x00\x00\x00\x01\x00\x0a\xf8\x2f\ +\x00\x00\x04\x7c\x00\x00\x00\x00\x00\x01\x00\x0a\x55\x18\ +\x00\x00\x09\x04\x00\x01\x00\x00\x00\x01\x00\x0b\xbc\xa1\ +\x00\x00\x0b\x6c\x00\x01\x00\x00\x00\x01\x00\x0c\x8d\x3d\ +\x00\x00\x05\x86\x00\x01\x00\x00\x00\x01\x00\x0a\x94\xc3\ +\x00\x00\x07\x16\x00\x00\x00\x00\x00\x01\x00\x0b\x15\x79\ +\x00\x00\x08\x2a\x00\x01\x00\x00\x00\x01\x00\x0b\x7e\x27\ +\x00\x00\x07\x8a\x00\x00\x00\x00\x00\x01\x00\x0b\x3f\x48\ +\x00\x00\x09\x9e\x00\x01\x00\x00\x00\x01\x00\x0b\xfd\x42\ +\x00\x00\x0b\xbc\x00\x01\x00\x00\x00\x01\x00\x0c\xa9\x61\ +\x00\x00\x04\xc2\x00\x01\x00\x00\x00\x01\x00\x0a\x6e\x3a\ +\x00\x00\x08\x50\x00\x01\x00\x00\x00\x01\x00\x0b\x83\xeb\ +\x00\x00\x06\xf0\x00\x00\x00\x00\x00\x01\x00\x0b\x02\xe3\ +\x00\x00\x04\xe6\x00\x01\x00\x00\x00\x01\x00\x0a\x73\xb9\ +\x00\x00\x07\x5e\x00\x01\x00\x00\x00\x01\x00\x0b\x2e\x3e\ +\x00\x00\x04\x9e\x00\x01\x00\x00\x00\x01\x00\x0a\x63\xce\ +\x00\x00\x0a\xf6\x00\x00\x00\x00\x00\x01\x00\x0c\x6f\x69\ +\x00\x00\x03\xfc\x00\x01\x00\x00\x00\x01\x00\x0a\x2f\x86\ +\x00\x00\x05\xd6\x00\x01\x00\x00\x00\x01\x00\x0a\xaf\xe2\ +\x00\x00\x0a\xae\x00\x01\x00\x00\x00\x01\x00\x0c\x58\x3a\ +\x00\x00\x0a\xd0\x00\x01\x00\x00\x00\x01\x00\x0c\x65\xd5\ +\x00\x00\x05\xb4\x00\x00\x00\x00\x00\x01\x00\x0a\x9d\xc9\ +\x00\x00\x03\xca\x00\x01\x00\x00\x00\x01\x00\x0a\x27\xcd\ +\x00\x00\x08\xba\x00\x01\x00\x00\x00\x01\x00\x0b\xa5\x77\ +\x00\x00\x09\xf8\x00\x00\x00\x00\x00\x01\x00\x0c\x0d\x8a\ +\x00\x00\x06\x2a\x00\x01\x00\x00\x00\x01\x00\x0a\xc1\x52\ +\x00\x00\x0a\x1c\x00\x00\x00\x00\x00\x01\x00\x0c\x24\x3d\ +\x00\x00\x07\xe4\x00\x00\x00\x00\x00\x01\x00\x0b\x56\xfb\ +\x00\x00\x05\x38\x00\x01\x00\x00\x00\x01\x00\x0a\x83\xb9\ +\x00\x00\x0b\x8c\x00\x00\x00\x00\x00\x01\x00\x0c\x97\xeb\ +\x00\x00\x06\x84\x00\x00\x00\x00\x00\x01\x00\x0a\xd8\x91\ +\x00\x00\x04\x28\x00\x00\x00\x00\x00\x01\x00\x0a\x37\x8d\ +\x00\x00\x0b\xec\x00\x00\x00\x00\x00\x01\x00\x0c\xb5\x3a\ +\x00\x00\x0a\x64\x00\x00\x00\x00\x00\x01\x00\x0c\x41\xc4\ +\x00\x00\x04\x4c\x00\x01\x00\x00\x00\x01\x00\x0a\x4c\xad\ +\x00\x00\x0a\x8c\x00\x01\x00\x00\x00\x01\x00\x0c\x50\xeb\ +\x00\x00\x09\x26\x00\x01\x00\x00\x00\x01\x00\x0b\xc5\x4a\ +\x00\x00\x0b\x1c\x00\x01\x00\x00\x00\x01\x00\x0c\x77\xf6\ +\x00\x00\x06\xac\x00\x01\x00\x00\x00\x01\x00\x0a\xea\xd0\ +\x00\x00\x07\xbc\x00\x01\x00\x00\x00\x01\x00\x0b\x4d\x4a\ +\x00\x00\x09\x7c\x00\x00\x00\x00\x00\x01\x00\x0b\xe8\xb1\ +\x00\x00\x05\x5c\x00\x01\x00\x00\x00\x01\x00\x0a\x8a\x82\ +\x00\x00\x08\x0a\x00\x00\x00\x00\x00\x01\x00\x0b\x68\xb3\ +\x00\x00\x06\x0a\x00\x01\x00\x00\x00\x01\x00\x0a\xbb\xd3\ +\x00\x00\x09\xc8\x00\x01\x00\x00\x00\x01\x00\x0c\x03\xb7\ +\x00\x00\x08\x92\x00\x01\x00\x00\x00\x01\x00\x0b\x9a\x05\ +\x00\x00\x08\xdc\x00\x01\x00\x00\x00\x01\x00\x0b\xac\xcb\ +\x00\x00\x0b\x42\x00\x01\x00\x00\x00\x01\x00\x0c\x82\xbb\ +\x00\x00\x0a\x40\x00\x01\x00\x00\x00\x01\x00\x0c\x37\x14\ +\x00\x00\x05\x08\x00\x01\x00\x00\x00\x01\x00\x0a\x7b\x97\ +\x00\x00\x08\x72\x00\x00\x00\x00\x00\x01\x00\x0b\x8a\x33\ +\x00\x00\x06\x58\x00\x00\x00\x00\x00\x01\x00\x0a\xc9\x37\ +\x00\x00\x07\x3e\x00\x01\x00\x00\x00\x01\x00\x0b\x24\xca\ +\x00\x00\x09\x4a\x00\x00\x00\x00\x00\x01\x00\x0b\xcc\x9b\ \x00\x00\x03\x76\x00\x01\x00\x00\x00\x01\x00\x0a\x0d\xd7\ \x00\x00\x03\xa2\x00\x01\x00\x00\x00\x01\x00\x0a\x17\x44\ " diff --git a/src/Mod/Draft/Resources/ui/userprefs-base.ui b/src/Mod/Draft/Resources/ui/userprefs-base.ui index a24aa0db6..d64f95ecd 100755 --- a/src/Mod/Draft/Resources/ui/userprefs-base.ui +++ b/src/Mod/Draft/Resources/ui/userprefs-base.ui @@ -1021,6 +1021,26 @@ such as "Arial:Bold" + + + + + + When this is checked, the Draft tools will create Part primitives instead of Draft objects, when available. + + + Use Part Primitives + + + UsePartPrimitives + + + Mod/Draft + + + + +