From 634fce6e35046f41c2c3cd45723e416d3d0ac5bf Mon Sep 17 00:00:00 2001 From: sliptonic Date: Thu, 19 Nov 2020 17:10:50 -0600 Subject: [PATCH] fix 'add' button in Job task panel fix chamfer bit lgtm cleanup --- src/Mod/Path/PathScripts/PathJob.py | 2 - src/Mod/Path/PathScripts/PathJobGui.py | 12 +++++- src/Mod/Path/PathScripts/PathOpGui.py | 7 +++- src/Mod/Path/PathScripts/PathProfileGui.py | 4 -- src/Mod/Path/PathScripts/PathToolBit.py | 10 +---- src/Mod/Path/PathScripts/PathToolBitEdit.py | 4 +- src/Mod/Path/PathScripts/PathToolBitGui.py | 8 ++-- .../Path/PathScripts/PathToolBitLibraryCmd.py | 1 + .../Path/PathScripts/PathToolBitLibraryGui.py | 17 ++------- .../Path/PathScripts/PathToolController.py | 2 - .../Path/PathScripts/PathToolControllerGui.py | 36 ++++++++++++------ src/Mod/Path/Tools/Shape/chamfer.fcstd | Bin 12226 -> 12146 bytes 12 files changed, 51 insertions(+), 52 deletions(-) diff --git a/src/Mod/Path/PathScripts/PathJob.py b/src/Mod/Path/PathScripts/PathJob.py index ca6acf576b24..d68b24cdcb5f 100644 --- a/src/Mod/Path/PathScripts/PathJob.py +++ b/src/Mod/Path/PathScripts/PathJob.py @@ -103,7 +103,6 @@ class NotificationClass(QtCore.QObject): class ObjectJob: - def __init__(self, obj, models, templateFile=None): self.obj = obj obj.addProperty("App::PropertyFile", "PostProcessorOutputFile", "Output", QtCore.QT_TRANSLATE_NOOP("PathJob", "The NC output file for this project")) @@ -155,7 +154,6 @@ def __init__(self, obj, models, templateFile=None): self.tooltip = None self.tooltipArgs = None - obj.Proxy = self self.setFromTemplateFile(obj, templateFile) diff --git a/src/Mod/Path/PathScripts/PathJobGui.py b/src/Mod/Path/PathScripts/PathJobGui.py index 5c3d1daf9dfa..8e6781a2a2c6 100644 --- a/src/Mod/Path/PathScripts/PathJobGui.py +++ b/src/Mod/Path/PathScripts/PathJobGui.py @@ -25,7 +25,6 @@ from contextlib import contextmanager import math import traceback - from pivy import coin from PySide import QtCore, QtGui @@ -45,6 +44,7 @@ import PathScripts.PathToolLibraryEditor as PathToolLibraryEditor import PathScripts.PathUtil as PathUtil import PathScripts.PathUtils as PathUtils +import PathScripts.PathToolBitGui as PathToolBitGui # lazily loaded modules from lazy_loader.lazy_loader import LazyLoader @@ -866,7 +866,15 @@ def toolControllerEdit(self): self.toolControllerSelect() def toolControllerAdd(self): - PathToolLibraryEditor.CommandToolLibraryEdit().edit(self.obj, self.updateToolController) + if PathPreferences.toolsUseLegacyTools(): + PathToolLibraryEditor.CommandToolLibraryEdit().edit(self.obj, self.updateToolController) + else: + tools = PathToolBitGui.LoadTools() + for tool in tools: + tc = PathToolControllerGui.Create(name=tool.Label, tool=tool) + self.obj.Proxy.addToolController(tc) + FreeCAD.ActiveDocument.recompute() + self.updateToolController() def toolControllerDelete(self): self.objectDelete(self.form.toolControllerList) diff --git a/src/Mod/Path/PathScripts/PathOpGui.py b/src/Mod/Path/PathScripts/PathOpGui.py index c4ac06c29123..20e7dc678eda 100644 --- a/src/Mod/Path/PathScripts/PathOpGui.py +++ b/src/Mod/Path/PathScripts/PathOpGui.py @@ -545,7 +545,7 @@ def selectionSupportedAsBaseGeometry(self, selection, ignoreErrors): PathLog.error(translate("PathProject", "Faces are not supported")) return False else: - if not self.supportsPanels() or not 'Panel' in sel.Object.Name: + if not self.supportsPanels() or 'Panel' not in sel.Object.Name: if not ignoreErrors: PathLog.error(translate("PathProject", "Please select %s of a solid" % self.featureName())) return False @@ -636,6 +636,7 @@ def resizeBaseList(self): row = (qList.count() + qList.frameWidth()) * 15 qList.setFixedSize(col, row) + class TaskPanelBaseLocationPage(TaskPanelPage): '''Page controller for base locations. Uses PathGetPoint.''' @@ -936,6 +937,7 @@ def updateSelection(self, obj, sel): self.form.startDepthSet.setEnabled(False) self.form.finalDepthSet.setEnabled(False) + class TaskPanelDiametersPage(TaskPanelPage): '''Page controller for diameters.''' @@ -960,7 +962,7 @@ def getFields(self, obj): self.minDiameter.updateProperty() self.maxDiameter.updateProperty() - def setFields(self, obj): + def setFields(self, obj): self.minDiameter.updateSpinBox() self.maxDiameter.updateSpinBox() @@ -974,6 +976,7 @@ def pageUpdateData(self, obj, prop): if prop in ['MinDiameter', 'MaxDiameter']: self.setFields(obj) + class TaskPanel(object): ''' Generic TaskPanel implementation handling the standard Path operation layout. diff --git a/src/Mod/Path/PathScripts/PathProfileGui.py b/src/Mod/Path/PathScripts/PathProfileGui.py index cbd58ae75ac4..ff7b6d807f09 100644 --- a/src/Mod/Path/PathScripts/PathProfileGui.py +++ b/src/Mod/Path/PathScripts/PathProfileGui.py @@ -128,8 +128,6 @@ def getSignalsForUpdate(self, obj): def updateVisibility(self): hasFace = False - # hasGeom = False - # fullModel = False objBase = list() if hasattr(self.obj, 'Base'): @@ -141,8 +139,6 @@ def updateVisibility(self): if sub[:4] == 'Face': hasFace = True break - else: - fullModel = True if hasFace: self.form.processCircles.show() diff --git a/src/Mod/Path/PathScripts/PathToolBit.py b/src/Mod/Path/PathScripts/PathToolBit.py index 5b1b696594e2..a76150b59722 100644 --- a/src/Mod/Path/PathScripts/PathToolBit.py +++ b/src/Mod/Path/PathScripts/PathToolBit.py @@ -59,8 +59,7 @@ def translate(context, text, disambig=None): def _findTool(path, typ, dbg=False): - # PathLog.track("Path: {} typ: {}".format(path, typ)) - if os.path.exists(path): # absolute reference + if os.path.exists(path): # absolute reference if dbg: PathLog.debug("Found {} at {}".format(typ, path)) return path @@ -397,6 +396,7 @@ def __init__(self): PropertyGroupAttribute, translate('PathToolBit', 'Whether Spindle Power should be allowed')) + class ToolBitFactory(object): def CreateFromAttrs(self, attrs, name='ToolBit'): @@ -414,21 +414,15 @@ def CreateFromAttrs(self, attrs, name='ToolBit'): for pname in params: try: prop = proto.getProperty(pname) - # val = prop.valueFromString(params[pname]) prop.setupProperty(obj, pname, PropertyGroupAttribute, prop.valueFromString(params[pname])) except Exception: - # prop = obj.addProperty('App::PropertyString', pname, "Attribute", translate('PathTooolBit', 'User Defined Value')) - # setattr(obj, pname, params[pname]) prop = proto.getProperty("UserAttributes") uservals.update({pname: params[pname]}) - # prop.setupProperty(obj, pname, "UserAttributes", prop.valueFromString(params[pname])) if len(uservals.items()) > 0: prop.setupProperty(obj, "UserAttributes", PropertyGroupAttribute, uservals) - # print("prop[%s] = %s (%s)" % (pname, params[pname], type(val))) - # prop.setupProperty(obj, pname, PropertyGroupAttribute, prop.valueFromString(params[pname])) return obj def CreateFrom(self, path, name='ToolBit'): diff --git a/src/Mod/Path/PathScripts/PathToolBitEdit.py b/src/Mod/Path/PathScripts/PathToolBitEdit.py index 1f3f4c4c4d2a..7ac5e0c8742d 100644 --- a/src/Mod/Path/PathScripts/PathToolBitEdit.py +++ b/src/Mod/Path/PathScripts/PathToolBitEdit.py @@ -31,8 +31,8 @@ from PySide import QtCore, QtGui -# PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) -# PathLog.trackModule(PathLog.thisModule()) +PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) +PathLog.trackModule(PathLog.thisModule()) # Qt translation handling diff --git a/src/Mod/Path/PathScripts/PathToolBitGui.py b/src/Mod/Path/PathScripts/PathToolBitGui.py index 30ba0e164816..12d11241dea1 100644 --- a/src/Mod/Path/PathScripts/PathToolBitGui.py +++ b/src/Mod/Path/PathScripts/PathToolBitGui.py @@ -41,8 +41,9 @@ def translate(context, text, disambig=None): return QtCore.QCoreApplication.translate(context, text, disambig) -# PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) -# PathLog.trackModule(PathLog.thisModule()) + +PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) +PathLog.trackModule(PathLog.thisModule()) class ViewProvider(object): @@ -141,8 +142,7 @@ def reject(self): self.editor.reject() FreeCADGui.Control.closeDialog() if self.deleteOnReject: - FreeCAD.ActiveDocument.openTransaction(translate('PathToolBit', - 'Uncreate ToolBit')) + FreeCAD.ActiveDocument.openTransaction(translate('PathToolBit', 'Uncreate ToolBit')) self.editor.reject() FreeCAD.ActiveDocument.removeObject(self.obj.Name) FreeCAD.ActiveDocument.commitTransaction() diff --git a/src/Mod/Path/PathScripts/PathToolBitLibraryCmd.py b/src/Mod/Path/PathScripts/PathToolBitLibraryCmd.py index 12fc57f7d539..3d18989ee5ea 100644 --- a/src/Mod/Path/PathScripts/PathToolBitLibraryCmd.py +++ b/src/Mod/Path/PathScripts/PathToolBitLibraryCmd.py @@ -129,6 +129,7 @@ def Activated(self): # return True # return False + if FreeCAD.GuiUp: FreeCADGui.addCommand('Path_ToolBitLibraryOpen', CommandToolBitLibraryOpen()) FreeCADGui.addCommand('Path_ToolBitDock', CommandToolBitSelectorOpen()) diff --git a/src/Mod/Path/PathScripts/PathToolBitLibraryGui.py b/src/Mod/Path/PathScripts/PathToolBitLibraryGui.py index 72786f1a3f9e..a0a52f0de386 100644 --- a/src/Mod/Path/PathScripts/PathToolBitLibraryGui.py +++ b/src/Mod/Path/PathScripts/PathToolBitLibraryGui.py @@ -36,7 +36,6 @@ import json import os import glob -import traceback import uuid as UUID from functools import partial @@ -130,7 +129,6 @@ def __init__(self, path=None): self.path = "" # self.currentLib = "" - def __libraryLoad(self, path, datamodel): PathLog.track(path) PathPreferences.setLastFileToolLibrary(path) @@ -153,7 +151,6 @@ def __libraryLoad(self, path, datamodel): msg = "Error loading tool: {} : {}".format(toolBit['path'], e) FreeCAD.Console.PrintError(msg) - def _toolAdd(self, nr, tool, path): strShape = os.path.splitext(os.path.basename(tool['shape']))[0] @@ -176,11 +173,6 @@ def _toolAdd(self, nr, tool, path): toolShape.setData(strShape, PySide.QtCore.Qt.EditRole) toolShape.setEditable(False) - # toolDiameter = PySide.QtGui.QStandardItem() - # toolDiameter.setData(strDiam, PySide.QtCore.Qt.EditRole) - # toolDiameter.setEditable(False) - - #return [toolNr, toolName, toolShape, toolDiameter] return [toolNr, toolName, toolShape] def newTool(self, datamodel, path): @@ -196,8 +188,8 @@ def newTool(self, datamodel, path): nr = max(nr, itemNr) nr += 1 tool = PathToolBit.Declaration(path) - except Exception: - PathLog.error(traceback.print_exc()) + except Exception as e: + PathLog.error(e) datamodel.appendRow(self._toolAdd(nr, tool, path)) @@ -388,7 +380,7 @@ def toolBitNew(self): return filename = PathToolBitGui.GetNewToolFile() - if filename == None: + if filename is None: return # Parse out the name of the file and write the structure @@ -569,7 +561,6 @@ def libraryOk(self): def libPaths(self): lib = PathPreferences.lastFileToolLibrary() loc = PathPreferences.lastPathToolLibrary() - #loc = os.path.split(lib)[0] PathLog.track("lib: {} loc: {}".format(lib, loc)) return lib, loc @@ -582,7 +573,6 @@ def loadData(self, path=None): self.toolTableView.setUpdatesEnabled(False) self.form.TableList.setUpdatesEnabled(False) - if path is None: path, loc = self.libPaths() @@ -600,7 +590,6 @@ def loadData(self, path=None): self.toolModel.setHorizontalHeaderLabels(self.columnNames()) self.listModel.setHorizontalHeaderLabels(['Library']) - # Select the current library in the list of tables curIndex = None for i in range(self.listModel.rowCount()): diff --git a/src/Mod/Path/PathScripts/PathToolController.py b/src/Mod/Path/PathScripts/PathToolController.py index 11fe248b4f2c..45e468500fd9 100644 --- a/src/Mod/Path/PathScripts/PathToolController.py +++ b/src/Mod/Path/PathScripts/PathToolController.py @@ -98,7 +98,6 @@ def onDelete(self, obj, arg2=None): if hasattr(obj.Tool, 'InList') and len(obj.Tool.InList) == 1: if hasattr(obj.Tool.Proxy, 'onDelete'): obj.Tool.Proxy.onDelete(obj.Tool) - #obj.Document.removeObject(obj.Name) def setFromTemplate(self, obj, template): ''' @@ -177,7 +176,6 @@ def execute(self, obj): commands += "(" + obj.Label + ")"+'\n' commands += 'M6 T'+str(obj.ToolNumber)+'\n' - # If a toolbit is used, check to see if spindlepower is allowed. # This is to prevent accidentally spinning the spindle with an # unpowered tool like probe or dragknife diff --git a/src/Mod/Path/PathScripts/PathToolControllerGui.py b/src/Mod/Path/PathScripts/PathToolControllerGui.py index c290abb29924..54daefa5cada 100644 --- a/src/Mod/Path/PathScripts/PathToolControllerGui.py +++ b/src/Mod/Path/PathScripts/PathToolControllerGui.py @@ -35,10 +35,12 @@ from lazy_loader.lazy_loader import LazyLoader Part = LazyLoader('Part', globals(), 'Part') + # Qt translation handling def translate(context, text, disambig=None): return QtCore.QCoreApplication.translate(context, text, disambig) + class ViewProvider: def __init__(self, vobj): @@ -122,7 +124,8 @@ def claimChildren(self): return [obj.Tool] return [] -def Create(name = 'Default Tool', tool=None, toolNumber=1): + +def Create(name='Default Tool', tool=None, toolNumber=1): PathLog.track(tool, toolNumber) obj = PathScripts.PathToolController.Create(name, tool, toolNumber) @@ -172,6 +175,7 @@ def Activated(self): job.Proxy.addToolController(tc) FreeCAD.ActiveDocument.recompute() + class ToolControllerEditor(object): def __init__(self, obj, asDialog): @@ -180,13 +184,18 @@ def __init__(self, obj, asDialog): self.form.buttonBox.hide() self.obj = obj - self.vertFeed = PathGui.QuantitySpinBox(self.form.vertFeed, obj, 'VertFeed') - self.horizFeed = PathGui.QuantitySpinBox(self.form.horizFeed, obj, 'HorizFeed') - self.vertRapid = PathGui.QuantitySpinBox(self.form.vertRapid, obj, 'VertRapid') - self.horizRapid = PathGui.QuantitySpinBox(self.form.horizRapid, obj, 'HorizRapid') + self.vertFeed = PathGui.QuantitySpinBox(self.form.vertFeed, obj, + 'VertFeed') + self.horizFeed = PathGui.QuantitySpinBox(self.form.horizFeed, obj, + 'HorizFeed') + self.vertRapid = PathGui.QuantitySpinBox(self.form.vertRapid, obj, + 'VertRapid') + self.horizRapid = PathGui.QuantitySpinBox(self.form.horizRapid, obj, + 'HorizRapid') if obj.Proxy.usesLegacyTool(obj): - self.editor = PathToolEdit.ToolEditor(obj.Tool, self.form.toolEditor) + self.editor = PathToolEdit.ToolEditor(obj.Tool, + self.form.toolEditor) else: self.editor = None self.form.toolBox.widget(1).hide() @@ -201,7 +210,8 @@ def updateUi(self): self.vertFeed.updateSpinBox() self.vertRapid.updateSpinBox() self.form.spindleSpeed.setValue(tc.SpindleSpeed) - index = self.form.spindleDirection.findText(tc.SpindleDir, QtCore.Qt.MatchFixedString) + index = self.form.spindleDirection.findText(tc.SpindleDir, + QtCore.Qt.MatchFixedString) if index >= 0: self.form.spindleDirection.setCurrentIndex(index) @@ -224,9 +234,9 @@ def updateToolController(self): self.editor.updateTool() tc.Tool = self.editor.tool - except Exception as e: # pylint: disable=broad-except - PathLog.error(translate("PathToolController", "Error updating TC: %s") % e) - + except Exception as e: + PathLog.error(translate("PathToolController", + "Error updating TC: %s") % e) def refresh(self): self.form.blockSignals(True) @@ -296,7 +306,8 @@ def resetObject(self, remove=None): def setupUi(self): if self.editor.editor: t = Part.makeCylinder(1, 1) - self.toolrep = FreeCAD.ActiveDocument.addObject("Part::Feature", "tool") + self.toolrep = FreeCAD.ActiveDocument.addObject("Part::Feature", + "tool") self.toolrep.Shape = t self.setFields() @@ -311,7 +322,7 @@ def __init__(self, obj): self.obj = obj def exec_(self): - restoreTC = self.obj.Proxy.templateAttrs(self.obj) + restoreTC = self.obj.Proxy.templateAttrs(self.obj) rc = False if not self.editor.form.exec_(): @@ -320,6 +331,7 @@ def exec_(self): rc = True return rc + if FreeCAD.GuiUp: # register the FreeCAD command FreeCADGui.addCommand('Path_ToolController', CommandPathToolController()) diff --git a/src/Mod/Path/Tools/Shape/chamfer.fcstd b/src/Mod/Path/Tools/Shape/chamfer.fcstd index a6acac7a43e4bfea165ec6220d2c056139d9b551..e56a1359d4d0ab4f8ecece0d9e11ce940360a23a 100644 GIT binary patch literal 12146 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 B#6kc7 literal 12226 zcmai)1yq~O7OpAoP_z_xheDx9p}4!dOK^f~p}4!dyE_DTcP(Bh?(T5uIqSdw-=2HU zovf^6WqnWP&CI-$J$rw$5)hCWU|?XdU?-8*a^Lc>G<1-`z$|>hzz|Rur#u= zXK=Q(IMULvn-<0L*ikWg>asdoR6Zz=98o0l6;oRHKqlLPkhfr)-5I4BEvf7INJ zU#T`6#-U_K(Jf-+{Ca=c<8XTvR_#~%$@}SH>Bd7>T#b%U@bHnk-CL|9|+dg)*_4xnX2+{uCE3ztbLPq z5S-Gj5yC?XZ&^{hG7z{38L?nsYR8OrA=n^@VatFxcu0zJ@j>~CJ~rTBHT|@J z&cnlHoAxcO!Rlg~U^+G@Arae++XDzyoHN=JhUAI-=kv*4QppJ-_l9i=-9pH-L`Q92 z(I+>A;io&`+Jz-;Z2=>0d!iI|UY-Rf8=l3bjqEcVuL-Mx;IxAliK~||4ts*2KC+Mj zm8nX$b0!T;^mX0=SE>}D1^ifJ6hN^?~2h>CHo25JZzq& z&u>IGA|r`|;CN?H468oAN&SqzgrpvAbkTx0zTqvT}A{WqX^a1n$nET$(6$ROv&%BYhA>AryI0Au4&D95E_ME&-CZ zt3u#dZIyhUs-omUYeT!+g%R0d@C7zPMavY_T-vnakMk6KX)9b;UC(V`YPXguZ(V2Z zT0!^ZZTH>f)olPe3)s1fk{@FUjr;xM)ylH1#HDuUd;ueEiMz3)X-K$zBnG~|>DFvy zLU^Omk^L>bIiS%*BO@GS^n@rue^6kbNS_SN{~hcFN8K!VF0R&Q*LW ze#&AIi^AX{A;gjzs=!hYuijc>kHfO0%q)e@5}rkCA4AWzVH>BeK!=T!bv%g2(&`h7 zOyIyZ3Uaj0pyrgNr>{VoK*LY?vdi$2Igw)+i+ePf-LXQ_x1sV+IPfBV1**)Pg@?IG#)aaIvd) za>An<~=P^N4R>#=R22(L; z*XL(cwq3Iz6LVHI9S`zTYtJJ%%|vjZ(eyA-t#Dd3sqmdBNZ~f!k^A zabfHxGU%`yDfj4n^WqKh4AlX!Zznd@Syc}SZ56iVxk(a{5n~G26v6bxSw0r=DLvj@ z)Ug09zkfQW&z1RjvCrQ_nAXwcxGg>4$d^D~mJj4mn3O{krjZIzD|vv5&Pz0L;!+B> z^|z!^u(n`S!digGY;e~Q$21rY> z&L540UtMrXing0|@b4jRu#$dC_Y&7T+aQLX#5|PFedINl(S&i`m+lgR7ld^az5sWod zpvVuFs_D7Q*$0&dM;oJc&yZni2n1aOoPD|0nq74Ql5!D^9|bfLGLB1G#&D0X(5DZx z;oNXFn9NbMHD8$C{9peYC z`;=q@;l4+UB->~IT0nDiucHfK3uHxgjF0$`HddUtPtw@1rE79Z=k(^}t)2G%-KyOx z{$>l32AY81RxS^oVAp`Wp@xvTt{Xrha_1fz)GX z(M&Ok{_yTlu@@}2@SV<|nd7^_`3)%KvnOUmDBPuYly6s)IfvK%fEz@TIAYq6))c-C z^&bRqrgEhA?B3;Fi5s%(Hz`~eAp$gLx+Pe8g>)#@SXo4(g@LIe=&XjmB%FMjPC_2& zrerwTG$Hwh#XxLvip-UKFrJ2$l+$ZJpjVGA))e^YCLoxV=yWWJ6j#!lgB@F8WDsc| zrLtEuTvx|D#D!VjP(Vpgh;@CJOs>=j(}6CqK8PbYR#~55b&>nPxbhgS3?m-r^a?}G ziT2{nXGk}7y$Nx#C+a|#b#u$M>R}2cS|*gUj+vOV^q|=2L>RP;NPQ%KCj4o8|Y^)MS{XO6-4p)eSLxmSm z9Ib^1FfU7pQ=Ls+T>eh*6NVTJxpEPVde&QWU%^>P0eLd88mWD1-Tj5uq$Nh*+jdcn zFI5!@ZH$@Fy#%ojBjOM?CHYwgG|zF85Q6E+I9ysyhZKi``sbo^EMf{mv$Ak=al%cH zq&H~D8HFj8n6xxau?VGwbaR}OgACOqAV>8dzU3tQaJk1nt3yur)^p>&sPett;5S6uYa@6^Na!BfM2MREs8N4$KNc#TGArKArHtF<-(u7Zv#6ZDEoxikKTR z|L&N;#?ZvSaPtu>GYYYgpBxU$dbG4j$Bv!B+TAj~>L959yU4>)oB3!|D|B$}_}C-* zmTjY^c7^zCys}!FPWi-|ag2f=D0M0*z7GhX=0)rpS5da$3()&So|c2;%a1nY0LX0U*}K32$X4Ghna$8rlP*=hl1T7=?;~K zdgx*`@%LtOjR1VDvzGj^&SX%iNCGmOhzPg`<`~mqPwtk9lS!UqfBz-pXs#MGggZhydHp+$=Z6UjB8#R zXiv}J+r=2XwcaPnC6f_|!vec;n#FOh^$pjgCv_gZT0KpCU7=!w<&FjWw_rP^uA8$` z2fj3AN#{W+R9~0w+B_#!N7^pF#(Y8Z&|$zv7zc=GmF}1tXyrx8Iiw!0Ha{b}{=#(4w;IOz0Q;fgJUTl$^Bzbc&Y??uC(BKkP<~G^;)k(w@XO!DvmjCSGWvht!}&T$Yg! ze>E8-1RfEq@Ei+=`pk(if6@?K`fvjpvrZZ2tTqp@k=wBzNA9Owg)C>oo|kwcl>O}> zs__PCoEHKNEC(A54C(bCDywH}uVA7FG-A-V1+J({SucG+Y`sv~ZS1Wf-XA`%5(Q1S zeS=*2ZqodT7ZqDfJ@dsQHrm*c%qiFh+%&Aq0WpYVZ8L|e`&OT`Em5;t?P7v1xf$T- zr?XISFn;LPsy2IF{&8qc1PkFjkZx}X^N@XnP z#QWzV&b&c2T`q>anqU1-Whzqo&t19HzHugXKgr|c>V*elxOhlTc{wngM=l6r__2hQ z%7*uINFwMn_T??`n(hcXE;&HP{?#0qUY(o1=mS5>XS>hWg$A_kqbl7aKW9(CEEUH% zSRCnc(uhV!u1r-FT$yF!eYc;o zX1p@Bsf3|O^@Nce$jlE#tI+Vbvvlbv$$6<0 ztL<*jO{rzuSLeqzRpzrCl7uRr`{p!7_dTtQGvcM_yQB>25DL?zAbVFOKf$Lf`%hw9 z2@2~w?Fpy+2t~9S@yW;D1e!`x@Rin{F8!uajWyRpH?@jQ#?ue?Uhw&mK!;`?r%ee1Xug>E^F4^dH*eMlqMmgj6WA&<>e-|U*gWX~$2vV` z6CKST2_1xje4LPFi6SRC#H*LrL{8nFH{J)N!s8S;>6qJc?CbZ3+Sz0DQ=9xyl}0ja zV1;Lsa3PZ~>U^jmDDqh%mKPBfy?gL9%?YF6*8oE2BL$TfouSwkN+tt&)2@)eL+mrl zXob(MNf@hcpF9~(-O^utp`5sk3R*W44gf_;;)&)<+-ogP+mN#!v3}hZ#a)Jzb75X- zO}WP5JVwr4k2(~IFs_}nTL;_*6Op|0$F~I|At-@O3q+vqLIj^gAQ3}h$m(K@>@0{H zg3C6Hhs?_M4jeHNILTcXMS`qS@;3N%W9zJi6e~;rr9s~$q3`g@o@iNPTFWt9*Y%~M z+St1z6Vc}J=We>)O`;{b^&;5B>N-Pl=QAdCwC@@A?^bgiNI{=|0|s^s3kLR@`uW>x zOuxL=sw5}V^#RqRU1w6n$ZD@H?|=aAG=CB@dmMo#8ddmRHY6t8))R%_hpgm63gV?pkoKV}AdH z$aeKN1o0yA^6Ml;&Z=Y_0X{#hYCPp5$|4CP$|}FL@KgI4Pu3=a;y-%ecjB)Xu@`-) za)&Gner_->NT5PcfJ!J4B>d<@uGnzgSfRJm9=|L}%P(lKSnRk$y*W3|)%T)tut->lJ- za}kXPMXsk%Q*~87QvrrZj^t}*LNccw!`E>x4`0&9s5)K{d79V@dXi%cB>O}jh*&^M zj)Ug@ICIP*o>_i8_xMK>5h91-v5#$T2g7zfulZo1xH8CEw$+U#6{ldyh2Nf$5TK2v zPHUOUry^buij?Fw)^tD;zHW(iYS=>>vnM%d$}U7+LGwtX#=HDHpdsx1(#K1Qanc`j z(B;3$rh8m6%Kb!;Dtf|p=3gCtdUzte-`Ne`Ap_1#)imtJoYRgK6_@U{lm77ad%zD9 znD5s}zfb?5iukSk>rOlQ?vLqb{x$tas!LX{TkY2!m0g<DtJb@f`)AFJ71+EpQ|QFlpEb-rp87;ak;x^r4ZWO*sBRp~ zvyzFWv<9_RoyD@lnPqHzl~Qd)CT;SoC5vX?-vQ$0D7?36@k8Oq2GnQ65VTWTzbz9Z zFPpTJO-uR(viitOpc9xW+?|OwKrnhhxZNpkRfj-G|R8Hnp zHRqR-=!7I@g5NBgm^^=Wj&6=`it<0Oje+*iGSlgj1qPlY1GfUIqh`0Gn1jeZb-YtG zbT=hJ6G6V3HZ<&cx|7Hi-QXDuM6BWj{ph8jgxSckB{h!_JWBQa2k5orhFc>BSP?YMf_&w zdO}f)dmWp%eCu%;@Gah|ykWs6((9O%r%X)u_Fdg?LoVOlCgV%s;h{pNZxN3T<#+Tu zrb_z-+pLOL`QEcku^R;1BPwR4i?Kkj!tzmM;B}mFZoCDO5n`YEhv{K_#&H>C<`(2K zdQUq^qHs~Nd+1sel;r<`Hmu2bP?K~!Gy%hIbi1iutXkBU*=X@1$o~=7*E0qn;Kz^- zK=I~CBpBrK>D@x{Vr1#^@(s>Rfc;WmrD5R=+69ZQ&jBT*q=5www4VI#J_onWR^wOq zRp9*LzK{QQ-{7nJP+Ko(oh{15*GU*Sp&ecKq1i>py<<3`5ou4+h&Wy$Q3WUk8jkkG>q0DpzBmSz{h!Q)V+9&7sU28i8`gmtDHs#I?O}E%w^i9id zxKHsd%lF7HN2~rRTisSP+-Rl`CdX<;RNefhE(&&QIaer`pGzDeu*M<03|$`DH}= zH-SoJ{Urn_aSRp>1sq=3;~m%W&>kS2?4`P7?ZieC;Z*$ChR4)?vybj30QPmiQCWT7RF+;EB;Elwy(ikO<@EM@E zeSN9y8~A;OZ%W9?D9G7~S)1@&%0hdLFz<#2RU@-_5po$vA8i)tE@6XvRvvbGXKj@k z^Hc7QVaXPpYaW$lc$G$zdOMTIC=#-6xeUvCYr`f>XlTNUnm^SMe&?x{Hb@Dg3Z2S7 zAHy-hY`Kg(_B8QvkyCzDsn#-G(NK_g2!8wXNiY??asNe1l8_ ztF7m@k(j<*dF(s9F&uPx(OUxuN0;t&f9@oI0ne7B^&c=*$up;~v1oXfqcX6D_n<|C z-g%UnJ-?5`@?Ail1zC_omV|9L=a9^fhQgs&$hPCL%nZF3A`K7QyS}<<^b7t`% zZ|?)ng03jBNjGuHH!};*A(&+kTO4p)e70p|p3Z&x>P-6%zCjk zhE+!>T$gLrWalDX>ZctNSn!3?Z>8W`av{Hv^)aNa0|ntxdZwZb;L^B#(~X-TMAju3 z1eT-mY5b5#Xf2~FQk3Uflz#E77UePiQ|9H4{(Hij=iSOr#s`D5aA6FGvLIB{+; zO^XI$B_?YNQO-*!4X}JuqZz0}8)Y?={47sA3=R{mxkRBx#82??$T|DXi~5hXZ8eRo zn$5#EA2hlll3*;{Zv@sqLIJ_Dz;`*mp;$VP)^p*rg?4&i5iG!OP>MRPcR2m-$Z8Ay z%#qhn=-vSg4COT(5^*s7qY9?5A&TK~qjFiT^qG-%8ywEYC|@>pIKDi-F??)T5hBbG zI$Du3^KkC@hC2-b5;1z>jn6gL2)q3>NBU)x=hyq)?oHsgK3`D2a&jk0Pa2%#Aa?{75{ypa&A`HZZCoW?@Iy<|&1)5;cIU65% z7mZR@bJC?IC-NbaupZfa2)J@I8BUH)x`QW43TO9Xh}+=As0PU|aheMvkn7!(*L`l> zV4v~sG92FSFOUwWd?g^PIgOl==y!CI7f-&n-^avR@_9>IYLCj*mtlv>MeBb0_+lk_ z4ir18`c7UO#2qTl@0uGa>*;q(hY{)EcJpNWjb5I=M<>nxAn(@c@uYJI`E`3;-UD?+ znGZF-p+m{2yRExbq5QEK?nQU~KH{h!?VJKxcH*^|(tQdSW3WUJ8+o8-{c}!2IP^9U z>ABeA{rk;M*tWH9h=d*-Rs+@A{m`K4Dif;Q5>wC^n9SG_1CYe4Tmj(|_7&T3Xp0GY zkJ!cFgTBkp^ock+#lCONnRI>j?_CFjB`1p$2ad~ zp{&ccq~c|-t1Ief`;j@SU_ME?7yJ+eTzL$@O|GA2SNYT(gE#Ofq$`E__skRqe2}i{eTUkkL-&=q-pu`;6ahlP5Z5&{9^C zc7A2qeD0qTbqJ4;Ken*w)BL&hrYC8y&pj`%_Wqb9CB$_bjO3uH*B~jd3~E7wdh~OL zmHcBQ6aVsiOThNmHJ@0q`$Qgk(`Ao)97xq7gZVr~^1gCRq4-NK{dwvzBypSS=`Slc z)R!CCp>%ZP)Z`X*p*Gjz^~PZ}fYkB#0D)}BNpTCVF=M<3GsjksY-ixUIr&X3m@x}`4EN1 zvs+$O%CKh%W}Vq?alS3g;sIHQ%2e{~hklQ=()gxRoKwZPHZFMn?+U{j=zfni9BMdy z86$Vst!E}69EIU(DvEJZm~FEamwpf)!|ojXYQ=D(RfJ`BB3T zb*6aq%1>)4T^*mnc65r2ydfwLx+0=@0xwF*=b3}yX!1cU9)!nt0^O~kU6%$a5AaOy zk4rRkZ4uZq%59H)9tV_XoU*_{UqXd2`mXo!@ICo@NMTU`r~F$mQQsCs;SYma)}fX) zZbBfij($XtEZ$JH9-lmQ^9XxBSvc!_w|DN6dvAv~UEUQ39W0xbZq6z*kHhy)A`OIh zGR+j--tKjK?nlBUdX&;^8C_TSR5IOCn<|FMa;f*6E{-Wz~ULx z#-|O3{}eA#X>`!0AXBNQs?L6gDKL$hGZccOg)$Vk*fYwQfgtgbM2m_Z{&T5O7f<*&xmGTcqI`#Uwd4^tLt$}?+ z2()Dtg5I3UAjtDtoC{mBnmLGE18_U33M9gL?K}e2HgT^>0qVQS_$EUNx)+tj*2RXg zA^x}<{q4ftpR%yIu{bDCdQe*u_0btR@QfUzsfMLD8O>MVi9*1tc`s+}Qv%Y)Ee0zb|3~G`#kO754g<s zY0i?bOwjzm2Ylat4#i_F|goII>HD%)hOElR1zqh)rVrt+GPP#Yy zz|_o=fVw8X=&4%gDi0+?BkVo*KkK~QdDhtWO!C_4==y!k!w2}ePy>xBXXV}%9- zd(8!a*_$|6>RaiVTG%lv{`HmtXazVxJhj`|ir&!I)m^{31j2z&ArXyqLXv&eZyS9h zp9)0~)ysSLLNs!lXRbgA0dZg_gWVq)%wY|jZ+rh`3WjoBnznn}&?`dx{lwUHY$BI2qXS%R(U%y{iaz~@*|@#9dUK1gh6I6i2$ zcxb*pUknBcBRMKus#F&$J-7v-5B+JVdN$Mi>=;yso1(>NIza@P{kosPEt9_6clcl$ zejXu4XXT($W*+9%C+}L}WqeolN&2V0DjpUAf%DqjBIsehgrA9t$?suSPaTB>oCe}@ z^O|Mm-TS4b`S#YjtF7UL-tqCf`+KX_G`DBFk*leN13%_|1VGi*bDE9E77bBjuC9lE zOn7b<;+j5Ec{kME-HD9Md_sJ@~P0-Q` zPlO!wtSl^L2hLA5PxDw}UwNFr2%U%7&XYiehhyJdD-*7}RJwQG-#)cpx4u{wyiE6~ zXlbo5ud+_`_fwL&^!7D`#5ZL~Kfg^h9_pSe?a)(s8Q*~-1t8|k56#WZfu7Fk!fWDt zD@CN6X|BI8J$Uv%g)%mjf8?&-b>lL)e`#-Tw|2ixR5CDCcXf4fxibhcch9gGX}G}D z7?OGDYPoydyX)LJa#^-Lzwm=96PK3>39Mv?uRL^nQ5%eP=o>n?o1ATus8DRVzuyC0 zmVt**>Uk0n?x+L@htxbAMB%@MwdcRQZkZDds_#)7E}p}+7#p`6Opd0^OS!FZER&m) zdJ&^(OHkrU!O(Uu1Eo+hTru$g$bF_N2nl1H)<&1!*Bv{k|E%gA&)`zicWL{!VsVkw zgSew}(XOe1VxPbrQIlH6P!P&(o}Vh!>rbzd{`jn-8&$(vd}7ntY*2%MrBf?gyi(l6 zpF`U()WiDn{AE_?=<)o*n?IZqx*A?n^O)ylZpm7uT$8$zDhSDw@g}jt_u?FWdmfp5 z&EuHS(ew7`((rj;)Khva=Cf?|!|}tz!wN)%YO|C?S@awicaaGD$V{-4|1n)d%J?0? za2{8*mh5<;VSHRjL*v1(`^CVO*K=(({pDqT-fGXt5p8}p_IeI)sr7g}zT)%f0|D+S z-JJ7G`^25Jn?-HM&iMHF1HGpvHCu+l_N`F<$EU2p;V`!THU^f@FKRjFQNpt~PSxJ^ zN;=x^a`pPIWm}nQ_m8QiE0+=0l*{Hri$}v6nr&ur2_8>vi~TY$5I$wOnTi1A7@65s zx3c98IrDC1oz@=3Y|FlJ=c~RRTsP-&tNlG}7+2w^;kk=2Hj-~+T&|Z?A1uBw9Mz?e z@2l^UunV~AZ|(F>zsM-xv`11cO_(oL)|_9|C=`IwRj`H>#}Q7Fm<;;7yAQD4pPX*H z3tk8bnAcc}k{tw^vvNvHB^e#(qmH&&UHcA$>*NuhS7&&*P3s>@jl#j*Xm}bNMrum7 zHryyGg-1G8pP!eim#l{=iom8PI~m%vT8aa3FRnks*OIw5re*-lpPcSrt^+mb^Iw*1Vh2OlRKXQ|m$@Rmr_4YmB1D)rxv| zq-(!r-}wVHSI5lq-Nw$&4ourp$O?4dZH12VS+HlR!!6GYE!RT3-co%%Xzu5?D;u}8 zYr^!qP*3jeldw9?b^-_l2vJi6hNUkdHSX%&_v`8bw3P(9r}kHNYCEwLkYK-W{qXsj zJ#epE{_C;#-?x358XG&<83|ZhSlb#Hf_Z-gjJ?(cek;&T2xAESy8PGkSJgn$)au{Y z^V!3#iW|7x{f zzh3^C+K`p_o&2)~`)>{mtkx^&b;f_I$o`4`SyTEOy?px*^j{UGKiNME5`VK7=>K5< zRi5~h{WG2VH*51+NdCW)|CL<*ll?RC^EV5D`yXkbKjA-vr@!Gx(*GVx{rN5bTui@i zzy7P$dfia}zViPh|GA`o+3~Md>qSHJ=lcI&?62kcSF82Xer5kK>7VdFCI7PLU#-?F z<`w?Utbd~aG~Dm~_Wy@wrvC;1vcq4k*6Z;ZA}rJ-J9aWF8{*T?X$65Z=Hs9?gjMn(dBf<%8=_x}KFq;o(3